batman-adv: Act on NETDEV_*_TYPE_CHANGE events
A network interface can change type. It may change from a type which batman does not support, e.g. hdlc, to one it does, e.g. hdlc-eth. When an interface changes type, it sends two notifications. Handle these notifications. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3ef0952ca8
commit
a1a66b1100
|
@ -709,7 +709,8 @@ static int batadv_hard_if_event(struct notifier_block *this,
|
||||||
}
|
}
|
||||||
|
|
||||||
hard_iface = batadv_hardif_get_by_netdev(net_dev);
|
hard_iface = batadv_hardif_get_by_netdev(net_dev);
|
||||||
if (!hard_iface && event == NETDEV_REGISTER)
|
if (!hard_iface && (event == NETDEV_REGISTER ||
|
||||||
|
event == NETDEV_POST_TYPE_CHANGE))
|
||||||
hard_iface = batadv_hardif_add_interface(net_dev);
|
hard_iface = batadv_hardif_add_interface(net_dev);
|
||||||
|
|
||||||
if (!hard_iface)
|
if (!hard_iface)
|
||||||
|
@ -724,6 +725,7 @@ static int batadv_hard_if_event(struct notifier_block *this,
|
||||||
batadv_hardif_deactivate_interface(hard_iface);
|
batadv_hardif_deactivate_interface(hard_iface);
|
||||||
break;
|
break;
|
||||||
case NETDEV_UNREGISTER:
|
case NETDEV_UNREGISTER:
|
||||||
|
case NETDEV_PRE_TYPE_CHANGE:
|
||||||
list_del_rcu(&hard_iface->list);
|
list_del_rcu(&hard_iface->list);
|
||||||
|
|
||||||
batadv_hardif_remove_interface(hard_iface);
|
batadv_hardif_remove_interface(hard_iface);
|
||||||
|
|
Loading…
Reference in New Issue