diff options
author | Chun-Yeow Yeoh <yeohchunyeow@cozybit.com> | 2013-10-17 18:55:02 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-10-28 10:05:30 -0400 |
commit | b8456a14e9d2770846fcf74de18ff95b676149a3 (patch) | |
tree | 858ae69cd2d695116afc582377984070f645ff01 /net/mac80211/ieee80211_i.h | |
parent | c6da674aff9425dc41255bcb7f7586a656843f2d (diff) |
{nl,cfg,mac}80211: implement mesh channel switch userspace API
Implement the required procedures for mesh channel switching as defined
in the IEEE Std 802.11-2012 section 10.9.8.4.3 and also handle the CSA
and MCSP elements as followed:
* Add the function for updating the beacon and probe response frames
with CSA and MCSP elements during the period of switching to the new
channel. Both CSA and MCSP elements must be included in beacon and
probe response frames until the intended channel switch time.
* The ifmsh->csa_settings is set to NULL and the CSA and MCSP elements
will then be removed from the beacon or probe response frames once the
new channel is switched to.
Signed-off-by: Chun-Yeow Yeoh <yeohchunyeow@cozybit.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 9aad167e2ebc..5cfa160be05b 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -543,6 +543,11 @@ struct ieee80211_mesh_sync_ops { | |||
543 | /* add other framework functions here */ | 543 | /* add other framework functions here */ |
544 | }; | 544 | }; |
545 | 545 | ||
546 | struct mesh_csa_settings { | ||
547 | struct rcu_head rcu_head; | ||
548 | struct cfg80211_csa_settings settings; | ||
549 | }; | ||
550 | |||
546 | struct ieee80211_if_mesh { | 551 | struct ieee80211_if_mesh { |
547 | struct timer_list housekeeping_timer; | 552 | struct timer_list housekeeping_timer; |
548 | struct timer_list mesh_path_timer; | 553 | struct timer_list mesh_path_timer; |
@@ -604,7 +609,9 @@ struct ieee80211_if_mesh { | |||
604 | int ps_peers_deep_sleep; | 609 | int ps_peers_deep_sleep; |
605 | struct ps_data ps; | 610 | struct ps_data ps; |
606 | /* Channel Switching Support */ | 611 | /* Channel Switching Support */ |
612 | struct mesh_csa_settings __rcu *csa; | ||
607 | bool chsw_init; | 613 | bool chsw_init; |
614 | u8 chsw_ttl; | ||
608 | u16 pre_value; | 615 | u16 pre_value; |
609 | }; | 616 | }; |
610 | 617 | ||
@@ -1356,6 +1363,10 @@ void ieee80211_ibss_stop(struct ieee80211_sub_if_data *sdata); | |||
1356 | void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata); | 1363 | void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata); |
1357 | void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, | 1364 | void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, |
1358 | struct sk_buff *skb); | 1365 | struct sk_buff *skb); |
1366 | int ieee80211_mesh_csa_beacon(struct ieee80211_sub_if_data *sdata, | ||
1367 | struct cfg80211_csa_settings *csa_settings, | ||
1368 | bool csa_action); | ||
1369 | int ieee80211_mesh_finish_csa(struct ieee80211_sub_if_data *sdata); | ||
1359 | 1370 | ||
1360 | /* scan/BSS handling */ | 1371 | /* scan/BSS handling */ |
1361 | void ieee80211_scan_work(struct work_struct *work); | 1372 | void ieee80211_scan_work(struct work_struct *work); |