1 /*
2  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * File: mib.h
20  *
21  * Purpose: Implement MIB Data Structure
22  *
23  * Author: Tevin Chen
24  *
25  * Date: May 21, 1996
26  *
27  */
28 
29 #ifndef __MIB_H__
30 #define __MIB_H__
31 
32 #include "ttype.h"
33 #include "tether.h"
34 #include "desc.h"
35 
36 /*---------------------  Export Definitions -------------------------*/
37 
38 
39 //
40 // USB counter
41 //
42 typedef struct tagSUSBCounter {
43     DWORD dwCrc;
44 
45 } SUSBCounter, *PSUSBCounter;
46 
47 
48 
49 //
50 // 802.11 counter
51 //
52 
53 
54 typedef struct tagSDot11Counters {
55   /* unsigned long Length; // Length of structure */
56     unsigned long long   TransmittedFragmentCount;
57     unsigned long long   MulticastTransmittedFrameCount;
58     unsigned long long   FailedCount;
59     unsigned long long   RetryCount;
60     unsigned long long   MultipleRetryCount;
61     unsigned long long   RTSSuccessCount;
62     unsigned long long   RTSFailureCount;
63     unsigned long long   ACKFailureCount;
64     unsigned long long   FrameDuplicateCount;
65     unsigned long long   ReceivedFragmentCount;
66     unsigned long long   MulticastReceivedFrameCount;
67     unsigned long long   FCSErrorCount;
68     unsigned long long   TKIPLocalMICFailures;
69     unsigned long long   TKIPRemoteMICFailures;
70     unsigned long long   TKIPICVErrors;
71     unsigned long long   TKIPCounterMeasuresInvoked;
72     unsigned long long   TKIPReplays;
73     unsigned long long   CCMPFormatErrors;
74     unsigned long long   CCMPReplays;
75     unsigned long long   CCMPDecryptErrors;
76     unsigned long long   FourWayHandshakeFailures;
77   /*
78    * unsigned long long   WEPUndecryptableCount;
79    * unsigned long long   WEPICVErrorCount;
80    * unsigned long long   DecryptSuccessCount;
81    * unsigned long long   DecryptFailureCount;
82    */
83 } SDot11Counters, *PSDot11Counters;
84 
85 
86 //
87 // MIB2 counter
88 //
89 typedef struct tagSMib2Counter {
90     signed long    ifIndex;
91     char    ifDescr[256];               // max size 255 plus zero ending
92                                         // e.g. "interface 1"
93     signed long    ifType;
94     signed long    ifMtu;
95     DWORD   ifSpeed;
96     BYTE    ifPhysAddress[ETH_ALEN];
97     signed long    ifAdminStatus;
98     signed long    ifOperStatus;
99     DWORD   ifLastChange;
100     DWORD   ifInOctets;
101     DWORD   ifInUcastPkts;
102     DWORD   ifInNUcastPkts;
103     DWORD   ifInDiscards;
104     DWORD   ifInErrors;
105     DWORD   ifInUnknownProtos;
106     DWORD   ifOutOctets;
107     DWORD   ifOutUcastPkts;
108     DWORD   ifOutNUcastPkts;
109     DWORD   ifOutDiscards;
110     DWORD   ifOutErrors;
111     DWORD   ifOutQLen;
112     DWORD   ifSpecific;
113 } SMib2Counter, *PSMib2Counter;
114 
115 // Value in the ifType entry
116 //#define ETHERNETCSMACD      6           //
117 #define WIRELESSLANIEEE80211b      6           //
118 
119 // Value in the ifAdminStatus/ifOperStatus entry
120 #define UP                  1           //
121 #define DOWN                2           //
122 #define TESTING             3           //
123 
124 
125 //
126 // RMON counter
127 //
128 typedef struct tagSRmonCounter {
129     signed long    etherStatsIndex;
130     DWORD   etherStatsDataSource;
131     DWORD   etherStatsDropEvents;
132     DWORD   etherStatsOctets;
133     DWORD   etherStatsPkts;
134     DWORD   etherStatsBroadcastPkts;
135     DWORD   etherStatsMulticastPkts;
136     DWORD   etherStatsCRCAlignErrors;
137     DWORD   etherStatsUndersizePkts;
138     DWORD   etherStatsOversizePkts;
139     DWORD   etherStatsFragments;
140     DWORD   etherStatsJabbers;
141     DWORD   etherStatsCollisions;
142     DWORD   etherStatsPkt64Octets;
143     DWORD   etherStatsPkt65to127Octets;
144     DWORD   etherStatsPkt128to255Octets;
145     DWORD   etherStatsPkt256to511Octets;
146     DWORD   etherStatsPkt512to1023Octets;
147     DWORD   etherStatsPkt1024to1518Octets;
148     DWORD   etherStatsOwners;
149     DWORD   etherStatsStatus;
150 } SRmonCounter, *PSRmonCounter;
151 
152 //
153 // Custom counter
154 //
155 typedef struct tagSCustomCounters {
156     unsigned long       Length;
157 
158     unsigned long long   ullTsrAllOK;
159 
160     unsigned long long   ullRsr11M;
161     unsigned long long   ullRsr5M;
162     unsigned long long   ullRsr2M;
163     unsigned long long   ullRsr1M;
164 
165     unsigned long long   ullRsr11MCRCOk;
166     unsigned long long   ullRsr5MCRCOk;
167     unsigned long long   ullRsr2MCRCOk;
168     unsigned long long   ullRsr1MCRCOk;
169 
170     unsigned long long   ullRsr54M;
171     unsigned long long   ullRsr48M;
172     unsigned long long   ullRsr36M;
173     unsigned long long   ullRsr24M;
174     unsigned long long   ullRsr18M;
175     unsigned long long   ullRsr12M;
176     unsigned long long   ullRsr9M;
177     unsigned long long   ullRsr6M;
178 
179     unsigned long long   ullRsr54MCRCOk;
180     unsigned long long   ullRsr48MCRCOk;
181     unsigned long long   ullRsr36MCRCOk;
182     unsigned long long   ullRsr24MCRCOk;
183     unsigned long long   ullRsr18MCRCOk;
184     unsigned long long   ullRsr12MCRCOk;
185     unsigned long long   ullRsr9MCRCOk;
186     unsigned long long   ullRsr6MCRCOk;
187 
188 } SCustomCounters, *PSCustomCounters;
189 
190 
191 //
192 // Custom counter
193 //
194 typedef struct tagSISRCounters {
195     unsigned long   Length;
196 
197     DWORD   dwIsrTx0OK;
198     DWORD   dwIsrAC0TxOK;
199     DWORD   dwIsrBeaconTxOK;
200     DWORD   dwIsrRx0OK;
201     DWORD   dwIsrTBTTInt;
202     DWORD   dwIsrSTIMERInt;
203     DWORD   dwIsrWatchDog;
204     DWORD   dwIsrUnrecoverableError;
205     DWORD   dwIsrSoftInterrupt;
206     DWORD   dwIsrMIBNearfull;
207     DWORD   dwIsrRxNoBuf;
208 
209     DWORD   dwIsrUnknown;               // unknown interrupt count
210 
211     DWORD   dwIsrRx1OK;
212     DWORD   dwIsrATIMTxOK;
213     DWORD   dwIsrSYNCTxOK;
214     DWORD   dwIsrCFPEnd;
215     DWORD   dwIsrATIMEnd;
216     DWORD   dwIsrSYNCFlushOK;
217     DWORD   dwIsrSTIMER1Int;
218     /////////////////////////////////////
219 } SISRCounters, *PSISRCounters;
220 
221 
222 // Value in the etherStatsStatus entry
223 #define VALID               1           //
224 #define CREATE_REQUEST      2           //
225 #define UNDER_CREATION      3           //
226 #define INVALID             4           //
227 
228 
229 //
230 // Tx packet information
231 //
232 typedef struct tagSTxPktInfo {
233     BYTE    byBroadMultiUni;
234     WORD    wLength;
235     WORD    wFIFOCtl;
236     BYTE    abyDestAddr[ETH_ALEN];
237 } STxPktInfo, *PSTxPktInfo;
238 
239 
240 #define MAX_RATE            12
241 //
242 // statistic counter
243 //
244 typedef struct tagSStatCounter {
245     //
246     // ISR status count
247     //
248 
249     SISRCounters ISRStat;
250 
251     // RSR status count
252     //
253     DWORD   dwRsrFrmAlgnErr;
254     DWORD   dwRsrErr;
255     DWORD   dwRsrCRCErr;
256     DWORD   dwRsrCRCOk;
257     DWORD   dwRsrBSSIDOk;
258     DWORD   dwRsrADDROk;
259     DWORD   dwRsrBCNSSIDOk;
260     DWORD   dwRsrLENErr;
261     DWORD   dwRsrTYPErr;
262 
263     DWORD   dwNewRsrDECRYPTOK;
264     DWORD   dwNewRsrCFP;
265     DWORD   dwNewRsrUTSF;
266     DWORD   dwNewRsrHITAID;
267     DWORD   dwNewRsrHITAID0;
268 
269     DWORD   dwRsrLong;
270     DWORD   dwRsrRunt;
271 
272     DWORD   dwRsrRxControl;
273     DWORD   dwRsrRxData;
274     DWORD   dwRsrRxManage;
275 
276     DWORD   dwRsrRxPacket;
277     DWORD   dwRsrRxOctet;
278     DWORD   dwRsrBroadcast;
279     DWORD   dwRsrMulticast;
280     DWORD   dwRsrDirected;
281     // 64-bit OID
282     unsigned long long   ullRsrOK;
283 
284     // for some optional OIDs (64 bits) and DMI support
285     unsigned long long   ullRxBroadcastBytes;
286     unsigned long long   ullRxMulticastBytes;
287     unsigned long long   ullRxDirectedBytes;
288     unsigned long long   ullRxBroadcastFrames;
289     unsigned long long   ullRxMulticastFrames;
290     unsigned long long   ullRxDirectedFrames;
291 
292     DWORD   dwRsrRxFragment;
293     DWORD   dwRsrRxFrmLen64;
294     DWORD   dwRsrRxFrmLen65_127;
295     DWORD   dwRsrRxFrmLen128_255;
296     DWORD   dwRsrRxFrmLen256_511;
297     DWORD   dwRsrRxFrmLen512_1023;
298     DWORD   dwRsrRxFrmLen1024_1518;
299 
300     // TSR status count
301     //
302     DWORD   dwTsrTotalRetry;        // total collision retry count
303     DWORD   dwTsrOnceRetry;         // this packet only occur one collision
304     DWORD   dwTsrMoreThanOnceRetry; // this packet occur more than one collision
305     DWORD   dwTsrRetry;             // this packet has ever occur collision,
306                                          // that is (dwTsrOnceCollision0 + dwTsrMoreThanOnceCollision0)
307     DWORD   dwTsrACKData;
308     DWORD   dwTsrErr;
309     DWORD   dwAllTsrOK;
310     DWORD   dwTsrRetryTimeout;
311     DWORD   dwTsrTransmitTimeout;
312 
313     DWORD   dwTsrTxPacket;
314     DWORD   dwTsrTxOctet;
315     DWORD   dwTsrBroadcast;
316     DWORD   dwTsrMulticast;
317     DWORD   dwTsrDirected;
318 
319     // RD/TD count
320     DWORD   dwCntRxFrmLength;
321     DWORD   dwCntTxBufLength;
322 
323     BYTE    abyCntRxPattern[16];
324     BYTE    abyCntTxPattern[16];
325 
326 
327 
328     // Software check....
329     DWORD   dwCntRxDataErr;             // rx buffer data software compare CRC err count
330     DWORD   dwCntDecryptErr;            // rx buffer data software compare CRC err count
331     DWORD   dwCntRxICVErr;              // rx buffer data software compare CRC err count
332 
333 
334     // 64-bit OID
335     unsigned long long   ullTsrOK;
336 
337     // for some optional OIDs (64 bits) and DMI support
338     unsigned long long   ullTxBroadcastFrames;
339     unsigned long long   ullTxMulticastFrames;
340     unsigned long long   ullTxDirectedFrames;
341     unsigned long long   ullTxBroadcastBytes;
342     unsigned long long   ullTxMulticastBytes;
343     unsigned long long   ullTxDirectedBytes;
344 
345     // for autorate
346     DWORD   dwTxOk[MAX_RATE+1];
347     DWORD   dwTxFail[MAX_RATE+1];
348     DWORD   dwTxRetryCount[8];
349 
350     STxPktInfo  abyTxPktInfo[16];
351 
352     SUSBCounter USB_EP0Stat;
353     SUSBCounter USB_BulkInStat;
354     SUSBCounter USB_BulkOutStat;
355     SUSBCounter USB_InterruptStat;
356 
357     SCustomCounters CustomStat;
358 
359        //Tx count:
360   unsigned long TxNoRetryOkCount;         /* success tx no retry ! */
361   unsigned long TxRetryOkCount;           /* success tx but retry ! */
362   unsigned long TxFailCount;              /* fail tx ? */
363       //Rx count:
364   unsigned long RxOkCnt;                  /* success rx ! */
365   unsigned long RxFcsErrCnt;              /* fail rx ? */
366       //statistic
367     unsigned long SignalStren;
368     unsigned long LinkQuality;
369 
370 } SStatCounter, *PSStatCounter;
371 
372 /*---------------------  Export Classes  ----------------------------*/
373 
374 /*---------------------  Export Variables  --------------------------*/
375 
376 /*---------------------  Export Functions  --------------------------*/
377 
378 void STAvClearAllCounter(PSStatCounter pStatistic);
379 
380 void STAvUpdateIsrStatCounter(PSStatCounter pStatistic,
381 			      BYTE byIsr0,
382 			      BYTE byIsr1);
383 
384 void STAvUpdateRDStatCounter(PSStatCounter pStatistic,
385 			     BYTE byRSR, BYTE byNewRSR, BYTE byRxSts,
386 			     BYTE byRxRate, PBYTE pbyBuffer,
387 			     unsigned int cbFrameLength);
388 
389 void STAvUpdateRDStatCounterEx(PSStatCounter pStatistic,
390 			       BYTE byRSR, BYTE byNewRSR, BYTE byRxSts,
391 			       BYTE byRxRate, PBYTE pbyBuffer,
392 			       unsigned int cbFrameLength);
393 
394 void STAvUpdateTDStatCounter(PSStatCounter pStatistic, BYTE byPktNum,
395 			     BYTE byRate, BYTE byTSR);
396 
397 void
398 STAvUpdate802_11Counter(
399     PSDot11Counters         p802_11Counter,
400     PSStatCounter           pStatistic,
401     BYTE                    byRTSSuccess,
402     BYTE                    byRTSFail,
403     BYTE                    byACKFail,
404     BYTE                    byFCSErr
405     );
406 
407 void STAvClear802_11Counter(PSDot11Counters p802_11Counter);
408 void STAvUpdateUSBCounter(PSUSBCounter pUsbCounter, int ntStatus);
409 
410 #endif /* __MIB_H__ */
411