Skip site navigation (1)Skip section navigation (2)
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>