aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/cfg.c
diff options
context:
space:
mode:
authorMatti Gottlieb <matti.gottlieb@intel.com>2015-04-20 15:54:14 -0400
committerJohannes Berg <johannes.berg@intel.com>2015-04-24 06:27:17 -0400
commitb8e69d51ffb5753cbb62f3ebfeadeffd3a19b0e9 (patch)
tree6fd4a76fb49a7bb535577cff1a0efd273b3a2aab /net/mac80211/cfg.c
parentb497de63ad5dcdae999c14444c4e7f53fd60119c (diff)
mac80211: force off channel transmission for public action frames
Currently while associated to an AP and sending a (public) action frame to a different AP on the same channel, the action frame will be sent like a regular tx frame without going off channel. When power save is enabled this can cause problems, since the device can go into power save and miss the response to the action frame that is sent by the other AP. Force off-channel transmission to avoid this issue in case - HW offchannel is used, - the user didn't forbid transmitting frames off channel - the frame is not sent to the AP that we are associated with (if it is we assume the response would be bufferable) Signed-off-by: Matti Gottlieb <matti.gottlieb@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> [reword commit message a bit] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/cfg.c')
-rw-r--r--net/mac80211/cfg.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 4aa5e893cbaa..72a0178af737 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -3343,8 +3343,14 @@ static int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
3343 break; 3343 break;
3344 case NL80211_IFTYPE_STATION: 3344 case NL80211_IFTYPE_STATION:
3345 case NL80211_IFTYPE_P2P_CLIENT: 3345 case NL80211_IFTYPE_P2P_CLIENT:
3346 if (!sdata->u.mgd.associated) 3346 sdata_lock(sdata);
3347 if (!sdata->u.mgd.associated ||
3348 (params->offchan && params->wait &&
3349 local->ops->remain_on_channel &&
3350 memcmp(sdata->u.mgd.associated->bssid,
3351 mgmt->bssid, ETH_ALEN)))
3347 need_offchan = true; 3352 need_offchan = true;
3353 sdata_unlock(sdata);
3348 break; 3354 break;
3349 case NL80211_IFTYPE_P2P_DEVICE: 3355 case NL80211_IFTYPE_P2P_DEVICE:
3350 need_offchan = true; 3356 need_offchan = true;