blob: 4d6e30373dc44f9cadc4ae93aa67662df07e8cf8 [file] [log] [blame]
Varun Reddy Yeturu2c7b00b2014-03-18 16:30:29 -07001/*
2 * Copyright (c) 2006-2007 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * Copyright (c) 2006-2007 Qualcomm Atheros, Inc.
24 * All Rights Reserved.
25 * Qualcomm Atheros Confidential and Proprietary.
26 */
27
28/**
29 * \file dot11f.frms
30 *
31 * \brief Primary 'frames' file for the MAC parser
32 *
33 *
34 * This file defines several 802.11 frames (along with their associated
35 * constituents) in a little language called "frames". When run through the
36 * 'framesc' program, it will generate C code for working with these frames:
37 * C structs representing the 802.11 frame together with functions for
38 * packing & unpacking them.
39 *
40 * For more information on the "frames" language, run 'framesc --help'...
41 *
42 *
43 */
44
45
46// Tell framesc what types to use for...
47%8-bit-type tANI_U8 // 8,
48%16-bit-type tANI_U16 // 16,
49%32-bit-type tANI_U32 // & 32-bit unsigned integral types. These can also
50 // be specified on the command line.
51
52// Define some mnemonic constants; these are just for our use with the frames
53// files we're compiling. IOW, they won't result in any C code being
54// emitted.
55
56const EID_SSID = 0;
57const EID_SUPP_RATES = 1;
58const EID_FH_PARAM_SET = 2;
59const EID_DS_PARAM_SET = 3;
60const EID_CF_PARAM_SET = 4;
61const EID_TIM = 5;
62const EID_IBSS_PARAM_SET = 6;
63const EID_COUNTRY = 7;
64const EID_FH_PATTERN = 8;
65const EID_FH_PATT_TABLE = 9;
66const EID_REQUEST = 10;
67const EID_QBSS_LOAD = 11;
68const EID_EDCA_PARAM_SET = 12;
69const EID_TSPEC = 13;
70const EID_TCLAS = 14;
71const EID_SCHEDULE = 15;
72const EID_CHALLENGE_TEXT = 16;
73const EID_POWER_CONSTRAINTS = 32;
74const EID_POWER_CAPABILITY = 33;
75const EID_TPC_REQUEST = 34;
76const EID_TPC_REPORT = 35;
77const EID_SUPPORTED_CHANNELS = 36;
78const EID_CHANNEL_SWITCH_ANN = 37;
79const EID_MEAS_REQUEST = 38;
80const EID_MEAS_REPORT = 39;
81const EID_QUIET = 40;
82const EID_ERP_INFO = 42;
83const EID_TS_DELAY = 43;
84const EID_TCLASS_PROC = 44;
85const EID_HT_CAPABILITIES = 45;
86const EID_QOS_CAPABILITY = 46;
87const EID_RSN = 48;
88const EID_EXT_SUPP_RATES = 50;
89const EID_AP_CHAN_REPORT = 51;
90const EID_NEIGHBOR_REPORT = 52;
91const EID_RCPI = 53;
92const EID_FT_MOBILITY_DOMAIN = 54;
93const EID_FT_INFO = 55;
94const EID_TIMEOUT_INTERVAL = 56;
95const EID_FT_RIC_DATA = 57;
96const EID_SUPPORTED_OPER_CLASSES = 59;
97const EID_HT_INFO = 61;
98const EID_EXT_CHANNEL_SWITCH_ANN = 62;
99const EID_RSNI = 65;
100const EID_RRM_MEAS_PILOT_TX_INFO = 66;
101const EID_WAPI = 68;
102const EID_RRM_ENABLED_CAPS = 70;
103const EID_MULTIPLE_BSSID = 71;
104const EID_OBSS_SCAN_PARAMETERS = 74;
105const EID_FT_RIC_DESCRIPTOR = 75;
106const EID_LINK_IDENTIFIER = 101;
107const EID_PTI_CONTROL = 105;
108const EID_PU_BUFFER_STATUS = 106;
109const EID_ESE_SPECIFIC = 150;
110const EID_ESE_CCKM_SPECIFIC = 156;
111const EID_VHT_CAPABILITIES = 191;
112const EID_VHT_OPERATION_ELEMENT = 192;
113const EID_VHT_EXT_BSS_LOAD = 193;
114const EID_AID = 197;
115const EID_EXT_CAP = 127;
116const EID_OPERATING_MODE = 199;
117const EID_WIDER_BW_CHANNEL_SWITCH_ANN= 194;
118const EID_VENDOR_SPECIFIC = 221;
119
120const SIR_MAC_PROP_EXT_RATES_TYPE = 0;
121const SIR_MAC_PROP_AP_NAME_TYPE = 1;
122const SIR_MAC_PROP_HCF_TYPE = 2;
123const SIR_MAC_PROP_WDS_TYPE = 3;
124const SIR_MAC_PROP_BP_IND_TYPE = 4;
125const SIR_MAC_PROP_NEIGHBOR_BSS_TYPE = 5;
126const SIR_MAC_PROP_LOAD_INFO_TYPE = 6;
127const SIR_MAC_PROP_ASSOC_TYPE = 7;
128const SIR_MAC_PROP_LOAD_BALANCE_TYPE = 8;
129const SIR_MAC_PROP_LL_ATTR_TYPE = 9;
130const SIR_MAC_PROP_CAPABILITY = 10;
131const SIR_MAC_PROP_VERSION = 11;
132const SIR_MAC_PROP_EDCAPARAMS = 12;
133const SIR_MAC_PROP_TITAN = 14;
134const SIR_MAC_PROP_CHANNEL_SWITCH = 15;
135const SIR_MAC_PROP_QUIET_BSS = 16;
136const SIR_MAC_PROP_TRIG_STA_BK_SCAN = 17;
137const SIR_MAC_PROP_TAURUS = 18;
138
139const ANI_WDS_INFO_MAX_LENGTH = 64;
140const SIR_MAC_MAX_NUMBER_OF_RATES = 12;
141const HT_MAX_SUPPORTED_MCS_SET = 16;
142
143/////////////////////////////////////////////////////////////////////////////
144// Wi-Fi Protected Setup TLV Identifiers //
145// WSC Version 2.0.0 Table 28 //
146/////////////////////////////////////////////////////////////////////////////
147/////////////////////////////////////////////////////////////////////////////
148// Wi-Fi Simple Configuration TLV Identifiers //
149// WFA Vendor Extension Subelements //
150/////////////////////////////////////////////////////////////////////////////
151const TLV_VERSION2 = 0;
152const TLV_AUTHORIZED_MAC = 1;
153const TLV_NETWORK_KEY_SHAREABLE = 2;
154const TLV_REQUEST_TO_ENROLL = 3;
155const TLV_SETTINGS_DELAY_TIME = 4;
156
157const TLV_VERSION = 0x104A;
158const TLV_WI_FI_SIMPLE_CONFIG_STATE = 0x1044;
159const TLV_AP_SETUP_LOCKED = 0x1057;
160const TLV_SELECTED_REGISTRAR_CONFIG_METHODS = 0x1053;
161const TLV_DEVICE_PASSWORD_ID = 0x1012;
162const TLV_UUID_E = 0x1047;
163const TLV_UUID_R = 0x1048;
164const TLV_RF_BANDS = 0x103C;
165const TLV_REQUEST_TYPE = 0x103A;
166const TLV_RESPONSE_TYPE = 0x103B;
167const TLV_CONFIG_METHODS = 0x1008;
168const TLV_PRIMARY_DEVICE_TYPE = 0x1054;
169const TLV_ASSOCIATION_STATE = 0x1002;
170const TLV_CONFIGURATION_ERROR = 0x1009;
171const TLV_MANUFACTURER = 0x1021;
172const TLV_MODEL_NAME = 0x1023;
173const TLV_MODEL_NUMBER = 0x1024;
174const TLV_SERIAL_NUMBER = 0x1042;
175const TLV_DEVICE_NAME = 0x1011;
176const TLV_SELECTED_REGISTRAR = 0x1041;
177const TLV_VENDOR_EXTENSION = 0x1049;
178const TLV_REQUESTED_DEVICE_TYPE = 0x106A;
179
180/////////////////////////////////////////////////////////////////////////////
181// Wi-Fi Direct/P2P TLV Identifiers //
182/////////////////////////////////////////////////////////////////////////////
183const TLV_P2P_STATUS = 0;
184const TLV_MINOR_REASON_CODE = 1;
185const TLV_P2P_CAPABILITY = 2;
186const TLV_P2P_DEVICE_ID = 3;
187const TLV_P2P_GROUP_OWNER_INTENT = 4;
188const TLV_CONFIGURATION_TIMEOUT = 5;
189const TLV_LISTEN_CHANNEL = 6;
190const TLV_P2P_GROUP_BSSID = 7;
191const TLV_EXTENDED_LISTEN_TIMING = 8;
192const TLV_INTENDED_P2P_INTERFACE_ADDRESS = 9;
193const TLV_P2P_MANAGEABILITY = 10;
194const TLV_CHANNEL_LIST = 11;
195const TLV_NOTICE_OF_ABSENCE = 12;
196const TLV_P2P_DEVICE_INFO = 13;
197const TLV_P2P_GROUP_INFO = 14;
198const TLV_P2P_GROUP_ID = 15;
199const TLV_P2P_INTERFACE = 16;
200const TLV_OPERATING_CHANNEL = 17;
201const TLV_INVITATION_FLAGS = 18;
202const TLV_P2P_VENDOR_SPECIFIC = 221;
203
204/////////////////////////////////////////////////////////////////////////////
205// Fixed Fields
206
207FF AuthAlgo (2) // C.f. Sec. 7.3.1.1
208{
209 algo, 2;
210}
211
212FF AuthSeqNo (2) // 7.3.1.2
213{
214 no, 2;
215}
216
217FF BeaconInterval (2) // 7.3.1.3
218{
219 interval, 2;
220}
221
222FF Capabilities (2) // 7.3.1.4
223{
224 {
225 ess: 1;
226 ibss: 1;
227 cfPollable: 1;
228 cfPollReq: 1;
229 privacy: 1;
230 shortPreamble: 1;
231 pbcc: 1;
232 channelAgility: 1;
233 spectrumMgt: 1;
234 qos: 1;
235 shortSlotTime: 1;
236 apsd: 1;
237 rrm: 1;
238 dsssOfdm: 1;
239 delayedBA: 1;
240 immediateBA: 1;
241 }
242}
243
244FF CurrentAPAddress(6) // 7.3.1.5
245{
246 mac[6];
247}
248
249FF ListenInterval (2) // 7.3.1.6
250{
251 interval, 2;
252}
253
254FF Reason (2) // 7.3.1.7
255{
256 code, 2;
257}
258
259FF AID (2) // 7.3.1.8
260{
261 associd, 2;
262}
263
264FF Status (2) // 7.3.1.9
265{
266 status, 2;
267}
268
269FF TimeStamp (8) // 7.3.1.10
270{
271 timestamp, 8;
272}
273
274FF Category (1) // 7.3.1.11
275{
276 category, 1;
277}
278
279FF Action (1) // 7.3.1.11
280{
281 action, 1;
282}
283
284FF TransactionId (2) // 7.3.1.11
285{
286 transId[2];
287}
288
289FF DialogToken (1) // 7.3.1.12
290{
291 token, 1;
292}
293
294FF StatusCode (1) // WMM Spec 2.2.10
295{
296 statusCode, 1;
297}
298
299FF OperatingMode (1)
300{
301 {
302 //Operating Mode field
303 chanWidth: 2;
304 reserved: 2;
305 rxNSS: 3;
306 rxNSSType: 1;
307 }
308}
309FF AddBAParameterSet (2) // 7.3.1.14
310{
311 {
312 amsduSupported: 1;
313 policy: 1;
314 tid: 4;
315 bufferSize: 10;
316 }
317}
318
319FF BATimeout (2) // 7.3.1.15
320{
321 timeout, 2;
322}
323
324FF BAStartingSequenceControl (2) // 7.2.1.7
325{
326 {
327 fragNumber: 4;
328 ssn: 12;
329 }
330}
331
332FF DelBAParameterSet (2) // 7.3.1.16
333{
334 {
335 reserved: 11;
336 initiator: 1;
337 tid: 4;
338 }
339}
340
341FF SMPowerModeSet (1) //7.3.1.25
342{
343 {
344 PowerSave_En: 1;
345 Mode: 1;
346 reserved: 6;
347 }
348}
349
350FF TSInfo (3) // 7.3.2.30
351{
352 {
353 traffic_type: 1;
354 tsid: 4;
355 direction: 2;
356 access_policy: 2;
357 aggregation: 1;
358 psb: 1;
359 user_priority: 3;
360 tsinfo_ack_pol: 2;
361 schedule: 1;
362 unused: 15;
363 }
364}
365
366FF NumOfRepetitions (2)
367{
368 repetitions, 2;
369}
370
371FF TxPower (1)
372{
373 txPower, 1;
374}
375
376FF MaxTxPower (1)
377{
378 maxTxPower, 1;
379}
380FF TPCEleID (1)
381{
382 TPCId, 1;
383}
384FF TPCEleLen (1)
385{
386 TPCLen, 1;
387}
388FF LinkMargin (1)
389{
390 linkMargin, 1;
391}
392FF RxAntennaId (1)
393{
394 antennaId, 1;
395}
396FF TxAntennaId (1)
397{
398 antennaId, 1;
399}
400FF RCPI (1)
401{
402 rcpi, 1;
403}
404FF RSNI (1)
405{
406 rsni, 1;
407}
408
409FF P2POUI (4)
410{
411 oui, 4;
412}
413
414FF P2POUISubType (1)
415{
416 ouiSubtype, 1;
417}
418
419FF RMCOUI (3)
420{
421 oui[3];
422}
423
424FF MagicCode (6)
425{
426 magic[6];
427}
428
429FF RMCVersion (1)
430{
431 version, 1;
432}
433
434FF RMCDialogToken (4)
435{
436 token, 4;
437}
438
439FF Leader (6)
440{
441 mac[6];
442}
443
444FF VhtMembershipStatusArray(8) // 8.4.1.51
445{
446 membershipStatusArray[8];
447}
448
449FF VhtUserPositionArray(16) // 8.4.1.52
450{
451 userPositionArray[16];
452}
453
454
455/////////////////////////////////////////////////////////////////////////////
456// TLVs //
457/////////////////////////////////////////////////////////////////////////////
458
459/**
460 * \brief Version
461 *
462 * WPS 1.0h
463 * Version specifies the Easy Setup version. The one-byte field is broken
464 * into a four-bit major part using the top MSBs and four-bit minor part
465 * using the LSBs. As an example, version 3.2 would be 0x32.
466 *
467 * WSC 2.0.0
468 * Deprecated Version mechanism. This attribute is always set to value 0x10
469 * (version 1.0) for backwards compatibility. Version 1.0h of the specification
470 * did not fully describe the version negotiation mechanism and version 2.0
471 * introduced a new subelement (Version2) for indicating the version number
472 * to avoid potential interoperability issues with deployed 1.0h-based devices.
473 *
474 */
475
476TLV Version( TLV_VERSION ) ( 2 : 2 ) MSB
477{
478 {
479 minor: 4;
480 major: 4;
481 }
482}
483
484/// Wi-Fi Protected Setup State
485TLV WPSState( TLV_WI_FI_SIMPLE_CONFIG_STATE ) ( 2 : 2 ) MSB
486{
487 state, 1;
488}
489
490/**
491 * \brief AP Setup Locked
492 *
493 *
494 * This variable indicates that the AP has entered a state in which it will
495 * refuse to allow an external Registrar to attempt to run the Registration
496 * Protocol using the AP?s PIN (with the AP acting as Enrollee). The AP
497 * should enter this state if it believes a brute force attack is underway
498 * against the AP?s PIN.
499 *
500 * When the AP is in this state, it MUST continue to allow other Enrollees to
501 * connect and run the Registration Protocol with any external Registrars or
502 * the AP's built-in Registrar (if any). It is only the use of the AP' PIN
503 * for adding external Registrars that is disabled in this state.
504 *
505 * The AP Setup Locked state can be reset to FALSE through an authenticated
506 * call to SetAPSettings. APs may provide other implementation-specific
507 * methods of resetting the AP Setup Locked state as well.
508 *
509 *
510 */
511
512TLV APSetupLocked( TLV_AP_SETUP_LOCKED ) ( 2 : 2 ) MSB
513{
514 fLocked, 1;
515}
516
517/**
518 * \brief Selected Registrar Config Methods
519 *
520 *
521 * This attribute has the same values that Config Methods have. It is used in
522 * Probe Response messages to convey the Config Methods of the selected
523 * Registrar.
524 *
525 *
526 */
527
528TLV SelectedRegistrarConfigMethods ( TLV_SELECTED_REGISTRAR_CONFIG_METHODS ) ( 2 : 2 ) MSB
529{
530 methods, 2;
531}
532
533/**
534 * \brief UUID-E
535 *
536 *
537 * The universally unique identifier (UUID) element is a unique GUID
538 * generated by the Enrollee. It uniquely identifies an operational device
539 * and should survive reboots and resets. The UUID is provided in binary
540 * format. If the device also supports UPnP, then the UUID corresponds to the
541 * UPnP UUID.
542 *
543 *
544 */
545
546TLV UUID_E ( TLV_UUID_E ) ( 2 : 2 ) MSB
547{
548 uuid[ 16 ];
549}
550
551/**
552 * \brief UUID-R
553 *
554 *
555 * The universally unique identifier (UUID) element is a unique GUID
556 * generated by the Registrar. It uniquely identifies an operational device
557 * and should survive reboots and resets. The UUID is provided in binary
558 * format. If the device also supports UPnP, then the UUID corresponds to the
559 * UPnP UUID.
560 *
561 *
562 */
563
564TLV UUID_R ( TLV_UUID_R ) ( 2 : 2 ) MSB
565{
566 uuid[ 16 ];
567}
568
569/**
570 * \brief RF Bands
571 *
572 *
573 \code
574
575 0x01 2.4GHz
576 0x02 5.0GHz
577
578 \endcode
579 *
580 *
581 */
582
583TLV RFBands ( TLV_RF_BANDS ) ( 2 : 2 ) MSB
584{
585 bands, 1;
586}
587
588
589/**
590 * \brief Selected Registrar
591 *
592 *
593 * This field indicates that a Registrar has been selected by a user and that
594 * an Enrollee should proceed with setting up an 802.1X uncontrolled data
595 * port with the Registrar.
596 *
597 *
598 */
599
600TLV SelectedRegistrar ( TLV_SELECTED_REGISTRAR ) ( 2 : 2 ) MSB
601{
602 selected, 1;
603}
604
605/**
606 * \brief Config Methods
607 *
608 *
609 * The Config Methods Data component lists the configuration methods the
610 * Enrollee or Registrar supports. The list is a bitwise OR of values from
611 * the table below. In addition to Config Methods, APs and STAs that support
612 * the UPnP Management Interface must support the Permitted Config Methods
613 * attribute, which is used to control the Config Methods that are enabled on
614 * that AP.
615 *
616 \code
617
618 Value Hardware Interface
619 0x0001 USBA (Flash Drive)
620 0x0002 Ethernet
621 0x0004 Label
622 0x0008 Display
623 0x0010 External NFC Token
624 0x0020 Integrated NFC Token
625 0x0040 NFC Interface
626 0x0080 PushButton
627 0x0100 Keypad
628
629 \endcode
630 *
631 *
632 */
633
634TLV ConfigMethods ( TLV_CONFIG_METHODS ) ( 2 : 2 ) MSB
635{
636 methods, 2;
637}
638
639/**
640 * \brief Association State
641 *
642 *
643 * The Association State component shows the configuration and previous
644 * association state of the wireless station when sending a Discovery
645 * request.
646 *
647 \code
648
649 Association State Description
650 0 Not Associated
651 1 Connection Success
652 2 Configuration Failure
653 3 Association Failure
654 4 IP Failure
655
656 \endcode
657 *
658 *
659 */
660
661TLV AssociationState ( TLV_ASSOCIATION_STATE ) ( 2 : 2 ) MSB
662{
663 state, 2;
664}
665
666/**
667 * \brief Configuration Error
668 *
669 *
670 * The Configuration Error component shows the result of the device
671 * attempting to configure itself and to associate with the WLAN.
672 *
673 \code
674
675 Configuration Error Description
676 0 No Error
677 1 OOB Interface Read Error
678 2 Decryption CRC Failure
679 3 2.4 channel not supported
680 4 5.0 channel not supported
681 5 Signal too weak
682 6 Network auth failure
683 7 Network association failure
684 8 No DHCP response
685 9 Failed DHCP config
686 10 IP address conflict
687 11 Couldn't connect to Registrar
688 12 Multiple PBC sessions detected
689 13 Rogue activity suspected
690 14 Device busy
691 15 Setup locked
692 16 Message Timeout
693 17 Registration Session Timeout
694 18 Device Password Auth Failure
695
696 \endcode
697 *
698 * The Device busy error is returned if the sending device is unable to
699 * respond to the request due to some internal conflict or resource
700 * contention issue. For example, if a device is only capable of performing a
701 * single instance of the Registration Protocol at a time, it may return this
702 * error in response to attempts to start another instance in the middle of
703 * an active session.
704 *
705 *
706 */
707
708TLV ConfigurationError ( TLV_CONFIGURATION_ERROR ) ( 2 : 2 ) MSB
709{
710 error, 2;
711}
712
713TLV Manufacturer ( TLV_MANUFACTURER ) ( 2 : 2 ) MSB
714{
715 name[ 0..64 ];
716}
717
718TLV ModelName ( TLV_MODEL_NAME ) ( 2 : 2 ) MSB
719{
720 text[ 0..32 ];
721}
722
723TLV ModelNumber ( TLV_MODEL_NUMBER ) ( 2 : 2 ) MSB
724{
725 text[ 0..32 ];
726}
727
728TLV SerialNumber ( TLV_SERIAL_NUMBER ) ( 2 : 2 ) MSB
729{
730 text[ 0..32 ];
731}
732
733TLV DeviceName ( TLV_DEVICE_NAME ) ( 2 : 2 ) MSB
734{
735 text[ 0..32 ];
736}
737
738/**
739 * \brief Device Password ID
740 *
741 *
742 * This attribute is used to identify a device password. There are six
743 * predefined values and ten reserved values. If the Device Password ID is
744 * Default, the Enrollee should use its PIN password (from the label or
745 * display). This password may correspond to the label, display, or a
746 * user-defined password that has been configured to replace the original
747 * device password.
748 *
749 * User-specified indicates that the user has overridden the password with a
750 * manually selected value. Machine-specified indicates that the original
751 * PIN password has been overridden by a strong, machinegenerated device
752 * password value. The Rekey value indicates that the device's 256-bit
753 * rekeying password will be used. The PushButton value indicates that the
754 * PIN is the all-zero value reserved for the PushButton Configuration
755 * method.
756 *
757 * The Registrar-specified value indicates a PIN that has been obtained from
758 * the Registrar (via a display or other out-of-band method). This value may
759 * be further augmented with the optional 'Identity' attribute in M1. This
760 * augmentation is useful when multiple predefined UserID/PIN pairs have been
761 * established by a Registrar such as an authenticator used for Hotspot
762 * access. If the Device Password ID in M1 is not one of the predefined or
763 * reserved values, it corresponds to a password given to the Registrar as an
764 * OOB Device Password.
765 *
766 \code
767
768 Value Description
769
770 0x0000 Default (PIN)
771 0x0001 User-specified
772 0x0002 Machine-specified
773 0x0003 Rekey
774 0x0004 PushButton
775 0x0005 Registrar-specified
776 0x0006 - 0x000F Reserved
777
778 \endcode
779 *
780 *
781 */
782
783TLV DevicePasswordID ( TLV_DEVICE_PASSWORD_ID ) ( 2 : 2 ) MSB
784{
785 id, 2;
786}
787
788
789/**
790 * \brief Primary Device Type
791 *
792 *
793 * This attribute contains the primary type of the device. Its format
794 * follows:
795 *
796 \code
797
798 0 1 2 3
799 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
800 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
801 | Attribute ID | Length |
802 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
803 | Category ID | OUI (1-2) |
804 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
805 | OUI (3-4) | Sub Category ID |
806 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
807
808 \endcode
809 *
810 * Vendor-specific sub-categories are designated by setting the OUI to the
811 * value associated with that vendor. Note that a four-byte subdivided OUI
812 * is used. For the predefined values, the Wi-Fi Alliance OUI of 00 50 F2 04
813 * is used. The predefined values for Category ID and Sub Category ID are
814 * provided in the next table. There is no way to indicate a vendor-specific
815 * main device category. The OUI applies only to the interpretation of the
816 * Sub Category. If a vendor does not use sub categories for their OUI, the
817 * three-byte OUI occupies the first three bytes of the OUI field and the
818 * fourth byte is set to zero.
819 *
820 *
821 \code
822
823 Category ID Value Sub Category ID Value
824 Computer 1 PC 1
825 Server 2
826 Media Center 3
827 Input Device 2
828 Printers, Scanners, Printer 1
829 Faxes and Copiers 3 Scanner 2
830 Camera 4 Digital Still Camera 1
831 Storage 5 NAS 1
832 Network AP 1
833 Infrastructure 6 Router 2
834 Switch 3
835 Displays 7 Television 1
836 Electronic Picture Frame 2
837 Projector 3
838 Multimedia Devices 8 DAR 1
839 PVR 2
840 MCX 3
841 Gaming Devices 9 Xbox 1
842 Xbox360 2
843 Playstation 3
844 Telephone 10 Windows Mobile 1
845
846 \endcode
847 *
848 *
849 */
850
851TLV PrimaryDeviceType ( TLV_PRIMARY_DEVICE_TYPE ) ( 2 : 2 ) MSB
852{
853 primary_category, 2;
854 oui[ 4 ];
855 sub_category, 2;
856}
857
858
859/**
860 * \brief Request Type
861 *
862 *
863 * The Request Type component specifies the mode in which the device will
864 * operate in for this setup exchange. If the device is an Enrollee, it may
865 * send only discovery messages or it may also request that the Registrar
866 * proceed with opening a data connection. This protocol allows Enrollees to
867 * more efficiently discover devices on the network.
868
869 * If the device indicates that it intends to engage setup either as a
870 * Registrar or an Enrollee, the Access Point continues to indicate that it
871 * will operate as an AP in the response. The Request Type attribute is
872 * carried throughout the 802.1X data channel setup process in the Wi-Fi
873 * Protected Setup IE. There are two sub-types of Registrars: WLAN Manager
874 * Registrar indicates that this Registrar intends to manage the AP or STA
875 * settings using UPnP. It will derive a UPnP AP or STA Management key. The
876 * ordinary Registrar type indicates that this Registrar does not intend to
877 * subsequently manage the Enrollee's settings. APs must not derive AP
878 * Management Keys for an ordinary Registrar. If a Registrar does not intend
879 * to be a WLAN Manager Registrar, it should set the Request Type to
880 * Registrar. Doing so avoids needlessly consuming resources on the AP.
881
882 \code
883
884 Request Type Value Description
885 0x00 Enrollee, Info only
886 0x01 Enrollee, open 802.1X
887 0x02 Registrar
888 0x03 WLAN Manager Registrar
889
890 \endcode
891 *
892 *
893 */
894
895TLV RequestType ( TLV_REQUEST_TYPE ) ( 2 : 2 ) MSB
896{
897 reqType, 1;
898}
899
900/**
901 * \brief Response Type
902 *
903 *
904 * The Response Type component specifies the operational mode of the
905 * device for this setup exchange. The Response Type IE is carried
906 * throughout the 802.1X data channel setup process.
907
908 \code
909
910 Response Type Value Description
911 0x00 Enrollee, Info only
912 0x01 Enrollee, open 802.1X
913 0x02 Registrar
914 0x03 AP
915
916\endcode
917 *
918 *
919 */
920
921TLV ResponseType ( TLV_RESPONSE_TYPE ) ( 2 : 2 ) MSB
922{
923 resType, 1;
924}
925
926
927///////////////////////////////////////////////////////////////////////////
928// WiFi Direct/P2P TLVs //
929///////////////////////////////////////////////////////////////////////////
930
931/**
932 * \brief P2P Status Attribute
933 */
934
935TLV P2PStatus ( TLV_P2P_STATUS ) ( 1 : 2 ) LSB
936{
937 status, 1;
938}
939
940
941/**
942 * \brief Minor Reason Code Attribute
943 */
944
945TLV MinorReasonCode ( TLV_MINOR_REASON_CODE ) ( 1 : 2 ) LSB
946{
947 minorReasonCode, 1;
948}
949
950
951/**
952 * \brief P2P Capability Attribute
953 */
954
955TLV P2PCapability ( TLV_P2P_CAPABILITY ) ( 1 : 2 ) LSB
956{
957 deviceCapability, 1;
958 groupCapability, 1;
959}
960
961
962/**
963 * \brief P2P Device Id Attribute
964 */
965
966TLV P2PDeviceId ( TLV_P2P_DEVICE_ID ) ( 1 : 2 ) LSB
967{
968 P2PDeviceAddress[6];
969}
970
971
972/**
973 * \brief Group Owner Intent Attribute
974 */
975
976TLV GOIntent ( TLV_P2P_GROUP_OWNER_INTENT ) ( 1 : 2 ) LSB
977{
978 GOIntent, 1;
979}
980
981
982/**
983 * \brief Configuration Timeout Attribute
984 */
985
986TLV ConfigurationTimeout ( TLV_CONFIGURATION_TIMEOUT ) ( 1 : 2 ) LSB
987{
988 GOConfigTimeout, 1;
989 CLConfigTimeout, 1;
990}
991
992
993/**
994 * \brief Listen Channel Attribute
995 */
996
997TLV ListenChannel ( TLV_LISTEN_CHANNEL ) ( 1 : 2 ) LSB
998{
999 countryString[3];
1000 regulatoryClass, 1;
1001 channel, 1;
1002}
1003
1004
1005/**
1006 * \brief P2P Group BSSID Attribute
1007 */
1008
1009TLV P2PGroupBssid ( TLV_P2P_GROUP_BSSID ) ( 1 : 2 ) LSB
1010{
1011 P2PGroupBssid[6];
1012}
1013
1014
1015/**
1016 * \brief Extended Listen Attribute
1017 */
1018
1019TLV ExtendedListenTiming ( TLV_EXTENDED_LISTEN_TIMING ) ( 1 : 2 ) LSB
1020{
1021 availibilityPeriod, 2;
1022 availibilityInterval, 2;
1023}
1024
1025
1026/**
1027 * \brief Intended P2P Interface Address Attribute
1028 */
1029
1030TLV IntendedP2PInterfaceAddress ( TLV_INTENDED_P2P_INTERFACE_ADDRESS ) ( 1 : 2 ) LSB
1031{
1032 P2PInterfaceAddress[6];
1033}
1034
1035
1036/**
1037 * \brief P2P Manageability Attribute
1038 */
1039
1040TLV P2PManageability ( TLV_P2P_MANAGEABILITY ) ( 1 : 2 ) LSB
1041{
1042 manageability, 1;
1043}
1044
1045
1046/**
1047 * \brief ChannelList Attribute
1048 */
1049
1050TLV ChannelList ( TLV_CHANNEL_LIST ) ( 1 : 2 ) LSB
1051{
1052 countryString[3];
1053 channelList[0..251];
1054}
1055
1056
1057/**
1058 * \brief Notice of Absence
1059 */
1060
1061TLV NoticeOfAbsence ( TLV_NOTICE_OF_ABSENCE ) ( 1 : 2 ) LSB
1062{
1063 index, 1;
1064 CTSWindowOppPS, 1;
1065 NoADesc[0..36];
1066}
1067
1068/**
1069 * \brief P2P Device Info Attribute
1070 */
1071
1072TLV P2PDeviceInfo ( TLV_P2P_DEVICE_INFO ) ( 1 : 2 ) LSB
1073{
1074 P2PDeviceAddress[6];
1075 configMethod, 2 , FLIPBYTEORDER;
1076 primaryDeviceType[8];
1077 MANDATORYTLV DeviceName;
1078}
1079
1080
1081/**
1082 * \brief P2P Group Info Attribute
1083 */
1084
1085TLV P2PGroupInfo ( TLV_P2P_GROUP_INFO ) ( 1 : 2 ) LSB
1086{
1087 P2PClientInfoDesc[0..1024];
1088}
1089
1090
1091/**
1092 * \brief P2P Group Id Attribute
1093 */
1094
1095TLV P2PGroupId ( TLV_P2P_GROUP_ID ) ( 1 : 2 ) LSB
1096{
1097 deviceAddress[6];
1098 ssid[0..32];
1099}
1100
1101
1102/**
1103 * \brief P2P Interface Attribute
1104 */
1105
1106TLV P2PInterface ( TLV_P2P_INTERFACE ) ( 1 : 2 ) LSB
1107{
1108 P2PDeviceAddress[6];
1109}
1110
1111
1112/**
1113 * \brief Operating Channel Attribute
1114 */
1115
1116TLV OperatingChannel ( TLV_OPERATING_CHANNEL ) ( 1 : 2 ) LSB
1117{
1118 countryString[3];
1119 regulatoryClass, 1;
1120 channel, 1;
1121}
1122
1123
1124/**
1125 * \brief Invitation Flags Attribute
1126 */
1127
1128TLV InvitationFlags ( TLV_INVITATION_FLAGS ) ( 1 : 2 ) LSB
1129{
1130 invitationFlags, 1;
1131}
1132
1133/**
1134 * \brief Vendor Extension
1135 *
1136 * This variable permits vendor extensions in the Wi-Fi Simple
1137 * Configuration TLV framework. The Vendor Extension figure
1138 * illustrates the implementation of vendor extensions. Vendor
1139 * ID is the SMI network management private enterprise code
1140 *
1141 * +-----------+----------------------+
1142 * | Vendor ID | Vendor Data |
1143 * +-----------+----------------------+
1144 * |<--- 3 --->|<----- 1 - 1021 ----->|
1145 *
1146 */
1147
1148TLV VendorExtension ( TLV_VENDOR_EXTENSION ) ( 2 : 2 ) MSB
1149{
1150 /*
1151 * vendorId is the SMI network management private enterprise code.
1152 * WFA Vendor ID 0x00372A
1153 *
1154 */
1155 vendorId[ 3 ];
1156
1157 /**
1158 * \breif Version2
1159 *
1160 * The Version2 field specifies the version Wi-Fi Simple
1161 * Configuration implemented by the device sending this attribute.
1162 * The one-byte field is broken into a four-bit major part using
1163 * the top MSBs and four-bit minor part using the LSBs. As an example,
1164 * version 3.2 would be 0x32. This subelement was added in the
1165 * specification version 2.0 and if the subelement is not included
1166 * in a message, the transmitter of the message is assumed to
1167 * use version 1.0.
1168 *
1169 */
1170 OPTIONALTLV TLV Version2 ( TLV_VERSION2 ) ( 1 : 1 ) MSB
1171 {
1172 {
1173 minor: 4;
1174 major: 4;
1175 }
1176 }
1177 /**
1178 * \brief AuthorizedMACs
1179 *
1180 * This subelement contains a list of Enrollee MAC addresses (each
1181 * being six bytes in length) that have been registered to start WSC.
1182 * The AP includes this field in Beacon and Probe Response frames so
1183 * Enrollees can tell if they have been registered to start WSC. There
1184 * may be multiple Enrollees active on the network, but not all of them have
1185 * been registered to start WSC. This element allows an Enrollee to detect
1186 * if they should start WSC with the AP. The AuthorizedMACs field augments
1187 * the use of the Selected Registrar.
1188 *
1189 */
1190 OPTIONALTLV TLV AuthorizedMACs ( TLV_AUTHORIZED_MAC ) ( 1 : 1 ) MSB
1191 {
1192 mac[6];
1193 }
1194
1195 /**
1196 * \brief Request to Enroll
1197 *
1198 * This optional subelement in the WSC IE in Probe Request or M1 indicates
1199 * the desire to enroll in the network by setting its value to TRUE. If the
1200 * Registrar gets this subelement it can use this as a trigger that a device
1201 * wants to enroll (maybe an indication can be shown to the user). The device
1202 * must set it to FALSE after the registration protocol completion.
1203 *
1204 */
1205 OPTIONALTLV TLV RequestToEnroll( TLV_REQUEST_TO_ENROLL ) ( 1 : 1 ) MSB
1206 {
1207 req, 1;
1208 }
1209}
1210
1211/**
1212 * \brief Requested Device Type
1213 *
1214 * This attribute contains the requested device type of a Wi-Fi
1215 * Direct device.
1216 *
1217 * This attribute allows a device to specify the Primary Device Type
1218 * or the Secondary Device Type of other devices it is interested in.
1219 * Only a device that receives a Probe Request containing a WSC IE with
1220 * this attribute and with a Primary Device Type or Secondary Device Type
1221 * that matches the Requested Device Type will respond with a Probe Response.
1222 *
1223 * Its format and contents is identical to the 'Primary Device Type'.
1224 *
1225 * Both the Category ID and Sub Category ID can be used as a filter. If only
1226 * looking for devices with a certain Category ID, the OUI and Sub Category ID
1227 * fields will have to be set to zero.
1228 *
1229 */
1230TLV RequestDeviceType ( TLV_REQUESTED_DEVICE_TYPE ) ( 2 : 2 ) MSB
1231{
1232 primary_category, 2;
1233 oui[ 4 ];
1234 sub_category, 2;
1235}
1236
1237/////////////////////////////////////////////////////////////////////////////
1238// Information Elements
1239
1240IE SSID (EID_SSID) // C.f. Sec. 7.3.2.1
1241{
1242 ssid[0..32];
1243}
1244
1245IE SuppRates (EID_SUPP_RATES) // 7.3.2.2
1246{
1247 rates[0..SIR_MAC_MAX_NUMBER_OF_RATES];
1248}
1249
1250IE FHParamSet (EID_FH_PARAM_SET) // 7.3.2.3
1251{
1252 dwell_time, 2;
1253 hop_set, 1;
1254 hop_pattern, 1;
1255 hop_index, 1;
1256}
1257
1258IE DSParams (EID_DS_PARAM_SET) // 7.3.2.4
1259{
1260 curr_channel, 1;
1261}
1262
1263IE CFParams (EID_CF_PARAM_SET) // 7.3.2.5
1264{
1265 cfp_count, 1;
1266 cfp_period, 1;
1267 cfp_maxduration, 2;
1268 cfp_durremaining, 2;
1269}
1270
1271IE TIM (EID_TIM) // 7.3.2.6
1272{
1273 dtim_count, 1;
1274 dtim_period, 1;
1275 bmpctl, 1;
1276 vbmp[1..251];
1277}
1278
1279IE IBSSParams (EID_IBSS_PARAM_SET) // 7.3.2.7
1280{
1281 atim, 2;
1282}
1283
1284IE ChallengeText (EID_CHALLENGE_TEXT) // 7.3.2.8
1285{
1286 text[1..253];
1287}
1288
1289IE RequestedInfo (EID_REQUEST) // 7.3.2.12
1290{
1291 requested_eids[0..255];
1292}
1293
1294IE Country (EID_COUNTRY) // 7.3.2.9
1295{
1296 country[3];
1297 OPTIONAL triplets[3][0..84];
1298}
1299
1300IE FHParams (EID_FH_PATTERN) // 7.3.2.10
1301{
1302 radix, 1;
1303 nchannels, 1;
1304}
1305
1306IE FHPattTable (EID_FH_PATT_TABLE) // 7.3.2.11
1307{
1308 flag, 1;
1309 nsets, 1;
1310 modulus, 1;
1311 offset, 1;
1312 randtable[0..251];
1313}
1314
1315IE ERPInfo (EID_ERP_INFO) // 7.3.2.13
1316{
1317 {
1318 non_erp_present : 1;
1319 use_prot: 1;
1320 barker_preamble: 1;
1321 unused: 5;
1322 }
1323}
1324
1325IE ExtSuppRates (EID_EXT_SUPP_RATES) // 7.3.2.14
1326{
1327 rates[1..SIR_MAC_MAX_NUMBER_OF_RATES];
1328}
1329
1330IE PowerConstraints (EID_POWER_CONSTRAINTS) // 7.3.2.15
1331{
1332 localPowerConstraints, 1;
1333}
1334
1335IE PowerCaps (EID_POWER_CAPABILITY) // 7.3.2.16
1336{
1337 minTxPower, 1;
1338 maxTxPower, 1;
1339}
1340
1341IE TPCRequest (EID_TPC_REQUEST) // 7.3.2.17
1342{ }
1343
1344IE TPCReport (EID_TPC_REPORT) // 7.3.2.18
1345{
1346 tx_power, 1;
1347 link_margin, 1;
1348}
1349
1350IE SuppChannels (EID_SUPPORTED_CHANNELS) // 7.2.3.19
1351{
1352 bands[2][1..48];
1353}
1354
1355IE SuppOperatingClasses (EID_SUPPORTED_OPER_CLASSES)
1356{
1357 classes[1..32];
1358}
1359
1360IE ChanSwitchAnn (EID_CHANNEL_SWITCH_ANN) // 7.3.2.20
1361{
1362 switchMode, 1;
1363 newChannel, 1;
1364 switchCount, 1;
1365}
1366
1367IE ExtChanSwitchAnn (EID_EXT_CHANNEL_SWITCH_ANN) // 7.3.2.20a
1368{
1369 secondaryChannelOffset, 1;
1370}
1371
1372IE Quiet (EID_QUIET) // 7.3.2.23
1373{
1374 count, 1;
1375 period, 1;
1376 duration, 2;
1377 offset, 2;
1378}
1379
1380IE RSN (EID_RSN) // 7.3.2.25
1381{
1382 // The version is 2 octets, and we only support version 1.
1383 version, 2 MUSTBE 1;
1384 // The next four octets will be the Group Cipher Suite
1385 gp_cipher_suite[4];
1386 // The IE *may* stop here; if there's any more, we should see two more
1387 // octets giving the number of Pairwise Cipher Suites
1388 OPTIONAL pwise_cipher_suite_count, 2;
1389 // I don't see anything in the Standard limiting the number of Pairwise
1390 // Cypher Suites, other than the maximum length of an IE, which limits us
1391 // to 61. However, that seems needlessly wasteful of space.
1392 pwise_cipher_suites[4][0..4] COUNTIS pwise_cipher_suite_count;
1393 // Optional count of AKM suite selectors
1394 OPTIONAL akm_suite_count, 2;
1395 // Again, I see nothing in the Standard explicitly limiting the number of
1396 // AKM suite selectors other than the maximum size of an IE.
1397 akm_suites[4][0..4] COUNTIS akm_suite_count;
1398 OPTIONAL RSN_Cap[2];
1399 // Finally, the IE may contain zero or more PMKIDs:
1400 OPTIONAL pmkid_count, 2;
1401 pmkid[16][0..4] COUNTIS pmkid_count;
1402 OPTIONAL gp_mgmt_cipher_suite[4];
1403}
1404
1405IE RSNOpaque (EID_RSN) // 7.3.2.25
1406{
1407 data[ 6..253 ];
1408}
1409
1410IE WAPI (EID_WAPI) // 7.3.2.25
1411{
1412 // The version is 2 octets, and we only support version 1.
1413 version, 2 MUSTBE 1;
1414 // count of AKM suite selectors
1415 akm_suite_count, 2;
1416 // Again, I see nothing in the Standard explicitly limiting the number of
1417 // AKM suite selectors other than the maximum size of an IE.
1418 akm_suites[4][0..4] COUNTIS akm_suite_count;
1419 // we should see two more
1420 // octets giving the number of Unicast Cipher Suites
1421 unicast_cipher_suite_count, 2;
1422 // I don't see anything in the Standard limiting the number of Pairwise
1423 // Cypher Suites, other than the maximum length of an IE, which limits us
1424 // to 61. However, that seems needlessly wasteful of space.
1425 unicast_cipher_suites[4][0..4] COUNTIS unicast_cipher_suite_count;
1426 // The next four octets will be the Multicast Cipher Suite
1427 multicast_cipher_suite[4];
1428 // WAPI capabilities
1429 {
1430 preauth: 1;
1431 reserved: 15;
1432 }
1433 // Finally, the IE may contain zero or more BKIDs:
1434 OPTIONAL bkid_count, 2;
1435 bkid[16][0..4] COUNTIS bkid_count;
1436}
1437
1438IE WAPIOpaque (EID_WAPI) // 7.3.2.25
1439{
1440 data[ 6..253 ];
1441}
1442
1443IE QBSSLoad (EID_QBSS_LOAD) // 7.3.2.28
1444{
1445 stacount, 2;
1446 chautil, 1;
1447 avail, 2;
1448}
1449
1450IE EDCAParamSet (EID_EDCA_PARAM_SET) // 7.3.2.29
1451{
1452 qos, 1; // ToDo: This is a bitfield whose format
1453 // depends on whether this is from an AP
1454 // or a STA, information which I'm not
1455 // sure we have at parse time...
1456 reserved, 1;
1457 {
1458 acbe_aifsn: 4;
1459 acbe_acm: 1;
1460 acbe_aci: 2;
1461 unused1: 1;
1462 }
1463 {
1464 acbe_acwmin: 4;
1465 acbe_acwmax: 4;
1466 }
1467 acbe_txoplimit, 2;
1468 {
1469 acbk_aifsn: 4;
1470 acbk_acm: 1;
1471 acbk_aci: 2;
1472 unused2: 1;
1473 }
1474 {
1475 acbk_acwmin: 4;
1476 acbk_acwmax: 4;
1477 }
1478 acbk_txoplimit, 2;
1479 {
1480 acvi_aifsn: 4;
1481 acvi_acm: 1;
1482 acvi_aci: 2;
1483 unused3: 1;
1484 }
1485 {
1486 acvi_acwmin: 4;
1487 acvi_acwmax: 4;
1488 }
1489 acvi_txoplimit, 2;
1490 {
1491 acvo_aifsn: 4;
1492 acvo_acm: 1;
1493 acvo_aci: 2;
1494 unused4: 1;
1495 }
1496 {
1497 acvo_acwmin: 4;
1498 acvo_acwmax: 4;
1499 }
1500 acvo_txoplimit, 2;
1501}
1502
1503IE TSPEC (EID_TSPEC) // 7.3.2.30
1504{
1505
1506 // TS Info
1507 {
1508 traffic_type: 1;
1509 tsid: 4;
1510 direction: 2;
1511 access_policy: 2;
1512 aggregation: 1;
1513 psb: 1;
1514 user_priority: 3;
1515 tsinfo_ack_pol: 2;
1516 }
1517 {
1518 schedule: 1;
1519 unused: 7;
1520 }
1521
1522 // Nominal MSDU Size
1523 {
1524 size: 15;
1525 fixed: 1;
1526 }
1527
1528 max_msdu_size, 2;
1529 min_service_int, 4;
1530 max_service_int, 4;
1531 inactivity_int, 4;
1532 suspension_int, 4;
1533 service_start_time, 4;
1534 min_data_rate, 4;
1535 mean_data_rate, 4;
1536 peak_data_rate, 4;
1537 burst_size, 4;
1538 delay_bound, 4;
1539 min_phy_rate, 4;
1540 surplus_bw_allowance, 2;
1541 medium_time, 2;
1542
1543} // End IE TSPEC.
1544
1545IE TCLAS (EID_TCLAS) // 7.3.2.31
1546{
1547 user_priority, 1;
1548 classifier_type, 1;
1549 classifier_mask, 1;
1550 UNION info (DISCRIMINATOR classifier_type)
1551 {
1552 EthParams (classifier_type IS 0)
1553 {
1554 source[6];
1555 dest[6];
1556 type, 2;
1557 }
1558 IpParams (classifier_type IS 1)
1559 {
1560 version, 1;
1561 UNION params (DISCRIMINATOR version)
1562 {
1563 IpV4Params (version IS 4)
1564 {
1565 source[4];
1566 dest[4];
1567 src_port, 2;
1568 dest_port, 2;
1569 DSCP, 1;
1570 proto, 1;
1571 reserved, 1;
1572 }
1573 IpV6Params (version IS 6)
1574 {
1575 source[16];
1576 dest[16];
1577 src_port, 2;
1578 dest_port, 2;
1579 flow_label[3];
1580 }
1581 };
1582 }
1583 Params8021dq (classifier_type IS 2)
1584 {
1585 tag_type, 2;
1586 }
1587 };
1588} // End IE TCLASS
1589
1590const EID_RRM_BEACON_REPORTING = 1;
1591const EID_RRM_BCN_REPORTING_DETAIL = 2;
1592
1593IE BeaconReporting (EID_RRM_BEACON_REPORTING)
1594{
1595 reportingCondition, 1;
1596 threshold, 1;
1597}
1598
1599IE BcnReportingDetail (EID_RRM_BCN_REPORTING_DETAIL)
1600{
1601 reportingDetail, 1;
1602}
1603
1604IE APChannelReport (EID_AP_CHAN_REPORT)
1605{
1606 regulatoryClass, 1;
1607 channelList[0..50];
1608}
1609
1610IE MeasurementRequest (EID_MEAS_REQUEST) // 7.3.2.21
1611{
1612 measurement_token, 1;
1613
1614 // Measurement Request Mode
1615 {
1616 parallel: 1;
1617 enable: 1;
1618 request: 1;
1619 report: 1;
1620 durationMandatory: 1;
1621 unused: 3;
1622 }
1623
1624 measurement_type, 1;
1625 UNION measurement_request (DISCRIMINATOR measurement_type)
1626 {
1627 Basic (measurement_type IS 0)
1628 {
1629 channel_no, 1;
1630 meas_start_time[8];
1631 meas_duration, 2;
1632 }
1633 CCA (measurement_type IS 1)
1634 {
1635 channel_no, 1;
1636 meas_start_time[8];
1637 meas_duration, 2;
1638 }
1639 RPIHistogram (measurement_type IS 2)
1640 {
1641 channel_no, 1;
1642 meas_start_time[8];
1643 meas_duration, 2;
1644 }
1645 Beacon (measurement_type IS 5)
1646 {
1647 regClass, 1;
1648 channel, 1;
1649 randomization, 2;
1650 meas_duration, 2;
1651 meas_mode, 1;
1652 BSSID[6];
1653 OPTIE SSID;
1654 OPTIE BeaconReporting;
1655 OPTIE BcnReportingDetail;
1656 OPTIE RequestedInfo;
1657 OPTIE APChannelReport[0..2];
1658 //OPTIONAL vendor_specific[1..239];
1659 }
1660
1661 };
1662}
1663
1664const EID_BCN_REPORT_FRAME_BODY = 1;
1665IE BeaconReportFrmBody (EID_BCN_REPORT_FRAME_BODY)
1666{
1667 reportedFields[0..224];
1668}
1669
1670IE MeasurementReport (EID_MEAS_REPORT) // 7.3.2.22
1671{
1672 token, 1;
1673 // Measurement Report Mode
1674 {
1675 late: 1;
1676 incapable: 1;
1677 refused: 1;
1678 unused: 5;
1679 }
1680 type, 1;
1681 OPTIONAL UNION report (DISCRIMINATOR type)
1682 {
1683 Basic (type IS 0) // 7.3.2.22.1
1684 {
1685 channel, 1;
1686 meas_start_time, 8;
1687 meas_duration, 2;
1688 // Map
1689 {
1690 bss: 1;
1691 ofdm_preamble: 1;
1692 unid_signal: 1;
1693 rader: 1;
1694 unmeasured: 1;
1695 unused: 3;
1696 }
1697 }
1698 CCA (type IS 1)
1699 {
1700 channel, 1;
1701 meas_start_time, 8;
1702 meas_duration, 2;
1703 cca_busy_fraction, 1;
1704 }
1705 RPIHistogram (type IS 2)
1706 {
1707 channel, 1;
1708 meas_start_time, 8;
1709 meas_duration, 2;
1710 rpi0_density, 1;
1711 rpi1_density, 1;
1712 rpi2_density, 1;
1713 rpi3_density, 1;
1714 rpi4_density, 1;
1715 rpi5_density, 1;
1716 rpi6_density, 1;
1717 rpi7_density, 1;
1718 }
1719 Beacon (type IS 5)
1720 {
1721 regClass, 1;
1722 channel, 1;
1723 meas_start_time, 8;
1724 meas_duration, 2;
1725 // reported_frame_info,
1726 {
1727 condensed_PHY: 7;
1728 reported_frame_type: 1;
1729 }
1730 RCPI, 1;
1731 RSNI, 1;
1732 BSSID[6];
1733 antenna_id, 1;
1734 parent_TSF, 4;
1735 OPTIE BeaconReportFrmBody;
1736 //IE vendor_specific
1737 }
1738 };
1739}
1740
1741IE TSDelay (EID_TS_DELAY) // 7.3.2.32
1742{
1743 delay, 4;
1744}
1745
1746IE TCLASSPROC (EID_TCLASS_PROC) // 7.3.2.33
1747{
1748 processing, 1;
1749}
1750
1751IE Schedule (EID_SCHEDULE) // 7.3.2.34
1752{
1753 {
1754 aggregation: 1;
1755 tsid: 4;
1756 direction: 2;
1757 reserved: 9;
1758 }
1759 service_start_time, 4;
1760 service_interval, 4;
1761 max_service_dur, 2;
1762 spec_interval, 2;
1763}
1764
1765IE QOSCapsAp (EID_QOS_CAPABILITY) // 7.3.2.35
1766{
1767 {
1768 count: 4;
1769 qack: 1;
1770 qreq: 1;
1771 txopreq: 1;
1772 reserved: 1;
1773 }
1774}
1775
1776IE QOSCapsStation (EID_QOS_CAPABILITY) // 7.3.2.35
1777{
1778 {
1779 acvo_uapsd: 1;
1780 acvi_uapsd: 1;
1781 acbk_uapsd: 1;
1782 acbe_uapsd: 1;
1783 qack: 1;
1784 max_sp_length: 2;
1785 more_data_ack: 1;
1786 }
1787}
1788
1789IE LinkIdentifier (EID_LINK_IDENTIFIER) // 7.3.2.62
1790{
1791 bssid[6];
1792 InitStaAddr[6];
1793 RespStaAddr[6];
1794}
1795
1796IE WPA (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x01)
1797{
1798 // This IE's first two octets should be interpreted as a version number;
1799 // we only support version 1.
1800 version, 2 MUSTBE 1;
1801 // A four-octet Multicast Cipher may or may not appear next (hence the
1802 // OPTIONAL keyword)
1803 OPTIONAL multicast_cipher[4];
1804 // Optional Unicast Cipher count
1805 OPTIONAL unicast_cipher_count, 2;
1806 // Next comes an array of four-octet Cipher Suite selectors; the COUNTIS
1807 // clause indicates that the actual number of selectors seen is in the
1808 // member 'unicast_cipher_count'.
1809 unicast_ciphers[4][0..4] COUNTIS unicast_cipher_count;
1810 // (Optional) Authentication suites:
1811 OPTIONAL auth_suite_count, 2;
1812 auth_suites[4][0..4] COUNTIS auth_suite_count;
1813 // This field is declared optional as per bugs 15234, 14755, & 14991.
1814 OPTIONAL caps, 2;
1815}
1816
1817IE WPAOpaque (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x01)
1818{
1819 data[ 2..249 ];
1820}
1821
1822IE WMMInfoStation (EID_VENDOR_SPECIFIC) OUI(0x00, 0x50, 0xF2, 0x02, 0x00)
1823{
1824 // This IE contains the QoS Info field when sent from WMM Station
1825 version, 1;
1826 {
1827 acvo_uapsd: 1;
1828 acvi_uapsd: 1;
1829 acbk_uapsd: 1;
1830 acbe_uapsd: 1;
1831 reserved1: 1;
1832 max_sp_length: 2;
1833 reserved2: 1;
1834 }
1835}
1836
1837IE WMMInfoAp (EID_VENDOR_SPECIFIC) OUI(0x00, 0x50, 0xF2, 0x02, 0x00)
1838{
1839 // This IE contains the QoS Info field when sent from WMM AP
1840 version, 1;
1841 {
1842 param_set_count: 4;
1843 reserved: 3;
1844 uapsd: 1;
1845 }
1846}
1847
1848
1849IE WMMParams (EID_VENDOR_SPECIFIC) OUI(0x00, 0x50, 0xF2, 0x02, 0x01)
1850{
1851 version, 1 MUSTBE 1;
1852 qosInfo, 1; // ToDo: This is actually a
1853 // bitfield, but it's format
1854 // varies depending on whether
1855 // the sender is a STA or AP...
1856 reserved2, 1;
1857 {
1858 acbe_aifsn: 4;
1859 acbe_acm: 1;
1860 acbe_aci: 2;
1861 unused1: 1;
1862 }
1863 {
1864 acbe_acwmin: 4;
1865 acbe_acwmax: 4;
1866 }
1867 acbe_txoplimit, 2;
1868 {
1869 acbk_aifsn: 4;
1870 acbk_acm: 1;
1871 acbk_aci: 2;
1872 unused2: 1;
1873 }
1874 {
1875 acbk_acwmin: 4;
1876 acbk_acwmax: 4;
1877 }
1878 acbk_txoplimit, 2;
1879 {
1880 acvi_aifsn: 4;
1881 acvi_acm: 1;
1882 acvi_aci: 2;
1883 unused3: 1;
1884 }
1885 {
1886 acvi_acwmin: 4;
1887 acvi_acwmax: 4;
1888 }
1889 acvi_txoplimit, 2;
1890 {
1891 acvo_aifsn: 4;
1892 acvo_acm: 1;
1893 acvo_aci: 2;
1894 unused4: 1;
1895 }
1896 {
1897 acvo_acwmin: 4;
1898 acvo_acwmax: 4;
1899 }
1900 acvo_txoplimit, 2;
1901}
1902
1903IE WMMTSPEC (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xf2, 0x02, 0x02)
1904{
1905 version, 1 MUSTBE 1;
1906
1907 // TS Info
1908 {
1909 traffic_type: 1;
1910 tsid: 4;
1911 direction: 2;
1912 access_policy: 2;
1913 aggregation: 1;
1914 psb: 1;
1915 user_priority: 3;
1916 tsinfo_ack_pol: 2;
1917 }
1918 {
1919 tsinfo_rsvd: 7;
1920 burst_size_defn: 1;
1921 }
1922
1923 // Nominal MSDU Size
1924 {
1925 size: 15;
1926 fixed: 1;
1927 }
1928
1929 max_msdu_size, 2;
1930 min_service_int, 4;
1931 max_service_int, 4;
1932 inactivity_int, 4;
1933 suspension_int, 4;
1934 service_start_time, 4;
1935 min_data_rate, 4;
1936 mean_data_rate, 4;
1937 peak_data_rate, 4;
1938 burst_size, 4;
1939 delay_bound, 4;
1940 min_phy_rate, 4;
1941 surplus_bw_allowance, 2;
1942 medium_time, 2;
1943
1944} // End IE WMMTSpec.
1945
1946IE WMMCaps (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x05)
1947{
1948 version, 1 MUSTBE 1;
1949 {
1950 reserved: 4;
1951 qack: 1;
1952 queue_request: 1;
1953 txop_request: 1;
1954 more_ack: 1;
1955 }
1956}
1957
1958IE WMMTCLAS (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x06)
1959{
1960 version, 1 MUSTBE 1;
1961
1962 user_priority, 1;
1963 classifier_type, 1;
1964 classifier_mask, 1;
1965 UNION info (DISCRIMINATOR classifier_type)
1966 {
1967 EthParams (classifier_type IS 0)
1968 {
1969 source[6];
1970 dest[6];
1971 type, 2;
1972 }
1973 IpParams (classifier_type IS 1)
1974 {
1975 version, 1;
1976 UNION params (DISCRIMINATOR version)
1977 {
1978 IpV4Params (version IS 4)
1979 {
1980 source[4];
1981 dest[4];
1982 src_port, 2;
1983 dest_port, 2;
1984 DSCP, 1;
1985 proto, 1;
1986 reserved, 1;
1987 }
1988 IpV6Params (version IS 6)
1989 {
1990 source[16];
1991 dest[16];
1992 src_port, 2;
1993 dest_port, 2;
1994 flow_label[3];
1995 }
1996 };
1997 }
1998 Params8021dq (classifier_type IS 2)
1999 {
2000 tag_type, 2;
2001 }
2002 };
2003
2004}
2005
2006IE WMMTCLASPROC (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x07)
2007{
2008 version, 1 MUSTBE 1;
2009 processing, 1;
2010}
2011
2012IE WMMTSDelay (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x08)
2013{
2014 version, 1 MUSTBE 1;
2015 delay, 4;
2016}
2017
2018IE WMMSchedule (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x09)
2019{
2020 version, 1 MUSTBE 1;
2021
2022 {
2023 aggregation: 1;
2024 tsid: 4;
2025 direction: 2;
2026 reserved: 9;
2027 }
2028
2029 service_start_time, 4;
2030 service_interval, 4;
2031 max_service_dur, 2;
2032 spec_interval, 2;
2033}
2034
2035IE ESERadMgmtCap (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x01)
2036{
2037
2038 mgmt_state, 1;
2039
2040 {
2041 mbssid_mask: 3;
2042 reserved: 5;
2043 }
2044
2045}
2046
2047IE ESETrafStrmMet (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x07)
2048{
2049 tsid, 1;
2050 state, 1;
2051 msmt_interval, 2;
2052}
2053
2054IE ESETrafStrmRateSet (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x08)
2055{
2056 tsid, 1;
2057 tsrates[0..8];
2058}
2059
2060IE ESEVersion (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x03)
2061{
2062 version, 1;
2063}
2064
2065IE ESETxmitPower (EID_ESE_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x00)
2066{
2067 power_limit, 1;
2068 reserved, 1;
2069}
2070
2071IE ESECckmOpaque (EID_ESE_CCKM_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x00)
2072{
2073 data[ 6..20 ];
2074}
2075
2076IE RRMEnabledCap (EID_RRM_ENABLED_CAPS)
2077{
2078 //Capability bitmap
2079 {
2080 LinkMeasurement: 1;
2081 NeighborRpt: 1;
2082 parallel: 1;
2083 repeated: 1;
2084 BeaconPassive: 1;
2085 BeaconActive: 1;
2086 BeaconTable: 1;
2087 BeaconRepCond: 1;
2088 }
2089 {
2090 FrameMeasurement: 1;
2091 ChannelLoad: 1;
2092 NoiseHistogram: 1;
2093 statistics: 1;
2094 LCIMeasurement: 1;
2095 LCIAzimuth: 1;
2096 TCMCapability: 1;
2097 triggeredTCM: 1;
2098 }
2099 {
2100 APChanReport: 1;
2101 RRMMIBEnabled: 1;
2102 operatingChanMax: 3;
2103 nonOperatinChanMax: 3;
2104 }
2105 {
2106 MeasurementPilot: 3;
2107 MeasurementPilotEnabled: 1;
2108 NeighborTSFOffset: 1;
2109 RCPIMeasurement: 1;
2110 RSNIMeasurement: 1;
2111 BssAvgAccessDelay: 1;
2112 }
2113 {
2114 BSSAvailAdmission: 1;
2115 AntennaInformation: 1;
2116 reserved: 6;
2117 }
2118}
2119
2120IE MeasurementPilot (EID_RRM_MEAS_PILOT_TX_INFO)
2121{
2122 measurementPilot, 1;
2123 vendorSpecific[0..255]; //Should be an IE. But currently only one level of nesting allowed. Can ignore for now.
2124}
2125
2126IE MultiBssid (EID_MULTIPLE_BSSID)
2127{
2128 maxBSSIDIndicator, 1;
2129 vendorSpecific[0..255];
2130}
2131
2132IE OBSSScanParameters (EID_OBSS_SCAN_PARAMETERS)
2133{
2134 obssScanPassiveDwell, 2;
2135 obssScanActiveDwell, 2;
2136 bssChannelWidthTriggerScanInterval, 2;
2137 obssScanPassiveTotalPerChannel, 2;
2138 obssScanActiveTotalPerChannel, 2;
2139 bssWidthChannelTransitionDelayFactor, 2;
2140 obssScanActivityThreshold, 2;
2141}
2142
2143const EID_RRM_NBR_RPT_TSF = 1;
2144const EID_RRM_NBR_CD_COUNTRY = 2;
2145const EID_RRM_NBR_MSMT_PILOT_TX_INFO = 66;
2146
2147IE NeighborReport (EID_NEIGHBOR_REPORT)
2148{
2149 bssid[6];
2150 //Bssid Info
2151 {
2152 APReachability: 2;
2153 Security: 1;
2154 KeyScope: 1;
2155 //Capabilities
2156 SpecMgmtCap: 1;
2157 QosCap: 1;
2158 apsd: 1;
2159 rrm: 1;
2160 }
2161 //Capabilities contd.
2162 {
2163 DelayedBA: 1;
2164 ImmBA: 1;
2165 //Capabilities end.
2166 MobilityDomain: 1;
2167 reserved: 5;
2168 }
2169
2170 reserved1, 2; //part of BSSID Info.
2171
2172 regulatoryClass, 1;
2173 channel, 1;
2174 PhyType, 1;
2175 OPTIE IE TSFInfo (EID_RRM_NBR_RPT_TSF)
2176 {
2177 TsfOffset, 2;
2178 BeaconIntvl, 2;
2179 }
2180 OPTIE IE CondensedCountryStr (EID_RRM_NBR_CD_COUNTRY)
2181 {
2182 countryStr[2];
2183 }
2184 OPTIE IE MeasurementPilot; // (EID_RRM_NBR_MSMT_PILOT_TX_INFO)
2185// {
2186// measurementPilot, 1;
2187// vendorSpecific[0..255]; //Should be an IE. But currently only one level of nesting allowed. Can ignore for now.
2188// }
2189 OPTIE IE RRMEnabledCap;
2190 OPTIE IE MultiBssid;
2191 //Ignoring vendor specific.
2192}
2193
2194IE RCPIIE (EID_RCPI)
2195{
2196 rcpi, 1;
2197}
2198
2199IE RSNIIE (EID_RSNI)
2200{
2201 rsni, 1;
2202}
2203
2204IE WFATPC (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x08, 0x00)
2205{
2206 txPower, 1;
2207 linkMargin, 1;
2208}
2209
2210IE MobilityDomain (EID_FT_MOBILITY_DOMAIN)
2211{
2212 MDID, 2;
2213 //FT Capability and policy
2214 {
2215 overDSCap: 1;
2216 resourceReqCap: 1;
2217 reserved: 6;
2218 }
2219}
2220const SUB_EID_FT_R1KH_ID = 1;
2221const SUB_EID_FT_GTK = 2;
2222const SUB_EID_FT_R0KH_ID = 3;
2223const SUB_EID_FT_IGTK = 4;
2224IE FTInfo (EID_FT_INFO)
2225{
2226 // MicControl, 2;
2227 {
2228 reserved: 8;
2229 IECount: 8;
2230 }
2231 MIC[16];
2232 Anonce[32];
2233 Snonce[32];
2234
2235 OPTIE IE R1KH_ID (SUB_EID_FT_R1KH_ID)
2236 {
2237 PMK_R1_ID[6];
2238 }
2239
2240 OPTIE IE GTK (SUB_EID_FT_GTK)
2241 {
2242 //Key Info
2243 {
2244 keyId: 2;
2245 reserved: 14;
2246 }
2247 keyLength, 1;
2248 RSC[8];
2249 key[5..32];
2250 }
2251
2252 OPTIE IE R0KH_ID (SUB_EID_FT_R0KH_ID)
2253 {
2254 PMK_R0_ID[1..48];
2255 }
2256
2257 OPTIE IE IGTK (SUB_EID_FT_IGTK)
2258 {
2259 //Key Info
2260 keyID[2];
2261 IPN[6];
2262 keyLength, 1;
2263 key[24];
2264 }
2265}
2266
2267IE TimeoutInterval (EID_TIMEOUT_INTERVAL)
2268{
2269 timeoutType, 1;
2270 timeoutValue, 4;
2271}
2272
2273//TODO: need to define this properly.
2274IE RICData (EID_FT_RIC_DATA)
2275{
2276 Identifier, 1;
2277 resourceDescCount, 1;
2278 statusCode, 2;
2279}
2280
2281IE RICDescriptor (EID_FT_RIC_DESCRIPTOR)
2282{
2283 resourceType, 1;
2284 variableData[0..255]; //Block ack param set...TODO:
2285}
2286
2287IE WscIEOpaque (EID_VENDOR_SPECIFIC) OUI ( 0x00, 0x50, 0xF2, 0x04 )
2288{
2289 data[ 2..249 ];
2290}
2291
2292IE P2PIEOpaque (EID_VENDOR_SPECIFIC) OUI ( 0x50, 0x6F, 0x9A, 0x09 )
2293{
2294 data[ 2..249 ];
2295}
2296
2297IE WFDIEOpaque (EID_VENDOR_SPECIFIC) OUI ( 0x50, 0x6F, 0x9A, 0x0A )
2298{
2299 data[ 2..249 ];
2300}
2301
2302IE PTIControl (EID_PTI_CONTROL) // 7.3.2.65
2303{
2304 tid, 1;
2305 sequence_control, 2;
2306}
2307
2308IE PUBufferStatus (EID_PU_BUFFER_STATUS) // 7.3.2.66
2309{
2310 {
2311 ac_bk_traffic_aval: 1;
2312 ac_be_traffic_aval: 1;
2313 ac_vi_traffic_aval: 1;
2314 ac_vo_traffic_aval: 1;
2315 reserved: 4;
2316 }
2317}
2318
2319
2320/////////////////////////////////////////////////////////////////////////////
2321// Airgo Information Elements
2322
2323
2324IE Airgo (EID_VENDOR_SPECIFIC) OUI (0x00, 0x0A, 0xF5)
2325{
2326 // N.B. The fact that these IEs are defined inside the Airgo IE indicates
2327 // that they can *only* occur inside the Airgo IE.
2328
2329 OPTIE IE PropSuppRates (SIR_MAC_PROP_EXT_RATES_TYPE)
2330 {
2331 rates[1..12];
2332 }
2333
2334 OPTIE IE APName (SIR_MAC_PROP_AP_NAME_TYPE)
2335 {
2336 name[1..32];
2337 }
2338
2339 OPTIE IE HCF (SIR_MAC_PROP_HCF_TYPE)
2340 {
2341 enabled, 1;
2342 }
2343
2344 OPTIE IE WDS (SIR_MAC_PROP_WDS_TYPE)
2345 {
2346 wdsData[0..ANI_WDS_INFO_MAX_LENGTH];
2347 }
2348
2349 OPTIE IE BPIndicator (SIR_MAC_PROP_BP_IND_TYPE)
2350 {
2351 indicator, 1;
2352 type, 1;
2353 }
2354
2355
2356 // In Progress: I think SIR_MAC_PROP_NEIGHBOR_BSS_TYPE is going to need a
2357 // custom parser...
2358
2359
2360 OPTIE IE LoadInfo (SIR_MAC_PROP_LOAD_INFO_TYPE) MSB
2361 {
2362 num_stas, 2;
2363 channel_util, 2;
2364 }
2365
2366 OPTIE IE LoadBalance (SIR_MAC_PROP_LOAD_BALANCE_TYPE)
2367 {
2368 bssid[6];
2369 channel, 1;
2370 }
2371
2372 OPTIE IE PropAssocType (SIR_MAC_PROP_ASSOC_TYPE)
2373 {
2374 type, 1;
2375 }
2376
2377 OPTIE IE LLAttr (SIR_MAC_PROP_LL_ATTR_TYPE) MSB
2378 {
2379 defer_threshold, 4;
2380 }
2381
2382 OPTIE IE PropCapability (SIR_MAC_PROP_CAPABILITY)
2383 {
2384 capability, 2;
2385 }
2386
2387 OPTIE IE Version (SIR_MAC_PROP_VERSION)
2388 {
2389 chip_rev, 4;
2390 card_type, 1;
2391 build_version[0..20];
2392 }
2393
2394 OPTIE IE PropEDCAParams (SIR_MAC_PROP_EDCAPARAMS)
2395 {
2396 qos, 1; // ToDo: This is a bitfield whose format
2397 // depends on whether this is from an AP
2398 // or a STA, information which I'm not
2399 // sure we have at parse time...
2400 reserved, 1;
2401
2402 // Best Effort
2403 {
2404 acbe_aifsn: 4;
2405 acbe_acm: 1;
2406 acbe_aci: 2;
2407 unused1: 1;
2408 }
2409 {
2410 acbe_min: 4;
2411 acbe_max: 4;
2412 }
2413 acbe_txoplimit, 2;
2414
2415 // Background
2416 {
2417 acbk_aifsn: 4;
2418 acbk_acm: 1;
2419 acbk_aci: 2;
2420 unused2: 1;
2421 }
2422 {
2423 acbk_min: 4;
2424 acbk_max: 4;
2425 }
2426 acbk_txoplimit, 2;
2427
2428 // Video
2429 {
2430 acvi_aifsn: 4;
2431 acvi_acm: 1;
2432 acvi_aci: 2;
2433 unused3: 1;
2434 }
2435 {
2436 acvi_min: 4;
2437 acvi_max: 4;
2438 }
2439 acvi_txoplimit, 2;
2440
2441 // Voice
2442 {
2443 acvo_aifsn: 4;
2444 acvo_acm: 1;
2445 acvo_aci: 2;
2446 unused4: 1;
2447 }
2448 {
2449 acvo_min: 4;
2450 acvo_max: 4;
2451 }
2452 acvo_txoplimit, 2;
2453
2454 } // End IE PropEDCAParams.
2455
2456 /**
2457 * \ie Titan
2458 *
2459 * \brief Proprietary Next Generation (TITAN) IE structure
2460 *
2461 *
2462 * Based on the setting of the "Titan" proprietary bit in the
2463 * tSirPropIEStruct.capability field (bit #6), this IE will be sent
2464 * appropriately to all the ANIpeers in the following management frames -
2465 *
2466 * - Beacons
2467 * - Assoc Req/Rsp
2468 * - Reassoc Req/Rsp
2469 * - Probe Req/Rsp
2470 *
2471 */
2472
2473 OPTIE IE Titan (SIR_MAC_PROP_TITAN)
2474 {
2475 concat_tcid_bitmap, 1;
2476 compression_tcid_bitmap, 1;
2477
2478 // Identifies the OPERATIONAL state of Channel Bonding
2479 // This info is encoded as a bitmap as follows:
2480 //
2481 // b7 b6 b5 b4 b3 b2 b1 b0
2482 // --------------------------------------
2483 // |CCA_CB |CCA |ICE | AU|CS|U/D| O | A |
2484 // --------------------------------------
2485 // where,
2486 // A - Admin state of CB - [enabled(1)/disabled(0)]
2487 // O - Oper state of CB - [on(1)/off(0)]
2488 // U/D - Indicates where the secondary CB channel is
2489 // parked - Up(1)/Down(0) from the primary
2490 // CS - Channel Switch announcement in progress with
2491 // respect to the secondary CB channel
2492 // CS_on(1)/CS_off(0)
2493 // This applies to an AP only
2494 // AU - Autonomous updates. This indicates to an STA
2495 // that it can send an unsolicited CB Report
2496 // regarding its neighbor BSS during an Assoc/
2497 // ReAssoc REQ.
2498 // AU_on(1)/AU_off(0)
2499 // This applies to an AP only
2500 // ICE - Intelligent Channel Expansion mode enable/disable
2501 // ICE_on(1)/ICE_off(0)
2502 // CCA - CCA mode to be used
2503 // CCA_20MHz(0)/CCA_40MHz(1)
2504 // CCA_CB - channel bonding enable/disable based on cca monitoring
2505 // enable(1)/disable(0)
2506
2507 cb_state, 1;
2508
2509 // Identifies Reverse FCS pattern and state
2510 // This info is encoded as a bitmap as follows:
2511 //
2512 // b7 b6 b5 b4 b3 b2 b1 b0
2513 // ---------------------------------
2514 // | X | X | X | X | P | P | P | O |
2515 // ---------------------------------
2516 // where,
2517 // O - Oper state of Reverse FCS - [on(1)/off(0)]
2518 // P - Identifies the pattern ID to be used
2519 // NOTE - These bits are used only during Assoc Req/Rsp
2520 // management frames. Thus, the pattern ID needs to be
2521 // looked up only during Assoc Req/Rsp. In other words,
2522 // the pattern ID between an AP/STA is negotiated via
2523 // the revFcsState during Assoc Req/Rsp
2524
2525 rev_fcs_state, 1;
2526 }
2527
2528 OPTIE IE PropChannSwitchAnn (SIR_MAC_PROP_CHANNEL_SWITCH)
2529 {
2530 mode, 1;
2531 primary_channel, 1;
2532 sub_band, 1;
2533 channel_switch_count, 1;
2534 }
2535
2536 /**
2537 * \ie PropQuietBSS
2538 *
2539 * \brief Proprietary Quite BSS IE structure
2540 *
2541 *
2542 * Based on the setting of the "Titan" proprietary bit in the
2543 * tSirPropIEStruct.capability field (bit #6), this IE will be sent
2544 * appropriately to all the ANI peers in the following management
2545 * frames
2546 *
2547 * - Beacons
2548 * - Probe Rsp
2549 *
2550 */
2551
2552 OPTIE IE PropQuietBSS (SIR_MAC_PROP_QUIET_BSS)
2553 {
2554 // Indicates the number of TBTT's until the next beacon
2555 // interval during which the next quiet interval will
2556 // start
2557 // 1 - Quiet Interval will start during the beacon
2558 // interval starting at the next TBTT
2559 // 0 - Reserved
2560 quiet_count, 1;
2561
2562 // Shall be set to the number of beacon intervals between
2563 // the start of regularly scheduled quiet intervals
2564 // defined by this Quiet Element
2565 // 0 - No periodic quiet interval is defined
2566 quiet_period, 1;
2567
2568 // Duration of the quiet interval, expressed in TUs
2569 // 1 TU = 1024 microseconds??
2570 quiet_duration, 2;
2571
2572 // Set to the offset of the start of the quiet interval
2573 // from the TBTT specified by the quietCount field,
2574 // expressed in TUs. The value of this offset field will
2575 // be less than one beacon interval
2576 // 1 TU = 1024 microseconds??
2577 quiet_offset, 2;
2578
2579 }
2580
2581 OPTIE IE TriggerStaBgScan (SIR_MAC_PROP_TRIG_STA_BK_SCAN)
2582 {
2583 enable, 1;
2584 }
2585
2586 OPTIE IE Taurus (SIR_MAC_PROP_TAURUS)
2587 {
2588 // TID bitmap indicating the TIDs for which BA is setup.
2589 // bit0 for TID0, bit1 for TID1 and so on.
2590 baTIDBitmap, 2;
2591
2592 // Block Ack Policy: 0-Delayed BA 1-Immediate BA.
2593 // One bit for each TID
2594 baPolicy, 2;
2595
2596 // Buffer size for each AC, in exponential notation.
2597 // 3 bits reserved for each AC.
2598 // bit0-2 for AC0[TID 0 and 3], bit3-5 for AC1[TID 1 and 2]
2599 // and so on.
2600
2601 // TID 8 & 11 will use AC0, TID 9 & 10 will use AC1, so use of AC is
2602 // overloaded. This is done to reduce the size of IE in the beacons.
2603 {
2604 baBufferSize: 12;
2605 rsvd: 4;
2606 }
2607 }
2608
2609} // End IE Airgo.
2610
2611IE VHTCaps (EID_VHT_CAPABILITIES)
2612{
2613 //VHT Capability Info
2614 {
2615 maxMPDULen: 2;
2616 supportedChannelWidthSet: 2;
2617 ldpcCodingCap: 1;
2618 shortGI80MHz: 1;
2619 shortGI160and80plus80MHz: 1;
2620 txSTBC: 1;
2621 rxSTBC: 3;
2622 suBeamFormerCap: 1;
2623 suBeamformeeCap: 1;
2624 csnofBeamformerAntSup: 3;
2625 numSoundingDim: 3;
2626 muBeamformerCap: 1;
2627 muBeamformeeCap: 1;
2628 vhtTXOPPS: 1;
2629 htcVHTCap: 1;
2630 maxAMPDULenExp: 3;
2631 vhtLinkAdaptCap: 2;
2632 rxAntPattern: 1;
2633 txAntPattern: 1;
2634 reserved1: 2;
2635 }
2636 rxMCSMap, 2;
2637 {
2638 rxHighSupDataRate: 13;
2639 reserved2: 3;
2640 }
2641 txMCSMap, 2;
2642 {
2643 txSupDataRate: 13;
2644 reserved3: 3;
2645 }
2646}
2647
2648IE VHTOperation (EID_VHT_OPERATION_ELEMENT)
2649{
2650 chanWidth, 1;
2651 chanCenterFreqSeg1, 1;
2652 chanCenterFreqSeg2, 1;
2653 basicMCSSet, 2;
2654}
2655
2656IE VHTExtBssLoad (EID_VHT_EXT_BSS_LOAD)
2657{
2658 muMIMOCapStaCount, 1;
2659 ssUnderUtil, 1;
2660 FortyMHzUtil, 1;
2661 EightyMHzUtil, 1;
2662 OneSixtyMHzUtil, 1;
2663}
2664
2665IE AID (EID_AID)
2666{
2667 assocId, 2;
2668}
2669
2670IE WiderBWChanSwitchAnn (EID_WIDER_BW_CHANNEL_SWITCH_ANN)
2671{
2672 newChanWidth, 1;
2673 newCenterChanFreq0, 1;
2674 newCenterChanFreq1, 1;
2675}
2676
2677IE ExtCap (EID_EXT_CAP)
2678{
2679 {
2680 bssCoexistMgmtSupport: 1;
2681 reserved1: 1;
2682 extChanSwitch: 1;
2683 reserved2: 1;
2684 psmpCap: 1;
2685 reserved3: 1;
2686 spsmpCap: 1;
2687 event: 1;
2688 diagnostics: 1;
2689 multiDiagnostics: 1;
2690 locTracking: 1;
2691 FMS: 1;
2692 proxyARPService: 1;
2693 coLocIntfReporting: 1;
2694 civicLoc: 1;
2695 geospatialLoc: 1;
2696 TFS: 1;
2697 wnmSleepMode: 1;
2698 timBroadcast: 1;
2699 bssTransition: 1;
2700 qosTrafficCap: 1;
2701 acStaCnt: 1;
2702 multiBSSID: 1;
2703 timingMeas: 1;
2704 chanUsage: 1;
2705 ssidList: 1;
2706 DMS: 1;
2707 UTCTSFOffset: 1;
2708 TDLSPeerUAPSDBufferSTA: 1;
2709 TDLSPeerPSMSupp: 1;
2710 TDLSChannelSwitching: 1;
2711 interworkingService: 1;
2712 }
2713 {
2714 qosMap: 1;
2715 EBR: 1;
2716 sspnInterface: 1;
2717 reserved4: 1;
2718 msgCFCap: 1;
2719 TDLSSupport: 1;
2720 TDLSProhibited: 1;
2721 TDLSChanSwitProhibited: 1;
2722 rejectUnadmittedTraffic: 1;
2723 serviceIntervalGranularity: 3;
2724 identifierLoc: 1;
2725 uapsdCoexistence: 1;
2726 wnmNotification: 1;
2727 reserved5: 1;
2728 }
2729 {
2730 UTF8SSID: 1;
2731 reserved6: 12;
2732 TDLSWiderBW: 1;
2733 operModeNotification: 1;
2734 reserved7: 1;
2735 }
2736}
2737
2738IE HTCaps (EID_HT_CAPABILITIES)
2739{
2740 // HT Capability Info
2741 {
2742 advCodingCap: 1;
2743 supportedChannelWidthSet: 1;
2744 mimoPowerSave: 2;
2745 greenField: 1;
2746 shortGI20MHz: 1;
2747 shortGI40MHz: 1;
2748 txSTBC: 1;
2749 rxSTBC: 2;
2750 delayedBA: 1;
2751 maximalAMSDUsize: 1;
2752 dsssCckMode40MHz: 1;
2753 psmp: 1;
2754 stbcControlFrame: 1;
2755 lsigTXOPProtection: 1;
2756 }
2757 // HT Parameters Info;
2758 {
2759 maxRxAMPDUFactor: 2;
2760 mpduDensity: 3;
2761 reserved1: 3;
2762 }
2763
2764 supportedMCSSet[ HT_MAX_SUPPORTED_MCS_SET ];
2765
2766 // Extended HT Capability Info
2767 {
2768 pco: 1;
2769 transitionTime: 2;
2770 reserved2: 5;
2771 mcsFeedback: 2;
2772 reserved3: 6;
2773 }
2774 // TXBF Capability Info
2775 {
2776 txBF: 1;
2777 rxStaggeredSounding: 1;
2778 txStaggeredSounding: 1;
2779 rxZLF: 1;
2780 txZLF: 1;
2781 implicitTxBF: 1;
2782 calibration: 2;
2783 explicitCSITxBF: 1;
2784 explicitUncompressedSteeringMatrix: 1;
2785 explicitBFCSIFeedback: 3;
2786 explicitUncompressedSteeringMatrixFeedback: 3;
2787 explicitCompressedSteeringMatrixFeedback: 3;
2788 csiNumBFAntennae: 2;
2789 uncompressedSteeringMatrixBFAntennae: 2;
2790 compressedSteeringMatrixBFAntennae: 2;
2791 reserved4: 7;
2792 }
2793 // AS Capability Info
2794 {
2795 antennaSelection: 1;
2796 explicitCSIFeedbackTx: 1;
2797 antennaIndicesFeedbackTx: 1;
2798 explicitCSIFeedback: 1;
2799 antennaIndicesFeedback: 1;
2800 rxAS: 1;
2801 txSoundingPPDUs: 1;
2802 reserved5: 1;
2803 }
2804 //TODO: take it out when generic fix to remove extra bytes in IE is available.
2805 //This is required to interop with Dlink AP which is sending 2 bytes extra in HTInfo IE.
2806 rsvd[0..32];
2807
2808} // End IE HTCaps.
2809
2810IE HTInfo (EID_HT_INFO)
2811{
2812 primaryChannel, 1;
2813
2814 // ahtInfoField1
2815 {
2816 secondaryChannelOffset: 2;
2817 recommendedTxWidthSet: 1;
2818 rifsMode: 1;
2819 controlledAccessOnly: 1;
2820 serviceIntervalGranularity: 3;
2821 }
2822
2823 // ahtInfoField2
2824
2825
2826 // ahtInfoField2
2827 {
2828 opMode: 2;
2829 nonGFDevicesPresent: 1;
2830 transmitBurstLimit: 1;
2831 obssNonHTStaPresent:1;
2832 reserved: 11;
2833 }
2834
2835
2836 // ahtInfoField3
2837 {
2838 basicSTBCMCS: 7;
2839 dualCTSProtection: 1;
2840 secondaryBeacon: 1;
2841 lsigTXOPProtectionFullSupport: 1;
2842 pcoActive: 1;
2843 pcoPhase: 1;
2844 reserved2: 4;
2845 }
2846
2847 basicMCSSet[ HT_MAX_SUPPORTED_MCS_SET ];
2848
2849 //TODO: take it out when generic fix to remove extra bytes in IE is available.
2850 //This is required to interop with Dlink AP which is sending 2 bytes extra in HTInfo IE.
2851 rsvd[0..32];
2852
2853} // End IE HTInfo.
2854
2855
2856IE OperatingMode (EID_OPERATING_MODE)
2857{
2858 { //Operating Mode field
2859 chanWidth: 2;
2860 reserved: 2;
2861 rxNSS: 3;
2862 rxNSSType: 1;
2863 }
2864}
2865
2866CONTAINERIE RICDataDesc
2867{
2868 MANDIE RICData;
2869 OPTIE RICDescriptor;
2870 OPTIE TSPEC;
2871 OPTIE TCLAS[0..2];
2872 OPTIE TCLASSPROC;
2873 OPTIE TSDelay;
2874 OPTIE Schedule;
2875 OPTIE WMMTSPEC;
2876 OPTIE WMMTCLAS[0..2];
2877 OPTIE WMMTCLASPROC;
2878 OPTIE WMMTSDelay;
2879 OPTIE WMMSchedule;
2880}
2881
2882/////////////////////////////////////////////////////////////////////////////
2883// MULTIIEs //
2884/////////////////////////////////////////////////////////////////////////////
2885
2886MULTIIE WSC ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
2887{
2888 MANDATORYTLV Version; // Must be 0x10
2889 OPTIONALTLV WPSState;
2890 OPTIONALTLV APSetupLocked;
2891 OPTIONALTLV SelectedRegistrarConfigMethods;
2892 OPTIONALTLV UUID_E;
2893 OPTIONALTLV UUID_R;
2894 OPTIONALTLV RFBands;
2895 OPTIONALTLV SelectedRegistrar;
2896 OPTIONALTLV ConfigMethods;
2897 OPTIONALTLV AssociationState;
2898 OPTIONALTLV ConfigurationError;
2899 OPTIONALTLV Manufacturer;
2900 OPTIONALTLV ModelName;
2901 OPTIONALTLV ModelNumber;
2902 OPTIONALTLV SerialNumber;
2903 OPTIONALTLV DeviceName;
2904 OPTIONALTLV DevicePasswordID;
2905 OPTIONALTLV PrimaryDeviceType;
2906 OPTIONALTLV RequestType;
2907 OPTIONALTLV ResponseType;
2908 OPTIONALTLV VendorExtension;
2909 OPTIONALTLV RequestDeviceType;
2910}
2911
2912MULTIIE WscBeacon ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
2913{
2914 MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
2915 // = version 1.1, etc.
2916 MANDATORYTLV WPSState; // 1 = unconfigured, 2 =
2917 // configured
2918 OPTIONALTLV APSetupLocked; // Must be included if value
2919 // is TRUE
2920 OPTIONALTLV SelectedRegistrar; // BOOL: indicates if the
2921 // user has recently
2922 // activated a Registrar to
2923 // add an Enrollee.
2924 OPTIONALTLV DevicePasswordID; // Device Password ID
2925 // indicates the method or
2926 // identifies the specific
2927 // password that the
2928 // selected Registrar
2929 // intends to use.
2930 OPTIONALTLV SelectedRegistrarConfigMethods; // This attribute contains
2931 // the config methods active
2932 // on the selected
2933 // Registrar.
2934 OPTIONALTLV UUID_E; // The AP's UUID is provided
2935 // only when the AP is a
2936 // dual-band AP in push
2937 // button mode and
2938 // indicating push button
2939 // mode on both radios
2940 OPTIONALTLV RFBands; // Indicates all RF bands
2941 // available on the AP. A
2942 // dual-band AP must provide
2943 // this attribute.
2944 // WSC 2.0
2945 OPTIONALTLV VendorExtension; // Version2 and AuthorizedMACs
2946
2947} // End Multi-IE WscBeacon.
2948
2949MULTIIE WscAssocReq ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
2950{
2951 MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
2952 // = version 1.1, etc.
2953 MANDATORYTLV RequestType; //
2954 //
2955 // WSC 2.0
2956 OPTIONALTLV VendorExtension; // Version2
2957
2958} // End Multi-IE WscAssocReq.
2959
2960
2961MULTIIE WscAssocRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
2962{
2963 MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
2964 // = version 1.1, etc.
2965 MANDATORYTLV ResponseType; //
2966 //
2967 // WSC 2.0
2968 OPTIONALTLV VendorExtension; // Version2
2969
2970} // End Multi-IE WscAssocRes.
2971
2972MULTIIE WscReassocRes ( 221 ) OUI( 0x00, 0x50, 0xF2, 0x04 )
2973{
2974 MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
2975 // = version 1.1, etc.
2976 MANDATORYTLV ResponseType; //
2977 //
2978 // WSC 2.0
2979 OPTIONALTLV VendorExtension; // Version2
2980
2981} // End Multi-IE WscReassocRes
2982
2983MULTIIE WscProbeReq ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
2984{
2985 MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
2986 // = version 1.1, etc.
2987 MANDATORYTLV RequestType; //
2988 //
2989 MANDATORYTLV ConfigMethods; // Configuration methods the
2990 // Enrollee or Registrar
2991 // supports
2992 MANDATORYTLV UUID_E; // unique GUID generated by
2993 // the Enrollee.
2994 MANDATORYTLV PrimaryDeviceType;
2995 MANDATORYTLV RFBands; // Specific RF bands used
2996 // for this message
2997 MANDATORYTLV AssociationState; // Configuration and previous
2998 // association state
2999 MANDATORYTLV ConfigurationError;
3000 MANDATORYTLV DevicePasswordID;
3001
3002 // WSC 2.0
3003 OPTIONALTLV Manufacturer; // Must be included in ver 2.0
3004 // or higher.
3005 OPTIONALTLV ModelName; // Must be included in ver 2.0
3006 // or higher.
3007 OPTIONALTLV ModelNumber; // Must be included in ver 2.0
3008 // or higher.
3009 OPTIONALTLV DeviceName; // Must be included in ver 2.0
3010 // or higher.
3011 OPTIONALTLV VendorExtension; // Version2 and RequestToEntroll
3012
3013 OPTIONALTLV RequestDeviceType; // When a device receives a Probe
3014 // Request containing this type,
3015 // It will only reponse if Primary
3016 // or Secondary Device Type matches.
3017
3018} // End Multi-IE WscProbeReq.
3019
3020MULTIIE WscProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3021{
3022 MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
3023 // = version 1.1, etc.
3024 MANDATORYTLV WPSState; // 1 = unconfigured, 2 =
3025 // configured
3026 OPTIONALTLV APSetupLocked; // Must be included if value
3027 // is TRUE
3028 OPTIONALTLV SelectedRegistrar; // BOOL: indicates if the
3029 // user has recently
3030 // activated a Registrar to
3031 // add an Enrollee.
3032 OPTIONALTLV DevicePasswordID; // Device Password ID
3033 // indicates the method or
3034 // identifies the specific
3035 // password that the
3036 // selected Registrar
3037 // intends to use.
3038 OPTIONALTLV SelectedRegistrarConfigMethods; // This attribute contains
3039 // the config methods active
3040 // on the selected
3041 // Registrar.
3042 MANDATORYTLV ResponseType;
3043 MANDATORYTLV UUID_E; // unique identifier of AP
3044 MANDATORYTLV Manufacturer;
3045 MANDATORYTLV ModelName;
3046 MANDATORYTLV ModelNumber;
3047 MANDATORYTLV SerialNumber;
3048 MANDATORYTLV PrimaryDeviceType;
3049 MANDATORYTLV DeviceName; // User-friendly description
3050 // of device
3051 MANDATORYTLV ConfigMethods; // Config Methods corresponds
3052 // to the methods the AP
3053 // supports as an Enrollee
3054 // for adding external
3055 // Registrars.
3056 OPTIONALTLV RFBands; // Indicates all RF bands
3057 // available on the AP. A
3058 // dual-band AP must provide
3059 // this attribute.
3060 // WSC 2.0
3061 OPTIONALTLV VendorExtension; // Version2 and AuthorizedMACs
3062
3063} // WscProbeRes.
3064
3065// This MULTIIE combines the fields from the WSC IEs as they appear in
3066// Beacons *and* in Probe Responses, with the difference that they're all
3067// optional. In our device drivers, we combine Probe Responses and Beacons
3068// into one list, and parse their IEs later (c.f. frame BeaconIEs). Because
3069// the WSC IE differs in those two frames, we'd often see warning messages
3070// about either unexpected fields showing up (if we thought we were parsing a
3071// Beacon, and we in fact had data from a Probe Response) or mandatory fields
3072// missing (if we thought we were parsing a Probe Response, and in fact had
3073// data from a Beacon).
3074
3075// I created this MULTIIE to stuff into the BeaconIEs frames to avoid this.
3076// It's intended to be used on unpack only, and to do so in a very forgiving
3077// way.
3078
3079MULTIIE WscBeaconProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3080{
3081 OPTIONALTLV Version; // 0x10 = version 1.0, 0x11
3082 // = version 1.1, etc.
3083 OPTIONALTLV WPSState; // 1 = unconfigured, 2 =
3084 // configured
3085 OPTIONALTLV APSetupLocked; // Must be included if value
3086 // is TRUE
3087 OPTIONALTLV SelectedRegistrar; // BOOL: indicates if the
3088 // user has recently
3089 // activated a Registrar to
3090 // add an Enrollee.
3091 OPTIONALTLV DevicePasswordID; // Device Password ID
3092 // indicates the method or
3093 // identifies the specific
3094 // password that the
3095 // selected Registrar
3096 // intends to use.
3097 OPTIONALTLV SelectedRegistrarConfigMethods; // This attribute contains
3098 // the config methods active
3099 // on the selected
3100 // Registrar.
3101 OPTIONALTLV ResponseType;
3102 OPTIONALTLV UUID_E; // unique identifier of AP
3103 OPTIONALTLV Manufacturer;
3104 OPTIONALTLV ModelName;
3105 OPTIONALTLV ModelNumber;
3106 OPTIONALTLV SerialNumber;
3107 OPTIONALTLV PrimaryDeviceType;
3108 OPTIONALTLV DeviceName; // User-friendly description
3109 // of device
3110 OPTIONALTLV ConfigMethods; // Config Methods corresponds
3111 // to the methods the AP
3112 // supports as an Enrollee
3113 // for adding external
3114 // Registrars.
3115 OPTIONALTLV RFBands; // Indicates all RF bands
3116 // available on the AP. A
3117 // dual-band AP must provide
3118 // this attribute.
3119 // WSC 2.0
3120 OPTIONALTLV VendorExtension; // Version2 and AuthorizedMACs
3121
3122} // WscProbeRes.
3123/////////////////////////////////////////////////////////////////////////////
3124// MULTIIEs //
3125/////////////////////////////////////////////////////////////////////////////
3126
3127MULTIIE P2PBeacon ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3128{
3129 MANDATORYTLV P2PCapability; // Contains P2P Device
3130 // and P2P Group Capability
3131 MANDATORYTLV P2PDeviceId; // Contains P2P Device
3132 // Address
3133 OPTIONALTLV NoticeOfAbsence; // Indicates Notice of
3134 // Absence schedule and
3135 // CT Window
3136
3137} // End P2PBeacon
3138
3139
3140MULTIIE P2PAssocReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3141{
3142 MANDATORYTLV P2PCapability; // Contains P2P Device
3143 // and P2P Group Capability
3144 OPTIONALTLV ExtendedListenTiming;
3145 MANDATORYTLV P2PDeviceInfo;
3146
3147} // End P2PAssocReq
3148
3149
3150MULTIIE P2PAssocRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3151{
3152 MANDATORYTLV P2PStatus;
3153 OPTIONALTLV ExtendedListenTiming;
3154
3155} // End P2PAssocRes
3156
3157
3158MULTIIE P2PProbeReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3159{
3160 MANDATORYTLV P2PCapability;
3161 OPTIONALTLV P2PDeviceId;
3162 MANDATORYTLV ListenChannel;
3163 OPTIONALTLV ExtendedListenTiming;
3164 OPTIONALTLV OperatingChannel;
3165} // End P2PProbeReq
3166
3167
3168MULTIIE P2PProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3169{
3170 MANDATORYTLV P2PCapability;
3171 OPTIONALTLV ExtendedListenTiming;
3172 OPTIONALTLV NoticeOfAbsence;
3173 MANDATORYTLV P2PDeviceInfo;
3174 OPTIONALTLV P2PGroupInfo;
3175
3176} // End P2PProbeRes
3177
3178
3179MULTIIE P2PBeaconProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3180{
3181 OPTIONALTLV P2PCapability;
3182 OPTIONALTLV P2PDeviceId;
3183 OPTIONALTLV ExtendedListenTiming;
3184 OPTIONALTLV NoticeOfAbsence;
3185 OPTIONALTLV P2PDeviceInfo;
3186 OPTIONALTLV P2PGroupInfo;
3187
3188} // End P2PBeaconProbeRes
3189
3190
3191MULTIIE P2PGONegReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3192{
3193 MANDATORYTLV P2PCapability;
3194 MANDATORYTLV GOIntent;
3195 MANDATORYTLV ConfigurationTimeout;
3196 MANDATORYTLV ListenChannel;
3197 OPTIONALTLV ExtendedListenTiming;
3198 MANDATORYTLV IntendedP2PInterfaceAddress;
3199 MANDATORYTLV ChannelList;
3200 MANDATORYTLV P2PDeviceInfo;
3201 MANDATORYTLV OperatingChannel;
3202
3203} // End P2PGONegReq
3204
3205
3206MULTIIE P2PGONegRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3207{
3208 MANDATORYTLV P2PStatus;
3209 MANDATORYTLV P2PCapability;
3210 MANDATORYTLV GOIntent;
3211 MANDATORYTLV ConfigurationTimeout;
3212 MANDATORYTLV OperatingChannel;
3213 MANDATORYTLV IntendedP2PInterfaceAddress;
3214 MANDATORYTLV ChannelList;
3215 MANDATORYTLV P2PDeviceInfo;
3216 OPTIONALTLV P2PGroupId;
3217
3218} // End P2PGONegRes
3219
3220
3221MULTIIE P2PGONegCnf ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3222{
3223 MANDATORYTLV P2PStatus;
3224 MANDATORYTLV P2PCapability;
3225 MANDATORYTLV OperatingChannel;
3226 MANDATORYTLV ChannelList;
3227 OPTIONALTLV P2PGroupId;
3228
3229} // End P2PGONegCnf
3230
3231
3232MULTIIE P2PGONegWPS ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3233{
3234 MANDATORYTLV Version;
3235 MANDATORYTLV DevicePasswordID;
3236
3237} // End P2PGONegWPS
3238
3239
3240MULTIIE P2PDeAuth ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3241{
3242 MANDATORYTLV MinorReasonCode;
3243}
3244
3245
3246MULTIIE P2PDisAssoc ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3247{
3248 MANDATORYTLV MinorReasonCode;
3249}
3250
3251
3252MULTIIE P2PInvitationReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3253{
3254 MANDATORYTLV ConfigurationTimeout;
3255 MANDATORYTLV InvitationFlags;
3256 MANDATORYTLV OperatingChannel;
3257 MANDATORYTLV P2PGroupBssid;
3258 MANDATORYTLV ChannelList;
3259 MANDATORYTLV P2PGroupId;
3260 MANDATORYTLV P2PDeviceInfo;
3261}
3262
3263
3264MULTIIE P2PInvitationRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3265{
3266 MANDATORYTLV P2PStatus;
3267 MANDATORYTLV ConfigurationTimeout;
3268 MANDATORYTLV OperatingChannel;
3269 MANDATORYTLV P2PGroupBssid;
3270 MANDATORYTLV ChannelList;
3271}
3272
3273
3274MULTIIE P2PDeviceDiscoverabilityReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3275{
3276 MANDATORYTLV P2PDeviceId;
3277 MANDATORYTLV P2PGroupId;
3278}
3279
3280
3281MULTIIE P2PDeviceDiscoverabilityRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3282{
3283 MANDATORYTLV P2PStatus;
3284}
3285
3286
3287MULTIIE P2PProvisionDiscoveryReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3288{
3289 MANDATORYTLV P2PCapability;
3290 MANDATORYTLV P2PDeviceInfo;
3291 MANDATORYTLV P2PGroupId;
3292}
3293
3294MULTIIE P2PWSCProvisionDiscoveryRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3295{
3296 MANDATORYTLV ConfigMethods;
3297}
3298
3299
3300MULTIIE P2PNoticeOfAbsence ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3301{
3302 MANDATORYTLV NoticeOfAbsence;
3303}
3304
3305
3306MULTIIE P2PPresenceResponse ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3307{
3308 MANDATORYTLV P2PStatus;
3309 MANDATORYTLV NoticeOfAbsence;
3310}
3311
3312
3313/////////////////////////////////////////////////////////////////////////////
3314// Frames
3315
3316FRAME Beacon // C.f. Sec. 7.2.3.1
3317{
3318 FF TimeStamp;
3319 FF BeaconInterval;
3320 FF Capabilities;
3321 MANDIE SSID;
3322 MANDIE SuppRates;
3323 OPTIE FHParamSet;
3324 OPTIE DSParams;
3325 OPTIE CFParams;
3326 OPTIE IBSSParams;
3327 OPTIE TIM;
3328 OPTIE Country;
3329 OPTIE FHParams;
3330 OPTIE FHPattTable;
3331 OPTIE PowerConstraints;
3332 OPTIE ChanSwitchAnn;
3333 OPTIE Quiet;
3334 OPTIE TPCReport;
3335 OPTIE ERPInfo;
3336 OPTIE ExtSuppRates;
3337 OPTIE RSN;
3338 OPTIE QBSSLoad;
3339 OPTIE EDCAParamSet;
3340 OPTIE QOSCapsAp;
3341 OPTIE APChannelReport;
3342 OPTIE RRMEnabledCap;
3343 OPTIE MobilityDomain;
3344 OPTIE WPA;
3345 OPTIE HTCaps;
3346 OPTIE HTInfo;
3347 OPTIE ExtChanSwitchAnn;
3348 OPTIE WMMInfoAp;
3349 OPTIE WMMParams;
3350 OPTIE WMMCaps;
3351 OPTIE WAPI;
3352 OPTIE ESERadMgmtCap;
3353 OPTIE ESETrafStrmMet;
3354 OPTIE ESETxmitPower;
3355
3356 OPTIE Airgo;
3357 OPTIE WscBeacon;
3358 OPTIE P2PBeacon;
3359 OPTIE VHTCaps;
3360 OPTIE VHTOperation;
3361 OPTIE VHTExtBssLoad;
3362 OPTIE ExtCap;
3363 OPTIE OperatingMode;
3364 OPTIE WiderBWChanSwitchAnn;
3365 OPTIE OBSSScanParameters;
3366} // End frame Beacon.
3367
3368// Ok, here's the story on Beacon1 & Beacon2. We presumably beacon a lot
3369// more than we change configuration. So it makes sense to keep the beacon
3370// we plan to send next in serialized format. We do this in struct schMisc.
3371// Whenever our config changes in a way that would affect our beacons, we
3372// just update our internal datastructures & re-generate the serialized
3373// beacon.
3374
3375// The problem is that there are *some* fields that need to be updated at
3376// send time, specifically the CF Param Set & the TIM. So, what we do is
3377// this: whenever our config changes, call schSetFixedBeaconFields. There,
3378// we serialize the following Beacon fields into gSchBeaconFrameBegin (after
3379// the power template & MAC header): TimeStamp, BeaconInterval, Capabilities,
3380// SSID, SuppRates, DSParams, & IBSSParams. It sets gSchBeaconOffsetBegin to
3381// the length of this buffer (incl. power template & MAC header).
3382
3383// Next, it serializes the following fields into gSchBeaconFrameEnd: Country,
3384// EDCAParamSet, PowerConstraints, TPCReport, ChannelSwitchAnn, Quiet,
3385// ERPInfo, HTCaps, HTInfo, ExtSuppRates, Airgo (via
3386// sirFillPropIEsInBeaconPR), WPA, RSN, WMMInfo, WMMParams, WMMCaps. The
3387// length of *this* buffer is kept in gSchBeaconOffsetEnd.
3388
3389// Then, in 'schBeaconInterruptHandler', we write CFParams & TIM at the end
3390// of gSchBeaconFrameBegin, keeping track of the (new) size of this buffer in
3391// the local 'beaconSize'.
3392
3393// After that, we call 'specialBeaconProcessing'. Note that this may
3394// actually call schSetFixedBeaconFields repeatedly! The comments say they
3395// try to avoid this, but...
3396
3397// Finally, we call writeBeaconToTFP, where the first thing we do is copy the
3398// gSchBeaconFrameEnd buffer after the end of gSchBeaconFrameBegin.
3399
3400FRAME Beacon1
3401{
3402 FF TimeStamp;
3403 FF BeaconInterval;
3404 FF Capabilities;
3405 MANDIE SSID;
3406 MANDIE SuppRates;
3407 OPTIE DSParams;
3408 OPTIE IBSSParams;
3409}
3410
3411FRAME Beacon2
3412{
3413 OPTIE Country;
3414 OPTIE PowerConstraints;
3415 OPTIE ChanSwitchAnn;
3416 OPTIE Quiet;
3417 OPTIE TPCReport;
3418 OPTIE ERPInfo;
3419 OPTIE ExtSuppRates;
3420 OPTIE RSNOpaque;
3421 OPTIE EDCAParamSet;
3422 OPTIE APChannelReport;
3423 OPTIE RRMEnabledCap;
3424 OPTIE MobilityDomain;
3425 OPTIE WPA;
3426 OPTIE HTCaps;
3427 OPTIE HTInfo;
3428 OPTIE ExtChanSwitchAnn;
3429 OPTIE WMMInfoAp;
3430 OPTIE WMMParams;
3431 OPTIE WMMCaps;
3432 OPTIE Airgo;
3433 OPTIE WscBeacon;
3434 OPTIE WAPI;
3435 OPTIE ESERadMgmtCap;
3436 OPTIE ESETrafStrmMet;
3437 OPTIE ESETxmitPower;
3438 OPTIE P2PBeacon;
3439 OPTIE VHTCaps;
3440 OPTIE VHTOperation;
3441 OPTIE VHTExtBssLoad;
3442 OPTIE ExtCap;
3443 OPTIE OperatingMode;
3444 OPTIE WiderBWChanSwitchAnn;
3445}
3446
3447// This frame is just Beacon with its Fixed Fields stripped out. It's handy
3448// for use with struct 'tSirBssDescription', which has members corresponding
3449// to some fixed fields, but keeps its IEs in un-parsed format.
3450
3451// Note that it also includes the IE 'WscBeaconProbeRes'.
3452
3453FRAME BeaconIEs
3454{
3455
3456 MANDIE SSID;
3457 MANDIE SuppRates;
3458 OPTIE FHParamSet;
3459 OPTIE DSParams;
3460 OPTIE CFParams;
3461 OPTIE IBSSParams;
3462 OPTIE TIM;
3463 OPTIE Country;
3464 OPTIE FHParams;
3465 OPTIE FHPattTable;
3466 OPTIE PowerConstraints;
3467 OPTIE ChanSwitchAnn;
3468 OPTIE Quiet;
3469 OPTIE TPCReport;
3470 OPTIE ERPInfo;
3471 OPTIE ExtSuppRates;
3472 OPTIE RSN;
3473 OPTIE QBSSLoad;
3474 OPTIE EDCAParamSet;
3475 OPTIE QOSCapsAp;
3476 OPTIE APChannelReport;
3477 OPTIE RRMEnabledCap;
3478 OPTIE MobilityDomain;
3479 OPTIE WPA;
3480 OPTIE HTCaps;
3481 OPTIE HTInfo;
3482 OPTIE ExtChanSwitchAnn;
3483 OPTIE WMMInfoAp;
3484 OPTIE WMMParams;
3485 OPTIE WMMCaps;
3486 OPTIE WAPI;
3487 OPTIE ESEVersion;
3488 OPTIE ESERadMgmtCap;
3489 OPTIE ESETrafStrmMet;
3490 OPTIE ESETxmitPower;
3491
3492 OPTIE Airgo;
3493 OPTIE WscBeaconProbeRes;
3494 OPTIE P2PBeaconProbeRes;
3495 OPTIE VHTCaps;
3496 OPTIE VHTOperation;
3497 OPTIE VHTExtBssLoad;
3498 OPTIE ExtCap;
3499 OPTIE OperatingMode;
3500 OPTIE WiderBWChanSwitchAnn;
3501 OPTIE OBSSScanParameters;
3502
3503} // End frame BeaconIEs.
3504
3505FRAME Disassociation // 7.3.3.3
3506{
3507 FF Reason;
3508 OPTIE P2PDisAssoc;
3509}
3510
3511FRAME AssocRequest // 7.2.3.4
3512{
3513 FF Capabilities;
3514 FF ListenInterval;
3515 MANDIE SSID;
3516 MANDIE SuppRates;
3517 OPTIE ExtSuppRates;
3518 OPTIE PowerCaps;
3519 OPTIE SuppChannels;
3520 OPTIE RSNOpaque;
3521 OPTIE QOSCapsStation;
3522 OPTIE RRMEnabledCap;
3523 OPTIE MobilityDomain;
3524 OPTIE WPAOpaque;
3525 OPTIE HTCaps;
3526 OPTIE WMMCaps;
3527 OPTIE WMMInfoStation;
3528 OPTIE Airgo;
3529 OPTIE WscIEOpaque;
3530 OPTIE WAPIOpaque;
3531 OPTIE ESERadMgmtCap;
3532 OPTIE ESEVersion;
3533 OPTIE P2PIEOpaque;
3534 OPTIE WFDIEOpaque;
3535 OPTIE VHTCaps;
3536 OPTIE ExtCap;
3537 OPTIE OperatingMode;
3538} // End frame AssocRequest.
3539
3540FRAME AssocResponse // 7.2.3.5
3541{
3542 FF Capabilities;
3543 FF Status;
3544 FF AID;
3545 MANDIE SuppRates;
3546 OPTIE ExtSuppRates;
3547 OPTIE EDCAParamSet;
3548 OPTIE RCPIIE;
3549 OPTIE RSNIIE;
3550 OPTIE RRMEnabledCap;
3551 OPTIE MobilityDomain;
3552 OPTIE FTInfo;
3553 OPTIE RICDataDesc[2];
3554 OPTIE WPA;
3555 OPTIE TimeoutInterval;
3556 OPTIE HTCaps;
3557 OPTIE HTInfo;
3558 OPTIE WMMParams;
3559 OPTIE WMMCaps;
3560 OPTIE ESERadMgmtCap;
3561 OPTIE ESETrafStrmMet;
3562 OPTIE ESETxmitPower;
3563 OPTIE WMMTSPEC[0..4];
3564 OPTIE Airgo;
3565 OPTIE WscAssocRes;
3566 OPTIE P2PAssocRes;
3567 OPTIE VHTCaps;
3568 OPTIE VHTOperation;
3569 OPTIE ExtCap;
3570 OPTIE OBSSScanParameters;
3571} // End frame AssocResponse.
3572
3573FRAME ReAssocRequest // 7.2.3.6
3574{
3575 FF Capabilities;
3576 FF ListenInterval;
3577 FF CurrentAPAddress;
3578 MANDIE SSID;
3579 MANDIE SuppRates;
3580 OPTIE ExtSuppRates;
3581 OPTIE PowerCaps;
3582 OPTIE SuppChannels;
3583 OPTIE RSNOpaque;
3584 OPTIE QOSCapsStation;
3585 OPTIE RRMEnabledCap;
3586 OPTIE MobilityDomain;
3587 OPTIE FTInfo;
3588 OPTIE RICDataDesc[2];
3589 OPTIE WPAOpaque;
3590 OPTIE HTCaps;
3591 OPTIE WMMCaps;
3592 OPTIE WMMInfoStation;
3593 OPTIE Airgo;
3594 OPTIE WscIEOpaque;
3595 OPTIE WAPIOpaque;
3596 OPTIE ESERadMgmtCap;
3597 OPTIE ESEVersion;
3598 OPTIE ESECckmOpaque;
3599 OPTIE WMMTSPEC[0..4];
3600 OPTIE ESETrafStrmRateSet;
3601 OPTIE P2PIEOpaque;
3602 OPTIE WFDIEOpaque;
3603 OPTIE VHTCaps;
3604 OPTIE ExtCap;
3605 OPTIE OperatingMode;
3606} // End frame ReAssocRequest.
3607
3608FRAME ReAssocResponse // 7.2.3.7
3609{
3610 FF Capabilities;
3611 FF Status;
3612 FF AID;
3613 MANDIE SuppRates;
3614 OPTIE ExtSuppRates;
3615 OPTIE EDCAParamSet;
3616 OPTIE RCPIIE;
3617 OPTIE RSNIIE;
3618 OPTIE RRMEnabledCap;
3619 OPTIE RSNOpaque;
3620 OPTIE MobilityDomain;
3621 OPTIE FTInfo;
3622 OPTIE RICDataDesc[2];
3623 OPTIE WPA;
3624 OPTIE TimeoutInterval;
3625 OPTIE HTCaps;
3626 OPTIE HTInfo;
3627 OPTIE WMMParams;
3628 OPTIE ESERadMgmtCap;
3629 OPTIE ESETrafStrmMet;
3630 OPTIE ESETxmitPower;
3631 OPTIE WMMTSPEC[0..4];
3632 OPTIE ESETrafStrmRateSet;
3633 OPTIE Airgo;
3634 OPTIE WscReassocRes;
3635 OPTIE P2PAssocRes;
3636 OPTIE VHTCaps;
3637 OPTIE VHTOperation;
3638 OPTIE ExtCap;
3639 OPTIE OBSSScanParameters;
3640} // End frame ReAssocResponse.
3641
3642FRAME ProbeRequest // 7.2.3.8
3643{
3644 MANDIE SSID;
3645 MANDIE SuppRates;
3646 OPTIE RequestedInfo;
3647 OPTIE ExtSuppRates;
3648 OPTIE DSParams;
3649 OPTIE HTCaps;
3650 OPTIE WscProbeReq;
3651 OPTIE WFATPC;
3652 OPTIE P2PProbeReq;
3653 OPTIE VHTCaps;
3654} // End frame ProbeRequest.
3655
3656FRAME ProbeResponse // 7.2.3.9
3657{
3658 FF TimeStamp;
3659 FF BeaconInterval;
3660 FF Capabilities;
3661 MANDIE SSID;
3662 MANDIE SuppRates;
3663 OPTIE FHParamSet;
3664 OPTIE DSParams;
3665 OPTIE CFParams;
3666 OPTIE IBSSParams;
3667 OPTIE Country;
3668 OPTIE FHParams;
3669 OPTIE FHPattTable;
3670 OPTIE PowerConstraints;
3671 OPTIE ChanSwitchAnn;
3672 OPTIE Quiet;
3673 OPTIE TPCReport;
3674 OPTIE ERPInfo;
3675 OPTIE ExtSuppRates;
3676 OPTIE RSNOpaque;
3677 OPTIE QBSSLoad;
3678 OPTIE EDCAParamSet;
3679 OPTIE RRMEnabledCap;
3680 OPTIE APChannelReport;
3681 OPTIE MobilityDomain;
3682 OPTIE WPA;
3683 OPTIE HTCaps;
3684 OPTIE HTInfo;
3685 OPTIE ExtChanSwitchAnn;
3686 OPTIE WMMInfoAp;
3687 OPTIE WMMParams;
3688 OPTIE WMMCaps;
3689 OPTIE WAPI;
3690 OPTIE ESERadMgmtCap;
3691 OPTIE ESETrafStrmMet;
3692 OPTIE ESETxmitPower;
3693
3694 OPTIE Airgo;
3695 OPTIE WscProbeRes;
3696 OPTIE P2PProbeRes;
3697
3698 OPTIE VHTCaps;
3699 OPTIE VHTOperation;
3700 OPTIE VHTExtBssLoad;
3701 OPTIE ExtCap;
3702 OPTIE OBSSScanParameters;
3703} // End frame ProbeResponse.
3704
3705FRAME Authentication // 7.2.3.10
3706{
3707 FF AuthAlgo;
3708 FF AuthSeqNo;
3709 FF Status;
3710 OPTIE ChallengeText;
3711 OPTIE RSNOpaque;
3712 OPTIE MobilityDomain;
3713 OPTIE FTInfo;
3714 OPTIE TimeoutInterval;
3715 OPTIE RICDataDesc[2];
3716} // End frame Auth.
3717
3718FRAME DeAuth // 7.2.3.11
3719{
3720 FF Reason;
3721 OPTIE P2PDeAuth;
3722}
3723
3724FRAME AddTSRequest // 7.4.2.1
3725{
3726
3727 FF Category;
3728 FF Action;
3729 FF DialogToken;
3730 MANDIE TSPEC;
3731 OPTIE TCLAS[0..2];
3732 OPTIE TCLASSPROC;
3733
3734 // These IEs aren't in the spec, but our extant code *will* parse them if
3735 // they're present. I included them to preserve that capability
3736
3737 OPTIE WMMTSPEC;
3738 OPTIE WMMTCLAS[0..2];
3739 OPTIE WMMTCLASPROC;
3740 OPTIE ESETrafStrmRateSet;
3741
3742} // End frame AddTSRequest.
3743
3744FRAME WMMAddTSRequest
3745{
3746 FF Category;
3747 FF Action;
3748 FF DialogToken;
3749 FF StatusCode;
3750 MANDIE WMMTSPEC;
3751 OPTIE ESETrafStrmRateSet;
3752} // End Frame WMMAddTSRequest
3753
3754FRAME AddTSResponse // 7.4.2.2
3755{
3756
3757 FF Category;
3758 FF Action;
3759 FF DialogToken;
3760 FF Status;
3761 MANDIE TSDelay;
3762 MANDIE TSPEC;
3763 OPTIE TCLAS[0..2];
3764 OPTIE TCLASSPROC;
3765 OPTIE Schedule;
3766
3767 // These IEs aren't in the spec, but our extant code *will* parse them if
3768 // they're present. I included them to preserve that capability
3769 OPTIE WMMTSDelay;
3770 OPTIE WMMSchedule;
3771 OPTIE WMMTSPEC;
3772 OPTIE WMMTCLAS[0..2];
3773 OPTIE WMMTCLASPROC;
3774 OPTIE ESETrafStrmMet;
3775
3776} // End frame AddTSResponse.
3777
3778FRAME WMMAddTSResponse
3779{
3780
3781 FF Category;
3782 FF Action;
3783 FF DialogToken;
3784 FF StatusCode;
3785 OPTIE WMMTSPEC;
3786 OPTIE ESETrafStrmMet;
3787
3788} // End frame WMMAddTSResponse.
3789
3790FRAME DelTS // 7.4.2.3
3791{
3792 FF Category;
3793 FF Action;
3794 FF TSInfo;
3795 FF Reason;
3796}
3797
3798FRAME WMMDelTS
3799{
3800 FF Category;
3801 FF Action;
3802 FF DialogToken;
3803 FF StatusCode;
3804 MANDIE WMMTSPEC;
3805}
3806
3807FRAME TPCRequest
3808{
3809 FF Category;
3810 FF Action;
3811 FF DialogToken;
3812 MANDIE TPCRequest;
3813}
3814
3815FRAME TPCReport
3816{
3817 FF Category;
3818 FF Action;
3819 FF DialogToken;
3820 MANDIE TPCReport;
3821}
3822
3823FRAME ChannelSwitch
3824{
3825 FF Category;
3826 FF Action;
3827 MANDIE ChanSwitchAnn;
3828 OPTIE ExtChanSwitchAnn;
3829 OPTIE WiderBWChanSwitchAnn;
3830}
3831
3832FRAME MeasurementRequest
3833{
3834 FF Category;
3835 FF Action;
3836 FF DialogToken;
3837 MANDIE MeasurementRequest[1..4];
3838}
3839
3840FRAME MeasurementReport
3841{
3842 FF Category;
3843 FF Action;
3844 FF DialogToken;
3845 MANDIE MeasurementReport;
3846}
3847
3848FRAME AddBAReq
3849{
3850 FF Category;
3851 FF Action;
3852 FF DialogToken;
3853 FF AddBAParameterSet;
3854 FF BATimeout;
3855 FF BAStartingSequenceControl;
3856}
3857
3858FRAME AddBARsp
3859{
3860 FF Category;
3861 FF Action;
3862 FF DialogToken;
3863 FF Status;
3864 FF AddBAParameterSet;
3865 FF BATimeout;
3866}
3867
3868FRAME DelBAInd
3869{
3870 FF Category;
3871 FF Action;
3872 FF DelBAParameterSet;
3873 FF Reason;
3874}
3875
3876FRAME SMPowerSave
3877{
3878 FF Category;
3879 FF Action;
3880 FF SMPowerModeSet;
3881}
3882
3883FRAME RadioMeasurementRequest
3884{
3885 FF Category;
3886 FF Action;
3887 FF DialogToken;
3888 FF NumOfRepetitions;
3889 //Measurement Request IE.
3890 MANDIE MeasurementRequest[1..2];
3891}
3892
3893FRAME RadioMeasurementReport
3894{
3895 FF Category;
3896 FF Action;
3897 FF DialogToken;
3898 //Measurement Report elements.
3899 MANDIE MeasurementReport[1..4];
3900}
3901
3902FRAME LinkMeasurementRequest
3903{
3904 FF Category;
3905 FF Action;
3906 FF DialogToken;
3907 FF TxPower;
3908 FF MaxTxPower;
3909 //Optional Sub Ies
3910}
3911
3912FRAME LinkMeasurementReport
3913{
3914 FF Category;
3915 FF Action;
3916 FF DialogToken;
3917 FF TPCEleID;
3918 FF TPCEleLen;
3919 FF TxPower;
3920 FF LinkMargin;
3921 FF RxAntennaId;
3922 FF TxAntennaId;
3923 FF RCPI;
3924 FF RSNI;
3925 //Optional Vendor specific IEs ... ignoring
3926}
3927
3928FRAME NeighborReportRequest
3929{
3930 FF Category;
3931 FF Action;
3932 FF DialogToken;
3933 OPTIE SSID;
3934 //Optional vendor specific IE...ignoring.
3935}
3936
3937FRAME NeighborReportResponse
3938{
3939 FF Category;
3940 FF Action;
3941 FF DialogToken;
3942 OPTIE NeighborReport[1..4];
3943}
3944
3945FRAME GONegReq
3946{
3947 FF Category;
3948 FF Action;
3949 FF P2POUI;
3950 FF P2POUISubType;
3951 FF DialogToken;
3952 MANDIE P2PGONegWPS;
3953 MANDIE P2PGONegReq;
3954}
3955
3956FRAME GONegRes
3957{
3958 FF Category;
3959 FF Action;
3960 FF P2POUI;
3961 FF P2POUISubType;
3962 FF DialogToken;
3963 MANDIE P2PGONegWPS;
3964 MANDIE P2PGONegRes;
3965}
3966
3967
3968FRAME GONegCnf
3969{
3970 FF Category;
3971 FF Action;
3972 FF P2POUI;
3973 FF P2POUISubType;
3974 FF DialogToken;
3975 MANDIE P2PGONegCnf;
3976}
3977
3978
3979FRAME InvitationReq
3980{
3981 FF Category;
3982 FF Action;
3983 FF P2POUI;
3984 FF P2POUISubType;
3985 FF DialogToken;
3986 MANDIE P2PInvitationReq;
3987}
3988
3989
3990FRAME InvitationRes
3991{
3992 FF Category;
3993 FF Action;
3994 FF P2POUI;
3995 FF P2POUISubType;
3996 FF DialogToken;
3997 MANDIE P2PInvitationRes;
3998}
3999
4000
4001FRAME DeviceDiscoverabilityReq
4002{
4003 FF Category;
4004 FF Action;
4005 FF P2POUI;
4006 FF P2POUISubType;
4007 FF DialogToken;
4008 MANDIE P2PDeviceDiscoverabilityReq;
4009}
4010
4011
4012FRAME DeviceDiscoverabilityRes
4013{
4014 FF Category;
4015 FF Action;
4016 FF P2POUI;
4017 FF P2POUISubType;
4018 FF DialogToken;
4019 MANDIE P2PDeviceDiscoverabilityRes;
4020}
4021
4022
4023
4024FRAME ProvisionDiscoveryReq
4025{
4026 FF Category;
4027 FF Action;
4028 FF P2POUI;
4029 FF P2POUISubType;
4030 FF DialogToken;
4031 MANDIE P2PProvisionDiscoveryReq;
4032}
4033
4034
4035FRAME ProvisionDiscoveryRes
4036{
4037 FF Category;
4038 FF Action;
4039 FF P2POUI;
4040 FF P2POUISubType;
4041 FF DialogToken;
4042 MANDIE P2PWSCProvisionDiscoveryRes;
4043}
4044
4045
4046FRAME NoticeOfAbs
4047{
4048 FF Category;
4049 FF P2POUI;
4050 FF P2POUISubType;
4051 FF DialogToken;
4052 MANDIE P2PNoticeOfAbsence;
4053}
4054
4055
4056FRAME PresenceReq
4057{
4058 FF Category;
4059 FF P2POUI;
4060 FF P2POUISubType;
4061 FF DialogToken;
4062 MANDIE P2PNoticeOfAbsence;
4063}
4064
4065
4066FRAME PresenceRes
4067{
4068 FF Category;
4069 FF P2POUI;
4070 FF P2POUISubType;
4071 FF DialogToken;
4072 MANDIE P2PPresenceResponse;
4073}
4074
4075
4076FRAME GODiscoverabilityReq
4077{
4078 FF Category;
4079 FF P2POUI;
4080 FF P2POUISubType;
4081 FF DialogToken;
4082}
4083
4084FRAME OperatingMode
4085{
4086 FF Category;
4087 FF Action;
4088 //Operating Mode field
4089 FF OperatingMode;
4090}
4091
4092FRAME TDLSDisReq
4093{
4094 FF Category;
4095 FF Action;
4096 FF DialogToken;
4097 MANDIE LinkIdentifier;
4098}
4099
4100FRAME TDLSDisRsp
4101{
4102 FF Category;
4103 FF Action;
4104 FF DialogToken;
4105 FF Capabilities;
4106 MANDIE SuppRates;
4107 OPTIE ExtSuppRates;
4108 OPTIE SuppChannels;
4109 OPTIE SuppOperatingClasses;
4110 OPTIE RSN;
4111 OPTIE ExtCap;
4112 OPTIE FTInfo;
4113 OPTIE TimeoutInterval;
4114 OPTIE RICData;
4115 OPTIE HTCaps;
4116 //Optional 20/40BSSCoexistence... ignoring
4117 MANDIE LinkIdentifier;
4118 OPTIE VHTCaps;
4119}
4120
4121FRAME TDLSSetupReq
4122{
4123 FF Category;
4124 FF Action;
4125 FF DialogToken;
4126 FF Capabilities;
4127 MANDIE SuppRates;
4128 OPTIE Country;
4129 OPTIE ExtSuppRates;
4130 OPTIE SuppChannels;
4131 OPTIE RSN;
4132 OPTIE ExtCap;
4133 OPTIE SuppOperatingClasses;
4134 OPTIE QOSCapsStation;
4135 OPTIE FTInfo;
4136 OPTIE TimeoutInterval;
4137 OPTIE RICData;
4138 OPTIE HTCaps;
4139 //Optional 20/40BSSCoexistence... ignoring
4140 MANDIE LinkIdentifier;
4141 OPTIE WMMInfoStation;
4142 OPTIE AID;
4143 OPTIE VHTCaps;
4144}
4145
4146FRAME TDLSSetupRsp
4147{
4148 FF Category;
4149 FF Action;
4150 FF Status;
4151 FF DialogToken;
4152 FF Capabilities ;
4153 OPTIE SuppRates;
4154 OPTIE Country;
4155 OPTIE ExtSuppRates;
4156 OPTIE SuppChannels;
4157 OPTIE RSN;
4158 OPTIE ExtCap;
4159 OPTIE SuppOperatingClasses;
4160 OPTIE QOSCapsStation;
4161 OPTIE FTInfo;
4162 OPTIE TimeoutInterval;
4163 OPTIE RICData;
4164 OPTIE HTCaps;
4165 //Optional 20/40BSSCoexistence... ignoring
4166 OPTIE LinkIdentifier;
4167 OPTIE WMMInfoStation;
4168 OPTIE AID;
4169 OPTIE VHTCaps;
4170 OPTIE OperatingMode;
4171}
4172
4173FRAME TDLSSetupCnf
4174{
4175 FF Category;
4176 FF Action;
4177 FF Status;
4178 FF DialogToken;
4179 OPTIE RSN;
4180 OPTIE EDCAParamSet;
4181 OPTIE FTInfo;
4182 OPTIE TimeoutInterval;
4183 OPTIE HTInfo;
4184 OPTIE LinkIdentifier;
4185 OPTIE WMMInfoStation;
4186 OPTIE VHTOperation;
4187 OPTIE OperatingMode;
4188}
4189FRAME TDLSTeardown
4190{
4191 FF Category;
4192 FF Action;
4193 FF Reason;
4194 OPTIE FTInfo;
4195 MANDIE LinkIdentifier;
4196}
4197
4198FRAME TDLSPeerTrafficInd
4199{
4200 FF Category;
4201 FF Action;
4202 FF DialogToken;
4203 MANDIE LinkIdentifier;
4204 OPTIE PTIControl;
4205 MANDIE PUBufferStatus;
4206}
4207
4208FRAME TDLSPeerTrafficRsp
4209{
4210 FF Category;
4211 FF Action;
4212 FF DialogToken;
4213 MANDIE LinkIdentifier;
4214}
4215
4216FRAME SaQueryReq
4217{
4218 FF Category;
4219 FF Action;
4220 FF TransactionId;
4221}
4222
4223FRAME SaQueryRsp
4224{
4225 FF Category;
4226 FF Action;
4227 FF TransactionId;
4228}
4229
4230FRAME RMC
4231{
4232 FF Category;
4233 FF RMCOUI;
4234 FF MagicCode;
4235 FF RMCVersion;
4236 FF Action;
4237 FF RMCDialogToken;
4238 FF Leader;
4239}
4240
4241FRAME VHTGidManagementActionFrame
4242{
4243 FF Category;
4244 FF Action;
4245 FF VhtMembershipStatusArray;
4246 FF VhtUserPositionArray;
4247}
4248
4249// Local Variables:
4250// mode: c++
4251// fill-column: 77
4252// comment-column: 42
4253// indent-tabs-mode: nil
4254// show-trailing-whitespace: t
4255// End:
4256
4257// parser.frms ends here.