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