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

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