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