[NET]: Make the device list and device lookups per namespace.
[GitHub/MotorolaMobilityLLC/kernel-slsi.git] / net / ipv6 / mcast.c
index ae9881832a7ec548ae3c77456dc5089f01b49337..e2ab43c989d4d5f993731be026d1840938728dc5 100644 (file)
@@ -49,6 +49,7 @@
 #include <linux/netfilter.h>
 #include <linux/netfilter_ipv6.h>
 
+#include <net/net_namespace.h>
 #include <net/sock.h>
 #include <net/snmp.h>
 
@@ -214,7 +215,7 @@ int ipv6_sock_mc_join(struct sock *sk, int ifindex, struct in6_addr *addr)
                        dst_release(&rt->u.dst);
                }
        } else
-               dev = dev_get_by_index(ifindex);
+               dev = dev_get_by_index(&init_net, ifindex);
 
        if (dev == NULL) {
                sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
@@ -265,7 +266,7 @@ int ipv6_sock_mc_drop(struct sock *sk, int ifindex, struct in6_addr *addr)
                        *lnk = mc_lst->next;
                        write_unlock_bh(&ipv6_sk_mc_lock);
 
-                       if ((dev = dev_get_by_index(mc_lst->ifindex)) != NULL) {
+                       if ((dev = dev_get_by_index(&init_net, mc_lst->ifindex)) != NULL) {
                                struct inet6_dev *idev = in6_dev_get(dev);
 
                                (void) ip6_mc_leave_src(sk, mc_lst, idev);
@@ -300,7 +301,7 @@ static struct inet6_dev *ip6_mc_find_dev(struct in6_addr *group, int ifindex)
                        dst_release(&rt->u.dst);
                }
        } else
-               dev = dev_get_by_index(ifindex);
+               dev = dev_get_by_index(&init_net, ifindex);
 
        if (!dev)
                return NULL;
@@ -331,7 +332,7 @@ void ipv6_sock_mc_close(struct sock *sk)
                np->ipv6_mc_list = mc_lst->next;
                write_unlock_bh(&ipv6_sk_mc_lock);
 
-               dev = dev_get_by_index(mc_lst->ifindex);
+               dev = dev_get_by_index(&init_net, mc_lst->ifindex);
                if (dev) {
                        struct inet6_dev *idev = in6_dev_get(dev);
 
@@ -2332,7 +2333,7 @@ static inline struct ifmcaddr6 *igmp6_mc_get_first(struct seq_file *seq)
        struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq);
 
        state->idev = NULL;
-       for_each_netdev(state->dev) {
+       for_each_netdev(&init_net, state->dev) {
                struct inet6_dev *idev;
                idev = in6_dev_get(state->dev);
                if (!idev)
@@ -2476,7 +2477,7 @@ static inline struct ip6_sf_list *igmp6_mcf_get_first(struct seq_file *seq)
 
        state->idev = NULL;
        state->im = NULL;
-       for_each_netdev(state->dev) {
+       for_each_netdev(&init_net, state->dev) {
                struct inet6_dev *idev;
                idev = in6_dev_get(state->dev);
                if (unlikely(idev == NULL))
@@ -2658,8 +2659,8 @@ int __init igmp6_init(struct net_proto_family *ops)
        np->hop_limit = 1;
 
 #ifdef CONFIG_PROC_FS
-       proc_net_fops_create("igmp6", S_IRUGO, &igmp6_mc_seq_fops);
-       proc_net_fops_create("mcfilter6", S_IRUGO, &igmp6_mcf_seq_fops);
+       proc_net_fops_create(&init_net, "igmp6", S_IRUGO, &igmp6_mc_seq_fops);
+       proc_net_fops_create(&init_net, "mcfilter6", S_IRUGO, &igmp6_mcf_seq_fops);
 #endif
 
        return 0;
@@ -2671,7 +2672,7 @@ void igmp6_cleanup(void)
        igmp6_socket = NULL; /* for safety */
 
 #ifdef CONFIG_PROC_FS
-       proc_net_remove("mcfilter6");
-       proc_net_remove("igmp6");
+       proc_net_remove(&init_net, "mcfilter6");
+       proc_net_remove(&init_net, "igmp6");
 #endif
 }