bssdb.h revision 5449c685a4b39534f18869a93896370224463715
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 *
20 * File: bssdb.h
21 *
22 * Purpose: Handles the Basic Service Set & Node Database functions
23 *
24 * Author: Lyndon Chen
25 *
26 * Date: July 16, 2002
27 *
28 */
29
30#ifndef __BSSDB_H__
31#define __BSSDB_H__
32
33//#if !defined(__DEVICE_H__)
34//#include "device.h"
35//#endif
36#include <linux/skbuff.h>
37#if !defined(__80211HDR_H__)
38#include "80211hdr.h"
39#endif
40#if !defined(__80211MGR_H__)
41#include "80211mgr.h"
42#endif
43#if !defined(__CARD_H__)
44#include "card.h"
45#endif
46
47
48
49/*---------------------  Export Definitions -------------------------*/
50
51#define MAX_NODE_NUM             64
52#define MAX_BSS_NUM              42
53#define LOST_BEACON_COUNT      	 10   // 10 sec, XP defined
54#define MAX_PS_TX_BUF            32   // sta max power saving tx buf
55#define ADHOC_LOST_BEACON_COUNT  30   // 30 sec, beacon lost for adhoc only
56#define MAX_INACTIVE_COUNT       300  // 300 sec, inactive STA node refresh
57
58#define USE_PROTECT_PERIOD       10   // 10 sec, Use protect mode check period
59#define ERP_RECOVER_COUNT        30   // 30 sec, ERP support callback check
60#define BSS_CLEAR_COUNT           1
61
62#define RSSI_STAT_COUNT          10
63#define MAX_CHECK_RSSI_COUNT     8
64
65// STA dwflags
66#define WLAN_STA_AUTH            BIT0
67#define WLAN_STA_ASSOC           BIT1
68#define WLAN_STA_PS              BIT2
69#define WLAN_STA_TIM             BIT3
70// permanent; do not remove entry on expiration
71#define WLAN_STA_PERM            BIT4
72// If 802.1X is used, this flag is
73// controlling whether STA is authorized to
74// send and receive non-IEEE 802.1X frames
75#define WLAN_STA_AUTHORIZED      BIT5
76
77#define MAX_RATE            12
78
79#define MAX_WPA_IE_LEN      64
80
81
82/*---------------------  Export Classes  ----------------------------*/
83
84/*---------------------  Export Variables  --------------------------*/
85
86
87/*---------------------  Export Types  ------------------------------*/
88
89//
90// IEEE 802.11 Structures and definitions
91//
92
93typedef enum _NDIS_802_11_NETWORK_TYPE
94{
95    Ndis802_11FH,
96    Ndis802_11DS,
97    Ndis802_11OFDM5,
98    Ndis802_11OFDM24,
99    Ndis802_11NetworkTypeMax    // not a real type, defined as an upper bound
100} NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
101
102
103typedef struct tagSERPObject {
104    BOOL    bERPExist;
105    BYTE    byERP;
106} ERPObject, DEF* PERPObject;
107
108
109typedef struct tagSRSNCapObject {
110    BOOL    bRSNCapExist;
111    WORD    wRSNCap;
112} SRSNCapObject, DEF* PSRSNCapObject;
113
114// BSS info(AP)
115#pragma pack(1)
116typedef struct tagKnownBSS {
117    // BSS info
118    BOOL            bActive;
119    BYTE            abyBSSID[WLAN_BSSID_LEN];
120    UINT            uChannel;
121    BYTE            abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
122    BYTE            abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
123    UINT            uRSSI;
124    BYTE            bySQ;
125    WORD            wBeaconInterval;
126    WORD            wCapInfo;
127    BYTE            abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
128    BYTE            byRxRate;
129//    WORD            wATIMWindow;
130    BYTE            byRSSIStatCnt;
131    LONG            ldBmMAX;
132    LONG            ldBmAverage[RSSI_STAT_COUNT];
133     LONG            ldBmAverRange;
134    //For any BSSID selection improvment
135    BOOL            bSelected;
136
137    //++ WPA informations
138    BOOL            bWPAValid;
139    BYTE            byGKType;
140    BYTE            abyPKType[4];
141    WORD            wPKCount;
142    BYTE            abyAuthType[4];
143    WORD            wAuthCount;
144    BYTE            byDefaultK_as_PK;
145    BYTE            byReplayIdx;
146    //--
147
148    //++ WPA2 informations
149    BOOL            bWPA2Valid;
150    BYTE            byCSSGK;
151    WORD            wCSSPKCount;
152    BYTE            abyCSSPK[4];
153    WORD            wAKMSSAuthCount;
154    BYTE            abyAKMSSAuthType[4];
155
156    //++  wpactl
157    BYTE            byWPAIE[MAX_WPA_IE_LEN];
158    BYTE            byRSNIE[MAX_WPA_IE_LEN];
159    WORD            wWPALen;
160    WORD            wRSNLen;
161
162    // Clear count
163    UINT            uClearCount;
164//    BYTE            abyIEs[WLAN_BEACON_FR_MAXLEN];
165    UINT            uIELength;
166    QWORD           qwBSSTimestamp;
167    QWORD           qwLocalTSF;     // local TSF timer
168
169//    NDIS_802_11_NETWORK_TYPE    NetworkTypeInUse;
170    CARD_PHY_TYPE   eNetworkTypeInUse;
171
172    ERPObject       sERP;
173    SRSNCapObject   sRSNCapObj;
174    BYTE            abyIEs[1024];   // don't move this field !!
175
176}__attribute__ ((__packed__))
177KnownBSS , DEF* PKnownBSS;
178
179//2006-1116-01,<Add> by NomadZhao
180#pragma pack()
181
182typedef enum tagNODE_STATE {
183    NODE_FREE,
184    NODE_AGED,
185    NODE_KNOWN,
186    NODE_AUTH,
187    NODE_ASSOC
188} NODE_STATE, *PNODE_STATE;
189
190
191// STA node info
192typedef struct tagKnownNodeDB {
193    // STA info
194    BOOL            bActive;
195    BYTE            abyMACAddr[WLAN_ADDR_LEN];
196    BYTE            abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
197    BYTE            abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
198    WORD            wTxDataRate;
199    BOOL            bShortPreamble;
200    BOOL            bERPExist;
201    BOOL            bShortSlotTime;
202    UINT            uInActiveCount;
203    WORD            wMaxBasicRate;     //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp.
204    WORD            wMaxSuppRate;      //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon.
205    WORD            wSuppRate;
206    BYTE            byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode
207    BYTE            byTopCCKBasicRate; //Records the highest basic rate in CCK mode
208
209    // For AP mode
210    struct sk_buff_head sTxPSQueue;
211    WORD            wCapInfo;
212    WORD            wListenInterval;
213    WORD            wAID;
214    NODE_STATE      eNodeState;
215    BOOL            bPSEnable;
216    BOOL            bRxPSPoll;
217    BYTE            byAuthSequence;
218    ULONG           ulLastRxJiffer;
219    BYTE            bySuppRate;
220    DWORD           dwFlags;
221    WORD            wEnQueueCnt;
222
223    BOOL            bOnFly;
224    ULONGLONG       KeyRSC;
225    BYTE            byKeyIndex;
226    DWORD           dwKeyIndex;
227    BYTE            byCipherSuite;
228    DWORD           dwTSC47_16;
229    WORD            wTSC15_0;
230    UINT            uWepKeyLength;
231    BYTE            abyWepKey[WLAN_WEPMAX_KEYLEN];
232    //
233    // Auto rate fallback vars
234    BOOL            bIsInFallback;
235    UINT            uAverageRSSI;
236    UINT            uRateRecoveryTimeout;
237    UINT            uRatePollTimeout;
238    UINT            uTxFailures;
239    UINT            uTxAttempts;
240
241    UINT            uTxRetry;
242    UINT            uFailureRatio;
243    UINT            uRetryRatio;
244    UINT            uTxOk[MAX_RATE+1];
245    UINT            uTxFail[MAX_RATE+1];
246    UINT            uTimeCount;
247
248} KnownNodeDB, DEF* PKnownNodeDB;
249
250
251/*---------------------  Export Functions  --------------------------*/
252
253
254
255PKnownBSS
256BSSpSearchBSSList(
257    IN HANDLE hDeviceContext,
258    IN PBYTE pbyDesireBSSID,
259    IN PBYTE pbyDesireSSID,
260    IN CARD_PHY_TYPE ePhyType
261    );
262
263PKnownBSS
264BSSpAddrIsInBSSList(
265    IN HANDLE hDeviceContext,
266    IN PBYTE abyBSSID,
267    IN PWLAN_IE_SSID pSSID
268    );
269
270VOID
271BSSvClearBSSList(
272    IN HANDLE hDeviceContext,
273    IN BOOL bKeepCurrBSSID
274    );
275
276BOOL
277BSSbInsertToBSSList(
278    IN HANDLE hDeviceContext,
279    IN PBYTE abyBSSIDAddr,
280    IN QWORD qwTimestamp,
281    IN WORD wBeaconInterval,
282    IN WORD wCapInfo,
283    IN BYTE byCurrChannel,
284    IN PWLAN_IE_SSID pSSID,
285    IN PWLAN_IE_SUPP_RATES pSuppRates,
286    IN PWLAN_IE_SUPP_RATES pExtSuppRates,
287    IN PERPObject psERP,
288    IN PWLAN_IE_RSN pRSN,
289    IN PWLAN_IE_RSN_EXT pRSNWPA,
290    IN PWLAN_IE_COUNTRY pIE_Country,
291    IN PWLAN_IE_QUIET pIE_Quiet,
292    IN UINT uIELength,
293    IN PBYTE pbyIEs,
294    IN HANDLE pRxPacketContext
295    );
296
297
298BOOL
299BSSbUpdateToBSSList(
300    IN HANDLE hDeviceContext,
301    IN QWORD qwTimestamp,
302    IN WORD wBeaconInterval,
303    IN WORD wCapInfo,
304    IN BYTE byCurrChannel,
305    IN BOOL bChannelHit,
306    IN PWLAN_IE_SSID pSSID,
307    IN PWLAN_IE_SUPP_RATES pSuppRates,
308    IN PWLAN_IE_SUPP_RATES pExtSuppRates,
309    IN PERPObject psERP,
310    IN PWLAN_IE_RSN pRSN,
311    IN PWLAN_IE_RSN_EXT pRSNWPA,
312    IN PWLAN_IE_COUNTRY pIE_Country,
313    IN PWLAN_IE_QUIET pIE_Quiet,
314    IN PKnownBSS pBSSList,
315    IN UINT uIELength,
316    IN PBYTE pbyIEs,
317    IN HANDLE pRxPacketContext
318    );
319
320
321BOOL
322BSSDBbIsSTAInNodeDB(
323    IN HANDLE hDeviceContext,
324    IN PBYTE abyDstAddr,
325    OUT PUINT puNodeIndex
326    );
327
328VOID
329BSSvCreateOneNode(
330    IN HANDLE hDeviceContext,
331    OUT PUINT puNodeIndex
332    );
333
334VOID
335BSSvUpdateAPNode(
336    IN HANDLE hDeviceContext,
337    IN PWORD pwCapInfo,
338    IN PWLAN_IE_SUPP_RATES pItemRates,
339    IN PWLAN_IE_SUPP_RATES pExtSuppRates
340    );
341
342
343VOID
344BSSvSecondCallBack(
345    IN HANDLE hDeviceContext
346    );
347
348VOID
349BSSvUpdateNodeTxCounter(
350    IN HANDLE hDeviceContext,
351    IN BYTE        byTsr0,
352    IN BYTE        byTsr1,
353    IN PBYTE       pbyBuffer,
354    IN UINT        uFIFOHeaderSize
355    );
356
357VOID
358BSSvRemoveOneNode(
359    IN HANDLE hDeviceContext,
360    IN UINT uNodeIndex
361    );
362
363VOID
364BSSvAddMulticastNode(
365    IN HANDLE hDeviceContext
366    );
367
368
369VOID
370BSSvClearNodeDBTable(
371    IN HANDLE hDeviceContext,
372    IN UINT uStartIndex
373    );
374
375VOID
376BSSvClearAnyBSSJoinRecord(
377    IN HANDLE hDeviceContext
378    );
379
380#endif //__BSSDB_H__
381