aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/ieee80211_i.h
diff options
context:
space:
mode:
authorChun-Yeow Yeoh <yeohchunyeow@cozybit.com>2013-10-17 18:55:02 -0400
committerJohannes Berg <johannes.berg@intel.com>2013-10-28 10:05:30 -0400
commitb8456a14e9d2770846fcf74de18ff95b676149a3 (patch)
tree858ae69cd2d695116afc582377984070f645ff01 /net/mac80211/ieee80211_i.h
parentc6da674aff9425dc41255bcb7f7586a656843f2d (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.h11
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
546struct mesh_csa_settings {
547 struct rcu_head rcu_head;
548 struct cfg80211_csa_settings settings;
549};
550
546struct ieee80211_if_mesh { 551struct 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);
1356void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata); 1363void ieee80211_mesh_work(struct ieee80211_sub_if_data *sdata);
1357void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, 1364void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
1358 struct sk_buff *skb); 1365 struct sk_buff *skb);
1366int ieee80211_mesh_csa_beacon(struct ieee80211_sub_if_data *sdata,
1367 struct cfg80211_csa_settings *csa_settings,
1368 bool csa_action);
1369int ieee80211_mesh_finish_csa(struct ieee80211_sub_if_data *sdata);
1359 1370
1360/* scan/BSS handling */ 1371/* scan/BSS handling */
1361void ieee80211_scan_work(struct work_struct *work); 1372void ieee80211_scan_work(struct work_struct *work);