• Antonio Quartulli's avatar
    batman-adv: fix TT VLAN inconsistency on VLAN re-add · 35df3b29
    Antonio Quartulli authored
    When a VLAN interface (on top of batX) is removed and
    re-added within a short timeframe TT does not have enough
    time to properly cleanup. This creates an internal TT state
    mismatch as the newly created softif_vlan will be
    initialized from scratch with a TT client count of zero
    (even if TT entries for this VLAN still exist). The
    resulting TT messages are bogus due to the counter / tt
    client listing mismatch, thus creating inconsistencies on
    every node in the network
    
    To fix this issue destroy_vlan() has to not free the VLAN
    object immediately but it has to be kept alive until all the
    TT entries for this VLAN have been removed. destroy_vlan()
    still removes the sysfs folder so that the user has the
    feeling that everything went fine.
    
    If the same VLAN is re-added before the old object is free'd,
    then the latter is resurrected and re-used.
    
    Implement such behaviour by increasing the reference counter
    of a softif_vlan object every time a new local TT entry for
    such VLAN is created and remove the object from the list
    only when all the TT entries have been destroyed.
    Signed-off-by: default avatarAntonio Quartulli <antonio@open-mesh.com>
    Signed-off-by: default avatarMarek Lindner <mareklindner@neomailbox.ch>
    35df3b29
soft-interface.c 30.2 KB