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 82 typedef 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 92 typedef struct tagSERPObject { 93 bool bERPExist; 94 unsigned char byERP; 95 }ERPObject, *PERPObject; 96 97 98 typedef struct tagSRSNCapObject { 99 bool bRSNCapExist; 100 unsigned short wRSNCap; 101 }SRSNCapObject, *PSRSNCapObject; 102 103 // BSS info(AP) 104 #pragma pack(1) 105 typedef struct tagKnownBSS { 106 // BSS info 107 bool bActive; 108 unsigned char abyBSSID[WLAN_BSSID_LEN]; 109 unsigned int uChannel; 110 unsigned char abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 111 unsigned char abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 112 unsigned int uRSSI; 113 unsigned char bySQ; 114 unsigned short wBeaconInterval; 115 unsigned short wCapInfo; 116 unsigned char abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 117 unsigned char byRxRate; 118 119 // unsigned short wATIMWindow; 120 unsigned char 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 unsigned char byGKType; 130 unsigned char abyPKType[4]; 131 unsigned short wPKCount; 132 unsigned char abyAuthType[4]; 133 unsigned short wAuthCount; 134 unsigned char byDefaultK_as_PK; 135 unsigned char byReplayIdx; 136 //-- 137 138 //++ WPA2 informations 139 bool bWPA2Valid; 140 unsigned char byCSSGK; 141 unsigned short wCSSPKCount; 142 unsigned char abyCSSPK[4]; 143 unsigned short wAKMSSAuthCount; 144 unsigned char abyAKMSSAuthType[4]; 145 146 //++ wpactl 147 unsigned char byWPAIE[MAX_WPA_IE_LEN]; 148 unsigned char byRSNIE[MAX_WPA_IE_LEN]; 149 unsigned short wWPALen; 150 unsigned short wRSNLen; 151 152 // Clear count 153 unsigned int uClearCount; 154 // unsigned char 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 unsigned char abyIEs[1024]; // don't move this field !! 165 166 }__attribute__ ((__packed__)) 167 KnownBSS , *PKnownBSS; 168 169 //2006-1116-01,<Add> by NomadZhao 170 #pragma pack() 171 172 typedef 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 182 typedef struct tagKnownNodeDB { 183 // STA info 184 bool bActive; 185 unsigned char abyMACAddr[WLAN_ADDR_LEN]; 186 unsigned char abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; 187 unsigned char abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; 188 unsigned short wTxDataRate; 189 bool bShortPreamble; 190 bool bERPExist; 191 bool bShortSlotTime; 192 unsigned int uInActiveCount; 193 unsigned short wMaxBasicRate; //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp. 194 unsigned short wMaxSuppRate; //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon. 195 unsigned short wSuppRate; 196 unsigned char byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode 197 unsigned char byTopCCKBasicRate; //Records the highest basic rate in CCK mode 198 199 // For AP mode 200 struct sk_buff_head sTxPSQueue; 201 unsigned short wCapInfo; 202 unsigned short wListenInterval; 203 unsigned short wAID; 204 NODE_STATE eNodeState; 205 bool bPSEnable; 206 bool bRxPSPoll; 207 unsigned char byAuthSequence; 208 unsigned long ulLastRxJiffer; 209 unsigned char bySuppRate; 210 unsigned long dwFlags; 211 unsigned short wEnQueueCnt; 212 213 bool bOnFly; 214 unsigned long long KeyRSC; 215 unsigned char byKeyIndex; 216 unsigned long dwKeyIndex; 217 unsigned char byCipherSuite; 218 unsigned long dwTSC47_16; 219 unsigned short wTSC15_0; 220 unsigned int uWepKeyLength; 221 unsigned char 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 245 PKnownBSS 246 BSSpSearchBSSList( 247 void *hDeviceContext, 248 unsigned char *pbyDesireBSSID, 249 unsigned char *pbyDesireSSID, 250 CARD_PHY_TYPE ePhyType 251 ); 252 253 PKnownBSS 254 BSSpAddrIsInBSSList( 255 void *hDeviceContext, 256 unsigned char *abyBSSID, 257 PWLAN_IE_SSID pSSID 258 ); 259 260 void 261 BSSvClearBSSList( 262 void *hDeviceContext, 263 bool bKeepCurrBSSID 264 ); 265 266 bool 267 BSSbInsertToBSSList( 268 void *hDeviceContext, 269 unsigned char *abyBSSIDAddr, 270 QWORD qwTimestamp, 271 unsigned short wBeaconInterval, 272 unsigned short wCapInfo, 273 unsigned char 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 288 bool 289 BSSbUpdateToBSSList( 290 void *hDeviceContext, 291 QWORD qwTimestamp, 292 unsigned short wBeaconInterval, 293 unsigned short wCapInfo, 294 unsigned char 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 311 bool 312 BSSDBbIsSTAInNodeDB(void *hDeviceContext, unsigned char *abyDstAddr, 313 unsigned int *puNodeIndex); 314 315 void 316 BSSvCreateOneNode(void *hDeviceContext, unsigned int *puNodeIndex); 317 318 void 319 BSSvUpdateAPNode( 320 void *hDeviceContext, 321 unsigned short *pwCapInfo, 322 PWLAN_IE_SUPP_RATES pItemRates, 323 PWLAN_IE_SUPP_RATES pExtSuppRates 324 ); 325 326 327 void 328 BSSvSecondCallBack( 329 void *hDeviceContext 330 ); 331 332 333 void 334 BSSvUpdateNodeTxCounter( 335 void *hDeviceContext, 336 unsigned char byTsr0, 337 unsigned char byTsr1, 338 unsigned char *pbyBuffer, 339 unsigned int uFIFOHeaderSize 340 ); 341 342 void 343 BSSvRemoveOneNode( 344 void *hDeviceContext, 345 unsigned int uNodeIndex 346 ); 347 348 void 349 BSSvAddMulticastNode( 350 void *hDeviceContext 351 ); 352 353 354 void 355 BSSvClearNodeDBTable( 356 void *hDeviceContext, 357 unsigned int uStartIndex 358 ); 359 360 void 361 BSSvClearAnyBSSJoinRecord( 362 void *hDeviceContext 363 ); 364 365 #endif //__BSSDB_H__ 366