aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2007-09-17 14:56:21 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:49:10 -0400
commit881d966b48b035ab3f3aeaae0f3d3f9b584f45b2 (patch)
treec579d59a4107cbbe9e2b85939bc0d496b815c887 /net
parentb4b510290b056b86611757ce1175a230f1080f53 (diff)
[NET]: Make the device list and device lookups per namespace.
This patch makes most of the generic device layer network namespace safe. This patch makes dev_base_head a network namespace variable, and then it picks up a few associated variables. The functions: dev_getbyhwaddr dev_getfirsthwbytype dev_get_by_flags dev_get_by_name __dev_get_by_name dev_get_by_index __dev_get_by_index dev_ioctl dev_ethtool dev_load wireless_process_ioctl were modified to take a network namespace argument, and deal with it. vlan_ioctl_set and brioctl_set were modified so their hooks will receive a network namespace argument. So basically anthing in the core of the network stack that was affected to by the change of dev_base was modified to handle multiple network namespaces. The rest of the network stack was simply modified to explicitly use &init_net the initial network namespace. This can be fixed when those components of the network stack are modified to handle multiple network namespaces. For now the ifindex generator is left global. Fundametally ifindex numbers are per namespace, or else we will have corner case problems with migration when we get that far. At the same time there are assumptions in the network stack that the ifindex of a network device won't change. Making the ifindex number global seems a good compromise until the network stack can cope with ifindex changes when you change namespaces, and the like. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/802/tr.c2
-rw-r--r--net/8021q/vlan.c6
-rw-r--r--net/8021q/vlan_netlink.c3
-rw-r--r--net/8021q/vlanproc.c6
-rw-r--r--net/appletalk/ddp.c6
-rw-r--r--net/atm/mpc.c2
-rw-r--r--net/ax25/af_ax25.c2
-rw-r--r--net/bridge/br_if.c4
-rw-r--r--net/bridge/br_ioctl.c7
-rw-r--r--net/bridge/br_netlink.c5
-rw-r--r--net/bridge/br_private.h2
-rw-r--r--net/core/dev.c271
-rw-r--r--net/core/dev_mcast.c41
-rw-r--r--net/core/ethtool.c4
-rw-r--r--net/core/fib_rules.c4
-rw-r--r--net/core/neighbour.c6
-rw-r--r--net/core/netpoll.c2
-rw-r--r--net/core/pktgen.c2
-rw-r--r--net/core/rtnetlink.c35
-rw-r--r--net/core/sock.c3
-rw-r--r--net/decnet/af_decnet.c2
-rw-r--r--net/decnet/dn_dev.c20
-rw-r--r--net/decnet/dn_fib.c8
-rw-r--r--net/decnet/dn_route.c6
-rw-r--r--net/decnet/sysctl_net_decnet.c4
-rw-r--r--net/econet/af_econet.c2
-rw-r--r--net/ipv4/arp.c4
-rw-r--r--net/ipv4/devinet.c18
-rw-r--r--net/ipv4/fib_frontend.c2
-rw-r--r--net/ipv4/fib_semantics.c4
-rw-r--r--net/ipv4/icmp.c2
-rw-r--r--net/ipv4/igmp.c4
-rw-r--r--net/ipv4/ip_fragment.c2
-rw-r--r--net/ipv4/ip_gre.c4
-rw-r--r--net/ipv4/ip_sockglue.c2
-rw-r--r--net/ipv4/ipconfig.c2
-rw-r--r--net/ipv4/ipip.c4
-rw-r--r--net/ipv4/ipmr.c4
-rw-r--r--net/ipv4/ipvs/ip_vs_sync.c10
-rw-r--r--net/ipv4/netfilter/ipt_CLUSTERIP.c2
-rw-r--r--net/ipv4/route.c4
-rw-r--r--net/ipv6/addrconf.c28
-rw-r--r--net/ipv6/af_inet6.c2
-rw-r--r--net/ipv6/anycast.c12
-rw-r--r--net/ipv6/datagram.c2
-rw-r--r--net/ipv6/ip6_tunnel.c6
-rw-r--r--net/ipv6/ipv6_sockglue.c2
-rw-r--r--net/ipv6/mcast.c12
-rw-r--r--net/ipv6/raw.c2
-rw-r--r--net/ipv6/reassembly.c2
-rw-r--r--net/ipv6/route.c4
-rw-r--r--net/ipv6/sit.c4
-rw-r--r--net/ipx/af_ipx.c6
-rw-r--r--net/irda/irnetlink.c9
-rw-r--r--net/llc/af_llc.c4
-rw-r--r--net/llc/llc_core.c3
-rw-r--r--net/mac80211/ieee80211.c1
-rw-r--r--net/mac80211/ieee80211_cfg.c3
-rw-r--r--net/mac80211/tx.c9
-rw-r--r--net/mac80211/util.c7
-rw-r--r--net/netrom/nr_route.c6
-rw-r--r--net/packet/af_packet.c18
-rw-r--r--net/rose/rose_route.c8
-rw-r--r--net/sched/act_mirred.c3
-rw-r--r--net/sched/cls_api.c4
-rw-r--r--net/sched/em_meta.c2
-rw-r--r--net/sched/sch_api.c10
-rw-r--r--net/sctp/ipv6.c4
-rw-r--r--net/sctp/protocol.c2
-rw-r--r--net/socket.c22
-rw-r--r--net/tipc/eth_media.c2
-rw-r--r--net/wireless/wext.c38
-rw-r--r--net/x25/x25_route.c2
73 files changed, 464 insertions, 298 deletions
diff --git a/net/802/tr.c b/net/802/tr.c
index 032c31e748e..55c76d77d32 100644
--- a/net/802/tr.c
+++ b/net/802/tr.c
@@ -533,7 +533,7 @@ static int rif_seq_show(struct seq_file *seq, void *v)
533 seq_puts(seq, 533 seq_puts(seq,
534 "if TR address TTL rcf routing segments\n"); 534 "if TR address TTL rcf routing segments\n");
535 else { 535 else {
536 struct net_device *dev = dev_get_by_index(entry->iface); 536 struct net_device *dev = dev_get_by_index(&init_net, entry->iface);
537 long ttl = (long) (entry->last_used + sysctl_tr_rif_timeout) 537 long ttl = (long) (entry->last_used + sysctl_tr_rif_timeout)
538 - (long) jiffies; 538 - (long) jiffies;
539 539
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index d0d36fdedbe..a9ced0a6f4c 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -51,7 +51,7 @@ static char vlan_copyright[] = "Ben Greear <greearb@candelatech.com>";
51static char vlan_buggyright[] = "David S. Miller <davem@redhat.com>"; 51static char vlan_buggyright[] = "David S. Miller <davem@redhat.com>";
52 52
53static int vlan_device_event(struct notifier_block *, unsigned long, void *); 53static int vlan_device_event(struct notifier_block *, unsigned long, void *);
54static int vlan_ioctl_handler(void __user *); 54static int vlan_ioctl_handler(struct net *net, void __user *);
55static int unregister_vlan_dev(struct net_device *, unsigned short ); 55static int unregister_vlan_dev(struct net_device *, unsigned short );
56 56
57static struct notifier_block vlan_notifier_block = { 57static struct notifier_block vlan_notifier_block = {
@@ -697,7 +697,7 @@ out:
697 * o execute requested action or pass command to the device driver 697 * o execute requested action or pass command to the device driver
698 * arg is really a struct vlan_ioctl_args __user *. 698 * arg is really a struct vlan_ioctl_args __user *.
699 */ 699 */
700static int vlan_ioctl_handler(void __user *arg) 700static int vlan_ioctl_handler(struct net *net, void __user *arg)
701{ 701{
702 int err; 702 int err;
703 unsigned short vid = 0; 703 unsigned short vid = 0;
@@ -726,7 +726,7 @@ static int vlan_ioctl_handler(void __user *arg)
726 case GET_VLAN_REALDEV_NAME_CMD: 726 case GET_VLAN_REALDEV_NAME_CMD:
727 case GET_VLAN_VID_CMD: 727 case GET_VLAN_VID_CMD:
728 err = -ENODEV; 728 err = -ENODEV;
729 dev = __dev_get_by_name(args.device1); 729 dev = __dev_get_by_name(&init_net, args.device1);
730 if (!dev) 730 if (!dev)
731 goto out; 731 goto out;
732 732
diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c
index 6cdd1e015e2..0996185e2ed 100644
--- a/net/8021q/vlan_netlink.c
+++ b/net/8021q/vlan_netlink.c
@@ -11,6 +11,7 @@
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/netdevice.h> 12#include <linux/netdevice.h>
13#include <linux/if_vlan.h> 13#include <linux/if_vlan.h>
14#include <net/net_namespace.h>
14#include <net/netlink.h> 15#include <net/netlink.h>
15#include <net/rtnetlink.h> 16#include <net/rtnetlink.h>
16#include "vlan.h" 17#include "vlan.h"
@@ -112,7 +113,7 @@ static int vlan_newlink(struct net_device *dev,
112 113
113 if (!tb[IFLA_LINK]) 114 if (!tb[IFLA_LINK])
114 return -EINVAL; 115 return -EINVAL;
115 real_dev = __dev_get_by_index(nla_get_u32(tb[IFLA_LINK])); 116 real_dev = __dev_get_by_index(&init_net, nla_get_u32(tb[IFLA_LINK]));
116 if (!real_dev) 117 if (!real_dev)
117 return -ENODEV; 118 return -ENODEV;
118 119
diff --git a/net/8021q/vlanproc.c b/net/8021q/vlanproc.c
index ac80e6b9ef5..6cefdf8e381 100644
--- a/net/8021q/vlanproc.c
+++ b/net/8021q/vlanproc.c
@@ -254,7 +254,7 @@ static void *vlan_seq_start(struct seq_file *seq, loff_t *pos)
254 if (*pos == 0) 254 if (*pos == 0)
255 return SEQ_START_TOKEN; 255 return SEQ_START_TOKEN;
256 256
257 for_each_netdev(dev) { 257 for_each_netdev(&init_net, dev) {
258 if (!is_vlan_dev(dev)) 258 if (!is_vlan_dev(dev))
259 continue; 259 continue;
260 260
@@ -273,9 +273,9 @@ static void *vlan_seq_next(struct seq_file *seq, void *v, loff_t *pos)
273 273
274 dev = (struct net_device *)v; 274 dev = (struct net_device *)v;
275 if (v == SEQ_START_TOKEN) 275 if (v == SEQ_START_TOKEN)
276 dev = net_device_entry(&dev_base_head); 276 dev = net_device_entry(&init_net.dev_base_head);
277 277
278 for_each_netdev_continue(dev) { 278 for_each_netdev_continue(&init_net, dev) {
279 if (!is_vlan_dev(dev)) 279 if (!is_vlan_dev(dev))
280 continue; 280 continue;
281 281
diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
index 36fcdbf923c..7c0b5151d52 100644
--- a/net/appletalk/ddp.c
+++ b/net/appletalk/ddp.c
@@ -677,7 +677,7 @@ static int atif_ioctl(int cmd, void __user *arg)
677 if (copy_from_user(&atreq, arg, sizeof(atreq))) 677 if (copy_from_user(&atreq, arg, sizeof(atreq)))
678 return -EFAULT; 678 return -EFAULT;
679 679
680 dev = __dev_get_by_name(atreq.ifr_name); 680 dev = __dev_get_by_name(&init_net, atreq.ifr_name);
681 if (!dev) 681 if (!dev)
682 return -ENODEV; 682 return -ENODEV;
683 683
@@ -901,7 +901,7 @@ static int atrtr_ioctl(unsigned int cmd, void __user *arg)
901 if (copy_from_user(name, rt.rt_dev, IFNAMSIZ-1)) 901 if (copy_from_user(name, rt.rt_dev, IFNAMSIZ-1))
902 return -EFAULT; 902 return -EFAULT;
903 name[IFNAMSIZ-1] = '\0'; 903 name[IFNAMSIZ-1] = '\0';
904 dev = __dev_get_by_name(name); 904 dev = __dev_get_by_name(&init_net, name);
905 if (!dev) 905 if (!dev)
906 return -ENODEV; 906 return -ENODEV;
907 } 907 }
@@ -1273,7 +1273,7 @@ static __inline__ int is_ip_over_ddp(struct sk_buff *skb)
1273 1273
1274static int handle_ip_over_ddp(struct sk_buff *skb) 1274static int handle_ip_over_ddp(struct sk_buff *skb)
1275{ 1275{
1276 struct net_device *dev = __dev_get_by_name("ipddp0"); 1276 struct net_device *dev = __dev_get_by_name(&init_net, "ipddp0");
1277 struct net_device_stats *stats; 1277 struct net_device_stats *stats;
1278 1278
1279 /* This needs to be able to handle ipddp"N" devices */ 1279 /* This needs to be able to handle ipddp"N" devices */
diff --git a/net/atm/mpc.c b/net/atm/mpc.c
index 0968430a7f5..2086396de17 100644
--- a/net/atm/mpc.c
+++ b/net/atm/mpc.c
@@ -244,7 +244,7 @@ static struct net_device *find_lec_by_itfnum(int itf)
244 char name[IFNAMSIZ]; 244 char name[IFNAMSIZ];
245 245
246 sprintf(name, "lec%d", itf); 246 sprintf(name, "lec%d", itf);
247 dev = dev_get_by_name(name); 247 dev = dev_get_by_name(&init_net, name);
248 248
249 return dev; 249 return dev;
250} 250}
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
index 8d13a8bca0e..993e5c75e90 100644
--- a/net/ax25/af_ax25.c
+++ b/net/ax25/af_ax25.c
@@ -631,7 +631,7 @@ static int ax25_setsockopt(struct socket *sock, int level, int optname,
631 break; 631 break;
632 } 632 }
633 633
634 dev = dev_get_by_name(devname); 634 dev = dev_get_by_name(&init_net, devname);
635 if (dev == NULL) { 635 if (dev == NULL) {
636 res = -ENODEV; 636 res = -ENODEV;
637 break; 637 break;
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index 9272f12f664..935784f736b 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -303,7 +303,7 @@ int br_del_bridge(const char *name)
303 int ret = 0; 303 int ret = 0;
304 304
305 rtnl_lock(); 305 rtnl_lock();
306 dev = __dev_get_by_name(name); 306 dev = __dev_get_by_name(&init_net, name);
307 if (dev == NULL) 307 if (dev == NULL)
308 ret = -ENXIO; /* Could not find device */ 308 ret = -ENXIO; /* Could not find device */
309 309
@@ -444,7 +444,7 @@ void __exit br_cleanup_bridges(void)
444 struct net_device *dev, *nxt; 444 struct net_device *dev, *nxt;
445 445
446 rtnl_lock(); 446 rtnl_lock();
447 for_each_netdev_safe(dev, nxt) 447 for_each_netdev_safe(&init_net, dev, nxt)
448 if (dev->priv_flags & IFF_EBRIDGE) 448 if (dev->priv_flags & IFF_EBRIDGE)
449 del_br(dev->priv); 449 del_br(dev->priv);
450 rtnl_unlock(); 450 rtnl_unlock();
diff --git a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c
index bb15e9e259b..0655a5f07f5 100644
--- a/net/bridge/br_ioctl.c
+++ b/net/bridge/br_ioctl.c
@@ -18,6 +18,7 @@
18#include <linux/if_bridge.h> 18#include <linux/if_bridge.h>
19#include <linux/netdevice.h> 19#include <linux/netdevice.h>
20#include <linux/times.h> 20#include <linux/times.h>
21#include <net/net_namespace.h>
21#include <asm/uaccess.h> 22#include <asm/uaccess.h>
22#include "br_private.h" 23#include "br_private.h"
23 24
@@ -27,7 +28,7 @@ static int get_bridge_ifindices(int *indices, int num)
27 struct net_device *dev; 28 struct net_device *dev;
28 int i = 0; 29 int i = 0;
29 30
30 for_each_netdev(dev) { 31 for_each_netdev(&init_net, dev) {
31 if (i >= num) 32 if (i >= num)
32 break; 33 break;
33 if (dev->priv_flags & IFF_EBRIDGE) 34 if (dev->priv_flags & IFF_EBRIDGE)
@@ -90,7 +91,7 @@ static int add_del_if(struct net_bridge *br, int ifindex, int isadd)
90 if (!capable(CAP_NET_ADMIN)) 91 if (!capable(CAP_NET_ADMIN))
91 return -EPERM; 92 return -EPERM;
92 93
93 dev = dev_get_by_index(ifindex); 94 dev = dev_get_by_index(&init_net, ifindex);
94 if (dev == NULL) 95 if (dev == NULL)
95 return -EINVAL; 96 return -EINVAL;
96 97
@@ -364,7 +365,7 @@ static int old_deviceless(void __user *uarg)
364 return -EOPNOTSUPP; 365 return -EOPNOTSUPP;
365} 366}
366 367
367int br_ioctl_deviceless_stub(unsigned int cmd, void __user *uarg) 368int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd, void __user *uarg)
368{ 369{
369 switch (cmd) { 370 switch (cmd) {
370 case SIOCGIFBR: 371 case SIOCGIFBR:
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 0fcf6f07306..53ab8e0cb51 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
@@ -12,6 +12,7 @@
12 12
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <net/rtnetlink.h> 14#include <net/rtnetlink.h>
15#include <net/net_namespace.h>
15#include "br_private.h" 16#include "br_private.h"
16 17
17static inline size_t br_nlmsg_size(void) 18static inline size_t br_nlmsg_size(void)
@@ -110,7 +111,7 @@ static int br_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
110 int idx; 111 int idx;
111 112
112 idx = 0; 113 idx = 0;
113 for_each_netdev(dev) { 114 for_each_netdev(&init_net, dev) {
114 /* not a bridge port */ 115 /* not a bridge port */
115 if (dev->br_port == NULL || idx < cb->args[0]) 116 if (dev->br_port == NULL || idx < cb->args[0])
116 goto skip; 117 goto skip;
@@ -155,7 +156,7 @@ static int br_rtm_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
155 if (new_state > BR_STATE_BLOCKING) 156 if (new_state > BR_STATE_BLOCKING)
156 return -EINVAL; 157 return -EINVAL;
157 158
158 dev = __dev_get_by_index(ifm->ifi_index); 159 dev = __dev_get_by_index(&init_net, ifm->ifi_index);
159 if (!dev) 160 if (!dev)
160 return -ENODEV; 161 return -ENODEV;
161 162
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index e6dc6f52990..f666f7b28ff 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -192,7 +192,7 @@ extern struct sk_buff *br_handle_frame(struct net_bridge_port *p,
192 192
193/* br_ioctl.c */ 193/* br_ioctl.c */
194extern int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); 194extern int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
195extern int br_ioctl_deviceless_stub(unsigned int cmd, void __user *arg); 195extern int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd, void __user *arg);
196 196
197/* br_netfilter.c */ 197/* br_netfilter.c */
198#ifdef CONFIG_BRIDGE_NETFILTER 198#ifdef CONFIG_BRIDGE_NETFILTER
diff --git a/net/core/dev.c b/net/core/dev.c
index 40fd66fbe4e..3a3d5ee7390 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -190,25 +190,22 @@ static struct net_dma net_dma = {
190 * unregister_netdevice(), which must be called with the rtnl 190 * unregister_netdevice(), which must be called with the rtnl
191 * semaphore held. 191 * semaphore held.
192 */ 192 */
193LIST_HEAD(dev_base_head);
194DEFINE_RWLOCK(dev_base_lock); 193DEFINE_RWLOCK(dev_base_lock);
195 194
196EXPORT_SYMBOL(dev_base_head);
197EXPORT_SYMBOL(dev_base_lock); 195EXPORT_SYMBOL(dev_base_lock);
198 196
199#define NETDEV_HASHBITS 8 197#define NETDEV_HASHBITS 8
200static struct hlist_head dev_name_head[1<<NETDEV_HASHBITS]; 198#define NETDEV_HASHENTRIES (1 << NETDEV_HASHBITS)
201static struct hlist_head dev_index_head[1<<NETDEV_HASHBITS];
202 199
203static inline struct hlist_head *dev_name_hash(const char *name) 200static inline struct hlist_head *dev_name_hash(struct net *net, const char *name)
204{ 201{
205 unsigned hash = full_name_hash(name, strnlen(name, IFNAMSIZ)); 202 unsigned hash = full_name_hash(name, strnlen(name, IFNAMSIZ));
206 return &dev_name_head[hash & ((1<<NETDEV_HASHBITS)-1)]; 203 return &net->dev_name_head[hash & ((1 << NETDEV_HASHBITS) - 1)];
207} 204}
208 205
209static inline struct hlist_head *dev_index_hash(int ifindex) 206static inline struct hlist_head *dev_index_hash(struct net *net, int ifindex)
210{ 207{
211 return &dev_index_head[ifindex & ((1<<NETDEV_HASHBITS)-1)]; 208 return &net->dev_index_head[ifindex & ((1 << NETDEV_HASHBITS) - 1)];
212} 209}
213 210
214/* 211/*
@@ -492,7 +489,7 @@ unsigned long netdev_boot_base(const char *prefix, int unit)
492 * If device already registered then return base of 1 489 * If device already registered then return base of 1
493 * to indicate not to probe for this interface 490 * to indicate not to probe for this interface
494 */ 491 */
495 if (__dev_get_by_name(name)) 492 if (__dev_get_by_name(&init_net, name))
496 return 1; 493 return 1;
497 494
498 for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++) 495 for (i = 0; i < NETDEV_BOOT_SETUP_MAX; i++)
@@ -547,11 +544,11 @@ __setup("netdev=", netdev_boot_setup);
547 * careful with locks. 544 * careful with locks.
548 */ 545 */
549 546
550struct net_device *__dev_get_by_name(const char *name) 547struct net_device *__dev_get_by_name(struct net *net, const char *name)
551{ 548{
552 struct hlist_node *p; 549 struct hlist_node *p;
553 550
554 hlist_for_each(p, dev_name_hash(name)) { 551 hlist_for_each(p, dev_name_hash(net, name)) {
555 struct net_device *dev 552 struct net_device *dev
556 = hlist_entry(p, struct net_device, name_hlist); 553 = hlist_entry(p, struct net_device, name_hlist);
557 if (!strncmp(dev->name, name, IFNAMSIZ)) 554 if (!strncmp(dev->name, name, IFNAMSIZ))
@@ -571,12 +568,12 @@ struct net_device *__dev_get_by_name(const char *name)
571 * matching device is found. 568 * matching device is found.
572 */ 569 */
573 570
574struct net_device *dev_get_by_name(const char *name) 571struct net_device *dev_get_by_name(struct net *net, const char *name)
575{ 572{
576 struct net_device *dev; 573 struct net_device *dev;
577 574
578 read_lock(&dev_base_lock); 575 read_lock(&dev_base_lock);
579 dev = __dev_get_by_name(name); 576 dev = __dev_get_by_name(net, name);
580 if (dev) 577 if (dev)
581 dev_hold(dev); 578 dev_hold(dev);
582 read_unlock(&dev_base_lock); 579 read_unlock(&dev_base_lock);
@@ -594,11 +591,11 @@ struct net_device *dev_get_by_name(const char *name)
594 * or @dev_base_lock. 591 * or @dev_base_lock.
595 */ 592 */
596 593
597struct net_device *__dev_get_by_index(int ifindex) 594struct net_device *__dev_get_by_index(struct net *net, int ifindex)
598{ 595{
599 struct hlist_node *p; 596 struct hlist_node *p;
600 597
601 hlist_for_each(p, dev_index_hash(ifindex)) { 598 hlist_for_each(p, dev_index_hash(net, ifindex)) {
602 struct net_device *dev 599 struct net_device *dev
603 = hlist_entry(p, struct net_device, index_hlist); 600 = hlist_entry(p, struct net_device, index_hlist);
604 if (dev->ifindex == ifindex) 601 if (dev->ifindex == ifindex)
@@ -618,12 +615,12 @@ struct net_device *__dev_get_by_index(int ifindex)
618 * dev_put to indicate they have finished with it. 615 * dev_put to indicate they have finished with it.
619 */ 616 */
620 617
621struct net_device *dev_get_by_index(int ifindex) 618struct net_device *dev_get_by_index(struct net *net, int ifindex)
622{ 619{
623 struct net_device *dev; 620 struct net_device *dev;
624 621
625 read_lock(&dev_base_lock); 622 read_lock(&dev_base_lock);
626 dev = __dev_get_by_index(ifindex); 623 dev = __dev_get_by_index(net, ifindex);
627 if (dev) 624 if (dev)
628 dev_hold(dev); 625 dev_hold(dev);
629 read_unlock(&dev_base_lock); 626 read_unlock(&dev_base_lock);
@@ -644,13 +641,13 @@ struct net_device *dev_get_by_index(int ifindex)
644 * If the API was consistent this would be __dev_get_by_hwaddr 641 * If the API was consistent this would be __dev_get_by_hwaddr
645 */ 642 */
646 643
647struct net_device *dev_getbyhwaddr(unsigned short type, char *ha) 644struct net_device *dev_getbyhwaddr(struct net *net, unsigned short type, char *ha)
648{ 645{
649 struct net_device *dev; 646 struct net_device *dev;
650 647
651 ASSERT_RTNL(); 648 ASSERT_RTNL();
652 649
653 for_each_netdev(dev) 650 for_each_netdev(&init_net, dev)
654 if (dev->type == type && 651 if (dev->type == type &&
655 !memcmp(dev->dev_addr, ha, dev->addr_len)) 652 !memcmp(dev->dev_addr, ha, dev->addr_len))
656 return dev; 653 return dev;
@@ -660,12 +657,12 @@ struct net_device *dev_getbyhwaddr(unsigned short type, char *ha)
660 657
661EXPORT_SYMBOL(dev_getbyhwaddr); 658EXPORT_SYMBOL(dev_getbyhwaddr);
662 659
663struct net_device *__dev_getfirstbyhwtype(unsigned short type) 660struct net_device *__dev_getfirstbyhwtype(struct net *net, unsigned short type)
664{ 661{
665 struct net_device *dev; 662 struct net_device *dev;
666 663
667 ASSERT_RTNL(); 664 ASSERT_RTNL();
668 for_each_netdev(dev) 665 for_each_netdev(net, dev)
669 if (dev->type == type) 666 if (dev->type == type)
670 return dev; 667 return dev;
671 668
@@ -674,12 +671,12 @@ struct net_device *__dev_getfirstbyhwtype(unsigned short type)
674 671
675EXPORT_SYMBOL(__dev_getfirstbyhwtype); 672EXPORT_SYMBOL(__dev_getfirstbyhwtype);
676 673
677struct net_device *dev_getfirstbyhwtype(unsigned short type) 674struct net_device *dev_getfirstbyhwtype(struct net *net, unsigned short type)
678{ 675{
679 struct net_device *dev; 676 struct net_device *dev;
680 677
681 rtnl_lock(); 678 rtnl_lock();
682 dev = __dev_getfirstbyhwtype(type); 679 dev = __dev_getfirstbyhwtype(net, type);
683 if (dev) 680 if (dev)
684 dev_hold(dev); 681 dev_hold(dev);
685 rtnl_unlock(); 682 rtnl_unlock();
@@ -699,13 +696,13 @@ EXPORT_SYMBOL(dev_getfirstbyhwtype);
699 * dev_put to indicate they have finished with it. 696 * dev_put to indicate they have finished with it.
700 */ 697 */
701 698
702struct net_device * dev_get_by_flags(unsigned short if_flags, unsigned short mask) 699struct net_device * dev_get_by_flags(struct net *net, unsigned short if_flags, unsigned short mask)
703{ 700{
704 struct net_device *dev, *ret; 701 struct net_device *dev, *ret;
705 702
706 ret = NULL; 703 ret = NULL;
707 read_lock(&dev_base_lock); 704 read_lock(&dev_base_lock);
708 for_each_netdev(dev) { 705 for_each_netdev(net, dev) {
709 if (((dev->flags ^ if_flags) & mask) == 0) { 706 if (((dev->flags ^ if_flags) & mask) == 0) {
710 dev_hold(dev); 707 dev_hold(dev);
711 ret = dev; 708 ret = dev;
@@ -763,6 +760,10 @@ int dev_alloc_name(struct net_device *dev, const char *name)
763 const int max_netdevices = 8*PAGE_SIZE; 760 const int max_netdevices = 8*PAGE_SIZE;
764 long *inuse; 761 long *inuse;
765 struct net_device *d; 762 struct net_device *d;
763 struct net *net;
764
765 BUG_ON(!dev->nd_net);
766 net = dev->nd_net;
766 767
767 p = strnchr(name, IFNAMSIZ-1, '%'); 768 p = strnchr(name, IFNAMSIZ-1, '%');
768 if (p) { 769 if (p) {
@@ -779,7 +780,7 @@ int dev_alloc_name(struct net_device *dev, const char *name)
779 if (!inuse) 780 if (!inuse)
780 return -ENOMEM; 781 return -ENOMEM;
781 782
782 for_each_netdev(d) { 783 for_each_netdev(net, d) {
783 if (!sscanf(d->name, name, &i)) 784 if (!sscanf(d->name, name, &i))
784 continue; 785 continue;
785 if (i < 0 || i >= max_netdevices) 786 if (i < 0 || i >= max_netdevices)
@@ -796,7 +797,7 @@ int dev_alloc_name(struct net_device *dev, const char *name)
796 } 797 }
797 798
798 snprintf(buf, sizeof(buf), name, i); 799 snprintf(buf, sizeof(buf), name, i);
799 if (!__dev_get_by_name(buf)) { 800 if (!__dev_get_by_name(net, buf)) {
800 strlcpy(dev->name, buf, IFNAMSIZ); 801 strlcpy(dev->name, buf, IFNAMSIZ);
801 return i; 802 return i;
802 } 803 }
@@ -822,9 +823,12 @@ int dev_change_name(struct net_device *dev, char *newname)
822 char oldname[IFNAMSIZ]; 823 char oldname[IFNAMSIZ];
823 int err = 0; 824 int err = 0;
824 int ret; 825 int ret;
826 struct net *net;
825 827
826 ASSERT_RTNL(); 828 ASSERT_RTNL();
829 BUG_ON(!dev->nd_net);
827 830
831 net = dev->nd_net;
828 if (dev->flags & IFF_UP) 832 if (dev->flags & IFF_UP)
829 return -EBUSY; 833 return -EBUSY;
830 834
@@ -839,7 +843,7 @@ int dev_change_name(struct net_device *dev, char *newname)
839 return err; 843 return err;
840 strcpy(newname, dev->name); 844 strcpy(newname, dev->name);
841 } 845 }
842 else if (__dev_get_by_name(newname)) 846 else if (__dev_get_by_name(net, newname))
843 return -EEXIST; 847 return -EEXIST;
844 else 848 else
845 strlcpy(dev->name, newname, IFNAMSIZ); 849 strlcpy(dev->name, newname, IFNAMSIZ);
@@ -849,7 +853,7 @@ rollback:
849 853
850 write_lock_bh(&dev_base_lock); 854 write_lock_bh(&dev_base_lock);
851 hlist_del(&dev->name_hlist); 855 hlist_del(&dev->name_hlist);
852 hlist_add_head(&dev->name_hlist, dev_name_hash(dev->name)); 856 hlist_add_head(&dev->name_hlist, dev_name_hash(net, dev->name));
853 write_unlock_bh(&dev_base_lock); 857 write_unlock_bh(&dev_base_lock);
854 858
855 ret = raw_notifier_call_chain(&netdev_chain, NETDEV_CHANGENAME, dev); 859 ret = raw_notifier_call_chain(&netdev_chain, NETDEV_CHANGENAME, dev);
@@ -908,12 +912,12 @@ void netdev_state_change(struct net_device *dev)
908 * available in this kernel then it becomes a nop. 912 * available in this kernel then it becomes a nop.
909 */ 913 */
910 914
911void dev_load(const char *name) 915void dev_load(struct net *net, const char *name)
912{ 916{
913 struct net_device *dev; 917 struct net_device *dev;
914 918
915 read_lock(&dev_base_lock); 919 read_lock(&dev_base_lock);
916 dev = __dev_get_by_name(name); 920 dev = __dev_get_by_name(net, name);
917 read_unlock(&dev_base_lock); 921 read_unlock(&dev_base_lock);
918 922
919 if (!dev && capable(CAP_SYS_MODULE)) 923 if (!dev && capable(CAP_SYS_MODULE))
@@ -1052,6 +1056,8 @@ int dev_close(struct net_device *dev)
1052} 1056}
1053 1057
1054 1058
1059static int dev_boot_phase = 1;
1060
1055/* 1061/*
1056 * Device change register/unregister. These are not inline or static 1062 * Device change register/unregister. These are not inline or static
1057 * as we export them to the world. 1063 * as we export them to the world.
@@ -1075,23 +1081,27 @@ int register_netdevice_notifier(struct notifier_block *nb)
1075{ 1081{
1076 struct net_device *dev; 1082 struct net_device *dev;
1077 struct net_device *last; 1083 struct net_device *last;
1084 struct net *net;
1078 int err; 1085 int err;
1079 1086
1080 rtnl_lock(); 1087 rtnl_lock();
1081 err = raw_notifier_chain_register(&netdev_chain, nb); 1088 err = raw_notifier_chain_register(&netdev_chain, nb);
1082 if (err) 1089 if (err)
1083 goto unlock; 1090 goto unlock;
1091 if (dev_boot_phase)
1092 goto unlock;
1093 for_each_net(net) {
1094 for_each_netdev(net, dev) {
1095 err = nb->notifier_call(nb, NETDEV_REGISTER, dev);
1096 err = notifier_to_errno(err);
1097 if (err)
1098 goto rollback;
1099
1100 if (!(dev->flags & IFF_UP))
1101 continue;
1084 1102
1085 for_each_netdev(dev) { 1103 nb->notifier_call(nb, NETDEV_UP, dev);
1086 err = nb->notifier_call(nb, NETDEV_REGISTER, dev); 1104 }
1087 err = notifier_to_errno(err);
1088 if (err)
1089 goto rollback;
1090
1091 if (!(dev->flags & IFF_UP))
1092 continue;
1093
1094 nb->notifier_call(nb, NETDEV_UP, dev);
1095 } 1105 }
1096 1106
1097unlock: 1107unlock:
@@ -1100,15 +1110,17 @@ unlock:
1100 1110
1101rollback: 1111rollback:
1102 last = dev; 1112 last = dev;
1103 for_each_netdev(dev) { 1113 for_each_net(net) {
1104 if (dev == last) 1114 for_each_netdev(net, dev) {
1105 break; 1115 if (dev == last)
1116 break;
1106 1117
1107 if (dev->flags & IFF_UP) { 1118 if (dev->flags & IFF_UP) {
1108 nb->notifier_call(nb, NETDEV_GOING_DOWN, dev); 1119 nb->notifier_call(nb, NETDEV_GOING_DOWN, dev);
1109 nb->notifier_call(nb, NETDEV_DOWN, dev); 1120 nb->notifier_call(nb, NETDEV_DOWN, dev);
1121 }
1122 nb->notifier_call(nb, NETDEV_UNREGISTER, dev);
1110 } 1123 }
1111 nb->notifier_call(nb, NETDEV_UNREGISTER, dev);
1112 } 1124 }
1113 goto unlock; 1125 goto unlock;
1114} 1126}
@@ -2187,7 +2199,7 @@ int register_gifconf(unsigned int family, gifconf_func_t * gifconf)
2187 * match. --pb 2199 * match. --pb
2188 */ 2200 */
2189 2201
2190static int dev_ifname(struct ifreq __user *arg) 2202static int dev_ifname(struct net *net, struct ifreq __user *arg)
2191{ 2203{
2192 struct net_device *dev; 2204 struct net_device *dev;
2193 struct ifreq ifr; 2205 struct ifreq ifr;
@@ -2200,7 +2212,7 @@ static int dev_ifname(struct ifreq __user *arg)
2200 return -EFAULT; 2212 return -EFAULT;
2201 2213
2202 read_lock(&dev_base_lock); 2214 read_lock(&dev_base_lock);
2203 dev = __dev_get_by_index(ifr.ifr_ifindex); 2215 dev = __dev_get_by_index(net, ifr.ifr_ifindex);
2204 if (!dev) { 2216 if (!dev) {
2205 read_unlock(&dev_base_lock); 2217 read_unlock(&dev_base_lock);
2206 return -ENODEV; 2218 return -ENODEV;
@@ -2220,7 +2232,7 @@ static int dev_ifname(struct ifreq __user *arg)
2220 * Thus we will need a 'compatibility mode'. 2232 * Thus we will need a 'compatibility mode'.
2221 */ 2233 */
2222 2234
2223static int dev_ifconf(char __user *arg) 2235static int dev_ifconf(struct net *net, char __user *arg)
2224{ 2236{
2225 struct ifconf ifc; 2237 struct ifconf ifc;
2226 struct net_device *dev; 2238 struct net_device *dev;
@@ -2244,7 +2256,7 @@ static int dev_ifconf(char __user *arg)
2244 */ 2256 */
2245 2257
2246 total = 0; 2258 total = 0;
2247 for_each_netdev(dev) { 2259 for_each_netdev(net, dev) {
2248 for (i = 0; i < NPROTO; i++) { 2260 for (i = 0; i < NPROTO; i++) {
2249 if (gifconf_list[i]) { 2261 if (gifconf_list[i]) {
2250 int done; 2262 int done;
@@ -2278,6 +2290,7 @@ static int dev_ifconf(char __user *arg)
2278 */ 2290 */
2279void *dev_seq_start(struct seq_file *seq, loff_t *pos) 2291void *dev_seq_start(struct seq_file *seq, loff_t *pos)
2280{ 2292{
2293 struct net *net = seq->private;
2281 loff_t off; 2294 loff_t off;
2282 struct net_device *dev; 2295 struct net_device *dev;
2283 2296
@@ -2286,7 +2299,7 @@ void *dev_seq_start(struct seq_file *seq, loff_t *pos)
2286 return SEQ_START_TOKEN; 2299 return SEQ_START_TOKEN;
2287 2300
2288 off = 1; 2301 off = 1;
2289 for_each_netdev(dev) 2302 for_each_netdev(net, dev)
2290 if (off++ == *pos) 2303 if (off++ == *pos)
2291 return dev; 2304 return dev;
2292 2305
@@ -2295,9 +2308,10 @@ void *dev_seq_start(struct seq_file *seq, loff_t *pos)
2295 2308
2296void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos) 2309void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2297{ 2310{
2311 struct net *net = seq->private;
2298 ++*pos; 2312 ++*pos;
2299 return v == SEQ_START_TOKEN ? 2313 return v == SEQ_START_TOKEN ?
2300 first_net_device() : next_net_device((struct net_device *)v); 2314 first_net_device(net) : next_net_device((struct net_device *)v);
2301} 2315}
2302 2316
2303void dev_seq_stop(struct seq_file *seq, void *v) 2317void dev_seq_stop(struct seq_file *seq, void *v)
@@ -2393,7 +2407,22 @@ static const struct seq_operations dev_seq_ops = {
2393 2407
2394static int dev_seq_open(struct inode *inode, struct file *file) 2408static int dev_seq_open(struct inode *inode, struct file *file)
2395{ 2409{
2396 return seq_open(file, &dev_seq_ops); 2410 struct seq_file *seq;
2411 int res;
2412 res = seq_open(file, &dev_seq_ops);
2413 if (!res) {
2414 seq = file->private_data;
2415 seq->private = get_net(PROC_NET(inode));
2416 }
2417 return res;
2418}
2419
2420static int dev_seq_release(struct inode *inode, struct file *file)
2421{
2422 struct seq_file *seq = file->private_data;
2423 struct net *net = seq->private;
2424 put_net(net);
2425 return seq_release(inode, file);
2397} 2426}
2398 2427
2399static const struct file_operations dev_seq_fops = { 2428static const struct file_operations dev_seq_fops = {
@@ -2401,7 +2430,7 @@ static const struct file_operations dev_seq_fops = {
2401 .open = dev_seq_open, 2430 .open = dev_seq_open,
2402 .read = seq_read, 2431 .read = seq_read,
2403 .llseek = seq_lseek, 2432 .llseek = seq_lseek,
2404 .release = seq_release, 2433 .release = dev_seq_release,
2405}; 2434};
2406 2435
2407static const struct seq_operations softnet_seq_ops = { 2436static const struct seq_operations softnet_seq_ops = {
@@ -2553,30 +2582,49 @@ static const struct file_operations ptype_seq_fops = {
2553}; 2582};
2554 2583
2555 2584
2556static int __init dev_proc_init(void) 2585static int dev_proc_net_init(struct net *net)
2557{ 2586{
2558 int rc = -ENOMEM; 2587 int rc = -ENOMEM;
2559 2588
2560 if (!proc_net_fops_create(&init_net, "dev", S_IRUGO, &dev_seq_fops)) 2589 if (!proc_net_fops_create(net, "dev", S_IRUGO, &dev_seq_fops))
2561 goto out; 2590 goto out;
2562 if (!proc_net_fops_create(&init_net, "softnet_stat", S_IRUGO, &softnet_seq_fops)) 2591 if (!proc_net_fops_create(net, "softnet_stat", S_IRUGO, &softnet_seq_fops))
2563 goto out_dev; 2592 goto out_dev;
2564 if (!proc_net_fops_create(&init_net, "ptype", S_IRUGO, &ptype_seq_fops)) 2593 if (!proc_net_fops_create(net, "ptype", S_IRUGO, &ptype_seq_fops))
2565 goto out_softnet; 2594 goto out_softnet;
2566 2595
2567 if (wext_proc_init()) 2596 if (wext_proc_init(net))
2568 goto out_ptype; 2597 goto out_ptype;
2569 rc = 0; 2598 rc = 0;
2570out: 2599out:
2571 return rc; 2600 return rc;
2572out_ptype: 2601out_ptype:
2573 proc_net_remove(&init_net, "ptype"); 2602 proc_net_remove(net, "ptype");
2574out_softnet: 2603out_softnet:
2575 proc_net_remove(&init_net, "softnet_stat"); 2604 proc_net_remove(net, "softnet_stat");
2576out_dev: 2605out_dev:
2577 proc_net_remove(&init_net, "dev"); 2606 proc_net_remove(net, "dev");
2578 goto out; 2607 goto out;
2579} 2608}
2609
2610static void dev_proc_net_exit(struct net *net)
2611{
2612 wext_proc_exit(net);
2613
2614 proc_net_remove(net, "ptype");
2615 proc_net_remove(net, "softnet_stat");
2616 proc_net_remove(net, "dev");
2617}
2618
2619static struct pernet_operations dev_proc_ops = {
2620 .init = dev_proc_net_init,
2621 .exit = dev_proc_net_exit,
2622};
2623
2624static int __init dev_proc_init(void)
2625{
2626 return register_pernet_subsys(&dev_proc_ops);
2627}
2580#else 2628#else
2581#define dev_proc_init() 0 2629#define dev_proc_init() 0
2582#endif /* CONFIG_PROC_FS */ 2630#endif /* CONFIG_PROC_FS */
@@ -3011,10 +3059,10 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa)
3011/* 3059/*
3012 * Perform the SIOCxIFxxx calls. 3060 * Perform the SIOCxIFxxx calls.
3013 */ 3061 */
3014static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd) 3062static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd)
3015{ 3063{
3016 int err; 3064 int err;
3017 struct net_device *dev = __dev_get_by_name(ifr->ifr_name); 3065 struct net_device *dev = __dev_get_by_name(net, ifr->ifr_name);
3018 3066
3019 if (!dev) 3067 if (!dev)
3020 return -ENODEV; 3068 return -ENODEV;
@@ -3167,7 +3215,7 @@ static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
3167 * positive or a negative errno code on error. 3215 * positive or a negative errno code on error.
3168 */ 3216 */
3169 3217
3170int dev_ioctl(unsigned int cmd, void __user *arg) 3218int dev_ioctl(struct net *net, unsigned int cmd, void __user *arg)
3171{ 3219{
3172 struct ifreq ifr; 3220 struct ifreq ifr;
3173 int ret; 3221 int ret;
@@ -3180,12 +3228,12 @@ int dev_ioctl(unsigned int cmd, void __user *arg)
3180 3228
3181 if (cmd == SIOCGIFCONF) { 3229 if (cmd == SIOCGIFCONF) {
3182 rtnl_lock(); 3230 rtnl_lock();
3183 ret = dev_ifconf((char __user *) arg); 3231 ret = dev_ifconf(net, (char __user *) arg);
3184 rtnl_unlock(); 3232 rtnl_unlock();
3185 return ret; 3233 return ret;
3186 } 3234 }
3187 if (cmd == SIOCGIFNAME) 3235 if (cmd == SIOCGIFNAME)
3188 return dev_ifname((struct ifreq __user *)arg); 3236 return dev_ifname(net, (struct ifreq __user *)arg);
3189 3237
3190 if (copy_from_user(&ifr, arg, sizeof(struct ifreq))) 3238 if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
3191 return -EFAULT; 3239 return -EFAULT;
@@ -3215,9 +3263,9 @@ int dev_ioctl(unsigned int cmd, void __user *arg)
3215 case SIOCGIFMAP: 3263 case SIOCGIFMAP:
3216 case SIOCGIFINDEX: 3264 case SIOCGIFINDEX:
3217 case SIOCGIFTXQLEN: 3265 case SIOCGIFTXQLEN:
3218 dev_load(ifr.ifr_name); 3266 dev_load(net, ifr.ifr_name);
3219 read_lock(&dev_base_lock); 3267 read_lock(&dev_base_lock);
3220 ret = dev_ifsioc(&ifr, cmd); 3268 ret = dev_ifsioc(net, &ifr, cmd);
3221 read_unlock(&dev_base_lock); 3269 read_unlock(&dev_base_lock);
3222 if (!ret) { 3270 if (!ret) {
3223 if (colon) 3271 if (colon)
@@ -3229,9 +3277,9 @@ int dev_ioctl(unsigned int cmd, void __user *arg)
3229 return ret; 3277 return ret;
3230 3278
3231 case SIOCETHTOOL: 3279 case SIOCETHTOOL:
3232 dev_load(ifr.ifr_name); 3280 dev_load(net, ifr.ifr_name);
3233 rtnl_lock(); 3281 rtnl_lock();
3234 ret = dev_ethtool(&ifr); 3282 ret = dev_ethtool(net, &ifr);
3235 rtnl_unlock(); 3283 rtnl_unlock();
3236 if (!ret) { 3284 if (!ret) {
3237 if (colon) 3285 if (colon)
@@ -3253,9 +3301,9 @@ int dev_ioctl(unsigned int cmd, void __user *arg)
3253 case SIOCSIFNAME: 3301 case SIOCSIFNAME:
3254 if (!capable(CAP_NET_ADMIN)) 3302 if (!capable(CAP_NET_ADMIN))
3255 return -EPERM; 3303 return -EPERM;
3256 dev_load(ifr.ifr_name); 3304 dev_load(net, ifr.ifr_name);
3257 rtnl_lock(); 3305 rtnl_lock();
3258 ret = dev_ifsioc(&ifr, cmd); 3306 ret = dev_ifsioc(net, &ifr, cmd);
3259 rtnl_unlock(); 3307 rtnl_unlock();
3260 if (!ret) { 3308 if (!ret) {
3261 if (colon) 3309 if (colon)
@@ -3294,9 +3342,9 @@ int dev_ioctl(unsigned int cmd, void __user *arg)
3294 /* fall through */ 3342 /* fall through */
3295 case SIOCBONDSLAVEINFOQUERY: 3343 case SIOCBONDSLAVEINFOQUERY:
3296 case SIOCBONDINFOQUERY: 3344 case SIOCBONDINFOQUERY:
3297 dev_load(ifr.ifr_name); 3345 dev_load(net, ifr.ifr_name);
3298 rtnl_lock(); 3346 rtnl_lock();
3299 ret = dev_ifsioc(&ifr, cmd); 3347 ret = dev_ifsioc(net, &ifr, cmd);
3300 rtnl_unlock(); 3348 rtnl_unlock();
3301 return ret; 3349 return ret;
3302 3350
@@ -3316,9 +3364,9 @@ int dev_ioctl(unsigned int cmd, void __user *arg)
3316 if (cmd == SIOCWANDEV || 3364 if (cmd == SIOCWANDEV ||
3317 (cmd >= SIOCDEVPRIVATE && 3365 (cmd >= SIOCDEVPRIVATE &&
3318 cmd <= SIOCDEVPRIVATE + 15)) { 3366 cmd <= SIOCDEVPRIVATE + 15)) {
3319 dev_load(ifr.ifr_name); 3367 dev_load(net, ifr.ifr_name);
3320 rtnl_lock(); 3368 rtnl_lock();
3321 ret = dev_ifsioc(&ifr, cmd); 3369 ret = dev_ifsioc(net, &ifr, cmd);
3322 rtnl_unlock(); 3370 rtnl_unlock();
3323 if (!ret && copy_to_user(arg, &ifr, 3371 if (!ret && copy_to_user(arg, &ifr,
3324 sizeof(struct ifreq))) 3372 sizeof(struct ifreq)))
@@ -3327,7 +3375,7 @@ int dev_ioctl(unsigned int cmd, void __user *arg)
3327 } 3375 }
3328 /* Take care of Wireless Extensions */ 3376 /* Take care of Wireless Extensions */
3329 if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) 3377 if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST)
3330 return wext_handle_ioctl(&ifr, cmd, arg); 3378 return wext_handle_ioctl(net, &ifr, cmd, arg);
3331 return -EINVAL; 3379 return -EINVAL;
3332 } 3380 }
3333} 3381}
@@ -3340,19 +3388,17 @@ int dev_ioctl(unsigned int cmd, void __user *arg)
3340 * number. The caller must hold the rtnl semaphore or the 3388 * number. The caller must hold the rtnl semaphore or the
3341 * dev_base_lock to be sure it remains unique. 3389 * dev_base_lock to be sure it remains unique.
3342 */ 3390 */
3343static int dev_new_index(void) 3391static int dev_new_index(struct net *net)
3344{ 3392{
3345 static int ifindex; 3393 static int ifindex;
3346 for (;;) { 3394 for (;;) {
3347 if (++ifindex <= 0) 3395 if (++ifindex <= 0)
3348 ifindex = 1; 3396 ifindex = 1;
3349 if (!__dev_get_by_index(ifindex)) 3397 if (!__dev_get_by_index(net, ifindex))
3350 return ifindex; 3398 return ifindex;
3351 } 3399 }
3352} 3400}
3353 3401
3354static int dev_boot_phase = 1;
3355
3356/* Delayed registration/unregisteration */ 3402/* Delayed registration/unregisteration */
3357static DEFINE_SPINLOCK(net_todo_list_lock); 3403static DEFINE_SPINLOCK(net_todo_list_lock);
3358static struct list_head net_todo_list = LIST_HEAD_INIT(net_todo_list); 3404static struct list_head net_todo_list = LIST_HEAD_INIT(net_todo_list);
@@ -3386,6 +3432,7 @@ int register_netdevice(struct net_device *dev)
3386 struct hlist_head *head; 3432 struct hlist_head *head;
3387 struct hlist_node *p; 3433 struct hlist_node *p;
3388 int ret; 3434 int ret;
3435 struct net *net;
3389 3436
3390 BUG_ON(dev_boot_phase); 3437 BUG_ON(dev_boot_phase);
3391 ASSERT_RTNL(); 3438 ASSERT_RTNL();
@@ -3394,6 +3441,8 @@ int register_netdevice(struct net_device *dev)
3394 3441
3395 /* When net_device's are persistent, this will be fatal. */ 3442 /* When net_device's are persistent, this will be fatal. */
3396 BUG_ON(dev->reg_state != NETREG_UNINITIALIZED); 3443 BUG_ON(dev->reg_state != NETREG_UNINITIALIZED);
3444 BUG_ON(!dev->nd_net);
3445 net = dev->nd_net;
3397 3446
3398 spin_lock_init(&dev->queue_lock); 3447 spin_lock_init(&dev->queue_lock);
3399 spin_lock_init(&dev->_xmit_lock); 3448 spin_lock_init(&dev->_xmit_lock);
@@ -3418,12 +3467,12 @@ int register_netdevice(struct net_device *dev)
3418 goto err_uninit; 3467 goto err_uninit;
3419 } 3468 }
3420 3469
3421 dev->ifindex = dev_new_index(); 3470 dev->ifindex = dev_new_index(net);
3422 if (dev->iflink == -1) 3471 if (dev->iflink == -1)
3423 dev->iflink = dev->ifindex; 3472 dev->iflink = dev->ifindex;
3424 3473
3425 /* Check for existence of name */ 3474 /* Check for existence of name */
3426 head = dev_name_hash(dev->name); 3475 head = dev_name_hash(net, dev->name);
3427 hlist_for_each(p, head) { 3476 hlist_for_each(p, head) {
3428 struct net_device *d 3477 struct net_device *d
3429 = hlist_entry(p, struct net_device, name_hlist); 3478 = hlist_entry(p, struct net_device, name_hlist);
@@ -3501,9 +3550,9 @@ int register_netdevice(struct net_device *dev)
3501 3550
3502 dev_init_scheduler(dev); 3551 dev_init_scheduler(dev);
3503 write_lock_bh(&dev_base_lock); 3552 write_lock_bh(&dev_base_lock);
3504 list_add_tail(&dev->dev_list, &dev_base_head); 3553 list_add_tail(&dev->dev_list, &net->dev_base_head);
3505 hlist_add_head(&dev->name_hlist, head); 3554 hlist_add_head(&dev->name_hlist, head);
3506 hlist_add_head(&dev->index_hlist, dev_index_hash(dev->ifindex)); 3555 hlist_add_head(&dev->index_hlist, dev_index_hash(net, dev->ifindex));
3507 dev_hold(dev); 3556 dev_hold(dev);
3508 write_unlock_bh(&dev_base_lock); 3557 write_unlock_bh(&dev_base_lock);
3509 3558
@@ -4067,6 +4116,45 @@ int netdev_compute_features(unsigned long all, unsigned long one)
4067} 4116}
4068EXPORT_SYMBOL(netdev_compute_features); 4117EXPORT_SYMBOL(netdev_compute_features);
4069 4118
4119/* Initialize per network namespace state */
4120static int netdev_init(struct net *net)
4121{
4122 int i;
4123 INIT_LIST_HEAD(&net->dev_base_head);
4124 rwlock_init(&dev_base_lock);
4125
4126 net->dev_name_head = kmalloc(
4127 sizeof(*net->dev_name_head)*NETDEV_HASHENTRIES, GFP_KERNEL);
4128 if (!net->dev_name_head)
4129 return -ENOMEM;
4130
4131 net->dev_index_head = kmalloc(
4132 sizeof(*net->dev_index_head)*NETDEV_HASHENTRIES, GFP_KERNEL);
4133 if (!net->dev_index_head) {
4134 kfree(net->dev_name_head);
4135 return -ENOMEM;
4136 }
4137
4138 for (i = 0; i < NETDEV_HASHENTRIES; i++)
4139 INIT_HLIST_HEAD(&net->dev_name_head[i]);
4140
4141 for (i = 0; i < NETDEV_HASHENTRIES; i++)
4142 INIT_HLIST_HEAD(&net->dev_index_head[i]);
4143
4144 return 0;
4145}
4146
4147static void netdev_exit(struct net *net)
4148{
4149 kfree(net->dev_name_head);
4150 kfree(net->dev_index_head);
4151}
4152
4153static struct pernet_operations netdev_net_ops = {
4154 .init = netdev_init,
4155 .exit = netdev_exit,
4156};
4157
4070/* 4158/*
4071 * Initialize the DEV module. At boot time this walks the device list and 4159 * Initialize the DEV module. At boot time this walks the device list and
4072 * unhooks any devices that fail to initialise (normally hardware not 4160 * unhooks any devices that fail to initialise (normally hardware not
@@ -4094,11 +4182,8 @@ static int __init net_dev_init(void)
4094 for (i = 0; i < 16; i++) 4182 for (i = 0; i < 16; i++)
4095 INIT_LIST_HEAD(&ptype_base[i]); 4183 INIT_LIST_HEAD(&ptype_base[i]);
4096 4184
4097 for (i = 0; i < ARRAY_SIZE(dev_name_head); i++) 4185 if (register_pernet_subsys(&netdev_net_ops))
4098 INIT_HLIST_HEAD(&dev_name_head[i]); 4186 goto out;
4099
4100 for (i = 0; i < ARRAY_SIZE(dev_index_head); i++)
4101 INIT_HLIST_HEAD(&dev_index_head[i]);
4102 4187
4103 /* 4188 /*
4104 * Initialise the packet receive queues. 4189 * Initialise the packet receive queues.
diff --git a/net/core/dev_mcast.c b/net/core/dev_mcast.c
index 8e069fc207c..1c4f6198459 100644
--- a/net/core/dev_mcast.c
+++ b/net/core/dev_mcast.c
@@ -187,11 +187,12 @@ EXPORT_SYMBOL(dev_mc_unsync);
187#ifdef CONFIG_PROC_FS 187#ifdef CONFIG_PROC_FS
188static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos) 188static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos)
189{ 189{
190 struct net *net = seq->private;
190 struct net_device *dev; 191 struct net_device *dev;
191 loff_t off = 0; 192 loff_t off = 0;
192 193
193 read_lock(&dev_base_lock); 194 read_lock(&dev_base_lock);
194 for_each_netdev(dev) { 195 for_each_netdev(net, dev) {
195 if (off++ == *pos) 196 if (off++ == *pos)
196 return dev; 197 return dev;
197 } 198 }
@@ -240,7 +241,22 @@ static const struct seq_operations dev_mc_seq_ops = {
240 241
241static int dev_mc_seq_open(struct inode *inode, struct file *file) 242static int dev_mc_seq_open(struct inode *inode, struct file *file)
242{ 243{
243 return seq_open(file, &dev_mc_seq_ops); 244 struct seq_file *seq;
245 int res;
246 res = seq_open(file, &dev_mc_seq_ops);
247 if (!res) {
248 seq = file->private_data;
249 seq->private = get_net(PROC_NET(inode));
250 }
251 return res;
252}
253
254static int dev_mc_seq_release(struct inode *inode, struct file *file)
255{
256 struct seq_file *seq = file->private_data;
257 struct net *net = seq->private;
258 put_net(net);
259 return seq_release(inode, file);
244} 260}
245 261
246static const struct file_operations dev_mc_seq_fops = { 262static const struct file_operations dev_mc_seq_fops = {
@@ -248,14 +264,31 @@ static const struct file_operations dev_mc_seq_fops = {
248 .open = dev_mc_seq_open, 264 .open = dev_mc_seq_open,
249 .read = seq_read, 265 .read = seq_read,
250 .llseek = seq_lseek, 266 .llseek = seq_lseek,
251 .release = seq_release, 267 .release = dev_mc_seq_release,
252}; 268};
253 269
254#endif 270#endif
255 271
272static int dev_mc_net_init(struct net *net)
273{
274 if (!proc_net_fops_create(net, "dev_mcast", 0, &dev_mc_seq_fops))
275 return -ENOMEM;
276 return 0;
277}
278
279static void dev_mc_net_exit(struct net *net)
280{
281 proc_net_remove(net, "dev_mcast");
282}
283
284static struct pernet_operations dev_mc_net_ops = {
285 .init = dev_mc_net_init,
286 .exit = dev_mc_net_exit,
287};
288
256void __init dev_mcast_init(void) 289void __init dev_mcast_init(void)
257{ 290{
258 proc_net_fops_create(&init_net, "dev_mcast", 0, &dev_mc_seq_fops); 291 register_pernet_subsys(&dev_mc_net_ops);
259} 292}
260 293
261EXPORT_SYMBOL(dev_mc_add); 294EXPORT_SYMBOL(dev_mc_add);
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index 7c43f032a7f..0d0b13cc1dd 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -779,9 +779,9 @@ static int ethtool_set_value(struct net_device *dev, char __user *useraddr,
779 779
780/* The main entry point in this file. Called from net/core/dev.c */ 780/* The main entry point in this file. Called from net/core/dev.c */
781 781
782int dev_ethtool(struct ifreq *ifr) 782int dev_ethtool(struct net *net, struct ifreq *ifr)
783{ 783{
784 struct net_device *dev = __dev_get_by_name(ifr->ifr_name); 784 struct net_device *dev = __dev_get_by_name(net, ifr->ifr_name);
785 void __user *useraddr = ifr->ifr_data; 785 void __user *useraddr = ifr->ifr_data;
786 u32 ethcmd; 786 u32 ethcmd;
787 int rc; 787 int rc;
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c
index 9eabe1ae01d..1ba71baf87e 100644
--- a/net/core/fib_rules.c
+++ b/net/core/fib_rules.c
@@ -12,6 +12,7 @@
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/list.h> 13#include <linux/list.h>
14#include <net/net_namespace.h> 14#include <net/net_namespace.h>
15#include <net/sock.h>
15#include <net/fib_rules.h> 16#include <net/fib_rules.h>
16 17
17static LIST_HEAD(rules_ops); 18static LIST_HEAD(rules_ops);
@@ -198,6 +199,7 @@ errout:
198 199
199static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) 200static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
200{ 201{
202 struct net *net = skb->sk->sk_net;
201 struct fib_rule_hdr *frh = nlmsg_data(nlh); 203 struct fib_rule_hdr *frh = nlmsg_data(nlh);
202 struct fib_rules_ops *ops = NULL; 204 struct fib_rules_ops *ops = NULL;
203 struct fib_rule *rule, *r, *last = NULL; 205 struct fib_rule *rule, *r, *last = NULL;
@@ -235,7 +237,7 @@ static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
235 237
236 rule->ifindex = -1; 238 rule->ifindex = -1;
237 nla_strlcpy(rule->ifname, tb[FRA_IFNAME], IFNAMSIZ); 239 nla_strlcpy(rule->ifname, tb[FRA_IFNAME], IFNAMSIZ);
238 dev = __dev_get_by_name(rule->ifname); 240 dev = __dev_get_by_name(net, rule->ifname);
239 if (dev) 241 if (dev)
240 rule->ifindex = dev->ifindex; 242 rule->ifindex = dev->ifindex;
241 } 243 }
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 5f25f4f79b8..2c6577c1eed 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -1441,6 +1441,7 @@ int neigh_table_clear(struct neigh_table *tbl)
1441 1441
1442static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 1442static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
1443{ 1443{
1444 struct net *net = skb->sk->sk_net;
1444 struct ndmsg *ndm; 1445 struct ndmsg *ndm;
1445 struct nlattr *dst_attr; 1446 struct nlattr *dst_attr;
1446 struct neigh_table *tbl; 1447 struct neigh_table *tbl;
@@ -1456,7 +1457,7 @@ static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
1456 1457
1457 ndm = nlmsg_data(nlh); 1458 ndm = nlmsg_data(nlh);
1458 if (ndm->ndm_ifindex) { 1459 if (ndm->ndm_ifindex) {
1459 dev = dev_get_by_index(ndm->ndm_ifindex); 1460 dev = dev_get_by_index(net, ndm->ndm_ifindex);
1460 if (dev == NULL) { 1461 if (dev == NULL) {
1461 err = -ENODEV; 1462 err = -ENODEV;
1462 goto out; 1463 goto out;
@@ -1506,6 +1507,7 @@ out:
1506 1507
1507static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 1508static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
1508{ 1509{
1510 struct net *net = skb->sk->sk_net;
1509 struct ndmsg *ndm; 1511 struct ndmsg *ndm;
1510 struct nlattr *tb[NDA_MAX+1]; 1512 struct nlattr *tb[NDA_MAX+1];
1511 struct neigh_table *tbl; 1513 struct neigh_table *tbl;
@@ -1522,7 +1524,7 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
1522 1524
1523 ndm = nlmsg_data(nlh); 1525 ndm = nlmsg_data(nlh);
1524 if (ndm->ndm_ifindex) { 1526 if (ndm->ndm_ifindex) {
1525 dev = dev_get_by_index(ndm->ndm_ifindex); 1527 dev = dev_get_by_index(net, ndm->ndm_ifindex);
1526 if (dev == NULL) { 1528 if (dev == NULL) {
1527 err = -ENODEV; 1529 err = -ENODEV;
1528 goto out; 1530 goto out;
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index 0952f936b29..bb7523a5b40 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -653,7 +653,7 @@ int netpoll_setup(struct netpoll *np)
653 int err; 653 int err;
654 654
655 if (np->dev_name) 655 if (np->dev_name)
656 ndev = dev_get_by_name(np->dev_name); 656 ndev = dev_get_by_name(&init_net, np->dev_name);
657 if (!ndev) { 657 if (!ndev) {
658 printk(KERN_ERR "%s: %s doesn't exist, aborting.\n", 658 printk(KERN_ERR "%s: %s doesn't exist, aborting.\n",
659 np->name, np->dev_name); 659 np->name, np->dev_name);
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index d7c30ce095a..94e42be16da 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -2008,7 +2008,7 @@ static int pktgen_setup_dev(struct pktgen_dev *pkt_dev, const char *ifname)
2008 pkt_dev->odev = NULL; 2008 pkt_dev->odev = NULL;
2009 } 2009 }
2010 2010
2011 odev = dev_get_by_name(ifname); 2011 odev = dev_get_by_name(&init_net, ifname);
2012 if (!odev) { 2012 if (!odev) {
2013 printk(KERN_ERR "pktgen: no such netdevice: \"%s\"\n", ifname); 2013 printk(KERN_ERR "pktgen: no such netdevice: \"%s\"\n", ifname);
2014 return -ENODEV; 2014 return -ENODEV;
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 416768d1e0c..44f91bb1ae8 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -306,10 +306,13 @@ EXPORT_SYMBOL_GPL(rtnl_link_register);
306void __rtnl_link_unregister(struct rtnl_link_ops *ops) 306void __rtnl_link_unregister(struct rtnl_link_ops *ops)
307{ 307{
308 struct net_device *dev, *n; 308 struct net_device *dev, *n;
309 struct net *net;
309 310
310 for_each_netdev_safe(dev, n) { 311 for_each_net(net) {
311 if (dev->rtnl_link_ops == ops) 312 for_each_netdev_safe(net, dev, n) {
312 ops->dellink(dev); 313 if (dev->rtnl_link_ops == ops)
314 ops->dellink(dev);
315 }
313 } 316 }
314 list_del(&ops->list); 317 list_del(&ops->list);
315} 318}
@@ -693,12 +696,13 @@ nla_put_failure:
693 696
694static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) 697static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
695{ 698{
699 struct net *net = skb->sk->sk_net;
696 int idx; 700 int idx;
697 int s_idx = cb->args[0]; 701 int s_idx = cb->args[0];
698 struct net_device *dev; 702 struct net_device *dev;
699 703
700 idx = 0; 704 idx = 0;
701 for_each_netdev(dev) { 705 for_each_netdev(net, dev) {
702 if (idx < s_idx) 706 if (idx < s_idx)
703 goto cont; 707 goto cont;
704 if (rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK, 708 if (rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK,
@@ -858,6 +862,7 @@ errout:
858 862
859static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 863static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
860{ 864{
865 struct net *net = skb->sk->sk_net;
861 struct ifinfomsg *ifm; 866 struct ifinfomsg *ifm;
862 struct net_device *dev; 867 struct net_device *dev;
863 int err; 868 int err;
@@ -876,9 +881,9 @@ static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
876 err = -EINVAL; 881 err = -EINVAL;
877 ifm = nlmsg_data(nlh); 882 ifm = nlmsg_data(nlh);
878 if (ifm->ifi_index > 0) 883 if (ifm->ifi_index > 0)
879 dev = dev_get_by_index(ifm->ifi_index); 884 dev = dev_get_by_index(net, ifm->ifi_index);
880 else if (tb[IFLA_IFNAME]) 885 else if (tb[IFLA_IFNAME])
881 dev = dev_get_by_name(ifname); 886 dev = dev_get_by_name(net, ifname);
882 else 887 else
883 goto errout; 888 goto errout;
884 889
@@ -904,6 +909,7 @@ errout:
904 909
905static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 910static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
906{ 911{
912 struct net *net = skb->sk->sk_net;
907 const struct rtnl_link_ops *ops; 913 const struct rtnl_link_ops *ops;
908 struct net_device *dev; 914 struct net_device *dev;
909 struct ifinfomsg *ifm; 915 struct ifinfomsg *ifm;
@@ -920,9 +926,9 @@ static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
920 926
921 ifm = nlmsg_data(nlh); 927 ifm = nlmsg_data(nlh);
922 if (ifm->ifi_index > 0) 928 if (ifm->ifi_index > 0)
923 dev = __dev_get_by_index(ifm->ifi_index); 929 dev = __dev_get_by_index(net, ifm->ifi_index);
924 else if (tb[IFLA_IFNAME]) 930 else if (tb[IFLA_IFNAME])
925 dev = __dev_get_by_name(ifname); 931 dev = __dev_get_by_name(net, ifname);
926 else 932 else
927 return -EINVAL; 933 return -EINVAL;
928 934
@@ -937,7 +943,7 @@ static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
937 return 0; 943 return 0;
938} 944}
939 945
940struct net_device *rtnl_create_link(char *ifname, 946struct net_device *rtnl_create_link(struct net *net, char *ifname,
941 const struct rtnl_link_ops *ops, struct nlattr *tb[]) 947 const struct rtnl_link_ops *ops, struct nlattr *tb[])
942{ 948{
943 int err; 949 int err;
@@ -954,6 +960,7 @@ struct net_device *rtnl_create_link(char *ifname,
954 goto err_free; 960 goto err_free;
955 } 961 }
956 962
963 dev->nd_net = net;
957 dev->rtnl_link_ops = ops; 964 dev->rtnl_link_ops = ops;
958 965
959 if (tb[IFLA_MTU]) 966 if (tb[IFLA_MTU])
@@ -981,6 +988,7 @@ err:
981 988
982static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) 989static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
983{ 990{
991 struct net *net = skb->sk->sk_net;
984 const struct rtnl_link_ops *ops; 992 const struct rtnl_link_ops *ops;
985 struct net_device *dev; 993 struct net_device *dev;
986 struct ifinfomsg *ifm; 994 struct ifinfomsg *ifm;
@@ -1004,9 +1012,9 @@ replay:
1004 1012
1005 ifm = nlmsg_data(nlh); 1013 ifm = nlmsg_data(nlh);
1006 if (ifm->ifi_index > 0) 1014 if (ifm->ifi_index > 0)
1007 dev = __dev_get_by_index(ifm->ifi_index); 1015 dev = __dev_get_by_index(net, ifm->ifi_index);
1008 else if (ifname[0]) 1016 else if (ifname[0])
1009 dev = __dev_get_by_name(ifname); 1017 dev = __dev_get_by_name(net, ifname);
1010 else 1018 else
1011 dev = NULL; 1019 dev = NULL;
1012 1020
@@ -1092,7 +1100,7 @@ replay:
1092 if (!ifname[0]) 1100 if (!ifname[0])
1093 snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind); 1101 snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind);
1094 1102
1095 dev = rtnl_create_link(ifname, ops, tb); 1103 dev = rtnl_create_link(net, ifname, ops, tb);
1096 1104
1097 if (IS_ERR(dev)) 1105 if (IS_ERR(dev))
1098 err = PTR_ERR(dev); 1106 err = PTR_ERR(dev);
@@ -1109,6 +1117,7 @@ replay:
1109 1117
1110static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) 1118static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
1111{ 1119{
1120 struct net *net = skb->sk->sk_net;
1112 struct ifinfomsg *ifm; 1121 struct ifinfomsg *ifm;
1113 struct nlattr *tb[IFLA_MAX+1]; 1122 struct nlattr *tb[IFLA_MAX+1];
1114 struct net_device *dev = NULL; 1123 struct net_device *dev = NULL;
@@ -1121,7 +1130,7 @@ static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
1121 1130
1122 ifm = nlmsg_data(nlh); 1131 ifm = nlmsg_data(nlh);
1123 if (ifm->ifi_index > 0) { 1132 if (ifm->ifi_index > 0) {
1124 dev = dev_get_by_index(ifm->ifi_index); 1133 dev = dev_get_by_index(net, ifm->ifi_index);
1125 if (dev == NULL) 1134 if (dev == NULL)
1126 return -ENODEV; 1135 return -ENODEV;
1127 } else 1136 } else
diff --git a/net/core/sock.c b/net/core/sock.c
index a31455dc702..4ed9b507c1e 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -367,6 +367,7 @@ static int sock_bindtodevice(struct sock *sk, char __user *optval, int optlen)
367{ 367{
368 int ret = -ENOPROTOOPT; 368 int ret = -ENOPROTOOPT;
369#ifdef CONFIG_NETDEVICES 369#ifdef CONFIG_NETDEVICES
370 struct net *net = sk->sk_net;
370 char devname[IFNAMSIZ]; 371 char devname[IFNAMSIZ];
371 int index; 372 int index;
372 373
@@ -395,7 +396,7 @@ static int sock_bindtodevice(struct sock *sk, char __user *optval, int optlen)
395 if (devname[0] == '\0') { 396 if (devname[0] == '\0') {
396 index = 0; 397 index = 0;
397 } else { 398 } else {
398 struct net_device *dev = dev_get_by_name(devname); 399 struct net_device *dev = dev_get_by_name(net, devname);
399 400
400 ret = -ENODEV; 401 ret = -ENODEV;
401 if (!dev) 402 if (!dev)
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c
index 83398da5d76..aabe98d9402 100644
--- a/net/decnet/af_decnet.c
+++ b/net/decnet/af_decnet.c
@@ -751,7 +751,7 @@ static int dn_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
751 if (dn_ntohs(saddr->sdn_nodeaddrl)) { 751 if (dn_ntohs(saddr->sdn_nodeaddrl)) {
752 read_lock(&dev_base_lock); 752 read_lock(&dev_base_lock);
753 ldev = NULL; 753 ldev = NULL;
754 for_each_netdev(dev) { 754 for_each_netdev(&init_net, dev) {
755 if (!dev->dn_ptr) 755 if (!dev->dn_ptr)
756 continue; 756 continue;
757 if (dn_dev_islocal(dev, dn_saddr2dn(saddr))) { 757 if (dn_dev_islocal(dev, dn_saddr2dn(saddr))) {
diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c
index 83cb0761336..ddfd2aff44d 100644
--- a/net/decnet/dn_dev.c
+++ b/net/decnet/dn_dev.c
@@ -513,7 +513,7 @@ int dn_dev_ioctl(unsigned int cmd, void __user *arg)
513 ifr->ifr_name[IFNAMSIZ-1] = 0; 513 ifr->ifr_name[IFNAMSIZ-1] = 0;
514 514
515#ifdef CONFIG_KMOD 515#ifdef CONFIG_KMOD
516 dev_load(ifr->ifr_name); 516 dev_load(&init_net, ifr->ifr_name);
517#endif 517#endif
518 518
519 switch(cmd) { 519 switch(cmd) {
@@ -531,7 +531,7 @@ int dn_dev_ioctl(unsigned int cmd, void __user *arg)
531 531
532 rtnl_lock(); 532 rtnl_lock();
533 533
534 if ((dev = __dev_get_by_name(ifr->ifr_name)) == NULL) { 534 if ((dev = __dev_get_by_name(&init_net, ifr->ifr_name)) == NULL) {
535 ret = -ENODEV; 535 ret = -ENODEV;
536 goto done; 536 goto done;
537 } 537 }
@@ -629,7 +629,7 @@ static struct dn_dev *dn_dev_by_index(int ifindex)
629{ 629{
630 struct net_device *dev; 630 struct net_device *dev;
631 struct dn_dev *dn_dev = NULL; 631 struct dn_dev *dn_dev = NULL;
632 dev = dev_get_by_index(ifindex); 632 dev = dev_get_by_index(&init_net, ifindex);
633 if (dev) { 633 if (dev) {
634 dn_dev = dev->dn_ptr; 634 dn_dev = dev->dn_ptr;
635 dev_put(dev); 635 dev_put(dev);
@@ -694,7 +694,7 @@ static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
694 return -EINVAL; 694 return -EINVAL;
695 695
696 ifm = nlmsg_data(nlh); 696 ifm = nlmsg_data(nlh);
697 if ((dev = __dev_get_by_index(ifm->ifa_index)) == NULL) 697 if ((dev = __dev_get_by_index(&init_net, ifm->ifa_index)) == NULL)
698 return -ENODEV; 698 return -ENODEV;
699 699
700 if ((dn_db = dev->dn_ptr) == NULL) { 700 if ((dn_db = dev->dn_ptr) == NULL) {
@@ -800,7 +800,7 @@ static int dn_nl_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
800 skip_naddr = cb->args[1]; 800 skip_naddr = cb->args[1];
801 801
802 idx = 0; 802 idx = 0;
803 for_each_netdev(dev) { 803 for_each_netdev(&init_net, dev) {
804 if (idx < skip_ndevs) 804 if (idx < skip_ndevs)
805 goto cont; 805 goto cont;
806 else if (idx > skip_ndevs) { 806 else if (idx > skip_ndevs) {
@@ -1297,7 +1297,7 @@ void dn_dev_devices_off(void)
1297 struct net_device *dev; 1297 struct net_device *dev;
1298 1298
1299 rtnl_lock(); 1299 rtnl_lock();
1300 for_each_netdev(dev) 1300 for_each_netdev(&init_net, dev)
1301 dn_dev_down(dev); 1301 dn_dev_down(dev);
1302 rtnl_unlock(); 1302 rtnl_unlock();
1303 1303
@@ -1308,7 +1308,7 @@ void dn_dev_devices_on(void)
1308 struct net_device *dev; 1308 struct net_device *dev;
1309 1309
1310 rtnl_lock(); 1310 rtnl_lock();
1311 for_each_netdev(dev) { 1311 for_each_netdev(&init_net, dev) {
1312 if (dev->flags & IFF_UP) 1312 if (dev->flags & IFF_UP)
1313 dn_dev_up(dev); 1313 dn_dev_up(dev);
1314 } 1314 }
@@ -1342,7 +1342,7 @@ static void *dn_dev_seq_start(struct seq_file *seq, loff_t *pos)
1342 return SEQ_START_TOKEN; 1342 return SEQ_START_TOKEN;
1343 1343
1344 i = 1; 1344 i = 1;
1345 for_each_netdev(dev) { 1345 for_each_netdev(&init_net, dev) {
1346 if (!is_dn_dev(dev)) 1346 if (!is_dn_dev(dev))
1347 continue; 1347 continue;
1348 1348
@@ -1361,9 +1361,9 @@ static void *dn_dev_seq_next(struct seq_file *seq, void *v, loff_t *pos)
1361 1361
1362 dev = (struct net_device *)v; 1362 dev = (struct net_device *)v;
1363 if (v == SEQ_START_TOKEN) 1363 if (v == SEQ_START_TOKEN)
1364 dev = net_device_entry(&dev_base_head); 1364 dev = net_device_entry(&init_net.dev_base_head);
1365 1365
1366 for_each_netdev_continue(dev) { 1366 for_each_netdev_continue(&init_net, dev) {
1367 if (!is_dn_dev(dev)) 1367 if (!is_dn_dev(dev))
1368 continue; 1368 continue;
1369 1369
diff --git a/net/decnet/dn_fib.c b/net/decnet/dn_fib.c
index d2bc19d4795..3760a20d10d 100644
--- a/net/decnet/dn_fib.c
+++ b/net/decnet/dn_fib.c
@@ -212,7 +212,7 @@ static int dn_fib_check_nh(const struct rtmsg *r, struct dn_fib_info *fi, struct
212 return -EINVAL; 212 return -EINVAL;
213 if (dnet_addr_type(nh->nh_gw) != RTN_UNICAST) 213 if (dnet_addr_type(nh->nh_gw) != RTN_UNICAST)
214 return -EINVAL; 214 return -EINVAL;
215 if ((dev = __dev_get_by_index(nh->nh_oif)) == NULL) 215 if ((dev = __dev_get_by_index(&init_net, nh->nh_oif)) == NULL)
216 return -ENODEV; 216 return -ENODEV;
217 if (!(dev->flags&IFF_UP)) 217 if (!(dev->flags&IFF_UP))
218 return -ENETDOWN; 218 return -ENETDOWN;
@@ -255,7 +255,7 @@ out:
255 if (nh->nh_flags&(RTNH_F_PERVASIVE|RTNH_F_ONLINK)) 255 if (nh->nh_flags&(RTNH_F_PERVASIVE|RTNH_F_ONLINK))
256 return -EINVAL; 256 return -EINVAL;
257 257
258 dev = __dev_get_by_index(nh->nh_oif); 258 dev = __dev_get_by_index(&init_net, nh->nh_oif);
259 if (dev == NULL || dev->dn_ptr == NULL) 259 if (dev == NULL || dev->dn_ptr == NULL)
260 return -ENODEV; 260 return -ENODEV;
261 if (!(dev->flags&IFF_UP)) 261 if (!(dev->flags&IFF_UP))
@@ -355,7 +355,7 @@ struct dn_fib_info *dn_fib_create_info(const struct rtmsg *r, struct dn_kern_rta
355 if (nhs != 1 || nh->nh_gw) 355 if (nhs != 1 || nh->nh_gw)
356 goto err_inval; 356 goto err_inval;
357 nh->nh_scope = RT_SCOPE_NOWHERE; 357 nh->nh_scope = RT_SCOPE_NOWHERE;
358 nh->nh_dev = dev_get_by_index(fi->fib_nh->nh_oif); 358 nh->nh_dev = dev_get_by_index(&init_net, fi->fib_nh->nh_oif);
359 err = -ENODEV; 359 err = -ENODEV;
360 if (nh->nh_dev == NULL) 360 if (nh->nh_dev == NULL)
361 goto failure; 361 goto failure;
@@ -602,7 +602,7 @@ static void dn_fib_del_ifaddr(struct dn_ifaddr *ifa)
602 602
603 /* Scan device list */ 603 /* Scan device list */
604 read_lock(&dev_base_lock); 604 read_lock(&dev_base_lock);
605 for_each_netdev(dev) { 605 for_each_netdev(&init_net, dev) {
606 dn_db = dev->dn_ptr; 606 dn_db = dev->dn_ptr;
607 if (dn_db == NULL) 607 if (dn_db == NULL)
608 continue; 608 continue;
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
index 580e786d0c3..70b1c3fa00f 100644
--- a/net/decnet/dn_route.c
+++ b/net/decnet/dn_route.c
@@ -908,7 +908,7 @@ static int dn_route_output_slow(struct dst_entry **pprt, const struct flowi *old
908 908
909 /* If we have an output interface, verify its a DECnet device */ 909 /* If we have an output interface, verify its a DECnet device */
910 if (oldflp->oif) { 910 if (oldflp->oif) {
911 dev_out = dev_get_by_index(oldflp->oif); 911 dev_out = dev_get_by_index(&init_net, oldflp->oif);
912 err = -ENODEV; 912 err = -ENODEV;
913 if (dev_out && dev_out->dn_ptr == NULL) { 913 if (dev_out && dev_out->dn_ptr == NULL) {
914 dev_put(dev_out); 914 dev_put(dev_out);
@@ -929,7 +929,7 @@ static int dn_route_output_slow(struct dst_entry **pprt, const struct flowi *old
929 goto out; 929 goto out;
930 } 930 }
931 read_lock(&dev_base_lock); 931 read_lock(&dev_base_lock);
932 for_each_netdev(dev) { 932 for_each_netdev(&init_net, dev) {
933 if (!dev->dn_ptr) 933 if (!dev->dn_ptr)
934 continue; 934 continue;
935 if (!dn_dev_islocal(dev, oldflp->fld_src)) 935 if (!dn_dev_islocal(dev, oldflp->fld_src))
@@ -1556,7 +1556,7 @@ static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, void
1556 1556
1557 if (fl.iif) { 1557 if (fl.iif) {
1558 struct net_device *dev; 1558 struct net_device *dev;
1559 if ((dev = dev_get_by_index(fl.iif)) == NULL) { 1559 if ((dev = dev_get_by_index(&init_net, fl.iif)) == NULL) {
1560 kfree_skb(skb); 1560 kfree_skb(skb);
1561 return -ENODEV; 1561 return -ENODEV;
1562 } 1562 }
diff --git a/net/decnet/sysctl_net_decnet.c b/net/decnet/sysctl_net_decnet.c
index 52e40d7eb22..ae354a43fb9 100644
--- a/net/decnet/sysctl_net_decnet.c
+++ b/net/decnet/sysctl_net_decnet.c
@@ -259,7 +259,7 @@ static int dn_def_dev_strategy(ctl_table *table, int __user *name, int nlen,
259 259
260 devname[newlen] = 0; 260 devname[newlen] = 0;
261 261
262 dev = dev_get_by_name(devname); 262 dev = dev_get_by_name(&init_net, devname);
263 if (dev == NULL) 263 if (dev == NULL)
264 return -ENODEV; 264 return -ENODEV;
265 265
@@ -299,7 +299,7 @@ static int dn_def_dev_handler(ctl_table *table, int write,
299 devname[*lenp] = 0; 299 devname[*lenp] = 0;
300 strip_it(devname); 300 strip_it(devname);
301 301
302 dev = dev_get_by_name(devname); 302 dev = dev_get_by_name(&init_net, devname);
303 if (dev == NULL) 303 if (dev == NULL)
304 return -ENODEV; 304 return -ENODEV;
305 305
diff --git a/net/econet/af_econet.c b/net/econet/af_econet.c
index f877f3b5c72..9938e76a8ff 100644
--- a/net/econet/af_econet.c
+++ b/net/econet/af_econet.c
@@ -662,7 +662,7 @@ static int ec_dev_ioctl(struct socket *sock, unsigned int cmd, void __user *arg)
662 if (copy_from_user(&ifr, arg, sizeof(struct ifreq))) 662 if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
663 return -EFAULT; 663 return -EFAULT;
664 664
665 if ((dev = dev_get_by_name(ifr.ifr_name)) == NULL) 665 if ((dev = dev_get_by_name(&init_net, ifr.ifr_name)) == NULL)
666 return -ENODEV; 666 return -ENODEV;
667 667
668 sec = (struct sockaddr_ec *)&ifr.ifr_addr; 668 sec = (struct sockaddr_ec *)&ifr.ifr_addr;
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index a11e7a5c1da..3a683006d76 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -981,7 +981,7 @@ static int arp_req_set(struct arpreq *r, struct net_device * dev)
981 if (mask && mask != htonl(0xFFFFFFFF)) 981 if (mask && mask != htonl(0xFFFFFFFF))
982 return -EINVAL; 982 return -EINVAL;
983 if (!dev && (r->arp_flags & ATF_COM)) { 983 if (!dev && (r->arp_flags & ATF_COM)) {
984 dev = dev_getbyhwaddr(r->arp_ha.sa_family, r->arp_ha.sa_data); 984 dev = dev_getbyhwaddr(&init_net, r->arp_ha.sa_family, r->arp_ha.sa_data);
985 if (!dev) 985 if (!dev)
986 return -ENODEV; 986 return -ENODEV;
987 } 987 }
@@ -1169,7 +1169,7 @@ int arp_ioctl(unsigned int cmd, void __user *arg)
1169 rtnl_lock(); 1169 rtnl_lock();
1170 if (r.arp_dev[0]) { 1170 if (r.arp_dev[0]) {
1171 err = -ENODEV; 1171 err = -ENODEV;
1172 if ((dev = __dev_get_by_name(r.arp_dev)) == NULL) 1172 if ((dev = __dev_get_by_name(&init_net, r.arp_dev)) == NULL)
1173 goto out; 1173 goto out;
1174 1174
1175 /* Mmmm... It is wrong... ARPHRD_NETROM==0 */ 1175 /* Mmmm... It is wrong... ARPHRD_NETROM==0 */
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index c5eb1a29a5c..721b89b6096 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -420,7 +420,7 @@ struct in_device *inetdev_by_index(int ifindex)
420 struct net_device *dev; 420 struct net_device *dev;
421 struct in_device *in_dev = NULL; 421 struct in_device *in_dev = NULL;
422 read_lock(&dev_base_lock); 422 read_lock(&dev_base_lock);
423 dev = __dev_get_by_index(ifindex); 423 dev = __dev_get_by_index(&init_net, ifindex);
424 if (dev) 424 if (dev)
425 in_dev = in_dev_get(dev); 425 in_dev = in_dev_get(dev);
426 read_unlock(&dev_base_lock); 426 read_unlock(&dev_base_lock);
@@ -506,7 +506,7 @@ static struct in_ifaddr *rtm_to_ifaddr(struct nlmsghdr *nlh)
506 goto errout; 506 goto errout;
507 } 507 }
508 508
509 dev = __dev_get_by_index(ifm->ifa_index); 509 dev = __dev_get_by_index(&init_net, ifm->ifa_index);
510 if (dev == NULL) { 510 if (dev == NULL) {
511 err = -ENODEV; 511 err = -ENODEV;
512 goto errout; 512 goto errout;
@@ -628,7 +628,7 @@ int devinet_ioctl(unsigned int cmd, void __user *arg)
628 *colon = 0; 628 *colon = 0;
629 629
630#ifdef CONFIG_KMOD 630#ifdef CONFIG_KMOD
631 dev_load(ifr.ifr_name); 631 dev_load(&init_net, ifr.ifr_name);
632#endif 632#endif
633 633
634 switch (cmd) { 634 switch (cmd) {
@@ -669,7 +669,7 @@ int devinet_ioctl(unsigned int cmd, void __user *arg)
669 rtnl_lock(); 669 rtnl_lock();
670 670
671 ret = -ENODEV; 671 ret = -ENODEV;
672 if ((dev = __dev_get_by_name(ifr.ifr_name)) == NULL) 672 if ((dev = __dev_get_by_name(&init_net, ifr.ifr_name)) == NULL)
673 goto done; 673 goto done;
674 674
675 if (colon) 675 if (colon)
@@ -909,7 +909,7 @@ no_in_dev:
909 */ 909 */
910 read_lock(&dev_base_lock); 910 read_lock(&dev_base_lock);
911 rcu_read_lock(); 911 rcu_read_lock();
912 for_each_netdev(dev) { 912 for_each_netdev(&init_net, dev) {
913 if ((in_dev = __in_dev_get_rcu(dev)) == NULL) 913 if ((in_dev = __in_dev_get_rcu(dev)) == NULL)
914 continue; 914 continue;
915 915
@@ -988,7 +988,7 @@ __be32 inet_confirm_addr(const struct net_device *dev, __be32 dst, __be32 local,
988 988
989 read_lock(&dev_base_lock); 989 read_lock(&dev_base_lock);
990 rcu_read_lock(); 990 rcu_read_lock();
991 for_each_netdev(dev) { 991 for_each_netdev(&init_net, dev) {
992 if ((in_dev = __in_dev_get_rcu(dev))) { 992 if ((in_dev = __in_dev_get_rcu(dev))) {
993 addr = confirm_addr_indev(in_dev, dst, local, scope); 993 addr = confirm_addr_indev(in_dev, dst, local, scope);
994 if (addr) 994 if (addr)
@@ -1185,7 +1185,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
1185 1185
1186 s_ip_idx = ip_idx = cb->args[1]; 1186 s_ip_idx = ip_idx = cb->args[1];
1187 idx = 0; 1187 idx = 0;
1188 for_each_netdev(dev) { 1188 for_each_netdev(&init_net, dev) {
1189 if (idx < s_idx) 1189 if (idx < s_idx)
1190 goto cont; 1190 goto cont;
1191 if (idx > s_idx) 1191 if (idx > s_idx)
@@ -1244,7 +1244,7 @@ static void devinet_copy_dflt_conf(int i)
1244 struct net_device *dev; 1244 struct net_device *dev;
1245 1245
1246 read_lock(&dev_base_lock); 1246 read_lock(&dev_base_lock);
1247 for_each_netdev(dev) { 1247 for_each_netdev(&init_net, dev) {
1248 struct in_device *in_dev; 1248 struct in_device *in_dev;
1249 rcu_read_lock(); 1249 rcu_read_lock();
1250 in_dev = __in_dev_get_rcu(dev); 1250 in_dev = __in_dev_get_rcu(dev);
@@ -1333,7 +1333,7 @@ void inet_forward_change(void)
1333 IPV4_DEVCONF_DFLT(FORWARDING) = on; 1333 IPV4_DEVCONF_DFLT(FORWARDING) = on;
1334 1334
1335 read_lock(&dev_base_lock); 1335 read_lock(&dev_base_lock);
1336 for_each_netdev(dev) { 1336 for_each_netdev(&init_net, dev) {
1337 struct in_device *in_dev; 1337 struct in_device *in_dev;
1338 rcu_read_lock(); 1338 rcu_read_lock();
1339 in_dev = __in_dev_get_rcu(dev); 1339 in_dev = __in_dev_get_rcu(dev);
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index 140bf7a8d87..df17aab193b 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -334,7 +334,7 @@ static int rtentry_to_fib_config(int cmd, struct rtentry *rt,
334 colon = strchr(devname, ':'); 334 colon = strchr(devname, ':');
335 if (colon) 335 if (colon)
336 *colon = 0; 336 *colon = 0;
337 dev = __dev_get_by_name(devname); 337 dev = __dev_get_by_name(&init_net, devname);
338 if (!dev) 338 if (!dev)
339 return -ENODEV; 339 return -ENODEV;
340 cfg->fc_oif = dev->ifindex; 340 cfg->fc_oif = dev->ifindex;
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index c434119deb5..d30fb68d5f4 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -533,7 +533,7 @@ static int fib_check_nh(struct fib_config *cfg, struct fib_info *fi,
533 return -EINVAL; 533 return -EINVAL;
534 if (inet_addr_type(nh->nh_gw) != RTN_UNICAST) 534 if (inet_addr_type(nh->nh_gw) != RTN_UNICAST)
535 return -EINVAL; 535 return -EINVAL;
536 if ((dev = __dev_get_by_index(nh->nh_oif)) == NULL) 536 if ((dev = __dev_get_by_index(&init_net, nh->nh_oif)) == NULL)
537 return -ENODEV; 537 return -ENODEV;
538 if (!(dev->flags&IFF_UP)) 538 if (!(dev->flags&IFF_UP))
539 return -ENETDOWN; 539 return -ENETDOWN;
@@ -799,7 +799,7 @@ struct fib_info *fib_create_info(struct fib_config *cfg)
799 if (nhs != 1 || nh->nh_gw) 799 if (nhs != 1 || nh->nh_gw)
800 goto err_inval; 800 goto err_inval;
801 nh->nh_scope = RT_SCOPE_NOWHERE; 801 nh->nh_scope = RT_SCOPE_NOWHERE;
802 nh->nh_dev = dev_get_by_index(fi->fib_nh->nh_oif); 802 nh->nh_dev = dev_get_by_index(&init_net, fi->fib_nh->nh_oif);
803 err = -ENODEV; 803 err = -ENODEV;
804 if (nh->nh_dev == NULL) 804 if (nh->nh_dev == NULL)
805 goto failure; 805 goto failure;
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index 02a899bec19..68a22670f59 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -517,7 +517,7 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
517 struct net_device *dev = NULL; 517 struct net_device *dev = NULL;
518 518
519 if (rt->fl.iif && sysctl_icmp_errors_use_inbound_ifaddr) 519 if (rt->fl.iif && sysctl_icmp_errors_use_inbound_ifaddr)
520 dev = dev_get_by_index(rt->fl.iif); 520 dev = dev_get_by_index(&init_net, rt->fl.iif);
521 521
522 if (dev) { 522 if (dev) {
523 saddr = inet_select_addr(dev, 0, RT_SCOPE_LINK); 523 saddr = inet_select_addr(dev, 0, RT_SCOPE_LINK);
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index d78599a9dbd..ad500a43b35 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -2292,7 +2292,7 @@ static inline struct ip_mc_list *igmp_mc_get_first(struct seq_file *seq)
2292 struct igmp_mc_iter_state *state = igmp_mc_seq_private(seq); 2292 struct igmp_mc_iter_state *state = igmp_mc_seq_private(seq);
2293 2293
2294 state->in_dev = NULL; 2294 state->in_dev = NULL;
2295 for_each_netdev(state->dev) { 2295 for_each_netdev(&init_net, state->dev) {
2296 struct in_device *in_dev; 2296 struct in_device *in_dev;
2297 in_dev = in_dev_get(state->dev); 2297 in_dev = in_dev_get(state->dev);
2298 if (!in_dev) 2298 if (!in_dev)
@@ -2454,7 +2454,7 @@ static inline struct ip_sf_list *igmp_mcf_get_first(struct seq_file *seq)
2454 2454
2455 state->idev = NULL; 2455 state->idev = NULL;
2456 state->im = NULL; 2456 state->im = NULL;
2457 for_each_netdev(state->dev) { 2457 for_each_netdev(&init_net, state->dev) {
2458 struct in_device *idev; 2458 struct in_device *idev;
2459 idev = in_dev_get(state->dev); 2459 idev = in_dev_get(state->dev);
2460 if (unlikely(idev == NULL)) 2460 if (unlikely(idev == NULL))
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
index 0231bdcb2ab..fabb86db763 100644
--- a/net/ipv4/ip_fragment.c
+++ b/net/ipv4/ip_fragment.c
@@ -292,7 +292,7 @@ static void ip_expire(unsigned long arg)
292 if ((qp->last_in&FIRST_IN) && qp->fragments != NULL) { 292 if ((qp->last_in&FIRST_IN) && qp->fragments != NULL) {
293 struct sk_buff *head = qp->fragments; 293 struct sk_buff *head = qp->fragments;
294 /* Send an ICMP "Fragment Reassembly Timeout" message. */ 294 /* Send an ICMP "Fragment Reassembly Timeout" message. */
295 if ((head->dev = dev_get_by_index(qp->iif)) != NULL) { 295 if ((head->dev = dev_get_by_index(&init_net, qp->iif)) != NULL) {
296 icmp_send(head, ICMP_TIME_EXCEEDED, ICMP_EXC_FRAGTIME, 0); 296 icmp_send(head, ICMP_TIME_EXCEEDED, ICMP_EXC_FRAGTIME, 0);
297 dev_put(head->dev); 297 dev_put(head->dev);
298 } 298 }
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index 5c14ed63e56..3106225c5e5 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -262,7 +262,7 @@ static struct ip_tunnel * ipgre_tunnel_locate(struct ip_tunnel_parm *parms, int
262 int i; 262 int i;
263 for (i=1; i<100; i++) { 263 for (i=1; i<100; i++) {
264 sprintf(name, "gre%d", i); 264 sprintf(name, "gre%d", i);
265 if (__dev_get_by_name(name) == NULL) 265 if (__dev_get_by_name(&init_net, name) == NULL)
266 break; 266 break;
267 } 267 }
268 if (i==100) 268 if (i==100)
@@ -1196,7 +1196,7 @@ static int ipgre_tunnel_init(struct net_device *dev)
1196 } 1196 }
1197 1197
1198 if (!tdev && tunnel->parms.link) 1198 if (!tdev && tunnel->parms.link)
1199 tdev = __dev_get_by_index(tunnel->parms.link); 1199 tdev = __dev_get_by_index(&init_net, tunnel->parms.link);
1200 1200
1201 if (tdev) { 1201 if (tdev) {
1202 hlen = tdev->hard_header_len; 1202 hlen = tdev->hard_header_len;
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
index 6b420aedcdc..b2b3053dfef 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -602,7 +602,7 @@ static int do_ip_setsockopt(struct sock *sk, int level,
602 dev_put(dev); 602 dev_put(dev);
603 } 603 }
604 } else 604 } else
605 dev = __dev_get_by_index(mreq.imr_ifindex); 605 dev = __dev_get_by_index(&init_net, mreq.imr_ifindex);
606 606
607 607
608 err = -EADDRNOTAVAIL; 608 err = -EADDRNOTAVAIL;
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index 08ff623371f..4303851749f 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -193,7 +193,7 @@ static int __init ic_open_devs(void)
193 if (dev_change_flags(&loopback_dev, loopback_dev.flags | IFF_UP) < 0) 193 if (dev_change_flags(&loopback_dev, loopback_dev.flags | IFF_UP) < 0)
194 printk(KERN_ERR "IP-Config: Failed to open %s\n", loopback_dev.name); 194 printk(KERN_ERR "IP-Config: Failed to open %s\n", loopback_dev.name);
195 195
196 for_each_netdev(dev) { 196 for_each_netdev(&init_net, dev) {
197 if (dev == &loopback_dev) 197 if (dev == &loopback_dev)
198 continue; 198 continue;
199 if (user_dev_name[0] ? !strcmp(dev->name, user_dev_name) : 199 if (user_dev_name[0] ? !strcmp(dev->name, user_dev_name) :
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
index 396437242a1..652bd86e33a 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
@@ -225,7 +225,7 @@ static struct ip_tunnel * ipip_tunnel_locate(struct ip_tunnel_parm *parms, int c
225 int i; 225 int i;
226 for (i=1; i<100; i++) { 226 for (i=1; i<100; i++) {
227 sprintf(name, "tunl%d", i); 227 sprintf(name, "tunl%d", i);
228 if (__dev_get_by_name(name) == NULL) 228 if (__dev_get_by_name(&init_net, name) == NULL)
229 break; 229 break;
230 } 230 }
231 if (i==100) 231 if (i==100)
@@ -822,7 +822,7 @@ static int ipip_tunnel_init(struct net_device *dev)
822 } 822 }
823 823
824 if (!tdev && tunnel->parms.link) 824 if (!tdev && tunnel->parms.link)
825 tdev = __dev_get_by_index(tunnel->parms.link); 825 tdev = __dev_get_by_index(&init_net, tunnel->parms.link);
826 826
827 if (tdev) { 827 if (tdev) {
828 dev->hard_header_len = tdev->hard_header_len + sizeof(struct iphdr); 828 dev->hard_header_len = tdev->hard_header_len + sizeof(struct iphdr);
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
index 036598835c6..b8b4b497fb5 100644
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
@@ -125,7 +125,7 @@ struct net_device *ipmr_new_tunnel(struct vifctl *v)
125{ 125{
126 struct net_device *dev; 126 struct net_device *dev;
127 127
128 dev = __dev_get_by_name("tunl0"); 128 dev = __dev_get_by_name(&init_net, "tunl0");
129 129
130 if (dev) { 130 if (dev) {
131 int err; 131 int err;
@@ -149,7 +149,7 @@ struct net_device *ipmr_new_tunnel(struct vifctl *v)
149 149
150 dev = NULL; 150 dev = NULL;
151 151
152 if (err == 0 && (dev = __dev_get_by_name(p.name)) != NULL) { 152 if (err == 0 && (dev = __dev_get_by_name(&init_net, p.name)) != NULL) {
153 dev->flags |= IFF_MULTICAST; 153 dev->flags |= IFF_MULTICAST;
154 154
155 in_dev = __in_dev_get_rtnl(dev); 155 in_dev = __in_dev_get_rtnl(dev);
diff --git a/net/ipv4/ipvs/ip_vs_sync.c b/net/ipv4/ipvs/ip_vs_sync.c
index 356f067484e..1960747f354 100644
--- a/net/ipv4/ipvs/ip_vs_sync.c
+++ b/net/ipv4/ipvs/ip_vs_sync.c
@@ -387,7 +387,7 @@ static int set_mcast_if(struct sock *sk, char *ifname)
387 struct net_device *dev; 387 struct net_device *dev;
388 struct inet_sock *inet = inet_sk(sk); 388 struct inet_sock *inet = inet_sk(sk);
389 389
390 if ((dev = __dev_get_by_name(ifname)) == NULL) 390 if ((dev = __dev_get_by_name(&init_net, ifname)) == NULL)
391 return -ENODEV; 391 return -ENODEV;
392 392
393 if (sk->sk_bound_dev_if && dev->ifindex != sk->sk_bound_dev_if) 393 if (sk->sk_bound_dev_if && dev->ifindex != sk->sk_bound_dev_if)
@@ -412,7 +412,7 @@ static int set_sync_mesg_maxlen(int sync_state)
412 int num; 412 int num;
413 413
414 if (sync_state == IP_VS_STATE_MASTER) { 414 if (sync_state == IP_VS_STATE_MASTER) {
415 if ((dev = __dev_get_by_name(ip_vs_master_mcast_ifn)) == NULL) 415 if ((dev = __dev_get_by_name(&init_net, ip_vs_master_mcast_ifn)) == NULL)
416 return -ENODEV; 416 return -ENODEV;
417 417
418 num = (dev->mtu - sizeof(struct iphdr) - 418 num = (dev->mtu - sizeof(struct iphdr) -
@@ -423,7 +423,7 @@ static int set_sync_mesg_maxlen(int sync_state)
423 IP_VS_DBG(7, "setting the maximum length of sync sending " 423 IP_VS_DBG(7, "setting the maximum length of sync sending "
424 "message %d.\n", sync_send_mesg_maxlen); 424 "message %d.\n", sync_send_mesg_maxlen);
425 } else if (sync_state == IP_VS_STATE_BACKUP) { 425 } else if (sync_state == IP_VS_STATE_BACKUP) {
426 if ((dev = __dev_get_by_name(ip_vs_backup_mcast_ifn)) == NULL) 426 if ((dev = __dev_get_by_name(&init_net, ip_vs_backup_mcast_ifn)) == NULL)
427 return -ENODEV; 427 return -ENODEV;
428 428
429 sync_recv_mesg_maxlen = dev->mtu - 429 sync_recv_mesg_maxlen = dev->mtu -
@@ -451,7 +451,7 @@ join_mcast_group(struct sock *sk, struct in_addr *addr, char *ifname)
451 memset(&mreq, 0, sizeof(mreq)); 451 memset(&mreq, 0, sizeof(mreq));
452 memcpy(&mreq.imr_multiaddr, addr, sizeof(struct in_addr)); 452 memcpy(&mreq.imr_multiaddr, addr, sizeof(struct in_addr));
453 453
454 if ((dev = __dev_get_by_name(ifname)) == NULL) 454 if ((dev = __dev_get_by_name(&init_net, ifname)) == NULL)
455 return -ENODEV; 455 return -ENODEV;
456 if (sk->sk_bound_dev_if && dev->ifindex != sk->sk_bound_dev_if) 456 if (sk->sk_bound_dev_if && dev->ifindex != sk->sk_bound_dev_if)
457 return -EINVAL; 457 return -EINVAL;
@@ -472,7 +472,7 @@ static int bind_mcastif_addr(struct socket *sock, char *ifname)
472 __be32 addr; 472 __be32 addr;
473 struct sockaddr_in sin; 473 struct sockaddr_in sin;
474 474
475 if ((dev = __dev_get_by_name(ifname)) == NULL) 475 if ((dev = __dev_get_by_name(&init_net, ifname)) == NULL)
476 return -ENODEV; 476 return -ENODEV;
477 477
478 addr = inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE); 478 addr = inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE);
diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
index 50fc9e009fe..27f14e1ebd8 100644
--- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
+++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
@@ -401,7 +401,7 @@ checkentry(const char *tablename,
401 return false; 401 return false;
402 } 402 }
403 403
404 dev = dev_get_by_name(e->ip.iniface); 404 dev = dev_get_by_name(&init_net, e->ip.iniface);
405 if (!dev) { 405 if (!dev) {
406 printk(KERN_WARNING "CLUSTERIP: no such interface %s\n", e->ip.iniface); 406 printk(KERN_WARNING "CLUSTERIP: no such interface %s\n", e->ip.iniface);
407 return false; 407 return false;
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index efd2a9202d6..396c631166a 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -2213,7 +2213,7 @@ static int ip_route_output_slow(struct rtable **rp, const struct flowi *oldflp)
2213 2213
2214 2214
2215 if (oldflp->oif) { 2215 if (oldflp->oif) {
2216 dev_out = dev_get_by_index(oldflp->oif); 2216 dev_out = dev_get_by_index(&init_net, oldflp->oif);
2217 err = -ENODEV; 2217 err = -ENODEV;
2218 if (dev_out == NULL) 2218 if (dev_out == NULL)
2219 goto out; 2219 goto out;
@@ -2592,7 +2592,7 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void
2592 if (iif) { 2592 if (iif) {
2593 struct net_device *dev; 2593 struct net_device *dev;
2594 2594
2595 dev = __dev_get_by_index(iif); 2595 dev = __dev_get_by_index(&init_net, iif);
2596 if (dev == NULL) { 2596 if (dev == NULL) {
2597 err = -ENODEV; 2597 err = -ENODEV;
2598 goto errout_free; 2598 goto errout_free;
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 1a678364652..ee55be97540 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -450,7 +450,7 @@ static void addrconf_forward_change(void)
450 struct inet6_dev *idev; 450 struct inet6_dev *idev;
451 451
452 read_lock(&dev_base_lock); 452 read_lock(&dev_base_lock);
453 for_each_netdev(dev) { 453 for_each_netdev(&init_net, dev) {
454 rcu_read_lock(); 454 rcu_read_lock();
455 idev = __in6_dev_get(dev); 455 idev = __in6_dev_get(dev);
456 if (idev) { 456 if (idev) {
@@ -912,7 +912,7 @@ int ipv6_dev_get_saddr(struct net_device *daddr_dev,
912 read_lock(&dev_base_lock); 912 read_lock(&dev_base_lock);
913 rcu_read_lock(); 913 rcu_read_lock();
914 914
915 for_each_netdev(dev) { 915 for_each_netdev(&init_net, dev) {
916 struct inet6_dev *idev; 916 struct inet6_dev *idev;
917 struct inet6_ifaddr *ifa; 917 struct inet6_ifaddr *ifa;
918 918
@@ -1858,7 +1858,7 @@ int addrconf_set_dstaddr(void __user *arg)
1858 if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq))) 1858 if (copy_from_user(&ireq, arg, sizeof(struct in6_ifreq)))
1859 goto err_exit; 1859 goto err_exit;
1860 1860
1861 dev = __dev_get_by_index(ireq.ifr6_ifindex); 1861 dev = __dev_get_by_index(&init_net, ireq.ifr6_ifindex);
1862 1862
1863 err = -ENODEV; 1863 err = -ENODEV;
1864 if (dev == NULL) 1864 if (dev == NULL)
@@ -1889,7 +1889,7 @@ int addrconf_set_dstaddr(void __user *arg)
1889 1889
1890 if (err == 0) { 1890 if (err == 0) {
1891 err = -ENOBUFS; 1891 err = -ENOBUFS;
1892 if ((dev = __dev_get_by_name(p.name)) == NULL) 1892 if ((dev = __dev_get_by_name(&init_net, p.name)) == NULL)
1893 goto err_exit; 1893 goto err_exit;
1894 err = dev_open(dev); 1894 err = dev_open(dev);
1895 } 1895 }
@@ -1919,7 +1919,7 @@ static int inet6_addr_add(int ifindex, struct in6_addr *pfx, int plen,
1919 if (!valid_lft || prefered_lft > valid_lft) 1919 if (!valid_lft || prefered_lft > valid_lft)
1920 return -EINVAL; 1920 return -EINVAL;
1921 1921
1922 if ((dev = __dev_get_by_index(ifindex)) == NULL) 1922 if ((dev = __dev_get_by_index(&init_net, ifindex)) == NULL)
1923 return -ENODEV; 1923 return -ENODEV;
1924 1924
1925 if ((idev = addrconf_add_dev(dev)) == NULL) 1925 if ((idev = addrconf_add_dev(dev)) == NULL)
@@ -1970,7 +1970,7 @@ static int inet6_addr_del(int ifindex, struct in6_addr *pfx, int plen)
1970 struct inet6_dev *idev; 1970 struct inet6_dev *idev;
1971 struct net_device *dev; 1971 struct net_device *dev;
1972 1972
1973 if ((dev = __dev_get_by_index(ifindex)) == NULL) 1973 if ((dev = __dev_get_by_index(&init_net, ifindex)) == NULL)
1974 return -ENODEV; 1974 return -ENODEV;
1975 1975
1976 if ((idev = __in6_dev_get(dev)) == NULL) 1976 if ((idev = __in6_dev_get(dev)) == NULL)
@@ -2065,7 +2065,7 @@ static void sit_add_v4_addrs(struct inet6_dev *idev)
2065 return; 2065 return;
2066 } 2066 }
2067 2067
2068 for_each_netdev(dev) { 2068 for_each_netdev(&init_net, dev) {
2069 struct in_device * in_dev = __in_dev_get_rtnl(dev); 2069 struct in_device * in_dev = __in_dev_get_rtnl(dev);
2070 if (in_dev && (dev->flags & IFF_UP)) { 2070 if (in_dev && (dev->flags & IFF_UP)) {
2071 struct in_ifaddr * ifa; 2071 struct in_ifaddr * ifa;
@@ -2221,12 +2221,12 @@ static void ip6_tnl_add_linklocal(struct inet6_dev *idev)
2221 2221
2222 /* first try to inherit the link-local address from the link device */ 2222 /* first try to inherit the link-local address from the link device */
2223 if (idev->dev->iflink && 2223 if (idev->dev->iflink &&
2224 (link_dev = __dev_get_by_index(idev->dev->iflink))) { 2224 (link_dev = __dev_get_by_index(&init_net, idev->dev->iflink))) {
2225 if (!ipv6_inherit_linklocal(idev, link_dev)) 2225 if (!ipv6_inherit_linklocal(idev, link_dev))
2226 return; 2226 return;
2227 } 2227 }
2228 /* then try to inherit it from any device */ 2228 /* then try to inherit it from any device */
2229 for_each_netdev(link_dev) { 2229 for_each_netdev(&init_net, link_dev) {
2230 if (!ipv6_inherit_linklocal(idev, link_dev)) 2230 if (!ipv6_inherit_linklocal(idev, link_dev))
2231 return; 2231 return;
2232 } 2232 }
@@ -3084,7 +3084,7 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
3084 valid_lft = INFINITY_LIFE_TIME; 3084 valid_lft = INFINITY_LIFE_TIME;
3085 } 3085 }
3086 3086
3087 dev = __dev_get_by_index(ifm->ifa_index); 3087 dev = __dev_get_by_index(&init_net, ifm->ifa_index);
3088 if (dev == NULL) 3088 if (dev == NULL)
3089 return -ENODEV; 3089 return -ENODEV;
3090 3090
@@ -3268,7 +3268,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
3268 s_ip_idx = ip_idx = cb->args[1]; 3268 s_ip_idx = ip_idx = cb->args[1];
3269 3269
3270 idx = 0; 3270 idx = 0;
3271 for_each_netdev(dev) { 3271 for_each_netdev(&init_net, dev) {
3272 if (idx < s_idx) 3272 if (idx < s_idx)
3273 goto cont; 3273 goto cont;
3274 if (idx > s_idx) 3274 if (idx > s_idx)
@@ -3377,7 +3377,7 @@ static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr* nlh,
3377 3377
3378 ifm = nlmsg_data(nlh); 3378 ifm = nlmsg_data(nlh);
3379 if (ifm->ifa_index) 3379 if (ifm->ifa_index)
3380 dev = __dev_get_by_index(ifm->ifa_index); 3380 dev = __dev_get_by_index(&init_net, ifm->ifa_index);
3381 3381
3382 if ((ifa = ipv6_get_ifaddr(addr, dev, 1)) == NULL) { 3382 if ((ifa = ipv6_get_ifaddr(addr, dev, 1)) == NULL) {
3383 err = -EADDRNOTAVAIL; 3383 err = -EADDRNOTAVAIL;
@@ -3589,7 +3589,7 @@ static int inet6_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
3589 3589
3590 read_lock(&dev_base_lock); 3590 read_lock(&dev_base_lock);
3591 idx = 0; 3591 idx = 0;
3592 for_each_netdev(dev) { 3592 for_each_netdev(&init_net, dev) {
3593 if (idx < s_idx) 3593 if (idx < s_idx)
3594 goto cont; 3594 goto cont;
3595 if ((idev = in6_dev_get(dev)) == NULL) 3595 if ((idev = in6_dev_get(dev)) == NULL)
@@ -4266,7 +4266,7 @@ void __exit addrconf_cleanup(void)
4266 * clean dev list. 4266 * clean dev list.
4267 */ 4267 */
4268 4268
4269 for_each_netdev(dev) { 4269 for_each_netdev(&init_net, dev) {
4270 if (__in6_dev_get(dev) == NULL) 4270 if (__in6_dev_get(dev) == NULL)
4271 continue; 4271 continue;
4272 addrconf_ifdown(dev, 1); 4272 addrconf_ifdown(dev, 1);
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 21931c86e95..e5c5aad44bb 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -302,7 +302,7 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
302 err = -EINVAL; 302 err = -EINVAL;
303 goto out; 303 goto out;
304 } 304 }
305 dev = dev_get_by_index(sk->sk_bound_dev_if); 305 dev = dev_get_by_index(&init_net, sk->sk_bound_dev_if);
306 if (!dev) { 306 if (!dev) {
307 err = -ENODEV; 307 err = -ENODEV;
308 goto out; 308 goto out;
diff --git a/net/ipv6/anycast.c b/net/ipv6/anycast.c
index 0bd665498d0..d407992c148 100644
--- a/net/ipv6/anycast.c
+++ b/net/ipv6/anycast.c
@@ -112,10 +112,10 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, struct in6_addr *addr)
112 } else { 112 } else {
113 /* router, no matching interface: just pick one */ 113 /* router, no matching interface: just pick one */
114 114
115 dev = dev_get_by_flags(IFF_UP, IFF_UP|IFF_LOOPBACK); 115 dev = dev_get_by_flags(&init_net, IFF_UP, IFF_UP|IFF_LOOPBACK);
116 } 116 }
117 } else 117 } else
118 dev = dev_get_by_index(ifindex); 118 dev = dev_get_by_index(&init_net, ifindex);
119 119
120 if (dev == NULL) { 120 if (dev == NULL) {
121 err = -ENODEV; 121 err = -ENODEV;
@@ -196,7 +196,7 @@ int ipv6_sock_ac_drop(struct sock *sk, int ifindex, struct in6_addr *addr)
196 196
197 write_unlock_bh(&ipv6_sk_ac_lock); 197 write_unlock_bh(&ipv6_sk_ac_lock);
198 198
199 dev = dev_get_by_index(pac->acl_ifindex); 199 dev = dev_get_by_index(&init_net, pac->acl_ifindex);
200 if (dev) { 200 if (dev) {
201 ipv6_dev_ac_dec(dev, &pac->acl_addr); 201 ipv6_dev_ac_dec(dev, &pac->acl_addr);
202 dev_put(dev); 202 dev_put(dev);
@@ -224,7 +224,7 @@ void ipv6_sock_ac_close(struct sock *sk)
224 if (pac->acl_ifindex != prev_index) { 224 if (pac->acl_ifindex != prev_index) {
225 if (dev) 225 if (dev)
226 dev_put(dev); 226 dev_put(dev);
227 dev = dev_get_by_index(pac->acl_ifindex); 227 dev = dev_get_by_index(&init_net, pac->acl_ifindex);
228 prev_index = pac->acl_ifindex; 228 prev_index = pac->acl_ifindex;
229 } 229 }
230 if (dev) 230 if (dev)
@@ -429,7 +429,7 @@ int ipv6_chk_acast_addr(struct net_device *dev, struct in6_addr *addr)
429 if (dev) 429 if (dev)
430 return ipv6_chk_acast_dev(dev, addr); 430 return ipv6_chk_acast_dev(dev, addr);
431 read_lock(&dev_base_lock); 431 read_lock(&dev_base_lock);
432 for_each_netdev(dev) 432 for_each_netdev(&init_net, dev)
433 if (ipv6_chk_acast_dev(dev, addr)) { 433 if (ipv6_chk_acast_dev(dev, addr)) {
434 found = 1; 434 found = 1;
435 break; 435 break;
@@ -453,7 +453,7 @@ static inline struct ifacaddr6 *ac6_get_first(struct seq_file *seq)
453 struct ac6_iter_state *state = ac6_seq_private(seq); 453 struct ac6_iter_state *state = ac6_seq_private(seq);
454 454
455 state->idev = NULL; 455 state->idev = NULL;
456 for_each_netdev(state->dev) { 456 for_each_netdev(&init_net, state->dev) {
457 struct inet6_dev *idev; 457 struct inet6_dev *idev;
458 idev = in6_dev_get(state->dev); 458 idev = in6_dev_get(state->dev);
459 if (!idev) 459 if (!idev)
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
index fe0f49024a0..2ed689ac449 100644
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
@@ -544,7 +544,7 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl,
544 if (!src_info->ipi6_ifindex) 544 if (!src_info->ipi6_ifindex)
545 return -EINVAL; 545 return -EINVAL;
546 else { 546 else {
547 dev = dev_get_by_index(src_info->ipi6_ifindex); 547 dev = dev_get_by_index(&init_net, src_info->ipi6_ifindex);
548 if (!dev) 548 if (!dev)
549 return -ENODEV; 549 return -ENODEV;
550 } 550 }
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index ca774d8e3be..937625e577c 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -235,7 +235,7 @@ static struct ip6_tnl *ip6_tnl_create(struct ip6_tnl_parm *p)
235 int i; 235 int i;
236 for (i = 1; i < IP6_TNL_MAX; i++) { 236 for (i = 1; i < IP6_TNL_MAX; i++) {
237 sprintf(name, "ip6tnl%d", i); 237 sprintf(name, "ip6tnl%d", i);
238 if (__dev_get_by_name(name) == NULL) 238 if (__dev_get_by_name(&init_net, name) == NULL)
239 break; 239 break;
240 } 240 }
241 if (i == IP6_TNL_MAX) 241 if (i == IP6_TNL_MAX)
@@ -650,7 +650,7 @@ static inline int ip6_tnl_rcv_ctl(struct ip6_tnl *t)
650 struct net_device *ldev = NULL; 650 struct net_device *ldev = NULL;
651 651
652 if (p->link) 652 if (p->link)
653 ldev = dev_get_by_index(p->link); 653 ldev = dev_get_by_index(&init_net, p->link);
654 654
655 if ((ipv6_addr_is_multicast(&p->laddr) || 655 if ((ipv6_addr_is_multicast(&p->laddr) ||
656 likely(ipv6_chk_addr(&p->laddr, ldev, 0))) && 656 likely(ipv6_chk_addr(&p->laddr, ldev, 0))) &&
@@ -786,7 +786,7 @@ static inline int ip6_tnl_xmit_ctl(struct ip6_tnl *t)
786 struct net_device *ldev = NULL; 786 struct net_device *ldev = NULL;
787 787
788 if (p->link) 788 if (p->link)
789 ldev = dev_get_by_index(p->link); 789 ldev = dev_get_by_index(&init_net, p->link);
790 790
791 if (unlikely(!ipv6_chk_addr(&p->laddr, ldev, 0))) 791 if (unlikely(!ipv6_chk_addr(&p->laddr, ldev, 0)))
792 printk(KERN_WARNING 792 printk(KERN_WARNING
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
index 74254fccbcc..eb330a44bac 100644
--- a/net/ipv6/ipv6_sockglue.c
+++ b/net/ipv6/ipv6_sockglue.c
@@ -542,7 +542,7 @@ done:
542 if (sk->sk_bound_dev_if && sk->sk_bound_dev_if != val) 542 if (sk->sk_bound_dev_if && sk->sk_bound_dev_if != val)
543 goto e_inval; 543 goto e_inval;
544 544
545 if (__dev_get_by_index(val) == NULL) { 545 if (__dev_get_by_index(&init_net, val) == NULL) {
546 retv = -ENODEV; 546 retv = -ENODEV;
547 break; 547 break;
548 } 548 }
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
index a41d5a0b50c..e2ab43c989d 100644
--- a/net/ipv6/mcast.c
+++ b/net/ipv6/mcast.c
@@ -215,7 +215,7 @@ int ipv6_sock_mc_join(struct sock *sk, int ifindex, struct in6_addr *addr)
215 dst_release(&rt->u.dst); 215 dst_release(&rt->u.dst);
216 } 216 }
217 } else 217 } else
218 dev = dev_get_by_index(ifindex); 218 dev = dev_get_by_index(&init_net, ifindex);
219 219
220 if (dev == NULL) { 220 if (dev == NULL) {
221 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); 221 sock_kfree_s(sk, mc_lst, sizeof(*mc_lst));
@@ -266,7 +266,7 @@ int ipv6_sock_mc_drop(struct sock *sk, int ifindex, struct in6_addr *addr)
266 *lnk = mc_lst->next; 266 *lnk = mc_lst->next;
267 write_unlock_bh(&ipv6_sk_mc_lock); 267 write_unlock_bh(&ipv6_sk_mc_lock);
268 268
269 if ((dev = dev_get_by_index(mc_lst->ifindex)) != NULL) { 269 if ((dev = dev_get_by_index(&init_net, mc_lst->ifindex)) != NULL) {
270 struct inet6_dev *idev = in6_dev_get(dev); 270 struct inet6_dev *idev = in6_dev_get(dev);
271 271
272 (void) ip6_mc_leave_src(sk, mc_lst, idev); 272 (void) ip6_mc_leave_src(sk, mc_lst, idev);
@@ -301,7 +301,7 @@ static struct inet6_dev *ip6_mc_find_dev(struct in6_addr *group, int ifindex)
301 dst_release(&rt->u.dst); 301 dst_release(&rt->u.dst);
302 } 302 }
303 } else 303 } else
304 dev = dev_get_by_index(ifindex); 304 dev = dev_get_by_index(&init_net, ifindex);
305 305
306 if (!dev) 306 if (!dev)
307 return NULL; 307 return NULL;
@@ -332,7 +332,7 @@ void ipv6_sock_mc_close(struct sock *sk)
332 np->ipv6_mc_list = mc_lst->next; 332 np->ipv6_mc_list = mc_lst->next;
333 write_unlock_bh(&ipv6_sk_mc_lock); 333 write_unlock_bh(&ipv6_sk_mc_lock);
334 334
335 dev = dev_get_by_index(mc_lst->ifindex); 335 dev = dev_get_by_index(&init_net, mc_lst->ifindex);
336 if (dev) { 336 if (dev) {
337 struct inet6_dev *idev = in6_dev_get(dev); 337 struct inet6_dev *idev = in6_dev_get(dev);
338 338
@@ -2333,7 +2333,7 @@ static inline struct ifmcaddr6 *igmp6_mc_get_first(struct seq_file *seq)
2333 struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq); 2333 struct igmp6_mc_iter_state *state = igmp6_mc_seq_private(seq);
2334 2334
2335 state->idev = NULL; 2335 state->idev = NULL;
2336 for_each_netdev(state->dev) { 2336 for_each_netdev(&init_net, state->dev) {
2337 struct inet6_dev *idev; 2337 struct inet6_dev *idev;
2338 idev = in6_dev_get(state->dev); 2338 idev = in6_dev_get(state->dev);
2339 if (!idev) 2339 if (!idev)
@@ -2477,7 +2477,7 @@ static inline struct ip6_sf_list *igmp6_mcf_get_first(struct seq_file *seq)
2477 2477
2478 state->idev = NULL; 2478 state->idev = NULL;
2479 state->im = NULL; 2479 state->im = NULL;
2480 for_each_netdev(state->dev) { 2480 for_each_netdev(&init_net, state->dev) {
2481 struct inet6_dev *idev; 2481 struct inet6_dev *idev;
2482 idev = in6_dev_get(state->dev); 2482 idev = in6_dev_get(state->dev);
2483 if (unlikely(idev == NULL)) 2483 if (unlikely(idev == NULL))
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
index 38a3d21c258..bdd0974e677 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -283,7 +283,7 @@ static int rawv6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
283 if (!sk->sk_bound_dev_if) 283 if (!sk->sk_bound_dev_if)
284 goto out; 284 goto out;
285 285
286 dev = dev_get_by_index(sk->sk_bound_dev_if); 286 dev = dev_get_by_index(&init_net, sk->sk_bound_dev_if);
287 if (!dev) { 287 if (!dev) {
288 err = -ENODEV; 288 err = -ENODEV;
289 goto out; 289 goto out;
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
index de795c04e34..31601c99354 100644
--- a/net/ipv6/reassembly.c
+++ b/net/ipv6/reassembly.c
@@ -301,7 +301,7 @@ static void ip6_frag_expire(unsigned long data)
301 301
302 fq_kill(fq); 302 fq_kill(fq);
303 303
304 dev = dev_get_by_index(fq->iif); 304 dev = dev_get_by_index(&init_net, fq->iif);
305 if (!dev) 305 if (!dev)
306 goto out; 306 goto out;
307 307
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index f4f0c341e5c..5bdd9d4010f 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -1130,7 +1130,7 @@ int ip6_route_add(struct fib6_config *cfg)
1130#endif 1130#endif
1131 if (cfg->fc_ifindex) { 1131 if (cfg->fc_ifindex) {
1132 err = -ENODEV; 1132 err = -ENODEV;
1133 dev = dev_get_by_index(cfg->fc_ifindex); 1133 dev = dev_get_by_index(&init_net, cfg->fc_ifindex);
1134 if (!dev) 1134 if (!dev)
1135 goto out; 1135 goto out;
1136 idev = in6_dev_get(dev); 1136 idev = in6_dev_get(dev);
@@ -2265,7 +2265,7 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void
2265 2265
2266 if (iif) { 2266 if (iif) {
2267 struct net_device *dev; 2267 struct net_device *dev;
2268 dev = __dev_get_by_index(iif); 2268 dev = __dev_get_by_index(&init_net, iif);
2269 if (!dev) { 2269 if (!dev) {
2270 err = -ENODEV; 2270 err = -ENODEV;
2271 goto errout; 2271 goto errout;
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index eb20bb690ab..e79f419b173 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -167,7 +167,7 @@ static struct ip_tunnel * ipip6_tunnel_locate(struct ip_tunnel_parm *parms, int
167 int i; 167 int i;
168 for (i=1; i<100; i++) { 168 for (i=1; i<100; i++) {
169 sprintf(name, "sit%d", i); 169 sprintf(name, "sit%d", i);
170 if (__dev_get_by_name(name) == NULL) 170 if (__dev_get_by_name(&init_net, name) == NULL)
171 break; 171 break;
172 } 172 }
173 if (i==100) 173 if (i==100)
@@ -761,7 +761,7 @@ static int ipip6_tunnel_init(struct net_device *dev)
761 } 761 }
762 762
763 if (!tdev && tunnel->parms.link) 763 if (!tdev && tunnel->parms.link)
764 tdev = __dev_get_by_index(tunnel->parms.link); 764 tdev = __dev_get_by_index(&init_net, tunnel->parms.link);
765 765
766 if (tdev) { 766 if (tdev) {
767 dev->hard_header_len = tdev->hard_header_len + sizeof(struct iphdr); 767 dev->hard_header_len = tdev->hard_header_len + sizeof(struct iphdr);
diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c
index 24921f12e9a..29b063d4312 100644
--- a/net/ipx/af_ipx.c
+++ b/net/ipx/af_ipx.c
@@ -989,7 +989,7 @@ static int ipxitf_create(struct ipx_interface_definition *idef)
989 if (intrfc) 989 if (intrfc)
990 ipxitf_put(intrfc); 990 ipxitf_put(intrfc);
991 991
992 dev = dev_get_by_name(idef->ipx_device); 992 dev = dev_get_by_name(&init_net, idef->ipx_device);
993 rc = -ENODEV; 993 rc = -ENODEV;
994 if (!dev) 994 if (!dev)
995 goto out; 995 goto out;
@@ -1097,7 +1097,7 @@ static int ipxitf_delete(struct ipx_interface_definition *idef)
1097 if (!dlink_type) 1097 if (!dlink_type)
1098 goto out; 1098 goto out;
1099 1099
1100 dev = __dev_get_by_name(idef->ipx_device); 1100 dev = __dev_get_by_name(&init_net, idef->ipx_device);
1101 rc = -ENODEV; 1101 rc = -ENODEV;
1102 if (!dev) 1102 if (!dev)
1103 goto out; 1103 goto out;
@@ -1192,7 +1192,7 @@ static int ipxitf_ioctl(unsigned int cmd, void __user *arg)
1192 if (copy_from_user(&ifr, arg, sizeof(ifr))) 1192 if (copy_from_user(&ifr, arg, sizeof(ifr)))
1193 break; 1193 break;
1194 sipx = (struct sockaddr_ipx *)&ifr.ifr_addr; 1194 sipx = (struct sockaddr_ipx *)&ifr.ifr_addr;
1195 dev = __dev_get_by_name(ifr.ifr_name); 1195 dev = __dev_get_by_name(&init_net, ifr.ifr_name);
1196 rc = -ENODEV; 1196 rc = -ENODEV;
1197 if (!dev) 1197 if (!dev)
1198 break; 1198 break;
diff --git a/net/irda/irnetlink.c b/net/irda/irnetlink.c
index 1e429c92973..cd9ff176ecd 100644
--- a/net/irda/irnetlink.c
+++ b/net/irda/irnetlink.c
@@ -15,6 +15,7 @@
15 15
16#include <linux/socket.h> 16#include <linux/socket.h>
17#include <linux/irda.h> 17#include <linux/irda.h>
18#include <net/net_namespace.h>
18#include <net/sock.h> 19#include <net/sock.h>
19#include <net/irda/irda.h> 20#include <net/irda/irda.h>
20#include <net/irda/irlap.h> 21#include <net/irda/irlap.h>
@@ -30,7 +31,7 @@ static struct genl_family irda_nl_family = {
30 .maxattr = IRDA_NL_CMD_MAX, 31 .maxattr = IRDA_NL_CMD_MAX,
31}; 32};
32 33
33static struct net_device * ifname_to_netdev(struct genl_info *info) 34static struct net_device * ifname_to_netdev(struct net *net, struct genl_info *info)
34{ 35{
35 char * ifname; 36 char * ifname;
36 37
@@ -41,7 +42,7 @@ static struct net_device * ifname_to_netdev(struct genl_info *info)
41 42
42 IRDA_DEBUG(5, "%s(): Looking for %s\n", __FUNCTION__, ifname); 43 IRDA_DEBUG(5, "%s(): Looking for %s\n", __FUNCTION__, ifname);
43 44
44 return dev_get_by_name(ifname); 45 return dev_get_by_name(net, ifname);
45} 46}
46 47
47static int irda_nl_set_mode(struct sk_buff *skb, struct genl_info *info) 48static int irda_nl_set_mode(struct sk_buff *skb, struct genl_info *info)
@@ -57,7 +58,7 @@ static int irda_nl_set_mode(struct sk_buff *skb, struct genl_info *info)
57 58
58 IRDA_DEBUG(5, "%s(): Switching to mode: %d\n", __FUNCTION__, mode); 59 IRDA_DEBUG(5, "%s(): Switching to mode: %d\n", __FUNCTION__, mode);
59 60
60 dev = ifname_to_netdev(info); 61 dev = ifname_to_netdev(&init_net, info);
61 if (!dev) 62 if (!dev)
62 return -ENODEV; 63 return -ENODEV;
63 64
@@ -82,7 +83,7 @@ static int irda_nl_get_mode(struct sk_buff *skb, struct genl_info *info)
82 void *hdr; 83 void *hdr;
83 int ret = -ENOBUFS; 84 int ret = -ENOBUFS;
84 85
85 dev = ifname_to_netdev(info); 86 dev = ifname_to_netdev(&init_net, info);
86 if (!dev) 87 if (!dev)
87 return -ENODEV; 88 return -ENODEV;
88 89
diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
index b48244156e7..49eacba824d 100644
--- a/net/llc/af_llc.c
+++ b/net/llc/af_llc.c
@@ -252,7 +252,7 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
252 if (!sock_flag(sk, SOCK_ZAPPED)) 252 if (!sock_flag(sk, SOCK_ZAPPED))
253 goto out; 253 goto out;
254 rc = -ENODEV; 254 rc = -ENODEV;
255 llc->dev = dev_getfirstbyhwtype(addr->sllc_arphrd); 255 llc->dev = dev_getfirstbyhwtype(&init_net, addr->sllc_arphrd);
256 if (!llc->dev) 256 if (!llc->dev)
257 goto out; 257 goto out;
258 rc = -EUSERS; 258 rc = -EUSERS;
@@ -303,7 +303,7 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
303 goto out; 303 goto out;
304 rc = -ENODEV; 304 rc = -ENODEV;
305 rtnl_lock(); 305 rtnl_lock();
306 llc->dev = dev_getbyhwaddr(addr->sllc_arphrd, addr->sllc_mac); 306 llc->dev = dev_getbyhwaddr(&init_net, addr->sllc_arphrd, addr->sllc_mac);
307 rtnl_unlock(); 307 rtnl_unlock();
308 if (!llc->dev) 308 if (!llc->dev)
309 goto out; 309 goto out;
diff --git a/net/llc/llc_core.c b/net/llc/llc_core.c
index d4b13a031fd..248b5903bb1 100644
--- a/net/llc/llc_core.c
+++ b/net/llc/llc_core.c
@@ -19,6 +19,7 @@
19#include <linux/slab.h> 19#include <linux/slab.h>
20#include <linux/string.h> 20#include <linux/string.h>
21#include <linux/init.h> 21#include <linux/init.h>
22#include <net/net_namespace.h>
22#include <net/llc.h> 23#include <net/llc.h>
23 24
24LIST_HEAD(llc_sap_list); 25LIST_HEAD(llc_sap_list);
@@ -162,7 +163,7 @@ static int __init llc_init(void)
162{ 163{
163 struct net_device *dev; 164 struct net_device *dev;
164 165
165 dev = first_net_device(); 166 dev = first_net_device(&init_net);
166 if (dev != NULL) 167 if (dev != NULL)
167 dev = next_net_device(dev); 168 dev = next_net_device(dev);
168 169
diff --git a/net/mac80211/ieee80211.c b/net/mac80211/ieee80211.c
index 73e314e33de..506cfa06b18 100644
--- a/net/mac80211/ieee80211.c
+++ b/net/mac80211/ieee80211.c
@@ -21,6 +21,7 @@
21#include <linux/wireless.h> 21#include <linux/wireless.h>
22#include <linux/rtnetlink.h> 22#include <linux/rtnetlink.h>
23#include <linux/bitmap.h> 23#include <linux/bitmap.h>
24#include <net/net_namespace.h>
24#include <net/cfg80211.h> 25#include <net/cfg80211.h>
25 26
26#include "ieee80211_common.h" 27#include "ieee80211_common.h"
diff --git a/net/mac80211/ieee80211_cfg.c b/net/mac80211/ieee80211_cfg.c
index 509096edb32..b1c13bc9c3c 100644
--- a/net/mac80211/ieee80211_cfg.c
+++ b/net/mac80211/ieee80211_cfg.c
@@ -8,6 +8,7 @@
8 8
9#include <linux/nl80211.h> 9#include <linux/nl80211.h>
10#include <linux/rtnetlink.h> 10#include <linux/rtnetlink.h>
11#include <net/net_namespace.h>
11#include <net/cfg80211.h> 12#include <net/cfg80211.h>
12#include "ieee80211_i.h" 13#include "ieee80211_i.h"
13#include "ieee80211_cfg.h" 14#include "ieee80211_cfg.h"
@@ -50,7 +51,7 @@ static int ieee80211_del_iface(struct wiphy *wiphy, int ifindex)
50 if (unlikely(local->reg_state != IEEE80211_DEV_REGISTERED)) 51 if (unlikely(local->reg_state != IEEE80211_DEV_REGISTERED))
51 return -ENODEV; 52 return -ENODEV;
52 53
53 dev = dev_get_by_index(ifindex); 54 dev = dev_get_by_index(&init_net, ifindex);
54 if (!dev) 55 if (!dev)
55 return 0; 56 return 0;
56 57
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index b65ff653624..9e952e37b7d 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -17,6 +17,7 @@
17#include <linux/skbuff.h> 17#include <linux/skbuff.h>
18#include <linux/etherdevice.h> 18#include <linux/etherdevice.h>
19#include <linux/bitmap.h> 19#include <linux/bitmap.h>
20#include <net/net_namespace.h>
20#include <net/ieee80211_radiotap.h> 21#include <net/ieee80211_radiotap.h>
21#include <net/cfg80211.h> 22#include <net/cfg80211.h>
22#include <net/mac80211.h> 23#include <net/mac80211.h>
@@ -1018,7 +1019,7 @@ static int inline ieee80211_tx_prepare(struct ieee80211_txrx_data *tx,
1018 struct net_device *dev; 1019 struct net_device *dev;
1019 1020
1020 pkt_data = (struct ieee80211_tx_packet_data *)skb->cb; 1021 pkt_data = (struct ieee80211_tx_packet_data *)skb->cb;
1021 dev = dev_get_by_index(pkt_data->ifindex); 1022 dev = dev_get_by_index(&init_net, pkt_data->ifindex);
1022 if (unlikely(dev && !is_ieee80211_device(dev, mdev))) { 1023 if (unlikely(dev && !is_ieee80211_device(dev, mdev))) {
1023 dev_put(dev); 1024 dev_put(dev);
1024 dev = NULL; 1025 dev = NULL;
@@ -1226,7 +1227,7 @@ int ieee80211_master_start_xmit(struct sk_buff *skb,
1226 memset(&control, 0, sizeof(struct ieee80211_tx_control)); 1227 memset(&control, 0, sizeof(struct ieee80211_tx_control));
1227 1228
1228 if (pkt_data->ifindex) 1229 if (pkt_data->ifindex)
1229 odev = dev_get_by_index(pkt_data->ifindex); 1230 odev = dev_get_by_index(&init_net, pkt_data->ifindex);
1230 if (unlikely(odev && !is_ieee80211_device(odev, dev))) { 1231 if (unlikely(odev && !is_ieee80211_device(odev, dev))) {
1231 dev_put(odev); 1232 dev_put(odev);
1232 odev = NULL; 1233 odev = NULL;
@@ -1722,7 +1723,7 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw, int if_id,
1722 u8 *b_head, *b_tail; 1723 u8 *b_head, *b_tail;
1723 int bh_len, bt_len; 1724 int bh_len, bt_len;
1724 1725
1725 bdev = dev_get_by_index(if_id); 1726 bdev = dev_get_by_index(&init_net, if_id);
1726 if (bdev) { 1727 if (bdev) {
1727 sdata = IEEE80211_DEV_TO_SUB_IF(bdev); 1728 sdata = IEEE80211_DEV_TO_SUB_IF(bdev);
1728 ap = &sdata->u.ap; 1729 ap = &sdata->u.ap;
@@ -1836,7 +1837,7 @@ ieee80211_get_buffered_bc(struct ieee80211_hw *hw, int if_id,
1836 struct ieee80211_sub_if_data *sdata; 1837 struct ieee80211_sub_if_data *sdata;
1837 struct ieee80211_if_ap *bss = NULL; 1838 struct ieee80211_if_ap *bss = NULL;
1838 1839
1839 bdev = dev_get_by_index(if_id); 1840 bdev = dev_get_by_index(&init_net, if_id);
1840 if (bdev) { 1841 if (bdev) {
1841 sdata = IEEE80211_DEV_TO_SUB_IF(bdev); 1842 sdata = IEEE80211_DEV_TO_SUB_IF(bdev);
1842 bss = &sdata->u.ap; 1843 bss = &sdata->u.ap;
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index 07686bda26c..c970996ba6f 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -20,6 +20,7 @@
20#include <linux/if_arp.h> 20#include <linux/if_arp.h>
21#include <linux/wireless.h> 21#include <linux/wireless.h>
22#include <linux/bitmap.h> 22#include <linux/bitmap.h>
23#include <net/net_namespace.h>
23#include <net/cfg80211.h> 24#include <net/cfg80211.h>
24 25
25#include "ieee80211_i.h" 26#include "ieee80211_i.h"
@@ -318,7 +319,7 @@ __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw, int if_id,
318 size_t frame_len, int rate) 319 size_t frame_len, int rate)
319{ 320{
320 struct ieee80211_local *local = hw_to_local(hw); 321 struct ieee80211_local *local = hw_to_local(hw);
321 struct net_device *bdev = dev_get_by_index(if_id); 322 struct net_device *bdev = dev_get_by_index(&init_net, if_id);
322 struct ieee80211_sub_if_data *sdata; 323 struct ieee80211_sub_if_data *sdata;
323 u16 dur; 324 u16 dur;
324 int erp; 325 int erp;
@@ -342,7 +343,7 @@ __le16 ieee80211_rts_duration(struct ieee80211_hw *hw, int if_id,
342{ 343{
343 struct ieee80211_local *local = hw_to_local(hw); 344 struct ieee80211_local *local = hw_to_local(hw);
344 struct ieee80211_rate *rate; 345 struct ieee80211_rate *rate;
345 struct net_device *bdev = dev_get_by_index(if_id); 346 struct net_device *bdev = dev_get_by_index(&init_net, if_id);
346 struct ieee80211_sub_if_data *sdata; 347 struct ieee80211_sub_if_data *sdata;
347 int short_preamble; 348 int short_preamble;
348 int erp; 349 int erp;
@@ -378,7 +379,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw, int if_id,
378{ 379{
379 struct ieee80211_local *local = hw_to_local(hw); 380 struct ieee80211_local *local = hw_to_local(hw);
380 struct ieee80211_rate *rate; 381 struct ieee80211_rate *rate;
381 struct net_device *bdev = dev_get_by_index(if_id); 382 struct net_device *bdev = dev_get_by_index(&init_net, if_id);
382 struct ieee80211_sub_if_data *sdata; 383 struct ieee80211_sub_if_data *sdata;
383 int short_preamble; 384 int short_preamble;
384 int erp; 385 int erp;
diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c
index 24fe4a66d29..e943c16552a 100644
--- a/net/netrom/nr_route.c
+++ b/net/netrom/nr_route.c
@@ -580,7 +580,7 @@ static struct net_device *nr_ax25_dev_get(char *devname)
580{ 580{
581 struct net_device *dev; 581 struct net_device *dev;
582 582
583 if ((dev = dev_get_by_name(devname)) == NULL) 583 if ((dev = dev_get_by_name(&init_net, devname)) == NULL)
584 return NULL; 584 return NULL;
585 585
586 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_AX25) 586 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_AX25)
@@ -598,7 +598,7 @@ struct net_device *nr_dev_first(void)
598 struct net_device *dev, *first = NULL; 598 struct net_device *dev, *first = NULL;
599 599
600 read_lock(&dev_base_lock); 600 read_lock(&dev_base_lock);
601 for_each_netdev(dev) { 601 for_each_netdev(&init_net, dev) {
602 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_NETROM) 602 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_NETROM)
603 if (first == NULL || strncmp(dev->name, first->name, 3) < 0) 603 if (first == NULL || strncmp(dev->name, first->name, 3) < 0)
604 first = dev; 604 first = dev;
@@ -618,7 +618,7 @@ struct net_device *nr_dev_get(ax25_address *addr)
618 struct net_device *dev; 618 struct net_device *dev;
619 619
620 read_lock(&dev_base_lock); 620 read_lock(&dev_base_lock);
621 for_each_netdev(dev) { 621 for_each_netdev(&init_net, dev) {
622 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_NETROM && ax25cmp(addr, (ax25_address *)dev->dev_addr) == 0) { 622 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_NETROM && ax25cmp(addr, (ax25_address *)dev->dev_addr) == 0) {
623 dev_hold(dev); 623 dev_hold(dev);
624 goto out; 624 goto out;
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index ad0052524e8..745e2cb87c9 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -347,7 +347,7 @@ static int packet_sendmsg_spkt(struct kiocb *iocb, struct socket *sock,
347 */ 347 */
348 348
349 saddr->spkt_device[13] = 0; 349 saddr->spkt_device[13] = 0;
350 dev = dev_get_by_name(saddr->spkt_device); 350 dev = dev_get_by_name(&init_net, saddr->spkt_device);
351 err = -ENODEV; 351 err = -ENODEV;
352 if (dev == NULL) 352 if (dev == NULL)
353 goto out_unlock; 353 goto out_unlock;
@@ -742,7 +742,7 @@ static int packet_sendmsg(struct kiocb *iocb, struct socket *sock,
742 } 742 }
743 743
744 744
745 dev = dev_get_by_index(ifindex); 745 dev = dev_get_by_index(&init_net, ifindex);
746 err = -ENXIO; 746 err = -ENXIO;
747 if (dev == NULL) 747 if (dev == NULL)
748 goto out_unlock; 748 goto out_unlock;
@@ -937,7 +937,7 @@ static int packet_bind_spkt(struct socket *sock, struct sockaddr *uaddr, int add
937 return -EINVAL; 937 return -EINVAL;
938 strlcpy(name,uaddr->sa_data,sizeof(name)); 938 strlcpy(name,uaddr->sa_data,sizeof(name));
939 939
940 dev = dev_get_by_name(name); 940 dev = dev_get_by_name(&init_net, name);
941 if (dev) { 941 if (dev) {
942 err = packet_do_bind(sk, dev, pkt_sk(sk)->num); 942 err = packet_do_bind(sk, dev, pkt_sk(sk)->num);
943 dev_put(dev); 943 dev_put(dev);
@@ -964,7 +964,7 @@ static int packet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len
964 964
965 if (sll->sll_ifindex) { 965 if (sll->sll_ifindex) {
966 err = -ENODEV; 966 err = -ENODEV;
967 dev = dev_get_by_index(sll->sll_ifindex); 967 dev = dev_get_by_index(&init_net, sll->sll_ifindex);
968 if (dev == NULL) 968 if (dev == NULL)
969 goto out; 969 goto out;
970 } 970 }
@@ -1161,7 +1161,7 @@ static int packet_getname_spkt(struct socket *sock, struct sockaddr *uaddr,
1161 return -EOPNOTSUPP; 1161 return -EOPNOTSUPP;
1162 1162
1163 uaddr->sa_family = AF_PACKET; 1163 uaddr->sa_family = AF_PACKET;
1164 dev = dev_get_by_index(pkt_sk(sk)->ifindex); 1164 dev = dev_get_by_index(&init_net, pkt_sk(sk)->ifindex);
1165 if (dev) { 1165 if (dev) {
1166 strlcpy(uaddr->sa_data, dev->name, 15); 1166 strlcpy(uaddr->sa_data, dev->name, 15);
1167 dev_put(dev); 1167 dev_put(dev);
@@ -1186,7 +1186,7 @@ static int packet_getname(struct socket *sock, struct sockaddr *uaddr,
1186 sll->sll_family = AF_PACKET; 1186 sll->sll_family = AF_PACKET;
1187 sll->sll_ifindex = po->ifindex; 1187 sll->sll_ifindex = po->ifindex;
1188 sll->sll_protocol = po->num; 1188 sll->sll_protocol = po->num;
1189 dev = dev_get_by_index(po->ifindex); 1189 dev = dev_get_by_index(&init_net, po->ifindex);
1190 if (dev) { 1190 if (dev) {
1191 sll->sll_hatype = dev->type; 1191 sll->sll_hatype = dev->type;
1192 sll->sll_halen = dev->addr_len; 1192 sll->sll_halen = dev->addr_len;
@@ -1238,7 +1238,7 @@ static int packet_mc_add(struct sock *sk, struct packet_mreq_max *mreq)
1238 rtnl_lock(); 1238 rtnl_lock();
1239 1239
1240 err = -ENODEV; 1240 err = -ENODEV;
1241 dev = __dev_get_by_index(mreq->mr_ifindex); 1241 dev = __dev_get_by_index(&init_net, mreq->mr_ifindex);
1242 if (!dev) 1242 if (!dev)
1243 goto done; 1243 goto done;
1244 1244
@@ -1292,7 +1292,7 @@ static int packet_mc_drop(struct sock *sk, struct packet_mreq_max *mreq)
1292 if (--ml->count == 0) { 1292 if (--ml->count == 0) {
1293 struct net_device *dev; 1293 struct net_device *dev;
1294 *mlp = ml->next; 1294 *mlp = ml->next;
1295 dev = dev_get_by_index(ml->ifindex); 1295 dev = dev_get_by_index(&init_net, ml->ifindex);
1296 if (dev) { 1296 if (dev) {
1297 packet_dev_mc(dev, ml, -1); 1297 packet_dev_mc(dev, ml, -1);
1298 dev_put(dev); 1298 dev_put(dev);
@@ -1320,7 +1320,7 @@ static void packet_flush_mclist(struct sock *sk)
1320 struct net_device *dev; 1320 struct net_device *dev;
1321 1321
1322 po->mclist = ml->next; 1322 po->mclist = ml->next;
1323 if ((dev = dev_get_by_index(ml->ifindex)) != NULL) { 1323 if ((dev = dev_get_by_index(&init_net, ml->ifindex)) != NULL) {
1324 packet_dev_mc(dev, ml, -1); 1324 packet_dev_mc(dev, ml, -1);
1325 dev_put(dev); 1325 dev_put(dev);
1326 } 1326 }
diff --git a/net/rose/rose_route.c b/net/rose/rose_route.c
index 96f61a71b25..540c0f26ffe 100644
--- a/net/rose/rose_route.c
+++ b/net/rose/rose_route.c
@@ -583,7 +583,7 @@ static struct net_device *rose_ax25_dev_get(char *devname)
583{ 583{
584 struct net_device *dev; 584 struct net_device *dev;
585 585
586 if ((dev = dev_get_by_name(devname)) == NULL) 586 if ((dev = dev_get_by_name(&init_net, devname)) == NULL)
587 return NULL; 587 return NULL;
588 588
589 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_AX25) 589 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_AX25)
@@ -601,7 +601,7 @@ struct net_device *rose_dev_first(void)
601 struct net_device *dev, *first = NULL; 601 struct net_device *dev, *first = NULL;
602 602
603 read_lock(&dev_base_lock); 603 read_lock(&dev_base_lock);
604 for_each_netdev(dev) { 604 for_each_netdev(&init_net, dev) {
605 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_ROSE) 605 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_ROSE)
606 if (first == NULL || strncmp(dev->name, first->name, 3) < 0) 606 if (first == NULL || strncmp(dev->name, first->name, 3) < 0)
607 first = dev; 607 first = dev;
@@ -619,7 +619,7 @@ struct net_device *rose_dev_get(rose_address *addr)
619 struct net_device *dev; 619 struct net_device *dev;
620 620
621 read_lock(&dev_base_lock); 621 read_lock(&dev_base_lock);
622 for_each_netdev(dev) { 622 for_each_netdev(&init_net, dev) {
623 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_ROSE && rosecmp(addr, (rose_address *)dev->dev_addr) == 0) { 623 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_ROSE && rosecmp(addr, (rose_address *)dev->dev_addr) == 0) {
624 dev_hold(dev); 624 dev_hold(dev);
625 goto out; 625 goto out;
@@ -636,7 +636,7 @@ static int rose_dev_exists(rose_address *addr)
636 struct net_device *dev; 636 struct net_device *dev;
637 637
638 read_lock(&dev_base_lock); 638 read_lock(&dev_base_lock);
639 for_each_netdev(dev) { 639 for_each_netdev(&init_net, dev) {
640 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_ROSE && rosecmp(addr, (rose_address *)dev->dev_addr) == 0) 640 if ((dev->flags & IFF_UP) && dev->type == ARPHRD_ROSE && rosecmp(addr, (rose_address *)dev->dev_addr) == 0)
641 goto out; 641 goto out;
642 } 642 }
diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c
index 579578944ae..fd7bca4d5c2 100644
--- a/net/sched/act_mirred.c
+++ b/net/sched/act_mirred.c
@@ -20,6 +20,7 @@
20#include <linux/rtnetlink.h> 20#include <linux/rtnetlink.h>
21#include <linux/module.h> 21#include <linux/module.h>
22#include <linux/init.h> 22#include <linux/init.h>
23#include <net/net_namespace.h>
23#include <net/netlink.h> 24#include <net/netlink.h>
24#include <net/pkt_sched.h> 25#include <net/pkt_sched.h>
25#include <linux/tc_act/tc_mirred.h> 26#include <linux/tc_act/tc_mirred.h>
@@ -73,7 +74,7 @@ static int tcf_mirred_init(struct rtattr *rta, struct rtattr *est,
73 parm = RTA_DATA(tb[TCA_MIRRED_PARMS-1]); 74 parm = RTA_DATA(tb[TCA_MIRRED_PARMS-1]);
74 75
75 if (parm->ifindex) { 76 if (parm->ifindex) {
76 dev = __dev_get_by_index(parm->ifindex); 77 dev = __dev_get_by_index(&init_net, parm->ifindex);
77 if (dev == NULL) 78 if (dev == NULL)
78 return -ENODEV; 79 return -ENODEV;
79 switch (dev->type) { 80 switch (dev->type) {
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index 5f0fbca7393..03657976fd5 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -154,7 +154,7 @@ replay:
154 /* Find head of filter chain. */ 154 /* Find head of filter chain. */
155 155
156 /* Find link */ 156 /* Find link */
157 if ((dev = __dev_get_by_index(t->tcm_ifindex)) == NULL) 157 if ((dev = __dev_get_by_index(&init_net, t->tcm_ifindex)) == NULL)
158 return -ENODEV; 158 return -ENODEV;
159 159
160 /* Find qdisc */ 160 /* Find qdisc */
@@ -387,7 +387,7 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)
387 387
388 if (cb->nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*tcm))) 388 if (cb->nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*tcm)))
389 return skb->len; 389 return skb->len;
390 if ((dev = dev_get_by_index(tcm->tcm_ifindex)) == NULL) 390 if ((dev = dev_get_by_index(&init_net, tcm->tcm_ifindex)) == NULL)
391 return skb->len; 391 return skb->len;
392 392
393 if (!tcm->tcm_parent) 393 if (!tcm->tcm_parent)
diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c
index 650f09c8bd6..e9989610712 100644
--- a/net/sched/em_meta.c
+++ b/net/sched/em_meta.c
@@ -291,7 +291,7 @@ META_COLLECTOR(var_sk_bound_if)
291 } else { 291 } else {
292 struct net_device *dev; 292 struct net_device *dev;
293 293
294 dev = dev_get_by_index(skb->sk->sk_bound_dev_if); 294 dev = dev_get_by_index(&init_net, skb->sk->sk_bound_dev_if);
295 *err = var_dev(dev, dst); 295 *err = var_dev(dev, dst);
296 if (dev) 296 if (dev)
297 dev_put(dev); 297 dev_put(dev);
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index efc383c58f1..39d32780c80 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -607,7 +607,7 @@ static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
607 struct Qdisc *p = NULL; 607 struct Qdisc *p = NULL;
608 int err; 608 int err;
609 609
610 if ((dev = __dev_get_by_index(tcm->tcm_ifindex)) == NULL) 610 if ((dev = __dev_get_by_index(&init_net, tcm->tcm_ifindex)) == NULL)
611 return -ENODEV; 611 return -ENODEV;
612 612
613 if (clid) { 613 if (clid) {
@@ -674,7 +674,7 @@ replay:
674 clid = tcm->tcm_parent; 674 clid = tcm->tcm_parent;
675 q = p = NULL; 675 q = p = NULL;
676 676
677 if ((dev = __dev_get_by_index(tcm->tcm_ifindex)) == NULL) 677 if ((dev = __dev_get_by_index(&init_net, tcm->tcm_ifindex)) == NULL)
678 return -ENODEV; 678 return -ENODEV;
679 679
680 if (clid) { 680 if (clid) {
@@ -881,7 +881,7 @@ static int tc_dump_qdisc(struct sk_buff *skb, struct netlink_callback *cb)
881 s_q_idx = q_idx = cb->args[1]; 881 s_q_idx = q_idx = cb->args[1];
882 read_lock(&dev_base_lock); 882 read_lock(&dev_base_lock);
883 idx = 0; 883 idx = 0;
884 for_each_netdev(dev) { 884 for_each_netdev(&init_net, dev) {
885 if (idx < s_idx) 885 if (idx < s_idx)
886 goto cont; 886 goto cont;
887 if (idx > s_idx) 887 if (idx > s_idx)
@@ -932,7 +932,7 @@ static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n, void *arg)
932 u32 qid = TC_H_MAJ(clid); 932 u32 qid = TC_H_MAJ(clid);
933 int err; 933 int err;
934 934
935 if ((dev = __dev_get_by_index(tcm->tcm_ifindex)) == NULL) 935 if ((dev = __dev_get_by_index(&init_net, tcm->tcm_ifindex)) == NULL)
936 return -ENODEV; 936 return -ENODEV;
937 937
938 /* 938 /*
@@ -1115,7 +1115,7 @@ static int tc_dump_tclass(struct sk_buff *skb, struct netlink_callback *cb)
1115 1115
1116 if (cb->nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*tcm))) 1116 if (cb->nlh->nlmsg_len < NLMSG_LENGTH(sizeof(*tcm)))
1117 return 0; 1117 return 0;
1118 if ((dev = dev_get_by_index(tcm->tcm_ifindex)) == NULL) 1118 if ((dev = dev_get_by_index(&init_net, tcm->tcm_ifindex)) == NULL)
1119 return 0; 1119 return 0;
1120 1120
1121 s_t = cb->args[0]; 1121 s_t = cb->args[0];
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
index ddeb4882ec7..9de3ddaa276 100644
--- a/net/sctp/ipv6.c
+++ b/net/sctp/ipv6.c
@@ -855,7 +855,7 @@ static int sctp_inet6_bind_verify(struct sctp_sock *opt, union sctp_addr *addr)
855 if (type & IPV6_ADDR_LINKLOCAL) { 855 if (type & IPV6_ADDR_LINKLOCAL) {
856 if (!addr->v6.sin6_scope_id) 856 if (!addr->v6.sin6_scope_id)
857 return 0; 857 return 0;
858 dev = dev_get_by_index(addr->v6.sin6_scope_id); 858 dev = dev_get_by_index(&init_net, addr->v6.sin6_scope_id);
859 if (!dev) 859 if (!dev)
860 return 0; 860 return 0;
861 if (!ipv6_chk_addr(&addr->v6.sin6_addr, dev, 0)) { 861 if (!ipv6_chk_addr(&addr->v6.sin6_addr, dev, 0)) {
@@ -886,7 +886,7 @@ static int sctp_inet6_send_verify(struct sctp_sock *opt, union sctp_addr *addr)
886 if (type & IPV6_ADDR_LINKLOCAL) { 886 if (type & IPV6_ADDR_LINKLOCAL) {
887 if (!addr->v6.sin6_scope_id) 887 if (!addr->v6.sin6_scope_id)
888 return 0; 888 return 0;
889 dev = dev_get_by_index(addr->v6.sin6_scope_id); 889 dev = dev_get_by_index(&init_net, addr->v6.sin6_scope_id);
890 if (!dev) 890 if (!dev)
891 return 0; 891 return 0;
892 dev_put(dev); 892 dev_put(dev);
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
index af67c839ef9..54edcd978f7 100644
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -179,7 +179,7 @@ static void sctp_get_local_addr_list(void)
179 struct sctp_af *af; 179 struct sctp_af *af;
180 180
181 read_lock(&dev_base_lock); 181 read_lock(&dev_base_lock);
182 for_each_netdev(dev) { 182 for_each_netdev(&init_net, dev) {
183 __list_for_each(pos, &sctp_address_families) { 183 __list_for_each(pos, &sctp_address_families) {
184 af = list_entry(pos, struct sctp_af, list); 184 af = list_entry(pos, struct sctp_af, list);
185 af->copy_addrlist(&sctp_local_addr_list, dev); 185 af->copy_addrlist(&sctp_local_addr_list, dev);
diff --git a/net/socket.c b/net/socket.c
index a714c6d4e4a..bc16eee4dc8 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -791,9 +791,9 @@ static ssize_t sock_aio_write(struct kiocb *iocb, const struct iovec *iov,
791 */ 791 */
792 792
793static DEFINE_MUTEX(br_ioctl_mutex); 793static DEFINE_MUTEX(br_ioctl_mutex);
794static int (*br_ioctl_hook) (unsigned int cmd, void __user *arg) = NULL; 794static int (*br_ioctl_hook) (struct net *, unsigned int cmd, void __user *arg) = NULL;
795 795
796void brioctl_set(int (*hook) (unsigned int, void __user *)) 796void brioctl_set(int (*hook) (struct net *, unsigned int, void __user *))
797{ 797{
798 mutex_lock(&br_ioctl_mutex); 798 mutex_lock(&br_ioctl_mutex);
799 br_ioctl_hook = hook; 799 br_ioctl_hook = hook;
@@ -803,9 +803,9 @@ void brioctl_set(int (*hook) (unsigned int, void __user *))
803EXPORT_SYMBOL(brioctl_set); 803EXPORT_SYMBOL(brioctl_set);
804 804
805static DEFINE_MUTEX(vlan_ioctl_mutex); 805static DEFINE_MUTEX(vlan_ioctl_mutex);
806static int (*vlan_ioctl_hook) (void __user *arg); 806static int (*vlan_ioctl_hook) (struct net *, void __user *arg);
807 807
808void vlan_ioctl_set(int (*hook) (void __user *)) 808void vlan_ioctl_set(int (*hook) (struct net *, void __user *))
809{ 809{
810 mutex_lock(&vlan_ioctl_mutex); 810 mutex_lock(&vlan_ioctl_mutex);
811 vlan_ioctl_hook = hook; 811 vlan_ioctl_hook = hook;
@@ -834,16 +834,20 @@ EXPORT_SYMBOL(dlci_ioctl_set);
834static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg) 834static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
835{ 835{
836 struct socket *sock; 836 struct socket *sock;
837 struct sock *sk;
837 void __user *argp = (void __user *)arg; 838 void __user *argp = (void __user *)arg;
838 int pid, err; 839 int pid, err;
840 struct net *net;
839 841
840 sock = file->private_data; 842 sock = file->private_data;
843 sk = sock->sk;
844 net = sk->sk_net;
841 if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) { 845 if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
842 err = dev_ioctl(cmd, argp); 846 err = dev_ioctl(net, cmd, argp);
843 } else 847 } else
844#ifdef CONFIG_WIRELESS_EXT 848#ifdef CONFIG_WIRELESS_EXT
845 if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) { 849 if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
846 err = dev_ioctl(cmd, argp); 850 err = dev_ioctl(net, cmd, argp);
847 } else 851 } else
848#endif /* CONFIG_WIRELESS_EXT */ 852#endif /* CONFIG_WIRELESS_EXT */
849 switch (cmd) { 853 switch (cmd) {
@@ -869,7 +873,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
869 873
870 mutex_lock(&br_ioctl_mutex); 874 mutex_lock(&br_ioctl_mutex);
871 if (br_ioctl_hook) 875 if (br_ioctl_hook)
872 err = br_ioctl_hook(cmd, argp); 876 err = br_ioctl_hook(net, cmd, argp);
873 mutex_unlock(&br_ioctl_mutex); 877 mutex_unlock(&br_ioctl_mutex);
874 break; 878 break;
875 case SIOCGIFVLAN: 879 case SIOCGIFVLAN:
@@ -880,7 +884,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
880 884
881 mutex_lock(&vlan_ioctl_mutex); 885 mutex_lock(&vlan_ioctl_mutex);
882 if (vlan_ioctl_hook) 886 if (vlan_ioctl_hook)
883 err = vlan_ioctl_hook(argp); 887 err = vlan_ioctl_hook(net, argp);
884 mutex_unlock(&vlan_ioctl_mutex); 888 mutex_unlock(&vlan_ioctl_mutex);
885 break; 889 break;
886 case SIOCADDDLCI: 890 case SIOCADDDLCI:
@@ -903,7 +907,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
903 * to the NIC driver. 907 * to the NIC driver.
904 */ 908 */
905 if (err == -ENOIOCTLCMD) 909 if (err == -ENOIOCTLCMD)
906 err = dev_ioctl(cmd, argp); 910 err = dev_ioctl(net, cmd, argp);
907 break; 911 break;
908 } 912 }
909 return err; 913 return err;
diff --git a/net/tipc/eth_media.c b/net/tipc/eth_media.c
index 406f0d26fa8..d6fc0575816 100644
--- a/net/tipc/eth_media.c
+++ b/net/tipc/eth_media.c
@@ -135,7 +135,7 @@ static int enable_bearer(struct tipc_bearer *tb_ptr)
135 135
136 /* Find device with specified name */ 136 /* Find device with specified name */
137 137
138 for_each_netdev(pdev){ 138 for_each_netdev(&init_net, pdev){
139 if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) { 139 if (!strncmp(pdev->name, driver_name, IFNAMSIZ)) {
140 dev = pdev; 140 dev = pdev;
141 break; 141 break;
diff --git a/net/wireless/wext.c b/net/wireless/wext.c
index b8069afe041..e8b3409d6c8 100644
--- a/net/wireless/wext.c
+++ b/net/wireless/wext.c
@@ -673,7 +673,22 @@ static const struct seq_operations wireless_seq_ops = {
673 673
674static int wireless_seq_open(struct inode *inode, struct file *file) 674static int wireless_seq_open(struct inode *inode, struct file *file)
675{ 675{
676 return seq_open(file, &wireless_seq_ops); 676 struct seq_file *seq;
677 int res;
678 res = seq_open(file, &wireless_seq_ops);
679 if (!res) {
680 seq = file->private_data;
681 seq->private = get_net(PROC_NET(inode));
682 }
683 return res;
684}
685
686static int wireless_seq_release(struct inode *inode, struct file *file)
687{
688 struct seq_file *seq = file->private_data;
689 struct net *net = seq->private;
690 put_net(net);
691 return seq_release(inode, file);
677} 692}
678 693
679static const struct file_operations wireless_seq_fops = { 694static const struct file_operations wireless_seq_fops = {
@@ -681,17 +696,22 @@ static const struct file_operations wireless_seq_fops = {
681 .open = wireless_seq_open, 696 .open = wireless_seq_open,
682 .read = seq_read, 697 .read = seq_read,
683 .llseek = seq_lseek, 698 .llseek = seq_lseek,
684 .release = seq_release, 699 .release = wireless_seq_release,
685}; 700};
686 701
687int __init wext_proc_init(void) 702int wext_proc_init(struct net *net)
688{ 703{
689 /* Create /proc/net/wireless entry */ 704 /* Create /proc/net/wireless entry */
690 if (!proc_net_fops_create(&init_net, "wireless", S_IRUGO, &wireless_seq_fops)) 705 if (!proc_net_fops_create(net, "wireless", S_IRUGO, &wireless_seq_fops))
691 return -ENOMEM; 706 return -ENOMEM;
692 707
693 return 0; 708 return 0;
694} 709}
710
711void wext_proc_exit(struct net *net)
712{
713 proc_net_remove(net, "wireless");
714}
695#endif /* CONFIG_PROC_FS */ 715#endif /* CONFIG_PROC_FS */
696 716
697/************************** IOCTL SUPPORT **************************/ 717/************************** IOCTL SUPPORT **************************/
@@ -1011,7 +1031,7 @@ static int ioctl_private_call(struct net_device *dev, struct ifreq *ifr,
1011 * Main IOCTl dispatcher. 1031 * Main IOCTl dispatcher.
1012 * Check the type of IOCTL and call the appropriate wrapper... 1032 * Check the type of IOCTL and call the appropriate wrapper...
1013 */ 1033 */
1014static int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd) 1034static int wireless_process_ioctl(struct net *net, struct ifreq *ifr, unsigned int cmd)
1015{ 1035{
1016 struct net_device *dev; 1036 struct net_device *dev;
1017 iw_handler handler; 1037 iw_handler handler;
@@ -1020,7 +1040,7 @@ static int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd)
1020 * The copy_to/from_user() of ifr is also dealt with in there */ 1040 * The copy_to/from_user() of ifr is also dealt with in there */
1021 1041
1022 /* Make sure the device exist */ 1042 /* Make sure the device exist */
1023 if ((dev = __dev_get_by_name(ifr->ifr_name)) == NULL) 1043 if ((dev = __dev_get_by_name(net, ifr->ifr_name)) == NULL)
1024 return -ENODEV; 1044 return -ENODEV;
1025 1045
1026 /* A bunch of special cases, then the generic case... 1046 /* A bunch of special cases, then the generic case...
@@ -1054,7 +1074,7 @@ static int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd)
1054} 1074}
1055 1075
1056/* entry point from dev ioctl */ 1076/* entry point from dev ioctl */
1057int wext_handle_ioctl(struct ifreq *ifr, unsigned int cmd, 1077int wext_handle_ioctl(struct net *net, struct ifreq *ifr, unsigned int cmd,
1058 void __user *arg) 1078 void __user *arg)
1059{ 1079{
1060 int ret; 1080 int ret;
@@ -1066,9 +1086,9 @@ int wext_handle_ioctl(struct ifreq *ifr, unsigned int cmd,
1066 && !capable(CAP_NET_ADMIN)) 1086 && !capable(CAP_NET_ADMIN))
1067 return -EPERM; 1087 return -EPERM;
1068 1088
1069 dev_load(ifr->ifr_name); 1089 dev_load(net, ifr->ifr_name);
1070 rtnl_lock(); 1090 rtnl_lock();
1071 ret = wireless_process_ioctl(ifr, cmd); 1091 ret = wireless_process_ioctl(net, ifr, cmd);
1072 rtnl_unlock(); 1092 rtnl_unlock();
1073 if (IW_IS_GET(cmd) && copy_to_user(arg, ifr, sizeof(struct ifreq))) 1093 if (IW_IS_GET(cmd) && copy_to_user(arg, ifr, sizeof(struct ifreq)))
1074 return -EFAULT; 1094 return -EFAULT;
diff --git a/net/x25/x25_route.c b/net/x25/x25_route.c
index 060fcfaa2f4..86b5b4da097 100644
--- a/net/x25/x25_route.c
+++ b/net/x25/x25_route.c
@@ -129,7 +129,7 @@ void x25_route_device_down(struct net_device *dev)
129 */ 129 */
130struct net_device *x25_dev_get(char *devname) 130struct net_device *x25_dev_get(char *devname)
131{ 131{
132 struct net_device *dev = dev_get_by_name(devname); 132 struct net_device *dev = dev_get_by_name(&init_net, devname);
133 133
134 if (dev && 134 if (dev &&
135 (!(dev->flags & IFF_UP) || (dev->type != ARPHRD_X25 135 (!(dev->flags & IFF_UP) || (dev->type != ARPHRD_X25