lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

750-ieee802dot11.patch (219573B)


      1 --- /dev/null
      2 +++ b/agent/mibgroup/ieee802dot11.c
      3 @@ -0,0 +1,4915 @@
      4 +/****************************************************************************
      5 +*                                                                           *
      6 +*  File Name:           ieee802dot11.c                                      *
      7 +*  Used By:                                                                 *
      8 +*                                                                           *
      9 +*  Operating System:                                                        *
     10 +*  Purpose:                                                                 *
     11 +*                                                                           *
     12 +*  Comments:                                                                *
     13 +*                                                                           *
     14 +*  Author:              Larry Simmons                                       *
     15 +*                       lsimmons@avantcom.com                               *
     16 +*                       www.avantcom.com                                    *
     17 +*                                                                           *
     18 +*  Creation Date:       09/02/03                                            *
     19 +*                                                                           *
     20 +*   Ver    Date   Inits Modification                                        *
     21 +*  ----- -------- ----- ------------                                        *
     22 +*  0.0.1 09/02/03  LRS  created                                             *
     23 +*  0.0.2 09/24/03  LRS  wouldn't build after fresh ./configure              *
     24 +****************************************************************************/
     25 +/****************************************************************************
     26 +*                               Includes                                    *
     27 +****************************************************************************/
     28 +#include <net-snmp/net-snmp-config.h>
     29 +#include <net-snmp/net-snmp-includes.h>
     30 +#include <net-snmp/agent/net-snmp-agent-includes.h>
     31 +#include "ieee802dot11.h"
     32 +#include "iwlib.h"
     33 +
     34 +/****************************************************************************
     35 +*                                Defines                                    *
     36 +****************************************************************************/
     37 +#define DISPLAYWIEXT                        // display wireless ext info
     38 +#define TABLE_SIZE   1
     39 +//#define MINLOADFREQ 15                    // min reload frequency in seconds
     40 +#define MINLOADFREQ 5                       // min reload frequency in seconds      // for testing
     41 +#define PROC_NET_DEV      "/proc/net/dev"
     42 +#define PROC_NET_WIRELESS "/proc/net/wireless"
     43 +
     44 +#ifndef UCHAR
     45 +  typedef unsigned char UCHAR;
     46 +#endif
     47 +
     48 +/****************************************************************************
     49 +*                            Private Functions                              *
     50 +****************************************************************************/
     51 +static void loadTables();
     52 +static void loadWiExt ( int, char *, struct wireless_info * );
     53 +static void load80211Structs ( int, char *, struct wireless_info * );
     54 +static void initStructs();
     55 +
     56 +// Wireless Extensions Specific Functions
     57 +static void loadWiExtTo80211Structs ( int, char *, struct wireless_info * );
     58 +static void displayWiExt ( struct wireless_info );
     59 +
     60 +// Linked List Functions
     61 +static void addList ( char *, char *, int );
     62 +static void initLists();                    // initialize all the linked lists
     63 +static void flushLists();                   // flush all the linked lists
     64 +static void flushList ( char * );           // flush a single linked list
     65 +
     66 +// Utility Functions
     67 +static int  openSocket ( void );
     68 +static int  mWatt2dbm ( int );
     69 +static char *htob ( char * );
     70 +static int  hasChanged ( char *, int );
     71 +
     72 +/****************************************************************************
     73 +*                            Private Variables                              *
     74 +****************************************************************************/
     75 +static unsigned long lastLoad = 0;          // ET in secs at last table load
     76 +
     77 +static struct avNode *lastNode, *newNode, *np;
     78 +
     79 +/****************************************************************************
     80 +*                            External Functions                             *
     81 +****************************************************************************/
     82 +
     83 +/****************************************************************************
     84 +*   ieee802dot11_variables_oid:                                             *
     85 +*       this is the top level oid that we want to register under.  This     *
     86 +*       is essentially a prefix, with the suffix appearing in the           *
     87 +*       variable below.                                                     *
     88 +****************************************************************************/
     89 +oid ieee802dot11_variables_oid[] = { 1,2,840,10036 };
     90 +
     91 +/****************************************************************************
     92 +*   variable7 ieee802dot11_variables:                                       *
     93 +*     this variable defines function callbacks and type return information  *
     94 +*     for the ieee802dot11 mib section                                      *
     95 +****************************************************************************/
     96 +struct variable7 ieee802dot11_variables[] = {
     97 +/*  magic number        , variable type , ro/rw , callback fn  , L, oidsuffix */
     98 +#define   DOT11STATIONID        3
     99 +  { DOT11STATIONID      , ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,1 } },
    100 +#define   DOT11MEDIUMOCCUPANCYLIMIT  4
    101 +  { DOT11MEDIUMOCCUPANCYLIMIT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,2 } },
    102 +#define   DOT11CFPOLLABLE       5
    103 +  { DOT11CFPOLLABLE     , ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,3 } },
    104 +#define   DOT11CFPPERIOD        6
    105 +  { DOT11CFPPERIOD      , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,4 } },
    106 +#define   DOT11CFPMAXDURATION   7
    107 +  { DOT11CFPMAXDURATION , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,5 } },
    108 +#define   DOT11AUTHENTICATIONRESPONSETIMEOUT  8
    109 +  { DOT11AUTHENTICATIONRESPONSETIMEOUT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,6 } },
    110 +#define   DOT11PRIVACYOPTIONIMPLEMENTED  9
    111 +  { DOT11PRIVACYOPTIONIMPLEMENTED, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,7 } },
    112 +#define   DOT11POWERMANAGEMENTMODE  10
    113 +  { DOT11POWERMANAGEMENTMODE, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,8 } },
    114 +#define   DOT11DESIREDSSID      11
    115 +  { DOT11DESIREDSSID    , ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,9 } },
    116 +#define   DOT11DESIREDBSSTYPE   12
    117 +  { DOT11DESIREDBSSTYPE , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,10 } },
    118 +#define   DOT11OPERATIONALRATESET  13
    119 +  { DOT11OPERATIONALRATESET, ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,11 } },
    120 +#define   DOT11BEACONPERIOD     14
    121 +  { DOT11BEACONPERIOD   , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,12 } },
    122 +#define   DOT11DTIMPERIOD       15
    123 +  { DOT11DTIMPERIOD     , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,13 } },
    124 +#define   DOT11ASSOCIATIONRESPONSETIMEOUT  16
    125 +  { DOT11ASSOCIATIONRESPONSETIMEOUT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,14 } },
    126 +#define   DOT11DISASSOCIATEREASON  17
    127 +  { DOT11DISASSOCIATEREASON, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,15 } },
    128 +#define   DOT11DISASSOCIATESTATION  18
    129 +  { DOT11DISASSOCIATESTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,16 } },
    130 +#define   DOT11DEAUTHENTICATEREASON  19
    131 +  { DOT11DEAUTHENTICATEREASON, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,17 } },
    132 +#define   DOT11DEAUTHENTICATESTATION  20
    133 +  { DOT11DEAUTHENTICATESTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,18 } },
    134 +#define   DOT11AUTHENTICATEFAILSTATUS  21
    135 +  { DOT11AUTHENTICATEFAILSTATUS, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,19 } },
    136 +#define   DOT11AUTHENTICATEFAILSTATION  22
    137 +  { DOT11AUTHENTICATEFAILSTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,20 } },
    138 +
    139 +#define   DOT11AUTHENTICATIONALGORITHM  26
    140 +  { DOT11AUTHENTICATIONALGORITHM, ASN_INTEGER   , RONLY , var_dot11AuthenticationAlgorithmsTable, 4, { 1,2,1,2 } },
    141 +#define   DOT11AUTHENTICATIONALGORITHMSENABLE  27
    142 +  { DOT11AUTHENTICATIONALGORITHMSENABLE, ASN_INTEGER   , RWRITE, var_dot11AuthenticationAlgorithmsTable, 4, { 1,2,1,3 } },
    143 +
    144 +#define   DOT11WEPDEFAULTKEYVALUE  31
    145 +  { DOT11WEPDEFAULTKEYVALUE, ASN_OCTET_STR , RWRITE, var_dot11WEPDefaultKeysTable, 4, { 1,3,1,2 } },
    146 +
    147 +#define   DOT11WEPKEYMAPPINGADDRESS  35
    148 +  { DOT11WEPKEYMAPPINGADDRESS, ASN_OCTET_STR , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,2 } },
    149 +#define   DOT11WEPKEYMAPPINGWEPON  36
    150 +  { DOT11WEPKEYMAPPINGWEPON, ASN_INTEGER   , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,3 } },
    151 +#define   DOT11WEPKEYMAPPINGVALUE  37
    152 +  { DOT11WEPKEYMAPPINGVALUE, ASN_OCTET_STR , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,4 } },
    153 +#define   DOT11WEPKEYMAPPINGSTATUS  38
    154 +  { DOT11WEPKEYMAPPINGSTATUS, ASN_INTEGER   , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,5 } },
    155 +
    156 +#define   DOT11PRIVACYINVOKED   41
    157 +  { DOT11PRIVACYINVOKED , ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,1 } },
    158 +#define   DOT11WEPDEFAULTKEYID  42
    159 +  { DOT11WEPDEFAULTKEYID, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,2 } },
    160 +#define   DOT11WEPKEYMAPPINGLENGTH  43
    161 +  { DOT11WEPKEYMAPPINGLENGTH, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,3 } },
    162 +#define   DOT11EXCLUDEUNENCRYPTED  44
    163 +  { DOT11EXCLUDEUNENCRYPTED, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,4 } },
    164 +#define   DOT11WEPICVERRORCOUNT  45
    165 +  { DOT11WEPICVERRORCOUNT, ASN_COUNTER   , RONLY , var_dot11PrivacyTable, 4, { 1,5,1,5 } },
    166 +#define   DOT11WEPEXCLUDEDCOUNT  46
    167 +  { DOT11WEPEXCLUDEDCOUNT, ASN_COUNTER   , RONLY , var_dot11PrivacyTable, 4, { 1,5,1,6 } },
    168 +
    169 +#define   DOT11MACADDRESS       49
    170 +  { DOT11MACADDRESS     , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,1 } },
    171 +#define   DOT11RTSTHRESHOLD     50
    172 +  { DOT11RTSTHRESHOLD   , ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,2 } },
    173 +#define   DOT11SHORTRETRYLIMIT  51
    174 +  { DOT11SHORTRETRYLIMIT, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,3 } },
    175 +#define   DOT11LONGRETRYLIMIT   52
    176 +  { DOT11LONGRETRYLIMIT , ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,4 } },
    177 +#define   DOT11FRAGMENTATIONTHRESHOLD  53
    178 +  { DOT11FRAGMENTATIONTHRESHOLD, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,5 } },
    179 +#define   DOT11MAXTRANSMITMSDULIFETIME  54
    180 +  { DOT11MAXTRANSMITMSDULIFETIME, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,6 } },
    181 +#define   DOT11MAXRECEIVELIFETIME  55
    182 +  { DOT11MAXRECEIVELIFETIME, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,7 } },
    183 +#define   DOT11MANUFACTURERID   56
    184 +  { DOT11MANUFACTURERID , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,8 } },
    185 +#define   DOT11PRODUCTID        57
    186 +  { DOT11PRODUCTID      , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,9 } },
    187 +
    188 +#define   DOT11TRANSMITTEDFRAGMENTCOUNT  60
    189 +  { DOT11TRANSMITTEDFRAGMENTCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,1 } },
    190 +#define   DOT11MULTICASTTRANSMITTEDFRAMECOUNT  61
    191 +  { DOT11MULTICASTTRANSMITTEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,2 } },
    192 +#define   DOT11FAILEDCOUNT      62
    193 +  { DOT11FAILEDCOUNT    , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,3 } },
    194 +#define   DOT11RETRYCOUNT       63
    195 +  { DOT11RETRYCOUNT     , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,4 } },
    196 +#define   DOT11MULTIPLERETRYCOUNT  64
    197 +  { DOT11MULTIPLERETRYCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,5 } },
    198 +#define   DOT11FRAMEDUPLICATECOUNT  65
    199 +  { DOT11FRAMEDUPLICATECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,6 } },
    200 +#define   DOT11RTSSUCCESSCOUNT  66
    201 +  { DOT11RTSSUCCESSCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,7 } },
    202 +#define   DOT11RTSFAILURECOUNT  67
    203 +  { DOT11RTSFAILURECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,8 } },
    204 +#define   DOT11ACKFAILURECOUNT  68
    205 +  { DOT11ACKFAILURECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,9 } },
    206 +#define   DOT11RECEIVEDFRAGMENTCOUNT  69
    207 +  { DOT11RECEIVEDFRAGMENTCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,10 } },
    208 +#define   DOT11MULTICASTRECEIVEDFRAMECOUNT  70
    209 +  { DOT11MULTICASTRECEIVEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,11 } },
    210 +#define   DOT11FCSERRORCOUNT    71
    211 +  { DOT11FCSERRORCOUNT  , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,12 } },
    212 +#define   DOT11TRANSMITTEDFRAMECOUNT  72
    213 +  { DOT11TRANSMITTEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,13 } },
    214 +#define   DOT11WEPUNDECRYPTABLECOUNT  73
    215 +  { DOT11WEPUNDECRYPTABLECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,14 } },
    216 +
    217 +#define   DOT11ADDRESS          77
    218 +  { DOT11ADDRESS        , ASN_OCTET_STR , RWRITE, var_dot11GroupAddressesTable, 4, { 2,3,1,2 } },
    219 +#define   DOT11GROUPADDRESSESSTATUS  78
    220 +  { DOT11GROUPADDRESSESSTATUS, ASN_INTEGER   , RWRITE, var_dot11GroupAddressesTable, 4, { 2,3,1,3 } },
    221 +
    222 +#define   DOT11RESOURCETYPEIDNAME  79
    223 +  { DOT11RESOURCETYPEIDNAME, ASN_OCTET_STR , RONLY , var_ieee802dot11, 3, { 3,1,1 } },
    224 +#define   DOT11MANUFACTUREROUI  82
    225 +  { DOT11MANUFACTUREROUI, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,1 } },
    226 +#define   DOT11MANUFACTURERNAME  83
    227 +  { DOT11MANUFACTURERNAME, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,2 } },
    228 +#define   DOT11MANUFACTURERPRODUCTNAME  84
    229 +  { DOT11MANUFACTURERPRODUCTNAME, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,3 } },
    230 +#define   DOT11MANUFACTURERPRODUCTVERSION  85
    231 +  { DOT11MANUFACTURERPRODUCTVERSION, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,4 } },
    232 +
    233 +#define   DOT11PHYTYPE          88
    234 +  { DOT11PHYTYPE        , ASN_INTEGER   , RONLY , var_dot11PhyOperationTable, 4, { 4,1,1,1 } },
    235 +#define   DOT11CURRENTREGDOMAIN  89
    236 +  { DOT11CURRENTREGDOMAIN, ASN_INTEGER   , RWRITE, var_dot11PhyOperationTable, 4, { 4,1,1,2 } },
    237 +#define   DOT11TEMPTYPE         90
    238 +  { DOT11TEMPTYPE       , ASN_INTEGER   , RONLY , var_dot11PhyOperationTable, 4, { 4,1,1,3 } },
    239 +#define   DOT11CURRENTTXANTENNA  93
    240 +  { DOT11CURRENTTXANTENNA, ASN_INTEGER   , RWRITE, var_dot11PhyAntennaTable, 4, { 4,2,1,1 } },
    241 +#define   DOT11DIVERSITYSUPPORT  94
    242 +  { DOT11DIVERSITYSUPPORT, ASN_INTEGER   , RONLY , var_dot11PhyAntennaTable, 4, { 4,2,1,2 } },
    243 +#define   DOT11CURRENTRXANTENNA  95
    244 +  { DOT11CURRENTRXANTENNA, ASN_INTEGER   , RWRITE, var_dot11PhyAntennaTable, 4, { 4,2,1,3 } },
    245 +#define   DOT11NUMBERSUPPORTEDPOWERLEVELS  98
    246 +  { DOT11NUMBERSUPPORTEDPOWERLEVELS, ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,1 } },
    247 +#define   DOT11TXPOWERLEVEL1    99
    248 +  { DOT11TXPOWERLEVEL1  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,2 } },
    249 +#define   DOT11TXPOWERLEVEL2    100
    250 +  { DOT11TXPOWERLEVEL2  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,3 } },
    251 +#define   DOT11TXPOWERLEVEL3    101
    252 +  { DOT11TXPOWERLEVEL3  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,4 } },
    253 +#define   DOT11TXPOWERLEVEL4    102
    254 +  { DOT11TXPOWERLEVEL4  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,5 } },
    255 +#define   DOT11TXPOWERLEVEL5    103
    256 +  { DOT11TXPOWERLEVEL5  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,6 } },
    257 +#define   DOT11TXPOWERLEVEL6    104
    258 +  { DOT11TXPOWERLEVEL6  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,7 } },
    259 +#define   DOT11TXPOWERLEVEL7    105
    260 +  { DOT11TXPOWERLEVEL7  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,8 } },
    261 +#define   DOT11TXPOWERLEVEL8    106
    262 +  { DOT11TXPOWERLEVEL8  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,9 } },
    263 +#define   DOT11CURRENTTXPOWERLEVEL  107
    264 +  { DOT11CURRENTTXPOWERLEVEL, ASN_INTEGER   , RWRITE, var_dot11PhyTxPowerTable, 4, { 4,3,1,10 } },
    265 +
    266 +#define   DOT11HOPTIME          110
    267 +  { DOT11HOPTIME        , ASN_INTEGER   , RONLY , var_dot11PhyFHSSTable, 4, { 4,4,1,1 } },
    268 +#define   DOT11CURRENTCHANNELNUMBER  111
    269 +  { DOT11CURRENTCHANNELNUMBER, ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,2 } },
    270 +#define   DOT11MAXDWELLTIME     112
    271 +  { DOT11MAXDWELLTIME   , ASN_INTEGER   , RONLY , var_dot11PhyFHSSTable, 4, { 4,4,1,3 } },
    272 +#define   DOT11CURRENTDWELLTIME  113
    273 +  { DOT11CURRENTDWELLTIME, ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,4 } },
    274 +#define   DOT11CURRENTSET       114
    275 +  { DOT11CURRENTSET     , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,5 } },
    276 +#define   DOT11CURRENTPATTERN   115
    277 +  { DOT11CURRENTPATTERN , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,6 } },
    278 +#define   DOT11CURRENTINDEX     116
    279 +  { DOT11CURRENTINDEX   , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,7 } },
    280 +
    281 +#define   DOT11CURRENTCHANNEL   119
    282 +  { DOT11CURRENTCHANNEL , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,1 } },
    283 +#define   DOT11CCAMODESUPPORTED  120
    284 +  { DOT11CCAMODESUPPORTED, ASN_INTEGER   , RONLY , var_dot11PhyDSSSTable, 4, { 4,5,1,2 } },
    285 +#define   DOT11CURRENTCCAMODE   121
    286 +  { DOT11CURRENTCCAMODE , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,3 } },
    287 +#define   DOT11EDTHRESHOLD      122
    288 +  { DOT11EDTHRESHOLD    , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,4 } },
    289 +
    290 +#define   DOT11CCAWATCHDOGTIMERMAX  125
    291 +  { DOT11CCAWATCHDOGTIMERMAX, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,1 } },
    292 +#define   DOT11CCAWATCHDOGCOUNTMAX  126
    293 +  { DOT11CCAWATCHDOGCOUNTMAX, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,2 } },
    294 +#define   DOT11CCAWATCHDOGTIMERMIN  127
    295 +  { DOT11CCAWATCHDOGTIMERMIN, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,3 } },
    296 +#define   DOT11CCAWATCHDOGCOUNTMIN  128
    297 +  { DOT11CCAWATCHDOGCOUNTMIN, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,4 } },
    298 +
    299 +#define   DOT11REGDOMAINSSUPPORTVALUE  132
    300 +  { DOT11REGDOMAINSSUPPORTVALUE, ASN_INTEGER   , RONLY , var_dot11RegDomainsSupportedTable, 4, { 4,7,1,2 } },
    301 +
    302 +#define   DOT11SUPPORTEDTXANTENNA  136
    303 +  { DOT11SUPPORTEDTXANTENNA, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,2 } },
    304 +#define   DOT11SUPPORTEDRXANTENNA  137
    305 +  { DOT11SUPPORTEDRXANTENNA, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,3 } },
    306 +#define   DOT11DIVERSITYSELECTIONRX  138
    307 +  { DOT11DIVERSITYSELECTIONRX, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,4 } },
    308 +
    309 +#define   DOT11SUPPORTEDDATARATESTXVALUE  142
    310 +  { DOT11SUPPORTEDDATARATESTXVALUE, ASN_INTEGER   , RONLY , var_dot11SupportedDataRatesTxTable, 4, { 4,9,1,2 } },
    311 +
    312 +#define   DOT11SUPPORTEDDATARATESRXVALUE  146
    313 +  { DOT11SUPPORTEDDATARATESRXVALUE, ASN_INTEGER   , RONLY , var_dot11SupportedDataRatesRxTable, 4, { 4,10,1,2 } },
    314 +};
    315 +// ( L = length of the oidsuffix )
    316 +
    317 +/****************************************************************************
    318 +*                                                                           *
    319 +*         init_ieee802dot11() - perform any required initialization         *
    320 +*                                                                           *
    321 +****************************************************************************/
    322 +void init_ieee802dot11 ( void ) {
    323 +
    324 +  /* register ourselves with the agent to handle our mib tree */
    325 +  REGISTER_MIB("ieee802dot11", ieee802dot11_variables, variable7,
    326 +               ieee802dot11_variables_oid);
    327 +
    328 +  initLists();
    329 +}
    330 +
    331 +/****************************************************************************
    332 +*                                                                           *
    333 +*    shutdown_ieee802dot11() - perform any required cleanup @ shutdown      *
    334 +*                                                                           *
    335 +****************************************************************************/
    336 +void shutdown_ieee802dot11 ( void )
    337 +{
    338 +  flushLists();
    339 +}
    340 +
    341 +/****************************************************************************
    342 +*                                                                           *
    343 +*   var_ieee802dot11() -                                                    *
    344 +*                                                                           *
    345 +****************************************************************************/
    346 +unsigned char *
    347 +var_ieee802dot11 ( struct variable *vp, 
    348 +                    oid     *name, 
    349 +                    size_t  *length, 
    350 +                    int     exact, 
    351 +                    size_t  *var_len, 
    352 +                    WriteMethod **write_method)
    353 +{
    354 +  loadTables();                                               
    355 +
    356 +  if ( header_generic ( vp, name, length, exact,var_len,write_method )
    357 +                                  == MATCH_FAILED )
    358 +    return NULL;
    359 +
    360 +  switch ( vp->magic ) {
    361 +
    362 +    case DOT11RESOURCETYPEIDNAME:
    363 +      if ( !haveResourceTypeIDName )
    364 +        return NULL;
    365 +      *var_len = strlen ( resourceTypeIDName );
    366 +      return ( UCHAR * ) resourceTypeIDName;
    367 +
    368 +    default:
    369 +      ERROR_MSG ( "" );
    370 +  }
    371 +
    372 +  return NULL;
    373 +}
    374 +
    375 +/****************************************************************************
    376 +*                                                                           *
    377 +*  var_dot11StationConfigTable() - return a variable value from the table   *
    378 +*                                                                           *
    379 +****************************************************************************/
    380 +unsigned char *
    381 +var_dot11StationConfigTable ( struct variable *vp,
    382 +                              oid     *name,
    383 +                              size_t  *length,
    384 +                              int     exact,
    385 +                              size_t  *var_len,
    386 +                              WriteMethod **write_method )
    387 +{
    388 +  int found = FALSE;
    389 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
    390 +  static char MACWork[17];
    391 +
    392 +  loadTables();
    393 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
    394 +  for ( np = LIST_FIRST ( &scList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
    395 +    sc = ( struct scTbl_data * ) np->data;
    396 +    rName[vp->namelen] = sc->ifIndex;
    397 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) || 
    398 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
    399 +
    400 +      switch ( vp->magic ) {      // found requested OID, now check for requested variable
    401 +        case DOT11STATIONID: 
    402 +          if ( sc->haveStationID                     ) found = TRUE; break;
    403 +        case DOT11MEDIUMOCCUPANCYLIMIT:
    404 +          if ( sc->haveMediumOccupancyLimit          ) found = TRUE; break;
    405 +        case DOT11CFPOLLABLE:
    406 +          if ( sc->haveCFPPollable                   ) found = TRUE; break;
    407 +        case DOT11CFPPERIOD:
    408 +          if ( sc->haveCFPPeriod                     ) found = TRUE; break;
    409 +        case DOT11CFPMAXDURATION:
    410 +          if ( sc->haveMaxDuration                   ) found = TRUE; break;
    411 +        case DOT11AUTHENTICATIONRESPONSETIMEOUT:
    412 +          if ( sc->haveAuthenticationResponseTimeOut ) found = TRUE; break;
    413 +        case DOT11PRIVACYOPTIONIMPLEMENTED:
    414 +          if ( sc->havePrivacyOptionImplemented      ) found = TRUE; break;
    415 +        case DOT11POWERMANAGEMENTMODE:
    416 +          if ( sc->havePowerManagementMode           ) found = TRUE; break;
    417 +        case DOT11DESIREDSSID:
    418 +          if ( sc->haveDesiredSSID                   ) found = TRUE; break;
    419 +        case DOT11DESIREDBSSTYPE:
    420 +          if ( sc->haveDesiredBSSType                ) found = TRUE; break;
    421 +        case DOT11OPERATIONALRATESET:
    422 +          if ( sc->haveOperationalRateSet            ) found = TRUE; break;
    423 +        case DOT11BEACONPERIOD: 
    424 +          if ( sc->haveBeaconPeriod                  ) found = TRUE; break;
    425 +        case DOT11DTIMPERIOD:
    426 +          if ( sc->haveDTIMPeriod                    ) found = TRUE; break;
    427 +        case DOT11ASSOCIATIONRESPONSETIMEOUT:
    428 +          if ( sc->haveAssociationResponseTimeOut    ) found = TRUE; break;
    429 +        case DOT11DISASSOCIATEREASON:
    430 +          if ( sc->disAssociationReason              ) found = TRUE; break;
    431 +        case DOT11DISASSOCIATESTATION:
    432 +          if ( sc->haveDisAssociationStation         ) found = TRUE; break;
    433 +        case DOT11DEAUTHENTICATEREASON:
    434 +          if ( sc->deAuthenticationReason            ) found = TRUE; break;
    435 +        case DOT11DEAUTHENTICATESTATION:
    436 +          if ( sc->haveDeAuthenticationStation       ) found = TRUE; break;
    437 +        case DOT11AUTHENTICATEFAILSTATUS:
    438 +          if ( sc->authenticateFailStatus            ) found = TRUE; break;
    439 +        case DOT11AUTHENTICATEFAILSTATION:
    440 +          if ( sc->haveAuthenticateFailStation       ) found = TRUE; break;
    441 +      }
    442 +    }
    443 +    if ( found )
    444 +      break;
    445 +  }
    446 +
    447 +  if ( !found ) 
    448 +    return NULL;
    449 +
    450 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
    451 +  *length = vp->namelen + 1;
    452 +  *var_len = sizeof ( long );
    453 +  *write_method = NULL;
    454 +
    455 +  switch ( vp->magic ) {
    456 +
    457 +    case DOT11STATIONID: 
    458 +//    *write_method = write_dot11StationID;
    459 +      MACWork[ 0] = sc->stationID [ 0];
    460 +      MACWork[ 1] = sc->stationID [ 1];
    461 +      MACWork[ 2] = sc->stationID [ 3];
    462 +      MACWork[ 3] = sc->stationID [ 4];
    463 +      MACWork[ 4] = sc->stationID [ 6];
    464 +      MACWork[ 5] = sc->stationID [ 7];
    465 +      MACWork[ 6] = sc->stationID [ 9];
    466 +      MACWork[ 7] = sc->stationID [10];
    467 +      MACWork[ 8] = sc->stationID [12];
    468 +      MACWork[ 9] = sc->stationID [13];
    469 +      MACWork[10] = sc->stationID [15];
    470 +      MACWork[11] = sc->stationID [16];
    471 +      MACWork[12] = '\0';
    472 +      *var_len = 6;
    473 +      return ( UCHAR * ) htob ( MACWork );
    474 +
    475 +    case DOT11MEDIUMOCCUPANCYLIMIT:
    476 +//    *write_method = write_dot11MediumOccupancyLimit;
    477 +      sc->mediumOccupancyLimit = 5;
    478 +      return ( UCHAR * ) &sc->mediumOccupancyLimit;
    479 +
    480 +    case DOT11CFPOLLABLE:
    481 +      return ( UCHAR * ) &sc->CFPPollable;
    482 +
    483 +    case DOT11CFPPERIOD:
    484 +//    *write_method = write_dot11CFPPeriod;
    485 +      return ( UCHAR * ) &sc->CFPPeriod;
    486 +
    487 +    case DOT11CFPMAXDURATION:
    488 +//    *write_method = write_dot11CFPMaxDuration;
    489 +      return ( UCHAR * ) &sc->maxDuration;
    490 +
    491 +    case DOT11AUTHENTICATIONRESPONSETIMEOUT:
    492 +//    *write_method = write_dot11AuthenticationResponseTimeOut;
    493 +      return ( UCHAR * ) &sc->authenticationResponseTimeOut;
    494 +
    495 +    case DOT11PRIVACYOPTIONIMPLEMENTED:
    496 +      return ( UCHAR * ) &sc->privacyOptionImplemented;
    497 +
    498 +    case DOT11POWERMANAGEMENTMODE:
    499 +//    *write_method = write_dot11PowerManagementMode;
    500 +      return ( UCHAR * ) &sc->powerManagementMode;
    501 +
    502 +    case DOT11DESIREDSSID:
    503 +//    *write_method = write_dot11DesiredSSID;
    504 +      *var_len = strlen ( sc->desiredSSID );
    505 +      return ( UCHAR * ) sc->desiredSSID;
    506 +
    507 +    case DOT11DESIREDBSSTYPE:
    508 +//    *write_method = write_dot11DesiredBSSType;
    509 +      return ( UCHAR * ) &sc->desiredBSSType;
    510 +
    511 +    case DOT11OPERATIONALRATESET:
    512 +//    *write_method = write_dot11OperationalRateSet;
    513 +      *var_len = strlen ( sc->operationalRateSet );
    514 +      return ( UCHAR * ) sc->operationalRateSet;
    515 +
    516 +    case DOT11BEACONPERIOD: 
    517 +//    *write_method = write_dot11BeaconPeriod;
    518 +      return ( UCHAR * ) &sc->beaconPeriod;
    519 +
    520 +    case DOT11DTIMPERIOD:
    521 +//    *write_method = write_dot11DTIMPeriod;
    522 +      return ( UCHAR * ) &sc->DTIMPeriod;
    523 +
    524 +    case DOT11ASSOCIATIONRESPONSETIMEOUT:
    525 +//    *write_method = write_dot11AssociationResponseTimeOut;
    526 +      return ( UCHAR * ) &sc->associationResponseTimeOut;
    527 +
    528 +    case DOT11DISASSOCIATEREASON:
    529 +      return ( UCHAR * ) &sc->disAssociationReason;
    530 +
    531 +    case DOT11DISASSOCIATESTATION:
    532 +      MACWork[ 0] = sc->disAssociationStation[ 0];
    533 +      MACWork[ 1] = sc->disAssociationStation[ 1];
    534 +      MACWork[ 2] = sc->disAssociationStation[ 3];
    535 +      MACWork[ 3] = sc->disAssociationStation[ 4];
    536 +      MACWork[ 4] = sc->disAssociationStation[ 6];
    537 +      MACWork[ 5] = sc->disAssociationStation[ 7];
    538 +      MACWork[ 6] = sc->disAssociationStation[ 9];
    539 +      MACWork[ 7] = sc->disAssociationStation[10];
    540 +      MACWork[ 8] = sc->disAssociationStation[12];
    541 +      MACWork[ 9] = sc->disAssociationStation[13];
    542 +      MACWork[10] = sc->disAssociationStation[15];
    543 +      MACWork[11] = sc->disAssociationStation[16];
    544 +      MACWork[12] = '\0';
    545 +      *var_len = 6;
    546 +      return ( UCHAR * ) htob ( MACWork );
    547 +
    548 +    case DOT11DEAUTHENTICATEREASON:
    549 +      return ( UCHAR * ) &sc->deAuthenticationReason;
    550 +
    551 +    case DOT11DEAUTHENTICATESTATION:
    552 +      MACWork[ 0] = sc->deAuthenticationStation[ 0];
    553 +      MACWork[ 1] = sc->deAuthenticationStation[ 1];
    554 +      MACWork[ 2] = sc->deAuthenticationStation[ 3];
    555 +      MACWork[ 3] = sc->deAuthenticationStation[ 4];
    556 +      MACWork[ 4] = sc->deAuthenticationStation[ 6];
    557 +      MACWork[ 5] = sc->deAuthenticationStation[ 7];
    558 +      MACWork[ 6] = sc->deAuthenticationStation[ 9];
    559 +      MACWork[ 7] = sc->deAuthenticationStation[10];
    560 +      MACWork[ 8] = sc->deAuthenticationStation[12];
    561 +      MACWork[ 9] = sc->deAuthenticationStation[13];
    562 +      MACWork[10] = sc->deAuthenticationStation[15];
    563 +      MACWork[11] = sc->deAuthenticationStation[16];
    564 +      MACWork[12] = '\0';
    565 +      *var_len = 6;
    566 +      return ( UCHAR * ) htob ( MACWork );
    567 +
    568 +    case DOT11AUTHENTICATEFAILSTATUS:
    569 +      return ( UCHAR * ) &sc->authenticateFailStatus;
    570 +
    571 +    case DOT11AUTHENTICATEFAILSTATION:
    572 +      MACWork[ 0] = sc->authenticateFailStation[ 0];
    573 +      MACWork[ 1] = sc->authenticateFailStation[ 1];
    574 +      MACWork[ 2] = sc->authenticateFailStation[ 3];
    575 +      MACWork[ 3] = sc->authenticateFailStation[ 4];
    576 +      MACWork[ 4] = sc->authenticateFailStation[ 6];
    577 +      MACWork[ 5] = sc->authenticateFailStation[ 7];
    578 +      MACWork[ 6] = sc->authenticateFailStation[ 9];
    579 +      MACWork[ 7] = sc->authenticateFailStation[10];
    580 +      MACWork[ 8] = sc->authenticateFailStation[12];
    581 +      MACWork[ 9] = sc->authenticateFailStation[13];
    582 +      MACWork[10] = sc->authenticateFailStation[15];
    583 +      MACWork[11] = sc->authenticateFailStation[16];
    584 +      MACWork[12] = '\0';
    585 +      *var_len = 6;
    586 +      return ( UCHAR * ) htob ( MACWork );
    587 +
    588 +    default:
    589 +      ERROR_MSG ( "" );
    590 +  }
    591 +
    592 +  return NULL;
    593 +}
    594 +
    595 +/****************************************************************************
    596 +*                                                                           *
    597 +*  var_dot11AuthenticationAlgorithmsTable() -                               *
    598 +*                                                                           *
    599 +****************************************************************************/
    600 +unsigned char *
    601 +var_dot11AuthenticationAlgorithmsTable (  struct variable *vp,
    602 +                                          oid     *name,
    603 +                                          size_t  *length,
    604 +                                          int     exact,
    605 +                                          size_t  *var_len,
    606 +                                          WriteMethod **write_method )
    607 +{
    608 +  int found = FALSE;
    609 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
    610 +
    611 +  loadTables();
    612 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
    613 +  for ( np = LIST_FIRST ( &aaList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
    614 +    aa = ( struct aaTbl_data * ) np->data;
    615 +    rName[vp->namelen + 0] = aa->ifIndex;
    616 +    rName[vp->namelen + 1] = aa->authenticationAlgorithmsIndex;
    617 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
    618 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
    619 +      switch ( vp->magic ) {
    620 +        case DOT11AUTHENTICATIONALGORITHM:
    621 +          if ( aa->haveAuthenticationAlgorithm    ) found = TRUE; break;
    622 +        case DOT11AUTHENTICATIONALGORITHMSENABLE:
    623 +          if ( aa->authenticationAlgorithmsEnable ) found = TRUE; break;
    624 +      }
    625 +    }
    626 +    if ( found )
    627 +      break;
    628 +  }
    629 +
    630 +  if ( !found ) 
    631 +    return NULL;
    632 +
    633 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
    634 +  *length = vp->namelen + 2;
    635 +  *var_len = sizeof ( long );
    636 +  *write_method = NULL;
    637 +
    638 +  switch ( vp->magic ) {
    639 +
    640 +    case DOT11AUTHENTICATIONALGORITHM:
    641 +      return ( UCHAR * ) &aa->authenticationAlgorithm;
    642 +        
    643 +    case DOT11AUTHENTICATIONALGORITHMSENABLE:
    644 +//    *write_method = write_dot11AuthenticationAlgorithmsEnable;
    645 +      return ( UCHAR * ) &aa->authenticationAlgorithmsEnable;
    646 +
    647 +    default:
    648 +      ERROR_MSG ( "" );
    649 +  }
    650 +
    651 +  return NULL;
    652 +}
    653 +
    654 +/****************************************************************************
    655 +*                                                                           *
    656 +*  var_dot11WEPDefaultKeysTable() -                                         *
    657 +*                                                                           *
    658 +****************************************************************************/
    659 +unsigned char *
    660 +var_dot11WEPDefaultKeysTable ( struct variable *vp,
    661 +                                oid     *name,
    662 +                                size_t  *length,
    663 +                                int     exact,
    664 +                                size_t  *var_len,
    665 +                                WriteMethod **write_method )
    666 +{
    667 +  int found = FALSE;
    668 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
    669 +
    670 +  loadTables();
    671 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
    672 +  for ( np = LIST_FIRST ( &dfList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
    673 +    df = ( struct dfTbl_data * ) np->data;
    674 +    rName[vp->namelen + 0] = df->ifIndex;
    675 +    rName[vp->namelen + 1] = df->WEPDefaultKeyIndex;
    676 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
    677 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
    678 +      switch ( vp->magic ) {
    679 +        case DOT11WEPDEFAULTKEYVALUE:
    680 +          if ( df->haveWEPDefaultKeyValue ) found = TRUE; break;
    681 +      }          
    682 +    }          
    683 +    if ( found )
    684 +      break;
    685 +  }
    686 +
    687 +  if ( !found ) 
    688 +    return NULL;
    689 +
    690 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
    691 +  *length = vp->namelen + 2;
    692 +  *var_len = sizeof ( long );
    693 +  *write_method = NULL;
    694 +
    695 +  switch ( vp->magic ) {
    696 +
    697 +    case DOT11WEPDEFAULTKEYVALUE:
    698 +//    *write_method = write_dot11WEPDefaultKeyValue;
    699 +      *var_len = strlen ( df->WEPDefaultKeyValue );
    700 +      return ( UCHAR * ) df->WEPDefaultKeyValue;
    701 +
    702 +    default:
    703 +      ERROR_MSG ( "" );
    704 +  }
    705 +
    706 +  return NULL;
    707 +}
    708 +
    709 +/****************************************************************************
    710 +*                                                                           *
    711 +*  var_dot11WEPKeyMappingsTable() -                                         *
    712 +*                                                                           *
    713 +****************************************************************************/
    714 +unsigned char *
    715 +var_dot11WEPKeyMappingsTable ( struct variable *vp,
    716 +                                oid     *name,
    717 +                                size_t  *length,
    718 +                                int     exact,
    719 +                                size_t  *var_len,
    720 +                                WriteMethod **write_method)
    721 +{
    722 +  static char MACWork[17];
    723 +  int found = FALSE;
    724 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
    725 +
    726 +  loadTables();
    727 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
    728 +  for ( np = LIST_FIRST ( &kmList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
    729 +    km = ( struct kmTbl_data * ) np->data;
    730 +    rName[vp->namelen + 0] = km->ifIndex;
    731 +    rName[vp->namelen + 1] = km->WEPKeyMappingIndex;
    732 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
    733 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
    734 +      switch ( vp->magic ) {
    735 +        case DOT11WEPKEYMAPPINGADDRESS:
    736 +          if ( km->haveWEPKeyMappingAddress ) found = TRUE; break;
    737 +        case DOT11WEPKEYMAPPINGWEPON:
    738 +          if ( km->haveWEPKeyMappingWEPOn   ) found = TRUE; break;
    739 +        case DOT11WEPKEYMAPPINGVALUE:
    740 +          if ( km->haveWEPKeyMappingValue   ) found = TRUE; break;
    741 +        case DOT11WEPKEYMAPPINGSTATUS:
    742 +          if ( km->haveWEPKeyMappingStatus  ) found = TRUE; break; 
    743 +      }
    744 +    }
    745 +    if ( found )
    746 +      break;
    747 +  }
    748 +
    749 +  if ( !found ) 
    750 +    return NULL;
    751 +
    752 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
    753 +  *length = vp->namelen + 2;
    754 +  *var_len = sizeof ( long );
    755 +  *write_method = NULL;
    756 +
    757 +  switch ( vp->magic ) {
    758 +
    759 +    case DOT11WEPKEYMAPPINGADDRESS:
    760 +//    *write_method = write_dot11WEPKeyMappingAddress;
    761 +      MACWork[ 0] = km->WEPKeyMappingAddress[ 0];
    762 +      MACWork[ 1] = km->WEPKeyMappingAddress[ 1];
    763 +      MACWork[ 2] = km->WEPKeyMappingAddress[ 3];
    764 +      MACWork[ 3] = km->WEPKeyMappingAddress[ 4];
    765 +      MACWork[ 4] = km->WEPKeyMappingAddress[ 6];
    766 +      MACWork[ 5] = km->WEPKeyMappingAddress[ 7];
    767 +      MACWork[ 6] = km->WEPKeyMappingAddress[ 9];
    768 +      MACWork[ 7] = km->WEPKeyMappingAddress[10];
    769 +      MACWork[ 8] = km->WEPKeyMappingAddress[12];
    770 +      MACWork[ 9] = km->WEPKeyMappingAddress[13];
    771 +      MACWork[10] = km->WEPKeyMappingAddress[15];
    772 +      MACWork[11] = km->WEPKeyMappingAddress[16];
    773 +      MACWork[12] = '\0';
    774 +      *var_len = 6;
    775 +      return ( UCHAR * ) htob ( MACWork );
    776 +
    777 +    case DOT11WEPKEYMAPPINGWEPON:
    778 +//    *write_method = write_dot11WEPKeyMappingWEPOn;
    779 +      return ( UCHAR * ) &km->WEPKeyMappingWEPOn;
    780 +
    781 +    case DOT11WEPKEYMAPPINGVALUE:
    782 +//    *write_method = write_dot11WEPKeyMappingValue;
    783 +      *var_len = strlen ( km->WEPKeyMappingValue );
    784 +      return ( UCHAR * ) km->WEPKeyMappingValue;
    785 +
    786 +    case DOT11WEPKEYMAPPINGSTATUS:
    787 +//    *write_method = write_dot11WEPKeyMappingStatus;
    788 +      return ( UCHAR * ) &km->WEPKeyMappingStatus;
    789 +
    790 +    default:
    791 +      ERROR_MSG ( "" );
    792 +  }
    793 +  return NULL;
    794 +}
    795 +
    796 +/****************************************************************************
    797 +*                                                                           *
    798 +*   var_dot11PrivacyTable() -                                               *
    799 +*                                                                           *
    800 +****************************************************************************/
    801 +unsigned char *
    802 +var_dot11PrivacyTable ( struct variable *vp,
    803 +                        oid     *name,
    804 +                        size_t  *length,
    805 +                        int     exact,
    806 +                        size_t  *var_len,
    807 +                        WriteMethod **write_method )
    808 +{
    809 +  int found = FALSE;
    810 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
    811 +
    812 +  loadTables();
    813 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
    814 +  for ( np = LIST_FIRST ( &prList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
    815 +    pr = ( struct prTbl_data * ) np->data;
    816 +    rName[vp->namelen] = pr->ifIndex;
    817 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
    818 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
    819 +      switch ( vp->magic ) {
    820 +        case DOT11PRIVACYINVOKED:
    821 +          if ( pr->havePrivacyInvoked      ) found = TRUE; break;
    822 +        case DOT11WEPDEFAULTKEYID:
    823 +          if ( pr->haveWEPDefaultKeyID     ) found = TRUE; break;
    824 +        case DOT11WEPKEYMAPPINGLENGTH:
    825 +          if ( pr->haveWEPKeyMappingLength ) found = TRUE; break;
    826 +        case DOT11EXCLUDEUNENCRYPTED:
    827 +          if ( pr->haveExcludeUnencrypted  ) found = TRUE; break;
    828 +        case DOT11WEPICVERRORCOUNT:
    829 +          if ( pr->haveWEPICVErrorCount    ) found = TRUE; break;
    830 +        case DOT11WEPEXCLUDEDCOUNT:
    831 +          if ( pr->haveWEPExcludedCount    ) found = TRUE; break;
    832 +      }      
    833 +    }
    834 +    if ( found )
    835 +      break;
    836 +  }
    837 +
    838 +  if ( !found ) 
    839 +    return NULL;
    840 +
    841 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
    842 +  *length = vp->namelen + 1;
    843 +  *var_len = sizeof ( long );
    844 +  *write_method = NULL;
    845 +
    846 +  switch ( vp->magic ) {
    847 +
    848 +    case DOT11PRIVACYINVOKED:
    849 +//    *write_method = write_dot11PrivacyInvoked;
    850 +      return ( UCHAR * ) &pr->privacyInvoked;
    851 +
    852 +    case DOT11WEPDEFAULTKEYID:
    853 +//    *write_method = write_dot11WEPDefaultKeyID;
    854 +      return ( UCHAR * ) &pr->WEPDefaultKeyID;
    855 +
    856 +    case DOT11WEPKEYMAPPINGLENGTH:
    857 +//    *write_method = write_dot11WEPKeyMappingLength;
    858 +      return ( UCHAR * ) &pr->WEPKeyMappingLength;
    859 +
    860 +    case DOT11EXCLUDEUNENCRYPTED:
    861 +//    *write_method = write_dot11ExcludeUnencrypted;
    862 +      return ( UCHAR * ) &pr->excludeUnencrypted;
    863 +
    864 +    case DOT11WEPICVERRORCOUNT:
    865 +      return ( UCHAR * ) &pr->WEPICVErrorCount;
    866 +        
    867 +    case DOT11WEPEXCLUDEDCOUNT:
    868 +      return ( UCHAR * ) &pr->WEPExcludedCount;
    869 +        
    870 +    default:
    871 +      ERROR_MSG ( "" );
    872 +  }
    873 +
    874 +  return NULL;
    875 +}
    876 +
    877 +/****************************************************************************
    878 +*                                                                           *
    879 +*   var_dot11OperationTable() -                                             *
    880 +*                                                                           *
    881 +****************************************************************************/
    882 +unsigned char *
    883 +var_dot11OperationTable ( struct variable *vp,
    884 +                          oid     *name,
    885 +                          size_t  *length,
    886 +                          int     exact,
    887 +                          size_t  *var_len,
    888 +                          WriteMethod **write_method )
    889 +{
    890 +  int found = FALSE;
    891 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
    892 +  static char MACWork[17];
    893 +
    894 +  loadTables();
    895 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
    896 +  for ( np = LIST_FIRST ( &opList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
    897 +    op = ( struct opTbl_data * ) np->data;
    898 +    rName[vp->namelen] = op->ifIndex;
    899 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
    900 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
    901 +
    902 +      switch ( vp->magic ) {      // found requested OID, now check for requested variable
    903 +        case DOT11MACADDRESS:             
    904 +          if ( op->haveMACAddress              ) found = TRUE; break;
    905 +        case DOT11RTSTHRESHOLD:           
    906 +          if ( op->haveRTSThreshold            ) found = TRUE; break;
    907 +        case DOT11SHORTRETRYLIMIT: 
    908 +          if ( op->haveShortRetryLimit         ) found = TRUE; break;
    909 +        case DOT11LONGRETRYLIMIT:
    910 +          if ( op->haveLongRetryLimit          ) found = TRUE; break;
    911 +        case DOT11FRAGMENTATIONTHRESHOLD: 
    912 +          if ( op->haveFragmentationThreshold  ) found = TRUE; break;
    913 +        case DOT11MAXTRANSMITMSDULIFETIME: 
    914 +          if ( op->haveMaxTransmitMSDULifetime ) found = TRUE; break;
    915 +        case DOT11MAXRECEIVELIFETIME:
    916 +          if ( op->haveMaxReceiveLifetime      ) found = TRUE; break;
    917 +        case DOT11MANUFACTURERID:
    918 +          if ( op->haveManufacturerID          ) found = TRUE; break;
    919 +        case DOT11PRODUCTID:
    920 +          if ( op->haveProductID               ) found = TRUE; break;
    921 +      }
    922 +    }
    923 +    if ( found ) 
    924 +      break;
    925 +  }
    926 +
    927 +  if ( !found )
    928 +    return NULL;
    929 +
    930 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
    931 +  *length = vp->namelen + 1;
    932 +  *var_len = sizeof ( long );
    933 +  *write_method = NULL;
    934 +
    935 +  switch ( vp->magic ) {
    936 +
    937 +    case DOT11MACADDRESS:
    938 +      MACWork[ 0] = op->MACAddress[ 0];
    939 +      MACWork[ 1] = op->MACAddress[ 1];
    940 +      MACWork[ 2] = op->MACAddress[ 3];
    941 +      MACWork[ 3] = op->MACAddress[ 4];
    942 +      MACWork[ 4] = op->MACAddress[ 6];
    943 +      MACWork[ 5] = op->MACAddress[ 7];
    944 +      MACWork[ 6] = op->MACAddress[ 9];
    945 +      MACWork[ 7] = op->MACAddress[10];
    946 +      MACWork[ 8] = op->MACAddress[12];
    947 +      MACWork[ 9] = op->MACAddress[13];
    948 +      MACWork[10] = op->MACAddress[15];
    949 +      MACWork[11] = op->MACAddress[16];
    950 +      MACWork[12] = '\0';
    951 +      *var_len = 6;
    952 +      return ( UCHAR * ) htob ( MACWork );
    953 +        
    954 +    case DOT11RTSTHRESHOLD:
    955 +//    *write_method = write_dot11RTSThreshold;
    956 +      return ( UCHAR * ) &op->RTSThreshold;
    957 +
    958 +    case DOT11SHORTRETRYLIMIT:
    959 +//    *write_method = write_dot11ShortRetryLimit;
    960 +      return ( UCHAR * ) &op->shortRetryLimit;
    961 +
    962 +    case DOT11LONGRETRYLIMIT:
    963 +//    *write_method = write_dot11LongRetryLimit;
    964 +      return ( UCHAR * ) &op->longRetryLimit;
    965 +
    966 +    case DOT11FRAGMENTATIONTHRESHOLD:
    967 +//    *write_method = write_dot11FragmentationThreshold;
    968 +      return ( UCHAR * ) &op->fragmentationThreshold;
    969 +
    970 +    case DOT11MAXTRANSMITMSDULIFETIME:
    971 +//    *write_method = write_dot11MaxTransmitMSDULifetime;
    972 +      return ( UCHAR * ) &op->maxTransmitMSDULifetime;
    973 +
    974 +    case DOT11MAXRECEIVELIFETIME:
    975 +//    *write_method = write_dot11MaxReceiveLifetime;
    976 +      return ( UCHAR * ) &op->maxReceiveLifetime;
    977 +
    978 +    case DOT11MANUFACTURERID:
    979 +      *var_len = strlen ( op->manufacturerID );
    980 +      return ( UCHAR * ) op->manufacturerID;
    981 +
    982 +    case DOT11PRODUCTID:
    983 +      *var_len = strlen ( op->productID );
    984 +      return ( UCHAR * ) op->productID;
    985 +        
    986 +    default:
    987 +      ERROR_MSG ( "" );
    988 +  }
    989 +
    990 +  return NULL;
    991 +}
    992 +
    993 +/****************************************************************************
    994 +*                                                                           *
    995 +*   var_dot11CountersTable() -                                              *
    996 +*                                                                           *
    997 +****************************************************************************/
    998 +unsigned char *
    999 +var_dot11CountersTable(struct variable *vp,
   1000 +          oid     *name,
   1001 +          size_t  *length,
   1002 +          int     exact,
   1003 +          size_t  *var_len,
   1004 +          WriteMethod **write_method)
   1005 +{
   1006 +  int found = FALSE;
   1007 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1008 +
   1009 +  loadTables();
   1010 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1011 +  for ( np = LIST_FIRST ( &coList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1012 +    co = ( struct coTbl_data * ) np->data;
   1013 +    rName[vp->namelen] = co->ifIndex;
   1014 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
   1015 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
   1016 +      switch ( vp->magic ) {
   1017 +        case DOT11TRANSMITTEDFRAGMENTCOUNT:
   1018 +          if ( co->haveTransmittedFragmentCount    ) found = TRUE; break;
   1019 +        case DOT11MULTICASTTRANSMITTEDFRAMECOUNT:
   1020 +          if ( co->haveTransmittedFrameCount       ) found = TRUE; break;
   1021 +        case DOT11FAILEDCOUNT:
   1022 +          if ( co->haveFailedCount                 ) found = TRUE; break;
   1023 +        case DOT11RETRYCOUNT:
   1024 +          if ( co->haveRetryCount                  ) found = TRUE; break;
   1025 +        case DOT11MULTIPLERETRYCOUNT:
   1026 +          if ( co->haveMultipleRetryCount          ) found = TRUE; break;
   1027 +        case DOT11FRAMEDUPLICATECOUNT:
   1028 +          if ( co->haveFrameDuplicateCount         ) found = TRUE; break;
   1029 +        case DOT11RTSSUCCESSCOUNT:
   1030 +          if ( co->haveRTSSuccessCount             ) found = TRUE; break;
   1031 +        case DOT11RTSFAILURECOUNT:
   1032 +          if ( co->haveRTSFailureCount             ) found = TRUE; break;
   1033 +        case DOT11ACKFAILURECOUNT:
   1034 +          if ( co->haveACKFailureCount             ) found = TRUE; break;
   1035 +        case DOT11RECEIVEDFRAGMENTCOUNT:
   1036 +          if ( co->haveReceivedFragmentCount       ) found = TRUE; break;
   1037 +        case DOT11MULTICASTRECEIVEDFRAMECOUNT:
   1038 +          if ( co->haveMulticastReceivedFrameCount ) found = TRUE; break;
   1039 +        case DOT11FCSERRORCOUNT:
   1040 +          if ( co->haveFCSErrorCount               ) found = TRUE; break;
   1041 +        case DOT11TRANSMITTEDFRAMECOUNT:
   1042 +          if ( co->haveTransmittedFrameCount       ) found = TRUE; break;
   1043 +        case DOT11WEPUNDECRYPTABLECOUNT:
   1044 +          if ( co->haveWEPUndecryptableCount       ) found = TRUE; break;
   1045 +      }
   1046 +    }
   1047 +    if ( found )
   1048 +      break;
   1049 +  }
   1050 +
   1051 +  if ( !found ) 
   1052 +    return NULL;
   1053 +
   1054 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
   1055 +  *length = vp->namelen + 1;
   1056 +  *var_len = sizeof ( long );
   1057 +  *write_method = NULL;
   1058 +
   1059 +  switch ( vp->magic ) {
   1060 +
   1061 +    case DOT11TRANSMITTEDFRAGMENTCOUNT:       return ( UCHAR * ) &co->transmittedFragmentCount;
   1062 +    case DOT11MULTICASTTRANSMITTEDFRAMECOUNT: return ( UCHAR * ) &co->transmittedFrameCount;
   1063 +    case DOT11FAILEDCOUNT:                    return ( UCHAR * ) &co->failedCount;
   1064 +    case DOT11RETRYCOUNT:                     return ( UCHAR * ) &co->retryCount;
   1065 +    case DOT11MULTIPLERETRYCOUNT:             return ( UCHAR * ) &co->multipleRetryCount;
   1066 +    case DOT11FRAMEDUPLICATECOUNT:            return ( UCHAR * ) &co->frameDuplicateCount;
   1067 +    case DOT11RTSSUCCESSCOUNT:                return ( UCHAR * ) &co->RTSSuccessCount;
   1068 +    case DOT11RTSFAILURECOUNT:                return ( UCHAR * ) &co->RTSFailureCount;
   1069 +    case DOT11ACKFAILURECOUNT:                return ( UCHAR * ) &co->ACKFailureCount;
   1070 +    case DOT11RECEIVEDFRAGMENTCOUNT:          return ( UCHAR * ) &co->receivedFragmentCount;
   1071 +    case DOT11MULTICASTRECEIVEDFRAMECOUNT:    return ( UCHAR * ) &co->multicastReceivedFrameCount;
   1072 +    case DOT11FCSERRORCOUNT:                  return ( UCHAR * ) &co->FCSErrorCount;
   1073 +    case DOT11TRANSMITTEDFRAMECOUNT:          return ( UCHAR * ) &co->transmittedFrameCount;
   1074 +    case DOT11WEPUNDECRYPTABLECOUNT:          return ( UCHAR * ) &co->WEPUndecryptableCount;
   1075 +        
   1076 +    default:
   1077 +      ERROR_MSG ( "" );
   1078 +  }
   1079 +
   1080 +  return NULL;
   1081 +}
   1082 +
   1083 +/****************************************************************************
   1084 +*                                                                           *
   1085 +*   var_dot11GroupAddressesTable() -                                        *
   1086 +*                                                                           *
   1087 +****************************************************************************/
   1088 +unsigned char *
   1089 +var_dot11GroupAddressesTable(struct variable *vp,
   1090 +          oid     *name,
   1091 +          size_t  *length,
   1092 +          int     exact,
   1093 +          size_t  *var_len,
   1094 +          WriteMethod **write_method)
   1095 +{
   1096 +  static char MACWork[17];
   1097 +  int found = FALSE;
   1098 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1099 +
   1100 +  loadTables();
   1101 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1102 +  for ( np = LIST_FIRST ( &gaList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1103 +    ga = ( struct gaTbl_data * ) np->data;
   1104 +    rName[vp->namelen + 0] = ga->ifIndex;
   1105 +    rName[vp->namelen + 1] = ga->groupAddressesIndex;
   1106 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
   1107 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
   1108 +      switch ( vp->magic ) {
   1109 +        case DOT11ADDRESS:
   1110 +          if ( ga->haveAddress              ) found = TRUE; break;
   1111 +        case DOT11GROUPADDRESSESSTATUS:
   1112 +          if ( ga->haveGroupAddressesStatus ) found = TRUE; break;
   1113 +      }
   1114 +    }
   1115 +    if ( found )
   1116 +      break;
   1117 +  }
   1118 +
   1119 +  if ( !found ) 
   1120 +    return NULL;
   1121 +
   1122 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
   1123 +  *length = vp->namelen + 2;
   1124 +  *var_len = sizeof ( long );
   1125 +  *write_method = NULL;
   1126 +
   1127 +  switch ( vp->magic ) {
   1128 +
   1129 +    case DOT11ADDRESS:
   1130 +//    *write_method = write_dot11Address;
   1131 +      MACWork[ 0] = ga->address[ 0];
   1132 +      MACWork[ 1] = ga->address[ 1];
   1133 +      MACWork[ 2] = ga->address[ 3];
   1134 +      MACWork[ 3] = ga->address[ 4];
   1135 +      MACWork[ 4] = ga->address[ 6];
   1136 +      MACWork[ 5] = ga->address[ 7];
   1137 +      MACWork[ 6] = ga->address[ 9];
   1138 +      MACWork[ 7] = ga->address[10];
   1139 +      MACWork[ 8] = ga->address[12];
   1140 +      MACWork[ 9] = ga->address[13];
   1141 +      MACWork[10] = ga->address[15];
   1142 +      MACWork[11] = ga->address[16];
   1143 +      MACWork[12] = '\0';
   1144 +      *var_len = 6;
   1145 +      return ( UCHAR * ) htob ( MACWork );
   1146 +
   1147 +    case DOT11GROUPADDRESSESSTATUS:
   1148 +//    *write_method = write_dot11GroupAddressesStatus;
   1149 +      return ( UCHAR * ) &ga->groupAddressesStatus;
   1150 +
   1151 +    default:
   1152 +      ERROR_MSG ( "" );
   1153 +  }
   1154 +  return NULL;
   1155 +}
   1156 +
   1157 +/****************************************************************************
   1158 +*                                                                           *
   1159 +*   var_dot11ResourceInfoTable() -                                          *
   1160 +*                                                                           *
   1161 +****************************************************************************/
   1162 +unsigned char *
   1163 +var_dot11ResourceInfoTable ( struct variable *vp,
   1164 +                              oid     *name,
   1165 +                              size_t  *length,
   1166 +                              int     exact,
   1167 +                              size_t  *var_len,
   1168 +                              WriteMethod **write_method )
   1169 +{
   1170 +  int found = FALSE;
   1171 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1172 +
   1173 +  loadTables();
   1174 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1175 +  for ( np = LIST_FIRST ( &riList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1176 +    ri = ( struct riTbl_data * ) np->data;
   1177 +    rName[vp->namelen] = ri->ifIndex;
   1178 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
   1179 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
   1180 +      switch ( vp->magic ) {
   1181 +        case DOT11MANUFACTUREROUI:
   1182 +          if ( ri->haveManufacturerOUI            ) found = TRUE; break;
   1183 +        case DOT11MANUFACTURERNAME:
   1184 +          if ( ri->haveManufacturerName           ) found = TRUE; break;
   1185 +        case DOT11MANUFACTURERPRODUCTNAME:
   1186 +          if ( ri->haveManufacturerProductName    ) found = TRUE; break;
   1187 +        case DOT11MANUFACTURERPRODUCTVERSION:
   1188 +          if ( ri->haveManufacturerProductVersion ) found = TRUE; break;
   1189 +      }
   1190 +    }
   1191 +    if ( found )
   1192 +      break;
   1193 +  }
   1194 +
   1195 +  if ( !found ) 
   1196 +    return NULL;
   1197 +
   1198 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
   1199 +  *length = vp->namelen + 1;
   1200 +  *var_len = sizeof ( long );
   1201 +  *write_method = NULL;
   1202 +
   1203 +  switch ( vp->magic ) {
   1204 +
   1205 +    case DOT11MANUFACTUREROUI:
   1206 +      *var_len = strlen ( ri->manufacturerOUI );
   1207 +      return ( UCHAR * ) ri->manufacturerOUI;
   1208 +        
   1209 +    case DOT11MANUFACTURERNAME:
   1210 +      *var_len = strlen ( ri->manufacturerName );
   1211 +      return ( UCHAR * ) ri->manufacturerName;
   1212 +        
   1213 +    case DOT11MANUFACTURERPRODUCTNAME:
   1214 +      *var_len = strlen ( ri->manufacturerProductName );
   1215 +      return ( UCHAR * ) ri->manufacturerProductName;
   1216 +        
   1217 +    case DOT11MANUFACTURERPRODUCTVERSION:
   1218 +      *var_len = strlen ( ri->manufacturerProductVersion );
   1219 +      return ( UCHAR * ) ri->manufacturerProductVersion;
   1220 +        
   1221 +    default: 
   1222 +      ERROR_MSG ( "" );
   1223 +  }
   1224 +
   1225 +  return NULL;
   1226 +}
   1227 +
   1228 +/****************************************************************************
   1229 +*                                                                           *
   1230 +*   var_dot11PhyOperationTable() -                                          *
   1231 +*                                                                           *
   1232 +****************************************************************************/
   1233 +unsigned char *
   1234 +var_dot11PhyOperationTable ( struct variable *vp,
   1235 +                              oid     *name,
   1236 +                              size_t  *length,
   1237 +                              int     exact,
   1238 +                              size_t  *var_len,
   1239 +                              WriteMethod **write_method )
   1240 +{
   1241 +  int found = FALSE;
   1242 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1243 +
   1244 +  loadTables();
   1245 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1246 +  for ( np = LIST_FIRST ( &poList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1247 +    po = ( struct poTbl_data * ) np->data;
   1248 +    rName[vp->namelen] = po->ifIndex;
   1249 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
   1250 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
   1251 +      switch ( vp->magic ) {
   1252 +        case DOT11PHYTYPE:
   1253 +          if ( po->havePHYType          ) found = TRUE; break;
   1254 +        case DOT11CURRENTREGDOMAIN:
   1255 +          if ( po->haveCurrentRegDomain ) found = TRUE; break;
   1256 +        case DOT11TEMPTYPE:
   1257 +          if ( po->haveTempType         ) found = TRUE; break;
   1258 +      }
   1259 +    }
   1260 +    if ( found )
   1261 +      break;
   1262 +  }
   1263 +
   1264 +  if ( !found ) 
   1265 +    return NULL;
   1266 +
   1267 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
   1268 +  *length = vp->namelen + 1;
   1269 +  *var_len = sizeof ( long );
   1270 +  *write_method = NULL;
   1271 +
   1272 +  switch ( vp->magic ) {
   1273 +
   1274 +    case DOT11PHYTYPE:
   1275 +      return ( UCHAR * ) &po->PHYType;
   1276 +        
   1277 +    case DOT11CURRENTREGDOMAIN:
   1278 +//    *write_method = write_dot11CurrentRegDomain;
   1279 +      return ( UCHAR * ) &po->currentRegDomain;
   1280 +
   1281 +    case DOT11TEMPTYPE:
   1282 +      return ( UCHAR * ) &po->tempType;
   1283 +        
   1284 +    default:
   1285 +      ERROR_MSG ( "" );
   1286 +  }
   1287 +
   1288 +  return NULL;
   1289 +}
   1290 +
   1291 +/****************************************************************************
   1292 +*                                                                           *
   1293 +*   var_dot11PhyAntennaTable() -                                            *
   1294 +*                                                                           *
   1295 +****************************************************************************/
   1296 +unsigned char *
   1297 +var_dot11PhyAntennaTable ( struct variable *vp,
   1298 +                            oid     *name,
   1299 +                            size_t  *length,
   1300 +                            int     exact,
   1301 +                            size_t  *var_len,
   1302 +                            WriteMethod **write_method )
   1303 +{
   1304 +  int found = FALSE;
   1305 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1306 +
   1307 +  loadTables();
   1308 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1309 +  for ( np = LIST_FIRST ( &paList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1310 +    pa = ( struct paTbl_data * ) np->data;
   1311 +    rName[vp->namelen] = pa->ifIndex;
   1312 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
   1313 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
   1314 +      switch ( vp->magic ) {
   1315 +        case DOT11CURRENTTXANTENNA:
   1316 +          if ( pa->haveCurrentTxAntenna ) found = TRUE; break;
   1317 +        case DOT11DIVERSITYSUPPORT:
   1318 +          if ( pa->haveDiversitySupport ) found = TRUE; break;
   1319 +        case DOT11CURRENTRXANTENNA:
   1320 +          if ( pa->haveCurrentRxAntenna ) found = TRUE; break;
   1321 +      }
   1322 +    }
   1323 +    if ( found )
   1324 +      break;
   1325 +  }
   1326 +
   1327 +  if ( !found ) 
   1328 +    return NULL;
   1329 +
   1330 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
   1331 +  *length = vp->namelen + 1;
   1332 +  *var_len = sizeof ( long );
   1333 +  *write_method = NULL;
   1334 +
   1335 +  switch ( vp->magic ) {
   1336 +
   1337 +    case DOT11CURRENTTXANTENNA:
   1338 +//    *write_method = write_dot11CurrentTxAntenna;
   1339 +      return ( UCHAR * ) &pa->currentTxAntenna;
   1340 +
   1341 +    case DOT11DIVERSITYSUPPORT:
   1342 +      return ( UCHAR * ) &pa->diversitySupport;
   1343 +        
   1344 +    case DOT11CURRENTRXANTENNA:
   1345 +//    *write_method = write_dot11CurrentRxAntenna;
   1346 +      return ( UCHAR * ) &pa->currentRxAntenna;
   1347 +
   1348 +    default:
   1349 +      ERROR_MSG ( "" );
   1350 +  }
   1351 +  return NULL;
   1352 +}
   1353 +
   1354 +/****************************************************************************
   1355 +*                                                                           *
   1356 +*   var_dot11PhyTxPowerTable() -                                            *
   1357 +*                                                                           *
   1358 +****************************************************************************/
   1359 +unsigned char *
   1360 +var_dot11PhyTxPowerTable ( struct variable *vp,
   1361 +                            oid     *name,
   1362 +                            size_t  *length,
   1363 +                            int     exact,
   1364 +                            size_t  *var_len,
   1365 +                            WriteMethod **write_method )
   1366 +{
   1367 +  int found = FALSE;
   1368 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1369 +
   1370 +  loadTables();
   1371 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1372 +  for ( np = LIST_FIRST ( &ptList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1373 +    pt = ( struct ptTbl_data * ) np->data;
   1374 +    rName[vp->namelen] = pt->ifIndex;
   1375 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
   1376 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
   1377 +      switch ( vp->magic ) {
   1378 +        case DOT11NUMBERSUPPORTEDPOWERLEVELS:
   1379 +          if ( pt->haveNumberSupportedPowerLevels ) found = TRUE; break;
   1380 +        case DOT11TXPOWERLEVEL1:
   1381 +          if ( pt->haveTxPowerLevel1   ) found = TRUE; break;
   1382 +        case DOT11TXPOWERLEVEL2:
   1383 +          if ( pt->haveTxPowerLevel2   ) found = TRUE; break;
   1384 +        case DOT11TXPOWERLEVEL3:
   1385 +          if ( pt->haveTxPowerLevel3   ) found = TRUE; break;
   1386 +        case DOT11TXPOWERLEVEL4:
   1387 +          if ( pt->haveTxPowerLevel4   ) found = TRUE; break;
   1388 +        case DOT11TXPOWERLEVEL5:
   1389 +          if ( pt->haveTxPowerLevel5   ) found = TRUE; break;
   1390 +        case DOT11TXPOWERLEVEL6:
   1391 +          if ( pt->haveTxPowerLevel6   ) found = TRUE; break;
   1392 +        case DOT11TXPOWERLEVEL7:
   1393 +          if ( pt->haveTxPowerLevel7   ) found = TRUE; break;
   1394 +        case DOT11TXPOWERLEVEL8:
   1395 +          if ( pt->haveTxPowerLevel8   ) found = TRUE; break;
   1396 +        case DOT11CURRENTTXPOWERLEVEL:
   1397 +          if ( pt->currentTxPowerLevel ) found = TRUE; break;
   1398 +      }
   1399 +    }
   1400 +    if ( found )
   1401 +      break;
   1402 +  }
   1403 +
   1404 +  if ( !found ) 
   1405 +    return NULL;
   1406 +
   1407 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
   1408 +  *length = vp->namelen + 1;
   1409 +  *var_len = sizeof ( long );
   1410 +  *write_method = NULL;
   1411 +
   1412 +  switch ( vp->magic ) {
   1413 +
   1414 +    case DOT11NUMBERSUPPORTEDPOWERLEVELS: 
   1415 +      return ( UCHAR * ) &pt->numberSupportedPowerLevels;
   1416 +
   1417 +    case DOT11TXPOWERLEVEL1: return ( UCHAR * ) &pt->TxPowerLevel1;
   1418 +    case DOT11TXPOWERLEVEL2: return ( UCHAR * ) &pt->TxPowerLevel2;
   1419 +    case DOT11TXPOWERLEVEL3: return ( UCHAR * ) &pt->TxPowerLevel3;
   1420 +    case DOT11TXPOWERLEVEL4: return ( UCHAR * ) &pt->TxPowerLevel4;
   1421 +    case DOT11TXPOWERLEVEL5: return ( UCHAR * ) &pt->TxPowerLevel5;
   1422 +    case DOT11TXPOWERLEVEL6: return ( UCHAR * ) &pt->TxPowerLevel6;
   1423 +    case DOT11TXPOWERLEVEL7: return ( UCHAR * ) &pt->TxPowerLevel7;
   1424 +    case DOT11TXPOWERLEVEL8: return ( UCHAR * ) &pt->TxPowerLevel8;
   1425 +        
   1426 +    case DOT11CURRENTTXPOWERLEVEL:
   1427 +//    *write_method = write_dot11CurrentTxPowerLevel;
   1428 +      return ( UCHAR * ) &pt->currentTxPowerLevel;
   1429 +
   1430 +    default:
   1431 +      ERROR_MSG ( "" );
   1432 +  }
   1433 +
   1434 +  return NULL;
   1435 +}
   1436 +
   1437 +/****************************************************************************
   1438 +*                                                                           *
   1439 +*     var_dot11PhyFHSSTable() -                                             *
   1440 +*                                                                           *
   1441 +****************************************************************************/
   1442 +unsigned char *
   1443 +var_dot11PhyFHSSTable ( struct variable *vp,
   1444 +                        oid     *name,
   1445 +                        size_t  *length,
   1446 +                        int     exact,
   1447 +                        size_t  *var_len,
   1448 +                        WriteMethod **write_method )
   1449 +{
   1450 +  int found = FALSE;
   1451 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1452 +
   1453 +  loadTables();
   1454 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1455 +  for ( np = LIST_FIRST ( &pfList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1456 +    pf = ( struct pfTbl_data * ) np->data;
   1457 +    rName[vp->namelen] = pf->ifIndex;
   1458 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
   1459 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
   1460 +      switch ( vp->magic ) {
   1461 +        case DOT11HOPTIME:
   1462 +          if ( pf->haveHopTime              ) found = TRUE; break;
   1463 +        case DOT11CURRENTCHANNELNUMBER:
   1464 +          if ( pf->haveCurrentChannelNumber ) found = TRUE; break;
   1465 +        case DOT11MAXDWELLTIME:
   1466 +          if ( pf->haveMaxDwellTime         ) found = TRUE; break;
   1467 +        case DOT11CURRENTDWELLTIME:
   1468 +          if ( pf->haveCurrentDwellTime     ) found = TRUE; break;
   1469 +        case DOT11CURRENTSET:
   1470 +          if ( pf->haveCurrentSet           ) found = TRUE; break;
   1471 +        case DOT11CURRENTPATTERN:
   1472 +          if ( pf->haveCurrentPattern       ) found = TRUE; break;
   1473 +        case DOT11CURRENTINDEX:
   1474 +          if ( pf->haveCurrentIndex         ) found = TRUE; break;
   1475 +      }
   1476 +    }
   1477 +    if ( found )
   1478 +      break;
   1479 +  }
   1480 +
   1481 +  if ( !found ) 
   1482 +    return NULL;
   1483 +
   1484 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
   1485 +  *length = vp->namelen + 1;
   1486 +  *var_len = sizeof ( long );
   1487 +  *write_method = NULL;
   1488 +
   1489 +  switch ( vp->magic ) {
   1490 +
   1491 +    case DOT11HOPTIME:
   1492 +      return ( UCHAR * ) &pf->hopTime;
   1493 +        
   1494 +    case DOT11CURRENTCHANNELNUMBER:
   1495 +//    *write_method = write_dot11CurrentChannelNumber;
   1496 +      return ( UCHAR * ) &pf->currentChannelNumber;
   1497 +
   1498 +    case DOT11MAXDWELLTIME:
   1499 +      return ( UCHAR * ) &pf->maxDwellTime;
   1500 +        
   1501 +    case DOT11CURRENTDWELLTIME:
   1502 +//    *write_method = write_dot11CurrentDwellTime;
   1503 +      return ( UCHAR * ) &pf->currentDwellTime;
   1504 +
   1505 +    case DOT11CURRENTSET:
   1506 +//    *write_method = write_dot11CurrentSet;
   1507 +      return ( UCHAR * ) &pf->currentSet;
   1508 +
   1509 +    case DOT11CURRENTPATTERN:
   1510 +//    *write_method = write_dot11CurrentPattern;
   1511 +      return ( UCHAR * ) &pf->currentPattern;
   1512 +
   1513 +    case DOT11CURRENTINDEX:
   1514 +//    *write_method = write_dot11CurrentIndex;
   1515 +      return ( UCHAR * ) &pf->currentIndex;
   1516 +
   1517 +    default:
   1518 +      ERROR_MSG ( "" );
   1519 +  }
   1520 +
   1521 +  return NULL;
   1522 +}
   1523 +
   1524 +/****************************************************************************
   1525 +*                                                                           *
   1526 +*     var_dot11PhyDSSSTable() -                                             *
   1527 +*                                                                           *
   1528 +****************************************************************************/
   1529 +unsigned char *
   1530 +var_dot11PhyDSSSTable ( struct variable *vp,
   1531 +                        oid     *name,
   1532 +                        size_t  *length,
   1533 +                        int     exact,
   1534 +                        size_t  *var_len,
   1535 +                        WriteMethod **write_method )
   1536 +{
   1537 +  int found = FALSE;
   1538 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1539 +
   1540 +  loadTables();
   1541 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1542 +  for ( np = LIST_FIRST ( &pdList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1543 +    pd = ( struct pdTbl_data * ) np->data;
   1544 +    rName[vp->namelen] = pd->ifIndex;
   1545 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
   1546 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
   1547 +      switch ( vp->magic ) {
   1548 +        case DOT11CURRENTCHANNEL:
   1549 +          if ( pd->haveCurrentChannel   ) found = TRUE; break;
   1550 +        case DOT11CCAMODESUPPORTED:
   1551 +          if ( pd->haveCCAModeSupported ) found = TRUE; break;
   1552 +        case DOT11CURRENTCCAMODE:
   1553 +          if ( pd->haveCurrentCCAMode   ) found = TRUE; break;
   1554 +        case DOT11EDTHRESHOLD:
   1555 +          if ( pd->haveEDThreshold      ) found = TRUE; break;
   1556 +      }
   1557 +    }
   1558 +    if ( found )
   1559 +      break;
   1560 +  }
   1561 +
   1562 +  if ( !found ) 
   1563 +    return NULL;
   1564 +
   1565 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
   1566 +  *length = vp->namelen + 1;
   1567 +  *var_len = sizeof ( long );
   1568 +  *write_method = NULL;
   1569 +
   1570 +  switch ( vp->magic ) {
   1571 +
   1572 +    case DOT11CURRENTCHANNEL:
   1573 +//    *write_method = write_dot11CurrentChannel;
   1574 +      return ( UCHAR * ) &pd->currentChannel;
   1575 +
   1576 +    case DOT11CCAMODESUPPORTED:
   1577 +      return ( UCHAR * ) &pd->CCAModeSupported;
   1578 +        
   1579 +    case DOT11CURRENTCCAMODE:
   1580 +//    *write_method = write_dot11CurrentCCAMode;
   1581 +      return ( UCHAR * ) &pd->currentCCAMode;
   1582 +
   1583 +    case DOT11EDTHRESHOLD:
   1584 +//    *write_method = write_dot11EDThreshold;
   1585 +      return ( UCHAR * ) &pd->EDThreshold;
   1586 +
   1587 +    default:
   1588 +      ERROR_MSG ( "" );
   1589 +  }
   1590 +
   1591 +  return NULL;
   1592 +}
   1593 +
   1594 +/****************************************************************************
   1595 +*                                                                           *
   1596 +*     var_dot11PhyIRTable() -                                             *
   1597 +*                                                                           *
   1598 +****************************************************************************/
   1599 +unsigned char *
   1600 +var_dot11PhyIRTable ( struct variable *vp,
   1601 +                      oid     *name,
   1602 +                      size_t  *length,
   1603 +                      int     exact,
   1604 +                      size_t  *var_len,
   1605 +                      WriteMethod **write_method)
   1606 +{
   1607 +
   1608 +  int found = FALSE;
   1609 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1610 +
   1611 +  loadTables();
   1612 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1613 +  for ( np = LIST_FIRST ( &piList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1614 +    pi = ( struct piTbl_data * ) np->data;
   1615 +    rName[vp->namelen] = pi->ifIndex;
   1616 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
   1617 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
   1618 +      switch ( vp->magic ) {
   1619 +        case DOT11CCAWATCHDOGTIMERMAX:
   1620 +          if ( pi->CCAWatchdogTimerMax ) found = TRUE; break;
   1621 +        case DOT11CCAWATCHDOGCOUNTMAX:
   1622 +          if ( pi->CCAWatchdogCountMax ) found = TRUE; break;
   1623 +        case DOT11CCAWATCHDOGTIMERMIN:
   1624 +          if ( pi->CCAWatchdogTimerMin ) found = TRUE; break;
   1625 +        case DOT11CCAWATCHDOGCOUNTMIN:
   1626 +          if ( pi->CCAWatchdogCountMin ) found = TRUE; break;
   1627 +      }
   1628 +    }
   1629 +    if ( found )
   1630 +      break;
   1631 +  }
   1632 +
   1633 +  if ( !found ) 
   1634 +    return NULL;
   1635 +
   1636 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
   1637 +  *length = vp->namelen + 1;
   1638 +  *var_len = sizeof ( long );
   1639 +  *write_method = NULL;
   1640 +
   1641 +  switch ( vp->magic ) {
   1642 +
   1643 +    case DOT11CCAWATCHDOGTIMERMAX:
   1644 +//    *write_method = write_dot11CCAWatchdogTimerMax;
   1645 +      return ( UCHAR * ) &pi->CCAWatchdogTimerMax;
   1646 +
   1647 +    case DOT11CCAWATCHDOGCOUNTMAX:
   1648 +//   *write_method = write_dot11CCAWatchdogCountMax;
   1649 +      return ( UCHAR * ) &pi->CCAWatchdogCountMax;
   1650 +
   1651 +    case DOT11CCAWATCHDOGTIMERMIN:
   1652 +//    *write_method = write_dot11CCAWatchdogTimerMin;
   1653 +      return ( UCHAR * ) &pi->CCAWatchdogTimerMin;
   1654 +
   1655 +    case DOT11CCAWATCHDOGCOUNTMIN:
   1656 +//    *write_method = write_dot11CCAWatchdogCountMin;
   1657 +      return ( UCHAR * ) &pi->CCAWatchdogCountMin;
   1658 +
   1659 +    default:
   1660 +      ERROR_MSG ( "" );
   1661 +  }
   1662 +
   1663 +  return NULL;
   1664 +}
   1665 +
   1666 +/****************************************************************************
   1667 +*                                                                           *
   1668 +*     var_dot11RegDomainsSupportedTable() -                                 *
   1669 +*                                                                           *
   1670 +****************************************************************************/
   1671 +unsigned char *
   1672 +var_dot11RegDomainsSupportedTable ( struct variable *vp,
   1673 +                                    oid     *name,
   1674 +                                    size_t  *length,
   1675 +                                    int     exact,
   1676 +                                    size_t  *var_len,
   1677 +                                    WriteMethod **write_method)
   1678 +{
   1679 +  int found = FALSE;
   1680 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1681 +
   1682 +  loadTables();
   1683 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1684 +  for ( np = LIST_FIRST ( &rdList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1685 +    rd = ( struct rdTbl_data * ) np->data;
   1686 +    rName[vp->namelen + 0] = rd->ifIndex;
   1687 +    rName[vp->namelen + 1] = rd->regDomainsSupportIndex;
   1688 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
   1689 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
   1690 +      switch ( vp->magic ) {
   1691 +        case DOT11REGDOMAINSSUPPORTVALUE:
   1692 +          if ( rd->haveRegDomainsSupportValue ) found = TRUE; break;
   1693 +      }
   1694 +    }
   1695 +    if ( found )
   1696 +      break;
   1697 +  }
   1698 +
   1699 +  if ( !found ) 
   1700 +    return NULL;
   1701 +
   1702 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
   1703 +  *length = vp->namelen + 2;
   1704 +  *var_len = sizeof ( long );
   1705 +  *write_method = NULL;
   1706 +
   1707 +  switch ( vp->magic ) {
   1708 +
   1709 +    case DOT11REGDOMAINSSUPPORTVALUE:
   1710 +      return ( UCHAR * ) &rd->regDomainsSupportValue;
   1711 +        
   1712 +    default:
   1713 +      ERROR_MSG ( "" );
   1714 +  }
   1715 +
   1716 +  return NULL;
   1717 +}
   1718 +
   1719 +/****************************************************************************
   1720 +*                                                                           *
   1721 +*     var_dot11AntennasListTable() -                                        *
   1722 +*                                                                           *
   1723 +****************************************************************************/
   1724 +unsigned char *
   1725 +var_dot11AntennasListTable(struct variable *vp,
   1726 +          oid     *name,
   1727 +          size_t  *length,
   1728 +          int     exact,
   1729 +          size_t  *var_len,
   1730 +          WriteMethod **write_method)
   1731 +{
   1732 +  int found = FALSE;
   1733 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1734 +
   1735 +  loadTables();
   1736 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1737 +  for ( np = LIST_FIRST ( &alList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1738 +    al = ( struct alTbl_data * ) np->data;
   1739 +    rName[vp->namelen + 0] = al->ifIndex;
   1740 +    rName[vp->namelen + 1] = al->antennaListIndex;
   1741 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
   1742 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
   1743 +      switch ( vp->magic ) {
   1744 +        case DOT11SUPPORTEDTXANTENNA:
   1745 +          if ( al->haveSupportedTxAntenna   ) found = TRUE; break;
   1746 +        case DOT11SUPPORTEDRXANTENNA:
   1747 +          if ( al->haveSupportedRxAntenna   ) found = TRUE; break;
   1748 +        case DOT11DIVERSITYSELECTIONRX:
   1749 +          if ( al->haveDiversitySelectionRx ) found = TRUE; break;
   1750 +      }
   1751 +    }
   1752 +    if ( found )
   1753 +      break;
   1754 +  }
   1755 +
   1756 +  if ( !found ) 
   1757 +    return NULL;
   1758 +
   1759 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
   1760 +  *length = vp->namelen + 2;
   1761 +  *var_len = sizeof ( long );
   1762 +  *write_method = NULL;
   1763 +
   1764 +  switch ( vp->magic ) {
   1765 +
   1766 +    case DOT11SUPPORTEDTXANTENNA:
   1767 +//    *write_method = write_dot11SupportedTxAntenna;
   1768 +      return ( UCHAR * ) &al->supportedTxAntenna;
   1769 +
   1770 +    case DOT11SUPPORTEDRXANTENNA:
   1771 +//    *write_method = write_dot11SupportedRxAntenna;
   1772 +      return ( UCHAR * ) &al->supportedRxAntenna;
   1773 +
   1774 +    case DOT11DIVERSITYSELECTIONRX:
   1775 +//    *write_method = write_dot11DiversitySelectionRx;
   1776 +      return ( UCHAR * ) &al->diversitySelectionRx;
   1777 +
   1778 +    default:
   1779 +      ERROR_MSG ( "" );
   1780 +  }
   1781 +
   1782 +  return NULL;
   1783 +}
   1784 +
   1785 +/****************************************************************************
   1786 +*                                                                           *
   1787 +*     var_dot11SupportedDataRatesTxTable() -                                *
   1788 +*                                                                           *
   1789 +****************************************************************************/
   1790 +unsigned char *
   1791 +var_dot11SupportedDataRatesTxTable ( struct variable *vp,
   1792 +                                      oid     *name,
   1793 +                                      size_t  *length,
   1794 +                                      int     exact,
   1795 +                                      size_t  *var_len,
   1796 +                                      WriteMethod **write_method )
   1797 +{
   1798 +  int found = FALSE;
   1799 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1800 +
   1801 +  loadTables();
   1802 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1803 +  for ( np = LIST_FIRST ( &rtList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1804 +    rt = ( struct rtTbl_data * ) np->data;
   1805 +    rName[vp->namelen + 0] = rt->ifIndex;
   1806 +    rName[vp->namelen + 1] = rt->supportedDataRatesTxIndex;
   1807 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
   1808 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
   1809 +      switch ( vp->magic ) {
   1810 +         case DOT11SUPPORTEDDATARATESTXVALUE:
   1811 +          if ( rt->haveSupportedDataRatesTxValue ) found = TRUE; break;
   1812 +      }
   1813 +    }
   1814 +    if ( found )
   1815 +      break;
   1816 +  }
   1817 +
   1818 +  if ( !found ) 
   1819 +    return NULL;
   1820 +
   1821 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
   1822 +  *length = vp->namelen + 2;
   1823 +  *var_len = sizeof ( long );
   1824 +  *write_method = NULL;
   1825 +
   1826 +  switch ( vp->magic ) {
   1827 +
   1828 +    case DOT11SUPPORTEDDATARATESTXVALUE:
   1829 +      return ( UCHAR * ) &rt->supportedDataRatesTxValue;
   1830 +        
   1831 +    default:
   1832 +      ERROR_MSG ( "" );
   1833 +  }
   1834 +
   1835 +  return NULL;
   1836 +}
   1837 +
   1838 +/****************************************************************************
   1839 +*                                                                           *
   1840 +*     var_dot11SupportedDataRatesRxTable() -                                *
   1841 +*                                                                           *
   1842 +****************************************************************************/
   1843 +unsigned char *
   1844 +var_dot11SupportedDataRatesRxTable ( struct variable *vp,
   1845 +                                      oid     *name,
   1846 +                                      size_t  *length,
   1847 +                                      int     exact,
   1848 +                                      size_t  *var_len,
   1849 +                                      WriteMethod **write_method )
   1850 +{
   1851 +  int found = FALSE;
   1852 +  oid rName [ MAX_OID_LEN ];                            // OID to be returned
   1853 +
   1854 +  loadTables();
   1855 +  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
   1856 +  for ( np = LIST_FIRST ( &rrList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   1857 +    rr = ( struct rrTbl_data * ) np->data;
   1858 +    rName[vp->namelen + 0] = rr->ifIndex;
   1859 +    rName[vp->namelen + 1] = rr->supportedDataRatesRxIndex;
   1860 +    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
   1861 +        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
   1862 +      switch ( vp->magic ) {
   1863 +        case DOT11SUPPORTEDDATARATESRXVALUE:
   1864 +          if ( rr->haveSupportedDataRatesRxValue ) found = TRUE; break;
   1865 +      }
   1866 +    }
   1867 +    if ( found )
   1868 +      break;
   1869 +  }
   1870 +
   1871 +  if ( !found ) 
   1872 +    return NULL;
   1873 +
   1874 +  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
   1875 +  *length = vp->namelen + 2;
   1876 +  *var_len = sizeof ( long );
   1877 +  *write_method = NULL;
   1878 +
   1879 +  switch ( vp->magic ) {
   1880 +
   1881 +    case DOT11SUPPORTEDDATARATESRXVALUE:
   1882 +      return ( UCHAR * ) &rr->supportedDataRatesRxValue;
   1883 +        
   1884 +    default:
   1885 +      ERROR_MSG ( "" );
   1886 +  }
   1887 +
   1888 +  return NULL;
   1889 +}
   1890 +
   1891 +/****************************************************************************
   1892 +*                                                                           *
   1893 +****************************************************************************/
   1894 +int
   1895 +write_dot11StationID(int      action,
   1896 +            u_char   *var_val,
   1897 +            u_char   var_val_type,
   1898 +            size_t   var_val_len,
   1899 +            u_char   *statP,
   1900 +            oid      *name,
   1901 +            size_t   name_len)
   1902 +{
   1903 +  static unsigned char string[SPRINT_MAX_LEN];
   1904 +  int size;
   1905 +
   1906 +  switch ( action ) {
   1907 +
   1908 +    case RESERVE1:
   1909 +      if ( var_val_type != ASN_OCTET_STR ) {
   1910 +        fprintf ( stderr, "write to dot11StationID not ASN_OCTET_STR\n" );
   1911 +        return SNMP_ERR_WRONGTYPE;
   1912 +      }
   1913 +      if ( var_val_len > sizeof ( string )) {
   1914 +        fprintf ( stderr,"write to dot11StationID: bad length\n" );
   1915 +        return SNMP_ERR_WRONGLENGTH;
   1916 +      }
   1917 +      break;
   1918 +
   1919 +    case RESERVE2:
   1920 +    case FREE:
   1921 +    case ACTION:
   1922 +    case UNDO:
   1923 +      break;
   1924 +
   1925 +    case COMMIT:
   1926 +      break;
   1927 +  }
   1928 +
   1929 +  return SNMP_ERR_NOERROR;
   1930 +}
   1931 +
   1932 +/****************************************************************************
   1933 +*                                                                           *
   1934 +****************************************************************************/
   1935 +int
   1936 +write_dot11MediumOccupancyLimit(int      action,
   1937 +            u_char   *var_val,
   1938 +            u_char   var_val_type,
   1939 +            size_t   var_val_len,
   1940 +            u_char   *statP,
   1941 +            oid      *name,
   1942 +            size_t   name_len)
   1943 +{
   1944 +  static long *long_ret;
   1945 +  int size;
   1946 +
   1947 +  switch ( action ) {
   1948 +
   1949 +    case RESERVE1:
   1950 +      if ( var_val_type != ASN_INTEGER ) {
   1951 +        fprintf ( stderr, "write to dot11MediumOccupancyLimit not ASN_INTEGER\n" );
   1952 +        return SNMP_ERR_WRONGTYPE;
   1953 +      }
   1954 +      if ( var_val_len > sizeof ( long_ret )){
   1955 +        fprintf ( stderr,"write to dot11MediumOccupancyLimit: bad length\n" );
   1956 +        return SNMP_ERR_WRONGLENGTH;
   1957 +      }
   1958 +      break;
   1959 +
   1960 +    case RESERVE2:
   1961 +    case FREE:
   1962 +    case ACTION:
   1963 +    case UNDO:
   1964 +      break;
   1965 +
   1966 +    case COMMIT:
   1967 +      break;
   1968 +  }
   1969 +
   1970 +  return SNMP_ERR_NOERROR;
   1971 +}
   1972 +
   1973 +/****************************************************************************
   1974 +*                                                                           *
   1975 +****************************************************************************/
   1976 +int
   1977 +write_dot11CFPPeriod(int      action,
   1978 +            u_char   *var_val,
   1979 +            u_char   var_val_type,
   1980 +            size_t   var_val_len,
   1981 +            u_char   *statP,
   1982 +            oid      *name,
   1983 +            size_t   name_len)
   1984 +{
   1985 +  static long *long_ret;
   1986 +  int size;
   1987 +
   1988 +  switch ( action ) {
   1989 +
   1990 +    case RESERVE1:
   1991 +      if ( var_val_type != ASN_INTEGER ) {
   1992 +        fprintf ( stderr, "write to dot11CFPPeriod not ASN_INTEGER\n" );
   1993 +        return SNMP_ERR_WRONGTYPE;
   1994 +      }
   1995 +      if ( var_val_len > sizeof ( long_ret )){
   1996 +        fprintf ( stderr, "write to dot11CFPPeriod: bad length\n" );
   1997 +        return SNMP_ERR_WRONGLENGTH;
   1998 +      }
   1999 +      break;
   2000 +
   2001 +    case RESERVE2:
   2002 +    case FREE:
   2003 +    case ACTION:
   2004 +    case UNDO:
   2005 +      break;
   2006 +
   2007 +    case COMMIT:
   2008 +      break;
   2009 +  }
   2010 +
   2011 +  return SNMP_ERR_NOERROR;
   2012 +}
   2013 +
   2014 +/****************************************************************************
   2015 +*                                                                           *
   2016 +****************************************************************************/
   2017 +int
   2018 +write_dot11CFPMaxDuration(int      action,
   2019 +            u_char   *var_val,
   2020 +            u_char   var_val_type,
   2021 +            size_t   var_val_len,
   2022 +            u_char   *statP,
   2023 +            oid      *name,
   2024 +            size_t   name_len)
   2025 +{
   2026 +  static long *long_ret;
   2027 +  int size;
   2028 +
   2029 +  switch ( action ) {
   2030 +
   2031 +    case RESERVE1:
   2032 +      if ( var_val_type != ASN_INTEGER ) {
   2033 +        fprintf ( stderr, "write to dot11CFPMaxDuration not ASN_INTEGER\n" );
   2034 +        return SNMP_ERR_WRONGTYPE;
   2035 +      }
   2036 +      if ( var_val_len > sizeof ( long_ret )){
   2037 +        fprintf ( stderr, "write to dot11CFPMaxDuration: bad length\n" );
   2038 +        return SNMP_ERR_WRONGLENGTH;
   2039 +      }
   2040 +      break;
   2041 +
   2042 +    case RESERVE2:
   2043 +    case FREE:
   2044 +    case ACTION:
   2045 +    case UNDO:
   2046 +      break;
   2047 +
   2048 +    case COMMIT:
   2049 +      break;
   2050 +  }
   2051 +
   2052 +  return SNMP_ERR_NOERROR;
   2053 +}
   2054 +
   2055 +/****************************************************************************
   2056 +*                                                                           *
   2057 +****************************************************************************/
   2058 +int
   2059 +write_dot11AuthenticationResponseTimeOut(int      action,
   2060 +            u_char   *var_val,
   2061 +            u_char   var_val_type,
   2062 +            size_t   var_val_len,
   2063 +            u_char   *statP,
   2064 +            oid      *name,
   2065 +            size_t   name_len)
   2066 +{
   2067 +  static long *long_ret;
   2068 +  int size;
   2069 +
   2070 +  switch ( action ) {
   2071 +
   2072 +    case RESERVE1:
   2073 +      if ( var_val_type != ASN_INTEGER ) {
   2074 +        fprintf ( stderr, "write to dot11AuthenticationResponseTimeOut not ASN_INTEGER\n" );
   2075 +        return SNMP_ERR_WRONGTYPE;
   2076 +      }
   2077 +      if ( var_val_len > sizeof ( long_ret )){
   2078 +        fprintf ( stderr, "write to dot11AuthenticationResponseTimeOut: bad length\n" );
   2079 +        return SNMP_ERR_WRONGLENGTH;
   2080 +      }
   2081 +      break;
   2082 +
   2083 +    case RESERVE2:
   2084 +    case FREE:
   2085 +    case ACTION:
   2086 +    case UNDO:
   2087 +      break;
   2088 +
   2089 +    case COMMIT:
   2090 +      break;
   2091 +  }
   2092 +
   2093 +  return SNMP_ERR_NOERROR;
   2094 +}
   2095 +
   2096 +/****************************************************************************
   2097 +*                                                                           *
   2098 +****************************************************************************/
   2099 +int
   2100 +write_dot11PowerManagementMode(int      action,
   2101 +            u_char   *var_val,
   2102 +            u_char   var_val_type,
   2103 +            size_t   var_val_len,
   2104 +            u_char   *statP,
   2105 +            oid      *name,
   2106 +            size_t   name_len)
   2107 +{
   2108 +  static long *long_ret;
   2109 +  int size;
   2110 +
   2111 +  switch ( action ) {
   2112 +
   2113 +    case RESERVE1:
   2114 +      if ( var_val_type != ASN_INTEGER ) {
   2115 +        fprintf ( stderr, "write to dot11PowerManagementMode not ASN_INTEGER\n" );
   2116 +        return SNMP_ERR_WRONGTYPE;
   2117 +      }
   2118 +      if ( var_val_len > sizeof ( long_ret )) {
   2119 +        fprintf ( stderr, "write to dot11PowerManagementMode: bad length\n" );
   2120 +        return SNMP_ERR_WRONGLENGTH;
   2121 +      }
   2122 +      break;
   2123 +
   2124 +    case RESERVE2:
   2125 +    case FREE:
   2126 +    case ACTION:
   2127 +    case UNDO:
   2128 +      break;
   2129 +
   2130 +    case COMMIT:
   2131 +      break;
   2132 +  }
   2133 +
   2134 +  return SNMP_ERR_NOERROR;
   2135 +}
   2136 +
   2137 +/****************************************************************************
   2138 +*                                                                           *
   2139 +****************************************************************************/
   2140 +int
   2141 +write_dot11DesiredSSID(int      action,
   2142 +            u_char   *var_val,
   2143 +            u_char   var_val_type,
   2144 +            size_t   var_val_len,
   2145 +            u_char   *statP,
   2146 +            oid      *name,
   2147 +            size_t   name_len)
   2148 +{
   2149 +  static unsigned char string[SPRINT_MAX_LEN];
   2150 +  int size;
   2151 +
   2152 +  switch ( action ) {
   2153 +
   2154 +    case RESERVE1:
   2155 +      if ( var_val_type != ASN_OCTET_STR ) {
   2156 +        fprintf ( stderr, "write to dot11DesiredSSID not ASN_OCTET_STR\n" );
   2157 +        return SNMP_ERR_WRONGTYPE;
   2158 +      }
   2159 +      if ( var_val_len > sizeof ( string )){
   2160 +        fprintf ( stderr, "write to dot11DesiredSSID: bad length\n" );
   2161 +        return SNMP_ERR_WRONGLENGTH;
   2162 +      }
   2163 +      break;
   2164 +
   2165 +    case RESERVE2:
   2166 +    case FREE:
   2167 +    case ACTION:
   2168 +    case UNDO:
   2169 +      break;
   2170 +
   2171 +    case COMMIT:
   2172 +      break;
   2173 +  }
   2174 +
   2175 +  return SNMP_ERR_NOERROR;
   2176 +}
   2177 +
   2178 +/****************************************************************************
   2179 +*                                                                           *
   2180 +****************************************************************************/
   2181 +int
   2182 +write_dot11DesiredBSSType(int      action,
   2183 +            u_char   *var_val,
   2184 +            u_char   var_val_type,
   2185 +            size_t   var_val_len,
   2186 +            u_char   *statP,
   2187 +            oid      *name,
   2188 +            size_t   name_len)
   2189 +{
   2190 +  static long *long_ret;
   2191 +  int size;
   2192 +
   2193 +  switch ( action ) {
   2194 +
   2195 +    case RESERVE1:
   2196 +      if ( var_val_type != ASN_INTEGER ) {
   2197 +        fprintf ( stderr, "write to dot11DesiredBSSType not ASN_INTEGER\n" );
   2198 +        return SNMP_ERR_WRONGTYPE;
   2199 +      }
   2200 +      if ( var_val_len > sizeof ( long_ret )){
   2201 +        fprintf ( stderr, "write to dot11DesiredBSSType: bad length\n" );
   2202 +        return SNMP_ERR_WRONGLENGTH;
   2203 +      }
   2204 +      break;
   2205 +
   2206 +    case RESERVE2:
   2207 +    case FREE:
   2208 +    case ACTION:
   2209 +    case UNDO:
   2210 +      break;
   2211 +
   2212 +    case COMMIT:
   2213 +      break;
   2214 +  }
   2215 +
   2216 +  return SNMP_ERR_NOERROR;
   2217 +}
   2218 +
   2219 +/****************************************************************************
   2220 +*                                                                           *
   2221 +****************************************************************************/
   2222 +int
   2223 +write_dot11OperationalRateSet(int      action,
   2224 +            u_char   *var_val,
   2225 +            u_char   var_val_type,
   2226 +            size_t   var_val_len,
   2227 +            u_char   *statP,
   2228 +            oid      *name,
   2229 +            size_t   name_len)
   2230 +{
   2231 +  static unsigned char string[SPRINT_MAX_LEN];
   2232 +  int size;
   2233 +
   2234 +  switch ( action ) {
   2235 +
   2236 +    case RESERVE1:
   2237 +      if ( var_val_type != ASN_OCTET_STR ) {
   2238 +        fprintf ( stderr, "write to dot11OperationalRateSet not ASN_OCTET_STR\n" );
   2239 +        return SNMP_ERR_WRONGTYPE;
   2240 +      }
   2241 +      if ( var_val_len > sizeof ( string )){
   2242 +        fprintf ( stderr, "write to dot11OperationalRateSet: bad length\n" );
   2243 +        return SNMP_ERR_WRONGLENGTH;
   2244 +      }
   2245 +      break;
   2246 +
   2247 +    case RESERVE2:
   2248 +    case FREE:
   2249 +    case ACTION:
   2250 +    case UNDO:
   2251 +      break;
   2252 +
   2253 +    case COMMIT:
   2254 +      break;
   2255 +  }
   2256 +
   2257 +  return SNMP_ERR_NOERROR;
   2258 +}
   2259 +
   2260 +/****************************************************************************
   2261 +*                                                                           *
   2262 +****************************************************************************/
   2263 +int
   2264 +write_dot11BeaconPeriod(int      action,
   2265 +            u_char   *var_val,
   2266 +            u_char   var_val_type,
   2267 +            size_t   var_val_len,
   2268 +            u_char   *statP,
   2269 +            oid      *name,
   2270 +            size_t   name_len)
   2271 +{
   2272 +  static long *long_ret;
   2273 +  int size;
   2274 +
   2275 +  switch ( action ) {
   2276 +
   2277 +    case RESERVE1:
   2278 +      if ( var_val_type != ASN_INTEGER ) {
   2279 +        fprintf ( stderr, "write to dot11BeaconPeriod not ASN_INTEGER\n" );
   2280 +        return SNMP_ERR_WRONGTYPE;
   2281 +      }
   2282 +      if ( var_val_len > sizeof ( long_ret )){
   2283 +        fprintf ( stderr,"write to dot11BeaconPeriod: bad length\n" );
   2284 +        return SNMP_ERR_WRONGLENGTH;
   2285 +      }
   2286 +      break;
   2287 +
   2288 +    case RESERVE2:
   2289 +    case FREE:
   2290 +    case ACTION:
   2291 +    case UNDO:
   2292 +      break;
   2293 +
   2294 +    case COMMIT:
   2295 +      break;
   2296 +  }
   2297 +
   2298 +  return SNMP_ERR_NOERROR;
   2299 +}
   2300 +
   2301 +/****************************************************************************
   2302 +*                                                                           *
   2303 +****************************************************************************/
   2304 +int
   2305 +write_dot11DTIMPeriod(int      action,
   2306 +            u_char   *var_val,
   2307 +            u_char   var_val_type,
   2308 +            size_t   var_val_len,
   2309 +            u_char   *statP,
   2310 +            oid      *name,
   2311 +            size_t   name_len)
   2312 +{
   2313 +  static long *long_ret;
   2314 +  int size;
   2315 +
   2316 +  switch ( action ) {
   2317 +
   2318 +    case RESERVE1:
   2319 +      if ( var_val_type != ASN_INTEGER ) {
   2320 +        fprintf ( stderr, "write to dot11DTIMPeriod not ASN_INTEGER\n" );
   2321 +        return SNMP_ERR_WRONGTYPE;
   2322 +      }
   2323 +      if ( var_val_len > sizeof ( long_ret )){
   2324 +        fprintf ( stderr,"write to dot11DTIMPeriod: bad length\n" );
   2325 +        return SNMP_ERR_WRONGLENGTH;
   2326 +      }
   2327 +      break;
   2328 +
   2329 +    case RESERVE2:
   2330 +    case FREE:
   2331 +    case ACTION:
   2332 +    case UNDO:
   2333 +      break;
   2334 +
   2335 +    case COMMIT:
   2336 +      break;
   2337 +  }
   2338 +
   2339 +  return SNMP_ERR_NOERROR;
   2340 +}
   2341 +
   2342 +/****************************************************************************
   2343 +*                                                                           *
   2344 +****************************************************************************/
   2345 +int
   2346 +write_dot11AssociationResponseTimeOut(int      action,
   2347 +            u_char   *var_val,
   2348 +            u_char   var_val_type,
   2349 +            size_t   var_val_len,
   2350 +            u_char   *statP,
   2351 +            oid      *name,
   2352 +            size_t   name_len)
   2353 +{
   2354 +  static long *long_ret;
   2355 +  int size;
   2356 +
   2357 +  switch ( action ) {
   2358 +
   2359 +    case RESERVE1:
   2360 +      if ( var_val_type != ASN_INTEGER ) {
   2361 +        fprintf ( stderr, "write to dot11AssociationResponseTimeOut not ASN_INTEGER\n" );
   2362 +        return SNMP_ERR_WRONGTYPE;
   2363 +      }
   2364 +      if ( var_val_len > sizeof ( long_ret )) {
   2365 +        fprintf ( stderr,"write to dot11AssociationResponseTimeOut: bad length\n" );
   2366 +        return SNMP_ERR_WRONGLENGTH;
   2367 +      }
   2368 +      break;
   2369 +
   2370 +    case RESERVE2:
   2371 +    case FREE:
   2372 +    case ACTION:
   2373 +    case UNDO:
   2374 +      break;
   2375 +
   2376 +    case COMMIT:
   2377 +      break;
   2378 +  }
   2379 +
   2380 +  return SNMP_ERR_NOERROR;
   2381 +}
   2382 +
   2383 +/****************************************************************************
   2384 +*                                                                           *
   2385 +****************************************************************************/
   2386 +int
   2387 +write_dot11AuthenticationAlgorithmsEnable(int      action,
   2388 +            u_char   *var_val,
   2389 +            u_char   var_val_type,
   2390 +            size_t   var_val_len,
   2391 +            u_char   *statP,
   2392 +            oid      *name,
   2393 +            size_t   name_len)
   2394 +{
   2395 +  static long *long_ret;
   2396 +  int size;
   2397 +
   2398 +  switch ( action ) {
   2399 +
   2400 +    case RESERVE1:
   2401 +      if ( var_val_type != ASN_INTEGER ) {
   2402 +        fprintf ( stderr, "write to dot11AuthenticationAlgorithmsEnable not ASN_INTEGER\n" );
   2403 +        return SNMP_ERR_WRONGTYPE;
   2404 +      }
   2405 +      if ( var_val_len > sizeof ( long_ret )){
   2406 +        fprintf ( stderr,"write to dot11AuthenticationAlgorithmsEnable: bad length\n" );
   2407 +        return SNMP_ERR_WRONGLENGTH;
   2408 +      }
   2409 +      break;
   2410 +
   2411 +    case RESERVE2:
   2412 +    case FREE:
   2413 +    case ACTION:
   2414 +    case UNDO:
   2415 +      break;
   2416 +
   2417 +    case COMMIT:
   2418 +      break;
   2419 +  }
   2420 +
   2421 +  return SNMP_ERR_NOERROR;
   2422 +}
   2423 +
   2424 +/****************************************************************************
   2425 +*                                                                           *
   2426 +****************************************************************************/
   2427 +int
   2428 +write_dot11WEPDefaultKeyValue(int      action,
   2429 +            u_char   *var_val,
   2430 +            u_char   var_val_type,
   2431 +            size_t   var_val_len,
   2432 +            u_char   *statP,
   2433 +            oid      *name,
   2434 +            size_t   name_len)
   2435 +{
   2436 +  static unsigned char string[SPRINT_MAX_LEN];
   2437 +  int size;
   2438 +
   2439 +  switch ( action ) {
   2440 +
   2441 +    case RESERVE1:
   2442 +      if ( var_val_type != ASN_OCTET_STR ) {
   2443 +        fprintf ( stderr, "write to dot11WEPDefaultKeyValue not ASN_OCTET_STR\n" );
   2444 +        return SNMP_ERR_WRONGTYPE;
   2445 +      }
   2446 +      if ( var_val_len > sizeof ( string )){
   2447 +        fprintf ( stderr,"write to dot11WEPDefaultKeyValue: bad length\n" );
   2448 +        return SNMP_ERR_WRONGLENGTH;
   2449 +      }
   2450 +      break;
   2451 +
   2452 +    case RESERVE2:
   2453 +    case FREE:
   2454 +    case ACTION:
   2455 +    case UNDO:
   2456 +      break;
   2457 +
   2458 +    case COMMIT:
   2459 +      break;
   2460 +  }
   2461 +
   2462 +  return SNMP_ERR_NOERROR;
   2463 +}
   2464 +
   2465 +/****************************************************************************
   2466 +*                                                                           *
   2467 +****************************************************************************/
   2468 +int
   2469 +write_dot11WEPKeyMappingAddress(int      action,
   2470 +            u_char   *var_val,
   2471 +            u_char   var_val_type,
   2472 +            size_t   var_val_len,
   2473 +            u_char   *statP,
   2474 +            oid      *name,
   2475 +            size_t   name_len)
   2476 +{
   2477 +  static unsigned char string[SPRINT_MAX_LEN];
   2478 +  int size;
   2479 +
   2480 +  switch ( action ) {
   2481 +
   2482 +    case RESERVE1:
   2483 +      if ( var_val_type != ASN_OCTET_STR ) {
   2484 +        fprintf ( stderr, "write to dot11WEPKeyMappingAddress not ASN_OCTET_STR\n" );
   2485 +        return SNMP_ERR_WRONGTYPE;
   2486 +      }
   2487 +      if ( var_val_len > sizeof ( string )) {
   2488 +        fprintf ( stderr,"write to dot11WEPKeyMappingAddress: bad length\n" );
   2489 +        return SNMP_ERR_WRONGLENGTH;
   2490 +      }
   2491 +      break;
   2492 +
   2493 +    case RESERVE2:
   2494 +    case FREE:
   2495 +    case ACTION:
   2496 +    case UNDO:
   2497 +      break;
   2498 +
   2499 +    case COMMIT:
   2500 +      break;
   2501 +  }
   2502 +
   2503 +  return SNMP_ERR_NOERROR;
   2504 +}
   2505 +
   2506 +/****************************************************************************
   2507 +*                                                                           *
   2508 +****************************************************************************/
   2509 +int
   2510 +write_dot11WEPKeyMappingWEPOn(int      action,
   2511 +            u_char   *var_val,
   2512 +            u_char   var_val_type,
   2513 +            size_t   var_val_len,
   2514 +            u_char   *statP,
   2515 +            oid      *name,
   2516 +            size_t   name_len)
   2517 +{
   2518 +  static long *long_ret;
   2519 +  int size;
   2520 +
   2521 +  switch ( action ) {
   2522 +
   2523 +    case RESERVE1:
   2524 +      if ( var_val_type != ASN_INTEGER ) {
   2525 +        fprintf ( stderr, "write to dot11WEPKeyMappingWEPOn not ASN_INTEGER\n" );
   2526 +        return SNMP_ERR_WRONGTYPE;
   2527 +      }
   2528 +      if ( var_val_len > sizeof ( long_ret )){
   2529 +        fprintf ( stderr, "write to dot11WEPKeyMappingWEPOn: bad length\n" );
   2530 +        return SNMP_ERR_WRONGLENGTH;
   2531 +      }
   2532 +      break;
   2533 +
   2534 +    case RESERVE2:
   2535 +    case FREE:
   2536 +    case ACTION:
   2537 +    case UNDO:
   2538 +      break;
   2539 +
   2540 +    case COMMIT:
   2541 +      break;
   2542 +  }
   2543 +
   2544 +  return SNMP_ERR_NOERROR;
   2545 +}
   2546 +
   2547 +/****************************************************************************
   2548 +*                                                                           *
   2549 +****************************************************************************/
   2550 +int
   2551 +write_dot11WEPKeyMappingValue(int      action,
   2552 +            u_char   *var_val,
   2553 +            u_char   var_val_type,
   2554 +            size_t   var_val_len,
   2555 +            u_char   *statP,
   2556 +            oid      *name,
   2557 +            size_t   name_len)
   2558 +{
   2559 +  static unsigned char string[SPRINT_MAX_LEN];
   2560 +  int size;
   2561 +
   2562 +  switch ( action ) {
   2563 +
   2564 +    case RESERVE1:
   2565 +      if ( var_val_type != ASN_OCTET_STR ) {
   2566 +        fprintf ( stderr, "write to dot11WEPKeyMappingValue not ASN_OCTET_STR\n" );
   2567 +        return SNMP_ERR_WRONGTYPE;
   2568 +      }
   2569 +      if ( var_val_len > sizeof ( string )) {
   2570 +        fprintf ( stderr, "write to dot11WEPKeyMappingValue: bad length\n" );
   2571 +        return SNMP_ERR_WRONGLENGTH;
   2572 +      }
   2573 +      break;
   2574 +
   2575 +    case RESERVE2:
   2576 +    case FREE:
   2577 +    case ACTION:
   2578 +    case UNDO:
   2579 +      break;
   2580 +
   2581 +    case COMMIT:
   2582 +      break;
   2583 +  }
   2584 +
   2585 +  return SNMP_ERR_NOERROR;
   2586 +}
   2587 +
   2588 +/****************************************************************************
   2589 +*                                                                           *
   2590 +****************************************************************************/
   2591 +int
   2592 +write_dot11WEPKeyMappingStatus(int      action,
   2593 +            u_char   *var_val,
   2594 +            u_char   var_val_type,
   2595 +            size_t   var_val_len,
   2596 +            u_char   *statP,
   2597 +            oid      *name,
   2598 +            size_t   name_len)
   2599 +{
   2600 +  static long *long_ret;
   2601 +  int size;
   2602 +
   2603 +  switch ( action ) {
   2604 +    case RESERVE1:
   2605 +      if ( var_val_type != ASN_INTEGER ) {
   2606 +        fprintf ( stderr, "write to dot11WEPKeyMappingStatus not ASN_INTEGER\n" );
   2607 +        return SNMP_ERR_WRONGTYPE;
   2608 +      }
   2609 +      if ( var_val_len > sizeof ( long_ret )){
   2610 +        fprintf ( stderr, "write to dot11WEPKeyMappingStatus: bad length\n" );
   2611 +        return SNMP_ERR_WRONGLENGTH;
   2612 +      }
   2613 +      break;
   2614 +
   2615 +    case RESERVE2:
   2616 +    case FREE:
   2617 +    case ACTION:
   2618 +    case UNDO:
   2619 +      break;
   2620 +
   2621 +    case COMMIT:
   2622 +      break;
   2623 +  }
   2624 +
   2625 +  return SNMP_ERR_NOERROR;
   2626 +}
   2627 +
   2628 +/****************************************************************************
   2629 +*                                                                           *
   2630 +****************************************************************************/
   2631 +int
   2632 +write_dot11PrivacyInvoked(int      action,
   2633 +            u_char   *var_val,
   2634 +            u_char   var_val_type,
   2635 +            size_t   var_val_len,
   2636 +            u_char   *statP,
   2637 +            oid      *name,
   2638 +            size_t   name_len)
   2639 +{
   2640 +  static long *long_ret;
   2641 +  int size;
   2642 +
   2643 +  switch ( action ) {
   2644 +
   2645 +    case RESERVE1:
   2646 +      if ( var_val_type != ASN_INTEGER ) {
   2647 +        fprintf ( stderr, "write to dot11PrivacyInvoked not ASN_INTEGER\n" );
   2648 +        return SNMP_ERR_WRONGTYPE;
   2649 +      }
   2650 +      if ( var_val_len > sizeof ( long_ret )){
   2651 +        fprintf ( stderr, "write to dot11PrivacyInvoked: bad length\n" );
   2652 +        return SNMP_ERR_WRONGLENGTH;
   2653 +      }
   2654 +      break;
   2655 +
   2656 +    case RESERVE2:
   2657 +    case FREE:
   2658 +    case ACTION:
   2659 +    case UNDO:
   2660 +      break;
   2661 +
   2662 +    case COMMIT:
   2663 +      break;
   2664 +  }
   2665 +
   2666 +  return SNMP_ERR_NOERROR;
   2667 +}
   2668 +
   2669 +/****************************************************************************
   2670 +*                                                                           *
   2671 +****************************************************************************/
   2672 +int
   2673 +write_dot11WEPDefaultKeyID(int      action,
   2674 +            u_char   *var_val,
   2675 +            u_char   var_val_type,
   2676 +            size_t   var_val_len,
   2677 +            u_char   *statP,
   2678 +            oid      *name,
   2679 +            size_t   name_len)
   2680 +{
   2681 +  static long *long_ret;
   2682 +  int size;
   2683 +
   2684 +  switch ( action ) {
   2685 +
   2686 +    case RESERVE1:
   2687 +      if ( var_val_type != ASN_INTEGER ) {
   2688 +        fprintf ( stderr, "write to dot11WEPDefaultKeyID not ASN_INTEGER\n" );
   2689 +        return SNMP_ERR_WRONGTYPE;
   2690 +      }
   2691 +      if ( var_val_len > sizeof ( long_ret )){
   2692 +        fprintf ( stderr, "write to dot11WEPDefaultKeyID: bad length\n" );
   2693 +        return SNMP_ERR_WRONGLENGTH;
   2694 +      }
   2695 +      break;
   2696 +
   2697 +    case RESERVE2:
   2698 +    case FREE:
   2699 +    case ACTION:
   2700 +    case UNDO:
   2701 +      break;
   2702 +
   2703 +    case COMMIT:
   2704 +      break;
   2705 +  }
   2706 +
   2707 +  return SNMP_ERR_NOERROR;
   2708 +}
   2709 +
   2710 +/****************************************************************************
   2711 +*                                                                           *
   2712 +****************************************************************************/
   2713 +int
   2714 +write_dot11WEPKeyMappingLength(int      action,
   2715 +            u_char   *var_val,
   2716 +            u_char   var_val_type,
   2717 +            size_t   var_val_len,
   2718 +            u_char   *statP,
   2719 +            oid      *name,
   2720 +            size_t   name_len)
   2721 +{
   2722 +  static long *long_ret;
   2723 +  int size;
   2724 +
   2725 +  switch ( action ) {
   2726 +
   2727 +    case RESERVE1:
   2728 +      if ( var_val_type != ASN_INTEGER ) {
   2729 +        fprintf ( stderr, "write to dot11WEPKeyMappingLength not ASN_INTEGER\n" );
   2730 +        return SNMP_ERR_WRONGTYPE;
   2731 +      }
   2732 +      if ( var_val_len > sizeof ( long_ret )){
   2733 +        fprintf ( stderr, "write to dot11WEPKeyMappingLength: bad length\n" );
   2734 +        return SNMP_ERR_WRONGLENGTH;
   2735 +      }
   2736 +      break;
   2737 +
   2738 +    case RESERVE2:
   2739 +    case FREE:
   2740 +    case ACTION:
   2741 +    case UNDO:
   2742 +      break;
   2743 +
   2744 +    case COMMIT:
   2745 +      break;
   2746 +  }
   2747 +
   2748 +  return SNMP_ERR_NOERROR;
   2749 +}
   2750 +
   2751 +/****************************************************************************
   2752 +*                                                                           *
   2753 +****************************************************************************/
   2754 +int
   2755 +write_dot11ExcludeUnencrypted(int      action,
   2756 +            u_char   *var_val,
   2757 +            u_char   var_val_type,
   2758 +            size_t   var_val_len,
   2759 +            u_char   *statP,
   2760 +            oid      *name,
   2761 +            size_t   name_len)
   2762 +{
   2763 +  static long *long_ret;
   2764 +  int size;
   2765 +
   2766 +  switch ( action ) {
   2767 +
   2768 +    case RESERVE1:
   2769 +      if ( var_val_type != ASN_INTEGER ) {
   2770 +        fprintf ( stderr, "write to dot11ExcludeUnencrypted not ASN_INTEGER\n" );
   2771 +        return SNMP_ERR_WRONGTYPE;
   2772 +      }
   2773 +      if ( var_val_len > sizeof ( long_ret )){
   2774 +        fprintf ( stderr,"write to dot11ExcludeUnencrypted: bad length\n" );
   2775 +        return SNMP_ERR_WRONGLENGTH;
   2776 +      }
   2777 +      break;
   2778 +
   2779 +    case RESERVE2:
   2780 +    case FREE:
   2781 +    case ACTION:
   2782 +    case UNDO:
   2783 +      break;
   2784 +
   2785 +    case COMMIT:
   2786 +      break;
   2787 +  }
   2788 +
   2789 +  return SNMP_ERR_NOERROR;
   2790 +}
   2791 +
   2792 +/****************************************************************************
   2793 +*                                                                           *
   2794 +****************************************************************************/
   2795 +int
   2796 +write_dot11RTSThreshold(int      action,
   2797 +            u_char   *var_val,
   2798 +            u_char   var_val_type,
   2799 +            size_t   var_val_len,
   2800 +            u_char   *statP,
   2801 +            oid      *name,
   2802 +            size_t   name_len)
   2803 +{
   2804 +  static long *long_ret;
   2805 +  int size;
   2806 +
   2807 +  switch ( action ) {
   2808 +
   2809 +    case RESERVE1:
   2810 +      if ( var_val_type != ASN_INTEGER ){
   2811 +        fprintf ( stderr, "write to dot11RTSThreshold not ASN_INTEGER\n" );
   2812 +        return SNMP_ERR_WRONGTYPE;
   2813 +      }
   2814 +      if ( var_val_len > sizeof ( long_ret )){
   2815 +        fprintf ( stderr, "write to dot11RTSThreshold: bad length\n" );
   2816 +        return SNMP_ERR_WRONGLENGTH;
   2817 +      }
   2818 +      break;
   2819 +
   2820 +    case RESERVE2:
   2821 +    case FREE:
   2822 +    case ACTION:
   2823 +    case UNDO:
   2824 +      break;
   2825 +
   2826 +    case COMMIT:
   2827 +      break;
   2828 +  }
   2829 +
   2830 +  return SNMP_ERR_NOERROR;
   2831 +}
   2832 +
   2833 +/****************************************************************************
   2834 +*                                                                           *
   2835 +****************************************************************************/
   2836 +int
   2837 +write_dot11ShortRetryLimit(int      action,
   2838 +            u_char   *var_val,
   2839 +            u_char   var_val_type,
   2840 +            size_t   var_val_len,
   2841 +            u_char   *statP,
   2842 +            oid      *name,
   2843 +            size_t   name_len)
   2844 +{
   2845 +  static long *long_ret;
   2846 +  int size;
   2847 +
   2848 +  switch ( action ) {
   2849 +
   2850 +    case RESERVE1:
   2851 +      if ( var_val_type != ASN_INTEGER ) {
   2852 +        fprintf ( stderr, "write to dot11ShortRetryLimit not ASN_INTEGER\n" );
   2853 +        return SNMP_ERR_WRONGTYPE;
   2854 +      }
   2855 +      if ( var_val_len > sizeof ( long_ret )){
   2856 +        fprintf ( stderr, "write to dot11ShortRetryLimit: bad length\n" );
   2857 +        return SNMP_ERR_WRONGLENGTH;
   2858 +      }
   2859 +      break;
   2860 +
   2861 +    case RESERVE2:
   2862 +    case FREE:
   2863 +    case ACTION:
   2864 +    case UNDO:
   2865 +      break;
   2866 +
   2867 +    case COMMIT:
   2868 +      break;
   2869 +  }
   2870 +
   2871 +  return SNMP_ERR_NOERROR;
   2872 +}
   2873 +
   2874 +/****************************************************************************
   2875 +*                                                                           *
   2876 +****************************************************************************/
   2877 +int
   2878 +write_dot11LongRetryLimit(int      action,
   2879 +            u_char   *var_val,
   2880 +            u_char   var_val_type,
   2881 +            size_t   var_val_len,
   2882 +            u_char   *statP,
   2883 +            oid      *name,
   2884 +            size_t   name_len)
   2885 +{
   2886 +  static long *long_ret;
   2887 +  int size;
   2888 +
   2889 +  switch ( action ) {
   2890 +
   2891 +    case RESERVE1:
   2892 +      if ( var_val_type != ASN_INTEGER ) {
   2893 +        fprintf ( stderr, "write to dot11LongRetryLimit not ASN_INTEGER\n" );
   2894 +        return SNMP_ERR_WRONGTYPE;
   2895 +      }
   2896 +      if ( var_val_len > sizeof ( long_ret )){
   2897 +        fprintf ( stderr,"write to dot11LongRetryLimit: bad length\n" );
   2898 +        return SNMP_ERR_WRONGLENGTH;
   2899 +      }
   2900 +      break;
   2901 +
   2902 +    case RESERVE2:
   2903 +    case FREE:
   2904 +    case ACTION:
   2905 +    case UNDO:
   2906 +      break;
   2907 +
   2908 +    case COMMIT:
   2909 +      break;
   2910 +  }
   2911 +
   2912 +  return SNMP_ERR_NOERROR;
   2913 +}
   2914 +
   2915 +/****************************************************************************
   2916 +*                                                                           *
   2917 +****************************************************************************/
   2918 +int
   2919 +write_dot11FragmentationThreshold(int      action,
   2920 +            u_char   *var_val,
   2921 +            u_char   var_val_type,
   2922 +            size_t   var_val_len,
   2923 +            u_char   *statP,
   2924 +            oid      *name,
   2925 +            size_t   name_len)
   2926 +{
   2927 +  static long *long_ret;
   2928 +  int size;
   2929 +
   2930 +  switch ( action ) {
   2931 +
   2932 +    case RESERVE1:
   2933 +      if ( var_val_type != ASN_INTEGER ) {
   2934 +        fprintf ( stderr, "write to dot11FragmentationThreshold not ASN_INTEGER\n" );
   2935 +        return SNMP_ERR_WRONGTYPE;
   2936 +      }
   2937 +      if ( var_val_len > sizeof ( long_ret )){
   2938 +        fprintf ( stderr,"write to dot11FragmentationThreshold: bad length\n" );
   2939 +        return SNMP_ERR_WRONGLENGTH;
   2940 +      }
   2941 +      break;
   2942 +
   2943 +    case RESERVE2:
   2944 +    case FREE:
   2945 +    case ACTION:
   2946 +    case UNDO:
   2947 +      break;
   2948 +
   2949 +    case COMMIT:
   2950 +      break;
   2951 +  }
   2952 +
   2953 +  return SNMP_ERR_NOERROR;
   2954 +}
   2955 +
   2956 +/****************************************************************************
   2957 +*                                                                           *
   2958 +****************************************************************************/
   2959 +int
   2960 +write_dot11MaxTransmitMSDULifetime(int      action,
   2961 +            u_char   *var_val,
   2962 +            u_char   var_val_type,
   2963 +            size_t   var_val_len,
   2964 +            u_char   *statP,
   2965 +            oid      *name,
   2966 +            size_t   name_len)
   2967 +{
   2968 +  static long *long_ret;
   2969 +  int size;
   2970 +
   2971 +  switch ( action ) {
   2972 +
   2973 +    case RESERVE1:
   2974 +      if ( var_val_type != ASN_INTEGER ) {
   2975 +        fprintf ( stderr, "write to dot11MaxTransmitMSDULifetime not ASN_INTEGER\n" );
   2976 +        return SNMP_ERR_WRONGTYPE;
   2977 +      }
   2978 +      if ( var_val_len > sizeof ( long_ret )){
   2979 +        fprintf ( stderr, "write to dot11MaxTransmitMSDULifetime: bad length\n" );
   2980 +        return SNMP_ERR_WRONGLENGTH;
   2981 +      }
   2982 +      break;
   2983 +
   2984 +    case RESERVE2:
   2985 +    case FREE:
   2986 +    case ACTION:
   2987 +    case UNDO:
   2988 +      break;
   2989 +
   2990 +    case COMMIT:
   2991 +
   2992 +      break;
   2993 +  }
   2994 +
   2995 +  return SNMP_ERR_NOERROR;
   2996 +}
   2997 +
   2998 +/****************************************************************************
   2999 +*                                                                           *
   3000 +****************************************************************************/
   3001 +int
   3002 +write_dot11MaxReceiveLifetime(int      action,
   3003 +            u_char   *var_val,
   3004 +            u_char   var_val_type,
   3005 +            size_t   var_val_len,
   3006 +            u_char   *statP,
   3007 +            oid      *name,
   3008 +            size_t   name_len)
   3009 +{
   3010 +  static long *long_ret;
   3011 +  int size;
   3012 +
   3013 +  switch ( action ) {
   3014 +
   3015 +    case RESERVE1:
   3016 +      if ( var_val_type != ASN_INTEGER ) {
   3017 +        fprintf ( stderr, "write to dot11MaxReceiveLifetime not ASN_INTEGER\n" );
   3018 +        return SNMP_ERR_WRONGTYPE;
   3019 +      }
   3020 +      if ( var_val_len > sizeof ( long_ret )){
   3021 +        fprintf ( stderr, "write to dot11MaxReceiveLifetime: bad length\n" );
   3022 +        return SNMP_ERR_WRONGLENGTH;
   3023 +      }
   3024 +      break;
   3025 +
   3026 +    case RESERVE2:
   3027 +    case FREE:
   3028 +    case ACTION:
   3029 +    case UNDO:
   3030 +      break;
   3031 +
   3032 +    case COMMIT:
   3033 +      break;
   3034 +  }
   3035 +
   3036 +  return SNMP_ERR_NOERROR;
   3037 +}
   3038 +
   3039 +/****************************************************************************
   3040 +*                                                                           *
   3041 +****************************************************************************/
   3042 +int
   3043 +write_dot11Address(int      action,
   3044 +            u_char   *var_val,
   3045 +            u_char   var_val_type,
   3046 +            size_t   var_val_len,
   3047 +            u_char   *statP,
   3048 +            oid      *name,
   3049 +            size_t   name_len)
   3050 +{
   3051 +  static unsigned char string[SPRINT_MAX_LEN];
   3052 +  int size;
   3053 +
   3054 +  switch ( action ) {
   3055 +
   3056 +    case RESERVE1:
   3057 +      if ( var_val_type != ASN_OCTET_STR ) {
   3058 +        fprintf ( stderr, "write to dot11Address not ASN_OCTET_STR\n" );
   3059 +        return SNMP_ERR_WRONGTYPE;
   3060 +      }
   3061 +      if ( var_val_len > sizeof ( string )){
   3062 +        fprintf ( stderr, "write to dot11Address: bad length\n" );
   3063 +        return SNMP_ERR_WRONGLENGTH;
   3064 +      }
   3065 +      break;
   3066 +
   3067 +    case RESERVE2:
   3068 +    case FREE:
   3069 +    case ACTION:
   3070 +    case UNDO:
   3071 +      break;
   3072 +
   3073 +    case COMMIT:
   3074 +      break;
   3075 +  }
   3076 +
   3077 +  return SNMP_ERR_NOERROR;
   3078 +}
   3079 +
   3080 +/****************************************************************************
   3081 +*                                                                           *
   3082 +****************************************************************************/
   3083 +int
   3084 +write_dot11GroupAddressesStatus(int      action,
   3085 +            u_char   *var_val,
   3086 +            u_char   var_val_type,
   3087 +            size_t   var_val_len,
   3088 +            u_char   *statP,
   3089 +            oid      *name,
   3090 +            size_t   name_len)
   3091 +{
   3092 +  static long *long_ret;
   3093 +  int size;
   3094 +
   3095 +  switch ( action ) {
   3096 +
   3097 +    case RESERVE1:
   3098 +      if ( var_val_type != ASN_INTEGER ) {
   3099 +        fprintf ( stderr, "write to dot11GroupAddressesStatus not ASN_INTEGER\n" );
   3100 +        return SNMP_ERR_WRONGTYPE;
   3101 +      }
   3102 +      if ( var_val_len > sizeof ( long_ret )){
   3103 +        fprintf ( stderr,"write to dot11GroupAddressesStatus: bad length\n" );
   3104 +        return SNMP_ERR_WRONGLENGTH;
   3105 +      }
   3106 +      break;
   3107 +
   3108 +    case RESERVE2:
   3109 +    case FREE:
   3110 +    case ACTION:
   3111 +    case UNDO:
   3112 +      break;
   3113 +
   3114 +    case COMMIT:
   3115 +      break;
   3116 +  }
   3117 +
   3118 +  return SNMP_ERR_NOERROR;
   3119 +}
   3120 +
   3121 +/****************************************************************************
   3122 +*                                                                           *
   3123 +****************************************************************************/
   3124 +int
   3125 +write_dot11CurrentRegDomain(int      action,
   3126 +            u_char   *var_val,
   3127 +            u_char   var_val_type,
   3128 +            size_t   var_val_len,
   3129 +            u_char   *statP,
   3130 +            oid      *name,
   3131 +            size_t   name_len)
   3132 +{
   3133 +  static long *long_ret;
   3134 +  int size;
   3135 +
   3136 +  switch ( action ) {
   3137 +
   3138 +    case RESERVE1:
   3139 +      if ( var_val_type != ASN_INTEGER ) {
   3140 +        fprintf ( stderr, "write to dot11CurrentRegDomain not ASN_INTEGER\n" );
   3141 +        return SNMP_ERR_WRONGTYPE;
   3142 +      }
   3143 +      if ( var_val_len > sizeof ( long_ret )){
   3144 +        fprintf ( stderr, "write to dot11CurrentRegDomain: bad length\n" );
   3145 +        return SNMP_ERR_WRONGLENGTH;
   3146 +      }
   3147 +      break;
   3148 +
   3149 +    case RESERVE2:
   3150 +    case FREE:
   3151 +    case ACTION:
   3152 +    case UNDO:
   3153 +      break;
   3154 +
   3155 +    case COMMIT:
   3156 +      break;
   3157 +  }
   3158 +
   3159 +  return SNMP_ERR_NOERROR;
   3160 +}
   3161 +
   3162 +/****************************************************************************
   3163 +*                                                                           *
   3164 +****************************************************************************/
   3165 +int
   3166 +write_dot11CurrentTxAntenna(int      action,
   3167 +            u_char   *var_val,
   3168 +            u_char   var_val_type,
   3169 +            size_t   var_val_len,
   3170 +            u_char   *statP,
   3171 +            oid      *name,
   3172 +            size_t   name_len)
   3173 +{
   3174 +  static long *long_ret;
   3175 +  int size;
   3176 +
   3177 +  switch ( action ) {
   3178 +
   3179 +    case RESERVE1:
   3180 +      if ( var_val_type != ASN_INTEGER ) {
   3181 +        fprintf ( stderr, "write to dot11CurrentTxAntenna not ASN_INTEGER\n" );
   3182 +        return SNMP_ERR_WRONGTYPE;
   3183 +      }
   3184 +      if ( var_val_len > sizeof ( long_ret )){
   3185 +        fprintf ( stderr, "write to dot11CurrentTxAntenna: bad length\n" );
   3186 +        return SNMP_ERR_WRONGLENGTH;
   3187 +      }
   3188 +      break;
   3189 +
   3190 +    case RESERVE2:
   3191 +    case FREE:
   3192 +    case ACTION:
   3193 +    case UNDO:
   3194 +      break;
   3195 +
   3196 +    case COMMIT:
   3197 +      break;
   3198 +  }
   3199 +
   3200 +  return SNMP_ERR_NOERROR;
   3201 +}
   3202 +
   3203 +/****************************************************************************
   3204 +*                                                                           *
   3205 +****************************************************************************/
   3206 +int
   3207 +write_dot11CurrentRxAntenna(int      action,
   3208 +            u_char   *var_val,
   3209 +            u_char   var_val_type,
   3210 +            size_t   var_val_len,
   3211 +            u_char   *statP,
   3212 +            oid      *name,
   3213 +            size_t   name_len)
   3214 +{
   3215 +  static long *long_ret;
   3216 +  int size;
   3217 +
   3218 +  switch ( action ) {
   3219 +
   3220 +    case RESERVE1:
   3221 +      if ( var_val_type != ASN_INTEGER ) {
   3222 +        fprintf ( stderr, "write to dot11CurrentRxAntenna not ASN_INTEGER\n" );
   3223 +        return SNMP_ERR_WRONGTYPE;
   3224 +      }
   3225 +      if ( var_val_len > sizeof ( long_ret )){
   3226 +        fprintf ( stderr,"write to dot11CurrentRxAntenna: bad length\n" );
   3227 +        return SNMP_ERR_WRONGLENGTH;
   3228 +      }
   3229 +      break;
   3230 +
   3231 +    case RESERVE2:
   3232 +    case FREE:
   3233 +    case ACTION:
   3234 +    case UNDO:
   3235 +      break;
   3236 +
   3237 +    case COMMIT:
   3238 +      break;
   3239 +
   3240 +  }
   3241 +
   3242 +  return SNMP_ERR_NOERROR;
   3243 +}
   3244 +
   3245 +/****************************************************************************
   3246 +*                                                                           *
   3247 +****************************************************************************/
   3248 +int
   3249 +write_dot11CurrentTxPowerLevel(int      action,
   3250 +            u_char   *var_val,
   3251 +            u_char   var_val_type,
   3252 +            size_t   var_val_len,
   3253 +            u_char   *statP,
   3254 +            oid      *name,
   3255 +            size_t   name_len)
   3256 +{
   3257 +  static long *long_ret;
   3258 +  int size;
   3259 +
   3260 +  switch ( action ) {
   3261 +
   3262 +    case RESERVE1:
   3263 +      if ( var_val_type != ASN_INTEGER ) {
   3264 +        fprintf ( stderr, "write to dot11CurrentTxPowerLevel not ASN_INTEGER\n" );
   3265 +        return SNMP_ERR_WRONGTYPE;
   3266 +      }
   3267 +      if ( var_val_len > sizeof ( long_ret )){
   3268 +        fprintf ( stderr, "write to dot11CurrentTxPowerLevel: bad length\n" );
   3269 +        return SNMP_ERR_WRONGLENGTH;
   3270 +      }
   3271 +      break;
   3272 +
   3273 +    case RESERVE2:
   3274 +    case FREE:
   3275 +    case ACTION:
   3276 +    case UNDO:
   3277 +      break;
   3278 +
   3279 +    case COMMIT:
   3280 +      break;
   3281 +  }
   3282 +
   3283 +  return SNMP_ERR_NOERROR;
   3284 +}
   3285 +
   3286 +/****************************************************************************
   3287 +*                                                                           *
   3288 +****************************************************************************/
   3289 +int
   3290 +write_dot11CurrentChannelNumber(int      action,
   3291 +            u_char   *var_val,
   3292 +            u_char   var_val_type,
   3293 +            size_t   var_val_len,
   3294 +            u_char   *statP,
   3295 +            oid      *name,
   3296 +            size_t   name_len)
   3297 +{
   3298 +  static long *long_ret;
   3299 +  int size;
   3300 +
   3301 +  switch ( action ) {
   3302 +
   3303 +    case RESERVE1:
   3304 +      if ( var_val_type != ASN_INTEGER ) {
   3305 +        fprintf ( stderr, "write to dot11CurrentChannelNumber not ASN_INTEGER\n" );
   3306 +        return SNMP_ERR_WRONGTYPE;
   3307 +      }
   3308 +      if ( var_val_len > sizeof ( long_ret )){
   3309 +        fprintf ( stderr,"write to dot11CurrentChannelNumber: bad length\n" );
   3310 +        return SNMP_ERR_WRONGLENGTH;
   3311 +      }
   3312 +      break;
   3313 +
   3314 +    case RESERVE2:
   3315 +    case FREE:
   3316 +    case ACTION:
   3317 +    case UNDO:
   3318 +      break;
   3319 +
   3320 +    case COMMIT:
   3321 +      break;
   3322 +  }
   3323 +
   3324 +  return SNMP_ERR_NOERROR;
   3325 +}
   3326 +
   3327 +/****************************************************************************
   3328 +*                                                                           *
   3329 +****************************************************************************/
   3330 +int
   3331 +write_dot11CurrentDwellTime(int      action,
   3332 +            u_char   *var_val,
   3333 +            u_char   var_val_type,
   3334 +            size_t   var_val_len,
   3335 +            u_char   *statP,
   3336 +            oid      *name,
   3337 +            size_t   name_len)
   3338 +{
   3339 +  static long *long_ret;
   3340 +  int size;
   3341 +
   3342 +  switch ( action ) {
   3343 +
   3344 +    case RESERVE1:
   3345 +      if ( var_val_type != ASN_INTEGER ) {
   3346 +        fprintf ( stderr, "write to dot11CurrentDwellTime not ASN_INTEGER\n" );
   3347 +        return SNMP_ERR_WRONGTYPE;
   3348 +      }
   3349 +      if ( var_val_len > sizeof ( long_ret )){
   3350 +        fprintf ( stderr, "write to dot11CurrentDwellTime: bad length\n" );
   3351 +        return SNMP_ERR_WRONGLENGTH;
   3352 +      }
   3353 +      break;
   3354 +
   3355 +    case RESERVE2:
   3356 +    case FREE:
   3357 +    case ACTION:
   3358 +    case UNDO:
   3359 +      break;
   3360 +
   3361 +    case COMMIT:
   3362 +      break;
   3363 +  }
   3364 +
   3365 +  return SNMP_ERR_NOERROR;
   3366 +}
   3367 +
   3368 +/****************************************************************************
   3369 +*                                                                           *
   3370 +****************************************************************************/
   3371 +int
   3372 +write_dot11CurrentSet(int      action,
   3373 +            u_char   *var_val,
   3374 +            u_char   var_val_type,
   3375 +            size_t   var_val_len,
   3376 +            u_char   *statP,
   3377 +            oid      *name,
   3378 +            size_t   name_len)
   3379 +{
   3380 +  static long *long_ret;
   3381 +  int size;
   3382 +
   3383 +  switch ( action ) {
   3384 +
   3385 +    case RESERVE1:
   3386 +      if ( var_val_type != ASN_INTEGER ) {
   3387 +        fprintf ( stderr, "write to dot11CurrentSet not ASN_INTEGER\n" );
   3388 +        return SNMP_ERR_WRONGTYPE;
   3389 +      }
   3390 +      if ( var_val_len > sizeof ( long_ret )){
   3391 +        fprintf ( stderr, "write to dot11CurrentSet: bad length\n" );
   3392 +        return SNMP_ERR_WRONGLENGTH;
   3393 +      }
   3394 +      break;
   3395 +
   3396 +    case RESERVE2:
   3397 +    case FREE:
   3398 +    case ACTION:
   3399 +    case UNDO:
   3400 +      break;
   3401 +
   3402 +    case COMMIT:
   3403 +      break;
   3404 +  }
   3405 +
   3406 +  return SNMP_ERR_NOERROR;
   3407 +}
   3408 +
   3409 +/****************************************************************************
   3410 +*                                                                           *
   3411 +****************************************************************************/
   3412 +int
   3413 +write_dot11CurrentPattern(int      action,
   3414 +            u_char   *var_val,
   3415 +            u_char   var_val_type,
   3416 +            size_t   var_val_len,
   3417 +            u_char   *statP,
   3418 +            oid      *name,
   3419 +            size_t   name_len)
   3420 +{
   3421 +  static long *long_ret;
   3422 +  int size;
   3423 +
   3424 +  switch ( action ) {
   3425 +
   3426 +    case RESERVE1:
   3427 +      if ( var_val_type != ASN_INTEGER ) {
   3428 +        fprintf ( stderr, "write to dot11CurrentPattern not ASN_INTEGER\n" );
   3429 +        return SNMP_ERR_WRONGTYPE;
   3430 +      }
   3431 +      if ( var_val_len > sizeof ( long_ret )){
   3432 +        fprintf ( stderr, "write to dot11CurrentPattern: bad length\n" );
   3433 +        return SNMP_ERR_WRONGLENGTH;
   3434 +      }
   3435 +      break;
   3436 +
   3437 +    case RESERVE2:
   3438 +    case FREE:
   3439 +    case ACTION:
   3440 +    case UNDO:
   3441 +      break;
   3442 +
   3443 +    case COMMIT:
   3444 +      break;
   3445 +  }
   3446 +
   3447 +  return SNMP_ERR_NOERROR;
   3448 +}
   3449 +
   3450 +/****************************************************************************
   3451 +*                                                                           *
   3452 +****************************************************************************/
   3453 +int
   3454 +write_dot11CurrentIndex(int      action,
   3455 +            u_char   *var_val,
   3456 +            u_char   var_val_type,
   3457 +            size_t   var_val_len,
   3458 +            u_char   *statP,
   3459 +            oid      *name,
   3460 +            size_t   name_len)
   3461 +{
   3462 +  static long *long_ret;
   3463 +  int size;
   3464 +
   3465 +  switch ( action ) {
   3466 +
   3467 +    case RESERVE1:
   3468 +      if ( var_val_type != ASN_INTEGER ) {
   3469 +        fprintf ( stderr, "write to dot11CurrentIndex not ASN_INTEGER\n" );
   3470 +        return SNMP_ERR_WRONGTYPE;
   3471 +      }
   3472 +      if ( var_val_len > sizeof ( long_ret )){
   3473 +        fprintf ( stderr, "write to dot11CurrentIndex: bad length\n" );
   3474 +        return SNMP_ERR_WRONGLENGTH;
   3475 +      }
   3476 +      break;
   3477 +
   3478 +    case RESERVE2:
   3479 +    case FREE:
   3480 +    case ACTION:
   3481 +    case UNDO:
   3482 +      break;
   3483 +
   3484 +    case COMMIT:
   3485 +      break;
   3486 +  }
   3487 +
   3488 +  return SNMP_ERR_NOERROR;
   3489 +}
   3490 +
   3491 +/****************************************************************************
   3492 +*                                                                           *
   3493 +****************************************************************************/
   3494 +int
   3495 +write_dot11CurrentChannel(int      action,
   3496 +            u_char   *var_val,
   3497 +            u_char   var_val_type,
   3498 +            size_t   var_val_len,
   3499 +            u_char   *statP,
   3500 +            oid      *name,
   3501 +            size_t   name_len)
   3502 +{
   3503 +  static long *long_ret;
   3504 +  int size;
   3505 +
   3506 +  switch ( action ) {
   3507 +
   3508 +    case RESERVE1:
   3509 +      if ( var_val_type != ASN_INTEGER ) {
   3510 +        fprintf ( stderr, "write to dot11CurrentChannel not ASN_INTEGER\n" );
   3511 +        return SNMP_ERR_WRONGTYPE;
   3512 +      }
   3513 +      if ( var_val_len > sizeof ( long_ret )){
   3514 +        fprintf ( stderr, "write to dot11CurrentChannel: bad length\n" );
   3515 +        return SNMP_ERR_WRONGLENGTH;
   3516 +      }
   3517 +      break;
   3518 +
   3519 +    case RESERVE2:
   3520 +    case FREE:
   3521 +    case ACTION:
   3522 +    case UNDO:
   3523 +      break;
   3524 +
   3525 +    case COMMIT:
   3526 +      break;
   3527 +  }
   3528 +
   3529 +  return SNMP_ERR_NOERROR;
   3530 +}
   3531 +
   3532 +/****************************************************************************
   3533 +*                                                                           *
   3534 +****************************************************************************/
   3535 +int
   3536 +write_dot11CurrentCCAMode(int      action,
   3537 +            u_char   *var_val,
   3538 +            u_char   var_val_type,
   3539 +            size_t   var_val_len,
   3540 +            u_char   *statP,
   3541 +            oid      *name,
   3542 +            size_t   name_len)
   3543 +{
   3544 +  static long *long_ret;
   3545 +  int size;
   3546 +
   3547 +  switch ( action ) {
   3548 +
   3549 +    case RESERVE1:
   3550 +      if ( var_val_type != ASN_INTEGER ) {
   3551 +        fprintf ( stderr, "write to dot11CurrentCCAMode not ASN_INTEGER\n" );
   3552 +        return SNMP_ERR_WRONGTYPE;
   3553 +      }
   3554 +      if ( var_val_len > sizeof ( long_ret )){
   3555 +        fprintf ( stderr,"write to dot11CurrentCCAMode: bad length\n" );
   3556 +        return SNMP_ERR_WRONGLENGTH;
   3557 +      }
   3558 +      break;
   3559 +
   3560 +    case RESERVE2:
   3561 +    case FREE:
   3562 +    case ACTION:
   3563 +    case UNDO:
   3564 +      break;
   3565 +
   3566 +    case COMMIT:
   3567 +      break;
   3568 +  }
   3569 +
   3570 +  return SNMP_ERR_NOERROR;
   3571 +}
   3572 +
   3573 +/****************************************************************************
   3574 +*                                                                           *
   3575 +****************************************************************************/
   3576 +int
   3577 +write_dot11EDThreshold(int      action,
   3578 +            u_char   *var_val,
   3579 +            u_char   var_val_type,
   3580 +            size_t   var_val_len,
   3581 +            u_char   *statP,
   3582 +            oid      *name,
   3583 +            size_t   name_len)
   3584 +{
   3585 +  static long *long_ret;
   3586 +  int size;
   3587 +
   3588 +  switch ( action ) {
   3589 +
   3590 +    case RESERVE1:
   3591 +      if ( var_val_type != ASN_INTEGER ) {
   3592 +        fprintf ( stderr, "write to dot11EDThreshold not ASN_INTEGER\n" );
   3593 +        return SNMP_ERR_WRONGTYPE;
   3594 +      }
   3595 +      if ( var_val_len > sizeof ( long_ret )){
   3596 +        fprintf ( stderr, "write to dot11EDThreshold: bad length\n" );
   3597 +        return SNMP_ERR_WRONGLENGTH;
   3598 +      }
   3599 +      break;
   3600 +
   3601 +    case RESERVE2:
   3602 +    case FREE:
   3603 +    case ACTION:
   3604 +    case UNDO:
   3605 +      break;
   3606 +
   3607 +    case COMMIT:
   3608 +      break;
   3609 +  }
   3610 +
   3611 +  return SNMP_ERR_NOERROR;
   3612 +}
   3613 +
   3614 +/****************************************************************************
   3615 +*                                                                           *
   3616 +****************************************************************************/
   3617 +int
   3618 +write_dot11CCAWatchdogTimerMax(int      action,
   3619 +            u_char   *var_val,
   3620 +            u_char   var_val_type,
   3621 +            size_t   var_val_len,
   3622 +            u_char   *statP,
   3623 +            oid      *name,
   3624 +            size_t   name_len)
   3625 +{
   3626 +  static long *long_ret;
   3627 +  int size;
   3628 +
   3629 +  switch ( action ) {
   3630 +
   3631 +    case RESERVE1:
   3632 +      if ( var_val_type != ASN_INTEGER ) {
   3633 +        fprintf ( stderr, "write to dot11CCAWatchdogTimerMax not ASN_INTEGER\n" );
   3634 +        return SNMP_ERR_WRONGTYPE;
   3635 +      }
   3636 +      if ( var_val_len > sizeof ( long_ret )){
   3637 +        fprintf ( stderr, "write to dot11CCAWatchdogTimerMax: bad length\n" );
   3638 +        return SNMP_ERR_WRONGLENGTH;
   3639 +      }
   3640 +      break;
   3641 +
   3642 +    case RESERVE2:
   3643 +    case FREE:
   3644 +    case ACTION:
   3645 +    case UNDO:
   3646 +      break;
   3647 +
   3648 +    case COMMIT:
   3649 +      break;
   3650 +  }
   3651 +
   3652 +  return SNMP_ERR_NOERROR;
   3653 +}
   3654 +
   3655 +/****************************************************************************
   3656 +*                                                                           *
   3657 +****************************************************************************/
   3658 +int
   3659 +write_dot11CCAWatchdogCountMax(int      action,
   3660 +            u_char   *var_val,
   3661 +            u_char   var_val_type,
   3662 +            size_t   var_val_len,
   3663 +            u_char   *statP,
   3664 +            oid      *name,
   3665 +            size_t   name_len)
   3666 +{
   3667 +  static long *long_ret;
   3668 +  int size;
   3669 +
   3670 +  switch ( action ) {
   3671 +
   3672 +    case RESERVE1:
   3673 +      if ( var_val_type != ASN_INTEGER ) {
   3674 +        fprintf ( stderr, "write to dot11CCAWatchdogCountMax not ASN_INTEGER\n" );
   3675 +        return SNMP_ERR_WRONGTYPE;
   3676 +      }
   3677 +      if ( var_val_len > sizeof ( long_ret )){
   3678 +        fprintf ( stderr, "write to dot11CCAWatchdogCountMax: bad length\n" );
   3679 +        return SNMP_ERR_WRONGLENGTH;
   3680 +      }
   3681 +      break;
   3682 +
   3683 +    case RESERVE2:
   3684 +    case FREE:
   3685 +    case ACTION:
   3686 +    case UNDO:
   3687 +      break;
   3688 +
   3689 +    case COMMIT:
   3690 +      break;
   3691 +  }
   3692 +
   3693 +  return SNMP_ERR_NOERROR;
   3694 +}
   3695 +
   3696 +/****************************************************************************
   3697 +*                                                                           *
   3698 +****************************************************************************/
   3699 +int
   3700 +write_dot11CCAWatchdogTimerMin(int      action,
   3701 +            u_char   *var_val,
   3702 +            u_char   var_val_type,
   3703 +            size_t   var_val_len,
   3704 +            u_char   *statP,
   3705 +            oid      *name,
   3706 +            size_t   name_len)
   3707 +{
   3708 +  static long *long_ret;
   3709 +  int size;
   3710 +
   3711 +  switch ( action ) {
   3712 +
   3713 +    case RESERVE1:
   3714 +      if ( var_val_type != ASN_INTEGER ) {
   3715 +        fprintf ( stderr, "write to dot11CCAWatchdogTimerMin not ASN_INTEGER\n" );
   3716 +        return SNMP_ERR_WRONGTYPE;
   3717 +      }
   3718 +      if ( var_val_len > sizeof ( long_ret )){
   3719 +        fprintf ( stderr, "write to dot11CCAWatchdogTimerMin: bad length\n" );
   3720 +        return SNMP_ERR_WRONGLENGTH;
   3721 +      }
   3722 +      break;
   3723 +
   3724 +    case RESERVE2:
   3725 +    case FREE:
   3726 +    case ACTION:
   3727 +    case UNDO:
   3728 +      break;
   3729 +
   3730 +    case COMMIT:
   3731 +      break;
   3732 +  }
   3733 +
   3734 +  return SNMP_ERR_NOERROR;
   3735 +}
   3736 +
   3737 +/****************************************************************************
   3738 +*                                                                           *
   3739 +****************************************************************************/
   3740 +int
   3741 +write_dot11CCAWatchdogCountMin(int      action,
   3742 +            u_char   *var_val,
   3743 +            u_char   var_val_type,
   3744 +            size_t   var_val_len,
   3745 +            u_char   *statP,
   3746 +            oid      *name,
   3747 +            size_t   name_len)
   3748 +{
   3749 +  static long *long_ret;
   3750 +  int size;
   3751 +
   3752 +  switch ( action ) {
   3753 +
   3754 +    case RESERVE1:
   3755 +      if ( var_val_type != ASN_INTEGER ) {
   3756 +        fprintf ( stderr, "write to dot11CCAWatchdogCountMin not ASN_INTEGER\n" );
   3757 +        return SNMP_ERR_WRONGTYPE;
   3758 +      }
   3759 +      if ( var_val_len > sizeof ( long_ret )){
   3760 +        fprintf ( stderr, "write to dot11CCAWatchdogCountMin: bad length\n" );
   3761 +        return SNMP_ERR_WRONGLENGTH;
   3762 +      }
   3763 +      break;
   3764 +
   3765 +    case RESERVE2:
   3766 +    case FREE:
   3767 +    case ACTION:
   3768 +    case UNDO:
   3769 +      break;
   3770 +
   3771 +    case COMMIT:
   3772 +      break;
   3773 +  }
   3774 +
   3775 +  return SNMP_ERR_NOERROR;
   3776 +}
   3777 +
   3778 +/****************************************************************************
   3779 +*                                                                           *
   3780 +****************************************************************************/
   3781 +int
   3782 +write_dot11SupportedTxAntenna(int      action,
   3783 +            u_char   *var_val,
   3784 +            u_char   var_val_type,
   3785 +            size_t   var_val_len,
   3786 +            u_char   *statP,
   3787 +            oid      *name,
   3788 +            size_t   name_len)
   3789 +{
   3790 +  static long *long_ret;
   3791 +  int size;
   3792 +
   3793 +  switch ( action ) {
   3794 +
   3795 +    case RESERVE1:
   3796 +      if ( var_val_type != ASN_INTEGER ) {
   3797 +        fprintf ( stderr, "write to dot11SupportedTxAntenna not ASN_INTEGER\n" );
   3798 +        return SNMP_ERR_WRONGTYPE;
   3799 +      }
   3800 +      if ( var_val_len > sizeof ( long_ret )){
   3801 +        fprintf ( stderr, "write to dot11SupportedTxAntenna: bad length\n" );
   3802 +        return SNMP_ERR_WRONGLENGTH;
   3803 +      }
   3804 +      break;
   3805 +
   3806 +    case RESERVE2:
   3807 +    case FREE:
   3808 +    case ACTION:
   3809 +    case UNDO:
   3810 +      break;
   3811 +
   3812 +    case COMMIT:
   3813 +      break;
   3814 +  }
   3815 +
   3816 +  return SNMP_ERR_NOERROR;
   3817 +}
   3818 +
   3819 +/****************************************************************************
   3820 +*                                                                           *
   3821 +****************************************************************************/
   3822 +int
   3823 +write_dot11SupportedRxAntenna(int      action,
   3824 +            u_char   *var_val,
   3825 +            u_char   var_val_type,
   3826 +            size_t   var_val_len,
   3827 +            u_char   *statP,
   3828 +            oid      *name,
   3829 +            size_t   name_len)
   3830 +{
   3831 +  static long *long_ret;
   3832 +  int size;
   3833 +
   3834 +  switch ( action ) {
   3835 +
   3836 +    case RESERVE1:
   3837 +      if ( var_val_type != ASN_INTEGER ) {
   3838 +        fprintf ( stderr, "write to dot11SupportedRxAntenna not ASN_INTEGER\n" );
   3839 +        return SNMP_ERR_WRONGTYPE;
   3840 +      }
   3841 +      if ( var_val_len > sizeof ( long_ret )){
   3842 +        fprintf ( stderr,"write to dot11SupportedRxAntenna: bad length\n" );
   3843 +        return SNMP_ERR_WRONGLENGTH;
   3844 +      }
   3845 +      break;
   3846 +
   3847 +    case RESERVE2:
   3848 +    case FREE:
   3849 +    case ACTION:
   3850 +    case UNDO:
   3851 +      break;
   3852 +
   3853 +    case COMMIT:
   3854 +      break;
   3855 +  }
   3856 +
   3857 +  return SNMP_ERR_NOERROR;
   3858 +}
   3859 +
   3860 +/****************************************************************************
   3861 +*                                                                           *
   3862 +****************************************************************************/
   3863 +int
   3864 +write_dot11DiversitySelectionRx(int      action,
   3865 +            u_char   *var_val,
   3866 +            u_char   var_val_type,
   3867 +            size_t   var_val_len,
   3868 +            u_char   *statP,
   3869 +            oid      *name,
   3870 +            size_t   name_len)
   3871 +{
   3872 +  static long *long_ret;
   3873 +  int size;
   3874 +
   3875 +  switch ( action ) {
   3876 +
   3877 +    case RESERVE1:
   3878 +      if ( var_val_type != ASN_INTEGER ) {
   3879 +        fprintf ( stderr, "write to dot11DiversitySelectionRx not ASN_INTEGER\n" );
   3880 +        return SNMP_ERR_WRONGTYPE;
   3881 +      }
   3882 +      if ( var_val_len > sizeof ( long_ret )){
   3883 +        fprintf ( stderr, "write to dot11DiversitySelectionRx: bad length\n" );
   3884 +        return SNMP_ERR_WRONGLENGTH;
   3885 +      }
   3886 +      break;
   3887 +
   3888 +    case RESERVE2:
   3889 +    case FREE:
   3890 +    case ACTION:
   3891 +    case UNDO:
   3892 +      break;
   3893 +
   3894 +    case COMMIT:
   3895 +      break;
   3896 +  }
   3897 +
   3898 +  return SNMP_ERR_NOERROR;
   3899 +}
   3900 +
   3901 +/****************************************************************************
   3902 +*                                                                           *
   3903 +*                      loadTables() - Load the Tables                       *
   3904 +*                                                                           *
   3905 +****************************************************************************/
   3906 +static void loadTables()
   3907 +{
   3908 +  int skfd;                               // generic raw socket desc
   3909 +  struct iwreq wrq;                       // ioctl request structure
   3910 +  struct ifreq ifr;
   3911 +  struct timeval et;                      // elapsed time
   3912 +  struct wireless_info info;              // workarea for wireless ioctl information
   3913 +  FILE *fp;
   3914 +  char  bfr[1024], ifName[1024];
   3915 +  char *s, *t;
   3916 +
   3917 +  gettimeofday ( &et, ( struct timezone * ) 0 );  // get time-of-day
   3918 +  if ( et.tv_sec < lastLoad + MINLOADFREQ )       // only reload so often
   3919 +    return;
   3920 +  lastLoad = et.tv_sec;
   3921 +
   3922 +  skfd = openSocket();                            // open socket
   3923 +  if ( skfd < 0 ) {
   3924 +    syslog ( LOG_ERR, "SNMP ieee802dot11.loadTables() - %s\n", "socket open failure" );
   3925 +    return;
   3926 +  }
   3927 +
   3928 +  flushLists();
   3929 +
   3930 +  // find interfaces in /proc/net/dev and find the wireless interfaces
   3931 +  fp = fopen ( PROC_NET_DEV, "r" );
   3932 +  if ( fp ) {
   3933 +    while ( fgets ( bfr, sizeof ( bfr ), fp )) {
   3934 +      if ( strstr ( bfr, ":" )) {
   3935 +        s = bfr; t = ifName;
   3936 +        while ( isspace ( *s ))                     // discard white space
   3937 +          *s++;
   3938 +        while ( *s != ':' )                         // get interface name
   3939 +          *t++ = *s++;
   3940 +        *t = '\0';
   3941 +
   3942 +        // verify as a wireless device
   3943 +        memset (( char * ) &info, 0, sizeof ( struct wireless_info ));
   3944 +        strncpy ( wrq.ifr_name, ifName, IFNAMSIZ );
   3945 +        if ( ioctl ( skfd, SIOCGIWNAME, &wrq ) >= 0 ) {
   3946 +          printf ( "%s ifName: %s\n", "loadTables() -", ifName );
   3947 +          initStructs();
   3948 +          loadWiExt( skfd, ifName, &info );
   3949 +          displayWiExt ( info );
   3950 +          load80211Structs ( skfd, ifName, &info );
   3951 +        }
   3952 +      }
   3953 +    }
   3954 +    fclose ( fp );
   3955 +  }
   3956 +
   3957 +  close ( skfd );
   3958 +}
   3959 +
   3960 +/****************************************************************************
   3961 +*                                                                           *
   3962 +*              load80211Structs() - load the 802.11 structures              *
   3963 +*                                                                           *
   3964 +****************************************************************************/
   3965 +static void 
   3966 +load80211Structs ( int skfd, char *ifName, struct wireless_info *wi )
   3967 +{
   3968 +  int rc, ifIndex = 0;
   3969 +  struct ifreq ifr;
   3970 +  char  MACAddress [ MACADDR_LEN + 1 ];
   3971 +
   3972 +  strcpy ( ifr.ifr_name, ifName );
   3973 +  rc = ioctl ( skfd, SIOCGIFHWADDR, &ifr );
   3974 +  if ( rc >= 0 ) {
   3975 +
   3976 +    sprintf ( MACAddress, "%02X:%02X:%02X:%02X:%02X:%02X\0", 
   3977 +                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[0], ( UCHAR ) ifr.ifr_hwaddr.sa_data[1], 
   3978 +                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[2], ( UCHAR ) ifr.ifr_hwaddr.sa_data[3], 
   3979 +                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[4], ( UCHAR ) ifr.ifr_hwaddr.sa_data[5] );
   3980 +
   3981 +    nSc.haveStationID = TRUE;
   3982 +    strcpy  ( nSc.stationID, MACAddress );
   3983 +    nOp.haveMACAddress = TRUE;
   3984 +    strcpy  ( nOp.MACAddress, MACAddress );
   3985 +    nRi.haveManufacturerOUI = TRUE;
   3986 +    strncpy ( nRi.manufacturerOUI, MACAddress, MAN_OUI_LEN ); 
   3987 +
   3988 +    ifIndex = if_nametoindex ( ifName );
   3989 +    if ( !ifIndex ) {
   3990 +      syslog ( LOG_ERR, "SNMP %s - %s %s\n", 
   3991 +        "ieee802dot11.load80211Structs()", ifName, "has no ifIndex" );
   3992 +      return;
   3993 +    }
   3994 +
   3995 +    loadWiExtTo80211Structs ( ifIndex, ifName, wi );
   3996 +
   3997 +    if ( hasChanged (( char * ) &nSc, sizeof ( nSc ))) {
   3998 +      nSc.ifIndex = ifIndex;
   3999 +      sprintf ( nSc.UID, "%04d\0", nSc.ifIndex );
   4000 +      strcpy ( nSc.ifName, ifName );
   4001 +      addList (( char * ) &scList, ( char * ) &nSc, sizeof ( nSc ));
   4002 +    }
   4003 +
   4004 +    if ( hasChanged (( char * ) &nPr, sizeof ( nPr ))) {
   4005 +      nPr.ifIndex = ifIndex;
   4006 +      sprintf ( nPr.UID, "%04d\0", nPr.ifIndex );
   4007 +      strcpy ( nPr.ifName, ifName );
   4008 +      addList (( char * ) &prList, ( char * ) &nPr, sizeof ( nPr ));
   4009 +    }
   4010 +
   4011 +    if ( hasChanged (( char * ) &nOp, sizeof ( nOp ))) {
   4012 +      nOp.ifIndex = ifIndex;
   4013 +      sprintf ( nOp.UID, "%04d\0", nOp.ifIndex );
   4014 +      strcpy ( nOp.ifName, ifName );
   4015 +      addList (( char * ) &opList, ( char * ) &nOp, sizeof ( nOp ));
   4016 +    }
   4017 +
   4018 +    if ( hasChanged (( char * ) &nCo, sizeof ( nCo ))) {
   4019 +      nCo.ifIndex = ifIndex;
   4020 +      sprintf ( nCo.UID, "%04d\0", nCo.ifIndex );
   4021 +      strcpy ( nCo.ifName, ifName );
   4022 +      addList (( char * ) &coList, ( char * ) &nCo, sizeof ( nCo ));
   4023 +    }
   4024 +
   4025 +    if ( hasChanged (( char * ) &nRi, sizeof ( nRi ))) {
   4026 +      nRi.ifIndex = ifIndex;
   4027 +      sprintf ( nRi.UID, "%04d\0", nRi.ifIndex );
   4028 +      strcpy ( nRi.ifName, ifName );
   4029 +      addList (( char * ) &riList, ( char * ) &nRi, sizeof ( nRi ));
   4030 +    }
   4031 +
   4032 +    if ( hasChanged (( char * ) &nPo, sizeof ( nPo ))) {
   4033 +      nPo.ifIndex = ifIndex;
   4034 +      sprintf ( nPo.UID, "%04d\0", nPo.ifIndex );
   4035 +      strcpy ( nPo.ifName, ifName );
   4036 +      addList (( char * ) &poList, ( char * ) &nPo, sizeof ( nPo ));
   4037 +    }
   4038 +
   4039 +    if ( hasChanged (( char * ) &nPa, sizeof ( nPa ))) {
   4040 +      nPa.ifIndex = ifIndex;
   4041 +      sprintf ( nPa.UID, "%04d\0", nPa.ifIndex );
   4042 +      strcpy ( nPa.ifName, ifName );
   4043 +      addList (( char * ) &paList, ( char * ) &nPa, sizeof ( nPa ));
   4044 +    }
   4045 +
   4046 +    if ( hasChanged (( char * ) &nPt, sizeof ( nPt ))) {
   4047 +      nPt.ifIndex = ifIndex;
   4048 +      sprintf ( nPt.UID, "%04d\0", nPt.ifIndex );
   4049 +      strcpy ( nPt.ifName, ifName );
   4050 +      addList (( char * ) &ptList, ( char * ) &nPt, sizeof ( nPt ));
   4051 +    }
   4052 +
   4053 +    if ( hasChanged (( char * ) &nPf, sizeof ( nPf ))) {
   4054 +      nPf.ifIndex = ifIndex;
   4055 +      sprintf ( nPf.UID, "%04d\0", nPf.ifIndex );
   4056 +      strcpy ( nPf.ifName, ifName );
   4057 +      addList (( char * ) &pfList, ( char * ) &nPf, sizeof ( nPf ));
   4058 +    }
   4059 +
   4060 +    if ( hasChanged (( char * ) &nPd, sizeof ( nPd ))) {
   4061 +      nPd.ifIndex = ifIndex;
   4062 +      sprintf ( nPd.UID, "%04d\0", nPd.ifIndex );
   4063 +      strcpy ( nPd.ifName, ifName );
   4064 +      addList (( char * ) &pdList, ( char * ) &nPd, sizeof ( nPd ));
   4065 +    }
   4066 +
   4067 +    if ( hasChanged (( char * ) &nPi, sizeof ( nPi ))) {
   4068 +      nPi.ifIndex = ifIndex;
   4069 +      sprintf ( nPi.UID, "%04d\0", nPi.ifIndex );
   4070 +      strcpy ( nPi.ifName, ifName );
   4071 +      addList (( char * ) &piList, ( char * ) &nPi, sizeof ( nPi ));
   4072 +    }
   4073 +  }
   4074 +
   4075 +//printf ( "%s - ifIndex: %d ifName: %s UID: %s\n", 
   4076 +//         "load80211Structs() - HASCHANGED", ifIndex, ifName, nSc.UID );
   4077 +}
   4078 +
   4079 +/****************************************************************************
   4080 +*                                                                           *
   4081 +*                     initStructs() - initialize structures                 *
   4082 +*                                                                           *
   4083 +****************************************************************************/
   4084 +static void initStructs()
   4085 +{
   4086 +  int i;
   4087 +
   4088 +  // 802.11 MIB Stuctures
   4089 +  memset (( char * ) &nSc, 0, sizeof ( nSc ));  memset (( char * ) &nAa, 0, sizeof ( nAa ));
   4090 +  memset (( char * ) &nDf, 0, sizeof ( nDf ));  memset (( char * ) &nKm, 0, sizeof ( nKm ));
   4091 +  memset (( char * ) &nPr, 0, sizeof ( nPr ));  memset (( char * ) &nOp, 0, sizeof ( nOp ));
   4092 +  memset (( char * ) &nCo, 0, sizeof ( nCo ));  memset (( char * ) &nGa, 0, sizeof ( nGa ));
   4093 +  memset (( char * ) &nRi, 0, sizeof ( nRi ));  memset (( char * ) &nPo, 0, sizeof ( nPo ));
   4094 +  memset (( char * ) &nPa, 0, sizeof ( nPa ));  memset (( char * ) &nPt, 0, sizeof ( nPt ));
   4095 +  memset (( char * ) &nPf, 0, sizeof ( nPf ));  memset (( char * ) &nPd, 0, sizeof ( nPd ));
   4096 +  memset (( char * ) &nPi, 0, sizeof ( nPi ));  memset (( char * ) &nRd, 0, sizeof ( nRd ));
   4097 +  memset (( char * ) &nAl, 0, sizeof ( nAl ));  memset (( char * ) &nRt, 0, sizeof ( nRt ));
   4098 +  memset (( char * ) &nRr, 0, sizeof ( nRr ));
   4099 +
   4100 +  // Wireless Extensions
   4101 +  wepCurrentKey = 0;
   4102 +  haveWepCurrentKey = FALSE;
   4103 +  for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
   4104 +    wep[i].len = 0;
   4105 +    wep[i].key[0] = '\0';
   4106 +    wep[i].haveKey = FALSE;
   4107 +  }
   4108 +}
   4109 +
   4110 +/****************************************************************************
   4111 +*                                                                           *
   4112 +*                Wireless Extensions Specific Functions                     *
   4113 +*                                                                           *
   4114 +****************************************************************************/
   4115 +/****************************************************************************
   4116 +*                                                                           *
   4117 +* loadWiExtTo80211Structs() - load wireless extensions to 802.11 structures *
   4118 +*                                                                           *
   4119 +****************************************************************************/
   4120 +static void 
   4121 +loadWiExtTo80211Structs ( int ifIndex, char *ifName, struct wireless_info *wi )
   4122 +{
   4123 +  int i, j = 0;
   4124 +
   4125 +  // dot11Smt Group
   4126 +  // dot11StationConfigTable
   4127 +  nSc.havePrivacyOptionImplemented = TRUE;
   4128 +  nSc.privacyOptionImplemented = 1;           // assume we support WEP
   4129 +
   4130 +  if ( wi->has_power ) {
   4131 +    nSc.havePowerManagementMode = TRUE;
   4132 +    nSc.powerManagementMode = 1;              // assume power is active
   4133 +    if ( !wi->power.disabled && 
   4134 +          wi->power.flags & IW_POWER_MIN )
   4135 +      nSc.powerManagementMode = 2;            // power save mode
   4136 +  }
   4137 +
   4138 +  if ( wi->has_essid && strlen ( wi->essid )) {
   4139 +    nSc.haveDesiredSSID = TRUE;
   4140 +    strcpy ( nSc.desiredSSID, wi->essid ); 
   4141 +  }
   4142 +
   4143 +  if ( wi->has_mode ) {
   4144 +    nSc.haveDesiredBSSType = TRUE;
   4145 +    if ( wi->mode == IW_MODE_ADHOC ) 
   4146 +      nSc.desiredBSSType = 2;         // independent
   4147 +    else if ( wi->has_ap_addr )
   4148 +      nSc.desiredBSSType = 1;         // infrastructure
   4149 +    else
   4150 +      nSc.desiredBSSType = 3;         // any
   4151 +  }
   4152 +
   4153 +  if ( wi->has_range ) {
   4154 +    for ( i = 0; i < wi->range.num_bitrates && j < 126; i++ ) {
   4155 +      nSc.haveOperationalRateSet = TRUE;
   4156 +      nSc.operationalRateSet[j++] = ( char ) ( wi->range.bitrate[i] / 500000L );
   4157 +    }
   4158 +  }
   4159 +
   4160 +  // dot11AuthenticationAlgorithmsTable
   4161 +  nAa.haveAuthenticationAlgorithm = TRUE;           // it's a rule to always have 
   4162 +  nAa.haveAuthenticationAlgorithmsEnable = TRUE;    //    'open' supported
   4163 +  nAa.ifIndex = ifIndex;
   4164 +  nAa.authenticationAlgorithmsIndex = 1;            // index number one
   4165 +  nAa.authenticationAlgorithm = 1;                  // 1 => open key
   4166 +  sprintf ( nAa.UID, "%04d%04d\0", nAa.ifIndex, nAa.authenticationAlgorithmsIndex );
   4167 +  nAa.authenticationAlgorithmsEnable = 1;           // enabled by default
   4168 +  if ( ( wi->has_key                        ) &&
   4169 +       ( wi->key_size  != 0                 ) &&
   4170 +      !( wi->key_flags & IW_ENCODE_DISABLED ))
   4171 +    nAa.authenticationAlgorithmsEnable = 2;
   4172 +  addList (( char * ) &aaList, ( char * ) &nAa, sizeof ( nAa ));
   4173 +
   4174 +  nAa.haveAuthenticationAlgorithm = TRUE;           // I'm gonna assume we always support WEP
   4175 +  nAa.haveAuthenticationAlgorithmsEnable = TRUE;
   4176 +  nAa.ifIndex = ifIndex;
   4177 +  nAa.authenticationAlgorithmsIndex = 2;            // index number 2
   4178 +  nAa.authenticationAlgorithm = 2;                  // 2 => shared key
   4179 +  sprintf ( nAa.UID, "%04d%04d\0", nAa.ifIndex, nAa.authenticationAlgorithmsIndex );
   4180 +  nAa.authenticationAlgorithmsEnable = 2;
   4181 +  if ( ( wi->has_key                        ) &&
   4182 +       ( wi->key_size  != 0                 ) &&
   4183 +      !( wi->key_flags & IW_ENCODE_DISABLED ))
   4184 +    nAa.authenticationAlgorithmsEnable = 1;         // disabled by default
   4185 +  addList (( char * ) &aaList, ( char * ) &nAa, sizeof ( nAa ));
   4186 +
   4187 +  //dot11WEPDefaultKeysTable
   4188 +  if ( wi->has_range ) {
   4189 +    for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
   4190 +      nDf.haveWEPDefaultKeyValue = TRUE;
   4191 +      nDf.ifIndex = ifIndex;
   4192 +      nDf.WEPDefaultKeyIndex = i + 1;               // index number
   4193 +      sprintf ( nDf.UID, "%04d%04d\0", nDf.ifIndex, nDf.WEPDefaultKeyIndex );
   4194 +      if ( wep[i].haveKey )
   4195 +        strcpy ( nDf.WEPDefaultKeyValue, "*****" );
   4196 +      else
   4197 +        nDf.WEPDefaultKeyValue[0] = '\0';
   4198 +      addList (( char * ) &dfList, ( char * ) &nDf, sizeof ( nDf ));
   4199 +    }
   4200 +  }
   4201 +
   4202 +  // dot11PrivacyTable
   4203 +  nPr.havePrivacyInvoked = TRUE;
   4204 +  nPr.privacyInvoked = 2;                   // 2 => FALSE
   4205 +  nPr.haveWEPDefaultKeyID = TRUE;
   4206 +  nPr.WEPDefaultKeyID = 0;
   4207 +  nPr.haveExcludeUnencrypted = TRUE;
   4208 +  nPr.excludeUnencrypted = 2;               // 2 => FALSE
   4209 +  if ( wi->has_range ) {
   4210 +    if ( ( wi->key_size != 0 ) &&
   4211 +        !( wi->key_flags & IW_ENCODE_DISABLED )) {
   4212 +       nPr.privacyInvoked = 1;
   4213 +       if ( wi->key_flags & IW_ENCODE_RESTRICTED )
   4214 +          nPr.excludeUnencrypted = 1;
   4215 +       nPr.WEPDefaultKeyID = wepCurrentKey;
   4216 +    }
   4217 +  }
   4218 +
   4219 +  // dot11Mac Group
   4220 +  // dot11OperationTable
   4221 +  if ( wi->has_range ) {
   4222 +    nOp.haveRTSThreshold = TRUE;
   4223 +    nOp.RTSThreshold = wi->range.max_rts;
   4224 +  }
   4225 +
   4226 +  if ( wi->has_frag && wi->frag.value ) {
   4227 +    nOp.haveFragmentationThreshold = TRUE;
   4228 +    nOp.fragmentationThreshold = wi->frag.value;
   4229 +  }
   4230 +
   4231 +  // dot11Phy Group
   4232 +  // dot11PhyOperationTable
   4233 +  if ( strstr ( wi->name, "IEEE 802.11-FS"      )) nPo.PHYType = 1;   // So what if I
   4234 +  if ( strstr ( wi->name, "IEEE 802.11-DS"      )) nPo.PHYType = 2;   // made up a couple?
   4235 +  if ( strstr ( wi->name, "IEEE 802.11-IR"      )) nPo.PHYType = 3;   
   4236 +  if ( strstr ( wi->name, "IEEE 802.11-OFDM"    )) nPo.PHYType = 4;   // 802.11a
   4237 +  if ( strstr ( wi->name, "IEEE 802.11-OFDM/DS" )) nPo.PHYType = 5;   // 802.11g
   4238 +  if ( strstr ( wi->name, "IEEE 802.11-TURBO"   )) nPo.PHYType = 6;   // Atheros TURBO mode
   4239 +  if ( nPo.PHYType ) nPo.havePHYType = TRUE;
   4240 +
   4241 +  // dot11PhyDSSSTable
   4242 +  if ( wi->has_range ) { // && wi->freq <= ( double ) 2483000000 ) {  // DSSS frequencies only
   4243 +    for ( i = 0; i < wi->range.num_frequency; i++ ) {
   4244 +      if ((( double ) ( wi->range.freq[i].e * 10 ) * ( double ) wi->range.freq[i].m ) == wi->freq ) {
   4245 +        nPd.haveCurrentChannel = TRUE;
   4246 +        nPd.currentChannel = wi->range.freq[i].i; 
   4247 +      }
   4248 +    }
   4249 +  }
   4250 +
   4251 +  // dot11SupportedDataRatesTxTable
   4252 +  if ( wi->has_range ) {
   4253 +    for ( i = 0; i < wi->range.num_bitrates; i++ ) {
   4254 +      nRt.ifIndex = ifIndex;
   4255 +      nRt.supportedDataRatesTxIndex = i + 1;
   4256 +      nRt.supportedDataRatesTxValue = wi->range.bitrate[i] / 500000L;
   4257 +      nRt.haveSupportedDataRatesTxValue = TRUE;
   4258 +      sprintf ( nRt.UID, "%04d%04d\0", nRt.ifIndex, nRt.supportedDataRatesTxIndex );
   4259 +      strcpy ( nRt.ifName, ifName );
   4260 +      addList (( char * ) &rtList, ( char * ) &nRt, sizeof ( nRt ));
   4261 +    }
   4262 +  }
   4263 +
   4264 +  // dot11SupportedDataRatesRxTable
   4265 +  if ( wi->has_range ) {
   4266 +    for ( i = 0; i < wi->range.num_bitrates; i++ ) {
   4267 +      nRr.ifIndex = ifIndex;
   4268 +      nRr.supportedDataRatesRxIndex = i + 1;
   4269 +      nRr.supportedDataRatesRxValue = wi->range.bitrate[i] / 500000L;
   4270 +      nRr.haveSupportedDataRatesRxValue = TRUE;
   4271 +      sprintf ( nRr.UID, "%04d%04d\0", nRr.ifIndex, nRr.supportedDataRatesRxIndex );
   4272 +      strcpy ( nRr.ifName, ifName );
   4273 +      addList (( char * ) &rrList, ( char * ) &nRr, sizeof ( nRr ));
   4274 +    }
   4275 +  }
   4276 +
   4277 +//printf ( "%s max_encoding_tokens: %d\n", 
   4278 +//          "loadWiExtTo80211Structs() - ", wi->range.max_encoding_tokens );
   4279 +}
   4280 +
   4281 +/****************************************************************************
   4282 +*                                                                           *
   4283 +*      loadWiExt() - load wireless extensions structures;                   *
   4284 +*                    use ioctl calls and read /proc/net/wireless            *
   4285 +*                                                                           *
   4286 +****************************************************************************/
   4287 +static void loadWiExt ( int skfd, char *ifname, struct wireless_info *wi )
   4288 +{
   4289 +  struct iwreq wrq;                       // ioctl request structure
   4290 +  FILE *fp;
   4291 +  char  bfr[1024];
   4292 +  char  buffer[sizeof ( iwrange ) * 2]; /* Large enough */
   4293 +  char *s, *t;
   4294 +  int i, j;
   4295 +
   4296 +  strncpy ( wrq.ifr_name, ifname, IFNAMSIZ );
   4297 +
   4298 +  /* Get wireless name */
   4299 +  if ( ioctl ( skfd, SIOCGIWNAME, &wrq ) >= 0 ) {
   4300 +    strncpy ( wi->name, wrq.u.name, IFNAMSIZ );
   4301 +    wi->name[IFNAMSIZ] = '\0';
   4302 +  }
   4303 +
   4304 +  /* Get ranges */    // NOTE: some version checking in iwlib.c
   4305 +  memset ( buffer, 0, sizeof ( buffer ));
   4306 +  wrq.u.data.pointer = ( caddr_t ) &buffer;
   4307 +  wrq.u.data.length = sizeof ( buffer );
   4308 +  wrq.u.data.flags = 0;
   4309 +  if ( ioctl ( skfd, SIOCGIWRANGE, &wrq ) >= 0 ) {
   4310 +    memcpy (( char * ) &wi->range, buffer, sizeof ( iwrange ));
   4311 +    wi->has_range = 1;
   4312 +  }
   4313 +
   4314 +  /* Get network ID */
   4315 +  if ( ioctl ( skfd, SIOCGIWNWID, &wrq ) >= 0 ) {
   4316 +    memcpy ( &wi->nwid, &wrq.u.nwid, sizeof ( iwparam ));
   4317 +    wi->has_nwid = 1;
   4318 +  }
   4319 +
   4320 +  /* Get frequency / channel */         // THIS NUMBER LOOKS FUNNY
   4321 +  if ( ioctl ( skfd, SIOCGIWFREQ, &wrq ) >= 0 ) {
   4322 +    wi->has_freq = 1;
   4323 +    wi->freq = (( double ) wrq.u.freq.m ) * pow ( 10, wrq.u.freq.e );
   4324 +  }
   4325 +
   4326 +  /* Get sensitivity */
   4327 +  if ( ioctl ( skfd, SIOCGIWSENS, &wrq ) >= 0 ) {
   4328 +    wi->has_sens = 1;
   4329 +    memcpy ( &wi->sens, &wrq.u.sens, sizeof ( iwparam ));
   4330 +  }
   4331 +
   4332 +  /* Get encryption information */
   4333 +  wrq.u.data.pointer = ( caddr_t ) &wi->key;
   4334 +  wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
   4335 +  wrq.u.data.flags = 0;
   4336 +  if ( ioctl ( skfd, SIOCGIWENCODE, &wrq ) >= 0 ) {
   4337 +    wi->has_key = 1;
   4338 +    wi->key_size = wrq.u.data.length;
   4339 +    wi->key_flags = wrq.u.data.flags;
   4340 +    wepCurrentKey = wrq.u.data.flags & IW_ENCODE_INDEX;
   4341 +  }
   4342 +
   4343 +  for ( i = 0; i < wi->range.max_encoding_tokens; i++ ) {
   4344 +    wrq.u.data.pointer = ( caddr_t ) &wi->key;
   4345 +    wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
   4346 +    wrq.u.data.flags = i;
   4347 +    if ( ioctl ( skfd, SIOCGIWENCODE, &wrq ) >= 0 ) {
   4348 +      if ( ( wrq.u.data.length != 0 ) &&
   4349 +          !( wrq.u.data.flags & IW_ENCODE_DISABLED )) {
   4350 +        wep[i].len = wrq.u.data.length;
   4351 +        wep[i].haveKey = TRUE;
   4352 +        t = wep[i].key;
   4353 +        for ( j = 0; j < wrq.u.data.length; j++ ) {
   4354 +          if (( j & 0x1 ) == 0 && j != 0 )
   4355 +        	  strcpy ( t++, "-");
   4356 +          sprintf ( t, "%.2X", wi->key[j] );
   4357 +          t += 2;
   4358 +        }
   4359 +        t = '\0';
   4360 +      }
   4361 +    }
   4362 +  }
   4363 +
   4364 +  /* Get ESSID */
   4365 +  wrq.u.essid.pointer = ( caddr_t ) &wi->essid;
   4366 +  wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
   4367 +  wrq.u.essid.flags = 0;
   4368 +  if ( ioctl ( skfd, SIOCGIWESSID, &wrq ) >= 0 ) {
   4369 +    wi->has_essid = 1;
   4370 +    wi->essid_on = wrq.u.data.flags;
   4371 +  }
   4372 +
   4373 +  /* Get AP address */
   4374 +  if ( ioctl ( skfd, SIOCGIWAP, &wrq ) >= 0 ) {
   4375 +    wi->has_ap_addr = 1;
   4376 +    memcpy ( &wi->ap_addr, &wrq.u.ap_addr, sizeof ( sockaddr ));
   4377 +  }
   4378 +
   4379 +  /* Get NickName */
   4380 +  wrq.u.essid.pointer = ( caddr_t ) &wi->nickname;
   4381 +  wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
   4382 +  wrq.u.essid.flags = 0;
   4383 +  if ( ioctl ( skfd, SIOCGIWNICKN, &wrq ) >= 0 ) {
   4384 +    if ( wrq.u.data.length > 1 )
   4385 +      wi->has_nickname = 1;
   4386 +  }
   4387 +
   4388 +  /* Get bit rate */
   4389 +  if ( ioctl ( skfd, SIOCGIWRATE, &wrq ) >= 0 ) {
   4390 +    wi->has_bitrate = 1;
   4391 +    memcpy ( &wi->bitrate, &wrq.u.bitrate, sizeof ( iwparam ));
   4392 +  }
   4393 +
   4394 +  /* Get RTS threshold */
   4395 +  if ( ioctl ( skfd, SIOCGIWRTS, &wrq ) >= 0 ) {
   4396 +    wi->has_rts = 1;
   4397 +    memcpy ( &wi->rts, &wrq.u.rts, sizeof ( iwparam ));
   4398 +  }
   4399 +
   4400 +  /* Get fragmentation threshold */
   4401 +  if ( ioctl ( skfd, SIOCGIWFRAG, &wrq ) >= 0 ) {
   4402 +      wi->has_frag = 1;
   4403 +      memcpy ( &wi->frag, &wrq.u.frag, sizeof ( iwparam ));
   4404 +    }
   4405 +
   4406 +  /* Get operation mode */
   4407 +  if ( ioctl ( skfd, SIOCGIWMODE, &wrq ) >= 0 ) {
   4408 +      wi->mode = wrq.u.mode;
   4409 +      if ( wi->mode < IW_NUM_OPER_MODE && wi->mode >= 0 )
   4410 +        wi->has_mode = 1;
   4411 +  }
   4412 +
   4413 +  /* Get Power Management settings */                 // #if WIRELESS_EXT > 9
   4414 +  wrq.u.power.flags = 0;
   4415 +  if ( ioctl ( skfd, SIOCGIWPOWER, &wrq ) >= 0 ) {
   4416 +    wi->has_power = 1;
   4417 +    memcpy ( &wi->power, &wrq.u.power, sizeof ( iwparam ));
   4418 +  }
   4419 +
   4420 +  /* Get retry limit/lifetime */                      // #if WIRELESS_EXT > 10
   4421 +  if ( ioctl ( skfd, SIOCGIWRETRY, &wrq ) >= 0 ) {    
   4422 +    wi->has_retry = 1;
   4423 +    memcpy ( &wi->retry, &wrq.u.retry, sizeof ( iwparam ));
   4424 +  }
   4425 +
   4426 +  /* Get stats */                                     // #if WIRELESS_EXT > 11
   4427 +  wrq.u.data.pointer = ( caddr_t ) &wi->stats;
   4428 +  wrq.u.data.length = 0;
   4429 +  wrq.u.data.flags = 1;   /* Clear updated flag */
   4430 +  if ( ioctl ( skfd, SIOCGIWSTATS, &wrq ) < 0 )
   4431 +    wi->has_stats = 1;
   4432 +
   4433 +  if ( !wi->has_stats ) {                        // no ioctl support, go to file
   4434 +    fp = fopen ( PROC_NET_WIRELESS, "r" );
   4435 +    if ( fp ) {
   4436 +      while ( fgets ( bfr, sizeof ( bfr ), fp )) {
   4437 +        bfr [ sizeof ( bfr ) - 1 ] = '\0';        // no buffer overruns here!
   4438 +        strtok (( char * ) &bfr, "\n" );          // '\n' => '\0'
   4439 +        if ( strstr ( bfr, ifname ) && strstr ( bfr, ":" )) {
   4440 +          wi->has_stats = 1;
   4441 +          s = bfr;
   4442 +          s = strchr ( s, ':' ); s++;             /* Skip ethX:   */
   4443 +          s = strtok ( s, " " );                  /* ' ' => '\0'  */
   4444 +          sscanf ( s, "%X", &wi->stats.status ); // status 
   4445 +
   4446 +          s = strtok ( NULL, " " );               // link quality
   4447 +          if ( strchr ( s, '.' ) != NULL )
   4448 +            wi->stats.qual.updated |= 1;
   4449 +          sscanf ( s, "%d", &wi->stats.qual.qual );
   4450 +
   4451 +          s = strtok ( NULL, " " );               // signal level
   4452 +          if ( strchr ( s,'.' ) != NULL )
   4453 +            wi->stats.qual.updated |= 2;
   4454 +          sscanf ( s, "%d", &wi->stats.qual.level );
   4455 +
   4456 +          s = strtok ( NULL, " " );               // noise level
   4457 +          if ( strchr ( s, '.' ) != NULL )
   4458 +            wi->stats.qual.updated += 4;
   4459 +          sscanf ( s, "%d", &wi->stats.qual.noise );
   4460 +
   4461 +          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.nwid     );
   4462 +          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.code     );
   4463 +          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.fragment );
   4464 +          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.retries  );
   4465 +          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.misc     );
   4466 +          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.miss.beacon      );
   4467 +        }
   4468 +      }
   4469 +      fclose ( fp );
   4470 +    }
   4471 +  }
   4472 +
   4473 +// printf ( "%s bfr: %s\n", "loadTables()", bfr );
   4474 +}
   4475 +
   4476 +/****************************************************************************
   4477 +*                                                                           *
   4478 +*       displayWiExt() - show what I got from Wireless Extensions           *
   4479 +*                                                                           *
   4480 +****************************************************************************/
   4481 +static void displayWiExt ( struct wireless_info info )
   4482 +{
   4483 +#ifdef DISPLAYWIEXT
   4484 +  int i;
   4485 +  char title[] = "displayWiExt() -";
   4486 +
   4487 +  printf ( "========================================\n" );
   4488 +  printf ( "===> Wireless Extension IOCTL calls <===\n" );
   4489 +  printf ( "========================================\n" );
   4490 +
   4491 +  if ( strlen ( info.name ))
   4492 +    printf ( "%s name: %s\n", "SIOCGIWNAME", info.name );
   4493 +  else
   4494 +    printf ( "%s\n", "no info.name support" );
   4495 +
   4496 +  if ( info.has_nickname = 1 )
   4497 +    printf ( "%s nickname: %s\n", "SIOCGIWNICKN", info.nickname );
   4498 +  else
   4499 +    printf ( "%s %s\n", "SIOCGIWNICKN", " ===> no info.nickname support" );
   4500 +
   4501 +  if ( info.has_essid ) 
   4502 +    printf ( "%s essid_on: %d essid: %s\n", "SIOCGIWESSID", info.essid_on, info.essid );
   4503 +  else
   4504 +    printf ( "%s %s\n", "SIOCGIWESSID", " ===> no info.essid support" );
   4505 +
   4506 +  if ( info.has_range ) {
   4507 +    printf ( "%s throughput: %d\n",           "SIOCGIWRANGE", info.range.throughput );
   4508 +    printf ( "%s min_nwid: %d\n",             "SIOCGIWRANGE", info.range.min_nwid  );
   4509 +    printf ( "%s max_nwid: %d\n",             "SIOCGIWRANGE", info.range.max_nwid  );
   4510 +    printf ( "%s sensitivity: %d\n",          "SIOCGIWRANGE", info.range.sensitivity );
   4511 +    printf ( "%s num_bitrates: %d\n",         "SIOCGIWRANGE", info.range.num_bitrates );
   4512 +    for ( i = 0; i < info.range.num_bitrates; i++ ) 
   4513 +      printf ( "%s bitrate[%d]: %d\n",        "SIOCGIWRANGE", i, info.range.bitrate[i]  );
   4514 +    printf ( "%s min_rts: %d\n",              "SIOCGIWRANGE", info.range.min_rts );
   4515 +    printf ( "%s max_rts: %d\n",              "SIOCGIWRANGE", info.range.max_rts );
   4516 +    printf ( "%s min_frag: %d\n",             "SIOCGIWRANGE", info.range.min_frag );
   4517 +    printf ( "%s max_frag: %d\n",             "SIOCGIWRANGE", info.range.max_frag );
   4518 +    printf ( "%s min_pmp: %d\n",              "SIOCGIWRANGE", info.range.min_pmp );
   4519 +    printf ( "%s max_pmp: %d\n",              "SIOCGIWRANGE", info.range.max_pmp );
   4520 +    printf ( "%s min_pmt: %d\n",              "SIOCGIWRANGE", info.range.min_pmt );
   4521 +    printf ( "%s max_pmt: %d\n",              "SIOCGIWRANGE", info.range.max_pmt );
   4522 +    printf ( "%s pmp_flags: %d\n",            "SIOCGIWRANGE", info.range.pmp_flags );
   4523 +    printf ( "%s pmt_flags: %d\n",            "SIOCGIWRANGE", info.range.pmt_flags );
   4524 +    printf ( "%s pm_capa: %d\n",              "SIOCGIWRANGE", info.range.pm_capa );
   4525 +    printf ( "%s num_encoding_sizes: %d\n",   "SIOCGIWRANGE", info.range.num_encoding_sizes );
   4526 +    for ( i = 0; i < info.range.num_encoding_sizes; i++ ) 
   4527 +      printf ( "%s encoding_size[%d]: %d\n",  "SIOCGIWRANGE", i, info.range.encoding_size[i]  );
   4528 +    printf ( "%s max_encoding_tokens: %d\n",  "SIOCGIWRANGE", info.range.max_encoding_tokens );
   4529 +//  printf ( "%s encoding_login_index: %d\n", "SIOCGIWRANGE", info.range.encoding_login_index );
   4530 +    printf ( "%s txpower_capa: %d\n",         "SIOCGIWRANGE", info.range.txpower_capa );
   4531 +    printf ( "%s num_txpower: %d dBm\n",      "SIOCGIWRANGE", info.range.num_txpower );
   4532 +    for ( i = 0; i < info.range.num_txpower; i++ ) 
   4533 +      printf ( "%s txpower[%d]: %d\n",        "SIOCGIWRANGE", i, info.range.txpower[i]  );
   4534 +    printf ( "%s we_version_compiled: %d\n",  "SIOCGIWRANGE", info.range.we_version_compiled );
   4535 +    printf ( "%s we_version_source: %d\n",    "SIOCGIWRANGE", info.range.we_version_source );
   4536 +    printf ( "%s retry_capa: %d\n",           "SIOCGIWRANGE", info.range.retry_capa );
   4537 +    printf ( "%s retry_flags: %d\n",          "SIOCGIWRANGE", info.range.retry_flags );
   4538 +    printf ( "%s r_time_flags: %d\n",         "SIOCGIWRANGE", info.range.r_time_flags );
   4539 +    printf ( "%s min_retry: %d\n",            "SIOCGIWRANGE", info.range.min_retry );
   4540 +    printf ( "%s max_retry: %d\n",            "SIOCGIWRANGE", info.range.max_retry );
   4541 +    printf ( "%s min_r_time: %d\n",           "SIOCGIWRANGE", info.range.min_r_time );
   4542 +    printf ( "%s max_r_time: %d\n",           "SIOCGIWRANGE", info.range.max_r_time );
   4543 +    printf ( "%s num_channels: %d\n",         "SIOCGIWRANGE", info.range.num_channels );
   4544 +    printf ( "%s num_frequency: %d\n",        "SIOCGIWRANGE", info.range.num_frequency );
   4545 +    for ( i = 0; i < info.range.num_frequency; i++ ) 
   4546 +      printf ( "%s freq[%d].i: %d freq[%d].e: %d freq[%d].m: %d\n", "SIOCGIWRANGE", 
   4547 +                i, info.range.freq[i].i, i, info.range.freq[i].e, i, info.range.freq[i].m );
   4548 +  }
   4549 +  else
   4550 +    printf ( "%s %s\n", "SIOCGIWRANGE", " ===> no info.range support" );
   4551 +
   4552 +  if ( info.has_nwid ) 
   4553 +    printf ( "%s nwid - disabled: %d value: %X\n", "SIOCGIWNWID", info.nwid.disabled, info.nwid.value );
   4554 +  else
   4555 +    printf ( "%s %s\n", "SIOCGIWNWID", " ===> no info.nwid support" );
   4556 +
   4557 +  if ( info.has_freq ) {
   4558 +//  printf ( "%s freq: %g\n", "SIOCGIWFREQ", info.freq / GIGA );
   4559 +    printf ( "%s freq: %g\n", "SIOCGIWFREQ", info.freq );
   4560 +  }
   4561 +  else
   4562 +    printf ( "%s %s\n", "SIOCGIWFREQ", " ===> no info.freq support" );
   4563 +
   4564 +  if ( info.has_sens )
   4565 +    printf ( "%s sens: %d\n", "SIOCGIWSENS", info.sens );
   4566 +  else
   4567 +    printf ( "%s %s\n", "SIOCGIWSENS", " ===> no info.sens support" );
   4568 +
   4569 +  if ( info.has_key ) {
   4570 +    printf ( "%s key_size: %d key_flags: %d wepCurrentKey: %d\n", 
   4571 +              "SIOCGIWENCODE", info.key_size, info.key_flags, wepCurrentKey );
   4572 +    printf ( "%s MODE: %d DISABLED: %d INDEX: %d OPEN: %d RESTRICTED: %d NOKEY: %d TEMP: %d\n",
   4573 +              "SIOCGIWENCODE",                           info.key_flags & IW_ENCODE_MODE,
   4574 +              info.key_flags & IW_ENCODE_DISABLED ? 1:0, info.key_flags & IW_ENCODE_INDEX,
   4575 +              info.key_flags & IW_ENCODE_OPEN     ? 1:0, info.key_flags & IW_ENCODE_RESTRICTED ? 1:0,
   4576 +              info.key_flags & IW_ENCODE_NOKEY    ? 1:0, info.key_flags & IW_ENCODE_TEMP       ? 1:0 );
   4577 +  }
   4578 +  else
   4579 +    printf ( "%s %s\n", "SIOCGIWENCODE", " ===> no info.key support" );
   4580 +
   4581 +  for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
   4582 +    if ( wep[i].haveKey )
   4583 +      printf ( "%s wep[%d].len: %d wep[%d].key: %s\n", 
   4584 +                "SIOCGIWENCODE", i, wep[i].len, i, wep[i].key );
   4585 +  }
   4586 +
   4587 +  if ( info.has_ap_addr )
   4588 +    printf ( "%s ap_addr.sa_data: %02X:%02X:%02X:%02X:%02X:%02X ap_addr.sa_family: %d\n", 
   4589 +              "SIOCGIWAP",  ( UCHAR ) info.ap_addr.sa_data[0], ( UCHAR ) info.ap_addr.sa_data[1], 
   4590 +                            ( UCHAR ) info.ap_addr.sa_data[2], ( UCHAR ) info.ap_addr.sa_data[3], 
   4591 +                            ( UCHAR ) info.ap_addr.sa_data[4], ( UCHAR ) info.ap_addr.sa_data[5], 
   4592 +                                      info.ap_addr.sa_family );
   4593 +  else
   4594 +    printf ( "%s %s\n", "SIOCGIWAP", " ===> no ap_addr information" );
   4595 +
   4596 +  if ( info.has_bitrate )
   4597 +    printf ( "%s bitrate: %d value: %d fixed: %d disabled: %d flags: %d\n", 
   4598 +              "SIOCGIWRATE", info.bitrate, info.bitrate.value, info.bitrate.fixed, 
   4599 +                             info.bitrate.disabled, info.bitrate.flags );
   4600 +  else
   4601 +    printf ( "%s %s\n", "SIOCGIWRATE", " ===> no info.bitrate support" );
   4602 +
   4603 +  if ( info.has_rts )
   4604 +    printf ( "%s rts: %d\n", "SIOCGIWRTS", info.rts );
   4605 +  else
   4606 +    printf ( "%s %s\n", "SIOCGIWRTS", " ===> no info.rts support" );
   4607 +
   4608 +  if ( info.has_frag )
   4609 +    printf ( "%s frag: %d\n", "SIOCGIWFRAG", info.frag );
   4610 +  else
   4611 +    printf ( "%s %s\n", "SIOCGIWFRAG", " ===> no info.frag support" );
   4612 +
   4613 +  if ( info.has_mode ) 
   4614 +    printf ( "%s mode: %d\n", "SIOCGIWMODE", info.mode );
   4615 +  else
   4616 +    printf ( "%s %s\n", "SIOCGIWMODE", " ===> no info.mode support" );
   4617 +
   4618 +  if ( info.has_power ) {
   4619 +    printf ( "%s power: %d\n", "SIOCGIWPOWER", info.power );
   4620 +    printf ( "%s disabled: %d MIN: %d MAX: %d TIMEOUT: %d RELATIVE: %d\n",
   4621 +              "SIOCGIWPOWER",
   4622 +              info.power.disabled                  ? 1:0, 
   4623 +              info.power.flags & IW_POWER_MIN      ? 1:0, 
   4624 +              info.power.flags & IW_POWER_MAX      ? 1:0, 
   4625 +              info.power.flags & IW_POWER_TIMEOUT  ? 1:0, 
   4626 +              info.power.flags & IW_POWER_RELATIVE ? 1:0 ); 
   4627 +    printf ( "%s UNICAST: %d MULTICAST: %d ALL: %d FORCE: %d REPEATER: %d\n",
   4628 +              "SIOCGIWPOWER",
   4629 +              info.power.flags & IW_POWER_UNICAST_R   ? 1:0, 
   4630 +              info.power.flags & IW_POWER_MULTICAST_R ? 1:0, 
   4631 +              info.power.flags & IW_POWER_ALL_R       ? 1:0, 
   4632 +              info.power.flags & IW_POWER_FORCE_S     ? 1:0, 
   4633 +              info.power.flags & IW_POWER_REPEATER    ? 1:0 ); 
   4634 +  }
   4635 +  else
   4636 +    printf ( "%s %s\n", "SIOCGIWPOWER", " ===> no info.power support" );
   4637 +
   4638 +  if ( info.has_retry )
   4639 +    printf ( "%s retry: %d\n", "SIOCGIWRETRY", info.retry );
   4640 +  else
   4641 +    printf ( "%s %s\n", "SIOCGIWRETRY", " ===> no info.retry support" );
   4642 +
   4643 +  if ( info.has_stats ) {
   4644 +    printf ( "%s status: %d\n",           "SIOCGIWSTATS", info.stats.status           );
   4645 +    printf ( "%s qual.level: %d\n",       "SIOCGIWSTATS", info.stats.qual.level       );
   4646 +    printf ( "%s qual.noise: %d\n",       "SIOCGIWSTATS", info.stats.qual.noise       );
   4647 +    printf ( "%s qual.qual: %d\n",        "SIOCGIWSTATS", info.stats.qual.qual        );
   4648 +    printf ( "%s qual.updated: %d\n",     "SIOCGIWSTATS", info.stats.qual.updated     );
   4649 +    printf ( "%s discard.code: %d\n",     "SIOCGIWSTATS", info.stats.discard.code     );
   4650 +    printf ( "%s discard.fragment: %d\n", "SIOCGIWSTATS", info.stats.discard.fragment );
   4651 +    printf ( "%s discard.misc: %d\n",     "SIOCGIWSTATS", info.stats.discard.misc     );
   4652 +    printf ( "%s discard.nwid: %d\n",     "SIOCGIWSTATS", info.stats.discard.nwid     );
   4653 +    printf ( "%s discard.retries: %d\n",  "SIOCGIWSTATS", info.stats.discard.retries  );
   4654 +    printf ( "%s miss.beacon: %d\n",      "SIOCGIWSTATS", info.stats.miss.beacon      );
   4655 +  }
   4656 +  else
   4657 +    printf ( "%s %s\n", "SIOCGIWSTATS", " ===> no info.stats support" );
   4658 +
   4659 +  if ( info.txpower.flags & IW_TXPOW_MWATT )
   4660 +    printf ( "%s txpower1: %d dBm disabled: %d fixed: %d flags: %d\n", "SIOCGIWRANGE", 
   4661 +      mWatt2dbm ( info.txpower.value ), info.txpower.disabled, info.txpower.fixed, info.txpower.flags);
   4662 +  else
   4663 +    printf ( "%s txpower2: %d dBm disabled: %d fixed: %d flags: %d\n", "SIOCGIWRANGE", info.txpower.value, info.txpower.disabled, info.txpower.fixed, info.txpower.flags );
   4664 +
   4665 +  if ( info.has_range ) 
   4666 +    if ( info.sens.value < 0 )
   4667 +      printf ( "%s sens: %d dBm\n", "SIOCGIWRANGE", info.sens.value );
   4668 +    else
   4669 +      printf ( "%s sens: %d/%d\n", "SIOCGIWRANGE", info.sens.value, info.range.sensitivity );
   4670 +
   4671 +  if ( info.has_range && ( info.stats.qual.level != 0 ))
   4672 +      if ( info.stats.qual.level > info.range.max_qual.level )
   4673 +        /* Statistics are in dBm (absolute power measurement) */
   4674 +        printf ( "%s Quality: %d/%d Signal level: %d dBm Noise level: %d dBm\n",
   4675 +                  "SIOCGIWRANGE",
   4676 +                  info.stats.qual.qual, info.range.max_qual.qual,
   4677 +                  info.stats.qual.level - 0x100,
   4678 +                  info.stats.qual.noise - 0x100 );
   4679 +      else
   4680 +        printf (  "%s Quality: %d/%d Signal level: %d/%d Noise level: %d/%d",
   4681 +                  "SIOCGIWRANGE",
   4682 +                  info.stats.qual.qual,  info.range.max_qual.qual,
   4683 +                  info.stats.qual.level, info.range.max_qual.level,
   4684 +                  info.stats.qual.noise, info.range.max_qual.noise );
   4685 +
   4686 +#endif // #ifdef DISPLAYWIEXT
   4687 +}
   4688 +
   4689 +/****************************************************************************
   4690 +*                                                                           *
   4691 +*                        Linked List Functions                              *
   4692 +*                                                                           *
   4693 +****************************************************************************/
   4694 +/****************************************************************************
   4695 +*                                                                           *
   4696 +*                addList() - add an entry to a linked list                  *
   4697 +*                                                                           *
   4698 +****************************************************************************/
   4699 +static void 
   4700 +addList ( char *l, char *data, int len  )
   4701 +{
   4702 +  char uid[256];
   4703 +  LIST_HEAD ( , avNode ) *list;       
   4704 +
   4705 +  // NOTE: this assumes the UID is at the beginning of the 
   4706 +  //       data structure and that UIDs are strings
   4707 +  
   4708 +  list = ( LIST_HEAD ( , avNode ) * ) l;            // NOTE: don't know how to get 
   4709 +  strcpy ( uid, data );                             //  rid of compiler warning on
   4710 +                                                    //  LISTHEAD typecast
   4711 +  // create a new node and the data that goes in it
   4712 +  newNode = malloc ( sizeof ( struct avNode ));
   4713 +  newNode->data = malloc ( len );
   4714 +  memcpy ( newNode->data, data, len );
   4715 +
   4716 +  // this deals with an empty list
   4717 +  if ( LIST_EMPTY ( list )) {
   4718 +    LIST_INSERT_HEAD ( list, newNode, nodes );
   4719 +    return;
   4720 +  }
   4721 +
   4722 +  // this deals with UIDs that match
   4723 +  for ( np = LIST_FIRST ( list ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   4724 +    if ( strncmp ( uid, np->data, strlen ( uid )) == 0 ) {                      // found matching UID
   4725 +      LIST_INSERT_AFTER ( np, newNode, nodes );
   4726 +      if ( np->data )
   4727 +        free ( np->data );
   4728 +      LIST_REMOVE ( np, nodes );
   4729 +      free ( np );
   4730 +      return;
   4731 +    }
   4732 +  }
   4733 +
   4734 +  // this deals with inserting a new UID in the list
   4735 +  for ( np = LIST_FIRST ( list ); np != NULL; np = LIST_NEXT ( np, nodes )) {
   4736 +    lastNode = np;
   4737 +    if ( strncmp ( np->data, uid, strlen ( uid )) > 0 ) {                       // old ID > new ID AND
   4738 +      LIST_INSERT_BEFORE ( np, newNode, nodes );
   4739 +      return;
   4740 +    }
   4741 +  }
   4742 +
   4743 +  // this deals with a UID that needs to go on the end of the list
   4744 +  LIST_INSERT_AFTER ( lastNode, newNode, nodes );
   4745 +
   4746 +  return;
   4747 +}
   4748 +
   4749 +/****************************************************************************
   4750 +*                                                                           *
   4751 +*              initLists() - initialize all the linked lists                *
   4752 +*                                                                           *
   4753 +****************************************************************************/
   4754 +static void initLists()
   4755 +{
   4756 +  LIST_INIT ( &scList );  LIST_INIT ( &aaList );  LIST_INIT ( &dfList );
   4757 +  LIST_INIT ( &kmList );  LIST_INIT ( &prList );
   4758 +  LIST_INIT ( &opList );  LIST_INIT ( &coList );
   4759 +  LIST_INIT ( &gaList );  LIST_INIT ( &riList );  LIST_INIT ( &poList );
   4760 +  LIST_INIT ( &paList );  LIST_INIT ( &ptList );  LIST_INIT ( &pfList );
   4761 +  LIST_INIT ( &pdList );  LIST_INIT ( &piList );  LIST_INIT ( &rdList );
   4762 +  LIST_INIT ( &alList );  LIST_INIT ( &rtList );  LIST_INIT ( &rrList );
   4763 +}
   4764 +/****************************************************************************
   4765 +*                                                                           *
   4766 +*                 flushLists() - flush all linked lists                     *
   4767 +*                                                                           *
   4768 +****************************************************************************/
   4769 +static void flushLists()
   4770 +{
   4771 +  flushList (( char * ) &scList );  flushList (( char * ) &aaList );
   4772 +  flushList (( char * ) &dfList );  flushList (( char * ) &kmList );
   4773 +  flushList (( char * ) &prList );
   4774 +  flushList (( char * ) &opList );  flushList (( char * ) &coList );
   4775 +  flushList (( char * ) &gaList );  flushList (( char * ) &riList );
   4776 +  flushList (( char * ) &poList );  flushList (( char * ) &paList );
   4777 +  flushList (( char * ) &ptList );  flushList (( char * ) &pfList );
   4778 +  flushList (( char * ) &pdList );  flushList (( char * ) &piList );
   4779 +  flushList (( char * ) &rdList );  flushList (( char * ) &alList );
   4780 +  flushList (( char * ) &rtList );  flushList (( char * ) &rrList );
   4781 +}
   4782 +
   4783 +/****************************************************************************
   4784 +*                                                                           *
   4785 +*                   flushList() - flush a linked list                       *
   4786 +*                                                                           *
   4787 +****************************************************************************/
   4788 +static void flushList ( char *l )
   4789 +{
   4790 +  LIST_HEAD ( , avNode ) *list;
   4791 +  
   4792 +  list = ( LIST_HEAD ( , avNode ) * ) l;    // NOTE: don't know how to get 
   4793 +  while ( !LIST_EMPTY ( list )) {           //  rid of compiler warning on
   4794 +    np = LIST_FIRST ( list );               //  LISTHEAD typecast
   4795 +    if ( np->data )
   4796 +      free ( np->data );
   4797 +    LIST_REMOVE ( np, nodes );
   4798 +    free ( np );
   4799 +  }
   4800 +}
   4801 +
   4802 +/****************************************************************************
   4803 +*                                                                           *
   4804 +*                            Utility Functions                              *
   4805 +*                                                                           *
   4806 +****************************************************************************/
   4807 +/****************************************************************************
   4808 +*                                                                           *
   4809 +*        The following two routines were taken directly from iwlib.c        *
   4810 +*                                                                           *
   4811 +****************************************************************************/
   4812 + /*
   4813 + * Open a socket.
   4814 + * Depending on the protocol present, open the right socket. The socket
   4815 + * will allow us to talk to the driver.
   4816 + */
   4817 +static int openSocket ( void )
   4818 +{
   4819 +  static const int families[] = {
   4820 +    AF_INET, AF_IPX, AF_AX25, AF_APPLETALK
   4821 +  };
   4822 +  unsigned int  i;
   4823 +  int   sock;
   4824 +
   4825 +  /*
   4826 +   * Now pick any (exisiting) useful socket family for generic queries
   4827 +   * Note : don't open all the socket, only returns when one matches,
   4828 +   * all protocols might not be valid.
   4829 +   * Workaround by Jim Kaba <jkaba@sarnoff.com>
   4830 +   * Note : in 99% of the case, we will just open the inet_sock.
   4831 +   * The remaining 1% case are not fully correct...
   4832 +   */
   4833 +
   4834 +  /* Try all families we support */
   4835 +  for(i = 0; i < sizeof(families)/sizeof(int); ++i) {
   4836 +      /* Try to open the socket, if success returns it */
   4837 +      sock = socket(families[i], SOCK_DGRAM, 0);
   4838 +      if(sock >= 0)
   4839 +  return sock;
   4840 +  }
   4841 +
   4842 +  return -1;
   4843 +}
   4844 +
   4845 +/*------------------------------------------------------------------*/
   4846 +/*
   4847 + * Convert a value in milliWatt to a value in dBm.
   4848 + */
   4849 +static int mWatt2dbm ( int in )
   4850 +{
   4851 +#ifdef WE_NOLIBM
   4852 +  /* Version without libm : slower */
   4853 +  double  fin = (double) in;
   4854 +  int   res = 0;
   4855 +
   4856 +  /* Split integral and floating part to avoid accumulating rounding errors */
   4857 +  while(fin > 10.0)
   4858 +    {
   4859 +      res += 10;
   4860 +      fin /= 10.0;
   4861 +    }
   4862 +  while(fin > 1.000001) /* Eliminate rounding errors, take ceil */
   4863 +    {
   4864 +      res += 1;
   4865 +      fin /= LOG10_MAGIC;
   4866 +    }
   4867 +  return(res);
   4868 +#else /* WE_NOLIBM */
   4869 +  /* Version with libm : faster */
   4870 +  return((int) (ceil(10.0 * log10((double) in))));
   4871 +#endif  /* WE_NOLIBM */
   4872 +}
   4873 +
   4874 +/****************************************************************************
   4875 +*                                                                           *
   4876 +*                 htob - converts hex string to binary                      *
   4877 +*                                                                           *
   4878 +****************************************************************************/
   4879 +static char *htob ( char *s )
   4880 +{
   4881 +    char nibl, *byt;
   4882 +    static char bin[20];
   4883 +
   4884 +    byt = bin;
   4885 +
   4886 +    while ((nibl = *s++) && nibl != ' ') {    /* While not end of string. */
   4887 +      nibl -= ( nibl > '9') ?  ('A' - 10): '0';
   4888 +      *byt = nibl << 4;                              /* place high nibble */
   4889 +      if((nibl = *s++) && nibl != ' ') {
   4890 +        nibl -= ( nibl > '9') ?  ('A' - 10): '0';
   4891 +        *byt |= nibl;                                /*  place low nibble */
   4892 +      }
   4893 +      else break;
   4894 +      ++byt;
   4895 +    }
   4896 +    *++byt = '\0';
   4897 +    return ( bin );
   4898 +}
   4899 +
   4900 +/****************************************************************************
   4901 +*                                                                           *
   4902 +*           hasChanged() - see if area has been changed from NULLs          *
   4903 +*                                                                           *
   4904 +****************************************************************************/
   4905 +static int hasChanged ( char *loc, int len )
   4906 +{
   4907 +  char *wrk;
   4908 +  int changed = TRUE;
   4909 +
   4910 +  wrk = malloc ( len );
   4911 +  memset ( wrk, 0, len );
   4912 +  if ( memcmp ( loc, wrk, len ) == 0 )
   4913 +    changed = FALSE;
   4914 +  free ( wrk );
   4915 +
   4916 +  return ( changed );
   4917 +}
   4918 +
   4919 --- /dev/null
   4920 +++ b/agent/mibgroup/ieee802dot11.h
   4921 @@ -0,0 +1,730 @@
   4922 +/****************************************************************************
   4923 +*                                                                           *
   4924 +*  File Name:           ieee802dot11.h                                      *
   4925 +*  Used By:                                                                 *
   4926 +*                                                                           *
   4927 +*  Operating System:                                                        *
   4928 +*  Purpose:                                                                 *
   4929 +*                                                                           *
   4930 +*  Comments:                                                                *
   4931 +*                                                                           *
   4932 +*  Author:              Larry Simmons                                       *
   4933 +*                       lsimmons@avantcom.com                               *
   4934 +*                       www.avantcom.com                                    *
   4935 +*                                                                           *
   4936 +*  Creation Date:       09/02/03                                            *
   4937 +*                                                                           *
   4938 +*   Ver    Date   Inits Modification                                        *
   4939 +*  ----- -------- ----- ------------                                        *
   4940 +*  0.0.1 09/02/03  LRS  created                                             *
   4941 +*  0.0.2 09/24/03  LRS  wouldn't build after fresh ./configure              *
   4942 +****************************************************************************/
   4943 +/* This file was generated by mib2c and is intended for use as a mib module
   4944 +  for the ucd-snmp snmpd agent. */
   4945 +#ifndef _MIBGROUP_IEEE802DOT11_H
   4946 +#define _MIBGROUP_IEEE802DOT11_H
   4947 +/* we may use header_generic and header_simple_table from the util_funcs module */
   4948 +
   4949 +/****************************************************************************
   4950 +*                               Includes                                    *
   4951 +****************************************************************************/
   4952 +#include <sys/queue.h>
   4953 +
   4954 +/****************************************************************************
   4955 +*                             Linked List Defines                           *
   4956 +****************************************************************************/
   4957 +// here are some Linked List MACROS I wanted to use, 
   4958 +// but curiously were not in /usr/includes/sys/queue.h
   4959 +
   4960 +#ifndef LIST_EMPTY
   4961 +  #define	LIST_EMPTY(head)	((head)->lh_first == NULL)
   4962 +#endif
   4963 +
   4964 +#ifndef LIST_NEXT
   4965 +  #define	LIST_NEXT(elm, field)	((elm)->field.le_next)
   4966 +#endif
   4967 +
   4968 +#ifndef LIST_INSERT_BEFORE
   4969 +  #define	LIST_INSERT_BEFORE(listelm, elm, field) do {			\
   4970 +	  (elm)->field.le_prev = (listelm)->field.le_prev;		\
   4971 +	  LIST_NEXT((elm), field) = (listelm);				\
   4972 +	  *(listelm)->field.le_prev = (elm);				\
   4973 +	  (listelm)->field.le_prev = &LIST_NEXT((elm), field);		\
   4974 +  } while (0)
   4975 +#endif
   4976 +
   4977 +#ifndef LIST_FIRST
   4978 +  #define	LIST_FIRST(head)	((head)->lh_first)
   4979 +#endif
   4980 +
   4981 +/****************************************************************************
   4982 +*                             802.11 MIB Defines                            *
   4983 +****************************************************************************/
   4984 +#define SYS_STRING_LEN                     256
   4985 +#define MACADDR_LEN                        ( 6 * 2 ) + 5
   4986 +#define OPER_RATE_SET_LEN                  126
   4987 +#define MAN_OUI_LEN                        ( 3 * 2 ) + 2
   4988 +#define WEP_STR_LEN                         64
   4989 +#define SNMP_STR_LEN                       128
   4990 +#define TEXT_LEN                            80
   4991 +#define IFINDEX_LEN                          4
   4992 +#define IFNAME_LEN                          16
   4993 +#define MAX_WEP_KEYS                         4
   4994 +
   4995 +#define AUTHENICATION_ALGORITHMS_INDEX_LEN   4
   4996 +#define WEP_DEFAULT_KEY_INDEX_LEN            4
   4997 +#define WEP_KEY_MAPPING_INDEX_LEN            4
   4998 +#define GROUP_ADDRESS_INDEX_LEN              4
   4999 +#define REG_DOMAIN_SUPPORT_INDEX_LEN         4
   5000 +#define ANTENNA_LIST_INDEX_LEN               4
   5001 +#define SUPPORTED_DATA_RATES_TX_INDEX_LEN    4
   5002 +#define SUPPORTED_DATA_RATES_RX_INDEX_LEN    4
   5003 +
   5004 +#define SC_UID_LEN  IFINDEX_LEN
   5005 +#define AA_UID_LEN  IFINDEX_LEN + AUTHENICATION_ALGORITHMS_INDEX_LEN
   5006 +#define DF_UID_LEN  IFINDEX_LEN + WEP_DEFAULT_KEY_INDEX_LEN
   5007 +#define KM_UID_LEN  IFINDEX_LEN + WEP_KEY_MAPPING_INDEX_LEN
   5008 +#define PR_UID_LEN  IFINDEX_LEN
   5009 +#define OP_UID_LEN  IFINDEX_LEN
   5010 +#define CO_UID_LEN  IFINDEX_LEN
   5011 +#define GA_UID_LEN  IFINDEX_LEN + GROUP_ADDRESS_INDEX_LEN
   5012 +#define RI_UID_LEN  IFINDEX_LEN
   5013 +#define PO_UID_LEN  IFINDEX_LEN
   5014 +#define PA_UID_LEN  IFINDEX_LEN
   5015 +#define PT_UID_LEN  IFINDEX_LEN
   5016 +#define PF_UID_LEN  IFINDEX_LEN
   5017 +#define PD_UID_LEN  IFINDEX_LEN
   5018 +#define PI_UID_LEN  IFINDEX_LEN
   5019 +#define RD_UID_LEN  IFINDEX_LEN + REG_DOMAIN_SUPPORT_INDEX_LEN
   5020 +#define AL_UID_LEN  IFINDEX_LEN + ANTENNA_LIST_INDEX_LEN
   5021 +#define RT_UID_LEN  IFINDEX_LEN + SUPPORTED_DATA_RATES_TX_INDEX_LEN
   5022 +#define RR_UID_LEN  IFINDEX_LEN + SUPPORTED_DATA_RATES_RX_INDEX_LEN
   5023 +
   5024 +/****************************************************************************
   5025 +*                           Linked List Structure                           *
   5026 +****************************************************************************/
   5027 +static struct avNode {  
   5028 +  LIST_ENTRY ( avNode ) nodes; 
   5029 +  char *data;                                 // pointer to data
   5030 +};
   5031 +
   5032 +typedef LIST_HEAD ( , avNode ) avList_t;
   5033 +
   5034 +/****************************************************************************
   5035 +*                          802.11 MIB structures                            *
   5036 +****************************************************************************/
   5037 +/****************************************************************************
   5038 +*                             dot11Smt Group                                *
   5039 +****************************************************************************/
   5040 +/****************************************************************************
   5041 +*                          dot11StationConfigTable                          *
   5042 +****************************************************************************/
   5043 +static struct scTbl_data {
   5044 +
   5045 +  char  UID       [ SC_UID_LEN + 1 ];               // unique ID
   5046 +  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
   5047 +
   5048 +  long  ifIndex;                                    // ifindex of card
   5049 +
   5050 +  char  stationID [ MACADDR_LEN + 1 ];              // Default actual MacAddr
   5051 +  long  mediumOccupancyLimit;
   5052 +  long  CFPPollable;
   5053 +  long  CFPPeriod;
   5054 +  long  maxDuration;
   5055 +  long  authenticationResponseTimeOut;
   5056 +  long  privacyOptionImplemented;
   5057 +  long  powerManagementMode;
   5058 +  char  desiredSSID             [ SNMP_STR_LEN + 1 ];
   5059 +  long  desiredBSSType;
   5060 +  char  operationalRateSet      [ OPER_RATE_SET_LEN + 1];
   5061 +  long  beaconPeriod;
   5062 +  long  DTIMPeriod;
   5063 +  long  associationResponseTimeOut;
   5064 +  long  disAssociationReason;
   5065 +  char  disAssociationStation   [ MACADDR_LEN + 1 ];
   5066 +  long  deAuthenticationReason;
   5067 +  char  deAuthenticationStation [ MACADDR_LEN + 1 ];
   5068 +  long  authenticateFailStatus;
   5069 +  char  authenticateFailStation [ MACADDR_LEN + 1 ];
   5070 +
   5071 +  long  haveStationID;
   5072 +  long  haveMediumOccupancyLimit;
   5073 +  long  haveCFPPollable;
   5074 +  long  haveCFPPeriod;
   5075 +  long  haveMaxDuration;
   5076 +  long  haveAuthenticationResponseTimeOut;
   5077 +  long  havePrivacyOptionImplemented;
   5078 +  long  havePowerManagementMode;
   5079 +  long  haveDesiredSSID;
   5080 +  long  haveDesiredBSSType;
   5081 +  long  haveOperationalRateSet;
   5082 +  long  haveBeaconPeriod;
   5083 +  long  haveDTIMPeriod;
   5084 +  long  haveAssociationResponseTimeOut;
   5085 +  long  haveDisAssociationReason;
   5086 +  long  haveDisAssociationStation;
   5087 +  long  haveDeAuthenticationReason;
   5088 +  long  haveDeAuthenticationStation;
   5089 +  long  haveAuthenticateFailStatus;
   5090 +  long  haveAuthenticateFailStation;
   5091 +
   5092 +} nSc, *sc = &nSc;
   5093 +
   5094 +static avList_t scList;
   5095 +
   5096 +/****************************************************************************
   5097 +*                    dot11AuthenticationAlgorithmsTable                     *
   5098 +****************************************************************************/
   5099 +static struct aaTbl_data {
   5100 +
   5101 +  char  UID       [ AA_UID_LEN + 1 ];
   5102 +  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
   5103 +
   5104 +  long  ifIndex;                                    // ifindex of card
   5105 +  long  authenticationAlgorithmsIndex;
   5106 +
   5107 +  long  authenticationAlgorithm;
   5108 +  long  authenticationAlgorithmsEnable;
   5109 +
   5110 +  long  haveAuthenticationAlgorithm;
   5111 +  long  haveAuthenticationAlgorithmsEnable;
   5112 +
   5113 +} nAa, *aa = &nAa;
   5114 +
   5115 +static avList_t aaList;
   5116 +
   5117 +/****************************************************************************
   5118 +*                           dot11WEPDefaultKeysTable                        *
   5119 +****************************************************************************/
   5120 +static struct dfTbl_data {
   5121 +
   5122 +  char  UID       [ DF_UID_LEN + 1 ];
   5123 +  char  ifName    [ IFNAME_LEN + 1 ];
   5124 +
   5125 +  long  ifIndex;                                    // ifindex of card
   5126 +  long  WEPDefaultKeyIndex;
   5127 +
   5128 +  char  WEPDefaultKeyValue [ WEP_STR_LEN + 1 ];
   5129 +  long  haveWEPDefaultKeyValue;
   5130 +
   5131 +} nDf, *df = &nDf;
   5132 +
   5133 +static avList_t dfList;
   5134 +
   5135 +/****************************************************************************
   5136 +*                          dot11WEPKeyMappingsTable                         *
   5137 +****************************************************************************/
   5138 +static struct kmTbl_data {
   5139 +
   5140 +  char  UID       [ KM_UID_LEN + 1 ];
   5141 +  char  ifName    [ IFNAME_LEN + 1 ];
   5142 +
   5143 +  long  ifIndex;
   5144 +  long  WEPKeyMappingIndex;
   5145 +
   5146 +  char  WEPKeyMappingAddress  [ MACADDR_LEN + 1 ];
   5147 +  long  WEPKeyMappingWEPOn;
   5148 +  char  WEPKeyMappingValue    [ WEP_STR_LEN + 1 ];
   5149 +  long  WEPKeyMappingStatus;
   5150 +
   5151 +  long  haveWEPKeyMappingIndex;
   5152 +  long  haveWEPKeyMappingAddress;
   5153 +  long  haveWEPKeyMappingWEPOn;
   5154 +  long  haveWEPKeyMappingValue;
   5155 +  long  haveWEPKeyMappingStatus;
   5156 +
   5157 +} nKm, *km = &nKm;
   5158 +
   5159 +static avList_t kmList;
   5160 +
   5161 +/****************************************************************************
   5162 +*                                dot11PrivacyTable                          *
   5163 +****************************************************************************/
   5164 +static struct prTbl_data {
   5165 +
   5166 +  char          UID       [ PR_UID_LEN + 1 ];
   5167 +  char          ifName    [ IFNAME_LEN + 1 ];
   5168 +
   5169 +  long          ifIndex;
   5170 +
   5171 +  long          privacyInvoked;
   5172 +  long          WEPDefaultKeyID;
   5173 +  long          WEPKeyMappingLength;
   5174 +  long          excludeUnencrypted;
   5175 +  unsigned long WEPICVErrorCount;
   5176 +  unsigned long WEPExcludedCount;
   5177 +
   5178 +  long          havePrivacyInvoked;
   5179 +  long          haveWEPDefaultKeyID;
   5180 +  long          haveWEPKeyMappingLength;
   5181 +  long          haveExcludeUnencrypted;
   5182 +  long          haveWEPICVErrorCount;
   5183 +  long          haveWEPExcludedCount;
   5184 +
   5185 +} nPr, *pr = &nPr;
   5186 +
   5187 +static avList_t prList;
   5188 +
   5189 +/****************************************************************************
   5190 +*                               dot11Mac Group                              *
   5191 +****************************************************************************/
   5192 +/****************************************************************************
   5193 +*                              dot11OperationTable                          *
   5194 +****************************************************************************/
   5195 +static struct opTbl_data {
   5196 +
   5197 +  char  UID       [ OP_UID_LEN + 1 ];                 // unique ID
   5198 +  char  ifName    [ IFNAME_LEN + 1 ];                 // ifName of card
   5199 +
   5200 +  long  ifIndex;                                      // ifindex of card
   5201 +
   5202 +  char  MACAddress      [ MACADDR_LEN + 1 ];
   5203 +  long  RTSThreshold;
   5204 +  long  shortRetryLimit;
   5205 +  long  longRetryLimit;
   5206 +  long  fragmentationThreshold;
   5207 +  long  maxTransmitMSDULifetime;
   5208 +  long  maxReceiveLifetime;
   5209 +  char  manufacturerID  [ SNMP_STR_LEN + 1 ];
   5210 +  char  productID       [ SNMP_STR_LEN + 1 ];
   5211 +
   5212 +  long  haveMACAddress;
   5213 +  long  haveRTSThreshold;
   5214 +  long  haveShortRetryLimit;
   5215 +  long  haveLongRetryLimit;
   5216 +  long  haveFragmentationThreshold;
   5217 +  long  haveMaxTransmitMSDULifetime;
   5218 +  long  haveMaxReceiveLifetime;
   5219 +  long  haveManufacturerID;
   5220 +  long  haveProductID;
   5221 +
   5222 +} nOp, *op = &nOp;
   5223 +
   5224 +static avList_t opList;
   5225 +
   5226 +/****************************************************************************
   5227 +*                            dot11CountersTable                             *
   5228 +****************************************************************************/
   5229 +static struct coTbl_data {
   5230 +
   5231 +  char          UID       [ CO_UID_LEN + 1 ];     // unique ID
   5232 +  char          ifName    [ IFNAME_LEN + 1 ];     // ifName of card
   5233 +
   5234 +  long          ifIndex;                          // ifindex of card
   5235 +
   5236 +  unsigned long  transmittedFragmentCount;
   5237 +  unsigned long  multicastTransmittedFrameCount;
   5238 +  unsigned long  failedCount;
   5239 +  unsigned long  retryCount;
   5240 +  unsigned long  multipleRetryCount;
   5241 +  unsigned long  frameDuplicateCount;
   5242 +  unsigned long  RTSSuccessCount;
   5243 +  unsigned long  RTSFailureCount;
   5244 +  unsigned long  ACKFailureCount;
   5245 +  unsigned long  receivedFragmentCount;
   5246 +  unsigned long  multicastReceivedFrameCount;
   5247 +  unsigned long  FCSErrorCount;
   5248 +  unsigned long  transmittedFrameCount;
   5249 +  unsigned long  WEPUndecryptableCount;
   5250 +
   5251 +  long           haveTransmittedFragmentCount;
   5252 +  long           haveMulticastTransmittedFrameCount;
   5253 +  long           haveFailedCount;
   5254 +  long           haveRetryCount;
   5255 +  long           haveMultipleRetryCount;
   5256 +  long           haveFrameDuplicateCount;
   5257 +  long           haveRTSSuccessCount;
   5258 +  long           haveRTSFailureCount;
   5259 +  long           haveACKFailureCount;
   5260 +  long           haveReceivedFragmentCount;
   5261 +  long           haveMulticastReceivedFrameCount;
   5262 +  long           haveFCSErrorCount;
   5263 +  long           haveTransmittedFrameCount;
   5264 +  long           haveWEPUndecryptableCount;
   5265 +
   5266 +} nCo, *co = &nCo;
   5267 +
   5268 +static avList_t coList;
   5269 +
   5270 +/****************************************************************************
   5271 +*                        dot11GroupAddressesTable                           *
   5272 +****************************************************************************/
   5273 +static struct gaTbl_data {
   5274 +
   5275 +  char  UID       [ GA_UID_LEN + 1 ];
   5276 +  char  ifName    [ IFNAME_LEN + 1 ];
   5277 +
   5278 +  long  ifIndex;                                    // ifindex of card
   5279 +  long  groupAddressesIndex;
   5280 +
   5281 +  char  address   [ MACADDR_LEN + 1 ];
   5282 +  long  groupAddressesStatus;
   5283 +
   5284 +  long  haveAddress;
   5285 +  long  haveGroupAddressesStatus;
   5286 +
   5287 +} nGa, *ga = &nGa;
   5288 +
   5289 +static avList_t gaList;
   5290 +
   5291 +/****************************************************************************
   5292 +*                               dot11Res Group                              *
   5293 +****************************************************************************/
   5294 +static char  resourceTypeIDName[] = "RTID";
   5295 +static long  haveResourceTypeIDName = 1;
   5296 +
   5297 +/****************************************************************************
   5298 +*                           dot11ResourceInfoTable                          *
   5299 +****************************************************************************/
   5300 +static struct riTbl_data {
   5301 +
   5302 +  char  UID       [ RI_UID_LEN + 1 ];               // unique ID
   5303 +  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
   5304 +
   5305 +  long  ifIndex;                                    // ifindex of card
   5306 +
   5307 +  char  manufacturerOUI            [ MAN_OUI_LEN    + 1 ];
   5308 +  char  manufacturerName           [ SYS_STRING_LEN + 1 ];
   5309 +  char  manufacturerProductName    [ SYS_STRING_LEN + 1 ];
   5310 +  char  manufacturerProductVersion [ SYS_STRING_LEN + 1 ];
   5311 +
   5312 +  char  haveManufacturerOUI;
   5313 +  char  haveManufacturerName;
   5314 +  char  haveManufacturerProductName;
   5315 +  char  haveManufacturerProductVersion;
   5316 +
   5317 +} nRi, *ri = &nRi;
   5318 +
   5319 +static avList_t riList;
   5320 +
   5321 +/****************************************************************************
   5322 +*                               dot11Phy Group                              *
   5323 +****************************************************************************/
   5324 +/****************************************************************************
   5325 +*                           dot11PhyOperationTable                          *
   5326 +****************************************************************************/
   5327 +static struct poTbl_data {
   5328 +
   5329 +  char  UID       [ PO_UID_LEN + 1 ];               // unique ID
   5330 +  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
   5331 +
   5332 +  long  ifIndex;                                    // ifindex of card
   5333 +
   5334 +  long  PHYType;
   5335 +  long  currentRegDomain;
   5336 +  long  tempType;
   5337 +
   5338 +  long  havePHYType;
   5339 +  long  haveCurrentRegDomain;
   5340 +  long  haveTempType;
   5341 +
   5342 +} nPo, *po = &nPo;
   5343 +
   5344 +static avList_t poList;
   5345 +
   5346 +/****************************************************************************
   5347 +*                           dot11PhyAntennaEntry                            *
   5348 +****************************************************************************/
   5349 +static struct paTbl_data {
   5350 +
   5351 +  char  UID       [ PA_UID_LEN + 1 ];               // unique ID
   5352 +  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
   5353 +
   5354 +  long  ifIndex;                                    // ifindex of card
   5355 +
   5356 +  long  currentTxAntenna;
   5357 +  long  diversitySupport;
   5358 +  long  currentRxAntenna;
   5359 +
   5360 +  long  haveCurrentTxAntenna;
   5361 +  long  haveDiversitySupport;
   5362 +  long  haveCurrentRxAntenna;
   5363 +
   5364 +} nPa, *pa = &nPa;
   5365 +
   5366 +static avList_t paList;
   5367 +
   5368 +/****************************************************************************
   5369 +*                             dot11PhyTxPowerTable                          *
   5370 +****************************************************************************/
   5371 +static struct ptTbl_data {
   5372 +
   5373 +  char  UID       [ PT_UID_LEN + 1 ];               // unique ID
   5374 +  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
   5375 +
   5376 +  long  ifIndex;                                    // ifindex of card
   5377 +
   5378 +  long  numberSupportedPowerLevels;
   5379 +  long  TxPowerLevel1;
   5380 +  long  TxPowerLevel2;
   5381 +  long  TxPowerLevel3;
   5382 +  long  TxPowerLevel4;
   5383 +  long  TxPowerLevel5;
   5384 +  long  TxPowerLevel6;
   5385 +  long  TxPowerLevel7;
   5386 +  long  TxPowerLevel8;
   5387 +  long  currentTxPowerLevel;
   5388 +
   5389 +  long  haveNumberSupportedPowerLevels;
   5390 +  long  haveTxPowerLevel1;
   5391 +  long  haveTxPowerLevel2;
   5392 +  long  haveTxPowerLevel3;
   5393 +  long  haveTxPowerLevel4;
   5394 +  long  haveTxPowerLevel5;
   5395 +  long  haveTxPowerLevel6;
   5396 +  long  haveTxPowerLevel7;
   5397 +  long  haveTxPowerLevel8;
   5398 +  long  haveCurrentTxPowerLevel ;
   5399 +
   5400 +} nPt, *pt = &nPt;
   5401 +
   5402 +static avList_t ptList;
   5403 +
   5404 +/****************************************************************************
   5405 +*                               dot11PhyFHSSTable                           *
   5406 +****************************************************************************/
   5407 +static struct pfTbl_data {
   5408 +
   5409 +  char  UID       [ PF_UID_LEN + 1 ];              // unique ID
   5410 +  char  ifName    [ IFNAME_LEN + 1 ];              // ifName of card
   5411 +
   5412 +  long  ifIndex;                                    // ifindex of card
   5413 +
   5414 +  long  hopTime;
   5415 +  long  currentChannelNumber;
   5416 +  long  maxDwellTime;
   5417 +  long  currentDwellTime;
   5418 +  long  currentSet;
   5419 +  long  currentPattern;
   5420 +  long  currentIndex;
   5421 +
   5422 +  long  haveHopTime;
   5423 +  long  haveCurrentChannelNumber;
   5424 +  long  haveMaxDwellTime;
   5425 +  long  haveCurrentDwellTime;
   5426 +  long  haveCurrentSet;
   5427 +  long  haveCurrentPattern;
   5428 +  long  haveCurrentIndex;
   5429 +
   5430 +} nPf, *pf = &nPf;
   5431 +
   5432 +static avList_t pfList;
   5433 +
   5434 +/****************************************************************************
   5435 +*                              dot11PhyDSSSTable                            *
   5436 +****************************************************************************/
   5437 +static struct pdTbl_data {
   5438 +
   5439 +  char  UID       [ PD_UID_LEN + 1 ];               // unique ID
   5440 +  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
   5441 +
   5442 +  long  ifIndex;                                    // ifindex of card
   5443 +
   5444 +  long  currentChannel;
   5445 +  long  CCAModeSupported;
   5446 +  long  currentCCAMode;
   5447 +  long  EDThreshold;
   5448 +
   5449 +  long  haveCurrentChannel;
   5450 +  long  haveCCAModeSupported ;
   5451 +  long  haveCurrentCCAMode;
   5452 +  long  haveEDThreshold;
   5453 +
   5454 +} nPd, *pd = &nPd;
   5455 +
   5456 +static avList_t pdList;
   5457 +
   5458 +/****************************************************************************
   5459 +*                              dot11PhyIRTable                              *
   5460 +****************************************************************************/
   5461 +static struct piTbl_data {
   5462 +
   5463 +  char  UID       [ PI_UID_LEN + 1 ];               // unique ID
   5464 +  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
   5465 +
   5466 +  long  ifIndex;                                    // ifindex of card
   5467 +
   5468 +  long  CCAWatchdogTimerMax;
   5469 +  long  CCAWatchdogCountMax;
   5470 +  long  CCAWatchdogTimerMin;
   5471 +  long  CCAWatchdogCountMin;
   5472 +
   5473 +  long  haveCCAWatchdogTimerMax;
   5474 +  long  haveCCAWatchdogCountMax;
   5475 +  long  haveCCAWatchdogTimerMin;
   5476 +  long  haveCCAWatchdogCountMin;
   5477 +
   5478 +} nPi, *pi = &nPi;
   5479 +
   5480 +static avList_t piList;
   5481 +
   5482 +/****************************************************************************
   5483 +*                      dot11RegDomainsSupportedTable                        *
   5484 +****************************************************************************/
   5485 +static struct rdTbl_data {
   5486 +
   5487 +  char  UID       [ RD_UID_LEN + 1 ];
   5488 +  char  ifName    [ IFNAME_LEN + 1 ];
   5489 +
   5490 +  long  ifIndex;                                    // ifindex of card
   5491 +  long  regDomainsSupportIndex;
   5492 +
   5493 +  long  regDomainsSupportValue;
   5494 +  long  haveRegDomainsSupportValue;
   5495 +
   5496 +} nRd, *rd = &nRd;
   5497 +
   5498 +static avList_t rdList;
   5499 +
   5500 +/****************************************************************************
   5501 +*                             dot11AntennasListTable                        *
   5502 +****************************************************************************/
   5503 +static struct alTbl_data {
   5504 +
   5505 +  char  UID       [ AL_UID_LEN + 1 ];
   5506 +  char  ifName    [ IFNAME_LEN + 1 ];
   5507 +
   5508 +  long  ifIndex;                                    // ifindex of card
   5509 +  long  antennaListIndex;
   5510 +
   5511 +  long  supportedTxAntenna;
   5512 +  long  supportedRxAntenna;
   5513 +  long  diversitySelectionRx ;
   5514 +
   5515 +  long  haveSupportedTxAntenna;
   5516 +  long  haveSupportedRxAntenna;
   5517 +  long  haveDiversitySelectionRx ;
   5518 +
   5519 +} nAl, *al = &nAl;
   5520 +
   5521 +static avList_t alList;
   5522 +
   5523 +/****************************************************************************
   5524 +*                    dot11SupportedDataRatesTxTable                         *
   5525 +****************************************************************************/
   5526 +static struct rtTbl_data {
   5527 +
   5528 +  char  UID       [ RT_UID_LEN + 1 ];
   5529 +  char  ifName    [ IFNAME_LEN + 1 ];
   5530 +
   5531 +  long  ifIndex;                                    // ifindex of card
   5532 +  long  supportedDataRatesTxIndex;
   5533 +
   5534 +  long  supportedDataRatesTxValue;
   5535 +  long  haveSupportedDataRatesTxValue;
   5536 +
   5537 +} nRt, *rt = &nRt;
   5538 +
   5539 +static avList_t rtList;
   5540 +
   5541 +/****************************************************************************
   5542 +*                    dot11SupportedDataRatesRxTable                         *
   5543 +****************************************************************************/
   5544 +static struct rrTbl_data {
   5545 +
   5546 +  char  UID       [ RR_UID_LEN + 1 ];
   5547 +  char  ifName    [ IFNAME_LEN + 1 ];
   5548 +
   5549 +  long  ifIndex;                                    // ifindex of card
   5550 +  long  supportedDataRatesRxIndex;
   5551 +
   5552 +  long  supportedDataRatesRxValue;
   5553 +  long  haveSupportedDataRatesRxValue;
   5554 +
   5555 +} nRr, *rr = &nRr;
   5556 +
   5557 +static avList_t rrList;
   5558 +
   5559 +/****************************************************************************
   5560 +*                       Wireless Extensions Structures                      *
   5561 +****************************************************************************/
   5562 +static long wepCurrentKey;
   5563 +static long haveWepCurrentKey;
   5564 +static struct wepTbl_data {
   5565 +
   5566 +  long len;
   5567 +  char key [ WEP_STR_LEN + 1 ];
   5568 +  long haveKey;
   5569 +
   5570 +} wep[4];
   5571 +
   5572 +/****************************************************************************
   5573 +*                                                                           *
   5574 +****************************************************************************/
   5575 +config_require(util_funcs)
   5576 +
   5577 +/* function prototypes */
   5578 +
   5579 +void   init_ieee802dot11 ( void );
   5580 +FindVarMethod var_ieee802dot11;
   5581 +FindVarMethod var_dot11StationConfigTable;
   5582 +FindVarMethod var_dot11AuthenticationAlgorithmsTable;
   5583 +FindVarMethod var_dot11WEPDefaultKeysTable;
   5584 +FindVarMethod var_dot11WEPKeyMappingsTable;
   5585 +FindVarMethod var_dot11PrivacyTable;
   5586 +FindVarMethod var_dot11OperationTable;
   5587 +FindVarMethod var_dot11CountersTable;
   5588 +FindVarMethod var_dot11GroupAddressesTable;
   5589 +FindVarMethod var_dot11ResourceInfoTable;
   5590 +FindVarMethod var_dot11PhyOperationTable;
   5591 +FindVarMethod var_dot11PhyAntennaTable;
   5592 +FindVarMethod var_dot11PhyTxPowerTable;
   5593 +FindVarMethod var_dot11PhyFHSSTable;
   5594 +FindVarMethod var_dot11PhyDSSSTable;
   5595 +FindVarMethod var_dot11PhyIRTable;
   5596 +FindVarMethod var_dot11RegDomainsSupportedTable;
   5597 +FindVarMethod var_dot11AntennasListTable;
   5598 +FindVarMethod var_dot11SupportedDataRatesTxTable;
   5599 +FindVarMethod var_dot11SupportedDataRatesRxTable;
   5600 +
   5601 +WriteMethod write_dot11StationID;
   5602 +WriteMethod write_dot11MediumOccupancyLimit;
   5603 +WriteMethod write_dot11CFPPeriod;
   5604 +WriteMethod write_dot11CFPMaxDuration;
   5605 +WriteMethod write_dot11AuthenticationResponseTimeOut;
   5606 +WriteMethod write_dot11PowerManagementMode;
   5607 +WriteMethod write_dot11DesiredSSID;
   5608 +WriteMethod write_dot11DesiredBSSType;
   5609 +WriteMethod write_dot11OperationalRateSet;
   5610 +WriteMethod write_dot11BeaconPeriod;
   5611 +WriteMethod write_dot11DTIMPeriod;
   5612 +WriteMethod write_dot11AssociationResponseTimeOut;
   5613 +WriteMethod write_dot11AuthenticationAlgorithmsEnable;
   5614 +WriteMethod write_dot11WEPDefaultKeyValue;
   5615 +WriteMethod write_dot11WEPKeyMappingAddress;
   5616 +WriteMethod write_dot11WEPKeyMappingWEPOn;
   5617 +WriteMethod write_dot11WEPKeyMappingValue;
   5618 +WriteMethod write_dot11WEPKeyMappingStatus;
   5619 +WriteMethod write_dot11PrivacyInvoked;
   5620 +WriteMethod write_dot11WEPDefaultKeyID;
   5621 +WriteMethod write_dot11WEPKeyMappingLength;
   5622 +WriteMethod write_dot11ExcludeUnencrypted;
   5623 +WriteMethod write_dot11RTSThreshold;
   5624 +WriteMethod write_dot11ShortRetryLimit;
   5625 +WriteMethod write_dot11LongRetryLimit;
   5626 +WriteMethod write_dot11FragmentationThreshold;
   5627 +WriteMethod write_dot11MaxTransmitMSDULifetime;
   5628 +WriteMethod write_dot11MaxReceiveLifetime;
   5629 +WriteMethod write_dot11Address;
   5630 +WriteMethod write_dot11GroupAddressesStatus;
   5631 +WriteMethod write_dot11CurrentRegDomain;
   5632 +WriteMethod write_dot11CurrentTxAntenna;
   5633 +WriteMethod write_dot11CurrentRxAntenna;
   5634 +WriteMethod write_dot11CurrentTxPowerLevel;
   5635 +WriteMethod write_dot11CurrentChannelNumber;
   5636 +WriteMethod write_dot11CurrentDwellTime;
   5637 +WriteMethod write_dot11CurrentSet;
   5638 +WriteMethod write_dot11CurrentPattern;
   5639 +WriteMethod write_dot11CurrentIndex;
   5640 +WriteMethod write_dot11CurrentChannel;
   5641 +WriteMethod write_dot11CurrentCCAMode;
   5642 +WriteMethod write_dot11EDThreshold;
   5643 +WriteMethod write_dot11CCAWatchdogTimerMax;
   5644 +WriteMethod write_dot11CCAWatchdogCountMax;
   5645 +WriteMethod write_dot11CCAWatchdogTimerMin;
   5646 +WriteMethod write_dot11CCAWatchdogCountMin;
   5647 +WriteMethod write_dot11SupportedTxAntenna;
   5648 +WriteMethod write_dot11SupportedRxAntenna;
   5649 +WriteMethod write_dot11DiversitySelectionRx;
   5650 +
   5651 +#endif /* _MIBGROUP_IEEE802DOT11_H */
   5652 --- /dev/null
   5653 +++ b/agent/mibgroup/iwlib.h
   5654 @@ -0,0 +1,502 @@
   5655 +/*
   5656 + *	Wireless Tools
   5657 + *
   5658 + *		Jean II - HPLB 97->99 - HPL 99->02
   5659 + *
   5660 + * Common header for the Wireless Extension library...
   5661 + *
   5662 + * This file is released under the GPL license.
   5663 + *     Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
   5664 + */
   5665 +
   5666 +#ifndef IWLIB_H
   5667 +#define IWLIB_H
   5668 +
   5669 +/*#include "CHANGELOG.h"*/
   5670 +
   5671 +/***************************** INCLUDES *****************************/
   5672 +
   5673 +/* Standard headers */
   5674 +#include <sys/types.h>
   5675 +#include <sys/ioctl.h>
   5676 +#include <stdio.h>
   5677 +#include <math.h>
   5678 +#include <errno.h>
   5679 +#include <fcntl.h>
   5680 +#include <ctype.h>
   5681 +#include <stdlib.h>
   5682 +#include <string.h>
   5683 +#include <unistd.h>
   5684 +#include <netdb.h>		/* gethostbyname, getnetbyname */
   5685 +#include <net/ethernet.h>	/* struct ether_addr */
   5686 +#include <sys/time.h>		/* struct timeval */
   5687 +#include <unistd.h>
   5688 +
   5689 +/* This is our header selection. Try to hide the mess and the misery :-(
   5690 + * Don't look, you would go blind ;-) */
   5691 +
   5692 +#ifndef LINUX_VERSION_CODE
   5693 +#include <linux/version.h>
   5694 +#endif
   5695 +
   5696 +/* Kernel headers 2.4.X + Glibc 2.2 - Mandrake 8.0, Debian 2.3, RH 7.1
   5697 + * Kernel headers 2.2.X + Glibc 2.2 - Slackware 8.0 */
   5698 +#if defined(__GLIBC__) \
   5699 +    && __GLIBC__ == 2 \
   5700 +    && __GLIBC_MINOR__ >= 2 \
   5701 +    && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
   5702 +//#define GLIBC22_HEADERS
   5703 +#define GENERIC_HEADERS
   5704 +
   5705 +/* Kernel headers 2.4.X + Glibc 2.1 - Debian 2.2 upgraded, RH 7.0
   5706 + * Kernel headers 2.2.X + Glibc 2.1 - Debian 2.2, RH 6.1 */
   5707 +#elif defined(__GLIBC__) \
   5708 +      && __GLIBC__ == 2 \
   5709 +      && __GLIBC_MINOR__ == 1 \
   5710 +      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
   5711 +//#define GLIBC_HEADERS
   5712 +#define GENERIC_HEADERS
   5713 +
   5714 +/* Kernel headers 2.2.X + Glibc 2.0 - Debian 2.1 */
   5715 +#elif defined(__GLIBC__) \
   5716 +      && __GLIBC__ == 2 \
   5717 +      && __GLIBC_MINOR__ == 0 \
   5718 +      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \
   5719 +      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
   5720 +#define GLIBC_HEADERS
   5721 +#define KLUDGE_HEADERS
   5722 +
   5723 +/* Note : is it really worth supporting kernel 2.0.X, knowing that
   5724 + * we require WE v9, which is only available in 2.2.X and higher ?
   5725 + * I guess one could use 2.0.x with an upgraded wireless.h... */
   5726 +
   5727 +/* Kernel headers 2.0.X + Glibc 2.0 - Debian 2.0, RH 5 */
   5728 +#elif defined(__GLIBC__) \
   5729 +      && __GLIBC__ == 2 \
   5730 +      && __GLIBC_MINOR__ == 0 \
   5731 +      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) \
   5732 +      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0)
   5733 +#define GLIBC_HEADERS
   5734 +
   5735 +/* Kernel headers 2.0.X + libc5 - old systems */
   5736 +#elif defined(_LINUX_C_LIB_VERSION_MAJOR) \
   5737 +      && _LINUX_C_LIB_VERSION_MAJOR == 5 \
   5738 +      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \
   5739 +      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
   5740 +#define LIBC5_HEADERS
   5741 +
   5742 +/* Unsupported combination */
   5743 +#else
   5744 +#error "Your kernel/libc combination is not supported"
   5745 +#endif
   5746 +
   5747 +#ifdef GENERIC_HEADERS 
   5748 +/* Proposed by Dr. Michael Rietz <rietz@mail.amps.de>, 27.3.2 */
   5749 +/* If this works for all, it might be more stable on the long term - Jean II */
   5750 +#include <net/if_arp.h>		/* For ARPHRD_ETHER */
   5751 +#include <sys/socket.h>		/* For AF_INET & struct sockaddr */
   5752 +#include <netinet/in.h>         /* For struct sockaddr_in */
   5753 +#include <netinet/if_ether.h>
   5754 +#endif /* GENERIC_HEADERS */    
   5755 +
   5756 +#ifdef GLIBC22_HEADERS 
   5757 +/* Added by Ross G. Miller <Ross_Miller@baylor.edu>, 3/28/01 */
   5758 +#include <linux/if_arp.h> 	/* For ARPHRD_ETHER */
   5759 +#include <linux/socket.h>	/* For AF_INET & struct sockaddr */
   5760 +#include <sys/socket.h>
   5761 +#endif /* GLIBC22_HEADERS */    
   5762 +
   5763 +#ifdef KLUDGE_HEADERS
   5764 +#include <socketbits.h>
   5765 +#endif	/* KLUDGE_HEADERS */
   5766 +
   5767 +#ifdef GLIBC_HEADERS
   5768 +#include <linux/if_arp.h>	/* For ARPHRD_ETHER */
   5769 +#include <linux/socket.h>	/* For AF_INET & struct sockaddr */
   5770 +#include <linux/in.h>		/* For struct sockaddr_in */
   5771 +#endif	/* KLUDGE_HEADERS || GLIBC_HEADERS */
   5772 +
   5773 +#ifdef LIBC5_HEADERS
   5774 +#include <sys/socket.h>		/* For AF_INET & struct sockaddr & socket() */
   5775 +#include <linux/if_arp.h>	/* For ARPHRD_ETHER */
   5776 +#include <linux/in.h>		/* For struct sockaddr_in */
   5777 +#endif	/* LIBC5_HEADERS */
   5778 +
   5779 +/* Those 3 headers were previously included in wireless.h */
   5780 +#include <linux/types.h>		/* for "caddr_t" et al		*/
   5781 +#include <linux/socket.h>		/* for "struct sockaddr" et al	*/
   5782 +#include <linux/if.h>			/* for IFNAMSIZ and co... */
   5783 +
   5784 +#ifdef WEXT_HEADER
   5785 +/* Private copy of Wireless extensions */
   5786 +#include WEXT_HEADER
   5787 +#else	/* !WEXT_HEADER */
   5788 +/* System wide Wireless extensions */
   5789 +#include <linux/wireless.h>
   5790 +#endif	/* !WEXT_HEADER */
   5791 +
   5792 +#ifdef __cplusplus
   5793 +extern "C" {
   5794 +#endif
   5795 +
   5796 +/****************************** DEBUG ******************************/
   5797 +
   5798 +
   5799 +/************************ CONSTANTS & MACROS ************************/
   5800 +
   5801 +/* Paths */
   5802 +#define PROC_NET_WIRELESS	"/proc/net/wireless"
   5803 +#define PROC_NET_DEV		"/proc/net/dev"
   5804 +
   5805 +/* Some useful constants */
   5806 +#define KILO	1e3
   5807 +#define MEGA	1e6
   5808 +#define GIGA	1e9
   5809 +/* For doing log10/exp10 without libm */
   5810 +#define LOG10_MAGIC	1.25892541179
   5811 +
   5812 +/* Backward compatibility for Wireless Extension 9 */
   5813 +#ifndef IW_POWER_MODIFIER
   5814 +#define IW_POWER_MODIFIER	0x000F	/* Modify a parameter */
   5815 +#define IW_POWER_MIN		0x0001	/* Value is a minimum  */
   5816 +#define IW_POWER_MAX		0x0002	/* Value is a maximum */
   5817 +#define IW_POWER_RELATIVE	0x0004	/* Value is not in seconds/ms/us */
   5818 +#endif /* IW_POWER_MODIFIER */
   5819 +
   5820 +#ifndef IW_ENCODE_NOKEY
   5821 +#define IW_ENCODE_NOKEY         0x0800  /* Key is write only, so not here */
   5822 +#define IW_ENCODE_MODE		0xF000	/* Modes defined below */
   5823 +#endif /* IW_ENCODE_NOKEY */
   5824 +#ifndef IW_ENCODE_TEMP
   5825 +#define IW_ENCODE_TEMP		0x0400  /* Temporary key */
   5826 +#endif /* IW_ENCODE_TEMP */
   5827 +
   5828 +/* More backward compatibility */
   5829 +#ifndef SIOCSIWCOMMIT
   5830 +#define SIOCSIWCOMMIT	SIOCSIWNAME
   5831 +#endif /* SIOCSIWCOMMIT */
   5832 +
   5833 +/****************************** TYPES ******************************/
   5834 +
   5835 +/* Shortcuts */
   5836 +typedef struct iw_statistics	iwstats;
   5837 +typedef struct iw_range		iwrange;
   5838 +typedef struct iw_param		iwparam;
   5839 +typedef struct iw_freq		iwfreq;
   5840 +typedef struct iw_quality	iwqual;
   5841 +typedef struct iw_priv_args	iwprivargs;
   5842 +typedef struct sockaddr		sockaddr;
   5843 +
   5844 +/* Structure for storing all wireless information for each device
   5845 + * This is pretty exhaustive... */
   5846 +typedef struct wireless_info
   5847 +{
   5848 +  char		name[IFNAMSIZ + 1];	/* Wireless/protocol name */
   5849 +  int		has_nwid;
   5850 +  iwparam	nwid;			/* Network ID */
   5851 +  int		has_freq;
   5852 +  double	freq;			/* Frequency/channel */
   5853 +  int		has_sens;
   5854 +  iwparam	sens;			/* sensitivity */
   5855 +  int		has_key;
   5856 +  unsigned char	key[IW_ENCODING_TOKEN_MAX];	/* Encoding key used */
   5857 +  int		key_size;		/* Number of bytes */
   5858 +  int		key_flags;		/* Various flags */
   5859 +  int		has_essid;
   5860 +  int		essid_on;
   5861 +  char		essid[IW_ESSID_MAX_SIZE + 1];	/* ESSID (extended network) */
   5862 +  int		has_nickname;
   5863 +  char		nickname[IW_ESSID_MAX_SIZE + 1]; /* NickName */
   5864 +  int		has_ap_addr;
   5865 +  sockaddr	ap_addr;		/* Access point address */
   5866 +  int		has_bitrate;
   5867 +  iwparam	bitrate;		/* Bit rate in bps */
   5868 +  int		has_rts;
   5869 +  iwparam	rts;			/* RTS threshold in bytes */
   5870 +  int		has_frag;
   5871 +  iwparam	frag;			/* Fragmentation threshold in bytes */
   5872 +  int		has_mode;
   5873 +  int		mode;			/* Operation mode */
   5874 +  int		has_power;
   5875 +  iwparam	power;			/* Power management parameters */
   5876 +  int		has_txpower;
   5877 +  iwparam	txpower;		/* Transmit Power in dBm */
   5878 +  int		has_retry;
   5879 +  iwparam	retry;			/* Retry limit or lifetime */
   5880 +
   5881 +  /* Stats */
   5882 +  iwstats	stats;
   5883 +  int		has_stats;
   5884 +  iwrange	range;
   5885 +  int		has_range;
   5886 +} wireless_info;
   5887 +
   5888 +/* Structure for storing all wireless information for each device
   5889 + * This is a cut down version of the one above, containing only
   5890 + * the things *truly* needed to configure a card.
   5891 + * Don't add other junk, I'll remove it... */
   5892 +typedef struct wireless_config
   5893 +{
   5894 +  char		name[IFNAMSIZ + 1];	/* Wireless/protocol name */
   5895 +  int		has_nwid;
   5896 +  iwparam	nwid;			/* Network ID */
   5897 +  int		has_freq;
   5898 +  double	freq;			/* Frequency/channel */
   5899 +  int		has_key;
   5900 +  unsigned char	key[IW_ENCODING_TOKEN_MAX];	/* Encoding key used */
   5901 +  int		key_size;		/* Number of bytes */
   5902 +  int		key_flags;		/* Various flags */
   5903 +  int		has_essid;
   5904 +  int		essid_on;
   5905 +  char		essid[IW_ESSID_MAX_SIZE + 1];	/* ESSID (extended network) */
   5906 +  int		has_mode;
   5907 +  int		mode;			/* Operation mode */
   5908 +} wireless_config;
   5909 +
   5910 +typedef struct stream_descr
   5911 +{
   5912 +  char *	end;		/* End of the stream */
   5913 +  char *	current;	/* Current event in stream of events */
   5914 +  char *	value;		/* Current value in event */
   5915 +} stream_descr;
   5916 +
   5917 +/* Prototype for handling display of each single interface on the
   5918 + * system - see iw_enum_devices() */
   5919 +typedef int (*iw_enum_handler)(int	skfd,
   5920 +			       char *	ifname,
   5921 +			       char *	args[],
   5922 +			       int	count);
   5923 +
   5924 +/**************************** PROTOTYPES ****************************/
   5925 +/*
   5926 + * All the functions in iwcommon.c
   5927 + */
   5928 +
   5929 +/* ---------------------- SOCKET SUBROUTINES -----------------------*/
   5930 +int
   5931 +	iw_sockets_open(void);
   5932 +void
   5933 +	iw_enum_devices(int		skfd,
   5934 +			iw_enum_handler fn,
   5935 +			char *		args[],
   5936 +			int		count);
   5937 +/* --------------------- WIRELESS SUBROUTINES ----------------------*/
   5938 +int
   5939 +	iw_get_range_info(int		skfd,
   5940 +			  char *	ifname,
   5941 +			  iwrange *	range);
   5942 +int
   5943 +	iw_print_version_info(char *	toolname);
   5944 +int
   5945 +	iw_get_priv_info(int		skfd,
   5946 +			 char *		ifname,
   5947 +			 iwprivargs *	priv,
   5948 +			 int		maxpriv);
   5949 +int
   5950 +	iw_get_basic_config(int			skfd,
   5951 +			    char *		ifname,
   5952 +			    wireless_config *	info);
   5953 +int
   5954 +	iw_set_basic_config(int			skfd,
   5955 +			    char *		ifname,
   5956 +			    wireless_config *	info);
   5957 +/* --------------------- PROTOCOL SUBROUTINES --------------------- */
   5958 +int
   5959 +	iw_protocol_compare(char *	protocol1,
   5960 +			    char *	protocol2);
   5961 +/* -------------------- FREQUENCY SUBROUTINES --------------------- */
   5962 +void
   5963 +	iw_float2freq(double	in,
   5964 +		   iwfreq *	out);
   5965 +double
   5966 +	iw_freq2float(iwfreq *	in);
   5967 +void
   5968 +	iw_print_freq(char *	buffer,
   5969 +		      double	freq);
   5970 +int
   5971 +	iw_freq_to_channel(double		freq,
   5972 +			   struct iw_range *	range);
   5973 +void
   5974 +	iw_print_bitrate(char *	buffer,
   5975 +			 int	bitrate);
   5976 +/* ---------------------- POWER SUBROUTINES ----------------------- */
   5977 +int
   5978 +	iw_dbm2mwatt(int	in);
   5979 +int
   5980 +	iw_mwatt2dbm(int	in);
   5981 +/* -------------------- STATISTICS SUBROUTINES -------------------- */
   5982 +int
   5983 +	iw_get_stats(int	skfd,
   5984 +		     char *	ifname,
   5985 +		     iwstats *	stats);
   5986 +void
   5987 +	iw_print_stats(char *		buffer,
   5988 +		       iwqual *		qual,
   5989 +		       iwrange *	range,
   5990 +		       int		has_range);
   5991 +/* --------------------- ENCODING SUBROUTINES --------------------- */
   5992 +void
   5993 +	iw_print_key(char *		buffer,
   5994 +		     unsigned char *	key,
   5995 +		     int		key_size,
   5996 +		     int		key_flags);
   5997 +int
   5998 +	iw_in_key(char *		input,
   5999 +		  unsigned char *	key);
   6000 +int
   6001 +	iw_in_key_full(int		skfd,
   6002 +		       char *		ifname,
   6003 +		       char *		input,
   6004 +		       unsigned char *	key,
   6005 +		       __u16 *		flags);
   6006 +/* ----------------- POWER MANAGEMENT SUBROUTINES ----------------- */
   6007 +void
   6008 +	iw_print_pm_value(char *	buffer,
   6009 +			  int		value,
   6010 +			  int		flags);
   6011 +void
   6012 +	iw_print_pm_mode(char *		buffer,
   6013 +			 int		flags);
   6014 +/* --------------- RETRY LIMIT/LIFETIME SUBROUTINES --------------- */
   6015 +#if WIRELESS_EXT > 10
   6016 +void
   6017 +	iw_print_retry_value(char *	buffer,
   6018 +			     int	value,
   6019 +			     int	flags);
   6020 +#endif
   6021 +/* ----------------------- TIME SUBROUTINES ----------------------- */
   6022 +void
   6023 +	iw_print_timeval(char *			buffer,
   6024 +			 const struct timeval *	time);
   6025 +/* --------------------- ADDRESS SUBROUTINES ---------------------- */
   6026 +int
   6027 +	iw_check_mac_addr_type(int	skfd,
   6028 +			       char *	ifname);
   6029 +int
   6030 +	iw_check_if_addr_type(int	skfd,
   6031 +			      char *	ifname);
   6032 +#if 0
   6033 +int
   6034 +	iw_check_addr_type(int		skfd,
   6035 +			   char *	ifname);
   6036 +#endif
   6037 +void
   6038 +	iw_ether_ntop(const struct ether_addr* eth, char* buf);
   6039 +char*
   6040 +	iw_ether_ntoa(const struct ether_addr* eth);
   6041 +int
   6042 +	iw_ether_aton(const char* bufp, struct ether_addr* eth);
   6043 +int
   6044 +	iw_in_inet(char *bufp, struct sockaddr *sap);
   6045 +int
   6046 +	iw_in_addr(int			skfd,
   6047 +		   char *		ifname,
   6048 +		   char *		bufp,
   6049 +		   struct sockaddr *	sap);
   6050 +/* ----------------------- MISC SUBROUTINES ------------------------ */
   6051 +int
   6052 +	iw_get_priv_size(int		args);
   6053 +
   6054 +#if WIRELESS_EXT > 13
   6055 +/* ---------------------- EVENT SUBROUTINES ---------------------- */
   6056 +void
   6057 +	iw_init_event_stream(struct stream_descr *	stream,
   6058 +			     char *			data,
   6059 +			     int			len);
   6060 +int
   6061 +	iw_extract_event_stream(struct stream_descr *	stream,
   6062 +				struct iw_event *	iwe);
   6063 +#endif /* WIRELESS_EXT > 13 */
   6064 +
   6065 +/**************************** VARIABLES ****************************/
   6066 +
   6067 +extern const char * const	iw_operation_mode[];
   6068 +#define IW_NUM_OPER_MODE	7
   6069 +
   6070 +/************************* INLINE FUNTIONS *************************/
   6071 +/*
   6072 + * Functions that are so simple that it's more efficient inlining them
   6073 + */
   6074 +
   6075 +/*
   6076 + * Note : I've defined wrapper for the ioctl request so that
   6077 + * it will be easier to migrate to other kernel API if needed
   6078 + */
   6079 +
   6080 +/*------------------------------------------------------------------*/
   6081 +/*
   6082 + * Wrapper to push some Wireless Parameter in the driver
   6083 + */
   6084 +static inline int
   6085 +iw_set_ext(int			skfd,		/* Socket to the kernel */
   6086 +	   char *		ifname,		/* Device name */
   6087 +	   int			request,	/* WE ID */
   6088 +	   struct iwreq *	pwrq)		/* Fixed part of the request */
   6089 +{
   6090 +  /* Set device name */
   6091 +  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
   6092 +  /* Do the request */
   6093 +  return(ioctl(skfd, request, pwrq));
   6094 +}
   6095 +
   6096 +/*------------------------------------------------------------------*/
   6097 +/*
   6098 + * Wrapper to extract some Wireless Parameter out of the driver
   6099 + */
   6100 +static inline int
   6101 +iw_get_ext(int			skfd,		/* Socket to the kernel */
   6102 +	   char *		ifname,		/* Device name */
   6103 +	   int			request,	/* WE ID */
   6104 +	   struct iwreq *	pwrq)		/* Fixed part of the request */
   6105 +{
   6106 +  /* Set device name */
   6107 +  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
   6108 +  /* Do the request */
   6109 +  return(ioctl(skfd, request, pwrq));
   6110 +}
   6111 +
   6112 +/*------------------------------------------------------------------*/
   6113 +/* Backwards compatibility
   6114 + * Actually, those form are much easier to use when dealing with
   6115 + * struct sockaddr... */
   6116 +static inline char*
   6117 +iw_pr_ether(char* bufp, const unsigned char* addr)
   6118 +{
   6119 +  iw_ether_ntop((const struct ether_addr *) addr, bufp);
   6120 +  return bufp;
   6121 +}
   6122 +/* Backwards compatibility */
   6123 +static inline int
   6124 +iw_in_ether(const char *bufp, struct sockaddr *sap)
   6125 +{
   6126 +  sap->sa_family = ARPHRD_ETHER;
   6127 +  return iw_ether_aton(bufp, (struct ether_addr *) sap->sa_data) ? 0 : -1;
   6128 +}
   6129 +
   6130 +/*------------------------------------------------------------------*/
   6131 +/*
   6132 + * Create an Ethernet broadcast address
   6133 + */
   6134 +static inline void
   6135 +iw_broad_ether(struct sockaddr *sap)
   6136 +{
   6137 +  sap->sa_family = ARPHRD_ETHER;
   6138 +  memset((char *) sap->sa_data, 0xFF, ETH_ALEN);
   6139 +}
   6140 +
   6141 +/*------------------------------------------------------------------*/
   6142 +/*
   6143 + * Create an Ethernet NULL address
   6144 + */
   6145 +static inline void
   6146 +iw_null_ether(struct sockaddr *sap)
   6147 +{
   6148 +  sap->sa_family = ARPHRD_ETHER;
   6149 +  memset((char *) sap->sa_data, 0x00, ETH_ALEN);
   6150 +}
   6151 +
   6152 +#ifdef __cplusplus
   6153 +}
   6154 +#endif
   6155 +
   6156 +#endif	/* IWLIB_H */