diff options
Diffstat (limited to 'net/mac80211/mesh_plink.c')
-rw-r--r-- | net/mac80211/mesh_plink.c | 17 |
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); | ||
506 | out: | 510 | out: |
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); |