aboutsummaryrefslogtreecommitdiffstats
path: root/net/decnet/dn_fib.c
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/decnet/dn_fib.c
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/decnet/dn_fib.c')
-rw-r--r--net/decnet/dn_fib.c8
1 files changed, 4 insertions, 4 deletions
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;