ipv4: Implement IP_UNICAST_IF socket option.
The IP_UNICAST_IF feature is needed by the Wine project. This patch implements the feature by setting the outgoing interface in a similar fashion to that of IP_MULTICAST_IF. A separate option is needed to handle this feature since the existing options do not provide all of the characteristics required by IP_UNICAST_IF, a summary is provided below. SO_BINDTODEVICE: * SO_BINDTODEVICE requires administrative privileges, IP_UNICAST_IF does not. From reading some old mailing list articles my understanding is that SO_BINDTODEVICE requires administrative privileges because it can override the administrator's routing settings. * The SO_BINDTODEVICE option restricts both outbound and inbound traffic, IP_UNICAST_IF only impacts outbound traffic. IP_PKTINFO: * Since IP_PKTINFO and IP_UNICAST_IF are independent options, implementing IP_UNICAST_IF with IP_PKTINFO will likely break some applications. * Implementing IP_UNICAST_IF on top of IP_PKTINFO significantly complicates the Wine codebase and reduces the socket performance (doing this requires a lot of extra communication between the "server" and "user" layers). bind(): * bind() does not work on broadcast packets, IP_UNICAST_IF is specifically intended to work with broadcast packets. * Like SO_BINDTODEVICE, bind() restricts both outbound and inbound traffic. Signed-off-by:Erich E. Hoover <ehoover@mines.edu> Signed-off-by:
Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- include/linux/in.h 1 addition, 0 deletionsinclude/linux/in.h
- include/net/inet_sock.h 2 additions, 0 deletionsinclude/net/inet_sock.h
- net/ipv4/ip_sockglue.c 33 additions, 0 deletionsnet/ipv4/ip_sockglue.c
- net/ipv4/ping.c 2 additions, 1 deletionnet/ipv4/ping.c
- net/ipv4/raw.c 2 additions, 1 deletionnet/ipv4/raw.c
- net/ipv4/udp.c 2 additions, 1 deletionnet/ipv4/udp.c
Loading
Please register or sign in to comment