aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/mesh_plink.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/mesh_plink.c')
-rw-r--r--net/mac80211/mesh_plink.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c
index 6787d696d94c..fe7c3334d6fe 100644
--- a/net/mac80211/mesh_plink.c
+++ b/net/mac80211/mesh_plink.c
@@ -201,6 +201,9 @@ static u32 __mesh_plink_deactivate(struct sta_info *sta)
201 sta->plink_state = NL80211_PLINK_BLOCKED; 201 sta->plink_state = NL80211_PLINK_BLOCKED;
202 mesh_path_flush_by_nexthop(sta); 202 mesh_path_flush_by_nexthop(sta);
203 203
204 ieee80211_mps_sta_status_update(sta);
205 ieee80211_mps_local_status_update(sdata);
206
204 return changed; 207 return changed;
205} 208}
206 209
@@ -503,6 +506,7 @@ void mesh_neighbour_update(struct ieee80211_sub_if_data *sdata,
503 rssi_threshold_check(sta, sdata)) 506 rssi_threshold_check(sta, sdata))
504 mesh_plink_open(sta); 507 mesh_plink_open(sta);
505 508
509 ieee80211_mps_frame_release(sta, elems);
506out: 510out:
507 rcu_read_unlock(); 511 rcu_read_unlock();
508} 512}
@@ -633,6 +637,9 @@ int mesh_plink_open(struct sta_info *sta)
633 "Mesh plink: starting establishment with %pM\n", 637 "Mesh plink: starting establishment with %pM\n",
634 sta->sta.addr); 638 sta->sta.addr);
635 639
640 /* set the non-peer mode to active during peering */
641 ieee80211_mps_local_status_update(sdata);
642
636 return mesh_plink_frame_tx(sdata, WLAN_SP_MESH_PEERING_OPEN, 643 return mesh_plink_frame_tx(sdata, WLAN_SP_MESH_PEERING_OPEN,
637 sta->sta.addr, llid, 0, 0); 644 sta->sta.addr, llid, 0, 0);
638} 645}
@@ -866,6 +873,10 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
866 sta->llid = llid; 873 sta->llid = llid;
867 mesh_plink_timer_set(sta, 874 mesh_plink_timer_set(sta,
868 mshcfg->dot11MeshRetryTimeout); 875 mshcfg->dot11MeshRetryTimeout);
876
877 /* set the non-peer mode to active during peering */
878 ieee80211_mps_local_status_update(sdata);
879
869 spin_unlock_bh(&sta->lock); 880 spin_unlock_bh(&sta->lock);
870 mesh_plink_frame_tx(sdata, 881 mesh_plink_frame_tx(sdata,
871 WLAN_SP_MESH_PEERING_OPEN, 882 WLAN_SP_MESH_PEERING_OPEN,
@@ -959,6 +970,9 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
959 changed |= mesh_set_short_slot_time(sdata); 970 changed |= mesh_set_short_slot_time(sdata);
960 mpl_dbg(sdata, "Mesh plink with %pM ESTABLISHED\n", 971 mpl_dbg(sdata, "Mesh plink with %pM ESTABLISHED\n",
961 sta->sta.addr); 972 sta->sta.addr);
973 ieee80211_mps_sta_status_update(sta);
974 ieee80211_mps_set_sta_local_pm(sta,
975 mshcfg->power_mode);
962 break; 976 break;
963 default: 977 default:
964 spin_unlock_bh(&sta->lock); 978 spin_unlock_bh(&sta->lock);
@@ -998,6 +1012,9 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
998 mesh_plink_frame_tx(sdata, 1012 mesh_plink_frame_tx(sdata,
999 WLAN_SP_MESH_PEERING_CONFIRM, 1013 WLAN_SP_MESH_PEERING_CONFIRM,
1000 sta->sta.addr, llid, plid, 0); 1014 sta->sta.addr, llid, plid, 0);
1015 ieee80211_mps_sta_status_update(sta);
1016 ieee80211_mps_set_sta_local_pm(sta,
1017 mshcfg->power_mode);
1001 break; 1018 break;
1002 default: 1019 default:
1003 spin_unlock_bh(&sta->lock); 1020 spin_unlock_bh(&sta->lock);