Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Jan 2009 12:33:13 -0800
From:      Chuck Swiger <cswiger@mac.com>
To:        Peter Steele <psteele@maxiscale.com>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Do UDP broadcasts work in FreeBSD?
Message-ID:  <69A0F543-74D4-4D38-A0A5-A0EDE87A3DBB@mac.com>
In-Reply-To: <2ACA3DE8F9758A48B8BE2C7A847F91F2479DF3@polaris.maxiscale.com>
References:  <2ACA3DE8F9758A48B8BE2C7A847F91F2479DF3@polaris.maxiscale.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Jan 6, 2009, at 8:49 AM, Peter Steele wrote:
> Our efforts so far indicate the answer is no, which baffles us. We  
> want
> to send a limited broadcast to 255.255.255.255 but the message never
> arrives. The same code works fine under Linux. Is there a trick for
> doing this kind of thing under FreeBSD?

What you're trying to do with sending to the all-ones broadcast  
address is known as sending a "link-local" packet.  On some systems,  
sending a UDP packet to 255.255.255.255 will actually cause a packet  
with that destination to be generated from all network interfaces  
which are "UP".  That seems to be the behavior you are expecting.

On FreeBSD, IIRC, the behavior you get is that it will send to the  
local network broadcast address for each interface [1] using the  
network broadcast address (ie, if an interface is configured for  
10.1.1.1 with /16 netmask, the packet will have destination  
10.1.255.255).  If an interface is UP but not configured with an IP 
+netmask, I don't believe a packet will be sent.  (In fact, it might  
depend upon whether the BROADCAST flag is enabled, which gets set when  
an inet-enabled interface is setup with a netmask...)

Arguably, this is a bug in FreeBSD, but you can work around it by  
using the BPF interface to send the traffic directly rather than using  
the network stack via socket()+send()/write().  I believe the ISC DHCP  
server software provides examples of how to do this, as dhclient is  
commonly used to send DHCP requests to the all-ones broadcast addr,  
without needing an interface being configured with an IP....

-- 
-Chuck

[1]: And I could be mis-remembering that part; it might do a routing  
table lookup and use only the interface which matches the destination  
IP, which is probably the default route.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69A0F543-74D4-4D38-A0A5-A0EDE87A3DBB>