===== net/ipv6/addrconf.c 1.129 vs edited ===== --- 1.129/net/ipv6/addrconf.c 2005-01-18 08:13:31 +11:00 +++ edited/net/ipv6/addrconf.c 2005-02-05 16:32:34 +11:00 @@ -1914,6 +1914,11 @@ struct inet6_dev *idev = __in6_dev_get(dev); switch(event) { + case NETDEV_REGISTER: + if (dev == &loopback_dev && !ipv6_find_idev(dev)) + panic("addrconf: Failed to create loopback\n"); + break; + case NETDEV_UP: switch(dev->type) { case ARPHRD_SIT: @@ -1998,6 +2003,9 @@ ASSERT_RTNL(); + if (dev == &loopback_dev) + how = 0; + rt6_ifdown(dev); neigh_ifdown(&nd_tbl, dev); @@ -3445,8 +3453,6 @@ */ rtnl_lock(); addrconf_notify(&ipv6_dev_notf, NETDEV_REGISTER, &loopback_dev); - if (loopback_dev.flags & IFF_UP) - addrconf_notify(&ipv6_dev_notf, NETDEV_UP, &loopback_dev); rtnl_unlock(); register_netdevice_notifier(&ipv6_dev_notf);