Home | History | Annotate | Download | only in inc
      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