Binding sockets to devices in FreeBSD
andreto at olsr.org
Thu Feb 19 01:55:15 PST 2004
I am developing an implementation of the Optimized LinkState Routing
protocol(RFC3626) for Linux(www.olsr.org). OLSR is a routing protocol
for mobile, multihop, wireless ad-hoc networks.
I would really like to have my code compile on FreeBSD - but there is
one major issue.
OLSR sends control traffic broadcasted(IPv4) or multicasted(IPv6) on a
pr.interface basis. That means that a node running OLSR on two
interfaces a and b, would not always broadcast the same content in
messages sent on a and b. This works fine using IPv4 and broadcast as
long as the interfaces uses different broadcast addresses - but as soon
as two interfaces is set up with the same broadcastaddress(or as soon as
one uses IPv6 with the same multicastgroup) any message (sent on the
broadcastsocket) will be transmitted on both interfaces.
I hope this made some sense :)
Bottom line is that one has to be able to control on which interface
packets are sent. To do this in Linux i use the SO_BINDTODEVICE
flag(with setsockopt(2)). That way I can have one socket for each
interface OLSR is to use regradless of destinationaddress.
In FreeBSD there is no SO_BINDTODEVICE or equalivant as far as I can
see. To me it seems like BPF could provide the functioning I need. Is
this so? Can BPF in some way help me control on which interface packets
If so I would really appreciate some (pseudo or real)code examples to
get me started or some links to such material - as I am totally new to
the BPF interface(and the concept).
If BPF is not the way to go I would appreciate any help in finding a way
of doing this in FreeBSD.
I could ofcause try to figure this out by myself - but as FreeBSD
porting is not too high prioritized for now I figured I'd rather be lazy
and ask you experts :)
Andreas Tønnesen(andreas at olsr.org)
UniK University Graduation Center
University of Oslo
More information about the freebsd-net