bssdb.h revision 2989e96f17f2dcbd73aee37856899c2885df0686
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 unsigned int uChannel; 110 BYTE abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 111 BYTE abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 112 unsigned int 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 unsigned int uClearCount; 154// BYTE abyIEs[WLAN_BEACON_FR_MAXLEN]; 155 unsigned int 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 unsigned int 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 unsigned long ulLastRxJiffer; 209 BYTE bySuppRate; 210 DWORD dwFlags; 211 WORD wEnQueueCnt; 212 213 BOOL bOnFly; 214 unsigned long long KeyRSC; 215 BYTE byKeyIndex; 216 DWORD dwKeyIndex; 217 BYTE byCipherSuite; 218 DWORD dwTSC47_16; 219 WORD wTSC15_0; 220 unsigned int uWepKeyLength; 221 BYTE abyWepKey[WLAN_WEPMAX_KEYLEN]; 222 // 223 // Auto rate fallback vars 224 BOOL bIsInFallback; 225 unsigned int uAverageRSSI; 226 unsigned int uRateRecoveryTimeout; 227 unsigned int uRatePollTimeout; 228 unsigned int uTxFailures; 229 unsigned int uTxAttempts; 230 231 unsigned int uTxRetry; 232 unsigned int uFailureRatio; 233 unsigned int uRetryRatio; 234 unsigned int uTxOk[MAX_RATE+1]; 235 unsigned int uTxFail[MAX_RATE+1]; 236 unsigned int uTimeCount; 237 238} KnownNodeDB, *PKnownNodeDB; 239 240 241/*--------------------- Export Functions --------------------------*/ 242 243 244 245PKnownBSS 246BSSpSearchBSSList( 247 void *hDeviceContext, 248 unsigned char *pbyDesireBSSID, 249 unsigned char *pbyDesireSSID, 250 CARD_PHY_TYPE ePhyType 251 ); 252 253PKnownBSS 254BSSpAddrIsInBSSList( 255 void *hDeviceContext, 256 unsigned char *abyBSSID, 257 PWLAN_IE_SSID pSSID 258 ); 259 260void 261BSSvClearBSSList( 262 void *hDeviceContext, 263 BOOL bKeepCurrBSSID 264 ); 265 266BOOL 267BSSbInsertToBSSList( 268 void *hDeviceContext, 269 unsigned char *abyBSSIDAddr, 270 QWORD qwTimestamp, 271 WORD wBeaconInterval, 272 WORD wCapInfo, 273 BYTE byCurrChannel, 274 PWLAN_IE_SSID pSSID, 275 PWLAN_IE_SUPP_RATES pSuppRates, 276 PWLAN_IE_SUPP_RATES pExtSuppRates, 277 PERPObject psERP, 278 PWLAN_IE_RSN pRSN, 279 PWLAN_IE_RSN_EXT pRSNWPA, 280 PWLAN_IE_COUNTRY pIE_Country, 281 PWLAN_IE_QUIET pIE_Quiet, 282 unsigned int uIELength, 283 unsigned char *pbyIEs, 284 void *pRxPacketContext 285 ); 286 287 288BOOL 289BSSbUpdateToBSSList( 290 void *hDeviceContext, 291 QWORD qwTimestamp, 292 WORD wBeaconInterval, 293 WORD wCapInfo, 294 BYTE byCurrChannel, 295 BOOL bChannelHit, 296 PWLAN_IE_SSID pSSID, 297 PWLAN_IE_SUPP_RATES pSuppRates, 298 PWLAN_IE_SUPP_RATES pExtSuppRates, 299 PERPObject psERP, 300 PWLAN_IE_RSN pRSN, 301 PWLAN_IE_RSN_EXT pRSNWPA, 302 PWLAN_IE_COUNTRY pIE_Country, 303 PWLAN_IE_QUIET pIE_Quiet, 304 PKnownBSS pBSSList, 305 unsigned int uIELength, 306 unsigned char *pbyIEs, 307 void *pRxPacketContext 308 ); 309 310 311BOOL 312BSSDBbIsSTAInNodeDB( 313 void *hDeviceContext, 314 unsigned char *abyDstAddr, 315 PUINT puNodeIndex 316 ); 317 318void 319BSSvCreateOneNode( 320 void *hDeviceContext, 321 PUINT puNodeIndex 322 ); 323 324void 325BSSvUpdateAPNode( 326 void *hDeviceContext, 327 PWORD pwCapInfo, 328 PWLAN_IE_SUPP_RATES pItemRates, 329 PWLAN_IE_SUPP_RATES pExtSuppRates 330 ); 331 332 333void 334BSSvSecondCallBack( 335 void *hDeviceContext 336 ); 337 338 339void 340BSSvUpdateNodeTxCounter( 341 void *hDeviceContext, 342 BYTE byTsr0, 343 BYTE byTsr1, 344 unsigned char *pbyBuffer, 345 unsigned int uFIFOHeaderSize 346 ); 347 348void 349BSSvRemoveOneNode( 350 void *hDeviceContext, 351 unsigned int uNodeIndex 352 ); 353 354void 355BSSvAddMulticastNode( 356 void *hDeviceContext 357 ); 358 359 360void 361BSSvClearNodeDBTable( 362 void *hDeviceContext, 363 unsigned int uStartIndex 364 ); 365 366void 367BSSvClearAnyBSSJoinRecord( 368 void *hDeviceContext 369 ); 370 371#endif //__BSSDB_H__ 372