|
@@ -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);
|