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