mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-21 06:01:23 +00:00
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>
This commit is contained in:
parent
43480aecb1
commit
76e21053b5
6 changed files with 42 additions and 3 deletions
|
@ -132,6 +132,7 @@ struct rtable;
|
|||
* @tos - TOS
|
||||
* @mc_ttl - Multicasting TTL
|
||||
* @is_icsk - is this an inet_connection_sock?
|
||||
* @uc_index - Unicast outgoing device index
|
||||
* @mc_index - Multicast device index
|
||||
* @mc_list - Group array
|
||||
* @cork - info to build ip hdr on each ip frag while socket is corked
|
||||
|
@ -167,6 +168,7 @@ struct inet_sock {
|
|||
transparent:1,
|
||||
mc_all:1,
|
||||
nodefrag:1;
|
||||
int uc_index;
|
||||
int mc_index;
|
||||
__be32 mc_addr;
|
||||
struct ip_mc_socklist __rcu *mc_list;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue