summaryrefslogtreecommitdiff
path: root/libopie2
authormickeyl <mickeyl>2004-02-23 18:37:03 (UTC)
committer mickeyl <mickeyl>2004-02-23 18:37:03 (UTC)
commit19b274033fc05d5190cee2fa974c683892173c84 (patch) (unidiff)
tree2ad0727ba2414c215cb4b55b93f3b610304c1742 /libopie2
parentab0203a43a30598774d8d8a1cf32075817d0dceb (diff)
downloadopie-19b274033fc05d5190cee2fa974c683892173c84.zip
opie-19b274033fc05d5190cee2fa974c683892173c84.tar.gz
opie-19b274033fc05d5190cee2fa974c683892173c84.tar.bz2
The Linux Wireless Extensions V16 introduce some massive changes in the
binary structures. Since we still use V15 on most target platforms I have to introduce two headers. Define OPIE_WE_VERSION to specify which header to include
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/onetwork.cpp37
-rw-r--r--libopie2/opienet/onetwork.h12
-rw-r--r--libopie2/opienet/opienet.pro6
-rw-r--r--libopie2/opienet/wireless.15.h (copied from libopie2/opienet/wireless.h)0
-rw-r--r--libopie2/opienet/wireless.16.h (renamed from libopie2/opienet/wireless.h)91
5 files changed, 107 insertions, 39 deletions
diff --git a/libopie2/opienet/onetwork.cpp b/libopie2/opienet/onetwork.cpp
index 16fa8ae..36f409b 100644
--- a/libopie2/opienet/onetwork.cpp
+++ b/libopie2/opienet/onetwork.cpp
@@ -1,16 +1,16 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) 2003 by Michael 'Mickey' Lauer <mickey@Vanille.de> 3              Copyright (C) 2003-2004 by Michael 'Mickey' Lauer
4 =. 4 =. <mickey@Vanille.de>
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This program is free software; you can 7 _;:,     .>    :=|. This program is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This program is distributed in the hope that 14    .i_,=:_.      -<s. This program is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
@@ -573,26 +573,33 @@ void OWirelessNetworkInterface::buildPrivateList()
573 for ( int i = 0; i < _iwr.u.data.length; ++i ) 573 for ( int i = 0; i < _iwr.u.data.length; ++i )
574 { 574 {
575 new OPrivateIOCTL( this, priv[i].name, priv[i].cmd, priv[i].get_args, priv[i].set_args ); 575 new OPrivateIOCTL( this, priv[i].name, priv[i].cmd, priv[i].get_args, priv[i].set_args );
576 } 576 }
577 odebug << "OWirelessNetworkInterface::buildPrivateList(): Private ioctl list constructed." << oendl; 577 odebug << "OWirelessNetworkInterface::buildPrivateList(): Private ioctl list constructed." << oendl;
578} 578}
579 579
580 580
581void OWirelessNetworkInterface::dumpInformation() const 581void OWirelessNetworkInterface::dumpInformation() const
582{ 582{
583 odebug << "OWirelessNetworkInterface::() -------------- dumping information block ----------------" << oendl; 583 odebug << "OWirelessNetworkInterface::() -------------- dumping information block ----------------" << oendl;
584 584
585 qDebug( " - driver's idea of maximum throughput is %d bps = %d byte/s = %d Kb/s = %f.2 Mb/s", _range.throughput, _range.throughput / 8, _range.throughput / 8 / 1024, float( _range.throughput ) / 8.0 / 1024.0 / 1024.0 ); 585 qDebug( " - driver's idea of maximum throughput is %d bps = %d byte/s = %d Kb/s = %f.2 Mb/s",
586 qDebug( " - driver for '%s' has been compiled against WE V%d (source=V%d)", name(), _range.we_version_compiled, _range.we_version_source ); 586 _range.throughput, _range.throughput / 8, _range.throughput / 8 / 1024, float( _range.throughput ) / 8.0 / 1024.0 / 1024.0 );
587 qDebug( " - driver for '%s' (V%d) has been compiled against WE V%d",
588 name(), _range.we_version_source, _range.we_version_compiled );
589
590 if ( _range.we_version_compiled != WIRELESS_EXT )
591 {
592 owarn << "Version mismatch! WE_DRIVER = " << _range.we_version_compiled << " and WE_OPIENET = " << WIRELESS_EXT << oendl;
593 }
587 594
588 odebug << "OWirelessNetworkInterface::() ---------------------------------------------------------" << oendl; 595 odebug << "OWirelessNetworkInterface::() ---------------------------------------------------------" << oendl;
589} 596}
590 597
591 598
592int OWirelessNetworkInterface::channel() const 599int OWirelessNetworkInterface::channel() const
593{ 600{
594 //FIXME: When monitoring enabled, then use it 601 //FIXME: When monitoring enabled, then use it
595 //FIXME: to gather the current RF channel 602 //FIXME: to gather the current RF channel
596 //FIXME: Until then, get active channel from hopper. 603 //FIXME: Until then, get active channel from hopper.
597 if ( _hopper && _hopper->isActive() ) 604 if ( _hopper && _hopper->isActive() )
598 return _hopper->channel(); 605 return _hopper->channel();
@@ -956,28 +963,42 @@ OStationList* OWirelessNetworkInterface::scanNetwork()
956 return stations; 963 return stations;
957 964
958 } 965 }
959 else 966 else
960 { 967 {
961 odebug << " - no results (timeout) :(" << oendl; 968 odebug << " - no results (timeout) :(" << oendl;
962 return stations; 969 return stations;
963 } 970 }
964} 971}
965 972
966 973
967int OWirelessNetworkInterface::signalStrength() const 974int OWirelessNetworkInterface::signalStrength() const
968{ 975{
969 int max = _range.max_qual.level; 976 iw_statistics stat;
970 odebug << "signalStrength(): max quality seems to be " << max << "dBM" << oendl; 977 ::memset( &stat, 0, sizeof stat );
971 return 50; 978 _iwr.u.data.pointer = (char*) &stat;
979 _iwr.u.data.flags = 0;
980 _iwr.u.data.length = sizeof stat;
981
982 if ( !wioctl( SIOCGIWSTATS ) )
983 {
984 return -1;
985 }
986
987 int max = _range.max_qual.qual;
988 int cur = stat.qual.qual;
989 int lev = stat.qual.level; //FIXME: Do something with them?
990 int noi = stat.qual.noise; //FIXME: Do something with them?
991
992 return cur*100/max;
972} 993}
973 994
974 995
975bool OWirelessNetworkInterface::wioctl( int call, struct iwreq& iwreq ) const 996bool OWirelessNetworkInterface::wioctl( int call, struct iwreq& iwreq ) const
976{ 997{
977 #ifndef NODEBUG 998 #ifndef NODEBUG
978 int result = ::ioctl( _sfd, call, &iwreq ); 999 int result = ::ioctl( _sfd, call, &iwreq );
979 1000
980 if ( result == -1 ) 1001 if ( result == -1 )
981 odebug << "ONetworkInterface::wioctl (" << name() << ") call '" 1002 odebug << "ONetworkInterface::wioctl (" << name() << ") call '"
982 << debugmapper->map( call ) << "' FAILED! " << result << " (" << strerror( errno ) << ")" << oendl; 1003 << debugmapper->map( call ) << "' FAILED! " << result << " (" << strerror( errno ) << ")" << oendl;
983 else 1004 else
diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h
index 9b8a0d4..0a51108 100644
--- a/libopie2/opienet/onetwork.h
+++ b/libopie2/opienet/onetwork.h
@@ -22,25 +22,35 @@
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28 28
29*/ 29*/
30 30
31#ifndef ONETWORK_H 31#ifndef ONETWORK_H
32#define ONETWORK_H 32#define ONETWORK_H
33 33
34#include "wireless.h" 34#if !defined( OPIE_WE_VERSION )
35#error Need to define a wireless extension version to build against!
36#endif
37
38#if OPIE_WE_VERSION == 15
39#include "wireless.15.h"
40#endif
41
42#if OPIE_WE_VERSION == 16
43#include "wireless.16.h"
44#endif
35 45
36/* OPIE */ 46/* OPIE */
37 47
38#include <opie2/onetutils.h> 48#include <opie2/onetutils.h>
39#include <opie2/ostation.h> 49#include <opie2/ostation.h>
40 50
41/* QT */ 51/* QT */
42 52
43#include <qvaluelist.h> 53#include <qvaluelist.h>
44#include <qdict.h> 54#include <qdict.h>
45#include <qmap.h> 55#include <qmap.h>
46#include <qobject.h> 56#include <qobject.h>
diff --git a/libopie2/opienet/opienet.pro b/libopie2/opienet/opienet.pro
index cab6da6..97bcf31 100644
--- a/libopie2/opienet/opienet.pro
+++ b/libopie2/opienet/opienet.pro
@@ -1,34 +1,36 @@
1TEMPLATE = lib 1TEMPLATE = lib
2CONFIG += qt warn_on debug 2CONFIG += 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 udp_ports.h \ 6 udp_ports.h \
7 wireless.h \ 7 wireless.15.h \
8 wireless.16.h \
8 odebugmapper.h \ 9 odebugmapper.h \
9 omanufacturerdb.h \ 10 omanufacturerdb.h \
10 onetutils.h \ 11 onetutils.h \
11 onetwork.h \ 12 onetwork.h \
12 opcap.h \ 13 opcap.h \
13 ostation.h 14 ostation.h
14SOURCES = odebugmapper.cpp \ 15SOURCES = odebugmapper.cpp \
15 omanufacturerdb.cpp \ 16 omanufacturerdb.cpp \
16 onetutils.cpp \ 17 onetutils.cpp \
17 onetwork.cpp \ 18 onetwork.cpp \
18 opcap.cpp \ 19 opcap.cpp \
19 ostation.cpp 20 ostation.cpp
20INTERFACES = 21INTERFACES =
21TARGET = opienet2 22TARGET = opienet2
22VERSION = 1.8.3 23VERSION = 1.8.3
23INCLUDEPATH += $(OPIEDIR)/include 24INCLUDEPATH += $(OPIEDIR)/include
24DEPENDPATH += $(OPIEDIR)/include 25DEPENDPATH += $(OPIEDIR)/include
25LIBS += -lpcap 26LIBS += -lpcap
26 27
27 28
28!contains( platform, x11 ) { 29!contains( platform, x11 ) {
29 include ( $(OPIEDIR)/include.pro ) 30 include ( $(OPIEDIR)/include.pro )
30} 31}
31 32
32contains( platform, x11 ) { 33contains( platform, x11 ) {
33 LIBS += -L$(OPIEDIR)/lib -Wl,-rpath,$(OPIEDIR)/lib 34 LIBS += -L$(OPIEDIR)/lib -Wl,-rpath,$(OPIEDIR)/lib
34} 35}
36
diff --git a/libopie2/opienet/wireless.h b/libopie2/opienet/wireless.15.h
index 8135e97..8135e97 100644
--- a/libopie2/opienet/wireless.h
+++ b/libopie2/opienet/wireless.15.h
diff --git a/libopie2/opienet/wireless.h b/libopie2/opienet/wireless.16.h
index 8135e97..9a9accd 100644
--- a/libopie2/opienet/wireless.h
+++ b/libopie2/opienet/wireless.16.h
@@ -1,16 +1,16 @@
1/* 1/*
2 * This file define a set of standard wireless extensions 2 * This file define a set of standard wireless extensions
3 * 3 *
4 * Version : 1512.7.02 4 * Version : 162.4.03
5 * 5 *
6 * Authors :Jean Tourrilhes - HPL - <jt@hpl.hp.com> 6 * Authors :Jean Tourrilhes - HPL - <jt@hpl.hp.com>
7 * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved. 7 * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
8 */ 8 */
9 9
10#ifndef _LINUX_WIRELESS_H 10#ifndef _LINUX_WIRELESS_H
11#define _LINUX_WIRELESS_H 11#define _LINUX_WIRELESS_H
12 12
13/************************** DOCUMENTATION **************************/ 13/************************** DOCUMENTATION **************************/
14/* 14/*
15 * Initial APIs (1996 -> onward) : 15 * Initial APIs (1996 -> onward) :
16 * ----------------------------- 16 * -----------------------------
@@ -60,43 +60,45 @@
60 * (drivers init, ifconfig, /proc/net/dev, ...) and with are not 60 * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
61 * wireless specific. 61 * wireless specific.
62 * 62 *
63 * These wireless extensions are not magic : each driver has to provide 63 * These wireless extensions are not magic : each driver has to provide
64 * support for them... 64 * support for them...
65 * 65 *
66 * IMPORTANT NOTE : As everything in the kernel, this is very much a 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... 67 * work in progress. Contact me if you have ideas of improvements...
68 */ 68 */
69 69
70/***************************** INCLUDES *****************************/ 70/***************************** INCLUDES *****************************/
71 71
72/* To minimise problems in user space, I might remove those headers
73 * at some point. Jean II */
72#include <sys/types.h> 74#include <sys/types.h>
73#include <net/if.h> 75#include <net/if.h>
74#include <linux/types.h> 76#include <linux/types.h>
75 77
76#ifndef IFNAMSIZ 78#ifndef IFNAMSIZ
77#define IFNAMSIZ 16 79#define IFNAMSIZ 16
78#endif 80#endif
79#ifndef IW_MAX_PRIV_DEF 81#ifndef IW_MAX_PRIV_DEF
80#define IW_MAX_PRIV_DEF 128 82#define IW_MAX_PRIV_DEF 128
81#endif 83#endif
82 84
83/***************************** VERSION *****************************/ 85/***************************** VERSION *****************************/
84/* 86/*
85 * This constant is used to know the availability of the wireless 87 * This constant is used to know the availability of the wireless
86 * extensions and to know which version of wireless extensions it is 88 * extensions and to know which version of wireless extensions it is
87 * (there is some stuff that will be added in the future...) 89 * (there is some stuff that will be added in the future...)
88 * I just plan to increment with each new version. 90 * I just plan to increment with each new version.
89 */ 91 */
90 #define WIRELESS_EXT15 92 #define WIRELESS_EXT16
91 93
92/* 94/*
93 * Changes : 95 * Changes :
94 * 96 *
95 * V2 to V3 97 * V2 to V3
96 * -------- 98 * --------
97 *Alan Cox start some incompatibles changes. I've integrated a bit more. 99 *Alan Cox start some incompatibles changes. I've integrated a bit more.
98 *- Encryption renamed to Encode to avoid US regulation problems 100 *- Encryption renamed to Encode to avoid US regulation problems
99 *- Frequency changed from float to struct to avoid problems on old 386 101 *- Frequency changed from float to struct to avoid problems on old 386
100 * 102 *
101 * V3 to V4 103 * V3 to V4
102 * -------- 104 * --------
@@ -161,24 +163,34 @@
161 *- Add "addr" and "param" fields in union iwreq_data 163 *- Add "addr" and "param" fields in union iwreq_data
162 *- AP scanning stuff (SIOCSIWSCAN and friends) 164 *- AP scanning stuff (SIOCSIWSCAN and friends)
163 * 165 *
164 * V14 to V15 166 * V14 to V15
165 * ---------- 167 * ----------
166 *- Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg 168 *- Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg
167 *- Make struct iw_freq signed (both m & e), add explicit padding 169 *- Make struct iw_freq signed (both m & e), add explicit padding
168 *- Add IWEVCUSTOM for driver specific event/scanning token 170 *- Add IWEVCUSTOM for driver specific event/scanning token
169 *- Add IW_MAX_GET_SPY for driver returning a lot of addresses 171 *- Add IW_MAX_GET_SPY for driver returning a lot of addresses
170 *- Add IW_TXPOW_RANGE for range of Tx Powers 172 *- Add IW_TXPOW_RANGE for range of Tx Powers
171 *- Add IWEVREGISTERED & IWEVEXPIRED events for Access Points 173 *- Add IWEVREGISTERED & IWEVEXPIRED events for Access Points
172 *- Add IW_MODE_MONITOR for passive monitor 174 *- Add IW_MODE_MONITOR for passive monitor
175 *
176 * V15 to V16
177 * ----------
178 *- Increase the number of bitrates in iw_range to 32 (for 802.11g)
179 *- Increase the number of frequencies in iw_range to 32 (for 802.11b+a)
180 *- Reshuffle struct iw_range for increases, add filler
181 *- Increase IW_MAX_AP to 64 for driver returning a lot of addresses
182 *- Remove IW_MAX_GET_SPY because conflict with enhanced spy support
183 *- Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy"
184 *- Add IW_ENCODE_TEMP and iw_range->encoding_login_index
173 */ 185 */
174 186
175/**************************** CONSTANTS ****************************/ 187/**************************** CONSTANTS ****************************/
176 188
177/* -------------------------- IOCTL LIST -------------------------- */ 189/* -------------------------- IOCTL LIST -------------------------- */
178 190
179/* Wireless Identification */ 191/* Wireless Identification */
180 #define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */ 192 #define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */
181 #define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */ 193 #define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
182/* SIOCGIWNAME is used to verify the presence of Wireless Extensions. 194/* SIOCGIWNAME is used to verify the presence of Wireless Extensions.
183 * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"... 195 * 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. */ 196 * Don't put the name of your driver there, it's useless. */
@@ -194,27 +206,29 @@
194 #define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */ 206 #define SIOCGIWSENS 0x8B09 /* get sensitivity (dBm) */
195 207
196/* Informative stuff */ 208/* Informative stuff */
197 #define SIOCSIWRANGE 0x8B0A /* Unused */ 209 #define SIOCSIWRANGE 0x8B0A /* Unused */
198 #define SIOCGIWRANGE 0x8B0B /* Get range of parameters */ 210 #define SIOCGIWRANGE 0x8B0B /* Get range of parameters */
199 #define SIOCSIWPRIV 0x8B0C /* Unused */ 211 #define SIOCSIWPRIV 0x8B0C /* Unused */
200 #define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */ 212 #define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */
201 #define SIOCSIWSTATS 0x8B0E /* Unused */ 213 #define SIOCSIWSTATS 0x8B0E /* Unused */
202 #define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */ 214 #define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */
203/* SIOCGIWSTATS is strictly used between user space and the kernel, and 215/* 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). */ 216 * is never passed to the driver (i.e. the driver will never see it). */
205 217
206/* Mobile IP support (statistics per MAC address) */ 218/* Spy support (statistics per MAC address - used for Mobile IP support) */
207 #define SIOCSIWSPY 0x8B10 /* set spy addresses */ 219 #define SIOCSIWSPY 0x8B10 /* set spy addresses */
208 #define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */ 220 #define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
221 #define SIOCSIWTHRSPY 0x8B12 /* set spy threshold (spy event) */
222 #define SIOCGIWTHRSPY 0x8B13 /* get spy threshold */
209 223
210/* Access Point manipulation */ 224/* Access Point manipulation */
211 #define SIOCSIWAP 0x8B14 /* set access point MAC addresses */ 225 #define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
212 #define SIOCGIWAP 0x8B15 /* get access point MAC addresses */ 226 #define SIOCGIWAP 0x8B15 /* get access point MAC addresses */
213 #define SIOCGIWAPLIST 0x8B17 /* Deprecated in favor of scanning */ 227 #define SIOCGIWAPLIST 0x8B17 /* Deprecated in favor of scanning */
214 #define SIOCSIWSCAN 0x8B18 /* trigger scanning (list cells) */ 228 #define SIOCSIWSCAN 0x8B18 /* trigger scanning (list cells) */
215 #define SIOCGIWSCAN 0x8B19 /* get scanning results */ 229 #define SIOCGIWSCAN 0x8B19 /* get scanning results */
216 230
217/* 802.11 specific support */ 231/* 802.11 specific support */
218 #define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */ 232 #define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */
219 #define SIOCGIWESSID 0x8B1B /* get ESSID */ 233 #define SIOCGIWESSID 0x8B1B /* get ESSID */
220 #define SIOCSIWNICKN 0x8B1C /* set node name/nickname */ 234 #define SIOCSIWNICKN 0x8B1C /* set node name/nickname */
@@ -292,52 +306,51 @@
292 * the interface (name, type of data) for its private ioctl. 306 * the interface (name, type of data) for its private ioctl.
293 * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV 307 * Privates ioctl are SIOCIWFIRSTPRIV -> SIOCIWLASTPRIV
294 */ 308 */
295 309
296 #define IW_PRIV_TYPE_MASK 0x7000/* Type of arguments */ 310 #define IW_PRIV_TYPE_MASK 0x7000/* Type of arguments */
297 #define IW_PRIV_TYPE_NONE0x0000 311 #define IW_PRIV_TYPE_NONE0x0000
298 #define IW_PRIV_TYPE_BYTE 0x1000/* Char as number */ 312 #define IW_PRIV_TYPE_BYTE 0x1000/* Char as number */
299 #define IW_PRIV_TYPE_CHAR 0x2000/* Char as character */ 313 #define IW_PRIV_TYPE_CHAR 0x2000/* Char as character */
300 #define IW_PRIV_TYPE_INT 0x4000/* 32 bits int */ 314 #define IW_PRIV_TYPE_INT 0x4000/* 32 bits int */
301 #define IW_PRIV_TYPE_FLOAT 0x5000/* struct iw_freq */ 315 #define IW_PRIV_TYPE_FLOAT 0x5000/* struct iw_freq */
302 #define IW_PRIV_TYPE_ADDR 0x6000/* struct sockaddr */ 316 #define IW_PRIV_TYPE_ADDR 0x6000/* struct sockaddr */
303 317
304 #define IW_PRIV_SIZE_FIXED 0x0800/* Variable or fixed nuber of args */ 318 #define IW_PRIV_SIZE_FIXED 0x0800/* Variable or fixed number of args */
305 319
306 #define IW_PRIV_SIZE_MASK 0x07FF/* Max number of those args */ 320 #define IW_PRIV_SIZE_MASK 0x07FF/* Max number of those args */
307 321
308/* 322/*
309 * Note : if the number of args is fixed and the size < 16 octets, 323 * 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... 324 * instead of passing a pointer we will put args in the iwreq struct...
311 */ 325 */
312 326
313/* ----------------------- OTHER CONSTANTS ----------------------- */ 327/* ----------------------- OTHER CONSTANTS ----------------------- */
314 328
315/* Maximum frequencies in the range struct */ 329/* Maximum frequencies in the range struct */
316 #define IW_MAX_FREQUENCIES16 330 #define IW_MAX_FREQUENCIES32
317/* Note : if you have something like 80 frequencies, 331/* Note : if you have something like 80 frequencies,
318 * don't increase this constant and don't fill the frequency list. 332 * don't increase this constant and don't fill the frequency list.
319 * The user will be able to set by channel anyway... */ 333 * The user will be able to set by channel anyway... */
320 334
321/* Maximum bit rates in the range struct */ 335/* Maximum bit rates in the range struct */
322 #define IW_MAX_BITRATES 8 336 #define IW_MAX_BITRATES 32
323 337
324/* Maximum tx powers in the range struct */ 338/* Maximum tx powers in the range struct */
325 #define IW_MAX_TXPOWER 8 339 #define IW_MAX_TXPOWER 8
326/* Note : if you more than 8 TXPowers, just set the max and min or 340/* Note : if you more than 8 TXPowers, just set the max and min or
327 * a few of them in the struct iw_range. */ 341 * a few of them in the struct iw_range. */
328 342
329/* Maximum of address that you may set with SPY */ 343/* Maximum of address that you may set with SPY */
330 #define IW_MAX_SPY 8/* set */ 344 #define IW_MAX_SPY 8
331 #define IW_MAX_GET_SPY 64/* get */
332 345
333/* Maximum of address that you may get in the 346/* Maximum of address that you may get in the
334 list of access points in range */ 347 list of access points in range */
335 #define IW_MAX_AP 64 348 #define IW_MAX_AP 64
336 349
337/* Maximum size of the ESSID and NICKN strings */ 350/* Maximum size of the ESSID and NICKN strings */
338 #define IW_ESSID_MAX_SIZE32 351 #define IW_ESSID_MAX_SIZE32
339 352
340/* Modes of operation */ 353/* Modes of operation */
341 #define IW_MODE_AUTO 0/* Let the driver decides */ 354 #define IW_MODE_AUTO 0/* Let the driver decides */
342 #define IW_MODE_ADHOC 1/* Single cell network */ 355 #define IW_MODE_ADHOC 1/* Single cell network */
343 #define IW_MODE_INFRA 2/* Multi cell network, roaming, ... */ 356 #define IW_MODE_INFRA 2/* Multi cell network, roaming, ... */
@@ -352,25 +365,26 @@
352 365
353/* Maximum size of the encoding token in bytes */ 366/* Maximum size of the encoding token in bytes */
354 #define IW_ENCODING_TOKEN_MAX 32/* 256 bits (for now) */ 367 #define IW_ENCODING_TOKEN_MAX 32/* 256 bits (for now) */
355 368
356/* Flags for encoding (along with the token) */ 369/* Flags for encoding (along with the token) */
357 #define IW_ENCODE_INDEX 0x00FF/* Token index (if needed) */ 370 #define IW_ENCODE_INDEX 0x00FF/* Token index (if needed) */
358 #define IW_ENCODE_FLAGS 0xFF00/* Flags defined below */ 371 #define IW_ENCODE_FLAGS 0xFF00/* Flags defined below */
359 #define IW_ENCODE_MODE 0xF000/* Modes defined below */ 372 #define IW_ENCODE_MODE 0xF000/* Modes defined below */
360 #define IW_ENCODE_DISABLED 0x8000/* Encoding disabled */ 373 #define IW_ENCODE_DISABLED 0x8000/* Encoding disabled */
361 #define IW_ENCODE_ENABLED 0x0000/* Encoding enabled */ 374 #define IW_ENCODE_ENABLED 0x0000/* Encoding enabled */
362 #define IW_ENCODE_RESTRICTED 0x4000/* Refuse non-encoded packets */ 375 #define IW_ENCODE_RESTRICTED 0x4000/* Refuse non-encoded packets */
363 #define IW_ENCODE_OPEN 0x2000/* Accept non-encoded packets */ 376 #define IW_ENCODE_OPEN 0x2000/* Accept non-encoded packets */
364#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */ 377 #define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
378 #define IW_ENCODE_TEMP 0x0400 /* Temporary key */
365 379
366/* Power management flags available (along with the value, if any) */ 380/* Power management flags available (along with the value, if any) */
367 #define IW_POWER_ON 0x0000/* No details... */ 381 #define IW_POWER_ON 0x0000/* No details... */
368 #define IW_POWER_TYPE 0xF000/* Type of parameter */ 382 #define IW_POWER_TYPE 0xF000/* Type of parameter */
369 #define IW_POWER_PERIOD 0x1000/* Value is a period/duration of */ 383 #define IW_POWER_PERIOD 0x1000/* Value is a period/duration of */
370 #define IW_POWER_TIMEOUT 0x2000/* Value is a timeout (to go asleep) */ 384 #define IW_POWER_TIMEOUT 0x2000/* Value is a timeout (to go asleep) */
371 #define IW_POWER_MODE 0x0F00/* Power Management mode */ 385 #define IW_POWER_MODE 0x0F00/* Power Management mode */
372 #define IW_POWER_UNICAST_R 0x0100/* Receive only unicast messages */ 386 #define IW_POWER_UNICAST_R 0x0100/* Receive only unicast messages */
373 #define IW_POWER_MULTICAST_R 0x0200/* Receive only multicast messages */ 387 #define IW_POWER_MULTICAST_R 0x0200/* Receive only multicast messages */
374 #define IW_POWER_ALL_R 0x0300/* Receive all messages though PM */ 388 #define IW_POWER_ALL_R 0x0300/* Receive all messages though PM */
375 #define IW_POWER_FORCE_S 0x0400/* Force PM procedure for sending unicast */ 389 #define IW_POWER_FORCE_S 0x0400/* Force PM procedure for sending unicast */
376 #define IW_POWER_REPEATER 0x0800/* Repeat broadcast messages in PM period */ 390 #define IW_POWER_REPEATER 0x0800/* Repeat broadcast messages in PM period */
@@ -480,24 +494,35 @@ struct iw_discarded
480 __u32 misc; /* Others cases */ 494 __u32 misc; /* Others cases */
481}; 495};
482 496
483/* 497/*
484 *Packet/Time period missed in the wireless adapter due to 498 *Packet/Time period missed in the wireless adapter due to
485 *"wireless" specific problems... 499 *"wireless" specific problems...
486 */ 500 */
487 structiw_missed 501 structiw_missed
488{ 502{
489 __u32 beacon; /* Missed beacons/superframe */ 503 __u32 beacon; /* Missed beacons/superframe */
490}; 504};
491 505
506/*
507 *Quality range (for spy threshold)
508 */
509 structiw_thrspy
510{
511 struct sockaddr addr; /* Source address (hw/mac) */
512 struct iw_quality qual; /* Quality of the link */
513 struct iw_quality low; /* Low threshold */
514 struct iw_quality high; /* High threshold */
515};
516
492/* ------------------------ WIRELESS STATS ------------------------ */ 517/* ------------------------ WIRELESS STATS ------------------------ */
493/* 518/*
494 * Wireless statistics (used for /proc/net/wireless) 519 * Wireless statistics (used for /proc/net/wireless)
495 */ 520 */
496 structiw_statistics 521 structiw_statistics
497{ 522{
498 __u16 status; /* Status 523 __u16 status; /* Status
499 * - device dependent for now */ 524 * - device dependent for now */
500 525
501 struct iw_quality qual; /* Quality of the link 526 struct iw_quality qual; /* Quality of the link
502 * (instant/mean/max) */ 527 * (instant/mean/max) */
503 struct iw_discarded discard;/* Packet discarded counts */ 528 struct iw_discarded discard;/* Packet discarded counts */
@@ -532,37 +557,37 @@ union iwreq_data
532 struct iw_param bitrate;/* default bit rate */ 557 struct iw_param bitrate;/* default bit rate */
533 struct iw_param txpower;/* default transmit power */ 558 struct iw_param txpower;/* default transmit power */
534 struct iw_param rts; /* RTS threshold threshold */ 559 struct iw_param rts; /* RTS threshold threshold */
535 struct iw_param frag; /* Fragmentation threshold */ 560 struct iw_param frag; /* Fragmentation threshold */
536 __u32 mode; /* Operation mode */ 561 __u32 mode; /* Operation mode */
537 struct iw_param retry; /* Retry limits & lifetime */ 562 struct iw_param retry; /* Retry limits & lifetime */
538 563
539 struct iw_point encoding;/* Encoding stuff : tokens */ 564 struct iw_point encoding;/* Encoding stuff : tokens */
540 struct iw_param power; /* PM duration/timeout */ 565 struct iw_param power; /* PM duration/timeout */
541 struct iw_quality qual; /* Quality part of statistics */ 566 struct iw_quality qual; /* Quality part of statistics */
542 567
543 struct sockaddr ap_addr;/* Access point address */ 568 struct sockaddr ap_addr;/* Access point address */
544 struct sockaddr addr; /* Destination address (hw) */ 569 struct sockaddr addr; /* Destination address (hw/mac) */
545 570
546 struct iw_param param; /* Other small parameters */ 571 struct iw_param param; /* Other small parameters */
547 struct iw_point data; /* Other large parameters */ 572 struct iw_point data; /* Other large parameters */
548}; 573};
549 574
550/* 575/*
551 * The structure to exchange data for ioctl. 576 * The structure to exchange data for ioctl.
552 * This structure is the same as 'struct ifreq', but (re)defined for 577 * This structure is the same as 'struct ifreq', but (re)defined for
553 * convenience... 578 * convenience...
554 * Do I need to remind you about structure size (32 octets) ? 579 * Do I need to remind you about structure size (32 octets) ?
555 */ 580 */
556 structiwreq 581 structiwreq
557{ 582{
558 union 583 union
559 { 584 {
560 char ifrn_name[IFNAMSIZ];/* if name, e.g. "eth0" */ 585 char ifrn_name[IFNAMSIZ];/* if name, e.g. "eth0" */
561 } ifr_ifrn; 586 } ifr_ifrn;
562 587
563 /* Data part (defined just above) */ 588 /* Data part (defined just above) */
564 union iwreq_datau; 589 union iwreq_datau;
565}; 590};
566 591
567/* -------------------------- IOCTL DATA -------------------------- */ 592/* -------------------------- IOCTL DATA -------------------------- */
568/* 593/*
@@ -580,35 +605,49 @@ struct iw_range
580 __u32 throughput;/* To give an idea... */ 605 __u32 throughput;/* To give an idea... */
581 /* In theory this value should be the maximum benchmarked 606 /* In theory this value should be the maximum benchmarked
582 * TCP/IP throughput, because with most of these devices the 607 * TCP/IP throughput, because with most of these devices the
583 * bit rate is meaningless (overhead an co) to estimate how 608 * bit rate is meaningless (overhead an co) to estimate how
584 * fast the connection will go and pick the fastest one. 609 * fast the connection will go and pick the fastest one.
585 * I suggest people to play with Netperf or any benchmark... 610 * I suggest people to play with Netperf or any benchmark...
586 */ 611 */
587 612
588 /* NWID (or domain id) */ 613 /* NWID (or domain id) */
589 __u32 min_nwid;/* Minimal NWID we are able to set */ 614 __u32 min_nwid;/* Minimal NWID we are able to set */
590 __u32 max_nwid;/* Maximal NWID we are able to set */ 615 __u32 max_nwid;/* Maximal NWID we are able to set */
591 616
592 /* Frequency */ 617 /* Old Frequency (backward compat - moved lower ) */
593 __u16 num_channels;/* Number of channels [0; num - 1] */ 618 __u16 old_num_channels;
594 __u8 num_frequency;/* Number of entry in the list */ 619 __u8 old_num_frequency;
595 struct iw_freq freq[IW_MAX_FREQUENCIES];/* list */ 620 /* Filler to keep "version" at the same offset */
596 /* Note : this frequency list doesn't need to fit channel numbers */ 621 __s32 old_freq[6];
597 622
598 /* signal level threshold range */ 623 /* signal level threshold range */
599 __s32sensitivity; 624 __s32sensitivity;
600 625
601 /* Quality of link & SNR stuff */ 626 /* Quality of link & SNR stuff */
627 /* Quality range (link, level, noise)
628 * If the quality is absolute, it will be in the range [0 ; max_qual],
629 * if the quality is dBm, it will be in the range [max_qual ; 0].
630 * Don't forget that we use 8 bit arithmetics... */
602 struct iw_quality max_qual;/* Quality of the link */ 631 struct iw_quality max_qual;/* Quality of the link */
632 /* This should contain the average/typical values of the quality
633 * indicator. This should be the threshold between a "good" and
634 * a "bad" link (example : monitor going from green to orange).
635 * Currently, user space apps like quality monitors don't have any
636 * way to calibrate the measurement. With this, they can split
637 * the range between 0 and max_qual in different quality level
638 * (using a geometric subdivision centered on the average).
639 * I expect that people doing the user space apps will feedback
640 * us on which value we need to put in each driver... */
641 struct iw_quality avg_qual;/* Quality of the link */
603 642
604 /* Rates */ 643 /* Rates */
605 __u8 num_bitrates;/* Number of entries in the list */ 644 __u8 num_bitrates;/* Number of entries in the list */
606 __s32 bitrate[IW_MAX_BITRATES];/* list, in bps */ 645 __s32 bitrate[IW_MAX_BITRATES];/* list, in bps */
607 646
608 /* RTS threshold */ 647 /* RTS threshold */
609 __s32 min_rts;/* Minimal RTS threshold */ 648 __s32 min_rts;/* Minimal RTS threshold */
610 __s32 max_rts;/* Maximal RTS threshold */ 649 __s32 max_rts;/* Maximal RTS threshold */
611 650
612 /* Frag threshold */ 651 /* Frag threshold */
613 __s32 min_frag;/* Minimal frag threshold */ 652 __s32 min_frag;/* Minimal frag threshold */
614 __s32 max_frag;/* Maximal frag threshold */ 653 __s32 max_frag;/* Maximal frag threshold */
@@ -617,55 +656,51 @@ struct iw_range
617 __s32 min_pmp;/* Minimal PM period */ 656 __s32 min_pmp;/* Minimal PM period */
618 __s32 max_pmp;/* Maximal PM period */ 657 __s32 max_pmp;/* Maximal PM period */
619 __s32 min_pmt;/* Minimal PM timeout */ 658 __s32 min_pmt;/* Minimal PM timeout */
620 __s32 max_pmt;/* Maximal PM timeout */ 659 __s32 max_pmt;/* Maximal PM timeout */
621 __u16 pmp_flags;/* How to decode max/min PM period */ 660 __u16 pmp_flags;/* How to decode max/min PM period */
622 __u16 pmt_flags;/* How to decode max/min PM timeout */ 661 __u16 pmt_flags;/* How to decode max/min PM timeout */
623 __u16 pm_capa;/* What PM options are supported */ 662 __u16 pm_capa;/* What PM options are supported */
624 663
625 /* Encoder stuff */ 664 /* Encoder stuff */
626 __u16 encoding_size[IW_MAX_ENCODING_SIZES];/* Different token sizes */ 665 __u16 encoding_size[IW_MAX_ENCODING_SIZES];/* Different token sizes */
627 __u8 num_encoding_sizes;/* Number of entry in the list */ 666 __u8 num_encoding_sizes;/* Number of entry in the list */
628 __u8 max_encoding_tokens;/* Max number of tokens */ 667 __u8 max_encoding_tokens;/* Max number of tokens */
668 /* For drivers that need a "login/passwd" form */
669 __u8 encoding_login_index;/* token index for login token */
629 670
630 /* Transmit power */ 671 /* Transmit power */
631 __u16 txpower_capa;/* What options are supported */ 672 __u16 txpower_capa;/* What options are supported */
632 __u8 num_txpower;/* Number of entries in the list */ 673 __u8 num_txpower;/* Number of entries in the list */
633 __s32 txpower[IW_MAX_TXPOWER];/* list, in bps */ 674 __s32 txpower[IW_MAX_TXPOWER];/* list, in bps */
634 675
635 /* Wireless Extension version info */ 676 /* Wireless Extension version info */
636 __u8 we_version_compiled;/* Must be WIRELESS_EXT */ 677 __u8 we_version_compiled;/* Must be WIRELESS_EXT */
637 __u8 we_version_source;/* Last update of source */ 678 __u8 we_version_source;/* Last update of source */
638 679
639 /* Retry limits and lifetime */ 680 /* Retry limits and lifetime */
640 __u16 retry_capa;/* What retry options are supported */ 681 __u16 retry_capa;/* What retry options are supported */
641 __u16 retry_flags;/* How to decode max/min retry limit */ 682 __u16 retry_flags;/* How to decode max/min retry limit */
642 __u16 r_time_flags;/* How to decode max/min retry life */ 683 __u16 r_time_flags;/* How to decode max/min retry life */
643 __s32 min_retry;/* Minimal number of retries */ 684 __s32 min_retry;/* Minimal number of retries */
644 __s32 max_retry;/* Maximal number of retries */ 685 __s32 max_retry;/* Maximal number of retries */
645 __s32 min_r_time;/* Minimal retry lifetime */ 686 __s32 min_r_time;/* Minimal retry lifetime */
646 __s32 max_r_time;/* Maximal retry lifetime */ 687 __s32 max_r_time;/* Maximal retry lifetime */
647 688
648 /* Average quality of link & SNR */ 689 /* Frequency */
649 struct iw_quality avg_qual;/* Quality of the link */ 690 __u16 num_channels;/* Number of channels [0; num - 1] */
650 /* This should contain the average/typical values of the quality 691 __u8 num_frequency;/* Number of entry in the list */
651 * indicator. This should be the threshold between a "good" and 692 struct iw_freq freq[IW_MAX_FREQUENCIES];/* list */
652 * a "bad" link (example : monitor going from green to orange). 693 /* Note : this frequency list doesn't need to fit channel numbers,
653 * Currently, user space apps like quality monitors don't have any 694 * because each entry contain its channel index */
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}; 695};
661 696
662/* 697/*
663 * Private ioctl interface information 698 * Private ioctl interface information
664 */ 699 */
665 700
666 structiw_priv_args 701 structiw_priv_args
667{ 702{
668 __u32 cmd; /* Number of the ioctl to issue */ 703 __u32 cmd; /* Number of the ioctl to issue */
669 __u16 set_args;/* Type and number of args */ 704 __u16 set_args;/* Type and number of args */
670 __u16 get_args;/* Type and number of args */ 705 __u16 get_args;/* Type and number of args */
671 char name[IFNAMSIZ];/* Name of the extension */ 706 char name[IFNAMSIZ];/* Name of the extension */