Date: Thu, 19 Apr 2012 11:32:18 +0200 From: Svatopluk Kraus <onwahe@gmail.com> To: Attila Nagy <bra@fsn.hu> Cc: freebsd-net@freebsd.org Subject: Re: SO_BINDTODEVICE or equivalent? Message-ID: <CAFHCsPXxwoF_xzUZGn8xH_ynPUnthdzF17M%2BsTOeRZpmHgxxyQ@mail.gmail.com> In-Reply-To: <4F8FA591.4010503@fsn.hu> References: <4F8FA591.4010503@fsn.hu>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, Use IP_RECVIF option. For IP_SENDIF look at http://lists.freebsd.org/pipermail/freebsd-net/2007-March/013510.html I used the patch on my embedded FreeBSD 9.0 boxes and it works fine. I modificated it slightly to match 9.0. Svata On Thu, Apr 19, 2012 at 7:41 AM, Attila Nagy <bra@fsn.hu> wrote: > > =A0 Hi, > =A0 I want to solve the classic problem of a DHCP server: listening for > =A0 broadcast UDP packets and figuring out what interface a packet has > =A0 come in. > =A0 The Linux solution is SO_BINDTODEVICE, which according to socket(7): > =A0 SO_BINDTODEVICE > =A0 =A0 =A0 =A0 =A0Bind this socket to a particular device like "eth0", a= s > =A0 =A0 =A0 =A0 =A0specified in the passed interface name. If the name is= an empty > =A0 =A0 =A0 =A0 =A0string or the option length is zero, the socket device= binding > =A0 =A0 =A0 =A0 =A0is removed. The passed option is a variable-length > =A0 =A0 =A0 =A0 =A0null-terminated interface name string with the maximum= size of > =A0 =A0 =A0 =A0 =A0IFNAMSIZ. If a socket is bound to an interface, only p= ackets > =A0 =A0 =A0 =A0 =A0received from that particular interface are processed = by the > =A0 =A0 =A0 =A0 =A0socket. Note that this only works for some socket type= s, > =A0 =A0 =A0 =A0 =A0particularly AF_INET sockets. It is not supported for = packet > =A0 =A0 =A0 =A0 =A0sockets (use normal [1]bind(2) there). > > =A0 This makes it possible to listen on selected interfaces for > =A0 (broadcast) packets. FreeBSD currently doesn't implement this feature= . > =A0 Any chances that somebody will do this? > =A0 What alternatives would you recommend? Raw packet access (like BPF an= d > =A0 RAW sockets) finally make the application to do more -mainly useless- > =A0 work. > =A0 Are there any other solutions, which doesn't require additional packe= t > =A0 parsing? > =A0 Thanks, > > References > > =A0 1. http://linux.die.net/man/2/bind > _______________________________________________ > freebsd-net@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-net > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFHCsPXxwoF_xzUZGn8xH_ynPUnthdzF17M%2BsTOeRZpmHgxxyQ>