Commit d04b5ac9 authored by Luciano Coelho's avatar Luciano Coelho Committed by Johannes Berg

cfg80211/mac80211: allow any interface to send channel switch notifications

For multi-vif channel switches, we want to send
NL80211_CMD_CH_SWITCH_NOTIFY to the userspace to let it decide whether
other interfaces need to be moved as well.  This is needed when we
want a P2P GO interface to follow the channel of a station, for
example.

Modify the code so that all interfaces can send CSA notifications.
Additionally, send notifications for STA CSA as well.
Signed-off-by: default avatarLuciano Coelho <luciano.coelho@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 2f457293
...@@ -643,7 +643,9 @@ ...@@ -643,7 +643,9 @@
* @NL80211_CMD_CH_SWITCH_NOTIFY: An AP or GO may decide to switch channels * @NL80211_CMD_CH_SWITCH_NOTIFY: An AP or GO may decide to switch channels
* independently of the userspace SME, send this event indicating * independently of the userspace SME, send this event indicating
* %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ and the * %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ and the
* attributes determining channel width. * attributes determining channel width. This indication may also be
* sent when a remotely-initiated switch (e.g., when a STA receives a CSA
* from the remote AP) is completed;
* *
* @NL80211_CMD_CH_SWITCH_STARTED_NOTIFY: Notify that a channel switch * @NL80211_CMD_CH_SWITCH_STARTED_NOTIFY: Notify that a channel switch
* has been started on an interface, regardless of the initiator * has been started on an interface, regardless of the initiator
......
...@@ -1049,6 +1049,8 @@ static void ieee80211_chswitch_post_beacon(struct ieee80211_sub_if_data *sdata) ...@@ -1049,6 +1049,8 @@ static void ieee80211_chswitch_post_beacon(struct ieee80211_sub_if_data *sdata)
sdata->csa_block_tx = false; sdata->csa_block_tx = false;
} }
cfg80211_ch_switch_notify(sdata->dev, &sdata->reserved_chandef);
sdata->vif.csa_active = false; sdata->vif.csa_active = false;
ifmgd->csa_waiting_bcn = false; ifmgd->csa_waiting_bcn = false;
......
...@@ -11702,12 +11702,6 @@ void cfg80211_ch_switch_notify(struct net_device *dev, ...@@ -11702,12 +11702,6 @@ void cfg80211_ch_switch_notify(struct net_device *dev,
trace_cfg80211_ch_switch_notify(dev, chandef); trace_cfg80211_ch_switch_notify(dev, chandef);
if (WARN_ON(wdev->iftype != NL80211_IFTYPE_AP &&
wdev->iftype != NL80211_IFTYPE_P2P_GO &&
wdev->iftype != NL80211_IFTYPE_ADHOC &&
wdev->iftype != NL80211_IFTYPE_MESH_POINT))
return;
wdev->chandef = *chandef; wdev->chandef = *chandef;
wdev->preset_chandef = *chandef; wdev->preset_chandef = *chandef;
nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL, nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL,
......
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