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