diff options
Diffstat (limited to 'net/ipv6/ipv6_sockglue.c')
-rw-r--r-- | net/ipv6/ipv6_sockglue.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index f2b731df8d77..cc5883791bac 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
@@ -124,6 +124,11 @@ static bool setsockopt_needs_rtnl(int optname) | |||
124 | case IPV6_DROP_MEMBERSHIP: | 124 | case IPV6_DROP_MEMBERSHIP: |
125 | case MCAST_JOIN_GROUP: | 125 | case MCAST_JOIN_GROUP: |
126 | case MCAST_LEAVE_GROUP: | 126 | case MCAST_LEAVE_GROUP: |
127 | case MCAST_JOIN_SOURCE_GROUP: | ||
128 | case MCAST_LEAVE_SOURCE_GROUP: | ||
129 | case MCAST_BLOCK_SOURCE: | ||
130 | case MCAST_UNBLOCK_SOURCE: | ||
131 | case MCAST_MSFILTER: | ||
127 | return true; | 132 | return true; |
128 | } | 133 | } |
129 | return false; | 134 | return false; |
@@ -597,9 +602,9 @@ done: | |||
597 | break; | 602 | break; |
598 | 603 | ||
599 | if (optname == IPV6_ADD_MEMBERSHIP) | 604 | if (optname == IPV6_ADD_MEMBERSHIP) |
600 | retv = __ipv6_sock_mc_join(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_multiaddr); | 605 | retv = ipv6_sock_mc_join(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_multiaddr); |
601 | else | 606 | else |
602 | retv = __ipv6_sock_mc_drop(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_multiaddr); | 607 | retv = ipv6_sock_mc_drop(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_multiaddr); |
603 | break; | 608 | break; |
604 | } | 609 | } |
605 | case IPV6_JOIN_ANYCAST: | 610 | case IPV6_JOIN_ANYCAST: |
@@ -638,11 +643,11 @@ done: | |||
638 | } | 643 | } |
639 | psin6 = (struct sockaddr_in6 *)&greq.gr_group; | 644 | psin6 = (struct sockaddr_in6 *)&greq.gr_group; |
640 | if (optname == MCAST_JOIN_GROUP) | 645 | if (optname == MCAST_JOIN_GROUP) |
641 | retv = __ipv6_sock_mc_join(sk, greq.gr_interface, | 646 | retv = ipv6_sock_mc_join(sk, greq.gr_interface, |
642 | &psin6->sin6_addr); | 647 | &psin6->sin6_addr); |
643 | else | 648 | else |
644 | retv = __ipv6_sock_mc_drop(sk, greq.gr_interface, | 649 | retv = ipv6_sock_mc_drop(sk, greq.gr_interface, |
645 | &psin6->sin6_addr); | 650 | &psin6->sin6_addr); |
646 | break; | 651 | break; |
647 | } | 652 | } |
648 | case MCAST_JOIN_SOURCE_GROUP: | 653 | case MCAST_JOIN_SOURCE_GROUP: |
@@ -674,8 +679,8 @@ done: | |||
674 | struct sockaddr_in6 *psin6; | 679 | struct sockaddr_in6 *psin6; |
675 | 680 | ||
676 | psin6 = (struct sockaddr_in6 *)&greqs.gsr_group; | 681 | psin6 = (struct sockaddr_in6 *)&greqs.gsr_group; |
677 | retv = __ipv6_sock_mc_join(sk, greqs.gsr_interface, | 682 | retv = ipv6_sock_mc_join(sk, greqs.gsr_interface, |
678 | &psin6->sin6_addr); | 683 | &psin6->sin6_addr); |
679 | /* prior join w/ different source is ok */ | 684 | /* prior join w/ different source is ok */ |
680 | if (retv && retv != -EADDRINUSE) | 685 | if (retv && retv != -EADDRINUSE) |
681 | break; | 686 | break; |