batman-adv: Act on NETDEV_*_TYPE_CHANGE events
authorAndrew Lunn <andrew@lunn.ch>
Thu, 3 Dec 2015 20:12:33 +0000 (21:12 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sat, 5 Dec 2015 22:41:42 +0000 (17:41 -0500)
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>
net/batman-adv/hard-interface.c

index aa8867e1d9839b957790157aaaf4dc3fa53c69f6..a58184fdf5fdc496d33527eb99396376c737bc2e 100644 (file)
@@ -709,7 +709,8 @@ static int batadv_hard_if_event(struct notifier_block *this,
        }
 
        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);
 
        if (!hard_iface)
@@ -724,6 +725,7 @@ static int batadv_hard_if_event(struct notifier_block *this,
                batadv_hardif_deactivate_interface(hard_iface);
                break;
        case NETDEV_UNREGISTER:
+       case NETDEV_PRE_TYPE_CHANGE:
                list_del_rcu(&hard_iface->list);
 
                batadv_hardif_remove_interface(hard_iface);