source: trunk/third/ifplugd/src/wireless.16.h @ 20388

Revision 20388, 26.9 KB checked in by amb, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r20387, which included commits to RCS files with non-trunk default branches.
Line 
1/*
2 * This file define a set of standard wireless extensions
3 *
4 * Version :    16      2.4.03
5 *
6 * Authors :    Jean Tourrilhes - HPL - <jt@hpl.hp.com>
7 * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
8 */
9
10#ifndef _LINUX_WIRELESS_H
11#define _LINUX_WIRELESS_H
12
13/************************** DOCUMENTATION **************************/
14/*
15 * Initial APIs (1996 -> onward) :
16 * -----------------------------
17 * Basically, the wireless extensions are for now a set of standard ioctl
18 * call + /proc/net/wireless
19 *
20 * The entry /proc/net/wireless give statistics and information on the
21 * driver.
22 * This is better than having each driver having its entry because
23 * its centralised and we may remove the driver module safely.
24 *
25 * Ioctl are used to configure the driver and issue commands.  This is
26 * better than command line options of insmod because we may want to
27 * change dynamically (while the driver is running) some parameters.
28 *
29 * The ioctl mechanimsm are copied from standard devices ioctl.
30 * We have the list of command plus a structure descibing the
31 * data exchanged...
32 * Note that to add these ioctl, I was obliged to modify :
33 *      # net/core/dev.c (two place + add include)
34 *      # net/ipv4/af_inet.c (one place + add include)
35 *
36 * /proc/net/wireless is a copy of /proc/net/dev.
37 * We have a structure for data passed from the driver to /proc/net/wireless
38 * Too add this, I've modified :
39 *      # net/core/dev.c (two other places)
40 *      # include/linux/netdevice.h (one place)
41 *      # include/linux/proc_fs.h (one place)
42 *
43 * New driver API (2002 -> onward) :
44 * -------------------------------
45 * This file is only concerned with the user space API and common definitions.
46 * The new driver API is defined and documented in :
47 *      # include/net/iw_handler.h
48 *
49 * Note as well that /proc/net/wireless implementation has now moved in :
50 *      # include/linux/wireless.c
51 *
52 * Wireless Events (2002 -> onward) :
53 * --------------------------------
54 * Events are defined at the end of this file, and implemented in :
55 *      # include/linux/wireless.c
56 *
57 * Other comments :
58 * --------------
59 * Do not add here things that are redundant with other mechanisms
60 * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
61 * wireless specific.
62 *
63 * These wireless extensions are not magic : each driver has to provide
64 * support for them...
65 *
66 * IMPORTANT NOTE : As everything in the kernel, this is very much a
67 * work in progress. Contact me if you have ideas of improvements...
68 */
69
70/***************************** INCLUDES *****************************/
71
72/* To minimise problems in user space, I might remove those headers
73 * at some point. Jean II */
74#include <linux/types.h>                /* for "caddr_t" et al          */
75#include <linux/socket.h>               /* for "struct sockaddr" et al  */
76#include <linux/if.h>                   /* for IFNAMSIZ and co... */
77
78/***************************** VERSION *****************************/
79/*
80 * This constant is used to know the availability of the wireless
81 * extensions and to know which version of wireless extensions it is
82 * (there is some stuff that will be added in the future...)
83 * I just plan to increment with each new version.
84 */
85#define WIRELESS_EXT    16
86
87/*
88 * Changes :
89 *
90 * V2 to V3
91 * --------
92 *      Alan Cox start some incompatibles changes. I've integrated a bit more.
93 *      - Encryption renamed to Encode to avoid US regulation problems
94 *      - Frequency changed from float to struct to avoid problems on old 386
95 *
96 * V3 to V4
97 * --------
98 *      - Add sensitivity
99 *
100 * V4 to V5
101 * --------
102 *      - Missing encoding definitions in range
103 *      - Access points stuff
104 *
105 * V5 to V6
106 * --------
107 *      - 802.11 support (ESSID ioctls)
108 *
109 * V6 to V7
110 * --------
111 *      - define IW_ESSID_MAX_SIZE and IW_MAX_AP
112 *
113 * V7 to V8
114 * --------
115 *      - Changed my e-mail address
116 *      - More 802.11 support (nickname, rate, rts, frag)
117 *      - List index in frequencies
118 *
119 * V8 to V9
120 * --------
121 *      - Support for 'mode of operation' (ad-hoc, managed...)
122 *      - Support for unicast and multicast power saving
123 *      - Change encoding to support larger tokens (>64 bits)
124 *      - Updated iw_params (disable, flags) and use it for NWID
125 *      - Extracted iw_point from iwreq for clarity
126 *
127 * V9 to V10
128 * ---------
129 *      - Add PM capability to range structure
130 *      - Add PM modifier : MAX/MIN/RELATIVE
131 *      - Add encoding option : IW_ENCODE_NOKEY
132 *      - Add TxPower ioctls (work like TxRate)
133 *
134 * V10 to V11
135 * ----------
136 *      - Add WE version in range (help backward/forward compatibility)
137 *      - Add retry ioctls (work like PM)
138 *
139 * V11 to V12
140 * ----------
141 *      - Add SIOCSIWSTATS to get /proc/net/wireless programatically
142 *      - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space
143 *      - Add new statistics (frag, retry, beacon)
144 *      - Add average quality (for user space calibration)
145 *
146 * V12 to V13
147 * ----------
148 *      - Document creation of new driver API.
149 *      - Extract union iwreq_data from struct iwreq (for new driver API).
150 *      - Rename SIOCSIWNAME as SIOCSIWCOMMIT
151 *
152 * V13 to V14
153 * ----------
154 *      - Wireless Events support : define struct iw_event
155 *      - Define additional specific event numbers
156 *      - Add "addr" and "param" fields in union iwreq_data
157 *      - AP scanning stuff (SIOCSIWSCAN and friends)
158 *
159 * V14 to V15
160 * ----------
161 *      - Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg
162 *      - Make struct iw_freq signed (both m & e), add explicit padding
163 *      - Add IWEVCUSTOM for driver specific event/scanning token
164 *      - Add IW_MAX_GET_SPY for driver returning a lot of addresses
165 *      - Add IW_TXPOW_RANGE for range of Tx Powers
166 *      - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points
167 *      - Add IW_MODE_MONITOR for passive monitor
168 *
169 * V15 to V16
170 * ----------
171 *      - Increase the number of bitrates in iw_range to 32 (for 802.11g)
172 *      - Increase the number of frequencies in iw_range to 32 (for 802.11b+a)
173 *      - Reshuffle struct iw_range for increases, add filler
174 *      - Increase IW_MAX_AP to 64 for driver returning a lot of addresses
175 *      - Remove IW_MAX_GET_SPY because conflict with enhanced spy support
176 *      - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy"
177 *      - Add IW_ENCODE_TEMP and iw_range->encoding_login_index
178 */
179
180/**************************** CONSTANTS ****************************/
181
182/* -------------------------- IOCTL LIST -------------------------- */
183
184/* Wireless Identification */
185#define SIOCSIWCOMMIT   0x8B00          /* Commit pending changes to driver */
186#define SIOCGIWNAME     0x8B01          /* get name == wireless protocol */
187/* SIOCGIWNAME is used to verify the presence of Wireless Extensions.
188 * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"...
189 * Don't put the name of your driver there, it's useless. */
190
191/* Basic operations */
192#define SIOCSIWNWID     0x8B02          /* set network id (pre-802.11) */
193#define SIOCGIWNWID     0x8B03          /* get network id (the cell) */
194#define SIOCSIWFREQ     0x8B04          /* set channel/frequency (Hz) */
195#define SIOCGIWFREQ     0x8B05          /* get channel/frequency (Hz) */
196#define SIOCSIWMODE     0x8B06          /* set operation mode */
197#define SIOCGIWMODE     0x8B07          /* get operation mode */
198#define SIOCSIWSENS     0x8B08          /* set sensitivity (dBm) */
199#define SIOCGIWSENS     0x8B09          /* get sensitivity (dBm) */
200
201/* Informative stuff */
202#define SIOCSIWRANGE    0x8B0A          /* Unused */
203#define SIOCGIWRANGE    0x8B0B          /* Get range of parameters */
204#define SIOCSIWPRIV     0x8B0C          /* Unused */
205#define SIOCGIWPRIV     0x8B0D          /* get private ioctl interface info */
206#define SIOCSIWSTATS    0x8B0E          /* Unused */
207#define SIOCGIWSTATS    0x8B0F          /* Get /proc/net/wireless stats */
208/* SIOCGIWSTATS is strictly used between user space and the kernel, and
209 * is never passed to the driver (i.e. the driver will never see it). */
210
211/* Spy support (statistics per MAC address - used for Mobile IP support) */
212#define SIOCSIWSPY      0x8B10          /* set spy addresses */
213#define SIOCGIWSPY      0x8B11          /* get spy info (quality of link) */
214#define SIOCSIWTHRSPY   0x8B12          /* set spy threshold (spy event) */
215#define SIOCGIWTHRSPY   0x8B13          /* get spy threshold */
216
217/* Access Point manipulation */
218#define SIOCSIWAP       0x8B14          /* set access point MAC addresses */
219#define SIOCGIWAP       0x8B15          /* get access point MAC addresses */
220#define SIOCGIWAPLIST   0x8B17          /* Deprecated in favor of scanning */
221#define SIOCSIWSCAN     0x8B18          /* trigger scanning (list cells) */
222#define SIOCGIWSCAN     0x8B19          /* get scanning results */
223
224/* 802.11 specific support */
225#define SIOCSIWESSID    0x8B1A          /* set ESSID (network name) */
226#define SIOCGIWESSID    0x8B1B          /* get ESSID */
227#define SIOCSIWNICKN    0x8B1C          /* set node name/nickname */
228#define SIOCGIWNICKN    0x8B1D          /* get node name/nickname */
229/* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
230 * within the 'iwreq' structure, so we need to use the 'data' member to
231 * point to a string in user space, like it is done for RANGE... */
232
233/* Other parameters useful in 802.11 and some other devices */
234#define SIOCSIWRATE     0x8B20          /* set default bit rate (bps) */
235#define SIOCGIWRATE     0x8B21          /* get default bit rate (bps) */
236#define SIOCSIWRTS      0x8B22          /* set RTS/CTS threshold (bytes) */
237#define SIOCGIWRTS      0x8B23          /* get RTS/CTS threshold (bytes) */
238#define SIOCSIWFRAG     0x8B24          /* set fragmentation thr (bytes) */
239#define SIOCGIWFRAG     0x8B25          /* get fragmentation thr (bytes) */
240#define SIOCSIWTXPOW    0x8B26          /* set transmit power (dBm) */
241#define SIOCGIWTXPOW    0x8B27          /* get transmit power (dBm) */
242#define SIOCSIWRETRY    0x8B28          /* set retry limits and lifetime */
243#define SIOCGIWRETRY    0x8B29          /* get retry limits and lifetime */
244
245/* Encoding stuff (scrambling, hardware security, WEP...) */
246#define SIOCSIWENCODE   0x8B2A          /* set encoding token & mode */
247#define SIOCGIWENCODE   0x8B2B          /* get encoding token & mode */
248/* Power saving stuff (power management, unicast and multicast) */
249#define SIOCSIWPOWER    0x8B2C          /* set Power Management settings */
250#define SIOCGIWPOWER    0x8B2D          /* get Power Management settings */
251
252/* -------------------- DEV PRIVATE IOCTL LIST -------------------- */
253
254/* These 16 ioctl are wireless device private.
255 * Each driver is free to use them for whatever purpose it chooses,
256 * however the driver *must* export the description of those ioctls
257 * with SIOCGIWPRIV and *must* use arguments as defined below.
258 * If you don't follow those rules, DaveM is going to hate you (reason :
259 * it make mixed 32/64bit operation impossible).
260 */
261#define SIOCIWFIRSTPRIV 0x8BE0
262#define SIOCIWLASTPRIV  0x8BFF
263/* Previously, we were using SIOCDEVPRIVATE, but we now have our
264 * separate range because of collisions with other tools such as
265 * 'mii-tool'.
266 * We now have 32 commands, so a bit more space ;-).
267 * Also, all 'odd' commands are only usable by root and don't return the
268 * content of ifr/iwr to user (but you are not obliged to use the set/get
269 * convention, just use every other two command).
270 * And I repeat : you are not obliged to use them with iwspy, but you
271 * must be compliant with it.
272 */
273
274/* ------------------------- IOCTL STUFF ------------------------- */
275
276/* The first and the last (range) */
277#define SIOCIWFIRST     0x8B00
278#define SIOCIWLAST      SIOCIWLASTPRIV          /* 0x8BFF */
279
280/* Even : get (world access), odd : set (root access) */
281#define IW_IS_SET(cmd)  (!((cmd) & 0x1))
282#define IW_IS_GET(cmd)  ((cmd) & 0x1)
283
284/* ----------------------- WIRELESS EVENTS ----------------------- */
285/* Those are *NOT* ioctls, do not issue request on them !!! */
286/* Most events use the same identifier as ioctl requests */
287
288#define IWEVTXDROP      0x8C00          /* Packet dropped to excessive retry */
289#define IWEVQUAL        0x8C01          /* Quality part of statistics (scan) */
290#define IWEVCUSTOM      0x8C02          /* Driver specific ascii string */
291#define IWEVREGISTERED  0x8C03          /* Discovered a new node (AP mode) */
292#define IWEVEXPIRED     0x8C04          /* Expired a node (AP mode) */
293
294#define IWEVFIRST       0x8C00
295
296/* ------------------------- PRIVATE INFO ------------------------- */
297/*
298 * The following is used with SIOCGIWPRIV. It allow a driver to define
299 * the interface (name, type of data) for its private ioctl.
300 * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV
301 */
302
303#define IW_PRIV_TYPE_MASK       0x7000  /* Type of arguments */
304#define IW_PRIV_TYPE_NONE       0x0000
305#define IW_PRIV_TYPE_BYTE       0x1000  /* Char as number */
306#define IW_PRIV_TYPE_CHAR       0x2000  /* Char as character */
307#define IW_PRIV_TYPE_INT        0x4000  /* 32 bits int */
308#define IW_PRIV_TYPE_FLOAT      0x5000  /* struct iw_freq */
309#define IW_PRIV_TYPE_ADDR       0x6000  /* struct sockaddr */
310
311#define IW_PRIV_SIZE_FIXED      0x0800  /* Variable or fixed number of args */
312
313#define IW_PRIV_SIZE_MASK       0x07FF  /* Max number of those args */
314
315/*
316 * Note : if the number of args is fixed and the size < 16 octets,
317 * instead of passing a pointer we will put args in the iwreq struct...
318 */
319
320/* ----------------------- OTHER CONSTANTS ----------------------- */
321
322/* Maximum frequencies in the range struct */
323#define IW_MAX_FREQUENCIES      32
324/* Note : if you have something like 80 frequencies,
325 * don't increase this constant and don't fill the frequency list.
326 * The user will be able to set by channel anyway... */
327
328/* Maximum bit rates in the range struct */
329#define IW_MAX_BITRATES         32
330
331/* Maximum tx powers in the range struct */
332#define IW_MAX_TXPOWER          8
333/* Note : if you more than 8 TXPowers, just set the max and min or
334 * a few of them in the struct iw_range. */
335
336/* Maximum of address that you may set with SPY */
337#define IW_MAX_SPY              8
338
339/* Maximum of address that you may get in the
340   list of access points in range */
341#define IW_MAX_AP               64
342
343/* Maximum size of the ESSID and NICKN strings */
344#define IW_ESSID_MAX_SIZE       32
345
346/* Modes of operation */
347#define IW_MODE_AUTO    0       /* Let the driver decides */
348#define IW_MODE_ADHOC   1       /* Single cell network */
349#define IW_MODE_INFRA   2       /* Multi cell network, roaming, ... */
350#define IW_MODE_MASTER  3       /* Synchronisation master or Access Point */
351#define IW_MODE_REPEAT  4       /* Wireless Repeater (forwarder) */
352#define IW_MODE_SECOND  5       /* Secondary master/repeater (backup) */
353#define IW_MODE_MONITOR 6       /* Passive monitor (listen only) */
354
355/* Maximum number of size of encoding token available
356 * they are listed in the range structure */
357#define IW_MAX_ENCODING_SIZES   8
358
359/* Maximum size of the encoding token in bytes */
360#define IW_ENCODING_TOKEN_MAX   32      /* 256 bits (for now) */
361
362/* Flags for encoding (along with the token) */
363#define IW_ENCODE_INDEX         0x00FF  /* Token index (if needed) */
364#define IW_ENCODE_FLAGS         0xFF00  /* Flags defined below */
365#define IW_ENCODE_MODE          0xF000  /* Modes defined below */
366#define IW_ENCODE_DISABLED      0x8000  /* Encoding disabled */
367#define IW_ENCODE_ENABLED       0x0000  /* Encoding enabled */
368#define IW_ENCODE_RESTRICTED    0x4000  /* Refuse non-encoded packets */
369#define IW_ENCODE_OPEN          0x2000  /* Accept non-encoded packets */
370#define IW_ENCODE_NOKEY         0x0800  /* Key is write only, so not present */
371#define IW_ENCODE_TEMP          0x0400  /* Temporary key */
372
373/* Power management flags available (along with the value, if any) */
374#define IW_POWER_ON             0x0000  /* No details... */
375#define IW_POWER_TYPE           0xF000  /* Type of parameter */
376#define IW_POWER_PERIOD         0x1000  /* Value is a period/duration of  */
377#define IW_POWER_TIMEOUT        0x2000  /* Value is a timeout (to go asleep) */
378#define IW_POWER_MODE           0x0F00  /* Power Management mode */
379#define IW_POWER_UNICAST_R      0x0100  /* Receive only unicast messages */
380#define IW_POWER_MULTICAST_R    0x0200  /* Receive only multicast messages */
381#define IW_POWER_ALL_R          0x0300  /* Receive all messages though PM */
382#define IW_POWER_FORCE_S        0x0400  /* Force PM procedure for sending unicast */
383#define IW_POWER_REPEATER       0x0800  /* Repeat broadcast messages in PM period */
384#define IW_POWER_MODIFIER       0x000F  /* Modify a parameter */
385#define IW_POWER_MIN            0x0001  /* Value is a minimum  */
386#define IW_POWER_MAX            0x0002  /* Value is a maximum */
387#define IW_POWER_RELATIVE       0x0004  /* Value is not in seconds/ms/us */
388
389/* Transmit Power flags available */
390#define IW_TXPOW_TYPE           0x00FF  /* Type of value */
391#define IW_TXPOW_DBM            0x0000  /* Value is in dBm */
392#define IW_TXPOW_MWATT          0x0001  /* Value is in mW */
393#define IW_TXPOW_RANGE          0x1000  /* Range of value between min/max */
394
395/* Retry limits and lifetime flags available */
396#define IW_RETRY_ON             0x0000  /* No details... */
397#define IW_RETRY_TYPE           0xF000  /* Type of parameter */
398#define IW_RETRY_LIMIT          0x1000  /* Maximum number of retries*/
399#define IW_RETRY_LIFETIME       0x2000  /* Maximum duration of retries in us */
400#define IW_RETRY_MODIFIER       0x000F  /* Modify a parameter */
401#define IW_RETRY_MIN            0x0001  /* Value is a minimum  */
402#define IW_RETRY_MAX            0x0002  /* Value is a maximum */
403#define IW_RETRY_RELATIVE       0x0004  /* Value is not in seconds/ms/us */
404
405/* Scanning request flags */
406#define IW_SCAN_DEFAULT         0x0000  /* Default scan of the driver */
407#define IW_SCAN_ALL_ESSID       0x0001  /* Scan all ESSIDs */
408#define IW_SCAN_THIS_ESSID      0x0002  /* Scan only this ESSID */
409#define IW_SCAN_ALL_FREQ        0x0004  /* Scan all Frequencies */
410#define IW_SCAN_THIS_FREQ       0x0008  /* Scan only this Frequency */
411#define IW_SCAN_ALL_MODE        0x0010  /* Scan all Modes */
412#define IW_SCAN_THIS_MODE       0x0020  /* Scan only this Mode */
413#define IW_SCAN_ALL_RATE        0x0040  /* Scan all Bit-Rates */
414#define IW_SCAN_THIS_RATE       0x0080  /* Scan only this Bit-Rate */
415/* Maximum size of returned data */
416#define IW_SCAN_MAX_DATA        4096    /* In bytes */
417
418/* Max number of char in custom event - use multiple of them if needed */
419#define IW_CUSTOM_MAX           256     /* In bytes */
420
421/****************************** TYPES ******************************/
422
423/* --------------------------- SUBTYPES --------------------------- */
424/*
425 *      Generic format for most parameters that fit in an int
426 */
427struct  iw_param
428{
429  __s32         value;          /* The value of the parameter itself */
430  __u8          fixed;          /* Hardware should not use auto select */
431  __u8          disabled;       /* Disable the feature */
432  __u16         flags;          /* Various specifc flags (if any) */
433};
434
435/*
436 *      For all data larger than 16 octets, we need to use a
437 *      pointer to memory allocated in user space.
438 */
439struct  iw_point
440{
441  caddr_t       pointer;        /* Pointer to the data  (in user space) */
442  __u16         length;         /* number of fields or size in bytes */
443  __u16         flags;          /* Optional params */
444};
445
446/*
447 *      A frequency
448 *      For numbers lower than 10^9, we encode the number in 'm' and
449 *      set 'e' to 0
450 *      For number greater than 10^9, we divide it by the lowest power
451 *      of 10 to get 'm' lower than 10^9, with 'm'= f / (10^'e')...
452 *      The power of 10 is in 'e', the result of the division is in 'm'.
453 */
454struct  iw_freq
455{
456        __s32           m;              /* Mantissa */
457        __s16           e;              /* Exponent */
458        __u8            i;              /* List index (when in range struct) */
459        __u8            pad;            /* Unused - just for alignement */
460};
461
462/*
463 *      Quality of the link
464 */
465struct  iw_quality
466{
467        __u8            qual;           /* link quality (%retries, SNR,
468                                           %missed beacons or better...) */
469        __u8            level;          /* signal level (dBm) */
470        __u8            noise;          /* noise level (dBm) */
471        __u8            updated;        /* Flags to know if updated */
472};
473
474/*
475 *      Packet discarded in the wireless adapter due to
476 *      "wireless" specific problems...
477 *      Note : the list of counter and statistics in net_device_stats
478 *      is already pretty exhaustive, and you should use that first.
479 *      This is only additional stats...
480 */
481struct  iw_discarded
482{
483        __u32           nwid;           /* Rx : Wrong nwid/essid */
484        __u32           code;           /* Rx : Unable to code/decode (WEP) */
485        __u32           fragment;       /* Rx : Can't perform MAC reassembly */
486        __u32           retries;        /* Tx : Max MAC retries num reached */
487        __u32           misc;           /* Others cases */
488};
489
490/*
491 *      Packet/Time period missed in the wireless adapter due to
492 *      "wireless" specific problems...
493 */
494struct  iw_missed
495{
496        __u32           beacon;         /* Missed beacons/superframe */
497};
498
499/*
500 *      Quality range (for spy threshold)
501 */
502struct  iw_thrspy
503{
504        struct sockaddr         addr;           /* Source address (hw/mac) */
505        struct iw_quality       qual;           /* Quality of the link */
506        struct iw_quality       low;            /* Low threshold */
507        struct iw_quality       high;           /* High threshold */
508};
509
510/* ------------------------ WIRELESS STATS ------------------------ */
511/*
512 * Wireless statistics (used for /proc/net/wireless)
513 */
514struct  iw_statistics
515{
516        __u16           status;         /* Status
517                                         * - device dependent for now */
518
519        struct iw_quality       qual;           /* Quality of the link
520                                                 * (instant/mean/max) */
521        struct iw_discarded     discard;        /* Packet discarded counts */
522        struct iw_missed        miss;           /* Packet missed counts */
523};
524
525/* ------------------------ IOCTL REQUEST ------------------------ */
526/*
527 * This structure defines the payload of an ioctl, and is used
528 * below.
529 *
530 * Note that this structure should fit on the memory footprint
531 * of iwreq (which is the same as ifreq), which mean a max size of
532 * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
533 * You should check this when increasing the structures defined
534 * above in this file...
535 */
536union   iwreq_data
537{
538        /* Config - generic */
539        char            name[IFNAMSIZ];
540        /* Name : used to verify the presence of  wireless extensions.
541         * Name of the protocol/provider... */
542
543        struct iw_point essid;          /* Extended network name */
544        struct iw_param nwid;           /* network id (or domain - the cell) */
545        struct iw_freq  freq;           /* frequency or channel :
546                                         * 0-1000 = channel
547                                         * > 1000 = frequency in Hz */
548
549        struct iw_param sens;           /* signal level threshold */
550        struct iw_param bitrate;        /* default bit rate */
551        struct iw_param txpower;        /* default transmit power */
552        struct iw_param rts;            /* RTS threshold threshold */
553        struct iw_param frag;           /* Fragmentation threshold */
554        __u32           mode;           /* Operation mode */
555        struct iw_param retry;          /* Retry limits & lifetime */
556
557        struct iw_point encoding;       /* Encoding stuff : tokens */
558        struct iw_param power;          /* PM duration/timeout */
559        struct iw_quality qual;         /* Quality part of statistics */
560
561        struct sockaddr ap_addr;        /* Access point address */
562        struct sockaddr addr;           /* Destination address (hw/mac) */
563
564        struct iw_param param;          /* Other small parameters */
565        struct iw_point data;           /* Other large parameters */
566};
567
568/*
569 * The structure to exchange data for ioctl.
570 * This structure is the same as 'struct ifreq', but (re)defined for
571 * convenience...
572 * Do I need to remind you about structure size (32 octets) ?
573 */
574struct  iwreq
575{
576        union
577        {
578                char    ifrn_name[IFNAMSIZ];    /* if name, e.g. "eth0" */
579        } ifr_ifrn;
580
581        /* Data part (defined just above) */
582        union   iwreq_data      u;
583};
584
585/* -------------------------- IOCTL DATA -------------------------- */
586/*
587 *      For those ioctl which want to exchange mode data that what could
588 *      fit in the above structure...
589 */
590
591/*
592 *      Range of parameters
593 */
594
595struct  iw_range
596{
597        /* Informative stuff (to choose between different interface) */
598        __u32           throughput;     /* To give an idea... */
599        /* In theory this value should be the maximum benchmarked
600         * TCP/IP throughput, because with most of these devices the
601         * bit rate is meaningless (overhead an co) to estimate how
602         * fast the connection will go and pick the fastest one.
603         * I suggest people to play with Netperf or any benchmark...
604         */
605
606        /* NWID (or domain id) */
607        __u32           min_nwid;       /* Minimal NWID we are able to set */
608        __u32           max_nwid;       /* Maximal NWID we are able to set */
609
610        /* Old Frequency (backward compat - moved lower ) */
611        __u16           old_num_channels;
612        __u8            old_num_frequency;
613        /* Filler to keep "version" at the same offset */
614        __s32           old_freq[6];
615
616        /* signal level threshold range */
617        __s32   sensitivity;
618
619        /* Quality of link & SNR stuff */
620        /* Quality range (link, level, noise)
621         * If the quality is absolute, it will be in the range [0 ; max_qual],
622         * if the quality is dBm, it will be in the range [max_qual ; 0].
623         * Don't forget that we use 8 bit arithmetics... */
624        struct iw_quality       max_qual;       /* Quality of the link */
625        /* This should contain the average/typical values of the quality
626         * indicator. This should be the threshold between a "good" and
627         * a "bad" link (example : monitor going from green to orange).
628         * Currently, user space apps like quality monitors don't have any
629         * way to calibrate the measurement. With this, they can split
630         * the range between 0 and max_qual in different quality level
631         * (using a geometric subdivision centered on the average).
632         * I expect that people doing the user space apps will feedback
633         * us on which value we need to put in each driver... */
634        struct iw_quality       avg_qual;       /* Quality of the link */
635
636        /* Rates */
637        __u8            num_bitrates;   /* Number of entries in the list */
638        __s32           bitrate[IW_MAX_BITRATES];       /* list, in bps */
639
640        /* RTS threshold */
641        __s32           min_rts;        /* Minimal RTS threshold */
642        __s32           max_rts;        /* Maximal RTS threshold */
643
644        /* Frag threshold */
645        __s32           min_frag;       /* Minimal frag threshold */
646        __s32           max_frag;       /* Maximal frag threshold */
647
648        /* Power Management duration & timeout */
649        __s32           min_pmp;        /* Minimal PM period */
650        __s32           max_pmp;        /* Maximal PM period */
651        __s32           min_pmt;        /* Minimal PM timeout */
652        __s32           max_pmt;        /* Maximal PM timeout */
653        __u16           pmp_flags;      /* How to decode max/min PM period */
654        __u16           pmt_flags;      /* How to decode max/min PM timeout */
655        __u16           pm_capa;        /* What PM options are supported */
656
657        /* Encoder stuff */
658        __u16   encoding_size[IW_MAX_ENCODING_SIZES];   /* Different token sizes */
659        __u8    num_encoding_sizes;     /* Number of entry in the list */
660        __u8    max_encoding_tokens;    /* Max number of tokens */
661        /* For drivers that need a "login/passwd" form */
662        __u8    encoding_login_index;   /* token index for login token */
663
664        /* Transmit power */
665        __u16           txpower_capa;   /* What options are supported */
666        __u8            num_txpower;    /* Number of entries in the list */
667        __s32           txpower[IW_MAX_TXPOWER];        /* list, in bps */
668
669        /* Wireless Extension version info */
670        __u8            we_version_compiled;    /* Must be WIRELESS_EXT */
671        __u8            we_version_source;      /* Last update of source */
672
673        /* Retry limits and lifetime */
674        __u16           retry_capa;     /* What retry options are supported */
675        __u16           retry_flags;    /* How to decode max/min retry limit */
676        __u16           r_time_flags;   /* How to decode max/min retry life */
677        __s32           min_retry;      /* Minimal number of retries */
678        __s32           max_retry;      /* Maximal number of retries */
679        __s32           min_r_time;     /* Minimal retry lifetime */
680        __s32           max_r_time;     /* Maximal retry lifetime */
681
682        /* Frequency */
683        __u16           num_channels;   /* Number of channels [0; num - 1] */
684        __u8            num_frequency;  /* Number of entry in the list */
685        struct iw_freq  freq[IW_MAX_FREQUENCIES];       /* list */
686        /* Note : this frequency list doesn't need to fit channel numbers,
687         * because each entry contain its channel index */
688};
689
690/*
691 * Private ioctl interface information
692 */
693 
694struct  iw_priv_args
695{
696        __u32           cmd;            /* Number of the ioctl to issue */
697        __u16           set_args;       /* Type and number of args */
698        __u16           get_args;       /* Type and number of args */
699        char            name[IFNAMSIZ]; /* Name of the extension */
700};
701
702/* ----------------------- WIRELESS EVENTS ----------------------- */
703/*
704 * Wireless events are carried through the rtnetlink socket to user
705 * space. They are encapsulated in the IFLA_WIRELESS field of
706 * a RTM_NEWLINK message.
707 */
708
709/*
710 * A Wireless Event. Contains basically the same data as the ioctl...
711 */
712struct iw_event
713{
714        __u16           len;                    /* Real lenght of this stuff */
715        __u16           cmd;                    /* Wireless IOCTL */
716        union iwreq_data        u;              /* IOCTL fixed payload */
717};
718
719/* Size of the Event prefix (including padding and alignement junk) */
720#define IW_EV_LCP_LEN   (sizeof(struct iw_event) - sizeof(union iwreq_data))
721/* Size of the various events */
722#define IW_EV_CHAR_LEN  (IW_EV_LCP_LEN + IFNAMSIZ)
723#define IW_EV_UINT_LEN  (IW_EV_LCP_LEN + sizeof(__u32))
724#define IW_EV_FREQ_LEN  (IW_EV_LCP_LEN + sizeof(struct iw_freq))
725#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point))
726#define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param))
727#define IW_EV_ADDR_LEN  (IW_EV_LCP_LEN + sizeof(struct sockaddr))
728#define IW_EV_QUAL_LEN  (IW_EV_LCP_LEN + sizeof(struct iw_quality))
729
730/* Note : in the case of iw_point, the extra data will come at the
731 * end of the event */
732
733#endif  /* _LINUX_WIRELESS_H */
Note: See TracBrowser for help on using the repository browser.