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