diff options
author | Jouni Malinen <j@w1.fi> | 2010-12-15 17:52:40 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-12-16 15:22:30 -0500 |
commit | cf4e594ea7e55555e81647b74a3a8e8b2826a529 (patch) | |
tree | 794013429d9613ef253111fb50f993600ab14a55 /include | |
parent | 5928b91acae97622a6f2e679eb7a9f19bed68e3e (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 'include')
-rw-r--r-- | include/linux/nl80211.h | 10 | ||||
-rw-r--r-- | include/net/cfg80211.h | 26 |
2 files changed, 36 insertions, 0 deletions
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 1cee56b3a79a..7483a89cee8f 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -399,6 +399,13 @@ | |||
399 | * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the | 399 | * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the |
400 | * network is determined by the network interface. | 400 | * network is determined by the network interface. |
401 | * | 401 | * |
402 | * @NL80211_CMD_UNPROT_DEAUTHENTICATE: Unprotected deauthentication frame | ||
403 | * notification. This event is used to indicate that an unprotected | ||
404 | * deauthentication frame was dropped when MFP is in use. | ||
405 | * @NL80211_CMD_UNPROT_DISASSOCIATE: Unprotected disassociation frame | ||
406 | * notification. This event is used to indicate that an unprotected | ||
407 | * disassociation frame was dropped when MFP is in use. | ||
408 | * | ||
402 | * @NL80211_CMD_MAX: highest used command number | 409 | * @NL80211_CMD_MAX: highest used command number |
403 | * @__NL80211_CMD_AFTER_LAST: internal use | 410 | * @__NL80211_CMD_AFTER_LAST: internal use |
404 | */ | 411 | */ |
@@ -508,6 +515,9 @@ enum nl80211_commands { | |||
508 | NL80211_CMD_JOIN_MESH, | 515 | NL80211_CMD_JOIN_MESH, |
509 | NL80211_CMD_LEAVE_MESH, | 516 | NL80211_CMD_LEAVE_MESH, |
510 | 517 | ||
518 | NL80211_CMD_UNPROT_DEAUTHENTICATE, | ||
519 | NL80211_CMD_UNPROT_DISASSOCIATE, | ||
520 | |||
511 | /* add new commands above here */ | 521 | /* add new commands above here */ |
512 | 522 | ||
513 | /* used to define NL80211_CMD_MAX below */ | 523 | /* used to define NL80211_CMD_MAX below */ |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index f45e15f12446..3d1c09b777e8 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -2360,6 +2360,32 @@ void __cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, | |||
2360 | size_t len); | 2360 | size_t len); |
2361 | 2361 | ||
2362 | /** | 2362 | /** |
2363 | * cfg80211_send_unprot_deauth - notification of unprotected deauthentication | ||
2364 | * @dev: network device | ||
2365 | * @buf: deauthentication frame (header + body) | ||
2366 | * @len: length of the frame data | ||
2367 | * | ||
2368 | * This function is called whenever a received Deauthentication frame has been | ||
2369 | * dropped in station mode because of MFP being used but the Deauthentication | ||
2370 | * frame was not protected. This function may sleep. | ||
2371 | */ | ||
2372 | void cfg80211_send_unprot_deauth(struct net_device *dev, const u8 *buf, | ||
2373 | size_t len); | ||
2374 | |||
2375 | /** | ||
2376 | * cfg80211_send_unprot_disassoc - notification of unprotected disassociation | ||
2377 | * @dev: network device | ||
2378 | * @buf: disassociation frame (header + body) | ||
2379 | * @len: length of the frame data | ||
2380 | * | ||
2381 | * This function is called whenever a received Disassociation frame has been | ||
2382 | * dropped in station mode because of MFP being used but the Disassociation | ||
2383 | * frame was not protected. This function may sleep. | ||
2384 | */ | ||
2385 | void cfg80211_send_unprot_disassoc(struct net_device *dev, const u8 *buf, | ||
2386 | size_t len); | ||
2387 | |||
2388 | /** | ||
2363 | * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP) | 2389 | * cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP) |
2364 | * @dev: network device | 2390 | * @dev: network device |
2365 | * @addr: The source MAC address of the frame | 2391 | * @addr: The source MAC address of the frame |