addrconf.c (de3cb747ffac5f2a4a6bb156e7e2fd5229e688e5) addrconf.c (2774c7aba6c97a2535be3309a2209770953780b3)
1/*
2 * IPv6 Address [auto]configuration
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
8 *

--- 2396 unchanged lines hidden (view full) ---

2405static int addrconf_ifdown(struct net_device *dev, int how)
2406{
2407 struct inet6_dev *idev;
2408 struct inet6_ifaddr *ifa, **bifa;
2409 int i;
2410
2411 ASSERT_RTNL();
2412
1/*
2 * IPv6 Address [auto]configuration
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
8 *

--- 2396 unchanged lines hidden (view full) ---

2405static int addrconf_ifdown(struct net_device *dev, int how)
2406{
2407 struct inet6_dev *idev;
2408 struct inet6_ifaddr *ifa, **bifa;
2409 int i;
2410
2411 ASSERT_RTNL();
2412
2413 if (dev == loopback_dev && how == 1)
2413 if (dev == init_net.loopback_dev && how == 1)
2414 how = 0;
2415
2416 rt6_ifdown(dev);
2417 neigh_ifdown(&nd_tbl, dev);
2418
2419 idev = __in6_dev_get(dev);
2420 if (idev == NULL)
2421 return -ENODEV;

--- 1785 unchanged lines hidden (view full) ---

4207 * devices to fail to get a link-local address.
4208 *
4209 * So, as a temporary fix, allocate the ipv6 structure for
4210 * loopback_dev first by hand.
4211 * Longer term, all of the dependencies ipv6 has upon the loopback
4212 * device and it being up should be removed.
4213 */
4214 rtnl_lock();
2414 how = 0;
2415
2416 rt6_ifdown(dev);
2417 neigh_ifdown(&nd_tbl, dev);
2418
2419 idev = __in6_dev_get(dev);
2420 if (idev == NULL)
2421 return -ENODEV;

--- 1785 unchanged lines hidden (view full) ---

4207 * devices to fail to get a link-local address.
4208 *
4209 * So, as a temporary fix, allocate the ipv6 structure for
4210 * loopback_dev first by hand.
4211 * Longer term, all of the dependencies ipv6 has upon the loopback
4212 * device and it being up should be removed.
4213 */
4214 rtnl_lock();
4215 if (!ipv6_add_dev(loopback_dev))
4215 if (!ipv6_add_dev(init_net.loopback_dev))
4216 err = -ENOMEM;
4217 rtnl_unlock();
4218 if (err)
4219 return err;
4220
4216 err = -ENOMEM;
4217 rtnl_unlock();
4218 if (err)
4219 return err;
4220
4221 ip6_null_entry.u.dst.dev = loopback_dev;
4222 ip6_null_entry.rt6i_idev = in6_dev_get(loopback_dev);
4221 ip6_null_entry.u.dst.dev = init_net.loopback_dev;
4222 ip6_null_entry.rt6i_idev = in6_dev_get(init_net.loopback_dev);
4223#ifdef CONFIG_IPV6_MULTIPLE_TABLES
4223#ifdef CONFIG_IPV6_MULTIPLE_TABLES
4224 ip6_prohibit_entry.u.dst.dev = loopback_dev;
4225 ip6_prohibit_entry.rt6i_idev = in6_dev_get(loopback_dev);
4226 ip6_blk_hole_entry.u.dst.dev = loopback_dev;
4227 ip6_blk_hole_entry.rt6i_idev = in6_dev_get(loopback_dev);
4224 ip6_prohibit_entry.u.dst.dev = init_net.loopback_dev;
4225 ip6_prohibit_entry.rt6i_idev = in6_dev_get(init_net.loopback_dev);
4226 ip6_blk_hole_entry.u.dst.dev = init_net.loopback_dev;
4227 ip6_blk_hole_entry.rt6i_idev = in6_dev_get(init_net.loopback_dev);
4228#endif
4229
4230 register_netdevice_notifier(&ipv6_dev_notf);
4231
4232 addrconf_verify(0);
4233
4234 err = __rtnl_register(PF_INET6, RTM_GETLINK, NULL, inet6_dump_ifinfo);
4235 if (err < 0)

--- 38 unchanged lines hidden (view full) ---

4274 * clean dev list.
4275 */
4276
4277 for_each_netdev(&init_net, dev) {
4278 if (__in6_dev_get(dev) == NULL)
4279 continue;
4280 addrconf_ifdown(dev, 1);
4281 }
4228#endif
4229
4230 register_netdevice_notifier(&ipv6_dev_notf);
4231
4232 addrconf_verify(0);
4233
4234 err = __rtnl_register(PF_INET6, RTM_GETLINK, NULL, inet6_dump_ifinfo);
4235 if (err < 0)

--- 38 unchanged lines hidden (view full) ---

4274 * clean dev list.
4275 */
4276
4277 for_each_netdev(&init_net, dev) {
4278 if (__in6_dev_get(dev) == NULL)
4279 continue;
4280 addrconf_ifdown(dev, 1);
4281 }
4282 addrconf_ifdown(loopback_dev, 2);
4282 addrconf_ifdown(init_net.loopback_dev, 2);
4283
4284 /*
4285 * Check hash table.
4286 */
4287
4288 write_lock_bh(&addrconf_hash_lock);
4289 for (i=0; i < IN6_ADDR_HSIZE; i++) {
4290 for (ifa=inet6_addr_lst[i]; ifa; ) {

--- 20 unchanged lines hidden ---
4283
4284 /*
4285 * Check hash table.
4286 */
4287
4288 write_lock_bh(&addrconf_hash_lock);
4289 for (i=0; i < IN6_ADDR_HSIZE; i++) {
4290 for (ifa=inet6_addr_lst[i]; ifa; ) {

--- 20 unchanged lines hidden ---