PageRenderTime 50ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/drivers/net/wireless/tiwlan1251/common/src/inc/802_11Defs.h

https://bitbucket.org/cyanogenmod/cm-kernel
C Header | 1297 lines | 850 code | 281 blank | 166 comment | 13 complexity | ad8c2584fd09f99a7f50fc7d4ec1779a MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
  1. /****************************************************************************
  2. **+-----------------------------------------------------------------------+**
  3. **| |**
  4. **| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |**
  5. **| All rights reserved. |**
  6. **| |**
  7. **| Redistribution and use in source and binary forms, with or without |**
  8. **| modification, are permitted provided that the following conditions |**
  9. **| are met: |**
  10. **| |**
  11. **| * Redistributions of source code must retain the above copyright |**
  12. **| notice, this list of conditions and the following disclaimer. |**
  13. **| * Redistributions in binary form must reproduce the above copyright |**
  14. **| notice, this list of conditions and the following disclaimer in |**
  15. **| the documentation and/or other materials provided with the |**
  16. **| distribution. |**
  17. **| * Neither the name Texas Instruments nor the names of its |**
  18. **| contributors may be used to endorse or promote products derived |**
  19. **| from this software without specific prior written permission. |**
  20. **| |**
  21. **| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |**
  22. **| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |**
  23. **| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
  24. **| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |**
  25. **| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
  26. **| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |**
  27. **| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
  28. **| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
  29. **| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |**
  30. **| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
  31. **| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |**
  32. **| |**
  33. **+-----------------------------------------------------------------------+**
  34. ****************************************************************************/
  35. /****************************************************************************
  36. *
  37. * MODULE: 802_11Defs.h
  38. * PURPOSE: Contains 802.11 defines/structures
  39. *
  40. ****************************************************************************/
  41. #ifndef _802_11_INFO_DEFS_H
  42. #define _802_11_INFO_DEFS_H
  43. #include "osTIType.h"
  44. #include "commonTypes.h"
  45. #include "paramIn.h"
  46. /* FrameControl field of the 802.11 header */
  47. /**/
  48. /* bit 15 14 13 12 11 10 9 8 7-4 3-2 1-0*/
  49. /* +-------+-----+------+-----+-------+------+------+----+---------+------+----------+*/
  50. /* | Order | WEP | More | Pwr | Retry | More | From | To | Subtype | Type | Protocol |*/
  51. /* | | | Data | Mgmt| | Frag | DS | DS | | | Version |*/
  52. /* +-------+-----+------+-----+-------+------+------+----+---------+------+----------+*/
  53. /* 1 1 1 1 1 1 1 1 4 2 2*/
  54. #define DOT11_FC_PROT_VERSION_MASK ( 3 << 0 )
  55. #define DOT11_FC_PROT_VERSION ( 0 << 0 )
  56. #define DOT11_FC_TYPE_MASK ( 3 << 2 )
  57. typedef enum
  58. {
  59. DOT11_FC_TYPE_MGMT = ( 0 << 2 ),
  60. DOT11_FC_TYPE_CTRL = ( 1 << 2 ),
  61. DOT11_FC_TYPE_DATA = ( 2 << 2 )
  62. } dot11_Fc_Type_e;
  63. #define DOT11_FC_SUB_MASK ( 0x0f << 4 )
  64. typedef enum
  65. {
  66. /* Management subtypes */
  67. DOT11_FC_SUB_ASSOC_REQ = ( 0 << 4 ),
  68. DOT11_FC_SUB_ASSOC_RESP = ( 1 << 4 ),
  69. DOT11_FC_SUB_REASSOC_REQ = ( 2 << 4 ),
  70. DOT11_FC_SUB_REASSOC_RESP = ( 3 << 4 ),
  71. DOT11_FC_SUB_PROBE_REQ = ( 4 << 4 ),
  72. DOT11_FC_SUB_PROBE_RESP = ( 5 << 4 ),
  73. DOT11_FC_SUB_BEACON = ( 8 << 4 ),
  74. DOT11_FC_SUB_ATIM = ( 9 << 4 ),
  75. DOT11_FC_SUB_DISASSOC = ( 10 << 4 ),
  76. DOT11_FC_SUB_AUTH = ( 11 << 4 ),
  77. DOT11_FC_SUB_DEAUTH = ( 12 << 4 ),
  78. DOT11_FC_SUB_ACTION = ( 13 << 4 ),
  79. /* Control subtypes */
  80. DOT11_FC_SUB_PS_POLL = ( 10 << 4 ),
  81. DOT11_FC_SUB_RTS = ( 11 << 4 ),
  82. DOT11_FC_SUB_CTS = ( 12 << 4 ),
  83. DOT11_FC_SUB_ACK = ( 13 << 4 ),
  84. DOT11_FC_SUB_CF_END = ( 14 << 4 ),
  85. DOT11_FC_SUB_CF_END_CF_ACK = ( 15 << 4 ),
  86. /* Data subtypes */
  87. DOT11_FC_SUB_DATA = ( 0 << 4 ),
  88. DOT11_FC_SUB_DATA_CF_ACK = ( 1 << 4 ),
  89. DOT11_FC_SUB_DATA_CF_POLL = ( 2 << 4 ),
  90. DOT11_FC_SUB_DATA_CF_ACK_CF_POLL = ( 3 << 4 ),
  91. DOT11_FC_SUB_NULL_FUNCTION = ( 4 << 4 ),
  92. DOT11_FC_SUB_CF_ACK = ( 5 << 4 ),
  93. DOT11_FC_SUB_CF_POLL = ( 6 << 4 ),
  94. DOT11_FC_SUB_CF_ACK_CF_POLL = ( 7 << 4 ),
  95. DOT11_FC_SUB_DATA_QOS = ( 8 << 4 ),
  96. DOT11_FC_SUB_DATA_NULL_QOS = ( 12 << 4 )
  97. } dot11_Fc_Sub_Type_e;
  98. #define DOT11_FC_TYPESUBTYPE_MASK ( DOT11_FC_TYPE_MASK | DOT11_FC_SUB_MASK )
  99. typedef enum
  100. {
  101. DOT11_FC_ASSOC_REQ = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ASSOC_REQ ),
  102. DOT11_FC_ASSOC_RESP = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ASSOC_RESP ),
  103. DOT11_FC_REASSOC_REQ = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_REASSOC_REQ ),
  104. DOT11_FC_REASSOC_RESP = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_REASSOC_RESP ),
  105. DOT11_FC_PROBE_REQ = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_PROBE_REQ ),
  106. DOT11_FC_PROBE_RESP = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_PROBE_RESP ),
  107. DOT11_FC_BEACON = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_BEACON ),
  108. DOT11_FC_ATIM = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ATIM ),
  109. DOT11_FC_DISASSOC = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_DISASSOC ),
  110. DOT11_FC_AUTH = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_AUTH ),
  111. DOT11_FC_DEAUTH = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_DEAUTH ),
  112. DOT11_FC_ACTION = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ACTION ),
  113. DOT11_FC_PS_POLL = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_PS_POLL ),
  114. DOT11_FC_RTS = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_RTS ),
  115. DOT11_FC_CTS = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_CTS ),
  116. DOT11_FC_ACK = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_ACK ),
  117. DOT11_FC_CF_END = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_CF_END ),
  118. DOT11_FC_CF_END_CF_ACK = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_CF_END_CF_ACK ),
  119. DOT11_FC_DATA = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA ),
  120. DOT11_FC_DATA_CF_ACK = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_CF_ACK ),
  121. DOT11_FC_DATA_CF_POLL = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_CF_POLL ),
  122. DOT11_FC_DATA_CF_ACK_CF_POLL = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_CF_ACK_CF_POLL ),
  123. DOT11_FC_DATA_NULL_FUNCTION = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_NULL_FUNCTION ),
  124. DOT11_FC_CF_ACK = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_CF_ACK ),
  125. DOT11_FC_CF_POLL = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_CF_POLL ),
  126. DOT11_FC_CF_ACK_CF_POLL = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_CF_ACK_CF_POLL ),
  127. DOT11_FC_DATA_QOS = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_QOS ),
  128. DOT11_FC_DATA_NULL_QOS = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_NULL_QOS )
  129. } dot11_Fc_Type_Sub_Type_e;
  130. typedef enum
  131. {
  132. DOT11_FC_TO_DS = ( 1 << 8 ),
  133. DOT11_FC_FROM_DS = ( 1 << 9 ),
  134. DOT11_FC_MORE_FRAG = ( 1 << 10 ),
  135. DOT11_FC_RETRY = ( 1 << 11 ),
  136. DOT11_FC_PWR_MGMT = ( 1 << 12 ),
  137. DOT11_FC_MORE_DATA = ( 1 << 13 ),
  138. DOT11_FC_WEP = ( 1 << 14 ),
  139. DOT11_FC_ORDER = ( 1 << 15 )
  140. } dot11_Fc_Other_e;
  141. typedef enum
  142. {
  143. DOT11_CAPABILITY_ESS = ( 1 ),
  144. DOT11_CAPABILITY_IESS = ( 1 << 1 ),
  145. DOT11_CAPABILITY_CF_POLLABE = ( 1 << 2 ),
  146. DOT11_CAPABILITY_CF_POLL_REQ = ( 1 << 3 ),
  147. DOT11_CAPABILITY_PRIVACY = ( 1 << 4 ),
  148. DOT11_CAPABILITY_PREAMBLE = ( 1 << 5 ),
  149. DOT11_CAPABILITY_PBCC = ( 1 << 6 ),
  150. DOT11_CAPABILITY_AGILE = ( 1 << 7 ),
  151. } dot11_Capability_e;
  152. #define DOT11_FC_TO_DS_SHIFT 8
  153. #define DOT11_FC_FROM_DS_SHIFT 9
  154. #define DOT11_FC_MORE_FRAG_SHIFT 10
  155. #define DOT11_FC_RETRY_SHIFT 11
  156. #define DOT11_FC_PWR_MGMT_SHIFT 12
  157. #define DOT11_FC_MORE_DATA_SHIFT 13
  158. #define DOT11_FC_WEP_SHIFT 14
  159. #define DOT11_FC_ORDER_SHIFT 15
  160. #define IS_WEP_ON(fc) ((TRUE << DOT11_FC_WEP_SHIFT) & (fc))
  161. #define IS_DATA(fc) (((DOT11_FC_TYPE_MASK) & (fc)) == DOT11_FC_TYPE_DATA)
  162. #define IS_LEGACY_DATA(fc) (((DOT11_FC_TYPESUBTYPE_MASK) & (fc)) == DOT11_FC_DATA)
  163. #define IS_AUTH(fc) (((DOT11_FC_AUTH) & (fc)) == DOT11_FC_AUTH)
  164. #define IS_QOS_FRAME(fc) ( (((fc) & (DOT11_FC_TYPESUBTYPE_MASK)) == DOT11_FC_DATA_QOS) || \
  165. (((fc) & (DOT11_FC_TYPESUBTYPE_MASK)) == DOT11_FC_DATA_NULL_QOS) )
  166. #define TUs_TO_MSECs(x) (((x) << 10) / 1000)
  167. #define TIME_STAMP_LEN 8
  168. /* SequenceControl field of the 802.11 header */
  169. /**/
  170. /* bit 15 - 4 3 - 0*/
  171. /* +-------------------+-----------+*/
  172. /* | Sequence Number | Fragment |*/
  173. /* | | Number |*/
  174. /* +-------------------+-----------+*/
  175. /* 12 4*/
  176. typedef enum
  177. {
  178. DOT11_SC_FRAG_NUM_MASK = ( 0xf << 0 ),
  179. DOT11_SC_SEQ_NUM_MASK = ( 0xfff << 4 )
  180. } dot11_Sc_t;
  181. #define DOT11_QOS_CONTROL_ACK 0x0000
  182. #define DOT11_QOS_CONTROL_DONT_ACK 0x0020
  183. #pragma pack(1)
  184. PACKED_STRUCT( dot11_header_t,
  185. UINT16 fc;
  186. UINT16 duration;
  187. macAddress_t address1;
  188. macAddress_t address2;
  189. macAddress_t address3;
  190. UINT16 seqCtrl;
  191. UINT16 qosControl;
  192. /* macAddress_t address4;*/
  193. );
  194. #pragma pack()
  195. #pragma pack(1)
  196. PACKED_STRUCT( legacy_dot11_header_t,
  197. UINT16 fc;
  198. UINT16 duration;
  199. macAddress_t address1;
  200. macAddress_t address2;
  201. macAddress_t address3;
  202. UINT16 seqCtrl;
  203. );
  204. #pragma pack()
  205. #pragma pack(1)
  206. PACKED_STRUCT( dot11_mgmtHeader_t,
  207. UINT16 fc;
  208. UINT16 duration;
  209. macAddress_t DA;
  210. macAddress_t SA;
  211. macAddress_t BSSID;
  212. UINT16 seqCtrl;
  213. );
  214. #pragma pack()
  215. #pragma pack(1)
  216. PACKED_STRUCT( Wlan_LlcHeader_T,
  217. UINT8 DSAP;
  218. UINT8 SSAP;
  219. UINT8 Control;
  220. UINT8 OUI[3];
  221. UINT16 Type;
  222. );
  223. #pragma pack()
  224. #pragma pack(1)
  225. PACKED_STRUCT( dot11_PsPollFrameHeader_t,
  226. UINT16 fc;
  227. UINT16 AID;
  228. macAddress_t BSSID;
  229. macAddress_t TA;
  230. );
  231. #pragma pack()
  232. #define FCS_SIZE 4
  233. #define WLAN_HDR_LEN 24
  234. #define WLAN_QOS_HDR_LEN 26
  235. #define WLAN_SNAP_HDR_LEN 8
  236. #define WLAN_WITH_SNAP_HEADER_MAX_SIZE (WLAN_HDR_LEN + WLAN_SNAP_HDR_LEN)
  237. #define WLAN_WITH_SNAP_QOS_HEADER_MAX_SIZE (WLAN_QOS_HDR_LEN + WLAN_SNAP_HDR_LEN)
  238. #define GET_MAX_HEADER_SIZE(macHeaderPointer,headerSize) if( ( ((*(UINT16*)(macHeaderPointer)) & DOT11_FC_TYPESUBTYPE_MASK) == DOT11_FC_DATA_QOS ) || ( ((*(UINT16*)(macHeaderPointer)) & DOT11_FC_TYPESUBTYPE_MASK) == DOT11_FC_DATA_NULL_QOS ) ) *headerSize = WLAN_QOS_HDR_LEN; else *headerSize = WLAN_HDR_LEN;
  239. /* data body max length */
  240. #define MAX_DATA_BODY_LENGTH 2312
  241. /****************************************************************************************
  242. The next table is defined in 802.11 spec section 7.2.2 for the address field contents :
  243. To DS From DS Address 1 Address 2 Address 3 Address 4
  244. -------------------------------------------------------------------
  245. 0 0 DA SA BSSID N/A
  246. 0 1 DA BSSID SA N/A
  247. 1 0 BSSID SA DA N/A
  248. 1 1 RA TA DA SA
  249. NOTE: We only support packets coming from within the DS (i.e. From DS = 0)
  250. *****************************************************************************************/
  251. /* return the destination address used in *dot11_header_t */
  252. #define GET_DA_FROM_DOT11_HEADER_T(pDot11Hdr) ((pDot11Hdr->fc & DOT11_FC_TO_DS) ? (&pDot11Hdr->address3) : (&pDot11Hdr->address1))
  253. /*
  254. * MANAGEMENT
  255. * -----------------
  256. */
  257. /* mgmt body max length */
  258. #define MAX_MGMT_BODY_LENGTH 2312
  259. /* maximal length of beacon body - note that actual beacons may actually be longer
  260. than this size, at least according to the spec, but so far no larger beacon was seen */
  261. #define MAX_BEACON_BODY_LENGTH 300
  262. /* general mgmt frame structure */
  263. PACKED_STRUCT( dot11_mgmtFrame_t,
  264. dot11_mgmtHeader_t hdr;
  265. char body[MAX_MGMT_BODY_LENGTH];
  266. );
  267. /* Capabilities Information Field - IN THE AIR */
  268. /**/
  269. /* bit 15 14 13 12 11 10 9 8 7 - 0*/
  270. /* +----------+------+----------+---------+----------+---------+------+-----+---------------+*/
  271. /* | Channel | | Short | Privacy | CF Poll | CF | | | RESERVED | */
  272. /* | Agility | PBCC | Preamble | | Request | Pollable| IBSS | ESS | |*/
  273. /* +----------+------+----------+---------+----------+---------+------+-----+---------------+ */
  274. /* 1 1 1 1 1 1 1 1*/
  275. /* Capabilities Information Field - IN THE MGMT SOFTWARE AFTER THE SWAP */
  276. /**/
  277. /* bit 15 - 8 7 6 5 4 3 2 1 0*/
  278. /* +------------+----------+------+----------+---------+----------+---------+------+-----+*/
  279. /* | | Channel | | Short | Privacy | CF Poll | CF | | |*/
  280. /* | Reserved | Agility | PBCC | Preamble | | Request | Pollable| IBSS | ESS |*/
  281. /* +------------+----------+------+----------+---------+----------+---------+------+-----+*/
  282. /* 8 1 1 1 1 1 1 1 1*/
  283. typedef enum
  284. {
  285. DOT11_CAPS_ESS = ( 1 << 0 ),
  286. DOT11_CAPS_IBSS = ( 1 << 1 ),
  287. DOT11_CAPS_CF_POLLABLE = ( 1 << 2 ),
  288. DOT11_CAPS_CF_POLL_REQUEST = ( 1 << 3 ),
  289. DOT11_CAPS_PRIVACY = ( 1 << 4 ),
  290. DOT11_CAPS_SHORT_PREAMBLE = ( 1 << 5 ),
  291. DOT11_CAPS_PBCC = ( 1 << 6 ),
  292. DOT11_CAPS_CHANNEL_AGILITY = ( 1 << 7 ),
  293. DOT11_SPECTRUM_MANAGEMENT = ( 1 << 8 ),
  294. DOT11_CAPS_QOS_SUPPORTED = ( 1 << 9 ),
  295. DOT11_CAPS_SHORT_SLOT_TIME = (1 << 10),
  296. DOT11_CAPS_APSD_SUPPORT = ( 1 << 11),
  297. } dot11_capabilities_e;
  298. typedef enum
  299. {
  300. /* ESS */
  301. CAP_ESS_MASK = 1,
  302. CAP_ESS_SHIFT = 0,
  303. /* IBSS */
  304. CAP_IBSS_MASK = 1,
  305. CAP_IBSS_SHIFT = 1,
  306. /* CF Pollable */
  307. CAP_CF_POLL_MASK = 1,
  308. CAP_CF_POLL_SHIFT = 2,
  309. /* CF Poll request */
  310. CAP_CF_REQ_MASK = 1,
  311. CAP_CF_REQ_SHIFT = 3,
  312. /* Privacy */
  313. CAP_PRIVACY_MASK = 1,
  314. CAP_PRIVACY_SHIFT = 4,
  315. /* Short Preamble*/
  316. CAP_PREAMBLE_MASK = 1,
  317. CAP_PREAMBLE_SHIFT = 5,
  318. /* PBCC */
  319. CAP_PBCC_MASK = 1,
  320. CAP_PBCC_SHIFT = 6,
  321. /* Agile */
  322. CAP_AGILE_MASK = 1,
  323. CAP_AGILE_SHIFT = 7,
  324. /* Slot time */
  325. CAP_SLOT_TIME_MASK = 1,
  326. CAP_SLOT_TIME_SHIFT = 10,
  327. /* APSD */
  328. CAP_APSD_MASK = 1,
  329. CAP_APSD_SHIFT = 11,
  330. } wdrv_mgmtCapabilities_e;
  331. /*
  332. * 802.11 Information elements
  333. * ---------------------------
  334. */
  335. PACKED_STRUCT( dot11_eleHdr_t,
  336. UINT8 eleId;
  337. UINT8 eleLen;
  338. );
  339. /* fixed fields lengths, except of currentAP & timestamp*/
  340. #define FIX_FIELD_LEN 2
  341. /* SSID Information Element */
  342. #define DOT11_SSID_ELE_ID 0
  343. PACKED_STRUCT( dot11_SSID_t,
  344. dot11_eleHdr_t hdr;
  345. char serviceSetId[MAX_SSID_LEN];
  346. );
  347. /* Supportted rates Information Element */
  348. #define DOT11_SUPPORTED_RATES_ELE_ID 1
  349. #define DOT11_EXT_SUPPORTED_RATES_ELE_ID 50
  350. PACKED_STRUCT( dot11_RATES_t,
  351. dot11_eleHdr_t hdr;
  352. UINT8 rates[MAX_SUPPORTED_RATES];
  353. );
  354. #define ERP_IE_NON_ERP_PRESENT_MASK 0x1
  355. #define ERP_IE_USE_PROTECTION_MASK 0x2
  356. #define ERP_IE_BARKER_PREAMBLE_MODE_MASK 0x4
  357. #define DOT11_ERP_IE_ID 42
  358. PACKED_STRUCT( dot11_ERP_t,
  359. dot11_eleHdr_t hdr;
  360. UINT8 ctrl;
  361. );
  362. /* RSN Information Element */
  363. #define DOT11_RSN_MAX 255
  364. PACKED_STRUCT( dot11_RSN_t,
  365. dot11_eleHdr_t hdr;
  366. UINT8 rsnIeData[DOT11_RSN_MAX];
  367. );
  368. /* general definitions needed by whalWpa.c and rsn.c */
  369. #define IV_FIELD_SIZE 4
  370. #define ICV_FIELD_SIZE 4
  371. #define MIC_FIELD_SIZE 8
  372. #define EIV_FIELD_SIZE 4
  373. #define WEP_AFTER_HEADER_FIELD_SIZE IV_FIELD_SIZE
  374. #define TKIP_AFTER_HEADER_FIELD_SIZE (IV_FIELD_SIZE + EIV_FIELD_SIZE)
  375. #define AES_AFTER_HEADER_FIELD_SIZE 8
  376. /* DS params Information Element */
  377. #define DOT11_DS_PARAMS_ELE_ID 3
  378. #define DOT11_DS_PARAMS_ELE_LEN 1
  379. PACKED_STRUCT( dot11_DS_PARAMS_t,
  380. dot11_eleHdr_t hdr;
  381. UINT8 currChannel;
  382. );
  383. /* DS params Information Element */
  384. #define DOT11_IBSS_PARAMS_ELE_ID 6
  385. #define DOT11_IBSS_PARAMS_ELE_LEN 2
  386. PACKED_STRUCT( dot11_IBSS_PARAMS_t,
  387. dot11_eleHdr_t hdr;
  388. UINT16 atimWindow;
  389. );
  390. #define DOT11_FH_PARAMS_ELE_ID 2
  391. #define DOT11_FH_PARAMS_ELE_LEN 5
  392. PACKED_STRUCT( dot11_FH_PARAMS_t,
  393. dot11_eleHdr_t hdr;
  394. UINT16 dwellTime;
  395. UINT8 hopSet;
  396. UINT8 hopPattern;
  397. UINT8 hopIndex;
  398. );
  399. /* tim Information Element */
  400. #define DOT11_TIM_ELE_ID 5
  401. #define DOT11_PARTIAL_VIRTUAL_BITMAP_MAX 251
  402. PACKED_STRUCT( dot11_TIM_t,
  403. dot11_eleHdr_t hdr;
  404. UINT8 dtimCount;
  405. UINT8 dtimPeriod;
  406. UINT8 bmapControl;
  407. UINT8 partialVirtualBmap[DOT11_PARTIAL_VIRTUAL_BITMAP_MAX];
  408. );
  409. /* tim Information Element */
  410. #define DOT11_CF_ELE_ID 4
  411. #define DOT11_CF_PARAMS_ELE_LEN 6
  412. PACKED_STRUCT( dot11_CF_PARAMS_t,
  413. dot11_eleHdr_t hdr;
  414. UINT8 cfpCount;
  415. UINT8 cfpPeriod;
  416. UINT16 cfpMaxDuration;
  417. UINT16 cfpDurRemain;
  418. );
  419. /* Challenge text Information Element */
  420. #define DOT11_CHALLENGE_TEXT_ELE_ID 16
  421. #define DOT11_CHALLENGE_TEXT_MAX 253
  422. PACKED_STRUCT( dot11_CHALLENGE_t,
  423. dot11_eleHdr_t hdr;
  424. UINT8 text[ DOT11_CHALLENGE_TEXT_MAX ];
  425. );
  426. /* Country Inforamtion Element */
  427. #define DOT11_COUNTRY_ELE_ID 7
  428. #define DOT11_COUNTRY_ELE_LEN_MAX ( ((NUM_OF_MAX_TRIPLET_CHANNEL+1)*3) + !((NUM_OF_MAX_TRIPLET_CHANNEL&0x1)))
  429. PACKED_STRUCT( dot11_COUNTRY_t,
  430. dot11_eleHdr_t hdr;
  431. countryIE_t countryIE;
  432. );
  433. /* Power Constraint Information Element */
  434. #define DOT11_POWER_CONSTRAINT_ELE_ID (32)
  435. #define DOT11_POWER_CONSTRAINT_ELE_LEN (1)
  436. PACKED_STRUCT( dot11_POWER_CONSTRAINT_t,
  437. dot11_eleHdr_t hdr;
  438. UINT8 powerConstraint;
  439. );
  440. /* Power Capability Information Element */
  441. #define DOT11_CAPABILITY_ELE_ID (33)
  442. #define DOT11_CAPABILITY_ELE_LEN (2)
  443. PACKED_STRUCT( dot11_CAPABILITY_t,
  444. dot11_eleHdr_t hdr;
  445. UINT8 minTxPower;
  446. UINT8 maxTxPower;
  447. );
  448. /* TPC request Information Element */
  449. #define DOT11_TPC_REQUEST_ELE_ID (34)
  450. #define DOT11_TPC_REQUEST_ELE_LEN (0)
  451. PACKED_STRUCT( dot11_TPC_REQUEST_t,
  452. dot11_eleHdr_t hdr;
  453. );
  454. /* TPC report Information Element */
  455. #define DOT11_TPC_REPORT_ELE_ID (35)
  456. #define DOT11_TPC_REPORT_ELE_LEN (2)
  457. PACKED_STRUCT( dot11_TPC_REPORT_t,
  458. dot11_eleHdr_t hdr;
  459. UINT8 transmitPower;
  460. UINT8 linkMargin;
  461. );
  462. #ifdef EXC_MODULE_INCLUDED
  463. /* Cell Transmit Power Information Element */
  464. #define DOT11_CELL_TP_ELE_ID (150)
  465. #define DOT11_CELL_TP_ELE_LEN (6)
  466. PACKED_STRUCT( dot11_CELL_TP_t,
  467. dot11_eleHdr_t hdr;
  468. UINT8 oui[4];
  469. UINT8 power;
  470. UINT8 reerved;
  471. );
  472. #define DOT11_CELL_TP \
  473. dot11_CELL_TP_t *cellTP;
  474. #else
  475. #define DOT11_CELL_TP
  476. #endif
  477. /* Channel Supported Information Element */
  478. #define DOT11_CHANNEL_SUPPORTED_ELE_ID (36)
  479. #define DOT11_CHANNEL_SUPPORTED_ELE_LEN (26)
  480. PACKED_STRUCT( dot11_CHANNEL_SUPPORTED_t,
  481. dot11_eleHdr_t hdr;
  482. UINT8 supportedChannel[DOT11_CHANNEL_SUPPORTED_ELE_LEN];
  483. );
  484. /* Channel Switch Announcement Information Element */
  485. #define DOT11_CHANNEL_SWITCH_ELE_ID (37)
  486. #define DOT11_CHANNEL_SWITCH_ELE_LEN (3)
  487. PACKED_STRUCT( dot11_CHANNEL_SWITCH_t,
  488. dot11_eleHdr_t hdr;
  489. UINT8 channelSwitchMode;
  490. UINT8 channelNumber;
  491. UINT8 channelSwitchCount;
  492. );
  493. #define MAX_NUM_REQ (16)
  494. /* Measurement request Information Element */
  495. #define DOT11_MEASUREMENT_REQUEST_ELE_ID (38)
  496. #define DOT11_MEASUREMENT_REQUEST_LEN (2)
  497. #define DOT11_MEASUREMENT_REQUEST_ELE_LEN (3 + DOT11_MEASUREMENT_REQUEST_LEN*MAX_NUM_REQ)
  498. PACKED_STRUCT( dot11_MEASUREMENT_REQUEST_t,
  499. dot11_eleHdr_t hdr;
  500. UINT8 measurementToken;
  501. UINT8 measurementMode;
  502. UINT8 measurementType;
  503. UINT8 measurementRequests[DOT11_MEASUREMENT_REQUEST_LEN*MAX_NUM_REQ];
  504. );
  505. /* Measurement report Information Element */
  506. #define DOT11_MEASUREMENT_REPORT_ELE_ID (39)
  507. #define DOT11_MAX_MEASUREMENT_REPORT_LEN (4)
  508. #define DOT11_MIN_MEASUREMENT_REPORT_IE_LEN (3)
  509. #define DOT11_MEASUREMENT_REPORT_ELE_IE_LEN (DOT11_MIN_MEASUREMENT_REPORT_IE_LEN + DOT11_MAX_MEASUREMENT_REPORT_LEN*MAX_NUM_REQ)
  510. PACKED_STRUCT( dot11_MEASUREMENT_REPORT_t,
  511. dot11_eleHdr_t hdr;
  512. UINT8 measurementToken;
  513. UINT8 measurementMode;
  514. UINT8 measurementType;
  515. UINT8 measurementReports[DOT11_MAX_MEASUREMENT_REPORT_LEN*MAX_NUM_REQ];
  516. );
  517. /* Quiet Information Element */
  518. #define DOT11_QUIET_ELE_ID (40)
  519. #define DOT11_QUIET_ELE_LEN (6)
  520. PACKED_STRUCT( dot11_QUIET_t,
  521. dot11_eleHdr_t hdr;
  522. UINT8 quietCount;
  523. UINT8 quietPeriod;
  524. UINT16 quietDuration;
  525. UINT16 quietOffset;
  526. );
  527. /* QoS Capability Information Element */
  528. #define DOT11_QOS_CAPABILITY_ELE_ID (46)
  529. #define DOT11_QOS_CAPABILITY_ELE_LEN (1)
  530. #define AC_APSD_FLAGS_MASK (1)
  531. #define Q_ACK_BITG_MASK (1)
  532. #define MAX_SP_LENGTH_MASK (3)
  533. #define MORE_DATA_ACK_MASK (1)
  534. #define AC_VO_APSD_FLAGS_SHIFT (0)
  535. #define AC_VI_APSD_FLAGS_SHIFT (1)
  536. #define AC_BK_APSD_FLAGS_SHIFT (2)
  537. #define AC_BE_APSD_FLAGS_SHIFT (3)
  538. #define Q_ACK_FLAGS_SHIFT (4)
  539. #define MAX_SP_LENGTH_SHIFT (5)
  540. #define MORE_DATA_ACK_SHIFT (7)
  541. #define QOS_CONTROL_UP_SHIFT (0)
  542. #define AP_QOS_INFO_UAPSD_MASK (1)
  543. #define AP_QOS_INFO_UAPSD_SHIFT (7)
  544. PACKED_STRUCT( dot11_QOS_CAPABILITY_IE_t,
  545. dot11_eleHdr_t hdr;
  546. UINT8 QosInfoField;
  547. );
  548. /* WPS Information Element */
  549. #define DOT11_WPS_ELE_ID (221)
  550. #define DOT11_WPS_OUI {0x00, 0x50, 0xF2, 0x04}
  551. #define DOT11_WPS_OUI_LEN 4
  552. /* WME Information Element */
  553. #define DOT11_WME_ELE_ID (221)
  554. #define DOT11_WME_ELE_LEN (7)
  555. PACKED_STRUCT( dot11_WME_IE_t,
  556. dot11_eleHdr_t hdr;
  557. UINT8 OUI[3];
  558. UINT8 OUIType;
  559. UINT8 OUISubType;
  560. UINT8 version;
  561. UINT8 ACInfoField;
  562. );
  563. /* WME Parameter Information Element */
  564. #define DOT11_WME_PARAM_ELE_ID (221)
  565. #define DOT11_WME_PARAM_ELE_LEN (24)
  566. PACKED_STRUCT( dot11_WME_PARAM_t,
  567. dot11_eleHdr_t hdr;
  568. UINT8 OUI[3];
  569. UINT8 OUIType;
  570. UINT8 OUISubType;
  571. UINT8 version;
  572. UINT8 ACInfoField;
  573. UINT8 reserved;
  574. ACParameters_t WME_ACParameteres;
  575. );
  576. #define dot11_WPA_OUI_TYPE (1)
  577. #define dot11_WME_OUI_TYPE (2)
  578. #define dot11_WME_OUI_SUB_TYPE_IE (0)
  579. #define dot11_WME_OUI_SUB_TYPE_PARAMS_IE (1)
  580. #define dot11_WME_VERSION (1)
  581. #define dot11_WME_ACINFO_MASK 0x0f
  582. /* -------------------- TSPEC ----------------- */
  583. #pragma pack(1)
  584. PACKED_STRUCT( tsInfo_t,
  585. UINT8 tsInfoArr[3];
  586. );
  587. #pragma pack()
  588. #pragma pack(1)
  589. /* This structure is part of the TSPEC structure. It was seperated since there are some cases (such as DEL_TS), which we dont need
  590. to send ALL the TSPEC structure, but only as far as TsInfo. The TSPEC structure contains this smaller structure */
  591. PACKED_STRUCT( dot11_WME_TSPEC_IE_hdr_t,
  592. dot11_eleHdr_t hdr;
  593. UINT8 OUI[3];
  594. UINT8 oui_type;
  595. UINT8 oui_subtype;
  596. UINT8 version;
  597. tsInfo_t tsInfoField;
  598. );
  599. PACKED_STRUCT( dot11_WME_TSPEC_IE_t,
  600. dot11_WME_TSPEC_IE_hdr_t tHdr;
  601. UINT16 nominalMSDUSize;
  602. UINT16 maximumMSDUSize;
  603. UINT32 minimumServiceInterval;
  604. UINT32 maximumServiceInterval;
  605. UINT32 inactivityInterval;
  606. UINT32 suspensionInterval;
  607. UINT32 serviceStartTime;
  608. UINT32 minimumDataRate;
  609. UINT32 meanDataRate;
  610. UINT32 peakDataRate;
  611. UINT32 maximumBurstSize;
  612. UINT32 delayBound;
  613. UINT32 minimumPHYRate;
  614. UINT16 surplusBandwidthAllowance;
  615. UINT16 mediumTime;
  616. );
  617. #pragma pack()
  618. #define WME_TSPEC_IE_ID 221
  619. #define WME_TSPEC_IE_LEN 61
  620. #define WME_TSPEC_IE_TSINFO_LEN 9
  621. #define WME_TSPEC_IE_OUI_TYPE 0x02
  622. #define WME_TSPEC_IE_OUI_SUB_TYPE 0x02
  623. #define WME_TSPEC_IE_VERSION 0x01
  624. /* OUI TYPE values that can be present in management packets inside Cisco vendor specific IE */
  625. typedef enum
  626. {
  627. TS_METRIX_OUI_TYPE = 0x07,
  628. TS_RATE_SET_OUI_TYPE = 0x08,
  629. EDCA_LIFETIME_OUI_TYPE = 0x09
  630. } EXC_IE_OUI_TYPE_t;
  631. #define ADDTS_REQUEST_ACTION 0x00
  632. #define ADDTS_RESPONSE_ACTION 0x01
  633. #define DELTS_ACTION 0x02
  634. #define ADDTS_STATUS_CODE_SUCCESS 0x00
  635. #define DELTS_CODE_SUCCESS 0x00
  636. #define TS_INFO_0_TRAFFIC_TYPE_MASK 0x01
  637. #define TS_INFO_0_TSID_MASK 0x1E
  638. #define TS_INFO_0_DIRECTION_MASK 0x60
  639. #define TS_INFO_0_ACCESS_POLICY_MASK 0x80
  640. #define TS_INFO_1_ACCESS_POLICY_MASK 0x01
  641. #define TS_INFO_1_AGGREGATION_MASK 0x02
  642. #define TS_INFO_1_APSD_MASK 0x04
  643. #define TS_INFO_1_USER_PRIORITY_MASK 0x38
  644. #define TS_INFO_1_TSINFO_ACK_POLICY_MASK 0xC0
  645. #define TS_INFO_2_SCHEDULE_MASK 0x01
  646. #define TS_INFO_2_RESERVED_MASK 0xF7
  647. #define TRAFFIC_TYPE_SHIFT 0
  648. #define TSID_SHIFT 1
  649. #define DIRECTION_SHIFT 5
  650. #define ACCESS_POLICY_SHIFT 7
  651. #define AGGREGATION_SHIFT 1
  652. #define APSD_SHIFT 2
  653. #define USER_PRIORITY_SHIFT 3
  654. #define TSINFO_ACK_POLICY_SHIFT 6
  655. #define SCHEDULE_SHIFT 0
  656. #define RESERVED_SHIFT 1
  657. #define SURPLUS_BANDWIDTH_ALLOW 13
  658. #define TS_INFO_0_ACCESS_POLICY_EDCA 0x1
  659. #define NORMAL_ACKNOWLEDGEMENT 0x00
  660. #define NO_SCHEDULE 0x00
  661. #define PS_UPSD 0x01
  662. #define EDCA_MODE 0x08
  663. #define FIX_MSDU_SIZE 0x8000
  664. /* 4X Information Element */
  665. #define DOT11_4X_ELE_ID 0xDD
  666. #define DOT11_4X_MAX_LEN 64
  667. #define DOT11_OUI_LEN 3
  668. #define TI_OUI {0x08,0x00,0x28}
  669. #define WPA_IE_OUI {0x00, 0x50, 0xf2}
  670. #define EXC_OUI {0x00, 0x40, 0x96}
  671. #define _WlanTIcap_t(_) \
  672. _(TI_CAP_4X_CONCATENATION, = 1) \
  673. _(TI_CAP_4X_CONT_WINDOW, = 2) \
  674. _(TI_CAP_4X_CONT_WINDOW_COMBO, = 3) \
  675. _(TI_CAP_4X_TCP_ACK_EMUL, = 4) \
  676. _(TI_CAP_TRICK_PACKET_ERP, = 5)
  677. PACKED_ENUM (WlanTIcap_t,_WlanTIcap_t);
  678. PACKED_STRUCT( dot11_4X_t,
  679. dot11_eleHdr_t hdr;
  680. UINT8 fourXCapabilities[DOT11_4X_MAX_LEN];
  681. );
  682. /* Action field structure
  683. used for extended management action such as spectrum management */
  684. PACKED_STRUCT( dot11_ACTION_FIELD_t,
  685. UINT8 category;
  686. UINT8 action;
  687. );
  688. /* Management frames sub types */
  689. typedef enum
  690. {
  691. ASSOC_REQUEST = 0,
  692. ASSOC_RESPONSE = 1,
  693. RE_ASSOC_REQUEST = 2,
  694. RE_ASSOC_RESPONSE = 3,
  695. PROBE_REQUEST = 4,
  696. PROBE_RESPONSE = 5,
  697. BEACON = 8,
  698. ATIM = 9,
  699. DIS_ASSOC = 10,
  700. AUTH = 11,
  701. DE_AUTH = 12,
  702. ACTION = 13,
  703. } dot11MgmtSubType_e;
  704. /* Management frames element IDs */
  705. typedef enum
  706. {
  707. SSID_IE_ID = 0,
  708. SUPPORTED_RATES_IE_ID = 1,
  709. FH_PARAMETER_SET_IE_ID = 2,
  710. DS_PARAMETER_SET_IE_ID = 3,
  711. CF_PARAMETER_SET_IE_ID = 4,
  712. TIM_IE_ID = 5,
  713. IBSS_PARAMETER_SET_IE_ID = 6,
  714. COUNTRY_IE_ID = 7,
  715. CHALLANGE_TEXT_IE_ID = 16,
  716. POWER_CONSTRAINT_IE_ID = 32,
  717. TPC_REPORT_IE_ID = 35,
  718. CHANNEL_SWITCH_ANNOUNCEMENT_IE_ID = 37,
  719. QUIET_IE_ID = 40,
  720. ERP_IE_ID = 42,
  721. QOS_CAPABILITY_IE_ID = 46,
  722. RSN_IE_ID = 48,
  723. EXT_SUPPORTED_RATES_IE_ID = 50,
  724. EXC_EXT_1_IE_ID = 133,
  725. EXC_EXT_2_IE_ID = 149,
  726. CELL_POWER_IE = 150, /*EXC*/
  727. WPA_IE_ID = 221,
  728. TI_4X_IE_ID = WPA_IE_ID
  729. } dot11MgmtIeId_e;
  730. /* Spectrum Management Action fields */
  731. typedef enum
  732. {
  733. MEASUREMENT_REQUEST = 0,
  734. MEASUREMENT_REPORT = 1,
  735. TPC_REQUEST = 2,
  736. TPC_REPORT = 3,
  737. CHANNEL_SWITCH_ANNOUNCEMENT = 4,
  738. } dot11ActionFrameTypes_e;
  739. /* Category fields (such as apectrum management)*/
  740. typedef enum
  741. {
  742. CATAGORY_SPECTRUM_MANAGEMENT = 0,
  743. CATAGORY_QOS = 1,
  744. WME_CATAGORY_QOS = 17,
  745. CATAGORY_SPECTRUM_MANAGEMENT_ERROR = 128,
  746. } dot11CategoryTypes_e;
  747. /* management templates to set to the HAL */
  748. PACKED_STRUCT( probeReqTemplate_t,
  749. dot11_mgmtHeader_t hdr;
  750. char infoElements[sizeof( dot11_SSID_t ) +
  751. sizeof( dot11_RATES_t ) +
  752. sizeof( dot11_RATES_t ) ];
  753. );
  754. PACKED_STRUCT( probeRspTemplate_t,
  755. dot11_mgmtHeader_t hdr;
  756. UINT8 timeStamp[TIME_STAMP_LEN];
  757. UINT16 beaconInterval;
  758. UINT16 capabilities;
  759. char infoElements[ sizeof( dot11_SSID_t ) +
  760. sizeof( dot11_RATES_t ) +
  761. sizeof( dot11_RATES_t ) +
  762. sizeof( dot11_DS_PARAMS_t ) +
  763. sizeof( dot11_COUNTRY_t) ];
  764. );
  765. PACKED_STRUCT( nullDataTemplate_t,
  766. dot11_mgmtHeader_t hdr;
  767. );
  768. PACKED_STRUCT( psPollTemplate_t,
  769. dot11_PsPollFrameHeader_t hdr;
  770. );
  771. PACKED_STRUCT( QosNullDataTemplate_t,
  772. dot11_header_t hdr;
  773. );
  774. #pragma pack(1)
  775. /* Traffic Stream Rate Set (TSRS) info-elements */
  776. PACKED_STRUCT( dot11_TSRS_STA_IE_t,
  777. dot11_eleHdr_t hdr;
  778. UINT8 OUI[3];
  779. UINT8 oui_type;
  780. UINT8 tsid;
  781. UINT8 tsNominalRate;
  782. );
  783. PACKED_STRUCT( dot11_TSRS_IE_t,
  784. dot11_eleHdr_t hdr;
  785. UINT8 OUI[3];
  786. UINT8 oui_type;
  787. UINT8 tsid;
  788. UINT8 tsRates[8];
  789. );
  790. /* MSDU lifetime info-element */
  791. PACKED_STRUCT( dot11_MSDU_LIFE_TIME_IE_t,
  792. dot11_eleHdr_t hdr;
  793. UINT8 OUI[3];
  794. UINT8 oui_type;
  795. UINT8 tsid;
  796. UINT16 msduLifeTime;
  797. );
  798. PACKED_STRUCT( dot11_TS_METRICS_IE_t,
  799. dot11_eleHdr_t hdr;
  800. UINT8 OUI[3];
  801. UINT8 oui_type;
  802. UINT8 tsid;
  803. UINT8 state;
  804. UINT16 measureInterval;
  805. );
  806. PACKED_STRUCT( EXCv4IEs_t,
  807. dot11_TSRS_IE_t *trafficStreamParameter;
  808. dot11_MSDU_LIFE_TIME_IE_t *edcaLifetimeParameter;
  809. dot11_TS_METRICS_IE_t *tsMetrixParameter;
  810. );
  811. #pragma pack()
  812. /* Disassociation frame structure */
  813. #pragma pack(1)
  814. PACKED_STRUCT( disAssoc_t,
  815. UINT16 reason;
  816. );
  817. #pragma pack()
  818. /* (Re)Association response frame structure */
  819. #define ASSOC_RESP_FIXED_DATA_LEN 6
  820. #pragma pack(1)
  821. PACKED_STRUCT( assocRsp_t,
  822. UINT16 capabilities;
  823. UINT16 status;
  824. UINT16 aid;
  825. dot11_RATES_t *pRates;
  826. dot11_RATES_t *pExtRates;
  827. BOOL useProtection;
  828. BOOL ciscoIEPresent;
  829. preamble_e barkerPreambleMode;
  830. BOOL NonErpPresent;
  831. dot11_4X_t *fourXParams;
  832. dot11_WME_PARAM_t *WMEParams;
  833. dot11_RSN_t *pRsnIe;
  834. UINT8 rsnIeLen;
  835. dot11_QOS_CAPABILITY_IE_t *QoSCapParameters;
  836. dot11_WME_TSPEC_IE_t *tspecVoiceParameters;
  837. dot11_WME_TSPEC_IE_t *tspecSignalParameters;
  838. EXCv4IEs_t excIEs[MAX_NUM_OF_AC];
  839. );
  840. #pragma pack()
  841. /* Probe response frame structure */
  842. /* Please notice, the order of fields in the beacon must be identical to the order of
  843. field in the probe response. This is because of the parsing that is done by the site manager. */
  844. /* In case the removing the PACKED_STRUCT for beacon_probeRsp_t it's possible to merge the 2 structures below */
  845. #ifdef EXC_MODULE_INCLUDED
  846. PACKED_STRUCT( beacon_probeRsp_t,
  847. char timestamp[TIME_STAMP_LEN];
  848. UINT16 beaconInerval;
  849. UINT16 capabilities;
  850. dot11_SSID_t *pSsid;
  851. dot11_RATES_t *pRates;
  852. dot11_COUNTRY_t *country;
  853. dot11_POWER_CONSTRAINT_t *powerConstraint;
  854. dot11_CHANNEL_SWITCH_t *channelSwitch;
  855. dot11_QUIET_t *quiet;
  856. dot11_TPC_REPORT_t *TPCReport;
  857. dot11_CELL_TP_t *cellTP;
  858. dot11_WME_PARAM_t *WMEParams;
  859. dot11_RATES_t *pExtRates;
  860. BOOL useProtection;
  861. preamble_e barkerPreambleMode;
  862. BOOL NonErpPresent;
  863. dot11_FH_PARAMS_t *pFHParamsSet;
  864. dot11_DS_PARAMS_t *pDSParamsSet;
  865. dot11_CF_PARAMS_t *pCFParamsSet;
  866. dot11_IBSS_PARAMS_t *pIBSSParamsSet;
  867. dot11_4X_t *fourXParams; /* for probe response only */
  868. dot11_RSN_t *pRsnIe;
  869. UINT8 rsnIeLen;
  870. dot11_QOS_CAPABILITY_IE_t *QoSCapParameters;
  871. dot11_TIM_t *pTIM; /* for beacons only */
  872. );
  873. #else
  874. PACKED_STRUCT( beacon_probeRsp_t,
  875. char timestamp[TIME_STAMP_LEN];
  876. UINT16 beaconInerval;
  877. UINT16 capabilities;
  878. dot11_SSID_t *pSsid;
  879. dot11_RATES_t *pRates;
  880. dot11_COUNTRY_t *country;
  881. dot11_POWER_CONSTRAINT_t *powerConstraint;
  882. dot11_CHANNEL_SWITCH_t *channelSwitch;
  883. dot11_QUIET_t *quiet;
  884. dot11_TPC_REPORT_t *TPCReport;
  885. dot11_WME_PARAM_t *WMEParams;
  886. dot11_RATES_t *pExtRates;
  887. BOOL useProtection;
  888. preamble_e barkerPreambleMode;
  889. BOOL NonErpPresent;
  890. dot11_FH_PARAMS_t *pFHParamsSet;
  891. dot11_DS_PARAMS_t *pDSParamsSet;
  892. dot11_CF_PARAMS_t *pCFParamsSet;
  893. dot11_IBSS_PARAMS_t *pIBSSParamsSet;
  894. dot11_4X_t *fourXParams; /* for probe response only */
  895. dot11_RSN_t *pRsnIe;
  896. UINT8 rsnIeLen;
  897. dot11_QOS_CAPABILITY_IE_t *QoSCapParameters;
  898. dot11_TIM_t *pTIM; /* for beacons only */
  899. );
  900. #endif
  901. /* Authentication message frame structure */
  902. #pragma pack(1)
  903. PACKED_STRUCT( authMsg_t,
  904. UINT16 authAlgo;
  905. UINT16 seqNum;
  906. UINT16 status;
  907. dot11_CHALLENGE_t *pChallenge;
  908. );
  909. #pragma pack()
  910. /* DeAuthentication message frame structure */
  911. #pragma pack(1)
  912. PACKED_STRUCT( deAuth_t,
  913. UINT16 reason;
  914. );
  915. #pragma pack()
  916. /* Action message frame structure */
  917. #pragma pack(1)
  918. PACKED_STRUCT( action_t,
  919. UINT8 frameType;
  920. UINT8 category;
  921. UINT8 action;
  922. );
  923. #pragma pack()
  924. /* TPCReport message frame structure */
  925. #pragma pack(1)
  926. PACKED_STRUCT( TPCReport_t,
  927. dot11_ACTION_FIELD_t actionField;
  928. UINT8 dialogToken;
  929. dot11_TPC_REPORT_t TPCReport;
  930. );
  931. #pragma pack()
  932. /* Measurement Report message frame structure */
  933. #pragma pack(1)
  934. PACKED_STRUCT( MeasurementReportFrame_t,
  935. dot11_ACTION_FIELD_t actionField;
  936. UINT8 dialogToken;
  937. dot11_MEASUREMENT_REPORT_t measurementReportIE;
  938. );
  939. #pragma pack()
  940. typedef enum
  941. {
  942. STATUS_SUCCESSFUL = 0,
  943. STATUS_UNSPECIFIED,
  944. STATUS_AUTH_REJECT,
  945. STATUS_ASSOC_REJECT,
  946. STATUS_SECURITY_FAILURE,
  947. STATUS_AP_DEAUTHENTICATE,
  948. STATUS_AP_DISASSOCIATE,
  949. STATUS_ROAMING_TRIGGER
  950. } mgmtStatus_e;
  951. /* Used as a status code in case of STATUS_AUTH_REJECT or STATUS_ASSOC_REJECT that was not received at all */
  952. #define STATUS_PACKET_REJ_TIMEOUT 0xFFFF
  953. /* As defined in 802.11 spec section 7.3.1 - status codes for deAuth packet */
  954. #define STATUS_CODE_802_1X_AUTHENTICATION_FAILED 23
  955. /* map field included in measurement report IE (only in basic report) */
  956. typedef enum
  957. {
  958. DOT11_BSS_ONLY = (0x01),
  959. DOT11_OFDM_ONLY = (0x02),
  960. DOT11_RADAR_AND_UNIDENTIFIED = (0x0C),
  961. } dot11_Map_Sub_Field_e;
  962. /* MACROS */
  963. #define INRANGE(x,low,high) (((x) >= (low)) && ((x) <= (high)))
  964. #define OUTRANGE(x,low,high) (((x) < (low)) || ((x) > (high)))
  965. #define WLAN_4X_LEN_FIELD_LEN 2
  966. #define WLAN_DA_FIELD_LEN 6
  967. #define WLAN_DA_FIELD_OFFSET 16
  968. #define WLAN_BSSID_FIELD_OFFSET 4
  969. #define WLAN_SA_FIELD_OFFSET 10
  970. #define WLAN_CONCAT_HDR_LEN (WLAN_4X_LEN_FIELD_LEN + WLAN_DA_FIELD_LEN) /* 2+6 = 8 */
  971. #define WLAN_CONCAT_HDR_OFFSET (WLAN_HDR_LEN - WLAN_CONCAT_HDR_LEN) /* 24-8 = 16 */
  972. /* 4X definitions */
  973. #pragma pack(1)
  974. PACKED_STRUCT( Wdrv4xHeader_t,
  975. UINT8 type;
  976. UINT8 headerLen;
  977. UINT16 txFlags;
  978. );
  979. #pragma pack()
  980. #pragma pack(1)
  981. PACKED_STRUCT( dot11_DataMsduHeader_t,
  982. dot11_header_t dot11Header;
  983. Wlan_LlcHeader_T snapHeader;
  984. );
  985. #pragma pack()
  986. #pragma pack(1)
  987. PACKED_STRUCT( legacy_dot11_DataMsduHeader_t,
  988. legacy_dot11_header_t dot11Header;
  989. Wlan_LlcHeader_T snapHeader;
  990. );
  991. #pragma pack()
  992. #pragma pack(1)
  993. PACKED_STRUCT( dot114xMsdu_t,
  994. legacy_dot11_DataMsduHeader_t msduHeader;
  995. Wdrv4xHeader_t header4x;
  996. );
  997. #pragma pack()
  998. #pragma pack(1)
  999. PACKED_STRUCT( Wdrv4xConcatHeader_t,
  1000. UINT16 len;
  1001. macAddress_t SaDa;
  1002. );
  1003. #pragma pack()
  1004. typedef enum
  1005. {
  1006. NOT_4X_MSDU = -1,
  1007. CONCATENATION = 1,
  1008. ACK_EMULATION = 2,
  1009. MANAGMENT_4X = 3
  1010. } Wlan4XType_t;
  1011. #define WLAN_HEADER_TYPE_CONCATENATION 0x01
  1012. #define WLAN_CONCAT_HEADER_LEN 2
  1013. #define WLAN_4X_CONCAT_HDR_LEN 4
  1014. #define WLAN_4X_CONCAT_MORE_BIT 0x0001
  1015. #endif /* _802_11_INFO_DEFS_H */