diff options
author | Antonio Quartulli <antonio@open-mesh.com> | 2014-05-08 15:13:15 (GMT) |
---|---|---|
committer | Antonio Quartulli <antonio@meshcoding.com> | 2014-07-21 07:49:30 (GMT) |
commit | 35df3b298fc8779f7edf4b0228c683f7e98edcd5 (patch) | |
tree | a0cf3bc6f4e0a372cf66235bf1ba79c28002fedd /net/dsa | |
parent | d46b6bfa7628030a93e05f7087b7c638a85b4a35 (diff) | |
download | linux-35df3b298fc8779f7edf4b0228c683f7e98edcd5.tar.xz |
batman-adv: fix TT VLAN inconsistency on VLAN re-add
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: Antonio Quartulli <antonio@open-mesh.com>
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
Diffstat (limited to 'net/dsa')
0 files changed, 0 insertions, 0 deletions