nl80211: New command for adding extra IE(s) into management frames
[safe/jmp/linux-2.6] / include / net / cfg80211.h
1 #ifndef __NET_CFG80211_H
2 #define __NET_CFG80211_H
3
4 #include <linux/netlink.h>
5 #include <linux/skbuff.h>
6 #include <linux/nl80211.h>
7 #include <net/genetlink.h>
8 /* remove once we remove the wext stuff */
9 #include <net/iw_handler.h>
10
11 /*
12  * 802.11 configuration in-kernel interface
13  *
14  * Copyright 2006, 2007 Johannes Berg <johannes@sipsolutions.net>
15  */
16
17 /**
18  * struct vif_params - describes virtual interface parameters
19  * @mesh_id: mesh ID to use
20  * @mesh_id_len: length of the mesh ID
21  */
22 struct vif_params {
23        u8 *mesh_id;
24        int mesh_id_len;
25 };
26
27 /* Radiotap header iteration
28  *   implemented in net/wireless/radiotap.c
29  *   docs in Documentation/networking/radiotap-headers.txt
30  */
31 /**
32  * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args
33  * @rtheader: pointer to the radiotap header we are walking through
34  * @max_length: length of radiotap header in cpu byte ordering
35  * @this_arg_index: IEEE80211_RADIOTAP_... index of current arg
36  * @this_arg: pointer to current radiotap arg
37  * @arg_index: internal next argument index
38  * @arg: internal next argument pointer
39  * @next_bitmap: internal pointer to next present u32
40  * @bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present
41  */
42
43 struct ieee80211_radiotap_iterator {
44         struct ieee80211_radiotap_header *rtheader;
45         int max_length;
46         int this_arg_index;
47         u8 *this_arg;
48
49         int arg_index;
50         u8 *arg;
51         __le32 *next_bitmap;
52         u32 bitmap_shifter;
53 };
54
55 extern int ieee80211_radiotap_iterator_init(
56    struct ieee80211_radiotap_iterator *iterator,
57    struct ieee80211_radiotap_header *radiotap_header,
58    int max_length);
59
60 extern int ieee80211_radiotap_iterator_next(
61    struct ieee80211_radiotap_iterator *iterator);
62
63
64  /**
65  * struct key_params - key information
66  *
67  * Information about a key
68  *
69  * @key: key material
70  * @key_len: length of key material
71  * @cipher: cipher suite selector
72  * @seq: sequence counter (IV/PN) for TKIP and CCMP keys, only used
73  *      with the get_key() callback, must be in little endian,
74  *      length given by @seq_len.
75  */
76 struct key_params {
77         u8 *key;
78         u8 *seq;
79         int key_len;
80         int seq_len;
81         u32 cipher;
82 };
83
84 /**
85  * struct beacon_parameters - beacon parameters
86  *
87  * Used to configure the beacon for an interface.
88  *
89  * @head: head portion of beacon (before TIM IE)
90  *     or %NULL if not changed
91  * @tail: tail portion of beacon (after TIM IE)
92  *     or %NULL if not changed
93  * @interval: beacon interval or zero if not changed
94  * @dtim_period: DTIM period or zero if not changed
95  * @head_len: length of @head
96  * @tail_len: length of @tail
97  */
98 struct beacon_parameters {
99         u8 *head, *tail;
100         int interval, dtim_period;
101         int head_len, tail_len;
102 };
103
104 /**
105  * enum station_flags - station flags
106  *
107  * Station capability flags. Note that these must be the bits
108  * according to the nl80211 flags.
109  *
110  * @STATION_FLAG_CHANGED: station flags were changed
111  * @STATION_FLAG_AUTHORIZED: station is authorized to send frames (802.1X)
112  * @STATION_FLAG_SHORT_PREAMBLE: station is capable of receiving frames
113  *      with short preambles
114  * @STATION_FLAG_WME: station is WME/QoS capable
115  * @STATION_FLAG_MFP: station uses management frame protection
116  */
117 enum station_flags {
118         STATION_FLAG_CHANGED            = 1<<0,
119         STATION_FLAG_AUTHORIZED         = 1<<NL80211_STA_FLAG_AUTHORIZED,
120         STATION_FLAG_SHORT_PREAMBLE     = 1<<NL80211_STA_FLAG_SHORT_PREAMBLE,
121         STATION_FLAG_WME                = 1<<NL80211_STA_FLAG_WME,
122         STATION_FLAG_MFP                = 1<<NL80211_STA_FLAG_MFP,
123 };
124
125 /**
126  * enum plink_action - actions to perform in mesh peers
127  *
128  * @PLINK_ACTION_INVALID: action 0 is reserved
129  * @PLINK_ACTION_OPEN: start mesh peer link establishment
130  * @PLINK_ACTION_BLOCL: block traffic from this mesh peer
131  */
132 enum plink_actions {
133         PLINK_ACTION_INVALID,
134         PLINK_ACTION_OPEN,
135         PLINK_ACTION_BLOCK,
136 };
137
138 /**
139  * struct station_parameters - station parameters
140  *
141  * Used to change and create a new station.
142  *
143  * @vlan: vlan interface station should belong to
144  * @supported_rates: supported rates in IEEE 802.11 format
145  *      (or NULL for no change)
146  * @supported_rates_len: number of supported rates
147  * @station_flags: station flags (see &enum station_flags)
148  * @listen_interval: listen interval or -1 for no change
149  * @aid: AID or zero for no change
150  */
151 struct station_parameters {
152         u8 *supported_rates;
153         struct net_device *vlan;
154         u32 station_flags;
155         int listen_interval;
156         u16 aid;
157         u8 supported_rates_len;
158         u8 plink_action;
159         struct ieee80211_ht_cap *ht_capa;
160 };
161
162 /**
163  * enum station_info_flags - station information flags
164  *
165  * Used by the driver to indicate which info in &struct station_info
166  * it has filled in during get_station() or dump_station().
167  *
168  * @STATION_INFO_INACTIVE_TIME: @inactive_time filled
169  * @STATION_INFO_RX_BYTES: @rx_bytes filled
170  * @STATION_INFO_TX_BYTES: @tx_bytes filled
171  * @STATION_INFO_LLID: @llid filled
172  * @STATION_INFO_PLID: @plid filled
173  * @STATION_INFO_PLINK_STATE: @plink_state filled
174  * @STATION_INFO_SIGNAL: @signal filled
175  * @STATION_INFO_TX_BITRATE: @tx_bitrate fields are filled
176  *  (tx_bitrate, tx_bitrate_flags and tx_bitrate_mcs)
177  */
178 enum station_info_flags {
179         STATION_INFO_INACTIVE_TIME      = 1<<0,
180         STATION_INFO_RX_BYTES           = 1<<1,
181         STATION_INFO_TX_BYTES           = 1<<2,
182         STATION_INFO_LLID               = 1<<3,
183         STATION_INFO_PLID               = 1<<4,
184         STATION_INFO_PLINK_STATE        = 1<<5,
185         STATION_INFO_SIGNAL             = 1<<6,
186         STATION_INFO_TX_BITRATE         = 1<<7,
187 };
188
189 /**
190  * enum station_info_rate_flags - bitrate info flags
191  *
192  * Used by the driver to indicate the specific rate transmission
193  * type for 802.11n transmissions.
194  *
195  * @RATE_INFO_FLAGS_MCS: @tx_bitrate_mcs filled
196  * @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 Mhz width transmission
197  * @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval
198  */
199 enum rate_info_flags {
200         RATE_INFO_FLAGS_MCS             = 1<<0,
201         RATE_INFO_FLAGS_40_MHZ_WIDTH    = 1<<1,
202         RATE_INFO_FLAGS_SHORT_GI        = 1<<2,
203 };
204
205 /**
206  * struct rate_info - bitrate information
207  *
208  * Information about a receiving or transmitting bitrate
209  *
210  * @flags: bitflag of flags from &enum rate_info_flags
211  * @mcs: mcs index if struct describes a 802.11n bitrate
212  * @legacy: bitrate in 100kbit/s for 802.11abg
213  */
214 struct rate_info {
215         u8 flags;
216         u8 mcs;
217         u16 legacy;
218 };
219
220 /**
221  * struct station_info - station information
222  *
223  * Station information filled by driver for get_station() and dump_station.
224  *
225  * @filled: bitflag of flags from &enum station_info_flags
226  * @inactive_time: time since last station activity (tx/rx) in milliseconds
227  * @rx_bytes: bytes received from this station
228  * @tx_bytes: bytes transmitted to this station
229  * @llid: mesh local link id
230  * @plid: mesh peer link id
231  * @plink_state: mesh peer link state
232  * @signal: signal strength of last received packet in dBm
233  * @txrate: current unicast bitrate to this station
234  */
235 struct station_info {
236         u32 filled;
237         u32 inactive_time;
238         u32 rx_bytes;
239         u32 tx_bytes;
240         u16 llid;
241         u16 plid;
242         u8 plink_state;
243         s8 signal;
244         struct rate_info txrate;
245 };
246
247 /**
248  * enum monitor_flags - monitor flags
249  *
250  * Monitor interface configuration flags. Note that these must be the bits
251  * according to the nl80211 flags.
252  *
253  * @MONITOR_FLAG_FCSFAIL: pass frames with bad FCS
254  * @MONITOR_FLAG_PLCPFAIL: pass frames with bad PLCP
255  * @MONITOR_FLAG_CONTROL: pass control frames
256  * @MONITOR_FLAG_OTHER_BSS: disable BSSID filtering
257  * @MONITOR_FLAG_COOK_FRAMES: report frames after processing
258  */
259 enum monitor_flags {
260         MONITOR_FLAG_FCSFAIL            = 1<<NL80211_MNTR_FLAG_FCSFAIL,
261         MONITOR_FLAG_PLCPFAIL           = 1<<NL80211_MNTR_FLAG_PLCPFAIL,
262         MONITOR_FLAG_CONTROL            = 1<<NL80211_MNTR_FLAG_CONTROL,
263         MONITOR_FLAG_OTHER_BSS          = 1<<NL80211_MNTR_FLAG_OTHER_BSS,
264         MONITOR_FLAG_COOK_FRAMES        = 1<<NL80211_MNTR_FLAG_COOK_FRAMES,
265 };
266
267 /**
268  * enum mpath_info_flags -  mesh path information flags
269  *
270  * Used by the driver to indicate which info in &struct mpath_info it has filled
271  * in during get_station() or dump_station().
272  *
273  * MPATH_INFO_FRAME_QLEN: @frame_qlen filled
274  * MPATH_INFO_DSN: @dsn filled
275  * MPATH_INFO_METRIC: @metric filled
276  * MPATH_INFO_EXPTIME: @exptime filled
277  * MPATH_INFO_DISCOVERY_TIMEOUT: @discovery_timeout filled
278  * MPATH_INFO_DISCOVERY_RETRIES: @discovery_retries filled
279  * MPATH_INFO_FLAGS: @flags filled
280  */
281 enum mpath_info_flags {
282         MPATH_INFO_FRAME_QLEN           = BIT(0),
283         MPATH_INFO_DSN                  = BIT(1),
284         MPATH_INFO_METRIC               = BIT(2),
285         MPATH_INFO_EXPTIME              = BIT(3),
286         MPATH_INFO_DISCOVERY_TIMEOUT    = BIT(4),
287         MPATH_INFO_DISCOVERY_RETRIES    = BIT(5),
288         MPATH_INFO_FLAGS                = BIT(6),
289 };
290
291 /**
292  * struct mpath_info - mesh path information
293  *
294  * Mesh path information filled by driver for get_mpath() and dump_mpath().
295  *
296  * @filled: bitfield of flags from &enum mpath_info_flags
297  * @frame_qlen: number of queued frames for this destination
298  * @dsn: destination sequence number
299  * @metric: metric (cost) of this mesh path
300  * @exptime: expiration time for the mesh path from now, in msecs
301  * @flags: mesh path flags
302  * @discovery_timeout: total mesh path discovery timeout, in msecs
303  * @discovery_retries: mesh path discovery retries
304  */
305 struct mpath_info {
306         u32 filled;
307         u32 frame_qlen;
308         u32 dsn;
309         u32 metric;
310         u32 exptime;
311         u32 discovery_timeout;
312         u8 discovery_retries;
313         u8 flags;
314 };
315
316 /**
317  * struct bss_parameters - BSS parameters
318  *
319  * Used to change BSS parameters (mainly for AP mode).
320  *
321  * @use_cts_prot: Whether to use CTS protection
322  *      (0 = no, 1 = yes, -1 = do not change)
323  * @use_short_preamble: Whether the use of short preambles is allowed
324  *      (0 = no, 1 = yes, -1 = do not change)
325  * @use_short_slot_time: Whether the use of short slot time is allowed
326  *      (0 = no, 1 = yes, -1 = do not change)
327  * @basic_rates: basic rates in IEEE 802.11 format
328  *      (or NULL for no change)
329  * @basic_rates_len: number of basic rates
330  */
331 struct bss_parameters {
332         int use_cts_prot;
333         int use_short_preamble;
334         int use_short_slot_time;
335         u8 *basic_rates;
336         u8 basic_rates_len;
337 };
338
339 /**
340  * enum reg_set_by - Indicates who is trying to set the regulatory domain
341  * @REGDOM_SET_BY_INIT: regulatory domain was set by initialization. We will be
342  *      using a static world regulatory domain by default.
343  * @REGDOM_SET_BY_CORE: Core queried CRDA for a dynamic world regulatory domain.
344  * @REGDOM_SET_BY_USER: User asked the wireless core to set the
345  *      regulatory domain.
346  * @REGDOM_SET_BY_DRIVER: a wireless drivers has hinted to the wireless core
347  *      it thinks its knows the regulatory domain we should be in.
348  * @REGDOM_SET_BY_COUNTRY_IE: the wireless core has received an 802.11 country
349  *      information element with regulatory information it thinks we
350  *      should consider.
351  */
352 enum reg_set_by {
353         REGDOM_SET_BY_INIT,
354         REGDOM_SET_BY_CORE,
355         REGDOM_SET_BY_USER,
356         REGDOM_SET_BY_DRIVER,
357         REGDOM_SET_BY_COUNTRY_IE,
358 };
359
360 struct ieee80211_freq_range {
361         u32 start_freq_khz;
362         u32 end_freq_khz;
363         u32 max_bandwidth_khz;
364 };
365
366 struct ieee80211_power_rule {
367         u32 max_antenna_gain;
368         u32 max_eirp;
369 };
370
371 struct ieee80211_reg_rule {
372         struct ieee80211_freq_range freq_range;
373         struct ieee80211_power_rule power_rule;
374         u32 flags;
375 };
376
377 struct ieee80211_regdomain {
378         u32 n_reg_rules;
379         char alpha2[2];
380         struct ieee80211_reg_rule reg_rules[];
381 };
382
383 #define MHZ_TO_KHZ(freq) ((freq) * 1000)
384 #define KHZ_TO_MHZ(freq) ((freq) / 1000)
385 #define DBI_TO_MBI(gain) ((gain) * 100)
386 #define MBI_TO_DBI(gain) ((gain) / 100)
387 #define DBM_TO_MBM(gain) ((gain) * 100)
388 #define MBM_TO_DBM(gain) ((gain) / 100)
389
390 #define REG_RULE(start, end, bw, gain, eirp, reg_flags) { \
391         .freq_range.start_freq_khz = MHZ_TO_KHZ(start), \
392         .freq_range.end_freq_khz = MHZ_TO_KHZ(end), \
393         .freq_range.max_bandwidth_khz = MHZ_TO_KHZ(bw), \
394         .power_rule.max_antenna_gain = DBI_TO_MBI(gain), \
395         .power_rule.max_eirp = DBM_TO_MBM(eirp), \
396         .flags = reg_flags, \
397         }
398
399 struct mesh_config {
400         /* Timeouts in ms */
401         /* Mesh plink management parameters */
402         u16 dot11MeshRetryTimeout;
403         u16 dot11MeshConfirmTimeout;
404         u16 dot11MeshHoldingTimeout;
405         u16 dot11MeshMaxPeerLinks;
406         u8  dot11MeshMaxRetries;
407         u8  dot11MeshTTL;
408         bool auto_open_plinks;
409         /* HWMP parameters */
410         u8  dot11MeshHWMPmaxPREQretries;
411         u32 path_refresh_time;
412         u16 min_discovery_timeout;
413         u32 dot11MeshHWMPactivePathTimeout;
414         u16 dot11MeshHWMPpreqMinInterval;
415         u16 dot11MeshHWMPnetDiameterTraversalTime;
416 };
417
418 /**
419  * struct ieee80211_txq_params - TX queue parameters
420  * @queue: TX queue identifier (NL80211_TXQ_Q_*)
421  * @txop: Maximum burst time in units of 32 usecs, 0 meaning disabled
422  * @cwmin: Minimum contention window [a value of the form 2^n-1 in the range
423  *      1..32767]
424  * @cwmax: Maximum contention window [a value of the form 2^n-1 in the range
425  *      1..32767]
426  * @aifs: Arbitration interframe space [0..255]
427  */
428 struct ieee80211_txq_params {
429         enum nl80211_txq_q queue;
430         u16 txop;
431         u16 cwmin;
432         u16 cwmax;
433         u8 aifs;
434 };
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  */
450 struct mgmt_extra_ie_params {
451         u8 subtype;
452         u8 *ies;
453         int ies_len;
454 };
455
456 /* from net/wireless.h */
457 struct wiphy;
458
459 /* from net/ieee80211.h */
460 struct ieee80211_channel;
461
462 /**
463  * struct cfg80211_ops - backend description for wireless configuration
464  *
465  * This struct is registered by fullmac card drivers and/or wireless stacks
466  * in order to handle configuration requests on their interfaces.
467  *
468  * All callbacks except where otherwise noted should return 0
469  * on success or a negative error code.
470  *
471  * All operations are currently invoked under rtnl for consistency with the
472  * wireless extensions but this is subject to reevaluation as soon as this
473  * code is used more widely and we have a first user without wext.
474  *
475  * @add_virtual_intf: create a new virtual interface with the given name,
476  *      must set the struct wireless_dev's iftype.
477  *
478  * @del_virtual_intf: remove the virtual interface determined by ifindex.
479  *
480  * @change_virtual_intf: change type/configuration of virtual interface,
481  *      keep the struct wireless_dev's iftype updated.
482  *
483  * @add_key: add a key with the given parameters. @mac_addr will be %NULL
484  *      when adding a group key.
485  *
486  * @get_key: get information about the key with the given parameters.
487  *      @mac_addr will be %NULL when requesting information for a group
488  *      key. All pointers given to the @callback function need not be valid
489  *      after it returns.
490  *
491  * @del_key: remove a key given the @mac_addr (%NULL for a group key)
492  *      and @key_index
493  *
494  * @set_default_key: set the default key on an interface
495  *
496  * @set_default_mgmt_key: set the default management frame key on an interface
497  *
498  * @add_beacon: Add a beacon with given parameters, @head, @interval
499  *      and @dtim_period will be valid, @tail is optional.
500  * @set_beacon: Change the beacon parameters for an access point mode
501  *      interface. This should reject the call when no beacon has been
502  *      configured.
503  * @del_beacon: Remove beacon configuration and stop sending the beacon.
504  *
505  * @add_station: Add a new station.
506  *
507  * @del_station: Remove a station; @mac may be NULL to remove all stations.
508  *
509  * @change_station: Modify a given station.
510  *
511  * @get_mesh_params: Put the current mesh parameters into *params
512  *
513  * @set_mesh_params: Set mesh parameters.
514  *      The mask is a bitfield which tells us which parameters to
515  *      set, and which to leave alone.
516  *
517  * @set_mesh_cfg: set mesh parameters (by now, just mesh id)
518  *
519  * @change_bss: Modify parameters for a given BSS.
520  *
521  * @set_txq_params: Set TX queue parameters
522  *
523  * @set_channel: Set channel
524  *
525  * @set_mgmt_extra_ie: Set extra IE data for management frames
526  */
527 struct cfg80211_ops {
528         int     (*add_virtual_intf)(struct wiphy *wiphy, char *name,
529                                     enum nl80211_iftype type, u32 *flags,
530                                     struct vif_params *params);
531         int     (*del_virtual_intf)(struct wiphy *wiphy, int ifindex);
532         int     (*change_virtual_intf)(struct wiphy *wiphy, int ifindex,
533                                        enum nl80211_iftype type, u32 *flags,
534                                        struct vif_params *params);
535
536         int     (*add_key)(struct wiphy *wiphy, struct net_device *netdev,
537                            u8 key_index, u8 *mac_addr,
538                            struct key_params *params);
539         int     (*get_key)(struct wiphy *wiphy, struct net_device *netdev,
540                            u8 key_index, u8 *mac_addr, void *cookie,
541                            void (*callback)(void *cookie, struct key_params*));
542         int     (*del_key)(struct wiphy *wiphy, struct net_device *netdev,
543                            u8 key_index, u8 *mac_addr);
544         int     (*set_default_key)(struct wiphy *wiphy,
545                                    struct net_device *netdev,
546                                    u8 key_index);
547         int     (*set_default_mgmt_key)(struct wiphy *wiphy,
548                                         struct net_device *netdev,
549                                         u8 key_index);
550
551         int     (*add_beacon)(struct wiphy *wiphy, struct net_device *dev,
552                               struct beacon_parameters *info);
553         int     (*set_beacon)(struct wiphy *wiphy, struct net_device *dev,
554                               struct beacon_parameters *info);
555         int     (*del_beacon)(struct wiphy *wiphy, struct net_device *dev);
556
557
558         int     (*add_station)(struct wiphy *wiphy, struct net_device *dev,
559                                u8 *mac, struct station_parameters *params);
560         int     (*del_station)(struct wiphy *wiphy, struct net_device *dev,
561                                u8 *mac);
562         int     (*change_station)(struct wiphy *wiphy, struct net_device *dev,
563                                   u8 *mac, struct station_parameters *params);
564         int     (*get_station)(struct wiphy *wiphy, struct net_device *dev,
565                                u8 *mac, struct station_info *sinfo);
566         int     (*dump_station)(struct wiphy *wiphy, struct net_device *dev,
567                                int idx, u8 *mac, struct station_info *sinfo);
568
569         int     (*add_mpath)(struct wiphy *wiphy, struct net_device *dev,
570                                u8 *dst, u8 *next_hop);
571         int     (*del_mpath)(struct wiphy *wiphy, struct net_device *dev,
572                                u8 *dst);
573         int     (*change_mpath)(struct wiphy *wiphy, struct net_device *dev,
574                                   u8 *dst, u8 *next_hop);
575         int     (*get_mpath)(struct wiphy *wiphy, struct net_device *dev,
576                                u8 *dst, u8 *next_hop,
577                                struct mpath_info *pinfo);
578         int     (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev,
579                                int idx, u8 *dst, u8 *next_hop,
580                                struct mpath_info *pinfo);
581         int     (*get_mesh_params)(struct wiphy *wiphy,
582                                 struct net_device *dev,
583                                 struct mesh_config *conf);
584         int     (*set_mesh_params)(struct wiphy *wiphy,
585                                 struct net_device *dev,
586                                 const struct mesh_config *nconf, u32 mask);
587         int     (*change_bss)(struct wiphy *wiphy, struct net_device *dev,
588                               struct bss_parameters *params);
589
590         int     (*set_txq_params)(struct wiphy *wiphy,
591                                   struct ieee80211_txq_params *params);
592
593         int     (*set_channel)(struct wiphy *wiphy,
594                                struct ieee80211_channel *chan,
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);
600 };
601
602 /* temporary wext handlers */
603 int cfg80211_wext_giwname(struct net_device *dev,
604                           struct iw_request_info *info,
605                           char *name, char *extra);
606 int cfg80211_wext_siwmode(struct net_device *dev, struct iw_request_info *info,
607                           u32 *mode, char *extra);
608 int cfg80211_wext_giwmode(struct net_device *dev, struct iw_request_info *info,
609                           u32 *mode, char *extra);
610
611 #endif /* __NET_CFG80211_H */