diff options
| -rw-r--r-- | net/batman-adv/bridge_loop_avoidance.c | 4 | ||||
| -rw-r--r-- | net/batman-adv/originator.c | 2 | ||||
| -rw-r--r-- | net/batman-adv/routing.c | 2 | ||||
| -rw-r--r-- | net/batman-adv/translation-table.c | 17 | ||||
| -rw-r--r-- | net/batman-adv/translation-table.h | 2 |
5 files changed, 21 insertions, 6 deletions
diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c index e8a6458081e8..3b3867db88a7 100644 --- a/net/batman-adv/bridge_loop_avoidance.c +++ b/net/batman-adv/bridge_loop_avoidance.c | |||
| @@ -411,10 +411,10 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig, | |||
| 411 | return NULL; | 411 | return NULL; |
| 412 | } | 412 | } |
| 413 | 413 | ||
| 414 | /* this is a gateway now, remove any tt entries */ | 414 | /* this is a gateway now, remove any TT entry on this VLAN */ |
| 415 | orig_node = batadv_orig_hash_find(bat_priv, orig); | 415 | orig_node = batadv_orig_hash_find(bat_priv, orig); |
| 416 | if (orig_node) { | 416 | if (orig_node) { |
| 417 | batadv_tt_global_del_orig(bat_priv, orig_node, | 417 | batadv_tt_global_del_orig(bat_priv, orig_node, vid, |
| 418 | "became a backbone gateway"); | 418 | "became a backbone gateway"); |
| 419 | batadv_orig_node_free_ref(orig_node); | 419 | batadv_orig_node_free_ref(orig_node); |
| 420 | } | 420 | } |
diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c index 7a499dad53d3..ee1d84724205 100644 --- a/net/batman-adv/originator.c +++ b/net/batman-adv/originator.c | |||
| @@ -230,7 +230,7 @@ static void batadv_orig_node_free_rcu(struct rcu_head *rcu) | |||
| 230 | 230 | ||
| 231 | batadv_frag_purge_orig(orig_node, NULL); | 231 | batadv_frag_purge_orig(orig_node, NULL); |
| 232 | 232 | ||
| 233 | batadv_tt_global_del_orig(orig_node->bat_priv, orig_node, | 233 | batadv_tt_global_del_orig(orig_node->bat_priv, orig_node, -1, |
| 234 | "originator timed out"); | 234 | "originator timed out"); |
| 235 | 235 | ||
| 236 | kfree(orig_node->tt_buff); | 236 | kfree(orig_node->tt_buff); |
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c index 149ef57e78c3..4bcf22129ffe 100644 --- a/net/batman-adv/routing.c +++ b/net/batman-adv/routing.c | |||
| @@ -47,7 +47,7 @@ static void _batadv_update_route(struct batadv_priv *bat_priv, | |||
| 47 | if ((curr_router) && (!neigh_node)) { | 47 | if ((curr_router) && (!neigh_node)) { |
| 48 | batadv_dbg(BATADV_DBG_ROUTES, bat_priv, | 48 | batadv_dbg(BATADV_DBG_ROUTES, bat_priv, |
| 49 | "Deleting route towards: %pM\n", orig_node->orig); | 49 | "Deleting route towards: %pM\n", orig_node->orig); |
| 50 | batadv_tt_global_del_orig(bat_priv, orig_node, | 50 | batadv_tt_global_del_orig(bat_priv, orig_node, -1, |
| 51 | "Deleted route towards originator"); | 51 | "Deleted route towards originator"); |
| 52 | 52 | ||
| 53 | /* route added */ | 53 | /* route added */ |
diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c index 41a8387c5ef8..4c313ff8b12f 100644 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c | |||
| @@ -1581,8 +1581,18 @@ out: | |||
| 1581 | batadv_tt_local_entry_free_ref(local_entry); | 1581 | batadv_tt_local_entry_free_ref(local_entry); |
| 1582 | } | 1582 | } |
| 1583 | 1583 | ||
| 1584 | /** | ||
| 1585 | * batadv_tt_global_del_orig - remove all the TT global entries belonging to the | ||
| 1586 | * given originator matching the provided vid | ||
| 1587 | * @bat_priv: the bat priv with all the soft interface information | ||
| 1588 | * @orig_node: the originator owning the entries to remove | ||
| 1589 | * @match_vid: the VLAN identifier to match. If negative all the entries will be | ||
| 1590 | * removed | ||
| 1591 | * @message: debug message to print as "reason" | ||
| 1592 | */ | ||
| 1584 | void batadv_tt_global_del_orig(struct batadv_priv *bat_priv, | 1593 | void batadv_tt_global_del_orig(struct batadv_priv *bat_priv, |
| 1585 | struct batadv_orig_node *orig_node, | 1594 | struct batadv_orig_node *orig_node, |
| 1595 | int32_t match_vid, | ||
| 1586 | const char *message) | 1596 | const char *message) |
| 1587 | { | 1597 | { |
| 1588 | struct batadv_tt_global_entry *tt_global; | 1598 | struct batadv_tt_global_entry *tt_global; |
| @@ -1604,6 +1614,10 @@ void batadv_tt_global_del_orig(struct batadv_priv *bat_priv, | |||
| 1604 | spin_lock_bh(list_lock); | 1614 | spin_lock_bh(list_lock); |
| 1605 | hlist_for_each_entry_safe(tt_common_entry, safe, | 1615 | hlist_for_each_entry_safe(tt_common_entry, safe, |
| 1606 | head, hash_entry) { | 1616 | head, hash_entry) { |
| 1617 | /* remove only matching entries */ | ||
| 1618 | if (match_vid >= 0 && tt_common_entry->vid != match_vid) | ||
| 1619 | continue; | ||
| 1620 | |||
| 1607 | tt_global = container_of(tt_common_entry, | 1621 | tt_global = container_of(tt_common_entry, |
| 1608 | struct batadv_tt_global_entry, | 1622 | struct batadv_tt_global_entry, |
| 1609 | common); | 1623 | common); |
| @@ -2570,7 +2584,8 @@ static void batadv_tt_fill_gtable(struct batadv_priv *bat_priv, | |||
| 2570 | goto out; | 2584 | goto out; |
| 2571 | 2585 | ||
| 2572 | /* Purge the old table first.. */ | 2586 | /* Purge the old table first.. */ |
| 2573 | batadv_tt_global_del_orig(bat_priv, orig_node, "Received full table"); | 2587 | batadv_tt_global_del_orig(bat_priv, orig_node, -1, |
| 2588 | "Received full table"); | ||
| 2574 | 2589 | ||
| 2575 | _batadv_tt_update_changes(bat_priv, orig_node, tt_change, num_entries, | 2590 | _batadv_tt_update_changes(bat_priv, orig_node, tt_change, num_entries, |
| 2576 | ttvn); | 2591 | ttvn); |
diff --git a/net/batman-adv/translation-table.h b/net/batman-adv/translation-table.h index c6bf33c04855..dc6db4e00a43 100644 --- a/net/batman-adv/translation-table.h +++ b/net/batman-adv/translation-table.h | |||
| @@ -30,7 +30,7 @@ int batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset); | |||
| 30 | int batadv_tt_global_seq_print_text(struct seq_file *seq, void *offset); | 30 | int batadv_tt_global_seq_print_text(struct seq_file *seq, void *offset); |
| 31 | void batadv_tt_global_del_orig(struct batadv_priv *bat_priv, | 31 | void batadv_tt_global_del_orig(struct batadv_priv *bat_priv, |
| 32 | struct batadv_orig_node *orig_node, | 32 | struct batadv_orig_node *orig_node, |
| 33 | const char *message); | 33 | int32_t match_vid, const char *message); |
| 34 | struct batadv_orig_node *batadv_transtable_search(struct batadv_priv *bat_priv, | 34 | struct batadv_orig_node *batadv_transtable_search(struct batadv_priv *bat_priv, |
| 35 | const uint8_t *src, | 35 | const uint8_t *src, |
| 36 | const uint8_t *addr, | 36 | const uint8_t *addr, |
