Message ID | 1438164101.20182.83.camel@edumazet-glaptop2.roam.corp.google.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Wed, 29 Jul 2015 12:01:41 +0200 > From: Eric Dumazet <edumazet@google.com> > > This patch is the IPv6 equivalent of commit > 6c8b4e3ff81b ("arp: flush arp cache on IFF_NOARP change") > > Without it, we keep buggy neighbours in the cache, with destination > MAC address equal to our own MAC address. > > Tested: > tcpdump -i eth0 -s 0 ip6 -n -e & > ip link set dev eth0 arp off > ping6 remote // sends buggy frames > ip link set dev eth0 arp on > ping6 remote // should work once kernel is patched > > Signed-off-by: Eric Dumazet <edumazet@google.com> > Reported-by: Mario Fanelli <mariofanelli@google.com> Applied, thanks Eric. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 0a05b35..c53331c 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -1650,6 +1650,7 @@ int ndisc_rcv(struct sk_buff *skb) static int ndisc_netdev_event(struct notifier_block *this, unsigned long event, void *ptr) { struct net_device *dev = netdev_notifier_info_to_dev(ptr); + struct netdev_notifier_change_info *change_info; struct net *net = dev_net(dev); struct inet6_dev *idev; @@ -1664,6 +1665,11 @@ static int ndisc_netdev_event(struct notifier_block *this, unsigned long event, ndisc_send_unsol_na(dev); in6_dev_put(idev); break; + case NETDEV_CHANGE: + change_info = ptr; + if (change_info->flags_changed & IFF_NOARP) + neigh_changeaddr(&nd_tbl, dev); + break; case NETDEV_DOWN: neigh_ifdown(&nd_tbl, dev); fib6_run_gc(0, net, false);