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 /*--------------------- Export Classes ----------------------------*/ 71 72 /*--------------------- Export Variables --------------------------*/ 73 74 /*--------------------- Export Types ------------------------------*/ 75 76 // 77 // IEEE 802.11 Structures and definitions 78 // 79 80 typedef enum _NDIS_802_11_NETWORK_TYPE 81 { 82 Ndis802_11FH, 83 Ndis802_11DS, 84 Ndis802_11OFDM5, 85 Ndis802_11OFDM24, 86 Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound 87 } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE; 88 89 typedef struct tagSERPObject { 90 bool bERPExist; 91 unsigned char byERP; 92 } ERPObject, *PERPObject; 93 94 typedef struct tagSRSNCapObject { 95 bool bRSNCapExist; 96 unsigned short wRSNCap; 97 } SRSNCapObject, *PSRSNCapObject; 98 99 // BSS info(AP) 100 #pragma pack(1) 101 typedef struct tagKnownBSS { 102 // BSS info 103 bool bActive; 104 unsigned char abyBSSID[WLAN_BSSID_LEN]; 105 unsigned int uChannel; 106 unsigned char abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 107 unsigned char abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 108 unsigned int uRSSI; 109 unsigned char bySQ; 110 unsigned short wBeaconInterval; 111 unsigned short wCapInfo; 112 unsigned char abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 113 unsigned char byRxRate; 114 115 // unsigned short wATIMWindow; 116 unsigned char byRSSIStatCnt; 117 long ldBmMAX; 118 long ldBmAverage[RSSI_STAT_COUNT]; 119 long ldBmAverRange; 120 //For any BSSID selection improvment 121 bool bSelected; 122 123 //++ WPA informations 124 bool bWPAValid; 125 unsigned char byGKType; 126 unsigned char abyPKType[4]; 127 unsigned short wPKCount; 128 unsigned char abyAuthType[4]; 129 unsigned short wAuthCount; 130 unsigned char byDefaultK_as_PK; 131 unsigned char byReplayIdx; 132 //-- 133 134 //++ WPA2 informations 135 bool bWPA2Valid; 136 unsigned char byCSSGK; 137 unsigned short wCSSPKCount; 138 unsigned char abyCSSPK[4]; 139 unsigned short wAKMSSAuthCount; 140 unsigned char abyAKMSSAuthType[4]; 141 142 //++ wpactl 143 unsigned char byWPAIE[MAX_WPA_IE_LEN]; 144 unsigned char byRSNIE[MAX_WPA_IE_LEN]; 145 unsigned short wWPALen; 146 unsigned short wRSNLen; 147 148 // Clear count 149 unsigned int uClearCount; 150 // unsigned char abyIEs[WLAN_BEACON_FR_MAXLEN]; 151 unsigned int uIELength; 152 QWORD qwBSSTimestamp; 153 QWORD qwLocalTSF; // local TSF timer 154 155 // NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; 156 CARD_PHY_TYPE eNetworkTypeInUse; 157 158 ERPObject sERP; 159 SRSNCapObject sRSNCapObj; 160 unsigned char abyIEs[1024]; // don't move this field !! 161 } __attribute__ ((__packed__)) 162 KnownBSS , *PKnownBSS; 163 164 //2006-1116-01,<Add> by NomadZhao 165 #pragma pack() 166 167 typedef enum tagNODE_STATE { 168 NODE_FREE, 169 NODE_AGED, 170 NODE_KNOWN, 171 NODE_AUTH, 172 NODE_ASSOC 173 } NODE_STATE, *PNODE_STATE; 174 175 // STA node info 176 typedef struct tagKnownNodeDB { 177 // STA info 178 bool bActive; 179 unsigned char abyMACAddr[WLAN_ADDR_LEN]; 180 unsigned char abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; 181 unsigned char abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; 182 unsigned short wTxDataRate; 183 bool bShortPreamble; 184 bool bERPExist; 185 bool bShortSlotTime; 186 unsigned int uInActiveCount; 187 unsigned short wMaxBasicRate; //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp. 188 unsigned short wMaxSuppRate; //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon. 189 unsigned short wSuppRate; 190 unsigned char byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode 191 unsigned char byTopCCKBasicRate; //Records the highest basic rate in CCK mode 192 193 // For AP mode 194 struct sk_buff_head sTxPSQueue; 195 unsigned short wCapInfo; 196 unsigned short wListenInterval; 197 unsigned short wAID; 198 NODE_STATE eNodeState; 199 bool bPSEnable; 200 bool bRxPSPoll; 201 unsigned char byAuthSequence; 202 unsigned long ulLastRxJiffer; 203 unsigned char bySuppRate; 204 unsigned long dwFlags; 205 unsigned short wEnQueueCnt; 206 207 bool bOnFly; 208 unsigned long long KeyRSC; 209 unsigned char byKeyIndex; 210 unsigned long dwKeyIndex; 211 unsigned char byCipherSuite; 212 unsigned long dwTSC47_16; 213 unsigned short wTSC15_0; 214 unsigned int uWepKeyLength; 215 unsigned char abyWepKey[WLAN_WEPMAX_KEYLEN]; 216 // 217 // Auto rate fallback vars 218 bool bIsInFallback; 219 unsigned int uAverageRSSI; 220 unsigned int uRateRecoveryTimeout; 221 unsigned int uRatePollTimeout; 222 unsigned int uTxFailures; 223 unsigned int uTxAttempts; 224 225 unsigned int uTxRetry; 226 unsigned int uFailureRatio; 227 unsigned int uRetryRatio; 228 unsigned int uTxOk[MAX_RATE+1]; 229 unsigned int uTxFail[MAX_RATE+1]; 230 unsigned int uTimeCount; 231 } KnownNodeDB, *PKnownNodeDB; 232 233 /*--------------------- Export Functions --------------------------*/ 234 235 PKnownBSS 236 BSSpSearchBSSList( 237 void *hDeviceContext, 238 unsigned char *pbyDesireBSSID, 239 unsigned char *pbyDesireSSID, 240 CARD_PHY_TYPE ePhyType 241 ); 242 243 PKnownBSS 244 BSSpAddrIsInBSSList( 245 void *hDeviceContext, 246 unsigned char *abyBSSID, 247 PWLAN_IE_SSID pSSID 248 ); 249 250 void 251 BSSvClearBSSList( 252 void *hDeviceContext, 253 bool bKeepCurrBSSID 254 ); 255 256 bool 257 BSSbInsertToBSSList( 258 void *hDeviceContext, 259 unsigned char *abyBSSIDAddr, 260 QWORD qwTimestamp, 261 unsigned short wBeaconInterval, 262 unsigned short wCapInfo, 263 unsigned char byCurrChannel, 264 PWLAN_IE_SSID pSSID, 265 PWLAN_IE_SUPP_RATES pSuppRates, 266 PWLAN_IE_SUPP_RATES pExtSuppRates, 267 PERPObject psERP, 268 PWLAN_IE_RSN pRSN, 269 PWLAN_IE_RSN_EXT pRSNWPA, 270 PWLAN_IE_COUNTRY pIE_Country, 271 PWLAN_IE_QUIET pIE_Quiet, 272 unsigned int uIELength, 273 unsigned char *pbyIEs, 274 void *pRxPacketContext 275 ); 276 277 bool 278 BSSbUpdateToBSSList( 279 void *hDeviceContext, 280 QWORD qwTimestamp, 281 unsigned short wBeaconInterval, 282 unsigned short wCapInfo, 283 unsigned char byCurrChannel, 284 bool bChannelHit, 285 PWLAN_IE_SSID pSSID, 286 PWLAN_IE_SUPP_RATES pSuppRates, 287 PWLAN_IE_SUPP_RATES pExtSuppRates, 288 PERPObject psERP, 289 PWLAN_IE_RSN pRSN, 290 PWLAN_IE_RSN_EXT pRSNWPA, 291 PWLAN_IE_COUNTRY pIE_Country, 292 PWLAN_IE_QUIET pIE_Quiet, 293 PKnownBSS pBSSList, 294 unsigned int uIELength, 295 unsigned char *pbyIEs, 296 void *pRxPacketContext 297 ); 298 299 bool 300 BSSDBbIsSTAInNodeDB(void *hDeviceContext, unsigned char *abyDstAddr, 301 unsigned int *puNodeIndex); 302 303 void 304 BSSvCreateOneNode(void *hDeviceContext, unsigned int *puNodeIndex); 305 306 void 307 BSSvUpdateAPNode( 308 void *hDeviceContext, 309 unsigned short *pwCapInfo, 310 PWLAN_IE_SUPP_RATES pItemRates, 311 PWLAN_IE_SUPP_RATES pExtSuppRates 312 ); 313 314 void 315 BSSvSecondCallBack( 316 void *hDeviceContext 317 ); 318 319 void 320 BSSvUpdateNodeTxCounter( 321 void *hDeviceContext, 322 unsigned char byTsr0, 323 unsigned char byTsr1, 324 unsigned char *pbyBuffer, 325 unsigned int uFIFOHeaderSize 326 ); 327 328 void 329 BSSvRemoveOneNode( 330 void *hDeviceContext, 331 unsigned int uNodeIndex 332 ); 333 334 void 335 BSSvAddMulticastNode( 336 void *hDeviceContext 337 ); 338 339 void 340 BSSvClearNodeDBTable( 341 void *hDeviceContext, 342 unsigned int uStartIndex 343 ); 344 345 void 346 BSSvClearAnyBSSJoinRecord( 347 void *hDeviceContext 348 ); 349 350 #endif //__BSSDB_H__ 351