summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrishna Kumaar Natarajan <kknatara@qca.qualcomm.com>2014-04-11 11:52:11 -0700
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-04-24 22:16:43 -0700
commit720e002c80477aa02986a7cbc73dbd628df48a9b (patch)
tree0bb3e12d38c4350245038306e3dee5ed247013f7
parent63af379e5df31dd40913f47bc3d1a2919c98b196 (diff)
wlan: qcacld: dot11f.frms file
The dot11f.frms file will be maintained under CORE/MAC/src/cfg/cfgUtil/ Change-Id: I5e3b5ecffc790a960c08b7a42bdc2b29812d2aa6 CRs-Fixed: 647335
-rwxr-xr-xCORE/MAC/src/cfg/cfgUtil/dot11f.frms4237
1 files changed, 4237 insertions, 0 deletions
diff --git a/CORE/MAC/src/cfg/cfgUtil/dot11f.frms b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
new file mode 100755
index 000000000000..9b4fd99fb57f
--- /dev/null
+++ b/CORE/MAC/src/cfg/cfgUtil/dot11f.frms
@@ -0,0 +1,4237 @@
+/*
+ * Copyright (c) 2006-2007,2014 The Linux Foundation. All rights reserved.
+ *
+ * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
+ *
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+ * Copyright (c) 2006-2007,2014 Qualcomm Atheros, Inc.
+ * All Rights Reserved.
+ * Qualcomm Atheros Confidential and Proprietary.
+ */
+
+/**
+ * \file dot11f.frms
+ *
+ * \brief Primary 'frames' file for the MAC parser
+ *
+ *
+ * This file defines several 802.11 frames (along with their associated
+ * constituents) in a little language called "frames". When run through the
+ * 'framesc' program, it will generate C code for working with these frames:
+ * C structs representing the 802.11 frame together with functions for
+ * packing & unpacking them.
+ *
+ * For more information on the "frames" language, run 'framesc --help'...
+ *
+ *
+ */
+
+
+// Tell framesc what types to use for...
+%8-bit-type tANI_U8 // 8,
+%16-bit-type tANI_U16 // 16,
+%32-bit-type tANI_U32 // & 32-bit unsigned integral types. These can also
+ // be specified on the command line.
+
+// Define some mnemonic constants; these are just for our use with the frames
+// files we're compiling. IOW, they won't result in any C code being
+// emitted.
+
+const EID_SSID = 0;
+const EID_SUPP_RATES = 1;
+const EID_FH_PARAM_SET = 2;
+const EID_DS_PARAM_SET = 3;
+const EID_CF_PARAM_SET = 4;
+const EID_TIM = 5;
+const EID_IBSS_PARAM_SET = 6;
+const EID_COUNTRY = 7;
+const EID_FH_PATTERN = 8;
+const EID_FH_PATT_TABLE = 9;
+const EID_REQUEST = 10;
+const EID_QBSS_LOAD = 11;
+const EID_EDCA_PARAM_SET = 12;
+const EID_TSPEC = 13;
+const EID_TCLAS = 14;
+const EID_SCHEDULE = 15;
+const EID_CHALLENGE_TEXT = 16;
+const EID_POWER_CONSTRAINTS = 32;
+const EID_POWER_CAPABILITY = 33;
+const EID_TPC_REQUEST = 34;
+const EID_TPC_REPORT = 35;
+const EID_SUPPORTED_CHANNELS = 36;
+const EID_CHANNEL_SWITCH_ANN = 37;
+const EID_MEAS_REQUEST = 38;
+const EID_MEAS_REPORT = 39;
+const EID_QUIET = 40;
+const EID_ERP_INFO = 42;
+const EID_TS_DELAY = 43;
+const EID_TCLASS_PROC = 44;
+const EID_HT_CAPABILITIES = 45;
+const EID_QOS_CAPABILITY = 46;
+const EID_RSN = 48;
+const EID_EXT_SUPP_RATES = 50;
+const EID_AP_CHAN_REPORT = 51;
+const EID_NEIGHBOR_REPORT = 52;
+const EID_RCPI = 53;
+const EID_FT_MOBILITY_DOMAIN = 54;
+const EID_FT_INFO = 55;
+const EID_TIMEOUT_INTERVAL = 56;
+const EID_FT_RIC_DATA = 57;
+const EID_SUPPORTED_OPER_CLASSES = 59;
+const EID_HT_INFO = 61;
+const EID_EXT_CHANNEL_SWITCH_ANN = 62;
+const EID_RSNI = 65;
+const EID_RRM_MEAS_PILOT_TX_INFO = 66;
+const EID_WAPI = 68;
+const EID_RRM_ENABLED_CAPS = 70;
+const EID_MULTIPLE_BSSID = 71;
+const EID_OBSS_SCAN_PARAMETERS = 74;
+const EID_FT_RIC_DESCRIPTOR = 75;
+const EID_LINK_IDENTIFIER = 101;
+const EID_PTI_CONTROL = 105;
+const EID_PU_BUFFER_STATUS = 106;
+const EID_QOS_MAP_SET = 110;
+const EID_ESE_SPECIFIC = 150;
+const EID_ESE_CCKM_SPECIFIC = 156;
+const EID_VHT_CAPABILITIES = 191;
+const EID_VHT_OPERATION_ELEMENT = 192;
+const EID_VHT_EXT_BSS_LOAD = 193;
+const EID_AID = 197;
+const EID_EXT_CAP = 127;
+const EID_OPERATING_MODE = 199;
+const EID_WIDER_BW_CHANNEL_SWITCH_ANN= 194;
+const EID_VENDOR_SPECIFIC = 221;
+
+const SIR_MAC_PROP_EXT_RATES_TYPE = 0;
+const SIR_MAC_PROP_AP_NAME_TYPE = 1;
+const SIR_MAC_PROP_HCF_TYPE = 2;
+const SIR_MAC_PROP_WDS_TYPE = 3;
+const SIR_MAC_PROP_BP_IND_TYPE = 4;
+const SIR_MAC_PROP_NEIGHBOR_BSS_TYPE = 5;
+const SIR_MAC_PROP_LOAD_INFO_TYPE = 6;
+const SIR_MAC_PROP_ASSOC_TYPE = 7;
+const SIR_MAC_PROP_LOAD_BALANCE_TYPE = 8;
+const SIR_MAC_PROP_LL_ATTR_TYPE = 9;
+const SIR_MAC_PROP_CAPABILITY = 10;
+const SIR_MAC_PROP_VERSION = 11;
+const SIR_MAC_PROP_EDCAPARAMS = 12;
+const SIR_MAC_PROP_TITAN = 14;
+const SIR_MAC_PROP_CHANNEL_SWITCH = 15;
+const SIR_MAC_PROP_QUIET_BSS = 16;
+const SIR_MAC_PROP_TRIG_STA_BK_SCAN = 17;
+const SIR_MAC_PROP_TAURUS = 18;
+
+const ANI_WDS_INFO_MAX_LENGTH = 64;
+const SIR_MAC_MAX_NUMBER_OF_RATES = 12;
+const HT_MAX_SUPPORTED_MCS_SET = 16;
+
+/////////////////////////////////////////////////////////////////////////////
+// Wi-Fi Protected Setup TLV Identifiers //
+// WSC Version 2.0.0 Table 28 //
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+// Wi-Fi Simple Configuration TLV Identifiers //
+// WFA Vendor Extension Subelements //
+/////////////////////////////////////////////////////////////////////////////
+const TLV_VERSION2 = 0;
+const TLV_AUTHORIZED_MAC = 1;
+const TLV_NETWORK_KEY_SHAREABLE = 2;
+const TLV_REQUEST_TO_ENROLL = 3;
+const TLV_SETTINGS_DELAY_TIME = 4;
+
+const TLV_VERSION = 0x104A;
+const TLV_WI_FI_SIMPLE_CONFIG_STATE = 0x1044;
+const TLV_AP_SETUP_LOCKED = 0x1057;
+const TLV_SELECTED_REGISTRAR_CONFIG_METHODS = 0x1053;
+const TLV_DEVICE_PASSWORD_ID = 0x1012;
+const TLV_UUID_E = 0x1047;
+const TLV_UUID_R = 0x1048;
+const TLV_RF_BANDS = 0x103C;
+const TLV_REQUEST_TYPE = 0x103A;
+const TLV_RESPONSE_TYPE = 0x103B;
+const TLV_CONFIG_METHODS = 0x1008;
+const TLV_PRIMARY_DEVICE_TYPE = 0x1054;
+const TLV_ASSOCIATION_STATE = 0x1002;
+const TLV_CONFIGURATION_ERROR = 0x1009;
+const TLV_MANUFACTURER = 0x1021;
+const TLV_MODEL_NAME = 0x1023;
+const TLV_MODEL_NUMBER = 0x1024;
+const TLV_SERIAL_NUMBER = 0x1042;
+const TLV_DEVICE_NAME = 0x1011;
+const TLV_SELECTED_REGISTRAR = 0x1041;
+const TLV_VENDOR_EXTENSION = 0x1049;
+const TLV_REQUESTED_DEVICE_TYPE = 0x106A;
+
+/////////////////////////////////////////////////////////////////////////////
+// Wi-Fi Direct/P2P TLV Identifiers //
+/////////////////////////////////////////////////////////////////////////////
+const TLV_P2P_STATUS = 0;
+const TLV_MINOR_REASON_CODE = 1;
+const TLV_P2P_CAPABILITY = 2;
+const TLV_P2P_DEVICE_ID = 3;
+const TLV_P2P_GROUP_OWNER_INTENT = 4;
+const TLV_CONFIGURATION_TIMEOUT = 5;
+const TLV_LISTEN_CHANNEL = 6;
+const TLV_P2P_GROUP_BSSID = 7;
+const TLV_EXTENDED_LISTEN_TIMING = 8;
+const TLV_INTENDED_P2P_INTERFACE_ADDRESS = 9;
+const TLV_P2P_MANAGEABILITY = 10;
+const TLV_CHANNEL_LIST = 11;
+const TLV_NOTICE_OF_ABSENCE = 12;
+const TLV_P2P_DEVICE_INFO = 13;
+const TLV_P2P_GROUP_INFO = 14;
+const TLV_P2P_GROUP_ID = 15;
+const TLV_P2P_INTERFACE = 16;
+const TLV_OPERATING_CHANNEL = 17;
+const TLV_INVITATION_FLAGS = 18;
+const TLV_P2P_VENDOR_SPECIFIC = 221;
+
+/////////////////////////////////////////////////////////////////////////////
+// Fixed Fields
+
+FF AuthAlgo (2) // C.f. Sec. 7.3.1.1
+{
+ algo, 2;
+}
+
+FF AuthSeqNo (2) // 7.3.1.2
+{
+ no, 2;
+}
+
+FF BeaconInterval (2) // 7.3.1.3
+{
+ interval, 2;
+}
+
+FF Capabilities (2) // 7.3.1.4
+{
+ {
+ ess: 1;
+ ibss: 1;
+ cfPollable: 1;
+ cfPollReq: 1;
+ privacy: 1;
+ shortPreamble: 1;
+ pbcc: 1;
+ channelAgility: 1;
+ spectrumMgt: 1;
+ qos: 1;
+ shortSlotTime: 1;
+ apsd: 1;
+ rrm: 1;
+ dsssOfdm: 1;
+ delayedBA: 1;
+ immediateBA: 1;
+ }
+}
+
+FF CurrentAPAddress(6) // 7.3.1.5
+{
+ mac[6];
+}
+
+FF ListenInterval (2) // 7.3.1.6
+{
+ interval, 2;
+}
+
+FF Reason (2) // 7.3.1.7
+{
+ code, 2;
+}
+
+FF AID (2) // 7.3.1.8
+{
+ associd, 2;
+}
+
+FF Status (2) // 7.3.1.9
+{
+ status, 2;
+}
+
+FF TimeStamp (8) // 7.3.1.10
+{
+ timestamp, 8;
+}
+
+FF Category (1) // 7.3.1.11
+{
+ category, 1;
+}
+
+FF Action (1) // 7.3.1.11
+{
+ action, 1;
+}
+
+FF TransactionId (2) // 7.3.1.11
+{
+ transId[2];
+}
+
+FF DialogToken (1) // 7.3.1.12
+{
+ token, 1;
+}
+
+FF StatusCode (1) // WMM Spec 2.2.10
+{
+ statusCode, 1;
+}
+
+FF OperatingMode (1)
+{
+ {
+ //Operating Mode field
+ chanWidth: 2;
+ reserved: 2;
+ rxNSS: 3;
+ rxNSSType: 1;
+ }
+}
+FF AddBAParameterSet (2) // 7.3.1.14
+{
+ {
+ amsduSupported: 1;
+ policy: 1;
+ tid: 4;
+ bufferSize: 10;
+ }
+}
+
+FF BATimeout (2) // 7.3.1.15
+{
+ timeout, 2;
+}
+
+FF BAStartingSequenceControl (2) // 7.2.1.7
+{
+ {
+ fragNumber: 4;
+ ssn: 12;
+ }
+}
+
+FF DelBAParameterSet (2) // 7.3.1.16
+{
+ {
+ reserved: 11;
+ initiator: 1;
+ tid: 4;
+ }
+}
+
+FF SMPowerModeSet (1) //7.3.1.25
+{
+ {
+ PowerSave_En: 1;
+ Mode: 1;
+ reserved: 6;
+ }
+}
+
+FF TSInfo (3) // 7.3.2.30
+{
+ {
+ traffic_type: 1;
+ tsid: 4;
+ direction: 2;
+ access_policy: 2;
+ aggregation: 1;
+ psb: 1;
+ user_priority: 3;
+ tsinfo_ack_pol: 2;
+ schedule: 1;
+ unused: 15;
+ }
+}
+
+FF NumOfRepetitions (2)
+{
+ repetitions, 2;
+}
+
+FF TxPower (1)
+{
+ txPower, 1;
+}
+
+FF MaxTxPower (1)
+{
+ maxTxPower, 1;
+}
+FF TPCEleID (1)
+{
+ TPCId, 1;
+}
+FF TPCEleLen (1)
+{
+ TPCLen, 1;
+}
+FF LinkMargin (1)
+{
+ linkMargin, 1;
+}
+FF RxAntennaId (1)
+{
+ antennaId, 1;
+}
+FF TxAntennaId (1)
+{
+ antennaId, 1;
+}
+FF RCPI (1)
+{
+ rcpi, 1;
+}
+FF RSNI (1)
+{
+ rsni, 1;
+}
+
+FF P2POUI (4)
+{
+ oui, 4;
+}
+
+FF P2POUISubType (1)
+{
+ ouiSubtype, 1;
+}
+
+FF VhtMembershipStatusArray(8) // 8.4.1.51
+{
+ membershipStatusArray[8];
+}
+
+FF VhtUserPositionArray(16) // 8.4.1.52
+{
+ userPositionArray[16];
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// TLVs //
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+ * \brief Version
+ *
+ * WPS 1.0h
+ * Version specifies the Easy Setup version. The one-byte field is broken
+ * into a four-bit major part using the top MSBs and four-bit minor part
+ * using the LSBs. As an example, version 3.2 would be 0x32.
+ *
+ * WSC 2.0.0
+ * Deprecated Version mechanism. This attribute is always set to value 0x10
+ * (version 1.0) for backwards compatibility. Version 1.0h of the specification
+ * did not fully describe the version negotiation mechanism and version 2.0
+ * introduced a new subelement (Version2) for indicating the version number
+ * to avoid potential interoperability issues with deployed 1.0h-based devices.
+ *
+ */
+
+TLV Version( TLV_VERSION ) ( 2 : 2 ) MSB
+{
+ {
+ minor: 4;
+ major: 4;
+ }
+}
+
+/// Wi-Fi Protected Setup State
+TLV WPSState( TLV_WI_FI_SIMPLE_CONFIG_STATE ) ( 2 : 2 ) MSB
+{
+ state, 1;
+}
+
+/**
+ * \brief AP Setup Locked
+ *
+ *
+ * This variable indicates that the AP has entered a state in which it will
+ * refuse to allow an external Registrar to attempt to run the Registration
+ * Protocol using the AP?s PIN (with the AP acting as Enrollee). The AP
+ * should enter this state if it believes a brute force attack is underway
+ * against the AP?s PIN.
+ *
+ * When the AP is in this state, it MUST continue to allow other Enrollees to
+ * connect and run the Registration Protocol with any external Registrars or
+ * the AP's built-in Registrar (if any). It is only the use of the AP' PIN
+ * for adding external Registrars that is disabled in this state.
+ *
+ * The AP Setup Locked state can be reset to FALSE through an authenticated
+ * call to SetAPSettings. APs may provide other implementation-specific
+ * methods of resetting the AP Setup Locked state as well.
+ *
+ *
+ */
+
+TLV APSetupLocked( TLV_AP_SETUP_LOCKED ) ( 2 : 2 ) MSB
+{
+ fLocked, 1;
+}
+
+/**
+ * \brief Selected Registrar Config Methods
+ *
+ *
+ * This attribute has the same values that Config Methods have. It is used in
+ * Probe Response messages to convey the Config Methods of the selected
+ * Registrar.
+ *
+ *
+ */
+
+TLV SelectedRegistrarConfigMethods ( TLV_SELECTED_REGISTRAR_CONFIG_METHODS ) ( 2 : 2 ) MSB
+{
+ methods, 2;
+}
+
+/**
+ * \brief UUID-E
+ *
+ *
+ * The universally unique identifier (UUID) element is a unique GUID
+ * generated by the Enrollee. It uniquely identifies an operational device
+ * and should survive reboots and resets. The UUID is provided in binary
+ * format. If the device also supports UPnP, then the UUID corresponds to the
+ * UPnP UUID.
+ *
+ *
+ */
+
+TLV UUID_E ( TLV_UUID_E ) ( 2 : 2 ) MSB
+{
+ uuid[ 16 ];
+}
+
+/**
+ * \brief UUID-R
+ *
+ *
+ * The universally unique identifier (UUID) element is a unique GUID
+ * generated by the Registrar. It uniquely identifies an operational device
+ * and should survive reboots and resets. The UUID is provided in binary
+ * format. If the device also supports UPnP, then the UUID corresponds to the
+ * UPnP UUID.
+ *
+ *
+ */
+
+TLV UUID_R ( TLV_UUID_R ) ( 2 : 2 ) MSB
+{
+ uuid[ 16 ];
+}
+
+/**
+ * \brief RF Bands
+ *
+ *
+ \code
+
+ 0x01 2.4GHz
+ 0x02 5.0GHz
+
+ \endcode
+ *
+ *
+ */
+
+TLV RFBands ( TLV_RF_BANDS ) ( 2 : 2 ) MSB
+{
+ bands, 1;
+}
+
+
+/**
+ * \brief Selected Registrar
+ *
+ *
+ * This field indicates that a Registrar has been selected by a user and that
+ * an Enrollee should proceed with setting up an 802.1X uncontrolled data
+ * port with the Registrar.
+ *
+ *
+ */
+
+TLV SelectedRegistrar ( TLV_SELECTED_REGISTRAR ) ( 2 : 2 ) MSB
+{
+ selected, 1;
+}
+
+/**
+ * \brief Config Methods
+ *
+ *
+ * The Config Methods Data component lists the configuration methods the
+ * Enrollee or Registrar supports. The list is a bitwise OR of values from
+ * the table below. In addition to Config Methods, APs and STAs that support
+ * the UPnP Management Interface must support the Permitted Config Methods
+ * attribute, which is used to control the Config Methods that are enabled on
+ * that AP.
+ *
+ \code
+
+ Value Hardware Interface
+ 0x0001 USBA (Flash Drive)
+ 0x0002 Ethernet
+ 0x0004 Label
+ 0x0008 Display
+ 0x0010 External NFC Token
+ 0x0020 Integrated NFC Token
+ 0x0040 NFC Interface
+ 0x0080 PushButton
+ 0x0100 Keypad
+
+ \endcode
+ *
+ *
+ */
+
+TLV ConfigMethods ( TLV_CONFIG_METHODS ) ( 2 : 2 ) MSB
+{
+ methods, 2;
+}
+
+/**
+ * \brief Association State
+ *
+ *
+ * The Association State component shows the configuration and previous
+ * association state of the wireless station when sending a Discovery
+ * request.
+ *
+ \code
+
+ Association State Description
+ 0 Not Associated
+ 1 Connection Success
+ 2 Configuration Failure
+ 3 Association Failure
+ 4 IP Failure
+
+ \endcode
+ *
+ *
+ */
+
+TLV AssociationState ( TLV_ASSOCIATION_STATE ) ( 2 : 2 ) MSB
+{
+ state, 2;
+}
+
+/**
+ * \brief Configuration Error
+ *
+ *
+ * The Configuration Error component shows the result of the device
+ * attempting to configure itself and to associate with the WLAN.
+ *
+ \code
+
+ Configuration Error Description
+ 0 No Error
+ 1 OOB Interface Read Error
+ 2 Decryption CRC Failure
+ 3 2.4 channel not supported
+ 4 5.0 channel not supported
+ 5 Signal too weak
+ 6 Network auth failure
+ 7 Network association failure
+ 8 No DHCP response
+ 9 Failed DHCP config
+ 10 IP address conflict
+ 11 Couldn't connect to Registrar
+ 12 Multiple PBC sessions detected
+ 13 Rogue activity suspected
+ 14 Device busy
+ 15 Setup locked
+ 16 Message Timeout
+ 17 Registration Session Timeout
+ 18 Device Password Auth Failure
+
+ \endcode
+ *
+ * The Device busy error is returned if the sending device is unable to
+ * respond to the request due to some internal conflict or resource
+ * contention issue. For example, if a device is only capable of performing a
+ * single instance of the Registration Protocol at a time, it may return this
+ * error in response to attempts to start another instance in the middle of
+ * an active session.
+ *
+ *
+ */
+
+TLV ConfigurationError ( TLV_CONFIGURATION_ERROR ) ( 2 : 2 ) MSB
+{
+ error, 2;
+}
+
+TLV Manufacturer ( TLV_MANUFACTURER ) ( 2 : 2 ) MSB
+{
+ name[ 0..64 ];
+}
+
+TLV ModelName ( TLV_MODEL_NAME ) ( 2 : 2 ) MSB
+{
+ text[ 0..32 ];
+}
+
+TLV ModelNumber ( TLV_MODEL_NUMBER ) ( 2 : 2 ) MSB
+{
+ text[ 0..32 ];
+}
+
+TLV SerialNumber ( TLV_SERIAL_NUMBER ) ( 2 : 2 ) MSB
+{
+ text[ 0..32 ];
+}
+
+TLV DeviceName ( TLV_DEVICE_NAME ) ( 2 : 2 ) MSB
+{
+ text[ 0..32 ];
+}
+
+/**
+ * \brief Device Password ID
+ *
+ *
+ * This attribute is used to identify a device password. There are six
+ * predefined values and ten reserved values. If the Device Password ID is
+ * Default, the Enrollee should use its PIN password (from the label or
+ * display). This password may correspond to the label, display, or a
+ * user-defined password that has been configured to replace the original
+ * device password.
+ *
+ * User-specified indicates that the user has overridden the password with a
+ * manually selected value. Machine-specified indicates that the original
+ * PIN password has been overridden by a strong, machinegenerated device
+ * password value. The Rekey value indicates that the device's 256-bit
+ * rekeying password will be used. The PushButton value indicates that the
+ * PIN is the all-zero value reserved for the PushButton Configuration
+ * method.
+ *
+ * The Registrar-specified value indicates a PIN that has been obtained from
+ * the Registrar (via a display or other out-of-band method). This value may
+ * be further augmented with the optional 'Identity' attribute in M1. This
+ * augmentation is useful when multiple predefined UserID/PIN pairs have been
+ * established by a Registrar such as an authenticator used for Hotspot
+ * access. If the Device Password ID in M1 is not one of the predefined or
+ * reserved values, it corresponds to a password given to the Registrar as an
+ * OOB Device Password.
+ *
+ \code
+
+ Value Description
+
+ 0x0000 Default (PIN)
+ 0x0001 User-specified
+ 0x0002 Machine-specified
+ 0x0003 Rekey
+ 0x0004 PushButton
+ 0x0005 Registrar-specified
+ 0x0006 - 0x000F Reserved
+
+ \endcode
+ *
+ *
+ */
+
+TLV DevicePasswordID ( TLV_DEVICE_PASSWORD_ID ) ( 2 : 2 ) MSB
+{
+ id, 2;
+}
+
+
+/**
+ * \brief Primary Device Type
+ *
+ *
+ * This attribute contains the primary type of the device. Its format
+ * follows:
+ *
+ \code
+
+ 0 1 2 3
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Attribute ID | Length |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | Category ID | OUI (1-2) |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | OUI (3-4) | Sub Category ID |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+ \endcode
+ *
+ * Vendor-specific sub-categories are designated by setting the OUI to the
+ * value associated with that vendor. Note that a four-byte subdivided OUI
+ * is used. For the predefined values, the Wi-Fi Alliance OUI of 00 50 F2 04
+ * is used. The predefined values for Category ID and Sub Category ID are
+ * provided in the next table. There is no way to indicate a vendor-specific
+ * main device category. The OUI applies only to the interpretation of the
+ * Sub Category. If a vendor does not use sub categories for their OUI, the
+ * three-byte OUI occupies the first three bytes of the OUI field and the
+ * fourth byte is set to zero.
+ *
+ *
+ \code
+
+ Category ID Value Sub Category ID Value
+ Computer 1 PC 1
+ Server 2
+ Media Center 3
+ Input Device 2
+ Printers, Scanners, Printer 1
+ Faxes and Copiers 3 Scanner 2
+ Camera 4 Digital Still Camera 1
+ Storage 5 NAS 1
+ Network AP 1
+ Infrastructure 6 Router 2
+ Switch 3
+ Displays 7 Television 1
+ Electronic Picture Frame 2
+ Projector 3
+ Multimedia Devices 8 DAR 1
+ PVR 2
+ MCX 3
+ Gaming Devices 9 Xbox 1
+ Xbox360 2
+ Playstation 3
+ Telephone 10 Windows Mobile 1
+
+ \endcode
+ *
+ *
+ */
+
+TLV PrimaryDeviceType ( TLV_PRIMARY_DEVICE_TYPE ) ( 2 : 2 ) MSB
+{
+ primary_category, 2;
+ oui[ 4 ];
+ sub_category, 2;
+}
+
+
+/**
+ * \brief Request Type
+ *
+ *
+ * The Request Type component specifies the mode in which the device will
+ * operate in for this setup exchange. If the device is an Enrollee, it may
+ * send only discovery messages or it may also request that the Registrar
+ * proceed with opening a data connection. This protocol allows Enrollees to
+ * more efficiently discover devices on the network.
+
+ * If the device indicates that it intends to engage setup either as a
+ * Registrar or an Enrollee, the Access Point continues to indicate that it
+ * will operate as an AP in the response. The Request Type attribute is
+ * carried throughout the 802.1X data channel setup process in the Wi-Fi
+ * Protected Setup IE. There are two sub-types of Registrars: WLAN Manager
+ * Registrar indicates that this Registrar intends to manage the AP or STA
+ * settings using UPnP. It will derive a UPnP AP or STA Management key. The
+ * ordinary Registrar type indicates that this Registrar does not intend to
+ * subsequently manage the Enrollee's settings. APs must not derive AP
+ * Management Keys for an ordinary Registrar. If a Registrar does not intend
+ * to be a WLAN Manager Registrar, it should set the Request Type to
+ * Registrar. Doing so avoids needlessly consuming resources on the AP.
+
+ \code
+
+ Request Type Value Description
+ 0x00 Enrollee, Info only
+ 0x01 Enrollee, open 802.1X
+ 0x02 Registrar
+ 0x03 WLAN Manager Registrar
+
+ \endcode
+ *
+ *
+ */
+
+TLV RequestType ( TLV_REQUEST_TYPE ) ( 2 : 2 ) MSB
+{
+ reqType, 1;
+}
+
+/**
+ * \brief Response Type
+ *
+ *
+ * The Response Type component specifies the operational mode of the
+ * device for this setup exchange. The Response Type IE is carried
+ * throughout the 802.1X data channel setup process.
+
+ \code
+
+ Response Type Value Description
+ 0x00 Enrollee, Info only
+ 0x01 Enrollee, open 802.1X
+ 0x02 Registrar
+ 0x03 AP
+
+\endcode
+ *
+ *
+ */
+
+TLV ResponseType ( TLV_RESPONSE_TYPE ) ( 2 : 2 ) MSB
+{
+ resType, 1;
+}
+
+
+///////////////////////////////////////////////////////////////////////////
+// WiFi Direct/P2P TLVs //
+///////////////////////////////////////////////////////////////////////////
+
+/**
+ * \brief P2P Status Attribute
+ */
+
+TLV P2PStatus ( TLV_P2P_STATUS ) ( 1 : 2 ) LSB
+{
+ status, 1;
+}
+
+
+/**
+ * \brief Minor Reason Code Attribute
+ */
+
+TLV MinorReasonCode ( TLV_MINOR_REASON_CODE ) ( 1 : 2 ) LSB
+{
+ minorReasonCode, 1;
+}
+
+
+/**
+ * \brief P2P Capability Attribute
+ */
+
+TLV P2PCapability ( TLV_P2P_CAPABILITY ) ( 1 : 2 ) LSB
+{
+ deviceCapability, 1;
+ groupCapability, 1;
+}
+
+
+/**
+ * \brief P2P Device Id Attribute
+ */
+
+TLV P2PDeviceId ( TLV_P2P_DEVICE_ID ) ( 1 : 2 ) LSB
+{
+ P2PDeviceAddress[6];
+}
+
+
+/**
+ * \brief Group Owner Intent Attribute
+ */
+
+TLV GOIntent ( TLV_P2P_GROUP_OWNER_INTENT ) ( 1 : 2 ) LSB
+{
+ GOIntent, 1;
+}
+
+
+/**
+ * \brief Configuration Timeout Attribute
+ */
+
+TLV ConfigurationTimeout ( TLV_CONFIGURATION_TIMEOUT ) ( 1 : 2 ) LSB
+{
+ GOConfigTimeout, 1;
+ CLConfigTimeout, 1;
+}
+
+
+/**
+ * \brief Listen Channel Attribute
+ */
+
+TLV ListenChannel ( TLV_LISTEN_CHANNEL ) ( 1 : 2 ) LSB
+{
+ countryString[3];
+ regulatoryClass, 1;
+ channel, 1;
+}
+
+
+/**
+ * \brief P2P Group BSSID Attribute
+ */
+
+TLV P2PGroupBssid ( TLV_P2P_GROUP_BSSID ) ( 1 : 2 ) LSB
+{
+ P2PGroupBssid[6];
+}
+
+
+/**
+ * \brief Extended Listen Attribute
+ */
+
+TLV ExtendedListenTiming ( TLV_EXTENDED_LISTEN_TIMING ) ( 1 : 2 ) LSB
+{
+ availibilityPeriod, 2;
+ availibilityInterval, 2;
+}
+
+
+/**
+ * \brief Intended P2P Interface Address Attribute
+ */
+
+TLV IntendedP2PInterfaceAddress ( TLV_INTENDED_P2P_INTERFACE_ADDRESS ) ( 1 : 2 ) LSB
+{
+ P2PInterfaceAddress[6];
+}
+
+
+/**
+ * \brief P2P Manageability Attribute
+ */
+
+TLV P2PManageability ( TLV_P2P_MANAGEABILITY ) ( 1 : 2 ) LSB
+{
+ manageability, 1;
+}
+
+
+/**
+ * \brief ChannelList Attribute
+ */
+
+TLV ChannelList ( TLV_CHANNEL_LIST ) ( 1 : 2 ) LSB
+{
+ countryString[3];
+ channelList[0..251];
+}
+
+
+/**
+ * \brief Notice of Absence
+ */
+
+TLV NoticeOfAbsence ( TLV_NOTICE_OF_ABSENCE ) ( 1 : 2 ) LSB
+{
+ index, 1;
+ CTSWindowOppPS, 1;
+ NoADesc[0..36];
+}
+
+/**
+ * \brief P2P Device Info Attribute
+ */
+
+TLV P2PDeviceInfo ( TLV_P2P_DEVICE_INFO ) ( 1 : 2 ) LSB
+{
+ P2PDeviceAddress[6];
+ configMethod, 2 , FLIPBYTEORDER;
+ primaryDeviceType[8];
+ MANDATORYTLV DeviceName;
+}
+
+
+/**
+ * \brief P2P Group Info Attribute
+ */
+
+TLV P2PGroupInfo ( TLV_P2P_GROUP_INFO ) ( 1 : 2 ) LSB
+{
+ P2PClientInfoDesc[0..1024];
+}
+
+
+/**
+ * \brief P2P Group Id Attribute
+ */
+
+TLV P2PGroupId ( TLV_P2P_GROUP_ID ) ( 1 : 2 ) LSB
+{
+ deviceAddress[6];
+ ssid[0..32];
+}
+
+
+/**
+ * \brief P2P Interface Attribute
+ */
+
+TLV P2PInterface ( TLV_P2P_INTERFACE ) ( 1 : 2 ) LSB
+{
+ P2PDeviceAddress[6];
+}
+
+
+/**
+ * \brief Operating Channel Attribute
+ */
+
+TLV OperatingChannel ( TLV_OPERATING_CHANNEL ) ( 1 : 2 ) LSB
+{
+ countryString[3];
+ regulatoryClass, 1;
+ channel, 1;
+}
+
+
+/**
+ * \brief Invitation Flags Attribute
+ */
+
+TLV InvitationFlags ( TLV_INVITATION_FLAGS ) ( 1 : 2 ) LSB
+{
+ invitationFlags, 1;
+}
+
+/**
+ * \brief Vendor Extension
+ *
+ * This variable permits vendor extensions in the Wi-Fi Simple
+ * Configuration TLV framework. The Vendor Extension figure
+ * illustrates the implementation of vendor extensions. Vendor
+ * ID is the SMI network management private enterprise code
+ *
+ * +-----------+----------------------+
+ * | Vendor ID | Vendor Data |
+ * +-----------+----------------------+
+ * |<--- 3 --->|<----- 1 - 1021 ----->|
+ *
+ */
+
+TLV VendorExtension ( TLV_VENDOR_EXTENSION ) ( 2 : 2 ) MSB
+{
+ /*
+ * vendorId is the SMI network management private enterprise code.
+ * WFA Vendor ID 0x00372A
+ *
+ */
+ vendorId[ 3 ];
+
+ /**
+ * \breif Version2
+ *
+ * The Version2 field specifies the version Wi-Fi Simple
+ * Configuration implemented by the device sending this attribute.
+ * The one-byte field is broken into a four-bit major part using
+ * the top MSBs and four-bit minor part using the LSBs. As an example,
+ * version 3.2 would be 0x32. This subelement was added in the
+ * specification version 2.0 and if the subelement is not included
+ * in a message, the transmitter of the message is assumed to
+ * use version 1.0.
+ *
+ */
+ OPTIONALTLV TLV Version2 ( TLV_VERSION2 ) ( 1 : 1 ) MSB
+ {
+ {
+ minor: 4;
+ major: 4;
+ }
+ }
+ /**
+ * \brief AuthorizedMACs
+ *
+ * This subelement contains a list of Enrollee MAC addresses (each
+ * being six bytes in length) that have been registered to start WSC.
+ * The AP includes this field in Beacon and Probe Response frames so
+ * Enrollees can tell if they have been registered to start WSC. There
+ * may be multiple Enrollees active on the network, but not all of them have
+ * been registered to start WSC. This element allows an Enrollee to detect
+ * if they should start WSC with the AP. The AuthorizedMACs field augments
+ * the use of the Selected Registrar.
+ *
+ */
+ OPTIONALTLV TLV AuthorizedMACs ( TLV_AUTHORIZED_MAC ) ( 1 : 1 ) MSB
+ {
+ mac[6];
+ }
+
+ /**
+ * \brief Request to Enroll
+ *
+ * This optional subelement in the WSC IE in Probe Request or M1 indicates
+ * the desire to enroll in the network by setting its value to TRUE. If the
+ * Registrar gets this subelement it can use this as a trigger that a device
+ * wants to enroll (maybe an indication can be shown to the user). The device
+ * must set it to FALSE after the registration protocol completion.
+ *
+ */
+ OPTIONALTLV TLV RequestToEnroll( TLV_REQUEST_TO_ENROLL ) ( 1 : 1 ) MSB
+ {
+ req, 1;
+ }
+}
+
+/**
+ * \brief Requested Device Type
+ *
+ * This attribute contains the requested device type of a Wi-Fi
+ * Direct device.
+ *
+ * This attribute allows a device to specify the Primary Device Type
+ * or the Secondary Device Type of other devices it is interested in.
+ * Only a device that receives a Probe Request containing a WSC IE with
+ * this attribute and with a Primary Device Type or Secondary Device Type
+ * that matches the Requested Device Type will respond with a Probe Response.
+ *
+ * Its format and contents is identical to the 'Primary Device Type'.
+ *
+ * Both the Category ID and Sub Category ID can be used as a filter. If only
+ * looking for devices with a certain Category ID, the OUI and Sub Category ID
+ * fields will have to be set to zero.
+ *
+ */
+TLV RequestDeviceType ( TLV_REQUESTED_DEVICE_TYPE ) ( 2 : 2 ) MSB
+{
+ primary_category, 2;
+ oui[ 4 ];
+ sub_category, 2;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// Information Elements
+
+IE SSID (EID_SSID) // C.f. Sec. 7.3.2.1
+{
+ ssid[0..32];
+}
+
+IE SuppRates (EID_SUPP_RATES) // 7.3.2.2
+{
+ rates[0..SIR_MAC_MAX_NUMBER_OF_RATES];
+}
+
+IE FHParamSet (EID_FH_PARAM_SET) // 7.3.2.3
+{
+ dwell_time, 2;
+ hop_set, 1;
+ hop_pattern, 1;
+ hop_index, 1;
+}
+
+IE DSParams (EID_DS_PARAM_SET) // 7.3.2.4
+{
+ curr_channel, 1;
+}
+
+IE CFParams (EID_CF_PARAM_SET) // 7.3.2.5
+{
+ cfp_count, 1;
+ cfp_period, 1;
+ cfp_maxduration, 2;
+ cfp_durremaining, 2;
+}
+
+IE TIM (EID_TIM) // 7.3.2.6
+{
+ dtim_count, 1;
+ dtim_period, 1;
+ bmpctl, 1;
+ vbmp[1..251];
+}
+
+IE IBSSParams (EID_IBSS_PARAM_SET) // 7.3.2.7
+{
+ atim, 2;
+}
+
+IE ChallengeText (EID_CHALLENGE_TEXT) // 7.3.2.8
+{
+ text[1..253];
+}
+
+IE RequestedInfo (EID_REQUEST) // 7.3.2.12
+{
+ requested_eids[0..255];
+}
+
+IE Country (EID_COUNTRY) // 7.3.2.9
+{
+ country[3];
+ OPTIONAL triplets[3][0..84];
+}
+
+IE FHParams (EID_FH_PATTERN) // 7.3.2.10
+{
+ radix, 1;
+ nchannels, 1;
+}
+
+IE FHPattTable (EID_FH_PATT_TABLE) // 7.3.2.11
+{
+ flag, 1;
+ nsets, 1;
+ modulus, 1;
+ offset, 1;
+ randtable[0..251];
+}
+
+IE ERPInfo (EID_ERP_INFO) // 7.3.2.13
+{
+ {
+ non_erp_present : 1;
+ use_prot: 1;
+ barker_preamble: 1;
+ unused: 5;
+ }
+}
+
+IE ExtSuppRates (EID_EXT_SUPP_RATES) // 7.3.2.14
+{
+ rates[1..SIR_MAC_MAX_NUMBER_OF_RATES];
+}
+
+IE PowerConstraints (EID_POWER_CONSTRAINTS) // 7.3.2.15
+{
+ localPowerConstraints, 1;
+}
+
+IE PowerCaps (EID_POWER_CAPABILITY) // 7.3.2.16
+{
+ minTxPower, 1;
+ maxTxPower, 1;
+}
+
+IE TPCRequest (EID_TPC_REQUEST) // 7.3.2.17
+{ }
+
+IE TPCReport (EID_TPC_REPORT) // 7.3.2.18
+{
+ tx_power, 1;
+ link_margin, 1;
+}
+
+IE SuppChannels (EID_SUPPORTED_CHANNELS) // 7.2.3.19
+{
+ bands[2][1..48];
+}
+
+IE SuppOperatingClasses (EID_SUPPORTED_OPER_CLASSES)
+{
+ classes[1..32];
+}
+
+IE ChanSwitchAnn (EID_CHANNEL_SWITCH_ANN) // 7.3.2.20
+{
+ switchMode, 1;
+ newChannel, 1;
+ switchCount, 1;
+}
+
+IE ExtChanSwitchAnn (EID_EXT_CHANNEL_SWITCH_ANN) // 7.3.2.20a
+{
+ secondaryChannelOffset, 1;
+}
+
+IE Quiet (EID_QUIET) // 7.3.2.23
+{
+ count, 1;
+ period, 1;
+ duration, 2;
+ offset, 2;
+}
+
+IE RSN (EID_RSN) // 7.3.2.25
+{
+ // The version is 2 octets, and we only support version 1.
+ version, 2 MUSTBE 1;
+ // The next four octets will be the Group Cipher Suite
+ gp_cipher_suite[4];
+ // The IE *may* stop here; if there's any more, we should see two more
+ // octets giving the number of Pairwise Cipher Suites
+ OPTIONAL pwise_cipher_suite_count, 2;
+ // I don't see anything in the Standard limiting the number of Pairwise
+ // Cypher Suites, other than the maximum length of an IE, which limits us
+ // to 61. However, that seems needlessly wasteful of space.
+ pwise_cipher_suites[4][0..4] COUNTIS pwise_cipher_suite_count;
+ // Optional count of AKM suite selectors
+ OPTIONAL akm_suite_count, 2;
+ // Again, I see nothing in the Standard explicitly limiting the number of
+ // AKM suite selectors other than the maximum size of an IE.
+ akm_suites[4][0..4] COUNTIS akm_suite_count;
+ OPTIONAL RSN_Cap[2];
+ // Finally, the IE may contain zero or more PMKIDs:
+ OPTIONAL pmkid_count, 2;
+ pmkid[16][0..4] COUNTIS pmkid_count;
+ OPTIONAL gp_mgmt_cipher_suite[4];
+}
+
+IE RSNOpaque (EID_RSN) // 7.3.2.25
+{
+ data[ 6..253 ];
+}
+
+IE WAPI (EID_WAPI) // 7.3.2.25
+{
+ // The version is 2 octets, and we only support version 1.
+ version, 2 MUSTBE 1;
+ // count of AKM suite selectors
+ akm_suite_count, 2;
+ // Again, I see nothing in the Standard explicitly limiting the number of
+ // AKM suite selectors other than the maximum size of an IE.
+ akm_suites[4][0..4] COUNTIS akm_suite_count;
+ // we should see two more
+ // octets giving the number of Unicast Cipher Suites
+ unicast_cipher_suite_count, 2;
+ // I don't see anything in the Standard limiting the number of Pairwise
+ // Cypher Suites, other than the maximum length of an IE, which limits us
+ // to 61. However, that seems needlessly wasteful of space.
+ unicast_cipher_suites[4][0..4] COUNTIS unicast_cipher_suite_count;
+ // The next four octets will be the Multicast Cipher Suite
+ multicast_cipher_suite[4];
+ // WAPI capabilities
+ {
+ preauth: 1;
+ reserved: 15;
+ }
+ // Finally, the IE may contain zero or more BKIDs:
+ OPTIONAL bkid_count, 2;
+ bkid[16][0..4] COUNTIS bkid_count;
+}
+
+IE WAPIOpaque (EID_WAPI) // 7.3.2.25
+{
+ data[ 6..253 ];
+}
+
+IE QBSSLoad (EID_QBSS_LOAD) // 7.3.2.28
+{
+ stacount, 2;
+ chautil, 1;
+ avail, 2;
+}
+
+IE EDCAParamSet (EID_EDCA_PARAM_SET) // 7.3.2.29
+{
+ qos, 1; // ToDo: This is a bitfield whose format
+ // depends on whether this is from an AP
+ // or a STA, information which I'm not
+ // sure we have at parse time...
+ reserved, 1;
+ {
+ acbe_aifsn: 4;
+ acbe_acm: 1;
+ acbe_aci: 2;
+ unused1: 1;
+ }
+ {
+ acbe_acwmin: 4;
+ acbe_acwmax: 4;
+ }
+ acbe_txoplimit, 2;
+ {
+ acbk_aifsn: 4;
+ acbk_acm: 1;
+ acbk_aci: 2;
+ unused2: 1;
+ }
+ {
+ acbk_acwmin: 4;
+ acbk_acwmax: 4;
+ }
+ acbk_txoplimit, 2;
+ {
+ acvi_aifsn: 4;
+ acvi_acm: 1;
+ acvi_aci: 2;
+ unused3: 1;
+ }
+ {
+ acvi_acwmin: 4;
+ acvi_acwmax: 4;
+ }
+ acvi_txoplimit, 2;
+ {
+ acvo_aifsn: 4;
+ acvo_acm: 1;
+ acvo_aci: 2;
+ unused4: 1;
+ }
+ {
+ acvo_acwmin: 4;
+ acvo_acwmax: 4;
+ }
+ acvo_txoplimit, 2;
+}
+
+IE TSPEC (EID_TSPEC) // 7.3.2.30
+{
+
+ // TS Info
+ {
+ traffic_type: 1;
+ tsid: 4;
+ direction: 2;
+ access_policy: 2;
+ aggregation: 1;
+ psb: 1;
+ user_priority: 3;
+ tsinfo_ack_pol: 2;
+ }
+ {
+ schedule: 1;
+ unused: 7;
+ }
+
+ // Nominal MSDU Size
+ {
+ size: 15;
+ fixed: 1;
+ }
+
+ max_msdu_size, 2;
+ min_service_int, 4;
+ max_service_int, 4;
+ inactivity_int, 4;
+ suspension_int, 4;
+ service_start_time, 4;
+ min_data_rate, 4;
+ mean_data_rate, 4;
+ peak_data_rate, 4;
+ burst_size, 4;
+ delay_bound, 4;
+ min_phy_rate, 4;
+ surplus_bw_allowance, 2;
+ medium_time, 2;
+
+} // End IE TSPEC.
+
+IE TCLAS (EID_TCLAS) // 7.3.2.31
+{
+ user_priority, 1;
+ classifier_type, 1;
+ classifier_mask, 1;
+ UNION info (DISCRIMINATOR classifier_type)
+ {
+ EthParams (classifier_type IS 0)
+ {
+ source[6];
+ dest[6];
+ type, 2;
+ }
+ IpParams (classifier_type IS 1)
+ {
+ version, 1;
+ UNION params (DISCRIMINATOR version)
+ {
+ IpV4Params (version IS 4)
+ {
+ source[4];
+ dest[4];
+ src_port, 2;
+ dest_port, 2;
+ DSCP, 1;
+ proto, 1;
+ reserved, 1;
+ }
+ IpV6Params (version IS 6)
+ {
+ source[16];
+ dest[16];
+ src_port, 2;
+ dest_port, 2;
+ flow_label[3];
+ }
+ };
+ }
+ Params8021dq (classifier_type IS 2)
+ {
+ tag_type, 2;
+ }
+ };
+} // End IE TCLASS
+
+const EID_RRM_BEACON_REPORTING = 1;
+const EID_RRM_BCN_REPORTING_DETAIL = 2;
+
+IE BeaconReporting (EID_RRM_BEACON_REPORTING)
+{
+ reportingCondition, 1;
+ threshold, 1;
+}
+
+IE BcnReportingDetail (EID_RRM_BCN_REPORTING_DETAIL)
+{
+ reportingDetail, 1;
+}
+
+IE APChannelReport (EID_AP_CHAN_REPORT)
+{
+ regulatoryClass, 1;
+ channelList[0..50];
+}
+
+IE MeasurementRequest (EID_MEAS_REQUEST) // 7.3.2.21
+{
+ measurement_token, 1;
+
+ // Measurement Request Mode
+ {
+ parallel: 1;
+ enable: 1;
+ request: 1;
+ report: 1;
+ durationMandatory: 1;
+ unused: 3;
+ }
+
+ measurement_type, 1;
+ UNION measurement_request (DISCRIMINATOR measurement_type)
+ {
+ Basic (measurement_type IS 0)
+ {
+ channel_no, 1;
+ meas_start_time[8];
+ meas_duration, 2;
+ }
+ CCA (measurement_type IS 1)
+ {
+ channel_no, 1;
+ meas_start_time[8];
+ meas_duration, 2;
+ }
+ RPIHistogram (measurement_type IS 2)
+ {
+ channel_no, 1;
+ meas_start_time[8];
+ meas_duration, 2;
+ }
+ Beacon (measurement_type IS 5)
+ {
+ regClass, 1;
+ channel, 1;
+ randomization, 2;
+ meas_duration, 2;
+ meas_mode, 1;
+ BSSID[6];
+ OPTIE SSID;
+ OPTIE BeaconReporting;
+ OPTIE BcnReportingDetail;
+ OPTIE RequestedInfo;
+ OPTIE APChannelReport[0..2];
+ //OPTIONAL vendor_specific[1..239];
+ }
+
+ };
+}
+
+const EID_BCN_REPORT_FRAME_BODY = 1;
+IE BeaconReportFrmBody (EID_BCN_REPORT_FRAME_BODY)
+{
+ reportedFields[0..224];
+}
+
+IE MeasurementReport (EID_MEAS_REPORT) // 7.3.2.22
+{
+ token, 1;
+ // Measurement Report Mode
+ {
+ late: 1;
+ incapable: 1;
+ refused: 1;
+ unused: 5;
+ }
+ type, 1;
+ OPTIONAL UNION report (DISCRIMINATOR type)
+ {
+ Basic (type IS 0) // 7.3.2.22.1
+ {
+ channel, 1;
+ meas_start_time, 8;
+ meas_duration, 2;
+ // Map
+ {
+ bss: 1;
+ ofdm_preamble: 1;
+ unid_signal: 1;
+ rader: 1;
+ unmeasured: 1;
+ unused: 3;
+ }
+ }
+ CCA (type IS 1)
+ {
+ channel, 1;
+ meas_start_time, 8;
+ meas_duration, 2;
+ cca_busy_fraction, 1;
+ }
+ RPIHistogram (type IS 2)
+ {
+ channel, 1;
+ meas_start_time, 8;
+ meas_duration, 2;
+ rpi0_density, 1;
+ rpi1_density, 1;
+ rpi2_density, 1;
+ rpi3_density, 1;
+ rpi4_density, 1;
+ rpi5_density, 1;
+ rpi6_density, 1;
+ rpi7_density, 1;
+ }
+ Beacon (type IS 5)
+ {
+ regClass, 1;
+ channel, 1;
+ meas_start_time, 8;
+ meas_duration, 2;
+ // reported_frame_info,
+ {
+ condensed_PHY: 7;
+ reported_frame_type: 1;
+ }
+ RCPI, 1;
+ RSNI, 1;
+ BSSID[6];
+ antenna_id, 1;
+ parent_TSF, 4;
+ OPTIE BeaconReportFrmBody;
+ //IE vendor_specific
+ }
+ };
+}
+
+IE TSDelay (EID_TS_DELAY) // 7.3.2.32
+{
+ delay, 4;
+}
+
+IE TCLASSPROC (EID_TCLASS_PROC) // 7.3.2.33
+{
+ processing, 1;
+}
+
+IE Schedule (EID_SCHEDULE) // 7.3.2.34
+{
+ {
+ aggregation: 1;
+ tsid: 4;
+ direction: 2;
+ reserved: 9;
+ }
+ service_start_time, 4;
+ service_interval, 4;
+ max_service_dur, 2;
+ spec_interval, 2;
+}
+
+IE QOSCapsAp (EID_QOS_CAPABILITY) // 7.3.2.35
+{
+ {
+ count: 4;
+ qack: 1;
+ qreq: 1;
+ txopreq: 1;
+ reserved: 1;
+ }
+}
+
+IE QOSCapsStation (EID_QOS_CAPABILITY) // 7.3.2.35
+{
+ {
+ acvo_uapsd: 1;
+ acvi_uapsd: 1;
+ acbk_uapsd: 1;
+ acbe_uapsd: 1;
+ qack: 1;
+ max_sp_length: 2;
+ more_data_ack: 1;
+ }
+}
+
+IE LinkIdentifier (EID_LINK_IDENTIFIER) // 7.3.2.62
+{
+ bssid[6];
+ InitStaAddr[6];
+ RespStaAddr[6];
+}
+
+IE WPA (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x01)
+{
+ // This IE's first two octets should be interpreted as a version number;
+ // we only support version 1.
+ version, 2 MUSTBE 1;
+ // A four-octet Multicast Cipher may or may not appear next (hence the
+ // OPTIONAL keyword)
+ OPTIONAL multicast_cipher[4];
+ // Optional Unicast Cipher count
+ OPTIONAL unicast_cipher_count, 2;
+ // Next comes an array of four-octet Cipher Suite selectors; the COUNTIS
+ // clause indicates that the actual number of selectors seen is in the
+ // member 'unicast_cipher_count'.
+ unicast_ciphers[4][0..4] COUNTIS unicast_cipher_count;
+ // (Optional) Authentication suites:
+ OPTIONAL auth_suite_count, 2;
+ auth_suites[4][0..4] COUNTIS auth_suite_count;
+ // This field is declared optional as per bugs 15234, 14755, & 14991.
+ OPTIONAL caps, 2;
+}
+
+IE WPAOpaque (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x01)
+{
+ data[ 2..249 ];
+}
+
+IE WMMInfoStation (EID_VENDOR_SPECIFIC) OUI(0x00, 0x50, 0xF2, 0x02, 0x00)
+{
+ // This IE contains the QoS Info field when sent from WMM Station
+ version, 1;
+ {
+ acvo_uapsd: 1;
+ acvi_uapsd: 1;
+ acbk_uapsd: 1;
+ acbe_uapsd: 1;
+ reserved1: 1;
+ max_sp_length: 2;
+ reserved2: 1;
+ }
+}
+
+IE WMMInfoAp (EID_VENDOR_SPECIFIC) OUI(0x00, 0x50, 0xF2, 0x02, 0x00)
+{
+ // This IE contains the QoS Info field when sent from WMM AP
+ version, 1;
+ {
+ param_set_count: 4;
+ reserved: 3;
+ uapsd: 1;
+ }
+}
+
+
+IE WMMParams (EID_VENDOR_SPECIFIC) OUI(0x00, 0x50, 0xF2, 0x02, 0x01)
+{
+ version, 1 MUSTBE 1;
+ qosInfo, 1; // ToDo: This is actually a
+ // bitfield, but it's format
+ // varies depending on whether
+ // the sender is a STA or AP...
+ reserved2, 1;
+ {
+ acbe_aifsn: 4;
+ acbe_acm: 1;
+ acbe_aci: 2;
+ unused1: 1;
+ }
+ {
+ acbe_acwmin: 4;
+ acbe_acwmax: 4;
+ }
+ acbe_txoplimit, 2;
+ {
+ acbk_aifsn: 4;
+ acbk_acm: 1;
+ acbk_aci: 2;
+ unused2: 1;
+ }
+ {
+ acbk_acwmin: 4;
+ acbk_acwmax: 4;
+ }
+ acbk_txoplimit, 2;
+ {
+ acvi_aifsn: 4;
+ acvi_acm: 1;
+ acvi_aci: 2;
+ unused3: 1;
+ }
+ {
+ acvi_acwmin: 4;
+ acvi_acwmax: 4;
+ }
+ acvi_txoplimit, 2;
+ {
+ acvo_aifsn: 4;
+ acvo_acm: 1;
+ acvo_aci: 2;
+ unused4: 1;
+ }
+ {
+ acvo_acwmin: 4;
+ acvo_acwmax: 4;
+ }
+ acvo_txoplimit, 2;
+}
+
+IE WMMTSPEC (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xf2, 0x02, 0x02)
+{
+ version, 1 MUSTBE 1;
+
+ // TS Info
+ {
+ traffic_type: 1;
+ tsid: 4;
+ direction: 2;
+ access_policy: 2;
+ aggregation: 1;
+ psb: 1;
+ user_priority: 3;
+ tsinfo_ack_pol: 2;
+ }
+ {
+ tsinfo_rsvd: 7;
+ burst_size_defn: 1;
+ }
+
+ // Nominal MSDU Size
+ {
+ size: 15;
+ fixed: 1;
+ }
+
+ max_msdu_size, 2;
+ min_service_int, 4;
+ max_service_int, 4;
+ inactivity_int, 4;
+ suspension_int, 4;
+ service_start_time, 4;
+ min_data_rate, 4;
+ mean_data_rate, 4;
+ peak_data_rate, 4;
+ burst_size, 4;
+ delay_bound, 4;
+ min_phy_rate, 4;
+ surplus_bw_allowance, 2;
+ medium_time, 2;
+
+} // End IE WMMTSpec.
+
+IE WMMCaps (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x05)
+{
+ version, 1 MUSTBE 1;
+ {
+ reserved: 4;
+ qack: 1;
+ queue_request: 1;
+ txop_request: 1;
+ more_ack: 1;
+ }
+}
+
+IE WMMTCLAS (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x06)
+{
+ version, 1 MUSTBE 1;
+
+ user_priority, 1;
+ classifier_type, 1;
+ classifier_mask, 1;
+ UNION info (DISCRIMINATOR classifier_type)
+ {
+ EthParams (classifier_type IS 0)
+ {
+ source[6];
+ dest[6];
+ type, 2;
+ }
+ IpParams (classifier_type IS 1)
+ {
+ version, 1;
+ UNION params (DISCRIMINATOR version)
+ {
+ IpV4Params (version IS 4)
+ {
+ source[4];
+ dest[4];
+ src_port, 2;
+ dest_port, 2;
+ DSCP, 1;
+ proto, 1;
+ reserved, 1;
+ }
+ IpV6Params (version IS 6)
+ {
+ source[16];
+ dest[16];
+ src_port, 2;
+ dest_port, 2;
+ flow_label[3];
+ }
+ };
+ }
+ Params8021dq (classifier_type IS 2)
+ {
+ tag_type, 2;
+ }
+ };
+
+}
+
+IE WMMTCLASPROC (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x07)
+{
+ version, 1 MUSTBE 1;
+ processing, 1;
+}
+
+IE WMMTSDelay (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x08)
+{
+ version, 1 MUSTBE 1;
+ delay, 4;
+}
+
+IE WMMSchedule (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x02, 0x09)
+{
+ version, 1 MUSTBE 1;
+
+ {
+ aggregation: 1;
+ tsid: 4;
+ direction: 2;
+ reserved: 9;
+ }
+
+ service_start_time, 4;
+ service_interval, 4;
+ max_service_dur, 2;
+ spec_interval, 2;
+}
+
+IE ESERadMgmtCap (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x01)
+{
+
+ mgmt_state, 1;
+
+ {
+ mbssid_mask: 3;
+ reserved: 5;
+ }
+
+}
+
+IE ESETrafStrmMet (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x07)
+{
+ tsid, 1;
+ state, 1;
+ msmt_interval, 2;
+}
+
+IE ESETrafStrmRateSet (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x08)
+{
+ tsid, 1;
+ tsrates[0..8];
+}
+
+IE ESEVersion (EID_VENDOR_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x03)
+{
+ version, 1;
+}
+
+IE ESETxmitPower (EID_ESE_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x00)
+{
+ power_limit, 1;
+ reserved, 1;
+}
+
+IE ESECckmOpaque (EID_ESE_CCKM_SPECIFIC) OUI (0x00, 0x40, 0x96, 0x00)
+{
+ data[ 6..20 ];
+}
+
+IE RRMEnabledCap (EID_RRM_ENABLED_CAPS)
+{
+ //Capability bitmap
+ {
+ LinkMeasurement: 1;
+ NeighborRpt: 1;
+ parallel: 1;
+ repeated: 1;
+ BeaconPassive: 1;
+ BeaconActive: 1;
+ BeaconTable: 1;
+ BeaconRepCond: 1;
+ }
+ {
+ FrameMeasurement: 1;
+ ChannelLoad: 1;
+ NoiseHistogram: 1;
+ statistics: 1;
+ LCIMeasurement: 1;
+ LCIAzimuth: 1;
+ TCMCapability: 1;
+ triggeredTCM: 1;
+ }
+ {
+ APChanReport: 1;
+ RRMMIBEnabled: 1;
+ operatingChanMax: 3;
+ nonOperatinChanMax: 3;
+ }
+ {
+ MeasurementPilot: 3;
+ MeasurementPilotEnabled: 1;
+ NeighborTSFOffset: 1;
+ RCPIMeasurement: 1;
+ RSNIMeasurement: 1;
+ BssAvgAccessDelay: 1;
+ }
+ {
+ BSSAvailAdmission: 1;
+ AntennaInformation: 1;
+ reserved: 6;
+ }
+}
+
+IE MeasurementPilot (EID_RRM_MEAS_PILOT_TX_INFO)
+{
+ measurementPilot, 1;
+ vendorSpecific[0..255]; //Should be an IE. But currently only one level of nesting allowed. Can ignore for now.
+}
+
+IE MultiBssid (EID_MULTIPLE_BSSID)
+{
+ maxBSSIDIndicator, 1;
+ vendorSpecific[0..255];
+}
+
+IE OBSSScanParameters (EID_OBSS_SCAN_PARAMETERS)
+{
+ obssScanPassiveDwell, 2;
+ obssScanActiveDwell, 2;
+ bssChannelWidthTriggerScanInterval, 2;
+ obssScanPassiveTotalPerChannel, 2;
+ obssScanActiveTotalPerChannel, 2;
+ bssWidthChannelTransitionDelayFactor, 2;
+ obssScanActivityThreshold, 2;
+}
+
+const EID_RRM_NBR_RPT_TSF = 1;
+const EID_RRM_NBR_CD_COUNTRY = 2;
+const EID_RRM_NBR_MSMT_PILOT_TX_INFO = 66;
+
+IE NeighborReport (EID_NEIGHBOR_REPORT)
+{
+ bssid[6];
+ //Bssid Info
+ {
+ APReachability: 2;
+ Security: 1;
+ KeyScope: 1;
+ //Capabilities
+ SpecMgmtCap: 1;
+ QosCap: 1;
+ apsd: 1;
+ rrm: 1;
+ }
+ //Capabilities contd.
+ {
+ DelayedBA: 1;
+ ImmBA: 1;
+ //Capabilities end.
+ MobilityDomain: 1;
+ reserved: 5;
+ }
+
+ reserved1, 2; //part of BSSID Info.
+
+ regulatoryClass, 1;
+ channel, 1;
+ PhyType, 1;
+ OPTIE IE TSFInfo (EID_RRM_NBR_RPT_TSF)
+ {
+ TsfOffset, 2;
+ BeaconIntvl, 2;
+ }
+ OPTIE IE CondensedCountryStr (EID_RRM_NBR_CD_COUNTRY)
+ {
+ countryStr[2];
+ }
+ OPTIE IE MeasurementPilot; // (EID_RRM_NBR_MSMT_PILOT_TX_INFO)
+// {
+// measurementPilot, 1;
+// vendorSpecific[0..255]; //Should be an IE. But currently only one level of nesting allowed. Can ignore for now.
+// }
+ OPTIE IE RRMEnabledCap;
+ OPTIE IE MultiBssid;
+ //Ignoring vendor specific.
+}
+
+IE RCPIIE (EID_RCPI)
+{
+ rcpi, 1;
+}
+
+IE RSNIIE (EID_RSNI)
+{
+ rsni, 1;
+}
+
+IE WFATPC (EID_VENDOR_SPECIFIC) OUI (0x00, 0x50, 0xF2, 0x08, 0x00)
+{
+ txPower, 1;
+ linkMargin, 1;
+}
+
+IE MobilityDomain (EID_FT_MOBILITY_DOMAIN)
+{
+ MDID, 2;
+ //FT Capability and policy
+ {
+ overDSCap: 1;
+ resourceReqCap: 1;
+ reserved: 6;
+ }
+}
+const SUB_EID_FT_R1KH_ID = 1;
+const SUB_EID_FT_GTK = 2;
+const SUB_EID_FT_R0KH_ID = 3;
+const SUB_EID_FT_IGTK = 4;
+IE FTInfo (EID_FT_INFO)
+{
+ // MicControl, 2;
+ {
+ reserved: 8;
+ IECount: 8;
+ }
+ MIC[16];
+ Anonce[32];
+ Snonce[32];
+
+ OPTIE IE R1KH_ID (SUB_EID_FT_R1KH_ID)
+ {
+ PMK_R1_ID[6];
+ }
+
+ OPTIE IE GTK (SUB_EID_FT_GTK)
+ {
+ //Key Info
+ {
+ keyId: 2;
+ reserved: 14;
+ }
+ keyLength, 1;
+ RSC[8];
+ key[5..32];
+ }
+
+ OPTIE IE R0KH_ID (SUB_EID_FT_R0KH_ID)
+ {
+ PMK_R0_ID[1..48];
+ }
+
+ OPTIE IE IGTK (SUB_EID_FT_IGTK)
+ {
+ //Key Info
+ keyID[2];
+ IPN[6];
+ keyLength, 1;
+ key[24];
+ }
+}
+
+IE TimeoutInterval (EID_TIMEOUT_INTERVAL)
+{
+ timeoutType, 1;
+ timeoutValue, 4;
+}
+
+//TODO: need to define this properly.
+IE RICData (EID_FT_RIC_DATA)
+{
+ Identifier, 1;
+ resourceDescCount, 1;
+ statusCode, 2;
+}
+
+IE RICDescriptor (EID_FT_RIC_DESCRIPTOR)
+{
+ resourceType, 1;
+ variableData[0..255]; //Block ack param set...TODO:
+}
+
+IE WscIEOpaque (EID_VENDOR_SPECIFIC) OUI ( 0x00, 0x50, 0xF2, 0x04 )
+{
+ data[ 2..249 ];
+}
+
+IE P2PIEOpaque (EID_VENDOR_SPECIFIC) OUI ( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ data[ 2..249 ];
+}
+
+IE WFDIEOpaque (EID_VENDOR_SPECIFIC) OUI ( 0x50, 0x6F, 0x9A, 0x0A )
+{
+ data[ 2..249 ];
+}
+
+IE PTIControl (EID_PTI_CONTROL) // 7.3.2.65
+{
+ tid, 1;
+ sequence_control, 2;
+}
+
+IE PUBufferStatus (EID_PU_BUFFER_STATUS) // 7.3.2.66
+{
+ {
+ ac_bk_traffic_aval: 1;
+ ac_be_traffic_aval: 1;
+ ac_vi_traffic_aval: 1;
+ ac_vo_traffic_aval: 1;
+ reserved: 4;
+ }
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Airgo Information Elements
+
+
+IE Airgo (EID_VENDOR_SPECIFIC) OUI (0x00, 0x0A, 0xF5)
+{
+ // N.B. The fact that these IEs are defined inside the Airgo IE indicates
+ // that they can *only* occur inside the Airgo IE.
+
+ OPTIE IE PropSuppRates (SIR_MAC_PROP_EXT_RATES_TYPE)
+ {
+ rates[1..12];
+ }
+
+ OPTIE IE APName (SIR_MAC_PROP_AP_NAME_TYPE)
+ {
+ name[1..32];
+ }
+
+ OPTIE IE HCF (SIR_MAC_PROP_HCF_TYPE)
+ {
+ enabled, 1;
+ }
+
+ OPTIE IE WDS (SIR_MAC_PROP_WDS_TYPE)
+ {
+ wdsData[0..ANI_WDS_INFO_MAX_LENGTH];
+ }
+
+ OPTIE IE BPIndicator (SIR_MAC_PROP_BP_IND_TYPE)
+ {
+ indicator, 1;
+ type, 1;
+ }
+
+
+ // In Progress: I think SIR_MAC_PROP_NEIGHBOR_BSS_TYPE is going to need a
+ // custom parser...
+
+
+ OPTIE IE LoadInfo (SIR_MAC_PROP_LOAD_INFO_TYPE) MSB
+ {
+ num_stas, 2;
+ channel_util, 2;
+ }
+
+ OPTIE IE LoadBalance (SIR_MAC_PROP_LOAD_BALANCE_TYPE)
+ {
+ bssid[6];
+ channel, 1;
+ }
+
+ OPTIE IE PropAssocType (SIR_MAC_PROP_ASSOC_TYPE)
+ {
+ type, 1;
+ }
+
+ OPTIE IE LLAttr (SIR_MAC_PROP_LL_ATTR_TYPE) MSB
+ {
+ defer_threshold, 4;
+ }
+
+ OPTIE IE PropCapability (SIR_MAC_PROP_CAPABILITY)
+ {
+ capability, 2;
+ }
+
+ OPTIE IE Version (SIR_MAC_PROP_VERSION)
+ {
+ chip_rev, 4;
+ card_type, 1;
+ build_version[0..20];
+ }
+
+ OPTIE IE PropEDCAParams (SIR_MAC_PROP_EDCAPARAMS)
+ {
+ qos, 1; // ToDo: This is a bitfield whose format
+ // depends on whether this is from an AP
+ // or a STA, information which I'm not
+ // sure we have at parse time...
+ reserved, 1;
+
+ // Best Effort
+ {
+ acbe_aifsn: 4;
+ acbe_acm: 1;
+ acbe_aci: 2;
+ unused1: 1;
+ }
+ {
+ acbe_min: 4;
+ acbe_max: 4;
+ }
+ acbe_txoplimit, 2;
+
+ // Background
+ {
+ acbk_aifsn: 4;
+ acbk_acm: 1;
+ acbk_aci: 2;
+ unused2: 1;
+ }
+ {
+ acbk_min: 4;
+ acbk_max: 4;
+ }
+ acbk_txoplimit, 2;
+
+ // Video
+ {
+ acvi_aifsn: 4;
+ acvi_acm: 1;
+ acvi_aci: 2;
+ unused3: 1;
+ }
+ {
+ acvi_min: 4;
+ acvi_max: 4;
+ }
+ acvi_txoplimit, 2;
+
+ // Voice
+ {
+ acvo_aifsn: 4;
+ acvo_acm: 1;
+ acvo_aci: 2;
+ unused4: 1;
+ }
+ {
+ acvo_min: 4;
+ acvo_max: 4;
+ }
+ acvo_txoplimit, 2;
+
+ } // End IE PropEDCAParams.
+
+ /**
+ * \ie Titan
+ *
+ * \brief Proprietary Next Generation (TITAN) IE structure
+ *
+ *
+ * Based on the setting of the "Titan" proprietary bit in the
+ * tSirPropIEStruct.capability field (bit #6), this IE will be sent
+ * appropriately to all the ANIpeers in the following management frames -
+ *
+ * - Beacons
+ * - Assoc Req/Rsp
+ * - Reassoc Req/Rsp
+ * - Probe Req/Rsp
+ *
+ */
+
+ OPTIE IE Titan (SIR_MAC_PROP_TITAN)
+ {
+ concat_tcid_bitmap, 1;
+ compression_tcid_bitmap, 1;
+
+ // Identifies the OPERATIONAL state of Channel Bonding
+ // This info is encoded as a bitmap as follows:
+ //
+ // b7 b6 b5 b4 b3 b2 b1 b0
+ // --------------------------------------
+ // |CCA_CB |CCA |ICE | AU|CS|U/D| O | A |
+ // --------------------------------------
+ // where,
+ // A - Admin state of CB - [enabled(1)/disabled(0)]
+ // O - Oper state of CB - [on(1)/off(0)]
+ // U/D - Indicates where the secondary CB channel is
+ // parked - Up(1)/Down(0) from the primary
+ // CS - Channel Switch announcement in progress with
+ // respect to the secondary CB channel
+ // CS_on(1)/CS_off(0)
+ // This applies to an AP only
+ // AU - Autonomous updates. This indicates to an STA
+ // that it can send an unsolicited CB Report
+ // regarding its neighbor BSS during an Assoc/
+ // ReAssoc REQ.
+ // AU_on(1)/AU_off(0)
+ // This applies to an AP only
+ // ICE - Intelligent Channel Expansion mode enable/disable
+ // ICE_on(1)/ICE_off(0)
+ // CCA - CCA mode to be used
+ // CCA_20MHz(0)/CCA_40MHz(1)
+ // CCA_CB - channel bonding enable/disable based on cca monitoring
+ // enable(1)/disable(0)
+
+ cb_state, 1;
+
+ // Identifies Reverse FCS pattern and state
+ // This info is encoded as a bitmap as follows:
+ //
+ // b7 b6 b5 b4 b3 b2 b1 b0
+ // ---------------------------------
+ // | X | X | X | X | P | P | P | O |
+ // ---------------------------------
+ // where,
+ // O - Oper state of Reverse FCS - [on(1)/off(0)]
+ // P - Identifies the pattern ID to be used
+ // NOTE - These bits are used only during Assoc Req/Rsp
+ // management frames. Thus, the pattern ID needs to be
+ // looked up only during Assoc Req/Rsp. In other words,
+ // the pattern ID between an AP/STA is negotiated via
+ // the revFcsState during Assoc Req/Rsp
+
+ rev_fcs_state, 1;
+ }
+
+ OPTIE IE PropChannSwitchAnn (SIR_MAC_PROP_CHANNEL_SWITCH)
+ {
+ mode, 1;
+ primary_channel, 1;
+ sub_band, 1;
+ channel_switch_count, 1;
+ }
+
+ /**
+ * \ie PropQuietBSS
+ *
+ * \brief Proprietary Quite BSS IE structure
+ *
+ *
+ * Based on the setting of the "Titan" proprietary bit in the
+ * tSirPropIEStruct.capability field (bit #6), this IE will be sent
+ * appropriately to all the ANI peers in the following management
+ * frames
+ *
+ * - Beacons
+ * - Probe Rsp
+ *
+ */
+
+ OPTIE IE PropQuietBSS (SIR_MAC_PROP_QUIET_BSS)
+ {
+ // Indicates the number of TBTT's until the next beacon
+ // interval during which the next quiet interval will
+ // start
+ // 1 - Quiet Interval will start during the beacon
+ // interval starting at the next TBTT
+ // 0 - Reserved
+ quiet_count, 1;
+
+ // Shall be set to the number of beacon intervals between
+ // the start of regularly scheduled quiet intervals
+ // defined by this Quiet Element
+ // 0 - No periodic quiet interval is defined
+ quiet_period, 1;
+
+ // Duration of the quiet interval, expressed in TUs
+ // 1 TU = 1024 microseconds??
+ quiet_duration, 2;
+
+ // Set to the offset of the start of the quiet interval
+ // from the TBTT specified by the quietCount field,
+ // expressed in TUs. The value of this offset field will
+ // be less than one beacon interval
+ // 1 TU = 1024 microseconds??
+ quiet_offset, 2;
+
+ }
+
+ OPTIE IE TriggerStaBgScan (SIR_MAC_PROP_TRIG_STA_BK_SCAN)
+ {
+ enable, 1;
+ }
+
+ OPTIE IE Taurus (SIR_MAC_PROP_TAURUS)
+ {
+ // TID bitmap indicating the TIDs for which BA is setup.
+ // bit0 for TID0, bit1 for TID1 and so on.
+ baTIDBitmap, 2;
+
+ // Block Ack Policy: 0-Delayed BA 1-Immediate BA.
+ // One bit for each TID
+ baPolicy, 2;
+
+ // Buffer size for each AC, in exponential notation.
+ // 3 bits reserved for each AC.
+ // bit0-2 for AC0[TID 0 and 3], bit3-5 for AC1[TID 1 and 2]
+ // and so on.
+
+ // TID 8 & 11 will use AC0, TID 9 & 10 will use AC1, so use of AC is
+ // overloaded. This is done to reduce the size of IE in the beacons.
+ {
+ baBufferSize: 12;
+ rsvd: 4;
+ }
+ }
+
+} // End IE Airgo.
+
+IE VHTCaps (EID_VHT_CAPABILITIES)
+{
+ //VHT Capability Info
+ {
+ maxMPDULen: 2;
+ supportedChannelWidthSet: 2;
+ ldpcCodingCap: 1;
+ shortGI80MHz: 1;
+ shortGI160and80plus80MHz: 1;
+ txSTBC: 1;
+ rxSTBC: 3;
+ suBeamFormerCap: 1;
+ suBeamformeeCap: 1;
+ csnofBeamformerAntSup: 3;
+ numSoundingDim: 3;
+ muBeamformerCap: 1;
+ muBeamformeeCap: 1;
+ vhtTXOPPS: 1;
+ htcVHTCap: 1;
+ maxAMPDULenExp: 3;
+ vhtLinkAdaptCap: 2;
+ rxAntPattern: 1;
+ txAntPattern: 1;
+ reserved1: 2;
+ }
+ rxMCSMap, 2;
+ {
+ rxHighSupDataRate: 13;
+ reserved2: 3;
+ }
+ txMCSMap, 2;
+ {
+ txSupDataRate: 13;
+ reserved3: 3;
+ }
+}
+
+IE VHTOperation (EID_VHT_OPERATION_ELEMENT)
+{
+ chanWidth, 1;
+ chanCenterFreqSeg1, 1;
+ chanCenterFreqSeg2, 1;
+ basicMCSSet, 2;
+}
+
+IE VHTExtBssLoad (EID_VHT_EXT_BSS_LOAD)
+{
+ muMIMOCapStaCount, 1;
+ ssUnderUtil, 1;
+ FortyMHzUtil, 1;
+ EightyMHzUtil, 1;
+ OneSixtyMHzUtil, 1;
+}
+
+IE AID (EID_AID)
+{
+ assocId, 2;
+}
+
+IE WiderBWChanSwitchAnn (EID_WIDER_BW_CHANNEL_SWITCH_ANN)
+{
+ newChanWidth, 1;
+ newCenterChanFreq0, 1;
+ newCenterChanFreq1, 1;
+}
+
+IE ExtCap (EID_EXT_CAP)
+{
+ {
+ bssCoexistMgmtSupport: 1;
+ reserved1: 1;
+ extChanSwitch: 1;
+ reserved2: 1;
+ psmpCap: 1;
+ reserved3: 1;
+ spsmpCap: 1;
+ event: 1;
+ diagnostics: 1;
+ multiDiagnostics: 1;
+ locTracking: 1;
+ FMS: 1;
+ proxyARPService: 1;
+ coLocIntfReporting: 1;
+ civicLoc: 1;
+ geospatialLoc: 1;
+ TFS: 1;
+ wnmSleepMode: 1;
+ timBroadcast: 1;
+ bssTransition: 1;
+ qosTrafficCap: 1;
+ acStaCnt: 1;
+ multiBSSID: 1;
+ timingMeas: 1;
+ chanUsage: 1;
+ ssidList: 1;
+ DMS: 1;
+ UTCTSFOffset: 1;
+ TDLSPeerUAPSDBufferSTA: 1;
+ TDLSPeerPSMSupp: 1;
+ TDLSChannelSwitching: 1;
+ interworkingService: 1;
+ }
+ {
+ qosMap: 1;
+ EBR: 1;
+ sspnInterface: 1;
+ reserved4: 1;
+ msgCFCap: 1;
+ TDLSSupport: 1;
+ TDLSProhibited: 1;
+ TDLSChanSwitProhibited: 1;
+ rejectUnadmittedTraffic: 1;
+ serviceIntervalGranularity: 3;
+ identifierLoc: 1;
+ uapsdCoexistence: 1;
+ wnmNotification: 1;
+ reserved5: 1;
+ }
+ {
+ UTF8SSID: 1;
+ reserved6: 12;
+ TDLSWiderBW: 1;
+ operModeNotification: 1;
+ reserved7: 1;
+ }
+}
+
+IE HTCaps (EID_HT_CAPABILITIES)
+{
+ // HT Capability Info
+ {
+ advCodingCap: 1;
+ supportedChannelWidthSet: 1;
+ mimoPowerSave: 2;
+ greenField: 1;
+ shortGI20MHz: 1;
+ shortGI40MHz: 1;
+ txSTBC: 1;
+ rxSTBC: 2;
+ delayedBA: 1;
+ maximalAMSDUsize: 1;
+ dsssCckMode40MHz: 1;
+ psmp: 1;
+ stbcControlFrame: 1;
+ lsigTXOPProtection: 1;
+ }
+ // HT Parameters Info;
+ {
+ maxRxAMPDUFactor: 2;
+ mpduDensity: 3;
+ reserved1: 3;
+ }
+
+ supportedMCSSet[ HT_MAX_SUPPORTED_MCS_SET ];
+
+ // Extended HT Capability Info
+ {
+ pco: 1;
+ transitionTime: 2;
+ reserved2: 5;
+ mcsFeedback: 2;
+ reserved3: 6;
+ }
+ // TXBF Capability Info
+ {
+ txBF: 1;
+ rxStaggeredSounding: 1;
+ txStaggeredSounding: 1;
+ rxZLF: 1;
+ txZLF: 1;
+ implicitTxBF: 1;
+ calibration: 2;
+ explicitCSITxBF: 1;
+ explicitUncompressedSteeringMatrix: 1;
+ explicitBFCSIFeedback: 3;
+ explicitUncompressedSteeringMatrixFeedback: 3;
+ explicitCompressedSteeringMatrixFeedback: 3;
+ csiNumBFAntennae: 2;
+ uncompressedSteeringMatrixBFAntennae: 2;
+ compressedSteeringMatrixBFAntennae: 2;
+ reserved4: 7;
+ }
+ // AS Capability Info
+ {
+ antennaSelection: 1;
+ explicitCSIFeedbackTx: 1;
+ antennaIndicesFeedbackTx: 1;
+ explicitCSIFeedback: 1;
+ antennaIndicesFeedback: 1;
+ rxAS: 1;
+ txSoundingPPDUs: 1;
+ reserved5: 1;
+ }
+ //TODO: take it out when generic fix to remove extra bytes in IE is available.
+ //This is required to interop with Dlink AP which is sending 2 bytes extra in HTInfo IE.
+ rsvd[0..32];
+
+} // End IE HTCaps.
+
+IE HTInfo (EID_HT_INFO)
+{
+ primaryChannel, 1;
+
+ // ahtInfoField1
+ {
+ secondaryChannelOffset: 2;
+ recommendedTxWidthSet: 1;
+ rifsMode: 1;
+ controlledAccessOnly: 1;
+ serviceIntervalGranularity: 3;
+ }
+
+ // ahtInfoField2
+
+
+ // ahtInfoField2
+ {
+ opMode: 2;
+ nonGFDevicesPresent: 1;
+ transmitBurstLimit: 1;
+ obssNonHTStaPresent:1;
+ reserved: 11;
+ }
+
+
+ // ahtInfoField3
+ {
+ basicSTBCMCS: 7;
+ dualCTSProtection: 1;
+ secondaryBeacon: 1;
+ lsigTXOPProtectionFullSupport: 1;
+ pcoActive: 1;
+ pcoPhase: 1;
+ reserved2: 4;
+ }
+
+ basicMCSSet[ HT_MAX_SUPPORTED_MCS_SET ];
+
+ //TODO: take it out when generic fix to remove extra bytes in IE is available.
+ //This is required to interop with Dlink AP which is sending 2 bytes extra in HTInfo IE.
+ rsvd[0..32];
+
+} // End IE HTInfo.
+
+
+IE OperatingMode (EID_OPERATING_MODE)
+{
+ { //Operating Mode field
+ chanWidth: 2;
+ reserved: 2;
+ rxNSS: 3;
+ rxNSSType: 1;
+ }
+}
+
+IE QosMapSet (EID_QOS_MAP_SET)
+{
+ dscp_exceptions[0..60];
+}
+
+CONTAINERIE RICDataDesc
+{
+ MANDIE RICData;
+ OPTIE RICDescriptor;
+ OPTIE TSPEC;
+ OPTIE TCLAS[0..2];
+ OPTIE TCLASSPROC;
+ OPTIE TSDelay;
+ OPTIE Schedule;
+ OPTIE WMMTSPEC;
+ OPTIE WMMTCLAS[0..2];
+ OPTIE WMMTCLASPROC;
+ OPTIE WMMTSDelay;
+ OPTIE WMMSchedule;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// MULTIIEs //
+/////////////////////////////////////////////////////////////////////////////
+
+MULTIIE WSC ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
+{
+ MANDATORYTLV Version; // Must be 0x10
+ OPTIONALTLV WPSState;
+ OPTIONALTLV APSetupLocked;
+ OPTIONALTLV SelectedRegistrarConfigMethods;
+ OPTIONALTLV UUID_E;
+ OPTIONALTLV UUID_R;
+ OPTIONALTLV RFBands;
+ OPTIONALTLV SelectedRegistrar;
+ OPTIONALTLV ConfigMethods;
+ OPTIONALTLV AssociationState;
+ OPTIONALTLV ConfigurationError;
+ OPTIONALTLV Manufacturer;
+ OPTIONALTLV ModelName;
+ OPTIONALTLV ModelNumber;
+ OPTIONALTLV SerialNumber;
+ OPTIONALTLV DeviceName;
+ OPTIONALTLV DevicePasswordID;
+ OPTIONALTLV PrimaryDeviceType;
+ OPTIONALTLV RequestType;
+ OPTIONALTLV ResponseType;
+ OPTIONALTLV VendorExtension;
+ OPTIONALTLV RequestDeviceType;
+}
+
+MULTIIE WscBeacon ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
+{
+ MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
+ // = version 1.1, etc.
+ MANDATORYTLV WPSState; // 1 = unconfigured, 2 =
+ // configured
+ OPTIONALTLV APSetupLocked; // Must be included if value
+ // is TRUE
+ OPTIONALTLV SelectedRegistrar; // BOOL: indicates if the
+ // user has recently
+ // activated a Registrar to
+ // add an Enrollee.
+ OPTIONALTLV DevicePasswordID; // Device Password ID
+ // indicates the method or
+ // identifies the specific
+ // password that the
+ // selected Registrar
+ // intends to use.
+ OPTIONALTLV SelectedRegistrarConfigMethods; // This attribute contains
+ // the config methods active
+ // on the selected
+ // Registrar.
+ OPTIONALTLV UUID_E; // The AP's UUID is provided
+ // only when the AP is a
+ // dual-band AP in push
+ // button mode and
+ // indicating push button
+ // mode on both radios
+ OPTIONALTLV RFBands; // Indicates all RF bands
+ // available on the AP. A
+ // dual-band AP must provide
+ // this attribute.
+ // WSC 2.0
+ OPTIONALTLV VendorExtension; // Version2 and AuthorizedMACs
+
+} // End Multi-IE WscBeacon.
+
+MULTIIE WscAssocReq ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
+{
+ MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
+ // = version 1.1, etc.
+ MANDATORYTLV RequestType; //
+ //
+ // WSC 2.0
+ OPTIONALTLV VendorExtension; // Version2
+
+} // End Multi-IE WscAssocReq.
+
+
+MULTIIE WscAssocRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
+{
+ MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
+ // = version 1.1, etc.
+ MANDATORYTLV ResponseType; //
+ //
+ // WSC 2.0
+ OPTIONALTLV VendorExtension; // Version2
+
+} // End Multi-IE WscAssocRes.
+
+MULTIIE WscReassocRes ( 221 ) OUI( 0x00, 0x50, 0xF2, 0x04 )
+{
+ MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
+ // = version 1.1, etc.
+ MANDATORYTLV ResponseType; //
+ //
+ // WSC 2.0
+ OPTIONALTLV VendorExtension; // Version2
+
+} // End Multi-IE WscReassocRes
+
+MULTIIE WscProbeReq ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
+{
+ MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
+ // = version 1.1, etc.
+ MANDATORYTLV RequestType; //
+ //
+ MANDATORYTLV ConfigMethods; // Configuration methods the
+ // Enrollee or Registrar
+ // supports
+ MANDATORYTLV UUID_E; // unique GUID generated by
+ // the Enrollee.
+ MANDATORYTLV PrimaryDeviceType;
+ MANDATORYTLV RFBands; // Specific RF bands used
+ // for this message
+ MANDATORYTLV AssociationState; // Configuration and previous
+ // association state
+ MANDATORYTLV ConfigurationError;
+ MANDATORYTLV DevicePasswordID;
+
+ // WSC 2.0
+ OPTIONALTLV Manufacturer; // Must be included in ver 2.0
+ // or higher.
+ OPTIONALTLV ModelName; // Must be included in ver 2.0
+ // or higher.
+ OPTIONALTLV ModelNumber; // Must be included in ver 2.0
+ // or higher.
+ OPTIONALTLV DeviceName; // Must be included in ver 2.0
+ // or higher.
+ OPTIONALTLV VendorExtension; // Version2 and RequestToEntroll
+
+ OPTIONALTLV RequestDeviceType; // When a device receives a Probe
+ // Request containing this type,
+ // It will only reponse if Primary
+ // or Secondary Device Type matches.
+
+} // End Multi-IE WscProbeReq.
+
+MULTIIE WscProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
+{
+ MANDATORYTLV Version; // 0x10 = version 1.0, 0x11
+ // = version 1.1, etc.
+ MANDATORYTLV WPSState; // 1 = unconfigured, 2 =
+ // configured
+ OPTIONALTLV APSetupLocked; // Must be included if value
+ // is TRUE
+ OPTIONALTLV SelectedRegistrar; // BOOL: indicates if the
+ // user has recently
+ // activated a Registrar to
+ // add an Enrollee.
+ OPTIONALTLV DevicePasswordID; // Device Password ID
+ // indicates the method or
+ // identifies the specific
+ // password that the
+ // selected Registrar
+ // intends to use.
+ OPTIONALTLV SelectedRegistrarConfigMethods; // This attribute contains
+ // the config methods active
+ // on the selected
+ // Registrar.
+ MANDATORYTLV ResponseType;
+ MANDATORYTLV UUID_E; // unique identifier of AP
+ MANDATORYTLV Manufacturer;
+ MANDATORYTLV ModelName;
+ MANDATORYTLV ModelNumber;
+ MANDATORYTLV SerialNumber;
+ MANDATORYTLV PrimaryDeviceType;
+ MANDATORYTLV DeviceName; // User-friendly description
+ // of device
+ MANDATORYTLV ConfigMethods; // Config Methods corresponds
+ // to the methods the AP
+ // supports as an Enrollee
+ // for adding external
+ // Registrars.
+ OPTIONALTLV RFBands; // Indicates all RF bands
+ // available on the AP. A
+ // dual-band AP must provide
+ // this attribute.
+ // WSC 2.0
+ OPTIONALTLV VendorExtension; // Version2 and AuthorizedMACs
+
+} // WscProbeRes.
+
+// This MULTIIE combines the fields from the WSC IEs as they appear in
+// Beacons *and* in Probe Responses, with the difference that they're all
+// optional. In our device drivers, we combine Probe Responses and Beacons
+// into one list, and parse their IEs later (c.f. frame BeaconIEs). Because
+// the WSC IE differs in those two frames, we'd often see warning messages
+// about either unexpected fields showing up (if we thought we were parsing a
+// Beacon, and we in fact had data from a Probe Response) or mandatory fields
+// missing (if we thought we were parsing a Probe Response, and in fact had
+// data from a Beacon).
+
+// I created this MULTIIE to stuff into the BeaconIEs frames to avoid this.
+// It's intended to be used on unpack only, and to do so in a very forgiving
+// way.
+
+MULTIIE WscBeaconProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
+{
+ OPTIONALTLV Version; // 0x10 = version 1.0, 0x11
+ // = version 1.1, etc.
+ OPTIONALTLV WPSState; // 1 = unconfigured, 2 =
+ // configured
+ OPTIONALTLV APSetupLocked; // Must be included if value
+ // is TRUE
+ OPTIONALTLV SelectedRegistrar; // BOOL: indicates if the
+ // user has recently
+ // activated a Registrar to
+ // add an Enrollee.
+ OPTIONALTLV DevicePasswordID; // Device Password ID
+ // indicates the method or
+ // identifies the specific
+ // password that the
+ // selected Registrar
+ // intends to use.
+ OPTIONALTLV SelectedRegistrarConfigMethods; // This attribute contains
+ // the config methods active
+ // on the selected
+ // Registrar.
+ OPTIONALTLV ResponseType;
+ OPTIONALTLV UUID_E; // unique identifier of AP
+ OPTIONALTLV Manufacturer;
+ OPTIONALTLV ModelName;
+ OPTIONALTLV ModelNumber;
+ OPTIONALTLV SerialNumber;
+ OPTIONALTLV PrimaryDeviceType;
+ OPTIONALTLV DeviceName; // User-friendly description
+ // of device
+ OPTIONALTLV ConfigMethods; // Config Methods corresponds
+ // to the methods the AP
+ // supports as an Enrollee
+ // for adding external
+ // Registrars.
+ OPTIONALTLV RFBands; // Indicates all RF bands
+ // available on the AP. A
+ // dual-band AP must provide
+ // this attribute.
+ // WSC 2.0
+ OPTIONALTLV VendorExtension; // Version2 and AuthorizedMACs
+
+} // WscProbeRes.
+/////////////////////////////////////////////////////////////////////////////
+// MULTIIEs //
+/////////////////////////////////////////////////////////////////////////////
+
+MULTIIE P2PBeacon ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PCapability; // Contains P2P Device
+ // and P2P Group Capability
+ MANDATORYTLV P2PDeviceId; // Contains P2P Device
+ // Address
+ OPTIONALTLV NoticeOfAbsence; // Indicates Notice of
+ // Absence schedule and
+ // CT Window
+
+} // End P2PBeacon
+
+
+MULTIIE P2PAssocReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PCapability; // Contains P2P Device
+ // and P2P Group Capability
+ OPTIONALTLV ExtendedListenTiming;
+ MANDATORYTLV P2PDeviceInfo;
+
+} // End P2PAssocReq
+
+
+MULTIIE P2PAssocRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PStatus;
+ OPTIONALTLV ExtendedListenTiming;
+
+} // End P2PAssocRes
+
+
+MULTIIE P2PProbeReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PCapability;
+ OPTIONALTLV P2PDeviceId;
+ MANDATORYTLV ListenChannel;
+ OPTIONALTLV ExtendedListenTiming;
+ OPTIONALTLV OperatingChannel;
+} // End P2PProbeReq
+
+
+MULTIIE P2PProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PCapability;
+ OPTIONALTLV ExtendedListenTiming;
+ OPTIONALTLV NoticeOfAbsence;
+ MANDATORYTLV P2PDeviceInfo;
+ OPTIONALTLV P2PGroupInfo;
+
+} // End P2PProbeRes
+
+
+MULTIIE P2PBeaconProbeRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ OPTIONALTLV P2PCapability;
+ OPTIONALTLV P2PDeviceId;
+ OPTIONALTLV ExtendedListenTiming;
+ OPTIONALTLV NoticeOfAbsence;
+ OPTIONALTLV P2PDeviceInfo;
+ OPTIONALTLV P2PGroupInfo;
+
+} // End P2PBeaconProbeRes
+
+
+MULTIIE P2PGONegReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PCapability;
+ MANDATORYTLV GOIntent;
+ MANDATORYTLV ConfigurationTimeout;
+ MANDATORYTLV ListenChannel;
+ OPTIONALTLV ExtendedListenTiming;
+ MANDATORYTLV IntendedP2PInterfaceAddress;
+ MANDATORYTLV ChannelList;
+ MANDATORYTLV P2PDeviceInfo;
+ MANDATORYTLV OperatingChannel;
+
+} // End P2PGONegReq
+
+
+MULTIIE P2PGONegRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PStatus;
+ MANDATORYTLV P2PCapability;
+ MANDATORYTLV GOIntent;
+ MANDATORYTLV ConfigurationTimeout;
+ MANDATORYTLV OperatingChannel;
+ MANDATORYTLV IntendedP2PInterfaceAddress;
+ MANDATORYTLV ChannelList;
+ MANDATORYTLV P2PDeviceInfo;
+ OPTIONALTLV P2PGroupId;
+
+} // End P2PGONegRes
+
+
+MULTIIE P2PGONegCnf ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PStatus;
+ MANDATORYTLV P2PCapability;
+ MANDATORYTLV OperatingChannel;
+ MANDATORYTLV ChannelList;
+ OPTIONALTLV P2PGroupId;
+
+} // End P2PGONegCnf
+
+
+MULTIIE P2PGONegWPS ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
+{
+ MANDATORYTLV Version;
+ MANDATORYTLV DevicePasswordID;
+
+} // End P2PGONegWPS
+
+
+MULTIIE P2PDeAuth ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV MinorReasonCode;
+}
+
+
+MULTIIE P2PDisAssoc ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV MinorReasonCode;
+}
+
+
+MULTIIE P2PInvitationReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV ConfigurationTimeout;
+ MANDATORYTLV InvitationFlags;
+ MANDATORYTLV OperatingChannel;
+ MANDATORYTLV P2PGroupBssid;
+ MANDATORYTLV ChannelList;
+ MANDATORYTLV P2PGroupId;
+ MANDATORYTLV P2PDeviceInfo;
+}
+
+
+MULTIIE P2PInvitationRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PStatus;
+ MANDATORYTLV ConfigurationTimeout;
+ MANDATORYTLV OperatingChannel;
+ MANDATORYTLV P2PGroupBssid;
+ MANDATORYTLV ChannelList;
+}
+
+
+MULTIIE P2PDeviceDiscoverabilityReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PDeviceId;
+ MANDATORYTLV P2PGroupId;
+}
+
+
+MULTIIE P2PDeviceDiscoverabilityRes ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PStatus;
+}
+
+
+MULTIIE P2PProvisionDiscoveryReq ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PCapability;
+ MANDATORYTLV P2PDeviceInfo;
+ MANDATORYTLV P2PGroupId;
+}
+
+MULTIIE P2PWSCProvisionDiscoveryRes ( EID_VENDOR_SPECIFIC ) OUI( 0x00, 0x50, 0xF2, 0x04 )
+{
+ MANDATORYTLV ConfigMethods;
+}
+
+
+MULTIIE P2PNoticeOfAbsence ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV NoticeOfAbsence;
+}
+
+
+MULTIIE P2PPresenceResponse ( EID_VENDOR_SPECIFIC ) OUI( 0x50, 0x6F, 0x9A, 0x09 )
+{
+ MANDATORYTLV P2PStatus;
+ MANDATORYTLV NoticeOfAbsence;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Frames
+
+FRAME Beacon // C.f. Sec. 7.2.3.1
+{
+ FF TimeStamp;
+ FF BeaconInterval;
+ FF Capabilities;
+ MANDIE SSID;
+ MANDIE SuppRates;
+ OPTIE FHParamSet;
+ OPTIE DSParams;
+ OPTIE CFParams;
+ OPTIE IBSSParams;
+ OPTIE TIM;
+ OPTIE Country;
+ OPTIE FHParams;
+ OPTIE FHPattTable;
+ OPTIE PowerConstraints;
+ OPTIE ChanSwitchAnn;
+ OPTIE Quiet;
+ OPTIE TPCReport;
+ OPTIE ERPInfo;
+ OPTIE ExtSuppRates;
+ OPTIE RSN;
+ OPTIE QBSSLoad;
+ OPTIE EDCAParamSet;
+ OPTIE QOSCapsAp;
+ OPTIE APChannelReport;
+ OPTIE RRMEnabledCap;
+ OPTIE MobilityDomain;
+ OPTIE WPA;
+ OPTIE HTCaps;
+ OPTIE HTInfo;
+ OPTIE ExtChanSwitchAnn;
+ OPTIE WMMInfoAp;
+ OPTIE WMMParams;
+ OPTIE WMMCaps;
+ OPTIE WAPI;
+ OPTIE ESERadMgmtCap;
+ OPTIE ESETrafStrmMet;
+ OPTIE ESETxmitPower;
+
+ OPTIE Airgo;
+ OPTIE WscBeacon;
+ OPTIE P2PBeacon;
+ OPTIE VHTCaps;
+ OPTIE VHTOperation;
+ OPTIE VHTExtBssLoad;
+ OPTIE ExtCap;
+ OPTIE OperatingMode;
+ OPTIE WiderBWChanSwitchAnn;
+ OPTIE OBSSScanParameters;
+} // End frame Beacon.
+
+// Ok, here's the story on Beacon1 & Beacon2. We presumably beacon a lot
+// more than we change configuration. So it makes sense to keep the beacon
+// we plan to send next in serialized format. We do this in struct schMisc.
+// Whenever our config changes in a way that would affect our beacons, we
+// just update our internal datastructures & re-generate the serialized
+// beacon.
+
+// The problem is that there are *some* fields that need to be updated at
+// send time, specifically the CF Param Set & the TIM. So, what we do is
+// this: whenever our config changes, call schSetFixedBeaconFields. There,
+// we serialize the following Beacon fields into gSchBeaconFrameBegin (after
+// the power template & MAC header): TimeStamp, BeaconInterval, Capabilities,
+// SSID, SuppRates, DSParams, & IBSSParams. It sets gSchBeaconOffsetBegin to
+// the length of this buffer (incl. power template & MAC header).
+
+// Next, it serializes the following fields into gSchBeaconFrameEnd: Country,
+// EDCAParamSet, PowerConstraints, TPCReport, ChannelSwitchAnn, Quiet,
+// ERPInfo, HTCaps, HTInfo, ExtSuppRates, Airgo (via
+// sirFillPropIEsInBeaconPR), WPA, RSN, WMMInfo, WMMParams, WMMCaps. The
+// length of *this* buffer is kept in gSchBeaconOffsetEnd.
+
+// Then, in 'schBeaconInterruptHandler', we write CFParams & TIM at the end
+// of gSchBeaconFrameBegin, keeping track of the (new) size of this buffer in
+// the local 'beaconSize'.
+
+// After that, we call 'specialBeaconProcessing'. Note that this may
+// actually call schSetFixedBeaconFields repeatedly! The comments say they
+// try to avoid this, but...
+
+// Finally, we call writeBeaconToTFP, where the first thing we do is copy the
+// gSchBeaconFrameEnd buffer after the end of gSchBeaconFrameBegin.
+
+FRAME Beacon1
+{
+ FF TimeStamp;
+ FF BeaconInterval;
+ FF Capabilities;
+ MANDIE SSID;
+ MANDIE SuppRates;
+ OPTIE DSParams;
+ OPTIE IBSSParams;
+}
+
+FRAME Beacon2
+{
+ OPTIE Country;
+ OPTIE PowerConstraints;
+ OPTIE ChanSwitchAnn;
+ OPTIE Quiet;
+ OPTIE TPCReport;
+ OPTIE ERPInfo;
+ OPTIE ExtSuppRates;
+ OPTIE RSNOpaque;
+ OPTIE EDCAParamSet;
+ OPTIE APChannelReport;
+ OPTIE RRMEnabledCap;
+ OPTIE MobilityDomain;
+ OPTIE WPA;
+ OPTIE HTCaps;
+ OPTIE HTInfo;
+ OPTIE ExtChanSwitchAnn;
+ OPTIE WMMInfoAp;
+ OPTIE WMMParams;
+ OPTIE WMMCaps;
+ OPTIE Airgo;
+ OPTIE WscBeacon;
+ OPTIE WAPI;
+ OPTIE ESERadMgmtCap;
+ OPTIE ESETrafStrmMet;
+ OPTIE ESETxmitPower;
+ OPTIE P2PBeacon;
+ OPTIE VHTCaps;
+ OPTIE VHTOperation;
+ OPTIE VHTExtBssLoad;
+ OPTIE ExtCap;
+ OPTIE OperatingMode;
+ OPTIE WiderBWChanSwitchAnn;
+}
+
+// This frame is just Beacon with its Fixed Fields stripped out. It's handy
+// for use with struct 'tSirBssDescription', which has members corresponding
+// to some fixed fields, but keeps its IEs in un-parsed format.
+
+// Note that it also includes the IE 'WscBeaconProbeRes'.
+
+FRAME BeaconIEs
+{
+
+ MANDIE SSID;
+ MANDIE SuppRates;
+ OPTIE FHParamSet;
+ OPTIE DSParams;
+ OPTIE CFParams;
+ OPTIE IBSSParams;
+ OPTIE TIM;
+ OPTIE Country;
+ OPTIE FHParams;
+ OPTIE FHPattTable;
+ OPTIE PowerConstraints;
+ OPTIE ChanSwitchAnn;
+ OPTIE Quiet;
+ OPTIE TPCReport;
+ OPTIE ERPInfo;
+ OPTIE ExtSuppRates;
+ OPTIE RSN;
+ OPTIE QBSSLoad;
+ OPTIE EDCAParamSet;
+ OPTIE QOSCapsAp;
+ OPTIE APChannelReport;
+ OPTIE RRMEnabledCap;
+ OPTIE MobilityDomain;
+ OPTIE WPA;
+ OPTIE HTCaps;
+ OPTIE HTInfo;
+ OPTIE ExtChanSwitchAnn;
+ OPTIE WMMInfoAp;
+ OPTIE WMMParams;
+ OPTIE WMMCaps;
+ OPTIE WAPI;
+ OPTIE ESEVersion;
+ OPTIE ESERadMgmtCap;
+ OPTIE ESETrafStrmMet;
+ OPTIE ESETxmitPower;
+
+ OPTIE Airgo;
+ OPTIE WscBeaconProbeRes;
+ OPTIE P2PBeaconProbeRes;
+ OPTIE VHTCaps;
+ OPTIE VHTOperation;
+ OPTIE VHTExtBssLoad;
+ OPTIE ExtCap;
+ OPTIE OperatingMode;
+ OPTIE WiderBWChanSwitchAnn;
+ OPTIE OBSSScanParameters;
+
+} // End frame BeaconIEs.
+
+FRAME Disassociation // 7.3.3.3
+{
+ FF Reason;
+ OPTIE P2PDisAssoc;
+}
+
+FRAME AssocRequest // 7.2.3.4
+{
+ FF Capabilities;
+ FF ListenInterval;
+ MANDIE SSID;
+ MANDIE SuppRates;
+ OPTIE ExtSuppRates;
+ OPTIE PowerCaps;
+ OPTIE SuppChannels;
+ OPTIE RSNOpaque;
+ OPTIE QOSCapsStation;
+ OPTIE RRMEnabledCap;
+ OPTIE MobilityDomain;
+ OPTIE WPAOpaque;
+ OPTIE HTCaps;
+ OPTIE WMMCaps;
+ OPTIE WMMInfoStation;
+ OPTIE Airgo;
+ OPTIE WscIEOpaque;
+ OPTIE WAPIOpaque;
+ OPTIE ESERadMgmtCap;
+ OPTIE ESEVersion;
+ OPTIE P2PIEOpaque;
+ OPTIE WFDIEOpaque;
+ OPTIE VHTCaps;
+ OPTIE ExtCap;
+ OPTIE OperatingMode;
+ OPTIE QosMapSet;
+} // End frame AssocRequest.
+
+FRAME AssocResponse // 7.2.3.5
+{
+ FF Capabilities;
+ FF Status;
+ FF AID;
+ MANDIE SuppRates;
+ OPTIE ExtSuppRates;
+ OPTIE EDCAParamSet;
+ OPTIE RCPIIE;
+ OPTIE RSNIIE;
+ OPTIE RRMEnabledCap;
+ OPTIE MobilityDomain;
+ OPTIE FTInfo;
+ OPTIE RICDataDesc[2];
+ OPTIE WPA;
+ OPTIE TimeoutInterval;
+ OPTIE HTCaps;
+ OPTIE HTInfo;
+ OPTIE WMMParams;
+ OPTIE WMMCaps;
+ OPTIE ESERadMgmtCap;
+ OPTIE ESETrafStrmMet;
+ OPTIE ESETxmitPower;
+ OPTIE WMMTSPEC[0..4];
+ OPTIE Airgo;
+ OPTIE WscAssocRes;
+ OPTIE P2PAssocRes;
+ OPTIE VHTCaps;
+ OPTIE VHTOperation;
+ OPTIE ExtCap;
+ OPTIE OBSSScanParameters;
+ OPTIE QosMapSet;
+} // End frame AssocResponse.
+
+FRAME ReAssocRequest // 7.2.3.6
+{
+ FF Capabilities;
+ FF ListenInterval;
+ FF CurrentAPAddress;
+ MANDIE SSID;
+ MANDIE SuppRates;
+ OPTIE ExtSuppRates;
+ OPTIE PowerCaps;
+ OPTIE SuppChannels;
+ OPTIE RSNOpaque;
+ OPTIE QOSCapsStation;
+ OPTIE RRMEnabledCap;
+ OPTIE MobilityDomain;
+ OPTIE FTInfo;
+ OPTIE RICDataDesc[2];
+ OPTIE WPAOpaque;
+ OPTIE HTCaps;
+ OPTIE WMMCaps;
+ OPTIE WMMInfoStation;
+ OPTIE Airgo;
+ OPTIE WscIEOpaque;
+ OPTIE WAPIOpaque;
+ OPTIE ESERadMgmtCap;
+ OPTIE ESEVersion;
+ OPTIE ESECckmOpaque;
+ OPTIE WMMTSPEC[0..4];
+ OPTIE ESETrafStrmRateSet;
+ OPTIE P2PIEOpaque;
+ OPTIE WFDIEOpaque;
+ OPTIE VHTCaps;
+ OPTIE ExtCap;
+ OPTIE OperatingMode;
+ OPTIE QosMapSet;
+} // End frame ReAssocRequest.
+
+FRAME ReAssocResponse // 7.2.3.7
+{
+ FF Capabilities;
+ FF Status;
+ FF AID;
+ MANDIE SuppRates;
+ OPTIE ExtSuppRates;
+ OPTIE EDCAParamSet;
+ OPTIE RCPIIE;
+ OPTIE RSNIIE;
+ OPTIE RRMEnabledCap;
+ OPTIE RSNOpaque;
+ OPTIE MobilityDomain;
+ OPTIE FTInfo;
+ OPTIE RICDataDesc[2];
+ OPTIE WPA;
+ OPTIE TimeoutInterval;
+ OPTIE HTCaps;
+ OPTIE HTInfo;
+ OPTIE WMMParams;
+ OPTIE ESERadMgmtCap;
+ OPTIE ESETrafStrmMet;
+ OPTIE ESETxmitPower;
+ OPTIE WMMTSPEC[0..4];
+ OPTIE ESETrafStrmRateSet;
+ OPTIE Airgo;
+ OPTIE WscReassocRes;
+ OPTIE P2PAssocRes;
+ OPTIE VHTCaps;
+ OPTIE VHTOperation;
+ OPTIE ExtCap;
+ OPTIE OBSSScanParameters;
+ OPTIE QosMapSet;
+} // End frame ReAssocResponse.
+
+FRAME ProbeRequest // 7.2.3.8
+{
+ MANDIE SSID;
+ MANDIE SuppRates;
+ OPTIE RequestedInfo;
+ OPTIE ExtSuppRates;
+ OPTIE DSParams;
+ OPTIE HTCaps;
+ OPTIE WscProbeReq;
+ OPTIE WFATPC;
+ OPTIE P2PProbeReq;
+ OPTIE VHTCaps;
+} // End frame ProbeRequest.
+
+FRAME ProbeResponse // 7.2.3.9
+{
+ FF TimeStamp;
+ FF BeaconInterval;
+ FF Capabilities;
+ MANDIE SSID;
+ MANDIE SuppRates;
+ OPTIE FHParamSet;
+ OPTIE DSParams;
+ OPTIE CFParams;
+ OPTIE IBSSParams;
+ OPTIE Country;
+ OPTIE FHParams;
+ OPTIE FHPattTable;
+ OPTIE PowerConstraints;
+ OPTIE ChanSwitchAnn;
+ OPTIE Quiet;
+ OPTIE TPCReport;
+ OPTIE ERPInfo;
+ OPTIE ExtSuppRates;
+ OPTIE RSNOpaque;
+ OPTIE QBSSLoad;
+ OPTIE EDCAParamSet;
+ OPTIE RRMEnabledCap;
+ OPTIE APChannelReport;
+ OPTIE MobilityDomain;
+ OPTIE WPA;
+ OPTIE HTCaps;
+ OPTIE HTInfo;
+ OPTIE ExtChanSwitchAnn;
+ OPTIE WMMInfoAp;
+ OPTIE WMMParams;
+ OPTIE WMMCaps;
+ OPTIE WAPI;
+ OPTIE ESERadMgmtCap;
+ OPTIE ESETrafStrmMet;
+ OPTIE ESETxmitPower;
+
+ OPTIE Airgo;
+ OPTIE WscProbeRes;
+ OPTIE P2PProbeRes;
+
+ OPTIE VHTCaps;
+ OPTIE VHTOperation;
+ OPTIE VHTExtBssLoad;
+ OPTIE ExtCap;
+ OPTIE OBSSScanParameters;
+} // End frame ProbeResponse.
+
+FRAME Authentication // 7.2.3.10
+{
+ FF AuthAlgo;
+ FF AuthSeqNo;
+ FF Status;
+ OPTIE ChallengeText;
+ OPTIE RSNOpaque;
+ OPTIE MobilityDomain;
+ OPTIE FTInfo;
+ OPTIE TimeoutInterval;
+ OPTIE RICDataDesc[2];
+} // End frame Auth.
+
+FRAME DeAuth // 7.2.3.11
+{
+ FF Reason;
+ OPTIE P2PDeAuth;
+}
+
+FRAME AddTSRequest // 7.4.2.1
+{
+
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ MANDIE TSPEC;
+ OPTIE TCLAS[0..2];
+ OPTIE TCLASSPROC;
+
+ // These IEs aren't in the spec, but our extant code *will* parse them if
+ // they're present. I included them to preserve that capability
+
+ OPTIE WMMTSPEC;
+ OPTIE WMMTCLAS[0..2];
+ OPTIE WMMTCLASPROC;
+ OPTIE ESETrafStrmRateSet;
+
+} // End frame AddTSRequest.
+
+FRAME WMMAddTSRequest
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF StatusCode;
+ MANDIE WMMTSPEC;
+ OPTIE ESETrafStrmRateSet;
+} // End Frame WMMAddTSRequest
+
+FRAME AddTSResponse // 7.4.2.2
+{
+
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF Status;
+ MANDIE TSDelay;
+ MANDIE TSPEC;
+ OPTIE TCLAS[0..2];
+ OPTIE TCLASSPROC;
+ OPTIE Schedule;
+
+ // These IEs aren't in the spec, but our extant code *will* parse them if
+ // they're present. I included them to preserve that capability
+ OPTIE WMMTSDelay;
+ OPTIE WMMSchedule;
+ OPTIE WMMTSPEC;
+ OPTIE WMMTCLAS[0..2];
+ OPTIE WMMTCLASPROC;
+ OPTIE ESETrafStrmMet;
+
+} // End frame AddTSResponse.
+
+FRAME WMMAddTSResponse
+{
+
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF StatusCode;
+ OPTIE WMMTSPEC;
+ OPTIE ESETrafStrmMet;
+
+} // End frame WMMAddTSResponse.
+
+FRAME DelTS // 7.4.2.3
+{
+ FF Category;
+ FF Action;
+ FF TSInfo;
+ FF Reason;
+}
+
+FRAME WMMDelTS
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF StatusCode;
+ MANDIE WMMTSPEC;
+}
+
+FRAME TPCRequest
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ MANDIE TPCRequest;
+}
+
+FRAME TPCReport
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ MANDIE TPCReport;
+}
+
+FRAME ChannelSwitch
+{
+ FF Category;
+ FF Action;
+ MANDIE ChanSwitchAnn;
+ OPTIE ExtChanSwitchAnn;
+ OPTIE WiderBWChanSwitchAnn;
+}
+
+FRAME MeasurementRequest
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ MANDIE MeasurementRequest[1..4];
+}
+
+FRAME MeasurementReport
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ MANDIE MeasurementReport;
+}
+
+FRAME AddBAReq
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF AddBAParameterSet;
+ FF BATimeout;
+ FF BAStartingSequenceControl;
+}
+
+FRAME AddBARsp
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF Status;
+ FF AddBAParameterSet;
+ FF BATimeout;
+}
+
+FRAME DelBAInd
+{
+ FF Category;
+ FF Action;
+ FF DelBAParameterSet;
+ FF Reason;
+}
+
+FRAME SMPowerSave
+{
+ FF Category;
+ FF Action;
+ FF SMPowerModeSet;
+}
+
+FRAME RadioMeasurementRequest
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF NumOfRepetitions;
+ //Measurement Request IE.
+ MANDIE MeasurementRequest[1..2];
+}
+
+FRAME RadioMeasurementReport
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ //Measurement Report elements.
+ MANDIE MeasurementReport[1..4];
+}
+
+FRAME LinkMeasurementRequest
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF TxPower;
+ FF MaxTxPower;
+ //Optional Sub Ies
+}
+
+FRAME LinkMeasurementReport
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF TPCEleID;
+ FF TPCEleLen;
+ FF TxPower;
+ FF LinkMargin;
+ FF RxAntennaId;
+ FF TxAntennaId;
+ FF RCPI;
+ FF RSNI;
+ //Optional Vendor specific IEs ... ignoring
+}
+
+FRAME NeighborReportRequest
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ OPTIE SSID;
+ //Optional vendor specific IE...ignoring.
+}
+
+FRAME NeighborReportResponse
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ OPTIE NeighborReport[1..4];
+}
+
+FRAME GONegReq
+{
+ FF Category;
+ FF Action;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PGONegWPS;
+ MANDIE P2PGONegReq;
+}
+
+FRAME GONegRes
+{
+ FF Category;
+ FF Action;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PGONegWPS;
+ MANDIE P2PGONegRes;
+}
+
+
+FRAME GONegCnf
+{
+ FF Category;
+ FF Action;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PGONegCnf;
+}
+
+
+FRAME InvitationReq
+{
+ FF Category;
+ FF Action;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PInvitationReq;
+}
+
+
+FRAME InvitationRes
+{
+ FF Category;
+ FF Action;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PInvitationRes;
+}
+
+
+FRAME DeviceDiscoverabilityReq
+{
+ FF Category;
+ FF Action;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PDeviceDiscoverabilityReq;
+}
+
+
+FRAME DeviceDiscoverabilityRes
+{
+ FF Category;
+ FF Action;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PDeviceDiscoverabilityRes;
+}
+
+
+
+FRAME ProvisionDiscoveryReq
+{
+ FF Category;
+ FF Action;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PProvisionDiscoveryReq;
+}
+
+
+FRAME ProvisionDiscoveryRes
+{
+ FF Category;
+ FF Action;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PWSCProvisionDiscoveryRes;
+}
+
+
+FRAME NoticeOfAbs
+{
+ FF Category;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PNoticeOfAbsence;
+}
+
+
+FRAME PresenceReq
+{
+ FF Category;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PNoticeOfAbsence;
+}
+
+
+FRAME PresenceRes
+{
+ FF Category;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+ MANDIE P2PPresenceResponse;
+}
+
+
+FRAME GODiscoverabilityReq
+{
+ FF Category;
+ FF P2POUI;
+ FF P2POUISubType;
+ FF DialogToken;
+}
+
+FRAME OperatingMode
+{
+ FF Category;
+ FF Action;
+ //Operating Mode field
+ FF OperatingMode;
+}
+
+FRAME TDLSDisReq
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ MANDIE LinkIdentifier;
+}
+
+FRAME TDLSDisRsp
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF Capabilities;
+ MANDIE SuppRates;
+ OPTIE ExtSuppRates;
+ OPTIE SuppChannels;
+ OPTIE SuppOperatingClasses;
+ OPTIE RSN;
+ OPTIE ExtCap;
+ OPTIE FTInfo;
+ OPTIE TimeoutInterval;
+ OPTIE RICData;
+ OPTIE HTCaps;
+ //Optional 20/40BSSCoexistence... ignoring
+ MANDIE LinkIdentifier;
+ OPTIE VHTCaps;
+}
+
+FRAME TDLSSetupReq
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ FF Capabilities;
+ MANDIE SuppRates;
+ OPTIE Country;
+ OPTIE ExtSuppRates;
+ OPTIE SuppChannels;
+ OPTIE RSN;
+ OPTIE ExtCap;
+ OPTIE SuppOperatingClasses;
+ OPTIE QOSCapsStation;
+ OPTIE FTInfo;
+ OPTIE TimeoutInterval;
+ OPTIE RICData;
+ OPTIE HTCaps;
+ //Optional 20/40BSSCoexistence... ignoring
+ MANDIE LinkIdentifier;
+ OPTIE WMMInfoStation;
+ OPTIE AID;
+ OPTIE VHTCaps;
+}
+
+FRAME TDLSSetupRsp
+{
+ FF Category;
+ FF Action;
+ FF Status;
+ FF DialogToken;
+ FF Capabilities ;
+ OPTIE SuppRates;
+ OPTIE Country;
+ OPTIE ExtSuppRates;
+ OPTIE SuppChannels;
+ OPTIE RSN;
+ OPTIE ExtCap;
+ OPTIE SuppOperatingClasses;
+ OPTIE QOSCapsStation;
+ OPTIE FTInfo;
+ OPTIE TimeoutInterval;
+ OPTIE RICData;
+ OPTIE HTCaps;
+ //Optional 20/40BSSCoexistence... ignoring
+ OPTIE LinkIdentifier;
+ OPTIE WMMInfoStation;
+ OPTIE AID;
+ OPTIE VHTCaps;
+ OPTIE OperatingMode;
+}
+
+FRAME TDLSSetupCnf
+{
+ FF Category;
+ FF Action;
+ FF Status;
+ FF DialogToken;
+ OPTIE RSN;
+ OPTIE EDCAParamSet;
+ OPTIE FTInfo;
+ OPTIE TimeoutInterval;
+ OPTIE HTInfo;
+ OPTIE LinkIdentifier;
+ OPTIE WMMInfoStation;
+ OPTIE VHTOperation;
+ OPTIE OperatingMode;
+}
+FRAME TDLSTeardown
+{
+ FF Category;
+ FF Action;
+ FF Reason;
+ OPTIE FTInfo;
+ MANDIE LinkIdentifier;
+}
+
+FRAME TDLSPeerTrafficInd
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ MANDIE LinkIdentifier;
+ OPTIE PTIControl;
+ MANDIE PUBufferStatus;
+}
+
+FRAME TDLSPeerTrafficRsp
+{
+ FF Category;
+ FF Action;
+ FF DialogToken;
+ MANDIE LinkIdentifier;
+}
+
+FRAME SaQueryReq
+{
+ FF Category;
+ FF Action;
+ FF TransactionId;
+}
+
+FRAME SaQueryRsp
+{
+ FF Category;
+ FF Action;
+ FF TransactionId;
+}
+
+FRAME QosMapConfigure
+{
+ FF Category;
+ FF Action;
+ MANDIE QosMapSet;
+}
+
+FRAME VHTGidManagementActionFrame
+{
+ FF Category;
+ FF Action;
+ FF VhtMembershipStatusArray;
+ FF VhtUserPositionArray;
+}
+
+// Local Variables:
+// mode: c++
+// fill-column: 77
+// comment-column: 42
+// indent-tabs-mode: nil
+// show-trailing-whitespace: t
+// End:
+
+// parser.frms ends here.