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: wmgr.h 21 * 22 * Purpose: 23 * 24 * Author: lyndon chen 25 * 26 * Date: Jan 2, 2003 27 * 28 * Functions: 29 * 30 * Revision History: 31 * 32 */ 33 34#ifndef __WMGR_H__ 35#define __WMGR_H__ 36 37#include "ttype.h" 38#include "80211mgr.h" 39#include "80211hdr.h" 40#include "wcmd.h" 41#include "bssdb.h" 42#include "wpa2.h" 43#include "card.h" 44 45/*--------------------- Export Definitions -------------------------*/ 46 47 48 49// Scan time 50#define PROBE_DELAY 100 // (us) 51#define SWITCH_CHANNEL_DELAY 200 // (us) 52#define WLAN_SCAN_MINITIME 25 // (ms) 53#define WLAN_SCAN_MAXTIME 100 // (ms) 54#define TRIVIAL_SYNC_DIFFERENCE 0 // (us) 55#define DEFAULT_IBSS_BI 100 // (ms) 56 57#define WCMD_ACTIVE_SCAN_TIME 20 //(ms) 58#define WCMD_PASSIVE_SCAN_TIME 100 //(ms) 59 60 61#define DEFAULT_MSDU_LIFETIME 512 // ms 62#define DEFAULT_MSDU_LIFETIME_RES_64us 8000 // 64us 63 64#define DEFAULT_MGN_LIFETIME 8 // ms 65#define DEFAULT_MGN_LIFETIME_RES_64us 125 // 64us 66 67#define MAKE_BEACON_RESERVED 10 //(us) 68 69 70#define TIM_MULTICAST_MASK 0x01 71#define TIM_BITMAPOFFSET_MASK 0xFE 72#define DEFAULT_DTIM_PERIOD 1 73 74#define AP_LONG_RETRY_LIMIT 4 75 76#define DEFAULT_IBSS_CHANNEL 6 //2.4G 77 78 79/*--------------------- Export Classes ----------------------------*/ 80 81/*--------------------- Export Variables --------------------------*/ 82 83/*--------------------- Export Types ------------------------------*/ 84//mike define: make timer to expire after desired times 85#define timer_expire(timer, next_tick) mod_timer(&timer, RUN_AT(next_tick)) 86 87typedef void (*TimerFunction)(unsigned long); 88 89 90//+++ NDIS related 91 92typedef unsigned char NDIS_802_11_MAC_ADDRESS[ETH_ALEN]; 93typedef struct _NDIS_802_11_AI_REQFI 94{ 95 unsigned short Capabilities; 96 unsigned short ListenInterval; 97 NDIS_802_11_MAC_ADDRESS CurrentAPAddress; 98} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI; 99 100typedef struct _NDIS_802_11_AI_RESFI 101{ 102 unsigned short Capabilities; 103 unsigned short StatusCode; 104 unsigned short AssociationId; 105} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; 106 107typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION 108{ 109 unsigned long Length; 110 unsigned short AvailableRequestFixedIEs; 111 NDIS_802_11_AI_REQFI RequestFixedIEs; 112 unsigned long RequestIELength; 113 unsigned long OffsetRequestIEs; 114 unsigned short AvailableResponseFixedIEs; 115 NDIS_802_11_AI_RESFI ResponseFixedIEs; 116 unsigned long ResponseIELength; 117 unsigned long OffsetResponseIEs; 118} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION; 119 120 121 122typedef struct tagSAssocInfo { 123 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; 124 BYTE abyIEs[WLAN_BEACON_FR_MAXLEN+WLAN_BEACON_FR_MAXLEN]; 125 // store ReqIEs set by OID_802_11_ASSOCIATION_INFORMATION 126 unsigned long RequestIELength; 127 BYTE abyReqIEs[WLAN_BEACON_FR_MAXLEN]; 128} SAssocInfo, *PSAssocInfo; 129//--- 130 131 132 133typedef enum tagWMAC_AUTHENTICATION_MODE { 134 135 WMAC_AUTH_OPEN, 136 WMAC_AUTH_SHAREKEY, 137 WMAC_AUTH_AUTO, 138 WMAC_AUTH_WPA, 139 WMAC_AUTH_WPAPSK, 140 WMAC_AUTH_WPANONE, 141 WMAC_AUTH_WPA2, 142 WMAC_AUTH_WPA2PSK, 143 WMAC_AUTH_MAX // Not a real mode, defined as upper bound 144} WMAC_AUTHENTICATION_MODE, *PWMAC_AUTHENTICATION_MODE; 145 146 147 148// Pre-configured Mode (from XP) 149 150typedef enum tagWMAC_CONFIG_MODE { 151 WMAC_CONFIG_ESS_STA, 152 WMAC_CONFIG_IBSS_STA, 153 WMAC_CONFIG_AUTO, 154 WMAC_CONFIG_AP 155 156} WMAC_CONFIG_MODE, *PWMAC_CONFIG_MODE; 157 158 159typedef enum tagWMAC_SCAN_TYPE { 160 161 WMAC_SCAN_ACTIVE, 162 WMAC_SCAN_PASSIVE, 163 WMAC_SCAN_HYBRID 164 165} WMAC_SCAN_TYPE, *PWMAC_SCAN_TYPE; 166 167 168typedef enum tagWMAC_SCAN_STATE { 169 170 WMAC_NO_SCANNING, 171 WMAC_IS_SCANNING, 172 WMAC_IS_PROBEPENDING 173 174} WMAC_SCAN_STATE, *PWMAC_SCAN_STATE; 175 176 177 178// Notes: 179// Basic Service Set state explained as following: 180// WMAC_STATE_IDLE : no BSS is selected (Adhoc or Infra) 181// WMAC_STATE_STARTED : no BSS is selected, start own IBSS (Adhoc only) 182// WMAC_STATE_JOINTED : BSS is selected and synchronized (Adhoc or Infra) 183// WMAC_STATE_AUTHPENDING : Authentication pending (Infra) 184// WMAC_STATE_AUTH : Authenticated (Infra) 185// WMAC_STATE_ASSOCPENDING : Association pending (Infra) 186// WMAC_STATE_ASSOC : Associated (Infra) 187 188typedef enum tagWMAC_BSS_STATE { 189 190 WMAC_STATE_IDLE, 191 WMAC_STATE_STARTED, 192 WMAC_STATE_JOINTED, 193 WMAC_STATE_AUTHPENDING, 194 WMAC_STATE_AUTH, 195 WMAC_STATE_ASSOCPENDING, 196 WMAC_STATE_ASSOC 197 198} WMAC_BSS_STATE, *PWMAC_BSS_STATE; 199 200// WMAC selected running mode 201typedef enum tagWMAC_CURRENT_MODE { 202 203 WMAC_MODE_STANDBY, 204 WMAC_MODE_ESS_STA, 205 WMAC_MODE_IBSS_STA, 206 WMAC_MODE_ESS_AP 207 208} WMAC_CURRENT_MODE, *PWMAC_CURRENT_MODE; 209 210 211typedef enum tagWMAC_POWER_MODE { 212 213 WMAC_POWER_CAM, 214 WMAC_POWER_FAST, 215 WMAC_POWER_MAX 216 217} WMAC_POWER_MODE, *PWMAC_POWER_MODE; 218 219 220 221// Tx Managment Packet descriptor 222typedef struct tagSTxMgmtPacket { 223 224 PUWLAN_80211HDR p80211Header; 225 unsigned int cbMPDULen; 226 unsigned int cbPayloadLen; 227 228} STxMgmtPacket, *PSTxMgmtPacket; 229 230 231// Rx Managment Packet descriptor 232typedef struct tagSRxMgmtPacket { 233 234 PUWLAN_80211HDR p80211Header; 235 QWORD qwLocalTSF; 236 unsigned int cbMPDULen; 237 unsigned int cbPayloadLen; 238 unsigned int uRSSI; 239 BYTE bySQ; 240 BYTE byRxRate; 241 BYTE byRxChannel; 242 243} SRxMgmtPacket, *PSRxMgmtPacket; 244 245 246 247typedef struct tagSMgmtObject 248{ 249 void *pAdapter; 250 // MAC address 251 BYTE abyMACAddr[WLAN_ADDR_LEN]; 252 253 // Configuration Mode 254 WMAC_CONFIG_MODE eConfigMode; // MAC pre-configed mode 255 256 CARD_PHY_TYPE eCurrentPHYMode; 257 258 259 // Operation state variables 260 WMAC_CURRENT_MODE eCurrMode; // MAC current connection mode 261 WMAC_BSS_STATE eCurrState; // MAC current BSS state 262 WMAC_BSS_STATE eLastState; // MAC last BSS state 263 264 PKnownBSS pCurrBSS; 265 BYTE byCSSGK; 266 BYTE byCSSPK; 267 268// BYTE abyNewSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; 269// BYTE abyNewExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN]; 270 BOOL bCurrBSSIDFilterOn; 271 272 // Current state vars 273 unsigned int uCurrChannel; 274 BYTE abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 275 BYTE abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 276 BYTE abyCurrSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 277 BYTE abyCurrBSSID[WLAN_BSSID_LEN]; 278 WORD wCurrCapInfo; 279 WORD wCurrAID; 280 unsigned int uRSSITrigger; 281 WORD wCurrATIMWindow; 282 WORD wCurrBeaconPeriod; 283 BOOL bIsDS; 284 BYTE byERPContext; 285 286 CMD_STATE eCommandState; 287 unsigned int uScanChannel; 288 289 // Desire joinning BSS vars 290 BYTE abyDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 291 BYTE abyDesireBSSID[WLAN_BSSID_LEN]; 292 293//restore BSS info for Ad-Hoc mode 294 BYTE abyAdHocSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 295 296 // Adhoc or AP configuration vars 297 WORD wIBSSBeaconPeriod; 298 WORD wIBSSATIMWindow; 299 unsigned int uIBSSChannel; 300 BYTE abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; 301 BYTE byAPBBType; 302 BYTE abyWPAIE[MAX_WPA_IE_LEN]; 303 WORD wWPAIELen; 304 305 unsigned int uAssocCount; 306 BOOL bMoreData; 307 308 // Scan state vars 309 WMAC_SCAN_STATE eScanState; 310 WMAC_SCAN_TYPE eScanType; 311 unsigned int uScanStartCh; 312 unsigned int uScanEndCh; 313 WORD wScanSteps; 314 unsigned int uScanBSSType; 315 // Desire scannig vars 316 BYTE abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; 317 BYTE abyScanBSSID[WLAN_BSSID_LEN]; 318 319 // Privacy 320 WMAC_AUTHENTICATION_MODE eAuthenMode; 321 BOOL bShareKeyAlgorithm; 322 BYTE abyChallenge[WLAN_CHALLENGE_LEN]; 323 BOOL bPrivacyInvoked; 324 325 // Received beacon state vars 326 BOOL bInTIM; 327 BOOL bMulticastTIM; 328 BYTE byDTIMCount; 329 BYTE byDTIMPeriod; 330 331 // Power saving state vars 332 WMAC_POWER_MODE ePSMode; 333 WORD wListenInterval; 334 WORD wCountToWakeUp; 335 BOOL bInTIMWake; 336 PBYTE pbyPSPacketPool; 337 BYTE byPSPacketPool[sizeof(STxMgmtPacket) + WLAN_NULLDATA_FR_MAXLEN]; 338 BOOL bRxBeaconInTBTTWake; 339 BYTE abyPSTxMap[MAX_NODE_NUM + 1]; 340 341 // management command related 342 unsigned int uCmdBusy; 343 unsigned int uCmdHostAPBusy; 344 345 // management packet pool 346 PBYTE pbyMgmtPacketPool; 347 BYTE byMgmtPacketPool[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; 348 349 350 // One second callback timer 351 struct timer_list sTimerSecondCallback; 352 353 // Temporarily Rx Mgmt Packet Descriptor 354 SRxMgmtPacket sRxPacket; 355 356 // link list of known bss's (scan results) 357 KnownBSS sBSSList[MAX_BSS_NUM]; 358 //link list of same bss's //DavidWang 359 KnownBSS pSameBSS[6] ; 360 BOOL Cisco_cckm ; 361 BYTE Roam_dbm; 362 363 // table list of known node 364 // sNodeDBList[0] is reserved for AP under Infra mode 365 // sNodeDBList[0] is reserved for Multicast under adhoc/AP mode 366 KnownNodeDB sNodeDBTable[MAX_NODE_NUM + 1]; 367 368 369 370 // WPA2 PMKID Cache 371 SPMKIDCache gsPMKIDCache; 372 BOOL bRoaming; 373 374 // rate fall back vars 375 376 377 378 // associate info 379 SAssocInfo sAssocInfo; 380 381 382 // for 802.11h 383 BOOL b11hEnable; 384 BOOL bSwitchChannel; 385 BYTE byNewChannel; 386 PWLAN_IE_MEASURE_REP pCurrMeasureEIDRep; 387 unsigned int uLengthOfRepEIDs; 388 BYTE abyCurrentMSRReq[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; 389 BYTE abyCurrentMSRRep[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; 390 BYTE abyIECountry[WLAN_A3FR_MAXLEN]; 391 BYTE abyIBSSDFSOwner[6]; 392 BYTE byIBSSDFSRecovery; 393 394 struct sk_buff skb; 395 396} SMgmtObject, *PSMgmtObject; 397 398/*--------------------- Export Macros ------------------------------*/ 399 400/*--------------------- Export Functions --------------------------*/ 401 402void vMgrObjectInit(void *hDeviceContext); 403 404void vMgrAssocBeginSta(void *hDeviceContext, 405 PSMgmtObject pMgmt, 406 PCMD_STATUS pStatus); 407 408void vMgrReAssocBeginSta(void *hDeviceContext, 409 PSMgmtObject pMgmt, 410 PCMD_STATUS pStatus); 411 412void vMgrDisassocBeginSta(void *hDeviceContext, 413 PSMgmtObject pMgmt, 414 PBYTE abyDestAddress, 415 WORD wReason, 416 PCMD_STATUS pStatus); 417 418void vMgrAuthenBeginSta(void *hDeviceContext, 419 PSMgmtObject pMgmt, 420 PCMD_STATUS pStatus); 421 422void vMgrCreateOwnIBSS(void *hDeviceContext, 423 PCMD_STATUS pStatus); 424 425void vMgrJoinBSSBegin(void *hDeviceContext, 426 PCMD_STATUS pStatus); 427 428void vMgrRxManagePacket(void *hDeviceContext, 429 PSMgmtObject pMgmt, 430 PSRxMgmtPacket pRxPacket); 431 432/* 433void 434vMgrScanBegin( 435 void *hDeviceContext, 436 PCMD_STATUS pStatus 437 ); 438*/ 439 440void vMgrDeAuthenBeginSta(void *hDeviceContext, 441 PSMgmtObject pMgmt, 442 PBYTE abyDestAddress, 443 WORD wReason, 444 PCMD_STATUS pStatus); 445 446BOOL bMgrPrepareBeaconToSend(void *hDeviceContext, 447 PSMgmtObject pMgmt); 448 449BOOL bAdd_PMKID_Candidate(void *hDeviceContext, 450 PBYTE pbyBSSID, 451 PSRSNCapObject psRSNCapObj); 452 453void vFlush_PMKID_Candidate(void *hDeviceContext); 454 455#endif /* __WMGR_H__ */ 456