From 0406f5bd1315cbc042f818c9422773a2d56a6220 Mon Sep 17 00:00:00 2001 From: Hideaki Yoshifuji Date: Tue, 25 Nov 2003 01:10:18 -0800 Subject: [PATCH] [IPV6]: Redo stateless addrconf properly. When bringing an interface down do not forget to clear the IF_RS_SENT and IF_RA_RCVD flags. --- net/ipv6/addrconf.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 457b6c044a3ae..b08ba41c53568 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -1924,9 +1924,13 @@ static int addrconf_ifdown(struct net_device *dev, int how) write_unlock_bh(&addrconf_hash_lock); } - /* Step 3: clear address list */ - write_lock_bh(&idev->lock); + + /* Step 3: clear flags for stateless addrconf */ + if (how != 1) + idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD); + + /* Step 4: clear address list */ #ifdef CONFIG_IPV6_PRIVACY if (how == 1 && del_timer(&idev->regen_timer)) in6_dev_put(idev); @@ -1962,7 +1966,7 @@ static int addrconf_ifdown(struct net_device *dev, int how) } write_unlock_bh(&idev->lock); - /* Step 4: Discard multicast list */ + /* Step 5: Discard multicast list */ if (how == 1) ipv6_mc_destroy_dev(idev); -- 2.53.0