[olsr-dev] freebsd multiple interfaces

Thomas Lopatic (spam-protected)
Tue Feb 8 11:40:12 CET 2005

Hi everybody,

I do not have any objections to moving the packet I/O functions further 
down into the platform-specific directories. Even if we tried to use 
other methods of interface binding on FreeBSD, I think we would end up 
with a lot of code that is specific to FreeBSD. So, we'd end up doing 
this anyway.

Let me quickly outline, just for the record, what I think an alternative 
method to libnet could look like. I think we should keep this in mind 
for later evaluation.

Case 1: Multiple interfaces in different subnets, i.e. with different 
directed broadcast addresses, olsrd uses directed broadcasts. I haven't 
tried it, but my guess is that this works right now.

Case 2: Multiple interfaces in different subnets, olsrd uses for broadcasts. We'd still use directed broadcasts, but 
use the IP_ONESBCAST socket option (exists since FreeBSD 4.9) to have 
the OS rewrite the destination address of our directed broadcasts to In this way we could send broadcasts 
via a given interface simply by creating directed broadcasts to the 
interface's directed broadcast address. In order to determine the 
incoming interface of a received packet, we've been told to use the 
IP_RECVIF socket option in conjunction with recvmsg(). I haven't looked 
into this, though.

Case 3: Multiple interfaces in the same subnet. Looks like there 
currently isn't any way to send packets via a given interfaces without 
libnet on FreeBSD, as cases 1 and 2 use the outgoing interface's 
directed broadcast address to specify the interface. Receiving, however, 
should work in the described way (IP_RECVIF, recvmsg()).

So, I think for now we should use libnet to send packets and recvmsg() 
to receive them, as this is the only way of supporting case 3.

What do you think?


More information about the Olsr-dev mailing list