diff options
Diffstat (limited to 'net/ipv6/addrconf.c')
-rw-r--r-- | net/ipv6/addrconf.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index e7a1882db048..e08955baedff 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -371,25 +371,26 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev) | |||
371 | */ | 371 | */ |
372 | in6_dev_hold(ndev); | 372 | in6_dev_hold(ndev); |
373 | 373 | ||
374 | #if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE) | ||
375 | if (dev->type == ARPHRD_SIT && (dev->priv_flags & IFF_ISATAP)) { | ||
376 | printk(KERN_INFO | ||
377 | "%s: Disabled Multicast RS\n", | ||
378 | dev->name); | ||
379 | ndev->cnf.rtr_solicits = 0; | ||
380 | } | ||
381 | #endif | ||
382 | |||
374 | #ifdef CONFIG_IPV6_PRIVACY | 383 | #ifdef CONFIG_IPV6_PRIVACY |
375 | setup_timer(&ndev->regen_timer, ipv6_regen_rndid, (unsigned long)ndev); | 384 | setup_timer(&ndev->regen_timer, ipv6_regen_rndid, (unsigned long)ndev); |
376 | if ((dev->flags&IFF_LOOPBACK) || | 385 | if ((dev->flags&IFF_LOOPBACK) || |
377 | dev->type == ARPHRD_TUNNEL || | 386 | dev->type == ARPHRD_TUNNEL || |
378 | #if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE) | 387 | dev->type == ARPHRD_TUNNEL6 || |
379 | dev->type == ARPHRD_SIT || | 388 | dev->type == ARPHRD_SIT || |
380 | #endif | ||
381 | dev->type == ARPHRD_NONE) { | 389 | dev->type == ARPHRD_NONE) { |
382 | printk(KERN_INFO | 390 | printk(KERN_INFO |
383 | "%s: Disabled Privacy Extensions\n", | 391 | "%s: Disabled Privacy Extensions\n", |
384 | dev->name); | 392 | dev->name); |
385 | ndev->cnf.use_tempaddr = -1; | 393 | ndev->cnf.use_tempaddr = -1; |
386 | |||
387 | if (dev->type == ARPHRD_SIT && (dev->priv_flags & IFF_ISATAP)) { | ||
388 | printk(KERN_INFO | ||
389 | "%s: Disabled Multicast RS\n", | ||
390 | dev->name); | ||
391 | ndev->cnf.rtr_solicits = 0; | ||
392 | } | ||
393 | } else { | 394 | } else { |
394 | in6_dev_hold(ndev); | 395 | in6_dev_hold(ndev); |
395 | ipv6_regen_rndid((unsigned long) ndev); | 396 | ipv6_regen_rndid((unsigned long) ndev); |
@@ -2456,7 +2457,7 @@ static int addrconf_ifdown(struct net_device *dev, int how) | |||
2456 | 2457 | ||
2457 | ASSERT_RTNL(); | 2458 | ASSERT_RTNL(); |
2458 | 2459 | ||
2459 | if (dev == init_net.loopback_dev && how == 1) | 2460 | if ((dev->flags & IFF_LOOPBACK) && how == 1) |
2460 | how = 0; | 2461 | how = 0; |
2461 | 2462 | ||
2462 | rt6_ifdown(dev); | 2463 | rt6_ifdown(dev); |
@@ -2469,7 +2470,7 @@ static int addrconf_ifdown(struct net_device *dev, int how) | |||
2469 | /* Step 1: remove reference to ipv6 device from parent device. | 2470 | /* Step 1: remove reference to ipv6 device from parent device. |
2470 | Do not dev_put! | 2471 | Do not dev_put! |
2471 | */ | 2472 | */ |
2472 | if (how == 1) { | 2473 | if (how) { |
2473 | idev->dead = 1; | 2474 | idev->dead = 1; |
2474 | 2475 | ||
2475 | /* protected by rtnl_lock */ | 2476 | /* protected by rtnl_lock */ |
@@ -2501,12 +2502,12 @@ static int addrconf_ifdown(struct net_device *dev, int how) | |||
2501 | write_lock_bh(&idev->lock); | 2502 | write_lock_bh(&idev->lock); |
2502 | 2503 | ||
2503 | /* Step 3: clear flags for stateless addrconf */ | 2504 | /* Step 3: clear flags for stateless addrconf */ |
2504 | if (how != 1) | 2505 | if (!how) |
2505 | idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD|IF_READY); | 2506 | idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD|IF_READY); |
2506 | 2507 | ||
2507 | /* Step 4: clear address list */ | 2508 | /* Step 4: clear address list */ |
2508 | #ifdef CONFIG_IPV6_PRIVACY | 2509 | #ifdef CONFIG_IPV6_PRIVACY |
2509 | if (how == 1 && del_timer(&idev->regen_timer)) | 2510 | if (how && del_timer(&idev->regen_timer)) |
2510 | in6_dev_put(idev); | 2511 | in6_dev_put(idev); |
2511 | 2512 | ||
2512 | /* clear tempaddr list */ | 2513 | /* clear tempaddr list */ |
@@ -2543,7 +2544,7 @@ static int addrconf_ifdown(struct net_device *dev, int how) | |||
2543 | 2544 | ||
2544 | /* Step 5: Discard multicast list */ | 2545 | /* Step 5: Discard multicast list */ |
2545 | 2546 | ||
2546 | if (how == 1) | 2547 | if (how) |
2547 | ipv6_mc_destroy_dev(idev); | 2548 | ipv6_mc_destroy_dev(idev); |
2548 | else | 2549 | else |
2549 | ipv6_mc_down(idev); | 2550 | ipv6_mc_down(idev); |
@@ -2552,7 +2553,7 @@ static int addrconf_ifdown(struct net_device *dev, int how) | |||
2552 | 2553 | ||
2553 | /* Shot the device (if unregistered) */ | 2554 | /* Shot the device (if unregistered) */ |
2554 | 2555 | ||
2555 | if (how == 1) { | 2556 | if (how) { |
2556 | addrconf_sysctl_unregister(idev); | 2557 | addrconf_sysctl_unregister(idev); |
2557 | neigh_parms_release(&nd_tbl, idev->nd_parms); | 2558 | neigh_parms_release(&nd_tbl, idev->nd_parms); |
2558 | neigh_ifdown(&nd_tbl, dev); | 2559 | neigh_ifdown(&nd_tbl, dev); |