aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
authorJouni Malinen <j@w1.fi>2010-12-15 17:52:40 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-12-16 15:22:30 -0500
commitcf4e594ea7e55555e81647b74a3a8e8b2826a529 (patch)
tree794013429d9613ef253111fb50f993600ab14a55 /net/wireless/nl80211.c
parent5928b91acae97622a6f2e679eb7a9f19bed68e3e (diff)
nl80211: Add notification for dropped Deauth/Disassoc
Add a new notification to indicate that a received, unprotected Deauthentication or Disassociation frame was dropped due to management frame protection being in use. This notification is needed to allow user space (e.g., wpa_supplicant) to implement SA Query procedure to recover from association state mismatch between an AP and STA. This is needed to avoid getting stuck in non-working state when MFP (IEEE 802.11w) is used and a protected Deauthentication or Disassociation frame is dropped for any reason. After that, the station would silently discard any unprotected Deauthentication or Disassociation frame that could be indicating that the AP does not have association for the STA (when the Reason Code would be 6 or 7). IEEE Std 802.11w-2009, 11.13 describes this recovery mechanism. Signed-off-by: Jouni Malinen <j@w1.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 594a6ac8b9d2..aefce54d47e2 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -5473,6 +5473,22 @@ void nl80211_send_disassoc(struct cfg80211_registered_device *rdev,
5473 NL80211_CMD_DISASSOCIATE, gfp); 5473 NL80211_CMD_DISASSOCIATE, gfp);
5474} 5474}
5475 5475
5476void nl80211_send_unprot_deauth(struct cfg80211_registered_device *rdev,
5477 struct net_device *netdev, const u8 *buf,
5478 size_t len, gfp_t gfp)
5479{
5480 nl80211_send_mlme_event(rdev, netdev, buf, len,
5481 NL80211_CMD_UNPROT_DEAUTHENTICATE, gfp);
5482}
5483
5484void nl80211_send_unprot_disassoc(struct cfg80211_registered_device *rdev,
5485 struct net_device *netdev, const u8 *buf,
5486 size_t len, gfp_t gfp)
5487{
5488 nl80211_send_mlme_event(rdev, netdev, buf, len,
5489 NL80211_CMD_UNPROT_DISASSOCIATE, gfp);
5490}
5491
5476static void nl80211_send_mlme_timeout(struct cfg80211_registered_device *rdev, 5492static void nl80211_send_mlme_timeout(struct cfg80211_registered_device *rdev,
5477 struct net_device *netdev, int cmd, 5493 struct net_device *netdev, int cmd,
5478 const u8 *addr, gfp_t gfp) 5494 const u8 *addr, gfp_t gfp)