diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/nl80211.h | 41 | ||||
-rw-r--r-- | include/net/cfg80211.h | 47 | ||||
-rw-r--r-- | include/net/mac80211.h | 6 |
3 files changed, 91 insertions, 3 deletions
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 127a73015760..8e6384f8fda6 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -3,7 +3,7 @@ | |||
3 | /* | 3 | /* |
4 | * 802.11 netlink interface public header | 4 | * 802.11 netlink interface public header |
5 | * | 5 | * |
6 | * Copyright 2006, 2007, 2008 Johannes Berg <johannes@sipsolutions.net> | 6 | * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net> |
7 | * Copyright 2008 Michael Wu <flamingice@sourmilk.net> | 7 | * Copyright 2008 Michael Wu <flamingice@sourmilk.net> |
8 | * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> | 8 | * Copyright 2008 Luis Carlos Cobo <luisca@cozybit.com> |
9 | * Copyright 2008 Michael Buesch <mb@bu3sch.de> | 9 | * Copyright 2008 Michael Buesch <mb@bu3sch.de> |
@@ -299,6 +299,31 @@ | |||
299 | * rate selection. %NL80211_ATTR_IFINDEX is used to specify the interface | 299 | * rate selection. %NL80211_ATTR_IFINDEX is used to specify the interface |
300 | * and @NL80211_ATTR_TX_RATES the set of allowed rates. | 300 | * and @NL80211_ATTR_TX_RATES the set of allowed rates. |
301 | * | 301 | * |
302 | * @NL80211_CMD_REGISTER_ACTION: Register for receiving certain action frames | ||
303 | * (via @NL80211_CMD_ACTION) for processing in userspace. This command | ||
304 | * requires an interface index and a match attribute containing the first | ||
305 | * few bytes of the frame that should match, e.g. a single byte for only | ||
306 | * a category match or four bytes for vendor frames including the OUI. | ||
307 | * The registration cannot be dropped, but is removed automatically | ||
308 | * when the netlink socket is closed. Multiple registrations can be made. | ||
309 | * @NL80211_CMD_ACTION: Action frame TX request and RX notification. This | ||
310 | * command is used both as a request to transmit an Action frame and as an | ||
311 | * event indicating reception of an Action frame that was not processed in | ||
312 | * kernel code, but is for us (i.e., which may need to be processed in a | ||
313 | * user space application). %NL80211_ATTR_FRAME is used to specify the | ||
314 | * frame contents (including header). %NL80211_ATTR_WIPHY_FREQ (and | ||
315 | * optionally %NL80211_ATTR_WIPHY_CHANNEL_TYPE) is used to indicate on | ||
316 | * which channel the frame is to be transmitted or was received. This | ||
317 | * channel has to be the current channel (remain-on-channel or the | ||
318 | * operational channel). When called, this operation returns a cookie | ||
319 | * (%NL80211_ATTR_COOKIE) that will be included with the TX status event | ||
320 | * pertaining to the TX request. | ||
321 | * @NL80211_CMD_ACTION_TX_STATUS: Report TX status of an Action frame | ||
322 | * transmitted with %NL80211_CMD_ACTION. %NL80211_ATTR_COOKIE identifies | ||
323 | * the TX command and %NL80211_ATTR_FRAME includes the contents of the | ||
324 | * frame. %NL80211_ATTR_ACK flag is included if the recipient acknowledged | ||
325 | * the frame. | ||
326 | * | ||
302 | * @NL80211_CMD_MAX: highest used command number | 327 | * @NL80211_CMD_MAX: highest used command number |
303 | * @__NL80211_CMD_AFTER_LAST: internal use | 328 | * @__NL80211_CMD_AFTER_LAST: internal use |
304 | */ | 329 | */ |
@@ -387,6 +412,10 @@ enum nl80211_commands { | |||
387 | 412 | ||
388 | NL80211_CMD_SET_TX_BITRATE_MASK, | 413 | NL80211_CMD_SET_TX_BITRATE_MASK, |
389 | 414 | ||
415 | NL80211_CMD_REGISTER_ACTION, | ||
416 | NL80211_CMD_ACTION, | ||
417 | NL80211_CMD_ACTION_TX_STATUS, | ||
418 | |||
390 | /* add new commands above here */ | 419 | /* add new commands above here */ |
391 | 420 | ||
392 | /* used to define NL80211_CMD_MAX below */ | 421 | /* used to define NL80211_CMD_MAX below */ |
@@ -653,6 +682,12 @@ enum nl80211_commands { | |||
653 | * rates based on negotiated supported rates information. This attribute | 682 | * rates based on negotiated supported rates information. This attribute |
654 | * is used with %NL80211_CMD_SET_TX_BITRATE_MASK. | 683 | * is used with %NL80211_CMD_SET_TX_BITRATE_MASK. |
655 | * | 684 | * |
685 | * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain | ||
686 | * at least one byte, currently used with @NL80211_CMD_REGISTER_ACTION. | ||
687 | * | ||
688 | * @NL80211_ATTR_ACK: Flag attribute indicating that the frame was | ||
689 | * acknowledged by the recipient. | ||
690 | * | ||
656 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 691 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
657 | * @__NL80211_ATTR_AFTER_LAST: internal use | 692 | * @__NL80211_ATTR_AFTER_LAST: internal use |
658 | */ | 693 | */ |
@@ -798,6 +833,10 @@ enum nl80211_attrs { | |||
798 | 833 | ||
799 | NL80211_ATTR_TX_RATES, | 834 | NL80211_ATTR_TX_RATES, |
800 | 835 | ||
836 | NL80211_ATTR_FRAME_MATCH, | ||
837 | |||
838 | NL80211_ATTR_ACK, | ||
839 | |||
801 | /* add attributes here, update the policy in nl80211.c */ | 840 | /* add attributes here, update the policy in nl80211.c */ |
802 | 841 | ||
803 | __NL80211_ATTR_AFTER_LAST, | 842 | __NL80211_ATTR_AFTER_LAST, |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 5b3569b2a74c..7188934b64d3 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -3,7 +3,7 @@ | |||
3 | /* | 3 | /* |
4 | * 802.11 device and configuration interface | 4 | * 802.11 device and configuration interface |
5 | * | 5 | * |
6 | * Copyright 2006-2009 Johannes Berg <johannes@sipsolutions.net> | 6 | * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net> |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
@@ -998,6 +998,7 @@ struct cfg80211_pmksa { | |||
998 | * @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation. | 998 | * @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation. |
999 | * This allows the operation to be terminated prior to timeout based on | 999 | * This allows the operation to be terminated prior to timeout based on |
1000 | * the duration value. | 1000 | * the duration value. |
1001 | * @action: Transmit an action frame | ||
1001 | * | 1002 | * |
1002 | * @testmode_cmd: run a test mode command | 1003 | * @testmode_cmd: run a test mode command |
1003 | * | 1004 | * |
@@ -1144,6 +1145,11 @@ struct cfg80211_ops { | |||
1144 | struct net_device *dev, | 1145 | struct net_device *dev, |
1145 | u64 cookie); | 1146 | u64 cookie); |
1146 | 1147 | ||
1148 | int (*action)(struct wiphy *wiphy, struct net_device *dev, | ||
1149 | struct ieee80211_channel *chan, | ||
1150 | enum nl80211_channel_type channel_type, | ||
1151 | const u8 *buf, size_t len, u64 *cookie); | ||
1152 | |||
1147 | /* some temporary stuff to finish wext */ | 1153 | /* some temporary stuff to finish wext */ |
1148 | int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, | 1154 | int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, |
1149 | bool enabled, int timeout); | 1155 | bool enabled, int timeout); |
@@ -1445,6 +1451,8 @@ struct cfg80211_cached_keys; | |||
1445 | * set by driver (if supported) on add_interface BEFORE registering the | 1451 | * set by driver (if supported) on add_interface BEFORE registering the |
1446 | * netdev and may otherwise be used by driver read-only, will be update | 1452 | * netdev and may otherwise be used by driver read-only, will be update |
1447 | * by cfg80211 on change_interface | 1453 | * by cfg80211 on change_interface |
1454 | * @action_registrations: list of registrations for action frames | ||
1455 | * @action_registrations_lock: lock for the list | ||
1448 | */ | 1456 | */ |
1449 | struct wireless_dev { | 1457 | struct wireless_dev { |
1450 | struct wiphy *wiphy; | 1458 | struct wiphy *wiphy; |
@@ -1454,6 +1462,9 @@ struct wireless_dev { | |||
1454 | struct list_head list; | 1462 | struct list_head list; |
1455 | struct net_device *netdev; | 1463 | struct net_device *netdev; |
1456 | 1464 | ||
1465 | struct list_head action_registrations; | ||
1466 | spinlock_t action_registrations_lock; | ||
1467 | |||
1457 | struct mutex mtx; | 1468 | struct mutex mtx; |
1458 | 1469 | ||
1459 | struct work_struct cleanup_work; | 1470 | struct work_struct cleanup_work; |
@@ -2291,4 +2302,38 @@ void cfg80211_remain_on_channel_expired(struct net_device *dev, | |||
2291 | void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr, | 2302 | void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr, |
2292 | struct station_info *sinfo, gfp_t gfp); | 2303 | struct station_info *sinfo, gfp_t gfp); |
2293 | 2304 | ||
2305 | /** | ||
2306 | * cfg80211_rx_action - notification of received, unprocessed Action frame | ||
2307 | * @dev: network device | ||
2308 | * @freq: Frequency on which the frame was received in MHz | ||
2309 | * @buf: Action frame (header + body) | ||
2310 | * @len: length of the frame data | ||
2311 | * @gfp: context flags | ||
2312 | * Returns %true if a user space application is responsible for rejecting the | ||
2313 | * unrecognized Action frame; %false if no such application is registered | ||
2314 | * (i.e., the driver is responsible for rejecting the unrecognized Action | ||
2315 | * frame) | ||
2316 | * | ||
2317 | * This function is called whenever an Action frame is received for a station | ||
2318 | * mode interface, but is not processed in kernel. | ||
2319 | */ | ||
2320 | bool cfg80211_rx_action(struct net_device *dev, int freq, const u8 *buf, | ||
2321 | size_t len, gfp_t gfp); | ||
2322 | |||
2323 | /** | ||
2324 | * cfg80211_action_tx_status - notification of TX status for Action frame | ||
2325 | * @dev: network device | ||
2326 | * @cookie: Cookie returned by cfg80211_ops::action() | ||
2327 | * @buf: Action frame (header + body) | ||
2328 | * @len: length of the frame data | ||
2329 | * @ack: Whether frame was acknowledged | ||
2330 | * @gfp: context flags | ||
2331 | * | ||
2332 | * This function is called whenever an Action frame was requested to be | ||
2333 | * transmitted with cfg80211_ops::action() to report the TX status of the | ||
2334 | * transmission attempt. | ||
2335 | */ | ||
2336 | void cfg80211_action_tx_status(struct net_device *dev, u64 cookie, | ||
2337 | const u8 *buf, size_t len, bool ack, gfp_t gfp); | ||
2338 | |||
2294 | #endif /* __NET_CFG80211_H */ | 2339 | #endif /* __NET_CFG80211_H */ |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 314e98173166..80eb7cc42ce9 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright 2002-2005, Devicescape Software, Inc. | 4 | * Copyright 2002-2005, Devicescape Software, Inc. |
5 | * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> | 5 | * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> |
6 | * Copyright 2007-2008 Johannes Berg <johannes@sipsolutions.net> | 6 | * Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net> |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
@@ -264,6 +264,9 @@ struct ieee80211_bss_conf { | |||
264 | * be modified again (no seqno assignment, crypto, etc.) | 264 | * be modified again (no seqno assignment, crypto, etc.) |
265 | * @IEEE80211_TX_INTFL_HAS_RADIOTAP: This frame was injected and still | 265 | * @IEEE80211_TX_INTFL_HAS_RADIOTAP: This frame was injected and still |
266 | * has a radiotap header at skb->data. | 266 | * has a radiotap header at skb->data. |
267 | * @IEEE80211_TX_INTFL_NL80211_FRAME_TX: Frame was requested through nl80211 | ||
268 | * MLME command (internal to mac80211 to figure out whether to send TX | ||
269 | * status to user space) | ||
267 | */ | 270 | */ |
268 | enum mac80211_tx_control_flags { | 271 | enum mac80211_tx_control_flags { |
269 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), | 272 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), |
@@ -286,6 +289,7 @@ enum mac80211_tx_control_flags { | |||
286 | IEEE80211_TX_CTL_MORE_FRAMES = BIT(18), | 289 | IEEE80211_TX_CTL_MORE_FRAMES = BIT(18), |
287 | IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19), | 290 | IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19), |
288 | IEEE80211_TX_INTFL_HAS_RADIOTAP = BIT(20), | 291 | IEEE80211_TX_INTFL_HAS_RADIOTAP = BIT(20), |
292 | IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21), | ||
289 | }; | 293 | }; |
290 | 294 | ||
291 | /** | 295 | /** |