wmgr.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  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. #ifndef __WMGR_H__
  34. #define __WMGR_H__
  35. #include "ttype.h"
  36. #include "80211mgr.h"
  37. #include "80211hdr.h"
  38. #include "wcmd.h"
  39. #include "bssdb.h"
  40. #include "wpa2.h"
  41. #include "vntwifi.h"
  42. #include "card.h"
  43. /*--------------------- Export Definitions -------------------------*/
  44. // Scan time
  45. #define PROBE_DELAY 100 // (us)
  46. #define SWITCH_CHANNEL_DELAY 200 // (us)
  47. #define WLAN_SCAN_MINITIME 25 // (ms)
  48. #define WLAN_SCAN_MAXTIME 100 // (ms)
  49. #define TRIVIAL_SYNC_DIFFERENCE 0 // (us)
  50. #define DEFAULT_IBSS_BI 100 // (ms)
  51. #define WCMD_ACTIVE_SCAN_TIME 50 //(ms)
  52. #define WCMD_PASSIVE_SCAN_TIME 100 //(ms)
  53. #define DEFAULT_MSDU_LIFETIME 512 // ms
  54. #define DEFAULT_MSDU_LIFETIME_RES_64us 8000 // 64us
  55. #define DEFAULT_MGN_LIFETIME 8 // ms
  56. #define DEFAULT_MGN_LIFETIME_RES_64us 125 // 64us
  57. #define MAKE_BEACON_RESERVED 10 //(us)
  58. #define TIM_MULTICAST_MASK 0x01
  59. #define TIM_BITMAPOFFSET_MASK 0xFE
  60. #define DEFAULT_DTIM_PERIOD 1
  61. #define AP_LONG_RETRY_LIMIT 4
  62. #define DEFAULT_IBSS_CHANNEL 6 //2.4G
  63. /*--------------------- Export Classes ----------------------------*/
  64. /*--------------------- Export Variables --------------------------*/
  65. /*--------------------- Export Types ------------------------------*/
  66. #define timer_expire(timer, next_tick) mod_timer(&timer, RUN_AT(next_tick))
  67. typedef void (*TimerFunction)(unsigned long);
  68. //+++ NDIS related
  69. typedef unsigned char NDIS_802_11_MAC_ADDRESS[6];
  70. typedef struct _NDIS_802_11_AI_REQFI {
  71. unsigned short Capabilities;
  72. unsigned short ListenInterval;
  73. NDIS_802_11_MAC_ADDRESS CurrentAPAddress;
  74. } NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI;
  75. typedef struct _NDIS_802_11_AI_RESFI {
  76. unsigned short Capabilities;
  77. unsigned short StatusCode;
  78. unsigned short AssociationId;
  79. } NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI;
  80. typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION {
  81. unsigned long Length;
  82. unsigned short AvailableRequestFixedIEs;
  83. NDIS_802_11_AI_REQFI RequestFixedIEs;
  84. unsigned long RequestIELength;
  85. unsigned long OffsetRequestIEs;
  86. unsigned short AvailableResponseFixedIEs;
  87. NDIS_802_11_AI_RESFI ResponseFixedIEs;
  88. unsigned long ResponseIELength;
  89. unsigned long OffsetResponseIEs;
  90. } NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
  91. typedef struct tagSAssocInfo {
  92. NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
  93. unsigned char abyIEs[WLAN_BEACON_FR_MAXLEN+WLAN_BEACON_FR_MAXLEN];
  94. // store ReqIEs set by OID_802_11_ASSOCIATION_INFORMATION
  95. unsigned long RequestIELength;
  96. unsigned char abyReqIEs[WLAN_BEACON_FR_MAXLEN];
  97. } SAssocInfo, *PSAssocInfo;
  98. //---
  99. typedef enum tagWMAC_SCAN_TYPE {
  100. WMAC_SCAN_ACTIVE,
  101. WMAC_SCAN_PASSIVE,
  102. WMAC_SCAN_HYBRID
  103. } WMAC_SCAN_TYPE, *PWMAC_SCAN_TYPE;
  104. typedef enum tagWMAC_SCAN_STATE {
  105. WMAC_NO_SCANNING,
  106. WMAC_IS_SCANNING,
  107. WMAC_IS_PROBEPENDING
  108. } WMAC_SCAN_STATE, *PWMAC_SCAN_STATE;
  109. // Notes:
  110. // Basic Service Set state explained as following:
  111. // WMAC_STATE_IDLE : no BSS is selected (Adhoc or Infra)
  112. // WMAC_STATE_STARTED : no BSS is selected, start own IBSS (Adhoc only)
  113. // WMAC_STATE_JOINTED : BSS is selected and synchronized (Adhoc or Infra)
  114. // WMAC_STATE_AUTHPENDING : Authentication pending (Infra)
  115. // WMAC_STATE_AUTH : Authenticated (Infra)
  116. // WMAC_STATE_ASSOCPENDING : Association pending (Infra)
  117. // WMAC_STATE_ASSOC : Associated (Infra)
  118. typedef enum tagWMAC_BSS_STATE {
  119. WMAC_STATE_IDLE,
  120. WMAC_STATE_STARTED,
  121. WMAC_STATE_JOINTED,
  122. WMAC_STATE_AUTHPENDING,
  123. WMAC_STATE_AUTH,
  124. WMAC_STATE_ASSOCPENDING,
  125. WMAC_STATE_ASSOC
  126. } WMAC_BSS_STATE, *PWMAC_BSS_STATE;
  127. // WMAC selected running mode
  128. typedef enum tagWMAC_CURRENT_MODE {
  129. WMAC_MODE_STANDBY,
  130. WMAC_MODE_ESS_STA,
  131. WMAC_MODE_IBSS_STA,
  132. WMAC_MODE_ESS_AP
  133. } WMAC_CURRENT_MODE, *PWMAC_CURRENT_MODE;
  134. /*
  135. typedef enum tagWMAC_POWER_MODE {
  136. WMAC_POWER_CAM,
  137. WMAC_POWER_FAST,
  138. WMAC_POWER_MAX
  139. } WMAC_POWER_MODE, *PWMAC_POWER_MODE;
  140. */
  141. // Tx Management Packet descriptor
  142. typedef struct tagSTxMgmtPacket {
  143. PUWLAN_80211HDR p80211Header;
  144. unsigned int cbMPDULen;
  145. unsigned int cbPayloadLen;
  146. } STxMgmtPacket, *PSTxMgmtPacket;
  147. // Rx Management Packet descriptor
  148. typedef struct tagSRxMgmtPacket {
  149. PUWLAN_80211HDR p80211Header;
  150. u64 qwLocalTSF;
  151. unsigned int cbMPDULen;
  152. unsigned int cbPayloadLen;
  153. unsigned int uRSSI;
  154. unsigned char bySQ;
  155. unsigned char byRxRate;
  156. unsigned char byRxChannel;
  157. } SRxMgmtPacket, *PSRxMgmtPacket;
  158. typedef struct tagSMgmtObject {
  159. void *pAdapter;
  160. // MAC address
  161. unsigned char abyMACAddr[WLAN_ADDR_LEN];
  162. // Configuration Mode
  163. WMAC_CONFIG_MODE eConfigMode; // MAC pre-configed mode
  164. CARD_PHY_TYPE eCurrentPHYMode;
  165. CARD_PHY_TYPE eConfigPHYMode;
  166. // Operation state variables
  167. WMAC_CURRENT_MODE eCurrMode; // MAC current connection mode
  168. WMAC_BSS_STATE eCurrState; // MAC current BSS state
  169. PKnownBSS pCurrBSS;
  170. unsigned char byCSSGK;
  171. unsigned char byCSSPK;
  172. // Current state vars
  173. unsigned int uCurrChannel;
  174. unsigned char abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
  175. unsigned char abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
  176. unsigned char abyCurrSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
  177. unsigned char abyCurrBSSID[WLAN_BSSID_LEN];
  178. unsigned short wCurrCapInfo;
  179. unsigned short wCurrAID;
  180. unsigned short wCurrATIMWindow;
  181. unsigned short wCurrBeaconPeriod;
  182. bool bIsDS;
  183. unsigned char byERPContext;
  184. CMD_STATE eCommandState;
  185. unsigned int uScanChannel;
  186. // Desire joining BSS vars
  187. unsigned char abyDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
  188. unsigned char abyDesireBSSID[WLAN_BSSID_LEN];
  189. // Adhoc or AP configuration vars
  190. unsigned short wIBSSBeaconPeriod;
  191. unsigned short wIBSSATIMWindow;
  192. unsigned int uIBSSChannel;
  193. unsigned char abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
  194. unsigned char byAPBBType;
  195. unsigned char abyWPAIE[MAX_WPA_IE_LEN];
  196. unsigned short wWPAIELen;
  197. unsigned int uAssocCount;
  198. bool bMoreData;
  199. // Scan state vars
  200. WMAC_SCAN_STATE eScanState;
  201. WMAC_SCAN_TYPE eScanType;
  202. unsigned int uScanStartCh;
  203. unsigned int uScanEndCh;
  204. unsigned short wScanSteps;
  205. unsigned int uScanBSSType;
  206. // Desire scanning vars
  207. unsigned char abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
  208. unsigned char abyScanBSSID[WLAN_BSSID_LEN];
  209. // Privacy
  210. WMAC_AUTHENTICATION_MODE eAuthenMode;
  211. WMAC_ENCRYPTION_MODE eEncryptionMode;
  212. bool bShareKeyAlgorithm;
  213. unsigned char abyChallenge[WLAN_CHALLENGE_LEN];
  214. bool bPrivacyInvoked;
  215. // Received beacon state vars
  216. bool bInTIM;
  217. bool bMulticastTIM;
  218. unsigned char byDTIMCount;
  219. unsigned char byDTIMPeriod;
  220. // Power saving state vars
  221. WMAC_POWER_MODE ePSMode;
  222. unsigned short wListenInterval;
  223. unsigned short wCountToWakeUp;
  224. bool bInTIMWake;
  225. unsigned char *pbyPSPacketPool;
  226. unsigned char byPSPacketPool[sizeof(STxMgmtPacket) + WLAN_NULLDATA_FR_MAXLEN];
  227. bool bRxBeaconInTBTTWake;
  228. unsigned char abyPSTxMap[MAX_NODE_NUM + 1];
  229. // management command related
  230. unsigned int uCmdBusy;
  231. unsigned int uCmdHostAPBusy;
  232. // management packet pool
  233. unsigned char *pbyMgmtPacketPool;
  234. unsigned char byMgmtPacketPool[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
  235. // One second callback timer
  236. struct timer_list sTimerSecondCallback;
  237. // Temporarily Rx Mgmt Packet Descriptor
  238. SRxMgmtPacket sRxPacket;
  239. // link list of known bss's (scan results)
  240. KnownBSS sBSSList[MAX_BSS_NUM];
  241. // table list of known node
  242. // sNodeDBList[0] is reserved for AP under Infra mode
  243. // sNodeDBList[0] is reserved for Multicast under adhoc/AP mode
  244. KnownNodeDB sNodeDBTable[MAX_NODE_NUM + 1];
  245. // WPA2 PMKID Cache
  246. SPMKIDCache gsPMKIDCache;
  247. bool bRoaming;
  248. // rate fall back vars
  249. // associate info
  250. SAssocInfo sAssocInfo;
  251. // for 802.11h
  252. bool b11hEnable;
  253. bool bSwitchChannel;
  254. unsigned char byNewChannel;
  255. PWLAN_IE_MEASURE_REP pCurrMeasureEIDRep;
  256. unsigned int uLengthOfRepEIDs;
  257. unsigned char abyCurrentMSRReq[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
  258. unsigned char abyCurrentMSRRep[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
  259. unsigned char abyIECountry[WLAN_A3FR_MAXLEN];
  260. unsigned char abyIBSSDFSOwner[6];
  261. unsigned char byIBSSDFSRecovery;
  262. struct sk_buff skb;
  263. } SMgmtObject, *PSMgmtObject;
  264. /*--------------------- Export Macros ------------------------------*/
  265. /*--------------------- Export Functions --------------------------*/
  266. void
  267. vMgrObjectInit(
  268. void *hDeviceContext
  269. );
  270. void
  271. vMgrTimerInit(
  272. void *hDeviceContext
  273. );
  274. void
  275. vMgrObjectReset(
  276. void *hDeviceContext
  277. );
  278. void
  279. vMgrAssocBeginSta(
  280. void *hDeviceContext,
  281. PSMgmtObject pMgmt,
  282. PCMD_STATUS pStatus
  283. );
  284. void
  285. vMgrReAssocBeginSta(
  286. void *hDeviceContext,
  287. PSMgmtObject pMgmt,
  288. PCMD_STATUS pStatus
  289. );
  290. void
  291. vMgrDisassocBeginSta(
  292. void *hDeviceContext,
  293. PSMgmtObject pMgmt,
  294. unsigned char *abyDestAddress,
  295. unsigned short wReason,
  296. PCMD_STATUS pStatus
  297. );
  298. void
  299. vMgrAuthenBeginSta(
  300. void *hDeviceContext,
  301. PSMgmtObject pMgmt,
  302. PCMD_STATUS pStatus
  303. );
  304. void
  305. vMgrCreateOwnIBSS(
  306. void *hDeviceContext,
  307. PCMD_STATUS pStatus
  308. );
  309. void
  310. vMgrJoinBSSBegin(
  311. void *hDeviceContext,
  312. PCMD_STATUS pStatus
  313. );
  314. void
  315. vMgrRxManagePacket(
  316. void *hDeviceContext,
  317. PSMgmtObject pMgmt,
  318. PSRxMgmtPacket pRxPacket
  319. );
  320. /*
  321. void
  322. vMgrScanBegin(
  323. void *hDeviceContext,
  324. PCMD_STATUS pStatus
  325. );
  326. */
  327. void
  328. vMgrDeAuthenBeginSta(
  329. void *hDeviceContext,
  330. PSMgmtObject pMgmt,
  331. unsigned char *abyDestAddress,
  332. unsigned short wReason,
  333. PCMD_STATUS pStatus
  334. );
  335. bool
  336. bMgrPrepareBeaconToSend(
  337. void *hDeviceContext,
  338. PSMgmtObject pMgmt
  339. );
  340. bool
  341. bAdd_PMKID_Candidate(
  342. void *hDeviceContext,
  343. unsigned char *pbyBSSID,
  344. PSRSNCapObject psRSNCapObj
  345. );
  346. void
  347. vFlush_PMKID_Candidate(
  348. void *hDeviceContext
  349. );
  350. #endif // __WMGR_H__