Different behavior of ping'ing INADDR_BROADCAST?
Bruce M. Simpson
bms at FreeBSD.org
Sat Jan 6 11:05:24 PST 2007
LI Xin wrote:
> Dear colleagues,
>
> I have a strange question about our way of handling INADDR_BROADCAST,
> the behavior looks different from all other operating systems I have
> tried, except Mac OS X ;-)
>
> By ping'ing 255.255.255.255 from FreeBSD (mostly RELENG_6 with some
> unrelated patches) or Mac OS X, I got response from another subnet (I
> guess that there is some configuration problem in the network, though),
> but no boxes (running various operating systems) on local network
> responds the ping.
>
> However, with OpenBSD, Linux and Windows, ping'ing 255.255.255.255 would
> get response from local network.
>
> Just curious why there is such difference. Literally, I think
> INADDR_BROADCAST is supposed to reach local network nodes, no?
>
With FreeBSD's stack, sending packets to the undirected broadcast
address INADDR_BROADCAST will result in the first ifnet with IPv4
configured and IFF_BROADCAST set being selected as the source ifnet. See
ip_output.c for details.
In my local network, pinging 255.255.255.255 from my FreeBSD laptop
(running 6.2-RC1) results in a single unicast ICMP reply from the edge
router, with its source address on the same LAN.
The IP_SENDONES socket option may be used to select the source interface
for undirected broadcasts, by sending to a directed broadcast address.
The stack will munge the directed address to 255.255.255.255 before it
goes on the wire. This came from BSD/OS; See ip(4) for details.
You might want to take a look at NetBSD's stack, which has recently had
IPv4 source address selection logic added to it to support schemes such
as link-local addressing (Zeroconf/Rendezvous).
It would be great if someone had time to look at this and perhaps port it.
Regards,
BMS
More information about the freebsd-net
mailing list