diff mbox

[v2] net: ipv6: Always leave anycast and multicast groups on link down

Message ID 1469208731-1085-1-git-send-email-mmanning@brocade.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Mike Manning July 22, 2016, 5:32 p.m. UTC
Default kernel behavior is to delete IPv6 addresses on link
down, which entails deletion of the multicast and the
subnet-router anycast addresses. These deletions do not
happen with sysctl setting to keep global IPv6 addresses on
link down, so every link down/up causes an increment of the
anycast and multicast refcounts. These bogus refcounts may
stop these addrs from being removed on subsequent calls to
delete them. The solution is to leave the groups for the
multicast and subnet anycast on link down for the callflow
when global IPv6 addresses are kept.

Fixes: f1705ec197e7 ("net: ipv6: Make address flushing on ifdown optional")
Signed-off-by: Mike Manning <mmanning@brocade.com>
---
 net/ipv6/addrconf.c |    4 ++++
 1 file changed, 4 insertions(+)

Comments

David Ahern July 22, 2016, 5:37 p.m. UTC | #1
On 7/22/16 11:32 AM, Mike Manning wrote:
> Default kernel behavior is to delete IPv6 addresses on link
> down, which entails deletion of the multicast and the
> subnet-router anycast addresses. These deletions do not
> happen with sysctl setting to keep global IPv6 addresses on
> link down, so every link down/up causes an increment of the
> anycast and multicast refcounts. These bogus refcounts may
> stop these addrs from being removed on subsequent calls to
> delete them. The solution is to leave the groups for the
> multicast and subnet anycast on link down for the callflow
> when global IPv6 addresses are kept.
>
> Fixes: f1705ec197e7 ("net: ipv6: Make address flushing on ifdown optional")
> Signed-off-by: Mike Manning <mmanning@brocade.com>


Acked-by: David Ahern <dsa@cumulusnetworks.com>
David Miller July 25, 2016, 6:17 p.m. UTC | #2
From: Mike Manning <mmanning@brocade.com>
Date: Fri, 22 Jul 2016 18:32:11 +0100

> Default kernel behavior is to delete IPv6 addresses on link
> down, which entails deletion of the multicast and the
> subnet-router anycast addresses. These deletions do not
> happen with sysctl setting to keep global IPv6 addresses on
> link down, so every link down/up causes an increment of the
> anycast and multicast refcounts. These bogus refcounts may
> stop these addrs from being removed on subsequent calls to
> delete them. The solution is to leave the groups for the
> multicast and subnet anycast on link down for the callflow
> when global IPv6 addresses are kept.
> 
> Fixes: f1705ec197e7 ("net: ipv6: Make address flushing on ifdown optional")
> Signed-off-by: Mike Manning <mmanning@brocade.com>

Applied and queued up for -stable, thanks.
diff mbox

Patch

diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 47f837a..047c75a 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3562,6 +3562,10 @@  restart:
 		if (state != INET6_IFADDR_STATE_DEAD) {
 			__ipv6_ifa_notify(RTM_DELADDR, ifa);
 			inet6addr_notifier_call_chain(NETDEV_DOWN, ifa);
+		} else {
+			if (idev->cnf.forwarding)
+				addrconf_leave_anycast(ifa);
+			addrconf_leave_solict(ifa->idev, &ifa->addr);
 		}
 
 		write_lock_bh(&idev->lock);