123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- From: Henning Rogge <hrogge@gmail.com>
- Date: Wed, 3 Feb 2016 13:58:36 +0100
- Subject: [PATCH] mac80211: Remove MPP table entries with MPath
- Make the mesh_path_del() function remove all mpp table entries
- that are proxied by the removed mesh path.
- Acked-by: Bob Copeland <me@bobcopeland.com>
- Signed-off-by: Henning Rogge <henning.rogge@fkie.fraunhofer.de>
- Signed-off-by: Johannes Berg <johannes.berg@intel.com>
- ---
- --- a/net/mac80211/mesh_pathtbl.c
- +++ b/net/mac80211/mesh_pathtbl.c
- @@ -835,6 +835,29 @@ void mesh_path_flush_by_nexthop(struct s
- rcu_read_unlock();
- }
-
- +static void mpp_flush_by_proxy(struct ieee80211_sub_if_data *sdata,
- + const u8 *proxy)
- +{
- + struct mesh_table *tbl;
- + struct mesh_path *mpp;
- + struct mpath_node *node;
- + int i;
- +
- + rcu_read_lock();
- + read_lock_bh(&pathtbl_resize_lock);
- + tbl = resize_dereference_mpp_paths();
- + for_each_mesh_entry(tbl, node, i) {
- + mpp = node->mpath;
- + if (ether_addr_equal(mpp->mpp, proxy)) {
- + spin_lock(&tbl->hashwlock[i]);
- + __mesh_path_del(tbl, node);
- + spin_unlock(&tbl->hashwlock[i]);
- + }
- + }
- + read_unlock_bh(&pathtbl_resize_lock);
- + rcu_read_unlock();
- +}
- +
- static void table_flush_by_iface(struct mesh_table *tbl,
- struct ieee80211_sub_if_data *sdata)
- {
- @@ -892,6 +915,9 @@ int mesh_path_del(struct ieee80211_sub_i
- int hash_idx;
- int err = 0;
-
- + /* flush relevant mpp entries first */
- + mpp_flush_by_proxy(sdata, addr);
- +
- read_lock_bh(&pathtbl_resize_lock);
- tbl = resize_dereference_mesh_paths();
- hash_idx = mesh_table_hash(addr, sdata, tbl);
|