diff options
author | Arik Nemtsov <arik@wizery.com> | 2014-06-11 14:18:27 (GMT) |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2014-06-23 12:28:19 (GMT) |
commit | ee10f2c779b28c1d6e87ac3e1bbb1aa8b62fa891 (patch) | |
tree | 03619136498fe1a91731bad32ac70592168ce230 /net/mac80211/tdls.c | |
parent | 7adc3e4664bc5bd382fa181e6a4506f5b5b583d8 (diff) | |
download | linux-ee10f2c779b28c1d6e87ac3e1bbb1aa8b62fa891.tar.xz |
mac80211: protect TDLS discovery session
After sending a TDLS discovery-request, we expect a reply to arrive on
the AP's channel. We must stay on the channel (no PSM, scan, etc.), since
a TDLS setup-response is a direct packet not buffered by the AP.
Add a new mac80211 driver callback to allow discovery session protection.
Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/tdls.c')
-rw-r--r-- | net/mac80211/tdls.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/net/mac80211/tdls.c b/net/mac80211/tdls.c index b87e369..f718533 100644 --- a/net/mac80211/tdls.c +++ b/net/mac80211/tdls.c @@ -10,6 +10,7 @@ #include <linux/ieee80211.h> #include <net/cfg80211.h> #include "ieee80211_i.h" +#include "driver-ops.h" /* give usermode some time for retries in setting up the TDLS session */ #define TDLS_PEER_SETUP_TIMEOUT (15 * HZ) @@ -442,8 +443,15 @@ int ieee80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *dev, peer_capability, initiator, extra_ies, extra_ies_len); break; - case WLAN_TDLS_SETUP_CONFIRM: case WLAN_TDLS_DISCOVERY_REQUEST: + /* + * Protect the discovery so we can hear the TDLS discovery + * response frame. It is transmitted directly and not buffered + * by the AP. + */ + drv_mgd_protect_tdls_discover(sdata->local, sdata); + /* fall-through */ + case WLAN_TDLS_SETUP_CONFIRM: case WLAN_PUB_ACTION_TDLS_DISCOVER_RES: /* no special handling */ ret = ieee80211_tdls_prep_mgmt_packet(wiphy, dev, peer, |