summaryrefslogtreecommitdiff
path: root/libopie2
authormickeyl <mickeyl>2004-02-23 18:37:03 (UTC)
committer mickeyl <mickeyl>2004-02-23 18:37:03 (UTC)
commit19b274033fc05d5190cee2fa974c683892173c84 (patch) (unidiff)
tree2ad0727ba2414c215cb4b55b93f3b610304c1742 /libopie2
parentab0203a43a30598774d8d8a1cf32075817d0dceb (diff)
downloadopie-19b274033fc05d5190cee2fa974c683892173c84.zip
opie-19b274033fc05d5190cee2fa974c683892173c84.tar.gz
opie-19b274033fc05d5190cee2fa974c683892173c84.tar.bz2
The Linux Wireless Extensions V16 introduce some massive changes in the
binary structures. Since we still use V15 on most target platforms I have to introduce two headers. Define OPIE_WE_VERSION to specify which header to include
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/onetwork.cpp37
-rw-r--r--libopie2/opienet/onetwork.h12
-rw-r--r--libopie2/opienet/opienet.pro6
-rw-r--r--libopie2/opienet/wireless.15.h (copied from libopie2/opienet/wireless.h)0
-rw-r--r--libopie2/opienet/wireless.16.h (renamed from libopie2/opienet/wireless.h)91
5 files changed, 107 insertions, 39 deletions
diff --git a/libopie2/opienet/onetwork.cpp b/libopie2/opienet/onetwork.cpp
index 16fa8ae..36f409b 100644
--- a/libopie2/opienet/onetwork.cpp
+++ b/libopie2/opienet/onetwork.cpp
@@ -1,6 +1,6 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) 2003 by Michael 'Mickey' Lauer <mickey@Vanille.de> 3              Copyright (C) 2003-2004 by Michael 'Mickey' Lauer
4 =. 4 =. <mickey@Vanille.de>
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
@@ -583,6 +583,13 @@ void OWirelessNetworkInterface::dumpInformation() const
583 odebug << "OWirelessNetworkInterface::() -------------- dumping information block ----------------" << oendl; 583 odebug << "OWirelessNetworkInterface::() -------------- dumping information block ----------------" << oendl;
584 584
585 qDebug( " - driver's idea of maximum throughput is %d bps = %d byte/s = %d Kb/s = %f.2 Mb/s", _range.throughput, _range.throughput / 8, _range.throughput / 8 / 1024, float( _range.throughput ) / 8.0 / 1024.0 / 1024.0 ); 585 qDebug( " - driver's idea of maximum throughput is %d bps = %d byte/s = %d Kb/s = %f.2 Mb/s",
586 qDebug( " - driver for '%s' has been compiled against WE V%d (source=V%d)", name(), _range.we_version_compiled, _range.we_version_source ); 586 _range.throughput, _range.throughput / 8, _range.throughput / 8 / 1024, float( _range.throughput ) / 8.0 / 1024.0 / 1024.0 );
587 qDebug( " - driver for '%s' (V%d) has been compiled against WE V%d",
588 name(), _range.we_version_source, _range.we_version_compiled );
589
590 if ( _range.we_version_compiled != WIRELESS_EXT )
591 {
592 owarn << "Version mismatch! WE_DRIVER = " << _range.we_version_compiled << " and WE_OPIENET = " << WIRELESS_EXT << oendl;
593 }
587 594
588 odebug << "OWirelessNetworkInterface::() ---------------------------------------------------------" << oendl; 595 odebug << "OWirelessNetworkInterface::() ---------------------------------------------------------" << oendl;
@@ -966,8 +973,22 @@ OStationList* OWirelessNetworkInterface::scanNetwork()
966 973
967int OWirelessNetworkInterface::signalStrength() const 974int OWirelessNetworkInterface::signalStrength() const
968{ 975{
969 int max = _range.max_qual.level; 976 iw_statistics stat;
970 odebug << "signalStrength(): max quality seems to be " << max << "dBM" << oendl; 977 ::memset( &stat, 0, sizeof stat );
971 return 50; 978 _iwr.u.data.pointer = (char*) &stat;
979 _iwr.u.data.flags = 0;
980 _iwr.u.data.length = sizeof stat;
981
982 if ( !wioctl( SIOCGIWSTATS ) )
983 {
984 return -1;
985 }
986
987 int max = _range.max_qual.qual;
988 int cur = stat.qual.qual;
989 int lev = stat.qual.level; //FIXME: Do something with them?
990 int noi = stat.qual.noise; //FIXME: Do something with them?
991
992 return cur*100/max;
972} 993}
973 994
diff --git a/libopie2/opienet/onetwork.h b/libopie2/opienet/onetwork.h
index 9b8a0d4..0a51108 100644
--- a/libopie2/opienet/onetwork.h
+++ b/libopie2/opienet/onetwork.h
@@ -32,5 +32,15 @@
32#define ONETWORK_H 32#define ONETWORK_H
33 33
34#include "wireless.h" 34#if !defined( OPIE_WE_VERSION )
35#error Need to define a wireless extension version to build against!
36#endif
37
38#if OPIE_WE_VERSION == 15
39#include "wireless.15.h"
40#endif
41
42#if OPIE_WE_VERSION == 16
43#include "wireless.16.h"
44#endif
35 45
36/* OPIE */ 46/* OPIE */
diff --git a/libopie2/opienet/opienet.pro b/libopie2/opienet/opienet.pro
index cab6da6..97bcf31 100644
--- a/libopie2/opienet/opienet.pro
+++ b/libopie2/opienet/opienet.pro
@@ -5,5 +5,6 @@ HEADERS = 802_11_user.h \
5 dhcp.h \ 5 dhcp.h \
6 udp_ports.h \ 6 udp_ports.h \
7 wireless.h \ 7 wireless.15.h \
8 wireless.16.h \
8 odebugmapper.h \ 9 odebugmapper.h \
9 omanufacturerdb.h \ 10 omanufacturerdb.h \
@@ -12,5 +13,5 @@ HEADERS = 802_11_user.h \
12 opcap.h \ 13 opcap.h \
13 ostation.h 14 ostation.h
14SOURCES = odebugmapper.cpp \ 15SOURCES = odebugmapper.cpp \
15 omanufacturerdb.cpp \ 16 omanufacturerdb.cpp \
16 onetutils.cpp \ 17 onetutils.cpp \
@@ -33,2 +34,3 @@ contains( platform, x11 ) {
33 LIBS += -L$(OPIEDIR)/lib -Wl,-rpath,$(OPIEDIR)/lib 34 LIBS += -L$(OPIEDIR)/lib -Wl,-rpath,$(OPIEDIR)/lib
34} 35}
36
diff --git a/libopie2/opienet/wireless.h b/libopie2/opienet/wireless.15.h
index 8135e97..8135e97 100644
--- a/libopie2/opienet/wireless.h
+++ b/libopie2/opienet/wireless.15.h
diff --git a/libopie2/opienet/wireless.h b/libopie2/opienet/wireless.16.h
index 8135e97..9a9accd 100644
--- a/libopie2/opienet/wireless.h
+++ b/libopie2/opienet/wireless.16.h
@@ -2,5 +2,5 @@
2 * This file define a set of standard wireless extensions 2 * This file define a set of standard wireless extensions
3 * 3 *
4 * Version : 1512.7.02 4 * Version : 162.4.03
5 * 5 *
6 * Authors :Jean Tourrilhes - HPL - <jt@hpl.hp.com> 6 * Authors :Jean Tourrilhes - HPL - <jt@hpl.hp.com>
@@ -70,4 +70,6 @@
70/***************************** INCLUDES *****************************/ 70/***************************** INCLUDES *****************************/
71 71
72/* To minimise problems in user space, I might remove those headers
73 * at some point. Jean II */
72#include <sys/types.h> 74#include <sys/types.h>
73#include <net/if.h> 75#include <net/if.h>
@@ -88,5 +90,5 @@
88 * I just plan to increment with each new version. 90 * I just plan to increment with each new version.
89 */ 91 */
90 #define WIRELESS_EXT15 92 #define WIRELESS_EXT16
91 93
92/* 94/*
@@ -171,4 +173,14 @@
171 *- Add IWEVREGISTERED & IWEVEXPIRED events for Access Points 173 *- Add IWEVREGISTERED & IWEVEXPIRED events for Access Points
172 *- Add IW_MODE_MONITOR for passive monitor 174 *- Add IW_MODE_MONITOR for passive monitor
175 *
176 * V15 to V16
177 * ----------
178 *- Increase the number of bitrates in iw_range to 32 (for 802.11g)
179 *- Increase the number of frequencies in iw_range to 32 (for 802.11b+a)
180 *- Reshuffle struct iw_range for increases, add filler
181 *- Increase IW_MAX_AP to 64 for driver returning a lot of addresses
182 *- Remove IW_MAX_GET_SPY because conflict with enhanced spy support
183 *- Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy"
184 *- Add IW_ENCODE_TEMP and iw_range->encoding_login_index
173 */ 185 */
174 186
@@ -204,7 +216,9 @@
204 * is never passed to the driver (i.e. the driver will never see it). */ 216 * is never passed to the driver (i.e. the driver will never see it). */
205 217
206/* Mobile IP support (statistics per MAC address) */ 218/* Spy support (statistics per MAC address - used for Mobile IP support) */
207 #define SIOCSIWSPY 0x8B10 /* set spy addresses */ 219 #define SIOCSIWSPY 0x8B10 /* set spy addresses */
208 #define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */ 220 #define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
221 #define SIOCSIWTHRSPY 0x8B12 /* set spy threshold (spy event) */
222 #define SIOCGIWTHRSPY 0x8B13 /* get spy threshold */
209 223
210/* Access Point manipulation */ 224/* Access Point manipulation */
@@ -302,5 +316,5 @@
302 #define IW_PRIV_TYPE_ADDR 0x6000/* struct sockaddr */ 316 #define IW_PRIV_TYPE_ADDR 0x6000/* struct sockaddr */
303 317
304 #define IW_PRIV_SIZE_FIXED 0x0800/* Variable or fixed nuber of args */ 318 #define IW_PRIV_SIZE_FIXED 0x0800/* Variable or fixed number of args */
305 319
306 #define IW_PRIV_SIZE_MASK 0x07FF/* Max number of those args */ 320 #define IW_PRIV_SIZE_MASK 0x07FF/* Max number of those args */
@@ -314,5 +328,5 @@
314 328
315/* Maximum frequencies in the range struct */ 329/* Maximum frequencies in the range struct */
316 #define IW_MAX_FREQUENCIES16 330 #define IW_MAX_FREQUENCIES32
317/* Note : if you have something like 80 frequencies, 331/* Note : if you have something like 80 frequencies,
318 * don't increase this constant and don't fill the frequency list. 332 * don't increase this constant and don't fill the frequency list.
@@ -320,5 +334,5 @@
320 334
321/* Maximum bit rates in the range struct */ 335/* Maximum bit rates in the range struct */
322 #define IW_MAX_BITRATES 8 336 #define IW_MAX_BITRATES 32
323 337
324/* Maximum tx powers in the range struct */ 338/* Maximum tx powers in the range struct */
@@ -328,6 +342,5 @@
328 342
329/* Maximum of address that you may set with SPY */ 343/* Maximum of address that you may set with SPY */
330 #define IW_MAX_SPY 8/* set */ 344 #define IW_MAX_SPY 8
331 #define IW_MAX_GET_SPY 64/* get */
332 345
333/* Maximum of address that you may get in the 346/* Maximum of address that you may get in the
@@ -362,5 +375,6 @@
362 #define IW_ENCODE_RESTRICTED 0x4000/* Refuse non-encoded packets */ 375 #define IW_ENCODE_RESTRICTED 0x4000/* Refuse non-encoded packets */
363 #define IW_ENCODE_OPEN 0x2000/* Accept non-encoded packets */ 376 #define IW_ENCODE_OPEN 0x2000/* Accept non-encoded packets */
364#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */ 377 #define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
378 #define IW_ENCODE_TEMP 0x0400 /* Temporary key */
365 379
366/* Power management flags available (along with the value, if any) */ 380/* Power management flags available (along with the value, if any) */
@@ -490,4 +504,15 @@ struct iw_missed
490}; 504};
491 505
506/*
507 *Quality range (for spy threshold)
508 */
509 structiw_thrspy
510{
511 struct sockaddr addr; /* Source address (hw/mac) */
512 struct iw_quality qual; /* Quality of the link */
513 struct iw_quality low; /* Low threshold */
514 struct iw_quality high; /* High threshold */
515};
516
492/* ------------------------ WIRELESS STATS ------------------------ */ 517/* ------------------------ WIRELESS STATS ------------------------ */
493/* 518/*
@@ -542,5 +567,5 @@ union iwreq_data
542 567
543 struct sockaddr ap_addr;/* Access point address */ 568 struct sockaddr ap_addr;/* Access point address */
544 struct sockaddr addr; /* Destination address (hw) */ 569 struct sockaddr addr; /* Destination address (hw/mac) */
545 570
546 struct iw_param param; /* Other small parameters */ 571 struct iw_param param; /* Other small parameters */
@@ -554,5 +579,5 @@ union iwreq_data
554 * Do I need to remind you about structure size (32 octets) ? 579 * Do I need to remind you about structure size (32 octets) ?
555 */ 580 */
556 structiwreq 581 structiwreq
557{ 582{
558 union 583 union
@@ -590,9 +615,9 @@ struct iw_range
590 __u32 max_nwid;/* Maximal NWID we are able to set */ 615 __u32 max_nwid;/* Maximal NWID we are able to set */
591 616
592 /* Frequency */ 617 /* Old Frequency (backward compat - moved lower ) */
593 __u16 num_channels;/* Number of channels [0; num - 1] */ 618 __u16 old_num_channels;
594 __u8 num_frequency;/* Number of entry in the list */ 619 __u8 old_num_frequency;
595 struct iw_freq freq[IW_MAX_FREQUENCIES];/* list */ 620 /* Filler to keep "version" at the same offset */
596 /* Note : this frequency list doesn't need to fit channel numbers */ 621 __s32 old_freq[6];
597 622
598 /* signal level threshold range */ 623 /* signal level threshold range */
@@ -600,5 +625,19 @@ struct iw_range
600 625
601 /* Quality of link & SNR stuff */ 626 /* Quality of link & SNR stuff */
627 /* Quality range (link, level, noise)
628 * If the quality is absolute, it will be in the range [0 ; max_qual],
629 * if the quality is dBm, it will be in the range [max_qual ; 0].
630 * Don't forget that we use 8 bit arithmetics... */
602 struct iw_quality max_qual;/* Quality of the link */ 631 struct iw_quality max_qual;/* Quality of the link */
632 /* This should contain the average/typical values of the quality
633 * indicator. This should be the threshold between a "good" and
634 * a "bad" link (example : monitor going from green to orange).
635 * Currently, user space apps like quality monitors don't have any
636 * way to calibrate the measurement. With this, they can split
637 * the range between 0 and max_qual in different quality level
638 * (using a geometric subdivision centered on the average).
639 * I expect that people doing the user space apps will feedback
640 * us on which value we need to put in each driver... */
641 struct iw_quality avg_qual;/* Quality of the link */
603 642
604 /* Rates */ 643 /* Rates */
@@ -627,4 +666,6 @@ struct iw_range
627 __u8 num_encoding_sizes;/* Number of entry in the list */ 666 __u8 num_encoding_sizes;/* Number of entry in the list */
628 __u8 max_encoding_tokens;/* Max number of tokens */ 667 __u8 max_encoding_tokens;/* Max number of tokens */
668 /* For drivers that need a "login/passwd" form */
669 __u8 encoding_login_index;/* token index for login token */
629 670
630 /* Transmit power */ 671 /* Transmit power */
@@ -646,16 +687,10 @@ struct iw_range
646 __s32 max_r_time;/* Maximal retry lifetime */ 687 __s32 max_r_time;/* Maximal retry lifetime */
647 688
648 /* Average quality of link & SNR */ 689 /* Frequency */
649 struct iw_quality avg_qual;/* Quality of the link */ 690 __u16 num_channels;/* Number of channels [0; num - 1] */
650 /* This should contain the average/typical values of the quality 691 __u8 num_frequency;/* Number of entry in the list */
651 * indicator. This should be the threshold between a "good" and 692 struct iw_freq freq[IW_MAX_FREQUENCIES];/* list */
652 * a "bad" link (example : monitor going from green to orange). 693 /* Note : this frequency list doesn't need to fit channel numbers,
653 * Currently, user space apps like quality monitors don't have any 694 * because each entry contain its channel index */
654 * way to calibrate the measurement. With this, they can split
655 * the range between 0 and max_qual in different quality level
656 * (using a geometric subdivision centered on the average).
657 * I expect that people doing the user space apps will feedback
658 * us on which value we need to put in each driver...
659 */
660}; 695};
661 696