Skip to content

Commit

Permalink
IPv6: keep tentative addresses in hash table
Browse files Browse the repository at this point in the history
When link goes down, want address to be preserved but in a tentative
state, therefore it has to stay in hash list.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
stephen hemminger authored and David S. Miller committed Apr 13, 2010
1 parent 93fa159 commit 27bdb2a
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions net/ipv6/addrconf.c
Original file line number Diff line number Diff line change
Expand Up @@ -2704,17 +2704,18 @@ static int addrconf_ifdown(struct net_device *dev, int how)
/* Flag it for later restoration when link comes up */
ifa->flags |= IFA_F_TENTATIVE;
in6_ifa_hold(ifa);
write_unlock_bh(&idev->lock);
} else {
list_del(&ifa->if_list);
ifa->dead = 1;
}
write_unlock_bh(&idev->lock);
write_unlock_bh(&idev->lock);

/* clear hash table */
spin_lock_bh(&addrconf_hash_lock);
hlist_del_init_rcu(&ifa->addr_lst);
__in6_ifa_put(ifa);
spin_unlock_bh(&addrconf_hash_lock);
/* clear hash table */
spin_lock_bh(&addrconf_hash_lock);
hlist_del_init_rcu(&ifa->addr_lst);
__in6_ifa_put(ifa);
spin_unlock_bh(&addrconf_hash_lock);
}

__ipv6_ifa_notify(RTM_DELADDR, ifa);
atomic_notifier_call_chain(&inet6addr_chain, NETDEV_DOWN, ifa);
Expand Down

0 comments on commit 27bdb2a

Please sign in to comment.