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