Commit 03fc3070 authored by Antonio Quartulli's avatar Antonio Quartulli Committed by Marek Lindner

batman-adv: in case of roaming mark the client with TT_CLIENT_ROAM

In case of a client roaming from node A to node B, the latter have to mark the
corresponding global entry with TT_CLIENT_ROAM (instead of TT_CLIENT_PENDING).

Marking a global entry with TT_CLIENT_PENDING will end up in keeping such entry
forever (because this flag is only meant to be used with local entries and it is
never checked on global ones).

In the worst case (all the clients roaming to the same node A) the local and the
global table will contain exactly the same clients. Batman-adv will continue to
work, but the memory usage is duplicated.
Signed-off-by: default avatarAntonio Quartulli <ordex@autistici.org>
parent 1ea6b8f4
...@@ -245,9 +245,11 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr, ...@@ -245,9 +245,11 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
if (tt_global_entry) { if (tt_global_entry) {
/* This node is probably going to update its tt table */ /* This node is probably going to update its tt table */
tt_global_entry->orig_node->tt_poss_change = true; tt_global_entry->orig_node->tt_poss_change = true;
/* The global entry has to be marked as PENDING and has to be /* The global entry has to be marked as ROAMING and has to be
* kept for consistency purpose */ * kept for consistency purpose */
tt_global_entry->flags |= TT_CLIENT_PENDING; tt_global_entry->flags |= TT_CLIENT_ROAM;
tt_global_entry->roam_at = jiffies;
send_roam_adv(bat_priv, tt_global_entry->addr, send_roam_adv(bat_priv, tt_global_entry->addr,
tt_global_entry->orig_node); tt_global_entry->orig_node);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment