--- net-snmp-5.1.2-orig/agent/mibgroup/ieee802dot11.c	1970-01-01 01:00:00.000000000 +0100
+++ net-snmp-5.1.2-5/agent/mibgroup/ieee802dot11.c	2005-03-13 16:17:21.000000000 +0100
@@ -0,0 +1,4915 @@
+/****************************************************************************
+*                                                                           *
+*  File Name:           ieee802dot11.c                                      *
+*  Used By:                                                                 *
+*                                                                           *
+*  Operating System:                                                        *
+*  Purpose:                                                                 *
+*                                                                           *
+*  Comments:                                                                *
+*                                                                           *
+*  Author:              Larry Simmons                                       *
+*                       lsimmons@avantcom.com                               *
+*                       www.avantcom.com                                    *
+*                                                                           *
+*  Creation Date:       09/02/03                                            *
+*                                                                           *
+*   Ver    Date   Inits Modification                                        *
+*  ----- -------- ----- ------------                                        *
+*  0.0.1 09/02/03  LRS  created                                             *
+*  0.0.2 09/24/03  LRS  wouldn't build after fresh ./configure              *
+****************************************************************************/
+/****************************************************************************
+*                               Includes                                    *
+****************************************************************************/
+#include <net-snmp/net-snmp-config.h>
+#include <net-snmp/net-snmp-includes.h>
+#include <net-snmp/agent/net-snmp-agent-includes.h>
+#include "ieee802dot11.h"
+#include "iwlib.h"
+
+/****************************************************************************
+*                                Defines                                    *
+****************************************************************************/
+#define DISPLAYWIEXT                        // display wireless ext info
+#define TABLE_SIZE   1
+//#define MINLOADFREQ 15                    // min reload frequency in seconds
+#define MINLOADFREQ 5                       // min reload frequency in seconds      // for testing
+#define PROC_NET_DEV      "/proc/net/dev"
+#define PROC_NET_WIRELESS "/proc/net/wireless"
+
+#ifndef UCHAR
+  typedef unsigned char UCHAR;
+#endif
+
+/****************************************************************************
+*                            Private Functions                              *
+****************************************************************************/
+static void loadTables();
+static void loadWiExt ( int, char *, struct wireless_info * );
+static void load80211Structs ( int, char *, struct wireless_info * );
+static void initStructs();
+
+// Wireless Extensions Specific Functions
+static void loadWiExtTo80211Structs ( int, char *, struct wireless_info * );
+static void displayWiExt ( struct wireless_info );
+
+// Linked List Functions
+static void addList ( char *, char *, int );
+static void initLists();                    // initialize all the linked lists
+static void flushLists();                   // flush all the linked lists
+static void flushList ( char * );           // flush a single linked list
+
+// Utility Functions
+static int  openSocket ( void );
+static int  mWatt2dbm ( int );
+static char *htob ( char * );
+static int  hasChanged ( char *, int );
+
+/****************************************************************************
+*                            Private Variables                              *
+****************************************************************************/
+static unsigned long lastLoad = 0;          // ET in secs at last table load
+
+static struct avNode *lastNode, *newNode, *np;
+
+/****************************************************************************
+*                            External Functions                             *
+****************************************************************************/
+
+/****************************************************************************
+*   ieee802dot11_variables_oid:                                             *
+*       this is the top level oid that we want to register under.  This     *
+*       is essentially a prefix, with the suffix appearing in the           *
+*       variable below.                                                     *
+****************************************************************************/
+oid ieee802dot11_variables_oid[] = { 1,2,840,10036 };
+
+/****************************************************************************
+*   variable7 ieee802dot11_variables:                                       *
+*     this variable defines function callbacks and type return information  *
+*     for the ieee802dot11 mib section                                      *
+****************************************************************************/
+struct variable7 ieee802dot11_variables[] = {
+/*  magic number        , variable type , ro/rw , callback fn  , L, oidsuffix */
+#define   DOT11STATIONID        3
+  { DOT11STATIONID      , ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,1 } },
+#define   DOT11MEDIUMOCCUPANCYLIMIT  4
+  { DOT11MEDIUMOCCUPANCYLIMIT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,2 } },
+#define   DOT11CFPOLLABLE       5
+  { DOT11CFPOLLABLE     , ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,3 } },
+#define   DOT11CFPPERIOD        6
+  { DOT11CFPPERIOD      , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,4 } },
+#define   DOT11CFPMAXDURATION   7
+  { DOT11CFPMAXDURATION , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,5 } },
+#define   DOT11AUTHENTICATIONRESPONSETIMEOUT  8
+  { DOT11AUTHENTICATIONRESPONSETIMEOUT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,6 } },
+#define   DOT11PRIVACYOPTIONIMPLEMENTED  9
+  { DOT11PRIVACYOPTIONIMPLEMENTED, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,7 } },
+#define   DOT11POWERMANAGEMENTMODE  10
+  { DOT11POWERMANAGEMENTMODE, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,8 } },
+#define   DOT11DESIREDSSID      11
+  { DOT11DESIREDSSID    , ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,9 } },
+#define   DOT11DESIREDBSSTYPE   12
+  { DOT11DESIREDBSSTYPE , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,10 } },
+#define   DOT11OPERATIONALRATESET  13
+  { DOT11OPERATIONALRATESET, ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,11 } },
+#define   DOT11BEACONPERIOD     14
+  { DOT11BEACONPERIOD   , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,12 } },
+#define   DOT11DTIMPERIOD       15
+  { DOT11DTIMPERIOD     , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,13 } },
+#define   DOT11ASSOCIATIONRESPONSETIMEOUT  16
+  { DOT11ASSOCIATIONRESPONSETIMEOUT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,14 } },
+#define   DOT11DISASSOCIATEREASON  17
+  { DOT11DISASSOCIATEREASON, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,15 } },
+#define   DOT11DISASSOCIATESTATION  18
+  { DOT11DISASSOCIATESTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,16 } },
+#define   DOT11DEAUTHENTICATEREASON  19
+  { DOT11DEAUTHENTICATEREASON, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,17 } },
+#define   DOT11DEAUTHENTICATESTATION  20
+  { DOT11DEAUTHENTICATESTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,18 } },
+#define   DOT11AUTHENTICATEFAILSTATUS  21
+  { DOT11AUTHENTICATEFAILSTATUS, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,19 } },
+#define   DOT11AUTHENTICATEFAILSTATION  22
+  { DOT11AUTHENTICATEFAILSTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,20 } },
+
+#define   DOT11AUTHENTICATIONALGORITHM  26
+  { DOT11AUTHENTICATIONALGORITHM, ASN_INTEGER   , RONLY , var_dot11AuthenticationAlgorithmsTable, 4, { 1,2,1,2 } },
+#define   DOT11AUTHENTICATIONALGORITHMSENABLE  27
+  { DOT11AUTHENTICATIONALGORITHMSENABLE, ASN_INTEGER   , RWRITE, var_dot11AuthenticationAlgorithmsTable, 4, { 1,2,1,3 } },
+
+#define   DOT11WEPDEFAULTKEYVALUE  31
+  { DOT11WEPDEFAULTKEYVALUE, ASN_OCTET_STR , RWRITE, var_dot11WEPDefaultKeysTable, 4, { 1,3,1,2 } },
+
+#define   DOT11WEPKEYMAPPINGADDRESS  35
+  { DOT11WEPKEYMAPPINGADDRESS, ASN_OCTET_STR , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,2 } },
+#define   DOT11WEPKEYMAPPINGWEPON  36
+  { DOT11WEPKEYMAPPINGWEPON, ASN_INTEGER   , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,3 } },
+#define   DOT11WEPKEYMAPPINGVALUE  37
+  { DOT11WEPKEYMAPPINGVALUE, ASN_OCTET_STR , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,4 } },
+#define   DOT11WEPKEYMAPPINGSTATUS  38
+  { DOT11WEPKEYMAPPINGSTATUS, ASN_INTEGER   , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,5 } },
+
+#define   DOT11PRIVACYINVOKED   41
+  { DOT11PRIVACYINVOKED , ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,1 } },
+#define   DOT11WEPDEFAULTKEYID  42
+  { DOT11WEPDEFAULTKEYID, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,2 } },
+#define   DOT11WEPKEYMAPPINGLENGTH  43
+  { DOT11WEPKEYMAPPINGLENGTH, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,3 } },
+#define   DOT11EXCLUDEUNENCRYPTED  44
+  { DOT11EXCLUDEUNENCRYPTED, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,4 } },
+#define   DOT11WEPICVERRORCOUNT  45
+  { DOT11WEPICVERRORCOUNT, ASN_COUNTER   , RONLY , var_dot11PrivacyTable, 4, { 1,5,1,5 } },
+#define   DOT11WEPEXCLUDEDCOUNT  46
+  { DOT11WEPEXCLUDEDCOUNT, ASN_COUNTER   , RONLY , var_dot11PrivacyTable, 4, { 1,5,1,6 } },
+
+#define   DOT11MACADDRESS       49
+  { DOT11MACADDRESS     , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,1 } },
+#define   DOT11RTSTHRESHOLD     50
+  { DOT11RTSTHRESHOLD   , ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,2 } },
+#define   DOT11SHORTRETRYLIMIT  51
+  { DOT11SHORTRETRYLIMIT, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,3 } },
+#define   DOT11LONGRETRYLIMIT   52
+  { DOT11LONGRETRYLIMIT , ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,4 } },
+#define   DOT11FRAGMENTATIONTHRESHOLD  53
+  { DOT11FRAGMENTATIONTHRESHOLD, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,5 } },
+#define   DOT11MAXTRANSMITMSDULIFETIME  54
+  { DOT11MAXTRANSMITMSDULIFETIME, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,6 } },
+#define   DOT11MAXRECEIVELIFETIME  55
+  { DOT11MAXRECEIVELIFETIME, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,7 } },
+#define   DOT11MANUFACTURERID   56
+  { DOT11MANUFACTURERID , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,8 } },
+#define   DOT11PRODUCTID        57
+  { DOT11PRODUCTID      , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,9 } },
+
+#define   DOT11TRANSMITTEDFRAGMENTCOUNT  60
+  { DOT11TRANSMITTEDFRAGMENTCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,1 } },
+#define   DOT11MULTICASTTRANSMITTEDFRAMECOUNT  61
+  { DOT11MULTICASTTRANSMITTEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,2 } },
+#define   DOT11FAILEDCOUNT      62
+  { DOT11FAILEDCOUNT    , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,3 } },
+#define   DOT11RETRYCOUNT       63
+  { DOT11RETRYCOUNT     , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,4 } },
+#define   DOT11MULTIPLERETRYCOUNT  64
+  { DOT11MULTIPLERETRYCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,5 } },
+#define   DOT11FRAMEDUPLICATECOUNT  65
+  { DOT11FRAMEDUPLICATECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,6 } },
+#define   DOT11RTSSUCCESSCOUNT  66
+  { DOT11RTSSUCCESSCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,7 } },
+#define   DOT11RTSFAILURECOUNT  67
+  { DOT11RTSFAILURECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,8 } },
+#define   DOT11ACKFAILURECOUNT  68
+  { DOT11ACKFAILURECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,9 } },
+#define   DOT11RECEIVEDFRAGMENTCOUNT  69
+  { DOT11RECEIVEDFRAGMENTCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,10 } },
+#define   DOT11MULTICASTRECEIVEDFRAMECOUNT  70
+  { DOT11MULTICASTRECEIVEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,11 } },
+#define   DOT11FCSERRORCOUNT    71
+  { DOT11FCSERRORCOUNT  , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,12 } },
+#define   DOT11TRANSMITTEDFRAMECOUNT  72
+  { DOT11TRANSMITTEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,13 } },
+#define   DOT11WEPUNDECRYPTABLECOUNT  73
+  { DOT11WEPUNDECRYPTABLECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,14 } },
+
+#define   DOT11ADDRESS          77
+  { DOT11ADDRESS        , ASN_OCTET_STR , RWRITE, var_dot11GroupAddressesTable, 4, { 2,3,1,2 } },
+#define   DOT11GROUPADDRESSESSTATUS  78
+  { DOT11GROUPADDRESSESSTATUS, ASN_INTEGER   , RWRITE, var_dot11GroupAddressesTable, 4, { 2,3,1,3 } },
+
+#define   DOT11RESOURCETYPEIDNAME  79
+  { DOT11RESOURCETYPEIDNAME, ASN_OCTET_STR , RONLY , var_ieee802dot11, 3, { 3,1,1 } },
+#define   DOT11MANUFACTUREROUI  82
+  { DOT11MANUFACTUREROUI, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,1 } },
+#define   DOT11MANUFACTURERNAME  83
+  { DOT11MANUFACTURERNAME, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,2 } },
+#define   DOT11MANUFACTURERPRODUCTNAME  84
+  { DOT11MANUFACTURERPRODUCTNAME, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,3 } },
+#define   DOT11MANUFACTURERPRODUCTVERSION  85
+  { DOT11MANUFACTURERPRODUCTVERSION, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,4 } },
+
+#define   DOT11PHYTYPE          88
+  { DOT11PHYTYPE        , ASN_INTEGER   , RONLY , var_dot11PhyOperationTable, 4, { 4,1,1,1 } },
+#define   DOT11CURRENTREGDOMAIN  89
+  { DOT11CURRENTREGDOMAIN, ASN_INTEGER   , RWRITE, var_dot11PhyOperationTable, 4, { 4,1,1,2 } },
+#define   DOT11TEMPTYPE         90
+  { DOT11TEMPTYPE       , ASN_INTEGER   , RONLY , var_dot11PhyOperationTable, 4, { 4,1,1,3 } },
+#define   DOT11CURRENTTXANTENNA  93
+  { DOT11CURRENTTXANTENNA, ASN_INTEGER   , RWRITE, var_dot11PhyAntennaTable, 4, { 4,2,1,1 } },
+#define   DOT11DIVERSITYSUPPORT  94
+  { DOT11DIVERSITYSUPPORT, ASN_INTEGER   , RONLY , var_dot11PhyAntennaTable, 4, { 4,2,1,2 } },
+#define   DOT11CURRENTRXANTENNA  95
+  { DOT11CURRENTRXANTENNA, ASN_INTEGER   , RWRITE, var_dot11PhyAntennaTable, 4, { 4,2,1,3 } },
+#define   DOT11NUMBERSUPPORTEDPOWERLEVELS  98
+  { DOT11NUMBERSUPPORTEDPOWERLEVELS, ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,1 } },
+#define   DOT11TXPOWERLEVEL1    99
+  { DOT11TXPOWERLEVEL1  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,2 } },
+#define   DOT11TXPOWERLEVEL2    100
+  { DOT11TXPOWERLEVEL2  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,3 } },
+#define   DOT11TXPOWERLEVEL3    101
+  { DOT11TXPOWERLEVEL3  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,4 } },
+#define   DOT11TXPOWERLEVEL4    102
+  { DOT11TXPOWERLEVEL4  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,5 } },
+#define   DOT11TXPOWERLEVEL5    103
+  { DOT11TXPOWERLEVEL5  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,6 } },
+#define   DOT11TXPOWERLEVEL6    104
+  { DOT11TXPOWERLEVEL6  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,7 } },
+#define   DOT11TXPOWERLEVEL7    105
+  { DOT11TXPOWERLEVEL7  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,8 } },
+#define   DOT11TXPOWERLEVEL8    106
+  { DOT11TXPOWERLEVEL8  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,9 } },
+#define   DOT11CURRENTTXPOWERLEVEL  107
+  { DOT11CURRENTTXPOWERLEVEL, ASN_INTEGER   , RWRITE, var_dot11PhyTxPowerTable, 4, { 4,3,1,10 } },
+
+#define   DOT11HOPTIME          110
+  { DOT11HOPTIME        , ASN_INTEGER   , RONLY , var_dot11PhyFHSSTable, 4, { 4,4,1,1 } },
+#define   DOT11CURRENTCHANNELNUMBER  111
+  { DOT11CURRENTCHANNELNUMBER, ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,2 } },
+#define   DOT11MAXDWELLTIME     112
+  { DOT11MAXDWELLTIME   , ASN_INTEGER   , RONLY , var_dot11PhyFHSSTable, 4, { 4,4,1,3 } },
+#define   DOT11CURRENTDWELLTIME  113
+  { DOT11CURRENTDWELLTIME, ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,4 } },
+#define   DOT11CURRENTSET       114
+  { DOT11CURRENTSET     , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,5 } },
+#define   DOT11CURRENTPATTERN   115
+  { DOT11CURRENTPATTERN , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,6 } },
+#define   DOT11CURRENTINDEX     116
+  { DOT11CURRENTINDEX   , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,7 } },
+
+#define   DOT11CURRENTCHANNEL   119
+  { DOT11CURRENTCHANNEL , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,1 } },
+#define   DOT11CCAMODESUPPORTED  120
+  { DOT11CCAMODESUPPORTED, ASN_INTEGER   , RONLY , var_dot11PhyDSSSTable, 4, { 4,5,1,2 } },
+#define   DOT11CURRENTCCAMODE   121
+  { DOT11CURRENTCCAMODE , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,3 } },
+#define   DOT11EDTHRESHOLD      122
+  { DOT11EDTHRESHOLD    , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,4 } },
+
+#define   DOT11CCAWATCHDOGTIMERMAX  125
+  { DOT11CCAWATCHDOGTIMERMAX, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,1 } },
+#define   DOT11CCAWATCHDOGCOUNTMAX  126
+  { DOT11CCAWATCHDOGCOUNTMAX, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,2 } },
+#define   DOT11CCAWATCHDOGTIMERMIN  127
+  { DOT11CCAWATCHDOGTIMERMIN, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,3 } },
+#define   DOT11CCAWATCHDOGCOUNTMIN  128
+  { DOT11CCAWATCHDOGCOUNTMIN, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,4 } },
+
+#define   DOT11REGDOMAINSSUPPORTVALUE  132
+  { DOT11REGDOMAINSSUPPORTVALUE, ASN_INTEGER   , RONLY , var_dot11RegDomainsSupportedTable, 4, { 4,7,1,2 } },
+
+#define   DOT11SUPPORTEDTXANTENNA  136
+  { DOT11SUPPORTEDTXANTENNA, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,2 } },
+#define   DOT11SUPPORTEDRXANTENNA  137
+  { DOT11SUPPORTEDRXANTENNA, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,3 } },
+#define   DOT11DIVERSITYSELECTIONRX  138
+  { DOT11DIVERSITYSELECTIONRX, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,4 } },
+
+#define   DOT11SUPPORTEDDATARATESTXVALUE  142
+  { DOT11SUPPORTEDDATARATESTXVALUE, ASN_INTEGER   , RONLY , var_dot11SupportedDataRatesTxTable, 4, { 4,9,1,2 } },
+
+#define   DOT11SUPPORTEDDATARATESRXVALUE  146
+  { DOT11SUPPORTEDDATARATESRXVALUE, ASN_INTEGER   , RONLY , var_dot11SupportedDataRatesRxTable, 4, { 4,10,1,2 } },
+};
+// ( L = length of the oidsuffix )
+
+/****************************************************************************
+*                                                                           *
+*         init_ieee802dot11() - perform any required initialization         *
+*                                                                           *
+****************************************************************************/
+void init_ieee802dot11 ( void ) {
+
+  /* register ourselves with the agent to handle our mib tree */
+  REGISTER_MIB("ieee802dot11", ieee802dot11_variables, variable7,
+               ieee802dot11_variables_oid);
+
+  initLists();
+}
+
+/****************************************************************************
+*                                                                           *
+*    shutdown_ieee802dot11() - perform any required cleanup @ shutdown      *
+*                                                                           *
+****************************************************************************/
+void shutdown_ieee802dot11 ( void )
+{
+  flushLists();
+}
+
+/****************************************************************************
+*                                                                           *
+*   var_ieee802dot11() -                                                    *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_ieee802dot11 ( struct variable *vp, 
+                    oid     *name, 
+                    size_t  *length, 
+                    int     exact, 
+                    size_t  *var_len, 
+                    WriteMethod **write_method)
+{
+  loadTables();                                               
+
+  if ( header_generic ( vp, name, length, exact,var_len,write_method )
+                                  == MATCH_FAILED )
+    return NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11RESOURCETYPEIDNAME:
+      if ( !haveResourceTypeIDName )
+        return NULL;
+      *var_len = strlen ( resourceTypeIDName );
+      return ( UCHAR * ) resourceTypeIDName;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*  var_dot11StationConfigTable() - return a variable value from the table   *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11StationConfigTable ( struct variable *vp,
+                              oid     *name,
+                              size_t  *length,
+                              int     exact,
+                              size_t  *var_len,
+                              WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+  static char MACWork[17];
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &scList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    sc = ( struct scTbl_data * ) np->data;
+    rName[vp->namelen] = sc->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) || 
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+
+      switch ( vp->magic ) {      // found requested OID, now check for requested variable
+        case DOT11STATIONID: 
+          if ( sc->haveStationID                     ) found = TRUE; break;
+        case DOT11MEDIUMOCCUPANCYLIMIT:
+          if ( sc->haveMediumOccupancyLimit          ) found = TRUE; break;
+        case DOT11CFPOLLABLE:
+          if ( sc->haveCFPPollable                   ) found = TRUE; break;
+        case DOT11CFPPERIOD:
+          if ( sc->haveCFPPeriod                     ) found = TRUE; break;
+        case DOT11CFPMAXDURATION:
+          if ( sc->haveMaxDuration                   ) found = TRUE; break;
+        case DOT11AUTHENTICATIONRESPONSETIMEOUT:
+          if ( sc->haveAuthenticationResponseTimeOut ) found = TRUE; break;
+        case DOT11PRIVACYOPTIONIMPLEMENTED:
+          if ( sc->havePrivacyOptionImplemented      ) found = TRUE; break;
+        case DOT11POWERMANAGEMENTMODE:
+          if ( sc->havePowerManagementMode           ) found = TRUE; break;
+        case DOT11DESIREDSSID:
+          if ( sc->haveDesiredSSID                   ) found = TRUE; break;
+        case DOT11DESIREDBSSTYPE:
+          if ( sc->haveDesiredBSSType                ) found = TRUE; break;
+        case DOT11OPERATIONALRATESET:
+          if ( sc->haveOperationalRateSet            ) found = TRUE; break;
+        case DOT11BEACONPERIOD: 
+          if ( sc->haveBeaconPeriod                  ) found = TRUE; break;
+        case DOT11DTIMPERIOD:
+          if ( sc->haveDTIMPeriod                    ) found = TRUE; break;
+        case DOT11ASSOCIATIONRESPONSETIMEOUT:
+          if ( sc->haveAssociationResponseTimeOut    ) found = TRUE; break;
+        case DOT11DISASSOCIATEREASON:
+          if ( sc->disAssociationReason              ) found = TRUE; break;
+        case DOT11DISASSOCIATESTATION:
+          if ( sc->haveDisAssociationStation         ) found = TRUE; break;
+        case DOT11DEAUTHENTICATEREASON:
+          if ( sc->deAuthenticationReason            ) found = TRUE; break;
+        case DOT11DEAUTHENTICATESTATION:
+          if ( sc->haveDeAuthenticationStation       ) found = TRUE; break;
+        case DOT11AUTHENTICATEFAILSTATUS:
+          if ( sc->authenticateFailStatus            ) found = TRUE; break;
+        case DOT11AUTHENTICATEFAILSTATION:
+          if ( sc->haveAuthenticateFailStation       ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11STATIONID: 
+//    *write_method = write_dot11StationID;
+      MACWork[ 0] = sc->stationID [ 0];
+      MACWork[ 1] = sc->stationID [ 1];
+      MACWork[ 2] = sc->stationID [ 3];
+      MACWork[ 3] = sc->stationID [ 4];
+      MACWork[ 4] = sc->stationID [ 6];
+      MACWork[ 5] = sc->stationID [ 7];
+      MACWork[ 6] = sc->stationID [ 9];
+      MACWork[ 7] = sc->stationID [10];
+      MACWork[ 8] = sc->stationID [12];
+      MACWork[ 9] = sc->stationID [13];
+      MACWork[10] = sc->stationID [15];
+      MACWork[11] = sc->stationID [16];
+      MACWork[12] = '\0';
+      *var_len = 6;
+      return ( UCHAR * ) htob ( MACWork );
+
+    case DOT11MEDIUMOCCUPANCYLIMIT:
+//    *write_method = write_dot11MediumOccupancyLimit;
+      sc->mediumOccupancyLimit = 5;
+      return ( UCHAR * ) &sc->mediumOccupancyLimit;
+
+    case DOT11CFPOLLABLE:
+      return ( UCHAR * ) &sc->CFPPollable;
+
+    case DOT11CFPPERIOD:
+//    *write_method = write_dot11CFPPeriod;
+      return ( UCHAR * ) &sc->CFPPeriod;
+
+    case DOT11CFPMAXDURATION:
+//    *write_method = write_dot11CFPMaxDuration;
+      return ( UCHAR * ) &sc->maxDuration;
+
+    case DOT11AUTHENTICATIONRESPONSETIMEOUT:
+//    *write_method = write_dot11AuthenticationResponseTimeOut;
+      return ( UCHAR * ) &sc->authenticationResponseTimeOut;
+
+    case DOT11PRIVACYOPTIONIMPLEMENTED:
+      return ( UCHAR * ) &sc->privacyOptionImplemented;
+
+    case DOT11POWERMANAGEMENTMODE:
+//    *write_method = write_dot11PowerManagementMode;
+      return ( UCHAR * ) &sc->powerManagementMode;
+
+    case DOT11DESIREDSSID:
+//    *write_method = write_dot11DesiredSSID;
+      *var_len = strlen ( sc->desiredSSID );
+      return ( UCHAR * ) sc->desiredSSID;
+
+    case DOT11DESIREDBSSTYPE:
+//    *write_method = write_dot11DesiredBSSType;
+      return ( UCHAR * ) &sc->desiredBSSType;
+
+    case DOT11OPERATIONALRATESET:
+//    *write_method = write_dot11OperationalRateSet;
+      *var_len = strlen ( sc->operationalRateSet );
+      return ( UCHAR * ) sc->operationalRateSet;
+
+    case DOT11BEACONPERIOD: 
+//    *write_method = write_dot11BeaconPeriod;
+      return ( UCHAR * ) &sc->beaconPeriod;
+
+    case DOT11DTIMPERIOD:
+//    *write_method = write_dot11DTIMPeriod;
+      return ( UCHAR * ) &sc->DTIMPeriod;
+
+    case DOT11ASSOCIATIONRESPONSETIMEOUT:
+//    *write_method = write_dot11AssociationResponseTimeOut;
+      return ( UCHAR * ) &sc->associationResponseTimeOut;
+
+    case DOT11DISASSOCIATEREASON:
+      return ( UCHAR * ) &sc->disAssociationReason;
+
+    case DOT11DISASSOCIATESTATION:
+      MACWork[ 0] = sc->disAssociationStation[ 0];
+      MACWork[ 1] = sc->disAssociationStation[ 1];
+      MACWork[ 2] = sc->disAssociationStation[ 3];
+      MACWork[ 3] = sc->disAssociationStation[ 4];
+      MACWork[ 4] = sc->disAssociationStation[ 6];
+      MACWork[ 5] = sc->disAssociationStation[ 7];
+      MACWork[ 6] = sc->disAssociationStation[ 9];
+      MACWork[ 7] = sc->disAssociationStation[10];
+      MACWork[ 8] = sc->disAssociationStation[12];
+      MACWork[ 9] = sc->disAssociationStation[13];
+      MACWork[10] = sc->disAssociationStation[15];
+      MACWork[11] = sc->disAssociationStation[16];
+      MACWork[12] = '\0';
+      *var_len = 6;
+      return ( UCHAR * ) htob ( MACWork );
+
+    case DOT11DEAUTHENTICATEREASON:
+      return ( UCHAR * ) &sc->deAuthenticationReason;
+
+    case DOT11DEAUTHENTICATESTATION:
+      MACWork[ 0] = sc->deAuthenticationStation[ 0];
+      MACWork[ 1] = sc->deAuthenticationStation[ 1];
+      MACWork[ 2] = sc->deAuthenticationStation[ 3];
+      MACWork[ 3] = sc->deAuthenticationStation[ 4];
+      MACWork[ 4] = sc->deAuthenticationStation[ 6];
+      MACWork[ 5] = sc->deAuthenticationStation[ 7];
+      MACWork[ 6] = sc->deAuthenticationStation[ 9];
+      MACWork[ 7] = sc->deAuthenticationStation[10];
+      MACWork[ 8] = sc->deAuthenticationStation[12];
+      MACWork[ 9] = sc->deAuthenticationStation[13];
+      MACWork[10] = sc->deAuthenticationStation[15];
+      MACWork[11] = sc->deAuthenticationStation[16];
+      MACWork[12] = '\0';
+      *var_len = 6;
+      return ( UCHAR * ) htob ( MACWork );
+
+    case DOT11AUTHENTICATEFAILSTATUS:
+      return ( UCHAR * ) &sc->authenticateFailStatus;
+
+    case DOT11AUTHENTICATEFAILSTATION:
+      MACWork[ 0] = sc->authenticateFailStation[ 0];
+      MACWork[ 1] = sc->authenticateFailStation[ 1];
+      MACWork[ 2] = sc->authenticateFailStation[ 3];
+      MACWork[ 3] = sc->authenticateFailStation[ 4];
+      MACWork[ 4] = sc->authenticateFailStation[ 6];
+      MACWork[ 5] = sc->authenticateFailStation[ 7];
+      MACWork[ 6] = sc->authenticateFailStation[ 9];
+      MACWork[ 7] = sc->authenticateFailStation[10];
+      MACWork[ 8] = sc->authenticateFailStation[12];
+      MACWork[ 9] = sc->authenticateFailStation[13];
+      MACWork[10] = sc->authenticateFailStation[15];
+      MACWork[11] = sc->authenticateFailStation[16];
+      MACWork[12] = '\0';
+      *var_len = 6;
+      return ( UCHAR * ) htob ( MACWork );
+
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*  var_dot11AuthenticationAlgorithmsTable() -                               *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11AuthenticationAlgorithmsTable (  struct variable *vp,
+                                          oid     *name,
+                                          size_t  *length,
+                                          int     exact,
+                                          size_t  *var_len,
+                                          WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &aaList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    aa = ( struct aaTbl_data * ) np->data;
+    rName[vp->namelen + 0] = aa->ifIndex;
+    rName[vp->namelen + 1] = aa->authenticationAlgorithmsIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11AUTHENTICATIONALGORITHM:
+          if ( aa->haveAuthenticationAlgorithm    ) found = TRUE; break;
+        case DOT11AUTHENTICATIONALGORITHMSENABLE:
+          if ( aa->authenticationAlgorithmsEnable ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
+  *length = vp->namelen + 2;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11AUTHENTICATIONALGORITHM:
+      return ( UCHAR * ) &aa->authenticationAlgorithm;
+        
+    case DOT11AUTHENTICATIONALGORITHMSENABLE:
+//    *write_method = write_dot11AuthenticationAlgorithmsEnable;
+      return ( UCHAR * ) &aa->authenticationAlgorithmsEnable;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*  var_dot11WEPDefaultKeysTable() -                                         *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11WEPDefaultKeysTable ( struct variable *vp,
+                                oid     *name,
+                                size_t  *length,
+                                int     exact,
+                                size_t  *var_len,
+                                WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &dfList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    df = ( struct dfTbl_data * ) np->data;
+    rName[vp->namelen + 0] = df->ifIndex;
+    rName[vp->namelen + 1] = df->WEPDefaultKeyIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11WEPDEFAULTKEYVALUE:
+          if ( df->haveWEPDefaultKeyValue ) found = TRUE; break;
+      }          
+    }          
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
+  *length = vp->namelen + 2;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11WEPDEFAULTKEYVALUE:
+//    *write_method = write_dot11WEPDefaultKeyValue;
+      *var_len = strlen ( df->WEPDefaultKeyValue );
+      return ( UCHAR * ) df->WEPDefaultKeyValue;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*  var_dot11WEPKeyMappingsTable() -                                         *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11WEPKeyMappingsTable ( struct variable *vp,
+                                oid     *name,
+                                size_t  *length,
+                                int     exact,
+                                size_t  *var_len,
+                                WriteMethod **write_method)
+{
+  static char MACWork[17];
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &kmList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    km = ( struct kmTbl_data * ) np->data;
+    rName[vp->namelen + 0] = km->ifIndex;
+    rName[vp->namelen + 1] = km->WEPKeyMappingIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11WEPKEYMAPPINGADDRESS:
+          if ( km->haveWEPKeyMappingAddress ) found = TRUE; break;
+        case DOT11WEPKEYMAPPINGWEPON:
+          if ( km->haveWEPKeyMappingWEPOn   ) found = TRUE; break;
+        case DOT11WEPKEYMAPPINGVALUE:
+          if ( km->haveWEPKeyMappingValue   ) found = TRUE; break;
+        case DOT11WEPKEYMAPPINGSTATUS:
+          if ( km->haveWEPKeyMappingStatus  ) found = TRUE; break; 
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
+  *length = vp->namelen + 2;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11WEPKEYMAPPINGADDRESS:
+//    *write_method = write_dot11WEPKeyMappingAddress;
+      MACWork[ 0] = km->WEPKeyMappingAddress[ 0];
+      MACWork[ 1] = km->WEPKeyMappingAddress[ 1];
+      MACWork[ 2] = km->WEPKeyMappingAddress[ 3];
+      MACWork[ 3] = km->WEPKeyMappingAddress[ 4];
+      MACWork[ 4] = km->WEPKeyMappingAddress[ 6];
+      MACWork[ 5] = km->WEPKeyMappingAddress[ 7];
+      MACWork[ 6] = km->WEPKeyMappingAddress[ 9];
+      MACWork[ 7] = km->WEPKeyMappingAddress[10];
+      MACWork[ 8] = km->WEPKeyMappingAddress[12];
+      MACWork[ 9] = km->WEPKeyMappingAddress[13];
+      MACWork[10] = km->WEPKeyMappingAddress[15];
+      MACWork[11] = km->WEPKeyMappingAddress[16];
+      MACWork[12] = '\0';
+      *var_len = 6;
+      return ( UCHAR * ) htob ( MACWork );
+
+    case DOT11WEPKEYMAPPINGWEPON:
+//    *write_method = write_dot11WEPKeyMappingWEPOn;
+      return ( UCHAR * ) &km->WEPKeyMappingWEPOn;
+
+    case DOT11WEPKEYMAPPINGVALUE:
+//    *write_method = write_dot11WEPKeyMappingValue;
+      *var_len = strlen ( km->WEPKeyMappingValue );
+      return ( UCHAR * ) km->WEPKeyMappingValue;
+
+    case DOT11WEPKEYMAPPINGSTATUS:
+//    *write_method = write_dot11WEPKeyMappingStatus;
+      return ( UCHAR * ) &km->WEPKeyMappingStatus;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*   var_dot11PrivacyTable() -                                               *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11PrivacyTable ( struct variable *vp,
+                        oid     *name,
+                        size_t  *length,
+                        int     exact,
+                        size_t  *var_len,
+                        WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &prList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    pr = ( struct prTbl_data * ) np->data;
+    rName[vp->namelen] = pr->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11PRIVACYINVOKED:
+          if ( pr->havePrivacyInvoked      ) found = TRUE; break;
+        case DOT11WEPDEFAULTKEYID:
+          if ( pr->haveWEPDefaultKeyID     ) found = TRUE; break;
+        case DOT11WEPKEYMAPPINGLENGTH:
+          if ( pr->haveWEPKeyMappingLength ) found = TRUE; break;
+        case DOT11EXCLUDEUNENCRYPTED:
+          if ( pr->haveExcludeUnencrypted  ) found = TRUE; break;
+        case DOT11WEPICVERRORCOUNT:
+          if ( pr->haveWEPICVErrorCount    ) found = TRUE; break;
+        case DOT11WEPEXCLUDEDCOUNT:
+          if ( pr->haveWEPExcludedCount    ) found = TRUE; break;
+      }      
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11PRIVACYINVOKED:
+//    *write_method = write_dot11PrivacyInvoked;
+      return ( UCHAR * ) &pr->privacyInvoked;
+
+    case DOT11WEPDEFAULTKEYID:
+//    *write_method = write_dot11WEPDefaultKeyID;
+      return ( UCHAR * ) &pr->WEPDefaultKeyID;
+
+    case DOT11WEPKEYMAPPINGLENGTH:
+//    *write_method = write_dot11WEPKeyMappingLength;
+      return ( UCHAR * ) &pr->WEPKeyMappingLength;
+
+    case DOT11EXCLUDEUNENCRYPTED:
+//    *write_method = write_dot11ExcludeUnencrypted;
+      return ( UCHAR * ) &pr->excludeUnencrypted;
+
+    case DOT11WEPICVERRORCOUNT:
+      return ( UCHAR * ) &pr->WEPICVErrorCount;
+        
+    case DOT11WEPEXCLUDEDCOUNT:
+      return ( UCHAR * ) &pr->WEPExcludedCount;
+        
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*   var_dot11OperationTable() -                                             *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11OperationTable ( struct variable *vp,
+                          oid     *name,
+                          size_t  *length,
+                          int     exact,
+                          size_t  *var_len,
+                          WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+  static char MACWork[17];
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &opList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    op = ( struct opTbl_data * ) np->data;
+    rName[vp->namelen] = op->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+
+      switch ( vp->magic ) {      // found requested OID, now check for requested variable
+        case DOT11MACADDRESS:             
+          if ( op->haveMACAddress              ) found = TRUE; break;
+        case DOT11RTSTHRESHOLD:           
+          if ( op->haveRTSThreshold            ) found = TRUE; break;
+        case DOT11SHORTRETRYLIMIT: 
+          if ( op->haveShortRetryLimit         ) found = TRUE; break;
+        case DOT11LONGRETRYLIMIT:
+          if ( op->haveLongRetryLimit          ) found = TRUE; break;
+        case DOT11FRAGMENTATIONTHRESHOLD: 
+          if ( op->haveFragmentationThreshold  ) found = TRUE; break;
+        case DOT11MAXTRANSMITMSDULIFETIME: 
+          if ( op->haveMaxTransmitMSDULifetime ) found = TRUE; break;
+        case DOT11MAXRECEIVELIFETIME:
+          if ( op->haveMaxReceiveLifetime      ) found = TRUE; break;
+        case DOT11MANUFACTURERID:
+          if ( op->haveManufacturerID          ) found = TRUE; break;
+        case DOT11PRODUCTID:
+          if ( op->haveProductID               ) found = TRUE; break;
+      }
+    }
+    if ( found ) 
+      break;
+  }
+
+  if ( !found )
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11MACADDRESS:
+      MACWork[ 0] = op->MACAddress[ 0];
+      MACWork[ 1] = op->MACAddress[ 1];
+      MACWork[ 2] = op->MACAddress[ 3];
+      MACWork[ 3] = op->MACAddress[ 4];
+      MACWork[ 4] = op->MACAddress[ 6];
+      MACWork[ 5] = op->MACAddress[ 7];
+      MACWork[ 6] = op->MACAddress[ 9];
+      MACWork[ 7] = op->MACAddress[10];
+      MACWork[ 8] = op->MACAddress[12];
+      MACWork[ 9] = op->MACAddress[13];
+      MACWork[10] = op->MACAddress[15];
+      MACWork[11] = op->MACAddress[16];
+      MACWork[12] = '\0';
+      *var_len = 6;
+      return ( UCHAR * ) htob ( MACWork );
+        
+    case DOT11RTSTHRESHOLD:
+//    *write_method = write_dot11RTSThreshold;
+      return ( UCHAR * ) &op->RTSThreshold;
+
+    case DOT11SHORTRETRYLIMIT:
+//    *write_method = write_dot11ShortRetryLimit;
+      return ( UCHAR * ) &op->shortRetryLimit;
+
+    case DOT11LONGRETRYLIMIT:
+//    *write_method = write_dot11LongRetryLimit;
+      return ( UCHAR * ) &op->longRetryLimit;
+
+    case DOT11FRAGMENTATIONTHRESHOLD:
+//    *write_method = write_dot11FragmentationThreshold;
+      return ( UCHAR * ) &op->fragmentationThreshold;
+
+    case DOT11MAXTRANSMITMSDULIFETIME:
+//    *write_method = write_dot11MaxTransmitMSDULifetime;
+      return ( UCHAR * ) &op->maxTransmitMSDULifetime;
+
+    case DOT11MAXRECEIVELIFETIME:
+//    *write_method = write_dot11MaxReceiveLifetime;
+      return ( UCHAR * ) &op->maxReceiveLifetime;
+
+    case DOT11MANUFACTURERID:
+      *var_len = strlen ( op->manufacturerID );
+      return ( UCHAR * ) op->manufacturerID;
+
+    case DOT11PRODUCTID:
+      *var_len = strlen ( op->productID );
+      return ( UCHAR * ) op->productID;
+        
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*   var_dot11CountersTable() -                                              *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11CountersTable(struct variable *vp,
+          oid     *name,
+          size_t  *length,
+          int     exact,
+          size_t  *var_len,
+          WriteMethod **write_method)
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &coList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    co = ( struct coTbl_data * ) np->data;
+    rName[vp->namelen] = co->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11TRANSMITTEDFRAGMENTCOUNT:
+          if ( co->haveTransmittedFragmentCount    ) found = TRUE; break;
+        case DOT11MULTICASTTRANSMITTEDFRAMECOUNT:
+          if ( co->haveTransmittedFrameCount       ) found = TRUE; break;
+        case DOT11FAILEDCOUNT:
+          if ( co->haveFailedCount                 ) found = TRUE; break;
+        case DOT11RETRYCOUNT:
+          if ( co->haveRetryCount                  ) found = TRUE; break;
+        case DOT11MULTIPLERETRYCOUNT:
+          if ( co->haveMultipleRetryCount          ) found = TRUE; break;
+        case DOT11FRAMEDUPLICATECOUNT:
+          if ( co->haveFrameDuplicateCount         ) found = TRUE; break;
+        case DOT11RTSSUCCESSCOUNT:
+          if ( co->haveRTSSuccessCount             ) found = TRUE; break;
+        case DOT11RTSFAILURECOUNT:
+          if ( co->haveRTSFailureCount             ) found = TRUE; break;
+        case DOT11ACKFAILURECOUNT:
+          if ( co->haveACKFailureCount             ) found = TRUE; break;
+        case DOT11RECEIVEDFRAGMENTCOUNT:
+          if ( co->haveReceivedFragmentCount       ) found = TRUE; break;
+        case DOT11MULTICASTRECEIVEDFRAMECOUNT:
+          if ( co->haveMulticastReceivedFrameCount ) found = TRUE; break;
+        case DOT11FCSERRORCOUNT:
+          if ( co->haveFCSErrorCount               ) found = TRUE; break;
+        case DOT11TRANSMITTEDFRAMECOUNT:
+          if ( co->haveTransmittedFrameCount       ) found = TRUE; break;
+        case DOT11WEPUNDECRYPTABLECOUNT:
+          if ( co->haveWEPUndecryptableCount       ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11TRANSMITTEDFRAGMENTCOUNT:       return ( UCHAR * ) &co->transmittedFragmentCount;
+    case DOT11MULTICASTTRANSMITTEDFRAMECOUNT: return ( UCHAR * ) &co->transmittedFrameCount;
+    case DOT11FAILEDCOUNT:                    return ( UCHAR * ) &co->failedCount;
+    case DOT11RETRYCOUNT:                     return ( UCHAR * ) &co->retryCount;
+    case DOT11MULTIPLERETRYCOUNT:             return ( UCHAR * ) &co->multipleRetryCount;
+    case DOT11FRAMEDUPLICATECOUNT:            return ( UCHAR * ) &co->frameDuplicateCount;
+    case DOT11RTSSUCCESSCOUNT:                return ( UCHAR * ) &co->RTSSuccessCount;
+    case DOT11RTSFAILURECOUNT:                return ( UCHAR * ) &co->RTSFailureCount;
+    case DOT11ACKFAILURECOUNT:                return ( UCHAR * ) &co->ACKFailureCount;
+    case DOT11RECEIVEDFRAGMENTCOUNT:          return ( UCHAR * ) &co->receivedFragmentCount;
+    case DOT11MULTICASTRECEIVEDFRAMECOUNT:    return ( UCHAR * ) &co->multicastReceivedFrameCount;
+    case DOT11FCSERRORCOUNT:                  return ( UCHAR * ) &co->FCSErrorCount;
+    case DOT11TRANSMITTEDFRAMECOUNT:          return ( UCHAR * ) &co->transmittedFrameCount;
+    case DOT11WEPUNDECRYPTABLECOUNT:          return ( UCHAR * ) &co->WEPUndecryptableCount;
+        
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*   var_dot11GroupAddressesTable() -                                        *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11GroupAddressesTable(struct variable *vp,
+          oid     *name,
+          size_t  *length,
+          int     exact,
+          size_t  *var_len,
+          WriteMethod **write_method)
+{
+  static char MACWork[17];
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &gaList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    ga = ( struct gaTbl_data * ) np->data;
+    rName[vp->namelen + 0] = ga->ifIndex;
+    rName[vp->namelen + 1] = ga->groupAddressesIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11ADDRESS:
+          if ( ga->haveAddress              ) found = TRUE; break;
+        case DOT11GROUPADDRESSESSTATUS:
+          if ( ga->haveGroupAddressesStatus ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
+  *length = vp->namelen + 2;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11ADDRESS:
+//    *write_method = write_dot11Address;
+      MACWork[ 0] = ga->address[ 0];
+      MACWork[ 1] = ga->address[ 1];
+      MACWork[ 2] = ga->address[ 3];
+      MACWork[ 3] = ga->address[ 4];
+      MACWork[ 4] = ga->address[ 6];
+      MACWork[ 5] = ga->address[ 7];
+      MACWork[ 6] = ga->address[ 9];
+      MACWork[ 7] = ga->address[10];
+      MACWork[ 8] = ga->address[12];
+      MACWork[ 9] = ga->address[13];
+      MACWork[10] = ga->address[15];
+      MACWork[11] = ga->address[16];
+      MACWork[12] = '\0';
+      *var_len = 6;
+      return ( UCHAR * ) htob ( MACWork );
+
+    case DOT11GROUPADDRESSESSTATUS:
+//    *write_method = write_dot11GroupAddressesStatus;
+      return ( UCHAR * ) &ga->groupAddressesStatus;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*   var_dot11ResourceInfoTable() -                                          *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11ResourceInfoTable ( struct variable *vp,
+                              oid     *name,
+                              size_t  *length,
+                              int     exact,
+                              size_t  *var_len,
+                              WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &riList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    ri = ( struct riTbl_data * ) np->data;
+    rName[vp->namelen] = ri->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11MANUFACTUREROUI:
+          if ( ri->haveManufacturerOUI            ) found = TRUE; break;
+        case DOT11MANUFACTURERNAME:
+          if ( ri->haveManufacturerName           ) found = TRUE; break;
+        case DOT11MANUFACTURERPRODUCTNAME:
+          if ( ri->haveManufacturerProductName    ) found = TRUE; break;
+        case DOT11MANUFACTURERPRODUCTVERSION:
+          if ( ri->haveManufacturerProductVersion ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11MANUFACTUREROUI:
+      *var_len = strlen ( ri->manufacturerOUI );
+      return ( UCHAR * ) ri->manufacturerOUI;
+        
+    case DOT11MANUFACTURERNAME:
+      *var_len = strlen ( ri->manufacturerName );
+      return ( UCHAR * ) ri->manufacturerName;
+        
+    case DOT11MANUFACTURERPRODUCTNAME:
+      *var_len = strlen ( ri->manufacturerProductName );
+      return ( UCHAR * ) ri->manufacturerProductName;
+        
+    case DOT11MANUFACTURERPRODUCTVERSION:
+      *var_len = strlen ( ri->manufacturerProductVersion );
+      return ( UCHAR * ) ri->manufacturerProductVersion;
+        
+    default: 
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*   var_dot11PhyOperationTable() -                                          *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11PhyOperationTable ( struct variable *vp,
+                              oid     *name,
+                              size_t  *length,
+                              int     exact,
+                              size_t  *var_len,
+                              WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &poList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    po = ( struct poTbl_data * ) np->data;
+    rName[vp->namelen] = po->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11PHYTYPE:
+          if ( po->havePHYType          ) found = TRUE; break;
+        case DOT11CURRENTREGDOMAIN:
+          if ( po->haveCurrentRegDomain ) found = TRUE; break;
+        case DOT11TEMPTYPE:
+          if ( po->haveTempType         ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11PHYTYPE:
+      return ( UCHAR * ) &po->PHYType;
+        
+    case DOT11CURRENTREGDOMAIN:
+//    *write_method = write_dot11CurrentRegDomain;
+      return ( UCHAR * ) &po->currentRegDomain;
+
+    case DOT11TEMPTYPE:
+      return ( UCHAR * ) &po->tempType;
+        
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*   var_dot11PhyAntennaTable() -                                            *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11PhyAntennaTable ( struct variable *vp,
+                            oid     *name,
+                            size_t  *length,
+                            int     exact,
+                            size_t  *var_len,
+                            WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &paList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    pa = ( struct paTbl_data * ) np->data;
+    rName[vp->namelen] = pa->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11CURRENTTXANTENNA:
+          if ( pa->haveCurrentTxAntenna ) found = TRUE; break;
+        case DOT11DIVERSITYSUPPORT:
+          if ( pa->haveDiversitySupport ) found = TRUE; break;
+        case DOT11CURRENTRXANTENNA:
+          if ( pa->haveCurrentRxAntenna ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11CURRENTTXANTENNA:
+//    *write_method = write_dot11CurrentTxAntenna;
+      return ( UCHAR * ) &pa->currentTxAntenna;
+
+    case DOT11DIVERSITYSUPPORT:
+      return ( UCHAR * ) &pa->diversitySupport;
+        
+    case DOT11CURRENTRXANTENNA:
+//    *write_method = write_dot11CurrentRxAntenna;
+      return ( UCHAR * ) &pa->currentRxAntenna;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*   var_dot11PhyTxPowerTable() -                                            *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11PhyTxPowerTable ( struct variable *vp,
+                            oid     *name,
+                            size_t  *length,
+                            int     exact,
+                            size_t  *var_len,
+                            WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &ptList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    pt = ( struct ptTbl_data * ) np->data;
+    rName[vp->namelen] = pt->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11NUMBERSUPPORTEDPOWERLEVELS:
+          if ( pt->haveNumberSupportedPowerLevels ) found = TRUE; break;
+        case DOT11TXPOWERLEVEL1:
+          if ( pt->haveTxPowerLevel1   ) found = TRUE; break;
+        case DOT11TXPOWERLEVEL2:
+          if ( pt->haveTxPowerLevel2   ) found = TRUE; break;
+        case DOT11TXPOWERLEVEL3:
+          if ( pt->haveTxPowerLevel3   ) found = TRUE; break;
+        case DOT11TXPOWERLEVEL4:
+          if ( pt->haveTxPowerLevel4   ) found = TRUE; break;
+        case DOT11TXPOWERLEVEL5:
+          if ( pt->haveTxPowerLevel5   ) found = TRUE; break;
+        case DOT11TXPOWERLEVEL6:
+          if ( pt->haveTxPowerLevel6   ) found = TRUE; break;
+        case DOT11TXPOWERLEVEL7:
+          if ( pt->haveTxPowerLevel7   ) found = TRUE; break;
+        case DOT11TXPOWERLEVEL8:
+          if ( pt->haveTxPowerLevel8   ) found = TRUE; break;
+        case DOT11CURRENTTXPOWERLEVEL:
+          if ( pt->currentTxPowerLevel ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11NUMBERSUPPORTEDPOWERLEVELS: 
+      return ( UCHAR * ) &pt->numberSupportedPowerLevels;
+
+    case DOT11TXPOWERLEVEL1: return ( UCHAR * ) &pt->TxPowerLevel1;
+    case DOT11TXPOWERLEVEL2: return ( UCHAR * ) &pt->TxPowerLevel2;
+    case DOT11TXPOWERLEVEL3: return ( UCHAR * ) &pt->TxPowerLevel3;
+    case DOT11TXPOWERLEVEL4: return ( UCHAR * ) &pt->TxPowerLevel4;
+    case DOT11TXPOWERLEVEL5: return ( UCHAR * ) &pt->TxPowerLevel5;
+    case DOT11TXPOWERLEVEL6: return ( UCHAR * ) &pt->TxPowerLevel6;
+    case DOT11TXPOWERLEVEL7: return ( UCHAR * ) &pt->TxPowerLevel7;
+    case DOT11TXPOWERLEVEL8: return ( UCHAR * ) &pt->TxPowerLevel8;
+        
+    case DOT11CURRENTTXPOWERLEVEL:
+//    *write_method = write_dot11CurrentTxPowerLevel;
+      return ( UCHAR * ) &pt->currentTxPowerLevel;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*     var_dot11PhyFHSSTable() -                                             *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11PhyFHSSTable ( struct variable *vp,
+                        oid     *name,
+                        size_t  *length,
+                        int     exact,
+                        size_t  *var_len,
+                        WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &pfList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    pf = ( struct pfTbl_data * ) np->data;
+    rName[vp->namelen] = pf->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11HOPTIME:
+          if ( pf->haveHopTime              ) found = TRUE; break;
+        case DOT11CURRENTCHANNELNUMBER:
+          if ( pf->haveCurrentChannelNumber ) found = TRUE; break;
+        case DOT11MAXDWELLTIME:
+          if ( pf->haveMaxDwellTime         ) found = TRUE; break;
+        case DOT11CURRENTDWELLTIME:
+          if ( pf->haveCurrentDwellTime     ) found = TRUE; break;
+        case DOT11CURRENTSET:
+          if ( pf->haveCurrentSet           ) found = TRUE; break;
+        case DOT11CURRENTPATTERN:
+          if ( pf->haveCurrentPattern       ) found = TRUE; break;
+        case DOT11CURRENTINDEX:
+          if ( pf->haveCurrentIndex         ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11HOPTIME:
+      return ( UCHAR * ) &pf->hopTime;
+        
+    case DOT11CURRENTCHANNELNUMBER:
+//    *write_method = write_dot11CurrentChannelNumber;
+      return ( UCHAR * ) &pf->currentChannelNumber;
+
+    case DOT11MAXDWELLTIME:
+      return ( UCHAR * ) &pf->maxDwellTime;
+        
+    case DOT11CURRENTDWELLTIME:
+//    *write_method = write_dot11CurrentDwellTime;
+      return ( UCHAR * ) &pf->currentDwellTime;
+
+    case DOT11CURRENTSET:
+//    *write_method = write_dot11CurrentSet;
+      return ( UCHAR * ) &pf->currentSet;
+
+    case DOT11CURRENTPATTERN:
+//    *write_method = write_dot11CurrentPattern;
+      return ( UCHAR * ) &pf->currentPattern;
+
+    case DOT11CURRENTINDEX:
+//    *write_method = write_dot11CurrentIndex;
+      return ( UCHAR * ) &pf->currentIndex;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*     var_dot11PhyDSSSTable() -                                             *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11PhyDSSSTable ( struct variable *vp,
+                        oid     *name,
+                        size_t  *length,
+                        int     exact,
+                        size_t  *var_len,
+                        WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &pdList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    pd = ( struct pdTbl_data * ) np->data;
+    rName[vp->namelen] = pd->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11CURRENTCHANNEL:
+          if ( pd->haveCurrentChannel   ) found = TRUE; break;
+        case DOT11CCAMODESUPPORTED:
+          if ( pd->haveCCAModeSupported ) found = TRUE; break;
+        case DOT11CURRENTCCAMODE:
+          if ( pd->haveCurrentCCAMode   ) found = TRUE; break;
+        case DOT11EDTHRESHOLD:
+          if ( pd->haveEDThreshold      ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11CURRENTCHANNEL:
+//    *write_method = write_dot11CurrentChannel;
+      return ( UCHAR * ) &pd->currentChannel;
+
+    case DOT11CCAMODESUPPORTED:
+      return ( UCHAR * ) &pd->CCAModeSupported;
+        
+    case DOT11CURRENTCCAMODE:
+//    *write_method = write_dot11CurrentCCAMode;
+      return ( UCHAR * ) &pd->currentCCAMode;
+
+    case DOT11EDTHRESHOLD:
+//    *write_method = write_dot11EDThreshold;
+      return ( UCHAR * ) &pd->EDThreshold;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*     var_dot11PhyIRTable() -                                             *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11PhyIRTable ( struct variable *vp,
+                      oid     *name,
+                      size_t  *length,
+                      int     exact,
+                      size_t  *var_len,
+                      WriteMethod **write_method)
+{
+
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &piList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    pi = ( struct piTbl_data * ) np->data;
+    rName[vp->namelen] = pi->ifIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11CCAWATCHDOGTIMERMAX:
+          if ( pi->CCAWatchdogTimerMax ) found = TRUE; break;
+        case DOT11CCAWATCHDOGCOUNTMAX:
+          if ( pi->CCAWatchdogCountMax ) found = TRUE; break;
+        case DOT11CCAWATCHDOGTIMERMIN:
+          if ( pi->CCAWatchdogTimerMin ) found = TRUE; break;
+        case DOT11CCAWATCHDOGCOUNTMIN:
+          if ( pi->CCAWatchdogCountMin ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
+  *length = vp->namelen + 1;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11CCAWATCHDOGTIMERMAX:
+//    *write_method = write_dot11CCAWatchdogTimerMax;
+      return ( UCHAR * ) &pi->CCAWatchdogTimerMax;
+
+    case DOT11CCAWATCHDOGCOUNTMAX:
+//   *write_method = write_dot11CCAWatchdogCountMax;
+      return ( UCHAR * ) &pi->CCAWatchdogCountMax;
+
+    case DOT11CCAWATCHDOGTIMERMIN:
+//    *write_method = write_dot11CCAWatchdogTimerMin;
+      return ( UCHAR * ) &pi->CCAWatchdogTimerMin;
+
+    case DOT11CCAWATCHDOGCOUNTMIN:
+//    *write_method = write_dot11CCAWatchdogCountMin;
+      return ( UCHAR * ) &pi->CCAWatchdogCountMin;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*     var_dot11RegDomainsSupportedTable() -                                 *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11RegDomainsSupportedTable ( struct variable *vp,
+                                    oid     *name,
+                                    size_t  *length,
+                                    int     exact,
+                                    size_t  *var_len,
+                                    WriteMethod **write_method)
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &rdList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    rd = ( struct rdTbl_data * ) np->data;
+    rName[vp->namelen + 0] = rd->ifIndex;
+    rName[vp->namelen + 1] = rd->regDomainsSupportIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11REGDOMAINSSUPPORTVALUE:
+          if ( rd->haveRegDomainsSupportValue ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
+  *length = vp->namelen + 2;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11REGDOMAINSSUPPORTVALUE:
+      return ( UCHAR * ) &rd->regDomainsSupportValue;
+        
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*     var_dot11AntennasListTable() -                                        *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11AntennasListTable(struct variable *vp,
+          oid     *name,
+          size_t  *length,
+          int     exact,
+          size_t  *var_len,
+          WriteMethod **write_method)
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &alList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    al = ( struct alTbl_data * ) np->data;
+    rName[vp->namelen + 0] = al->ifIndex;
+    rName[vp->namelen + 1] = al->antennaListIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11SUPPORTEDTXANTENNA:
+          if ( al->haveSupportedTxAntenna   ) found = TRUE; break;
+        case DOT11SUPPORTEDRXANTENNA:
+          if ( al->haveSupportedRxAntenna   ) found = TRUE; break;
+        case DOT11DIVERSITYSELECTIONRX:
+          if ( al->haveDiversitySelectionRx ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
+  *length = vp->namelen + 2;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11SUPPORTEDTXANTENNA:
+//    *write_method = write_dot11SupportedTxAntenna;
+      return ( UCHAR * ) &al->supportedTxAntenna;
+
+    case DOT11SUPPORTEDRXANTENNA:
+//    *write_method = write_dot11SupportedRxAntenna;
+      return ( UCHAR * ) &al->supportedRxAntenna;
+
+    case DOT11DIVERSITYSELECTIONRX:
+//    *write_method = write_dot11DiversitySelectionRx;
+      return ( UCHAR * ) &al->diversitySelectionRx;
+
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*     var_dot11SupportedDataRatesTxTable() -                                *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11SupportedDataRatesTxTable ( struct variable *vp,
+                                      oid     *name,
+                                      size_t  *length,
+                                      int     exact,
+                                      size_t  *var_len,
+                                      WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &rtList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    rt = ( struct rtTbl_data * ) np->data;
+    rName[vp->namelen + 0] = rt->ifIndex;
+    rName[vp->namelen + 1] = rt->supportedDataRatesTxIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+         case DOT11SUPPORTEDDATARATESTXVALUE:
+          if ( rt->haveSupportedDataRatesTxValue ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
+  *length = vp->namelen + 2;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11SUPPORTEDDATARATESTXVALUE:
+      return ( UCHAR * ) &rt->supportedDataRatesTxValue;
+        
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+*     var_dot11SupportedDataRatesRxTable() -                                *
+*                                                                           *
+****************************************************************************/
+unsigned char *
+var_dot11SupportedDataRatesRxTable ( struct variable *vp,
+                                      oid     *name,
+                                      size_t  *length,
+                                      int     exact,
+                                      size_t  *var_len,
+                                      WriteMethod **write_method )
+{
+  int found = FALSE;
+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
+
+  loadTables();
+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
+  for ( np = LIST_FIRST ( &rrList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    rr = ( struct rrTbl_data * ) np->data;
+    rName[vp->namelen + 0] = rr->ifIndex;
+    rName[vp->namelen + 1] = rr->supportedDataRatesRxIndex;
+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
+      switch ( vp->magic ) {
+        case DOT11SUPPORTEDDATARATESRXVALUE:
+          if ( rr->haveSupportedDataRatesRxValue ) found = TRUE; break;
+      }
+    }
+    if ( found )
+      break;
+  }
+
+  if ( !found ) 
+    return NULL;
+
+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
+  *length = vp->namelen + 2;
+  *var_len = sizeof ( long );
+  *write_method = NULL;
+
+  switch ( vp->magic ) {
+
+    case DOT11SUPPORTEDDATARATESRXVALUE:
+      return ( UCHAR * ) &rr->supportedDataRatesRxValue;
+        
+    default:
+      ERROR_MSG ( "" );
+  }
+
+  return NULL;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11StationID(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static unsigned char string[SPRINT_MAX_LEN];
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_OCTET_STR ) {
+        fprintf ( stderr, "write to dot11StationID not ASN_OCTET_STR\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( string )) {
+        fprintf ( stderr,"write to dot11StationID: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11MediumOccupancyLimit(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11MediumOccupancyLimit not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11MediumOccupancyLimit: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CFPPeriod(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CFPPeriod not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CFPPeriod: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CFPMaxDuration(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CFPMaxDuration not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CFPMaxDuration: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11AuthenticationResponseTimeOut(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11AuthenticationResponseTimeOut not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11AuthenticationResponseTimeOut: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11PowerManagementMode(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11PowerManagementMode not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )) {
+        fprintf ( stderr, "write to dot11PowerManagementMode: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11DesiredSSID(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static unsigned char string[SPRINT_MAX_LEN];
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_OCTET_STR ) {
+        fprintf ( stderr, "write to dot11DesiredSSID not ASN_OCTET_STR\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( string )){
+        fprintf ( stderr, "write to dot11DesiredSSID: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11DesiredBSSType(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11DesiredBSSType not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11DesiredBSSType: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11OperationalRateSet(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static unsigned char string[SPRINT_MAX_LEN];
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_OCTET_STR ) {
+        fprintf ( stderr, "write to dot11OperationalRateSet not ASN_OCTET_STR\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( string )){
+        fprintf ( stderr, "write to dot11OperationalRateSet: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11BeaconPeriod(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11BeaconPeriod not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11BeaconPeriod: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11DTIMPeriod(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11DTIMPeriod not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11DTIMPeriod: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11AssociationResponseTimeOut(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11AssociationResponseTimeOut not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )) {
+        fprintf ( stderr,"write to dot11AssociationResponseTimeOut: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11AuthenticationAlgorithmsEnable(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11AuthenticationAlgorithmsEnable not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11AuthenticationAlgorithmsEnable: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11WEPDefaultKeyValue(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static unsigned char string[SPRINT_MAX_LEN];
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_OCTET_STR ) {
+        fprintf ( stderr, "write to dot11WEPDefaultKeyValue not ASN_OCTET_STR\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( string )){
+        fprintf ( stderr,"write to dot11WEPDefaultKeyValue: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11WEPKeyMappingAddress(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static unsigned char string[SPRINT_MAX_LEN];
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_OCTET_STR ) {
+        fprintf ( stderr, "write to dot11WEPKeyMappingAddress not ASN_OCTET_STR\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( string )) {
+        fprintf ( stderr,"write to dot11WEPKeyMappingAddress: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11WEPKeyMappingWEPOn(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11WEPKeyMappingWEPOn not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11WEPKeyMappingWEPOn: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11WEPKeyMappingValue(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static unsigned char string[SPRINT_MAX_LEN];
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_OCTET_STR ) {
+        fprintf ( stderr, "write to dot11WEPKeyMappingValue not ASN_OCTET_STR\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( string )) {
+        fprintf ( stderr, "write to dot11WEPKeyMappingValue: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11WEPKeyMappingStatus(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11WEPKeyMappingStatus not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11WEPKeyMappingStatus: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11PrivacyInvoked(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11PrivacyInvoked not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11PrivacyInvoked: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11WEPDefaultKeyID(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11WEPDefaultKeyID not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11WEPDefaultKeyID: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11WEPKeyMappingLength(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11WEPKeyMappingLength not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11WEPKeyMappingLength: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11ExcludeUnencrypted(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11ExcludeUnencrypted not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11ExcludeUnencrypted: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11RTSThreshold(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ){
+        fprintf ( stderr, "write to dot11RTSThreshold not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11RTSThreshold: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11ShortRetryLimit(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11ShortRetryLimit not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11ShortRetryLimit: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11LongRetryLimit(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11LongRetryLimit not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11LongRetryLimit: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11FragmentationThreshold(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11FragmentationThreshold not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11FragmentationThreshold: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11MaxTransmitMSDULifetime(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11MaxTransmitMSDULifetime not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11MaxTransmitMSDULifetime: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11MaxReceiveLifetime(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11MaxReceiveLifetime not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11MaxReceiveLifetime: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11Address(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static unsigned char string[SPRINT_MAX_LEN];
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_OCTET_STR ) {
+        fprintf ( stderr, "write to dot11Address not ASN_OCTET_STR\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( string )){
+        fprintf ( stderr, "write to dot11Address: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11GroupAddressesStatus(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11GroupAddressesStatus not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11GroupAddressesStatus: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentRegDomain(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentRegDomain not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CurrentRegDomain: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentTxAntenna(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentTxAntenna not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CurrentTxAntenna: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentRxAntenna(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentRxAntenna not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11CurrentRxAntenna: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentTxPowerLevel(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentTxPowerLevel not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CurrentTxPowerLevel: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentChannelNumber(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentChannelNumber not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11CurrentChannelNumber: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentDwellTime(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentDwellTime not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CurrentDwellTime: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentSet(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentSet not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CurrentSet: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentPattern(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentPattern not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CurrentPattern: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentIndex(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentIndex not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CurrentIndex: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentChannel(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentChannel not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CurrentChannel: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CurrentCCAMode(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CurrentCCAMode not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11CurrentCCAMode: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11EDThreshold(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11EDThreshold not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11EDThreshold: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CCAWatchdogTimerMax(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CCAWatchdogTimerMax not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CCAWatchdogTimerMax: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CCAWatchdogCountMax(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CCAWatchdogCountMax not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CCAWatchdogCountMax: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CCAWatchdogTimerMin(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CCAWatchdogTimerMin not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CCAWatchdogTimerMin: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11CCAWatchdogCountMin(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11CCAWatchdogCountMin not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11CCAWatchdogCountMin: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11SupportedTxAntenna(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11SupportedTxAntenna not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11SupportedTxAntenna: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11SupportedRxAntenna(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11SupportedRxAntenna not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr,"write to dot11SupportedRxAntenna: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+int
+write_dot11DiversitySelectionRx(int      action,
+            u_char   *var_val,
+            u_char   var_val_type,
+            size_t   var_val_len,
+            u_char   *statP,
+            oid      *name,
+            size_t   name_len)
+{
+  static long *long_ret;
+  int size;
+
+  switch ( action ) {
+
+    case RESERVE1:
+      if ( var_val_type != ASN_INTEGER ) {
+        fprintf ( stderr, "write to dot11DiversitySelectionRx not ASN_INTEGER\n" );
+        return SNMP_ERR_WRONGTYPE;
+      }
+      if ( var_val_len > sizeof ( long_ret )){
+        fprintf ( stderr, "write to dot11DiversitySelectionRx: bad length\n" );
+        return SNMP_ERR_WRONGLENGTH;
+      }
+      break;
+
+    case RESERVE2:
+    case FREE:
+    case ACTION:
+    case UNDO:
+      break;
+
+    case COMMIT:
+      break;
+  }
+
+  return SNMP_ERR_NOERROR;
+}
+
+/****************************************************************************
+*                                                                           *
+*                      loadTables() - Load the Tables                       *
+*                                                                           *
+****************************************************************************/
+static void loadTables()
+{
+  int skfd;                               // generic raw socket desc
+  struct iwreq wrq;                       // ioctl request structure
+  struct ifreq ifr;
+  struct timeval et;                      // elapsed time
+  struct wireless_info info;              // workarea for wireless ioctl information
+  FILE *fp;
+  char  bfr[1024], ifName[1024];
+  char *s, *t;
+
+  gettimeofday ( &et, ( struct timezone * ) 0 );  // get time-of-day
+  if ( et.tv_sec < lastLoad + MINLOADFREQ )       // only reload so often
+    return;
+  lastLoad = et.tv_sec;
+
+  skfd = openSocket();                            // open socket
+  if ( skfd < 0 ) {
+    syslog ( LOG_ERR, "SNMP ieee802dot11.loadTables() - %s\n", "socket open failure" );
+    return;
+  }
+
+  flushLists();
+
+  // find interfaces in /proc/net/dev and find the wireless interfaces
+  fp = fopen ( PROC_NET_DEV, "r" );
+  if ( fp ) {
+    while ( fgets ( bfr, sizeof ( bfr ), fp )) {
+      if ( strstr ( bfr, ":" )) {
+        s = bfr; t = ifName;
+        while ( isspace ( *s ))                     // discard white space
+          *s++;
+        while ( *s != ':' )                         // get interface name
+          *t++ = *s++;
+        *t = '\0';
+
+        // verify as a wireless device
+        memset (( char * ) &info, 0, sizeof ( struct wireless_info ));
+        strncpy ( wrq.ifr_name, ifName, IFNAMSIZ );
+        if ( ioctl ( skfd, SIOCGIWNAME, &wrq ) >= 0 ) {
+          printf ( "%s ifName: %s\n", "loadTables() -", ifName );
+          initStructs();
+          loadWiExt( skfd, ifName, &info );
+          displayWiExt ( info );
+          load80211Structs ( skfd, ifName, &info );
+        }
+      }
+    }
+    fclose ( fp );
+  }
+
+  close ( skfd );
+}
+
+/****************************************************************************
+*                                                                           *
+*              load80211Structs() - load the 802.11 structures              *
+*                                                                           *
+****************************************************************************/
+static void 
+load80211Structs ( int skfd, char *ifName, struct wireless_info *wi )
+{
+  int rc, ifIndex = 0;
+  struct ifreq ifr;
+  char  MACAddress [ MACADDR_LEN + 1 ];
+
+  strcpy ( ifr.ifr_name, ifName );
+  rc = ioctl ( skfd, SIOCGIFHWADDR, &ifr );
+  if ( rc >= 0 ) {
+
+    sprintf ( MACAddress, "%02X:%02X:%02X:%02X:%02X:%02X\0", 
+                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[0], ( UCHAR ) ifr.ifr_hwaddr.sa_data[1], 
+                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[2], ( UCHAR ) ifr.ifr_hwaddr.sa_data[3], 
+                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[4], ( UCHAR ) ifr.ifr_hwaddr.sa_data[5] );
+
+    nSc.haveStationID = TRUE;
+    strcpy  ( nSc.stationID, MACAddress );
+    nOp.haveMACAddress = TRUE;
+    strcpy  ( nOp.MACAddress, MACAddress );
+    nRi.haveManufacturerOUI = TRUE;
+    strncpy ( nRi.manufacturerOUI, MACAddress, MAN_OUI_LEN ); 
+
+    ifIndex = if_nametoindex ( ifName );
+    if ( !ifIndex ) {
+      syslog ( LOG_ERR, "SNMP %s - %s %s\n", 
+        "ieee802dot11.load80211Structs()", ifName, "has no ifIndex" );
+      return;
+    }
+
+    loadWiExtTo80211Structs ( ifIndex, ifName, wi );
+
+    if ( hasChanged (( char * ) &nSc, sizeof ( nSc ))) {
+      nSc.ifIndex = ifIndex;
+      sprintf ( nSc.UID, "%04d\0", nSc.ifIndex );
+      strcpy ( nSc.ifName, ifName );
+      addList (( char * ) &scList, ( char * ) &nSc, sizeof ( nSc ));
+    }
+
+    if ( hasChanged (( char * ) &nPr, sizeof ( nPr ))) {
+      nPr.ifIndex = ifIndex;
+      sprintf ( nPr.UID, "%04d\0", nPr.ifIndex );
+      strcpy ( nPr.ifName, ifName );
+      addList (( char * ) &prList, ( char * ) &nPr, sizeof ( nPr ));
+    }
+
+    if ( hasChanged (( char * ) &nOp, sizeof ( nOp ))) {
+      nOp.ifIndex = ifIndex;
+      sprintf ( nOp.UID, "%04d\0", nOp.ifIndex );
+      strcpy ( nOp.ifName, ifName );
+      addList (( char * ) &opList, ( char * ) &nOp, sizeof ( nOp ));
+    }
+
+    if ( hasChanged (( char * ) &nCo, sizeof ( nCo ))) {
+      nCo.ifIndex = ifIndex;
+      sprintf ( nCo.UID, "%04d\0", nCo.ifIndex );
+      strcpy ( nCo.ifName, ifName );
+      addList (( char * ) &coList, ( char * ) &nCo, sizeof ( nCo ));
+    }
+
+    if ( hasChanged (( char * ) &nRi, sizeof ( nRi ))) {
+      nRi.ifIndex = ifIndex;
+      sprintf ( nRi.UID, "%04d\0", nRi.ifIndex );
+      strcpy ( nRi.ifName, ifName );
+      addList (( char * ) &riList, ( char * ) &nRi, sizeof ( nRi ));
+    }
+
+    if ( hasChanged (( char * ) &nPo, sizeof ( nPo ))) {
+      nPo.ifIndex = ifIndex;
+      sprintf ( nPo.UID, "%04d\0", nPo.ifIndex );
+      strcpy ( nPo.ifName, ifName );
+      addList (( char * ) &poList, ( char * ) &nPo, sizeof ( nPo ));
+    }
+
+    if ( hasChanged (( char * ) &nPa, sizeof ( nPa ))) {
+      nPa.ifIndex = ifIndex;
+      sprintf ( nPa.UID, "%04d\0", nPa.ifIndex );
+      strcpy ( nPa.ifName, ifName );
+      addList (( char * ) &paList, ( char * ) &nPa, sizeof ( nPa ));
+    }
+
+    if ( hasChanged (( char * ) &nPt, sizeof ( nPt ))) {
+      nPt.ifIndex = ifIndex;
+      sprintf ( nPt.UID, "%04d\0", nPt.ifIndex );
+      strcpy ( nPt.ifName, ifName );
+      addList (( char * ) &ptList, ( char * ) &nPt, sizeof ( nPt ));
+    }
+
+    if ( hasChanged (( char * ) &nPf, sizeof ( nPf ))) {
+      nPf.ifIndex = ifIndex;
+      sprintf ( nPf.UID, "%04d\0", nPf.ifIndex );
+      strcpy ( nPf.ifName, ifName );
+      addList (( char * ) &pfList, ( char * ) &nPf, sizeof ( nPf ));
+    }
+
+    if ( hasChanged (( char * ) &nPd, sizeof ( nPd ))) {
+      nPd.ifIndex = ifIndex;
+      sprintf ( nPd.UID, "%04d\0", nPd.ifIndex );
+      strcpy ( nPd.ifName, ifName );
+      addList (( char * ) &pdList, ( char * ) &nPd, sizeof ( nPd ));
+    }
+
+    if ( hasChanged (( char * ) &nPi, sizeof ( nPi ))) {
+      nPi.ifIndex = ifIndex;
+      sprintf ( nPi.UID, "%04d\0", nPi.ifIndex );
+      strcpy ( nPi.ifName, ifName );
+      addList (( char * ) &piList, ( char * ) &nPi, sizeof ( nPi ));
+    }
+  }
+
+//printf ( "%s - ifIndex: %d ifName: %s UID: %s\n", 
+//         "load80211Structs() - HASCHANGED", ifIndex, ifName, nSc.UID );
+}
+
+/****************************************************************************
+*                                                                           *
+*                     initStructs() - initialize structures                 *
+*                                                                           *
+****************************************************************************/
+static void initStructs()
+{
+  int i;
+
+  // 802.11 MIB Stuctures
+  memset (( char * ) &nSc, 0, sizeof ( nSc ));  memset (( char * ) &nAa, 0, sizeof ( nAa ));
+  memset (( char * ) &nDf, 0, sizeof ( nDf ));  memset (( char * ) &nKm, 0, sizeof ( nKm ));
+  memset (( char * ) &nPr, 0, sizeof ( nPr ));  memset (( char * ) &nOp, 0, sizeof ( nOp ));
+  memset (( char * ) &nCo, 0, sizeof ( nCo ));  memset (( char * ) &nGa, 0, sizeof ( nGa ));
+  memset (( char * ) &nRi, 0, sizeof ( nRi ));  memset (( char * ) &nPo, 0, sizeof ( nPo ));
+  memset (( char * ) &nPa, 0, sizeof ( nPa ));  memset (( char * ) &nPt, 0, sizeof ( nPt ));
+  memset (( char * ) &nPf, 0, sizeof ( nPf ));  memset (( char * ) &nPd, 0, sizeof ( nPd ));
+  memset (( char * ) &nPi, 0, sizeof ( nPi ));  memset (( char * ) &nRd, 0, sizeof ( nRd ));
+  memset (( char * ) &nAl, 0, sizeof ( nAl ));  memset (( char * ) &nRt, 0, sizeof ( nRt ));
+  memset (( char * ) &nRr, 0, sizeof ( nRr ));
+
+  // Wireless Extensions
+  wepCurrentKey = 0;
+  haveWepCurrentKey = FALSE;
+  for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
+    wep[i].len = 0;
+    wep[i].key[0] = '\0';
+    wep[i].haveKey = FALSE;
+  }
+}
+
+/****************************************************************************
+*                                                                           *
+*                Wireless Extensions Specific Functions                     *
+*                                                                           *
+****************************************************************************/
+/****************************************************************************
+*                                                                           *
+* loadWiExtTo80211Structs() - load wireless extensions to 802.11 structures *
+*                                                                           *
+****************************************************************************/
+static void 
+loadWiExtTo80211Structs ( int ifIndex, char *ifName, struct wireless_info *wi )
+{
+  int i, j = 0;
+
+  // dot11Smt Group
+  // dot11StationConfigTable
+  nSc.havePrivacyOptionImplemented = TRUE;
+  nSc.privacyOptionImplemented = 1;           // assume we support WEP
+
+  if ( wi->has_power ) {
+    nSc.havePowerManagementMode = TRUE;
+    nSc.powerManagementMode = 1;              // assume power is active
+    if ( !wi->power.disabled && 
+          wi->power.flags & IW_POWER_MIN )
+      nSc.powerManagementMode = 2;            // power save mode
+  }
+
+  if ( wi->has_essid && strlen ( wi->essid )) {
+    nSc.haveDesiredSSID = TRUE;
+    strcpy ( nSc.desiredSSID, wi->essid ); 
+  }
+
+  if ( wi->has_mode ) {
+    nSc.haveDesiredBSSType = TRUE;
+    if ( wi->mode == IW_MODE_ADHOC ) 
+      nSc.desiredBSSType = 2;         // independent
+    else if ( wi->has_ap_addr )
+      nSc.desiredBSSType = 1;         // infrastructure
+    else
+      nSc.desiredBSSType = 3;         // any
+  }
+
+  if ( wi->has_range ) {
+    for ( i = 0; i < wi->range.num_bitrates && j < 126; i++ ) {
+      nSc.haveOperationalRateSet = TRUE;
+      nSc.operationalRateSet[j++] = ( char ) ( wi->range.bitrate[i] / 500000L );
+    }
+  }
+
+  // dot11AuthenticationAlgorithmsTable
+  nAa.haveAuthenticationAlgorithm = TRUE;           // it's a rule to always have 
+  nAa.haveAuthenticationAlgorithmsEnable = TRUE;    //    'open' supported
+  nAa.ifIndex = ifIndex;
+  nAa.authenticationAlgorithmsIndex = 1;            // index number one
+  nAa.authenticationAlgorithm = 1;                  // 1 => open key
+  sprintf ( nAa.UID, "%04d%04d\0", nAa.ifIndex, nAa.authenticationAlgorithmsIndex );
+  nAa.authenticationAlgorithmsEnable = 1;           // enabled by default
+  if ( ( wi->has_key                        ) &&
+       ( wi->key_size  != 0                 ) &&
+      !( wi->key_flags & IW_ENCODE_DISABLED ))
+    nAa.authenticationAlgorithmsEnable = 2;
+  addList (( char * ) &aaList, ( char * ) &nAa, sizeof ( nAa ));
+
+  nAa.haveAuthenticationAlgorithm = TRUE;           // I'm gonna assume we always support WEP
+  nAa.haveAuthenticationAlgorithmsEnable = TRUE;
+  nAa.ifIndex = ifIndex;
+  nAa.authenticationAlgorithmsIndex = 2;            // index number 2
+  nAa.authenticationAlgorithm = 2;                  // 2 => shared key
+  sprintf ( nAa.UID, "%04d%04d\0", nAa.ifIndex, nAa.authenticationAlgorithmsIndex );
+  nAa.authenticationAlgorithmsEnable = 2;
+  if ( ( wi->has_key                        ) &&
+       ( wi->key_size  != 0                 ) &&
+      !( wi->key_flags & IW_ENCODE_DISABLED ))
+    nAa.authenticationAlgorithmsEnable = 1;         // disabled by default
+  addList (( char * ) &aaList, ( char * ) &nAa, sizeof ( nAa ));
+
+  //dot11WEPDefaultKeysTable
+  if ( wi->has_range ) {
+    for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
+      nDf.haveWEPDefaultKeyValue = TRUE;
+      nDf.ifIndex = ifIndex;
+      nDf.WEPDefaultKeyIndex = i + 1;               // index number
+      sprintf ( nDf.UID, "%04d%04d\0", nDf.ifIndex, nDf.WEPDefaultKeyIndex );
+      if ( wep[i].haveKey )
+        strcpy ( nDf.WEPDefaultKeyValue, "*****" );
+      else
+        nDf.WEPDefaultKeyValue[0] = '\0';
+      addList (( char * ) &dfList, ( char * ) &nDf, sizeof ( nDf ));
+    }
+  }
+
+  // dot11PrivacyTable
+  nPr.havePrivacyInvoked = TRUE;
+  nPr.privacyInvoked = 2;                   // 2 => FALSE
+  nPr.haveWEPDefaultKeyID = TRUE;
+  nPr.WEPDefaultKeyID = 0;
+  nPr.haveExcludeUnencrypted = TRUE;
+  nPr.excludeUnencrypted = 2;               // 2 => FALSE
+  if ( wi->has_range ) {
+    if ( ( wi->key_size != 0 ) &&
+        !( wi->key_flags & IW_ENCODE_DISABLED )) {
+       nPr.privacyInvoked = 1;
+       if ( wi->key_flags & IW_ENCODE_RESTRICTED )
+          nPr.excludeUnencrypted = 1;
+       nPr.WEPDefaultKeyID = wepCurrentKey;
+    }
+  }
+
+  // dot11Mac Group
+  // dot11OperationTable
+  if ( wi->has_range ) {
+    nOp.haveRTSThreshold = TRUE;
+    nOp.RTSThreshold = wi->range.max_rts;
+  }
+
+  if ( wi->has_frag && wi->frag.value ) {
+    nOp.haveFragmentationThreshold = TRUE;
+    nOp.fragmentationThreshold = wi->frag.value;
+  }
+
+  // dot11Phy Group
+  // dot11PhyOperationTable
+  if ( strstr ( wi->name, "IEEE 802.11-FS"      )) nPo.PHYType = 1;   // So what if I
+  if ( strstr ( wi->name, "IEEE 802.11-DS"      )) nPo.PHYType = 2;   // made up a couple?
+  if ( strstr ( wi->name, "IEEE 802.11-IR"      )) nPo.PHYType = 3;   
+  if ( strstr ( wi->name, "IEEE 802.11-OFDM"    )) nPo.PHYType = 4;   // 802.11a
+  if ( strstr ( wi->name, "IEEE 802.11-OFDM/DS" )) nPo.PHYType = 5;   // 802.11g
+  if ( strstr ( wi->name, "IEEE 802.11-TURBO"   )) nPo.PHYType = 6;   // Atheros TURBO mode
+  if ( nPo.PHYType ) nPo.havePHYType = TRUE;
+
+  // dot11PhyDSSSTable
+  if ( wi->has_range ) { // && wi->freq <= ( double ) 2483000000 ) {  // DSSS frequencies only
+    for ( i = 0; i < wi->range.num_frequency; i++ ) {
+      if ((( double ) ( wi->range.freq[i].e * 10 ) * ( double ) wi->range.freq[i].m ) == wi->freq ) {
+        nPd.haveCurrentChannel = TRUE;
+        nPd.currentChannel = wi->range.freq[i].i; 
+      }
+    }
+  }
+
+  // dot11SupportedDataRatesTxTable
+  if ( wi->has_range ) {
+    for ( i = 0; i < wi->range.num_bitrates; i++ ) {
+      nRt.ifIndex = ifIndex;
+      nRt.supportedDataRatesTxIndex = i + 1;
+      nRt.supportedDataRatesTxValue = wi->range.bitrate[i] / 500000L;
+      nRt.haveSupportedDataRatesTxValue = TRUE;
+      sprintf ( nRt.UID, "%04d%04d\0", nRt.ifIndex, nRt.supportedDataRatesTxIndex );
+      strcpy ( nRt.ifName, ifName );
+      addList (( char * ) &rtList, ( char * ) &nRt, sizeof ( nRt ));
+    }
+  }
+
+  // dot11SupportedDataRatesRxTable
+  if ( wi->has_range ) {
+    for ( i = 0; i < wi->range.num_bitrates; i++ ) {
+      nRr.ifIndex = ifIndex;
+      nRr.supportedDataRatesRxIndex = i + 1;
+      nRr.supportedDataRatesRxValue = wi->range.bitrate[i] / 500000L;
+      nRr.haveSupportedDataRatesRxValue = TRUE;
+      sprintf ( nRr.UID, "%04d%04d\0", nRr.ifIndex, nRr.supportedDataRatesRxIndex );
+      strcpy ( nRr.ifName, ifName );
+      addList (( char * ) &rrList, ( char * ) &nRr, sizeof ( nRr ));
+    }
+  }
+
+//printf ( "%s max_encoding_tokens: %d\n", 
+//          "loadWiExtTo80211Structs() - ", wi->range.max_encoding_tokens );
+}
+
+/****************************************************************************
+*                                                                           *
+*      loadWiExt() - load wireless extensions structures;                   *
+*                    use ioctl calls and read /proc/net/wireless            *
+*                                                                           *
+****************************************************************************/
+static void loadWiExt ( int skfd, char *ifname, struct wireless_info *wi )
+{
+  struct iwreq wrq;                       // ioctl request structure
+  FILE *fp;
+  char  bfr[1024];
+  char  buffer[sizeof ( iwrange ) * 2]; /* Large enough */
+  char *s, *t;
+  int i, j;
+
+  strncpy ( wrq.ifr_name, ifname, IFNAMSIZ );
+
+  /* Get wireless name */
+  if ( ioctl ( skfd, SIOCGIWNAME, &wrq ) >= 0 ) {
+    strncpy ( wi->name, wrq.u.name, IFNAMSIZ );
+    wi->name[IFNAMSIZ] = '\0';
+  }
+
+  /* Get ranges */    // NOTE: some version checking in iwlib.c
+  memset ( buffer, 0, sizeof ( buffer ));
+  wrq.u.data.pointer = ( caddr_t ) &buffer;
+  wrq.u.data.length = sizeof ( buffer );
+  wrq.u.data.flags = 0;
+  if ( ioctl ( skfd, SIOCGIWRANGE, &wrq ) >= 0 ) {
+    memcpy (( char * ) &wi->range, buffer, sizeof ( iwrange ));
+    wi->has_range = 1;
+  }
+
+  /* Get network ID */
+  if ( ioctl ( skfd, SIOCGIWNWID, &wrq ) >= 0 ) {
+    memcpy ( &wi->nwid, &wrq.u.nwid, sizeof ( iwparam ));
+    wi->has_nwid = 1;
+  }
+
+  /* Get frequency / channel */         // THIS NUMBER LOOKS FUNNY
+  if ( ioctl ( skfd, SIOCGIWFREQ, &wrq ) >= 0 ) {
+    wi->has_freq = 1;
+    wi->freq = (( double ) wrq.u.freq.m ) * pow ( 10, wrq.u.freq.e );
+  }
+
+  /* Get sensitivity */
+  if ( ioctl ( skfd, SIOCGIWSENS, &wrq ) >= 0 ) {
+    wi->has_sens = 1;
+    memcpy ( &wi->sens, &wrq.u.sens, sizeof ( iwparam ));
+  }
+
+  /* Get encryption information */
+  wrq.u.data.pointer = ( caddr_t ) &wi->key;
+  wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
+  wrq.u.data.flags = 0;
+  if ( ioctl ( skfd, SIOCGIWENCODE, &wrq ) >= 0 ) {
+    wi->has_key = 1;
+    wi->key_size = wrq.u.data.length;
+    wi->key_flags = wrq.u.data.flags;
+    wepCurrentKey = wrq.u.data.flags & IW_ENCODE_INDEX;
+  }
+
+  for ( i = 0; i < wi->range.max_encoding_tokens; i++ ) {
+    wrq.u.data.pointer = ( caddr_t ) &wi->key;
+    wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
+    wrq.u.data.flags = i;
+    if ( ioctl ( skfd, SIOCGIWENCODE, &wrq ) >= 0 ) {
+      if ( ( wrq.u.data.length != 0 ) &&
+          !( wrq.u.data.flags & IW_ENCODE_DISABLED )) {
+        wep[i].len = wrq.u.data.length;
+        wep[i].haveKey = TRUE;
+        t = wep[i].key;
+        for ( j = 0; j < wrq.u.data.length; j++ ) {
+          if (( j & 0x1 ) == 0 && j != 0 )
+        	  strcpy ( t++, "-");
+          sprintf ( t, "%.2X", wi->key[j] );
+          t += 2;
+        }
+        t = '\0';
+      }
+    }
+  }
+
+  /* Get ESSID */
+  wrq.u.essid.pointer = ( caddr_t ) &wi->essid;
+  wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
+  wrq.u.essid.flags = 0;
+  if ( ioctl ( skfd, SIOCGIWESSID, &wrq ) >= 0 ) {
+    wi->has_essid = 1;
+    wi->essid_on = wrq.u.data.flags;
+  }
+
+  /* Get AP address */
+  if ( ioctl ( skfd, SIOCGIWAP, &wrq ) >= 0 ) {
+    wi->has_ap_addr = 1;
+    memcpy ( &wi->ap_addr, &wrq.u.ap_addr, sizeof ( sockaddr ));
+  }
+
+  /* Get NickName */
+  wrq.u.essid.pointer = ( caddr_t ) &wi->nickname;
+  wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
+  wrq.u.essid.flags = 0;
+  if ( ioctl ( skfd, SIOCGIWNICKN, &wrq ) >= 0 ) {
+    if ( wrq.u.data.length > 1 )
+      wi->has_nickname = 1;
+  }
+
+  /* Get bit rate */
+  if ( ioctl ( skfd, SIOCGIWRATE, &wrq ) >= 0 ) {
+    wi->has_bitrate = 1;
+    memcpy ( &wi->bitrate, &wrq.u.bitrate, sizeof ( iwparam ));
+  }
+
+  /* Get RTS threshold */
+  if ( ioctl ( skfd, SIOCGIWRTS, &wrq ) >= 0 ) {
+    wi->has_rts = 1;
+    memcpy ( &wi->rts, &wrq.u.rts, sizeof ( iwparam ));
+  }
+
+  /* Get fragmentation threshold */
+  if ( ioctl ( skfd, SIOCGIWFRAG, &wrq ) >= 0 ) {
+      wi->has_frag = 1;
+      memcpy ( &wi->frag, &wrq.u.frag, sizeof ( iwparam ));
+    }
+
+  /* Get operation mode */
+  if ( ioctl ( skfd, SIOCGIWMODE, &wrq ) >= 0 ) {
+      wi->mode = wrq.u.mode;
+      if ( wi->mode < IW_NUM_OPER_MODE && wi->mode >= 0 )
+        wi->has_mode = 1;
+  }
+
+  /* Get Power Management settings */                 // #if WIRELESS_EXT > 9
+  wrq.u.power.flags = 0;
+  if ( ioctl ( skfd, SIOCGIWPOWER, &wrq ) >= 0 ) {
+    wi->has_power = 1;
+    memcpy ( &wi->power, &wrq.u.power, sizeof ( iwparam ));
+  }
+
+  /* Get retry limit/lifetime */                      // #if WIRELESS_EXT > 10
+  if ( ioctl ( skfd, SIOCGIWRETRY, &wrq ) >= 0 ) {    
+    wi->has_retry = 1;
+    memcpy ( &wi->retry, &wrq.u.retry, sizeof ( iwparam ));
+  }
+
+  /* Get stats */                                     // #if WIRELESS_EXT > 11
+  wrq.u.data.pointer = ( caddr_t ) &wi->stats;
+  wrq.u.data.length = 0;
+  wrq.u.data.flags = 1;   /* Clear updated flag */
+  if ( ioctl ( skfd, SIOCGIWSTATS, &wrq ) < 0 )
+    wi->has_stats = 1;
+
+  if ( !wi->has_stats ) {                        // no ioctl support, go to file
+    fp = fopen ( PROC_NET_WIRELESS, "r" );
+    if ( fp ) {
+      while ( fgets ( bfr, sizeof ( bfr ), fp )) {
+        bfr [ sizeof ( bfr ) - 1 ] = '\0';        // no buffer overruns here!
+        strtok (( char * ) &bfr, "\n" );          // '\n' => '\0'
+        if ( strstr ( bfr, ifname ) && strstr ( bfr, ":" )) {
+          wi->has_stats = 1;
+          s = bfr;
+          s = strchr ( s, ':' ); s++;             /* Skip ethX:   */
+          s = strtok ( s, " " );                  /* ' ' => '\0'  */
+          sscanf ( s, "%X", &wi->stats.status ); // status 
+
+          s = strtok ( NULL, " " );               // link quality
+          if ( strchr ( s, '.' ) != NULL )
+            wi->stats.qual.updated |= 1;
+          sscanf ( s, "%d", &wi->stats.qual.qual );
+
+          s = strtok ( NULL, " " );               // signal level
+          if ( strchr ( s,'.' ) != NULL )
+            wi->stats.qual.updated |= 2;
+          sscanf ( s, "%d", &wi->stats.qual.level );
+
+          s = strtok ( NULL, " " );               // noise level
+          if ( strchr ( s, '.' ) != NULL )
+            wi->stats.qual.updated += 4;
+          sscanf ( s, "%d", &wi->stats.qual.noise );
+
+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.nwid     );
+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.code     );
+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.fragment );
+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.retries  );
+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.misc     );
+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.miss.beacon      );
+        }
+      }
+      fclose ( fp );
+    }
+  }
+
+// printf ( "%s bfr: %s\n", "loadTables()", bfr );
+}
+
+/****************************************************************************
+*                                                                           *
+*       displayWiExt() - show what I got from Wireless Extensions           *
+*                                                                           *
+****************************************************************************/
+static void displayWiExt ( struct wireless_info info )
+{
+#ifdef DISPLAYWIEXT
+  int i;
+  char title[] = "displayWiExt() -";
+
+  printf ( "========================================\n" );
+  printf ( "===> Wireless Extension IOCTL calls <===\n" );
+  printf ( "========================================\n" );
+
+  if ( strlen ( info.name ))
+    printf ( "%s name: %s\n", "SIOCGIWNAME", info.name );
+  else
+    printf ( "%s\n", "no info.name support" );
+
+  if ( info.has_nickname = 1 )
+    printf ( "%s nickname: %s\n", "SIOCGIWNICKN", info.nickname );
+  else
+    printf ( "%s %s\n", "SIOCGIWNICKN", " ===> no info.nickname support" );
+
+  if ( info.has_essid ) 
+    printf ( "%s essid_on: %d essid: %s\n", "SIOCGIWESSID", info.essid_on, info.essid );
+  else
+    printf ( "%s %s\n", "SIOCGIWESSID", " ===> no info.essid support" );
+
+  if ( info.has_range ) {
+    printf ( "%s throughput: %d\n",           "SIOCGIWRANGE", info.range.throughput );
+    printf ( "%s min_nwid: %d\n",             "SIOCGIWRANGE", info.range.min_nwid  );
+    printf ( "%s max_nwid: %d\n",             "SIOCGIWRANGE", info.range.max_nwid  );
+    printf ( "%s sensitivity: %d\n",          "SIOCGIWRANGE", info.range.sensitivity );
+    printf ( "%s num_bitrates: %d\n",         "SIOCGIWRANGE", info.range.num_bitrates );
+    for ( i = 0; i < info.range.num_bitrates; i++ ) 
+      printf ( "%s bitrate[%d]: %d\n",        "SIOCGIWRANGE", i, info.range.bitrate[i]  );
+    printf ( "%s min_rts: %d\n",              "SIOCGIWRANGE", info.range.min_rts );
+    printf ( "%s max_rts: %d\n",              "SIOCGIWRANGE", info.range.max_rts );
+    printf ( "%s min_frag: %d\n",             "SIOCGIWRANGE", info.range.min_frag );
+    printf ( "%s max_frag: %d\n",             "SIOCGIWRANGE", info.range.max_frag );
+    printf ( "%s min_pmp: %d\n",              "SIOCGIWRANGE", info.range.min_pmp );
+    printf ( "%s max_pmp: %d\n",              "SIOCGIWRANGE", info.range.max_pmp );
+    printf ( "%s min_pmt: %d\n",              "SIOCGIWRANGE", info.range.min_pmt );
+    printf ( "%s max_pmt: %d\n",              "SIOCGIWRANGE", info.range.max_pmt );
+    printf ( "%s pmp_flags: %d\n",            "SIOCGIWRANGE", info.range.pmp_flags );
+    printf ( "%s pmt_flags: %d\n",            "SIOCGIWRANGE", info.range.pmt_flags );
+    printf ( "%s pm_capa: %d\n",              "SIOCGIWRANGE", info.range.pm_capa );
+    printf ( "%s num_encoding_sizes: %d\n",   "SIOCGIWRANGE", info.range.num_encoding_sizes );
+    for ( i = 0; i < info.range.num_encoding_sizes; i++ ) 
+      printf ( "%s encoding_size[%d]: %d\n",  "SIOCGIWRANGE", i, info.range.encoding_size[i]  );
+    printf ( "%s max_encoding_tokens: %d\n",  "SIOCGIWRANGE", info.range.max_encoding_tokens );
+//  printf ( "%s encoding_login_index: %d\n", "SIOCGIWRANGE", info.range.encoding_login_index );
+    printf ( "%s txpower_capa: %d\n",         "SIOCGIWRANGE", info.range.txpower_capa );
+    printf ( "%s num_txpower: %d dBm\n",      "SIOCGIWRANGE", info.range.num_txpower );
+    for ( i = 0; i < info.range.num_txpower; i++ ) 
+      printf ( "%s txpower[%d]: %d\n",        "SIOCGIWRANGE", i, info.range.txpower[i]  );
+    printf ( "%s we_version_compiled: %d\n",  "SIOCGIWRANGE", info.range.we_version_compiled );
+    printf ( "%s we_version_source: %d\n",    "SIOCGIWRANGE", info.range.we_version_source );
+    printf ( "%s retry_capa: %d\n",           "SIOCGIWRANGE", info.range.retry_capa );
+    printf ( "%s retry_flags: %d\n",          "SIOCGIWRANGE", info.range.retry_flags );
+    printf ( "%s r_time_flags: %d\n",         "SIOCGIWRANGE", info.range.r_time_flags );
+    printf ( "%s min_retry: %d\n",            "SIOCGIWRANGE", info.range.min_retry );
+    printf ( "%s max_retry: %d\n",            "SIOCGIWRANGE", info.range.max_retry );
+    printf ( "%s min_r_time: %d\n",           "SIOCGIWRANGE", info.range.min_r_time );
+    printf ( "%s max_r_time: %d\n",           "SIOCGIWRANGE", info.range.max_r_time );
+    printf ( "%s num_channels: %d\n",         "SIOCGIWRANGE", info.range.num_channels );
+    printf ( "%s num_frequency: %d\n",        "SIOCGIWRANGE", info.range.num_frequency );
+    for ( i = 0; i < info.range.num_frequency; i++ ) 
+      printf ( "%s freq[%d].i: %d freq[%d].e: %d freq[%d].m: %d\n", "SIOCGIWRANGE", 
+                i, info.range.freq[i].i, i, info.range.freq[i].e, i, info.range.freq[i].m );
+  }
+  else
+    printf ( "%s %s\n", "SIOCGIWRANGE", " ===> no info.range support" );
+
+  if ( info.has_nwid ) 
+    printf ( "%s nwid - disabled: %d value: %X\n", "SIOCGIWNWID", info.nwid.disabled, info.nwid.value );
+  else
+    printf ( "%s %s\n", "SIOCGIWNWID", " ===> no info.nwid support" );
+
+  if ( info.has_freq ) {
+//  printf ( "%s freq: %g\n", "SIOCGIWFREQ", info.freq / GIGA );
+    printf ( "%s freq: %g\n", "SIOCGIWFREQ", info.freq );
+  }
+  else
+    printf ( "%s %s\n", "SIOCGIWFREQ", " ===> no info.freq support" );
+
+  if ( info.has_sens )
+    printf ( "%s sens: %d\n", "SIOCGIWSENS", info.sens );
+  else
+    printf ( "%s %s\n", "SIOCGIWSENS", " ===> no info.sens support" );
+
+  if ( info.has_key ) {
+    printf ( "%s key_size: %d key_flags: %d wepCurrentKey: %d\n", 
+              "SIOCGIWENCODE", info.key_size, info.key_flags, wepCurrentKey );
+    printf ( "%s MODE: %d DISABLED: %d INDEX: %d OPEN: %d RESTRICTED: %d NOKEY: %d TEMP: %d\n",
+              "SIOCGIWENCODE",                           info.key_flags & IW_ENCODE_MODE,
+              info.key_flags & IW_ENCODE_DISABLED ? 1:0, info.key_flags & IW_ENCODE_INDEX,
+              info.key_flags & IW_ENCODE_OPEN     ? 1:0, info.key_flags & IW_ENCODE_RESTRICTED ? 1:0,
+              info.key_flags & IW_ENCODE_NOKEY    ? 1:0, info.key_flags & IW_ENCODE_TEMP       ? 1:0 );
+  }
+  else
+    printf ( "%s %s\n", "SIOCGIWENCODE", " ===> no info.key support" );
+
+  for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
+    if ( wep[i].haveKey )
+      printf ( "%s wep[%d].len: %d wep[%d].key: %s\n", 
+                "SIOCGIWENCODE", i, wep[i].len, i, wep[i].key );
+  }
+
+  if ( info.has_ap_addr )
+    printf ( "%s ap_addr.sa_data: %02X:%02X:%02X:%02X:%02X:%02X ap_addr.sa_family: %d\n", 
+              "SIOCGIWAP",  ( UCHAR ) info.ap_addr.sa_data[0], ( UCHAR ) info.ap_addr.sa_data[1], 
+                            ( UCHAR ) info.ap_addr.sa_data[2], ( UCHAR ) info.ap_addr.sa_data[3], 
+                            ( UCHAR ) info.ap_addr.sa_data[4], ( UCHAR ) info.ap_addr.sa_data[5], 
+                                      info.ap_addr.sa_family );
+  else
+    printf ( "%s %s\n", "SIOCGIWAP", " ===> no ap_addr information" );
+
+  if ( info.has_bitrate )
+    printf ( "%s bitrate: %d value: %d fixed: %d disabled: %d flags: %d\n", 
+              "SIOCGIWRATE", info.bitrate, info.bitrate.value, info.bitrate.fixed, 
+                             info.bitrate.disabled, info.bitrate.flags );
+  else
+    printf ( "%s %s\n", "SIOCGIWRATE", " ===> no info.bitrate support" );
+
+  if ( info.has_rts )
+    printf ( "%s rts: %d\n", "SIOCGIWRTS", info.rts );
+  else
+    printf ( "%s %s\n", "SIOCGIWRTS", " ===> no info.rts support" );
+
+  if ( info.has_frag )
+    printf ( "%s frag: %d\n", "SIOCGIWFRAG", info.frag );
+  else
+    printf ( "%s %s\n", "SIOCGIWFRAG", " ===> no info.frag support" );
+
+  if ( info.has_mode ) 
+    printf ( "%s mode: %d\n", "SIOCGIWMODE", info.mode );
+  else
+    printf ( "%s %s\n", "SIOCGIWMODE", " ===> no info.mode support" );
+
+  if ( info.has_power ) {
+    printf ( "%s power: %d\n", "SIOCGIWPOWER", info.power );
+    printf ( "%s disabled: %d MIN: %d MAX: %d TIMEOUT: %d RELATIVE: %d\n",
+              "SIOCGIWPOWER",
+              info.power.disabled                  ? 1:0, 
+              info.power.flags & IW_POWER_MIN      ? 1:0, 
+              info.power.flags & IW_POWER_MAX      ? 1:0, 
+              info.power.flags & IW_POWER_TIMEOUT  ? 1:0, 
+              info.power.flags & IW_POWER_RELATIVE ? 1:0 ); 
+    printf ( "%s UNICAST: %d MULTICAST: %d ALL: %d FORCE: %d REPEATER: %d\n",
+              "SIOCGIWPOWER",
+              info.power.flags & IW_POWER_UNICAST_R   ? 1:0, 
+              info.power.flags & IW_POWER_MULTICAST_R ? 1:0, 
+              info.power.flags & IW_POWER_ALL_R       ? 1:0, 
+              info.power.flags & IW_POWER_FORCE_S     ? 1:0, 
+              info.power.flags & IW_POWER_REPEATER    ? 1:0 ); 
+  }
+  else
+    printf ( "%s %s\n", "SIOCGIWPOWER", " ===> no info.power support" );
+
+  if ( info.has_retry )
+    printf ( "%s retry: %d\n", "SIOCGIWRETRY", info.retry );
+  else
+    printf ( "%s %s\n", "SIOCGIWRETRY", " ===> no info.retry support" );
+
+  if ( info.has_stats ) {
+    printf ( "%s status: %d\n",           "SIOCGIWSTATS", info.stats.status           );
+    printf ( "%s qual.level: %d\n",       "SIOCGIWSTATS", info.stats.qual.level       );
+    printf ( "%s qual.noise: %d\n",       "SIOCGIWSTATS", info.stats.qual.noise       );
+    printf ( "%s qual.qual: %d\n",        "SIOCGIWSTATS", info.stats.qual.qual        );
+    printf ( "%s qual.updated: %d\n",     "SIOCGIWSTATS", info.stats.qual.updated     );
+    printf ( "%s discard.code: %d\n",     "SIOCGIWSTATS", info.stats.discard.code     );
+    printf ( "%s discard.fragment: %d\n", "SIOCGIWSTATS", info.stats.discard.fragment );
+    printf ( "%s discard.misc: %d\n",     "SIOCGIWSTATS", info.stats.discard.misc     );
+    printf ( "%s discard.nwid: %d\n",     "SIOCGIWSTATS", info.stats.discard.nwid     );
+    printf ( "%s discard.retries: %d\n",  "SIOCGIWSTATS", info.stats.discard.retries  );
+    printf ( "%s miss.beacon: %d\n",      "SIOCGIWSTATS", info.stats.miss.beacon      );
+  }
+  else
+    printf ( "%s %s\n", "SIOCGIWSTATS", " ===> no info.stats support" );
+
+  if ( info.txpower.flags & IW_TXPOW_MWATT )
+    printf ( "%s txpower1: %d dBm disabled: %d fixed: %d flags: %d\n", "SIOCGIWRANGE", 
+      mWatt2dbm ( info.txpower.value ), info.txpower.disabled, info.txpower.fixed, info.txpower.flags);
+  else
+    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 );
+
+  if ( info.has_range ) 
+    if ( info.sens.value < 0 )
+      printf ( "%s sens: %d dBm\n", "SIOCGIWRANGE", info.sens.value );
+    else
+      printf ( "%s sens: %d/%d\n", "SIOCGIWRANGE", info.sens.value, info.range.sensitivity );
+
+  if ( info.has_range && ( info.stats.qual.level != 0 ))
+      if ( info.stats.qual.level > info.range.max_qual.level )
+        /* Statistics are in dBm (absolute power measurement) */
+        printf ( "%s Quality: %d/%d Signal level: %d dBm Noise level: %d dBm\n",
+                  "SIOCGIWRANGE",
+                  info.stats.qual.qual, info.range.max_qual.qual,
+                  info.stats.qual.level - 0x100,
+                  info.stats.qual.noise - 0x100 );
+      else
+        printf (  "%s Quality: %d/%d Signal level: %d/%d Noise level: %d/%d",
+                  "SIOCGIWRANGE",
+                  info.stats.qual.qual,  info.range.max_qual.qual,
+                  info.stats.qual.level, info.range.max_qual.level,
+                  info.stats.qual.noise, info.range.max_qual.noise );
+
+#endif // #ifdef DISPLAYWIEXT
+}
+
+/****************************************************************************
+*                                                                           *
+*                        Linked List Functions                              *
+*                                                                           *
+****************************************************************************/
+/****************************************************************************
+*                                                                           *
+*                addList() - add an entry to a linked list                  *
+*                                                                           *
+****************************************************************************/
+static void 
+addList ( char *l, char *data, int len  )
+{
+  char uid[256];
+  LIST_HEAD ( , avNode ) *list;       
+
+  // NOTE: this assumes the UID is at the begining of the 
+  //       data structure and that UIDs are strings
+  
+  list = ( LIST_HEAD ( , avNode ) * ) l;            // NOTE: don't know how to get 
+  strcpy ( uid, data );                             //  rid of compiler warning on
+                                                    //  LISTHEAD typecast
+  // create a new node and the data that goes in it
+  newNode = malloc ( sizeof ( struct avNode ));
+  newNode->data = malloc ( len );
+  memcpy ( newNode->data, data, len );
+
+  // this deals with an empty list
+  if ( LIST_EMPTY ( list )) {
+    LIST_INSERT_HEAD ( list, newNode, nodes );
+    return;
+  }
+
+  // this deals with UIDs that match
+  for ( np = LIST_FIRST ( list ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    if ( strncmp ( uid, np->data, strlen ( uid )) == 0 ) {                      // found matching UID
+      LIST_INSERT_AFTER ( np, newNode, nodes );
+      if ( np->data )
+        free ( np->data );
+      LIST_REMOVE ( np, nodes );
+      free ( np );
+      return;
+    }
+  }
+
+  // this deals with inserting a new UID in the list
+  for ( np = LIST_FIRST ( list ); np != NULL; np = LIST_NEXT ( np, nodes )) {
+    lastNode = np;
+    if ( strncmp ( np->data, uid, strlen ( uid )) > 0 ) {                       // old ID > new ID AND
+      LIST_INSERT_BEFORE ( np, newNode, nodes );
+      return;
+    }
+  }
+
+  // this deals with a UID that needs to go on the end of the list
+  LIST_INSERT_AFTER ( lastNode, newNode, nodes );
+
+  return;
+}
+
+/****************************************************************************
+*                                                                           *
+*              initLists() - initialize all the linked lists                *
+*                                                                           *
+****************************************************************************/
+static void initLists()
+{
+  LIST_INIT ( &scList );  LIST_INIT ( &aaList );  LIST_INIT ( &dfList );
+  LIST_INIT ( &kmList );  LIST_INIT ( &prList );
+  LIST_INIT ( &opList );  LIST_INIT ( &coList );
+  LIST_INIT ( &gaList );  LIST_INIT ( &riList );  LIST_INIT ( &poList );
+  LIST_INIT ( &paList );  LIST_INIT ( &ptList );  LIST_INIT ( &pfList );
+  LIST_INIT ( &pdList );  LIST_INIT ( &piList );  LIST_INIT ( &rdList );
+  LIST_INIT ( &alList );  LIST_INIT ( &rtList );  LIST_INIT ( &rrList );
+}
+/****************************************************************************
+*                                                                           *
+*                 flushLists() - flush all linked lists                     *
+*                                                                           *
+****************************************************************************/
+static void flushLists()
+{
+  flushList (( char * ) &scList );  flushList (( char * ) &aaList );
+  flushList (( char * ) &dfList );  flushList (( char * ) &kmList );
+  flushList (( char * ) &prList );
+  flushList (( char * ) &opList );  flushList (( char * ) &coList );
+  flushList (( char * ) &gaList );  flushList (( char * ) &riList );
+  flushList (( char * ) &poList );  flushList (( char * ) &paList );
+  flushList (( char * ) &ptList );  flushList (( char * ) &pfList );
+  flushList (( char * ) &pdList );  flushList (( char * ) &piList );
+  flushList (( char * ) &rdList );  flushList (( char * ) &alList );
+  flushList (( char * ) &rtList );  flushList (( char * ) &rrList );
+}
+
+/****************************************************************************
+*                                                                           *
+*                   flushList() - flush a linked list                       *
+*                                                                           *
+****************************************************************************/
+static void flushList ( char *l )
+{
+  LIST_HEAD ( , avNode ) *list;
+  
+  list = ( LIST_HEAD ( , avNode ) * ) l;    // NOTE: don't know how to get 
+  while ( !LIST_EMPTY ( list )) {           //  rid of compiler warning on
+    np = LIST_FIRST ( list );               //  LISTHEAD typecast
+    if ( np->data )
+      free ( np->data );
+    LIST_REMOVE ( np, nodes );
+    free ( np );
+  }
+}
+
+/****************************************************************************
+*                                                                           *
+*                            Utility Functions                              *
+*                                                                           *
+****************************************************************************/
+/****************************************************************************
+*                                                                           *
+*        The following two routines were taken directly from iwlib.c        *
+*                                                                           *
+****************************************************************************/
+ /*
+ * Open a socket.
+ * Depending on the protocol present, open the right socket. The socket
+ * will allow us to talk to the driver.
+ */
+static int openSocket ( void )
+{
+  static const int families[] = {
+    AF_INET, AF_IPX, AF_AX25, AF_APPLETALK
+  };
+  unsigned int  i;
+  int   sock;
+
+  /*
+   * Now pick any (exisiting) useful socket family for generic queries
+   * Note : don't open all the socket, only returns when one matches,
+   * all protocols might not be valid.
+   * Workaround by Jim Kaba <jkaba@sarnoff.com>
+   * Note : in 99% of the case, we will just open the inet_sock.
+   * The remaining 1% case are not fully correct...
+   */
+
+  /* Try all families we support */
+  for(i = 0; i < sizeof(families)/sizeof(int); ++i) {
+      /* Try to open the socket, if success returns it */
+      sock = socket(families[i], SOCK_DGRAM, 0);
+      if(sock >= 0)
+  return sock;
+  }
+
+  return -1;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Convert a value in milliWatt to a value in dBm.
+ */
+static int mWatt2dbm ( int in )
+{
+#ifdef WE_NOLIBM
+  /* Version without libm : slower */
+  double  fin = (double) in;
+  int   res = 0;
+
+  /* Split integral and floating part to avoid accumulating rounding errors */
+  while(fin > 10.0)
+    {
+      res += 10;
+      fin /= 10.0;
+    }
+  while(fin > 1.000001) /* Eliminate rounding errors, take ceil */
+    {
+      res += 1;
+      fin /= LOG10_MAGIC;
+    }
+  return(res);
+#else /* WE_NOLIBM */
+  /* Version with libm : faster */
+  return((int) (ceil(10.0 * log10((double) in))));
+#endif  /* WE_NOLIBM */
+}
+
+/****************************************************************************
+*                                                                           *
+*                 htob - converts hex string to binary                      *
+*                                                                           *
+****************************************************************************/
+static char *htob ( char *s )
+{
+    char nibl, *byt;
+    static char bin[20];
+
+    byt = bin;
+
+    while ((nibl = *s++) && nibl != ' ') {    /* While not end of string. */
+      nibl -= ( nibl > '9') ?  ('A' - 10): '0';
+      *byt = nibl << 4;                              /* place high nibble */
+      if((nibl = *s++) && nibl != ' ') {
+        nibl -= ( nibl > '9') ?  ('A' - 10): '0';
+        *byt |= nibl;                                /*  place low nibble */
+      }
+      else break;
+      ++byt;
+    }
+    *++byt = '\0';
+    return ( bin );
+}
+
+/****************************************************************************
+*                                                                           *
+*           hasChanged() - see if area has been changed from NULLs          *
+*                                                                           *
+****************************************************************************/
+static int hasChanged ( char *loc, int len )
+{
+  char *wrk;
+  int changed = TRUE;
+
+  wrk = malloc ( len );
+  memset ( wrk, 0, len );
+  if ( memcmp ( loc, wrk, len ) == 0 )
+    changed = FALSE;
+  free ( wrk );
+
+  return ( changed );
+}
+
--- net-snmp-5.1.2-orig/agent/mibgroup/ieee802dot11.h	1970-01-01 01:00:00.000000000 +0100
+++ net-snmp-5.1.2-5/agent/mibgroup/ieee802dot11.h	2005-03-13 16:17:21.000000000 +0100
@@ -0,0 +1,730 @@
+/****************************************************************************
+*                                                                           *
+*  File Name:           ieee802dot11.h                                      *
+*  Used By:                                                                 *
+*                                                                           *
+*  Operating System:                                                        *
+*  Purpose:                                                                 *
+*                                                                           *
+*  Comments:                                                                *
+*                                                                           *
+*  Author:              Larry Simmons                                       *
+*                       lsimmons@avantcom.com                               *
+*                       www.avantcom.com                                    *
+*                                                                           *
+*  Creation Date:       09/02/03                                            *
+*                                                                           *
+*   Ver    Date   Inits Modification                                        *
+*  ----- -------- ----- ------------                                        *
+*  0.0.1 09/02/03  LRS  created                                             *
+*  0.0.2 09/24/03  LRS  wouldn't build after fresh ./configure              *
+****************************************************************************/
+/* This file was generated by mib2c and is intended for use as a mib module
+  for the ucd-snmp snmpd agent. */
+#ifndef _MIBGROUP_IEEE802DOT11_H
+#define _MIBGROUP_IEEE802DOT11_H
+/* we may use header_generic and header_simple_table from the util_funcs module */
+
+/****************************************************************************
+*                               Includes                                    *
+****************************************************************************/
+#include <sys/queue.h>
+
+/****************************************************************************
+*                             Linked List Defines                           *
+****************************************************************************/
+// here are some Linked List MACROS I wanted to use, 
+// but curiously were not in /usr/includes/sys/queue.h
+
+#ifndef LIST_EMPTY
+  #define	LIST_EMPTY(head)	((head)->lh_first == NULL)
+#endif
+
+#ifndef LIST_NEXT
+  #define	LIST_NEXT(elm, field)	((elm)->field.le_next)
+#endif
+
+#ifndef LIST_INSERT_BEFORE
+  #define	LIST_INSERT_BEFORE(listelm, elm, field) do {			\
+	  (elm)->field.le_prev = (listelm)->field.le_prev;		\
+	  LIST_NEXT((elm), field) = (listelm);				\
+	  *(listelm)->field.le_prev = (elm);				\
+	  (listelm)->field.le_prev = &LIST_NEXT((elm), field);		\
+  } while (0)
+#endif
+
+#ifndef LIST_FIRST
+  #define	LIST_FIRST(head)	((head)->lh_first)
+#endif
+
+/****************************************************************************
+*                             802.11 MIB Defines                            *
+****************************************************************************/
+#define SYS_STRING_LEN                     256
+#define MACADDR_LEN                        ( 6 * 2 ) + 5
+#define OPER_RATE_SET_LEN                  126
+#define MAN_OUI_LEN                        ( 3 * 2 ) + 2
+#define WEP_STR_LEN                         64
+#define SNMP_STR_LEN                       128
+#define TEXT_LEN                            80
+#define IFINDEX_LEN                          4
+#define IFNAME_LEN                          16
+#define MAX_WEP_KEYS                         4
+
+#define AUTHENICATION_ALGORITHMS_INDEX_LEN   4
+#define WEP_DEFAULT_KEY_INDEX_LEN            4
+#define WEP_KEY_MAPPING_INDEX_LEN            4
+#define GROUP_ADDRESS_INDEX_LEN              4
+#define REG_DOMAIN_SUPPORT_INDEX_LEN         4
+#define ANTENNA_LIST_INDEX_LEN               4
+#define SUPPORTED_DATA_RATES_TX_INDEX_LEN    4
+#define SUPPORTED_DATA_RATES_RX_INDEX_LEN    4
+
+#define SC_UID_LEN  IFINDEX_LEN
+#define AA_UID_LEN  IFINDEX_LEN + AUTHENICATION_ALGORITHMS_INDEX_LEN
+#define DF_UID_LEN  IFINDEX_LEN + WEP_DEFAULT_KEY_INDEX_LEN
+#define KM_UID_LEN  IFINDEX_LEN + WEP_KEY_MAPPING_INDEX_LEN
+#define PR_UID_LEN  IFINDEX_LEN
+#define OP_UID_LEN  IFINDEX_LEN
+#define CO_UID_LEN  IFINDEX_LEN
+#define GA_UID_LEN  IFINDEX_LEN + GROUP_ADDRESS_INDEX_LEN
+#define RI_UID_LEN  IFINDEX_LEN
+#define PO_UID_LEN  IFINDEX_LEN
+#define PA_UID_LEN  IFINDEX_LEN
+#define PT_UID_LEN  IFINDEX_LEN
+#define PF_UID_LEN  IFINDEX_LEN
+#define PD_UID_LEN  IFINDEX_LEN
+#define PI_UID_LEN  IFINDEX_LEN
+#define RD_UID_LEN  IFINDEX_LEN + REG_DOMAIN_SUPPORT_INDEX_LEN
+#define AL_UID_LEN  IFINDEX_LEN + ANTENNA_LIST_INDEX_LEN
+#define RT_UID_LEN  IFINDEX_LEN + SUPPORTED_DATA_RATES_TX_INDEX_LEN
+#define RR_UID_LEN  IFINDEX_LEN + SUPPORTED_DATA_RATES_RX_INDEX_LEN
+
+/****************************************************************************
+*                           Linked List Structure                           *
+****************************************************************************/
+static struct avNode {  
+  LIST_ENTRY ( avNode ) nodes; 
+  char *data;                                 // pointer to data
+};
+
+typedef LIST_HEAD ( , avNode ) avList_t;
+
+/****************************************************************************
+*                          802.11 MIB structures                            *
+****************************************************************************/
+/****************************************************************************
+*                             dot11Smt Group                                *
+****************************************************************************/
+/****************************************************************************
+*                          dot11StationConfigTable                          *
+****************************************************************************/
+static struct scTbl_data {
+
+  char  UID       [ SC_UID_LEN + 1 ];               // unique ID
+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
+
+  long  ifIndex;                                    // ifindex of card
+
+  char  stationID [ MACADDR_LEN + 1 ];              // Default actual MacAddr
+  long  mediumOccupancyLimit;
+  long  CFPPollable;
+  long  CFPPeriod;
+  long  maxDuration;
+  long  authenticationResponseTimeOut;
+  long  privacyOptionImplemented;
+  long  powerManagementMode;
+  char  desiredSSID             [ SNMP_STR_LEN + 1 ];
+  long  desiredBSSType;
+  char  operationalRateSet      [ OPER_RATE_SET_LEN + 1];
+  long  beaconPeriod;
+  long  DTIMPeriod;
+  long  associationResponseTimeOut;
+  long  disAssociationReason;
+  char  disAssociationStation   [ MACADDR_LEN + 1 ];
+  long  deAuthenticationReason;
+  char  deAuthenticationStation [ MACADDR_LEN + 1 ];
+  long  authenticateFailStatus;
+  char  authenticateFailStation [ MACADDR_LEN + 1 ];
+
+  long  haveStationID;
+  long  haveMediumOccupancyLimit;
+  long  haveCFPPollable;
+  long  haveCFPPeriod;
+  long  haveMaxDuration;
+  long  haveAuthenticationResponseTimeOut;
+  long  havePrivacyOptionImplemented;
+  long  havePowerManagementMode;
+  long  haveDesiredSSID;
+  long  haveDesiredBSSType;
+  long  haveOperationalRateSet;
+  long  haveBeaconPeriod;
+  long  haveDTIMPeriod;
+  long  haveAssociationResponseTimeOut;
+  long  haveDisAssociationReason;
+  long  haveDisAssociationStation;
+  long  haveDeAuthenticationReason;
+  long  haveDeAuthenticationStation;
+  long  haveAuthenticateFailStatus;
+  long  haveAuthenticateFailStation;
+
+} nSc, *sc = &nSc;
+
+static avList_t scList;
+
+/****************************************************************************
+*                    dot11AuthenticationAlgorithmsTable                     *
+****************************************************************************/
+static struct aaTbl_data {
+
+  char  UID       [ AA_UID_LEN + 1 ];
+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
+
+  long  ifIndex;                                    // ifindex of card
+  long  authenticationAlgorithmsIndex;
+
+  long  authenticationAlgorithm;
+  long  authenticationAlgorithmsEnable;
+
+  long  haveAuthenticationAlgorithm;
+  long  haveAuthenticationAlgorithmsEnable;
+
+} nAa, *aa = &nAa;
+
+static avList_t aaList;
+
+/****************************************************************************
+*                           dot11WEPDefaultKeysTable                        *
+****************************************************************************/
+static struct dfTbl_data {
+
+  char  UID       [ DF_UID_LEN + 1 ];
+  char  ifName    [ IFNAME_LEN + 1 ];
+
+  long  ifIndex;                                    // ifindex of card
+  long  WEPDefaultKeyIndex;
+
+  char  WEPDefaultKeyValue [ WEP_STR_LEN + 1 ];
+  long  haveWEPDefaultKeyValue;
+
+} nDf, *df = &nDf;
+
+static avList_t dfList;
+
+/****************************************************************************
+*                          dot11WEPKeyMappingsTable                         *
+****************************************************************************/
+static struct kmTbl_data {
+
+  char  UID       [ KM_UID_LEN + 1 ];
+  char  ifName    [ IFNAME_LEN + 1 ];
+
+  long  ifIndex;
+  long  WEPKeyMappingIndex;
+
+  char  WEPKeyMappingAddress  [ MACADDR_LEN + 1 ];
+  long  WEPKeyMappingWEPOn;
+  char  WEPKeyMappingValue    [ WEP_STR_LEN + 1 ];
+  long  WEPKeyMappingStatus;
+
+  long  haveWEPKeyMappingIndex;
+  long  haveWEPKeyMappingAddress;
+  long  haveWEPKeyMappingWEPOn;
+  long  haveWEPKeyMappingValue;
+  long  haveWEPKeyMappingStatus;
+
+} nKm, *km = &nKm;
+
+static avList_t kmList;
+
+/****************************************************************************
+*                                dot11PrivacyTable                          *
+****************************************************************************/
+static struct prTbl_data {
+
+  char          UID       [ PR_UID_LEN + 1 ];
+  char          ifName    [ IFNAME_LEN + 1 ];
+
+  long          ifIndex;
+
+  long          privacyInvoked;
+  long          WEPDefaultKeyID;
+  long          WEPKeyMappingLength;
+  long          excludeUnencrypted;
+  unsigned long WEPICVErrorCount;
+  unsigned long WEPExcludedCount;
+
+  long          havePrivacyInvoked;
+  long          haveWEPDefaultKeyID;
+  long          haveWEPKeyMappingLength;
+  long          haveExcludeUnencrypted;
+  long          haveWEPICVErrorCount;
+  long          haveWEPExcludedCount;
+
+} nPr, *pr = &nPr;
+
+static avList_t prList;
+
+/****************************************************************************
+*                               dot11Mac Group                              *
+****************************************************************************/
+/****************************************************************************
+*                              dot11OperationTable                          *
+****************************************************************************/
+static struct opTbl_data {
+
+  char  UID       [ OP_UID_LEN + 1 ];                 // unique ID
+  char  ifName    [ IFNAME_LEN + 1 ];                 // ifName of card
+
+  long  ifIndex;                                      // ifindex of card
+
+  char  MACAddress      [ MACADDR_LEN + 1 ];
+  long  RTSThreshold;
+  long  shortRetryLimit;
+  long  longRetryLimit;
+  long  fragmentationThreshold;
+  long  maxTransmitMSDULifetime;
+  long  maxReceiveLifetime;
+  char  manufacturerID  [ SNMP_STR_LEN + 1 ];
+  char  productID       [ SNMP_STR_LEN + 1 ];
+
+  long  haveMACAddress;
+  long  haveRTSThreshold;
+  long  haveShortRetryLimit;
+  long  haveLongRetryLimit;
+  long  haveFragmentationThreshold;
+  long  haveMaxTransmitMSDULifetime;
+  long  haveMaxReceiveLifetime;
+  long  haveManufacturerID;
+  long  haveProductID;
+
+} nOp, *op = &nOp;
+
+static avList_t opList;
+
+/****************************************************************************
+*                            dot11CountersTable                             *
+****************************************************************************/
+static struct coTbl_data {
+
+  char          UID       [ CO_UID_LEN + 1 ];     // unique ID
+  char          ifName    [ IFNAME_LEN + 1 ];     // ifName of card
+
+  long          ifIndex;                          // ifindex of card
+
+  unsigned long  transmittedFragmentCount;
+  unsigned long  multicastTransmittedFrameCount;
+  unsigned long  failedCount;
+  unsigned long  retryCount;
+  unsigned long  multipleRetryCount;
+  unsigned long  frameDuplicateCount;
+  unsigned long  RTSSuccessCount;
+  unsigned long  RTSFailureCount;
+  unsigned long  ACKFailureCount;
+  unsigned long  receivedFragmentCount;
+  unsigned long  multicastReceivedFrameCount;
+  unsigned long  FCSErrorCount;
+  unsigned long  transmittedFrameCount;
+  unsigned long  WEPUndecryptableCount;
+
+  long           haveTransmittedFragmentCount;
+  long           haveMulticastTransmittedFrameCount;
+  long           haveFailedCount;
+  long           haveRetryCount;
+  long           haveMultipleRetryCount;
+  long           haveFrameDuplicateCount;
+  long           haveRTSSuccessCount;
+  long           haveRTSFailureCount;
+  long           haveACKFailureCount;
+  long           haveReceivedFragmentCount;
+  long           haveMulticastReceivedFrameCount;
+  long           haveFCSErrorCount;
+  long           haveTransmittedFrameCount;
+  long           haveWEPUndecryptableCount;
+
+} nCo, *co = &nCo;
+
+static avList_t coList;
+
+/****************************************************************************
+*                        dot11GroupAddressesTable                           *
+****************************************************************************/
+static struct gaTbl_data {
+
+  char  UID       [ GA_UID_LEN + 1 ];
+  char  ifName    [ IFNAME_LEN + 1 ];
+
+  long  ifIndex;                                    // ifindex of card
+  long  groupAddressesIndex;
+
+  char  address   [ MACADDR_LEN + 1 ];
+  long  groupAddressesStatus;
+
+  long  haveAddress;
+  long  haveGroupAddressesStatus;
+
+} nGa, *ga = &nGa;
+
+static avList_t gaList;
+
+/****************************************************************************
+*                               dot11Res Group                              *
+****************************************************************************/
+static char  resourceTypeIDName[] = "RTID";
+static long  haveResourceTypeIDName = 1;
+
+/****************************************************************************
+*                           dot11ResourceInfoTable                          *
+****************************************************************************/
+static struct riTbl_data {
+
+  char  UID       [ RI_UID_LEN + 1 ];               // unique ID
+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
+
+  long  ifIndex;                                    // ifindex of card
+
+  char  manufacturerOUI            [ MAN_OUI_LEN    + 1 ];
+  char  manufacturerName           [ SYS_STRING_LEN + 1 ];
+  char  manufacturerProductName    [ SYS_STRING_LEN + 1 ];
+  char  manufacturerProductVersion [ SYS_STRING_LEN + 1 ];
+
+  char  haveManufacturerOUI;
+  char  haveManufacturerName;
+  char  haveManufacturerProductName;
+  char  haveManufacturerProductVersion;
+
+} nRi, *ri = &nRi;
+
+static avList_t riList;
+
+/****************************************************************************
+*                               dot11Phy Group                              *
+****************************************************************************/
+/****************************************************************************
+*                           dot11PhyOperationTable                          *
+****************************************************************************/
+static struct poTbl_data {
+
+  char  UID       [ PO_UID_LEN + 1 ];               // unique ID
+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
+
+  long  ifIndex;                                    // ifindex of card
+
+  long  PHYType;
+  long  currentRegDomain;
+  long  tempType;
+
+  long  havePHYType;
+  long  haveCurrentRegDomain;
+  long  haveTempType;
+
+} nPo, *po = &nPo;
+
+static avList_t poList;
+
+/****************************************************************************
+*                           dot11PhyAntennaEntry                            *
+****************************************************************************/
+static struct paTbl_data {
+
+  char  UID       [ PA_UID_LEN + 1 ];               // unique ID
+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
+
+  long  ifIndex;                                    // ifindex of card
+
+  long  currentTxAntenna;
+  long  diversitySupport;
+  long  currentRxAntenna;
+
+  long  haveCurrentTxAntenna;
+  long  haveDiversitySupport;
+  long  haveCurrentRxAntenna;
+
+} nPa, *pa = &nPa;
+
+static avList_t paList;
+
+/****************************************************************************
+*                             dot11PhyTxPowerTable                          *
+****************************************************************************/
+static struct ptTbl_data {
+
+  char  UID       [ PT_UID_LEN + 1 ];               // unique ID
+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
+
+  long  ifIndex;                                    // ifindex of card
+
+  long  numberSupportedPowerLevels;
+  long  TxPowerLevel1;
+  long  TxPowerLevel2;
+  long  TxPowerLevel3;
+  long  TxPowerLevel4;
+  long  TxPowerLevel5;
+  long  TxPowerLevel6;
+  long  TxPowerLevel7;
+  long  TxPowerLevel8;
+  long  currentTxPowerLevel;
+
+  long  haveNumberSupportedPowerLevels;
+  long  haveTxPowerLevel1;
+  long  haveTxPowerLevel2;
+  long  haveTxPowerLevel3;
+  long  haveTxPowerLevel4;
+  long  haveTxPowerLevel5;
+  long  haveTxPowerLevel6;
+  long  haveTxPowerLevel7;
+  long  haveTxPowerLevel8;
+  long  haveCurrentTxPowerLevel ;
+
+} nPt, *pt = &nPt;
+
+static avList_t ptList;
+
+/****************************************************************************
+*                               dot11PhyFHSSTable                           *
+****************************************************************************/
+static struct pfTbl_data {
+
+  char  UID       [ PF_UID_LEN + 1 ];              // unique ID
+  char  ifName    [ IFNAME_LEN + 1 ];              // ifName of card
+
+  long  ifIndex;                                    // ifindex of card
+
+  long  hopTime;
+  long  currentChannelNumber;
+  long  maxDwellTime;
+  long  currentDwellTime;
+  long  currentSet;
+  long  currentPattern;
+  long  currentIndex;
+
+  long  haveHopTime;
+  long  haveCurrentChannelNumber;
+  long  haveMaxDwellTime;
+  long  haveCurrentDwellTime;
+  long  haveCurrentSet;
+  long  haveCurrentPattern;
+  long  haveCurrentIndex;
+
+} nPf, *pf = &nPf;
+
+static avList_t pfList;
+
+/****************************************************************************
+*                              dot11PhyDSSSTable                            *
+****************************************************************************/
+static struct pdTbl_data {
+
+  char  UID       [ PD_UID_LEN + 1 ];               // unique ID
+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
+
+  long  ifIndex;                                    // ifindex of card
+
+  long  currentChannel;
+  long  CCAModeSupported;
+  long  currentCCAMode;
+  long  EDThreshold;
+
+  long  haveCurrentChannel;
+  long  haveCCAModeSupported ;
+  long  haveCurrentCCAMode;
+  long  haveEDThreshold;
+
+} nPd, *pd = &nPd;
+
+static avList_t pdList;
+
+/****************************************************************************
+*                              dot11PhyIRTable                              *
+****************************************************************************/
+static struct piTbl_data {
+
+  char  UID       [ PI_UID_LEN + 1 ];               // unique ID
+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
+
+  long  ifIndex;                                    // ifindex of card
+
+  long  CCAWatchdogTimerMax;
+  long  CCAWatchdogCountMax;
+  long  CCAWatchdogTimerMin;
+  long  CCAWatchdogCountMin;
+
+  long  haveCCAWatchdogTimerMax;
+  long  haveCCAWatchdogCountMax;
+  long  haveCCAWatchdogTimerMin;
+  long  haveCCAWatchdogCountMin;
+
+} nPi, *pi = &nPi;
+
+static avList_t piList;
+
+/****************************************************************************
+*                      dot11RegDomainsSupportedTable                        *
+****************************************************************************/
+static struct rdTbl_data {
+
+  char  UID       [ RD_UID_LEN + 1 ];
+  char  ifName    [ IFNAME_LEN + 1 ];
+
+  long  ifIndex;                                    // ifindex of card
+  long  regDomainsSupportIndex;
+
+  long  regDomainsSupportValue;
+  long  haveRegDomainsSupportValue;
+
+} nRd, *rd = &nRd;
+
+static avList_t rdList;
+
+/****************************************************************************
+*                             dot11AntennasListTable                        *
+****************************************************************************/
+static struct alTbl_data {
+
+  char  UID       [ AL_UID_LEN + 1 ];
+  char  ifName    [ IFNAME_LEN + 1 ];
+
+  long  ifIndex;                                    // ifindex of card
+  long  antennaListIndex;
+
+  long  supportedTxAntenna;
+  long  supportedRxAntenna;
+  long  diversitySelectionRx ;
+
+  long  haveSupportedTxAntenna;
+  long  haveSupportedRxAntenna;
+  long  haveDiversitySelectionRx ;
+
+} nAl, *al = &nAl;
+
+static avList_t alList;
+
+/****************************************************************************
+*                    dot11SupportedDataRatesTxTable                         *
+****************************************************************************/
+static struct rtTbl_data {
+
+  char  UID       [ RT_UID_LEN + 1 ];
+  char  ifName    [ IFNAME_LEN + 1 ];
+
+  long  ifIndex;                                    // ifindex of card
+  long  supportedDataRatesTxIndex;
+
+  long  supportedDataRatesTxValue;
+  long  haveSupportedDataRatesTxValue;
+
+} nRt, *rt = &nRt;
+
+static avList_t rtList;
+
+/****************************************************************************
+*                    dot11SupportedDataRatesRxTable                         *
+****************************************************************************/
+static struct rrTbl_data {
+
+  char  UID       [ RR_UID_LEN + 1 ];
+  char  ifName    [ IFNAME_LEN + 1 ];
+
+  long  ifIndex;                                    // ifindex of card
+  long  supportedDataRatesRxIndex;
+
+  long  supportedDataRatesRxValue;
+  long  haveSupportedDataRatesRxValue;
+
+} nRr, *rr = &nRr;
+
+static avList_t rrList;
+
+/****************************************************************************
+*                       Wireless Extensions Structures                      *
+****************************************************************************/
+static long wepCurrentKey;
+static long haveWepCurrentKey;
+static struct wepTbl_data {
+
+  long len;
+  char key [ WEP_STR_LEN + 1 ];
+  long haveKey;
+
+} wep[4];
+
+/****************************************************************************
+*                                                                           *
+****************************************************************************/
+config_require(util_funcs)
+
+/* function prototypes */
+
+void   init_ieee802dot11 ( void );
+FindVarMethod var_ieee802dot11;
+FindVarMethod var_dot11StationConfigTable;
+FindVarMethod var_dot11AuthenticationAlgorithmsTable;
+FindVarMethod var_dot11WEPDefaultKeysTable;
+FindVarMethod var_dot11WEPKeyMappingsTable;
+FindVarMethod var_dot11PrivacyTable;
+FindVarMethod var_dot11OperationTable;
+FindVarMethod var_dot11CountersTable;
+FindVarMethod var_dot11GroupAddressesTable;
+FindVarMethod var_dot11ResourceInfoTable;
+FindVarMethod var_dot11PhyOperationTable;
+FindVarMethod var_dot11PhyAntennaTable;
+FindVarMethod var_dot11PhyTxPowerTable;
+FindVarMethod var_dot11PhyFHSSTable;
+FindVarMethod var_dot11PhyDSSSTable;
+FindVarMethod var_dot11PhyIRTable;
+FindVarMethod var_dot11RegDomainsSupportedTable;
+FindVarMethod var_dot11AntennasListTable;
+FindVarMethod var_dot11SupportedDataRatesTxTable;
+FindVarMethod var_dot11SupportedDataRatesRxTable;
+
+WriteMethod write_dot11StationID;
+WriteMethod write_dot11MediumOccupancyLimit;
+WriteMethod write_dot11CFPPeriod;
+WriteMethod write_dot11CFPMaxDuration;
+WriteMethod write_dot11AuthenticationResponseTimeOut;
+WriteMethod write_dot11PowerManagementMode;
+WriteMethod write_dot11DesiredSSID;
+WriteMethod write_dot11DesiredBSSType;
+WriteMethod write_dot11OperationalRateSet;
+WriteMethod write_dot11BeaconPeriod;
+WriteMethod write_dot11DTIMPeriod;
+WriteMethod write_dot11AssociationResponseTimeOut;
+WriteMethod write_dot11AuthenticationAlgorithmsEnable;
+WriteMethod write_dot11WEPDefaultKeyValue;
+WriteMethod write_dot11WEPKeyMappingAddress;
+WriteMethod write_dot11WEPKeyMappingWEPOn;
+WriteMethod write_dot11WEPKeyMappingValue;
+WriteMethod write_dot11WEPKeyMappingStatus;
+WriteMethod write_dot11PrivacyInvoked;
+WriteMethod write_dot11WEPDefaultKeyID;
+WriteMethod write_dot11WEPKeyMappingLength;
+WriteMethod write_dot11ExcludeUnencrypted;
+WriteMethod write_dot11RTSThreshold;
+WriteMethod write_dot11ShortRetryLimit;
+WriteMethod write_dot11LongRetryLimit;
+WriteMethod write_dot11FragmentationThreshold;
+WriteMethod write_dot11MaxTransmitMSDULifetime;
+WriteMethod write_dot11MaxReceiveLifetime;
+WriteMethod write_dot11Address;
+WriteMethod write_dot11GroupAddressesStatus;
+WriteMethod write_dot11CurrentRegDomain;
+WriteMethod write_dot11CurrentTxAntenna;
+WriteMethod write_dot11CurrentRxAntenna;
+WriteMethod write_dot11CurrentTxPowerLevel;
+WriteMethod write_dot11CurrentChannelNumber;
+WriteMethod write_dot11CurrentDwellTime;
+WriteMethod write_dot11CurrentSet;
+WriteMethod write_dot11CurrentPattern;
+WriteMethod write_dot11CurrentIndex;
+WriteMethod write_dot11CurrentChannel;
+WriteMethod write_dot11CurrentCCAMode;
+WriteMethod write_dot11EDThreshold;
+WriteMethod write_dot11CCAWatchdogTimerMax;
+WriteMethod write_dot11CCAWatchdogCountMax;
+WriteMethod write_dot11CCAWatchdogTimerMin;
+WriteMethod write_dot11CCAWatchdogCountMin;
+WriteMethod write_dot11SupportedTxAntenna;
+WriteMethod write_dot11SupportedRxAntenna;
+WriteMethod write_dot11DiversitySelectionRx;
+
+#endif /* _MIBGROUP_IEEE802DOT11_H */
--- net-snmp-5.1.2-orig/agent/mibgroup/iwlib.h	1970-01-01 01:00:00.000000000 +0100
+++ net-snmp-5.1.2-5/agent/mibgroup/iwlib.h	2005-03-13 16:17:21.000000000 +0100
@@ -0,0 +1,502 @@
+/*
+ *	Wireless Tools
+ *
+ *		Jean II - HPLB 97->99 - HPL 99->02
+ *
+ * Common header for the Wireless Extension library...
+ *
+ * This file is released under the GPL license.
+ *     Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
+ */
+
+#ifndef IWLIB_H
+#define IWLIB_H
+
+/*#include "CHANGELOG.h"*/
+
+/***************************** INCLUDES *****************************/
+
+/* Standard headers */
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <stdio.h>
+#include <math.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <netdb.h>		/* gethostbyname, getnetbyname */
+#include <net/ethernet.h>	/* struct ether_addr */
+#include <sys/time.h>		/* struct timeval */
+#include <unistd.h>
+
+/* This is our header selection. Try to hide the mess and the misery :-(
+ * Don't look, you would go blind ;-) */
+
+#ifndef LINUX_VERSION_CODE
+#include <linux/version.h>
+#endif
+
+/* Kernel headers 2.4.X + Glibc 2.2 - Mandrake 8.0, Debian 2.3, RH 7.1
+ * Kernel headers 2.2.X + Glibc 2.2 - Slackware 8.0 */
+#if defined(__GLIBC__) \
+    && __GLIBC__ == 2 \
+    && __GLIBC_MINOR__ >= 2 \
+    && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
+//#define GLIBC22_HEADERS
+#define GENERIC_HEADERS
+
+/* Kernel headers 2.4.X + Glibc 2.1 - Debian 2.2 upgraded, RH 7.0
+ * Kernel headers 2.2.X + Glibc 2.1 - Debian 2.2, RH 6.1 */
+#elif defined(__GLIBC__) \
+      && __GLIBC__ == 2 \
+      && __GLIBC_MINOR__ == 1 \
+      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
+//#define GLIBC_HEADERS
+#define GENERIC_HEADERS
+
+/* Kernel headers 2.2.X + Glibc 2.0 - Debian 2.1 */
+#elif defined(__GLIBC__) \
+      && __GLIBC__ == 2 \
+      && __GLIBC_MINOR__ == 0 \
+      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \
+      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
+#define GLIBC_HEADERS
+#define KLUDGE_HEADERS
+
+/* Note : is it really worth supporting kernel 2.0.X, knowing that
+ * we require WE v9, which is only available in 2.2.X and higher ?
+ * I guess one could use 2.0.x with an upgraded wireless.h... */
+
+/* Kernel headers 2.0.X + Glibc 2.0 - Debian 2.0, RH 5 */
+#elif defined(__GLIBC__) \
+      && __GLIBC__ == 2 \
+      && __GLIBC_MINOR__ == 0 \
+      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) \
+      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0)
+#define GLIBC_HEADERS
+
+/* Kernel headers 2.0.X + libc5 - old systems */
+#elif defined(_LINUX_C_LIB_VERSION_MAJOR) \
+      && _LINUX_C_LIB_VERSION_MAJOR == 5 \
+      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \
+      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
+#define LIBC5_HEADERS
+
+/* Unsupported combination */
+#else
+#error "Your kernel/libc combination is not supported"
+#endif
+
+#ifdef GENERIC_HEADERS 
+/* Proposed by Dr. Michael Rietz <rietz@mail.amps.de>, 27.3.2 */
+/* If this works for all, it might be more stable on the long term - Jean II */
+#include <net/if_arp.h>		/* For ARPHRD_ETHER */
+#include <sys/socket.h>		/* For AF_INET & struct sockaddr */
+#include <netinet/in.h>         /* For struct sockaddr_in */
+#include <netinet/if_ether.h>
+#endif /* GENERIC_HEADERS */    
+
+#ifdef GLIBC22_HEADERS 
+/* Added by Ross G. Miller <Ross_Miller@baylor.edu>, 3/28/01 */
+#include <linux/if_arp.h> 	/* For ARPHRD_ETHER */
+#include <linux/socket.h>	/* For AF_INET & struct sockaddr */
+#include <sys/socket.h>
+#endif /* GLIBC22_HEADERS */    
+
+#ifdef KLUDGE_HEADERS
+#include <socketbits.h>
+#endif	/* KLUDGE_HEADERS */
+
+#ifdef GLIBC_HEADERS
+#include <linux/if_arp.h>	/* For ARPHRD_ETHER */
+#include <linux/socket.h>	/* For AF_INET & struct sockaddr */
+#include <linux/in.h>		/* For struct sockaddr_in */
+#endif	/* KLUDGE_HEADERS || GLIBC_HEADERS */
+
+#ifdef LIBC5_HEADERS
+#include <sys/socket.h>		/* For AF_INET & struct sockaddr & socket() */
+#include <linux/if_arp.h>	/* For ARPHRD_ETHER */
+#include <linux/in.h>		/* For struct sockaddr_in */
+#endif	/* LIBC5_HEADERS */
+
+/* Those 3 headers were previously included in wireless.h */
+#include <linux/types.h>		/* for "caddr_t" et al		*/
+#include <linux/socket.h>		/* for "struct sockaddr" et al	*/
+#include <linux/if.h>			/* for IFNAMSIZ and co... */
+
+#ifdef WEXT_HEADER
+/* Private copy of Wireless extensions */
+#include WEXT_HEADER
+#else	/* !WEXT_HEADER */
+/* System wide Wireless extensions */
+#include <linux/wireless.h>
+#endif	/* !WEXT_HEADER */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/****************************** DEBUG ******************************/
+
+
+/************************ CONSTANTS & MACROS ************************/
+
+/* Paths */
+#define PROC_NET_WIRELESS	"/proc/net/wireless"
+#define PROC_NET_DEV		"/proc/net/dev"
+
+/* Some usefull constants */
+#define KILO	1e3
+#define MEGA	1e6
+#define GIGA	1e9
+/* For doing log10/exp10 without libm */
+#define LOG10_MAGIC	1.25892541179
+
+/* Backward compatibility for Wireless Extension 9 */
+#ifndef IW_POWER_MODIFIER
+#define IW_POWER_MODIFIER	0x000F	/* Modify a parameter */
+#define IW_POWER_MIN		0x0001	/* Value is a minimum  */
+#define IW_POWER_MAX		0x0002	/* Value is a maximum */
+#define IW_POWER_RELATIVE	0x0004	/* Value is not in seconds/ms/us */
+#endif /* IW_POWER_MODIFIER */
+
+#ifndef IW_ENCODE_NOKEY
+#define IW_ENCODE_NOKEY         0x0800  /* Key is write only, so not here */
+#define IW_ENCODE_MODE		0xF000	/* Modes defined below */
+#endif /* IW_ENCODE_NOKEY */
+#ifndef IW_ENCODE_TEMP
+#define IW_ENCODE_TEMP		0x0400  /* Temporary key */
+#endif /* IW_ENCODE_TEMP */
+
+/* More backward compatibility */
+#ifndef SIOCSIWCOMMIT
+#define SIOCSIWCOMMIT	SIOCSIWNAME
+#endif /* SIOCSIWCOMMIT */
+
+/****************************** TYPES ******************************/
+
+/* Shortcuts */
+typedef struct iw_statistics	iwstats;
+typedef struct iw_range		iwrange;
+typedef struct iw_param		iwparam;
+typedef struct iw_freq		iwfreq;
+typedef struct iw_quality	iwqual;
+typedef struct iw_priv_args	iwprivargs;
+typedef struct sockaddr		sockaddr;
+
+/* Structure for storing all wireless information for each device
+ * This is pretty exhaustive... */
+typedef struct wireless_info
+{
+  char		name[IFNAMSIZ + 1];	/* Wireless/protocol name */
+  int		has_nwid;
+  iwparam	nwid;			/* Network ID */
+  int		has_freq;
+  double	freq;			/* Frequency/channel */
+  int		has_sens;
+  iwparam	sens;			/* sensitivity */
+  int		has_key;
+  unsigned char	key[IW_ENCODING_TOKEN_MAX];	/* Encoding key used */
+  int		key_size;		/* Number of bytes */
+  int		key_flags;		/* Various flags */
+  int		has_essid;
+  int		essid_on;
+  char		essid[IW_ESSID_MAX_SIZE + 1];	/* ESSID (extended network) */
+  int		has_nickname;
+  char		nickname[IW_ESSID_MAX_SIZE + 1]; /* NickName */
+  int		has_ap_addr;
+  sockaddr	ap_addr;		/* Access point address */
+  int		has_bitrate;
+  iwparam	bitrate;		/* Bit rate in bps */
+  int		has_rts;
+  iwparam	rts;			/* RTS threshold in bytes */
+  int		has_frag;
+  iwparam	frag;			/* Fragmentation threshold in bytes */
+  int		has_mode;
+  int		mode;			/* Operation mode */
+  int		has_power;
+  iwparam	power;			/* Power management parameters */
+  int		has_txpower;
+  iwparam	txpower;		/* Transmit Power in dBm */
+  int		has_retry;
+  iwparam	retry;			/* Retry limit or lifetime */
+
+  /* Stats */
+  iwstats	stats;
+  int		has_stats;
+  iwrange	range;
+  int		has_range;
+} wireless_info;
+
+/* Structure for storing all wireless information for each device
+ * This is a cut down version of the one above, containing only
+ * the things *truly* needed to configure a card.
+ * Don't add other junk, I'll remove it... */
+typedef struct wireless_config
+{
+  char		name[IFNAMSIZ + 1];	/* Wireless/protocol name */
+  int		has_nwid;
+  iwparam	nwid;			/* Network ID */
+  int		has_freq;
+  double	freq;			/* Frequency/channel */
+  int		has_key;
+  unsigned char	key[IW_ENCODING_TOKEN_MAX];	/* Encoding key used */
+  int		key_size;		/* Number of bytes */
+  int		key_flags;		/* Various flags */
+  int		has_essid;
+  int		essid_on;
+  char		essid[IW_ESSID_MAX_SIZE + 1];	/* ESSID (extended network) */
+  int		has_mode;
+  int		mode;			/* Operation mode */
+} wireless_config;
+
+typedef struct stream_descr
+{
+  char *	end;		/* End of the stream */
+  char *	current;	/* Current event in stream of events */
+  char *	value;		/* Current value in event */
+} stream_descr;
+
+/* Prototype for handling display of each single interface on the
+ * system - see iw_enum_devices() */
+typedef int (*iw_enum_handler)(int	skfd,
+			       char *	ifname,
+			       char *	args[],
+			       int	count);
+
+/**************************** PROTOTYPES ****************************/
+/*
+ * All the functions in iwcommon.c
+ */
+
+/* ---------------------- SOCKET SUBROUTINES -----------------------*/
+int
+	iw_sockets_open(void);
+void
+	iw_enum_devices(int		skfd,
+			iw_enum_handler fn,
+			char *		args[],
+			int		count);
+/* --------------------- WIRELESS SUBROUTINES ----------------------*/
+int
+	iw_get_range_info(int		skfd,
+			  char *	ifname,
+			  iwrange *	range);
+int
+	iw_print_version_info(char *	toolname);
+int
+	iw_get_priv_info(int		skfd,
+			 char *		ifname,
+			 iwprivargs *	priv,
+			 int		maxpriv);
+int
+	iw_get_basic_config(int			skfd,
+			    char *		ifname,
+			    wireless_config *	info);
+int
+	iw_set_basic_config(int			skfd,
+			    char *		ifname,
+			    wireless_config *	info);
+/* --------------------- PROTOCOL SUBROUTINES --------------------- */
+int
+	iw_protocol_compare(char *	protocol1,
+			    char *	protocol2);
+/* -------------------- FREQUENCY SUBROUTINES --------------------- */
+void
+	iw_float2freq(double	in,
+		   iwfreq *	out);
+double
+	iw_freq2float(iwfreq *	in);
+void
+	iw_print_freq(char *	buffer,
+		      double	freq);
+int
+	iw_freq_to_channel(double		freq,
+			   struct iw_range *	range);
+void
+	iw_print_bitrate(char *	buffer,
+			 int	bitrate);
+/* ---------------------- POWER SUBROUTINES ----------------------- */
+int
+	iw_dbm2mwatt(int	in);
+int
+	iw_mwatt2dbm(int	in);
+/* -------------------- STATISTICS SUBROUTINES -------------------- */
+int
+	iw_get_stats(int	skfd,
+		     char *	ifname,
+		     iwstats *	stats);
+void
+	iw_print_stats(char *		buffer,
+		       iwqual *		qual,
+		       iwrange *	range,
+		       int		has_range);
+/* --------------------- ENCODING SUBROUTINES --------------------- */
+void
+	iw_print_key(char *		buffer,
+		     unsigned char *	key,
+		     int		key_size,
+		     int		key_flags);
+int
+	iw_in_key(char *		input,
+		  unsigned char *	key);
+int
+	iw_in_key_full(int		skfd,
+		       char *		ifname,
+		       char *		input,
+		       unsigned char *	key,
+		       __u16 *		flags);
+/* ----------------- POWER MANAGEMENT SUBROUTINES ----------------- */
+void
+	iw_print_pm_value(char *	buffer,
+			  int		value,
+			  int		flags);
+void
+	iw_print_pm_mode(char *		buffer,
+			 int		flags);
+/* --------------- RETRY LIMIT/LIFETIME SUBROUTINES --------------- */
+#if WIRELESS_EXT > 10
+void
+	iw_print_retry_value(char *	buffer,
+			     int	value,
+			     int	flags);
+#endif
+/* ----------------------- TIME SUBROUTINES ----------------------- */
+void
+	iw_print_timeval(char *			buffer,
+			 const struct timeval *	time);
+/* --------------------- ADDRESS SUBROUTINES ---------------------- */
+int
+	iw_check_mac_addr_type(int	skfd,
+			       char *	ifname);
+int
+	iw_check_if_addr_type(int	skfd,
+			      char *	ifname);
+#if 0
+int
+	iw_check_addr_type(int		skfd,
+			   char *	ifname);
+#endif
+void
+	iw_ether_ntop(const struct ether_addr* eth, char* buf);
+char*
+	iw_ether_ntoa(const struct ether_addr* eth);
+int
+	iw_ether_aton(const char* bufp, struct ether_addr* eth);
+int
+	iw_in_inet(char *bufp, struct sockaddr *sap);
+int
+	iw_in_addr(int			skfd,
+		   char *		ifname,
+		   char *		bufp,
+		   struct sockaddr *	sap);
+/* ----------------------- MISC SUBROUTINES ------------------------ */
+int
+	iw_get_priv_size(int		args);
+
+#if WIRELESS_EXT > 13
+/* ---------------------- EVENT SUBROUTINES ---------------------- */
+void
+	iw_init_event_stream(struct stream_descr *	stream,
+			     char *			data,
+			     int			len);
+int
+	iw_extract_event_stream(struct stream_descr *	stream,
+				struct iw_event *	iwe);
+#endif /* WIRELESS_EXT > 13 */
+
+/**************************** VARIABLES ****************************/
+
+extern const char * const	iw_operation_mode[];
+#define IW_NUM_OPER_MODE	7
+
+/************************* INLINE FUNTIONS *************************/
+/*
+ * Functions that are so simple that it's more efficient inlining them
+ */
+
+/*
+ * Note : I've defined wrapper for the ioctl request so that
+ * it will be easier to migrate to other kernel API if needed
+ */
+
+/*------------------------------------------------------------------*/
+/*
+ * Wrapper to push some Wireless Parameter in the driver
+ */
+static inline int
+iw_set_ext(int			skfd,		/* Socket to the kernel */
+	   char *		ifname,		/* Device name */
+	   int			request,	/* WE ID */
+	   struct iwreq *	pwrq)		/* Fixed part of the request */
+{
+  /* Set device name */
+  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
+  /* Do the request */
+  return(ioctl(skfd, request, pwrq));
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Wrapper to extract some Wireless Parameter out of the driver
+ */
+static inline int
+iw_get_ext(int			skfd,		/* Socket to the kernel */
+	   char *		ifname,		/* Device name */
+	   int			request,	/* WE ID */
+	   struct iwreq *	pwrq)		/* Fixed part of the request */
+{
+  /* Set device name */
+  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
+  /* Do the request */
+  return(ioctl(skfd, request, pwrq));
+}
+
+/*------------------------------------------------------------------*/
+/* Backwards compatability
+ * Actually, those form are much easier to use when dealing with
+ * struct sockaddr... */
+static inline char*
+iw_pr_ether(char* bufp, const unsigned char* addr)
+{
+  iw_ether_ntop((const struct ether_addr *) addr, bufp);
+  return bufp;
+}
+/* Backwards compatability */
+static inline int
+iw_in_ether(const char *bufp, struct sockaddr *sap)
+{
+  sap->sa_family = ARPHRD_ETHER;
+  return iw_ether_aton(bufp, (struct ether_addr *) sap->sa_data) ? 0 : -1;
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Create an Ethernet broadcast address
+ */
+static inline void
+iw_broad_ether(struct sockaddr *sap)
+{
+  sap->sa_family = ARPHRD_ETHER;
+  memset((char *) sap->sa_data, 0xFF, ETH_ALEN);
+}
+
+/*------------------------------------------------------------------*/
+/*
+ * Create an Ethernet NULL address
+ */
+static inline void
+iw_null_ether(struct sockaddr *sap)
+{
+  sap->sa_family = ARPHRD_ETHER;
+  memset((char *) sap->sa_data, 0x00, ETH_ALEN);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* IWLIB_H */
