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