mac80211: introduce TDLS channel switch ops
Implement the cfg80211 TDLS channel switch ops and introduce new mac80211 ones for low-level drivers. Verify low-level driver support for the new ops when using the relevant wiphy feature bit. Also verify the peer supports channel switching before passing the command down. Add a new STA flag to track the off-channel state with the TDLS peer and make sure to cancel the channel-switch if the peer STA is unexpectedly removed. Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com> Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:

committed by
Johannes Berg

parent
5383758443
commit
a7a6bdd067
@@ -2915,6 +2915,16 @@ enum ieee80211_reconfig_type {
|
||||
*
|
||||
* @get_txpower: get current maximum tx power (in dBm) based on configuration
|
||||
* and hardware limits.
|
||||
*
|
||||
* @tdls_channel_switch: Start channel-switching with a TDLS peer. The driver
|
||||
* is responsible for continually initiating channel-switching operations
|
||||
* and returning to the base channel for communication with the AP. The
|
||||
* driver receives a channel-switch request template and the location of
|
||||
* the switch-timing IE within the template as part of the invocation.
|
||||
* The template is valid only within the call, and the driver can
|
||||
* optionally copy the skb for further re-use.
|
||||
* @tdls_cancel_channel_switch: Stop channel-switching with a TDLS peer. Both
|
||||
* peers must be on the base channel when the call completes.
|
||||
*/
|
||||
struct ieee80211_ops {
|
||||
void (*tx)(struct ieee80211_hw *hw,
|
||||
@@ -3126,6 +3136,15 @@ struct ieee80211_ops {
|
||||
u32 (*get_expected_throughput)(struct ieee80211_sta *sta);
|
||||
int (*get_txpower)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
int *dbm);
|
||||
|
||||
int (*tdls_channel_switch)(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta, u8 oper_class,
|
||||
struct cfg80211_chan_def *chandef,
|
||||
struct sk_buff *skb, u32 ch_sw_tm_ie);
|
||||
void (*tdls_cancel_channel_switch)(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
};
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user