• Daniel Borkmann's avatar
    net: vxlan: when lower dev unregisters remove vxlan dev as well · acaf4e70
    Daniel Borkmann authored
    We can create a vxlan device with an explicit underlying carrier.
    In that case, when the carrier link is being deleted from the
    system (e.g. due to module unload) we should also clean up all
    created vxlan devices on top of it since otherwise we're in an
    inconsistent state in vxlan device. In that case, the user needs
    to remove all such devices, while in case of other virtual devs
    that sit on top of physical ones, it is usually the case that
    these devices do unregister automatically as well and do not
    leave the burden on the user.
    
    This work is not necessary when vxlan device was not created with
    a real underlying device, as connections can resume in that case
    when driver is plugged again. But at least for the other cases,
    we should go ahead and do the cleanup on removal.
    
    We don't register the notifier during vxlan_newlink() here since
    I consider this event rather rare, and therefore we should not
    bloat vxlan's core structure unecessary. Also, we can simply make
    use of unregister_netdevice_many() to batch that. fdb is flushed
    upon ndo_stop().
    
    E.g. `ip -d link show vxlan13` after carrier removal before
    this patch:
    
    5: vxlan13: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN mode DEFAULT group default
        link/ether 1e:47:da:6d:4d:99 brd ff:ff:ff:ff:ff:ff promiscuity 0
        vxlan id 13 group 239.0.0.10 dev 2 port 32768 61000 ageing 300
                                     ^^^^^
    Signed-off-by: default avatarDaniel Borkmann <dborkman@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    acaf4e70
vxlan.c 68.7 KB