diff options
author | Johannes Berg <johannes.berg@intel.com> | 2011-11-04 06:18:12 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-11-09 16:05:49 -0500 |
commit | 28946da763e8b8d8ffd01ab861b684a4afb4bc3b (patch) | |
tree | c4e1cd440702b81c2192a164356da4ba769a29a6 /include | |
parent | 665c93a93e35cafcd8c84073824f1ef1b19f0a7d (diff) |
nl80211: allow subscribing to unexpected class3 frames
To implement AP mode without monitor interfaces we
need to be able to send a deauth to stations that
send frames without being associated. Enable this
by adding a new nl80211 event for such frames that
an application can subscribe to.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/nl80211.h | 12 | ||||
-rw-r--r-- | include/net/cfg80211.h | 17 |
2 files changed, 29 insertions, 0 deletions
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 8049bf77d79..9107adc73e0 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -509,6 +509,16 @@ | |||
509 | * @NL80211_CMD_TDLS_OPER: Perform a high-level TDLS command (e.g. link setup). | 509 | * @NL80211_CMD_TDLS_OPER: Perform a high-level TDLS command (e.g. link setup). |
510 | * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame. | 510 | * @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame. |
511 | * | 511 | * |
512 | * @NL80211_CMD_UNEXPECTED_FRAME: Used by an application controlling an AP | ||
513 | * (or GO) interface (i.e. hostapd) to ask for unexpected frames to | ||
514 | * implement sending deauth to stations that send unexpected class 3 | ||
515 | * frames. Also used as the event sent by the kernel when such a frame | ||
516 | * is received. | ||
517 | * For the event, the %NL80211_ATTR_MAC attribute carries the TA and | ||
518 | * other attributes like the interface index are present. | ||
519 | * If used as the command it must have an interface index and you can | ||
520 | * only unsubscribe from the event by closing the socket. | ||
521 | * | ||
512 | * @NL80211_CMD_MAX: highest used command number | 522 | * @NL80211_CMD_MAX: highest used command number |
513 | * @__NL80211_CMD_AFTER_LAST: internal use | 523 | * @__NL80211_CMD_AFTER_LAST: internal use |
514 | */ | 524 | */ |
@@ -638,6 +648,8 @@ enum nl80211_commands { | |||
638 | NL80211_CMD_TDLS_OPER, | 648 | NL80211_CMD_TDLS_OPER, |
639 | NL80211_CMD_TDLS_MGMT, | 649 | NL80211_CMD_TDLS_MGMT, |
640 | 650 | ||
651 | NL80211_CMD_UNEXPECTED_FRAME, | ||
652 | |||
641 | /* add new commands above here */ | 653 | /* add new commands above here */ |
642 | 654 | ||
643 | /* used to define NL80211_CMD_MAX below */ | 655 | /* used to define NL80211_CMD_MAX below */ |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 0c71d4a30cd..ef118e45258 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -2183,6 +2183,8 @@ struct wireless_dev { | |||
2183 | 2183 | ||
2184 | int beacon_interval; | 2184 | int beacon_interval; |
2185 | 2185 | ||
2186 | u32 ap_unexpected_nlpid; | ||
2187 | |||
2186 | #ifdef CONFIG_CFG80211_WEXT | 2188 | #ifdef CONFIG_CFG80211_WEXT |
2187 | /* wext data */ | 2189 | /* wext data */ |
2188 | struct { | 2190 | struct { |
@@ -3193,6 +3195,21 @@ void cfg80211_gtk_rekey_notify(struct net_device *dev, const u8 *bssid, | |||
3193 | void cfg80211_pmksa_candidate_notify(struct net_device *dev, int index, | 3195 | void cfg80211_pmksa_candidate_notify(struct net_device *dev, int index, |
3194 | const u8 *bssid, bool preauth, gfp_t gfp); | 3196 | const u8 *bssid, bool preauth, gfp_t gfp); |
3195 | 3197 | ||
3198 | /** | ||
3199 | * cfg80211_rx_spurious_frame - inform userspace about a spurious frame | ||
3200 | * @dev: The device the frame matched to | ||
3201 | * @addr: the transmitter address | ||
3202 | * @gfp: context flags | ||
3203 | * | ||
3204 | * This function is used in AP mode (only!) to inform userspace that | ||
3205 | * a spurious class 3 frame was received, to be able to deauth the | ||
3206 | * sender. | ||
3207 | * Returns %true if the frame was passed to userspace (or this failed | ||
3208 | * for a reason other than not having a subscription.) | ||
3209 | */ | ||
3210 | bool cfg80211_rx_spurious_frame(struct net_device *dev, | ||
3211 | const u8 *addr, gfp_t gfp); | ||
3212 | |||
3196 | /* Logging, debugging and troubleshooting/diagnostic helpers. */ | 3213 | /* Logging, debugging and troubleshooting/diagnostic helpers. */ |
3197 | 3214 | ||
3198 | /* wiphy_printk helpers, similar to dev_printk */ | 3215 | /* wiphy_printk helpers, similar to dev_printk */ |