mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
batman-adv: tt: extract code handling a roam on add
The code for handling the roaming of clients is mostly self contained but embedded in the already too large batadv_tt_local_add function. The maintainability can be improved by keeping it in an separate function. Signed-off-by: Sven Eckelmann <sven@narfation.org>
This commit is contained in:
parent
bbfb0d2cf0
commit
fd8d892c68
|
|
@ -614,6 +614,50 @@ static void batadv_tt_global_free(struct batadv_priv *bat_priv,
|
|||
batadv_tt_global_entry_put(tt_global);
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_tt_local_add_roam() - handle roamed clients during batadv_tt_local_add()
|
||||
* @bat_priv: the bat priv with all the mesh interface information
|
||||
* @tt_global: the global TT entry
|
||||
* @roamed_back: whether @tt_global roamed back
|
||||
*/
|
||||
static void batadv_tt_local_add_roam(struct batadv_priv *bat_priv,
|
||||
struct batadv_tt_global_entry *tt_global,
|
||||
bool roamed_back)
|
||||
{
|
||||
struct batadv_tt_orig_list_entry *orig_entry;
|
||||
struct hlist_head *head;
|
||||
|
||||
if (!tt_global)
|
||||
return;
|
||||
|
||||
/* Check whether it is a roaming, but don't do anything if the roaming
|
||||
* process has already been handled
|
||||
*/
|
||||
if (tt_global->common.flags & BATADV_TT_CLIENT_ROAM)
|
||||
return;
|
||||
|
||||
/* These node are probably going to update their tt table */
|
||||
head = &tt_global->orig_list;
|
||||
rcu_read_lock();
|
||||
hlist_for_each_entry_rcu(orig_entry, head, list) {
|
||||
batadv_send_roam_adv(bat_priv, tt_global->common.addr,
|
||||
tt_global->common.vid,
|
||||
orig_entry->orig_node);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
if (roamed_back) {
|
||||
batadv_tt_global_free(bat_priv, tt_global,
|
||||
"Roaming canceled");
|
||||
} else {
|
||||
/* The global entry has to be marked as ROAMING and
|
||||
* has to be kept for consistency purpose
|
||||
*/
|
||||
tt_global->common.flags |= BATADV_TT_CLIENT_ROAM;
|
||||
tt_global->roam_at = jiffies;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* batadv_tt_local_add() - add a new client to the local table or update an
|
||||
* existing client
|
||||
|
|
@ -632,14 +676,12 @@ bool batadv_tt_local_add(struct net_device *mesh_iface, const u8 *addr,
|
|||
{
|
||||
struct batadv_priv *bat_priv = netdev_priv(mesh_iface);
|
||||
struct batadv_tt_global_entry *tt_global = NULL;
|
||||
struct batadv_tt_orig_list_entry *orig_entry;
|
||||
struct batadv_tt_local_entry *tt_local;
|
||||
struct net *net = dev_net(mesh_iface);
|
||||
struct net_device *in_dev = NULL;
|
||||
struct batadv_meshif_vlan *vlan;
|
||||
bool roamed_back = false;
|
||||
bool iif_is_wifi = false;
|
||||
struct hlist_head *head;
|
||||
int packet_size_max;
|
||||
bool ret = false;
|
||||
u8 remote_flags;
|
||||
|
|
@ -758,30 +800,7 @@ bool batadv_tt_local_add(struct net_device *mesh_iface, const u8 *addr,
|
|||
batadv_tt_local_event(bat_priv, tt_local, BATADV_NO_FLAGS);
|
||||
|
||||
check_roaming:
|
||||
/* Check whether it is a roaming, but don't do anything if the roaming
|
||||
* process has already been handled
|
||||
*/
|
||||
if (tt_global && !(tt_global->common.flags & BATADV_TT_CLIENT_ROAM)) {
|
||||
/* These node are probably going to update their tt table */
|
||||
head = &tt_global->orig_list;
|
||||
rcu_read_lock();
|
||||
hlist_for_each_entry_rcu(orig_entry, head, list) {
|
||||
batadv_send_roam_adv(bat_priv, tt_global->common.addr,
|
||||
tt_global->common.vid,
|
||||
orig_entry->orig_node);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
if (roamed_back) {
|
||||
batadv_tt_global_free(bat_priv, tt_global,
|
||||
"Roaming canceled");
|
||||
} else {
|
||||
/* The global entry has to be marked as ROAMING and
|
||||
* has to be kept for consistency purpose
|
||||
*/
|
||||
tt_global->common.flags |= BATADV_TT_CLIENT_ROAM;
|
||||
tt_global->roam_at = jiffies;
|
||||
}
|
||||
}
|
||||
batadv_tt_local_add_roam(bat_priv, tt_global, roamed_back);
|
||||
|
||||
/* store the current remote flags before altering them. This helps
|
||||
* understanding is flags are changing or not
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user