aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/nl80211.h41
-rw-r--r--include/net/cfg80211.h47
-rw-r--r--include/net/mac80211.h6
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 */
1449struct wireless_dev { 1457struct 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,
2291void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr, 2302void 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 */
2320bool 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 */
2336void 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 */
268enum mac80211_tx_control_flags { 271enum 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/**