aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMoraney Jalil <moraney.jalil@outlook.com>2014-03-13 13:54:27 +0200
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2014-03-19 11:18:33 +0000
commit4b8b83407ac744d114462235a8bcca0d480954c7 (patch)
tree7b51ba95101a905ec7b15fb501e86ad51b84d2ff
parentbbd18804efb4427b63bad27729eec252ddd2b66f (diff)
Support for IEEE 802.11ad
(according to the 9th draft of the standard) Closed-bug: 8594 Change-Id: I742726027bcab7d25ca4a9ce3a406518db6d272f Reviewed-on: https://code.wireshark.org/review/632 Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
-rw-r--r--epan/dissectors/packet-ieee80211.c3913
1 files changed, 3755 insertions, 158 deletions
diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c
index 2a4b7be0ef..00941c1ddd 100644
--- a/epan/dissectors/packet-ieee80211.c
+++ b/epan/dissectors/packet-ieee80211.c
@@ -56,6 +56,11 @@
* Brian Cavagnolo <brian@cozybit.com>
*
* Enhance 802.11 dissector by Alexis La Goutte
+ *
+ * 04/20/2013 - Added dissection of 802.11ad according to the 9th draft of the standard.
+ * Extended as a project in the Laboratory of Computer Communication & Networking (LCCN), Computer Science Department, Technion, Israel.
+ * Majd Omari <majd.omari@outlook.com>
+ * Jalil Moraney <moraney.jalil@outlook.com>
*/
/*
@@ -71,7 +76,6 @@
* http://isotc.iso.org/livelink/livelink/fetch/-8913189/8913214/8913250/8913253/JTC001-N-9880.pdf?nodeid=8500308&vernum=-2
*/
-
#include "config.h"
#include <string.h>
@@ -242,7 +246,10 @@ typedef struct mimo_control
/* Miscellaneous Constants */
/* ************************************************************************* */
#define SHORT_STR 256
-
+#define MINIMAL_80211AD_FREQ 57000
+#define MAXIMAL_80211AD_FREQ 66000
+#define IS_DMG_KEY 1
+#define IS_CTRL_GRANT_OR_GRANT_ACK_KEY 2
/* ************************************************************************* */
/* Define some very useful macros that are used to analyze frame types etc. */
/* ************************************************************************* */
@@ -256,6 +263,37 @@ typedef struct mimo_control
tvb_get_letohs(tvb, off))
/*
+ * Checks if the packet was transmitted in channel frequency of MINIMAL_80211AD_FREQ
+ * till MAXIMAL_80211AD_FREQ to determine if 802.11ad.
+ */
+static gboolean is_80211ad(proto_node * pnode, gpointer data) {
+ field_info* finfo;
+ header_field_info* hfinfo;
+ if(data != NULL) {
+ return FALSE;
+ }
+ if(pnode == NULL) {
+ return FALSE;
+ }
+ finfo = PNODE_FINFO(pnode);
+ if (finfo == NULL) {
+ return FALSE;
+ }
+ hfinfo = finfo->hfinfo;
+ if (hfinfo == NULL) {
+ return FALSE;
+ }
+ if(hfinfo->name != NULL) {
+ if(strcmp(hfinfo->name, "Channel frequency") == 0) {
+ if((finfo->value.value.uinteger >= MINIMAL_80211AD_FREQ) && (finfo->value.value.uinteger <= MAXIMAL_80211AD_FREQ)) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+/*
* Extract the protocol version from the frame control field
*/
#define FCF_PROT_VERSION(x) ((x) & 0x3)
@@ -271,10 +309,21 @@ typedef struct mimo_control
#define FCF_FRAME_SUBTYPE(x) (((x) & 0xF0) >> 4)
/*
+ * Extract the control frame extension from the frame control field.
+ */
+#define FCF_FRAME_EXTENSION(x) (((x) & 0xF00) >> 8)
+
+/*
+ * Checks if the frame is control frame extension.
+ */
+#define IS_FRAME_EXTENSION(x) ((FCF_FRAME_TYPE(x) == 0x1 && FCF_FRAME_SUBTYPE(x) == 0x6) ? 1 : 0)
+
+/*
* Convert the frame type and subtype from the frame control field into
* one of the MGT_, CTRL_, or DATA_ values.
+ * Now includes extension subtype in case present.
*/
-#define COMPOSE_FRAME_TYPE(x) (((x & 0x0C)<< 2)+FCF_FRAME_SUBTYPE(x)) /* Create key to (sub)type */
+#define COMPOSE_FRAME_TYPE(x) ((FCF_FRAME_TYPE(x) == 0x1 && FCF_FRAME_SUBTYPE(x) == 0x6) ? (((x & 0x0C)<< 6) + ((x) & 0xF0) + FCF_FRAME_EXTENSION(x)) : (((x & 0x0C)<< 2)+FCF_FRAME_SUBTYPE(x))) /* Create key to (sub)type */
/*
* The subtype field of a data frame is, in effect, composed of 4 flag
@@ -288,8 +337,9 @@ typedef struct mimo_control
/*
* Extract the flags from the frame control field.
+ * Now includes subset of flags when the subtype is control frame extension.
*/
-#define FCF_FLAGS(x) (((x) & 0xFF00) >> 8)
+#define FCF_FLAGS(x) ((FCF_FRAME_TYPE(x) == 0x1 && FCF_FRAME_SUBTYPE(x) == 0x6) ? (((x) & 0xF000) >> 12) : (((x) & 0xFF00) >> 8))
/*
* Bits from the flags field.
@@ -401,6 +451,7 @@ typedef struct mimo_control
#define MGT_FRAME 0x00 /* Frame type is management */
#define CONTROL_FRAME 0x01 /* Frame type is control */
#define DATA_FRAME 0x02 /* Frame type is Data */
+#define EXTENSION_FRAME 0x03 /* Frame type is Extension */
#define DATA_SHORT_HDR_LEN 24
#define DATA_LONG_HDR_LEN 30
@@ -427,17 +478,27 @@ typedef struct mimo_control
/*
* COMPOSE_FRAME_TYPE() values for control frames.
+ * 0x160 - 0x16A are for control frame extension where type = 1 and subtype =6.
*/
-#define CTRL_VHT_NDP_ANNC 0x15 /* VHT NDP Announcement */
-#define CTRL_CONTROL_WRAPPER 0x17 /* Control Wrapper */
-#define CTRL_BLOCK_ACK_REQ 0x18 /* Block ack Request */
-#define CTRL_BLOCK_ACK 0x19 /* Block ack */
-#define CTRL_PS_POLL 0x1A /* power-save poll */
-#define CTRL_RTS 0x1B /* request to send */
-#define CTRL_CTS 0x1C /* clear to send */
-#define CTRL_ACKNOWLEDGEMENT 0x1D /* acknowledgement */
-#define CTRL_CFP_END 0x1E /* contention-free period end */
-#define CTRL_CFP_ENDACK 0x1F /* contention-free period end/ack */
+#define CTRL_VHT_NDP_ANNC 0x15 /* VHT NDP Announcement */
+#define CTRL_POLL 0x162 /* Poll */
+#define CTRL_SPR 0x163 /* Service Period Request */
+#define CTRL_GRANT 0x164 /* Grant */
+#define CTRL_DMG_CTS 0x165 /* DMG Clear to Send */
+#define CTRL_DMG_DTS 0x166 /* DMG Denial to Send */
+#define CTRL_GRANT_ACK 0x167 /* Grant Acknowledgment */
+#define CTRL_SSW 0x168 /* Sector Sweep */
+#define CTRL_SSW_FEEDBACK 0x169 /* Sector Sweep Feedback */
+#define CTRL_SSW_ACK 0x16A /* Sector Sweep Acknowledgment */
+#define CTRL_CONTROL_WRAPPER 0x17 /* Control Wrapper */
+#define CTRL_BLOCK_ACK_REQ 0x18 /* Block ack Request */
+#define CTRL_BLOCK_ACK 0x19 /* Block ack */
+#define CTRL_PS_POLL 0x1A /* power-save poll */
+#define CTRL_RTS 0x1B /* request to send */
+#define CTRL_CTS 0x1C /* clear to send */
+#define CTRL_ACKNOWLEDGEMENT 0x1D /* acknowledgement */
+#define CTRL_CFP_END 0x1E /* contention-free period end */
+#define CTRL_CFP_ENDACK 0x1F /* contention-free period end/ack */
/*
* COMPOSE_FRAME_TYPE() values for data frames.
@@ -459,6 +520,11 @@ typedef struct mimo_control
#define DATA_QOS_CF_POLL_NOD 0x2E /* QoS CF-Poll (No Data) */
#define DATA_QOS_CF_ACK_POLL_NOD 0x2F /* QoS CF-Ack + CF-Poll (No Data) */
+/*
+ * COMPOSE_FRAME_TYPE() values for extension frames.
+ */
+#define EXTENSION_DMG_BEACON 0x30 /* Extension DMG beacon */
+
/* ************************************************************************* */
/* Logical field codes (dissector's encoding of fixed fields) */
@@ -477,6 +543,7 @@ enum fixed_field {
FIELD_CATEGORY_CODE, /* Management action category */
FIELD_ACTION_CODE, /* Management action code */
FIELD_DIALOG_TOKEN, /* Management action dialog token */
+ FIELD_FOLLOWUP_DIALOG_TOKEN,
FIELD_WME_ACTION_CODE, /* Management notification action code */
FIELD_WME_DIALOG_TOKEN, /* Management notification dialog token */
FIELD_WME_STATUS_CODE, /* Management notification setup response status code */
@@ -513,6 +580,7 @@ enum fixed_field {
FIELD_HT_INFORMATION,
FIELD_HT_ACTION_CODE,
FIELD_PA_ACTION_CODE,
+ FIELD_PPA_ACTION_CODE,
FIELD_FT_ACTION_CODE,
FIELD_STA_ADDRESS,
FIELD_TARGET_AP_ADDRESS,
@@ -528,6 +596,17 @@ enum fixed_field {
FIELD_MESH_CONTROL,
FIELD_SELFPROT_ACTION,
FIELD_WNM_ACTION_CODE,
+ FIELD_UNPROTECTED_WNM_ACTION_CODE,
+ FIELD_RELAY_CAPABLE_STA_INFO,
+ FIELD_BAND_ID,
+ FIELD_DMG_PARAMETERS,
+ FIELD_SECTOR_SWEEP,
+ FIELD_DYNAMIC_ALLOCATION,
+ FIELD_SECTOR_SWEEP_FB,
+ FIELD_BRP_REQ,
+ FIELD_BEAMFORMING_CTRL,
+ FIELD_BEAMFORMED_LINK_MAINTAINCE,
+ FIELD_BEACON_INTERVAL_CTRL,
FIELD_KEY_DATA_LENGTH,
FIELD_WNM_NOTIFICATION_TYPE,
FIELD_RM_ACTION_CODE,
@@ -540,6 +619,32 @@ enum fixed_field {
FIELD_RM_TX_ANTENNA_ID,
FIELD_RM_RCPI,
FIELD_RM_RSNI,
+ FIELD_DMG_ACTION_CODE,
+ FIELD_DMG_PWR_MGMT,
+ FIELD_REQ_AP_ADDR,
+ FIELD_RES_AP_ADDR,
+ FIELD_CHECK_BEACON,
+ FIELD_TOD,
+ FIELD_TOA,
+ FIELD_MAX_TOD_ERR,
+ FIELD_MAX_TOA_ERR,
+ FIELD_SUBJECT_ADDRESS,
+ FIELD_HANDOVER_REASON,
+ FIELD_HANDOVER_REMAINING_BI,
+ FIELD_HANDOVER_RESULT,
+ FIELD_HANDOVER_REJECT_REASON,
+ FIELD_DESTINATION_REDS_AID,
+ FIELD_DESTINATION_AID,
+ FIELD_REALY_AID,
+ FIELD_SOURCE_AID,
+ FIELD_TIMING_OFFSET,
+ FIELD_SAMPLING_FREQUENCY_OFFSET,
+ FIELD_RELAY_OPERATION_TYPE,
+ FIELD_UNPROTECTED_DMG_ACTION_CODE,
+ FIELD_FST_ACTION_CODE,
+ FIELD_LLT,
+ FIELD_FSTS_ID,
+ FIELD_OCT_MMPDU,
/* add any new fixed field value above this line */
MAX_FIELD_NUM
};
@@ -673,10 +778,41 @@ enum fixed_field {
#define TAG_MIC 140
#define TAG_DESTINATION_URI 141
#define TAG_U_APSD_COEX 142
+#define TAG_WAKEUP_SCHEDULE_AD 143 /* IEEE Std 802.11ad */
+#define TAG_EXTENDED_SCHEDULE 144 /* IEEE Std 802.11ad */
+#define TAG_STA_AVAILABILITY 145 /* IEEE Std 802.11ad */
+#define TAG_DMG_TSPEC 146 /* IEEE Std 802.11ad */
+#define TAG_NEXT_DMG_ATI 147 /* IEEE Std 802.11ad */
+#define TAG_DMG_CAPABILITIES 148 /* IEEE Std 802.11ad */
#define TAG_CISCO_CCX3 149 /* Cisco Compatible eXtensions v3 */
#define TAG_CISCO_VENDOR_SPECIFIC 150 /* Cisco Compatible eXtensions */
+#define TAG_DMG_OPERATION 151 /* IEEE Std 802.11ad */
+#define TAG_DMG_BSS_PRAMTER_CHANGE 152 /* IEEE Std 802.11ad */
+#define TAG_DMG_BEAM_REFINEMENT 153 /* IEEE Std 802.11ad */
+#define TAG_CHANNEL_MEASURMENT_FB 154 /* IEEE Std 802.11ad */
+#define TAG_AWAKE_WINDOW 157 /* IEEE Std 802.11ad */
+#define TAG_MULTI_BAND 158 /* IEEE Std 802.11ad */
+#define TAG_ADDBA_EXT 159 /* IEEE Std 802.11ad */
+#define TAG_NEXTPCP_LIST 160 /* IEEE Std 802.11ad */
+#define TAG_PCP_HANDOVER 161 /* IEEE Std 802.11ad */
+#define TAG_DMG_LINK_MARGIN 162 /* IEEE Std 802.11ad */
+#define TAG_SWITCHING_STREAM 163 /* IEEE Std 802.11ad */
+#define TAG_SESSION_TRANSMISSION 164 /* IEEE Std 802.11ad */
+#define TAG_DYN_TONE_PAIR_REP 165 /* IEEE Std 802.11ad */
+#define TAG_CLUSTER_REP 166 /* IEEE Std 802.11ad */
+#define TAG_RELAY_CAPABILITIES 167 /* IEEE Std 802.11ad */
+#define TAG_RELAY_TRANSFER_PARAM 168 /* IEEE Std 802.11ad */
+#define TAG_BEAMLINK_MAINTAINCE 169 /* IEEE Std 802.11ad */
+#define TAG_MULTIPLE_MAC_SUBLAYERS 170 /* IEEE Std 802.11ad */
+#define TAG_U_PID 171 /* IEEE Std 802.11ad */
+#define TAG_DMG_LINK_ADAPTION_ACK 172 /* IEEE Std 802.11ad */
#define TAG_SYMBOL_PROPRIETARY 173
#define TAG_MCCAOP_ADVERTISEMENT_OV 174
+#define TAG_QUIET_PERIOD_REQ 175 /* IEEE Std 802.11ad */
+#define TAG_QUIET_PERIOD_RES 177 /* IEEE Std 802.11ad */
+#define TAG_ECPAC_POLICY 182 /* IEEE Std 802.11ad */
+#define TAG_CLUSTER_TIME_OFFSET 183 /* IEEE Std 802.11ad */
+#define TAG_ANTENNA_SECTOR_ID 190 /* IEEE Std 802.11ad */
#define TAG_VHT_CAPABILITY 191 /* IEEE Std 802.11ac/D3.1 */
#define TAG_VHT_OPERATION 192 /* IEEE Std 802.11ac/D3.1 */
#define TAG_VHT_TX_PWR_ENVELOPE 195 /* IEEE Std 802.11ac/D5.0 */
@@ -805,10 +941,41 @@ static const value_string tag_num_vals[] = {
{ TAG_MIC, "MIC (Message Integrity Code)" },
{ TAG_DESTINATION_URI, "Destination URI" },
{ TAG_U_APSD_COEX, "U-APSD Coexistence" },
+ { TAG_WAKEUP_SCHEDULE_AD, "Wakeup Schedule 802.11ad" },
+ { TAG_EXTENDED_SCHEDULE, "Extended Schedule" },
+ { TAG_STA_AVAILABILITY, "STA Availability" },
+ { TAG_DMG_TSPEC, "DMG TSPEC" },
+ { TAG_NEXT_DMG_ATI, "Next DMG ATI" },
+ { TAG_DMG_CAPABILITIES, "DMG Capabilities" },
{ TAG_CISCO_CCX3, "Cisco Unknown 95" },
{ TAG_CISCO_VENDOR_SPECIFIC, "Cisco Vendor Specific" },
+ { TAG_DMG_OPERATION, "DMG Operating" },
+ { TAG_DMG_BSS_PRAMTER_CHANGE, "DMG BSS Parameter Change" },
+ { TAG_DMG_BEAM_REFINEMENT, "DMG Beam Refinement" },
+ { TAG_CHANNEL_MEASURMENT_FB, "Channel Measurement Feedback" },
+ { TAG_AWAKE_WINDOW, "Awake Window" },
+ { TAG_MULTI_BAND, "Multi Band" },
+ { TAG_ADDBA_EXT, "ADDBA Extension" },
+ { TAG_NEXTPCP_LIST, "NEXTPCP List" },
+ { TAG_PCP_HANDOVER, "PCP Handover" },
+ { TAG_DMG_LINK_MARGIN, "DMG Link Margin" },
+ { TAG_SWITCHING_STREAM, "Switching Stream" },
+ { TAG_SESSION_TRANSMISSION, "Session Transmission" },
+ { TAG_DYN_TONE_PAIR_REP, "Dynamic Tone Pairing Report" },
+ { TAG_CLUSTER_REP, "Cluster Report" },
+ { TAG_RELAY_CAPABILITIES, "Relay Capabilities" },
+ { TAG_RELAY_TRANSFER_PARAM, "Relay Transfer Parameter" },
+ { TAG_BEAMLINK_MAINTAINCE, "Beamlink Maintenance" },
+ { TAG_MULTIPLE_MAC_SUBLAYERS, "Multiple MAC Sublayers" },
+ { TAG_U_PID, "U-PID" },
+ { TAG_DMG_LINK_ADAPTION_ACK, "DMG Link Adaption Acknowledgment" },
{ TAG_SYMBOL_PROPRIETARY, "Symbol Proprietary" },
{ TAG_MCCAOP_ADVERTISEMENT_OV, "MCCAOP Advertisement Overview" },
+ { TAG_QUIET_PERIOD_REQ, "Quiet Period Request" },
+ { TAG_QUIET_PERIOD_RES, "Quiet Period Response" },
+ { TAG_ECPAC_POLICY, "ECPAC Policy" },
+ { TAG_CLUSTER_TIME_OFFSET, "Cluster Time Offset" },
+ { TAG_ANTENNA_SECTOR_ID, "Antenna Sector ID" },
{ TAG_VHT_CAPABILITY, "VHT Capabilities (IEEE Std 802.11ac/D3.1)" },
{ TAG_VHT_OPERATION, "VHT Operation (IEEE Std 802.11ac/D3.1)" },
{ TAG_VHT_TX_PWR_ENVELOPE, "VHT Tx Power Envelope (IEEE Std 802.11ac/D5.0)" },
@@ -986,13 +1153,13 @@ static const value_string ieee80211_status_code[] = {
{ 30, "Association request rejected temporarily; try again later" },
{ 31, "Robust Management frame policy violation" },
{ 32, "Unspecified, QoS-related failure" },
- { 33, "Association denied because QoS AP has insufficient bandwidth to handle another QoS STA" },
+ { 33, "Association denied because QoS AP or PCP has insufficient bandwidth to handle another QoS STA" },
{ 34, "Association denied due to excessive frame loss rates and/or poor conditions on current operating channel" },
{ 35, "Association (with QoS BSS) denied because the requesting STA does not support the QoS facility" },
{ 36, "Reserved" },
{ 37, "The request has been declined" },
{ 38, "The request has not been successful as one or more parameters have invalid values" },
- { 39, "The TS has not been created because the request cannot be honored; however, a suggested TSPEC is provided so that the initiating STA may attempt to set another TS with the suggested changes to the TSPEC" },
+ { 39, "The allocation or TS has not been created because the request cannot be honored; however, a suggested TSPEC/DMG TSPEC is provided so that the initiating STA may attempt to set another allocation or TS with the suggested changes to the TSPEC/DMG TSPEC" },
{ 40, "Invalid information element, i.e., an information element defined in this standard for which the content does not meet the specifications in Clause 7" },
{ 41, "Invalid group cipher" },
{ 42, "Invalid pairwise cipher" },
@@ -1000,7 +1167,7 @@ static const value_string ieee80211_status_code[] = {
{ 44, "Unsupported RSN information element version" },
{ 45, "Invalid RSN information element capabilities" },
{ 46, "Cipher suite rejected because of security policy" },
- { 47, "The TS has not been created; however, the HC may be capable of creating a TS, in response to a request, after the time indicated in the TS Delay element" },
+ { 47, "The TS per allocation has not been created; however, the PCP/HC may be capable of creating a TS or allocation, in response to a request, after the time indicated in the TS Delay element" },
{ 48, "Direct link is not allowed in the BSS by policy" },
{ 49, "The Destination STA is not present within this BSS" },
{ 50, "The Destination STA is not a QoS STA" },
@@ -1009,9 +1176,9 @@ static const value_string ieee80211_status_code[] = {
{ 53, "Invalid pairwise master key identifier (PMKID)" },
{ 54, "Invalid MDIE" },
{ 55, "Invalid FTIE" },
- { 56, "Requested TCLAS processing is not supported by the AP" },
- { 57, "The AP has insufficient TCLAS processing resources to satisfy the request" },
- { 58, "The TS has not been created because the request cannot be honored; however, the HC suggests the STA transitions to other BSSs to setup the TS" },
+ { 56, "Requested TCLAS processing is not supported by the PCP/AP" },
+ { 57, "The PCP/AP has insufficient TCLAS processing resources to satisfy the request" },
+ { 58, "The TS has not been created because the request cannot be honored; however, the PCP/HC suggests the STA to transition to other BSSs to setup the TS" },
{ 59, "GAS Advertisement Protocol not supported" },
{ 60, "No outstanding GAS request" },
{ 61, "GAS Response not received from the Advertisement Server" },
@@ -1021,7 +1188,7 @@ static const value_string ieee80211_status_code[] = {
{ 65, "Advertisement Server in the network is not currently reachable" },
{ 66, "Reserved" },
{ 67, "Request refused due to permissions received via SSPN interface" },
- { 68, "Request refused because AP does not support unauthenticated access" },
+ { 68, "Request refused because PCP/AP does not support unauthenticated access" },
{ 69, "Reserved" },
{ 70, "Reserved" },
{ 71, "Reserved" },
@@ -1036,18 +1203,25 @@ static const value_string ieee80211_status_code[] = {
{ 80, "Requested TCLAS Not Supported" },
{ 81, "TCLAS Resources Exhausted" },
{ 82, "Rejected with Suggested BSS Transition" },
- { 83, "Reserved" },
+ { 83, "Reject with recommended schedule" },
+ { 84, "Reject because no wakeup schedule specified" },
+ { 85, "Success, the destination STA is in power save mode" },
+ { 86, "FST pending, in process of admitting FST session" },
+ { 87, "performing FST now" },
+ { 88, "FST pending, gap(s) in Block Ack window" },
+ { 89, "Reject because of U-PID setting" },
{ 92, "(Re)association refused for some external reason" },
{ 93, "(Re)association refused because of memory limits at the AP" },
{ 94, "(Re)association refused because emergency services are not supported at the AP" },
{ 95, "GAS query response not yet received" },
- { 96, "Reserved" },
+ { 96, "Reject since the request is for transition to a frequency band subject to DSE procedures and FST initiator is a dependent STA" },
{ 97, "Reserved" },
{ 98, "Reserved" },
- { 99, "Reserved" },
+ { 99, "The association has been denied; however, one or more Multi-band elements are included that can be used by the receiving STA to join the BSS" },
{ 100, "The request failed due to a reservation conflict" },
{ 101, "The request failed due to exceeded MAF limit" },
{ 102, "The request failed due to exceeded MCCA track limit" },
+ { 103, "Association denied because the information in the Spectrum Management field is unacceptable" },
{ 0, NULL}
};
static value_string_ext ieee80211_status_code_ext = VALUE_STRING_EXT_INIT(ieee80211_status_code);
@@ -1098,6 +1272,19 @@ static const value_string frame_type_subtype_vals[] = {
{DATA_QOS_NULL, "QoS Null function (No data)"},
{DATA_QOS_CF_POLL_NOD, "QoS CF-Poll (No Data)"},
{DATA_QOS_CF_ACK_POLL_NOD, "QoS CF-Ack + CF-Poll (No data)"},
+
+ {EXTENSION_DMG_BEACON, "DMG Beacon"},
+
+ {CTRL_POLL, "Poll"},
+ {CTRL_SPR, "Service Period Request"},
+ {CTRL_GRANT, "Grant"},
+ {CTRL_DMG_CTS, "DMG Clear-to-send"},
+ {CTRL_DMG_DTS, "DMG Denial-to-send"},
+ {CTRL_GRANT_ACK, "Grant Acknowledgment"},
+ {CTRL_SSW, "Sector Sweep"},
+ {CTRL_SSW_FEEDBACK, "Sector Sweep Feedback"},
+ {CTRL_SSW_ACK, "Sector Sweep Acknoledgment"},
+
{0, NULL}
};
static value_string_ext frame_type_subtype_vals_ext = VALUE_STRING_EXT_INIT(frame_type_subtype_vals);
@@ -1150,27 +1337,27 @@ static const value_string aruba_mgt_typevals[] = {
static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt_typevals);
/*** Begin: Action Fixed Parameter ***/
-#define CAT_SPECTRUM_MGMT 0
-#define CAT_QOS 1
-#define CAT_DLS 2
-#define CAT_BLOCK_ACK 3
-#define CAT_PUBLIC 4
-
-#define CAT_RADIO_MEASUREMENT 5
-#define CAT_FAST_BSS_TRANSITION 6
-#define CAT_HT 7
-#define CAT_SA_QUERY 8
-#define CAT_PUBLIC_PROTECTED 9
-#define CAT_WNM 10
-#define CAT_UNPROTECTED_WNM 11
-#define CAT_TDLS 12
-
-/* per 11s draft 12.0 */
-#define CAT_MESH 13
-#define CAT_MULTIHOP 14
-#define CAT_SELF_PROTECTED 15
-
-#define CAT_MGMT_NOTIFICATION 17
+#define CAT_SPECTRUM_MGMT 0
+#define CAT_QOS 1
+#define CAT_DLS 2
+#define CAT_BLOCK_ACK 3
+#define CAT_PUBLIC 4
+#define CAT_RADIO_MEASUREMENT 5
+#define CAT_FAST_BSS_TRANSITION 6
+#define CAT_HT 7
+#define CAT_SA_QUERY 8
+#define CAT_PUBLIC_PROTECTED 9
+#define CAT_WNM 10
+#define CAT_UNPROTECTED_WNM 11
+#define CAT_TDLS 12
+#define CAT_MESH 13
+#define CAT_MULTIHOP 14
+#define CAT_SELF_PROTECTED 15
+#define CAT_DMG 16
+#define CAT_MGMT_NOTIFICATION 17
+#define CAT_FAST_SESSION_TRANSFER 18
+#define CAT_ROBUST_AV_STREAMING 19
+#define CAT_UNPROTECTED_DMG 20
#define CAT_VENDOR_SPECIFIC_PROTECTED 126
#define CAT_VENDOR_SPECIFIC 127
@@ -1187,34 +1374,54 @@ static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt
#define SM_ACTION_CHAN_SWITCH_ANNC 4
#define SM_ACTION_EXT_CHAN_SWITCH_ANNC 5
-#define SM_ACTION_ADDTS_REQUEST 0
-#define SM_ACTION_ADDTS_RESPONSE 1
-#define SM_ACTION_DELTS 2
-#define SM_ACTION_QOS_SCHEDULE 3
-#define SM_ACTION_QOS_MAP_CONFIGURE 4
+#define QOS_ACTION_ADDTS_REQUEST 0
+#define QOS_ACTION_ADDTS_RESPONSE 1
+#define QOS_ACTION_DELTS 2
+#define QOS_ACTION_SCHEDULE 3
+#define QOS_ACTION_MAP_CONFIGURE 4
-#define SM_ACTION_DLS_REQUEST 0
-#define SM_ACTION_DLS_RESPONSE 1
-#define SM_ACTION_DLS_TEARDOWN 2
+#define DLS_ACTION_REQUEST 0
+#define DLS_ACTION_RESPONSE 1
+#define DLS_ACTION_TEARDOWN 2
#define BA_ADD_BLOCK_ACK_REQUEST 0
#define BA_ADD_BLOCK_ACK_RESPONSE 1
#define BA_DELETE_BLOCK_ACK 2
-#define PA_DSE_ENABLEMENT 1
-#define PA_DSE_DEENABLEMENT 2
-#define PA_DSE_REG_LOC_ANNOUNCEMENT 3
-#define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4
-#define PA_DSE_MEASUREMENT_REQUEST 5
-#define PA_DSE_MEASUREMENT_REPORT 6
-#define PA_MEASUREMENT_PILOT 7
-#define PA_DSE_POWER_CONSTRAINT 8
-#define PA_VENDOR_SPECIFIC 9
+/* Keep in sync with PPA_* defines */
+#define PA_20_40_BSS_COEXISTENCE_MANAGEMENT 0
+#define PA_DSE_ENABLEMENT 1
+#define PA_DSE_DEENABLEMENT 2
+#define PA_DSE_REG_LOC_ANNOUNCEMENT 3
+#define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4
+#define PA_DSE_MEASUREMENT_REQUEST 5
+#define PA_DSE_MEASUREMENT_REPORT 6
+#define PA_MEASUREMENT_PILOT 7
+#define PA_DSE_POWER_CONSTRAINT 8
+#define PA_VENDOR_SPECIFIC 9
#define PA_GAS_INITIAL_REQUEST 10
#define PA_GAS_INITIAL_RESPONSE 11
#define PA_GAS_COMEBACK_REQUEST 12
#define PA_GAS_COMEBACK_RESPONSE 13
#define PA_TDLS_DISCOVERY_RESPONSE 14
+#define PA_LOCATION_TRACK_NOTIFICATION 15
+#define PA_QAB_REQUEST 16
+#define PA_QAB_RESPONSE 17
+
+/* Keep in sync with PA_* defines */
+#define PPA_DSE_ENABLEMENT 1
+#define PPA_DSE_DEENABLEMENT 2
+#define PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4
+#define PPA_DSE_MEASUREMENT_REQUEST 5
+#define PPA_DSE_MEASUREMENT_REPORT 6
+#define PPA_DSE_POWER_CONSTRAINT 8
+#define PPA_VENDOR_SPECIFIC 9
+#define PPA_GAS_INITIAL_REQUEST 10
+#define PPA_GAS_INITIAL_RESPONSE 11
+#define PPA_GAS_COMEBACK_REQUEST 12
+#define PPA_GAS_COMEBACK_RESPONSE 13
+#define PPA_QAB_REQUEST 16
+#define PPA_QAB_RESPONSE 17
#define HT_ACTION_NOTIFY_CHAN_WIDTH 0
#define HT_ACTION_SM_PWR_SAVE 1
@@ -1226,6 +1433,40 @@ static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt
#define HT_ACTION_ANT_SEL_FEEDBACK 7
#define HT_ACTION_HT_INFO_EXCHANGE 8
+#define DMG_ACTION_PWR_SAVE_CONFIG_REQ 0
+#define DMG_ACTION_PWR_SAVE_CONFIG_RES 1
+#define DMG_ACTION_INFO_REQ 2
+#define DMG_ACTION_INFO_RES 3
+#define DMG_ACTION_HANDOVER_REQ 4
+#define DMG_ACTION_HANDOVER_RES 5
+#define DMG_ACTION_DTP_REQ 6
+#define DMG_ACTION_DTP_RES 7
+#define DMG_ACTION_RELAY_SEARCH_REQ 8
+#define DMG_ACTION_RELAY_SEARCH_RES 9
+#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ 10
+#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES 11
+#define DMG_ACTION_RLS_REQ 12
+#define DMG_ACTION_RLS_RES 13
+#define DMG_ACTION_RLS_ANNOUNCE 14
+#define DMG_ACTION_RLS_TEARDOWN 15
+#define DMG_ACTION_RELAY_ACK_REQ 16
+#define DMG_ACTION_RELAY_ACK_RES 17
+#define DMG_ACTION_TPA_REQ 18
+#define DMG_ACTION_TPA_RES 19
+#define DMG_ACTION_TPA_REP 20
+#define DMG_ACTION_ROC_REQ 21
+#define DMG_ACTION_ROC_RES 22
+
+#define UNPROTECTED_DMG_ANNOUNCE 0
+#define UNPROTECTED_DMG_BRP 1
+
+#define FST_SETUP_REQUEST 0
+#define FST_SETUP_RESPONSE 1
+#define FST_TEAR_DOWN 2
+#define FST_ACK_REQUEST 3
+#define FST_ACK_RESPONSE 4
+#define FST_ON_CHANNEL_TUNNEL_REQUEST 5
+
/* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */
#define FT_ACTION_REQUEST 1
#define FT_ACTION_RESPONSE 2
@@ -1403,6 +1644,17 @@ static const value_string wnm_action_codes[] = {
};
static value_string_ext wnm_action_codes_ext = VALUE_STRING_EXT_INIT(wnm_action_codes);
+enum unprotected_wnm_action {
+ UNPROTECTED_WNM_TIM = 0,
+ UNPROTECTED_WNM_TIMING_MEASUREMENT = 1
+};
+
+static const value_string unprotected_wnm_action_codes[] = {
+ { UNPROTECTED_WNM_TIM, "TIM" },
+ { UNPROTECTED_WNM_TIMING_MEASUREMENT, "Timing Measurement" },
+ { 0, NULL }
+};
+static value_string_ext unprotected_wnm_action_codes_ext = VALUE_STRING_EXT_INIT(unprotected_wnm_action_codes);
static const value_string wnm_notification_types[] = {
{ 0, "Firmware Update Notification" },
@@ -1536,10 +1788,11 @@ static const value_string ieee80211_tclas_process_flag[] = {
};
static const value_string frame_type[] = {
- {MGT_FRAME, "Management frame"},
- {CONTROL_FRAME, "Control frame"},
- {DATA_FRAME, "Data frame"},
- {0, NULL}
+ {MGT_FRAME, "Management frame"},
+ {CONTROL_FRAME, "Control frame"},
+ {DATA_FRAME, "Data frame"},
+ {EXTENSION_FRAME, "Extension frame"},
+ {0, NULL}
};
static const value_string tofrom_ds[] = {
@@ -1791,6 +2044,48 @@ static const value_string ff_ht_action_flags[] = {
{0x00, NULL}
};
+static const value_string ff_fst_action_flags[] = {
+ {FST_SETUP_REQUEST, "FST Setup Request"},
+ {FST_SETUP_RESPONSE, "FST Setup Response"},
+ {FST_TEAR_DOWN, "FST Tear Down"},
+ {FST_ACK_REQUEST, "FST Ack Request"},
+ {FST_ACK_RESPONSE, "FST Ack Response"},
+ {FST_ON_CHANNEL_TUNNEL_REQUEST, "FST On-channel Tunnel Request"},
+ {0x00, NULL}
+};
+
+static const value_string ff_dmg_action_flags[] = {
+ {DMG_ACTION_PWR_SAVE_CONFIG_REQ, "Power Save Configuration Request"},
+ {DMG_ACTION_PWR_SAVE_CONFIG_RES, "Power Save Configuration Response"},
+ {DMG_ACTION_INFO_REQ, "Information Request"},
+ {DMG_ACTION_INFO_RES, "Information Response"},
+ {DMG_ACTION_HANDOVER_REQ, "Handover Request"},
+ {DMG_ACTION_HANDOVER_RES, "Handover Response"},
+ {DMG_ACTION_DTP_REQ, "DTP Request"},
+ {DMG_ACTION_DTP_RES, "DTP Response"},
+ {DMG_ACTION_RELAY_SEARCH_REQ, "Relay Search Request"},
+ {DMG_ACTION_RELAY_SEARCH_RES, "Relay Search Response"},
+ {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ, "Multi Relay Channel Measurement Request"},
+ {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES, "Multi Relay Channel Measurement Response"},
+ {DMG_ACTION_RLS_REQ, "RLS Request"},
+ {DMG_ACTION_RLS_RES, "RLS Response"},
+ {DMG_ACTION_RLS_ANNOUNCE, "RLS Announcement"},
+ {DMG_ACTION_RLS_TEARDOWN, "RLS Teardown"},
+ {DMG_ACTION_RELAY_ACK_REQ, "Relay ACK Request"},
+ {DMG_ACTION_RELAY_ACK_RES, "Relay ACK Response"},
+ {DMG_ACTION_TPA_REQ, "TPA Request"},
+ {DMG_ACTION_TPA_RES, "TPA Response"},
+ {DMG_ACTION_TPA_REP, "TPA Report"},
+ {DMG_ACTION_ROC_REQ, "ROC Request"},
+ {DMG_ACTION_ROC_RES, "ROC Response"},
+ {0x00, NULL}
+};
+
+static const value_string ff_unprotected_dmg_action_flags[] = {
+ {UNPROTECTED_DMG_ANNOUNCE, "Announce"},
+ {UNPROTECTED_DMG_BRP, "BRP"},
+ {0x00, NULL}
+};
static const value_string ff_mimo_cntrl_grouping_flags[] = {
{0x00, "No Grouping"},
{0x01, "Carrier Groups of 2"},
@@ -1815,9 +2110,26 @@ static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
{0, NULL}
};
-
+static const value_string ff_ppa_action_codes[] = {
+ {PPA_DSE_ENABLEMENT, "Protected DSE enablement"},
+ {PPA_DSE_DEENABLEMENT, "Protected DSE deenablement"},
+ {PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT, "Protected Extended Channel Switch Announcement"},
+ {PPA_DSE_MEASUREMENT_REQUEST, "Protected DSE measurement request"},
+ {PPA_DSE_MEASUREMENT_REPORT, "Protected DSE measurement report"},
+ {PPA_DSE_POWER_CONSTRAINT, "Protected DSE power constraint"},
+ {PPA_VENDOR_SPECIFIC, "Protected Vendor Specific"},
+ {PPA_GAS_INITIAL_REQUEST, "Protected GAS Initial Request"},
+ {PPA_GAS_INITIAL_RESPONSE, "Protected GAS Initial Response"},
+ {PPA_GAS_COMEBACK_REQUEST, "Protected GAS Comeback Request"},
+ {PPA_GAS_COMEBACK_RESPONSE, "Protected GAS Comeback Response"},
+ {PPA_QAB_REQUEST, "Protected QAB Request"},
+ {PPA_QAB_RESPONSE, "Protected QAB Response"},
+ {0x00, NULL}
+};
+static value_string_ext ff_ppa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_ppa_action_codes);
static const value_string ff_pa_action_codes[] = {
+ {PA_20_40_BSS_COEXISTENCE_MANAGEMENT,"20/40 BSS Coexistence Management"},
{PA_DSE_ENABLEMENT, "DSE enablement"},
{PA_DSE_DEENABLEMENT, "DSE deenablement"},
{PA_DSE_REG_LOC_ANNOUNCEMENT, "DSE Registered Location Announcement"},
@@ -1832,6 +2144,9 @@ static const value_string ff_pa_action_codes[] = {
{PA_GAS_COMEBACK_REQUEST, "GAS Comeback Request"},
{PA_GAS_COMEBACK_RESPONSE, "GAS Comeback Response"},
{PA_TDLS_DISCOVERY_RESPONSE, "TDLS Discovery Response"},
+ {PA_LOCATION_TRACK_NOTIFICATION, "Location Track Notification"},
+ {PA_QAB_REQUEST, "QAB Request"},
+ {PA_QAB_RESPONSE, "QAB Response"},
{0x00, NULL}
};
static value_string_ext ff_pa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_pa_action_codes);
@@ -1853,7 +2168,11 @@ static const value_string category_codes[] = {
{CAT_MESH, "MESH"},
{CAT_MULTIHOP, "Multihop"},
{CAT_SELF_PROTECTED, "Self-protected"},
+ {CAT_DMG, "DMG"},
{CAT_MGMT_NOTIFICATION, "Management Notification"},
+ {CAT_FAST_SESSION_TRANSFER, "Fast Session Transfer"},
+ {CAT_ROBUST_AV_STREAMING, "Robust AV Streaming"},
+ {CAT_UNPROTECTED_DMG, "Unprotected DMG"},
{CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected"},
{CAT_VENDOR_SPECIFIC, "Vendor Specific"},
@@ -1873,7 +2192,11 @@ static const value_string category_codes[] = {
{0x80 | CAT_MESH, "Mesh (error)"},
{0x80 | CAT_MULTIHOP, "Multihop (error)"},
{0x80 | CAT_SELF_PROTECTED, "Self-protected (error)"},
+ {0x80 | CAT_DMG, "DMG (error)"},
{0x80 | CAT_MGMT_NOTIFICATION, "Management Notification (error)"},
+ {0x80 | CAT_FAST_SESSION_TRANSFER, "Fast Session Transfer (error)"},
+ {0x80 | CAT_ROBUST_AV_STREAMING, "Robust AV Streaming (error)"},
+ {0x80 | CAT_UNPROTECTED_DMG, "Unprotected DMG (error)"},
{0x80 | CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected (error)"},
{0x80 | CAT_VENDOR_SPECIFIC, "Vendor Specific (error)"},
{0, NULL}
@@ -1983,11 +2306,11 @@ static const value_string ack_policy[] = {
};
static const value_string qos_action_codes[] = {
- {SM_ACTION_ADDTS_REQUEST, "ADDTS Request"},
- {SM_ACTION_ADDTS_RESPONSE, "ADDTS Response"},
- {SM_ACTION_DELTS, "DELTS"},
- {SM_ACTION_QOS_SCHEDULE, "Schedule"},
- {SM_ACTION_QOS_MAP_CONFIGURE, "QoS Map Configure"},
+ {QOS_ACTION_ADDTS_REQUEST, "ADDTS Request"},
+ {QOS_ACTION_ADDTS_RESPONSE, "ADDTS Response"},
+ {QOS_ACTION_DELTS, "DELTS"},
+ {QOS_ACTION_SCHEDULE, "Schedule"},
+ {QOS_ACTION_MAP_CONFIGURE, "QoS Map Configure"},
{0, NULL}
};
@@ -1999,9 +2322,9 @@ static const value_string ba_action_codes[] = {
};
static const value_string dls_action_codes[] = {
- {SM_ACTION_DLS_REQUEST, "DLS Request"},
- {SM_ACTION_DLS_RESPONSE, "DLS Response"},
- {SM_ACTION_DLS_TEARDOWN, "DLS Teardown"},
+ {DLS_ACTION_REQUEST, "DLS Request"},
+ {DLS_ACTION_RESPONSE, "DLS Response"},
+ {DLS_ACTION_TEARDOWN, "DLS Teardown"},
{0, NULL}
};
@@ -2623,6 +2946,35 @@ static const value_string ieee80211_ht_pren_type_vals[] = {
{ 0, NULL }
};
+static const true_false_string ieee80211_cf_ssw_direction = {
+ "Transmitted by the beamforming responder",
+ "Transmitted by the beamforming initiator"
+};
+
+static const value_string bss_type[] = {
+ {0x0, "Reserved"},
+ {0x1, "IBSS"},
+ {0x2, "PBSS"},
+ {0x3, "Infrastructure BSS"},
+ {0, NULL}
+};
+
+static const value_string band_id[] = {
+ {0x0, "TV white spaces"},
+ {0x1, "Sub-1 GHZ (excluding TV white spaces)"},
+ {0x2, "2.4 GHZ"},
+ {0x3, "3.6 GHZ"},
+ {0x4, "4.9 and 5 GHZ"},
+ {0x5, "60 GHZ"},
+ {0, NULL}
+};
+
+static const value_string allocation_type[] = {
+ {0x0, "SP Allocation"},
+ {0x4, "CBAP allocation"},
+ {0, NULL}
+};
+
static int proto_wlan = -1;
static int proto_aggregate = -1;
static gboolean ieee80211_tvb_invalid = FALSE;
@@ -2634,6 +2986,7 @@ static int hf_ieee80211_fc_field = -1;
static int hf_ieee80211_fc_proto_version = -1;
static int hf_ieee80211_fc_frame_type = -1;
static int hf_ieee80211_fc_frame_subtype = -1;
+static int hf_ieee80211_fc_frame_extension = -1;
static int hf_ieee80211_fc_frame_type_subtype = -1;
static int hf_ieee80211_fc_flags = -1;
@@ -2755,6 +3108,7 @@ static int hf_ieee80211_reassembled_in = -1;
static int hf_ieee80211_reassembled_length = -1;
static int proto_wlan_mgt = -1;
+static int proto_wlan_ext = -1;
/* ************************************************************************* */
/* Fixed fields found in mgt frames */
@@ -2773,12 +3127,16 @@ static int hf_ieee80211_ff_status_code = -1; /* Status code
static int hf_ieee80211_ff_category_code = -1; /* 8 bit Category code */
static int hf_ieee80211_ff_action_code = -1; /* 8 bit Action code */
static int hf_ieee80211_ff_dialog_token = -1; /* 8 bit Dialog token */
+static int hf_ieee80211_ff_followup_dialog_token = -1;
static int hf_ieee80211_ff_wme_action_code = -1; /* Management notification action code */
static int hf_ieee80211_ff_wme_status_code = -1; /* Management notification setup response status code */
static int hf_ieee80211_ff_qos_action_code = -1;
static int hf_ieee80211_ff_dls_action_code = -1;
static int hf_ieee80211_ff_dst_mac_addr = -1; /* DLS destination MAC addressi */
static int hf_ieee80211_ff_src_mac_addr = -1; /* DLS source MAC addressi */
+static int hf_ieee80211_ff_req_ap_addr = -1;
+static int hf_ieee80211_ff_res_ap_addr = -1;
+static int hf_ieee80211_ff_check_beacon = -1;
static int hf_ieee80211_ff_dls_timeout = -1; /* DLS timeout value */
static int hf_ieee80211_ff_ft_action_code = -1; /* 8 bit FT Action code */
static int hf_ieee80211_ff_sta_address = -1;
@@ -2833,6 +3191,7 @@ static int hf_ieee80211_ff_tdls_action_code = -1;
static int hf_ieee80211_ff_target_channel = -1;
static int hf_ieee80211_ff_operating_class = -1;
static int hf_ieee80211_ff_wnm_action_code = -1;
+static int hf_ieee80211_ff_unprotected_wnm_action_code = -1;
static int hf_ieee80211_ff_key_data_length = -1;
static int hf_ieee80211_ff_key_data = -1;
static int hf_ieee80211_ff_wnm_notification_type = -1;
@@ -3130,6 +3489,11 @@ static int hf_ieee80211_mesh_config_cap_power_save_level = -1;
static int hf_ieee80211_mesh_form_info_num_of_peerings = -1;
static int hf_ieee80211_ff_public_action = -1;
+static int hf_ieee80211_ff_protected_public_action = -1;
+static int hf_ieee80211_ff_tod = -1;
+static int hf_ieee80211_ff_toa = -1;
+static int hf_ieee80211_ff_max_tod_err = -1;
+static int hf_ieee80211_ff_max_toa_err = -1;
/* ************************************************************************* */
/* Flags found in the capability field (fixed field) */
@@ -3870,6 +4234,7 @@ static int hf_ieee80211_rsn_cap_ptksa_replay_counter = -1;
static int hf_ieee80211_rsn_cap_gtksa_replay_counter = -1;
static int hf_ieee80211_rsn_cap_mfpr = -1;
static int hf_ieee80211_rsn_cap_mfpc = -1;
+static int hf_ieee80211_rsn_cap_jmr = -1;
static int hf_ieee80211_rsn_cap_peerkey = -1;
static int hf_ieee80211_rsn_pmkid_count = -1;
static int hf_ieee80211_rsn_pmkid_list = -1;
@@ -4045,6 +4410,7 @@ static int hf_ieee80211_tspec_delay_bound = -1;
static int hf_ieee80211_tspec_min_phy = -1;
static int hf_ieee80211_tspec_surplus = -1;
static int hf_ieee80211_tspec_medium = -1;
+static int hf_ieee80211_tspec_dmg = -1;
static int hf_ieee80211_ts_delay = -1;
static int hf_ieee80211_tclas_process = -1;
static int hf_ieee80211_tag_qos_cap_qos_info = -1;
@@ -4168,6 +4534,270 @@ static int hf_hs20_anqp_nai_hrq_length = -1;
static int hf_hs20_anqp_nai_hrq_realm_name = -1;
static int hf_hs20_anqp_oper_class_indic = -1;
+/* IEEE Std 802.11ad */
+static int hf_ieee80211_block_ack_RBUFCAP = -1;
+static int hf_ieee80211_cf_response_offset = -1;
+static int hf_ieee80211_ff_dynamic_allocation = -1;
+static int hf_ieee80211_ff_TID = -1;
+static int hf_ieee80211_ff_alloc_type = -1;
+static int hf_ieee80211_ff_src_aid = -1;
+static int hf_ieee80211_ff_dest_aid = -1;
+static int hf_ieee80211_ff_alloc_duration = -1;
+static int hf_ieee80211_ff_ssw = -1;
+static int hf_ieee80211_ff_ssw_direction = -1;
+static int hf_ieee80211_ff_ssw_cdown = -1;
+static int hf_ieee80211_ff_ssw_sector_id = -1;
+static int hf_ieee80211_ff_ssw_dmg_ant_id = -1;
+static int hf_ieee80211_ff_ssw_rxss_len = -1;
+static int hf_ieee80211_ff_bf = -1;
+static int hf_ieee80211_ff_bf_train = -1;
+static int hf_ieee80211_ff_bf_is_init = -1;
+static int hf_ieee80211_ff_bf_is_resp = -1;
+static int hf_ieee80211_ff_bf_num_sectors = -1;
+static int hf_ieee80211_ff_bf_num_rx_dmg_ants = -1;
+static int hf_ieee80211_ff_bf_rxss_len = -1;
+static int hf_ieee80211_ff_bf_rxss_rate = -1;
+static int hf_ieee80211_addr_nav_da = -1;
+static int hf_ieee80211_addr_nav_sa = -1;
+static int hf_ieee80211_ff_sswf = -1;
+static int hf_ieee80211_ff_sswf_num_rx_dmg_ants = -1;
+static int hf_ieee80211_ff_sswf_poll_required = -1;
+static int hf_ieee80211_ff_sswf_total_sectors = -1;
+static int hf_ieee80211_ff_brp = -1;
+static int hf_ieee80211_ff_brp_L_RX = -1;
+static int hf_ieee80211_ff_brp_TX_TRN_REQ = -1;
+static int hf_ieee80211_ff_brp_MID_REQ = -1;
+static int hf_ieee80211_ff_brp_BC_REQ = -1;
+static int hf_ieee80211_ff_brp_MID_GRANT = -1;
+static int hf_ieee80211_ff_brp_BC_GRANT = -1;
+static int hf_ieee80211_ff_brp_chan_FBCK_CAP = -1;
+static int hf_ieee80211_ff_brp_tx_sector = -1;
+static int hf_ieee80211_ff_brp_other_aid = -1;
+static int hf_ieee80211_ff_brp_tx_antenna = -1;
+static int hf_ieee80211_ff_blm = -1;
+static int hf_ieee80211_ff_blm_unit_index = -1;
+static int hf_ieee80211_ff_blm_maint_value = -1;
+static int hf_ieee80211_ff_blm_is_master = -1;
+static int hf_ieee80211_ff_bic = -1;
+static int hf_ieee80211_ff_bic_cc_present = -1;
+static int hf_ieee80211_ff_bic_discovery_mode = -1;
+static int hf_ieee80211_ff_bic_next_beacon = -1;
+static int hf_ieee80211_ff_bic_ati_present = -1;
+static int hf_ieee80211_ff_bic_abft_len = -1;
+static int hf_ieee80211_ff_bic_fss = -1;
+static int hf_ieee80211_ff_bic_is_resp = -1;
+static int hf_ieee80211_ff_bic_next_abft = -1;
+static int hf_ieee80211_ff_bic_frag_txss = -1;
+static int hf_ieee80211_ff_bic_txss_span = -1;
+static int hf_ieee80211_ff_bic_NBI_abft = -1;
+static int hf_ieee80211_ff_bic_abft_count = -1;
+static int hf_ieee80211_ff_bic_nabft = -1;
+static int hf_ieee80211_ff_bic_pcp = -1;
+static int hf_ieee80211_ff_dmg_params = -1;
+static int hf_ieee80211_ff_dmg_params_bss = -1;
+static int hf_ieee80211_ff_dmg_params_cbap_only = -1;
+static int hf_ieee80211_ff_dmg_params_cbap_src = -1;
+static int hf_ieee80211_ff_dmg_params_privacy = -1;
+static int hf_ieee80211_ff_dmg_params_policy = -1;
+static int hf_ieee80211_ff_cc = -1;
+static int hf_ieee80211_ff_cc_abft_resp_addr = -1;
+static int hf_ieee80211_ff_cc_sp_duration = -1;
+static int hf_ieee80211_ff_cc_cluster_id = -1;
+static int hf_ieee80211_ff_cc_role = -1;
+static int hf_ieee80211_ff_cc_max_mem = -1;
+static int hf_ieee80211_ff_dmg_action_code = -1;
+static int hf_ieee80211_ff_dmg_pwr_mgmt = -1;
+static int hf_ieee80211_ff_subject_address = -1;
+static int hf_ieee80211_ff_handover_reason = -1;
+static int hf_ieee80211_ff_handover_remaining_bi = -1;
+static int hf_ieee80211_ff_handover_result = -1;
+static int hf_ieee80211_ff_handover_reject_reason = -1;
+static int hf_ieee80211_ff_destination_reds_aid = -1;
+static int hf_ieee80211_ff_destination_aid = -1;
+static int hf_ieee80211_ff_realy_aid = -1;
+static int hf_ieee80211_ff_source_aid = -1;
+static int hf_ieee80211_ff_timing_offset = -1;
+static int hf_ieee80211_ff_sampling_frequency_offset = -1;
+static int hf_ieee80211_ff_relay_operation_type = -1;
+static int hf_ieee80211_ff_peer_sta_aid = -1;
+static int hf_ieee80211_ff_snr = -1;
+static int hf_ieee80211_ff_internal_angle = -1;
+static int hf_ieee80211_ff_recommend = -1;
+static int hf_ieee80211_ff_unprotected_dmg_action_code = -1;
+static int hf_ieee80211_ff_fst_action_code = -1;
+static int hf_ieee80211_ff_llt = -1;
+static int hf_ieee80211_ff_fsts_id = -1;
+static int hf_ieee80211_ff_mmpdu_len = -1;
+static int hf_ieee80211_ff_mmpdu_ctrl = -1;
+static int hf_ieee80211_ff_oct_mmpdu = -1;
+static int hf_ieee80211_ff_rcsi = -1;
+static int hf_ieee80211_ff_rcsi_aid = -1;
+static int hf_ieee80211_ff_band_id = -1;
+static int hf_ieee80211_tag_relay_support = -1;
+static int hf_ieee80211_tag_relay_use = -1;
+static int hf_ieee80211_tag_relay_permission = -1;
+static int hf_ieee80211_tag_AC_power = -1;
+static int hf_ieee80211_tag_relay_prefer = -1;
+static int hf_ieee80211_tag_duplex = -1;
+static int hf_ieee80211_tag_cooperation = -1;
+static int hf_ieee80211_tag_move = -1;
+static int hf_ieee80211_tag_size = -1;
+static int hf_ieee80211_tag_tbtt_offset = -1;
+static int hf_ieee80211_tag_bi_duration = -1;
+static int hf_ieee80211_tag_dmg_capa_sta_addr = -1;
+static int hf_ieee80211_tag_dmg_capa_aid = -1;
+static int hf_ieee80211_tag_reverse_direction = -1;
+static int hf_ieee80211_tag_hlts = -1;
+static int hf_ieee80211_tag_tpc = -1;
+static int hf_ieee80211_tag_spsh = -1;
+static int hf_ieee80211_tag_rx_antenna = -1;
+static int hf_ieee80211_tag_fast_link = -1;
+static int hf_ieee80211_tag_num_sectors = -1;
+static int hf_ieee80211_tag_rxss_length = -1;
+static int hf_ieee80211_tag_reciprocity = -1;
+static int hf_ieee80211_tag_max_ampdu_exp = -1;
+static int hf_ieee80211_tag_min_mpdu_sapcing = -1;
+static int hf_ieee80211_tag_ba_flow_control = -1;
+static int hf_ieee80211_tag_max_sc_rx_mcs = -1;
+static int hf_ieee80211_tag_max_ofdm_rx_mcs = -1;
+static int hf_ieee80211_tag_max_sc_tx_mcs = -1;
+static int hf_ieee80211_tag_max_ofdm_tx_mcs = -1;
+static int hf_ieee80211_tag_low_power_supported = -1;
+static int hf_ieee80211_tag_code_rate = -1;
+static int hf_ieee80211_tag_dtp = -1;
+static int hf_ieee80211_tag_appdu_supp = -1;
+static int hf_ieee80211_tag_heartbeat = -1;
+static int hf_ieee80211_tag_other_aid = -1;
+static int hf_ieee80211_tag_pattern_recip = -1;
+static int hf_ieee80211_tag_heartbeat_elapsed = -1;
+static int hf_ieee80211_tag_grant_ack_supp = -1;
+static int hf_ieee80211_tag_RXSSTxRate_supp = -1;
+static int hf_ieee80211_tag_pcp_tddti = -1;
+static int hf_ieee80211_tag_pcp_PSA = -1;
+static int hf_ieee80211_tag_pcp_handover = -1;
+static int hf_ieee80211_tag_pcp_max_assoc = -1;
+static int hf_ieee80211_tag_pcp_power_src = -1;
+static int hf_ieee80211_tag_pcp_decenter = -1;
+static int hf_ieee80211_tag_pcp_forwarding = -1;
+static int hf_ieee80211_tag_pcp_center = -1;
+static int hf_ieee80211_tag_PSRSI = -1;
+static int hf_ieee80211_tag_min_BHI_duration = -1;
+static int hf_ieee80211_tag_brdct_sta_info_dur = -1;
+static int hf_ieee80211_tag_assoc_resp_confirm_time = -1;
+static int hf_ieee80211_tag_min_pp_duration = -1;
+static int hf_ieee80211_tag_SP_idle_timeout = -1;
+static int hf_ieee80211_tag_max_lost_beacons = -1;
+static int hf_ieee80211_tag_type = -1;
+static int hf_ieee80211_tag_tap1 = -1;
+static int hf_ieee80211_tag_state1 = -1;
+static int hf_ieee80211_tag_tap2 = -1;
+static int hf_ieee80211_tag_state2 = -1;
+static int hf_ieee80211_tag_allocation_id = -1;
+static int hf_ieee80211_tag_allocation_type = -1;
+static int hf_ieee80211_tag_pseduo_static = -1;
+static int hf_ieee80211_tag_truncatable = -1;
+static int hf_ieee80211_tag_extendable = -1;
+static int hf_ieee80211_tag_pcp_active = -1;
+static int hf_ieee80211_tag_lp_sc_used = -1;
+static int hf_ieee80211_tag_src_aid = -1;
+static int hf_ieee80211_tag_dest_aid = -1;
+static int hf_ieee80211_tag_alloc_start = -1;
+static int hf_ieee80211_tag_alloc_block_duration = -1;
+static int hf_ieee80211_tag_num_blocks = -1;
+static int hf_ieee80211_tag_alloc_block_period = -1;
+static int hf_ieee80211_tag_aid = -1;
+static int hf_ieee80211_tag_cbap = -1;
+static int hf_ieee80211_tag_pp_avail = -1;
+static int hf_ieee80211_tag_next_ati_start_time = -1;
+static int hf_ieee80211_tag_next_ati_duration = -1;
+static int hf_ieee80211_tag_old_bssid = -1;
+static int hf_ieee80211_tag_new_pcp_addr = -1;
+static int hf_ieee80211_tag_bssid = -1;
+static int hf_ieee80211_tag_duplex_relay = -1;
+static int hf_ieee80211_tag_cooperation_relay = -1;
+static int hf_ieee80211_tag_tx_mode = -1;
+static int hf_ieee80211_tag_link_change_interval = -1;
+static int hf_ieee80211_tag_data_sensing_time = -1;
+static int hf_ieee80211_tag_first_period = -1;
+static int hf_ieee80211_tag_second_period = -1;
+static int hf_ieee80211_tag_initiator = -1;
+static int hf_ieee80211_tag_tx_train_res = -1;
+static int hf_ieee80211_tag_rx_train_res = -1;
+static int hf_ieee80211_tag_tx_trn_ok = -1;
+static int hf_ieee80211_tag_txss_fbck_req = -1;
+static int hf_ieee80211_tag_bs_fbck = -1;
+static int hf_ieee80211_tag_bs_fbck_antenna_id = -1;
+static int hf_ieee80211_tag_snr_requested = -1;
+static int hf_ieee80211_tag_channel_measurement_requested = -1;
+static int hf_ieee80211_tag_number_of_taps_requested = -1;
+static int hf_ieee80211_tag_sector_id_oreder_req = -1;
+static int hf_ieee80211_tag_snr_present = -1;
+static int hf_ieee80211_tag_channel_measurement_present = -1;
+static int hf_ieee80211_tag_tap_delay_present = -1;
+static int hf_ieee80211_tag_number_of_taps_present = -1;
+static int hf_ieee80211_tag_number_of_measurement = -1;
+static int hf_ieee80211_tag_sector_id_order_present = -1;
+static int hf_ieee80211_tag_number_of_beams = -1;
+static int hf_ieee80211_tag_mid_extension = -1;
+static int hf_ieee80211_tag_capability_request = -1;
+static int hf_ieee80211_tag_nextpcp_list = -1;
+static int hf_ieee80211_tag_nextpcp_token = -1;
+static int hf_ieee80211_tag_reamaining_BI = -1;
+static int hf_ieee80211_tag_request_token = -1;
+static int hf_ieee80211_tag_bi_start_time = -1;
+static int hf_ieee80211_tag_sleep_cycle = -1;
+static int hf_ieee80211_tag_num_awake_bis = -1;
+static int hf_ieee80211_tag_tspec_allocation_id = -1;
+static int hf_ieee80211_tag_tspec_allocation_type = -1;
+static int hf_ieee80211_tag_tspec_allocation_format = -1;
+static int hf_ieee80211_tag_tspec_pseduo_static = -1;
+static int hf_ieee80211_tag_tspec_truncatable = -1;
+static int hf_ieee80211_tag_tspec_extendable = -1;
+static int hf_ieee80211_tag_tspec_lp_sc_used = -1;
+static int hf_ieee80211_tag_tspec_up = -1;
+static int hf_ieee80211_tag_tspec_dest_aid = -1;
+static int hf_ieee80211_tag_tspec_allocation_period = -1;
+static int hf_ieee80211_tag_tspec_min_allocation = -1;
+static int hf_ieee80211_tag_tspec_max_allocation = -1;
+static int hf_ieee80211_tag_tspec_min_duration = -1;
+static int hf_ieee80211_tag_tspec_num_of_constraints = -1;
+static int hf_ieee80211_tag_tspec_tsconst_start_time = -1;
+static int hf_ieee80211_tag_tspec_tsconst_duration = -1;
+static int hf_ieee80211_tag_tspec_tsconst_period = -1;
+static int hf_ieee80211_tag_tspec_tsconst_interferer_mac = -1;
+static int hf_ieee80211_tag_channel_measurement_feedback_realtive_I = -1;
+static int hf_ieee80211_tag_channel_measurement_feedback_realtive_Q = -1;
+static int hf_ieee80211_tag_channel_measurement_feedback_tap_delay = -1;
+static int hf_ieee80211_tag_channel_measurement_feedback_sector_id = -1;
+static int hf_ieee80211_tag_channel_measurement_feedback_antenna_id = -1;
+static int hf_ieee80211_tag_awake_window = -1;
+static int hf_ieee80211_tag_addba_ext_no_frag = -1;
+static int hf_ieee80211_tag_multi_band_ctrl_sta_role = -1;
+static int hf_ieee80211_tag_multi_band_ctrl_addr_present = -1;
+static int hf_ieee80211_tag_multi_band_ctrl_cipher_present = -1;
+static int hf_ieee80211_tag_multi_band_oper_class = -1;
+static int hf_ieee80211_tag_multi_band_channel_number = -1;
+static int hf_ieee80211_tag_multi_band_tsf_offset = -1;
+static int hf_ieee80211_tag_multi_band_conn_ap = -1;
+static int hf_ieee80211_tag_multi_band_conn_pcp = -1;
+static int hf_ieee80211_tag_multi_band_conn_dls = -1;
+static int hf_ieee80211_tag_multi_band_conn_tdls = -1;
+static int hf_ieee80211_tag_multi_band_conn_ibss = -1;
+static int hf_ieee80211_tag_multi_band_fst_timeout = -1;
+static int hf_ieee80211_tag_multi_band_sta_mac = -1;
+static int hf_ieee80211_tag_activity = -1;
+static int hf_ieee80211_tag_dmg_link_adapt_mcs = -1;
+static int hf_ieee80211_tag_dmg_link_adapt_link_margin = -1;
+static int hf_ieee80211_tag_ref_timestamp = -1;
+static int hf_ieee80211_tag_switching_stream_non_qos = -1;
+static int hf_ieee80211_tag_switching_stream_param_num = -1;
+static int hf_ieee80211_tag_switching_stream_old_tid = -1;
+static int hf_ieee80211_tag_switching_stream_old_direction = -1;
+static int hf_ieee80211_tag_switching_stream_new_tid = -1;
+static int hf_ieee80211_tag_switching_stream_new_direction = -1;
+static int hf_ieee80211_tag_switching_stream_new_valid_id = -1;
+static int hf_ieee80211_tag_switching_stream_llt_type = -1;
+
/* ************************************************************************* */
/* Protocol trees */
/* ************************************************************************* */
@@ -4356,6 +4986,22 @@ static expert_field ei_ieee80211_missing_data = EI_INIT;
static expert_field ei_ieee80211_rsn_pmkid_count = EI_INIT;
static expert_field ei_ieee80211_fc_retry = EI_INIT;
static expert_field ei_ieee80211_tag_wnm_sleep_mode_no_key_data = EI_INIT;
+static expert_field ei_ieee80211_dmg_subtype = EI_INIT;
+
+/* 802.11ad trees */
+static gint ett_dynamic_alloc_tree = -1;
+static gint ett_ssw_tree = -1;
+static gint ett_bf_tree = -1;
+static gint ett_sswf_tree = -1;
+static gint ett_brp_tree = -1;
+static gint ett_blm_tree = -1;
+static gint ett_bic_tree = -1;
+static gint ett_dmg_params_tree = -1;
+static gint ett_cc_tree = -1;
+static gint ett_rcsi_tree = -1;
+static gint ett_80211_ext = -1;
+static gint ett_allocation_tree = -1;
+static gint ett_sta_info = -1;
static const fragment_items frag_items = {
&ett_fragment,
@@ -4416,6 +5062,7 @@ static const value_string timeout_int_types[] = {
{1, "Reassociation deadline interval (TUs)"},
{2, "Key lifetime interval (seconds)"},
{3, "Association Comeback time (TUs)"},
+ {4, "Time to start (TUs)"},
{0, NULL}
};
@@ -4479,6 +5126,27 @@ beacon_interval_base_custom(gchar *result, guint32 beacon_interval)
g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (temp_double * 1024 / 1000000));
}
+static void
+allocation_duration_base_custom(gchar *result, guint32 allocation_duration)
+{
+ double temp_double;
+
+ temp_double = (double)allocation_duration;
+ g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (temp_double / 1000000));
+}
+
+static void
+extra_one_base_custom(gchar *result, guint32 value)
+{
+ g_snprintf(result, ITEM_LABEL_LENGTH, "%d", value+1);
+}
+
+static void
+extra_one_mul_two_base_custom(gchar *result, guint32 value)
+{
+ g_snprintf(result, ITEM_LABEL_LENGTH, "%d", (value+1)*2);
+}
+
/* ************************************************************************* */
/* Return the length of the current header (in bytes) */
/* ************************************************************************* */
@@ -4516,6 +5184,20 @@ find_header_length (guint16 fcf, guint16 ctrl_fcf, gboolean is_ht)
len += 2;
return len;
+ case CTRL_POLL:
+ return len + 18;
+ case CTRL_SPR:
+ case CTRL_GRANT:
+ case CTRL_GRANT_ACK:
+ return len + 23;
+ case CTRL_DMG_CTS:
+ return len + 16;
+ case CTRL_DMG_DTS:
+ case CTRL_SSW:
+ return len + 22;
+ case CTRL_SSW_FEEDBACK:
+ case CTRL_SSW_ACK:
+ return len + 24;
case CTRL_RTS:
case CTRL_PS_POLL:
case CTRL_CFP_END:
@@ -4538,6 +5220,8 @@ find_header_length (guint16 fcf, guint16 ctrl_fcf, gboolean is_ht)
}
return len;
+ case EXTENSION_FRAME:
+ return 10;
default:
return 4; /* XXX */
@@ -4554,7 +5238,7 @@ find_header_length (guint16 fcf, guint16 ctrl_fcf, gboolean is_ht)
* frame is transmitted by a mesh STA and the Mesh Control Present subfield of
* the QoS Control field is 1)...
*
- * We need a stateful sniffer for that. For now, use heuristics.
+ * We need a statefull sniffer for that. For now, use heuristics.
*
* Notably, only mesh data frames contain the Mesh Control field in the header.
* Other frames that contain mesh control (i.e., multihop action frames) have
@@ -6266,6 +6950,14 @@ add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int
}
static guint
+add_ff_followup_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_followup_dialog_token, tvb, offset, 1,
+ ENC_LITTLE_ENDIAN);
+ return 1;
+}
+
+static guint
add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
{
proto_tree_add_item(tree, hf_ieee80211_ff_wme_action_code, tvb, offset, 1,
@@ -6424,6 +7116,62 @@ add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int
}
static guint
+add_ff_req_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_req_ap_addr, tvb, offset, 6,
+ ENC_NA);
+ return 6;
+}
+
+static guint
+add_ff_res_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_res_ap_addr, tvb, offset, 6,
+ ENC_NA);
+ return 6;
+}
+
+static guint
+add_ff_check_beacon(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_check_beacon, tvb, offset, 1,
+ ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_tod, tvb, offset, 4,
+ ENC_NA);
+ return 4;
+}
+
+static guint
+add_ff_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_toa, tvb, offset, 4,
+ ENC_NA);
+ return 4;
+}
+
+static guint
+add_ff_max_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_max_tod_err, tvb, offset, 1,
+ ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_max_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_max_toa_err, tvb, offset, 1,
+ ENC_NA);
+ return 1;
+}
+
+static guint
add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
{
proto_tree_add_item(tree, hf_ieee80211_ff_dls_timeout, tvb, offset, 2,
@@ -6615,6 +7363,22 @@ add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, i
}
static guint
+add_ff_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_dmg_action_code, tvb, offset, 1,
+ ENC_LITTLE_ENDIAN);
+ return 1;
+}
+
+static guint
+add_ff_dmg_pwr_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_dmg_pwr_mgmt, tvb, offset, 1,
+ ENC_LITTLE_ENDIAN);
+ return 1;
+}
+
+static guint
add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
{
proto_item *psmp_item;
@@ -6710,6 +7474,14 @@ add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, i
}
static guint
+add_ff_ppa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_protected_public_action, tvb, offset, 1,
+ ENC_BIG_ENDIAN);
+ return 1;
+}
+
+static guint
add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
{
switch (tvb_get_guint8(tvb, offset + 1)) {
@@ -6737,28 +7509,28 @@ static guint
add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
{
switch (tvb_get_guint8(tvb, offset + 1)) {
- case SM_ACTION_ADDTS_REQUEST:
+ case QOS_ACTION_ADDTS_REQUEST:
add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_DIALOG_TOKEN);
return 3;
- case SM_ACTION_ADDTS_RESPONSE:
+ case QOS_ACTION_ADDTS_RESPONSE:
add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_DIALOG_TOKEN);
add_fixed_field(tree, tvb, pinfo, offset + 3, FIELD_STATUS_CODE);
return 5;
- case SM_ACTION_DELTS:
+ case QOS_ACTION_DELTS:
add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_QOS_TS_INFO);
add_fixed_field(tree, tvb, pinfo, offset + 5, FIELD_REASON_CODE);
return 7;
- case SM_ACTION_QOS_SCHEDULE:
+ case QOS_ACTION_SCHEDULE:
add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE);
return 2;
- case SM_ACTION_QOS_MAP_CONFIGURE:
+ case QOS_ACTION_MAP_CONFIGURE:
add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE);
return 2;
@@ -6772,7 +7544,7 @@ static guint
add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
{
switch (tvb_get_guint8(tvb, offset + 1)) {
- case SM_ACTION_DLS_REQUEST:
+ case DLS_ACTION_REQUEST:
add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_DLS_ACTION_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_DST_MAC_ADDR);
@@ -6780,7 +7552,7 @@ add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offse
add_fixed_field(tree, tvb, pinfo, offset + 14, FIELD_CAP_INFO);
add_fixed_field(tree, tvb, pinfo, offset + 16, FIELD_DLS_TIMEOUT);
return 18;
- case SM_ACTION_DLS_RESPONSE:
+ case DLS_ACTION_RESPONSE:
add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_DLS_ACTION_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_STATUS_CODE);
@@ -6790,7 +7562,7 @@ add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offse
add_fixed_field(tree, tvb, pinfo, offset + 16, FIELD_CAP_INFO);
}
return 16;
- case SM_ACTION_DLS_TEARDOWN:
+ case DLS_ACTION_TEARDOWN:
add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_DLS_ACTION_CODE);
add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_DST_MAC_ADDR);
@@ -6837,21 +7609,15 @@ add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int
}
static guint
-add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+add_ff_action_public_fields(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, guint8 code, guint start)
{
- guint start = offset;
guint32 oui;
- guint8 code;
guint8 subtype;
gboolean anqp;
guint8 dialog_token;
guint8 frag;
gboolean more;
- offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
- code = tvb_get_guint8(tvb, offset);
- offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PA_ACTION_CODE);
-
switch (code) {
case PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT:
offset += add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
@@ -6910,12 +7676,42 @@ add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int of
offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO);
break;
+ case PA_QAB_REQUEST:
+ case PA_QAB_RESPONSE:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REQ_AP_ADDR);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RES_AP_ADDR);
+ break;
}
return offset - start; /* Size of fixed fields */
}
static guint
+add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+ guint8 code;
+ guint start = offset;
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+ code = tvb_get_guint8(tvb, offset);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PA_ACTION_CODE);
+ offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code, start);
+ return offset - start;
+}
+
+static guint
+add_ff_action_protected_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+ guint8 code;
+ guint start = offset;
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+ code = tvb_get_guint8(tvb, offset);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PPA_ACTION_CODE);
+ offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code, start);
+ return offset - start;
+}
+
+static guint
add_ff_action_radio_measurement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
{
guint start = offset;
@@ -7217,6 +8013,34 @@ add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offse
}
static guint
+add_ff_action_unprotected_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+ guint8 code;
+ guint start = offset;
+
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+ code = tvb_get_guint8(tvb, offset);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_UNPROTECTED_WNM_ACTION_CODE);
+
+ switch (code) {
+ case UNPROTECTED_WNM_TIM:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CHECK_BEACON);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TIMESTAMP);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TOD);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TOA);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MAX_TOD_ERR);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MAX_TOA_ERR);
+ break;
+ case UNPROTECTED_WNM_TIMING_MEASUREMENT:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FOLLOWUP_DIALOG_TOKEN);
+ break;
+ }
+
+ return offset - start; /* Size of fixed fields */
+}
+
+static guint
add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
{
guint8 code;
@@ -7386,48 +8210,6 @@ add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset
}
static guint
-add_ff_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
-{
- switch (tvb_get_guint8(tvb, offset) & 0x7f) {
- case CAT_SPECTRUM_MGMT:
- return add_ff_action_spectrum_mgmt(tree, tvb, pinfo, offset);
- case CAT_QOS:
- return add_ff_action_qos(tree, tvb, pinfo, offset);
- case CAT_DLS:
- return add_ff_action_dls(tree, tvb, pinfo, offset);
- case CAT_BLOCK_ACK:
- return add_ff_action_block_ack(tree, tvb, pinfo, offset);
- case CAT_PUBLIC:
- return add_ff_action_public(tree, tvb, pinfo, offset);
- case CAT_RADIO_MEASUREMENT:
- return add_ff_action_radio_measurement(tree, tvb, pinfo, offset);
- case CAT_FAST_BSS_TRANSITION:
- return add_ff_action_fast_bss_transition(tree, tvb, pinfo, offset);
- case CAT_SA_QUERY:
- return add_ff_action_sa_query(tree, tvb, pinfo, offset);
- case CAT_MESH:
- return add_ff_action_mesh(tree, tvb, pinfo, offset);
- case CAT_MULTIHOP:
- return add_ff_action_multihop(tree, tvb, pinfo, offset);
- case CAT_SELF_PROTECTED:
- return add_ff_action_self_protected(tree, tvb, pinfo, offset);
- case CAT_WNM:
- return add_ff_action_wnm(tree, tvb, pinfo, offset);
- case CAT_TDLS:
- return add_ff_action_tdls(tree, tvb, pinfo, offset);
- case CAT_MGMT_NOTIFICATION: /* Management notification frame */
- return add_ff_action_mgmt_notification(tree, tvb, pinfo, offset);
- case CAT_VENDOR_SPECIFIC: /* Vendor Specific Category */
- return add_ff_action_vendor_specific(tree, tvb, pinfo, offset);
- case CAT_HT:
- return add_ff_action_ht(tree, tvb, pinfo, offset);
- default:
- add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
- return 1;
- }
-}
-
-static guint
add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
{
proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1,
@@ -7527,6 +8309,25 @@ add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int
}
static guint
+add_ff_unprotected_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+ guint8 code;
+
+ code = tvb_get_guint8(tvb, offset);
+ col_set_str(pinfo->cinfo, COL_INFO,
+ val_to_str_ext_const(code, &unprotected_wnm_action_codes_ext, "Unknown Unprotected WNM Action"));
+ proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_wnm_action_code, tvb, offset, 1, ENC_BIG_ENDIAN);
+ return 1;
+}
+
+static guint
+add_ff_unprotected_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_dmg_action_code, tvb, offset, 1, ENC_NA);
+ return 1;
+}
+
+static guint
add_ff_key_data_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
{
proto_tree_add_item(tree, hf_ieee80211_ff_key_data_length, tvb, offset, 2,
@@ -7639,6 +8440,577 @@ add_ff_rm_rsni(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offs
return 1;
}
+static guint
+add_ff_beacon_interval_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_item *bic_item = proto_tree_add_item(tree, hf_ieee80211_ff_bic, tvb, offset, 6, ENC_LITTLE_ENDIAN);
+ proto_tree *bic_tree = proto_item_add_subtree(bic_item, ett_bic_tree);
+
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_cc_present, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_discovery_mode, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_next_beacon, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_ati_present, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_abft_len, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_fss, tvb, offset+1, 1, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_is_resp, tvb, offset+1, 1, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_next_abft, tvb, offset+1, 2, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_frag_txss, tvb, offset+2, 1, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_txss_span, tvb, offset+2, 2, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_NBI_abft, tvb, offset+3, 1, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_abft_count, tvb, offset+3, 2, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_nabft, tvb, offset+4, 2, ENC_NA);
+ proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_pcp, tvb, offset+5, 1, ENC_NA);
+ return 6;
+}
+
+static guint
+add_ff_beamforming_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ gboolean isGrant = *((gboolean*)(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY)));
+ proto_item *bf_item = proto_tree_add_item(tree, hf_ieee80211_ff_bf, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ proto_tree *bf_tree = proto_item_add_subtree(bf_item, ett_bf_tree);
+ guint16 bf_field = tvb_get_letohs(tvb, offset);
+ gboolean isInit = (bf_field & 0x2) >> 1;
+ gboolean isResp = (bf_field & 0x4) >> 2;
+ proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_train, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_is_init, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_is_resp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ if((isInit==TRUE) && (isResp==TRUE) && isGrant) {
+ proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_num_sectors, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_num_rx_dmg_ants, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ } else {
+ proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_rxss_len, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_rxss_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ }
+ return 2;
+}
+
+static guint
+add_ff_dynamic_allocation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_item *dynamic_alloc_item = proto_tree_add_item(tree, hf_ieee80211_ff_dynamic_allocation, tvb, offset, 5, ENC_LITTLE_ENDIAN);
+ proto_tree *dynamic_alloc_tree = proto_item_add_subtree(dynamic_alloc_item, ett_dynamic_alloc_tree);
+ proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_TID, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_alloc_type, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_src_aid, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_dest_aid, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_alloc_duration, tvb, offset, 1, ENC_NA);
+ return 5;
+}
+
+static guint
+add_ff_beamformed_link(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_item *blm_item = proto_tree_add_item(tree, hf_ieee80211_ff_blm, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ proto_tree *blm_tree = proto_item_add_subtree(blm_item, ett_blm_tree);
+ proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_unit_index, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_maint_value, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_is_master, tvb, offset, 1, ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_BRP_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_item *brp_req_item = proto_tree_add_item(tree, hf_ieee80211_ff_brp, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ proto_tree *brp_req_tree = proto_item_add_subtree(brp_req_item, ett_brp_tree);
+
+ proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_L_RX, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_TX_TRN_REQ, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_MID_REQ, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_BC_REQ, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_MID_GRANT, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_BC_GRANT, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_chan_FBCK_CAP, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_tx_sector, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_other_aid, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_tx_antenna, tvb, offset, 4, ENC_NA);
+ return 4;
+}
+
+static guint
+add_ff_sector_sweep_feedback(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_item *sswf_item = proto_tree_add_item(tree, hf_ieee80211_ff_sswf, tvb, offset, 3, ENC_LITTLE_ENDIAN);
+ proto_tree *sswf_tree = proto_item_add_subtree(sswf_item, ett_sswf_tree);
+
+ proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_total_sectors, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_num_rx_dmg_ants, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_poll_required, tvb, offset, 3, ENC_NA);
+ return 3;
+}
+
+static guint
+add_ff_sector_sweep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_item *ssw_item = proto_tree_add_item(tree, hf_ieee80211_ff_ssw, tvb, offset, 3, ENC_LITTLE_ENDIAN);
+ proto_tree *ssw_tree = proto_item_add_subtree(ssw_item, ett_ssw_tree);
+
+ proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_direction, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_cdown, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_sector_id, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_dmg_ant_id, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_rxss_len, tvb, offset, 3, ENC_NA);
+ return 3;
+}
+
+static guint
+add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_item *dmg_params_item = proto_tree_add_item(tree, hf_ieee80211_ff_dmg_params, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ proto_tree *dmg_params_tree = proto_item_add_subtree(dmg_params_item, ett_dmg_params_tree);
+
+ proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_bss, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_cbap_only, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_cbap_src, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_privacy, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_policy, tvb, offset, 1, ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_cc_field(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean dis)
+{
+ proto_item *cc_item = proto_tree_add_item(tree, hf_ieee80211_ff_cc, tvb, offset, 8, ENC_LITTLE_ENDIAN);
+ proto_tree *cc_tree = proto_item_add_subtree(cc_item, ett_cc_tree);
+ guint64 cc_field;
+ if(dis) {
+ proto_tree_add_item(cc_tree, hf_ieee80211_ff_cc_abft_resp_addr, tvb, offset, 6, ENC_NA);
+ } else {
+ cc_field = tvb_get_letoh64(tvb, offset);
+ proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_sp_duration, tvb, offset, 1, cc_field & 0xff);
+ proto_tree_add_uint64(cc_tree, hf_ieee80211_ff_cc_cluster_id, tvb, offset+1, 6, (cc_field & 0x00ffffffffffff00) >> 8);
+ proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_role, tvb, offset+7, 1, (cc_field & 0x0300000000000000) >> 56);
+ proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_max_mem, tvb, offset+7, 1, (cc_field & 0x7c00000000000000) >> 58);
+ }
+ return 8;
+}
+
+
+static guint
+add_ff_band_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_band_id, tvb, offset, 1, ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_subject_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_subject_address, tvb, offset, 6, ENC_NA);
+ return 6;
+}
+
+static guint
+add_ff_handover_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_handover_reason, tvb, offset, 1, ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_handover_remaining_bi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_handover_remaining_bi, tvb, offset, 1, ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_handover_result(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_handover_result, tvb, offset, 1, ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_handover_reject_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_handover_reject_reason, tvb, offset, 1, ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_destination_reds_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_destination_reds_aid, tvb, offset, 2, ENC_NA);
+ return 2;
+}
+
+static guint
+add_ff_destination_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_destination_aid, tvb, offset, 2, ENC_NA);
+ return 2;
+}
+
+static guint
+add_ff_realy_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_realy_aid, tvb, offset, 2, ENC_NA);
+ return 2;
+}
+
+static guint
+add_ff_source_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_source_aid, tvb, offset, 2, ENC_NA);
+ return 2;
+}
+
+static guint
+add_ff_timing_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_timing_offset, tvb, offset, 2, ENC_NA);
+ return 2;
+}
+
+static guint
+add_ff_sampling_frequency_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_sampling_frequency_offset, tvb, offset, 2, ENC_NA);
+ return 2;
+}
+
+static guint
+add_ff_relay_operation_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_relay_operation_type, tvb, offset, 1, ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_fst_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_fst_action_code, tvb, offset, 1, ENC_NA);
+ return 1;
+}
+
+static guint
+add_ff_llt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_llt, tvb, offset, 4, ENC_NA);
+ return 4;
+}
+
+static guint
+add_ff_fsts_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_tree_add_item(tree, hf_ieee80211_ff_fsts_id, tvb, offset, 4, ENC_NA);
+ return 4;
+}
+
+static guint
+add_ff_oct_mmpdu(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ guint start = offset;
+ guint8 len = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_len, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_ctrl, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_ff_oct_mmpdu, tvb, offset, len, ENC_NA);
+ offset += len;
+ return offset - start;
+}
+
+static void
+add_tag_relay_capabilities(packet_info *pinfo, proto_item *item, gint32 tag_len, proto_tree *tree, tvbuff_t *tvb, gint32 *offset) {
+
+ if (tag_len < 2) {
+ expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length, "Tag length must be 2");
+ return;
+ }
+
+ *offset += 2;
+
+ proto_tree_add_item(tree, hf_ieee80211_tag_relay_support, tvb, *offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_relay_use, tvb, *offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_relay_permission, tvb, *offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_AC_power, tvb, *offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_relay_prefer, tvb, *offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_duplex, tvb, *offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_cooperation, tvb, *offset, 1, ENC_NA);
+ *offset += 2;
+ return;
+}
+
+static guint
+add_ff_relay_capable_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+ proto_item *rcsi_item = proto_tree_add_item(tree, hf_ieee80211_ff_rcsi, tvb, offset, 3, ENC_LITTLE_ENDIAN);
+ proto_tree *rcsi_tree = proto_item_add_subtree(rcsi_item, ett_rcsi_tree);
+ proto_tree_add_item(rcsi_tree, hf_ieee80211_ff_rcsi_aid, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ add_tag_relay_capabilities(pinfo, rcsi_item, 2, rcsi_tree, tvb, &offset);
+ return 3;
+}
+
+
+static void
+dissect_ieee80211_extension(guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+ proto_item *ti;
+ proto_tree *ext_tree;
+ proto_tree *fixed_tree;
+ proto_tree *tagged_tree;
+
+ int offset = 0;
+ int tagged_parameter_tree_len;
+
+ ti = proto_tree_add_item (tree, proto_wlan_ext, tvb, offset, -1, ENC_NA);
+ ext_tree = proto_item_add_subtree (ti, ett_80211_ext);
+
+ switch (COMPOSE_FRAME_TYPE(fcf))
+ {
+ case EXTENSION_DMG_BEACON:
+ {
+ gboolean cc, dis;
+ guint16 bic_field;
+ fixed_tree = get_fixed_parameter_tree (ext_tree, tvb, offset, 20);
+ offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_TIMESTAMP);
+ offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_SECTOR_SWEEP);
+ offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_BEACON_INTERVAL);
+ bic_field = tvb_get_letohs(tvb, offset);
+ cc = (bic_field & 0x1);
+ dis = (bic_field & 0x2) >> 1;
+ offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_BEACON_INTERVAL_CTRL);
+ offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_DMG_PARAMETERS);
+ if(cc) {
+ offset += add_ff_cc_field(fixed_tree,tvb, offset, dis);
+ }
+ tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
+ tagged_tree = get_tagged_parameter_tree (ext_tree, tvb, offset, tagged_parameter_tree_len);
+ ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_DMG_BEACON);
+ break;
+ }
+ }
+}
+
+static guint
+add_ff_action_unprotected_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+ guint8 code;
+ guint start = offset;
+
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+ code = tvb_get_guint8(tvb, offset);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_UNPROTECTED_DMG_ACTION_CODE);
+ switch (code) {
+ case UNPROTECTED_DMG_ANNOUNCE:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TIMESTAMP);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BEACON_INTERVAL);
+ break;
+ case UNPROTECTED_DMG_BRP:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BRP_REQ);
+ break;
+ }
+ return offset - start;
+}
+
+static guint
+add_ff_action_fst(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+ guint8 code;
+ guint start = offset;
+
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+ code = tvb_get_guint8(tvb, offset);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FST_ACTION_CODE);
+ switch (code) {
+ case FST_SETUP_REQUEST:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_LLT);
+ break;
+ case FST_SETUP_RESPONSE:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
+ break;
+ case FST_TEAR_DOWN:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FSTS_ID);
+ break;
+ case FST_ACK_REQUEST:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FSTS_ID);
+ break;
+ case FST_ACK_RESPONSE:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_FSTS_ID);
+ break;
+ case FST_ON_CHANNEL_TUNNEL_REQUEST:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_OCT_MMPDU);
+ break;
+ }
+ return offset - start;
+}
+
+static guint
+add_ff_action_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+ guint8 code;
+ guint start = offset;
+ int left_offset;
+
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+ code = tvb_get_guint8(tvb, offset);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DMG_ACTION_CODE);
+ switch (code) {
+ case DMG_ACTION_PWR_SAVE_CONFIG_REQ:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DMG_PWR_MGMT);
+ break;
+ case DMG_ACTION_PWR_SAVE_CONFIG_RES:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
+ break;
+ case DMG_ACTION_INFO_REQ:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SUBJECT_ADDRESS);
+ break;
+ case DMG_ACTION_INFO_RES:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SUBJECT_ADDRESS);
+ break;
+ case DMG_ACTION_HANDOVER_REQ:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HANDOVER_REASON);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HANDOVER_REMAINING_BI);
+ break;
+ case DMG_ACTION_HANDOVER_RES:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HANDOVER_RESULT);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HANDOVER_REJECT_REASON);
+ break;
+ case DMG_ACTION_DTP_REQ:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ break;
+ case DMG_ACTION_DTP_RES:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ break;
+ case DMG_ACTION_RELAY_SEARCH_REQ:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DESTINATION_REDS_AID);
+ break;
+ case DMG_ACTION_RELAY_SEARCH_RES:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
+ break;
+ case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ break;
+ case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ left_offset =
+ tvb_reported_length_remaining(tvb, offset);
+ while(left_offset > 0) {
+ proto_tree_add_item(tree, hf_ieee80211_ff_peer_sta_aid, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset+1, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_ff_internal_angle, tvb, offset+2, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_ff_recommend, tvb, offset+2, 1, ENC_NA);
+ /* another reserved byte */
+ offset += 4;
+ left_offset -= 4;
+ }
+ break;
+ case DMG_ACTION_RLS_REQ:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DESTINATION_AID);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REALY_AID);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SOURCE_AID);
+ break;
+ case DMG_ACTION_RLS_RES:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ break;
+ case DMG_ACTION_RLS_ANNOUNCE:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DESTINATION_AID);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REALY_AID);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SOURCE_AID);
+ break;
+ case DMG_ACTION_RLS_TEARDOWN:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DESTINATION_AID);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REALY_AID);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SOURCE_AID);
+ break;
+ case DMG_ACTION_RELAY_ACK_REQ:
+ case DMG_ACTION_RELAY_ACK_RES:
+ break;
+ case DMG_ACTION_TPA_REQ:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TIMING_OFFSET);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SAMPLING_FREQUENCY_OFFSET);
+ break;
+ case DMG_ACTION_TPA_RES:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ break;
+ case DMG_ACTION_TPA_REP:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
+ break;
+ case DMG_ACTION_ROC_REQ:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_RELAY_OPERATION_TYPE);
+ break;
+ case DMG_ACTION_ROC_RES:
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+ offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
+ break;
+ }
+ return offset - start;
+}
+
+static guint
+add_ff_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+ switch (tvb_get_guint8(tvb, offset) & 0x7f) {
+ case CAT_SPECTRUM_MGMT: /* 0 */
+ return add_ff_action_spectrum_mgmt(tree, tvb, pinfo, offset);
+ case CAT_QOS: /* 1 */
+ return add_ff_action_qos(tree, tvb, pinfo, offset);
+ case CAT_DLS: /* 2 */
+ return add_ff_action_dls(tree, tvb, pinfo, offset);
+ case CAT_BLOCK_ACK: /* 3 */
+ return add_ff_action_block_ack(tree, tvb, pinfo, offset);
+ case CAT_PUBLIC: /* 4 */
+ return add_ff_action_public(tree, tvb, pinfo, offset);
+ case CAT_RADIO_MEASUREMENT: /* 5 */
+ return add_ff_action_radio_measurement(tree, tvb, pinfo, offset);
+ case CAT_FAST_BSS_TRANSITION: /* 6 */
+ return add_ff_action_fast_bss_transition(tree, tvb, pinfo, offset);
+ case CAT_HT: /* 7 */
+ return add_ff_action_ht(tree, tvb, pinfo, offset);
+ case CAT_SA_QUERY: /* 8 */
+ return add_ff_action_sa_query(tree, tvb, pinfo, offset);
+ case CAT_PUBLIC_PROTECTED: /* 9 */
+ return add_ff_action_protected_public(tree, tvb, pinfo, offset);
+ case CAT_WNM: /* 10 */
+ return add_ff_action_wnm(tree, tvb, pinfo, offset);
+ case CAT_UNPROTECTED_WNM: /* 11 */
+ return add_ff_action_unprotected_wnm(tree, tvb, pinfo, offset);
+ case CAT_TDLS: /* 12 */
+ return add_ff_action_tdls(tree, tvb, pinfo, offset);
+ case CAT_MESH: /* 13 */
+ return add_ff_action_mesh(tree, tvb, pinfo, offset);
+ case CAT_MULTIHOP: /* 14 */
+ return add_ff_action_multihop(tree, tvb, pinfo, offset);
+ case CAT_SELF_PROTECTED: /* 15 */
+ return add_ff_action_self_protected(tree, tvb, pinfo, offset);
+ case CAT_DMG: /* 16 */
+ return add_ff_action_dmg(tree, tvb, pinfo, offset);
+ case CAT_MGMT_NOTIFICATION: /* Management notification frame - 17 */
+ return add_ff_action_mgmt_notification(tree, tvb, pinfo, offset);
+ case CAT_FAST_SESSION_TRANSFER: /* 18 */
+ return add_ff_action_fst(tree, tvb, pinfo, offset);
+/* case CAT_ROBUST_AV_STREAMING: 19 */
+/* return add_ff_action_robust_av_streaming(tree, tvb, pinfo, offset); */
+ case CAT_UNPROTECTED_DMG: /* 20 */
+ return add_ff_action_unprotected_dmg(tree, tvb, pinfo, offset);
+/* case CAT_VENDOR_SPECIFIC_PROTECTED: Vendor Specific Protected Category - 126 */
+/* return add_ff_action_vendor_specific_protected(tree, tvb, pinfo, offset);*/
+ case CAT_VENDOR_SPECIFIC: /* Vendor Specific Protected Category - 127 */
+ return add_ff_action_vendor_specific(tree, tvb, pinfo, offset);
+ default:
+ add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+ return 1;
+ }
+}
+
#define FF_FIELD(f, func) { FIELD_ ## f, add_ff_ ## func }
static const struct ieee80211_fixed_field_dissector ff_dissectors[] = {
@@ -7655,6 +9027,7 @@ static const struct ieee80211_fixed_field_dissector ff_dissectors[] = {
FF_FIELD(CATEGORY_CODE , category_code),
FF_FIELD(ACTION_CODE , action_code),
FF_FIELD(DIALOG_TOKEN , dialog_token),
+ FF_FIELD(FOLLOWUP_DIALOG_TOKEN , followup_dialog_token),
FF_FIELD(WME_ACTION_CODE , wme_action_code),
FF_FIELD(WME_STATUS_CODE , wme_status_code),
FF_FIELD(QOS_ACTION_CODE , qos_action_code),
@@ -7692,6 +9065,7 @@ static const struct ieee80211_fixed_field_dissector ff_dissectors[] = {
FF_FIELD(PSMP_STA_INFO , psmp_sta_info),
FF_FIELD(SCHEDULE_INFO , schedule_info),
FF_FIELD(PA_ACTION_CODE , pa_action_code),
+ FF_FIELD(PPA_ACTION_CODE , ppa_action_code),
FF_FIELD(ACTION , action),
FF_FIELD(FT_ACTION_CODE , ft_action_code),
FF_FIELD(STA_ADDRESS , sta_address),
@@ -7704,6 +9078,7 @@ static const struct ieee80211_fixed_field_dissector ff_dissectors[] = {
FF_FIELD(TARGET_CHANNEL , target_channel),
FF_FIELD(OPERATING_CLASS , operating_class),
FF_FIELD(WNM_ACTION_CODE , wnm_action_code),
+ FF_FIELD(UNPROTECTED_WNM_ACTION_CODE , unprotected_wnm_action_code),
FF_FIELD(KEY_DATA_LENGTH , key_data_length),
FF_FIELD(WNM_NOTIFICATION_TYPE , wnm_notification_type),
FF_FIELD(RM_ACTION_CODE , rm_action_code),
@@ -7716,7 +9091,42 @@ static const struct ieee80211_fixed_field_dissector ff_dissectors[] = {
FF_FIELD(RM_TX_ANTENNA_ID , rm_tx_antenna_id),
FF_FIELD(RM_RCPI , rm_rcpi),
FF_FIELD(RM_RSNI , rm_rsni),
-
+ FF_FIELD(RELAY_CAPABLE_STA_INFO , relay_capable_sta_info),
+ FF_FIELD(BAND_ID , band_id),
+ FF_FIELD(DMG_PARAMETERS , dmg_params),
+ FF_FIELD(SECTOR_SWEEP , sector_sweep),
+ FF_FIELD(DYNAMIC_ALLOCATION , dynamic_allocation),
+ FF_FIELD(SECTOR_SWEEP_FB , sector_sweep_feedback),
+ FF_FIELD(BRP_REQ , BRP_request),
+ FF_FIELD(BEAMFORMED_LINK_MAINTAINCE , beamformed_link),
+ FF_FIELD(BEAMFORMING_CTRL , beamforming_ctrl),
+ FF_FIELD(BEACON_INTERVAL_CTRL , beacon_interval_ctrl),
+ FF_FIELD(DMG_ACTION_CODE , dmg_action_code),
+ FF_FIELD(DMG_PWR_MGMT , dmg_pwr_mgmt),
+ FF_FIELD(REQ_AP_ADDR , req_ap_addr),
+ FF_FIELD(RES_AP_ADDR , res_ap_addr),
+ FF_FIELD(CHECK_BEACON , check_beacon),
+ FF_FIELD(TOD , tod),
+ FF_FIELD(TOA , toa),
+ FF_FIELD(MAX_TOD_ERR , max_tod_err),
+ FF_FIELD(MAX_TOA_ERR , max_toa_err),
+ FF_FIELD(SUBJECT_ADDRESS , subject_address),
+ FF_FIELD(HANDOVER_REASON , handover_reason),
+ FF_FIELD(HANDOVER_REMAINING_BI , handover_remaining_bi),
+ FF_FIELD(HANDOVER_RESULT , handover_result),
+ FF_FIELD(HANDOVER_REJECT_REASON , handover_reject_reason),
+ FF_FIELD(DESTINATION_REDS_AID , destination_reds_aid),
+ FF_FIELD(DESTINATION_AID , destination_aid),
+ FF_FIELD(REALY_AID , realy_aid),
+ FF_FIELD(SOURCE_AID , source_aid),
+ FF_FIELD(TIMING_OFFSET , timing_offset),
+ FF_FIELD(SAMPLING_FREQUENCY_OFFSET , sampling_frequency_offset),
+ FF_FIELD(RELAY_OPERATION_TYPE , relay_operation_type),
+ FF_FIELD(UNPROTECTED_DMG_ACTION_CODE , unprotected_dmg_action_code),
+ FF_FIELD(FST_ACTION_CODE , fst_action_code),
+ FF_FIELD(LLT , llt),
+ FF_FIELD(FSTS_ID , fsts_id),
+ FF_FIELD(OCT_MMPDU , oct_mmpdu),
{ (enum fixed_field)-1 , NULL }
};
@@ -7744,6 +9154,7 @@ static const value_string ieee80211_rsn_cipher_vals[] = {
{5, "WEP (104-bit)"},
{6, "BIP"},
{7, "Group addressed traffic not allowed"},
+ {8, "GCMP"},
{0, NULL}
};
@@ -7882,6 +9293,7 @@ channel_number_custom(gchar *result, guint8 channel_number)
break;
}
}
+
/* WPA / WME */
static const value_string ieee802111_wfa_ie_type_vals[] = {
{ 1, "WPA Information Element" },
@@ -8924,6 +10336,7 @@ dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_gtksa_replay_counter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_mfpr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_mfpc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_jmr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_peerkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
if (offset >= tag_end)
@@ -10962,6 +12375,10 @@ dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, gboolean wlan_broken_fc,
proto_tree_add_item(fc_tree, hf_ieee80211_fc_proto_version, tvb, offset, 1, ENC_NA);
proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_type, tvb, offset, 1, ENC_NA);
proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_subtype, tvb, offset, 1, ENC_NA);
+ /* Changing control frame extension for extension frames */
+ if(IS_FRAME_EXTENSION(fcf) == 1) {
+ proto_tree_add_uint (fc_tree, hf_ieee80211_fc_frame_extension, tvb, offset, 1, FCF_FRAME_EXTENSION (fcf));
+ }
offset += 1;
/* Reswap offset...*/
@@ -10974,20 +12391,26 @@ dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, gboolean wlan_broken_fc,
/* Flags */
flag_item = proto_tree_add_item(fc_tree, hf_ieee80211_fc_flags, tvb, offset, 1, ENC_NA);
flag_tree = proto_item_add_subtree (flag_item, ett_proto_flags);
- proto_tree_add_item (flag_tree, hf_ieee80211_fc_data_ds, tvb, offset, 1, ENC_NA);
- hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_to_ds, tvb, offset, 1, ENC_NA);
- PROTO_ITEM_SET_HIDDEN(hidden_item);
- hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_from_ds, tvb, offset, 1, ENC_NA);
- PROTO_ITEM_SET_HIDDEN(hidden_item);
- proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_frag, tvb, offset, 1,ENC_NA);
- ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_retry, tvb, offset, 1, ENC_NA);
- if( IS_RETRY(flags) )
- {
- expert_add_info(pinfo, ti, &ei_ieee80211_fc_retry);
+ /* Changing control frame flags for extension frames */
+ if(IS_FRAME_EXTENSION(fcf) == 0) {
+ proto_tree_add_item (flag_tree, hf_ieee80211_fc_data_ds, tvb, offset, 1, ENC_NA);
+ hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_to_ds, tvb, offset, 1, ENC_NA);
+ PROTO_ITEM_SET_HIDDEN(hidden_item);
+ hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_from_ds, tvb, offset, 1, ENC_NA);
+ PROTO_ITEM_SET_HIDDEN(hidden_item);
+ proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_frag, tvb, offset, 1,ENC_NA);
+ ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_retry, tvb, offset, 1, ENC_NA);
+ if( IS_RETRY(flags) )
+ {
+ expert_add_info(pinfo, ti, &ei_ieee80211_fc_retry);
+ }
}
proto_tree_add_item(flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, offset, 1, ENC_NA);
proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_data, tvb, offset, 1, ENC_NA);
- proto_tree_add_item(flag_tree, hf_ieee80211_fc_protected, tvb, offset, 1,ENC_NA);
+ /* Changing control frame flags for extension frames */
+ if(IS_FRAME_EXTENSION(fcf) == 0) {
+ proto_tree_add_item(flag_tree, hf_ieee80211_fc_protected, tvb, offset, 1,ENC_NA);
+ }
proto_tree_add_item(flag_tree, hf_ieee80211_fc_order, tvb, offset, 1, ENC_NA);
}
@@ -11682,6 +13105,8 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset
proto_item *ti_len, *ti_tag;
int tag_end;
+ gboolean isDMG = *((gboolean*)(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY)));
+
tag_no = tvb_get_guint8(tvb, offset);
tag_len = tvb_get_guint8(tvb, offset + 1);
tag_end = offset + 2 + tag_len;
@@ -11695,7 +13120,6 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset
}
ti_tag = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_BIG_ENDIAN);
-
ti_len = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
switch (tag_no) {
@@ -11778,12 +13202,17 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset
}
break;
- case TAG_TSPEC: /* 7.3.2.30 TSPEC element (13) */
- if (tag_len != 55)
+ case TAG_TSPEC: /* TSPEC element (13) */
+ if (isDMG == FALSE && tag_len != 55)
{
expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 55", tag_len);
break;
}
+ if (isDMG == TRUE && tag_len != 57)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 57", tag_len);
+ break;
+ }
offset += 2;
add_fixed_field(tree, tvb, pinfo, offset, FIELD_QOS_TS_INFO);
@@ -11834,6 +13263,11 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset
proto_tree_add_item(tree, hf_ieee80211_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
+ if(isDMG == TRUE) {
+ proto_tree_add_item(tree, hf_ieee80211_tspec_dmg, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset +=2;
+ }
+
break;
case TAG_TCLAS: /* 7.3.2.31 TCLAS element (14) */
@@ -12305,6 +13739,12 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset
/* TODO */
case 12: /* Location Identifier request */
/* TODO */
+ case 13: /* Directional channel quality request */
+ /* TODO */
+ case 14: /* Directional measurement request */
+ /* TODO */
+ case 15: /* Directional statistics request */
+ /* TODO */
case 255: /* Measurement Pause Request*/
/* TODO */
default: /* unknown */
@@ -12558,6 +13998,12 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset
/* TODO */
case 12: /* Location Identifier Report */
/* TODO */
+ case 13: /* Directional channel quality Report */
+ /* TODO */
+ case 14: /* Directional measurement Report */
+ /* TODO */
+ case 15: /* Directional statistics Report */
+ /* TODO */
default: /* unknown */
break;
}
@@ -13347,6 +14793,565 @@ add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset
break;
}
+ case TAG_RELAY_CAPABILITIES:
+ {
+ add_tag_relay_capabilities(pinfo, ti_len, tag_len, tree, tvb, &offset);
+ break;
+ }
+ case TAG_DMG_BSS_PRAMTER_CHANGE:
+ {
+ gboolean size;
+ if (tag_len != 7)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
+ break;
+ }
+ offset += 2;
+ size = (tvb_get_guint8(tvb, offset) & 0x02) >> 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_move, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_size, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_tbtt_offset, tvb, offset, 4, ENC_NA);
+ offset += 4;
+ if(size == TRUE) { /* if size bit is 0, the field is reserved. */
+ proto_tree_add_item(tree, hf_ieee80211_tag_bi_duration, tvb, offset, 2, ENC_NA);
+ }
+ offset += 2;
+ break;
+ }
+ case TAG_DMG_CAPABILITIES:
+ {
+ if (tag_len != 17)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 17", tag_len);
+ break;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_sta_addr, tvb, offset, 6, ENC_NA);
+ offset += 6;
+ proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_aid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_reverse_direction, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_hlts, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tpc, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_spsh, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_rx_antenna, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_fast_link, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_num_sectors, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_rxss_length, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_reciprocity, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_max_ampdu_exp, tvb, offset, 3, ENC_NA);
+ offset += 3;
+ proto_tree_add_item(tree, hf_ieee80211_tag_min_mpdu_sapcing, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_ba_flow_control, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_max_sc_rx_mcs, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_max_ofdm_rx_mcs, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_max_sc_tx_mcs, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_max_ofdm_tx_mcs, tvb, offset, 3, ENC_NA);
+ offset += 3;
+ proto_tree_add_item(tree, hf_ieee80211_tag_low_power_supported, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_code_rate, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_dtp, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_appdu_supp, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_heartbeat, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_other_aid, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_pattern_recip, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_heartbeat_elapsed, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_grant_ack_supp, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_RXSSTxRate_supp, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_tddti, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_PSA, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_handover, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_max_assoc, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_power_src, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_decenter, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_forwarding, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_center, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ break;
+ }
+ case TAG_DMG_OPERATION:
+ {
+ if (tag_len != 10)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 10", tag_len);
+ break;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_tddti, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_PSA, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_pcp_handover, tvb, offset, 1, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_PSRSI, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_min_BHI_duration, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_brdct_sta_info_dur, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_assoc_resp_confirm_time, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_min_pp_duration, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_SP_idle_timeout, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_max_lost_beacons, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ break;
+ }
+ case TAG_ANTENNA_SECTOR_ID:
+ {
+ if (tag_len != 4)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
+ break;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_type, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tap1, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_state1, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tap2, tvb, offset, 4, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_state2, tvb, offset, 4, ENC_NA);
+ offset += 4;
+ break;
+ }
+ case TAG_EXTENDED_SCHEDULE:
+ {
+ guint32 i = 0;
+ gboolean isGrant;
+ proto_item *sched_item;
+ proto_tree * alloc_tree;
+ if ((tag_len%15) != 0)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be N*15 where 0<=N<=17", tag_len);
+ break;
+ }
+ offset += 2;
+ isGrant = ((ftype==CTRL_GRANT)||(ftype==CTRL_GRANT_ACK));
+ p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY, &isGrant);
+ for(i=0; i < tag_len; i+=15) {
+ sched_item = proto_tree_add_text(tree, tvb, offset, 15, "Allocation %d", i/15);
+ alloc_tree = proto_item_add_subtree(sched_item, ett_allocation_tree);
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_id, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_type, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pseduo_static, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_truncatable, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_extendable, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pcp_active, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_lp_sc_used, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ offset += add_fixed_field(alloc_tree, tvb, pinfo, offset, FIELD_BEAMFORMING_CTRL);
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_src_aid, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_dest_aid, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_start, tvb, offset, 4, ENC_NA);
+ offset += 4;
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_duration, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_num_blocks, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_period, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ }
+ break;
+ }
+ case TAG_STA_AVAILABILITY:
+ {
+ guint32 i = 0;
+ proto_item * sta_info_item;
+ proto_tree * sta_info_tree;
+ if ((tag_len%2) != 0)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be N*2 where N>=0", tag_len);
+ break;
+ }
+ offset += 2;
+ for(i=0; i < tag_len; i+=2) {
+ sta_info_item = proto_tree_add_text(tree, tvb, offset, 2, "STA Info %d", i/2);
+ sta_info_tree = proto_item_add_subtree(sta_info_item, ett_sta_info);
+ proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_aid, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_cbap, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_pp_avail, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ }
+ break;
+ }
+ case TAG_NEXT_DMG_ATI:
+ {
+ if (tag_len != 6)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
+ break;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_start_time, tvb, offset, 4, ENC_NA);
+ offset += 4;
+ proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_duration, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ break;
+ }
+ case TAG_NEXTPCP_LIST:
+ {
+ guint32 i = 0;
+ if (tag_len < 1)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 1", tag_len);
+ break;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_token, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ for(i=0; i < tag_len-1; i+=1) {
+ proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_list, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ }
+ break;
+ }
+ case TAG_PCP_HANDOVER:
+ {
+ if (tag_len != 13)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 13", tag_len);
+ break;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_old_bssid, tvb, offset, 6, ENC_NA);
+ offset += 6;
+ proto_tree_add_item(tree, hf_ieee80211_tag_new_pcp_addr, tvb, offset, 6, ENC_NA);
+ offset += 6;
+ proto_tree_add_item(tree, hf_ieee80211_tag_reamaining_BI, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ break;
+ }
+ case TAG_BEAMLINK_MAINTAINCE:
+ {
+ if (tag_len != 1)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
+ break;
+ }
+ offset += 2;
+ offset += add_ff_beamformed_link(tree, tvb, pinfo, offset);
+ break;
+ }
+ case TAG_QUIET_PERIOD_RES:
+ {
+ if (tag_len != 10)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 10", tag_len);
+ break;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_request_token, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA);
+ offset += 6;
+ offset += add_ff_sta_address(tree, tvb, pinfo, offset);
+ break;
+ }
+ case TAG_RELAY_TRANSFER_PARAM:
+ {
+ if (tag_len != 8)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
+ break;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_duplex_relay, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_cooperation_relay, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tx_mode, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_link_change_interval, tvb, offset+1, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_data_sensing_time, tvb, offset+2, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_first_period, tvb, offset+3, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_second_period, tvb, offset+5, 2, ENC_NA);
+ offset += 8;
+ break;
+ }
+ case TAG_DMG_BEAM_REFINEMENT:
+ {
+ if (tag_len != 5)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
+ break;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_initiator, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tx_train_res, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_rx_train_res, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tx_trn_ok, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_txss_fbck_req, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_bs_fbck, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_bs_fbck_antenna_id, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_snr_requested, tvb, offset, 2, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_requested, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_number_of_taps_requested, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_sector_id_oreder_req, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_snr_present, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_present, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tap_delay_present, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_number_of_taps_present, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_number_of_measurement, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_sector_id_order_present, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_number_of_beams, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_mid_extension, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_capability_request, tvb, offset, 3, ENC_NA);
+ offset += 3;
+ break;
+ }
+ case TAG_WAKEUP_SCHEDULE_AD:
+ {
+ if (tag_len != 8)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
+ return tag_len;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_bi_start_time, tvb, offset, 4, ENC_NA);
+ offset += 4;
+ proto_tree_add_item(tree, hf_ieee80211_tag_sleep_cycle, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_num_awake_bis, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ break;
+ }
+ case TAG_DMG_TSPEC:
+ {
+ gboolean isGrant;
+ int num_constraints;
+ if (tag_len < 14)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 14", tag_len);
+ return tag_len;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_id, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_type, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_format, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_pseduo_static, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_truncatable, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_extendable, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_lp_sc_used, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_up, tvb, offset, 3, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_dest_aid, tvb, offset, 3, ENC_NA);
+ offset += 3;
+ isGrant = ((ftype==CTRL_GRANT)||(ftype==CTRL_GRANT_ACK));
+ p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY, &isGrant);
+ offset += add_fixed_field(tree, tvb, pinfo, 2, FIELD_BEAMFORMING_CTRL);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_period, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_allocation, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_max_allocation, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_duration, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ num_constraints = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_num_of_constraints, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ while(num_constraints > 0) {
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_start_time, tvb, offset, 4, ENC_NA);
+ offset += 4;
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_duration, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_period, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_interferer_mac, tvb, offset, 2, ENC_NA);
+ offset += 6;
+ num_constraints--;
+ }
+ break;
+ }
+ case TAG_CHANNEL_MEASURMENT_FB:
+ {
+ int num_measurement;
+ if (tag_len%5 != 0)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be multiple of 5", tag_len);
+ return tag_len;
+ }
+ num_measurement = tvb_get_guint8(tvb, offset+1);
+ offset += 2;
+ while(num_measurement > 0) {
+ proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_realtive_I, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_realtive_Q, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_tap_delay, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_sector_id, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_antenna_id, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ num_measurement--;
+ }
+ break;
+ }
+ case TAG_AWAKE_WINDOW:
+ {
+ if (tag_len != 2)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 2", tag_len);
+ return tag_len;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_awake_window, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ break;
+ }
+ case TAG_ADDBA_EXT:
+ {
+ if (tag_len != 1)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
+ return tag_len;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_no_frag, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ break;
+ }
+ case TAG_MULTI_BAND:
+ {
+ gboolean chiper_present, addr_present;
+ if (tag_len < 22)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 22", tag_len);
+ return tag_len;
+ }
+ offset += 2;
+ chiper_present = (tvb_get_letohs(tvb, offset) & 0x08) >> 3;
+ addr_present = (tvb_get_letohs(tvb, offset) & 0x10) >> 4;
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_sta_role, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_addr_present, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_cipher_present, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ offset += add_fixed_field(tree, tvb, pinfo, 1, FIELD_BAND_ID);
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_oper_class, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_channel_number, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA);
+ offset += 6;
+ offset += add_fixed_field(tree, tvb, pinfo, 2, FIELD_BEACON_INTERVAL);
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_tsf_offset, tvb, offset, 8, ENC_NA);
+ offset += 8;
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_ap, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_pcp, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_dls, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_tdls, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_ibss, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_fst_timeout, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ if(addr_present)
+ {
+ proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_sta_mac, tvb, offset, 6, ENC_NA);
+ offset += 6;
+ }
+ if(chiper_present)
+ {
+ proto_item *rsn_pcs_count, *rsn_pcs_item, *rsn_sub_pcs_item;
+ proto_tree *rsn_pcs_tree, *rsn_sub_pcs_tree;
+ gint ii;
+ guint16 pcs_count;
+ rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ pcs_count = tvb_get_letohs(tvb, offset);
+ offset += 2;
+
+ if (offset + (pcs_count * 4) > tag_end)
+ {
+ expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
+ "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
+ pcs_count = (tag_end - offset) / 4;
+ }
+
+ rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA);
+ rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
+ for (ii = 0; ii < pcs_count; ii++)
+ {
+ rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN);
+ rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
+ proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
+
+ /* Check if OUI is 00:0F:AC (ieee80211) */
+ if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
+ {
+ proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
+ proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(tvb_get_ntohl(tvb, offset)));
+ } else {
+ proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
+ }
+ offset += 4;
+ }
+ }
+ break;
+ }
+ case TAG_DMG_LINK_MARGIN:
+ {
+ if (tag_len != 8)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
+ return tag_len;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_mcs, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_link_margin, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_NA);
+ offset += 4;
+ break;
+ }
+ case TAG_DMG_LINK_ADAPTION_ACK:
+ {
+ if (tag_len != 5)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
+ return tag_len;
+ }
+ offset += 2;
+ proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_NA);
+ offset += 4;
+ break;
+ }
+ case TAG_SWITCHING_STREAM:
+ {
+ int param_num;
+ if (tag_len < 4)
+ {
+ expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 4", tag_len);
+ return tag_len;
+ }
+ offset += 2;
+ offset += add_fixed_field(tree, tvb, pinfo, 1, FIELD_BAND_ID);
+ offset += add_fixed_field(tree, tvb, pinfo, 1, FIELD_BAND_ID);
+ proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_non_qos, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ param_num = tvb_get_letohs(tvb, offset);
+ proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_param_num, tvb, offset, 1, ENC_NA);
+ offset += 1;
+ while(param_num > 0)
+ {
+ proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_old_tid, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_old_direction, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_new_tid, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_new_direction, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_new_valid_id, tvb, offset, 1, ENC_NA);
+ proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_llt_type, tvb, offset, 1, ENC_NA);
+ param_num--;
+ offset += 2;
+ }
+ break;
+ }
default:
proto_tree_add_item(tree, hf_ieee80211_tag_data, tvb, offset + 1 + 1, tag_len, ENC_NA);
expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_data,
@@ -13369,10 +15374,9 @@ ieee_80211_add_tagged_parameters (tvbuff_t *tvb, int offset, packet_info *pinfo,
proto_tree *tree, int tagged_parameters_len, int ftype)
{
int next_len;
-
beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
while (tagged_parameters_len > 0) {
- if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype))==0)
+ if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype)) == 0)
break;
if (next_len > tagged_parameters_len) {
/* XXX - flag this as an error? */
@@ -13688,7 +15692,6 @@ typedef enum {
ENCAP_ETHERNET
} encap_t;
-
/* ************************************************************************* */
/* Dissect 802.11 frame */
/* ************************************************************************* */
@@ -13744,12 +15747,15 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
guint16 meshoff = 0;
static wlan_hdr whdrs[4];
gboolean retransmitted;
+ gboolean isDMG = (tree == NULL) ? FALSE : proto_tree_traverse_post_order(proto_tree_get_root(tree), is_80211ad, NULL);
volatile encap_t encap_type;
proto_tree *volatile hdr_tree = NULL;
tvbuff_t *volatile next_tvb = NULL;
wlan_hdr *volatile whdr;
+ p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY, &isDMG);
+
whdr= &whdrs[0];
col_set_str (pinfo->cinfo, COL_PROTOCOL, "802.11");
@@ -13920,6 +15926,20 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
offset = 10; /* FC + D/ID + Address 1 */
ctrl_type_subtype = frame_type_subtype;
}
+ /* Added to disallow DMG STA to transfer packets of certain forbidden types. */
+ switch (ctrl_type_subtype)
+ {
+ case CTRL_PS_POLL:
+ case CTRL_CTS:
+ case CTRL_CFP_ENDACK:
+ if(isDMG == TRUE) {
+ expert_add_info_format(pinfo, hdr_tree, &ei_ieee80211_dmg_subtype,
+ "DMG STA shouldn't transmit control frame of type contention-free period end+ack");
+ }
+ break;
+ default:
+ break;
+ }
switch (ctrl_type_subtype)
{
@@ -13931,6 +15951,15 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
break;
case CTRL_VHT_NDP_ANNC:
case CTRL_RTS:
+ case CTRL_POLL:
+ case CTRL_SPR:
+ case CTRL_GRANT:
+ case CTRL_DMG_CTS:
+ case CTRL_DMG_DTS:
+ case CTRL_GRANT_ACK:
+ case CTRL_SSW:
+ case CTRL_SSW_FEEDBACK:
+ case CTRL_SSW_ACK:
case CTRL_CTS:
case CTRL_ACKNOWLEDGEMENT:
case CTRL_CFP_END:
@@ -13977,6 +16006,24 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
cw_item = proto_tree_add_text(hdr_tree, tvb, offset, 2,
"Carried Frame");
hdr_tree = proto_item_add_subtree (cw_item, ett_cntrl_wrapper_fc);
+ if(isDMG == TRUE) {
+ expert_add_info_format(pinfo, hdr_tree, &ei_ieee80211_dmg_subtype,
+ "DMG STA shouldn't transmit Control Wrapper frame");
+ }
+ }
+
+ if ((frame_type_subtype == CTRL_CFP_END) && tree) {
+ src = tvb_get_ptr (tvb, offset, 6);
+ if(isDMG == TRUE)
+ set_src_addr_cols(pinfo, src, "TA");
+ else
+ set_src_addr_cols(pinfo, src, "BSSID");
+ if (tree) {
+ proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
+ hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
+ PROTO_ITEM_SET_HIDDEN(hidden_item);
+ }
+ offset += 6;
}
switch (ctrl_type_subtype)
@@ -13997,10 +16044,10 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
hidden_item = proto_tree_add_string (hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6,
get_ether_name(src));
PROTO_ITEM_SET_HIDDEN(hidden_item);
+ offset += 6;
}
break;
}
-
case CTRL_VHT_NDP_ANNC:
{
src = tvb_get_ptr (tvb, offset, 6);
@@ -14056,6 +16103,14 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
break;
}
+ case CTRL_GRANT_ACK:
+ case CTRL_SSW:
+ case CTRL_SSW_FEEDBACK:
+ case CTRL_SSW_ACK:
+ case CTRL_DMG_CTS:
+ case CTRL_GRANT:
+ case CTRL_SPR:
+ case CTRL_POLL:
case CTRL_RTS:
{
src = tvb_get_ptr (tvb, offset, 6);
@@ -14070,6 +16125,7 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
hidden_item = proto_tree_add_string (hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6,
get_ether_name(src));
PROTO_ITEM_SET_HIDDEN(hidden_item);
+ offset += 6;
}
break;
}
@@ -14104,6 +16160,10 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
offset += 6;
bar_control = tvb_get_letohs(tvb, offset);
+ /* According to the 802.11ad standard (28/12/12) there is need to find the
+ * GCR subfield which isn't described, thus the black_ack_type calculations
+ * should be changed.
+ */
block_ack_type = (bar_control & 0x0006) >> 1;
proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_request_type, tvb,
offset, 2, ENC_LITTLE_ENDIAN);
@@ -14125,6 +16185,11 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
{
case 0: /*Basic BlockAckReq */
{
+ if(isDMG == TRUE) {
+ expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
+ "DMG STA shouldn't transmit BlockAckReq frame with Basic BlockAckReq");
+ break;
+ }
proto_tree_add_item(bar_sub_tree,
hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
@@ -14133,6 +16198,12 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
FIELD_BLOCK_ACK_SSC);
break;
}
+ case 1: /* Extended Compressesd BlockAckReq */
+ if(isDMG == FALSE) {
+ expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
+ "Non-DMG STA shouldn't transmit BlockAckReq frame with Extended Compressed BlockAckReq");
+ break;
+ }
case 2: /* Compressed BlockAckReq */
{
proto_tree_add_item(bar_sub_tree,
@@ -14149,6 +16220,12 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
guint iii;
proto_tree *bar_mtid_tree, *bar_mtid_sub_tree;
+ if(isDMG == TRUE) {
+ expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
+ "DMG STA shouldn't transmit BlockAckReq frame with Basic BlockAckReq");
+ break;
+ }
+
tid_count = ((bar_control & 0xF000) >> 12) + 1;
proto_tree_add_uint(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid_info, tvb, offset, 2, tid_count);
offset += 2;
@@ -14224,6 +16301,39 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
/*offset += 128;*/
break;
}
+ /* Added to support Extended Compressed BlockAck RBUFCAP subfield.*/
+ case 1: /* Extended Compressed BlockAck */
+ {
+ guint16 ssn;
+ guint64 bmap;
+ int f;
+ proto_item *ba_bitmap_item;
+ proto_tree *ba_bitmap_tree;
+ if(isDMG == FALSE) {
+ expert_add_info_format(pinfo, ba_sub_tree, &ei_ieee80211_dmg_subtype,
+ "Non-DMG STA shouldn't transmit BlockAck frame with Extended Compressed BlockAck");
+ break;
+ }
+ proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+
+ ssn = tvb_get_letohs(tvb, offset);
+ ssn >>= 4;
+ offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC);
+ bmap = tvb_get_letoh64(tvb, offset);
+ ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
+ ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap);
+ for (f = 0; f < 64; f++) {
+ if (bmap & (G_GINT64_CONSTANT(1) << f))
+ continue;
+ proto_tree_add_uint_format_value(ba_bitmap_tree, hf_ieee80211_block_ack_bitmap_missing_frame,
+ tvb, offset + (f/8), 1, ssn + f, "%u", ssn + f);
+ }
+ offset += 8;
+ proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_RBUFCAP, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+ break;
+ }
case 2: /* Compressed BlockAck */
{
guint16 ssn;
@@ -14282,6 +16392,55 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
break;
}
}
+/*
+ * 802.11ad : Used for extension types.
+ */
+ switch (ctrl_type_subtype) {
+ case CTRL_POLL: {
+ proto_tree_add_item(hdr_tree, hf_ieee80211_cf_response_offset,
+ tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ /* offset += 2; commented to avoid Clang warnings*/
+ break;
+ }
+ case CTRL_GRANT:
+ case CTRL_GRANT_ACK:
+ case CTRL_SPR: {
+ gboolean isGrant;
+ if(ctrl_type_subtype != CTRL_GRANT_ACK) {
+ offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_DYNAMIC_ALLOCATION);
+ } else { /* CTRL_GRANT_ACK have 5 octets that are reserved thus not shown.*/
+ offset += 5;
+ }
+ /* offset += commented to avoid Clang warnings*/
+ isGrant = ((ctrl_type_subtype==CTRL_GRANT)||(ctrl_type_subtype==CTRL_GRANT_ACK));
+ p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_CTRL_GRANT_OR_GRANT_ACK_KEY, &isGrant);
+ add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BEAMFORMING_CTRL);
+ break;
+ }
+ case CTRL_SSW: {
+ offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_SECTOR_SWEEP);
+ /* offset += commented to avoid Clang warnings*/
+ add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_SECTOR_SWEEP_FB);
+ break;
+ }
+ case CTRL_SSW_ACK:
+ case CTRL_SSW_FEEDBACK: {
+ offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_SECTOR_SWEEP_FB);
+ offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BRP_REQ);
+ /* offset += commented to avoid Clang warnings*/
+ add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BEAMFORMED_LINK_MAINTAINCE);
+ break;
+ }
+ case CTRL_DMG_DTS: {
+ proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_sa, tvb, offset, 6, ENC_NA);
+ offset += 6;
+ proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_da, tvb, offset, 6, ENC_NA);
+ /* offset += 6; commented to avoid Clang warnings*/
+ break;
+ }
+ default:
+ break;
+ }
break;
}
@@ -14523,6 +16682,20 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
}
break;
+ }
+ case EXTENSION_FRAME: {
+ switch (frame_type_subtype) {
+ case EXTENSION_DMG_BEACON: {
+ dst = tvb_get_ptr(tvb, 4, 6);
+ set_dst_addr_cols(pinfo, dst, "BSSID");
+ if (tree) {
+ proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, 4, 6, ENC_BIG_ENDIAN);
+ hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
+ PROTO_ITEM_SET_HIDDEN(hidden_item);
+ }
+ break;
+ }
+ }
}
}
@@ -14843,7 +17016,8 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
case CONTROL_FRAME:
return;
-
+ case EXTENSION_FRAME:
+ break;
default:
return;
}
@@ -15320,7 +17494,13 @@ dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
break;
}
break;
+
+ case EXTENSION_FRAME:
+ {
+ dissect_ieee80211_extension(fcf, next_tvb, pinfo, tree);
+ break;
}
+ }
pinfo->fragmented = save_fragmented;
end_of_wlan:
@@ -15713,9 +17893,14 @@ proto_register_ieee80211 (void)
{&hf_ieee80211_fc_frame_type_subtype,
{"Type/Subtype", "wlan.fc.type_subtype",
- FT_UINT8, BASE_HEX|BASE_EXT_STRING, &frame_type_subtype_vals_ext, 0x0,
+ FT_UINT16, BASE_HEX|BASE_EXT_STRING, &frame_type_subtype_vals_ext, 0x0,
"Type and subtype combined (first byte: type, second byte: subtype)", HFILL }},
+ {&hf_ieee80211_fc_frame_extension,
+ {"Extension", "wlan.fc.extension",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ "Frame extension", HFILL }},
+
{&hf_ieee80211_fc_flags,
{"Flags", "wlan.flags",
FT_UINT8, BASE_HEX, NULL, 0,
@@ -16099,6 +18284,12 @@ proto_register_ieee80211 (void)
FT_BYTES, BASE_NONE, NULL, 0,
NULL, HFILL }},
+ /* Used for Extended compressed BlockAck */
+ {&hf_ieee80211_block_ack_RBUFCAP,
+ {"Block Ack RBUFCAP", "wlan.ba.RBUFCAP",
+ FT_BOOLEAN, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
{&hf_ieee80211_block_ack_bitmap_missing_frame,
{"Missing frame", "wlan.ba.bm.missing_frame",
FT_UINT32, BASE_DEC, NULL, 0,
@@ -16169,6 +18360,11 @@ proto_register_ieee80211 (void)
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &wnm_action_codes_ext, 0,
"Management action code", HFILL }},
+ {&hf_ieee80211_ff_unprotected_wnm_action_code,
+ {"Action code", "wlan_mgt.fixed.action_code",
+ FT_UINT8, BASE_DEC|BASE_EXT_STRING, &unprotected_wnm_action_codes_ext, 0,
+ "Management action code", HFILL }},
+
{&hf_ieee80211_ff_key_data,
{"Key Data", "wlan_mgt.fixed.key_data",
FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
@@ -16297,6 +18493,1312 @@ proto_register_ieee80211 (void)
{"Session Information URL", "wlan_mgt.fixed.session_information.url",
FT_STRING, BASE_NONE, NULL, 0,
NULL, HFILL }},
+
+/* 802.11ad */
+ {&hf_ieee80211_cf_response_offset,
+ {"Response Offset", "wlan.res_offset",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_dynamic_allocation,
+ {"Response Offset", "wlan.dynamic_allocation",
+ FT_UINT64, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_TID,
+ {"Response Offset", "wlan.dynamic_allocation.TID",
+ FT_UINT8, BASE_DEC, NULL, 0x0f,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_alloc_type,
+ {"Response Offset", "wlan.dynamic_allocation.alloc_type",
+ FT_UINT8, BASE_DEC, NULL, 0x70,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_src_aid,
+ {"Response Offset", "wlan.dynamic_allocation.src_aid",
+ FT_UINT16, BASE_DEC, NULL, 0x7f80,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_dest_aid,
+ {"Response Offset", "wlan.dynamic_allocation.dest_aid",
+ FT_UINT16, BASE_DEC, NULL, 0x7f80,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_alloc_duration,
+ {"Response Offset", "wlan.dynamic_allocation.alloc_duration",
+ FT_UINT32, BASE_CUSTOM, allocation_duration_base_custom, 0x7fff80,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_ssw,
+ {"Sector Sweep", "wlan.ssw",
+ FT_UINT24, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_ssw_direction,
+ {"Sector Sweep Direction", "wlan.ssw.direction",
+ FT_BOOLEAN, 24, TFS(&ieee80211_cf_ssw_direction), 0x800000,
+ NULL, HFILL}},
+
+ {&hf_ieee80211_ff_ssw_cdown,
+ {"Sector Sweep CDOWN", "wlan.ssw.cdown",
+ FT_UINT24, BASE_DEC, NULL, 0x7fc000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_ssw_sector_id,
+ {"Sector Sweep Sector ID", "wlan.ssw.sector_id",
+ FT_UINT24, BASE_DEC, NULL, 0x003f00,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_ssw_dmg_ant_id,
+ {"Sector Sweep DMG Antenna ID", "wlan.ssw.dmg_ant_id",
+ FT_UINT24, BASE_DEC, NULL, 0x0000c0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_ssw_rxss_len,
+ {"Sector Sweep RXSS Length", "wlan.ssw.rxss_len",
+ FT_UINT24, BASE_DEC, NULL, 0x00003f,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bf,
+ {"Beam Forming", "wlan.bf",
+ FT_UINT16, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bf_train,
+ {"Beam Forming Training", "wlan.bf.train",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bf_is_init,
+ {"Beam Forming Is InitiatorTXSS", "wlan.bf.isInit",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bf_is_resp,
+ {"Beam Forming Is ResponderTXSS", "wlan.bf.isResp",
+ FT_BOOLEAN, 8, NULL, 0x4,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bf_rxss_len,
+ {"Beam Forming RXSS Length", "wlan.bf.rxss_len",
+ FT_UINT16, BASE_DEC, NULL, 0x1f8,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bf_rxss_rate,
+ {"Beam Forming RXSS Rate", "wlan.bf.rxss_rate",
+ FT_BOOLEAN, 16, NULL, 0x200,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bf_num_sectors,
+ {"Beam Forming Total Number of Sectors", "wlan.bf.num_sectors",
+ FT_UINT16, BASE_DEC, NULL, 0x3f8,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bf_num_rx_dmg_ants,
+ {"Beam Forming Number of DMG Antennas", "wlan.bf.num_dmg_ants",
+ FT_UINT16, BASE_DEC, NULL, 0xc00,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_addr_nav_da,
+ {"Destination address of STA that caused NAV update", "wlan.nav_da",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ "DMG Destination Hardware Address", HFILL }},
+
+ {&hf_ieee80211_addr_nav_sa,
+ {"Source address of STA that caused NAV update", "wlan.nav_sa",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ "DMG Source Hardware Address", HFILL }},
+
+ {&hf_ieee80211_ff_sswf,
+ {"Sector Sweep Feedback", "wlan.sswf",
+ FT_UINT24, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_sswf_total_sectors,
+ {"Sector Sweep Feedback total number of sectors", "wlan.sswf.num_sectors",
+ FT_UINT24, BASE_DEC, NULL, 0xff8000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_sswf_num_rx_dmg_ants,
+ {"Sector Sweep Feedback Number of recieve DMG Antennas", "wlan.sswf.num_dmg_ants",
+ FT_UINT24, BASE_DEC, NULL, 0x006000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_sswf_poll_required,
+ {"Sector Sweep Feedback Poll required", "wlan.sswf.poll",
+ FT_BOOLEAN, 24, NULL, 0x000080,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp,
+ {"BRP Request", "wlan.brp",
+ FT_UINT32, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp_L_RX,
+ {"BRP Request L-RX", "wlan.brp.l_rx",
+ FT_UINT32, BASE_DEC, NULL, 0xf8000000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp_TX_TRN_REQ,
+ {"BRP Request TX-TRN-REQ", "wlan.brp.tx_trn_req",
+ FT_BOOLEAN, 32, NULL, 0x04000000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp_MID_REQ,
+ {"BRP Request MID-REQ", "wlan.brp.mid_req",
+ FT_BOOLEAN, 32, NULL, 0x02000000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp_BC_REQ,
+ {"BRP Request BC-REQ", "wlan.brp.bc_req",
+ FT_BOOLEAN, 32, NULL, 0x01000000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp_MID_GRANT,
+ {"BRP Request MID-GRANT", "wlan.brp.mid_grant",
+ FT_BOOLEAN, 32, NULL, 0x00800000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp_BC_GRANT,
+ {"BRP Request BC-GRANT", "wlan.brp.bc_grant",
+ FT_BOOLEAN, 32, NULL, 0x00400000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp_chan_FBCK_CAP,
+ {"BRP Request Chan FBCK-CAP", "wlan.brp.chan_fbck_cap",
+ FT_BOOLEAN, 32, NULL, 0x00200000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp_tx_sector,
+ {"BRP Request TX Sector ID", "wlan.brp.tx_sector_id",
+ FT_UINT32, BASE_DEC, NULL, 0x001f8000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp_other_aid,
+ {"BRP Request Other AID", "wlan.brp.other_aid",
+ FT_UINT32, BASE_DEC, NULL, 0x00007f80,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_brp_tx_antenna,
+ {"BRP Request TX Antenna ID", "wlan.brp.tx_antenna_id",
+ FT_UINT32, BASE_DEC, NULL, 0x00000060,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_blm,
+ {"Beamformed Link Maintenance", "wlan.blm",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_blm_unit_index,
+ {"BeamLink Maintenance Uint Index", "wlan.blm.uint_index",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_blm_maint_value,
+ {"BeamLink Maintenance Value", "wlan.blm.value",
+ FT_UINT8, BASE_DEC, NULL, 0x7e,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_blm_is_master,
+ {"BeamLink Is Master", "wlan.blm.is_master",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic,
+ {"Beacon Interval Control", "wlan.bic",
+ FT_UINT64, BASE_HEX , NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_cc_present,
+ {"Clustering Control Present", "wlan.bic.cc",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_discovery_mode,
+ {"Discovery Mode", "wlan.bic.discovery_mode",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_next_beacon,
+ {"Next Beacon", "wlan.bic.next_beacon",
+ FT_UINT8, BASE_DEC, NULL, 0x3c,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_ati_present,
+ {"ATI Present", "wlan.bic.ati",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_abft_len,
+ {"A-BFT length", "wlan.bic.abft_len",
+ FT_UINT16, BASE_DEC, NULL, 0x0380,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_fss,
+ {"FSS", "wlan.bic.fss",
+ FT_UINT8, BASE_DEC, NULL, 0x3c,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_is_resp,
+ {"Is TXSS Responder", "wlan.bic.is_responder",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_next_abft,
+ {"Next A-BFT", "wlan.bic.next_abft",
+ FT_UINT16, BASE_DEC, NULL, 0x0780,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_frag_txss,
+ {"Fragmented TXSS", "wlan.bic.frag_txss",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_txss_span,
+ {"TXSS span", "wlan.bic.txss_span",
+ FT_UINT16, BASE_DEC, NULL, 0x07f0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_NBI_abft,
+ {"Number of Beacon Intervals that are needed to allocate A-BFT", "wlan.bic.NBI_abft",
+ FT_UINT8, BASE_DEC, NULL, 0x78,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_abft_count,
+ {"A-BFT Count", "wlan.bic.abft_count",
+ FT_UINT16, BASE_DEC, NULL, 0x1f80,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_nabft,
+ {"Number of A-BFT's recieved from each Antenna", "wlan.bic.nabft",
+ FT_UINT16, BASE_DEC, NULL, 0x07e0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_bic_pcp,
+ {"PCP Association Ready", "wlan.bic.pcp",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_dmg_params,
+ {"DMG Parameters", "wlan.dmg_params",
+ FT_UINT8, BASE_HEX , NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_dmg_params_bss,
+ {"BSS Type", "wlan.dmg_params.bss",
+ FT_UINT8, BASE_DEC, VALS(bss_type), 0x03,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_dmg_params_cbap_only,
+ {"CBAP Only", "wlan.dmp_params.cbap_only",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_dmg_params_cbap_src,
+ {"CBAP Source", "wlan.dmp_params.cbap_src",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_dmg_params_privacy,
+ {"DMG Privacy", "wlan.dmp_params.privacy",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_dmg_params_policy,
+ {"ECPAC Policy Enforced", "wlan.dmp_params.policy",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_cc,
+ {"Clustering Control", "wlan.cc",
+ FT_UINT64, BASE_HEX , NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_cc_abft_resp_addr,
+ {"A-BFT Responder Address", "wlan.cc.abft_resp_addr",
+ FT_ETHER, BASE_NONE , NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_cc_sp_duration,
+ {"Beacon SP Duration", "wlan.cc.sp_duration",
+ FT_UINT8, BASE_DEC , NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_cc_cluster_id,
+ {"Cluster ID", "wlan.cc.cluster_id",
+ FT_UINT64, BASE_DEC , NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_cc_role,
+ {"Cluster Member Role", "wlan.cc.rold",
+ FT_UINT8, BASE_DEC , NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_cc_max_mem,
+ {"Cluster MaxMem", "wlan.cc.max_mem",
+ FT_UINT8, BASE_DEC , NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_relay_support,
+ {"Relay Supportability", "wlan.relay_capabilities.relay_support",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_relay_use,
+ {"Relay Usability", "wlan.relay_capabilities.relay_use",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_relay_permission,
+ {"Relay Permission", "wlan.relay_capabilities.relay_permission",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_AC_power,
+ {"A/C Power", "wlan.relay_capabilities.AC_power",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_relay_prefer,
+ {"Relay Preference", "wlan.relay_capabilities.relay_prefer",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_duplex,
+ {"Duplex", "wlan.relay_capabilities.duplex",
+ FT_UINT8, BASE_DEC, NULL, 0x60,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_cooperation,
+ {"Cooperation", "wlan.relay_capabilities.cooperation",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_rcsi,
+ {"Relay Capable STA Info", "wlan.rcsi",
+ FT_UINT24, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_rcsi_aid,
+ {"AID", "wlan.rcsi.aid",
+ FT_UINT8, BASE_DEC, NULL, 0xff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_band_id,
+ {"Band ID", "wlan.band_id",
+ FT_UINT8, BASE_DEC, VALS(band_id), 0xff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_move,
+ {"Move", "wlan.dmg_bss_param_change.move",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_size,
+ {"Size", "wlan.dmg_bss_param_change.size",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tbtt_offset,
+ {"TBTT Offset", "wlan.dmg_bss_param_change.tbtt_offset",
+ FT_UINT32, BASE_CUSTOM, allocation_duration_base_custom, 0xffffffff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_bi_duration,
+ {"BI Duration", "wlan.dmg_bss_param_change.bi_duration",
+ FT_UINT16, BASE_DEC, NULL, 0xffff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_dmg_capa_sta_addr,
+ {"STA Address", "wlan.dmg_capa.sta_addr",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ "STA_Address", HFILL }},
+
+ {&hf_ieee80211_tag_dmg_capa_aid,
+ {"AID", "wlan.dmg_capa.aid",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_reverse_direction,
+ {"Reverse Direction", "wlan.dmg_capa.reverse_direction",
+ FT_BOOLEAN, 24, NULL, 0x800000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_hlts,
+ {"Higher Layer Timer Synchronization", "wlan.dmg_capa.htls",
+ FT_BOOLEAN, 24, NULL, 0x400000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tpc,
+ {"TPC", "wlan.dmg_capa.tpc",
+ FT_BOOLEAN, 24, NULL, 0x200000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_spsh,
+ {"SPSH and Interference Mitigation", "wlan.dmg_capa.spsh",
+ FT_BOOLEAN, 24, NULL, 0x100000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_rx_antenna,
+ {"Number of RX DMG Antennas", "wlan.dmg_capa.num_rx",
+ FT_UINT24, BASE_CUSTOM, extra_one_base_custom, 0x0c0000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_fast_link,
+ {"Fast Link Adaptation", "wlan.dmg_capa.fast_link",
+ FT_BOOLEAN, 24, NULL, 0x020000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_num_sectors,
+ {"Total Number of Sectors", "wlan.dmg_capa.num_sectors",
+ FT_UINT24, BASE_CUSTOM, extra_one_base_custom, 0x01fc00,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_rxss_length,
+ {"RXSS Length", "wlan.dmg_capa.rxss_len",
+ FT_UINT24, BASE_CUSTOM, extra_one_mul_two_base_custom, 0x0003f0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_reciprocity,
+ {"DMG Antenna Reciprocity", "wlan.dmg_capa.reciprocity",
+ FT_BOOLEAN, 24, NULL, 0x000008,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_max_ampdu_exp,
+ {"Maximum A-MPDU Length Exponent", "wlan.dmg_capa.max_ampdu_exp",
+ FT_UINT24, BASE_DEC, NULL, 0x000007,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_min_mpdu_sapcing,
+ {"Minimum MPDU Start Spacing", "wlan.dmg_capa.min_mpdu_spacing",
+ FT_UINT24, BASE_DEC, NULL, 0xe00000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_ba_flow_control ,
+ {"BA with Flow Control", "wlan.dmg_capa.bs_flow_ctrl",
+ FT_BOOLEAN, 24, NULL, 0x100000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_max_sc_rx_mcs,
+ {"Maximum SC Rx MCS", "wlan.dmg_capa.max_sc_rx_mcs",
+ FT_UINT24, BASE_DEC, NULL, 0x0f8000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_max_ofdm_rx_mcs,
+ {"Maximum OFDM Rx MCS", "wlan.dmg_capa.max_ofdm_rx_mcs",
+ FT_UINT24, BASE_DEC, NULL, 0x007c00,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_max_sc_tx_mcs,
+ {"Maximum SC Tx MCS", "wlan.dmg_capa.max_sc_tx_mcs",
+ FT_UINT24, BASE_DEC, NULL, 0x0003e0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_max_ofdm_tx_mcs,
+ {"Maximum OFDM Tx MCS", "wlan.dmg_capa.max_ofdm_tx_mcs",
+ FT_UINT24, BASE_DEC, NULL, 0x00001f,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_low_power_supported,
+ {"Low Power SC PHY Supported", "wlan.dmg_capa.low_power_suuported",
+ FT_BOOLEAN, 16, NULL, 0x8000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_code_rate,
+ {"Code Rate 13/16", "wlan.dmg_capa.code_rate",
+ FT_BOOLEAN, 16, NULL, 0x4000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_dtp,
+ {"DTP Supported", "wlan.dmg_capa.dtp",
+ FT_BOOLEAN, 16, NULL, 0x0800,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_appdu_supp,
+ {"A-PPDU Supported", "wlan.dmg_capa.appdu_supp",
+ FT_BOOLEAN, 16, NULL, 0x0400,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_heartbeat,
+ {"HeartBeat", "wlan.dmg_capa.heartbeat",
+ FT_BOOLEAN, 16, NULL, 0x0200,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_other_aid,
+ {"Supports Other_AID", "wlan.dmg_capa.other_aid",
+ FT_BOOLEAN, 16, NULL, 0x0100,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pattern_recip,
+ {"Antenna Pattern Reciprocity", "wlan.dmg_capa.pattern_recip",
+ FT_BOOLEAN, 16, NULL, 0x0080,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_heartbeat_elapsed,
+ {"Heartbeat Elapsed Indication", "wlan.dmg_capa.heartbeat_elapsed",
+ FT_UINT16, BASE_DEC, NULL, 0x0070,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_grant_ack_supp,
+ {"Grant ACK Supported", "wlan.dmg_capa.grant_ack_supp",
+ FT_BOOLEAN, 16, NULL, 0x0008,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_RXSSTxRate_supp,
+ {"RXSSTxRate Supported", "wlan.dmg_capa.RXSSTxRate",
+ FT_BOOLEAN, 16, NULL, 0x0004,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pcp_tddti,
+ {"TDDTI", "wlan.dmg_capa.pcp_tdtti",
+ FT_BOOLEAN, 16, NULL, 0x8000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pcp_PSA,
+ {"Pseudo-static Allocations", "wlan.dmg_capa.pcp_psa",
+ FT_BOOLEAN, 16, NULL, 0x4000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pcp_handover,
+ {"PDP Handover", "wlan.dmg_capa.pcp_handover",
+ FT_BOOLEAN, 16, NULL, 0x2000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pcp_max_assoc,
+ {"Max Associated STA Number", "wlan.dmg_capa.pcp_max_assoc",
+ FT_UINT16, BASE_DEC, NULL, 0x1fe0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pcp_power_src,
+ {"Power Source", "wlan.dmg_capa.pcp_power_src",
+ FT_BOOLEAN, 16, NULL, 0x0010,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pcp_decenter,
+ {"Decentralized PCP/AP Clustering", "wlan.dmg_capa.pcp_decenter",
+ FT_BOOLEAN, 16, NULL, 0x0008,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pcp_forwarding,
+ {"PCP Forwarding", "wlan.dmg_capa.pcp_forwarding",
+ FT_BOOLEAN, 16, NULL, 0x0004,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pcp_center,
+ {"Centralized PCP/AP Clustering", "wlan.dmg_capa.pcp_center",
+ FT_BOOLEAN, 16, NULL, 0x0002,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_PSRSI,
+ {"PS Request Suspension Interval", "wlan.dmg_oper.psrsi",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_min_BHI_duration,
+ {"Min BHI Duration", "wlan.dmg_oper.min_BHI_duration",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_brdct_sta_info_dur,
+ {"Broadcast STA Info Duration", "wlan.dmg_oper.brdcst_sta_info_dur",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_assoc_resp_confirm_time,
+ {"Associated Response Confirm Time", "wlan.dmg_oper.assoc_resp_confirm_time",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_min_pp_duration,
+ {"Min PP Duration", "wlan.dmg_oper.min_pp_duration",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_SP_idle_timeout,
+ {"SP Idle Timeout", "wlan.dmg_oper.SP_idle_timeout",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_max_lost_beacons,
+ {"Max Lost Beacons", "wlan.dmg_oper.max_lost_beacons",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_type,
+ {"Type", "wlan.sctor_id.type",
+ FT_UINT32, BASE_HEX, NULL, 0xf0000000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tap1,
+ {"Tap 1", "wlan.sctor_id.tap1",
+ FT_UINT32, BASE_HEX, NULL, 0x0fc00000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_state1,
+ {"State 1", "wlan.sctor_id.state1",
+ FT_UINT32, BASE_HEX, NULL, 0x003f0000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tap2,
+ {"Tap 2", "wlan.sctor_id.tap2",
+ FT_UINT32, BASE_HEX, NULL, 0x0000ff00,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_state2,
+ {"State 2", "wlan.sctor_id.state2",
+ FT_UINT32, BASE_HEX, NULL, 0x000000ff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_allocation_id,
+ {"Allocation ID", "wlan.ext_sched.alloc_id",
+ FT_UINT16, BASE_DEC, NULL, 0xf000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_allocation_type,
+ {"Allocation Type", "wlan.ext_sched.alloc_type",
+ FT_UINT16, BASE_DEC, VALS(allocation_type), 0x0e00,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pseduo_static,
+ {"Pseudo-static", "wlan.ext_sched.p_static",
+ FT_BOOLEAN, 16, NULL, 0x0100,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_truncatable,
+ {"Truncatable", "wlan.ext_sched.truncatable",
+ FT_BOOLEAN, 16, NULL, 0x0080,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_extendable,
+ {"Extenedable", "wlan.ext_sched.extendable",
+ FT_BOOLEAN, 16, NULL, 0x0040,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pcp_active,
+ {"PCP Active", "wlan.ext_sched.pcp_active",
+ FT_BOOLEAN, 16, NULL, 0x0020,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_lp_sc_used,
+ {"LP SC Used", "wlan.ext_sched.lp_sc_used",
+ FT_BOOLEAN, 16, NULL, 0x0010,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_src_aid,
+ {"Source AID", "wlan.ext_sched.src_id",
+ FT_UINT8, BASE_DEC, NULL, 0xff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_dest_aid,
+ {"Destination AID", "wlan.ext_sched.dest_id",
+ FT_UINT8, BASE_DEC, NULL, 0xff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_alloc_start,
+ {"Allocation Start", "wlan.ext_sched.alloc_start",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_alloc_block_duration,
+ {"Allocation Block Duration", "wlan.ext_sched.block_duration",
+ FT_UINT16, BASE_DEC, NULL, 0xffff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_num_blocks,
+ {"Number of Blocks", "wlan.ext_sched.num_blocks",
+ FT_UINT8, BASE_DEC, NULL, 0xff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_alloc_block_period,
+ {"Allocation Block Period", "wlan.ext_sched.alloc_block_period",
+ FT_UINT16, BASE_DEC, NULL, 0xffff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_aid,
+ {"AID", "wlan.sta_avail.aid",
+ FT_UINT16, BASE_DEC, NULL, 0xff00,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_cbap,
+ {"CBAP", "wlan.sta_avail.cbap",
+ FT_BOOLEAN, 16, NULL, 0x0080,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_pp_avail,
+ {"PP Available", "wlan.sta_avail.pp_avail",
+ FT_BOOLEAN, 16, NULL, 0x0040,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_next_ati_start_time,
+ {"Start Time", "wlan.next_ati.start_time",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_next_ati_duration,
+ {"ATI Duration", "wlan.next_ati.duration",
+ FT_UINT16, BASE_DEC, NULL, 0xffff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_old_bssid,
+ {"Old BSSID", "wlan.pcp_handover.old_bssid",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ "OLD_BSSID", HFILL }},
+
+ {&hf_ieee80211_tag_new_pcp_addr,
+ {"New PCP Address", "wlan.pcp_handover.new_pcp_addr",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ "New_PCP_Address", HFILL }},
+
+ {&hf_ieee80211_tag_bssid,
+ {"BSSID", "wlan.quiet_res.bssid",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ "BSS-ID", HFILL }},
+
+ {&hf_ieee80211_tag_duplex_relay,
+ {"Duplex", "wlan.relay_capabilities.duplex",
+ FT_UINT8, BASE_DEC, NULL, 0x01,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_cooperation_relay,
+ {"Cooperation", "wlan.relay_capabilities.cooperation",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tx_mode,
+ {"TX-Mode", "wlan.realy_trans_param.tx_mode",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_link_change_interval,
+ {"Link Change Interval", "wlan.realy_trans_param.link_change_interval",
+ FT_UINT8, BASE_CUSTOM, allocation_duration_base_custom, 0xff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_data_sensing_time,
+ {"Data Sensing Time", "wlan.realy_trans_param.data_sensing_time",
+ FT_UINT8, BASE_DEC, NULL, 0xff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_first_period,
+ {"First Period", "wlan.realy_trans_param.first_period",
+ FT_UINT16, BASE_DEC, NULL, 0xffff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_second_period,
+ {"Second Period", "wlan.realy_trans_param.second_period",
+ FT_UINT16, BASE_DEC, NULL, 0xffff,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_initiator,
+ {"Initiator", "wlan.beam_refine.initiator",
+ FT_BOOLEAN, 16, NULL, 0x8000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tx_train_res,
+ {"TX-train-response", "wlan.beam_refine.tx_train_res",
+ FT_BOOLEAN, 16, NULL, 0x4000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_rx_train_res,
+ {"RX-train-response", "wlan.beam_refine.rx_train_res",
+ FT_BOOLEAN, 16, NULL, 0x2000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tx_trn_ok,
+ {"TX-TRN-OK", "wlan.beam_refine.tx_trn_ok",
+ FT_BOOLEAN, 16, NULL, 0x1000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_txss_fbck_req,
+ {"TXSS-FBCK-REQ", "wlan.beam_refine.txss_fbck_req",
+ FT_BOOLEAN, 16, NULL, 0x0800,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_bs_fbck,
+ {"BS-FBCK", "wlan.beam_refine.bs_fbck",
+ FT_UINT16, BASE_DEC, NULL, 0x07e0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_bs_fbck_antenna_id,
+ {"BS-FBCK Anetenna ID", "wlan.beam_refine.bs_fbck_antenna_id",
+ FT_UINT16, BASE_DEC, NULL, 0x0018,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_snr_requested,
+ {"SNR Requested", "wlan.beam_refine.snr_req",
+ FT_BOOLEAN, 16, NULL, 0x0004,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_channel_measurement_requested,
+ {"Channel Measurement Requested", "wlan.beam_refine.ch_measure_req",
+ FT_BOOLEAN, 16, NULL, 0x0002,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_number_of_taps_requested,
+ {"Number of Taps Requested", "wlan.beam_refine.taps_req",
+ FT_UINT24, BASE_DEC, NULL, 0xc00000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_sector_id_oreder_req,
+ {"Sector ID Order Requested", "wlan.beam_refine.sector_id_req",
+ FT_BOOLEAN, 24, NULL, 0x400000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_snr_present,
+ {"SNR Present", "wlan.beam_refine.snr_present",
+ FT_BOOLEAN, 24, NULL, 0x200000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_channel_measurement_present,
+ {"Channel Measurement Present", "wlan.beam_refine.ch_measure_present",
+ FT_BOOLEAN, 24, NULL, 0x100000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tap_delay_present,
+ {"Tap Delay Present", "wlan.beam_refine.tap_delay_present",
+ FT_BOOLEAN, 24, NULL, 0x080000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_number_of_taps_present,
+ {"Number of Taps Present", "wlan.beam_refine.taps_present",
+ FT_UINT24, BASE_DEC, NULL, 0x060000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_number_of_measurement,
+ {"Number of Measurements", "wlan.beam_refine.num_measurement",
+ FT_UINT24, BASE_DEC, NULL, 0x01fc00,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_sector_id_order_present,
+ {"Sector ID Order Present", "wlan.beam_refine.sector_id_present",
+ FT_BOOLEAN, 24, NULL, 0x000200,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_number_of_beams,
+ {"Number of Beams", "wlan.beam_refine.num_beams",
+ FT_UINT24, BASE_DEC, NULL, 0x0001f0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_mid_extension,
+ {"MID Extension", "wlan.beam_refine.mid_ext",
+ FT_BOOLEAN, 24, NULL, 0x000008,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_capability_request,
+ {"Capability Request", "wlan.beam_refine.cap_req",
+ FT_BOOLEAN, 24, NULL, 0x000004,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_nextpcp_list,
+ {"AID of NextPCP", "wlan.next_pcp.list",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_nextpcp_token,
+ {"NextPCP List Token", "wlan.next_pcp.token",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_reamaining_BI,
+ {"Remaining BI's", "wlan.pcp_handover.remaining_BIs",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_request_token,
+ {"Request Token", "wlan.request_token",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_bi_start_time,
+ {"BI Start Time", "wlan.bi_start_time",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_sleep_cycle,
+ {"Sleep Cycle", "wlan.sleep_cycle",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_num_awake_bis,
+ {"Number of Awake/Doze BIs", "wlan.num_awake_bis",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_dmg_action_code,
+ {"DMG Action", "wlan_mgt.fixed.dmg_act",
+ FT_UINT8, BASE_HEX, VALS(ff_dmg_action_flags), 0,
+ "Action Code", HFILL }},
+
+ {&hf_ieee80211_ff_unprotected_dmg_action_code,
+ {"Unprotected DMG Action", "wlan_mgt.fixed.unprotected_dmg_act",
+ FT_UINT8, BASE_HEX, VALS(ff_unprotected_dmg_action_flags), 0,
+ "Action Code", HFILL }},
+
+ {&hf_ieee80211_ff_dmg_pwr_mgmt,
+ {"DMG Power Management", "wlan.dmg.pwr_mgmt",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_subject_address,
+ {"Subject Address","wlan.dmg.subject_addr",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ "MAC address of requested STA", HFILL }},
+
+ {&hf_ieee80211_ff_handover_reason,
+ {"Handover Reason","wlan.dmg.handover_reason",
+ FT_UINT8, BASE_DEC, NULL, 0x03,
+ "Handover Reason", HFILL }},
+
+ {&hf_ieee80211_ff_handover_remaining_bi,
+ {"Handover Remaining BI","wlan.dmg.handover_remaining_bi",
+ FT_UINT8, BASE_DEC, NULL, 0x01,
+ "Handover Remaining BI", HFILL }},
+
+ {&hf_ieee80211_ff_handover_result,
+ {"Handover Result","wlan.dmg.handover_result",
+ FT_UINT8, BASE_DEC, NULL, 0x01,
+ "Handover Result", HFILL }},
+
+ {&hf_ieee80211_ff_handover_reject_reason,
+ {"Handover Reject Reason","wlan.dmg.handover_reject_reason",
+ FT_UINT8, BASE_DEC, NULL, 0x03,
+ "Handover Reject Reason", HFILL }},
+
+ {&hf_ieee80211_ff_destination_reds_aid,
+ {"Destination REDS AID","wlan.dmg.destination_reds_aid",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_destination_aid,
+ {"Destination AID","wlan.dmg.destination_aid",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_realy_aid,
+ {"Relay AID","wlan.dmg.realy_aid",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_source_aid,
+ {"Source AID","wlan.dmg.source_aid",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_timing_offset,
+ {"Timing Offset","wlan.dmg.timing_offset",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_sampling_frequency_offset,
+ {"Sampling Frequency Offset","wlan.dmg.sampling_frequency_offset",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_relay_operation_type,
+ {"Relay Operation Type","wlan.dmg.relay_operation_type",
+ FT_UINT8, BASE_DEC, NULL, 0x03,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_peer_sta_aid,
+ {"Peer STA AID","wlan.dmg.peer_sta_aid",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_snr,
+ {"SNR","wlan.dmg.snr",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_internal_angle,
+ {"Internal Angle","wlan.dmg.internal_angle",
+ FT_UINT8, BASE_DEC, NULL, 0xfe,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_recommend,
+ {"Recommend","wlan.dmg.recommend",
+ FT_UINT8, BASE_DEC, NULL, 0x01,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_fst_action_code,
+ {"FST Action Code","wlan.fst.action_code",
+ FT_UINT8, BASE_HEX, VALS(ff_fst_action_flags), 0,
+ "Action Code", HFILL }},
+
+ {&hf_ieee80211_ff_llt,
+ {"Link Loss Timeout","wlan.fst.llt",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_fsts_id,
+ {"FSTS ID","wlan.session_trans.fsts_id",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_mmpdu_len,
+ {"MMPDU Length","wlan.fst.mmpdu_length",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_mmpdu_ctrl,
+ {"MMPDU Control","wlan.fst.mmpdu_ctrl",
+ FT_UINT16, BASE_HEX, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_ff_oct_mmpdu,
+ {"OCT MMPDU","wlan.fst.oct_mmpdu",
+ FT_STRINGZ, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_allocation_id,
+ {"Allocation ID","wlan.dmg_tspec.allocatin_id",
+ FT_UINT24, BASE_DEC, NULL, 0xf00000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_allocation_type,
+ {"Allocation Type","wlan.dmg_tspec.allocatin_type",
+ FT_UINT24, BASE_DEC, NULL, 0x0e0000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_allocation_format,
+ {"Allocation Format","wlan.dmg_tspec.allocatin_format",
+ FT_BOOLEAN, 24, NULL, 0x010000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_pseduo_static,
+ {"Pseduo Static","wlan.dmg_tspec.pseduo_static",
+ FT_BOOLEAN, 24, NULL, 0x008000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_truncatable,
+ {"Truncatable","wlan.dmg_tspec.truncatable",
+ FT_BOOLEAN, 24, NULL, 0x004000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_extendable,
+ {"Extenedable","wlan.dmg_tspec.extendable",
+ FT_BOOLEAN, 24, NULL, 0x002000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_lp_sc_used,
+ {"LP SC Usec","wlan.dmg_tspec.lp_sc_used",
+ FT_BOOLEAN, 24, NULL, 0x001000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_up,
+ {"UP","wlan.dmg_tspec.up",
+ FT_UINT24, BASE_HEX, NULL, 0x000e00,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_dest_aid,
+ {"Destination AID","wlan.dmg_tspec.dest_aid",
+ FT_UINT24, BASE_HEX, NULL, 0x0001fe,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_allocation_period,
+ {"Allocation Period","wlan.dmg_tspec.allocation_period",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_min_allocation,
+ {"Minimal Allocation","wlan.dmg_tspec.min_allocation",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_max_allocation,
+ {"Maximal Allocation","wlan.dmg_tspec.max_allocation",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_min_duration,
+ {"Minimal Duration","wlan.dmg_tspec.min_duration",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_num_of_constraints,
+ {"Number Of Constraints","wlan.dmg_tspec.num_of_constraints",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_tsconst_start_time,
+ {"TS Constraint Start Time","wlan.dmg_tspec.tsconst.start_time",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_tsconst_duration,
+ {"TS Constraint Duration","wlan.dmg_tspec.tsconst.duration",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_tsconst_period,
+ {"TS Constraint Period","wlan.dmg_tspec.tsconst.period",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_tspec_tsconst_interferer_mac,
+ {"TS Constraint Interferer MAC Address","wlan.dmg_tspec.tsconst.interferer_mac",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_channel_measurement_feedback_realtive_I,
+ {"Channel Measurement Feedback Relative I","wlan.ch_meas_fb.realtive_I",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_channel_measurement_feedback_realtive_Q,
+ {"Channel Measurement Feedback Relative Q","wlan.ch_meas_fb.realtive_Q",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_channel_measurement_feedback_tap_delay,
+ {"Channel Measurement Feedback Tap Delay","wlan.ch_meas_fb.tap_delay",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_channel_measurement_feedback_sector_id,
+ {"Channel Measurement Feedback Secotr ID","wlan.ch_meas_fb.sector_id",
+ FT_UINT8, BASE_DEC, NULL, 0xfc,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_channel_measurement_feedback_antenna_id,
+ {"Channel Measurement Feedback Antenna ID","wlan.ch_meas_fb.antenna_id",
+ FT_UINT8, BASE_DEC, NULL, 0x03,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_awake_window,
+ {"Awake Window","wlan.awake_window",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_addba_ext_no_frag,
+ {"ADDBA No Fragmentation","wlan.addba.no_frag",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_ctrl_sta_role,
+ {"STA Rold","wlan.multi_band.ctrl_sta_role",
+ FT_UINT8, BASE_DEC, NULL, 0xe0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_ctrl_addr_present,
+ {"STA MAC Address Present","wlan.multi_band.ctrl_addr_present",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_ctrl_cipher_present,
+ {"PCS Present","wlan.multi_band.ctrl_cipher_present",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_oper_class,
+ {"Operating Class","wlan.multi_band.oper_class",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_channel_number,
+ {"Channel Number","wlan.multi_band.channel_number",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_tsf_offset,
+ {"TSF Offset","wlan.multi_band.tsf_offset",
+ FT_UINT64, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_conn_ap,
+ {"Connection Capability AP","wlan.multi_band.conn_ap",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_conn_pcp,
+ {"Connection Capability PCP","wlan.multi_band.conn_pcp",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_conn_dls,
+ {"Connection Capability DLS","wlan.multi_band.conn_dls",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_conn_tdls,
+ {"Connection Capability TDLS","wlan.multi_band.conn_tdls",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_conn_ibss,
+ {"Connection Capability IBSS","wlan.multi_band.conn_ibss",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_fst_timeout,
+ {"FST Session Timeout","wlan.multi_band.fst_timeout",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_multi_band_sta_mac,
+ {"Transmitting STA MAC Address","wlan.multi_band.sta_mac",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_activity,
+ {"Activity","wlan.activity",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_dmg_link_adapt_mcs,
+ {"MCS","wlan.dmg_link_adapt.mcs",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_dmg_link_adapt_link_margin,
+ {"Link Margin","wlan.dmg_link_adapt.link_margin",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_ref_timestamp,
+ {"Reference Timestamp","wlan.ref_timestamp",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_switching_stream_non_qos,
+ {"Non-Qos Data Frames","wlan.switching_stream.non_qos",
+ FT_BOOLEAN, 8, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_switching_stream_param_num,
+ {"Number Of Switching Stream Elements","wlan.switching_stream.param_num",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_switching_stream_old_tid,
+ {"Old Band TID","wlan.switching_stream.old_tid",
+ FT_UINT16, BASE_DEC, NULL, 0xf000,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_switching_stream_old_direction,
+ {"Old Band Direction","wlan.switching_stream.old_direction",
+ FT_BOOLEAN, 16, NULL, 0x0800,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_switching_stream_new_tid,
+ {"New Band TID","wlan.switching_stream.new_tid",
+ FT_UINT16, BASE_DEC, NULL, 0x0780,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_switching_stream_new_direction,
+ {"New Band Direction","wlan.switching_stream.new_direction",
+ FT_BOOLEAN, 16, NULL, 0x0040,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_switching_stream_new_valid_id,
+ {"Stream ID in New Band Valid","wlan.switching_stream.new_valid_id",
+ FT_BOOLEAN, 16, NULL, 0x0020,
+ NULL, HFILL }},
+
+ {&hf_ieee80211_tag_switching_stream_llt_type,
+ {"LLT Type","wlan.switching_stream.llt_type",
+ FT_BOOLEAN, 16, NULL, 0x0010,
+ NULL, HFILL }},
};
static hf_register_info ff[] = {
@@ -16781,6 +20283,11 @@ proto_register_ieee80211 (void)
FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_pa_action_codes_ext, 0,
"Public Action Code", HFILL }},
+ {&hf_ieee80211_ff_protected_public_action,
+ {"Protected Public Action", "wlan_mgt.fixed.publicact",
+ FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_ppa_action_codes_ext, 0,
+ "Protected Public Action Code", HFILL }},
+
{&hf_ieee80211_ff_capture,
{"Capabilities Information", "wlan_mgt.fixed.capabilities",
FT_UINT16, BASE_HEX, NULL, 0,
@@ -16906,6 +20413,11 @@ proto_register_ieee80211 (void)
FT_UINT8, BASE_HEX, NULL, 0,
"Management action dialog token", HFILL }},
+ {&hf_ieee80211_ff_followup_dialog_token,
+ {"Followup Dialog token", "wlan_mgt.fixed.followup_dialog_token",
+ FT_UINT8, BASE_HEX, NULL, 0,
+ "Management action followup dialog token", HFILL }},
+
{&hf_ieee80211_ff_marvell_action_type,
{"Marvell Action type", "wlan_mgt.fixed.mrvl_action_type",
FT_UINT8, BASE_DEC, VALS(vendor_action_types_mrvl), 0,
@@ -17240,6 +20752,31 @@ proto_register_ieee80211 (void)
FT_UINT8, BASE_HEX, VALS(ba_action_codes), 0,
"Block Ack action code", HFILL }},
+ {&hf_ieee80211_ff_check_beacon,
+ {"Check Beacon", "wlan_mgt.fixed.check_beacon",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ "Unprotected WNM Check Beacon", HFILL }},
+
+ {&hf_ieee80211_ff_tod,
+ {"TOD", "wlan_mgt.fixed.tod",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Previous TS of transmit antenna port", HFILL }},
+
+ {&hf_ieee80211_ff_toa,
+ {"TOA", "wlan_mgt.fixed.toa",
+ FT_UINT32, BASE_DEC, NULL, 0,
+ "Previous TS of recieve antenna port", HFILL }},
+
+ {&hf_ieee80211_ff_max_tod_err,
+ {"MAX TOD ERROR", "wlan_mgt.fixed.max_tod_err",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ "Maximal Error at Previous TS of transmit antenna port", HFILL }},
+
+ {&hf_ieee80211_ff_max_toa_err,
+ {"MAX TOA ERROR", "wlan_mgt.fixed.max_toa_err",
+ FT_UINT8, BASE_DEC, NULL, 0,
+ "Maximal Error at Previous TS of receive antenna port", HFILL }},
+
{&hf_ieee80211_ff_dls_action_code,
{"Action code", "wlan_mgt.fixed.action_code",
FT_UINT16, BASE_HEX, VALS(dls_action_codes), 0,
@@ -17255,6 +20792,16 @@ proto_register_ieee80211 (void)
FT_ETHER, BASE_NONE, NULL, 0,
"Source MAC address", HFILL }},
+ {&hf_ieee80211_ff_req_ap_addr,
+ {"RequesterAP address", "wlan_mgt.fixed.req_ap_addr",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ "RequesterAP address", HFILL }},
+
+ {&hf_ieee80211_ff_res_ap_addr,
+ {"ResponderAP address", "wlan_mgt.fixed.res_ap_addr",
+ FT_ETHER, BASE_NONE, NULL, 0,
+ "ResponderAP address", HFILL }},
+
{&hf_ieee80211_ff_ft_action_code,
{"Action code", "wlan_mgt.fixed.action_code",
FT_UINT8, BASE_DEC, VALS(ft_action_codes), 0,
@@ -17893,39 +21440,51 @@ proto_register_ieee80211 (void)
{"Classifier Mask", "wlan_mgt.tclas.class_mask",
FT_UINT8, BASE_HEX, NULL, 0,
"Specifies a bitmap where bits that are set to 1 identify a subset of the classifier parameters", HFILL }},
+
{&hf_ieee80211_tclas_class_mask0_src_addr,
{"Source Address", "wlan_mgt.tclas.class_mask.src_addr",
FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask0_dst_addr,
{"Destination Address", "wlan_mgt.tclas.class_mask.dst_addr",
FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask0_type,
{"Type", "wlan_mgt.tclas.class_mask.type",
FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask1_ver,
{"Version", "wlan_mgt.tclas.class_mask.version",
FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask1_src_ip,
{"Source IP Address", "wlan_mgt.tclas.class_mask.src_ip",
FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask1_dst_ip,
{"Destination IP Address", "wlan_mgt.tclas.class_mask.dst_ip",
FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask1_src_port,
{"Source Port", "wlan_mgt.tclas.class_mask.src_port",
FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask1_dst_port,
{"Destination Port", "wlan_mgt.tclas.class_mask.dst_port",
FT_UINT8, BASE_HEX, NULL, 0x10, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask1_ipv4_dscp,
{"DSCP", "wlan_mgt.tclas.class_mask.dscp",
FT_UINT8, BASE_HEX, NULL, 0x20, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask1_ipv4_proto,
{"Protocol", "wlan_mgt.tclas.class_mask.proto",
FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask1_ipv6_flow,
{"Flow Label", "wlan_mgt.tclas.class_mask.flow_label",
FT_UINT8, BASE_HEX, NULL, 0x20, NULL, HFILL }},
+
{&hf_ieee80211_tclas_class_mask2_tci,
{"802.1Q CLAN TCI", "wlan_mgt.tclas.class_mask.tci",
FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
@@ -18125,6 +21684,11 @@ proto_register_ieee80211 (void)
FT_BOOLEAN, 16, NULL, 0x0080,
NULL, HFILL }},
+ {&hf_ieee80211_rsn_cap_jmr,
+ {"Joint Multi-band RSNA", "wlan_mgt.rsn.capabilities.jmr",
+ FT_BOOLEAN, 16, NULL, 0x0100,
+ NULL, HFILL }},
+
{&hf_ieee80211_rsn_cap_peerkey,
{"PeerKey Enabled", "wlan_mgt.rsn.capabilities.peerkey",
FT_BOOLEAN, 16, NULL, 0x0200,
@@ -20097,7 +23661,6 @@ proto_register_ieee80211 (void)
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
NULL, HFILL }},
-
/* Extended Capability octet 6 */
{&hf_ieee80211_tag_extended_capabilities_b40,
{"Reject Unadmitted Frame", "wlan_mgt.extcap.b40",
@@ -20126,9 +23689,9 @@ proto_register_ieee80211 (void)
NULL, HFILL }},
{&hf_ieee80211_tag_extended_capabilities_b47,
- {"Reserved", "wlan_mgt.extcap.b47",
+ {"QAB Capability", "wlan_mgt.extcap.b47",
FT_UINT8, BASE_HEX, NULL, 0x80,
- "Must be zero", HFILL }},
+ "AP supports QAB", HFILL }},
/* Extended Capability octet 7 */
{&hf_ieee80211_tag_extended_capabilities_b48,
@@ -20970,6 +24533,11 @@ proto_register_ieee80211 (void)
FT_UINT16, BASE_DEC, NULL, 0,
NULL, HFILL }},
+ {&hf_ieee80211_tspec_dmg,
+ {"DMG attributes", "wlan_mgt.tspec.dmg",
+ FT_UINT16, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+
{&hf_ieee80211_ts_delay,
{"Traffic Stream (TS) Delay", "wlan_mgt.ts_delay",
FT_UINT32, BASE_DEC, NULL, 0,
@@ -21426,6 +24994,7 @@ proto_register_ieee80211 (void)
{&hf_ieee80211_tag_bss_max_idle_period,
{"BSS Max Idle Period (1000 TUs)", "wlan_mgt.bss_max_idle.period",
FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+
{&hf_ieee80211_tag_bss_max_idle_options_protected,
{"BSS Max Idle Period Options: Protected Keep-Alive Required",
"wlan_mgt.bss_max_idle.options.protected",
@@ -21435,22 +25004,27 @@ proto_register_ieee80211 (void)
{&hf_ieee80211_tag_tfs_request_id,
{"TFS ID", "wlan_mgt.tfs_request.id",
FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
{&hf_ieee80211_tag_tfs_request_ac_delete_after_match,
{"TFS Action Code - Delete after match",
"wlan_mgt.tfs_request.action_code.delete_after_match",
FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
+
{&hf_ieee80211_tag_tfs_request_ac_notify,
{"TFS Action Code - Notify",
"wlan_mgt.tfs_request.action_code.notify",
FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
+
{&hf_ieee80211_tag_tfs_request_subelem_id,
{"Subelement ID", "wlan_mgt.tfs_request.subelem.id",
FT_UINT8, BASE_DEC, VALS(tfs_request_subelem_ids), 0,
"TFS Request Subelement ID", HFILL }},
+
{&hf_ieee80211_tag_tfs_request_subelem_len,
{"Length", "wlan_mgt.tfs_request.subelem.len",
FT_UINT8, BASE_DEC, NULL, 0,
"TFS Request Subelement Length", HFILL }},
+
{&hf_ieee80211_tag_tfs_request_subelem,
{"Subelement Data", "wlan_mgt.tfs_request.subelem",
FT_BYTES, BASE_NONE, NULL, 0,
@@ -21461,17 +25035,21 @@ proto_register_ieee80211 (void)
{"Subelement ID", "wlan_mgt.tfs_response.subelem.id",
FT_UINT8, BASE_DEC, VALS(tfs_response_subelem_ids), 0,
"TFS Response Subelement ID", HFILL }},
+
{&hf_ieee80211_tag_tfs_response_subelem_len,
{"Length", "wlan_mgt.tfs_response.subelem.len",
FT_UINT8, BASE_DEC, NULL, 0,
"TFS Response Subelement Length", HFILL }},
+
{&hf_ieee80211_tag_tfs_response_subelem,
{"Subelement Data", "wlan_mgt.tfs_response.subelem",
FT_BYTES, BASE_NONE, NULL, 0,
"TFS Response Subelement Data", HFILL }},
+
{&hf_ieee80211_tag_tfs_response_status,
{"TFS Response Status", "wlan_mgt.tfs_response.status",
FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
{&hf_ieee80211_tag_tfs_response_id,
{"TFS ID", "wlan_mgt.tfs_response.tfs_id",
FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
@@ -21481,11 +25059,13 @@ proto_register_ieee80211 (void)
{"Action Type", "wlan_mgt.wnm_sleep_mode.action_type",
FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_action_types), 0,
"WNM-Sleep Mode Action Type", HFILL }},
+
{&hf_ieee80211_tag_wnm_sleep_mode_response_status,
{"WNM-Sleep Mode Response Status",
"wlan_mgt.wnm_sleep_mode.response_status",
FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_response_status_vals), 0, NULL,
HFILL }},
+
{&hf_ieee80211_tag_wnm_sleep_mode_interval,
{"WNM-Sleep Interval", "wlan_mgt.wnm_sleep_mode.interval",
FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
@@ -21917,7 +25497,20 @@ proto_register_ieee80211 (void)
&ett_ssid_list,
&ett_nintendo,
&ett_qos_map_set_exception,
- &ett_qos_map_set_range
+ &ett_qos_map_set_range,
+ &ett_dynamic_alloc_tree,
+ &ett_ssw_tree,
+ &ett_bf_tree,
+ &ett_sswf_tree,
+ &ett_brp_tree,
+ &ett_blm_tree,
+ &ett_bic_tree,
+ &ett_dmg_params_tree,
+ &ett_cc_tree,
+ &ett_rcsi_tree,
+ &ett_80211_ext,
+ &ett_allocation_tree,
+ &ett_sta_info
};
static ei_register_info ei[] = {
@@ -21953,6 +25546,7 @@ proto_register_ieee80211 (void)
{ &ei_ieee80211_fc_retry, { "wlan.fc.retry.expert", PI_SEQUENCE, PI_NOTE, "Retransmission (retry)", EXPFILL }},
{ &ei_ieee80211_tag_measure_request_beacon_unknown, { "wlan_mgt.measure.req.beacon.unknown.expert", PI_UNDECODED, PI_WARN, "Unknown Data (not interpreted)", EXPFILL }},
{ &ei_ieee80211_tag_data, { "wlan_mgt.tag.data.undecoded", PI_UNDECODED, PI_NOTE, "Dissector for 802.11 IE Tag code not implemented, Contact Wireshark developers if you want this supported", EXPFILL }},
+ { &ei_ieee80211_dmg_subtype, { "wlan.dmg_subtype.bad", PI_MALFORMED, PI_ERROR, "Bad DMG type/subtype", EXPFILL }},
};
expert_module_t *expert_ieee80211;
@@ -21973,6 +25567,9 @@ proto_register_ieee80211 (void)
"IEEE 802.11 MGT", "wlan_mgt");
proto_register_field_array (proto_wlan_mgt, ff, array_length (ff));
+ proto_wlan_ext = proto_register_protocol ("IEEE 802.11 wireless LAN extension frame",
+ "IEEE 802.11 EXT", "wlan_ext");
+
proto_register_subtree_array (tree_array, array_length (tree_array));
expert_ieee80211 = expert_register_protocol(proto_wlan);