Commit 669b8413 authored by Johannes Berg's avatar Johannes Berg

cfg80211: include block-tx flag in channel switch started event

In the NL80211_CMD_CH_SWITCH_STARTED_NOTIFY event, include the
NL80211_ATTR_CH_SWITCH_BLOCK_TX flag attribute if block-tx was
requested by the AP.
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20201129172929.8953ef22cc64.Ifee9cab337a4369938545920ba5590559e91327a@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 3660944a
...@@ -7532,6 +7532,7 @@ void cfg80211_ch_switch_notify(struct net_device *dev, ...@@ -7532,6 +7532,7 @@ void cfg80211_ch_switch_notify(struct net_device *dev,
* @dev: the device on which the channel switch started * @dev: the device on which the channel switch started
* @chandef: the future channel definition * @chandef: the future channel definition
* @count: the number of TBTTs until the channel switch happens * @count: the number of TBTTs until the channel switch happens
* @quiet: whether or not immediate quiet was requested by the AP
* *
* Inform the userspace about the channel switch that has just * Inform the userspace about the channel switch that has just
* started, so that it can take appropriate actions (eg. starting * started, so that it can take appropriate actions (eg. starting
...@@ -7539,7 +7540,7 @@ void cfg80211_ch_switch_notify(struct net_device *dev, ...@@ -7539,7 +7540,7 @@ void cfg80211_ch_switch_notify(struct net_device *dev,
*/ */
void cfg80211_ch_switch_started_notify(struct net_device *dev, void cfg80211_ch_switch_started_notify(struct net_device *dev,
struct cfg80211_chan_def *chandef, struct cfg80211_chan_def *chandef,
u8 count); u8 count, bool quiet);
/** /**
* ieee80211_operating_class_to_band - convert operating class to band * ieee80211_operating_class_to_band - convert operating class to band
......
...@@ -2079,7 +2079,8 @@ enum nl80211_commands { ...@@ -2079,7 +2079,8 @@ enum nl80211_commands {
* until the channel switch event. * until the channel switch event.
* @NL80211_ATTR_CH_SWITCH_BLOCK_TX: flag attribute specifying that transmission * @NL80211_ATTR_CH_SWITCH_BLOCK_TX: flag attribute specifying that transmission
* must be blocked on the current channel (before the channel switch * must be blocked on the current channel (before the channel switch
* operation). * operation). Also included in the channel switch started event if quiet
* was requested by the AP.
* @NL80211_ATTR_CSA_IES: Nested set of attributes containing the IE information * @NL80211_ATTR_CSA_IES: Nested set of attributes containing the IE information
* for the time while performing a channel switch. * for the time while performing a channel switch.
* @NL80211_ATTR_CNTDWN_OFFS_BEACON: An array of offsets (u16) to the channel * @NL80211_ATTR_CNTDWN_OFFS_BEACON: An array of offsets (u16) to the channel
......
...@@ -3450,7 +3450,7 @@ __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev, ...@@ -3450,7 +3450,7 @@ __ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
IEEE80211_QUEUE_STOP_REASON_CSA); IEEE80211_QUEUE_STOP_REASON_CSA);
cfg80211_ch_switch_started_notify(sdata->dev, &sdata->csa_chandef, cfg80211_ch_switch_started_notify(sdata->dev, &sdata->csa_chandef,
params->count); params->count, params->block_tx);
if (changed) { if (changed) {
ieee80211_bss_info_change_notify(sdata, changed); ieee80211_bss_info_change_notify(sdata, changed);
......
...@@ -1509,7 +1509,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata, ...@@ -1509,7 +1509,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
mutex_unlock(&local->mtx); mutex_unlock(&local->mtx);
cfg80211_ch_switch_started_notify(sdata->dev, &csa_ie.chandef, cfg80211_ch_switch_started_notify(sdata->dev, &csa_ie.chandef,
csa_ie.count); csa_ie.count, csa_ie.mode);
if (local->ops->channel_switch) { if (local->ops->channel_switch) {
/* use driver's channel switch callback */ /* use driver's channel switch callback */
......
...@@ -17062,7 +17062,7 @@ static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev, ...@@ -17062,7 +17062,7 @@ static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
struct cfg80211_chan_def *chandef, struct cfg80211_chan_def *chandef,
gfp_t gfp, gfp_t gfp,
enum nl80211_commands notif, enum nl80211_commands notif,
u8 count) u8 count, bool quiet)
{ {
struct sk_buff *msg; struct sk_buff *msg;
void *hdr; void *hdr;
...@@ -17083,9 +17083,13 @@ static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev, ...@@ -17083,9 +17083,13 @@ static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev,
if (nl80211_send_chandef(msg, chandef)) if (nl80211_send_chandef(msg, chandef))
goto nla_put_failure; goto nla_put_failure;
if ((notif == NL80211_CMD_CH_SWITCH_STARTED_NOTIFY) && if (notif == NL80211_CMD_CH_SWITCH_STARTED_NOTIFY) {
(nla_put_u32(msg, NL80211_ATTR_CH_SWITCH_COUNT, count))) if (nla_put_u32(msg, NL80211_ATTR_CH_SWITCH_COUNT, count))
goto nla_put_failure; goto nla_put_failure;
if (quiet &&
nla_put_flag(msg, NL80211_ATTR_CH_SWITCH_BLOCK_TX))
goto nla_put_failure;
}
genlmsg_end(msg, hdr); genlmsg_end(msg, hdr);
...@@ -17118,13 +17122,13 @@ void cfg80211_ch_switch_notify(struct net_device *dev, ...@@ -17118,13 +17122,13 @@ void cfg80211_ch_switch_notify(struct net_device *dev,
cfg80211_sched_dfs_chan_update(rdev); cfg80211_sched_dfs_chan_update(rdev);
nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL, nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL,
NL80211_CMD_CH_SWITCH_NOTIFY, 0); NL80211_CMD_CH_SWITCH_NOTIFY, 0, false);
} }
EXPORT_SYMBOL(cfg80211_ch_switch_notify); EXPORT_SYMBOL(cfg80211_ch_switch_notify);
void cfg80211_ch_switch_started_notify(struct net_device *dev, void cfg80211_ch_switch_started_notify(struct net_device *dev,
struct cfg80211_chan_def *chandef, struct cfg80211_chan_def *chandef,
u8 count) u8 count, bool quiet)
{ {
struct wireless_dev *wdev = dev->ieee80211_ptr; struct wireless_dev *wdev = dev->ieee80211_ptr;
struct wiphy *wiphy = wdev->wiphy; struct wiphy *wiphy = wdev->wiphy;
...@@ -17133,7 +17137,8 @@ void cfg80211_ch_switch_started_notify(struct net_device *dev, ...@@ -17133,7 +17137,8 @@ void cfg80211_ch_switch_started_notify(struct net_device *dev,
trace_cfg80211_ch_switch_started_notify(dev, chandef); trace_cfg80211_ch_switch_started_notify(dev, chandef);
nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL, nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL,
NL80211_CMD_CH_SWITCH_STARTED_NOTIFY, count); NL80211_CMD_CH_SWITCH_STARTED_NOTIFY,
count, quiet);
} }
EXPORT_SYMBOL(cfg80211_ch_switch_started_notify); EXPORT_SYMBOL(cfg80211_ch_switch_started_notify);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment