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