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#include "mib.h" 38 39/*--------------------- Export Definitions -------------------------*/ 40 41#define MAX_NODE_NUM 64 42#define MAX_BSS_NUM 42 43#define LOST_BEACON_COUNT 10 /* 10 sec, XP defined */ 44#define MAX_PS_TX_BUF 32 // sta max power saving tx buf 45#define ADHOC_LOST_BEACON_COUNT 30 // 30 sec, beacon lost for adhoc only 46#define MAX_INACTIVE_COUNT 300 // 300 sec, inactive STA node refresh 47 48#define USE_PROTECT_PERIOD 10 // 10 sec, Use protect mode check period 49#define ERP_RECOVER_COUNT 30 // 30 sec, ERP support callback check 50#define BSS_CLEAR_COUNT 1 51 52#define RSSI_STAT_COUNT 10 53#define MAX_CHECK_RSSI_COUNT 8 54 55// STA dwflags 56#define WLAN_STA_AUTH BIT0 57#define WLAN_STA_ASSOC BIT1 58#define WLAN_STA_PS BIT2 59#define WLAN_STA_TIM BIT3 60// permanent; do not remove entry on expiration 61#define WLAN_STA_PERM BIT4 62// If 802.1X is used, this flag is 63// controlling whether STA is authorized to 64// send and receive non-IEEE 802.1X frames 65#define WLAN_STA_AUTHORIZED BIT5 66 67//#define MAX_RATE 12 68 69#define MAX_WPA_IE_LEN 64 70 71 72/*--------------------- Export Classes ----------------------------*/ 73 74/*--------------------- Export Variables --------------------------*/ 75 76 77/*--------------------- Export Types ------------------------------*/ 78 79// 80// IEEE 802.11 Structures and definitions 81// 82 83typedef struct tagSERPObject { 84 BOOL bERPExist; 85 BYTE byERP; 86} ERPObject, *PERPObject; 87 88 89typedef struct tagSRSNCapObject { 90 BOOL bRSNCapExist; 91 WORD wRSNCap; 92} SRSNCapObject, *PSRSNCapObject; 93 94// BSS info(AP) 95#pragma pack(1) 96typedef struct tagKnownBSS { 97 // BSS info 98 BOOL bActive; 99 BYTE abyBSSID[WLAN_BSSID_LEN]; 100 unsigned int uChannel; 101 BYTE abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 102 BYTE abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 103 unsigned int uRSSI; 104 BYTE bySQ; 105 WORD wBeaconInterval; 106 WORD wCapInfo; 107 BYTE abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 108 BYTE byRxRate; 109 110// WORD wATIMWindow; 111 BYTE byRSSIStatCnt; 112 signed long ldBmMAX; 113 signed long ldBmAverage[RSSI_STAT_COUNT]; 114 signed long ldBmAverRange; 115 //For any BSSID selection improvment 116 BOOL bSelected; 117 118 //++ WPA informations 119 BOOL bWPAValid; 120 BYTE byGKType; 121 BYTE abyPKType[4]; 122 WORD wPKCount; 123 BYTE abyAuthType[4]; 124 WORD wAuthCount; 125 BYTE byDefaultK_as_PK; 126 BYTE byReplayIdx; 127 //-- 128 129 //++ WPA2 informations 130 BOOL bWPA2Valid; 131 BYTE byCSSGK; 132 WORD wCSSPKCount; 133 BYTE abyCSSPK[4]; 134 WORD wAKMSSAuthCount; 135 BYTE abyAKMSSAuthType[4]; 136 137 //++ wpactl 138 BYTE byWPAIE[MAX_WPA_IE_LEN]; 139 BYTE byRSNIE[MAX_WPA_IE_LEN]; 140 WORD wWPALen; 141 WORD wRSNLen; 142 143 // Clear count 144 unsigned int uClearCount; 145// BYTE abyIEs[WLAN_BEACON_FR_MAXLEN]; 146 unsigned int uIELength; 147 QWORD qwBSSTimestamp; 148 QWORD qwLocalTSF; // local TSF timer 149 150 CARD_PHY_TYPE eNetworkTypeInUse; 151 152 ERPObject sERP; 153 SRSNCapObject sRSNCapObj; 154 BYTE abyIEs[1024]; // don't move this field !! 155 156} __attribute__ ((__packed__)) 157KnownBSS , *PKnownBSS; 158 159 160 161typedef enum tagNODE_STATE { 162 NODE_FREE, 163 NODE_AGED, 164 NODE_KNOWN, 165 NODE_AUTH, 166 NODE_ASSOC 167} NODE_STATE, *PNODE_STATE; 168 169 170// STA node info 171typedef struct tagKnownNodeDB { 172 // STA info 173 BOOL bActive; 174 BYTE abyMACAddr[WLAN_ADDR_LEN]; 175 BYTE abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; 176 BYTE abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; 177 WORD wTxDataRate; 178 BOOL bShortPreamble; 179 BOOL bERPExist; 180 BOOL bShortSlotTime; 181 unsigned int uInActiveCount; 182 WORD wMaxBasicRate; //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp. 183 WORD wMaxSuppRate; //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon. 184 WORD wSuppRate; 185 BYTE byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode 186 BYTE byTopCCKBasicRate; //Records the highest basic rate in CCK mode 187 188 // For AP mode 189 struct sk_buff_head sTxPSQueue; 190 WORD wCapInfo; 191 WORD wListenInterval; 192 WORD wAID; 193 NODE_STATE eNodeState; 194 BOOL bPSEnable; 195 BOOL bRxPSPoll; 196 BYTE byAuthSequence; 197 unsigned long ulLastRxJiffer; 198 BYTE bySuppRate; 199 DWORD dwFlags; 200 WORD wEnQueueCnt; 201 202 BOOL bOnFly; 203 unsigned long long KeyRSC; 204 BYTE byKeyIndex; 205 DWORD dwKeyIndex; 206 BYTE byCipherSuite; 207 DWORD dwTSC47_16; 208 WORD wTSC15_0; 209 unsigned int uWepKeyLength; 210 BYTE abyWepKey[WLAN_WEPMAX_KEYLEN]; 211 // 212 // Auto rate fallback vars 213 BOOL bIsInFallback; 214 unsigned int uAverageRSSI; 215 unsigned int uRateRecoveryTimeout; 216 unsigned int uRatePollTimeout; 217 unsigned int uTxFailures; 218 unsigned int uTxAttempts; 219 220 unsigned int uTxRetry; 221 unsigned int uFailureRatio; 222 unsigned int uRetryRatio; 223 unsigned int uTxOk[MAX_RATE+1]; 224 unsigned int uTxFail[MAX_RATE+1]; 225 unsigned int uTimeCount; 226 227} KnownNodeDB, *PKnownNodeDB; 228 229/*--------------------- Export Functions --------------------------*/ 230 231PKnownBSS BSSpSearchBSSList(void *hDeviceContext, 232 PBYTE pbyDesireBSSID, 233 PBYTE pbyDesireSSID, 234 CARD_PHY_TYPE ePhyType); 235 236PKnownBSS BSSpAddrIsInBSSList(void *hDeviceContext, 237 PBYTE abyBSSID, 238 PWLAN_IE_SSID pSSID); 239 240void BSSvClearBSSList(void *hDeviceContext, BOOL bKeepCurrBSSID); 241 242BOOL BSSbInsertToBSSList(void *hDeviceContext, 243 PBYTE abyBSSIDAddr, 244 QWORD qwTimestamp, 245 WORD wBeaconInterval, 246 WORD wCapInfo, 247 BYTE byCurrChannel, 248 PWLAN_IE_SSID pSSID, 249 PWLAN_IE_SUPP_RATES pSuppRates, 250 PWLAN_IE_SUPP_RATES pExtSuppRates, 251 PERPObject psERP, 252 PWLAN_IE_RSN pRSN, 253 PWLAN_IE_RSN_EXT pRSNWPA, 254 PWLAN_IE_COUNTRY pIE_Country, 255 PWLAN_IE_QUIET pIE_Quiet, 256 unsigned int uIELength, 257 PBYTE pbyIEs, 258 void *pRxPacketContext); 259 260BOOL BSSbUpdateToBSSList(void *hDeviceContext, 261 QWORD qwTimestamp, 262 WORD wBeaconInterval, 263 WORD wCapInfo, 264 BYTE byCurrChannel, 265 BOOL bChannelHit, 266 PWLAN_IE_SSID pSSID, 267 PWLAN_IE_SUPP_RATES pSuppRates, 268 PWLAN_IE_SUPP_RATES pExtSuppRates, 269 PERPObject psERP, 270 PWLAN_IE_RSN pRSN, 271 PWLAN_IE_RSN_EXT pRSNWPA, 272 PWLAN_IE_COUNTRY pIE_Country, 273 PWLAN_IE_QUIET pIE_Quiet, 274 PKnownBSS pBSSList, 275 unsigned int uIELength, 276 PBYTE pbyIEs, 277 void *pRxPacketContext); 278 279BOOL BSSbIsSTAInNodeDB(void *hDeviceContext, 280 PBYTE abyDstAddr, 281 unsigned int *puNodeIndex); 282 283void BSSvCreateOneNode(void *hDeviceContext, unsigned int *puNodeIndex); 284 285void BSSvUpdateAPNode(void *hDeviceContext, 286 PWORD pwCapInfo, 287 PWLAN_IE_SUPP_RATES pItemRates, 288 PWLAN_IE_SUPP_RATES pExtSuppRates); 289 290void BSSvSecondCallBack(void *hDeviceContext); 291 292void BSSvUpdateNodeTxCounter(void *hDeviceContext, 293 PSStatCounter pStatistic, 294 BYTE byTSR, 295 BYTE byPktNO); 296 297void BSSvRemoveOneNode(void *hDeviceContext, 298 unsigned int uNodeIndex); 299 300void BSSvAddMulticastNode(void *hDeviceContext); 301 302void BSSvClearNodeDBTable(void *hDeviceContext, 303 unsigned int uStartIndex); 304 305void BSSvClearAnyBSSJoinRecord(void *hDeviceContext); 306 307#endif /* __BSSDB_H__ */ 308