[NET]: Make the loopback device per network namespace.
This patch makes loopback_dev per network namespace. Adding code to create a different loopback device for each network namespace and adding the code to free a loopback device when a network namespace exits. This patch modifies all users the loopback_dev so they access it as init_net.loopback_dev, keeping all of the code compiling and working. A later pass will be needed to update the users to use something other than the initial network namespace. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
0cc217e16c
commit
2774c7aba6
@ -2410,7 +2410,7 @@ static int addrconf_ifdown(struct net_device *dev, int how)
|
||||
|
||||
ASSERT_RTNL();
|
||||
|
||||
if (dev == loopback_dev && how == 1)
|
||||
if (dev == init_net.loopback_dev && how == 1)
|
||||
how = 0;
|
||||
|
||||
rt6_ifdown(dev);
|
||||
@ -4212,19 +4212,19 @@ int __init addrconf_init(void)
|
||||
* device and it being up should be removed.
|
||||
*/
|
||||
rtnl_lock();
|
||||
if (!ipv6_add_dev(loopback_dev))
|
||||
if (!ipv6_add_dev(init_net.loopback_dev))
|
||||
err = -ENOMEM;
|
||||
rtnl_unlock();
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
ip6_null_entry.u.dst.dev = loopback_dev;
|
||||
ip6_null_entry.rt6i_idev = in6_dev_get(loopback_dev);
|
||||
ip6_null_entry.u.dst.dev = init_net.loopback_dev;
|
||||
ip6_null_entry.rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||
ip6_prohibit_entry.u.dst.dev = loopback_dev;
|
||||
ip6_prohibit_entry.rt6i_idev = in6_dev_get(loopback_dev);
|
||||
ip6_blk_hole_entry.u.dst.dev = loopback_dev;
|
||||
ip6_blk_hole_entry.rt6i_idev = in6_dev_get(loopback_dev);
|
||||
ip6_prohibit_entry.u.dst.dev = init_net.loopback_dev;
|
||||
ip6_prohibit_entry.rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||
ip6_blk_hole_entry.u.dst.dev = init_net.loopback_dev;
|
||||
ip6_blk_hole_entry.rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||
#endif
|
||||
|
||||
register_netdevice_notifier(&ipv6_dev_notf);
|
||||
@ -4279,7 +4279,7 @@ void __exit addrconf_cleanup(void)
|
||||
continue;
|
||||
addrconf_ifdown(dev, 1);
|
||||
}
|
||||
addrconf_ifdown(loopback_dev, 2);
|
||||
addrconf_ifdown(init_net.loopback_dev, 2);
|
||||
|
||||
/*
|
||||
* Check hash table.
|
||||
|
Reference in New Issue
Block a user