aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJouni Malinen <jouni.malinen@atheros.com>2009-01-13 09:03:29 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-01-29 16:00:35 -0500
commit9aed3cc124343d92be6697e9af3928bdfe8eb03e (patch)
tree6a49a68422656790f944f37e3f34379b753d1dab /include
parent0c1aa495961f03c964b3287cf5800217cf6f2cee (diff)
nl80211: New command for adding extra IE(s) into management frames
A new nl80211 command, NL80211_CMD_SET_MGMT_EXTRA_IE, can be used to add arbitrary IE data into the end of management frames. The interface allows extra IEs to be configured for each management frame subtype, but only some of them (ProbeReq, ProbeResp, Auth, (Re)AssocReq, Deauth, Disassoc) are currently accepted in mac80211 implementation. This makes it easier to implement IEEE 802.11 extensions like WPS and FT that add IE(s) into some management frames. In addition, this can be useful for testing and experimentation purposes. Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/nl80211.h22
-rw-r--r--include/net/cfg80211.h26
2 files changed, 48 insertions, 0 deletions
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
index 4e7a7986a521..76aae3d8e97e 100644
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
@@ -133,6 +133,14 @@
133 * @NL80211_CMD_SET_MESH_PARAMS: Set mesh networking properties for the 133 * @NL80211_CMD_SET_MESH_PARAMS: Set mesh networking properties for the
134 * interface identified by %NL80211_ATTR_IFINDEX 134 * interface identified by %NL80211_ATTR_IFINDEX
135 * 135 *
136 * @NL80211_CMD_SET_MGMT_EXTRA_IE: Set extra IEs for management frames. The
137 * interface is identified with %NL80211_ATTR_IFINDEX and the management
138 * frame subtype with %NL80211_ATTR_MGMT_SUBTYPE. The extra IE data to be
139 * added to the end of the specified management frame is specified with
140 * %NL80211_ATTR_IE. If the command succeeds, the requested data will be
141 * added to all specified management frames generated by
142 * kernel/firmware/driver.
143 *
136 * @NL80211_CMD_MAX: highest used command number 144 * @NL80211_CMD_MAX: highest used command number
137 * @__NL80211_CMD_AFTER_LAST: internal use 145 * @__NL80211_CMD_AFTER_LAST: internal use
138 */ 146 */
@@ -178,6 +186,8 @@ enum nl80211_commands {
178 NL80211_CMD_GET_MESH_PARAMS, 186 NL80211_CMD_GET_MESH_PARAMS,
179 NL80211_CMD_SET_MESH_PARAMS, 187 NL80211_CMD_SET_MESH_PARAMS,
180 188
189 NL80211_CMD_SET_MGMT_EXTRA_IE,
190
181 /* add new commands above here */ 191 /* add new commands above here */
182 192
183 /* used to define NL80211_CMD_MAX below */ 193 /* used to define NL80211_CMD_MAX below */
@@ -190,6 +200,7 @@ enum nl80211_commands {
190 * here 200 * here
191 */ 201 */
192#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS 202#define NL80211_CMD_SET_BSS NL80211_CMD_SET_BSS
203#define NL80211_CMD_SET_MGMT_EXTRA_IE NL80211_CMD_SET_MGMT_EXTRA_IE
193 204
194/** 205/**
195 * enum nl80211_attrs - nl80211 netlink attributes 206 * enum nl80211_attrs - nl80211 netlink attributes
@@ -284,6 +295,12 @@ enum nl80211_commands {
284 * supported interface types, each a flag attribute with the number 295 * supported interface types, each a flag attribute with the number
285 * of the interface mode. 296 * of the interface mode.
286 * 297 *
298 * @NL80211_ATTR_MGMT_SUBTYPE: Management frame subtype for
299 * %NL80211_CMD_SET_MGMT_EXTRA_IE.
300 *
301 * @NL80211_ATTR_IE: Information element(s) data (used, e.g., with
302 * %NL80211_CMD_SET_MGMT_EXTRA_IE).
303 *
287 * @NL80211_ATTR_MAX: highest attribute number currently defined 304 * @NL80211_ATTR_MAX: highest attribute number currently defined
288 * @__NL80211_ATTR_AFTER_LAST: internal use 305 * @__NL80211_ATTR_AFTER_LAST: internal use
289 */ 306 */
@@ -348,6 +365,9 @@ enum nl80211_attrs {
348 365
349 NL80211_ATTR_KEY_DEFAULT_MGMT, 366 NL80211_ATTR_KEY_DEFAULT_MGMT,
350 367
368 NL80211_ATTR_MGMT_SUBTYPE,
369 NL80211_ATTR_IE,
370
351 /* add attributes here, update the policy in nl80211.c */ 371 /* add attributes here, update the policy in nl80211.c */
352 372
353 __NL80211_ATTR_AFTER_LAST, 373 __NL80211_ATTR_AFTER_LAST,
@@ -363,6 +383,8 @@ enum nl80211_attrs {
363#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS 383#define NL80211_ATTR_WIPHY_TXQ_PARAMS NL80211_ATTR_WIPHY_TXQ_PARAMS
364#define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ 384#define NL80211_ATTR_WIPHY_FREQ NL80211_ATTR_WIPHY_FREQ
365#define NL80211_ATTR_WIPHY_CHANNEL_TYPE NL80211_ATTR_WIPHY_CHANNEL_TYPE 385#define NL80211_ATTR_WIPHY_CHANNEL_TYPE NL80211_ATTR_WIPHY_CHANNEL_TYPE
386#define NL80211_ATTR_MGMT_SUBTYPE NL80211_ATTR_MGMT_SUBTYPE
387#define NL80211_ATTR_IE NL80211_ATTR_IE
366 388
367#define NL80211_MAX_SUPP_RATES 32 389#define NL80211_MAX_SUPP_RATES 32
368#define NL80211_MAX_SUPP_REG_RULES 32 390#define NL80211_MAX_SUPP_REG_RULES 32
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index df78abc496f1..c7da88fb15b7 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -433,6 +433,26 @@ struct ieee80211_txq_params {
433 u8 aifs; 433 u8 aifs;
434}; 434};
435 435
436/**
437 * struct mgmt_extra_ie_params - Extra management frame IE parameters
438 *
439 * Used to add extra IE(s) into management frames. If the driver cannot add the
440 * requested data into all management frames of the specified subtype that are
441 * generated in kernel or firmware/hardware, it must reject the configuration
442 * call. The IE data buffer is added to the end of the specified management
443 * frame body after all other IEs. This addition is not applied to frames that
444 * are injected through a monitor interface.
445 *
446 * @subtype: Management frame subtype
447 * @ies: IE data buffer or %NULL to remove previous data
448 * @ies_len: Length of @ies in octets
449 */
450struct mgmt_extra_ie_params {
451 u8 subtype;
452 u8 *ies;
453 int ies_len;
454};
455
436/* from net/wireless.h */ 456/* from net/wireless.h */
437struct wiphy; 457struct wiphy;
438 458
@@ -501,6 +521,8 @@ struct ieee80211_channel;
501 * @set_txq_params: Set TX queue parameters 521 * @set_txq_params: Set TX queue parameters
502 * 522 *
503 * @set_channel: Set channel 523 * @set_channel: Set channel
524 *
525 * @set_mgmt_extra_ie: Set extra IE data for management frames
504 */ 526 */
505struct cfg80211_ops { 527struct cfg80211_ops {
506 int (*add_virtual_intf)(struct wiphy *wiphy, char *name, 528 int (*add_virtual_intf)(struct wiphy *wiphy, char *name,
@@ -571,6 +593,10 @@ struct cfg80211_ops {
571 int (*set_channel)(struct wiphy *wiphy, 593 int (*set_channel)(struct wiphy *wiphy,
572 struct ieee80211_channel *chan, 594 struct ieee80211_channel *chan,
573 enum nl80211_channel_type channel_type); 595 enum nl80211_channel_type channel_type);
596
597 int (*set_mgmt_extra_ie)(struct wiphy *wiphy,
598 struct net_device *dev,
599 struct mgmt_extra_ie_params *params);
574}; 600};
575 601
576/* temporary wext handlers */ 602/* temporary wext handlers */