diff options
-rw-r--r-- | net/ipv6/addrconf.c | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 5a5f8bd4597a..f96ed76d8fa4 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -2154,6 +2154,15 @@ static void addrconf_dev_config(struct net_device *dev) | |||
2154 | 2154 | ||
2155 | ASSERT_RTNL(); | 2155 | ASSERT_RTNL(); |
2156 | 2156 | ||
2157 | if ((dev->type != ARPHRD_ETHER) && | ||
2158 | (dev->type != ARPHRD_FDDI) && | ||
2159 | (dev->type != ARPHRD_IEEE802_TR) && | ||
2160 | (dev->type != ARPHRD_ARCNET) && | ||
2161 | (dev->type != ARPHRD_INFINIBAND)) { | ||
2162 | /* Alas, we support only Ethernet autoconfiguration. */ | ||
2163 | return; | ||
2164 | } | ||
2165 | |||
2157 | idev = addrconf_add_dev(dev); | 2166 | idev = addrconf_add_dev(dev); |
2158 | if (idev == NULL) | 2167 | if (idev == NULL) |
2159 | return; | 2168 | return; |
@@ -2241,36 +2250,16 @@ static void addrconf_ip6_tnl_config(struct net_device *dev) | |||
2241 | ip6_tnl_add_linklocal(idev); | 2250 | ip6_tnl_add_linklocal(idev); |
2242 | } | 2251 | } |
2243 | 2252 | ||
2244 | static int ipv6_hwtype(struct net_device *dev) | ||
2245 | { | ||
2246 | if ((dev->type == ARPHRD_ETHER) || | ||
2247 | (dev->type == ARPHRD_LOOPBACK) || | ||
2248 | (dev->type == ARPHRD_SIT) || | ||
2249 | (dev->type == ARPHRD_TUNNEL6) || | ||
2250 | (dev->type == ARPHRD_FDDI) || | ||
2251 | (dev->type == ARPHRD_IEEE802_TR) || | ||
2252 | (dev->type == ARPHRD_ARCNET) || | ||
2253 | (dev->type == ARPHRD_INFINIBAND)) | ||
2254 | return 1; | ||
2255 | |||
2256 | return 0; | ||
2257 | } | ||
2258 | |||
2259 | static int addrconf_notify(struct notifier_block *this, unsigned long event, | 2253 | static int addrconf_notify(struct notifier_block *this, unsigned long event, |
2260 | void * data) | 2254 | void * data) |
2261 | { | 2255 | { |
2262 | struct net_device *dev = (struct net_device *) data; | 2256 | struct net_device *dev = (struct net_device *) data; |
2263 | struct inet6_dev *idev; | 2257 | struct inet6_dev *idev = __in6_dev_get(dev); |
2264 | int run_pending = 0; | 2258 | int run_pending = 0; |
2265 | 2259 | ||
2266 | if (!ipv6_hwtype(dev)) | ||
2267 | return NOTIFY_OK; | ||
2268 | |||
2269 | idev = __in6_dev_get(dev); | ||
2270 | |||
2271 | switch(event) { | 2260 | switch(event) { |
2272 | case NETDEV_REGISTER: | 2261 | case NETDEV_REGISTER: |
2273 | if (!idev) { | 2262 | if (!idev && dev->mtu >= IPV6_MIN_MTU) { |
2274 | idev = ipv6_add_dev(dev); | 2263 | idev = ipv6_add_dev(dev); |
2275 | if (!idev) | 2264 | if (!idev) |
2276 | printk(KERN_WARNING "IPv6: add_dev failed for %s\n", | 2265 | printk(KERN_WARNING "IPv6: add_dev failed for %s\n", |