1/*
2 * Copyright (c) 2006-2007, 2014-2018, 2020-2021 The Linux Foundation.
3 * All rights reserved.
4 * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
5 *
6 * Permission to use, copy, modify, and/or distribute this software for
7 * any purpose with or without fee is hereby granted, provided that the
8 * above copyright notice and this permission notice appear in all
9 * copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
12 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
14 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
15 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
16 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
17 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
18 * PERFORMANCE OF THIS SOFTWARE.
19 */
20
21/**
22 * \file dot11f.frms
23 *
24 * \brief Primary 'frames' file for the MAC parser
25 *
26 *
27 * This  file defines  several  802.11 frames  (along  with their  associated
28 * constituents) in a little language  called "frames".  When run through the
29 * 'framesc' program, it will generate  C code for working with these frames:
30 * C  structs  representing the  802.11  frame  together  with functions  for
31 * packing & unpacking them.
32 *
33 * For more information on the "frames" language, run 'framesc --help'...
34 *
35 *
36 */
37
38
39// Tell framesc what types to use for...
40%8-bit-type   uint8_t  // 8,
41%16-bit-type  uint16_t // 16,
42%32-bit-type  uint32_t // & 32-bit unsigned integral types.  These can also
43                       // be specified on the command line.
44
45// Define some mnemonic constants; these are just for our use with the frames
46// files we're compiling.  IOW, they won't result in any C code being
47// emitted.
48
49const EID_SSID                       =   0;
50const EID_SUPP_RATES                 =   1;
51const EID_FH_PARAM_SET               =   2;
52const EID_DS_PARAM_SET               =   3;
53const EID_CF_PARAM_SET               =   4;
54const EID_TIM                        =   5;
55const EID_IBSS_PARAM_SET             =   6;
56const EID_COUNTRY                    =   7;
57const EID_FH_PATTERN                 =   8;
58const EID_FH_PATT_TABLE              =   9;
59const EID_REQUEST                    =  10;
60const EID_QBSS_LOAD                  =  11;
61const EID_EDCA_PARAM_SET             =  12;
62const EID_TSPEC                      =  13;
63const EID_TCLAS                      =  14;
64const EID_SCHEDULE                   =  15;
65const EID_CHALLENGE_TEXT             =  16;
66const EID_POWER_CONSTRAINTS          =  32;
67const EID_POWER_CAPABILITY           =  33;
68const EID_TPC_REQUEST                =  34;
69const EID_TPC_REPORT                 =  35;
70const EID_SUPPORTED_CHANNELS         =  36;
71const EID_CHANNEL_SWITCH_ANN         =  37;
72const EID_MEAS_REQUEST               =  38;
73const EID_MEAS_REPORT                =  39;
74const EID_QUIET                      =  40;
75const EID_ERP_INFO                   =  42;
76const EID_TS_DELAY                   =  43;
77const EID_TCLASS_PROC                =  44;
78const EID_HT_CAPABILITIES            =  45;
79const EID_QOS_CAPABILITY             =  46;
80const EID_RSN                        =  48;
81const EID_EXT_SUPP_RATES             =  50;
82const EID_AP_CHAN_REPORT             =  51;
83const EID_NEIGHBOR_REPORT            =  52;
84const EID_RCPI                       =  53;
85const EID_FT_MOBILITY_DOMAIN         =  54;
86const EID_FT_INFO                    =  55;
87const EID_TIMEOUT_INTERVAL           =  56;
88const EID_FT_RIC_DATA                =  57;
89const EID_SUPPORTED_OPER_CLASSES     =  59;
90const EID_EXT_CHAN_SWITCH            =  60;
91const EID_HT_INFO                    =  61;
92const EID_SEC_CHAN_OFFSET            =  62;
93const EID_RSNI                       =  65;
94const EID_RRM_MEAS_PILOT_TX_INFO     =  66;
95const EID_WAPI                       =  68;
96const EID_TIME_ADVERTISEMENT         =  69;
97const EID_RRM_ENABLED_CAPS           =  70;
98const EID_MULTIPLE_BSSID             =  71;
99const EID_20_40_BSS_COEXISTENCE      =  72;
100const EID_20_40_BSS_INTOLERANT_REPORT=  73;
101const EID_OBSS_SCAN_PARAMETERS       =  74;
102const EID_FT_RIC_DESCRIPTOR          =  75;
103const EID_MSCS_STATUS                =  76;
104const EID_BSS_MAX_IDLE_PERIOD        =  90;
105const EID_LINK_IDENTIFIER            = 101;
106const EID_PTI_CONTROL                = 105;
107const EID_PU_BUFFER_STATUS           = 106;
108const EID_QOS_MAP_SET                = 110;
109const EID_ESE_SPECIFIC               = 150;
110const EID_ESE_CCKM_SPECIFIC          = 156;
111const EID_ADDBA_EXTN_ELEMENT         = 159;
112const EID_VHT_CAPABILITIES           =  191;
113const EID_VHT_OPERATION_ELEMENT      =  192;
114const EID_VHT_EXT_BSS_LOAD           =  193;
115const EID_AID                        =  197;
116const EID_EXT_CAP           	     =  127;
117const EID_OPERATING_MODE             =  199;
118const EID_WIDER_BW_CHANNEL_SWITCH_ANN=  194;
119const EID_TRANSMIT_POWER_ENVELOPE    = 195;
120const EID_CHANNEL_SWITCH_WRAPPER     = 196;
121const EID_RNR_IE                     = 201;
122const EID_VENDOR_SPECIFIC            = 221;
123const EID_FILS_INDICATION            = 240;
124const EID_FRAGMENT_IE                = 242;
125/**
126 * Extended Element ID
127 *
128 * As part of IEEE-802.11-2016 spec, extended element ID is introduced(9.4.2.1)
129 * Elements are defined to have a common general format consisting of a 1 octet
130 * Element ID field, a 1 octet Length field, an optional 1 octet Element ID
131 * Extension field, and a variable-length element-specific Information field.
132 * Each element is identified by the contents of the Element ID and, when
133 * present, Element ID Extension fields as defined in this standard. An Extended
134 * Element ID is a combination of an Element ID and an Element ID Extension for
135 * those elements that have a defined Element ID Extension. The Length field
136 * specifies the number of octets following the Length field. The presence of
137 * the Element ID Extension field is determined by the Element ID field having
138 * value of 255
139 */
140const EID_EXTN_ID_ELEMENT            = 255;
141
142const SIR_MAC_PROP_EXT_RATES_TYPE    =   0;
143const SIR_MAC_PROP_AP_NAME_TYPE      =   1;
144const SIR_MAC_PROP_HCF_TYPE          =   2;
145const SIR_MAC_PROP_WDS_TYPE          =   3;
146const SIR_MAC_PROP_BP_IND_TYPE       =   4;
147const SIR_MAC_PROP_NEIGHBOR_BSS_TYPE =   5;
148const SIR_MAC_PROP_LOAD_INFO_TYPE    =   6;
149const SIR_MAC_PROP_ASSOC_TYPE        =   7;
150const SIR_MAC_PROP_LOAD_BALANCE_TYPE =   8;
151const SIR_MAC_PROP_LL_ATTR_TYPE      =   9;
152const SIR_MAC_PROP_CAPABILITY        =  10;
153const SIR_MAC_PROP_VERSION           =  11;
154const SIR_MAC_PROP_EDCAPARAMS        =  12;
155const SIR_MAC_PROP_CHANNEL_SWITCH    =  15;
156const SIR_MAC_PROP_QUIET_BSS         =  16;
157const SIR_MAC_PROP_TRIG_STA_BK_SCAN	 =  17;
158
159const ANI_WDS_INFO_MAX_LENGTH        =  64;
160const SIR_MAC_MAX_NUMBER_OF_RATES    =  12;
161const HT_MAX_SUPPORTED_MCS_SET       =  16;
162const MAX_SUPPORTED_NEIGHBOR_RPT     =  15;
163const MAX_QOS_DSCP_DATA_LEN          =  58;
164const QOS_DSCP_RANGE_LEN             =  16;
165
166/////////////////////////////////////////////////////////////////////////////
167//                  Wi-Fi Protected Setup TLV Identifiers                  //
168//                  WSC Version 2.0.0 Table 28                             //
169/////////////////////////////////////////////////////////////////////////////
170/////////////////////////////////////////////////////////////////////////////
171//                  Wi-Fi Simple Configuration TLV Identifiers             //
172// WFA Vendor Extension Subelements                                        //
173/////////////////////////////////////////////////////////////////////////////
174const TLV_VERSION2                          = 0;
175const TLV_AUTHORIZED_MAC                    = 1;
176const TLV_NETWORK_KEY_SHAREABLE             = 2;
177const TLV_REQUEST_TO_ENROLL                 = 3;
178const TLV_SETTINGS_DELAY_TIME               = 4;
179
180const TLV_VERSION                           = 0x104A;
181const TLV_WI_FI_SIMPLE_CONFIG_STATE         = 0x1044;
182const TLV_AP_SETUP_LOCKED                   = 0x1057;
183const TLV_SELECTED_REGISTRAR_CONFIG_METHODS = 0x1053;
184const TLV_DEVICE_PASSWORD_ID                = 0x1012;
185const TLV_UUID_E                            = 0x1047;
186const TLV_UUID_R                            = 0x1048;
187const TLV_RF_BANDS                          = 0x103C;
188const TLV_REQUEST_TYPE                      = 0x103A;
189const TLV_RESPONSE_TYPE                     = 0x103B;
190const TLV_CONFIG_METHODS                    = 0x1008;
191const TLV_PRIMARY_DEVICE_TYPE               = 0x1054;
192const TLV_ASSOCIATION_STATE                 = 0x1002;
193const TLV_CONFIGURATION_ERROR               = 0x1009;
194const TLV_MANUFACTURER                      = 0x1021;
195const TLV_MODEL_NAME                        = 0x1023;
196const TLV_MODEL_NUMBER                      = 0x1024;
197const TLV_SERIAL_NUMBER                     = 0x1042;
198const TLV_DEVICE_NAME                       = 0x1011;
199const TLV_SELECTED_REGISTRAR                = 0x1041;
200const TLV_VENDOR_EXTENSION                  = 0x1049;
201const TLV_REQUESTED_DEVICE_TYPE             = 0x106A;
202
203/////////////////////////////////////////////////////////////////////////////
204//                  Wi-Fi Direct/P2P TLV Identifiers                       //
205/////////////////////////////////////////////////////////////////////////////
206const TLV_P2P_STATUS                         =   0;
207const TLV_MINOR_REASON_CODE                  =   1;
208const TLV_P2P_CAPABILITY                     =   2;
209const TLV_P2P_DEVICE_ID                      =   3;
210const TLV_P2P_GROUP_OWNER_INTENT             =   4;
211const TLV_CONFIGURATION_TIMEOUT              =   5;
212const TLV_LISTEN_CHANNEL                     =   6;
213const TLV_P2P_GROUP_BSSID                    =   7;
214const TLV_EXTENDED_LISTEN_TIMING             =   8;
215const TLV_INTENDED_P2P_INTERFACE_ADDRESS     =   9;
216const TLV_P2P_MANAGEABILITY                  =  10;
217const TLV_CHANNEL_LIST                       =  11;
218const TLV_NOTICE_OF_ABSENCE                  =  12;
219const TLV_P2P_DEVICE_INFO                    =  13;
220const TLV_P2P_GROUP_INFO                     =  14;
221const TLV_P2P_GROUP_ID                       =  15;
222const TLV_P2P_INTERFACE                      =  16;
223const TLV_OPERATING_CHANNEL                  =  17;
224const TLV_INVITATION_FLAGS                   =  18;
225const TLV_P2P_VENDOR_SPECIFIC                = 221;
226
227
228/////////////////////////////////////////////////////////////////////////////
229//                  MBO-OCE Attributes (0, 151-255: Reserved)              //
230/////////////////////////////////////////////////////////////////////////////
231const TLV_MBO_AP_CAP_ATTR                    =   1;
232const TLV_NON_PREFERRED_CHAN_REPORT_ATTR     =   2;
233const TLV_CELLULAR_DATA_CAP_ATTR             =   3;
234const TLV_ASSOC_DISSALLOWED_ATTR             =   4;
235const TLV_CELLULAR_DATA_CON_PREF_ATTR        =   5;
236const TLV_TRANSITION_REASON_CODE_ATTR        =   6;
237const TLV_TRANSITION_REJECT_REASON_CODE_ATTR =   7;
238const TLV_ASSOC_RETRY_DELAY_ATTR             =   8;
239
240// 9-100 : Reserved for MBO //
241
242// OCE ATTRIBUTES //
243const TLV_OCE_CAP_IND_ATTR                   =   101;
244const TLV_RSSI_ASSOC_REJ_ATTR                =   102;
245const TLV_REDUCED_WAN_METRICS_ATTR           =   103;
246// 104-150 : Reserved for OCE
247
248
249
250/////////////////////////////////////////////////////////////////////////////
251// Fixed Fields
252
253FF AuthAlgo (2)                           // C.f. Sec. 7.3.1.1
254{
255    algo, 2;
256}
257
258FF AuthSeqNo (2)                          // 7.3.1.2
259{
260    no, 2;
261}
262
263FF BeaconInterval (2)                     // 7.3.1.3
264{
265    interval, 2;
266}
267
268FF Capabilities (2)                       // 7.3.1.4
269{
270    {
271        ess:                1;
272        ibss:               1;
273        cfPollable:         1;
274        cfPollReq:          1;
275        privacy:            1;
276        shortPreamble:      1;
277        criticalUpdateFlag: 1;
278        channelAgility:     1;
279        spectrumMgt:        1;
280        qos:                1;
281        shortSlotTime:      1;
282        apsd:               1;
283        rrm:                1;
284        dsssOfdm:           1;
285        delayedBA:          1;
286        immediateBA:        1;
287    }
288}
289
290FF CurrentAPAddress(6)                    // 7.3.1.5
291{
292    mac[6];
293}
294
295FF ListenInterval (2)                     // 7.3.1.6
296{
297    interval, 2;
298}
299
300FF Reason (2)                             // 7.3.1.7
301{
302    code, 2;
303}
304
305FF AID (2)                                // 7.3.1.8
306{
307    associd, 2;
308}
309
310FF Status (2)                             // 7.3.1.9
311{
312    status, 2;
313}
314
315FF TimeStamp (8)                          // 7.3.1.10
316{
317    timestamp, 8;
318}
319
320FF Category (1)                           // 7.3.1.11
321{
322    category, 1;
323}
324
325FF Action (1)                             // 7.3.1.11
326{
327    action, 1;
328}
329
330FF TransactionId (2)                      // 7.3.1.11
331{
332    transId[2];
333}
334
335FF DialogToken (1)                        // 7.3.1.12
336{
337    token, 1;
338}
339
340FF StatusCode (1)                         // WMM Spec 2.2.10
341{
342    statusCode, 1;
343}
344
345FF p2p_action_oui (4)
346{
347    oui_data[4];
348}
349
350FF p2p_action_subtype (1)
351{
352    subtype, 1;
353}
354
355FF OperatingMode (1)
356{
357   {
358    //Operating Mode field
359    chanWidth:    2;
360    reserved:     2;
361    rxNSS:        3;
362    rxNSSType:    1;
363    }
364}
365
366FF SMPowerModeSet (1)				//7.3.1.25
367{
368    {
369        PowerSave_En: 1;
370        Mode: 1;
371        reserved: 6;
372     }
373}
374
375FF TSInfo (3)                             // 7.3.2.30
376{
377    {
378        traffic_type:    1;
379        tsid:            4;
380        direction:       2;
381        access_policy:   2;
382        aggregation:     1;
383        psb:             1;
384        user_priority:   3;
385        tsinfo_ack_pol:  2;
386        schedule:        1;
387        unused:         15;
388    }
389}
390
391FF NumOfRepetitions (2)
392{
393     repetitions, 2;
394}
395
396FF TxPower (1)
397{
398     txPower, 1;
399}
400
401FF MaxTxPower (1)
402{
403     maxTxPower, 1;
404}
405FF TPCEleID (1)
406{
407     TPCId, 1;
408}
409FF TPCEleLen (1)
410{
411     TPCLen, 1;
412}
413FF LinkMargin (1)
414{
415     linkMargin, 1;
416}
417FF RxAntennaId (1)
418{
419     antennaId, 1;
420}
421FF TxAntennaId (1)
422{
423     antennaId, 1;
424}
425FF RCPI (1)
426{
427     rcpi, 1;
428}
429FF RSNI (1)
430{
431     rsni, 1;
432}
433
434FF VhtMembershipStatusArray(8)                    // 8.4.1.51
435{
436    membershipStatusArray[8];
437}
438
439FF VhtUserPositionArray(16)                    // 8.4.1.52
440{
441    userPositionArray[16];
442}
443
444FF ext_chan_switch_ann_action(4)
445{
446   {
447     switch_mode: 8;
448     op_class: 8;
449     new_channel: 8;
450     switch_count: 8;
451   }
452}
453
454FF addba_param_set(2)
455{
456   {
457     amsdu_supp: 1;
458     policy: 1;
459     tid: 4;
460     buff_size: 10;
461   }
462}
463
464FF ba_timeout(2)
465{
466    timeout, 2;
467}
468
469FF ba_start_seq_ctrl(2)
470{
471    {
472      frag_number: 4;
473      ssn: 12;
474    }
475}
476
477FF vendor_oui (3)
478{
479    oui_data[3];
480}
481
482FF vendor_action_subtype (1)
483{
484    subtype, 1;
485}
486
487IE addba_extn_element(EID_ADDBA_EXTN_ELEMENT)
488{
489    {
490      no_fragmentation: 1;
491      he_frag_operation: 2;
492      reserved: 2;
493      extd_buff_size: 3;
494    }
495}
496
497FF delba_param_set(2)
498{
499    {
500      reserved: 11;
501      initiator: 1;
502      tid: 4;
503    }
504}
505
506/////////////////////////////////////////////////////////////////////////////
507//                                  TLVs                                   //
508/////////////////////////////////////////////////////////////////////////////
509
510/**
511 * \brief Version
512 *
513 * WPS 1.0h
514 * Version specifies  the Easy  Setup version. The  one-byte field  is broken
515 * into a  four-bit major  part using  the top MSBs  and four-bit  minor part
516 * using the LSBs. As an example, version 3.2 would be 0x32.
517 *
518 * WSC 2.0.0
519 * Deprecated Version mechanism. This attribute is always set to value 0x10
520 * (version 1.0) for backwards compatibility. Version 1.0h of the specification
521 * did not fully describe the version negotiation mechanism and version 2.0
522 * introduced a new subelement (Version2) for indicating the version number
523 * to avoid potential interoperability issues with deployed 1.0h-based devices.
524 *
525 */
526
527TLV Version( TLV_VERSION ) ( 2 : 2 ) MSB
528{
529  {
530      minor: 4;
531      major: 4;
532  }
533}
534
535/// Wi-Fi Protected Setup State
536TLV WPSState( TLV_WI_FI_SIMPLE_CONFIG_STATE ) ( 2 : 2 ) MSB
537{
538  state, 1;
539}
540
541/**
542 * \brief AP Setup Locked
543 *
544 *
545 * This variable indicates that the AP has entered a state in which it will
546 * refuse to allow an external Registrar to attempt to run the Registration
547 * Protocol using the AP?s PIN (with the AP acting as Enrollee). The AP
548 * should enter this state if it believes a brute force attack is underway
549 * against the AP?s PIN.
550 *
551 * When the AP is in this state, it MUST continue to allow other Enrollees to
552 * connect and run the Registration  Protocol with any external Registrars or
553 * the AP's built-in  Registrar (if any). It  is only the use of  the AP' PIN
554 * for adding external Registrars that is disabled in this state.
555 *
556 * The AP Setup Locked state can be reset to FALSE through an authenticated
557 * call to SetAPSettings. APs may provide other implementation-specific
558 * methods of resetting the AP Setup Locked state as well.
559 *
560 *
561 */
562
563TLV APSetupLocked( TLV_AP_SETUP_LOCKED ) ( 2 : 2 ) MSB
564{
565    fLocked, 1;
566}
567
568/**
569 * \brief Selected Registrar Config Methods
570 *
571 *
572 * This attribute has the same values that Config Methods have. It is used in
573 * Probe Response messages to convey the Config Methods of the selected
574 * Registrar.
575 *
576 *
577 */
578
579TLV SelectedRegistrarConfigMethods ( TLV_SELECTED_REGISTRAR_CONFIG_METHODS ) ( 2 : 2 ) MSB
580{
581    methods, 2;
582}
583
584/**
585 * \brief UUID-E
586 *
587 *
588 * The  universally  unique  identifier  (UUID)  element  is  a  unique  GUID
589 * generated by  the Enrollee. It  uniquely identifies an  operational device
590 * and  should survive reboots  and resets.  The UUID  is provided  in binary
591 * format. If the device also supports UPnP, then the UUID corresponds to the
592 * UPnP UUID.
593 *
594 *
595 */
596
597TLV UUID_E ( TLV_UUID_E ) ( 2 : 2 ) MSB
598{
599    uuid[ 16 ];
600}
601
602/**
603 * \brief UUID-R
604 *
605 *
606 * The  universally  unique  identifier  (UUID)  element  is  a  unique  GUID
607 * generated by  the Registrar. It uniquely identifies  an operational device
608 * and  should survive reboots  and resets.  The UUID  is provided  in binary
609 * format. If the device also supports UPnP, then the UUID corresponds to the
610 * UPnP UUID.
611 *
612 *
613 */
614
615TLV UUID_R ( TLV_UUID_R ) ( 2 : 2 ) MSB
616{
617    uuid[ 16 ];
618}
619
620/**
621 * \brief RF Bands
622 *
623 *
624 \code
625
626  0x01 2.4GHz
627  0x02 5.0GHz
628
629 \endcode
630 *
631 *
632 */
633
634TLV RFBands ( TLV_RF_BANDS ) ( 2 : 2 ) MSB
635{
636    bands, 1;
637}
638
639
640/**
641 * \brief Selected Registrar
642 *
643 *
644 * This field indicates that a Registrar has been selected by a user and that
645 * an Enrollee  should proceed  with setting up  an 802.1X  uncontrolled data
646 * port with the Registrar.
647 *
648 *
649 */
650
651TLV SelectedRegistrar ( TLV_SELECTED_REGISTRAR ) ( 2 : 2 ) MSB
652{
653    selected, 1;
654}
655
656/**
657 * \brief Config Methods
658 *
659 *
660 * The  Config Methods  Data component  lists the  configuration  methods the
661 * Enrollee or Registrar  supports.  The list is a bitwise  OR of values from
662 * the table below. In addition to  Config Methods, APs and STAs that support
663 * the UPnP  Management Interface must  support the Permitted  Config Methods
664 * attribute, which is used to control the Config Methods that are enabled on
665 * that AP.
666 *
667 \code
668
669   Value   Hardware Interface
670   0x0001  USBA (Flash Drive)
671   0x0002  Ethernet
672   0x0004  Label
673   0x0008  Display
674   0x0010  External NFC Token
675   0x0020  Integrated NFC Token
676   0x0040  NFC Interface
677   0x0080  PushButton
678   0x0100  Keypad
679
680 \endcode
681 *
682 *
683 */
684
685TLV ConfigMethods ( TLV_CONFIG_METHODS ) ( 2 : 2 ) MSB
686{
687    methods, 2;
688}
689
690/**
691 * \brief Association State
692 *
693 *
694 * The  Association  State component  shows  the  configuration and  previous
695 * association  state  of  the  wireless  station when  sending  a  Discovery
696 * request.
697 *
698 \code
699
700  Association State    Description
701  0                    Not Associated
702  1                    Connection Success
703  2                    Configuration Failure
704  3                    Association Failure
705  4                    IP Failure
706
707 \endcode
708 *
709 *
710 */
711
712TLV AssociationState ( TLV_ASSOCIATION_STATE ) ( 2 : 2 ) MSB
713{
714    state, 2;
715}
716
717/**
718 * \brief Configuration Error
719 *
720 *
721 * The  Configuration  Error  component   shows  the  result  of  the  device
722 * attempting to configure itself and to associate with the WLAN.
723 *
724 \code
725
726   Configuration Error  Description
727    0                   No Error
728    1                   OOB Interface Read Error
729    2                   Decryption CRC Failure
730    3                   2.4 channel not supported
731    4                   5.0 channel not supported
732    5                   Signal too weak
733    6                   Network auth failure
734    7                   Network association failure
735    8                   No DHCP response
736    9                   Failed DHCP config
737   10                   IP address conflict
738   11                   Couldn't connect to Registrar
739   12                   Multiple PBC sessions detected
740   13                   Rogue activity suspected
741   14                   Device busy
742   15                   Setup locked
743   16                   Message Timeout
744   17                   Registration Session Timeout
745   18                   Device Password Auth Failure
746
747 \endcode
748 *
749 * The  Device busy  error is  returned if  the sending  device is  unable to
750 * respond  to  the  request  due  to  some  internal  conflict  or  resource
751 * contention issue. For example, if a device is only capable of performing a
752 * single instance of the Registration Protocol at a time, it may return this
753 * error in response  to attempts to start another instance  in the middle of
754 * an active session.
755 *
756 *
757 */
758
759TLV ConfigurationError ( TLV_CONFIGURATION_ERROR ) ( 2 : 2 ) MSB
760{
761    error, 2;
762}
763
764TLV Manufacturer ( TLV_MANUFACTURER ) ( 2 : 2 ) MSB
765{
766    name[ 0..64 ];
767}
768
769TLV ModelName ( TLV_MODEL_NAME ) ( 2 : 2 ) MSB
770{
771    text[ 0..32 ];
772}
773
774TLV ModelNumber ( TLV_MODEL_NUMBER ) ( 2 : 2 ) MSB
775{
776    text[ 0..32 ];
777}
778
779TLV SerialNumber ( TLV_SERIAL_NUMBER ) ( 2 : 2 ) MSB
780{
781    text[ 0..32 ];
782}
783
784TLV DeviceName ( TLV_DEVICE_NAME ) ( 2 : 2 ) MSB
785{
786    text[ 0..32 ];
787}
788
789/**
790 * \brief Device Password ID
791 *
792 *
793 * This  attribute is  used  to identify  a  device password.  There are  six
794 * predefined values  and ten reserved values.  If the Device  Password ID is
795 * Default,  the Enrollee  should use  its PIN  password (from  the  label or
796 * display).  This  password may  correspond  to  the  label, display,  or  a
797 * user-defined  password that has  been configured  to replace  the original
798 * device password.
799 *
800 * User-specified indicates that the user  has overridden the password with a
801 * manually  selected value.  Machine-specified  indicates that  the original
802 * PIN  password has  been overridden  by a  strong,  machinegenerated device
803 * password  value.  The Rekey  value  indicates  that  the device's  256-bit
804 * rekeying password  will be used.  The PushButton value indicates  that the
805 * PIN  is  the all-zero  value  reserved  for  the PushButton  Configuration
806 * method.
807 *
808 * The Registrar-specified value indicates a  PIN that has been obtained from
809 * the Registrar (via a display  or other out-of-band method). This value may
810 * be further  augmented with the  optional 'Identity' attribute in  M1. This
811 * augmentation is useful when multiple predefined UserID/PIN pairs have been
812 * established  by a  Registrar such  as  an authenticator  used for  Hotspot
813 * access. If the  Device Password ID in  M1 is not one of  the predefined or
814 * reserved values, it corresponds to a password given to the Registrar as an
815 * OOB Device Password.
816 *
817 \code
818
819   Value            Description
820
821   0x0000           Default (PIN)
822   0x0001           User-specified
823   0x0002           Machine-specified
824   0x0003           Rekey
825   0x0004           PushButton
826   0x0005           Registrar-specified
827   0x0006 - 0x000F  Reserved
828
829 \endcode
830 *
831 *
832 */
833
834TLV DevicePasswordID ( TLV_DEVICE_PASSWORD_ID ) ( 2 : 2 ) MSB
835{
836    id, 2;
837}
838
839
840/**
841 * \brief Primary Device Type
842 *
843 *
844 * This attribute contains the primary type of the device. Its format
845 * follows:
846 *
847 \code
848
849   0 1 2 3
850   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
851   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
852   | Attribute ID                   | Length                       |
853   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
854   | Category ID                    | OUI (1-2)                    |
855   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
856   | OUI (3-4)                      | Sub Category ID              |
857   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
858
859 \endcode
860 *
861 * Vendor-specific sub-categories  are designated by  setting the OUI  to the
862 * value associated with  that vendor.  Note that a  four-byte subdivided OUI
863 * is used. For the predefined values, the  Wi-Fi Alliance OUI of 00 50 F2 04
864 * is used.  The predefined values  for Category ID  and Sub Category  ID are
865 * provided in the next table. There  is no way to indicate a vendor-specific
866 * main device  category. The OUI applies  only to the  interpretation of the
867 * Sub Category. If  a vendor does not use sub categories  for their OUI, the
868 * three-byte OUI  occupies the first  three bytes of  the OUI field  and the
869 * fourth byte is set to zero.
870 *
871 *
872 \code
873
874   Category              ID Value  Sub Category             ID Value
875   Computer              1         PC                       1
876                                   Server                   2
877                                   Media Center             3
878   Input Device          2
879   Printers, Scanners,             Printer                  1
880   Faxes and Copiers     3         Scanner                  2
881   Camera                4         Digital Still Camera     1
882   Storage               5         NAS                      1
883   Network                         AP                       1
884   Infrastructure        6         Router                   2
885                                   Switch                   3
886   Displays              7         Television               1
887                                   Electronic Picture Frame 2
888                                   Projector                3
889   Multimedia Devices    8         DAR                      1
890                                   PVR                      2
891                                   MCX                      3
892   Gaming Devices        9         Xbox                     1
893                                   Xbox360                  2
894                                   Playstation              3
895   Telephone             10        Windows Mobile           1
896
897 \endcode
898 *
899 *
900 */
901
902TLV PrimaryDeviceType ( TLV_PRIMARY_DEVICE_TYPE ) ( 2 : 2 ) MSB
903{
904    primary_category, 2;
905    oui[ 4 ];
906    sub_category, 2;
907}
908
909
910/**
911 * \brief Request Type
912 *
913 *
914 * The Request  Type component  specifies the mode  in which the  device will
915 * operate in for  this setup exchange. If the device is  an Enrollee, it may
916 * send only  discovery messages  or it may  also request that  the Registrar
917 * proceed with opening a data  connection. This protocol allows Enrollees to
918 * more efficiently discover devices on the network.
919
920 * If  the device  indicates that  it  intends to  engage setup  either as  a
921 * Registrar or an  Enrollee, the Access Point continues  to indicate that it
922 * will  operate as  an AP  in the  response. The  Request Type  attribute is
923 * carried  throughout the  802.1X data  channel setup  process in  the Wi-Fi
924 * Protected Setup IE.   There are two sub-types of  Registrars: WLAN Manager
925 * Registrar indicates  that this Registrar intends  to manage the  AP or STA
926 * settings using UPnP.  It will derive a UPnP AP or  STA Management key. The
927 * ordinary Registrar type  indicates that this Registrar does  not intend to
928 * subsequently  manage  the Enrollee's  settings.  APs  must  not derive  AP
929 * Management Keys for an ordinary  Registrar. If a Registrar does not intend
930 * to  be  a WLAN  Manager  Registrar,  it should  set  the  Request Type  to
931 * Registrar. Doing so avoids needlessly consuming resources on the AP.
932
933 \code
934
935 Request Type Value        Description
936 0x00                      Enrollee, Info only
937 0x01                      Enrollee, open 802.1X
938 0x02                      Registrar
939 0x03                      WLAN Manager Registrar
940
941 \endcode
942 *
943 *
944 */
945
946TLV RequestType ( TLV_REQUEST_TYPE ) ( 2 : 2 ) MSB
947{
948    reqType, 1;
949}
950
951/**
952 * \brief Response Type
953 *
954 *
955 * The Response Type component specifies the operational mode of the
956 * device for this setup exchange. The Response Type IE is carried
957 * throughout the 802.1X data channel setup process.
958
959 \code
960
961 Response Type Value       Description
962 0x00                      Enrollee, Info only
963 0x01                      Enrollee, open 802.1X
964 0x02                      Registrar
965 0x03                      AP
966
967\endcode
968 *
969 *
970 */
971
972TLV ResponseType ( TLV_RESPONSE_TYPE  ) ( 2 : 2 ) MSB
973{
974    resType, 1;
975}
976
977
978///////////////////////////////////////////////////////////////////////////
979//                       WiFi Direct/P2P TLVs                            //
980///////////////////////////////////////////////////////////////////////////
981
982/**
983 * \brief P2P Status Attribute
984 */
985
986TLV P2PStatus ( TLV_P2P_STATUS ) ( 1 : 2 ) LSB
987{
988    status, 1;
989}
990
991
992/**
993 * \brief Minor Reason Code Attribute
994 */
995
996TLV MinorReasonCode ( TLV_MINOR_REASON_CODE ) ( 1 : 2 ) LSB
997{
998    minorReasonCode, 1;
999}
1000
1001
1002/**
1003 * \brief P2P Capability Attribute
1004 */
1005
1006TLV P2PCapability ( TLV_P2P_CAPABILITY ) ( 1 : 2 ) LSB
1007{
1008    deviceCapability, 1;
1009    groupCapability, 1;
1010}
1011
1012
1013/**
1014 * \brief P2P Device Id Attribute
1015 */
1016
1017TLV P2PDeviceId ( TLV_P2P_DEVICE_ID ) ( 1 : 2 ) LSB
1018{
1019    P2PDeviceAddress[6];
1020}
1021
1022/**
1023 * \brief Listen Channel Attribute
1024 */
1025
1026TLV ListenChannel ( TLV_LISTEN_CHANNEL ) ( 1 : 2 ) LSB
1027{
1028    countryString[3];
1029    regulatoryClass, 1;
1030    channel,         1;
1031}
1032
1033/**
1034 * \brief Extended Listen Attribute
1035 */
1036
1037TLV ExtendedListenTiming ( TLV_EXTENDED_LISTEN_TIMING ) ( 1 : 2 ) LSB
1038{
1039    availibilityPeriod, 2;
1040    availibilityInterval, 2;
1041}
1042
1043
1044/**
1045 * \brief P2P Manageability Attribute
1046 */
1047
1048TLV P2PManageability ( TLV_P2P_MANAGEABILITY ) ( 1 : 2 ) LSB
1049{
1050    manageability, 1;
1051}
1052
1053
1054/**
1055 * \brief Notice of Absence
1056 */
1057
1058TLV NoticeOfAbsence ( TLV_NOTICE_OF_ABSENCE ) ( 1 : 2 ) LSB
1059{
1060    index, 1;
1061    CTSWindowOppPS, 1;
1062    NoADesc[0..36];
1063}
1064
1065/**
1066 * \brief P2P Device Info Attribute
1067 */
1068
1069TLV P2PDeviceInfo ( TLV_P2P_DEVICE_INFO ) ( 1 : 2 ) LSB
1070{
1071    P2PDeviceAddress[6];
1072    configMethod, 2 , FLIPBYTEORDER;
1073    primaryDeviceType[8];
1074    MANDATORYTLV DeviceName;
1075}
1076
1077
1078/**
1079 * \brief P2P Group Info Attribute
1080 */
1081
1082TLV P2PGroupInfo ( TLV_P2P_GROUP_INFO ) ( 1 : 2 ) LSB
1083{
1084    P2PClientInfoDesc[0..1024];
1085}
1086
1087
1088/**
1089 * \brief P2P Interface Attribute
1090 */
1091
1092TLV P2PInterface ( TLV_P2P_INTERFACE ) ( 1 : 2 ) LSB
1093{
1094    P2PDeviceAddress[6];
1095}
1096
1097
1098/**
1099 * \brief Operating Channel Attribute
1100 */
1101
1102TLV OperatingChannel ( TLV_OPERATING_CHANNEL ) ( 1 : 2 ) LSB
1103{
1104    countryString[3];
1105    regulatoryClass, 1;
1106    channel,         1;
1107}
1108
1109///////////////////////////////////////////////////////////////////////////
1110//                       MBO-OCE ATTR TLVs                            //
1111///////////////////////////////////////////////////////////////////////////
1112
1113TLV mbo_ap_cap ( TLV_MBO_AP_CAP_ATTR ) ( 1 : 1 ) LSB
1114{
1115    mbo_cap_ind, 1;
1116}
1117
1118TLV non_prefferd_chan_rep ( TLV_NON_PREFERRED_CHAN_REPORT_ATTR ) ( 1 : 1 ) LSB
1119{
1120    oper_class, 1;
1121    channel_report[3..254];
1122}
1123
1124TLV cellular_data_cap ( TLV_CELLULAR_DATA_CAP_ATTR ) ( 1 : 1 ) LSB
1125{
1126    cellular_connectivity, 1;
1127}
1128
1129TLV assoc_disallowed ( TLV_ASSOC_DISSALLOWED_ATTR ) ( 1 : 1 ) LSB
1130{
1131    reason_code, 1;
1132}
1133
1134TLV cellular_data_con_pref ( TLV_CELLULAR_DATA_CON_PREF_ATTR ) ( 1 : 1 ) LSB
1135{
1136    cellular_preference, 1;
1137}
1138
1139TLV transition_reason ( TLV_TRANSITION_REASON_CODE_ATTR ) ( 1 : 1 ) LSB
1140{
1141    transition_reason_code, 1;
1142}
1143
1144TLV transition_reject_reason ( TLV_TRANSITION_REJECT_REASON_CODE_ATTR ) ( 1 : 1 ) LSB
1145{
1146    transition_reject_code, 1;
1147}
1148
1149TLV assoc_retry_delay ( TLV_ASSOC_RETRY_DELAY_ATTR ) ( 1 : 1 ) LSB
1150{
1151    delay, 2;
1152}
1153
1154// OCE Attributes //
1155
1156TLV oce_cap ( TLV_OCE_CAP_IND_ATTR ) ( 1 : 1 ) LSB
1157{
1158    {
1159     oce_release: 3;
1160     is_sta_cfon : 1;
1161     non_oce_ap_present : 1;
1162     reserved: 3;
1163    }
1164}
1165
1166TLV rssi_assoc_rej ( TLV_RSSI_ASSOC_REJ_ATTR ) ( 1 : 1 ) LSB
1167{
1168    delta_rssi, 1;
1169    retry_delay, 1;
1170}
1171
1172TLV reduced_wan_metrics ( TLV_REDUCED_WAN_METRICS_ATTR ) ( 1 : 1 ) LSB
1173{
1174    {
1175     downlink_av_cap: 4;
1176     uplink_av_cap : 4;
1177    }
1178}
1179
1180/**
1181 * \brief Vendor Extension
1182 *
1183 * This variable permits vendor extensions in the Wi-Fi Simple
1184 * Configuration TLV framework. The Vendor Extension figure
1185 * illustrates the implementation of vendor extensions. Vendor
1186 * ID is the SMI network management private enterprise code
1187 *
1188 * +-----------+----------------------+
1189 * | Vendor ID |   Vendor Data        |
1190 * +-----------+----------------------+
1191 * |<--- 3 --->|<----- 1 - 1021 ----->|
1192 *
1193 */
1194
1195TLV VendorExtension ( TLV_VENDOR_EXTENSION ) ( 2 : 2 ) MSB
1196{
1197    /*
1198     * vendorId is the SMI network management private enterprise code.
1199     * WFA Vendor ID 0x00372A
1200     *
1201     */
1202    vendorId[ 3 ];
1203
1204    /**
1205     * \brief Version2
1206     *
1207     * The Version2 field specifies the version Wi-Fi Simple
1208     * Configuration implemented by the device sending this attribute.
1209     * The one-byte field is broken into a four-bit major part using
1210     * the top MSBs and four-bit minor part using the LSBs. As an example,
1211     * version 3.2 would be 0x32. This subelement was added in the
1212     * specification version 2.0 and if the subelement is not included
1213     * in a message, the transmitter of the message is assumed to
1214     * use version 1.0.
1215     *
1216     */
1217    OPTIONALTLV TLV Version2 ( TLV_VERSION2 )  ( 1 : 1 ) MSB
1218    {
1219      {
1220          minor: 4;
1221          major: 4;
1222      }
1223    }
1224    /**
1225     * \brief AuthorizedMACs
1226     *
1227     * This subelement contains a list of Enrollee MAC addresses (each
1228     * being six bytes in length) that have been registered to start WSC.
1229     * The AP includes this field in Beacon and Probe Response frames so
1230     * Enrollees can tell if they have been registered to start WSC. There
1231     * may be multiple Enrollees active on the network, but not all of them have
1232     * been registered to start WSC. This element allows an Enrollee to detect
1233     * if they should start WSC with the AP. The AuthorizedMACs field augments
1234     * the use of the Selected Registrar.
1235    *
1236     */
1237    OPTIONALTLV TLV AuthorizedMACs ( TLV_AUTHORIZED_MAC ) ( 1 : 1 ) MSB
1238    {
1239        mac[6];
1240    }
1241
1242    /**
1243     * \brief Request to Enroll
1244     *
1245     * This optional subelement in the WSC IE in Probe Request or M1 indicates
1246     * the desire to enroll in the network by setting its value to TRUE. If the
1247     * Registrar gets this subelement it can use this as a trigger that a device
1248     * wants to enroll (maybe an indication can be shown to the user). The device
1249     * must set it to FALSE after the registration protocol completion.
1250     *
1251     */
1252    OPTIONALTLV TLV RequestToEnroll( TLV_REQUEST_TO_ENROLL ) ( 1 : 1 ) MSB
1253    {
1254        req, 1;
1255    }
1256}
1257
1258/**
1259 * \brief Requested Device Type
1260 *
1261 * This attribute contains the requested device type of a Wi-Fi
1262 * Direct device.
1263 *
1264 * This attribute allows a device to specify the Primary Device Type
1265 * or the Secondary Device Type of other devices it is interested in.
1266 * Only a device that receives a Probe Request containing a WSC IE with
1267 * this attribute and with a Primary Device Type or Secondary Device Type
1268 * that matches the Requested Device Type will respond with a Probe Response.
1269 *
1270 * Its format and contents is identical to the 'Primary Device Type'.
1271 *
1272 * Both the Category ID and Sub Category ID can be used as a filter. If only
1273 * looking for devices with a certain Category ID, the OUI and Sub Category ID
1274 * fields will have to be set to zero.
1275 *
1276 */
1277TLV RequestDeviceType ( TLV_REQUESTED_DEVICE_TYPE ) ( 2 : 2 ) MSB
1278{
1279    primary_category, 2;
1280    oui[ 4 ];
1281    sub_category, 2;
1282}
1283
1284/////////////////////////////////////////////////////////////////////////////
1285// Information Elements
1286
1287IE SSID (EID_SSID)                        // C.f. Sec. 7.3.2.1
1288{
1289    ssid[0..32];
1290}
1291
1292IE SuppRates (EID_SUPP_RATES)             // 7.3.2.2
1293{
1294    rates[0..SIR_MAC_MAX_NUMBER_OF_RATES];
1295}
1296
1297IE FHParamSet (EID_FH_PARAM_SET)          // 7.3.2.3
1298{
1299    dwell_time,  2;
1300    hop_set,     1;
1301    hop_pattern, 1;
1302    hop_index,   1;
1303}
1304
1305IE DSParams (EID_DS_PARAM_SET)            // 7.3.2.4
1306{
1307    curr_channel, 1;
1308}
1309
1310IE CFParams (EID_CF_PARAM_SET)            // 7.3.2.5
1311{
1312    cfp_count,        1;
1313    cfp_period,       1;
1314    cfp_maxduration,  2;
1315    cfp_durremaining, 2;
1316}
1317
1318IE TIM (EID_TIM)                          // 7.3.2.6
1319{
1320    dtim_count,    1;
1321    dtim_period,   1;
1322    bmpctl,        1;
1323    vbmp[1..251];
1324}
1325
1326IE ChallengeText (EID_CHALLENGE_TEXT)     // 7.3.2.8
1327{
1328    text[1..253];
1329}
1330
1331IE RequestedInfo (EID_REQUEST)            // 7.3.2.12
1332{
1333    requested_eids[0..255];
1334}
1335
1336const EID_BCN_REQ_EXTENDED_INFO = 11;
1337IE ExtRequestedInfo (EID_BCN_REQ_EXTENDED_INFO)
1338{
1339    req_element_id,     1;
1340    req_element_id_ext[0..255];
1341}
1342
1343IE Country (EID_COUNTRY)                  // 7.3.2.9
1344{
1345    country[3];
1346    first_triplet[3];
1347    OPTIONAL more_triplets[3][0..80];
1348}
1349
1350IE FHParams (EID_FH_PATTERN)              // 7.3.2.10
1351{
1352    radix, 1;
1353    nchannels, 1;
1354}
1355
1356IE FHPattTable (EID_FH_PATT_TABLE)        // 7.3.2.11
1357{
1358    flag,    1;
1359    nsets,   1;
1360    modulus, 1;
1361    offset,  1;
1362    randtable[0..251];
1363}
1364
1365IE ERPInfo (EID_ERP_INFO)                 // 7.3.2.13
1366{
1367    {
1368        non_erp_present : 1;
1369        use_prot:         1;
1370        barker_preamble:  1;
1371        unused:           5;
1372    }
1373}
1374
1375IE ExtSuppRates (EID_EXT_SUPP_RATES)      // 7.3.2.14
1376{
1377    rates[1..SIR_MAC_MAX_NUMBER_OF_RATES];
1378}
1379
1380IE PowerConstraints (EID_POWER_CONSTRAINTS) // 7.3.2.15
1381{
1382    localPowerConstraints, 1;
1383}
1384
1385IE PowerCaps (EID_POWER_CAPABILITY)       // 7.3.2.16
1386{
1387    minTxPower, 1;
1388    maxTxPower, 1;
1389}
1390
1391IE TPCRequest (EID_TPC_REQUEST)           // 7.3.2.17
1392{ }
1393
1394IE TPCReport (EID_TPC_REPORT)             // 7.3.2.18
1395{
1396    tx_power,    1;
1397    link_margin, 1;
1398}
1399
1400IE SuppChannels (EID_SUPPORTED_CHANNELS)  // 7.2.3.19
1401{
1402    bands[2][0..48];
1403}
1404
1405IE SuppOperatingClasses (EID_SUPPORTED_OPER_CLASSES)
1406{
1407    classes[1..32];
1408}
1409
1410IE ChanSwitchAnn (EID_CHANNEL_SWITCH_ANN) // 7.3.2.20
1411{
1412    switchMode,  1;
1413    newChannel,  1;
1414    switchCount, 1;
1415}
1416
1417IE ext_chan_switch_ann (EID_EXT_CHAN_SWITCH) // 8.4.2.55
1418{
1419    switch_mode,   1;
1420    new_reg_class, 1;
1421    new_channel,   1;
1422    switch_count,  1;
1423}
1424
1425IE max_chan_switch_time (EID_EXTN_ID_ELEMENT) OUI (0x34)
1426{
1427    switch_time[3];
1428}
1429
1430IE sec_chan_offset_ele (EID_SEC_CHAN_OFFSET) // 7.3.2.20a
1431{
1432	secondaryChannelOffset, 1;
1433}
1434
1435IE Quiet (EID_QUIET)                      // 7.3.2.23
1436{
1437    count,    1;
1438    period,   1;
1439    duration, 2;
1440    offset,   2;
1441}
1442
1443IE RSN (EID_RSN)                          // 7.3.2.25
1444{
1445    // The version is 2 octets, and we only support version 1.
1446    version, 2 MUSTBE 1;
1447    // The next four octets will be the Optional Group Cipher Suite
1448    OPTIONAL gp_cipher_suite[4];
1449    // The IE *may* stop here; if there's any more, we should see two more
1450    // octets giving the number of Pairwise Cipher Suites
1451    OPTIONAL pwise_cipher_suite_count, 2;
1452    // I don't see anything in the Standard limiting the number of Pairwise
1453    // Cypher Suites, other than the maximum length of an IE, which limits us
1454    // to 61.  However, that seems needlessly wasteful of space.
1455    pwise_cipher_suites[4][0..6] COUNTIS pwise_cipher_suite_count;
1456    // Optional count of AKM suite selectors
1457    OPTIONAL akm_suite_cnt, 2;
1458    // Again, I see nothing in the Standard explicitly limiting the number of
1459    // AKM suite selectors other than the maximum size of an IE.
1460    akm_suite[4][0..6] COUNTIS akm_suite_cnt;
1461    OPTIONAL RSN_Cap[2];
1462    // Finally, the IE may contain zero or more PMKIDs:
1463    OPTIONAL pmkid_count, 2;
1464    pmkid[16][0..4] COUNTIS pmkid_count;
1465    OPTIONAL gp_mgmt_cipher_suite[4];
1466}
1467
1468IE RSNOpaque (EID_RSN)                    // 7.3.2.25
1469{
1470    data[ 0..253 ];
1471}
1472
1473IE WAPI (EID_WAPI)                          // 7.3.2.25
1474{
1475    // The version is 2 octets, and we only support version 1.
1476    version, 2 MUSTBE 1;
1477    // count of AKM suite selectors
1478    akm_suite_count, 2;
1479    // Again, I see nothing in the Standard explicitly limiting the number of
1480    // AKM suite selectors other than the maximum size of an IE.
1481    akm_suites[4][0..4] COUNTIS akm_suite_count;
1482    // we should see two more
1483    // octets giving the number of Unicast Cipher Suites
1484    unicast_cipher_suite_count, 2;
1485    // I don't see anything in the Standard limiting the number of Pairwise
1486    // Cypher Suites, other than the maximum length of an IE, which limits us
1487    // to 61.  However, that seems needlessly wasteful of space.
1488    unicast_cipher_suites[4][0..4] COUNTIS unicast_cipher_suite_count;
1489    // The next four octets will be the Multicast Cipher Suite
1490    multicast_cipher_suite[4];
1491    // WAPI capabilities
1492    {
1493        preauth:               1;
1494        reserved:             15;
1495    }
1496    // Finally, the IE may contain zero or more BKIDs:
1497    OPTIONAL bkid_count, 2;
1498    bkid[16][0..4] COUNTIS bkid_count;
1499}
1500
1501IE WAPIOpaque (EID_WAPI)                    // 7.3.2.25
1502{
1503    data[ 6..253 ];
1504}
1505
1506IE QBSSLoad (EID_QBSS_LOAD)               // 7.3.2.28
1507{
1508    stacount, 2;
1509    chautil,  1;
1510    avail,    2;
1511}
1512
1513IE EDCAParamSet (EID_EDCA_PARAM_SET)      // 7.3.2.29
1514{
1515    qos, 1;                     // ToDo: This is a bitfield whose format
1516                                // depends on whether this is from an AP
1517                                // or a STA, information which I'm not
1518                                // sure we have at parse time...
1519    reserved, 1;
1520    {
1521        acbe_aifsn: 4;
1522        acbe_acm:   1;
1523        acbe_aci:   2;
1524        unused1:    1;
1525    }
1526    {
1527        acbe_acwmin: 4;
1528        acbe_acwmax: 4;
1529    }
1530    acbe_txoplimit, 2;
1531    {
1532        acbk_aifsn: 4;
1533        acbk_acm:   1;
1534        acbk_aci:   2;
1535        unused2:    1;
1536    }
1537    {
1538        acbk_acwmin: 4;
1539        acbk_acwmax: 4;
1540    }
1541    acbk_txoplimit, 2;
1542    {
1543        acvi_aifsn: 4;
1544        acvi_acm:   1;
1545        acvi_aci:   2;
1546        unused3:    1;
1547    }
1548    {
1549        acvi_acwmin: 4;
1550        acvi_acwmax: 4;
1551    }
1552    acvi_txoplimit, 2;
1553    {
1554        acvo_aifsn: 4;
1555        acvo_acm:   1;
1556        acvo_aci:   2;
1557        unused4:    1;
1558    }
1559    {
1560        acvo_acwmin: 4;
1561        acvo_acwmax: 4;
1562    }
1563    acvo_txoplimit, 2;
1564}
1565
1566IE TSPEC (EID_TSPEC)                             // 7.3.2.30
1567{
1568
1569    // TS Info
1570    {
1571        traffic_type:    1;
1572        tsid:            4;
1573        direction:       2;
1574        access_policy:   2;
1575        aggregation:     1;
1576        psb:             1;
1577        user_priority:   3;
1578        tsinfo_ack_pol:  2;
1579    }
1580    {
1581        schedule:        1;
1582        unused:          7;
1583    }
1584
1585    // Nominal MSDU Size
1586    {
1587        size:  15;
1588        fixed: 1;
1589    }
1590
1591    max_msdu_size,        2;
1592    min_service_int,      4;
1593    max_service_int,      4;
1594    inactivity_int,       4;
1595    suspension_int,       4;
1596    service_start_time,   4;
1597    min_data_rate,        4;
1598    mean_data_rate,       4;
1599    peak_data_rate,       4;
1600    burst_size,           4;
1601    delay_bound,          4;
1602    min_phy_rate,         4;
1603    surplus_bw_allowance, 2;
1604    medium_time,          2;
1605
1606} // End IE TSPEC.
1607
1608IE TCLAS (EID_TCLAS)                             // 7.3.2.31
1609{
1610    user_priority, 1;
1611    classifier_type, 1;
1612    classifier_mask, 1;
1613    UNION info (DISCRIMINATOR classifier_type)
1614    {
1615        EthParams (classifier_type IS 0)
1616        {
1617            source[6];
1618            dest[6];
1619            type, 2;
1620        }
1621        IpParams (classifier_type IS 1)
1622        {
1623            version, 1;
1624            UNION params (DISCRIMINATOR version)
1625            {
1626                IpV4Params (version IS 4)
1627                {
1628                    source[4];
1629                    dest[4];
1630                    src_port, 2;
1631                    dest_port, 2;
1632                    DSCP, 1;
1633                    proto, 1;
1634                    reserved, 1;
1635                }
1636                IpV6Params (version IS 6)
1637                {
1638                    source[16];
1639                    dest[16];
1640                    src_port, 2;
1641                    dest_port, 2;
1642                    flow_label[3];
1643                }
1644            };
1645        }
1646        Params8021dq (classifier_type IS 2)
1647        {
1648            tag_type, 2;
1649        }
1650    };
1651} // End IE TCLASS
1652
1653const EID_BCN_REPORT_FRAME_BODY    = 1;
1654IE BeaconReportFrmBody (EID_BCN_REPORT_FRAME_BODY)
1655{
1656     reportedFields[0..224];
1657}
1658
1659const EID_BCN_REPORT_FRAME_BODY_FRAGMENT_ID = 2;
1660IE beacon_report_frm_body_fragment_id (EID_BCN_REPORT_FRAME_BODY_FRAGMENT_ID)
1661{
1662    // Data
1663    {
1664        beacon_report_id:    8;
1665        fragment_id_number:  7;
1666        more_fragments:      1;
1667    }
1668}
1669
1670const EID_BCN_REPORT_LAST_BEACON_REPORT_INDICATION = 164;
1671IE last_beacon_report_indication (EID_BCN_REPORT_LAST_BEACON_REPORT_INDICATION)
1672{
1673    last_fragment, 1;
1674}
1675
1676const EID_REPORTING_REASON = 1;
1677IE reporting_reason (EID_REPORTING_REASON)
1678{
1679   {
1680      failed_count: 1;
1681      fcs_error: 1;
1682      multiple_retry: 1;
1683      frame_duplicate: 1;
1684      rts_failure: 1;
1685      ack_failure: 1;
1686      retry: 1;
1687      reserved: 1;
1688   }
1689}
1690
1691const SUB_EID_BANDWIDTH_INDICATION     = 164;
1692IE bw_indication (SUB_EID_BANDWIDTH_INDICATION)
1693{
1694   {
1695       reserved: 1;
1696       disabled_sub_chan_bitmap_present: 1;
1697       reserved_1: 6;
1698   }
1699   {
1700       channel_width: 3;
1701       reserved_2: 5;
1702   }
1703   ccfs0, 1;
1704   ccfs1, 1;
1705   disabled_sub_chan_bitmap[2][0..1] COUNTIS disabled_sub_chan_bitmap_present;
1706}
1707
1708const SUB_EID_WIDE_BW_CHANNEL_SWITCH     = 163;
1709IE wide_bw_chan_switch (SUB_EID_WIDE_BW_CHANNEL_SWITCH)
1710{
1711   new_chan_width,           1;
1712   new_center_chan_freq0,    1;
1713   new_center_chan_freq1,    1;
1714}
1715
1716IE MeasurementReport (EID_MEAS_REPORT)    // 7.3.2.22
1717{
1718    token, 1;
1719    // Measurement Report Mode
1720    {
1721        late:      1;
1722        incapable: 1;
1723        refused:   1;
1724        unused:    5;
1725    }
1726    type, 1;
1727    OPTIONAL UNION report (DISCRIMINATOR type)
1728    {
1729        Basic (type IS 0)                 // 7.3.2.22.1
1730        {
1731            channel,         1;
1732            meas_start_time, 8;
1733            meas_duration,   2;
1734            // Map
1735            {
1736                bss:           1;
1737                ofdm_preamble: 1;
1738                unid_signal:   1;
1739                rader:         1;
1740                unmeasured:    1;
1741                unused:        3;
1742            }
1743        }
1744        CCA (type IS 1)
1745        {
1746            channel,           1;
1747            meas_start_time,   8;
1748            meas_duration,     2;
1749            cca_busy_fraction, 1;
1750        }
1751        RPIHistogram (type IS 2)
1752        {
1753            channel,         1;
1754            meas_start_time, 8;
1755            meas_duration,   2;
1756            rpi0_density,    1;
1757            rpi1_density,    1;
1758            rpi2_density,    1;
1759            rpi3_density,    1;
1760            rpi4_density,    1;
1761            rpi5_density,    1;
1762            rpi6_density,    1;
1763            rpi7_density,    1;
1764        }
1765        channel_load_report (type IS 3)
1766        {
1767            op_class,          1;
1768            channel,           1;
1769            meas_start_time,   8;
1770            meas_duration,     2;
1771            chan_load,         1;
1772            OPTIE wide_bw_chan_switch;
1773            OPTIE bw_indication;
1774        }
1775       Beacon (type IS 5)
1776       {
1777           regClass,               1;
1778           channel,                1;
1779           meas_start_time,        8;
1780           meas_duration,          2;
1781           // reported_frame_info,
1782           {
1783              condensed_PHY:        7;
1784              reported_frame_type: 1;
1785           }
1786           RCPI,                   1;
1787           RSNI,                   1;
1788           BSSID[6];
1789           antenna_id,               1;
1790           parent_TSF,              4;
1791           OPTIE BeaconReportFrmBody;
1792           OPTIE beacon_report_frm_body_fragment_id;
1793           OPTIE last_beacon_report_indication;
1794           //IE vendor_specific
1795     }
1796     sta_stats (type IS 7)
1797     {
1798           meas_duration,          2;
1799           group_id, 1;
1800           UNION statsgroupdata (DISCRIMINATOR group_id)
1801           {
1802                dot11_counter_stats (group_id IS 0)
1803                {
1804                        transmitted_fragment_count, 4;
1805                        group_transmitted_frame_count, 4;
1806                        failed_count, 4;
1807                        received_fragment_count, 4;
1808                        group_received_frame_count, 4;
1809                        fcs_error_count, 4;
1810                        transmitted_frame_count, 4;
1811                }
1812                dot11_mac_stats (group_id IS 1)
1813                {
1814                        retry_count, 4;
1815                        multiple_retry_count, 4;
1816                        frame_duplicate_count, 4;
1817                        rts_success_count, 4;
1818                        rts_failure_count, 4;
1819                        ack_failure_count, 4;
1820                }
1821                dot11_qos_counter (group_id IS 2)
1822                {
1823                        qos_transmitted_fragment_count, 4;
1824                        qos_failed_count, 4;
1825                        qos_retry_count, 4;
1826                        qos_multiple_retry_count, 4;
1827                        qos_frame_duplicate_count, 4;
1828                        qos_rts_success_count, 4;
1829                        qos_rts_failure_count, 4;
1830                        qos_ack_failure_count, 4;
1831                        qos_received_fragment_count, 4;
1832                        qos_transmitted_frame_count, 4;
1833                        qos_discarded_frame_count, 4;
1834                        qos_mpdus_received_count, 4;
1835                        qos_retries_received_count, 4;
1836                }
1837                dot11_bss_average_access_delay (group_id IS 10)
1838                {
1839                        ap_average_access_delay, 1;
1840                        average_access_delay_besteffort, 1;
1841                        average_access_delay_background, 1;
1842                        average_access_delay_video, 1;
1843                        average_access_delay_voice, 1;
1844                        station_count, 2;
1845                        channel_utilization, 1;
1846                }
1847            };
1848            OPTIE reporting_reason;
1849      }
1850
1851   };
1852}
1853
1854IE TSDelay (EID_TS_DELAY)                 // 7.3.2.32
1855{
1856    delay, 4;
1857}
1858
1859IE TCLASSPROC (EID_TCLASS_PROC)           // 7.3.2.33
1860{
1861    processing, 1;
1862}
1863
1864IE Schedule (EID_SCHEDULE)                // 7.3.2.34
1865{
1866    {
1867        aggregation: 1;
1868        tsid:        4;
1869        direction:   2;
1870        reserved:    9;
1871    }
1872    service_start_time, 4;
1873    service_interval,   4;
1874    max_service_dur,    2;
1875    spec_interval,      2;
1876}
1877
1878IE QOSCapsAp (EID_QOS_CAPABILITY)           // 7.3.2.35
1879{
1880    {
1881        count:   4;
1882        qack:    1;
1883        qreq:    1;
1884        txopreq: 1;
1885        reserved: 1;
1886    }
1887}
1888
1889IE QOSCapsStation (EID_QOS_CAPABILITY)           // 7.3.2.35
1890{
1891    {
1892        acvo_uapsd:    1;
1893        acvi_uapsd:    1;
1894        acbk_uapsd:    1;
1895        acbe_uapsd:    1;
1896        qack:          1;
1897        max_sp_length: 2;
1898        more_data_ack: 1;
1899    }
1900}
1901
1902IE LinkIdentifier (EID_LINK_IDENTIFIER)          // 7.3.2.62
1903{
1904    bssid[6];
1905    InitStaAddr[6];
1906    RespStaAddr[6];
1907}
1908
1909IE WPA (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x01)
1910{
1911    // This IE's first two octets should be interpreted as a version number;
1912    // we only support version 1.
1913    version, 2 MUSTBE 1;
1914    // A four-octet Multicast Cipher may or may not appear next (hence the
1915    // OPTIONAL keyword)
1916    OPTIONAL multicast_cipher[4];
1917    // Optional Unicast Cipher count
1918    OPTIONAL unicast_cipher_count, 2;
1919    // Next comes an array of four-octet Cipher Suite selectors; the COUNTIS
1920    // clause indicates that the actual number of selectors seen is in the
1921    // member 'unicast_cipher_count'.
1922    unicast_ciphers[4][0..4] COUNTIS unicast_cipher_count;
1923    // (Optional) Authentication suites:
1924    OPTIONAL auth_suite_count, 2;
1925    auth_suites[4][0..4] COUNTIS auth_suite_count;
1926    // This field is declared optional as per bugs 15234, 14755, & 14991.
1927    OPTIONAL caps, 2;
1928}
1929
1930IE WPAOpaque (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x01)
1931{
1932    data[ 2..249 ];
1933}
1934
1935IE WMMInfoStation (EID_VENDOR_SPECIFIC) OUI(0x00, 0x50, 0xF2, 0x02, 0x00)
1936{
1937    // This IE contains the QoS Info field when sent from WMM Station
1938    version, 1;
1939    {
1940        acvo_uapsd:    1;
1941        acvi_uapsd:    1;
1942        acbk_uapsd:    1;
1943        acbe_uapsd:    1;
1944        reserved1:     1;
1945        max_sp_length: 2;
1946        reserved2:     1;
1947    }
1948}
1949
1950IE WMMInfoAp (EID_VENDOR_SPECIFIC) OUI(0x00, 0x50, 0xF2, 0x02, 0x00)
1951{
1952    // This IE contains the QoS Info field when sent from WMM AP
1953    version, 1;
1954    {
1955        param_set_count: 4;
1956        reserved:        3;
1957        uapsd:           1;
1958    }
1959}
1960
1961
1962IE WMMParams (EID_VENDOR_SPECIFIC) OUI(0x00, 0x50, 0xF2, 0x02, 0x01)
1963{
1964    version, 1 MUSTBE 1;
1965    qosInfo, 1;                           // ToDo: This is actually a
1966                                          // bitfield, but it's format
1967                                          // varies depending on whether
1968                                          // the sender is a STA or AP...
1969    reserved2, 1;
1970    {
1971        acbe_aifsn: 4;
1972        acbe_acm: 1;
1973        acbe_aci: 2;
1974        unused1: 1;
1975    }
1976    {
1977        acbe_acwmin: 4;
1978        acbe_acwmax: 4;
1979    }
1980    acbe_txoplimit, 2;
1981    {
1982        acbk_aifsn: 4;
1983        acbk_acm: 1;
1984        acbk_aci: 2;
1985        unused2: 1;
1986    }
1987    {
1988        acbk_acwmin: 4;
1989        acbk_acwmax: 4;
1990    }
1991    acbk_txoplimit, 2;
1992    {
1993        acvi_aifsn: 4;
1994        acvi_acm: 1;
1995        acvi_aci: 2;
1996        unused3: 1;
1997    }
1998    {
1999        acvi_acwmin: 4;
2000        acvi_acwmax: 4;
2001    }
2002    acvi_txoplimit, 2;
2003    {
2004        acvo_aifsn: 4;
2005        acvo_acm: 1;
2006        acvo_aci: 2;
2007        unused4: 1;
2008    }
2009    {
2010        acvo_acwmin: 4;
2011        acvo_acwmax: 4;
2012    }
2013    acvo_txoplimit, 2;
2014}
2015
2016IE WMMTSPEC (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xf2, 0x02, 0x02)
2017{
2018    version, 1 MUSTBE 1;
2019
2020    // TS Info
2021    {
2022        traffic_type:    1;
2023        tsid:            4;
2024        direction:       2;
2025        access_policy:   2;
2026        aggregation:     1;
2027        psb:             1;
2028        user_priority:   3;
2029        tsinfo_ack_pol:  2;
2030    }
2031    {
2032       tsinfo_rsvd:      7;
2033       burst_size_defn:  1;
2034    }
2035
2036    // Nominal MSDU Size
2037    {
2038        size:  15;
2039        fixed: 1;
2040    }
2041
2042    max_msdu_size,        2;
2043    min_service_int,      4;
2044    max_service_int,      4;
2045    inactivity_int,       4;
2046    suspension_int,       4;
2047    service_start_time,   4;
2048    min_data_rate,        4;
2049    mean_data_rate,       4;
2050    peak_data_rate,       4;
2051    burst_size,           4;
2052    delay_bound,          4;
2053    min_phy_rate,         4;
2054    surplus_bw_allowance, 2;
2055    medium_time,          2;
2056
2057} // End IE WMMTSpec.
2058
2059IE WMMCaps (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x05)
2060{
2061    version, 1 MUSTBE 1;
2062    {
2063        reserved:      4;
2064        qack:          1;
2065        queue_request: 1;
2066        txop_request:  1;
2067        more_ack:      1;
2068    }
2069}
2070
2071IE WMMTCLAS (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x06)
2072{
2073    version, 1 MUSTBE 1;
2074
2075    user_priority, 1;
2076    classifier_type, 1;
2077    classifier_mask, 1;
2078    UNION info (DISCRIMINATOR classifier_type)
2079    {
2080        EthParams (classifier_type IS 0)
2081        {
2082            source[6];
2083            dest[6];
2084            type, 2;
2085        }
2086        IpParams (classifier_type IS 1)
2087        {
2088            version, 1;
2089            UNION params (DISCRIMINATOR version)
2090            {
2091                IpV4Params (version IS 4)
2092                {
2093                    source[4];
2094                    dest[4];
2095                    src_port, 2;
2096                    dest_port, 2;
2097                    DSCP, 1;
2098                    proto, 1;
2099                    reserved, 1;
2100                }
2101                IpV6Params (version IS 6)
2102                {
2103                    source[16];
2104                    dest[16];
2105                    src_port, 2;
2106                    dest_port, 2;
2107                    flow_label[3];
2108                }
2109            };
2110        }
2111        Params8021dq (classifier_type IS 2)
2112        {
2113            tag_type, 2;
2114        }
2115    };
2116
2117}
2118
2119IE WMMTCLASPROC (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x07)
2120{
2121    version, 1 MUSTBE 1;
2122    processing, 1;
2123}
2124
2125IE WMMTSDelay (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x08)
2126{
2127    version, 1 MUSTBE 1;
2128    delay, 4;
2129}
2130
2131IE WMMSchedule (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x09)
2132{
2133    version, 1 MUSTBE 1;
2134
2135    {
2136        aggregation: 1;
2137        tsid:        4;
2138        direction:   2;
2139        reserved:    9;
2140    }
2141
2142    service_start_time, 4;
2143    service_interval,   4;
2144    max_service_dur,    2;
2145    spec_interval,      2;
2146}
2147
2148IE ESERadMgmtCap (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x01)
2149{
2150
2151    mgmt_state,  1;
2152
2153    {
2154        mbssid_mask:    3;
2155        reserved:       5;
2156    }
2157
2158}
2159
2160IE Vendor1IE (EID_VENDOR_SPECIFIC) OUI (0x00, 0x10, 0x18)
2161{
2162}
2163
2164IE Vendor3IE (EID_VENDOR_SPECIFIC) OUI (0x00, 0x16, 0x32)
2165{
2166}
2167
2168IE hs20vendor_ie (EID_VENDOR_SPECIFIC) OUI (0x50, 0x6F, 0x9A, 0x10)
2169{
2170    /* hotspot_configurations */
2171    {
2172        dgaf_dis:               1;
2173        hs_id_present:          2;
2174        reserved:               1;
2175        release_num:            4;
2176    }
2177    OPTIONAL UNION hs_id (DISCRIMINATOR hs_id_present)
2178    {
2179        pps_mo (hs_id_present IS 1)
2180        {
2181            pps_mo_id,          2;
2182        }
2183        anqp_domain (hs_id_present IS 2)
2184        {
2185            anqp_domain_id,     2;
2186        }
2187    };
2188}
2189
2190IE osen_ie (EID_VENDOR_SPECIFIC) OUI (0x50, 0x6F, 0x9A, 0x12)
2191{
2192    data[0..255];
2193}
2194
2195IE roaming_consortium_sel (EID_VENDOR_SPECIFIC) OUI (0x50, 0x6F, 0x9A, 0x1d)
2196{
2197    data[0..255];
2198}
2199
2200IE QComVendorIE (EID_VENDOR_SPECIFIC) OUI (0x00, 0xA0, 0xC6)
2201{
2202    type,      1;
2203    channel,   1;
2204}
2205
2206IE ESETrafStrmMet (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x07)
2207{
2208    tsid,           1;
2209    state,          1;
2210    msmt_interval,  2;
2211}
2212
2213IE ESETrafStrmRateSet (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x08)
2214{
2215    tsid,         1;
2216    tsrates[0..8];
2217}
2218
2219IE ESEVersion (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x03)
2220{
2221    version,           1;
2222}
2223
2224IE ESETxmitPower (EID_ESE_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x00)
2225{
2226    power_limit,    1;
2227    reserved,       1;
2228}
2229
2230IE ESECckmOpaque (EID_ESE_CCKM_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x00)
2231{
2232    data[ 6..20 ];
2233}
2234
2235IE RRMEnabledCap (EID_RRM_ENABLED_CAPS)
2236{
2237     //Capability bitmap
2238     {
2239          LinkMeasurement:         1;
2240          NeighborRpt:             1;
2241          parallel:                1;
2242          repeated:                1;
2243          BeaconPassive:           1;
2244          BeaconActive:            1;
2245          BeaconTable:             1;
2246          BeaconRepCond:           1;
2247     }
2248     {
2249          FrameMeasurement:        1;
2250          ChannelLoad:             1;
2251          NoiseHistogram:          1;
2252          statistics:              1;
2253          LCIMeasurement:          1;
2254          LCIAzimuth:              1;
2255          TCMCapability:           1;
2256          triggeredTCM:            1;
2257     }
2258     {
2259          APChanReport:            1;
2260          RRMMIBEnabled:           1;
2261          operatingChanMax:        3;
2262          nonOperatinChanMax:      3;
2263     }
2264     {
2265          MeasurementPilot:        3;
2266          MeasurementPilotEnabled: 1;
2267          NeighborTSFOffset:       1;
2268          RCPIMeasurement:         1;
2269          RSNIMeasurement:         1;
2270          BssAvgAccessDelay:       1;
2271     }
2272     {
2273          BSSAvailAdmission:       1;
2274          AntennaInformation:      1;
2275          fine_time_meas_rpt:      1;
2276          lci_capability:          1;
2277          reserved:                4;
2278     }
2279}
2280
2281IE MeasurementPilot (EID_RRM_MEAS_PILOT_TX_INFO)
2282{
2283     measurementPilot, 1;
2284     vendorSpecific[0..255]; //Should be an IE. But currently only one level of nesting allowed. Can ignore for now.
2285}
2286
2287IE MultiBssid (EID_MULTIPLE_BSSID)
2288{
2289     maxBSSIDIndicator, 1;
2290     vendorSpecific[0..255];
2291}
2292
2293IE OBSSScanParameters (EID_OBSS_SCAN_PARAMETERS)
2294{
2295    obssScanPassiveDwell, 2;
2296	obssScanActiveDwell, 2;
2297	bssChannelWidthTriggerScanInterval, 2;
2298	obssScanPassiveTotalPerChannel, 2;
2299	obssScanActiveTotalPerChannel, 2;
2300	bssWidthChannelTransitionDelayFactor, 2;
2301    obssScanActivityThreshold, 2;
2302}
2303
2304IE ht2040_bss_coexistence (EID_20_40_BSS_COEXISTENCE)
2305{
2306     // 20/40 BSS Coexistence Information
2307    {
2308        info_request:               1;
2309        forty_mhz_intolerant:       1;
2310        twenty_mhz_bsswidth_req:    1;
2311        obss_scan_exemption_req:    1;
2312        obss_scan_exemption_grant:  1;
2313        unused:                     3;
2314    }
2315}
2316
2317IE ht2040_bss_intolerant_report (EID_20_40_BSS_INTOLERANT_REPORT)
2318{
2319     operating_class, 1;
2320     channel_list[0..50];
2321}
2322
2323const EID_RRM_NBR_RPT_TSF              =    1;
2324const EID_RRM_NBR_CD_COUNTRY           =    2;
2325
2326IE TSFInfo (EID_RRM_NBR_RPT_TSF)
2327{
2328     TsfOffset, 2;
2329     BeaconIntvl, 2;
2330}
2331IE CondensedCountryStr (EID_RRM_NBR_CD_COUNTRY)
2332{
2333     countryStr[2];
2334}
2335
2336IE NeighborReport (EID_NEIGHBOR_REPORT)
2337{
2338     bssid[6];
2339     //Bssid Info
2340     {
2341          APReachability: 2;
2342          Security:       1;
2343          KeyScope:       1;
2344          //Capabilities
2345          SpecMgmtCap:    1;
2346          QosCap:         1;
2347          apsd:           1;
2348          rrm:            1;
2349     }
2350     //Capabilities contd.
2351     {
2352          DelayedBA:      1;
2353          ImmBA:          1;
2354     //Capabilities end.
2355          MobilityDomain: 1;
2356          reserved:       5;
2357     }
2358
2359          reserved1,      2; //part of BSSID Info.
2360
2361     regulatoryClass, 1;
2362     channel,         1;
2363     PhyType,         1;
2364     OPTIE IE TSFInfo;
2365     OPTIE IE CondensedCountryStr;
2366     OPTIE IE MeasurementPilot;
2367     OPTIE IE RRMEnabledCap;
2368     OPTIE IE MultiBssid;
2369     //Ignoring vendor specific.
2370}
2371
2372IE RCPIIE (EID_RCPI)
2373{
2374     rcpi, 1;
2375}
2376
2377IE RSNIIE (EID_RSNI)
2378{
2379     rsni, 1;
2380}
2381
2382IE WFATPC (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x08, 0x00)
2383{
2384     txPower, 1;
2385     linkMargin, 1;
2386}
2387
2388IE MobilityDomain (EID_FT_MOBILITY_DOMAIN)
2389{
2390   MDID, 2;
2391   //FT Capability and policy
2392   {
2393      overDSCap:         1;
2394      resourceReqCap:    1;
2395      reserved:          6;
2396   }
2397}
2398const SUB_EID_FT_R1KH_ID = 1;
2399const SUB_EID_FT_GTK     = 2;
2400const SUB_EID_FT_R0KH_ID = 3;
2401const SUB_EID_FT_IGTK    = 4;
2402IE FTInfo (EID_FT_INFO)
2403{
2404   // MicControl, 2;
2405   {
2406      reserved: 8;
2407      IECount:  8;
2408   }
2409   MIC[16];
2410   Anonce[32];
2411   Snonce[32];
2412
2413   OPTIE IE R1KH_ID (SUB_EID_FT_R1KH_ID)
2414   {
2415      PMK_R1_ID[6];
2416   }
2417
2418   OPTIE IE GTK (SUB_EID_FT_GTK)
2419   {
2420      //Key Info
2421      {
2422         keyId: 2;
2423         reserved: 14;
2424      }
2425      keyLength, 1;
2426      RSC[8];
2427      key[5..32];
2428   }
2429
2430   OPTIE IE R0KH_ID (SUB_EID_FT_R0KH_ID)
2431   {
2432      PMK_R0_ID[1..48];
2433   }
2434
2435   OPTIE IE IGTK (SUB_EID_FT_IGTK)
2436   {
2437      //Key Info
2438      keyID[2];
2439      IPN[6];
2440      keyLength, 1;
2441      key[24];
2442   }
2443}
2444
2445IE TimeoutInterval (EID_TIMEOUT_INTERVAL)
2446{
2447   timeoutType, 1;
2448   timeoutValue, 4;
2449}
2450
2451//TODO: need to define this properly.
2452IE RICData (EID_FT_RIC_DATA)
2453{
2454   Identifier, 1;
2455   resourceDescCount, 1;
2456   statusCode, 2;
2457}
2458
2459IE RICDescriptor (EID_FT_RIC_DESCRIPTOR)
2460{
2461   resourceType, 1;
2462   variableData[0..255]; //Block ack param set...TODO:
2463}
2464
2465IE WscIEOpaque (EID_VENDOR_SPECIFIC) OUI ( 0x00, 0x50, 0xF2, 0x04 )
2466{
2467    data[ 2..249 ];
2468}
2469
2470IE P2PIEOpaque (EID_VENDOR_SPECIFIC) OUI ( 0x50, 0x6F, 0x9A, 0x09 )
2471{
2472    data[ 2..249 ];
2473}
2474
2475IE WFDIEOpaque (EID_VENDOR_SPECIFIC) OUI ( 0x50, 0x6F, 0x9A, 0x0A )
2476{
2477    data[ 2..249 ];
2478}
2479
2480IE PTIControl (EID_PTI_CONTROL)                 // 7.3.2.65
2481{
2482    tid,                  1;
2483    sequence_control,     2;
2484}
2485
2486IE oci (EID_EXTN_ID_ELEMENT) OUI ( 0x36 )
2487{
2488    op_class, 1;
2489    prim_ch_num, 1;
2490    freq_seg_1_ch_num, 1;
2491}
2492
2493IE PUBufferStatus (EID_PU_BUFFER_STATUS)        // 7.3.2.66
2494{
2495    {
2496        ac_bk_traffic_aval:          1;
2497        ac_be_traffic_aval:          1;
2498        ac_vi_traffic_aval:          1;
2499        ac_vo_traffic_aval:          1;
2500        reserved:    4;
2501    }
2502}
2503
2504
2505IE bss_max_idle_period (EID_BSS_MAX_IDLE_PERIOD)
2506{
2507    max_idle_period,     2;
2508    {
2509        prot_keep_alive_reqd: 1;
2510        reserved:             7;
2511    }
2512}
2513
2514IE VHTCaps (EID_VHT_CAPABILITIES)
2515{
2516    //VHT Capability Info
2517    {
2518        maxMPDULen:               2;
2519        supportedChannelWidthSet: 2;
2520        ldpcCodingCap:            1;
2521        shortGI80MHz:             1;
2522        shortGI160and80plus80MHz: 1;
2523        txSTBC:                   1;
2524        rxSTBC:                   3;
2525        suBeamFormerCap:          1;
2526        suBeamformeeCap:          1;
2527        csnofBeamformerAntSup:    3;
2528        numSoundingDim:           3;
2529        muBeamformerCap:          1;
2530        muBeamformeeCap:          1;
2531        vhtTXOPPS:                1;
2532        htcVHTCap:                1;
2533        maxAMPDULenExp:           3;
2534        vhtLinkAdaptCap:          2;
2535        rxAntPattern:             1;
2536        txAntPattern:             1;
2537        extended_nss_bw_supp:     2;
2538    }
2539    rxMCSMap,                     2;
2540    {
2541         rxHighSupDataRate:       13;
2542         max_nsts_total:          3;
2543    }
2544    txMCSMap,                     2;
2545    {
2546        txSupDataRate:            13;
2547        vht_extended_nss_bw_cap:  1;
2548        reserved:                 2;
2549    }
2550}
2551
2552IE VHTOperation (EID_VHT_OPERATION_ELEMENT)
2553{
2554    chanWidth,             1;
2555    chan_center_freq_seg0, 1;
2556    chan_center_freq_seg1, 1;
2557    basicMCSSet,           2;
2558}
2559
2560IE VHTExtBssLoad (EID_VHT_EXT_BSS_LOAD)
2561{
2562    muMIMOCapStaCount,    1;
2563    ssUnderUtil,          1;
2564    FortyMHzUtil,         1;
2565    EightyMHzUtil,        1;
2566    OneSixtyMHzUtil,      1;
2567}
2568
2569IE AID (EID_AID)
2570{
2571    assocId,              2;
2572}
2573
2574IE WiderBWChanSwitchAnn (EID_WIDER_BW_CHANNEL_SWITCH_ANN)
2575{
2576   newChanWidth,          1;
2577   newCenterChanFreq0,    1;
2578   newCenterChanFreq1,    1;
2579}
2580
2581IE transmit_power_env (EID_TRANSMIT_POWER_ENVELOPE)
2582{
2583    {
2584        max_tx_pwr_count:             3;
2585        max_tx_pwr_interpret:         3;
2586        max_tx_pwr_category:          2;
2587    }
2588    tx_power[1..8];
2589    OPTIONAL UNION ext_max_tx_power (DISCRIMINATOR max_tx_pwr_interpret)
2590    {
2591       ext_max_tx_power_local_eirp (max_tx_pwr_interpret IS 0) {
2592               max_tx_power_for_320, 1;
2593       }
2594       ext_max_tx_power_local_psd (max_tx_pwr_interpret IS 1) {
2595               //ext_transmit_psd_info, 1;
2596               {
2597                       ext_count: 4;
2598                       reserved: 4;
2599               }
2600               max_tx_psd_power[8];
2601       }
2602       ext_max_tx_power_reg_eirp (max_tx_pwr_interpret IS 2) {
2603               max_tx_power_for_320, 1;
2604       }
2605       ext_max_tx_power_reg_psd (max_tx_pwr_interpret IS 3) {
2606               //ext_transmit_psd_info, 1;
2607               {
2608                       ext_count: 4;
2609                       reserved: 4;
2610               }
2611               max_tx_psd_power[8];
2612       }
2613
2614    };
2615}
2616
2617IE bw_ind_element (EID_EXTN_ID_ELEMENT) OUI (0x87)
2618{
2619   {
2620       reserved: 1;
2621       disabled_sub_chan_bitmap_present: 1;
2622       reserved_1: 6;
2623   }
2624   {
2625       channel_width: 3;
2626       reserved_2: 5;
2627   }
2628   ccfs0, 1;
2629   ccfs1, 1;
2630   disabled_sub_chan_bitmap[2][0..1] COUNTIS disabled_sub_chan_bitmap_present;
2631}
2632
2633IE ChannelSwitchWrapper (EID_CHANNEL_SWITCH_WRAPPER)
2634{
2635    OPTIE IE  WiderBWChanSwitchAnn;
2636    OPTIE IE  transmit_power_env;
2637    OPTIE IE  bw_ind_element;
2638}
2639
2640IE reduced_neighbor_report (EID_RNR_IE)
2641{
2642    // TBTT Information Header
2643    {
2644	tbtt_type:              2;
2645	filtered_neighbor_ap:   1;
2646	reserved:               1;
2647	tbtt_info_count:        4;
2648	tbtt_info_len:          8;
2649    }
2650    op_class, 1;
2651    channel_num, 1;
2652    // TBTT information field
2653    UNION tbtt_info (DISCRIMINATOR tbtt_info_len)
2654    {
2655	tbtt_info_1 (tbtt_info_len IS 1)
2656	{
2657		tbtt_offset, 1;
2658	}
2659	tbtt_info_2 (tbtt_info_len IS 2)
2660	{
2661		tbtt_offset, 1;
2662		bss_params, 1;
2663	}
2664	tbtt_info_5 (tbtt_info_len IS 5)
2665	{
2666		tbtt_offset, 1;
2667		short_ssid, 4;
2668	}
2669	tbtt_info_6 (tbtt_info_len IS 6)
2670	{
2671		tbtt_offset, 1;
2672		short_ssid, 4;
2673		bss_params, 1;
2674	}
2675	tbtt_info_7 (tbtt_info_len IS 7)
2676	{
2677		tbtt_offset, 1;
2678		bssid[6];
2679	}
2680	tbtt_info_8 (tbtt_info_len IS 8)
2681	{
2682		tbtt_offset, 1;
2683		bssid[6];
2684		bss_params, 1;
2685	}
2686	tbtt_info_9 (tbtt_info_len IS 9)
2687	{
2688		tbtt_offset, 1;
2689		bssid[6];
2690		bss_params, 1;
2691		psd_20mhz, 1;
2692	}
2693	tbtt_info_11 (tbtt_info_len IS 11)
2694	{
2695		tbtt_offset, 1;
2696		bssid[6];
2697		short_ssid, 4;
2698	}
2699	tbtt_info_12 (tbtt_info_len IS 12)
2700	{
2701		tbtt_offset, 1;
2702		bssid[6];
2703		short_ssid, 4;
2704		bss_params, 1;
2705	}
2706	tbtt_info_13 (tbtt_info_len IS 13)
2707	{
2708		tbtt_offset, 1;
2709		bssid[6];
2710		short_ssid, 4;
2711		bss_params, 1;
2712		psd_20mhz, 1;
2713	}
2714	tbtt_info_16 (tbtt_info_len IS 16)
2715	{
2716		tbtt_offset, 1;
2717		bssid[6];
2718		short_ssid, 4;
2719		bss_params, 1;
2720		psd_20mhz, 1;
2721		mld_id, 1;
2722		{
2723		     link_id:                   4;
2724		     bss_param_change_cnt:      8;
2725		     all_updates_included:      1;
2726		     reserved:                  3;
2727		}
2728	}
2729    };
2730}
2731
2732IE ExtCap (EID_EXT_CAP)
2733{
2734    bytes[1..15];
2735}
2736
2737IE HTCaps (EID_HT_CAPABILITIES)
2738{
2739    // HT Capability Info
2740    {
2741        advCodingCap:             1;
2742        supportedChannelWidthSet: 1;
2743        mimoPowerSave:            2;
2744        greenField:               1;
2745        shortGI20MHz:             1;
2746        shortGI40MHz:             1;
2747        txSTBC:                   1;
2748        rxSTBC:                   2;
2749        delayedBA:                1;
2750        maximalAMSDUsize:         1;
2751        dsssCckMode40MHz:         1;
2752        psmp:                     1;
2753        stbcControlFrame:         1;
2754        lsigTXOPProtection:       1;
2755    }
2756    // HT Parameters Info;
2757    {
2758        maxRxAMPDUFactor: 2;
2759        mpduDensity:      3;
2760        reserved1:        3;
2761    }
2762
2763    supportedMCSSet[ HT_MAX_SUPPORTED_MCS_SET ];
2764
2765    // Extended HT Capability Info
2766    {
2767        pco:            1;
2768        transitionTime: 2;
2769        reserved2:      5;
2770        mcsFeedback:    2;
2771        reserved3:      6;
2772    }
2773    // TXBF Capability Info
2774    {
2775        txBF:                                       1;
2776        rxStaggeredSounding:                        1;
2777        txStaggeredSounding:                        1;
2778        rxZLF:                                      1;
2779        txZLF:                                      1;
2780        implicitTxBF:                               1;
2781        calibration:                                2;
2782        explicitCSITxBF:                            1;
2783        explicitUncompressedSteeringMatrix:         1;
2784        explicitBFCSIFeedback:                      3;
2785        explicitUncompressedSteeringMatrixFeedback: 3;
2786        explicitCompressedSteeringMatrixFeedback:   3;
2787        csiNumBFAntennae:                           2;
2788        uncompressedSteeringMatrixBFAntennae:       2;
2789        compressedSteeringMatrixBFAntennae:         2;
2790        reserved4:           7;
2791    }
2792    // AS Capability Info
2793    {
2794        antennaSelection:         1;
2795        explicitCSIFeedbackTx:    1;
2796        antennaIndicesFeedbackTx: 1;
2797        explicitCSIFeedback:      1;
2798        antennaIndicesFeedback:   1;
2799        rxAS:                     1;
2800        txSoundingPPDUs:          1;
2801        reserved5:                1;
2802    }
2803    //TODO: take it out when generic fix to remove extra bytes in IE is available.
2804    //This is required to interop with Dlink AP which is sending 2 bytes extra in HTInfo IE.
2805    rsvd[0..32];
2806
2807} // End IE HTCaps.
2808
2809IE HTInfo (EID_HT_INFO)
2810{
2811    primaryChannel, 1;
2812
2813    // ahtInfoField1
2814    {
2815        secondaryChannelOffset:     2;
2816        recommendedTxWidthSet:      1;
2817        rifsMode:                   1;
2818        controlledAccessOnly:       1;
2819        serviceIntervalGranularity: 3;
2820    }
2821
2822    // ahtInfoField2
2823
2824
2825    // ahtInfoField2
2826    {
2827        opMode:              2;
2828        nonGFDevicesPresent: 1;
2829        transmitBurstLimit: 1;
2830        obssNonHTStaPresent:1;
2831        chan_center_freq_seg2:8;
2832        reserved:           3;
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        vht_160_80p80_supp: 1;
2861        no_ldpc:            1;
2862        rxNSS:              3;
2863        rxNSSType:          1;
2864    }
2865}
2866
2867IE QosMapSet (EID_QOS_MAP_SET)
2868{
2869    dscp_exceptions[QOS_DSCP_RANGE_LEN..MAX_QOS_DSCP_DATA_LEN];
2870}
2871
2872CONTAINERIE RICDataDesc
2873{
2874  MANDIE RICData;
2875  OPTIE  RICDescriptor;
2876  OPTIE  TSPEC;
2877  OPTIE  TCLAS[0..2];
2878  OPTIE  TCLASSPROC;
2879  OPTIE  TSDelay;
2880  OPTIE  Schedule;
2881  OPTIE  WMMTSPEC;
2882  OPTIE  WMMTCLAS[0..2];
2883  OPTIE  WMMTCLASPROC;
2884  OPTIE  WMMTSDelay;
2885  OPTIE  WMMSchedule;
2886}
2887
2888IE TimeAdvertisement (EID_TIME_ADVERTISEMENT)   // 8.4.2.63
2889{
2890    timing_capabilities, 1;
2891    time_value[10];
2892    time_error[5];
2893}
2894
2895/**
2896 * This all attributes are defined under qcn_attribute_id enum of
2897 * cmn code in wlan_cmn_ieee80211.h file.
2898 */
2899const TLV_VERSION_ATTR_ID                 = 1;
2900const TLV_VHT_MCS_10_11_ATTR_ID           = 2;
2901const TLV_HE_400NS_SGI_SUPP_ATTR_ID       = 3;
2902const TLV_HE_2XLTF_160_80P80_SUPP_ATTR_ID = 4;
2903const TLV_HE_DL_OFDMA_SUPPP_ATTR_ID       = 5;
2904const TLV_TRANSITION_REASONP_ATTR_ID      = 6;
2905const TLV_TRANSITION_REJECTIONP_ATTR_ID   = 7;
2906const TLV_HE_DL_MUMIMO_SUPPP_ATTR_ID      = 8;
2907const TLV_HE_MCS_11_12_ATTR_ID            = 9;
2908const TLV_EDCA_PIFS_PARAM_ATTR_ID         = 13;
2909const TLV_ECSA_TARGET_TSF_INFO_ATTR_ID    = 14;
2910
2911TLV qcn_version(TLV_VERSION_ATTR_ID) ( 1 : 1 ) LSB
2912{
2913	version, 1;
2914	sub_version, 1;
2915}
2916TLV vht_mcs11_attr (TLV_VHT_MCS_10_11_ATTR_ID) ( 1 : 1 ) LSB
2917{
2918      vht_mcs_10_11_supp, 1;
2919}
2920TLV he_400ns_sgi_attr (TLV_HE_400NS_SGI_SUPP_ATTR_ID) ( 1 : 1 ) LSB
2921{
2922   he_ltf1x_400ns_sgi, 1;
2923   he_ltf2x_400ns_sgi, 1;
2924   he_ltf4x_400ns_sgi, 1;
2925}
2926
2927TLV he_2xltf_160mhz_supp (TLV_HE_2XLTF_160_80P80_SUPP_ATTR_ID) ( 1 : 1 ) LSB
2928{
2929   he_2xltf_160MHz_supp, 1;
2930}
2931
2932TLV he_dl_ofdma_attr (TLV_HE_DL_OFDMA_SUPPP_ATTR_ID) ( 1 : 1 ) LSB
2933{
2934   he_dl_ofdma_supp, 1;
2935}
2936
2937TLV trans_reasonp_attr (TLV_TRANSITION_REASONP_ATTR_ID) ( 1 : 1 ) LSB
2938{
2939   transition_reasonp, 1;
2940}
2941
2942TLV trans_rejectp_attr (TLV_TRANSITION_REJECTIONP_ATTR_ID) ( 1 : 1 ) LSB
2943{
2944   transition_rejp, 1;
2945}
2946
2947TLV he_dl_mumimo_attr (TLV_HE_DL_MUMIMO_SUPPP_ATTR_ID) ( 1 : 1 ) LSB
2948{
2949   he_dl_mumimo_supp, 1;
2950}
2951
2952TLV he_mcs13_attr (TLV_HE_MCS_11_12_ATTR_ID) ( 1 : 1 ) LSB
2953{
2954   he_mcs_12_13_supp_80,  1;
2955   he_mcs_12_13_supp_160, 1;
2956}
2957
2958TLV edca_pifs_param_attr (TLV_EDCA_PIFS_PARAM_ATTR_ID) ( 1 : 1 ) LSB
2959{
2960   // Configure EDCA or PIFS param based on edca_param_type
2961   edca_param_type, 1;
2962   data[3..4];
2963}
2964
2965TLV ecsa_target_tsf_info_attr (TLV_ECSA_TARGET_TSF_INFO_ATTR_ID) ( 1 : 1 ) LSB
2966{
2967    twt_ch_sw_mode, 1;
2968    target_tsf, 8;
2969}
2970
2971MULTIIE qcn_ie (EID_VENDOR_SPECIFIC) OUI ( 0x8C, 0xFD, 0xF0, 0x01 )
2972{
2973   OPTIONALTLV qcn_version;
2974   OPTIONALTLV vht_mcs11_attr;
2975   OPTIONALTLV he_400ns_sgi_attr;
2976   OPTIONALTLV he_2xltf_160mhz_supp;
2977   OPTIONALTLV he_dl_ofdma_attr;
2978   OPTIONALTLV trans_reasonp_attr;
2979   OPTIONALTLV trans_rejectp_attr;
2980   OPTIONALTLV he_dl_mumimo_attr;
2981   OPTIONALTLV he_mcs13_attr;
2982   OPTIONALTLV edca_pifs_param_attr;
2983   OPTIONALTLV ecsa_target_tsf_info_attr;
2984}
2985
2986IE esp_information (EID_EXTN_ID_ELEMENT) OUI ( 0x0B )
2987{
2988    data[0..96];
2989}
2990IE fils_indication (EID_FILS_INDICATION)
2991{
2992   // FILS Information element
2993   {
2994       public_key_identifiers_cnt     : 3;
2995       realm_identifiers_cnt          : 3;
2996       is_ip_config_supported         : 1;
2997       is_cache_id_present            : 1;
2998       is_hessid_present              : 1;
2999       is_fils_sk_auth_supported      : 1;
3000       is_fils_sk_auth_pfs_supported  : 1;
3001       is_pk_auth_supported           : 1;
3002       reserved                       : 4;
3003   }
3004   // other FILS elements
3005   variable_data[2..255];
3006}
3007
3008IE fils_assoc_delay_info (EID_EXTN_ID_ELEMENT) OUI ( 0x01 )
3009{
3010    assoc_delay_info, 1;
3011}
3012
3013IE fils_key_confirmation (EID_EXTN_ID_ELEMENT) OUI ( 0x03 )
3014{
3015    key_auth[0..255];
3016}
3017
3018IE fils_session (EID_EXTN_ID_ELEMENT) OUI ( 0x04 )
3019{
3020    session[8];
3021}
3022
3023IE fils_hlp_container (EID_EXTN_ID_ELEMENT) OUI ( 0x05 )
3024{
3025    dest_mac[6];
3026    src_mac[6];
3027    hlp_packet[0..255];
3028}
3029
3030IE fils_kde (EID_EXTN_ID_ELEMENT) OUI ( 0x07 )
3031{
3032    key_rsc[8];
3033    kde_list[0..255];
3034}
3035
3036IE fils_wrapped_data (EID_EXTN_ID_ELEMENT) OUI ( 0x08 )
3037{
3038    wrapped_data[0..255];
3039}
3040
3041IE fils_public_key (EID_EXTN_ID_ELEMENT) OUI ( 0x0C )
3042{
3043    key_type, 1;
3044    public_key[0..255];
3045}
3046
3047IE fils_nonce (EID_EXTN_ID_ELEMENT) OUI ( 0x0D )
3048{
3049    nonce[16];
3050}
3051
3052IE fragment_ie (EID_FRAGMENT_IE)
3053{
3054    data[0..255];
3055}
3056
3057IE dh_parameter_element (EID_EXTN_ID_ELEMENT) OUI ( 0x20 )
3058{
3059    group[2];
3060    public_key[0..255];
3061}
3062
3063const EID_RRM_REPORTING     = 1;
3064const EID_RRM_BCN_REPORTING_DETAIL = 2;
3065
3066const SUB_EID_AZIMUTH_REQ = 1;
3067const SUB_EID_REQ_MAC_ADDR = 2;
3068const SUB_EID_TGT_MAC_ADDR = 3;
3069const SUB_EID_MAX_AGE = 4;
3070const SUB_EID_NEIGHBOR_RPT = 52;
3071//const SUB_EID_TRIGGERED_REPORTING = 1;
3072
3073IE rrm_reporting (EID_RRM_REPORTING)
3074{
3075     reporting_condition, 1;
3076     threshold,           1;
3077}
3078
3079IE BcnReportingDetail (EID_RRM_BCN_REPORTING_DETAIL)
3080{
3081     reportingDetail, 1;
3082}
3083
3084IE APChannelReport (EID_AP_CHAN_REPORT)
3085{
3086     regulatoryClass, 1;
3087     channelList[0..50];
3088}
3089
3090IE azimuth_req (SUB_EID_AZIMUTH_REQ)
3091{
3092    request,    1;
3093}
3094
3095IE req_mac_addr (SUB_EID_REQ_MAC_ADDR)
3096{
3097    addr[6];
3098}
3099
3100IE tgt_mac_addr (SUB_EID_TGT_MAC_ADDR)
3101{
3102    addr[6];
3103}
3104
3105IE max_age (SUB_EID_MAX_AGE)
3106{
3107    max_age,     2;
3108}
3109
3110IE neighbor_rpt (SUB_EID_NEIGHBOR_RPT)
3111{
3112    bssid[6];
3113    //Bssid Info
3114    {
3115         APReachability: 2;
3116         Security:       1;
3117         KeyScope:       1;
3118         //Capabilities
3119         SpecMgmtCap:    1;
3120         QosCap:         1;
3121         apsd:           1;
3122         rrm:            1;
3123    }
3124    //Capabilities contd.
3125    {
3126         DelayedBA:      1;
3127         ImmBA:          1;
3128    //Capabilities end.
3129         MobilityDomain: 1;
3130         reserved:       5;
3131    }
3132         reserved1,      2; //part of BSSID Info.
3133    regulatoryClass, 1;
3134    channel,         1;
3135    PhyType,         1;
3136    OPTIE IE TSFInfo;
3137    OPTIE IE CondensedCountryStr;
3138    OPTIE IE MeasurementPilot;
3139    OPTIE IE RRMEnabledCap;
3140    OPTIE IE MultiBssid;
3141}
3142
3143IE MeasurementRequest (EID_MEAS_REQUEST)  // 7.3.2.21
3144{
3145    measurement_token, 1;
3146
3147    // Measurement Request Mode
3148    {
3149        parallel:          1;
3150        enable:            1;
3151        request:           1;
3152        report:            1;
3153        durationMandatory: 1;
3154        unused:            3;
3155    }
3156
3157    measurement_type, 1;
3158    UNION measurement_request (DISCRIMINATOR measurement_type)
3159    {
3160       Basic (measurement_type IS 0)
3161       {
3162           channel_no,       1;
3163           meas_start_time[8];
3164           meas_duration,    2;
3165       }
3166       CCA (measurement_type IS 1)
3167       {
3168           channel_no,       1;
3169           meas_start_time[8];
3170           meas_duration,    2;
3171       }
3172       RPIHistogram (measurement_type IS 2)
3173       {
3174           channel_no,       1;
3175           meas_start_time[8];
3176           meas_duration,    2;
3177       }
3178       channel_load (measurement_type IS 3)
3179       {
3180           op_class,                1;
3181           channel,                 1;
3182           randomization_intv,      2;
3183           meas_duration,           2;
3184           OPTIE rrm_reporting;
3185           OPTIE wide_bw_chan_switch;
3186           OPTIE bw_indication;
3187       }
3188       Beacon (measurement_type IS 5)
3189       {
3190          regClass,          1;
3191          channel,           1;
3192          randomization,     2;
3193          meas_duration,     2;
3194          meas_mode,         1;
3195          BSSID[6];
3196          OPTIE SSID;
3197          OPTIE rrm_reporting;
3198          OPTIE BcnReportingDetail;
3199          OPTIE RequestedInfo;
3200          OPTIE ExtRequestedInfo;
3201          OPTIE APChannelReport[0..2];
3202          OPTIE last_beacon_report_indication;
3203          //OPTIONAL vendor_specific[1..239];
3204       }
3205       lci (measurement_type IS 8)
3206       {
3207          loc_subject,       1;
3208          OPTIE azimuth_req;
3209          OPTIE req_mac_addr;
3210          OPTIE tgt_mac_addr;
3211          OPTIE max_age;
3212       }
3213       ftmrr (measurement_type IS 16)
3214       {
3215          random_interval,   2;
3216          min_ap_count,      1;
3217
3218          OPTIE neighbor_rpt;
3219          OPTIE max_age;
3220       }
3221       sta_stats (measurement_type IS 7)
3222       {
3223          peer_mac_addr[6];
3224          randomization,     2;
3225          meas_duration,     2;
3226          group_identity,    1;
3227          //OPTIE triggered_reporting;
3228         //OPTIONAL vendor_specific;
3229       }
3230
3231    };
3232}
3233
3234IE tclas_mask (EID_EXTN_ID_ELEMENT) OUI (0x59)
3235{
3236    classifier_type, 1;
3237    classifier_mask, 1;
3238    UNION info (DISCRIMINATOR classifier_type)
3239    {
3240        ip_param (classifier_type IS 4)
3241        {
3242            reserved[16];
3243        }
3244    };
3245}
3246
3247IE mscs_status (EID_MSCS_STATUS)
3248{
3249     status_code,        1;
3250}
3251
3252IE descriptor_element (EID_EXTN_ID_ELEMENT) OUI (0x58)
3253{
3254     request_type,                1;
3255     user_priority_control,       2;
3256     stream_timeout,              4;
3257     OPTIE IE tclas_mask;
3258     OPTIE IE mscs_status;
3259     //Optional Vendor specific IEs ... ignoring
3260}
3261
3262IE he_cap (EID_EXTN_ID_ELEMENT) OUI (0x23)
3263{
3264    {
3265      htc_he:1;
3266      twt_request:1;
3267      twt_responder:1;
3268      fragmentation:2;
3269      max_num_frag_msdu_amsdu_exp:3;
3270      min_frag_size:2;
3271      trigger_frm_mac_pad:2;
3272      multi_tid_aggr_rx_supp:3;
3273      he_link_adaptation:2;
3274      all_ack:1;
3275      trigd_rsp_sched:1;
3276      a_bsr:1;
3277      broadcast_twt:1;
3278      ba_32bit_bitmap:1;
3279      mu_cascade:1;
3280      ack_enabled_multitid:1;
3281      reserved:1;
3282      omi_a_ctrl:1;
3283      ofdma_ra:1;
3284      max_ampdu_len_exp_ext:2;
3285      amsdu_frag:1;
3286      flex_twt_sched:1;
3287      rx_ctrl_frame:1;
3288    }
3289    {
3290      bsrp_ampdu_aggr:1;
3291      qtp:1;
3292      a_bqr:1;
3293      spatial_reuse_param_rspder:1;
3294      ndp_feedback_supp:1;
3295      ops_supp:1;
3296      amsdu_in_ampdu:1;
3297      multi_tid_aggr_tx_supp:3;
3298      he_sub_ch_sel_tx_supp:1;
3299      ul_2x996_tone_ru_supp:1;
3300      om_ctrl_ul_mu_data_dis_rx:1;
3301      he_dynamic_smps:1;
3302      punctured_sounding_supp:1;
3303      ht_vht_trg_frm_rx_supp:1;
3304    }
3305    {
3306      reserved2:1;
3307      chan_width_0:1;
3308      chan_width_1:1;
3309      chan_width_2:1;
3310      chan_width_3:1;
3311      chan_width_4:1;
3312      chan_width_5:1;
3313      chan_width_6:1;
3314      rx_pream_puncturing:4;
3315      device_class:1;
3316      ldpc_coding:1;
3317      he_1x_ltf_800_gi_ppdu:1;
3318      midamble_tx_rx_max_nsts:2;
3319      he_4x_ltf_3200_gi_ndp:1;
3320      tb_ppdu_tx_stbc_lt_80mhz:1;
3321      rx_stbc_lt_80mhz:1;
3322      doppler:2;
3323      ul_mu:2;
3324      dcm_enc_tx:3;
3325      dcm_enc_rx:3;
3326      ul_he_mu:1;
3327      su_beamformer:1;
3328    }
3329    {
3330      su_beamformee:1;
3331      mu_beamformer:1;
3332      bfee_sts_lt_80:3;
3333      bfee_sts_gt_80:3;
3334      num_sounding_lt_80:3;
3335      num_sounding_gt_80:3;
3336      su_feedback_tone16:1;
3337      mu_feedback_tone16:1;
3338      codebook_su:1;
3339      codebook_mu:1;
3340      beamforming_feedback:3;
3341      he_er_su_ppdu:1;
3342      dl_mu_mimo_part_bw:1;
3343      ppet_present:1;
3344      srp:1;
3345      power_boost:1;
3346      he_ltf_800_gi_4x:1;
3347      max_nc:3;
3348      tb_ppdu_tx_stbc_gt_80mhz:1;
3349      rx_stbc_gt_80mhz:1;
3350    }
3351    {
3352      er_he_ltf_800_gi_4x:1;
3353      he_ppdu_20_in_40Mhz_2G:1;
3354      he_ppdu_20_in_160_80p80Mhz:1;
3355      he_ppdu_80_in_160_80p80Mhz:1;
3356      er_1x_he_ltf_gi:1;
3357      midamble_tx_rx_1x_he_ltf:1;
3358      dcm_max_bw:2;
3359      longer_than_16_he_sigb_ofdm_sym:1;
3360      non_trig_cqi_feedback:1;
3361      tx_1024_qam_lt_242_tone_ru:1;
3362      rx_1024_qam_lt_242_tone_ru:1;
3363      rx_full_bw_su_he_mu_compress_sigb:1;
3364      rx_full_bw_su_he_mu_non_cmpr_sigb:1;
3365      reserved3:2;
3366    }
3367    reserved4, 1;
3368    rx_he_mcs_map_lt_80, 2;
3369    tx_he_mcs_map_lt_80, 2;
3370    rx_he_mcs_map_160[2][0..1] COUNTIS chan_width_2;
3371    tx_he_mcs_map_160[2][0..1] COUNTIS chan_width_2;
3372    rx_he_mcs_map_80_80[2][0..1] COUNTIS chan_width_3;
3373    tx_he_mcs_map_80_80[2][0..1] COUNTIS chan_width_3;
3374    OPTIONAL UNION ppet (DISCRIMINATOR ppet_present)
3375    {
3376        ppe_threshold (ppet_present IS 1)
3377        {
3378            ppe_th[1..25];
3379        }
3380    };
3381}
3382
3383IE he_op (EID_EXTN_ID_ELEMENT) OUI (0x24)
3384{
3385    {
3386        default_pe: 3;
3387        twt_required: 1;
3388        txop_rts_threshold: 10;
3389        vht_oper_present: 1;
3390        co_located_bss: 1;
3391    }
3392    {
3393        er_su_disable: 1;
3394	oper_info_6g_present: 1;
3395        reserved2: 6;
3396    }
3397    {
3398        bss_color:6;
3399        partial_bss_col:1;
3400        bss_col_disabled:1;
3401    }
3402    basic_mcs_nss[2];
3403    OPTIONAL UNION vht_oper (DISCRIMINATOR vht_oper_present)
3404    {
3405        info (vht_oper_present IS 1)
3406        {
3407            chan_width, 1;
3408            center_freq_seg0, 1;
3409            center_freq_seg1, 1;
3410        }
3411    };
3412    OPTIONAL UNION maxbssid_ind (DISCRIMINATOR co_located_bss)
3413    {
3414        info (co_located_bss IS 1)
3415        {
3416            data, 1;
3417        }
3418    };
3419    OPTIONAL UNION oper_info_6g (DISCRIMINATOR oper_info_6g_present)
3420    {
3421        info (oper_info_6g_present IS 1)
3422        {
3423            primary_ch, 1;
3424            { // control
3425                ch_width: 2;
3426                dup_bcon: 1;
3427                reg_info: 3;
3428                reserved: 2;
3429            }
3430            center_freq_seg0, 1;
3431            center_freq_seg1, 1;
3432            min_rate, 1;
3433        }
3434    };
3435}
3436
3437IE spatial_reuse (EID_EXTN_ID_ELEMENT) OUI (0x27)
3438{
3439    {
3440        psr_disallow: 1;
3441        non_srg_pd_sr_disallow: 1;
3442        non_srg_offset_present: 1;
3443        srg_info_present: 1;
3444        sr_value15_allow: 1;
3445        reserved: 3;
3446    }
3447    OPTIONAL UNION non_srg_offset (DISCRIMINATOR non_srg_offset_present)
3448    {
3449        info (non_srg_offset_present IS 1)
3450        {
3451            non_srg_pd_max_offset, 1;
3452        }
3453    };
3454    OPTIONAL UNION srg_info (DISCRIMINATOR srg_info_present)
3455    {
3456        info (srg_info_present IS 1)
3457        {
3458            srg_pd_min_offset, 1;
3459            srg_pd_max_offset, 1;
3460            srg_color[8];
3461            srg_partial_bssid[8];
3462        }
3463    };
3464}
3465
3466IE he_6ghz_band_cap (EID_EXTN_ID_ELEMENT) OUI (0x3B)
3467{
3468    { // capabilities_information
3469        min_mpdu_start_spacing :3;
3470        max_ampdu_len_exp: 3;
3471        max_mpdu_len: 3;
3472        sm_pow_save: 2;
3473        rd_responder: 1;
3474        rx_ant_pattern_consistency: 1;
3475        tx_ant_pattern_consistency: 1;
3476        reserved: 2;
3477    }
3478}
3479
3480IE eht_cap (EID_EXTN_ID_ELEMENT) OUI (0x6C)
3481{
3482    {
3483	epcs_pri_access: 1;
3484	eht_om_ctl: 1;
3485	triggered_txop_sharing_mode1: 1;
3486	triggered_txop_sharing_mode2: 1;
3487	restricted_twt: 1;
3488	scs_traffic_desc: 1;
3489	max_mpdu_len: 2;
3490	max_a_mpdu_len_exponent_ext: 1;
3491	eht_trs_support: 1;
3492	txop_return_support_txop_share_m2: 1;
3493	two_bqrs_support: 1;
3494	eht_link_adaptation_support: 2;
3495	reserved: 2;
3496    }
3497    {
3498	reserved2: 1;
3499	support_320mhz_6ghz: 1;
3500	ru_242tone_wt_20mhz: 1;
3501	ndp_4x_eht_ltf_3dot2_us_gi: 1;
3502	partial_bw_mu_mimo: 1;
3503	su_beamformer: 1;
3504	su_beamformee: 1;
3505	bfee_ss_le_80mhz: 3;
3506	bfee_ss_160mhz: 3;
3507	bfee_ss_320mhz: 3;
3508	num_sounding_dim_le_80mhz: 3;
3509	num_sounding_dim_160mhz: 3;
3510	num_sounding_dim_320mhz: 3;
3511	ng_16_su_feedback: 1;
3512	ng_16_mu_feedback: 1;
3513	cb_sz_4_2_su_feedback: 1;
3514	cb_sz_7_5_su_feedback: 1;
3515	trig_su_bforming_feedback: 1;
3516	trig_mu_bforming_partial_bw_feedback: 1;
3517	triggered_cqi_feedback: 1;
3518    }
3519    {
3520	partial_bw_dl_mu_mimo: 1;
3521	psr_based_sr: 1;
3522	power_boost_factor: 1;
3523	eht_mu_ppdu_4x_ltf_0_8_us_gi: 1;
3524	max_nc: 4;
3525	non_trig_cqi_feedback: 1;
3526	tx_1024_4096_qam_lt_242_tone_ru: 1;
3527	rx_1024_4096_qam_lt_242_tone_ru: 1;
3528	ppet_present: 1;
3529	common_nominal_pkt_padding: 2;
3530	max_num_eht_ltf: 5;
3531	mcs_15: 4;
3532	eht_dup_6ghz: 1;
3533	op_sta_rx_ndp_wider_bw_20mhz: 1;
3534	non_ofdma_ul_mu_mimo_le_80mhz: 1;
3535	non_ofdma_ul_mu_mimo_160mhz: 1;
3536	non_ofdma_ul_mu_mimo_320mhz: 1;
3537	mu_bformer_le_80mhz: 1;
3538	mu_bformer_160mhz: 1;
3539	mu_bformer_320mhz: 1;
3540	tb_sounding_feedback_rl: 1;
3541    }
3542    {
3543	rx_1k_qam_in_wider_bw_dl_ofdma: 1;
3544	rx_4k_qam_in_wider_bw_dl_ofdma: 1;
3545	limited_cap_support_20mhz: 1;
3546	triggered_mu_bf_full_bw_fb_and_dl_mumimo: 1;
3547	mru_support_20mhz: 1;
3548	reserved3: 3;
3549    }
3550    {
3551	bw_20_rx_max_nss_for_mcs_0_to_7: 4;
3552	bw_20_tx_max_nss_for_mcs_0_to_7: 4;
3553	bw_20_rx_max_nss_for_mcs_8_and_9: 4;
3554	bw_20_tx_max_nss_for_mcs_8_and_9: 4;
3555	bw_20_rx_max_nss_for_mcs_10_and_11: 4;
3556	bw_20_tx_max_nss_for_mcs_10_and_11: 4;
3557	bw_20_rx_max_nss_for_mcs_12_and_13: 4;
3558	bw_20_tx_max_nss_for_mcs_12_and_13: 4;
3559
3560    }
3561    {
3562	bw_le_80_rx_max_nss_for_mcs_0_to_9: 4;
3563	bw_le_80_tx_max_nss_for_mcs_0_to_9: 4;
3564	bw_le_80_rx_max_nss_for_mcs_10_and_11: 4;
3565	bw_le_80_tx_max_nss_for_mcs_10_and_11: 4;
3566	bw_le_80_rx_max_nss_for_mcs_12_and_13: 4;
3567	bw_le_80_tx_max_nss_for_mcs_12_and_13: 4;
3568	bw_160_rx_max_nss_for_mcs_0_to_9: 4;
3569	bw_160_tx_max_nss_for_mcs_0_to_9: 4;
3570    }
3571    {
3572	bw_160_rx_max_nss_for_mcs_10_and_11: 4;
3573	bw_160_tx_max_nss_for_mcs_10_and_11: 4;
3574	bw_160_rx_max_nss_for_mcs_12_and_13: 4;
3575	bw_160_tx_max_nss_for_mcs_12_and_13: 4;
3576	bw_320_rx_max_nss_for_mcs_0_to_9: 4;
3577	bw_320_tx_max_nss_for_mcs_0_to_9: 4;
3578	bw_320_rx_max_nss_for_mcs_10_and_11: 4;
3579	bw_320_tx_max_nss_for_mcs_10_and_11: 4;
3580    }
3581    {
3582	bw_320_rx_max_nss_for_mcs_12_and_13: 4;
3583	bw_320_tx_max_nss_for_mcs_12_and_13: 4;
3584    }
3585    OPTIONAL UNION ppet (DISCRIMINATOR ppet_present)
3586    {
3587        ppe_threshold (ppet_present IS 1)
3588        {
3589            ppe_th[2..62];
3590        }
3591    };
3592}
3593
3594IE eht_op (EID_EXTN_ID_ELEMENT) OUI (0x6A)
3595{
3596    {
3597        eht_op_information_present: 1;
3598	disabled_sub_chan_bitmap_present: 1;
3599	eht_default_pe_duration: 1;
3600	group_addr_bu_indication_limit: 1;
3601	group_addr_bu_indication_exponent: 2;
3602	reserved: 2;
3603    }
3604    {
3605	basic_rx_max_nss_for_mcs_0_to_7: 4;
3606	basic_tx_max_nss_for_mcs_0_to_7: 4;
3607	basic_rx_max_nss_for_mcs_8_and_9: 4;
3608	basic_tx_max_nss_for_mcs_8_and_9: 4;
3609	basic_rx_max_nss_for_mcs_10_and_11: 4;
3610	basic_tx_max_nss_for_mcs_10_and_11: 4;
3611	basic_rx_max_nss_for_mcs_12_and_13: 4;
3612	basic_tx_max_nss_for_mcs_12_and_13: 4;
3613    }
3614    {
3615	channel_width: 3;
3616	reserved_1: 5;
3617    }
3618    ccfs0, 1;
3619    ccfs1, 1;
3620    disabled_sub_chan_bitmap[2][0..1] COUNTIS disabled_sub_chan_bitmap_present;
3621}
3622
3623IE mu_edca_param_set (EID_EXTN_ID_ELEMENT) OUI (0x26)
3624{
3625    qos, 1;
3626    {
3627        acbe_aifsn: 4;
3628        acbe_acm:   1;
3629        acbe_aci:   2;
3630        unused1:    1;
3631    }
3632    {
3633        acbe_acwmin: 4;
3634        acbe_acwmax: 4;
3635    }
3636    acbe_muedca_timer, 1;
3637    {
3638        acbk_aifsn: 4;
3639        acbk_acm:   1;
3640        acbk_aci:   2;
3641        unused2:    1;
3642    }
3643    {
3644        acbk_acwmin: 4;
3645        acbk_acwmax: 4;
3646    }
3647    acbk_muedca_timer, 1;
3648    {
3649        acvi_aifsn: 4;
3650        acvi_acm:   1;
3651        acvi_aci:   2;
3652        unused3:    1;
3653    }
3654    {
3655        acvi_acwmin: 4;
3656        acvi_acwmax: 4;
3657    }
3658    acvi_muedca_timer, 1;
3659    {
3660        acvo_aifsn: 4;
3661        acvo_acm:   1;
3662        acvo_aci:   2;
3663        unused4:    1;
3664    }
3665    {
3666        acvo_acwmin: 4;
3667        acvo_acwmax: 4;
3668    }
3669    acvo_muedca_timer, 1;
3670}
3671
3672IE bss_color_change (EID_EXTN_ID_ELEMENT) OUI (0x2A)
3673{
3674    countdown, 1;
3675    {
3676        new_color: 6;
3677        reserved: 2;
3678    }
3679}
3680
3681/////////////////////////////////////////////////////////////////////////////
3682//                                MULTIIEs                                 //
3683/////////////////////////////////////////////////////////////////////////////
3684
3685MULTIIE WSC ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3686{
3687    MANDATORYTLV Version;                               // Must be 0x10
3688    OPTIONALTLV  WPSState;
3689    OPTIONALTLV  APSetupLocked;
3690    OPTIONALTLV  SelectedRegistrarConfigMethods;
3691    OPTIONALTLV  UUID_E;
3692    OPTIONALTLV  UUID_R;
3693    OPTIONALTLV  RFBands;
3694    OPTIONALTLV  SelectedRegistrar;
3695    OPTIONALTLV  ConfigMethods;
3696    OPTIONALTLV  AssociationState;
3697    OPTIONALTLV  ConfigurationError;
3698    OPTIONALTLV  Manufacturer;
3699    OPTIONALTLV  ModelName;
3700    OPTIONALTLV  ModelNumber;
3701    OPTIONALTLV  SerialNumber;
3702    OPTIONALTLV  DeviceName;
3703    OPTIONALTLV  DevicePasswordID;
3704    OPTIONALTLV  PrimaryDeviceType;
3705    OPTIONALTLV  RequestType;
3706    OPTIONALTLV  ResponseType;
3707    OPTIONALTLV  VendorExtension;
3708    OPTIONALTLV  RequestDeviceType;
3709}
3710
3711MULTIIE WscBeacon ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3712{
3713    MANDATORYTLV Version;                        // 0x10 = version 1.0, 0x11
3714                                                 // = version 1.1, etc.
3715    MANDATORYTLV WPSState;                       // 1 = unconfigured, 2 =
3716                                                 // configured
3717    OPTIONALTLV  APSetupLocked;                  // Must be included if value
3718                                                 // is TRUE
3719    OPTIONALTLV  SelectedRegistrar;              // BOOL: indicates if the
3720                                                 // user has recently
3721                                                 // activated a Registrar to
3722                                                 // add an Enrollee.
3723    OPTIONALTLV  DevicePasswordID;               // Device Password ID
3724                                                 // indicates the method or
3725                                                 // identifies the specific
3726                                                 // password that the
3727                                                 // selected Registrar
3728                                                 // intends to use.
3729    OPTIONALTLV  SelectedRegistrarConfigMethods; // This attribute contains
3730                                                 // the config methods active
3731                                                 // on the selected
3732                                                 // Registrar.
3733    OPTIONALTLV  UUID_E;                         // The AP's UUID is provided
3734                                                 // only when the AP is a
3735                                                 // dual-band AP in push
3736                                                 // button mode and
3737                                                 // indicating push button
3738                                                 // mode on both radios
3739    OPTIONALTLV  RFBands;                        // Indicates all RF bands
3740                                                 // available on the AP. A
3741                                                 // dual-band AP must provide
3742                                                 // this attribute.
3743    // WSC 2.0
3744    OPTIONALTLV  VendorExtension;                // Version2 and AuthorizedMACs
3745
3746} // End Multi-IE WscBeacon.
3747
3748MULTIIE WscAssocReq ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3749{
3750    MANDATORYTLV Version;                        // 0x10 = version 1.0, 0x11
3751                                                 // = version 1.1, etc.
3752    MANDATORYTLV RequestType;                    //
3753                                                 //
3754    // WSC 2.0
3755    OPTIONALTLV  VendorExtension;                // Version2
3756
3757} // End Multi-IE WscAssocReq.
3758
3759
3760MULTIIE WscAssocRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3761{
3762    MANDATORYTLV Version;                        // 0x10 = version 1.0, 0x11
3763                                                 // = version 1.1, etc.
3764    MANDATORYTLV ResponseType;                   //
3765                                                 //
3766    // WSC 2.0
3767    OPTIONALTLV  VendorExtension;                // Version2
3768
3769} // End Multi-IE WscAssocRes.
3770
3771MULTIIE WscReassocRes ( 221 ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3772{
3773    MANDATORYTLV Version;                        // 0x10 = version 1.0, 0x11
3774                                                 // = version 1.1, etc.
3775    MANDATORYTLV ResponseType;                   //
3776                                                 //
3777    // WSC 2.0
3778    OPTIONALTLV  VendorExtension;                // Version2
3779
3780} // End Multi-IE WscReassocRes
3781
3782MULTIIE WscProbeReq ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3783{
3784    MANDATORYTLV Version;                        // 0x10 = version 1.0, 0x11
3785                                                 // = version 1.1, etc.
3786    MANDATORYTLV RequestType;                    //
3787                                                 //
3788    MANDATORYTLV ConfigMethods;                  // Configuration methods the
3789                                                 // Enrollee or Registrar
3790                                                 // supports
3791    MANDATORYTLV UUID_E;                         // unique GUID generated by
3792                                                 // the Enrollee.
3793    MANDATORYTLV PrimaryDeviceType;
3794    MANDATORYTLV RFBands;                        // Specific RF bands used
3795                                                 // for this message
3796    MANDATORYTLV AssociationState;               // Configuration and previous
3797                                                 // association state
3798    MANDATORYTLV ConfigurationError;
3799    MANDATORYTLV DevicePasswordID;
3800
3801    // WSC 2.0
3802    OPTIONALTLV  Manufacturer;                   // Must be included in ver 2.0
3803                                                 // or higher.
3804    OPTIONALTLV  ModelName;                      // Must be included in ver 2.0
3805                                                 // or higher.
3806    OPTIONALTLV  ModelNumber;                    // Must be included in ver 2.0
3807                                                 // or higher.
3808    OPTIONALTLV  DeviceName;                     // Must be included in ver 2.0
3809                                                 // or higher.
3810    OPTIONALTLV  VendorExtension;                // Version2 and RequestToEntroll
3811
3812    OPTIONALTLV  RequestDeviceType;              // When a device receives a Probe
3813                                                 // Request containing this type,
3814                                                 // It will only respond if Primary
3815                                                 // or Secondary Device Type matches.
3816
3817} // End Multi-IE WscProbeReq.
3818
3819MULTIIE WscProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3820{
3821    MANDATORYTLV Version;                        // 0x10 = version 1.0, 0x11
3822                                                 // = version 1.1, etc.
3823    MANDATORYTLV WPSState;                       // 1 = unconfigured, 2 =
3824                                                 // configured
3825    OPTIONALTLV  APSetupLocked;                  // Must be included if value
3826                                                 // is TRUE
3827    OPTIONALTLV  SelectedRegistrar;              // BOOL: indicates if the
3828                                                 // user has recently
3829                                                 // activated a Registrar to
3830                                                 // add an Enrollee.
3831    OPTIONALTLV  DevicePasswordID;               // Device Password ID
3832                                                 // indicates the method or
3833                                                 // identifies the specific
3834                                                 // password that the
3835                                                 // selected Registrar
3836                                                 // intends to use.
3837    OPTIONALTLV  SelectedRegistrarConfigMethods; // This attribute contains
3838                                                 // the config methods active
3839                                                 // on the selected
3840                                                 // Registrar.
3841    MANDATORYTLV ResponseType;
3842    MANDATORYTLV UUID_E;                         // unique identifier of AP
3843    MANDATORYTLV Manufacturer;
3844    MANDATORYTLV ModelName;
3845    MANDATORYTLV ModelNumber;
3846    MANDATORYTLV SerialNumber;
3847    MANDATORYTLV PrimaryDeviceType;
3848    MANDATORYTLV DeviceName;                     // User-friendly description
3849                                                 // of device
3850    MANDATORYTLV ConfigMethods;                  // Config Methods corresponds
3851                                                 // to the methods the AP
3852                                                 // supports as an Enrollee
3853                                                 // for adding external
3854                                                 // Registrars.
3855    OPTIONALTLV RFBands;                         // Indicates all RF bands
3856                                                 // available on the AP. A
3857                                                 // dual-band AP must provide
3858                                                 // this attribute.
3859    // WSC 2.0
3860    OPTIONALTLV  VendorExtension;                // Version2 and AuthorizedMACs
3861
3862} // WscProbeRes.
3863
3864// This MULTIIE combines the fields from the WSC IEs as they appear in
3865// Beacons *and* in Probe Responses, with the difference that they're all
3866// optional.  In our device drivers, we combine Probe Responses and Beacons
3867// into one list, and parse their IEs later (c.f. frame BeaconIEs).  Because
3868// the WSC IE differs in those two frames, we'd often see warning messages
3869// about either unexpected fields showing up (if we thought we were parsing a
3870// Beacon, and we in fact had data from a Probe Response) or mandatory fields
3871// missing (if we thought we were parsing a Probe Response, and in fact had
3872// data from a Beacon).
3873
3874// I created this MULTIIE to stuff into the BeaconIEs frames to avoid this.
3875// It's intended to be used on unpack only, and to do so in a very forgiving
3876// way.
3877
3878MULTIIE WscBeaconProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
3879{
3880    OPTIONALTLV Version;                        // 0x10 = version 1.0, 0x11
3881                                                 // = version 1.1, etc.
3882    OPTIONALTLV WPSState;                       // 1 = unconfigured, 2 =
3883                                                 // configured
3884    OPTIONALTLV  APSetupLocked;                  // Must be included if value
3885                                                 // is TRUE
3886    OPTIONALTLV  SelectedRegistrar;              // BOOL: indicates if the
3887                                                 // user has recently
3888                                                 // activated a Registrar to
3889                                                 // add an Enrollee.
3890    OPTIONALTLV  DevicePasswordID;               // Device Password ID
3891                                                 // indicates the method or
3892                                                 // identifies the specific
3893                                                 // password that the
3894                                                 // selected Registrar
3895                                                 // intends to use.
3896    OPTIONALTLV  SelectedRegistrarConfigMethods; // This attribute contains
3897                                                 // the config methods active
3898                                                 // on the selected
3899                                                 // Registrar.
3900    OPTIONALTLV ResponseType;
3901    OPTIONALTLV UUID_E;                         // unique identifier of AP
3902    OPTIONALTLV Manufacturer;
3903    OPTIONALTLV ModelName;
3904    OPTIONALTLV ModelNumber;
3905    OPTIONALTLV SerialNumber;
3906    OPTIONALTLV PrimaryDeviceType;
3907    OPTIONALTLV DeviceName;                     // User-friendly description
3908                                                 // of device
3909    OPTIONALTLV ConfigMethods;                  // Config Methods corresponds
3910                                                 // to the methods the AP
3911                                                 // supports as an Enrollee
3912                                                 // for adding external
3913                                                 // Registrars.
3914    OPTIONALTLV RFBands;                         // Indicates all RF bands
3915                                                 // available on the AP. A
3916                                                 // dual-band AP must provide
3917                                                 // this attribute.
3918    // WSC 2.0
3919    OPTIONALTLV  VendorExtension;                // Version2 and AuthorizedMACs
3920
3921} // WscProbeRes.
3922/////////////////////////////////////////////////////////////////////////////
3923//                                MULTIIEs                                 //
3924/////////////////////////////////////////////////////////////////////////////
3925
3926MULTIIE P2PBeacon ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3927{
3928    MANDATORYTLV P2PCapability;                  // Contains P2P Device
3929                                                 // and P2P Group Capability
3930    MANDATORYTLV P2PDeviceId;                    // Contains P2P Device
3931                                                 // Address
3932    OPTIONALTLV  NoticeOfAbsence;                // Indicates Notice of
3933                                                 // Absence schedule and
3934                                                 // CT Window
3935
3936} // End P2PBeacon
3937
3938
3939MULTIIE P2PAssocReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3940{
3941    MANDATORYTLV P2PCapability;                  // Contains P2P Device
3942                                                 // and P2P Group Capability
3943    OPTIONALTLV  ExtendedListenTiming;
3944    MANDATORYTLV P2PDeviceInfo;
3945
3946} // End P2PAssocReq
3947
3948
3949MULTIIE P2PAssocRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3950{
3951    MANDATORYTLV P2PStatus;
3952    OPTIONALTLV  ExtendedListenTiming;
3953
3954} // End P2PAssocRes
3955
3956
3957MULTIIE P2PProbeReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3958{
3959    MANDATORYTLV P2PCapability;
3960    OPTIONALTLV  P2PDeviceId;
3961    MANDATORYTLV ListenChannel;
3962    OPTIONALTLV  ExtendedListenTiming;
3963    OPTIONALTLV  OperatingChannel;
3964} // End P2PProbeReq
3965
3966
3967MULTIIE P2PProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3968{
3969    MANDATORYTLV P2PCapability;
3970    OPTIONALTLV  ExtendedListenTiming;
3971    OPTIONALTLV  NoticeOfAbsence;
3972    MANDATORYTLV P2PDeviceInfo;
3973    OPTIONALTLV  P2PGroupInfo;
3974
3975} // End P2PProbeRes
3976
3977
3978MULTIIE P2PBeaconProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3979{
3980    OPTIONALTLV P2PCapability;
3981    OPTIONALTLV P2PDeviceId;
3982    OPTIONALTLV ExtendedListenTiming;
3983    OPTIONALTLV NoticeOfAbsence;
3984    OPTIONALTLV P2PDeviceInfo;
3985    OPTIONALTLV P2PGroupInfo;
3986
3987} // End P2PBeaconProbeRes
3988
3989
3990MULTIIE P2PDeAuth ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3991{
3992   MANDATORYTLV MinorReasonCode;
3993}
3994
3995
3996MULTIIE P2PDisAssoc ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
3997{
3998   MANDATORYTLV MinorReasonCode;
3999}
4000
4001MULTIIE MBO_IE (EID_VENDOR_SPECIFIC) OUI ( 0x50, 0x6F, 0x9A, 0x16 )
4002{
4003   OPTIONALTLV mbo_ap_cap;
4004   OPTIONALTLV non_prefferd_chan_rep;
4005   OPTIONALTLV cellular_data_cap ;
4006   OPTIONALTLV assoc_disallowed;
4007   OPTIONALTLV cellular_data_con_pref;
4008   OPTIONALTLV transition_reason;
4009   OPTIONALTLV transition_reject_reason;
4010   OPTIONALTLV assoc_retry_delay;
4011   OPTIONALTLV oce_cap;
4012   OPTIONALTLV rssi_assoc_rej;
4013   OPTIONALTLV reduced_wan_metrics;
4014}
4015
4016IE vendor_vht_ie (EID_VENDOR_SPECIFIC) OUI (0x00, 0x90, 0x4c, 0x04)
4017{
4018   sub_type, 1;
4019   OPTIE IE VHTCaps;
4020   OPTIE IE VHTOperation;
4021}
4022
4023IE non_inheritance (EID_EXTN_ID_ELEMENT) OUI (0x38)
4024{
4025    data[0..255];
4026}
4027
4028IE mlo_ie (EID_EXTN_ID_ELEMENT) OUI (0x6B)
4029{
4030    data[9..255];
4031}
4032
4033IE t2lm_ie (EID_EXTN_ID_ELEMENT) OUI (0x6D)
4034{
4035    data[3..255];
4036}
4037
4038/////////////////////////////////////////////////////////////////////////////
4039// Frames
4040
4041FRAME Beacon                              // C.f. Sec. 7.2.3.1
4042{
4043    FF     TimeStamp;
4044    FF     BeaconInterval;
4045    FF     Capabilities;
4046    MANDIE SSID;
4047    MANDIE SuppRates;
4048    OPTIE  FHParamSet;
4049    OPTIE  DSParams;
4050    OPTIE  CFParams;
4051    OPTIE  TIM;
4052    OPTIE  Country;
4053    OPTIE  FHParams;
4054    OPTIE  FHPattTable;
4055    OPTIE  PowerConstraints;
4056    OPTIE  ChanSwitchAnn;
4057    OPTIE  Quiet;
4058    OPTIE  TPCReport;
4059    OPTIE  ERPInfo;
4060    OPTIE  ExtSuppRates;
4061    OPTIE  RSN;
4062    OPTIE  QBSSLoad;
4063    OPTIE  EDCAParamSet;
4064    OPTIE  QOSCapsAp;
4065    OPTIE  APChannelReport;
4066    OPTIE  RRMEnabledCap;
4067    OPTIE  MobilityDomain;
4068    OPTIE  ext_chan_switch_ann;
4069    OPTIE  SuppOperatingClasses;
4070    OPTIE  HTCaps;
4071    OPTIE  HTInfo;
4072    OPTIE  OBSSScanParameters;
4073    OPTIE  ExtCap;
4074    OPTIE  VHTCaps;
4075    OPTIE  VHTOperation;
4076    OPTIE  transmit_power_env[0..8];
4077    OPTIE  ChannelSwitchWrapper;
4078    OPTIE  VHTExtBssLoad;
4079    OPTIE  OperatingMode;
4080    OPTIE  fils_indication;
4081    OPTIE  max_chan_switch_time;
4082    OPTIE  esp_information;
4083    OPTIE  he_cap;
4084    OPTIE  he_op;
4085    OPTIE  spatial_reuse;
4086    OPTIE  bss_color_change;
4087    OPTIE  mu_edca_param_set;
4088    OPTIE  he_6ghz_band_cap;
4089
4090    OPTIE  sec_chan_offset_ele;
4091    OPTIE  WAPI;
4092    OPTIE  ESETxmitPower;
4093    OPTIE  WiderBWChanSwitchAnn;
4094    OPTIE  eht_cap;
4095    OPTIE  eht_op;
4096    OPTIE  mlo_ie;
4097    OPTIE  t2lm_ie[0..2];
4098
4099    OPTIE  WPA;
4100    OPTIE  WMMInfoAp;
4101    OPTIE  WMMParams;
4102    OPTIE  WMMCaps;
4103    OPTIE  ESEVersion;
4104    OPTIE  ESERadMgmtCap;
4105    OPTIE  ESETrafStrmMet;
4106    OPTIE  WscBeacon;
4107    OPTIE  P2PBeacon;
4108    OPTIE  Vendor1IE;
4109    OPTIE  vendor_vht_ie;
4110    OPTIE  Vendor3IE;
4111    OPTIE  hs20vendor_ie;
4112    OPTIE  QComVendorIE;
4113    OPTIE  MBO_IE;
4114    OPTIE  qcn_ie;
4115    OPTIE  reduced_neighbor_report;
4116} // End frame Beacon.
4117
4118// Ok, here's  the story on  Beacon1 & Beacon2.   We presumably beacon  a lot
4119// more than we  change configuration.  So it makes sense  to keep the beacon
4120// we plan to send next in  serialized format.  We do this in struct schMisc.
4121// Whenever our  config changes in  a way that  would affect our  beacons, we
4122// just  update  our internal  datastructures  &  re-generate the  serialized
4123// beacon.
4124
4125// The problem  is that there  are *some* fields  that need to be  updated at
4126// send time,  specifically the CF Param  Set & the  TIM.  So, what we  do is
4127// this: whenever  our config changes,  call schSetFixedBeaconFields.  There,
4128// we serialize the following  Beacon fields into gSchBeaconFrameBegin (after
4129// the power template & MAC header): TimeStamp, BeaconInterval, Capabilities,
4130// SSID, SuppRates, DSParams.  It sets gSchBeaconOffsetBegin to
4131// the length of this buffer (incl. power template & MAC header).
4132
4133// Next, it serializes the following fields into gSchBeaconFrameEnd: Country,
4134// EDCAParamSet,   PowerConstraints,   TPCReport,  ChannelSwitchAnn,   Quiet,
4135// ERPInfo,      HTCaps,      HTInfo,      ExtSuppRates, WPA, RSN,  WMMInfo,
4136// WMMParams, WMMCaps.
4137// The length of *this* buffer is kept in gSchBeaconOffsetEnd.
4138
4139// Then, in 'schBeaconInterruptHandler',  we write CFParams & TIM  at the end
4140// of gSchBeaconFrameBegin, keeping track of the (new) size of this buffer in
4141// the local 'beaconSize'.
4142
4143// After  that,  we  call  'specialBeaconProcessing'.   Note  that  this  may
4144// actually call  schSetFixedBeaconFields repeatedly!  The  comments say they
4145// try to avoid this, but...
4146
4147// Finally, we call writeBeaconToTFP, where the first thing we do is copy the
4148// gSchBeaconFrameEnd buffer after the end of gSchBeaconFrameBegin.
4149
4150FRAME Beacon1
4151{
4152    FF     TimeStamp;
4153    FF     BeaconInterval;
4154    FF     Capabilities;
4155    MANDIE SSID;
4156    MANDIE SuppRates;
4157    OPTIE  DSParams;
4158}
4159
4160FRAME Beacon2
4161{
4162    OPTIE  Country;
4163    OPTIE  PowerConstraints;
4164    OPTIE  ChanSwitchAnn;
4165    OPTIE  Quiet;
4166    OPTIE  TPCReport;
4167    OPTIE  ERPInfo;
4168    OPTIE  ExtSuppRates;
4169    OPTIE  RSNOpaque;
4170    OPTIE  EDCAParamSet;
4171    OPTIE  APChannelReport;
4172    OPTIE  RRMEnabledCap;
4173    OPTIE  MobilityDomain;
4174    OPTIE  ext_chan_switch_ann;
4175    OPTIE  SuppOperatingClasses;
4176    OPTIE  HTCaps;
4177    OPTIE  HTInfo;
4178    OPTIE  OBSSScanParameters;
4179    OPTIE  ExtCap;
4180    OPTIE  VHTCaps;
4181    OPTIE  VHTOperation;
4182    OPTIE  transmit_power_env[0..8];
4183    OPTIE  ChannelSwitchWrapper;
4184    OPTIE  VHTExtBssLoad;
4185    OPTIE  OperatingMode;
4186    OPTIE  fils_indication;
4187    OPTIE  max_chan_switch_time;
4188    OPTIE  esp_information;
4189    OPTIE  he_cap;
4190    OPTIE  he_op;
4191    OPTIE  spatial_reuse;
4192    OPTIE  bss_color_change;
4193    OPTIE  mu_edca_param_set;
4194    OPTIE  he_6ghz_band_cap;
4195
4196    OPTIE  sec_chan_offset_ele;
4197    OPTIE  WAPI;
4198    OPTIE  ESETxmitPower;
4199    OPTIE  WiderBWChanSwitchAnn;
4200    OPTIE  eht_cap;
4201    OPTIE  eht_op;
4202    OPTIE  mlo_ie;
4203    OPTIE  t2lm_ie[0..2];
4204
4205    OPTIE  WPA;
4206    OPTIE  WMMInfoAp;
4207    OPTIE  WMMParams;
4208    OPTIE  WMMCaps;
4209    OPTIE  ESERadMgmtCap;
4210    OPTIE  ESETrafStrmMet;
4211    OPTIE  WscBeacon;
4212    OPTIE  P2PBeacon;
4213    OPTIE  Vendor1IE;
4214    OPTIE  vendor_vht_ie;
4215    OPTIE  Vendor3IE;
4216    OPTIE  hs20vendor_ie;
4217    OPTIE  QComVendorIE;
4218    OPTIE  ESEVersion;
4219    OPTIE  qcn_ie;
4220    OPTIE  reduced_neighbor_report;
4221}
4222
4223// This frame is just Beacon with its Fixed Fields stripped out.  It's handy
4224// for use with struct 'tSirBssDescription', which has members corresponding
4225// to some fixed fields, but keeps its IEs in un-parsed format.
4226
4227// Note that it also includes the IE 'WscBeaconProbeRes'.
4228
4229FRAME BeaconIEs
4230{
4231
4232    MANDIE SSID;
4233    MANDIE SuppRates;
4234    OPTIE  FHParamSet;
4235    OPTIE  DSParams;
4236    OPTIE  CFParams;
4237    OPTIE  TIM;
4238    OPTIE  Country;
4239    OPTIE  FHParams;
4240    OPTIE  FHPattTable;
4241    OPTIE  PowerConstraints;
4242    OPTIE  ChanSwitchAnn;
4243    OPTIE  Quiet;
4244    OPTIE  TPCReport;
4245    OPTIE  ERPInfo;
4246    OPTIE  ExtSuppRates;
4247    OPTIE  RSN;
4248    OPTIE  QBSSLoad;
4249    OPTIE  EDCAParamSet;
4250    OPTIE  QOSCapsAp;
4251    OPTIE  APChannelReport;
4252    OPTIE  RRMEnabledCap;
4253    OPTIE  MobilityDomain;
4254    OPTIE  ext_chan_switch_ann;
4255    OPTIE  SuppOperatingClasses;
4256    OPTIE  HTCaps;
4257    OPTIE  HTInfo;
4258    OPTIE  OBSSScanParameters;
4259    OPTIE  ExtCap;
4260    OPTIE  VHTCaps;
4261    OPTIE  VHTOperation;
4262    OPTIE  transmit_power_env[0..8];
4263    OPTIE  ChannelSwitchWrapper;
4264    OPTIE  VHTExtBssLoad;
4265    OPTIE  OperatingMode;
4266    OPTIE  fils_indication;
4267    OPTIE  max_chan_switch_time;
4268    OPTIE  esp_information;
4269    OPTIE  he_cap;
4270    OPTIE  he_op;
4271    OPTIE  spatial_reuse;
4272    OPTIE  bss_color_change;
4273    OPTIE  mu_edca_param_set;
4274    OPTIE  he_6ghz_band_cap;
4275
4276    OPTIE  sec_chan_offset_ele;
4277    OPTIE  WAPI;
4278    OPTIE  ESETxmitPower;
4279    OPTIE  WiderBWChanSwitchAnn;
4280    OPTIE  eht_cap;
4281    OPTIE  eht_op;
4282    OPTIE  mlo_ie;
4283    OPTIE  t2lm_ie[0..2];
4284
4285    OPTIE  WPA;
4286    OPTIE  WMMInfoAp;
4287    OPTIE  WMMParams;
4288    OPTIE  WMMCaps;
4289    OPTIE  ESEVersion;
4290    OPTIE  ESERadMgmtCap;
4291    OPTIE  ESETrafStrmMet;
4292    OPTIE  WscBeaconProbeRes;
4293    OPTIE  P2PBeaconProbeRes;
4294    OPTIE  Vendor1IE;
4295    OPTIE  vendor_vht_ie;
4296    OPTIE  Vendor3IE;
4297    OPTIE  hs20vendor_ie;
4298    OPTIE  QComVendorIE;
4299    OPTIE  MBO_IE;
4300    OPTIE  qcn_ie;
4301    OPTIE  reduced_neighbor_report;
4302} // End frame BeaconIEs.
4303
4304FRAME Disassociation                      // 7.3.3.3
4305{
4306    FF    Reason;
4307    OPTIE P2PDisAssoc;
4308}
4309
4310FRAME AssocRequest                        // 7.2.3.4
4311{
4312    FF     Capabilities;
4313    FF     ListenInterval;
4314    MANDIE SSID;
4315    MANDIE SuppRates;
4316    OPTIE  ExtSuppRates;
4317    OPTIE  PowerCaps;
4318    OPTIE  SuppChannels;
4319    OPTIE  RSNOpaque;
4320    OPTIE  QOSCapsStation;
4321    OPTIE  RRMEnabledCap;
4322    OPTIE  MobilityDomain;
4323    OPTIE  SuppOperatingClasses;
4324    OPTIE  HTCaps;
4325    OPTIE  ExtCap;
4326    OPTIE  VHTCaps;
4327    OPTIE  OperatingMode;
4328    OPTIE  fils_session;
4329    OPTIE  fils_public_key;
4330    OPTIE  fils_key_confirmation;
4331    OPTIE  fils_hlp_container;
4332    OPTIE  bss_max_idle_period;
4333    OPTIE  FTInfo;
4334    OPTIE  he_cap;
4335    OPTIE  he_6ghz_band_cap;
4336
4337    OPTIE  WAPIOpaque;
4338    OPTIE  WAPI;
4339    OPTIE  QosMapSet;
4340    OPTIE  fragment_ie;
4341    OPTIE  dh_parameter_element;
4342    OPTIE  eht_cap;
4343    OPTIE  mlo_ie;
4344    OPTIE  t2lm_ie[0..2];
4345
4346    OPTIE  WPAOpaque;
4347    OPTIE  WMMCaps;
4348    OPTIE  WMMInfoStation;
4349    OPTIE  WscIEOpaque;
4350    OPTIE  ESERadMgmtCap;
4351    OPTIE  ESEVersion;
4352    OPTIE  P2PIEOpaque;
4353    OPTIE  WFDIEOpaque;
4354    OPTIE  vendor_vht_ie;
4355    OPTIE  hs20vendor_ie;
4356    OPTIE  qcn_ie;
4357    OPTIE  osen_ie;
4358    OPTIE  roaming_consortium_sel;
4359} // End frame AssocRequest.
4360
4361FRAME AssocResponse                       // 7.2.3.5
4362{
4363    FF     Capabilities;
4364    FF     Status;
4365    FF     AID;
4366    MANDIE SuppRates;
4367    OPTIE  ExtSuppRates;
4368    OPTIE  EDCAParamSet;
4369    OPTIE  RCPIIE;
4370    OPTIE  RSNIIE;
4371    OPTIE  RRMEnabledCap;
4372    OPTIE  MobilityDomain;
4373    OPTIE  FTInfo;
4374    OPTIE  TimeoutInterval;
4375    OPTIE  HTCaps;
4376    OPTIE  HTInfo;
4377    OPTIE  OBSSScanParameters;
4378    OPTIE  ExtCap;
4379    OPTIE  bss_max_idle_period;
4380    OPTIE  QosMapSet;
4381    OPTIE  VHTCaps;
4382    OPTIE  VHTOperation;
4383    OPTIE  OperatingMode;
4384    OPTIE  fils_session;
4385    OPTIE  fils_public_key;
4386    OPTIE  fils_key_confirmation;
4387    OPTIE  fils_hlp_container;
4388    OPTIE  he_cap;
4389    OPTIE  he_op;
4390    OPTIE  spatial_reuse;
4391    OPTIE  bss_color_change;
4392    OPTIE  mu_edca_param_set;
4393    OPTIE  he_6ghz_band_cap;
4394
4395    OPTIE  RICDataDesc[2];
4396    OPTIE  ESETxmitPower;
4397    OPTIE  fragment_ie;
4398    OPTIE  fils_kde;
4399    OPTIE  eht_cap;
4400    OPTIE  eht_op;
4401    OPTIE  mlo_ie;
4402    OPTIE  t2lm_ie[0..2];
4403
4404    OPTIE  WPA;
4405    OPTIE  WMMParams;
4406    OPTIE  WMMCaps;
4407    OPTIE  ESERadMgmtCap;
4408    OPTIE  ESETrafStrmMet;
4409    OPTIE  WMMTSPEC[0..4];
4410    OPTIE  WscAssocRes;
4411    OPTIE  P2PAssocRes;
4412    OPTIE  vendor_vht_ie;
4413    OPTIE  qcn_ie;
4414    OPTIE  MBO_IE;
4415    OPTIE  reduced_neighbor_report;
4416} // End frame AssocResponse.
4417
4418FRAME ReAssocRequest                      // 7.2.3.6
4419{
4420    FF     Capabilities;
4421    FF     ListenInterval;
4422    FF     CurrentAPAddress;
4423    MANDIE SSID;
4424    MANDIE SuppRates;
4425    OPTIE  ExtSuppRates;
4426    OPTIE  PowerCaps;
4427    OPTIE  SuppChannels;
4428    OPTIE  RSNOpaque;
4429    OPTIE  QOSCapsStation;
4430    OPTIE  RRMEnabledCap;
4431    OPTIE  MobilityDomain;
4432    OPTIE  FTInfo;
4433    OPTIE  RICDataDesc[2];
4434    OPTIE  SuppOperatingClasses;
4435    OPTIE  HTCaps;
4436    OPTIE  ExtCap;
4437    OPTIE  VHTCaps;
4438    OPTIE  OperatingMode;
4439    OPTIE  bss_max_idle_period;
4440    OPTIE  he_cap;
4441    OPTIE  he_6ghz_band_cap;
4442
4443    OPTIE  WAPIOpaque;
4444    OPTIE  WAPI;
4445    OPTIE  QosMapSet;
4446    OPTIE  ESECckmOpaque;
4447    OPTIE  eht_cap;
4448    OPTIE  mlo_ie;
4449    OPTIE  t2lm_ie[0..2];
4450
4451    OPTIE  WPAOpaque;
4452    OPTIE  WMMCaps;
4453    OPTIE  WMMInfoStation;
4454    OPTIE  WscIEOpaque;
4455    OPTIE  ESERadMgmtCap;
4456    OPTIE  ESEVersion;
4457    OPTIE  WMMTSPEC[0..4];
4458    OPTIE  ESETrafStrmRateSet;
4459    OPTIE  P2PIEOpaque;
4460    OPTIE  WFDIEOpaque;
4461    OPTIE  vendor_vht_ie;
4462    OPTIE  hs20vendor_ie;
4463} // End frame ReAssocRequest.
4464
4465FRAME ReAssocResponse                     // 7.2.3.7
4466{
4467    FF     Capabilities;
4468    FF     Status;
4469    FF     AID;
4470    MANDIE SuppRates;
4471    OPTIE  ExtSuppRates;
4472    OPTIE  EDCAParamSet;
4473    OPTIE  RCPIIE;
4474    OPTIE  RSNIIE;
4475    OPTIE  RRMEnabledCap;
4476    OPTIE  RSNOpaque;
4477    OPTIE  MobilityDomain;
4478    OPTIE  FTInfo;
4479    OPTIE  RICDataDesc[2];
4480    OPTIE  TimeoutInterval;
4481    OPTIE  HTCaps;
4482    OPTIE  HTInfo;
4483    OPTIE  OBSSScanParameters;
4484    OPTIE  ExtCap;
4485    OPTIE  bss_max_idle_period;
4486    OPTIE  VHTCaps;
4487    OPTIE  VHTOperation;
4488    OPTIE  OperatingMode;
4489    OPTIE  he_cap;
4490    OPTIE  he_op;
4491    OPTIE  spatial_reuse;
4492    OPTIE  bss_color_change;
4493    OPTIE  mu_edca_param_set;
4494    OPTIE  he_6ghz_band_cap;
4495
4496    OPTIE  QosMapSet;
4497    OPTIE  ESETxmitPower;
4498    OPTIE  eht_cap;
4499    OPTIE  eht_op;
4500    OPTIE  mlo_ie;
4501    OPTIE  t2lm_ie[0..2];
4502
4503    OPTIE  WPA;
4504    OPTIE  WMMParams;
4505    OPTIE  ESERadMgmtCap;
4506    OPTIE  ESETrafStrmMet;
4507    OPTIE  WMMTSPEC[0..4];
4508    OPTIE  ESETrafStrmRateSet;
4509    OPTIE  WscReassocRes;
4510    OPTIE  P2PAssocRes;
4511    OPTIE  vendor_vht_ie;
4512    OPTIE  MBO_IE;
4513    OPTIE  reduced_neighbor_report;
4514} // End frame ReAssocResponse.
4515
4516FRAME ProbeRequest                        // 7.2.3.8
4517{
4518    MANDIE SSID;
4519    MANDIE SuppRates;
4520    OPTIE  RequestedInfo;
4521    OPTIE  ExtSuppRates;
4522    OPTIE  DSParams;
4523    OPTIE  HTCaps;
4524    OPTIE  ExtCap;
4525    OPTIE  VHTCaps;
4526    OPTIE  he_cap;
4527    OPTIE  he_6ghz_band_cap;
4528
4529    OPTIE  eht_cap;
4530    OPTIE  mlo_ie;
4531
4532    OPTIE  WscProbeReq;
4533    OPTIE  WFATPC;
4534    OPTIE  P2PProbeReq;
4535    OPTIE  qcn_ie;
4536} // End frame ProbeRequest.
4537
4538FRAME ProbeResponse                       // 7.2.3.9
4539{
4540    FF     TimeStamp;
4541    FF     BeaconInterval;
4542    FF     Capabilities;
4543    MANDIE SSID;
4544    MANDIE SuppRates;
4545    OPTIE  FHParamSet;
4546    OPTIE  DSParams;
4547    OPTIE  CFParams;
4548    OPTIE  Country;
4549    OPTIE  FHParams;
4550    OPTIE  FHPattTable;
4551    OPTIE  PowerConstraints;
4552    OPTIE  ChanSwitchAnn;
4553    OPTIE  Quiet;
4554    OPTIE  TPCReport;
4555    OPTIE  ERPInfo;
4556    OPTIE  ExtSuppRates;
4557    OPTIE  RSNOpaque;
4558    OPTIE  QBSSLoad;
4559    OPTIE  EDCAParamSet;
4560    OPTIE  RRMEnabledCap;
4561    OPTIE  APChannelReport;
4562    OPTIE  MobilityDomain;
4563    OPTIE  ext_chan_switch_ann;
4564    OPTIE  SuppOperatingClasses;
4565    OPTIE  HTCaps;
4566    OPTIE  HTInfo;
4567    OPTIE  OBSSScanParameters;
4568    OPTIE  ExtCap;
4569    OPTIE  VHTCaps;
4570    OPTIE  VHTOperation;
4571    OPTIE  transmit_power_env[0..8];
4572    OPTIE  ChannelSwitchWrapper;
4573    OPTIE  VHTExtBssLoad;
4574    OPTIE  fils_indication;
4575    OPTIE  max_chan_switch_time;
4576    OPTIE  esp_information;
4577    OPTIE  he_cap;
4578    OPTIE  he_op;
4579    OPTIE  spatial_reuse;
4580    OPTIE  bss_color_change;
4581    OPTIE  mu_edca_param_set;
4582    OPTIE  he_6ghz_band_cap;
4583
4584    OPTIE  sec_chan_offset_ele;
4585    OPTIE  WAPI;
4586    OPTIE  ESETxmitPower;
4587    OPTIE  eht_cap;
4588    OPTIE  eht_op;
4589    OPTIE  mlo_ie;
4590    OPTIE  t2lm_ie[0..2];
4591
4592    OPTIE  WPA;
4593    OPTIE  WMMInfoAp;
4594    OPTIE  WMMParams;
4595    OPTIE  WMMCaps;
4596    OPTIE  ESEVersion;
4597    OPTIE  ESERadMgmtCap;
4598    OPTIE  ESETrafStrmMet;
4599    OPTIE  WscProbeRes;
4600    OPTIE  P2PProbeRes;
4601    OPTIE  Vendor1IE;
4602    OPTIE  vendor_vht_ie;
4603    OPTIE  Vendor3IE;
4604    OPTIE  hs20vendor_ie;
4605    OPTIE  QComVendorIE;
4606    OPTIE  MBO_IE;
4607    OPTIE  qcn_ie;
4608    OPTIE  reduced_neighbor_report;
4609} // End frame ProbeResponse.
4610
4611FRAME Authentication                      // 7.2.3.10
4612{
4613    FF    AuthAlgo;
4614    FF    AuthSeqNo;
4615    FF    Status;
4616    OPTIE ChallengeText;
4617    OPTIE  RSNOpaque;
4618    OPTIE  MobilityDomain;
4619    OPTIE  FTInfo;
4620    OPTIE  TimeoutInterval;
4621    OPTIE  RICDataDesc[2];
4622    OPTIE  fils_nonce;
4623    OPTIE  fils_session;
4624    OPTIE  fils_wrapped_data;
4625    OPTIE  fils_assoc_delay_info;
4626    OPTIE  mlo_ie;
4627} // End frame Auth.
4628
4629FRAME DeAuth                              // 7.2.3.11
4630{
4631    FF    Reason;
4632    OPTIE P2PDeAuth;
4633}
4634
4635
4636FRAME AddTSRequest                        // 7.4.2.1
4637{
4638
4639    FF     Category;
4640    FF     Action;
4641    FF     DialogToken;
4642    MANDIE TSPEC;
4643    OPTIE  TCLAS[0..2];
4644    OPTIE  TCLASSPROC;
4645
4646    // These IEs aren't in the spec, but our extant code *will* parse them if
4647    // they're present.  I included them to preserve that capability
4648
4649    OPTIE  WMMTSPEC;
4650    OPTIE  WMMTCLAS[0..2];
4651    OPTIE  WMMTCLASPROC;
4652    OPTIE  ESETrafStrmRateSet;
4653
4654} // End frame AddTSRequest.
4655
4656FRAME WMMAddTSRequest
4657{
4658    FF     Category;
4659    FF     Action;
4660    FF     DialogToken;
4661    FF     StatusCode;
4662    MANDIE WMMTSPEC;
4663    OPTIE  ESETrafStrmRateSet;
4664} // End Frame WMMAddTSRequest
4665
4666FRAME AddTSResponse                       // 7.4.2.2
4667{
4668
4669    FF     Category;
4670    FF     Action;
4671    FF     DialogToken;
4672    FF     Status;
4673    MANDIE TSDelay;
4674    MANDIE TSPEC;
4675    OPTIE  TCLAS[0..2];
4676    OPTIE  TCLASSPROC;
4677    OPTIE  Schedule;
4678
4679    // These IEs aren't in the spec, but our extant code *will* parse them if
4680    // they're present.  I included them to preserve that capability
4681    OPTIE  WMMTSDelay;
4682    OPTIE  WMMSchedule;
4683    OPTIE  WMMTSPEC;
4684    OPTIE  WMMTCLAS[0..2];
4685    OPTIE  WMMTCLASPROC;
4686    OPTIE  ESETrafStrmMet;
4687
4688} // End frame AddTSResponse.
4689
4690FRAME WMMAddTSResponse
4691{
4692
4693    FF     Category;
4694    FF     Action;
4695    FF     DialogToken;
4696    FF     StatusCode;
4697    OPTIE  WMMTSPEC;
4698    OPTIE  ESETrafStrmMet;
4699
4700} // End frame WMMAddTSResponse.
4701
4702FRAME DelTS                               // 7.4.2.3
4703{
4704    FF     Category;
4705    FF     Action;
4706    FF     TSInfo;
4707    FF     Reason;
4708}
4709
4710FRAME WMMDelTS
4711{
4712    FF     Category;
4713    FF     Action;
4714    FF     DialogToken;
4715    FF     StatusCode;
4716    MANDIE WMMTSPEC;
4717}
4718
4719FRAME TPCRequest
4720{
4721    FF     Category;
4722    FF     Action;
4723    FF     DialogToken;
4724    MANDIE TPCRequest;
4725}
4726
4727FRAME TPCReport
4728{
4729    FF     Category;
4730    FF     Action;
4731    FF     DialogToken;
4732    MANDIE TPCReport;
4733}
4734
4735FRAME ChannelSwitch
4736{
4737    FF     Category;
4738    FF     Action;
4739    MANDIE ChanSwitchAnn;
4740    OPTIE  sec_chan_offset_ele;
4741    OPTIE  WiderBWChanSwitchAnn;
4742}
4743
4744FRAME MeasurementRequest
4745{
4746    FF     Category;
4747    FF     Action;
4748    FF     DialogToken;
4749    MANDIE MeasurementRequest[1..4];
4750}
4751
4752FRAME MeasurementReport
4753{
4754    FF     Category;
4755    FF     Action;
4756    FF     DialogToken;
4757    MANDIE MeasurementReport;
4758}
4759
4760FRAME SMPowerSave
4761{
4762    FF    Category;
4763    FF    Action;
4764    FF    SMPowerModeSet;
4765}
4766
4767FRAME RadioMeasurementRequest
4768{
4769   FF    Category;
4770   FF    Action;
4771   FF    DialogToken;
4772   FF    NumOfRepetitions;
4773   //Measurement Request IE.
4774   MANDIE MeasurementRequest[1..5];
4775}
4776
4777FRAME RadioMeasurementReport
4778{
4779   FF   Category;
4780   FF   Action;
4781   FF   DialogToken;
4782   //Measurement Report elements.
4783   MANDIE MeasurementReport[1];
4784}
4785
4786FRAME LinkMeasurementRequest
4787{
4788   FF   Category;
4789   FF   Action;
4790   FF   DialogToken;
4791   FF   TxPower;
4792   FF   MaxTxPower;
4793   //Optional Sub Ies
4794}
4795
4796FRAME LinkMeasurementReport
4797{
4798   FF   Category;
4799   FF   Action;
4800   FF   DialogToken;
4801   FF   TPCEleID;
4802   FF   TPCEleLen;
4803   FF   TxPower;
4804   FF   LinkMargin;
4805   FF   RxAntennaId;
4806   FF   TxAntennaId;
4807   FF   RCPI;
4808   FF   RSNI;
4809   //Optional Vendor specific IEs ... ignoring
4810}
4811
4812FRAME NeighborReportRequest
4813{
4814   FF     Category;
4815   FF     Action;
4816   FF     DialogToken;
4817   OPTIE  SSID;
4818   //Optional vendor specific IE...ignoring.
4819}
4820
4821FRAME NeighborReportResponse
4822{
4823   FF     Category;
4824   FF     Action;
4825   FF     DialogToken;
4826   OPTIE  NeighborReport[1..MAX_SUPPORTED_NEIGHBOR_RPT];
4827}
4828
4829FRAME OperatingMode
4830{
4831    FF        Category;
4832    FF        Action;
4833    //Operating Mode field
4834    FF        OperatingMode;
4835}
4836
4837FRAME TDLSDisReq
4838{
4839    FF     Category;
4840    FF     Action;
4841    FF     DialogToken;
4842    MANDIE LinkIdentifier;
4843}
4844
4845FRAME TDLSDisRsp
4846{
4847    FF     Category;
4848    FF     Action;
4849    FF     DialogToken;
4850    FF     Capabilities;
4851    MANDIE SuppRates;
4852    OPTIE  ExtSuppRates;
4853    OPTIE  SuppChannels;
4854    OPTIE  SuppOperatingClasses;
4855    OPTIE  RSN;
4856    OPTIE  ExtCap;
4857    OPTIE  FTInfo;
4858    OPTIE  TimeoutInterval;
4859    OPTIE  RICData;
4860    OPTIE  HTCaps;
4861    OPTIE  ht2040_bss_coexistence;
4862    MANDIE LinkIdentifier;
4863    OPTIE  VHTCaps;
4864    OPTIE  he_cap;
4865}
4866
4867FRAME TDLSSetupReq
4868{
4869    FF     Category;
4870    FF     Action;
4871    FF     DialogToken;
4872    FF     Capabilities;
4873    MANDIE SuppRates;
4874    OPTIE  Country;
4875    OPTIE  ExtSuppRates;
4876    OPTIE  SuppChannels;
4877    OPTIE  RSN;
4878    OPTIE  ExtCap;
4879    OPTIE  SuppOperatingClasses;
4880    OPTIE  QOSCapsStation;
4881    OPTIE  FTInfo;
4882    OPTIE  TimeoutInterval;
4883    OPTIE  RICData;
4884    OPTIE  HTCaps;
4885    OPTIE  ht2040_bss_coexistence;
4886    MANDIE LinkIdentifier;
4887    OPTIE  WMMInfoStation;
4888    OPTIE  AID;
4889    OPTIE  VHTCaps;
4890    OPTIE  he_cap;
4891    OPTIE  he_6ghz_band_cap;
4892}
4893
4894FRAME TDLSSetupRsp
4895{
4896    FF     Category;
4897    FF     Action;
4898    FF     Status;
4899    FF     DialogToken;
4900    FF     Capabilities ;
4901    OPTIE  SuppRates;
4902    OPTIE  Country;
4903    OPTIE  ExtSuppRates;
4904    OPTIE  SuppChannels;
4905    OPTIE  RSN;
4906    OPTIE  ExtCap;
4907    OPTIE  SuppOperatingClasses;
4908    OPTIE  QOSCapsStation;
4909    OPTIE  FTInfo;
4910    OPTIE  TimeoutInterval;
4911    OPTIE  RICData;
4912    OPTIE  HTCaps;
4913    OPTIE  ht2040_bss_coexistence;
4914    OPTIE  LinkIdentifier;
4915    OPTIE  WMMInfoStation;
4916    OPTIE  AID;
4917    OPTIE  VHTCaps;
4918    OPTIE  OperatingMode;
4919    OPTIE  he_cap;
4920    OPTIE  he_6ghz_band_cap;
4921}
4922
4923FRAME TDLSSetupCnf
4924{
4925    FF     Category;
4926    FF     Action;
4927    FF     Status;
4928    FF     DialogToken;
4929    OPTIE  RSN;
4930    OPTIE  EDCAParamSet;
4931    OPTIE  FTInfo;
4932    OPTIE  TimeoutInterval;
4933    OPTIE  HTInfo;
4934    OPTIE  LinkIdentifier;
4935    OPTIE  WMMParams;
4936    OPTIE  VHTOperation;
4937    OPTIE  OperatingMode;
4938    OPTIE  he_op;
4939}
4940FRAME TDLSTeardown
4941{
4942    FF     Category;
4943    FF     Action;
4944    FF     Reason;
4945    OPTIE  FTInfo;
4946    MANDIE LinkIdentifier;
4947}
4948
4949FRAME TDLSPeerTrafficInd
4950{
4951    FF     Category;
4952    FF     Action;
4953    FF     DialogToken;
4954    MANDIE LinkIdentifier;
4955    OPTIE  PTIControl;
4956    MANDIE PUBufferStatus;
4957}
4958
4959FRAME TDLSPeerTrafficRsp
4960{
4961    FF     Category;
4962    FF     Action;
4963    FF     DialogToken;
4964    MANDIE LinkIdentifier;
4965}
4966
4967FRAME SaQueryReq
4968{
4969    FF     Category;
4970    FF     Action;
4971    FF     TransactionId;
4972    OPTIE  oci;
4973}
4974
4975FRAME SaQueryRsp
4976{
4977    FF     Category;
4978    FF     Action;
4979    FF     TransactionId;
4980    OPTIE  oci;
4981}
4982
4983FRAME QosMapConfigure
4984{
4985    FF     Category;
4986    FF     Action;
4987    MANDIE  QosMapSet;
4988}
4989
4990FRAME VHTGidManagementActionFrame
4991{
4992    FF     Category;
4993    FF     Action;
4994    FF     VhtMembershipStatusArray;
4995    FF     VhtUserPositionArray;
4996}
4997
4998FRAME ht2040_bss_coexistence_mgmt_action_frame
4999{
5000    FF     Category;
5001    FF     Action;
5002    MANDIE ht2040_bss_coexistence;
5003    MANDIE ht2040_bss_intolerant_report;
5004}
5005
5006FRAME TimingAdvertisementFrame            // 8.3.3.15
5007{
5008    FF     TimeStamp;
5009    FF     Capabilities;
5010    OPTIE  Country;
5011    OPTIE  PowerConstraints;
5012    OPTIE  TimeAdvertisement;
5013    OPTIE  ExtCap;
5014    OPTIE  Vendor1IE;
5015    OPTIE  Vendor3IE;
5016}
5017
5018FRAME ext_channel_switch_action_frame
5019{
5020    FF     Category;
5021    FF     Action;
5022    FF     ext_chan_switch_ann_action;
5023    OPTIE  WiderBWChanSwitchAnn;
5024    OPTIE  qcn_ie;
5025    OPTIE  bw_ind_element;
5026}
5027
5028FRAME p2p_oper_chan_change_confirm
5029{
5030    FF Category;
5031    FF p2p_action_oui;
5032    FF p2p_action_subtype;
5033    FF DialogToken;
5034    OPTIE HTCaps;
5035    OPTIE VHTCaps;
5036    OPTIE OperatingMode;
5037}
5038
5039FRAME addba_req
5040{
5041    FF    Category;
5042    FF    Action;
5043    FF    DialogToken;
5044    FF    addba_param_set;
5045    FF    ba_timeout;
5046    FF    ba_start_seq_ctrl;
5047    OPTIE addba_extn_element;
5048}
5049
5050FRAME addba_rsp
5051{
5052    FF    Category;
5053    FF    Action;
5054    FF    DialogToken;
5055    FF    Status;
5056    FF    addba_param_set;
5057    FF    ba_timeout;
5058    OPTIE addba_extn_element;
5059}
5060
5061FRAME delba_req
5062{
5063    FF    Category;
5064    FF    Action;
5065    FF    delba_param_set;
5066    FF    Reason;
5067}
5068
5069FRAME t2lm_neg_req
5070{
5071    FF    Category;
5072    FF    Action;
5073    FF    DialogToken;
5074    OPTIE t2lm_ie[0..2];
5075}
5076
5077FRAME t2lm_neg_rsp
5078{
5079    FF    Category;
5080    FF    Action;
5081    FF    DialogToken;
5082    FF    Status;
5083}
5084
5085FRAME t2lm_teardown
5086{
5087    FF    Category;
5088    FF    Action;
5089}
5090
5091FRAME vendor_action_frame
5092{
5093    FF    Category;
5094    FF    vendor_oui;
5095    FF    vendor_action_subtype;
5096}
5097
5098FRAME mscs_request_action_frame
5099{
5100    FF     Category;
5101    FF     Action;
5102    FF     DialogToken;
5103    MANDIE descriptor_element;
5104}
5105
5106FRAME epcs_neg_req
5107{
5108    FF    Category;
5109    FF    Action;
5110    FF    DialogToken;
5111}
5112
5113FRAME epcs_neg_rsp
5114{
5115    FF    Category;
5116    FF    Action;
5117    FF    DialogToken;
5118    FF    Status;
5119}
5120
5121FRAME epcs_teardown
5122{
5123    FF    Category;
5124    FF    Action;
5125}
5126
5127// Local Variables:
5128// mode: c++
5129// fill-column: 77
5130// comment-column: 42
5131// indent-tabs-mode: nil
5132// show-trailing-whitespace: t
5133// End:
5134
5135// parser.frms ends here.
5136