diff options
author | Antonio Quartulli <antonio@open-mesh.com> | 2013-04-03 05:15:33 -0400 |
---|---|---|
committer | Antonio Quartulli <ordex@autistici.org> | 2013-05-28 20:44:54 -0400 |
commit | 3abe4adbfb293e37d2d6f4fe22366534dc2675d9 (patch) | |
tree | dc117c4082060d2d2d71c2f582efa7d9311e3f5c /net | |
parent | d98966173213704873864c4e5057d823996ae95d (diff) |
batman-adv: refactor batadv_tt_local_event()
Instead of passing a generic combination of flags as
argument, it is easier to pass the entire tt_common
structure (containing the flags already set) plus a
bitfield of event flags that will be unified with
the already existing ones before inserting the client
in the event queue.
In this way invocations of the modified function can be
simplified.
Signed-off-by: Antonio Quartulli <antonio@open-mesh.com>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
Diffstat (limited to 'net')
-rw-r--r-- | net/batman-adv/translation-table.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c index 9e8748575845..d35b73904e04 100644 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c | |||
@@ -163,10 +163,19 @@ batadv_tt_orig_list_entry_free_ref(struct batadv_tt_orig_list_entry *orig_entry) | |||
163 | call_rcu(&orig_entry->rcu, batadv_tt_orig_list_entry_free_rcu); | 163 | call_rcu(&orig_entry->rcu, batadv_tt_orig_list_entry_free_rcu); |
164 | } | 164 | } |
165 | 165 | ||
166 | /** | ||
167 | * batadv_tt_local_event - store a local TT event (ADD/DEL) | ||
168 | * @bat_priv: the bat priv with all the soft interface information | ||
169 | * @tt_local_entry: the TT entry involved in the event | ||
170 | * @event_flags: flags to store in the event structure | ||
171 | */ | ||
166 | static void batadv_tt_local_event(struct batadv_priv *bat_priv, | 172 | static void batadv_tt_local_event(struct batadv_priv *bat_priv, |
167 | const uint8_t *addr, uint8_t flags) | 173 | struct batadv_tt_local_entry *tt_local_entry, |
174 | uint8_t event_flags) | ||
168 | { | 175 | { |
169 | struct batadv_tt_change_node *tt_change_node, *entry, *safe; | 176 | struct batadv_tt_change_node *tt_change_node, *entry, *safe; |
177 | struct batadv_tt_common_entry *common = &tt_local_entry->common; | ||
178 | uint8_t flags = common->flags | event_flags; | ||
170 | bool event_removed = false; | 179 | bool event_removed = false; |
171 | bool del_op_requested, del_op_entry; | 180 | bool del_op_requested, del_op_entry; |
172 | 181 | ||
@@ -176,7 +185,7 @@ static void batadv_tt_local_event(struct batadv_priv *bat_priv, | |||
176 | return; | 185 | return; |
177 | 186 | ||
178 | tt_change_node->change.flags = flags; | 187 | tt_change_node->change.flags = flags; |
179 | memcpy(tt_change_node->change.addr, addr, ETH_ALEN); | 188 | memcpy(tt_change_node->change.addr, common->addr, ETH_ALEN); |
180 | 189 | ||
181 | del_op_requested = flags & BATADV_TT_CLIENT_DEL; | 190 | del_op_requested = flags & BATADV_TT_CLIENT_DEL; |
182 | 191 | ||
@@ -184,7 +193,7 @@ static void batadv_tt_local_event(struct batadv_priv *bat_priv, | |||
184 | spin_lock_bh(&bat_priv->tt.changes_list_lock); | 193 | spin_lock_bh(&bat_priv->tt.changes_list_lock); |
185 | list_for_each_entry_safe(entry, safe, &bat_priv->tt.changes_list, | 194 | list_for_each_entry_safe(entry, safe, &bat_priv->tt.changes_list, |
186 | list) { | 195 | list) { |
187 | if (!batadv_compare_eth(entry->change.addr, addr)) | 196 | if (!batadv_compare_eth(entry->change.addr, common->addr)) |
188 | continue; | 197 | continue; |
189 | 198 | ||
190 | /* DEL+ADD in the same orig interval have no effect and can be | 199 | /* DEL+ADD in the same orig interval have no effect and can be |
@@ -332,7 +341,7 @@ void batadv_tt_local_add(struct net_device *soft_iface, const uint8_t *addr, | |||
332 | } | 341 | } |
333 | 342 | ||
334 | add_event: | 343 | add_event: |
335 | batadv_tt_local_event(bat_priv, addr, tt_local->common.flags); | 344 | batadv_tt_local_event(bat_priv, tt_local, BATADV_NO_FLAGS); |
336 | 345 | ||
337 | check_roaming: | 346 | check_roaming: |
338 | /* Check whether it is a roaming, but don't do anything if the roaming | 347 | /* Check whether it is a roaming, but don't do anything if the roaming |
@@ -529,8 +538,7 @@ batadv_tt_local_set_pending(struct batadv_priv *bat_priv, | |||
529 | struct batadv_tt_local_entry *tt_local_entry, | 538 | struct batadv_tt_local_entry *tt_local_entry, |
530 | uint16_t flags, const char *message) | 539 | uint16_t flags, const char *message) |
531 | { | 540 | { |
532 | batadv_tt_local_event(bat_priv, tt_local_entry->common.addr, | 541 | batadv_tt_local_event(bat_priv, tt_local_entry, flags); |
533 | tt_local_entry->common.flags | flags); | ||
534 | 542 | ||
535 | /* The local client has to be marked as "pending to be removed" but has | 543 | /* The local client has to be marked as "pending to be removed" but has |
536 | * to be kept in the table in order to send it in a full table | 544 | * to be kept in the table in order to send it in a full table |
@@ -584,8 +592,7 @@ uint16_t batadv_tt_local_remove(struct batadv_priv *bat_priv, | |||
584 | /* if this client has been added right now, it is possible to | 592 | /* if this client has been added right now, it is possible to |
585 | * immediately purge it | 593 | * immediately purge it |
586 | */ | 594 | */ |
587 | batadv_tt_local_event(bat_priv, tt_local_entry->common.addr, | 595 | batadv_tt_local_event(bat_priv, tt_local_entry, BATADV_TT_CLIENT_DEL); |
588 | curr_flags | BATADV_TT_CLIENT_DEL); | ||
589 | hlist_del_rcu(&tt_local_entry->common.hash_entry); | 596 | hlist_del_rcu(&tt_local_entry->common.hash_entry); |
590 | batadv_tt_local_entry_free_ref(tt_local_entry); | 597 | batadv_tt_local_entry_free_ref(tt_local_entry); |
591 | 598 | ||