Please note: This project is no longer active. The website is kept online for historic purposes only.
If you´re looking for a Linux driver for your Atheros WLAN device, you should continue here .

Ticket #1452: madwifi-wireless_header.diff

File madwifi-wireless_header.diff, 43.8 kB (added by mentor, 15 years ago)
  • tools/athkey.c

    old new  
    4545#include <sys/ioctl.h> 
    4646#include <sys/socket.h> 
    4747 
     48#include <linux/wireless.h> 
     49 
    4850#include <stdio.h> 
    4951#include <stdlib.h> 
    5052#include <string.h> 
     
    5456 
    5557#include <include/compat.h> 
    5658 
    57 #include "wireless_copy.h" 
    5859#include "net80211/ieee80211.h" 
    5960#include "net80211/ieee80211_crypto.h" 
    6061#include "net80211/ieee80211_ioctl.h" 
  • tools/wlanconfig.c

    old new  
    4646#include <sys/ioctl.h> 
    4747#include <sys/socket.h> 
    4848 
     49#include <linux/wireless.h> 
     50 
    4951#include <unistd.h> 
    5052#include <stdio.h> 
    5153#include <stdlib.h> 
     
    5759 
    5860#include <include/compat.h> 
    5961 
    60 #include "wireless_copy.h" 
    6162#include "net80211/ieee80211.h" 
    6263#include "net80211/ieee80211_crypto.h" 
    6364#include "net80211/ieee80211_ioctl.h" 
  • tools/athchans.c

    old new  
    4545#include <sys/ioctl.h> 
    4646#include <sys/socket.h> 
    4747 
     48#include <linux/wireless.h> 
     49 
    4850#include <stdio.h> 
    4951#include <stdlib.h> 
    5052#include <string.h> 
     
    5456 
    5557#include <include/compat.h> 
    5658 
    57 #include "wireless_copy.h" 
    5859#include "net80211/ieee80211.h" 
    5960#include "net80211/ieee80211_crypto.h" 
    6061#include "net80211/ieee80211_ioctl.h" 
  • tools/80211stats.c

    old new  
    4646#include <sys/socket.h> 
    4747#include <netinet/ether.h> 
    4848 
     49#include <linux/wireless.h> 
     50 
    4951#include <stdio.h> 
    5052#include <stdlib.h> 
    5153#include <string.h> 
     
    5557 
    5658#include <include/compat.h> 
    5759 
    58 #include "wireless_copy.h" 
    5960#include "net80211/ieee80211.h" 
    6061#include "net80211/ieee80211_crypto.h" 
    6162#include "net80211/ieee80211_ioctl.h" 
  • tools/athstats.c

    old new  
    4848#include <sys/ioctl.h> 
    4949#include <sys/socket.h> 
    5050 
     51#include <linux/wireless.h> 
     52 
    5153#include <stdio.h> 
    5254#include <signal.h> 
    5355#include <string.h> 
     
    6062#define OPT_AH_H <stdio.h> 
    6163#include "ah_desc.h" 
    6264 
    63 #include "wireless_copy.h" 
    6465#include "if_athioctl.h" 
    6566 
    6667static const struct { 
  • tools/wireless_copy.h

    old new  
    1 /* This is based on Linux Wireless Extensions header file from WIRELESS_EXT 18. 
    2  * I have just removed kernel related headers and added some typedefs etc. to 
    3  * make this easier to include into user space programs. 
    4  * Jouni Malinen, 2005-03-12. 
    5  * 
    6  * $Id$ 
    7  */ 
    8  
    9  
    10 /* 
    11  * This file define a set of standard wireless extensions 
    12  * 
    13  * Version :    19      18.3.05 
    14  * 
    15  * Authors :    Jean Tourrilhes - HPL - <jt@hpl.hp.com> 
    16  * Copyright (c) 1997-2005 Jean Tourrilhes, All Rights Reserved. 
    17  */ 
    18  
    19 #ifndef _LINUX_WIRELESS_H 
    20 #define _LINUX_WIRELESS_H 
    21  
    22 /************************** DOCUMENTATION **************************/ 
    23 /* 
    24  * Initial APIs (1996 -> onward) : 
    25  * ----------------------------- 
    26  * Basically, the wireless extensions are for now a set of standard ioctl 
    27  * call + /proc/net/wireless 
    28  * 
    29  * The entry /proc/net/wireless give statistics and information on the 
    30  * driver. 
    31  * This is better than having each driver having its entry because 
    32  * its centralised and we may remove the driver module safely. 
    33  * 
    34  * Ioctl are used to configure the driver and issue commands.  This is 
    35  * better than command line options of insmod because we may want to 
    36  * change dynamically (while the driver is running) some parameters. 
    37  * 
    38  * The ioctl mechanimsm are copied from standard devices ioctl. 
    39  * We have the list of command plus a structure descibing the 
    40  * data exchanged... 
    41  * Note that to add these ioctl, I was obliged to modify : 
    42  *      # net/core/dev.c (two place + add include) 
    43  *      # net/ipv4/af_inet.c (one place + add include) 
    44  * 
    45  * /proc/net/wireless is a copy of /proc/net/dev. 
    46  * We have a structure for data passed from the driver to /proc/net/wireless 
    47  * Too add this, I've modified : 
    48  *      # net/core/dev.c (two other places) 
    49  *      # include/linux/netdevice.h (one place) 
    50  *      # include/linux/proc_fs.h (one place) 
    51  * 
    52  * New driver API (2002 -> onward) : 
    53  * ------------------------------- 
    54  * This file is only concerned with the user space API and common definitions. 
    55  * The new driver API is defined and documented in : 
    56  *      # include/net/iw_handler.h 
    57  * 
    58  * Note as well that /proc/net/wireless implementation has now moved in : 
    59  *      # net/core/wireless.c 
    60  * 
    61  * Wireless Events (2002 -> onward) : 
    62  * -------------------------------- 
    63  * Events are defined at the end of this file, and implemented in : 
    64  *      # net/core/wireless.c 
    65  * 
    66  * Other comments : 
    67  * -------------- 
    68  * Do not add here things that are redundant with other mechanisms 
    69  * (drivers init, ifconfig, /proc/net/dev, ...) and with are not 
    70  * wireless specific. 
    71  * 
    72  * These wireless extensions are not magic : each driver has to provide 
    73  * support for them... 
    74  * 
    75  * IMPORTANT NOTE : As everything in the kernel, this is very much a 
    76  * work in progress. Contact me if you have ideas of improvements... 
    77  */ 
    78  
    79 /***************************** INCLUDES *****************************/ 
    80  
    81  /* jkm - replaced linux headers with C library headers, added typedefs */ 
    82 #if 0 
    83 /* To minimise problems in user space, I might remove those headers 
    84  * at some point. Jean II */ 
    85 #include <linux/types.h>                /* for "caddr_t" et al          */ 
    86 #include <linux/socket.h>               /* for "struct sockaddr" et al  */ 
    87 #include <linux/if.h>                   /* for IFNAMSIZ and co... */ 
    88 #else 
    89 #include <sys/types.h> 
    90 #include <net/if.h> 
    91 typedef __uint32_t __u32; 
    92 typedef __int32_t __s32; 
    93 typedef __uint16_t __u16; 
    94 typedef __int16_t __s16; 
    95 typedef __uint8_t __u8; 
    96 #ifndef __user 
    97 #define __user 
    98 #endif /* __user */ 
    99 #endif 
    100  
    101 /***************************** VERSION *****************************/ 
    102 /* 
    103  * This constant is used to know the availability of the wireless 
    104  * extensions and to know which version of wireless extensions it is 
    105  * (there is some stuff that will be added in the future...) 
    106  * I just plan to increment with each new version. 
    107  */ 
    108 #define WIRELESS_EXT    19 
    109  
    110 /* 
    111  * Changes : 
    112  * 
    113  * V2 to V3 
    114  * -------- 
    115  *      Alan Cox start some incompatibles changes. I've integrated a bit more. 
    116  *      - Encryption renamed to Encode to avoid US regulation problems 
    117  *      - Frequency changed from float to struct to avoid problems on old 386 
    118  * 
    119  * V3 to V4 
    120  * -------- 
    121  *      - Add sensitivity 
    122  * 
    123  * V4 to V5 
    124  * -------- 
    125  *      - Missing encoding definitions in range 
    126  *      - Access points stuff 
    127  * 
    128  * V5 to V6 
    129  * -------- 
    130  *      - 802.11 support (ESSID ioctls) 
    131  * 
    132  * V6 to V7 
    133  * -------- 
    134  *      - define IW_ESSID_MAX_SIZE and IW_MAX_AP 
    135  * 
    136  * V7 to V8 
    137  * -------- 
    138  *      - Changed my e-mail address 
    139  *      - More 802.11 support (nickname, rate, rts, frag) 
    140  *      - List index in frequencies 
    141  * 
    142  * V8 to V9 
    143  * -------- 
    144  *      - Support for 'mode of operation' (ad-hoc, managed...) 
    145  *      - Support for unicast and multicast power saving 
    146  *      - Change encoding to support larger tokens (>64 bits) 
    147  *      - Updated iw_params (disable, flags) and use it for NWID 
    148  *      - Extracted iw_point from iwreq for clarity 
    149  * 
    150  * V9 to V10 
    151  * --------- 
    152  *      - Add PM capability to range structure 
    153  *      - Add PM modifier : MAX/MIN/RELATIVE 
    154  *      - Add encoding option : IW_ENCODE_NOKEY 
    155  *      - Add TxPower ioctls (work like TxRate) 
    156  * 
    157  * V10 to V11 
    158  * ---------- 
    159  *      - Add WE version in range (help backward/forward compatibility) 
    160  *      - Add retry ioctls (work like PM) 
    161  * 
    162  * V11 to V12 
    163  * ---------- 
    164  *      - Add SIOCSIWSTATS to get /proc/net/wireless programatically 
    165  *      - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space 
    166  *      - Add new statistics (frag, retry, beacon) 
    167  *      - Add average quality (for user space calibration) 
    168  * 
    169  * V12 to V13 
    170  * ---------- 
    171  *      - Document creation of new driver API. 
    172  *      - Extract union iwreq_data from struct iwreq (for new driver API). 
    173  *      - Rename SIOCSIWNAME as SIOCSIWCOMMIT 
    174  * 
    175  * V13 to V14 
    176  * ---------- 
    177  *      - Wireless Events support : define struct iw_event 
    178  *      - Define additional specific event numbers 
    179  *      - Add "addr" and "param" fields in union iwreq_data 
    180  *      - AP scanning stuff (SIOCSIWSCAN and friends) 
    181  * 
    182  * V14 to V15 
    183  * ---------- 
    184  *      - Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg 
    185  *      - Make struct iw_freq signed (both m & e), add explicit padding 
    186  *      - Add IWEVCUSTOM for driver specific event/scanning token 
    187  *      - Add IW_MAX_GET_SPY for driver returning a lot of addresses 
    188  *      - Add IW_TXPOW_RANGE for range of Tx Powers 
    189  *      - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points 
    190  *      - Add IW_MODE_MONITOR for passive monitor 
    191  * 
    192  * V15 to V16 
    193  * ---------- 
    194  *      - Increase the number of bitrates in iw_range to 32 (for 802.11g) 
    195  *      - Increase the number of frequencies in iw_range to 32 (for 802.11b+a) 
    196  *      - Reshuffle struct iw_range for increases, add filler 
    197  *      - Increase IW_MAX_AP to 64 for driver returning a lot of addresses 
    198  *      - Remove IW_MAX_GET_SPY because conflict with enhanced spy support 
    199  *      - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy" 
    200  *      - Add IW_ENCODE_TEMP and iw_range->encoding_login_index 
    201  * 
    202  * V16 to V17 
    203  * ---------- 
    204  *      - Add flags to frequency -> auto/fixed 
    205  *      - Document (struct iw_quality *)->updated, add new flags (INVALID) 
    206  *      - Wireless Event capability in struct iw_range 
    207  *      - Add support for relative TxPower (yick !) 
    208  * 
    209  * V17 to V18 (From Jouni Malinen <jkmaline@cc.hut.fi>) 
    210  * ---------- 
    211  *      - Add support for WPA/WPA2 
    212  *      - Add extended encoding configuration (SIOCSIWENCODEEXT and 
    213  *        SIOCGIWENCODEEXT) 
    214  *      - Add SIOCSIWGENIE/SIOCGIWGENIE 
    215  *      - Add SIOCSIWMLME 
    216  *      - Add SIOCSIWPMKSA 
    217  *      - Add struct iw_range bit field for supported encoding capabilities 
    218  *      - Add optional scan request parameters for SIOCSIWSCAN 
    219  *      - Add SIOCSIWAUTH/SIOCGIWAUTH for setting authentication and WPA 
    220  *        related parameters (extensible up to 4096 parameter values) 
    221  *      - Add wireless events: IWEVGENIE, IWEVMICHAELMICFAILURE, 
    222  *        IWEVASSOCREQIE, IWEVASSOCRESPIE, IWEVPMKIDCAND 
    223  * 
    224  * V18 to V19 
    225  * ---------- 
    226  *      - Remove (struct iw_point *)->pointer from events and streams 
    227  *      - Remove header includes to help user space 
    228  *      - Increase IW_ENCODING_TOKEN_MAX from 32 to 64 
    229  *      - Add IW_QUAL_ALL_UPDATED and IW_QUAL_ALL_INVALID macros 
    230  *      - Add explicit flag to tell stats are in dBm : IW_QUAL_DBM 
    231  *      - Add IW_IOCTL_IDX() and IW_EVENT_IDX() macros 
    232  */ 
    233  
    234 /**************************** CONSTANTS ****************************/ 
    235  
    236 /* -------------------------- IOCTL LIST -------------------------- */ 
    237  
    238 /* Wireless Identification */ 
    239 #define SIOCSIWCOMMIT   0x8B00          /* Commit pending changes to driver */ 
    240 #define SIOCGIWNAME     0x8B01          /* get name == wireless protocol */ 
    241 /* SIOCGIWNAME is used to verify the presence of Wireless Extensions. 
    242  * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"... 
    243  * Don't put the name of your driver there, it's useless. */ 
    244  
    245 /* Basic operations */ 
    246 #define SIOCSIWNWID     0x8B02          /* set network id (pre-802.11) */ 
    247 #define SIOCGIWNWID     0x8B03          /* get network id (the cell) */ 
    248 #define SIOCSIWFREQ     0x8B04          /* set channel/frequency (Hz) */ 
    249 #define SIOCGIWFREQ     0x8B05          /* get channel/frequency (Hz) */ 
    250 #define SIOCSIWMODE     0x8B06          /* set operation mode */ 
    251 #define SIOCGIWMODE     0x8B07          /* get operation mode */ 
    252 #define SIOCSIWSENS     0x8B08          /* set sensitivity (dBm) */ 
    253 #define SIOCGIWSENS     0x8B09          /* get sensitivity (dBm) */ 
    254  
    255 /* Informative stuff */ 
    256 #define SIOCSIWRANGE    0x8B0A          /* Unused */ 
    257 #define SIOCGIWRANGE    0x8B0B          /* Get range of parameters */ 
    258 #define SIOCSIWPRIV     0x8B0C          /* Unused */ 
    259 #define SIOCGIWPRIV     0x8B0D          /* get private ioctl interface info */ 
    260 #define SIOCSIWSTATS    0x8B0E          /* Unused */ 
    261 #define SIOCGIWSTATS    0x8B0F          /* Get /proc/net/wireless stats */ 
    262 /* SIOCGIWSTATS is strictly used between user space and the kernel, and 
    263  * is never passed to the driver (i.e. the driver will never see it). */ 
    264  
    265 /* Spy support (statistics per MAC address - used for Mobile IP support) */ 
    266 #define SIOCSIWSPY      0x8B10          /* set spy addresses */ 
    267 #define SIOCGIWSPY      0x8B11          /* get spy info (quality of link) */ 
    268 #define SIOCSIWTHRSPY   0x8B12          /* set spy threshold (spy event) */ 
    269 #define SIOCGIWTHRSPY   0x8B13          /* get spy threshold */ 
    270  
    271 /* Access Point manipulation */ 
    272 #define SIOCSIWAP       0x8B14          /* set access point MAC addresses */ 
    273 #define SIOCGIWAP       0x8B15          /* get access point MAC addresses */ 
    274 #define SIOCGIWAPLIST   0x8B17          /* Deprecated in favor of scanning */ 
    275 #define SIOCSIWSCAN     0x8B18          /* trigger scanning (list cells) */ 
    276 #define SIOCGIWSCAN     0x8B19          /* get scanning results */ 
    277  
    278 /* 802.11 specific support */ 
    279 #define SIOCSIWESSID    0x8B1A          /* set ESSID (network name) */ 
    280 #define SIOCGIWESSID    0x8B1B          /* get ESSID */ 
    281 #define SIOCSIWNICKN    0x8B1C          /* set node name/nickname */ 
    282 #define SIOCGIWNICKN    0x8B1D          /* get node name/nickname */ 
    283 /* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit 
    284  * within the 'iwreq' structure, so we need to use the 'data' member to 
    285  * point to a string in user space, like it is done for RANGE... */ 
    286  
    287 /* Other parameters useful in 802.11 and some other devices */ 
    288 #define SIOCSIWRATE     0x8B20          /* set default bit rate (bps) */ 
    289 #define SIOCGIWRATE     0x8B21          /* get default bit rate (bps) */ 
    290 #define SIOCSIWRTS      0x8B22          /* set RTS/CTS threshold (bytes) */ 
    291 #define SIOCGIWRTS      0x8B23          /* get RTS/CTS threshold (bytes) */ 
    292 #define SIOCSIWFRAG     0x8B24          /* set fragmentation thr (bytes) */ 
    293 #define SIOCGIWFRAG     0x8B25          /* get fragmentation thr (bytes) */ 
    294 #define SIOCSIWTXPOW    0x8B26          /* set transmit power (dBm) */ 
    295 #define SIOCGIWTXPOW    0x8B27          /* get transmit power (dBm) */ 
    296 #define SIOCSIWRETRY    0x8B28          /* set retry limits and lifetime */ 
    297 #define SIOCGIWRETRY    0x8B29          /* get retry limits and lifetime */ 
    298  
    299 /* Encoding stuff (scrambling, hardware security, WEP...) */ 
    300 #define SIOCSIWENCODE   0x8B2A          /* set encoding token & mode */ 
    301 #define SIOCGIWENCODE   0x8B2B          /* get encoding token & mode */ 
    302 /* Power saving stuff (power management, unicast and multicast) */ 
    303 #define SIOCSIWPOWER    0x8B2C          /* set Power Management settings */ 
    304 #define SIOCGIWPOWER    0x8B2D          /* get Power Management settings */ 
    305  
    306 /* WPA : Generic IEEE 802.11 informatiom element (e.g., for WPA/RSN/WMM). 
    307  * This ioctl uses struct iw_point and data buffer that includes IE id and len 
    308  * fields. More than one IE may be included in the request. Setting the generic 
    309  * IE to empty buffer (len=0) removes the generic IE from the driver. Drivers 
    310  * are allowed to generate their own WPA/RSN IEs, but in these cases, drivers 
    311  * are required to report the used IE as a wireless event, e.g., when 
    312  * associating with an AP. */ 
    313 #define SIOCSIWGENIE    0x8B30          /* set generic IE */ 
    314 #define SIOCGIWGENIE    0x8B31          /* get generic IE */ 
    315  
    316 /* WPA : IEEE 802.11 MLME requests */ 
    317 #define SIOCSIWMLME     0x8B16          /* request MLME operation; uses 
    318                                          * struct iw_mlme */ 
    319 /* WPA : Authentication mode parameters */ 
    320 #define SIOCSIWAUTH     0x8B32          /* set authentication mode params */ 
    321 #define SIOCGIWAUTH     0x8B33          /* get authentication mode params */ 
    322  
    323 /* WPA : Extended version of encoding configuration */ 
    324 #define SIOCSIWENCODEEXT 0x8B34         /* set encoding token & mode */ 
    325 #define SIOCGIWENCODEEXT 0x8B35         /* get encoding token & mode */ 
    326  
    327 /* WPA2 : PMKSA cache management */ 
    328 #define SIOCSIWPMKSA    0x8B36          /* PMKSA cache operation */ 
    329  
    330 /* -------------------- DEV PRIVATE IOCTL LIST -------------------- */ 
    331  
    332 /* These 32 ioctl are wireless device private, for 16 commands. 
    333  * Each driver is free to use them for whatever purpose it chooses, 
    334  * however the driver *must* export the description of those ioctls 
    335  * with SIOCGIWPRIV and *must* use arguments as defined below. 
    336  * If you don't follow those rules, DaveM is going to hate you (reason : 
    337  * it make mixed 32/64bit operation impossible). 
    338  */ 
    339 #define SIOCIWFIRSTPRIV 0x8BE0 
    340 #define SIOCIWLASTPRIV  0x8BFF 
    341 /* Previously, we were using SIOCDEVPRIVATE, but we now have our 
    342  * separate range because of collisions with other tools such as 
    343  * 'mii-tool'. 
    344  * We now have 32 commands, so a bit more space ;-). 
    345  * Also, all 'odd' commands are only usable by root and don't return the 
    346  * content of ifr/iwr to user (but you are not obliged to use the set/get 
    347  * convention, just use every other two command). More details in iwpriv.c. 
    348  * And I repeat : you are not forced to use them with iwpriv, but you 
    349  * must be compliant with it. 
    350  */ 
    351  
    352 /* ------------------------- IOCTL STUFF ------------------------- */ 
    353  
    354 /* The first and the last (range) */ 
    355 #define SIOCIWFIRST     0x8B00 
    356 #define SIOCIWLAST      SIOCIWLASTPRIV          /* 0x8BFF */ 
    357 #define IW_IOCTL_IDX(cmd)       ((cmd) - SIOCIWFIRST) 
    358  
    359 /* Even : get (world access), odd : set (root access) */ 
    360 #define IW_IS_SET(cmd)  (!((cmd) & 0x1)) 
    361 #define IW_IS_GET(cmd)  ((cmd) & 0x1) 
    362  
    363 /* ----------------------- WIRELESS EVENTS ----------------------- */ 
    364 /* Those are *NOT* ioctls, do not issue request on them !!! */ 
    365 /* Most events use the same identifier as ioctl requests */ 
    366  
    367 #define IWEVTXDROP      0x8C00          /* Packet dropped to excessive retry */ 
    368 #define IWEVQUAL        0x8C01          /* Quality part of statistics (scan) */ 
    369 #define IWEVCUSTOM      0x8C02          /* Driver specific ascii string */ 
    370 #define IWEVREGISTERED  0x8C03          /* Discovered a new node (AP mode) */ 
    371 #define IWEVEXPIRED     0x8C04          /* Expired a node (AP mode) */ 
    372 #define IWEVGENIE       0x8C05          /* Generic IE (WPA, RSN, WMM, ..) 
    373                                          * (scan results); This includes id and 
    374                                          * length fields. One IWEVGENIE may 
    375                                          * contain more than one IE. Scan 
    376                                          * results may contain one or more 
    377                                          * IWEVGENIE events. */ 
    378 #define IWEVMICHAELMICFAILURE 0x8C06    /* Michael MIC failure 
    379                                          * (struct iw_michaelmicfailure) 
    380                                          */ 
    381 #define IWEVASSOCREQIE  0x8C07          /* IEs used in (Re)Association Request. 
    382                                          * The data includes id and length 
    383                                          * fields and may contain more than one 
    384                                          * IE. This event is required in 
    385                                          * Managed mode if the driver 
    386                                          * generates its own WPA/RSN IE. This 
    387                                          * should be sent just before 
    388                                          * IWEVREGISTERED event for the 
    389                                          * association. */ 
    390 #define IWEVASSOCRESPIE 0x8C08          /* IEs used in (Re)Association 
    391                                          * Response. The data includes id and 
    392                                          * length fields and may contain more 
    393                                          * than one IE. This may be sent 
    394                                          * between IWEVASSOCREQIE and 
    395                                          * IWEVREGISTERED events for the 
    396                                          * association. */ 
    397 #define IWEVPMKIDCAND   0x8C09          /* PMKID candidate for RSN 
    398                                          * pre-authentication 
    399                                          * (struct iw_pmkid_cand) */ 
    400  
    401 #define IWEVFIRST       0x8C00 
    402 #define IW_EVENT_IDX(cmd)       ((cmd) - IWEVFIRST) 
    403  
    404 /* ------------------------- PRIVATE INFO ------------------------- */ 
    405 /* 
    406  * The following is used with SIOCGIWPRIV. It allow a driver to define 
    407  * the interface (name, type of data) for its private ioctl. 
    408  * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV 
    409  */ 
    410  
    411 #define IW_PRIV_TYPE_MASK       0x7000  /* Type of arguments */ 
    412 #define IW_PRIV_TYPE_NONE       0x0000 
    413 #define IW_PRIV_TYPE_BYTE       0x1000  /* Char as number */ 
    414 #define IW_PRIV_TYPE_CHAR       0x2000  /* Char as character */ 
    415 #define IW_PRIV_TYPE_INT        0x4000  /* 32 bits int */ 
    416 #define IW_PRIV_TYPE_FLOAT      0x5000  /* struct iw_freq */ 
    417 #define IW_PRIV_TYPE_ADDR       0x6000  /* struct sockaddr */ 
    418  
    419 #define IW_PRIV_SIZE_FIXED      0x0800  /* Variable or fixed number of args */ 
    420  
    421 #define IW_PRIV_SIZE_MASK       0x07FF  /* Max number of those args */ 
    422  
    423 /* 
    424  * Note : if the number of args is fixed and the size < 16 octets, 
    425  * instead of passing a pointer we will put args in the iwreq struct... 
    426  */ 
    427  
    428 /* ----------------------- OTHER CONSTANTS ----------------------- */ 
    429  
    430 /* Maximum frequencies in the range struct */ 
    431 #define IW_MAX_FREQUENCIES      32 
    432 /* Note : if you have something like 80 frequencies, 
    433  * don't increase this constant and don't fill the frequency list. 
    434  * The user will be able to set by channel anyway... */ 
    435  
    436 /* Maximum bit rates in the range struct */ 
    437 #define IW_MAX_BITRATES         32 
    438  
    439 /* Maximum tx powers in the range struct */ 
    440 #define IW_MAX_TXPOWER          8 
    441 /* Note : if you more than 8 TXPowers, just set the max and min or 
    442  * a few of them in the struct iw_range. */ 
    443  
    444 /* Maximum of address that you may set with SPY */ 
    445 #define IW_MAX_SPY              8 
    446  
    447 /* Maximum of address that you may get in the 
    448    list of access points in range */ 
    449 #define IW_MAX_AP               64 
    450  
    451 /* Maximum size of the ESSID and NICKN strings */ 
    452 #define IW_ESSID_MAX_SIZE       32 
    453  
    454 /* Modes of operation */ 
    455 #define IW_MODE_AUTO    0       /* Let the driver decides */ 
    456 #define IW_MODE_ADHOC   1       /* Single cell network */ 
    457 #define IW_MODE_INFRA   2       /* Multi cell network, roaming, ... */ 
    458 #define IW_MODE_MASTER  3       /* Synchronisation master or Access Point */ 
    459 #define IW_MODE_REPEAT  4       /* Wireless Repeater (forwarder) */ 
    460 #define IW_MODE_SECOND  5       /* Secondary master/repeater (backup) */ 
    461 #define IW_MODE_MONITOR 6       /* Passive monitor (listen only) */ 
    462  
    463 /* Statistics flags (bitmask in updated) */ 
    464 #define IW_QUAL_QUAL_UPDATED    0x01    /* Value was updated since last read */ 
    465 #define IW_QUAL_LEVEL_UPDATED   0x02 
    466 #define IW_QUAL_NOISE_UPDATED   0x04 
    467 #define IW_QUAL_ALL_UPDATED     0x07 
    468 #define IW_QUAL_DBM             0x08    /* Level + Noise are dBm */ 
    469 #define IW_QUAL_QUAL_INVALID    0x10    /* Driver doesn't provide value */ 
    470 #define IW_QUAL_LEVEL_INVALID   0x20 
    471 #define IW_QUAL_NOISE_INVALID   0x40 
    472 #define IW_QUAL_ALL_INVALID     0x70 
    473  
    474 /* Frequency flags */ 
    475 #define IW_FREQ_AUTO            0x00    /* Let the driver decides */ 
    476 #define IW_FREQ_FIXED           0x01    /* Force a specific value */ 
    477  
    478 /* Maximum number of size of encoding token available 
    479  * they are listed in the range structure */ 
    480 #define IW_MAX_ENCODING_SIZES   8 
    481  
    482 /* Maximum size of the encoding token in bytes */ 
    483 #define IW_ENCODING_TOKEN_MAX   64      /* 512 bits (for now) */ 
    484  
    485 /* Flags for encoding (along with the token) */ 
    486 #define IW_ENCODE_INDEX         0x00FF  /* Token index (if needed) */ 
    487 #define IW_ENCODE_FLAGS         0xFF00  /* Flags defined below */ 
    488 #define IW_ENCODE_MODE          0xF000  /* Modes defined below */ 
    489 #define IW_ENCODE_DISABLED      0x8000  /* Encoding disabled */ 
    490 #define IW_ENCODE_ENABLED       0x0000  /* Encoding enabled */ 
    491 #define IW_ENCODE_RESTRICTED    0x4000  /* Refuse non-encoded packets */ 
    492 #define IW_ENCODE_OPEN          0x2000  /* Accept non-encoded packets */ 
    493 #define IW_ENCODE_NOKEY         0x0800  /* Key is write only, so not present */ 
    494 #define IW_ENCODE_TEMP          0x0400  /* Temporary key */ 
    495  
    496 /* Power management flags available (along with the value, if any) */ 
    497 #define IW_POWER_ON             0x0000  /* No details... */ 
    498 #define IW_POWER_TYPE           0xF000  /* Type of parameter */ 
    499 #define IW_POWER_PERIOD         0x1000  /* Value is a period/duration of  */ 
    500 #define IW_POWER_TIMEOUT        0x2000  /* Value is a timeout (to go asleep) */ 
    501 #define IW_POWER_MODE           0x0F00  /* Power Management mode */ 
    502 #define IW_POWER_UNICAST_R      0x0100  /* Receive only unicast messages */ 
    503 #define IW_POWER_MULTICAST_R    0x0200  /* Receive only multicast messages */ 
    504 #define IW_POWER_ALL_R          0x0300  /* Receive all messages though PM */ 
    505 #define IW_POWER_FORCE_S        0x0400  /* Force PM procedure for sending unicast */ 
    506 #define IW_POWER_REPEATER       0x0800  /* Repeat broadcast messages in PM period */ 
    507 #define IW_POWER_MODIFIER       0x000F  /* Modify a parameter */ 
    508 #define IW_POWER_MIN            0x0001  /* Value is a minimum  */ 
    509 #define IW_POWER_MAX            0x0002  /* Value is a maximum */ 
    510 #define IW_POWER_RELATIVE       0x0004  /* Value is not in seconds/ms/us */ 
    511  
    512 /* Transmit Power flags available */ 
    513 #define IW_TXPOW_TYPE           0x00FF  /* Type of value */ 
    514 #define IW_TXPOW_DBM            0x0000  /* Value is in dBm */ 
    515 #define IW_TXPOW_MWATT          0x0001  /* Value is in mW */ 
    516 #define IW_TXPOW_RELATIVE       0x0002  /* Value is in arbitrary units */ 
    517 #define IW_TXPOW_RANGE          0x1000  /* Range of value between min/max */ 
    518  
    519 /* Retry limits and lifetime flags available */ 
    520 #define IW_RETRY_ON             0x0000  /* No details... */ 
    521 #define IW_RETRY_TYPE           0xF000  /* Type of parameter */ 
    522 #define IW_RETRY_LIMIT          0x1000  /* Maximum number of retries*/ 
    523 #define IW_RETRY_LIFETIME       0x2000  /* Maximum duration of retries in us */ 
    524 #define IW_RETRY_MODIFIER       0x000F  /* Modify a parameter */ 
    525 #define IW_RETRY_MIN            0x0001  /* Value is a minimum  */ 
    526 #define IW_RETRY_MAX            0x0002  /* Value is a maximum */ 
    527 #define IW_RETRY_RELATIVE       0x0004  /* Value is not in seconds/ms/us */ 
    528  
    529 /* Scanning request flags */ 
    530 #define IW_SCAN_DEFAULT         0x0000  /* Default scan of the driver */ 
    531 #define IW_SCAN_ALL_ESSID       0x0001  /* Scan all ESSIDs */ 
    532 #define IW_SCAN_THIS_ESSID      0x0002  /* Scan only this ESSID */ 
    533 #define IW_SCAN_ALL_FREQ        0x0004  /* Scan all Frequencies */ 
    534 #define IW_SCAN_THIS_FREQ       0x0008  /* Scan only this Frequency */ 
    535 #define IW_SCAN_ALL_MODE        0x0010  /* Scan all Modes */ 
    536 #define IW_SCAN_THIS_MODE       0x0020  /* Scan only this Mode */ 
    537 #define IW_SCAN_ALL_RATE        0x0040  /* Scan all Bit-Rates */ 
    538 #define IW_SCAN_THIS_RATE       0x0080  /* Scan only this Bit-Rate */ 
    539 /* struct iw_scan_req scan_type */ 
    540 #define IW_SCAN_TYPE_ACTIVE 0 
    541 #define IW_SCAN_TYPE_PASSIVE 1 
    542 /* Maximum size of returned data */ 
    543 #define IW_SCAN_MAX_DATA        4096    /* In bytes */ 
    544  
    545 /* Max number of char in custom event - use multiple of them if needed */ 
    546 #define IW_CUSTOM_MAX           256     /* In bytes */ 
    547  
    548 /* Generic information element */ 
    549 #define IW_GENERIC_IE_MAX       1024 
    550  
    551 /* MLME requests (SIOCSIWMLME / struct iw_mlme) */ 
    552 #define IW_MLME_DEAUTH          0 
    553 #define IW_MLME_DISASSOC        1 
    554  
    555 /* SIOCSIWAUTH/SIOCGIWAUTH struct iw_param flags */ 
    556 #define IW_AUTH_INDEX           0x0FFF 
    557 #define IW_AUTH_FLAGS           0xF000 
    558 /* SIOCSIWAUTH/SIOCGIWAUTH parameters (0 .. 4095) 
    559  * (IW_AUTH_INDEX mask in struct iw_param flags; this is the index of the 
    560  * parameter that is being set/get to; value will be read/written to 
    561  * struct iw_param value field) */ 
    562 #define IW_AUTH_WPA_VERSION             0 
    563 #define IW_AUTH_CIPHER_PAIRWISE         1 
    564 #define IW_AUTH_CIPHER_GROUP            2 
    565 #define IW_AUTH_KEY_MGMT                3 
    566 #define IW_AUTH_TKIP_COUNTERMEASURES    4 
    567 #define IW_AUTH_DROP_UNENCRYPTED        5 
    568 #define IW_AUTH_80211_AUTH_ALG          6 
    569 #define IW_AUTH_WPA_ENABLED             7 
    570 #define IW_AUTH_RX_UNENCRYPTED_EAPOL    8 
    571 #define IW_AUTH_ROAMING_CONTROL         9 
    572 #define IW_AUTH_PRIVACY_INVOKED         10 
    573  
    574 /* IW_AUTH_WPA_VERSION values (bit field) */ 
    575 #define IW_AUTH_WPA_VERSION_DISABLED    0x00000001 
    576 #define IW_AUTH_WPA_VERSION_WPA         0x00000002 
    577 #define IW_AUTH_WPA_VERSION_WPA2        0x00000004 
    578  
    579 /* IW_AUTH_PAIRWISE_CIPHER and IW_AUTH_GROUP_CIPHER values (bit field) */ 
    580 #define IW_AUTH_CIPHER_NONE     0x00000001 
    581 #define IW_AUTH_CIPHER_WEP40    0x00000002 
    582 #define IW_AUTH_CIPHER_TKIP     0x00000004 
    583 #define IW_AUTH_CIPHER_CCMP     0x00000008 
    584 #define IW_AUTH_CIPHER_WEP104   0x00000010 
    585  
    586 /* IW_AUTH_KEY_MGMT values (bit field) */ 
    587 #define IW_AUTH_KEY_MGMT_802_1X 1 
    588 #define IW_AUTH_KEY_MGMT_PSK    2 
    589  
    590 /* IW_AUTH_80211_AUTH_ALG values (bit field) */ 
    591 #define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001 
    592 #define IW_AUTH_ALG_SHARED_KEY  0x00000002 
    593 #define IW_AUTH_ALG_LEAP        0x00000004 
    594  
    595 /* IW_AUTH_ROAMING_CONTROL values */ 
    596 #define IW_AUTH_ROAMING_ENABLE  0       /* driver/firmware based roaming */ 
    597 #define IW_AUTH_ROAMING_DISABLE 1       /* user space program used for roaming 
    598                                          * control */ 
    599  
    600 /* SIOCSIWENCODEEXT definitions */ 
    601 #define IW_ENCODE_SEQ_MAX_SIZE  8 
    602 /* struct iw_encode_ext ->alg */ 
    603 #define IW_ENCODE_ALG_NONE      0 
    604 #define IW_ENCODE_ALG_WEP       1 
    605 #define IW_ENCODE_ALG_TKIP      2 
    606 #define IW_ENCODE_ALG_CCMP      3 
    607 /* struct iw_encode_ext ->ext_flags */ 
    608 #define IW_ENCODE_EXT_TX_SEQ_VALID      0x00000001 
    609 #define IW_ENCODE_EXT_RX_SEQ_VALID      0x00000002 
    610 #define IW_ENCODE_EXT_GROUP_KEY         0x00000004 
    611 #define IW_ENCODE_EXT_SET_TX_KEY        0x00000008 
    612  
    613 /* IWEVMICHAELMICFAILURE : struct iw_michaelmicfailure ->flags */ 
    614 #define IW_MICFAILURE_KEY_ID    0x00000003 /* Key ID 0..3 */ 
    615 #define IW_MICFAILURE_GROUP     0x00000004 
    616 #define IW_MICFAILURE_PAIRWISE  0x00000008 
    617 #define IW_MICFAILURE_STAKEY    0x00000010 
    618 #define IW_MICFAILURE_COUNT     0x00000060 /* 1 or 2 (0 = count not supported) 
    619                                             */ 
    620  
    621 /* Bit field values for enc_capa in struct iw_range */ 
    622 #define IW_ENC_CAPA_WPA         0x00000001 
    623 #define IW_ENC_CAPA_WPA2        0x00000002 
    624 #define IW_ENC_CAPA_CIPHER_TKIP 0x00000004 
    625 #define IW_ENC_CAPA_CIPHER_CCMP 0x00000008 
    626  
    627 /* Event capability macros - in (struct iw_range *)->event_capa 
    628  * Because we have more than 32 possible events, we use an array of 
    629  * 32 bit bitmasks. Note : 32 bits = 0x20 = 2^5. */ 
    630 #define IW_EVENT_CAPA_BASE(cmd)         ((cmd >= SIOCIWFIRSTPRIV) ? \ 
    631                                          (cmd - SIOCIWFIRSTPRIV + 0x60) : \ 
    632                                          (cmd - SIOCSIWCOMMIT)) 
    633 #define IW_EVENT_CAPA_INDEX(cmd)        (IW_EVENT_CAPA_BASE(cmd) >> 5) 
    634 #define IW_EVENT_CAPA_MASK(cmd)         (1 << (IW_EVENT_CAPA_BASE(cmd) & 0x1F)) 
    635 /* Event capability constants - event autogenerated by the kernel 
    636  * This list is valid for most 802.11 devices, customise as needed... */ 
    637 #define IW_EVENT_CAPA_K_0       (IW_EVENT_CAPA_MASK(0x8B04) | \ 
    638                                  IW_EVENT_CAPA_MASK(0x8B06) | \ 
    639                                  IW_EVENT_CAPA_MASK(0x8B1A)) 
    640 #define IW_EVENT_CAPA_K_1       (IW_EVENT_CAPA_MASK(0x8B2A)) 
    641 /* "Easy" macro to set events in iw_range (less efficient) */ 
    642 #define IW_EVENT_CAPA_SET(event_capa, cmd) (event_capa[IW_EVENT_CAPA_INDEX(cmd)] |= IW_EVENT_CAPA_MASK(cmd)) 
    643 #define IW_EVENT_CAPA_SET_KERNEL(event_capa) {event_capa[0] |= IW_EVENT_CAPA_K_0; event_capa[1] |= IW_EVENT_CAPA_K_1; } 
    644  
    645  
    646 /****************************** TYPES ******************************/ 
    647  
    648 /* --------------------------- SUBTYPES --------------------------- */ 
    649 /* 
    650  *      Generic format for most parameters that fit in an int 
    651  */ 
    652 struct  iw_param 
    653 { 
    654   __s32         value;          /* The value of the parameter itself */ 
    655   __u8          fixed;          /* Hardware should not use auto select */ 
    656   __u8          disabled;       /* Disable the feature */ 
    657   __u16         flags;          /* Various specifc flags (if any) */ 
    658 }; 
    659  
    660 /* 
    661  *      For all data larger than 16 octets, we need to use a 
    662  *      pointer to memory allocated in user space. 
    663  */ 
    664 struct  iw_point 
    665 { 
    666   void __user   *pointer;       /* Pointer to the data  (in user space) */ 
    667   __u16         length;         /* number of fields or size in bytes */ 
    668   __u16         flags;          /* Optional params */ 
    669 }; 
    670  
    671 /* 
    672  *      A frequency 
    673  *      For numbers lower than 10^9, we encode the number in 'm' and 
    674  *      set 'e' to 0 
    675  *      For number greater than 10^9, we divide it by the lowest power 
    676  *      of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')... 
    677  *      The power of 10 is in 'e', the result of the division is in 'm'. 
    678  */ 
    679 struct  iw_freq 
    680 { 
    681         __s32           m;              /* Mantissa */ 
    682         __s16           e;              /* Exponent */ 
    683         __u8            i;              /* List index (when in range struct) */ 
    684         __u8            flags;          /* Flags (fixed/auto) */ 
    685 }; 
    686  
    687 /* 
    688  *      Quality of the link 
    689  */ 
    690 struct  iw_quality 
    691 { 
    692         __u8            qual;           /* link quality (%retries, SNR, 
    693                                            %missed beacons or better...) */ 
    694         __u8            level;          /* signal level (dBm) */ 
    695         __u8            noise;          /* noise level (dBm) */ 
    696         __u8            updated;        /* Flags to know if updated */ 
    697 }; 
    698  
    699 /* 
    700  *      Packet discarded in the wireless adapter due to 
    701  *      "wireless" specific problems... 
    702  *      Note : the list of counter and statistics in net_device_stats 
    703  *      is already pretty exhaustive, and you should use that first. 
    704  *      This is only additional stats... 
    705  */ 
    706 struct  iw_discarded 
    707 { 
    708         __u32           nwid;           /* Rx : Wrong nwid/essid */ 
    709         __u32           code;           /* Rx : Unable to code/decode (WEP) */ 
    710         __u32           fragment;       /* Rx : Can't perform MAC reassembly */ 
    711         __u32           retries;        /* Tx : Max MAC retries num reached */ 
    712         __u32           misc;           /* Others cases */ 
    713 }; 
    714  
    715 /* 
    716  *      Packet/Time period missed in the wireless adapter due to 
    717  *      "wireless" specific problems... 
    718  */ 
    719 struct  iw_missed 
    720 { 
    721         __u32           beacon;         /* Missed beacons/superframe */ 
    722 }; 
    723  
    724 /* 
    725  *      Quality range (for spy threshold) 
    726  */ 
    727 struct  iw_thrspy 
    728 { 
    729         struct sockaddr         addr;           /* Source address (hw/mac) */ 
    730         struct iw_quality       qual;           /* Quality of the link */ 
    731         struct iw_quality       low;            /* Low threshold */ 
    732         struct iw_quality       high;           /* High threshold */ 
    733 }; 
    734  
    735 /* 
    736  *      Optional data for scan request 
    737  * 
    738  *      Note: these optional parameters are controlling parameters for the 
    739  *      scanning behavior, these do not apply to getting scan results 
    740  *      (SIOCGIWSCAN). Drivers are expected to keep a local BSS table and 
    741  *      provide a merged results with all BSSes even if the previous scan 
    742  *      request limited scanning to a subset, e.g., by specifying an SSID. 
    743  *      Especially, scan results are required to include an entry for the 
    744  *      current BSS if the driver is in Managed mode and associated with an AP. 
    745  */ 
    746 struct  iw_scan_req 
    747 { 
    748         __u8            scan_type; /* IW_SCAN_TYPE_{ACTIVE,PASSIVE} */ 
    749         __u8            essid_len; 
    750         __u8            num_channels; /* num entries in channel_list; 
    751                                        * 0 = scan all allowed channels */ 
    752         __u8            flags; /* reserved as padding; use zero, this may 
    753                                 * be used in the future for adding flags 
    754                                 * to request different scan behavior */ 
    755         struct sockaddr bssid; /* ff:ff:ff:ff:ff:ff for broadcast BSSID or 
    756                                 * individual address of a specific BSS */ 
    757  
    758         /* 
    759          * Use this ESSID if IW_SCAN_THIS_ESSID flag is used instead of using 
    760          * the current ESSID. This allows scan requests for specific ESSID 
    761          * without having to change the current ESSID and potentially breaking 
    762          * the current association. 
    763          */ 
    764         __u8            essid[IW_ESSID_MAX_SIZE]; 
    765  
    766         /* 
    767          * Optional parameters for changing the default scanning behavior. 
    768          * These are based on the MLME-SCAN.request from IEEE Std 802.11. 
    769          * TU is 1.024 ms. If these are set to 0, driver is expected to use 
    770          * reasonable default values. min_channel_time defines the time that 
    771          * will be used to wait for the first reply on each channel. If no 
    772          * replies are received, next channel will be scanned after this. If 
    773          * replies are received, total time waited on the channel is defined by 
    774          * max_channel_time. 
    775          */ 
    776         __u32           min_channel_time; /* in TU */ 
    777         __u32           max_channel_time; /* in TU */ 
    778  
    779         struct iw_freq  channel_list[IW_MAX_FREQUENCIES]; 
    780 }; 
    781  
    782 /* ------------------------- WPA SUPPORT ------------------------- */ 
    783  
    784 /* 
    785  *      Extended data structure for get/set encoding (this is used with 
    786  *      SIOCSIWENCODEEXT/SIOCGIWENCODEEXT. struct iw_point and IW_ENCODE_* 
    787  *      flags are used in the same way as with SIOCSIWENCODE/SIOCGIWENCODE and 
    788  *      only the data contents changes (key data -> this structure, including 
    789  *      key data). 
    790  * 
    791  *      If the new key is the first group key, it will be set as the default 
    792  *      TX key. Otherwise, default TX key index is only changed if 
    793  *      IW_ENCODE_EXT_SET_TX_KEY flag is set. 
    794  * 
    795  *      Key will be changed with SIOCSIWENCODEEXT in all cases except for 
    796  *      special "change TX key index" operation which is indicated by setting 
    797  *      key_len = 0 and ext_flags |= IW_ENCODE_EXT_SET_TX_KEY. 
    798  * 
    799  *      tx_seq/rx_seq are only used when respective 
    800  *      IW_ENCODE_EXT_{TX,RX}_SEQ_VALID flag is set in ext_flags. Normal 
    801  *      TKIP/CCMP operation is to set RX seq with SIOCSIWENCODEEXT and start 
    802  *      TX seq from zero whenever key is changed. SIOCGIWENCODEEXT is normally 
    803  *      used only by an Authenticator (AP or an IBSS station) to get the 
    804  *      current TX sequence number. Using TX_SEQ_VALID for SIOCSIWENCODEEXT and 
    805  *      RX_SEQ_VALID for SIOCGIWENCODEEXT are optional, but can be useful for 
    806  *      debugging/testing. 
    807  */ 
    808 struct  iw_encode_ext 
    809 { 
    810         __u32           ext_flags; /* IW_ENCODE_EXT_* */ 
    811         __u8            tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ 
    812         __u8            rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ 
    813         struct sockaddr addr; /* ff:ff:ff:ff:ff:ff for broadcast/multicast 
    814                                * (group) keys or unicast address for 
    815                                * individual keys */ 
    816         __u16           alg; /* IW_ENCODE_ALG_* */ 
    817         __u16           key_len; 
    818         __u8            key[0]; 
    819 }; 
    820  
    821 /* SIOCSIWMLME data */ 
    822 struct  iw_mlme 
    823 { 
    824         __u16           cmd; /* IW_MLME_* */ 
    825         __u16           reason_code; 
    826         struct sockaddr addr; 
    827 }; 
    828  
    829 /* SIOCSIWPMKSA data */ 
    830 #define IW_PMKSA_ADD            1 
    831 #define IW_PMKSA_REMOVE         2 
    832 #define IW_PMKSA_FLUSH          3 
    833  
    834 #define IW_PMKID_LEN    16 
    835  
    836 struct  iw_pmksa 
    837 { 
    838         __u32           cmd; /* IW_PMKSA_* */ 
    839         struct sockaddr bssid; 
    840         __u8            pmkid[IW_PMKID_LEN]; 
    841 }; 
    842  
    843 /* IWEVMICHAELMICFAILURE data */ 
    844 struct  iw_michaelmicfailure 
    845 { 
    846         __u32           flags; 
    847         struct sockaddr src_addr; 
    848         __u8            tsc[IW_ENCODE_SEQ_MAX_SIZE]; /* LSB first */ 
    849 }; 
    850  
    851 /* IWEVPMKIDCAND data */ 
    852 #define IW_PMKID_CAND_PREAUTH   0x00000001 /* RNS pre-authentication enabled */ 
    853 struct  iw_pmkid_cand 
    854 { 
    855         __u32           flags; /* IW_PMKID_CAND_* */ 
    856         __u32           index; /* the smaller the index, the higher the 
    857                                 * priority */ 
    858         struct sockaddr bssid; 
    859 }; 
    860  
    861 /* ------------------------ WIRELESS STATS ------------------------ */ 
    862 /* 
    863  * Wireless statistics (used for /proc/net/wireless) 
    864  */ 
    865 struct  iw_statistics 
    866 { 
    867         __u16           status;         /* Status 
    868                                          * - device dependent for now */ 
    869  
    870         struct iw_quality       qual;           /* Quality of the link 
    871                                                  * (instant/mean/max) */ 
    872         struct iw_discarded     discard;        /* Packet discarded counts */ 
    873         struct iw_missed        miss;           /* Packet missed counts */ 
    874 }; 
    875  
    876 /* ------------------------ IOCTL REQUEST ------------------------ */ 
    877 /* 
    878  * This structure defines the payload of an ioctl, and is used  
    879  * below. 
    880  * 
    881  * Note that this structure should fit on the memory footprint 
    882  * of iwreq (which is the same as ifreq), which mean a max size of 
    883  * 16 octets = 128 bits. Warning, pointers might be 64 bits wide... 
    884  * You should check this when increasing the structures defined 
    885  * above in this file... 
    886  */ 
    887 union   iwreq_data 
    888 { 
    889         /* Config - generic */ 
    890         char            name[IFNAMSIZ]; 
    891         /* Name : used to verify the presence of  wireless extensions. 
    892          * Name of the protocol/provider... */ 
    893  
    894         struct iw_point essid;          /* Extended network name */ 
    895         struct iw_param nwid;           /* network id (or domain - the cell) */ 
    896         struct iw_freq  freq;           /* frequency or channel : 
    897                                          * 0-1000 = channel 
    898                                          * > 1000 = frequency in Hz */ 
    899  
    900         struct iw_param sens;           /* signal level threshold */ 
    901         struct iw_param bitrate;        /* default bit rate */ 
    902         struct iw_param txpower;        /* default transmit power */ 
    903         struct iw_param rts;            /* RTS threshold threshold */ 
    904         struct iw_param frag;           /* Fragmentation threshold */ 
    905         __u32           mode;           /* Operation mode */ 
    906         struct iw_param retry;          /* Retry limits & lifetime */ 
    907  
    908         struct iw_point encoding;       /* Encoding stuff : tokens */ 
    909         struct iw_param power;          /* PM duration/timeout */ 
    910         struct iw_quality qual;         /* Quality part of statistics */ 
    911  
    912         struct sockaddr ap_addr;        /* Access point address */ 
    913         struct sockaddr addr;           /* Destination address (hw/mac) */ 
    914  
    915         struct iw_param param;          /* Other small parameters */ 
    916         struct iw_point data;           /* Other large parameters */ 
    917 }; 
    918  
    919 /* 
    920  * The structure to exchange data for ioctl. 
    921  * This structure is the same as 'struct ifreq', but (re)defined for 
    922  * convenience... 
    923  * Do I need to remind you about structure size (32 octets) ? 
    924  */ 
    925 struct  iwreq 
    926 { 
    927         union 
    928         { 
    929                 char    ifrn_name[IFNAMSIZ];    /* if name, e.g. "eth0" */ 
    930         } ifr_ifrn; 
    931  
    932         /* Data part (defined just above) */ 
    933         union   iwreq_data      u; 
    934 }; 
    935  
    936 /* -------------------------- IOCTL DATA -------------------------- */ 
    937 /* 
    938  *      For those ioctl which want to exchange mode data that what could 
    939  *      fit in the above structure... 
    940  */ 
    941  
    942 /* 
    943  *      Range of parameters 
    944  */ 
    945  
    946 struct  iw_range 
    947 { 
    948         /* Informative stuff (to choose between different interface) */ 
    949         __u32           throughput;     /* To give an idea... */ 
    950         /* In theory this value should be the maximum benchmarked 
    951          * TCP/IP throughput, because with most of these devices the 
    952          * bit rate is meaningless (overhead an co) to estimate how 
    953          * fast the connection will go and pick the fastest one. 
    954          * I suggest people to play with Netperf or any benchmark... 
    955          */ 
    956  
    957         /* NWID (or domain id) */ 
    958         __u32           min_nwid;       /* Minimal NWID we are able to set */ 
    959         __u32           max_nwid;       /* Maximal NWID we are able to set */ 
    960  
    961         /* Old Frequency (backward compat - moved lower ) */ 
    962         __u16           old_num_channels; 
    963         __u8            old_num_frequency; 
    964  
    965         /* Wireless event capability bitmasks */ 
    966         __u32           event_capa[6]; 
    967  
    968         /* signal level threshold range */ 
    969         __s32           sensitivity; 
    970  
    971         /* Quality of link & SNR stuff */ 
    972         /* Quality range (link, level, noise) 
    973          * If the quality is absolute, it will be in the range [0 ; max_qual], 
    974          * if the quality is dBm, it will be in the range [max_qual ; 0]. 
    975          * Don't forget that we use 8 bit arithmetics... */ 
    976         struct iw_quality       max_qual;       /* Quality of the link */ 
    977         /* This should contain the average/typical values of the quality 
    978          * indicator. This should be the threshold between a "good" and 
    979          * a "bad" link (example : monitor going from green to orange). 
    980          * Currently, user space apps like quality monitors don't have any 
    981          * way to calibrate the measurement. With this, they can split 
    982          * the range between 0 and max_qual in different quality level 
    983          * (using a geometric subdivision centered on the average). 
    984          * I expect that people doing the user space apps will feedback 
    985          * us on which value we need to put in each driver... */ 
    986         struct iw_quality       avg_qual;       /* Quality of the link */ 
    987  
    988         /* Rates */ 
    989         __u8            num_bitrates;   /* Number of entries in the list */ 
    990         __s32           bitrate[IW_MAX_BITRATES];       /* list, in bps */ 
    991  
    992         /* RTS threshold */ 
    993         __s32           min_rts;        /* Minimal RTS threshold */ 
    994         __s32           max_rts;        /* Maximal RTS threshold */ 
    995  
    996         /* Frag threshold */ 
    997         __s32           min_frag;       /* Minimal frag threshold */ 
    998         __s32           max_frag;       /* Maximal frag threshold */ 
    999  
    1000         /* Power Management duration & timeout */ 
    1001         __s32           min_pmp;        /* Minimal PM period */ 
    1002         __s32           max_pmp;        /* Maximal PM period */ 
    1003         __s32           min_pmt;        /* Minimal PM timeout */ 
    1004         __s32           max_pmt;        /* Maximal PM timeout */ 
    1005         __u16           pmp_flags;      /* How to decode max/min PM period */ 
    1006         __u16           pmt_flags;      /* How to decode max/min PM timeout */ 
    1007         __u16           pm_capa;        /* What PM options are supported */ 
    1008  
    1009         /* Encoder stuff */ 
    1010         __u16   encoding_size[IW_MAX_ENCODING_SIZES];   /* Different token sizes */ 
    1011         __u8    num_encoding_sizes;     /* Number of entry in the list */ 
    1012         __u8    max_encoding_tokens;    /* Max number of tokens */ 
    1013         /* For drivers that need a "login/passwd" form */ 
    1014         __u8    encoding_login_index;   /* token index for login token */ 
    1015  
    1016         /* Transmit power */ 
    1017         __u16           txpower_capa;   /* What options are supported */ 
    1018         __u8            num_txpower;    /* Number of entries in the list */ 
    1019         __s32           txpower[IW_MAX_TXPOWER];        /* list, in bps */ 
    1020  
    1021         /* Wireless Extension version info */ 
    1022         __u8            we_version_compiled;    /* Must be WIRELESS_EXT */ 
    1023         __u8            we_version_source;      /* Last update of source */ 
    1024  
    1025         /* Retry limits and lifetime */ 
    1026         __u16           retry_capa;     /* What retry options are supported */ 
    1027         __u16           retry_flags;    /* How to decode max/min retry limit */ 
    1028         __u16           r_time_flags;   /* How to decode max/min retry life */ 
    1029         __s32           min_retry;      /* Minimal number of retries */ 
    1030         __s32           max_retry;      /* Maximal number of retries */ 
    1031         __s32           min_r_time;     /* Minimal retry lifetime */ 
    1032         __s32           max_r_time;     /* Maximal retry lifetime */ 
    1033  
    1034         /* Frequency */ 
    1035         __u16           num_channels;   /* Number of channels [0; num - 1] */ 
    1036         __u8            num_frequency;  /* Number of entry in the list */ 
    1037         struct iw_freq  freq[IW_MAX_FREQUENCIES];       /* list */ 
    1038         /* Note : this frequency list doesn't need to fit channel numbers, 
    1039          * because each entry contain its channel index */ 
    1040  
    1041         __u32           enc_capa; /* IW_ENC_CAPA_* bit field */ 
    1042 }; 
    1043  
    1044 /* 
    1045  * Private ioctl interface information 
    1046  */ 
    1047  
    1048 struct  iw_priv_args 
    1049 { 
    1050         __u32           cmd;            /* Number of the ioctl to issue */ 
    1051         __u16           set_args;       /* Type and number of args */ 
    1052         __u16           get_args;       /* Type and number of args */ 
    1053         char            name[IFNAMSIZ]; /* Name of the extension */ 
    1054 }; 
    1055  
    1056 /* ----------------------- WIRELESS EVENTS ----------------------- */ 
    1057 /* 
    1058  * Wireless events are carried through the rtnetlink socket to user 
    1059  * space. They are encapsulated in the IFLA_WIRELESS field of 
    1060  * a RTM_NEWLINK message. 
    1061  */ 
    1062  
    1063 /* 
    1064  * A Wireless Event. Contains basically the same data as the ioctl... 
    1065  */ 
    1066 struct iw_event 
    1067 { 
    1068         __u16           len;                    /* Real lenght of this stuff */ 
    1069         __u16           cmd;                    /* Wireless IOCTL */ 
    1070         union iwreq_data        u;              /* IOCTL fixed payload */ 
    1071 }; 
    1072  
    1073 /* Size of the Event prefix (including padding and alignement junk) */ 
    1074 #define IW_EV_LCP_LEN   (sizeof(struct iw_event) - sizeof(union iwreq_data)) 
    1075 /* Size of the various events */ 
    1076 #define IW_EV_CHAR_LEN  (IW_EV_LCP_LEN + IFNAMSIZ) 
    1077 #define IW_EV_UINT_LEN  (IW_EV_LCP_LEN + sizeof(__u32)) 
    1078 #define IW_EV_FREQ_LEN  (IW_EV_LCP_LEN + sizeof(struct iw_freq)) 
    1079 #define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param)) 
    1080 #define IW_EV_ADDR_LEN  (IW_EV_LCP_LEN + sizeof(struct sockaddr)) 
    1081 #define IW_EV_QUAL_LEN  (IW_EV_LCP_LEN + sizeof(struct iw_quality)) 
    1082  
    1083 /* iw_point events are special. First, the payload (extra data) come at 
    1084  * the end of the event, so they are bigger than IW_EV_POINT_LEN. Second, 
    1085  * we omit the pointer, so start at an offset. */ 
    1086 #define IW_EV_POINT_OFF (((char *) &(((struct iw_point *) NULL)->length)) - \ 
    1087                           (char *) NULL) 
    1088 #define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point) - \ 
    1089                          IW_EV_POINT_OFF) 
    1090  
    1091 #endif  /* _LINUX_WIRELESS_H */