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