Into the tt hash table implementation, batadv_compare_tt is used to compare two tt entries and deciding if they are the same object. batadv_compare_tt compare only mac addr.
On a batman network, each node using vlans declare the bat0 mac addr on each vlan.
In case of adding a new tt entry, sharing the same hash of another entry. If these two entries have the same MAC addr but a different vid. The insert fail because the two different object are considered identical.
batadv_compare_tt must check vid.
Signed-off-by: Def def@laposte.net --- translation-table.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/translation-table.c b/translation-table.c index d73b103..d16433a 100644 --- a/translation-table.c +++ b/translation-table.c @@ -45,13 +45,16 @@ static void batadv_tt_global_del(struct batadv_priv *bat_priv, unsigned short vid, const char *message, bool roaming);
-/* returns 1 if they are the same mac addr */ +/* returns 1 if they are the same mac addr and vid */ static int batadv_compare_tt(const struct hlist_node *node, const void *data2) { const void *data1 = container_of(node, struct batadv_tt_common_entry, hash_entry);
- return batadv_compare_eth(data1, data2); + struct batadv_tt_common_entry* tt1 = data1; + struct batadv_tt_common_entry* tt2 = data2; + + return (tt1->vid == tt2->vid) && batadv_compare_eth(data1, data2); }
/**
On Thu, Aug 06, 2015 at 10:38:54AM +0200, Def wrote:
Signed-off-by: Def def@laposte.net
Documentation/SubmittingPatches, section 13:
"[...] using your real name (sorry, no pseudonyms or anonymous contributions.)"
So full, real name required :(.
b.a.t.m.a.n@lists.open-mesh.org