Skip to content

Commit

Permalink
[IPv6]: Update setsockopt(IPV6_MULTICAST_IF) to support RFC 3493, try2
Browse files Browse the repository at this point in the history
 From RFC 3493, Section 5.2:

       IPV6_MULTICAST_IF

          Set the interface to use for outgoing multicast packets.  The
          argument is the index of the interface to use.  If the
          interface index is specified as zero, the system selects the
          interface (for example, by looking up the address in a routing
          table and using the resulting interface).

This patch adds support for (index == 0) to reset the value to it's 
original state, allowing the system to choose the best interface.  IPv4 
already behaves this way.

Signed-off-by: Brian Haley <brian.haley@hp.com>
Acked-by: David L Stevens <dlstevens@us.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Brian Haley authored and David S. Miller committed Oct 11, 2007
1 parent 73aaf93 commit 4953f0f
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions net/ipv6/ipv6_sockglue.c
Original file line number Diff line number Diff line change
Expand Up @@ -539,12 +539,15 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
case IPV6_MULTICAST_IF:
if (sk->sk_type == SOCK_STREAM)
goto e_inval;
if (sk->sk_bound_dev_if && sk->sk_bound_dev_if != val)
goto e_inval;

if (__dev_get_by_index(&init_net, val) == NULL) {
retv = -ENODEV;
break;
if (val) {
if (sk->sk_bound_dev_if && sk->sk_bound_dev_if != val)
goto e_inval;

if (__dev_get_by_index(&init_net, val) == NULL) {
retv = -ENODEV;
break;
}
}
np->mcast_oif = val;
retv = 0;
Expand Down

0 comments on commit 4953f0f

Please sign in to comment.