summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-05-03 09:40:07 (UTC)
committer mickeyl <mickeyl>2004-05-03 09:40:07 (UTC)
commitfb6f93892d4d0e0471d62f5b5ab6d9bdef0a5e76 (patch) (unidiff)
tree9ff1498eddd22a29df1639abb66b863ac5d36931
parentd65575b75d8b755e27a1b7c655ad464fc417d093 (diff)
downloadopie-fb6f93892d4d0e0471d62f5b5ab6d9bdef0a5e76.zip
opie-fb6f93892d4d0e0471d62f5b5ab6d9bdef0a5e76.tar.gz
opie-fb6f93892d4d0e0471d62f5b5ab6d9bdef0a5e76.tar.bz2
remove the OPIE_WE_VERSION crap. this was a step into the wrong direction.
remove the wireless.h user headers also. we are doomed to use the kernel ones until Jean himself provides user headers. As a nice side effect, the automatic WE_VERSION detected has been removed. It was too weak anyway, since e.g. the handhelds.org community updated kernel 2.4.19 to WE V16 about 14 months ago...
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--config.in11
-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
5 files changed, 10 insertions, 1479 deletions
diff --git a/config.in b/config.in
index 5c23904..99341e6 100644
--- a/config.in
+++ b/config.in
@@ -1,265 +1,254 @@
1mainmenu "Opie Configuration" 1mainmenu "Opie Configuration"
2 2
3menu "Build Parameters" 3menu "Build Parameters"
4 4
5choice 5choice
6 prompt "Target Machine" 6 prompt "Target Machine"
7 default TARGET_X86 7 default TARGET_X86
8 help 8 help
9 Please select the architecture of the machine you will be 9 Please select the architecture of the machine you will be
10 building the OpenZaurus buildroot for. 10 building the OpenZaurus buildroot for.
11 11
12 config TARGET_X86 12 config TARGET_X86
13 boolean "Intel X86" 13 boolean "Intel X86"
14 14
15 config TARGET_MACOSX 15 config TARGET_MACOSX
16 boolean "Mac OS X (DARWIN)" 16 boolean "Mac OS X (DARWIN)"
17 17
18 config TARGET_SHARP 18 config TARGET_SHARP
19 boolean "Sharp Zaurus w/ SA1100 (5000 and 5500)" 19 boolean "Sharp Zaurus w/ SA1100 (5000 and 5500)"
20 20
21 config TARGET_C700 21 config TARGET_C700
22 boolean "Sharp Zaurus w/ PXA25x (5600, C7x0, C8x0)" 22 boolean "Sharp Zaurus w/ PXA25x (5600, C7x0, C8x0)"
23 23
24 config TARGET_IPAQ 24 config TARGET_IPAQ
25 boolean "iPAQ" 25 boolean "iPAQ"
26 26
27 config TARGET_RAMSES 27 config TARGET_RAMSES
28 boolean "Ramses" 28 boolean "Ramses"
29 29
30 config TARGET_SIMPAD 30 config TARGET_SIMPAD
31 boolean "SIMpad" 31 boolean "SIMpad"
32 32
33 config TARGET_YOPY 33 config TARGET_YOPY
34 boolean "Yopy 3500/3700" 34 boolean "Yopy 3500/3700"
35 35
36endchoice 36endchoice
37 37
38config OPTIMIZE 38config OPTIMIZE
39 boolean "Use optimizations" 39 boolean "Use optimizations"
40 default "y" if ! TARGET_X86 40 default "y" if ! TARGET_X86
41 41
42# added for threaded compile 42# added for threaded compile
43config THREADED 43config THREADED
44 boolean "Enable threaded build" 44 boolean "Enable threaded build"
45 default "n" 45 default "n"
46 46
47config DEBUG 47config DEBUG
48 boolean "Enable debug builds" 48 boolean "Enable debug builds"
49 default n 49 default n
50config RELEASE 50config RELEASE
51 bool 51 bool
52 default y 52 default y
53 depends !DEBUG 53 depends !DEBUG
54 54
55config QUICK_LAUNCH 55config QUICK_LAUNCH
56 boolean "Enable Quick Launch" 56 boolean "Enable Quick Launch"
57 default n if TARGET_X86 57 default n if TARGET_X86
58 default y if ! TARGET_X86 58 default y if ! TARGET_X86
59 59
60config QUICKLAUNCH_PATH 60config QUICKLAUNCH_PATH
61 string "Path to quicklauncher" 61 string "Path to quicklauncher"
62 default "./quicklauncher" if TARGET_X86 62 default "./quicklauncher" if TARGET_X86
63 default "/opt/QtPalmtop/bin/quicklauncher" if ! TARGET_X86 63 default "/opt/QtPalmtop/bin/quicklauncher" if ! TARGET_X86
64 64
65config SPECFILE 65config SPECFILE
66 string 66 string
67 default "qws/linux-generic-g++" if TARGET_X86 && (! X11) 67 default "qws/linux-generic-g++" if TARGET_X86 && (! X11)
68 default "linux-g++" if TARGET_X86 && X11 68 default "linux-g++" if TARGET_X86 && X11
69 default "qws/linux-sharp-g++" if TARGET_SHARP && (! X11) 69 default "qws/linux-sharp-g++" if TARGET_SHARP && (! X11)
70 default "linux-g++" if TARGET_SHARP && X11 70 default "linux-g++" if TARGET_SHARP && X11
71 default "qws/linux-ipaq-g++" if TARGET_IPAQ && (! X11) 71 default "qws/linux-ipaq-g++" if TARGET_IPAQ && (! X11)
72 default "linux-g++" if TARGET_IPAQ && X11 72 default "linux-g++" if TARGET_IPAQ && X11
73 default "qws/linux-ramses-g++" if TARGET_RAMSES && (! X11) 73 default "qws/linux-ramses-g++" if TARGET_RAMSES && (! X11)
74 default "linux-g++" if TARGET_RAMSES && X11 74 default "linux-g++" if TARGET_RAMSES && X11
75 default "qws/linux-simpad-g++" if TARGET_SIMPAD && (! X11) 75 default "qws/linux-simpad-g++" if TARGET_SIMPAD && (! X11)
76 default "linux-g++" if TARGET_SIMPAD && X11 76 default "linux-g++" if TARGET_SIMPAD && X11
77 default "qws/linux-yopy-g++" if TARGET_YOPY && (! X11) 77 default "qws/linux-yopy-g++" if TARGET_YOPY && (! X11)
78 default "qws/macx-generic-g++" if TARGET_MACOSX && (! X11) 78 default "qws/macx-generic-g++" if TARGET_MACOSX && (! X11)
79 79
80config CUSTOMFILE 80config CUSTOMFILE
81 string 81 string
82 default "custom-ipaq.h" if TARGET_IPAQ 82 default "custom-ipaq.h" if TARGET_IPAQ
83 default "custom-sharp.h" if TARGET_SHARP 83 default "custom-sharp.h" if TARGET_SHARP
84 default "custom-ramses.h" if TARGET_RAMSES 84 default "custom-ramses.h" if TARGET_RAMSES
85 default "custom-ipaq.h" if TARGET_SIMPAD 85 default "custom-ipaq.h" if TARGET_SIMPAD
86 default "custom-yopy.h" if TARGET_YOPY 86 default "custom-yopy.h" if TARGET_YOPY
87 87
88config OPTIMIZATIONS 88config OPTIMIZATIONS
89 string "Optimization flags" 89 string "Optimization flags"
90 depends OPTIMIZE 90 depends OPTIMIZE
91 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_IPAQ 91 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_IPAQ
92 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_YOPY 92 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_YOPY
93 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_SHARP 93 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_SHARP
94 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_RAMSES 94 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_RAMSES
95 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_SIMPAD 95 default "-march=armv4 -mtune=strongarm1100 -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_SIMPAD
96 default "-march=armv5te -mtune=xscale -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_C700 96 default "-march=armv5te -mtune=xscale -mapcs-32 -fexpensive-optimizations -fomit-frame-pointer -O2" if TARGET_C700
97 97
98config EXPERIMENTAL 98config EXPERIMENTAL
99 bool "Prompt for development and/or incomplete items" 99 bool "Prompt for development and/or incomplete items"
100 default y 100 default y
101 101
102endmenu 102endmenu
103 103
104menu "Configuration" 104menu "Configuration"
105config OPIE_NO_OVERRIDE_QT 105config OPIE_NO_OVERRIDE_QT
106 boolean "Build Opie against an unpatched version of Qt" 106 boolean "Build Opie against an unpatched version of Qt"
107 default n 107 default n
108 108
109config OPIE_NO_BUILTIN_SHUTDOWN 109config OPIE_NO_BUILTIN_SHUTDOWN
110 boolean "Disable the built in shutdown application" 110 boolean "Disable the built in shutdown application"
111 default y 111 default y
112 112
113config OPIE_NO_BUILTIN_CALIBRATE 113config OPIE_NO_BUILTIN_CALIBRATE
114 boolean "Disable the built in calibrate application" 114 boolean "Disable the built in calibrate application"
115 default y if TARGET_YOPY 115 default y if TARGET_YOPY
116 default n if ! TARGET_YOPY 116 default n if ! TARGET_YOPY
117 117
118config OPIE_SOUND_FRAGMENT_SHIFT 118config OPIE_SOUND_FRAGMENT_SHIFT
119 string "The sound fragment used in Opie Player I" 119 string "The sound fragment used in Opie Player I"
120 default "14" if TARGET_IPAQ 120 default "14" if TARGET_IPAQ
121 default "16" if ! TARGET_IPAQ 121 default "16" if ! TARGET_IPAQ
122 122
123config USE_REALTIME_AUDIO_THREAD 123config USE_REALTIME_AUDIO_THREAD
124 boolean "Use a realtime thread in Opie Player I" 124 boolean "Use a realtime thread in Opie Player I"
125 default y if TARGET_IPAQ || TARGET_SIMPAD || TARGET_RAMSES || TARGET_SHARP 125 default y if TARGET_IPAQ || TARGET_SIMPAD || TARGET_RAMSES || TARGET_SHARP
126 default n if ! (TARGET_IPAQ || TARGET_SIMPAD || TARGET_RAMSES || TARGET_SHARP) 126 default n if ! (TARGET_IPAQ || TARGET_SIMPAD || TARGET_RAMSES || TARGET_SHARP)
127 127
128config QT_QWS_ALLOW_OVERCLOCK 128config QT_QWS_ALLOW_OVERCLOCK
129 boolean "Allow the user to overclock the device" 129 boolean "Allow the user to overclock the device"
130 depends TARGET_RAMSES 130 depends TARGET_RAMSES
131 default n 131 default n
132 132
133config OPIE_HIGH_RES_SMALL_PHY 133config OPIE_HIGH_RES_SMALL_PHY
134 boolean "Resolution is bigger than physical screen" 134 boolean "Resolution is bigger than physical screen"
135 default y if TARGET_C700 135 default y if TARGET_C700
136 default n if ! TARGET_C700 136 default n if ! TARGET_C700
137 137
138config USE_FILE_NOTIFICATION 138config USE_FILE_NOTIFICATION
139 boolean "Substitute (some) polling interfaces with OFileNotifier" 139 boolean "Substitute (some) polling interfaces with OFileNotifier"
140 default y 140 default y
141 141
142config OPIE_NEW_ALLOC 142config OPIE_NEW_ALLOC
143 boolean "Use malloc and free for the implementation" 143 boolean "Use malloc and free for the implementation"
144 default y if TARGET_RAMSES || TARGET_IPAQ || TARGET_SIMPAD || TARGET_SHARP 144 default y if TARGET_RAMSES || TARGET_IPAQ || TARGET_SIMPAD || TARGET_SHARP
145 default n if ! (TARGET_IPAQ || TARGET_SIMPAD || TARGET_RAMSES || TARGET_SHARP) 145 default n if ! (TARGET_IPAQ || TARGET_SIMPAD || TARGET_RAMSES || TARGET_SHARP)
146 146
147config OPIE_NO_SOUND_PCM_READ_BITS 147config OPIE_NO_SOUND_PCM_READ_BITS
148 boolean "There is not a pcm_read_bits io control" 148 boolean "There is not a pcm_read_bits io control"
149 default y if TARGET_SHARP 149 default y if TARGET_SHARP
150 default n if ! TARGET_SHARP 150 default n if ! TARGET_SHARP
151
152config OPIE_WE_VERSION_OVERRIDE
153 boolean "Override autodetection of wireless extension (WE) version"
154 default n
155
156config OPIE_WE_VERSION
157 depends OPIE_WE_VERSION_OVERRIDE
158 string "The wireless extension (WE) version to build against"
159 default "15" if ! TARGET_X86
160 default "16" if TARGET_X86
161
162endmenu 151endmenu
163 152
164menu "Dependencies" 153menu "Dependencies"
165 source dependencies.in 154 source dependencies.in
166endmenu 155endmenu
167 156
168menu "Base" 157menu "Base"
169 choice 158 choice
170 prompt "Qpe Library Selection" 159 prompt "Qpe Library Selection"
171 default LIBQPE 160 default LIBQPE
172 source library/config.in 161 source library/config.in
173 source x11/config.in 162 source x11/config.in
174 endchoice 163 endchoice
175 source libopie/config.in 164 source libopie/config.in
176 165
177 source libopie2/config.in 166 source libopie2/config.in
178 source libqtaux/config.in 167 source libqtaux/config.in
179 source rsync/config.in 168 source rsync/config.in
180 source core/opie-login/config.in 169 source core/opie-login/config.in
181 source core/opiealarm/config.in 170 source core/opiealarm/config.in
182 source core/tools/quicklauncher/config.in 171 source core/tools/quicklauncher/config.in
183 source core/launcher/config.in 172 source core/launcher/config.in
184 source core/symlinker/config.in 173 source core/symlinker/config.in
185endmenu 174endmenu
186 175
187comment "" 176comment ""
188 177
189menu "Applets" 178menu "Applets"
190 source core/applets/config.in 179 source core/applets/config.in
191 source noncore/applets/config.in 180 source noncore/applets/config.in
192endmenu 181endmenu
193 182
194menu "Apps" 183menu "Apps"
195 source core/apps/config.in 184 source core/apps/config.in
196 source noncore/apps/config.in 185 source noncore/apps/config.in
197endmenu 186endmenu
198 187
199menu "Communications and Networking" 188menu "Communications and Networking"
200 source noncore/comm/config.in 189 source noncore/comm/config.in
201 source noncore/net/config.in 190 source noncore/net/config.in
202endmenu 191endmenu
203 192
204menu "Games" 193menu "Games"
205 source noncore/games/config.in 194 source noncore/games/config.in
206endmenu 195endmenu
207 196
208menu "Graphics and Multimedia" 197menu "Graphics and Multimedia"
209 source freetype/config.in 198 source freetype/config.in
210 source noncore/graphics/config.in 199 source noncore/graphics/config.in
211 source core/multimedia/config.in 200 source core/multimedia/config.in
212 source noncore/multimedia/config.in 201 source noncore/multimedia/config.in
213endmenu 202endmenu
214 203
215menu "Input methods" 204menu "Input methods"
216 source inputmethods/config.in 205 source inputmethods/config.in
217endmenu 206endmenu
218 207
219menu "Pim" 208menu "Pim"
220 source core/pim/config.in 209 source core/pim/config.in
221 comment "Today Plugins ---" 210 comment "Today Plugins ---"
222 source noncore/todayplugins/config.in 211 source noncore/todayplugins/config.in
223 source core/pim/today/plugins/config.in 212 source core/pim/today/plugins/config.in
224endmenu 213endmenu
225 214
226menu "Settings" 215menu "Settings"
227 source core/settings/config.in 216 source core/settings/config.in
228 source noncore/settings/config.in 217 source noncore/settings/config.in
229endmenu 218endmenu
230 219
231menu "Theming" 220menu "Theming"
232 comment "Decorations ---" 221 comment "Decorations ---"
233 source noncore/decorations/config.in 222 source noncore/decorations/config.in
234 comment "Styles ---" 223 comment "Styles ---"
235 source noncore/styles/config.in 224 source noncore/styles/config.in
236endmenu 225endmenu
237 226
238menu "Tools" 227menu "Tools"
239 source noncore/tools/config.in 228 source noncore/tools/config.in
240endmenu 229endmenu
241 230
242menu "Development" 231menu "Development"
243 source development/keyview/config.in 232 source development/keyview/config.in
244 #source development/debugviewer/config.in 233 #source development/debugviewer/config.in
245endmenu 234endmenu
246 235
247menu "Examples" 236menu "Examples"
248 config EXAMPLES 237 config EXAMPLES
249 boolean "Compile Example Application" 238 boolean "Compile Example Application"
250 source examples/config.in 239 source examples/config.in
251endmenu 240endmenu
252 241
253comment "" 242comment ""
254 243
255menu "Unsupported / Unmaintained" 244menu "Unsupported / Unmaintained"
256 source noncore/unsupported/config.in 245 source noncore/unsupported/config.in
257endmenu 246endmenu
258 247
259comment "" 248comment ""
260 depends on EXPERIMENTAL 249 depends on EXPERIMENTAL
261menu "Experimental" 250menu "Experimental"
262 depends on EXPERIMENTAL 251 depends on EXPERIMENTAL
263 source libslcompat/config.in 252 source libslcompat/config.in
264 source core/qws/config.in 253 source core/qws/config.in
265endmenu 254endmenu
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,601 +1,588 @@
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 *
261 * This class provides a channel hopper for radio frequencies. A channel hopper frequently 248 * This class provides a channel hopper for radio frequencies. A channel hopper frequently
262 * changes the radio frequency channel of its associated @ref OWirelessNetworkInterface. 249 * changes the radio frequency channel of its associated @ref OWirelessNetworkInterface.
263 * This is necessary when in monitoring mode and scanning for other devices, because 250 * This is necessary when in monitoring mode and scanning for other devices, because
264 * the radio frequency hardware can only detect packets sent on the same frequency. 251 * the radio frequency hardware can only detect packets sent on the same frequency.
265 * 252 *
266 * @author Michael 'Mickey' Lauer <mickey@vanille.de> 253 * @author Michael 'Mickey' Lauer <mickey@vanille.de>
267 */ 254 */
268class OChannelHopper : public QObject 255class OChannelHopper : public QObject
269{ 256{
270 Q_OBJECT 257 Q_OBJECT
271 258
272 public: 259 public:
273 /** 260 /**
274 * Constructor. 261 * Constructor.
275 */ 262 */
276 OChannelHopper( OWirelessNetworkInterface* ); 263 OChannelHopper( OWirelessNetworkInterface* );
277 /** 264 /**
278 * Destructor. 265 * Destructor.
279 */ 266 */
280 virtual ~OChannelHopper(); 267 virtual ~OChannelHopper();
281 /** 268 /**
282 * @returns true, if the channel hopper is hopping channels 269 * @returns true, if the channel hopper is hopping channels
283 */ 270 */
284 bool isActive() const; 271 bool isActive() const;
285 /** 272 /**
286 * @returns the last hopped channel 273 * @returns the last hopped channel
287 */ 274 */
288 int channel() const; 275 int channel() const;
289 /** 276 /**
290 * Set the channel hopping @a interval. 277 * Set the channel hopping @a interval.
291 * An interval of 0 deactivates the channel hopper. 278 * An interval of 0 deactivates the channel hopper.
292 */ 279 */
293 void setInterval( int interval ); 280 void setInterval( int interval );
294 /** 281 /**
295 * @returns the channel hopping interval 282 * @returns the channel hopping interval
296 */ 283 */
297 int interval() const; 284 int interval() const;
298 285
299 signals: 286 signals:
300 /** 287 /**
301 * This signal is emitted right after the channel hopper performed a hop 288 * This signal is emitted right after the channel hopper performed a hop
302 */ 289 */
303 void hopped( int ); 290 void hopped( int );
304 291
305 protected: 292 protected:
306 virtual void timerEvent( QTimerEvent* ); 293 virtual void timerEvent( QTimerEvent* );
307 294
308 private: 295 private:
309 OWirelessNetworkInterface* _iface; 296 OWirelessNetworkInterface* _iface;
310 int _interval; 297 int _interval;
311 int _tid; 298 int _tid;
312 QValueList<int> _channels; 299 QValueList<int> _channels;
313 QValueList<int>::Iterator _channel; 300 QValueList<int>::Iterator _channel;
314 class Private; 301 class Private;
315 Private *d; 302 Private *d;
316}; 303};
317 304
318 305
319/*====================================================================================== 306/*======================================================================================
320 * OWirelessNetworkInterface 307 * OWirelessNetworkInterface
321 *======================================================================================*/ 308 *======================================================================================*/
322 309
323/** 310/**
324 * @brief A network interface wrapper for interfaces supporting the wireless extensions protocol. 311 * @brief A network interface wrapper for interfaces supporting the wireless extensions protocol.
325 * 312 *
326 * This class provides a high-level encapsulation of the Linux wireless extension API. 313 * This class provides a high-level encapsulation of the Linux wireless extension API.
327 * 314 *
328 * @author Michael 'Mickey' Lauer <mickey@vanille.de> 315 * @author Michael 'Mickey' Lauer <mickey@vanille.de>
329 */ 316 */
330class OWirelessNetworkInterface : public ONetworkInterface 317class OWirelessNetworkInterface : public ONetworkInterface
331{ 318{
332 friend class OMonitoringInterface; 319 friend class OMonitoringInterface;
333 friend class OCiscoMonitoringInterface; 320 friend class OCiscoMonitoringInterface;
334 friend class OWlanNGMonitoringInterface; 321 friend class OWlanNGMonitoringInterface;
335 friend class OHostAPMonitoringInterface; 322 friend class OHostAPMonitoringInterface;
336 friend class OOrinocoMonitoringInterface; 323 friend class OOrinocoMonitoringInterface;
337 324
338 friend class OPrivateIOCTL; 325 friend class OPrivateIOCTL;
339 326
340 public: 327 public:
341 /** 328 /**
342 * Constructor. 329 * Constructor.
343 */ 330 */
344 OWirelessNetworkInterface( QObject* parent, const char* name ); 331 OWirelessNetworkInterface( QObject* parent, const char* name );
345 /** 332 /**
346 * Destructor. 333 * Destructor.
347 */ 334 */
348 virtual ~OWirelessNetworkInterface(); 335 virtual ~OWirelessNetworkInterface();
349 /** 336 /**
350 * Setting the @a channel of the interface changes the radio frequency (RF) 337 * Setting the @a channel of the interface changes the radio frequency (RF)
351 * of the corresponding wireless network device. 338 * of the corresponding wireless network device.
352 * @note Common channel range is within [1-14]. A value of 0 is not allowed. 339 * @note Common channel range is within [1-14]. A value of 0 is not allowed.
353 * @see channels() 340 * @see channels()
354 */ 341 */
355 virtual void setChannel( int channel ) const; 342 virtual void setChannel( int channel ) const;
356 /** 343 /**
357 * @returns the channel index of the current radio frequency. 344 * @returns the channel index of the current radio frequency.
358 */ 345 */
359 virtual int channel() const; 346 virtual int channel() const;
360 /** 347 /**
361 * @returns the current radio frequency (in MHz). 348 * @returns the current radio frequency (in MHz).
362 */ 349 */
363 virtual double frequency() const; 350 virtual double frequency() const;
364 /** 351 /**
365 * @returns the number of radio frequency channels for the 352 * @returns the number of radio frequency channels for the
366 * corresponding wireless network device. 353 * corresponding wireless network device.
367 * @note European devices usually have 14 channels, while American typically feature 11 channels. 354 * @note European devices usually have 14 channels, while American typically feature 11 channels.
368 */ 355 */
369 virtual int channels() const; 356 virtual int channels() const;
370 /** 357 /**
371 * Set the IEEE 802.11 operation @a mode. 358 * Set the IEEE 802.11 operation @a mode.
372 * Valid values are <ul><li>adhoc<li>managed<li>monitor<li>master 359 * Valid values are <ul><li>adhoc<li>managed<li>monitor<li>master
373 * @warning Not all drivers support the all modes. 360 * @warning Not all drivers support the all modes.
374 * @note You might have to change the SSID to get the operation mode change into effect. 361 * @note You might have to change the SSID to get the operation mode change into effect.
375 */ 362 */
376 virtual void setMode( const QString& mode ); 363 virtual void setMode( const QString& mode );
377 /** 364 /**
378 * @returns the current IEEE 802.11 operation mode. 365 * @returns the current IEEE 802.11 operation mode.
379 * Possible values are <ul><li>adhoc<li>managed<li>monitor<li>master or <li>unknown 366 * Possible values are <ul><li>adhoc<li>managed<li>monitor<li>master or <li>unknown
380 * 367 *
381 * @note: Important note concerning the 'monitor' mode: 368 * @note: Important note concerning the 'monitor' mode:
382 * Setting the monitor mode on a wireless network interface enables 369 * Setting the monitor mode on a wireless network interface enables
383 * listening to IEEE 802.11 data and management frames which normally 370 * listening to IEEE 802.11 data and management frames which normally
384 * are handled by the device firmware. This can be used to detect 371 * are handled by the device firmware. This can be used to detect
385 * other wireless network devices, e.g. Access Points or Ad-hoc stations. 372 * other wireless network devices, e.g. Access Points or Ad-hoc stations.
386 * @warning Standard wireless network drives don't support the monitor mode. 373 * @warning Standard wireless network drives don't support the monitor mode.
387 * @warning You need a patched driver for this to work. 374 * @warning You need a patched driver for this to work.
388 * @note Enabling the monitor mode is highly driver dependent and requires 375 * @note Enabling the monitor mode is highly driver dependent and requires
389 * the proper @ref OMonitoringInterface to be associated with the interface. 376 * the proper @ref OMonitoringInterface to be associated with the interface.
390 * @see OMonitoringInterface 377 * @see OMonitoringInterface
391 */ 378 */
392 virtual QString mode() const; 379 virtual QString mode() const;
393 /** 380 /**
394 * Set the channel hopping @a interval. An @a interval of 0 disables channel hopping. 381 * Set the channel hopping @a interval. An @a interval of 0 disables channel hopping.
395 * @see OChannelHopper 382 * @see OChannelHopper
396 */ 383 */
397 virtual void setChannelHopping( int interval = 0 ); 384 virtual void setChannelHopping( int interval = 0 );
398 /** 385 /**
399 * @returns the channel hopping interval or 0, if channel hopping is disabled. 386 * @returns the channel hopping interval or 0, if channel hopping is disabled.
400 */ 387 */
401 virtual int channelHopping() const; 388 virtual int channelHopping() const;
402 /** 389 /**
403 * @returns the @ref OChannelHopper of this interface or 0, if channel hopping has not been activated before 390 * @returns the @ref OChannelHopper of this interface or 0, if channel hopping has not been activated before
404 */ 391 */
405 virtual OChannelHopper* channelHopper() const; 392 virtual OChannelHopper* channelHopper() const;
406 /** 393 /**
407 * Set the station @a nickname. 394 * Set the station @a nickname.
408 */ 395 */
409 virtual void setNickName( const QString& nickname ); 396 virtual void setNickName( const QString& nickname );
410 /** 397 /**
411 * @returns the current station nickname. 398 * @returns the current station nickname.
412 */ 399 */
413 virtual QString nickName() const; 400 virtual QString nickName() const;
414 /** 401 /**
415 * Invoke the private IOCTL @a command with a @number of parameters on the network interface. 402 * Invoke the private IOCTL @a command with a @number of parameters on the network interface.
416 * @see OPrivateIOCTL 403 * @see OPrivateIOCTL
417 */ 404 */
418 virtual void setPrivate( const QString& command, int number, ... ); 405 virtual void setPrivate( const QString& command, int number, ... );
419 /** 406 /**
420 * @returns true if the interface is featuring the private IOCTL @command. 407 * @returns true if the interface is featuring the private IOCTL @command.
421 */ 408 */
422 virtual bool hasPrivate( const QString& command ); 409 virtual bool hasPrivate( const QString& command );
423 virtual void getPrivate( const QString& command ); //FIXME: Implement and document this 410 virtual void getPrivate( const QString& command ); //FIXME: Implement and document this
424 /** 411 /**
425 * @returns true if the interface is associated to an access point 412 * @returns true if the interface is associated to an access point
426 * @note: This information is only valid if the interface is in managed mode. 413 * @note: This information is only valid if the interface is in managed mode.
427 */ 414 */
428 virtual bool isAssociated() const; 415 virtual bool isAssociated() const;
429 /** 416 /**
430 * @returns the MAC address of the Access Point if the device is in infrastructure mode. 417 * @returns the MAC address of the Access Point if the device is in infrastructure mode.
431 * @returns a (more or less random) cell ID address if the device is in adhoc mode. 418 * @returns a (more or less random) cell ID address if the device is in adhoc mode.
432 */ 419 */
433 virtual OMacAddress associatedAP() const; 420 virtual OMacAddress associatedAP() const;
434 /** 421 /**
435 * Set the @a ssid (Service Set ID) string. This is used to decide 422 * Set the @a ssid (Service Set ID) string. This is used to decide
436 * which network to associate with (use "any" to let the driver decide). 423 * which network to associate with (use "any" to let the driver decide).
437 */ 424 */
438 virtual void setSSID( const QString& ssid ); 425 virtual void setSSID( const QString& ssid );
439 /** 426 /**
440 * @returns the current SSID (Service Set ID). 427 * @returns the current SSID (Service Set ID).
441 */ 428 */
442 virtual QString SSID() const; 429 virtual QString SSID() const;
443 /** 430 /**
444 * Perform scanning the wireless network neighbourhood. 431 * Perform scanning the wireless network neighbourhood.
445 * @note: UNSTABLE API - UNDER CONSTRUCTION - DON'T USE! 432 * @note: UNSTABLE API - UNDER CONSTRUCTION - DON'T USE!
446 */ 433 */
447 virtual OStationList* scanNetwork(); 434 virtual OStationList* scanNetwork();
448 /** 435 /**
449 * @return signal strength to associated neighbour (in percent). 436 * @return signal strength to associated neighbour (in percent).
450 * In infrastructure mode, this is the signal strength of the Access Point. 437 * In infrastructure mode, this is the signal strength of the Access Point.
451 * In other modes the result is driver dependent. 438 * In other modes the result is driver dependent.
452 */ 439 */
453 virtual int signalStrength() const; 440 virtual int signalStrength() const;
454 /** 441 /**
455 * @returns the wireless extension version used by the interface driver. 442 * @returns the wireless extension version used by the interface driver.
456 **/ 443 **/
457 short wirelessExtensionDriverVersion() const; 444 short wirelessExtensionDriverVersion() const;
458 /** 445 /**
459 * @internal commit pending changes to the driver 446 * @internal commit pending changes to the driver
460 */ 447 */
461 void commit() const; 448 void commit() const;
462 449
463 protected: 450 protected:
464 void buildInformation(); 451 void buildInformation();
465 void buildPrivateList(); 452 void buildPrivateList();
466 void dumpInformation() const; 453 void dumpInformation() const;
467 virtual void init(); 454 virtual void init();
468 struct iwreq& iwr() const; 455 struct iwreq& iwr() const;
469 bool wioctl( int call ) const; 456 bool wioctl( int call ) const;
470 bool wioctl( int call, struct iwreq& ) const; 457 bool wioctl( int call, struct iwreq& ) const;
471 458
472 protected: 459 protected:
473 mutable struct iwreq _iwr; 460 mutable struct iwreq _iwr;
474 QMap<int,int> _channels; 461 QMap<int,int> _channels;
475 struct iw_range _range; 462 struct iw_range _range;
476 463
477 private: 464 private:
478 OChannelHopper* _hopper; 465 OChannelHopper* _hopper;
479 class Private; 466 class Private;
480 Private *d; 467 Private *d;
481}; 468};
482 469
483 470
484/*====================================================================================== 471/*======================================================================================
485 * OMonitoringInterface 472 * OMonitoringInterface
486 *======================================================================================*/ 473 *======================================================================================*/
487 474
488 475
489class OMonitoringInterface 476class OMonitoringInterface
490{ 477{
491 public: 478 public:
492 OMonitoringInterface(); 479 OMonitoringInterface();
493 OMonitoringInterface( ONetworkInterface*, bool _prismHeader ); 480 OMonitoringInterface( ONetworkInterface*, bool _prismHeader );
494 virtual ~OMonitoringInterface(); 481 virtual ~OMonitoringInterface();
495 482
496 public: 483 public:
497 virtual void setEnabled( bool ); 484 virtual void setEnabled( bool );
498 virtual void setChannel( int ); 485 virtual void setChannel( int );
499 486
500 virtual QString name() const = 0; 487 virtual QString name() const = 0;
501 488
502 protected: 489 protected:
503 OWirelessNetworkInterface* _if; 490 OWirelessNetworkInterface* _if;
504 bool _prismHeader; 491 bool _prismHeader;
505 private: 492 private:
506 class Private; 493 class Private;
507 Private *d; 494 Private *d;
508 495
509}; 496};
510 497
511 498
512/*====================================================================================== 499/*======================================================================================
513 * OCiscoMonitoring 500 * OCiscoMonitoring
514 *======================================================================================*/ 501 *======================================================================================*/
515 502
516 503
517class OCiscoMonitoringInterface : public OMonitoringInterface 504class OCiscoMonitoringInterface : public OMonitoringInterface
518{ 505{
519 public: 506 public:
520 OCiscoMonitoringInterface( ONetworkInterface*, bool _prismHeader ); 507 OCiscoMonitoringInterface( ONetworkInterface*, bool _prismHeader );
521 virtual ~OCiscoMonitoringInterface(); 508 virtual ~OCiscoMonitoringInterface();
522 509
523 virtual void setEnabled( bool ); 510 virtual void setEnabled( bool );
524 virtual QString name() const; 511 virtual QString name() const;
525 virtual void setChannel( int ); 512 virtual void setChannel( int );
526 private: 513 private:
527 class Private; 514 class Private;
528 Private *d; 515 Private *d;
529 516
530}; 517};
531 518
532 519
533/*====================================================================================== 520/*======================================================================================
534 * OWlanNGMonitoringInterface 521 * OWlanNGMonitoringInterface
535 *======================================================================================*/ 522 *======================================================================================*/
536 523
537 524
538class OWlanNGMonitoringInterface : public OMonitoringInterface 525class OWlanNGMonitoringInterface : public OMonitoringInterface
539{ 526{
540 public: 527 public:
541 OWlanNGMonitoringInterface( ONetworkInterface*, bool _prismHeader ); 528 OWlanNGMonitoringInterface( ONetworkInterface*, bool _prismHeader );
542 virtual ~OWlanNGMonitoringInterface(); 529 virtual ~OWlanNGMonitoringInterface();
543 530
544 public: 531 public:
545 virtual void setEnabled( bool ); 532 virtual void setEnabled( bool );
546 virtual QString name() const; 533 virtual QString name() const;
547 virtual void setChannel( int ); 534 virtual void setChannel( int );
548 private: 535 private:
549 class Private; 536 class Private;
550 Private *d; 537 Private *d;
551 538
552}; 539};
553 540
554 541
555/*====================================================================================== 542/*======================================================================================
556 * OHostAPMonitoringInterface 543 * OHostAPMonitoringInterface
557 *======================================================================================*/ 544 *======================================================================================*/
558 545
559 546
560class OHostAPMonitoringInterface : public OMonitoringInterface 547class OHostAPMonitoringInterface : public OMonitoringInterface
561{ 548{
562 public: 549 public:
563 OHostAPMonitoringInterface( ONetworkInterface*, bool _prismHeader ); 550 OHostAPMonitoringInterface( ONetworkInterface*, bool _prismHeader );
564 virtual ~OHostAPMonitoringInterface(); 551 virtual ~OHostAPMonitoringInterface();
565 552
566 public: 553 public:
567 virtual void setEnabled( bool ); 554 virtual void setEnabled( bool );
568 virtual QString name() const; 555 virtual QString name() const;
569 556
570 private: 557 private:
571 class Private; 558 class Private;
572 Private *d; 559 Private *d;
573 }; 560 };
574 561
575 562
576/*====================================================================================== 563/*======================================================================================
577 * OOrinocoMonitoringInterface 564 * OOrinocoMonitoringInterface
578 *======================================================================================*/ 565 *======================================================================================*/
579 566
580 567
581class OOrinocoMonitoringInterface : public OMonitoringInterface 568class OOrinocoMonitoringInterface : public OMonitoringInterface
582{ 569{
583 public: 570 public:
584 OOrinocoMonitoringInterface( ONetworkInterface*, bool _prismHeader ); 571 OOrinocoMonitoringInterface( ONetworkInterface*, bool _prismHeader );
585 virtual ~OOrinocoMonitoringInterface(); 572 virtual ~OOrinocoMonitoringInterface();
586 573
587 public: 574 public:
588 virtual void setChannel( int ); 575 virtual void setChannel( int );
589 virtual void setEnabled( bool ); 576 virtual void setEnabled( bool );
590 virtual QString name() const; 577 virtual QString name() const;
591 578
592 private: 579 private:
593 class Private; 580 class Private;
594 Private *d; 581 Private *d;
595}; 582};
596 583
597} 584}
598} 585}
599 586
600#endif // ONETWORK_H 587#endif // ONETWORK_H
601 588
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 */