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