|
@@ -1235,12 +1235,18 @@ static int arp_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;
|
|
|
|
|
|
switch (event) {
|
|
|
case NETDEV_CHANGEADDR:
|
|
|
neigh_changeaddr(&arp_tbl, dev);
|
|
|
rt_cache_flush(dev_net(dev));
|
|
|
break;
|
|
|
+ case NETDEV_CHANGE:
|
|
|
+ change_info = ptr;
|
|
|
+ if (change_info->flags_changed & IFF_NOARP)
|
|
|
+ neigh_changeaddr(&arp_tbl, dev);
|
|
|
+ break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|