From Jouni Malinen via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8711 Wi...
[metze/wireshark/wip.git] / epan / dissectors / packet-ieee80211.c
index 32009f7890fe743b991334feb3b52b2e6caa3f53..73171282ab9d2f5ca8cb9d02b24bba95d4be1b43 100644 (file)
  * Reference :
  * The 802.11 standard is "free", 6 month after the publication.
  *
- * IEEE Std 802.11-2007: Revision of IEEE Std 802.11-199
- * include 8 amendments (802.11a,b,d,e,g,h,i,j)
- * http://standards.ieee.org/getieee802/download/802.11-2007.pdf
+ * IEEE Std 802.11-2012: Revision of IEEE Std 802.11-2007
+ * include 10 amendments (802.11k,r,y,w,n,p,z,v,u,s) 802.11-2007
+ * include 8 amendments (802.11a,b,d,e,g,h,i,j) 802.11-1999
+ * http://standards.ieee.org/getieee802/download/802.11-2012.pdf
  *
- * IEEE Std 802.11k-2008: Radio Resource Measurement of Wireless LANs
- * http://standards.ieee.org/getieee802/download/802.11k-2008.pdf
- *
- * IEEE Std 802.11r-2008: Fast Basic Service Set (BSS) Transition
- * http://standards.ieee.org/getieee802/download/802.11r-2008.pdf
- *
- * IEEE Std 802.11y-2008: 3650-3700 MHz Operation in USA
- * http://standards.ieee.org/getieee802/download/802.11y-2008.pdf
- *
- * IEEE Std 802.11w-2009: Protected Management Frames
- * http://standards.ieee.org/getieee802/download/802.11w-2009.pdf
- *
- * IEEE Std 802.11n-2009: Enhancements for Higher Throughput
- * http://standards.ieee.org/getieee802/download/802.11n-2009.pdf
- *
- * IEEE Std 802.11p-2010: Wireless Access in Vehicular Environments
- * http://standards.ieee.org/getieee802/download/802.11p-2010.pdf
- *
- * IEEE Std 802.11z-2010: Extensions to Direct-Link Setup (DLS)
- * http://standards.ieee.org/getieee802/download/802.11z-2010.pdf
+ * WAPI (IE 68)
+ * http://isotc.iso.org/livelink/livelink/fetch/-8913189/8913214/8913250/8913253/JTC001-N-9880.pdf?nodeid=8500308&vernum=-2
  */
 
 
 #include <epan/crypt/airpdcap_ws.h>
 /* Davide Schiera (2006-11-22) ---------------------------------------------- */
 
-extern const value_string eap_type_vals[]; /* from packet-eap.c */
+extern value_string_ext eap_type_vals_ext; /* from packet-eap.c */
+
+/* To Avoid Compilation warnings/errors because
+ * dissectors such as RIC will use this function recursively
+ */
+static int add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype);
 
 #ifndef roundup2
 #define roundup2(x, y)  (((x)+((y)-1))&(~((y)-1)))  /* if y is powers of two */
@@ -149,9 +137,8 @@ static gboolean wlan_ignore_draft_ht = FALSE;
 #define WLAN_IGNORE_WEP_W_IV   2
 static gint wlan_ignore_wep = WLAN_IGNORE_WEP_NO;
 
-/* Tables for reassembly of fragments. */
-static GHashTable *wlan_fragment_table = NULL;
-static GHashTable *wlan_reassembled_table = NULL;
+/* Table for reassembly of fragments. */
+static reassembly_table wlan_reassembly_table;
 
 /* Statistical data */
 static struct _wlan_stats wlan_stats;
@@ -160,17 +147,13 @@ static struct _wlan_stats wlan_stats;
  * UAT for WEP decoder
  *-------------------------------------
  */
-/* UAT entry structure. */
-typedef struct {
-    guint8    key;
-    gchar    *string;
-} uat_wep_key_record_t;
-
 static uat_wep_key_record_t *uat_wep_key_records = NULL;
-static uat_t * wep_uat = NULL;
-static guint num_wepkeys_uat = 0;
+static uat_t                *wep_uat             = NULL;
+static guint                 num_wepkeys_uat     = 0;
 
-static void* uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U_) {
+static void *
+uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U_)
+{
     uat_wep_key_record_t* new_key = (uat_wep_key_record_t *)n;
     const uat_wep_key_record_t* old_key = (const uat_wep_key_record_t *)o;
 
@@ -183,7 +166,9 @@ static void* uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U_)
     return new_key;
 }
 
-static void uat_wep_key_record_update_cb(void* r, const char** err) {
+static void
+uat_wep_key_record_update_cb(void* r, const char** err)
+{
     uat_wep_key_record_t* rec = (uat_wep_key_record_t *)r;
     decryption_key_t* dk;
 
@@ -193,8 +178,8 @@ static void uat_wep_key_record_update_cb(void* r, const char** err) {
         g_strstrip(rec->string);
         dk = parse_key_string(rec->string, rec->key);
 
-        if(dk != NULL) {
-           switch(dk->type) {
+        if (dk != NULL) {
+           switch (dk->type) {
               case AIRPDCAP_KEY_TYPE_WEP:
               case AIRPDCAP_KEY_TYPE_WEP_40:
               case AIRPDCAP_KEY_TYPE_WEP_104:
@@ -222,40 +207,35 @@ static void uat_wep_key_record_update_cb(void* r, const char** err) {
     }
 }
 
-static void uat_wep_key_record_free_cb(void*r) {
+static void
+uat_wep_key_record_free_cb(void*r)
+{
     uat_wep_key_record_t* key = (uat_wep_key_record_t *)r;
 
     if (key->string) g_free(key->string);
 }
 
-UAT_VS_DEF(uat_wep_key_records, key, uat_wep_key_record_t, 0, STRING_KEY_TYPE_WEP)
+UAT_VS_DEF(uat_wep_key_records, key, uat_wep_key_record_t, guint8, 0, STRING_KEY_TYPE_WEP)
 UAT_CSTRING_CB_DEF(uat_wep_key_records, string, uat_wep_key_record_t)
 
 /* Stuff for the WEP decoder */
 static gboolean enable_decryption = FALSE;
-static void init_wepkeys(void);
 
 /* Davide Schiera (2006-11-26): created function to decrypt WEP and WPA/WPA2  */
 static tvbuff_t *try_decrypt(tvbuff_t *tvb, guint32 offset, guint32 len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer);
 
 static int weak_iv(guchar *iv);
-#define SSWAP(a,b) {guint8 tmp = s[a]; s[a] = s[b]; s[b] = tmp;}
 
 typedef struct mimo_control
-  {
-    guint8 nc;
-    guint8 nr;
-    gboolean chan_width;
-    guint8 grouping;
-    guint8 coefficient_size;
-    guint8 codebook_info;
-    guint8 remaining_matrix_segment;
-  } mimo_control_t;
-
-mimo_control_t get_mimo_control (tvbuff_t *tvb, int offset);
-int add_mimo_csi_matrices_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl);
-int add_mimo_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl);
-int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl);
+{
+  guint8 nc;
+  guint8 nr;
+  gboolean chan_width;
+  guint8 grouping;
+  guint8 coefficient_size;
+  guint8 codebook_info;
+  guint8 remaining_matrix_segment;
+} mimo_control_t;
 
 /* ************************************************************************* */
 /*                          Miscellaneous Constants                          */
@@ -372,7 +352,7 @@ int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t
 #define QOS_FIELD_CONTENT(x)  (((x) & 0xFF00) >> 8)
 #define QOS_MESH_CONTROL_PRESENT(x) (((x) & 0x0100) >> 8)
 
-#define QOS_FLAG_EOSP    0x10
+#define QOS_FLAG_EOSP    0x0010
 
 /*
  * Extract subfields from the result of QOS_FIELD_CONTENT().
@@ -482,31 +462,30 @@ int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t
 /*        Logical field codes (dissector's encoding of fixed fields)         */
 /* ************************************************************************* */
 enum fixed_field {
-  FIELD_TIMESTAMP, /* 64-bit timestamp */
-  FIELD_BEACON_INTERVAL, /* 16-bit beacon interval */
-  FIELD_CAP_INFO, /* Add capability information tree */
-  FIELD_AUTH_ALG, /* Authentication algorithm used */
-  FIELD_AUTH_TRANS_SEQ, /* Authentication sequence number */
+  FIELD_TIMESTAMP,                            /* 64-bit timestamp */
+  FIELD_BEACON_INTERVAL,                      /* 16-bit beacon interval */
+  FIELD_CAP_INFO,                             /* Add capability information tree */
+  FIELD_AUTH_ALG,                             /* Authentication algorithm used */
+  FIELD_AUTH_TRANS_SEQ,                       /* Authentication sequence number */
   FIELD_CURRENT_AP_ADDR,
   FIELD_LISTEN_IVAL,
   FIELD_REASON_CODE,
   FIELD_ASSOC_ID,
   FIELD_STATUS_CODE,
-  FIELD_CATEGORY_CODE, /* Management action category */
-  FIELD_ACTION_CODE, /* Management action code */
-  FIELD_DIALOG_TOKEN, /* Management action 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
-                          */
+  FIELD_CATEGORY_CODE,                        /* Management action category */
+  FIELD_ACTION_CODE,                          /* Management action code */
+  FIELD_DIALOG_TOKEN,                         /* Management action 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 */
   FIELD_QOS_ACTION_CODE,
   FIELD_QOS_TS_INFO,
   FIELD_DLS_ACTION_CODE,
-  FIELD_DST_MAC_ADDR, /* DLS destination MAC address */
-  FIELD_SRC_MAC_ADDR, /* DLS source MAC address */
-  FIELD_DLS_TIMEOUT, /* DLS timeout value */
-  FIELD_SCHEDULE_INFO, /* Schedule Info field */
-  FIELD_ACTION, /* Action field */
+  FIELD_DST_MAC_ADDR,                         /* DLS destination MAC address */
+  FIELD_SRC_MAC_ADDR,                         /* DLS source MAC address */
+  FIELD_DLS_TIMEOUT,                          /* DLS timeout value */
+  FIELD_SCHEDULE_INFO,                        /* Schedule Info field */
+  FIELD_ACTION,                               /* Action field */
   FIELD_BLOCK_ACK_ACTION_CODE,
   FIELD_QOS_INFO_AP,
   FIELD_QOS_INFO_STA,
@@ -547,69 +526,103 @@ enum fixed_field {
   FIELD_MESH_CONTROL,
   FIELD_SELFPROT_ACTION,
   FIELD_WNM_ACTION_CODE,
-  /* add any new fixed field value above this line */
+  FIELD_KEY_DATA_LENGTH,
+  FIELD_WNM_NOTIFICATION_TYPE,
+                                              /* add any new fixed field value above this line */
   MAX_FIELD_NUM
 };
 
 /* ************************************************************************* */
 /*        Logical field codes (IEEE 802.11 encoding of tags)                 */
 /* ************************************************************************* */
-#define TAG_SSID                     0
-#define TAG_SUPP_RATES               1
-#define TAG_FH_PARAMETER             2
-#define TAG_DS_PARAMETER             3
-#define TAG_CF_PARAMETER             4
-#define TAG_TIM                      5
-#define TAG_IBSS_PARAMETER           6
-#define TAG_COUNTRY_INFO             7
-#define TAG_FH_HOPPING_PARAMETER     8
-#define TAG_FH_HOPPING_TABLE         9
-#define TAG_REQUEST                  10
-#define TAG_QBSS_LOAD                11
-#define TAG_EDCA_PARAM_SET           12
-#define TAG_TSPEC                    13
-#define TAG_TCLAS                    14
-#define TAG_SCHEDULE                 15
-#define TAG_CHALLENGE_TEXT           16
-
-#define TAG_POWER_CONSTRAINT         32
-#define TAG_POWER_CAPABILITY         33
-#define TAG_TPC_REQUEST              34
-#define TAG_TPC_REPORT               35
-#define TAG_SUPPORTED_CHANNELS       36
-#define TAG_CHANNEL_SWITCH_ANN       37
-#define TAG_MEASURE_REQ              38
-#define TAG_MEASURE_REP              39
-#define TAG_QUIET                    40
-#define TAG_IBSS_DFS                 41
-#define TAG_ERP_INFO                 42
-#define TAG_TS_DELAY                 43
-#define TAG_TCLAS_PROCESS            44
-#define TAG_HT_CAPABILITY            45  /* IEEE Stc 802.11n/D2.0 */
-#define TAG_QOS_CAPABILITY           46
-#define TAG_ERP_INFO_OLD             47  /* IEEE Std 802.11g/D4.0 */
-#define TAG_RSN_IE                   48
+#define TAG_SSID                       0
+#define TAG_SUPP_RATES                 1
+#define TAG_FH_PARAMETER               2
+#define TAG_DS_PARAMETER               3
+#define TAG_CF_PARAMETER               4
+#define TAG_TIM                        5
+#define TAG_IBSS_PARAMETER             6
+#define TAG_COUNTRY_INFO               7
+#define TAG_FH_HOPPING_PARAMETER       8
+#define TAG_FH_HOPPING_TABLE           9
+#define TAG_REQUEST                   10
+#define TAG_QBSS_LOAD                 11
+#define TAG_EDCA_PARAM_SET            12
+#define TAG_TSPEC                     13
+#define TAG_TCLAS                     14
+#define TAG_SCHEDULE                  15
+#define TAG_CHALLENGE_TEXT            16
+
+#define TAG_POWER_CONSTRAINT          32
+#define TAG_POWER_CAPABILITY          33
+#define TAG_TPC_REQUEST               34
+#define TAG_TPC_REPORT                35
+#define TAG_SUPPORTED_CHANNELS        36
+#define TAG_CHANNEL_SWITCH_ANN        37
+#define TAG_MEASURE_REQ               38
+#define TAG_MEASURE_REP               39
+#define TAG_QUIET                     40
+#define TAG_IBSS_DFS                  41
+#define TAG_ERP_INFO                  42
+#define TAG_TS_DELAY                  43
+#define TAG_TCLAS_PROCESS             44
+#define TAG_HT_CAPABILITY             45 /* IEEE Stc 802.11n/D2.0 */
+#define TAG_QOS_CAPABILITY            46
+#define TAG_ERP_INFO_OLD              47 /* IEEE Std 802.11g/D4.0 */
+#define TAG_RSN_IE                    48
 /* Reserved 49 */
-#define TAG_EXT_SUPP_RATES           50
-#define TAG_AP_CHANNEL_REPORT        51
-#define TAG_NEIGHBOR_REPORT          52
-#define TAG_RCPI                     53
-#define TAG_MOBILITY_DOMAIN          54   /* IEEE Std 802.11r-2008 */
-#define TAG_FAST_BSS_TRANSITION      55   /* IEEE Std 802.11r-2008 */
-#define TAG_TIMEOUT_INTERVAL         56   /* IEEE Std 802.11r-2008 */
-#define TAG_RIC_DATA                 57   /* IEEE Std 802.11r-2008 */
-/* 58 ??? */
+#define TAG_EXT_SUPP_RATES            50
+#define TAG_AP_CHANNEL_REPORT         51
+#define TAG_NEIGHBOR_REPORT           52
+#define TAG_RCPI                      53
+#define TAG_MOBILITY_DOMAIN           54  /* IEEE Std 802.11r-2008 */
+#define TAG_FAST_BSS_TRANSITION       55  /* IEEE Std 802.11r-2008 */
+#define TAG_TIMEOUT_INTERVAL          56  /* IEEE Std 802.11r-2008 */
+#define TAG_RIC_DATA                  57  /* IEEE Std 802.11r-2008 */
+#define TAG_DSE_REG_LOCATION          58
 #define TAG_SUPPORTED_REGULATORY_CLASSES            59 /* IEEE Std 802.11w-2009 */
 #define TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT    60 /* IEEE Std 802.11w-2009 */
-#define TAG_HT_INFO                  61   /* IEEE Stc 802.11n/D2.0 */
-#define TAG_SECONDARY_CHANNEL_OFFSET 62   /* IEEE Stc 802.11n/D1.10/D2.0 */
-#define TAG_TIME_ADV                 69   /* IEEE Std 802.11p-2010 */
-#define TAG_20_40_BSS_CO_EX          72   /* IEEE P802.11n/D6.0 */
-#define TAG_20_40_BSS_INTOL_CH_REP   73   /* IEEE P802.11n/D6.0 */
-#define TAG_OVERLAP_BSS_SCAN_PAR     74   /* IEEE P802.11n/D6.0 */
-#define TAG_RIC_DESCRIPTOR           75   /* IEEE Std 802.11r-2008 */
-#define TAG_MMIE                     76   /* IEEE Std 802.11w-2009 */
-#define TAG_TIME_ZONE                98   /* IEEE STd 802.11v-2011 */
+#define TAG_HT_INFO                   61  /* IEEE Stc 802.11n/D2.0 */
+#define TAG_SECONDARY_CHANNEL_OFFSET  62  /* IEEE Stc 802.11n/D1.10/D2.0 */
+#define TAG_BSS_AVG_ACCESS_DELAY      63
+#define TAG_ANTENNA                   64
+#define TAG_RSNI                      65
+#define TAG_MEASURE_PILOT_TRANS       66
+#define TAG_BSS_AVB_ADM_CAPACITY      67
+#define TAG_IE_68_CONFLICT            68  /* Conflict: WAPI Vs. IEEE */
+#define TAG_WAPI_PARAM_SET            68
+#define TAG_BSS_AC_ACCESS_DELAY       68
+#define TAG_TIME_ADV                  69  /* IEEE Std 802.11p-2010 */
+#define TAG_RM_ENABLED_CAPABILITY     70
+#define TAG_MULTIPLE_BSSID            71
+#define TAG_20_40_BSS_CO_EX           72  /* IEEE P802.11n/D6.0 */
+#define TAG_20_40_BSS_INTOL_CH_REP    73  /* IEEE P802.11n/D6.0 */
+#define TAG_OVERLAP_BSS_SCAN_PAR      74  /* IEEE P802.11n/D6.0 */
+#define TAG_RIC_DESCRIPTOR            75  /* IEEE Std 802.11r-2008 */
+#define TAG_MMIE                      76  /* IEEE Std 802.11w-2009 */
+#define TAG_EVENT_REQUEST             78
+#define TAG_EVENT_REPORT              79
+#define TAG_DIAGNOSTIC_REQUEST        80
+#define TAG_DIAGNOSTIC_REPORT         81
+#define TAG_LOCATION_PARAMETERS       82
+#define TAG_NO_BSSID_CAPABILITY       83
+#define TAG_SSID_LIST                 84
+#define TAG_MULTIPLE_BSSID_INDEX      85
+#define TAG_FMS_DESCRIPTOR            86
+#define TAG_FMS_REQUEST               87
+#define TAG_FMS_RESPONSE              88
+#define TAG_QOS_TRAFFIC_CAPABILITY    89
+#define TAG_BSS_MAX_IDLE_PERIOD       90
+#define TAG_TFS_REQUEST               91
+#define TAG_TFS_RESPONSE              92
+#define TAG_WNM_SLEEP_MODE            93
+#define TAG_TIM_BROADCAST_REQUEST     94
+#define TAG_TIM_BROADCAST_RESPONSE    95
+#define TAG_COLLOCATED_INTER_REPORT   96
+#define TAG_CHANNEL_USAGE             97
+#define TAG_TIME_ZONE                 98  /* IEEE Std 802.11v-2011 */
+#define TAG_DMS_REQUEST               99
+#define TAG_DMS_RESPONSE             100
 #define TAG_LINK_IDENTIFIER          101  /* IEEE Std 802.11z-2010 */
 #define TAG_WAKEUP_SCHEDULE          102  /* IEEE Std 802.11z-2010 */
 #define TAG_CHANNEL_SWITCH_TIMING    104  /* IEEE Std 802.11z-2010 */
@@ -623,113 +636,185 @@ enum fixed_field {
 #define TAG_EMERGENCY_ALERT_ID       112  /* IEEE Std 802.11u-2011 */
 #define TAG_MESH_CONFIGURATION       113  /* IEEE Std 802.11s-2011 */
 #define TAG_MESH_ID                  114  /* IEEE Std 802.11s-2011 */
+#define TAG_MESH_LINK_METRIC_REPORT  115
+#define TAG_CONGESTION_NOTIFICATION  116
 #define TAG_MESH_PEERING_MGMT        117  /* IEEE Std 802.11s-2011 */
+#define TAG_MESH_CHANNEL_SWITCH      118
+#define TAG_MESH_AWAKE_WINDOW        119
+#define TAG_BEACON_TIMING            120
+#define TAG_MCCAOP_SETUP_REQUEST     121
+#define TAG_MCCAOP_SETUP_REPLY       122
+#define TAG_MCCAOP_ADVERTISSEMENT    123
+#define TAG_MCCAOP_TEARDOWN          124
+#define TAG_GANN                     125
 #define TAG_RANN                     126  /* IEEE Std 802.11s-2011 */
 #define TAG_EXTENDED_CAPABILITIES    127  /* IEEE Stc 802.11n/D1.10/D2.0 */
 #define TAG_AGERE_PROPRIETARY        128
 #define TAG_MESH_PREQ                130  /* IEEE Std 802.11s-2011 */
 #define TAG_MESH_PREP                131  /* IEEE Std 802.11s-2011 */
 #define TAG_MESH_PERR                132  /* IEEE Std 802.11s-2011 */
-#define TAG_CISCO_CCX1_CKIP          133  /* Cisco Compatible eXtensions */
-#define TAG_CISCO_UNKNOWN_88         136  /* Cisco Compatible eXtensions? */
-#define TAG_CISCO_UNKNOWN_95         149  /* Cisco Compatible eXtensions */
+#define TAG_CISCO_CCX1_CKIP          133  /* Cisco Compatible eXtensions v1 */
+#define TAG_CISCO_CCX2               136  /* Cisco Compatible eXtensions v2 */
+#define TAG_PXU                      137
+#define TAG_PXUC                     138
+#define TAG_AUTH_MESH_PEERING_EXCH   139
+#define TAG_MIC                      140
+#define TAG_DESTINATION_URI          141
+#define TAG_U_APSD_COEX              142
+#define TAG_CISCO_CCX3               149  /* Cisco Compatible eXtensions v3 */
 #define TAG_CISCO_UNKNOWN_96         150  /* Cisco Compatible eXtensions */
 #define TAG_SYMBOL_PROPRIETARY       173
+#define TAG_MCCAOP_ADVERTISSEMENT_OV 174
+#define TAG_VHT_CAPABILITY           191  /* IEEE Stc 802.11ac/D3.1 */
+#define TAG_VHT_OPERATION            192  /* IEEE Stc 802.11ac/D3.1 */
 #define TAG_VENDOR_SPECIFIC_IE       221
 
 static const value_string tag_num_vals[] = {
-  { TAG_SSID, "SSID parameter set" },
-  { TAG_SUPP_RATES, "Supported Rates" },
-  { TAG_FH_PARAMETER, "FH Parameter set" },
-  { TAG_DS_PARAMETER, "DS Parameter set" },
-  { TAG_CF_PARAMETER, "CF Parameter set" },
-  { TAG_TIM, "Traffic Indication Map (TIM)" },
-  { TAG_IBSS_PARAMETER, "IBSS Parameter set" },
-  { TAG_COUNTRY_INFO, "Country Information" },
-  { TAG_FH_HOPPING_PARAMETER, "Hopping Pattern Parameters" },
-  { TAG_FH_HOPPING_TABLE, "Hopping Pattern Table" },
-  { TAG_REQUEST, "Request" },
-  { TAG_QBSS_LOAD, "QBSS Load Element" },
-  { TAG_EDCA_PARAM_SET, "EDCA Parameter Set" },
-  { TAG_TSPEC, "Traffic Specification" },
-  { TAG_TCLAS, "Traffic Classification" },
-  { TAG_SCHEDULE, "Schedule" },
-  { TAG_CHALLENGE_TEXT, "Challenge text" },
-  { TAG_POWER_CONSTRAINT, "Power Constraint" },
-  { TAG_POWER_CAPABILITY, "Power Capability" },
-  { TAG_TPC_REQUEST, "TPC Request" },
-  { TAG_TPC_REPORT, "TPC Report" },
-  { TAG_SUPPORTED_CHANNELS, "Supported Channels" },
-  { TAG_CHANNEL_SWITCH_ANN, "Channel Switch Announcement" },
-  { TAG_MEASURE_REQ, "Measurement Request" },
-  { TAG_MEASURE_REP, "Measurement Report" },
-  { TAG_QUIET, "Quiet" },
-  { TAG_IBSS_DFS, "IBSS DFS" },
-  { TAG_ERP_INFO, "ERP Information" },
-  { TAG_TS_DELAY, "TS Delay" },
-  { TAG_TCLAS_PROCESS, "TCLAS Processing" },
-  { TAG_HT_CAPABILITY, "HT Capabilities (802.11n D1.10)" },
-  { TAG_QOS_CAPABILITY, "QoS Capability" },
-  { TAG_ERP_INFO_OLD, "ERP Information" }, /* Reserved... */
-  { TAG_RSN_IE, "RSN Information" },
-  { TAG_EXT_SUPP_RATES, "Extended Supported Rates" },
-  { TAG_AP_CHANNEL_REPORT, "AP Channel Report" },
-  { TAG_NEIGHBOR_REPORT, "Neighbor Report" },
-  { TAG_RCPI, "RCPI" },
-  { TAG_MOBILITY_DOMAIN, "Mobility Domain" },
-  { TAG_FAST_BSS_TRANSITION, "Fast BSS Transition" },
-  { TAG_TIMEOUT_INTERVAL, "Timeout Interval" },
-  { TAG_RIC_DATA, "RIC Data" },
-  { TAG_SUPPORTED_REGULATORY_CLASSES, "Supported Regulatory Classes" },
+  { TAG_SSID,                                 "SSID parameter set" },
+  { TAG_SUPP_RATES,                           "Supported Rates" },
+  { TAG_FH_PARAMETER,                         "FH Parameter set" },
+  { TAG_DS_PARAMETER,                         "DS Parameter set" },
+  { TAG_CF_PARAMETER,                         "CF Parameter set" },
+  { TAG_TIM,                                  "Traffic Indication Map (TIM)" },
+  { TAG_IBSS_PARAMETER,                       "IBSS Parameter set" },
+  { TAG_COUNTRY_INFO,                         "Country Information" },
+  { TAG_FH_HOPPING_PARAMETER,                 "Hopping Pattern Parameters" },
+  { TAG_FH_HOPPING_TABLE,                     "Hopping Pattern Table" },
+  { TAG_REQUEST,                              "Request" },
+  { TAG_QBSS_LOAD,                            "QBSS Load Element" },
+  { TAG_EDCA_PARAM_SET,                       "EDCA Parameter Set" },
+  { TAG_TSPEC,                                "Traffic Specification" },
+  { TAG_TCLAS,                                "Traffic Classification" },
+  { TAG_SCHEDULE,                             "Schedule" },
+  { TAG_CHALLENGE_TEXT,                       "Challenge text" },
+  { TAG_POWER_CONSTRAINT,                     "Power Constraint" },
+  { TAG_POWER_CAPABILITY,                     "Power Capability" },
+  { TAG_TPC_REQUEST,                          "TPC Request" },
+  { TAG_TPC_REPORT,                           "TPC Report" },
+  { TAG_SUPPORTED_CHANNELS,                   "Supported Channels" },
+  { TAG_CHANNEL_SWITCH_ANN,                   "Channel Switch Announcement" },
+  { TAG_MEASURE_REQ,                          "Measurement Request" },
+  { TAG_MEASURE_REP,                          "Measurement Report" },
+  { TAG_QUIET,                                "Quiet" },
+  { TAG_IBSS_DFS,                             "IBSS DFS" },
+  { TAG_ERP_INFO,                             "ERP Information" },
+  { TAG_TS_DELAY,                             "TS Delay" },
+  { TAG_TCLAS_PROCESS,                        "TCLAS Processing" },
+  { TAG_HT_CAPABILITY,                        "HT Capabilities (802.11n D1.10)" },
+  { TAG_QOS_CAPABILITY,                       "QoS Capability" },
+  { TAG_ERP_INFO_OLD,                         "ERP Information" }, /* Reserved... */
+  { TAG_RSN_IE,                               "RSN Information" },
+  { TAG_EXT_SUPP_RATES,                       "Extended Supported Rates" },
+  { TAG_AP_CHANNEL_REPORT,                    "AP Channel Report" },
+  { TAG_NEIGHBOR_REPORT,                      "Neighbor Report" },
+  { TAG_RCPI,                                 "RCPI" },
+  { TAG_MOBILITY_DOMAIN,                      "Mobility Domain" },
+  { TAG_FAST_BSS_TRANSITION,                  "Fast BSS Transition" },
+  { TAG_TIMEOUT_INTERVAL,                     "Timeout Interval" },
+  { TAG_RIC_DATA,                             "RIC Data" },
+  { TAG_DSE_REG_LOCATION,                     "DSE Registered Location" },
+  { TAG_SUPPORTED_REGULATORY_CLASSES,         "Supported Regulatory Classes" },
   { TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement" },
-  { TAG_HT_INFO, "HT Information (802.11n D1.10)" },
-  { TAG_SECONDARY_CHANNEL_OFFSET, "Secondary Channel Offset (802.11n D1.10)" },
-  { TAG_TIME_ADV, "Time Advertisement" },
-  { TAG_20_40_BSS_CO_EX, "20/40 BSS Coexistence" },
-  { TAG_20_40_BSS_INTOL_CH_REP, "20/40 BSS Intolerant Channel Report" },   /* IEEE P802.11n/D6.0 */
-  { TAG_OVERLAP_BSS_SCAN_PAR, "Overlapping BSS Scan Parameters" },       /* IEEE P802.11n/D6.0 */
-  { TAG_RIC_DESCRIPTOR, "RIC Descriptor" },
-  { TAG_MMIE, "Management MIC" },
-  { TAG_TIME_ZONE, "Time Zone" },
-  { TAG_LINK_IDENTIFIER, "Link Identifier" },
-  { TAG_WAKEUP_SCHEDULE, "Wakeup Schedule" },
-  { TAG_CHANNEL_SWITCH_TIMING, "Channel Switch Timing" },
-  { TAG_PTI_CONTROL, "PTI Control" },
-  { TAG_PU_BUFFER_STATUS, "PU Buffer Status" },
-  { TAG_INTERWORKING, "Interworking" },
-  { TAG_ADVERTISEMENT_PROTOCOL, "Advertisement Protocol"},
-  { TAG_EXPIDITED_BANDWIDTH_REQ, "Expedited Bandwidth Request" },
-  { TAG_QOS_MAP_SET, "QoS Map Set" },
-  { TAG_ROAMING_CONSORTIUM, "Roaming Consortium" },
-  { TAG_EMERGENCY_ALERT_ID, "Emergency Alert Identifier" },
-  { TAG_MESH_ID, "Mesh ID" },
-  { TAG_MESH_CONFIGURATION, "Mesh Configuration" },
-  { TAG_MESH_PEERING_MGMT, "Mesh Peering Management" },
-  { TAG_RANN, "Root Announcement" },
-  { TAG_EXTENDED_CAPABILITIES, "Extended Capabilities" },
-  { TAG_AGERE_PROPRIETARY, "Agere Proprietary" },
-  { TAG_MESH_PREQ, "Path Request" },
-  { TAG_MESH_PREP, "Path Reply" },
-  { TAG_MESH_PERR, "Path Error" },
-  { TAG_CISCO_CCX1_CKIP, "Cisco CCX1 CKIP + Device Name" },
-  { TAG_CISCO_UNKNOWN_88, "Cisco Unknown 88" },
-  { TAG_CISCO_UNKNOWN_95, "Cisco Unknown 95" },
-  { TAG_CISCO_UNKNOWN_96, "Cisco Unknown 96" },
-  { TAG_SYMBOL_PROPRIETARY, "Symbol Proprietary" },
-  { TAG_VENDOR_SPECIFIC_IE, "Vendor Specific" },
+  { TAG_HT_INFO,                              "HT Information (802.11n D1.10)" },
+  { TAG_SECONDARY_CHANNEL_OFFSET,             "Secondary Channel Offset (802.11n D1.10)" },
+  { TAG_BSS_AVG_ACCESS_DELAY,                 "BSS Average Access Delay" },
+  { TAG_ANTENNA,                              "Antenna" },
+  { TAG_RSNI,                                 "RSNI" },
+  { TAG_MEASURE_PILOT_TRANS,                  "Measurement Pilot Transmission" },
+  { TAG_BSS_AVB_ADM_CAPACITY,                 "BSS Available Admission Capacity" },
+  { TAG_IE_68_CONFLICT,                       "BSS AC Access Delay/WAPI Parameter Set" },
+  { TAG_TIME_ADV,                             "Time Advertisement" },
+  { TAG_RM_ENABLED_CAPABILITY,                "RM Enabled Capabilities" },
+  { TAG_MULTIPLE_BSSID,                       "Multiple BSSID" },
+  { TAG_20_40_BSS_CO_EX,                      "20/40 BSS Coexistence" },
+  { TAG_20_40_BSS_INTOL_CH_REP,               "20/40 BSS Intolerant Channel Report" },   /* IEEE P802.11n/D6.0 */
+  { TAG_OVERLAP_BSS_SCAN_PAR,                 "Overlapping BSS Scan Parameters" },       /* IEEE P802.11n/D6.0 */
+  { TAG_RIC_DESCRIPTOR,                       "RIC Descriptor" },
+  { TAG_MMIE,                                 "Management MIC" },
+  { TAG_EVENT_REQUEST,                        "Event Request" },
+  { TAG_EVENT_REPORT,                         "Event Report" },
+  { TAG_DIAGNOSTIC_REQUEST,                   "Diagnostic Request" },
+  { TAG_DIAGNOSTIC_REPORT,                    "Diagnostic Report" },
+  { TAG_LOCATION_PARAMETERS,                  "Location Parameters" },
+  { TAG_NO_BSSID_CAPABILITY,                  "Non Transmitted BSSID Capability" },
+  { TAG_SSID_LIST,                            "SSID List" },
+  { TAG_MULTIPLE_BSSID_INDEX,                 "Multiple BSSID Index" },
+  { TAG_FMS_DESCRIPTOR,                       "FMS Descriptor" },
+  { TAG_FMS_REQUEST,                          "FMS Request" },
+  { TAG_FMS_RESPONSE,                         "FMS Response" },
+  { TAG_QOS_TRAFFIC_CAPABILITY,               "QoS Traffic Capability" },
+  { TAG_BSS_MAX_IDLE_PERIOD,                  "BSS Max Idle Period" },
+  { TAG_TFS_REQUEST,                          "TFS Request" },
+  { TAG_TFS_RESPONSE,                         "TFS Response" },
+  { TAG_WNM_SLEEP_MODE,                       "WNM-Sleep Mode" },
+  { TAG_TIM_BROADCAST_REQUEST,                "TIM Broadcast Request" },
+  { TAG_TIM_BROADCAST_RESPONSE,               "TIM Broadcast Response" },
+  { TAG_COLLOCATED_INTER_REPORT,              "Collocated Interference Report" },
+  { TAG_CHANNEL_USAGE,                        "Channel Usage" },
+  { TAG_TIME_ZONE,                            "Time Zone" },
+  { TAG_DMS_REQUEST,                          "DMS Request" },
+  { TAG_DMS_RESPONSE,                         "DMS Response" },
+  { TAG_LINK_IDENTIFIER,                      "Link Identifier" },
+  { TAG_WAKEUP_SCHEDULE,                      "Wakeup Schedule" },
+  { TAG_CHANNEL_SWITCH_TIMING,                "Channel Switch Timing" },
+  { TAG_PTI_CONTROL,                          "PTI Control" },
+  { TAG_PU_BUFFER_STATUS,                     "PU Buffer Status" },
+  { TAG_INTERWORKING,                         "Interworking" },
+  { TAG_ADVERTISEMENT_PROTOCOL,               "Advertisement Protocol"},
+  { TAG_EXPIDITED_BANDWIDTH_REQ,              "Expedited Bandwidth Request" },
+  { TAG_QOS_MAP_SET,                          "QoS Map Set" },
+  { TAG_ROAMING_CONSORTIUM,                   "Roaming Consortium" },
+  { TAG_EMERGENCY_ALERT_ID,                   "Emergency Alert Identifier" },
+  { TAG_MESH_CONFIGURATION,                   "Mesh Configuration" },
+  { TAG_MESH_ID,                              "Mesh ID" },
+  { TAG_MESH_LINK_METRIC_REPORT,              "Mesh Link Metric Report" },
+  { TAG_CONGESTION_NOTIFICATION,              "Congestion Notification" },
+  { TAG_MESH_PEERING_MGMT,                    "Mesh Peering Management" },
+  { TAG_MESH_CHANNEL_SWITCH,                  "Mesh Channel Switch Parameters" },
+  { TAG_MESH_AWAKE_WINDOW,                    "Mesh Awake Windows" },
+  { TAG_BEACON_TIMING,                        "Beacon Timing" },
+  { TAG_MCCAOP_SETUP_REQUEST,                 "MCCAOP Setup Request" },
+  { TAG_MCCAOP_SETUP_REPLY,                   "MCCAOP SETUP Reply" },
+  { TAG_MCCAOP_ADVERTISSEMENT,                "MCCAOP Advertissement" },
+  { TAG_MCCAOP_TEARDOWN,                      "MCCAOP Teardown" },
+  { TAG_GANN,                                 "Gate Announcemen" },
+  { TAG_RANN,                                 "Root Announcement" },
+  { TAG_EXTENDED_CAPABILITIES,                "Extended Capabilities" },
+  { TAG_AGERE_PROPRIETARY,                    "Agere Proprietary" },
+  { TAG_MESH_PREQ,                            "Path Request" },
+  { TAG_MESH_PREP,                            "Path Reply" },
+  { TAG_MESH_PERR,                            "Path Error" },
+  { TAG_CISCO_CCX1_CKIP,                      "Cisco CCX1 CKIP + Device Name" },
+  { TAG_CISCO_CCX2,                           "Cisco CCX2" },
+  { TAG_PXU,                                  "Proxy Update" },
+  { TAG_PXUC,                                 "Proxy Update Confirmation"},
+  { TAG_AUTH_MESH_PEERING_EXCH,               "Auhenticated Mesh Perring Exchange" },
+  { TAG_MIC,                                  "MIC (Message Integrity Code)" },
+  { TAG_DESTINATION_URI,                      "Destination URI" },
+  { TAG_U_APSD_COEX,                          "U-APSD Coexistence" },
+  { TAG_CISCO_CCX3,                           "Cisco Unknown 95" },
+  { TAG_CISCO_UNKNOWN_96,                     "Cisco Unknown 96" },
+  { TAG_SYMBOL_PROPRIETARY,                   "Symbol Proprietary" },
+  { TAG_MCCAOP_ADVERTISSEMENT_OV,             "MCCAOP Advertissement Overviw" },
+  { TAG_VHT_CAPABILITY,                       "VHT Capabilities (IEEE Stc 802.11ac/D3.1)" },
+  { TAG_VHT_OPERATION,                        "VHT Operation (IEEE Stc 802.11ac/D3.1)" },
+  { TAG_VENDOR_SPECIFIC_IE,                   "Vendor Specific" },
   { 0, NULL }
 };
-
-#define WPA_OUI     (const guint8 *) "\x00\x50\xF2"
-#define RSN_OUI     (const guint8 *) "\x00\x0F\xAC"
-#define WME_OUI     (const guint8 *) "\x00\x50\xF2"
-#define PRE_11N_OUI (const guint8 *) "\x00\x90\x4c" /* 802.11n pre 1 oui */
-#define WFA_OUI     (const guint8 *) "\x50\x6f\x9a"
+static value_string_ext tag_num_vals_ext = VALUE_STRING_EXT_INIT(tag_num_vals);
 
 /* WFA vendor specific subtypes */
 #define WFA_SUBTYPE_P2P 9
-
-#define PMKID_LEN 16
+#define WFA_SUBTYPE_WIFI_DISPLAY 10
+#define WFA_SUBTYPE_HS20_INDICATION 16
+#define WFA_SUBTYPE_HS20_ANQP 17
+
+static const value_string wfa_subtype_vals[] = {
+  { WFA_SUBTYPE_P2P, "P2P" },
+  { WFA_SUBTYPE_HS20_INDICATION, "Hotspot 2.0 Indication" },
+  { WFA_SUBTYPE_HS20_ANQP, "Hotspot 2.0 ANQP" },
+  { 0, NULL }
+};
 
 /* ************************************************************************* */
 /*              Supported Rates (7.3.2.2)                                    */
@@ -779,19 +864,21 @@ static const value_string ieee80211_supported_rates_vals[] = {
   { 0xFF, "BSS requires support for mandatory features of HT PHY (IEEE 802.11 - Clause 20)" },
   { 0,    NULL}
 };
+static value_string_ext ieee80211_supported_rates_vals_ext = VALUE_STRING_EXT_INIT(ieee80211_supported_rates_vals);
+
 /* ************************************************************************* */
-/*                         7.3.1.7 Reason Code field                         */
+/*                         8.4.1.7 Reason Code field                         */
 /* ************************************************************************* */
 static const value_string ieee80211_reason_code[] = {
-  { 1, "Unspecified reason" },
-  { 2, "Previous authentication no longer valid" },
-  { 3, "Deauthenticated because sending STA is leaving (or has left) IBSS or ESS" },
-  { 4, "Disassociated due to inactivity" },
-  { 5, "Disassociated because AP is unable to handle all currently associated STAs" },
-  { 6, "Class 2 frame received from nonauthenticated STA" },
-  { 7, "Class 3 frame received from nonassociated STA" },
-  { 8, "Disassociated because sending STA is leaving (or has left) BSS" },
-  { 9, "STA requesting (re)association is not authenticated with responding STA" },
+  {  1, "Unspecified reason" },
+  {  2, "Previous authentication no longer valid" },
+  {  3, "Deauthenticated because sending STA is leaving (or has left) IBSS or ESS" },
+  {  4, "Disassociated due to inactivity" },
+  {  5, "Disassociated because AP is unable to handle all currently associated STAs" },
+  {  6, "Class 2 frame received from nonauthenticated STA" },
+  {  7, "Class 3 frame received from nonassociated STA" },
+  {  8, "Disassociated because sending STA is leaving (or has left) BSS" },
+  {  9, "STA requesting (re)association is not authenticated with responding STA" },
   { 10, "Disassociated because the information in the Power Capability element is unacceptable" },
   { 11, "Disassociated because the information in the Supported Channels element is unacceptable" },
   { 12, "Reserved" },
@@ -807,6 +894,8 @@ static const value_string ieee80211_reason_code[] = {
   { 22, "Invalid RSN information element capabilities" },
   { 23, "IEEE 802.1X authentication failed" },
   { 24, "Cipher suite rejected because of the security policy" },
+  { 25, "TDLS direct-link teardown due to TDLS peer STA unreachable via the TDLS direct link" },
+  { 26, "TDLS direct-link teardown for unspecified reason" },
   { 27, "Disassociated because session terminated by SSP request" },
   { 28, "Disassociated because of lack of SSP roaming agreement" },
   { 29, "Requested service rejected because of SSP cipher suite or AKM requirement " },
@@ -823,6 +912,10 @@ static const value_string ieee80211_reason_code[] = {
   { 45, "Peer STA does not support the requested cipher suite" },
   { 46, "Disassociated because authorized access limit reached" },
   { 47, "Disassociated due to external service requirements" },
+  { 48, "Invalid FT Action frame count" },
+  { 49, "Invalid pairwise master key identifier (PMKI)" },
+  { 50, "Invalid MDE" },
+  { 51, "Invalid FTE" },
   { 52, "SME cancels the mesh peering instance with the reason other than reaching the maximum number of peer mesh STAs" },
   { 53, "The mesh STA has reached the supported maximum number of peer mesh STAs" },
   { 54, "The received information violates the Mesh Configuration policy configured in the mesh STA profile" },
@@ -840,18 +933,22 @@ static const value_string ieee80211_reason_code[] = {
   { 66, "The mesh STA performs channel switch with unspecified reason" },
   { 0,    NULL}
 };
+static value_string_ext ieee80211_reason_code_ext = VALUE_STRING_EXT_INIT(ieee80211_reason_code);
 
 /* ************************************************************************* */
-/*                         7.3.1.9 Status Code field                         */
+/*                         8.4.1.9 Status Code field                         */
 /* ************************************************************************* */
 static const value_string ieee80211_status_code[] = {
-  { 0, "Successful" },
-  { 1, "Unspecified failure" },
-  { 2, "TDLS wakeup schedule rejected but alternative schedule provided" },
-  { 3, "TDLS wakeup schedule rejected" },
-  { 5, "Security disabled" },
-  { 6, "Unacceptable lifetime" },
-  { 7, "Not in same BSS" },
+  {  0, "Successful" },
+  {  1, "Unspecified failure" },
+  {  2, "TDLS wakeup schedule rejected but alternative schedule provided" },
+  {  3, "TDLS wakeup schedule rejected" },
+  {  4, "Reserved" },
+  {  5, "Security disabled" },
+  {  6, "Unacceptable lifetime" },
+  {  7, "Not in same BSS" },
+  {  8, "Reserved" },
+  {  9, "Reserved" },
   { 10, "Cannot support all requested capabilities in the Capability Information field" },
   { 11, "Reassociation denied due to inability to confirm that association exists" },
   { 12, "Association denied due to reason outside the scope of this standard" },
@@ -898,6 +995,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" },
   { 59, "GAS Advertisement Protocol not supported" },
   { 60, "No outstanding GAS request" },
   { 61, "GAS Response not received from the Advertisement Server" },
@@ -905,15 +1005,38 @@ static const value_string ieee80211_status_code[] = {
   { 63, "GAS Response is larger than query response length limit" },
   { 64, "Request refused because home network does not support request" },
   { 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" },
+  { 69, "Reserved" },
+  { 70, "Reserved" },
+  { 71, "Reserved" },
   { 72, "Invalid contents of RSNIE" },
+  { 73, "U-APSD Coexistence is not supported" },
+  { 74, "Requested U-APSD Coexistence mode is not supported" },
+  { 75, "Requested Interval/Duration value cannot be supported with U-APSD Coexistence" },
   { 76, "Authentication is rejected because an Anti-Clogging Token is required" },
   { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
   { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
   { 79, "Transmission failure" },
+  { 80, "Requested TCLAS Not Supported" },
+  { 81, "TCLAS Resources Exhausted" },
+  { 82, "Rejected with Suggested BSS Transition" },
+  { 83, "Reserved" },
+  { 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" },
+  { 97, "Reserved" },
+  { 98, "Reserved" },
+  { 99, "Reserved" },
+  { 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" },
   { 0,    NULL}
 };
+static value_string_ext ieee80211_status_code_ext = VALUE_STRING_EXT_INIT(ieee80211_status_code);
 
 /* ************************************************************************* */
 /*                         Frame types, and their names                      */
@@ -962,33 +1085,21 @@ static const value_string frame_type_subtype_vals[] = {
   {DATA_QOS_CF_ACK_POLL_NOD,  "QoS CF-Ack + CF-Poll (No data)"},
   {0,                         NULL}
 };
+static value_string_ext frame_type_subtype_vals_ext = VALUE_STRING_EXT_INIT(frame_type_subtype_vals);
 
 /* ************************************************************************* */
-/*                             802.1D Tag Names                              */
-/* ************************************************************************* */
-static const char *qos_tags[8] = {
-  "Best Effort",
-  "Background",
-  "Spare",
-  "Excellent Effort",
-  "Controlled Load",
-  "Video",
-  "Voice",
-  "Network Control"
-};
-
-/* ************************************************************************* */
-/*                 WME Access Category Names (by 802.1D Tag)                 */
+/*                 802.1D Tag Name (by WME Access Category Names)            */
 /* ************************************************************************* */
-static const char *qos_acs[8] = {
-  "Best Effort",
-  "Background",
-  "Background",
-  "Video",
-  "Video",
-  "Video",
-  "Voice",
-  "Voice"
+static const value_string ieee80211_qos_tags_acs[] = {
+  { 0, "Best Effort (Best Effort)" },
+  { 1, "Background (Background)" },
+  { 2, "Spare (Background)" },
+  { 3, "Excellent Effort (Best Effort)" },
+  { 4, "Controlled Load (Video)" },
+  { 5, "Video (Video)" },
+  { 6, "Voice (Voice)" },
+  { 7, "Netowrk Control (Voice)" },
+  { 0, NULL }
 };
 
 /* ************************************************************************* */
@@ -1021,19 +1132,20 @@ static const value_string aruba_mgt_typevals[] = {
   { 0x000D,       "AP statistics" },
   { 0,            NULL }
 };
+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_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
@@ -1178,8 +1290,7 @@ static const value_string aruba_mgt_typevals[] = {
 #define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST 56797
 
 /* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */
-static const value_string anqp_info_id_vals[] =
-{
+static const value_string anqp_info_id_vals[] = {
   {ANQP_INFO_ANQP_QUERY_LIST, "ANQP Query list"},
   {ANQP_INFO_ANQP_CAPAB_LIST, "ANQP Capability list"},
   {ANQP_INFO_VENUE_NAME_INFO, "Venue Name information"},
@@ -1201,6 +1312,7 @@ static const value_string anqp_info_id_vals[] =
   {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST, "ANQP vendor-specific list"},
   {0, NULL}
 };
+static value_string_ext anqp_info_id_vals_ext = VALUE_STRING_EXT_INIT(anqp_info_id_vals);
 
 /* IEEE 802.11v - WNM Action field values */
 enum wnm_action {
@@ -1234,8 +1346,7 @@ enum wnm_action {
   WNM_NOTIFICATION_RESP = 27
 };
 
-static const value_string wnm_action_codes[] =
-{
+static const value_string wnm_action_codes[] = {
   { WNM_EVENT_REQ, "Event Request" },
   { WNM_EVENT_REPORT, "Event Report" },
   { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" },
@@ -1266,6 +1377,18 @@ static const value_string wnm_action_codes[] =
   { WNM_NOTIFICATION_RESP, "WNM-Notification Response" },
   { 0, NULL }
 };
+static value_string_ext wnm_action_codes_ext = VALUE_STRING_EXT_INIT(wnm_action_codes);
+
+
+static const value_string wnm_notification_types[] = {
+  { 0, "Firmware Update Notification" },
+  { 1, "Reserved for use by WFA" },
+  { 221, "Vendor Specific" },
+  { 0, NULL }
+};
+
+static value_string_ext wnm_notification_types_ext =
+  VALUE_STRING_EXT_INIT(wnm_notification_types);
 
 /*** End: Action Fixed Parameter ***/
 
@@ -1283,6 +1406,8 @@ static const value_string ieee80211_tag_measure_request_type_flags[] = {
   {0x0A, "Measurement Pause Request"},
   {0x00, NULL}
 };
+static value_string_ext ieee80211_tag_measure_request_type_flags_ext =
+  VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_type_flags);
 
 static const value_string ieee80211_tag_measure_report_type_flags[] = {
   { 0x00, "Basic Report" },
@@ -1297,6 +1422,8 @@ static const value_string ieee80211_tag_measure_report_type_flags[] = {
   { 0x09, "Transmit Stream Measurement Report" },
   { 0x00, NULL }
 };
+static value_string_ext ieee80211_tag_measure_report_type_flags_ext =
+  VALUE_STRING_EXT_INIT(ieee80211_tag_measure_report_type_flags);
 
 static const true_false_string ieee80211_tag_measure_report_frame_info_frame_type_flag = {
   "Measurement Pilot Frame",
@@ -1374,6 +1501,8 @@ static const value_string ieee80211_tag_measure_request_group_id_flags[] = {
   { 0x0f, "STBC Group" },
   { 0x00, NULL }
 };
+static value_string_ext ieee80211_tag_measure_request_group_id_flags_ext =
+  VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_group_id_flags);
 
 static const value_string ieee80211_tclas_process_flag[] = {
   {0x00, "Incoming MSDU's higher layer parameters have to match to the parameters in all associated TCLAS elements."},
@@ -1382,228 +1511,1295 @@ static const value_string ieee80211_tclas_process_flag[] = {
   {0, NULL}
 };
 
-static int proto_wlan = -1;
-static int proto_aggregate = -1;
-static packet_info * g_pinfo;
-static gboolean ieee80211_tvb_invalid = FALSE;
+static const value_string frame_type[] = {
+  {MGT_FRAME,     "Management frame"},
+  {CONTROL_FRAME, "Control frame"},
+  {DATA_FRAME,    "Data frame"},
+  {0,             NULL}
+};
 
-/* ************************************************************************* */
-/*                Header field info values for FC-field                      */
-/* ************************************************************************* */
-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_type_subtype = -1;
+static const value_string tofrom_ds[] = {
+  {0,                     "Not leaving DS or network is operating "
+    "in AD-HOC mode (To DS: 0 From DS: 0)"},
+  {FLAG_TO_DS,            "Frame from STA to DS via an AP (To DS: 1 "
+    "From DS: 0)"},
+  {FLAG_FROM_DS,          "Frame from DS to a STA via AP(To DS: 0 "
+    "From DS: 1)"},
+  {FLAG_TO_DS|FLAG_FROM_DS, "WDS (AP to AP) or Mesh (MP to MP) Frame "
+    "(To DS: 1 From DS: 1)"},
+  {0, NULL}
+};
 
-static int hf_ieee80211_fc_flags = -1;
-static int hf_ieee80211_fc_to_ds = -1;
-static int hf_ieee80211_fc_from_ds = -1;
-static int hf_ieee80211_fc_data_ds = -1;
+static const true_false_string tods_flag = {
+  "Frame is entering DS",
+  "Frame is not entering DS"
+};
 
-static int hf_ieee80211_fc_more_frag = -1;
-static int hf_ieee80211_fc_retry = -1;
-static int hf_ieee80211_fc_pwr_mgt = -1;
-static int hf_ieee80211_fc_more_data = -1;
-static int hf_ieee80211_fc_protected = -1;
-static int hf_ieee80211_fc_order = -1;
+static const true_false_string fromds_flag = {
+  "Frame is exiting DS",
+  "Frame is not exiting DS"
+};
 
-typedef struct retransmit_key {
-  guint8  bssid[6];
-  guint8  src[6];
-  guint16 seq_control;
-  guint   fnum;
-} retransmit_key;
+static const true_false_string more_fragments = {
+  "More fragments follow",
+  "This is the last fragment"
+};
 
-static GHashTable *fc_analyse_retransmit_table = NULL;
-static GHashTable *fc_first_frame_table = NULL;
+static const true_false_string retry_flags = {
+  "Frame is being retransmitted",
+  "Frame is not being retransmitted"
+};
 
-static int hf_ieee80211_fc_analysis_retransmission = -1;
-static int hf_ieee80211_fc_analysis_retransmission_frame = -1;
+static const true_false_string pm_flags = {
+  "STA will go to sleep",
+  "STA will stay up"
+};
 
-/* ************************************************************************* */
-/*                   Header values for Duration/ID field                     */
-/* ************************************************************************* */
-static int hf_ieee80211_did_duration = -1;
-static int hf_ieee80211_assoc_id = -1;
+static const true_false_string md_flags = {
+  "Data is buffered for STA at AP",
+  "No data buffered"
+};
 
-/* ************************************************************************* */
-/*         Header values for different address-fields (all 4 of them)        */
-/* ************************************************************************* */
-static int hf_ieee80211_addr_da = -1;  /* Destination address subfield */
-static int hf_ieee80211_addr_sa = -1;  /* Source address subfield */
-static int hf_ieee80211_addr_ra = -1;  /* Receiver address subfield */
-static int hf_ieee80211_addr_ta = -1;  /* Transmitter address subfield */
-static int hf_ieee80211_addr_bssid = -1;  /* address is bssid */
+static const true_false_string protected_flags = {
+  "Data is protected",
+  "Data is not protected"
+};
 
-static int hf_ieee80211_addr = -1;  /* Source or destination address subfield */
+static const true_false_string order_flags = {
+  "Strictly ordered",
+  "Not strictly ordered"
+};
 
+static const true_false_string cf_ess_flags = {
+  "Transmitter is an AP",
+  "Transmitter is a STA"
+};
 
-/* ************************************************************************* */
-/*                Header values for QoS control field                        */
-/* ************************************************************************* */
-static int hf_ieee80211_qos_tid = -1;
-static int hf_ieee80211_qos_priority = -1;
-static int hf_ieee80211_qos_ack_policy = -1;
-static int hf_ieee80211_qos_amsdu_present = -1;
-static int hf_ieee80211_qos_eosp = -1;
-static int hf_ieee80211_qos_bit4 = -1;
-static int hf_ieee80211_qos_txop_limit = -1;
-static int hf_ieee80211_qos_buf_state_indicated = -1;
-static int hf_ieee80211_qos_highest_pri_buf_ac = -1;
-static int hf_ieee80211_qos_qap_buf_load = -1;
-static int hf_ieee80211_qos_txop_dur_req = -1;
-static int hf_ieee80211_qos_queue_size = -1;
 
-/* ************************************************************************* */
-/*                Header values for HT control field (+HTC)                  */
-/* ************************************************************************* */
-/* 802.11nD-1.10 & 802.11nD-2.0 7.1.3.5a */
-static int hf_ieee80211_htc = -1;
-static int hf_ieee80211_htc_lac = -1;
-static int hf_ieee80211_htc_lac_reserved = -1;
-static int hf_ieee80211_htc_lac_trq = -1;
-static int hf_ieee80211_htc_lac_mai_aseli = -1;
-static int hf_ieee80211_htc_lac_mai_mrq = -1;
-static int hf_ieee80211_htc_lac_mai_msi = -1;
-static int hf_ieee80211_htc_lac_mai_reserved = -1;
-static int hf_ieee80211_htc_lac_mfsi = -1;
-static int hf_ieee80211_htc_lac_mfb = -1;
-static int hf_ieee80211_htc_lac_asel_command = -1;
-static int hf_ieee80211_htc_lac_asel_data = -1;
-static int hf_ieee80211_htc_cal_pos = -1;
-static int hf_ieee80211_htc_cal_seq = -1;
-static int hf_ieee80211_htc_reserved1 = -1;
-static int hf_ieee80211_htc_csi_steering = -1;
-static int hf_ieee80211_htc_ndp_announcement = -1;
-static int hf_ieee80211_htc_reserved2 = -1;
-static int hf_ieee80211_htc_ac_constraint = -1;
-static int hf_ieee80211_htc_rdg_more_ppdu = -1;
+static const true_false_string cf_privacy_flags = {
+  "AP/STA can support WEP",
+  "AP/STA cannot support WEP"
+};
 
-/* ************************************************************************* */
-/*                Header values for sequence number field                    */
-/* ************************************************************************* */
-static int hf_ieee80211_frag_number = -1;
-static int hf_ieee80211_seq_number = -1;
+static const true_false_string cf_ibss_flags = {
+  "Transmitter belongs to an IBSS",
+  "Transmitter belongs to a BSS"
+};
 
-/* ************************************************************************* */
-/*                   Header values for Frame Check field                     */
-/* ************************************************************************* */
-static int hf_ieee80211_fcs = -1;
-static int hf_ieee80211_fcs_good = -1;
-static int hf_ieee80211_fcs_bad = -1;
+static const true_false_string eosp_flag = {
+  "End of service period",
+  "Service period"
+};
 
-/* ************************************************************************* */
-/*                   Header values for reassembly                            */
-/* ************************************************************************* */
-static int hf_ieee80211_fragments = -1;
-static int hf_ieee80211_fragment = -1;
-static int hf_ieee80211_fragment_overlap = -1;
-static int hf_ieee80211_fragment_overlap_conflict = -1;
-static int hf_ieee80211_fragment_multiple_tails = -1;
-static int hf_ieee80211_fragment_too_long_fragment = -1;
-static int hf_ieee80211_fragment_error = -1;
-static int hf_ieee80211_fragment_count = -1;
-static int hf_ieee80211_reassembled_in = -1;
-static int hf_ieee80211_reassembled_length = -1;
+static const true_false_string bit4_flag = {
+  "Bits 8-15 of QoS Control field are Queue Size",
+  "Bits 8-15 of QoS Control field are TXOP Duration Requested"
+};
 
-static int proto_wlan_mgt = -1;
+static const true_false_string ieee80211_qos_amsdu_present_flag = {
+  "A-MSDU",
+  "MSDU"
+};
 
-/* ************************************************************************* */
-/*                      Fixed fields found in mgt frames                     */
-/* ************************************************************************* */
-static int hf_ieee80211_fixed_parameters = -1;  /* Protocol payload for management frames */
+static const value_string sta_cf_pollable[] = {
+  {0x00, "Station is not CF-Pollable"},
+  {0x02, "Station is CF-Pollable, not requesting to be placed on the  CF-polling list"},
+  {0x01, "Station is CF-Pollable, requesting to be placed on the CF-polling list"},
+  {0x03, "Station is CF-Pollable, requesting never to be polled"},
+  {0x80, "QSTA requesting association in QBSS"},
+  {0x81, "Reserved"},
+  {0x82, "Reserved"},
+  {0x83, "Reserved"},
+  {0, NULL}
+};
 
-static int hf_ieee80211_ff_auth_alg = -1;            /* Authentication algorithm field            */
-static int hf_ieee80211_ff_auth_seq = -1;            /* Authentication transaction sequence       */
-static int hf_ieee80211_ff_current_ap = -1;          /* Current AP MAC address                    */
-static int hf_ieee80211_ff_listen_ival = -1;         /* Listen interval fixed field               */
-static int hf_ieee80211_ff_timestamp = -1;           /* 64 bit timestamp                          */
-static int hf_ieee80211_ff_beacon_interval = -1;     /* 16 bit Beacon interval                    */
-static int hf_ieee80211_ff_assoc_id = -1;            /* 16 bit AID field                          */
-static int hf_ieee80211_ff_reason = -1;              /* 16 bit reason code                        */
-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_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_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;
-static int hf_ieee80211_ff_target_ap_address = -1;
-static int hf_ieee80211_ff_gas_comeback_delay = -1;
-static int hf_ieee80211_ff_gas_fragment_id = -1;
-static int hf_ieee80211_ff_more_gas_fragments = -1;
-static int hf_ieee80211_ff_query_request_length = -1;
-static int hf_ieee80211_ff_query_request = -1;
-static int hf_ieee80211_ff_query_response_length = -1;
-static int hf_ieee80211_ff_query_response = -1;
-static int hf_ieee80211_ff_anqp_info_id = -1;
-static int hf_ieee80211_ff_anqp_info_length = -1;
-static int hf_ieee80211_ff_anqp_info = -1;
-static int hf_ieee80211_ff_anqp_query_id = -1;
-static int hf_ieee80211_ff_anqp_capability = -1;
-static int hf_ieee80211_ff_anqp_capability_vlen = -1;
-static int hf_ieee80211_ff_anqp_capability_vendor = -1;
-static int hf_ieee80211_ff_venue_info_group = -1;
-static int hf_ieee80211_ff_venue_info_type = -1;
-static int hf_ieee80211_ff_anqp_venue_length = -1;
-static int hf_ieee80211_ff_anqp_venue_language = -1;
-static int hf_ieee80211_ff_anqp_venue_name = -1;
-static int hf_ieee80211_ff_anqp_nw_auth_type_indicator = -1;
-static int hf_ieee80211_ff_anqp_nw_auth_type_url_len = -1;
-static int hf_ieee80211_ff_anqp_nw_auth_type_url = -1;
-static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len = -1;
-static int hf_ieee80211_ff_anqp_roaming_consortium_oi = -1;
-static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6 = -1;
-static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4 = -1;
-static int hf_ieee80211_ff_anqp_nai_realm_count = -1;
-static int hf_ieee80211_ff_anqp_nai_field_len = -1;
-static int hf_ieee80211_ff_anqp_nai_realm_encoding = -1;
-static int hf_ieee80211_ff_anqp_nai_realm_length = -1;
-static int hf_ieee80211_ff_anqp_nai_realm = -1;
-static int hf_ieee80211_ff_anqp_nai_realm_eap_count = -1;
-static int hf_ieee80211_ff_anqp_nai_realm_eap_len = -1;
-static int hf_ieee80211_ff_anqp_nai_realm_eap_method = -1;
-static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count = -1;
-static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id = -1;
-static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len = -1;
-static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value = -1;
-static int hf_ieee80211_3gpp_gc_gud = -1;
-static int hf_ieee80211_3gpp_gc_udhl = -1;
-static int hf_ieee80211_3gpp_gc_iei = -1;
-static int hf_ieee80211_3gpp_gc_plmn_len = -1;
-static int hf_ieee80211_3gpp_gc_num_plmns = -1;
-static int hf_ieee80211_3gpp_gc_plmn = -1;
-static int hf_ieee80211_ff_anqp_domain_name_len = -1;
-static int hf_ieee80211_ff_anqp_domain_name = -1;
-static int hf_ieee80211_ff_tdls_action_code = -1;
-static int hf_ieee80211_ff_target_channel = -1;
-static int hf_ieee80211_ff_regulatory_class = -1;
-static int hf_ieee80211_ff_wnm_action_code = -1;
-static int hf_ieee80211_ff_request_mode_pref_cand = -1;
-static int hf_ieee80211_ff_request_mode_abridged = -1;
-static int hf_ieee80211_ff_request_mode_disassoc_imminent = -1;
-static int hf_ieee80211_ff_request_mode_bss_term_included = -1;
-static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent = -1;
-static int hf_ieee80211_ff_disassoc_timer = -1;
-static int hf_ieee80211_ff_validity_interval = -1;
-static int hf_ieee80211_ff_url_len = -1;
-static int hf_ieee80211_ff_url = -1;
+static const value_string ap_cf_pollable[] = {
+  {0x00, "No point coordinator at AP"},
+  {0x02, "Point coordinator at AP for delivery only (no polling)"},
+  {0x01, "Point coordinator at AP for delivery and polling"},
+  {0x03, "Reserved"},
+  {0x80, "QAP (HC) does not use CFP for delivery of unicast data type frames"},
+  {0x82, "QAP (HC) uses CFP for delivery, but does not send CF-Polls to non-QoS STAs"},
+  {0x81, "QAP (HC) uses CFP for delivery, and sends CF-Polls to non-QoS STAs"},
+  {0x83, "Reserved"},
+  {0, NULL}
+};
 
-static int hf_ieee80211_ff_sa_query_action_code = -1;
-static int hf_ieee80211_ff_transaction_id = -1;
 
-/* Vendor specific */
-static int hf_ieee80211_ff_marvell_action_type = -1;
-static int hf_ieee80211_ff_marvell_mesh_mgt_action_code = -1;
-static int hf_ieee80211_ff_marvell_mesh_mgt_length = -1;     /* Mesh Management length */
-static int hf_ieee80211_ff_marvell_mesh_mgt_mode = -1;       /* Mesh Management mode */
+static const value_string auth_alg[] = {
+  {0x00, "Open System"},
+  {0x01, "Shared key"},
+  {0x02, "Fast BSS Transition"},
+  {0x80, "Network EAP"},  /* Cisco proprietary? */
+  {0, NULL}
+};
+
+static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
+  "Permitted in QoS Data MPDUs",
+  "Not Permitted"
+};
+
+static const true_false_string ff_block_ack_params_policy_flag = {
+  "Immediate Block Ack",
+  "Delayed Block Ack"
+};
+
+static const value_string  ff_channel_width_vals[] = {
+  {0x00, "20 MHz channel width only"},
+  {0x01, "Any channel width in the STA's Supported Channel Width Set"},
+  {0, NULL}
+};
+
+static const true_false_string ff_qos_info_ap_q_ack_flag = {
+  "Implemented",
+  "Not Implemented"
+};
+
+static const true_false_string ff_qos_info_ap_queue_req_flag = {
+  "Can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
+  "Can NOT process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
+};
+
+static const true_false_string ff_qos_info_ap_txop_request_flag = {
+  "Can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
+  "Can NOT process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
+};
+
+static const true_false_string ff_qos_info_sta_ac_flag = {
+  "Trigger-enabled and Delivery-enabled",
+  "Neither Trigger-enabled nor Delivery-enabled"
+};
+
+static const true_false_string ff_qos_info_sta_q_ack_flag = {
+  "Implemented",
+  "Not Implemented"
+};
+
+static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
+  {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
+  {0x01, "AP may deliver a maximum of two MSDUs and MMPDUs per SP"},
+  {0x02, "AP may deliver a maximum of four MSDUs and MMPDUs per SP"},
+  {0x03, "AP may deliver a maximum of six MSDUs and MMPDUs per SP"},
+  {0, NULL}
+};
+
+static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
+  "Can process ACK frames with the More Data bit in the Frame Control field set to 1",
+  "Can NOT process ACK frames with the More Data bit in the Frame Control field set to 1"
+};
+
+static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
+  "Dynamic SM Power Save mode",
+  "Static SM Power Save mode"
+};
+
+static const true_false_string ff_pco_phase_cntrl_flag = {
+  "40 MHz Phase",
+  "20 MHz Phase"
+};
+
+static const true_false_string ff_psmp_param_set_more_psmp_flag = {
+  "More PSMP Sequences Follow",
+  "No PSMP Sequences Follow"
+};
+
+static const value_string ff_mimo_cntrl_nc_index_flags[] = {
+  {0x00, "1 Column"},
+  {0x01, "2 Columns"},
+  {0x02, "3 Columns"},
+  {0x03, "4 Columns"},
+  {0, NULL}
+};
+
+static const value_string ff_mimo_cntrl_nr_index_flags[] = {
+  {0x00, "1 Row"},
+  {0x01, "2 Rows"},
+  {0x02, "3 Rows"},
+  {0x03, "4 Rows"},
+  {0, NULL}
+};
+
+static const true_false_string ff_mimo_cntrl_channel_width_flag = {
+  "40 MHz",
+  "20 MHz"
+};
+
+static const true_false_string ff_ht_info_information_request_flag = {
+  "Requesting HT Information Exchange management action frame",
+  "Should not send an HT Information Exchange management action frame"
+};
+
+static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
+  "Transmitting station is intolerant of 40 MHz operation",
+  "Transmitting station permits 40 MHz operation"
+};
+
+static const true_false_string ff_ht_info_sta_chan_width_flag = {
+  "40 MHz",
+  "20 MHz"
+};
+
+static const value_string ff_ht_action_flags[] = {
+  {HT_ACTION_NOTIFY_CHAN_WIDTH,           "Notify Channel Width"},
+  {HT_ACTION_SM_PWR_SAVE,                 "Spatial Multiplexing (SM) Power Save"},
+  {HT_ACTION_PSMP_ACTION,                 "Power Save Multi-Poll (PSMP) action frame"},
+  {HT_ACTION_SET_PCO_PHASE,               "Set PCO Phase"},
+  {HT_ACTION_MIMO_CSI,                    "MIMO CSI Matrices"},
+  {HT_ACTION_MIMO_BEAMFORMING,            "MIMO Non-compressed Beamforming"},
+  {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING, "MIMO Compressed Beamforming"},
+  {HT_ACTION_ANT_SEL_FEEDBACK,            "Antenna Selection Indices Feedback"},
+  {HT_ACTION_HT_INFO_EXCHANGE,            "HT Information Exchange"},
+  {0x00, NULL}
+};
+
+static const value_string ff_mimo_cntrl_grouping_flags[] = {
+  {0x00, "No Grouping"},
+  {0x01, "Carrier Groups of 2"},
+  {0x02, "Carrier Groups of 4"},
+  {0x03, "Reserved"},
+  {0, NULL}
+};
+
+static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
+  {0x00, "4 Bits"},
+  {0x01, "5 Bits"},
+  {0x02, "6 Bits"},
+  {0x03, "8 Bits"},
+  {0, NULL}
+};
+
+static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
+  {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
+  {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
+  {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
+  {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
+  {0, NULL}
+};
+
+
+
+static const value_string ff_pa_action_codes[] = {
+  {PA_DSE_ENABLEMENT,                  "DSE enablement"},
+  {PA_DSE_DEENABLEMENT,                "DSE deenablement"},
+  {PA_DSE_REG_LOC_ANNOUNCEMENT,        "DSE Registered Location Announcement"},
+  {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement"},
+  {PA_DSE_MEASUREMENT_REQUEST,         "DSE measurement request"},
+  {PA_DSE_MEASUREMENT_REPORT,          "DSE measurement report"},
+  {PA_MEASUREMENT_PILOT,               "Measurement Pilot"},
+  {PA_DSE_POWER_CONSTRAINT,            "DSE power constraint"},
+  {PA_VENDOR_SPECIFIC,                 "Vendor Specific"},
+  {PA_GAS_INITIAL_REQUEST,             "GAS Initial Request"},
+  {PA_GAS_INITIAL_RESPONSE,            "GAS Initial Response"},
+  {PA_GAS_COMEBACK_REQUEST,            "GAS Comeback Request"},
+  {PA_GAS_COMEBACK_RESPONSE,           "GAS Comeback Response"},
+  {PA_TDLS_DISCOVERY_RESPONSE,         "TDLS Discovery Response"},
+  {0x00, NULL}
+};
+static value_string_ext ff_pa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_pa_action_codes);
+
+static const value_string category_codes[] = {
+  {CAT_SPECTRUM_MGMT,                    "Spectrum Management (SM)"},
+  {CAT_QOS,                              "Quality of Service (QoS)"},
+  {CAT_DLS,                              "Direct-Link Setup (DLS)"},
+  {CAT_BLOCK_ACK,                        "Block Ack"},
+  {CAT_PUBLIC,                           "Public Action"},
+  {CAT_RADIO_MEASUREMENT,                "Radio Measurement"},
+  {CAT_FAST_BSS_TRANSITION,              "Fast BSS Transition"},
+  {CAT_HT,                               "High Throughput"},
+  {CAT_SA_QUERY,                         "SA Query"},
+  {CAT_PUBLIC_PROTECTED,                 "Protected Dual of Public Action"},
+  {CAT_WNM,                              "WNM"},
+  {CAT_UNPROTECTED_WNM,                  "Unprotected WNM"},
+  {CAT_TDLS,                             "TDLS"},
+  {CAT_MESH,                             "MESH"},
+  {CAT_MULTIHOP,                         "Multihop"},
+  {CAT_SELF_PROTECTED,                   "Self-protected"},
+  {CAT_MGMT_NOTIFICATION,                "Management Notification"},
+  {CAT_VENDOR_SPECIFIC_PROTECTED,        "Vendor-specific Protected"},
+  {CAT_VENDOR_SPECIFIC,                  "Vendor Specific"},
+
+  {0x80 | CAT_SPECTRUM_MGMT,             "Spectrum Management (SM) (error)"},
+  {0x80 | CAT_QOS,                       "Quality of Service (QoS (error))"},
+  {0x80 | CAT_DLS,                       "Direct-Link Setup (DLS) (error)"},
+  {0x80 | CAT_BLOCK_ACK,                 "Block Ack (error)"},
+  {0x80 | CAT_PUBLIC,                    "Public Action (error)"},
+  {0x80 | CAT_RADIO_MEASUREMENT,         "Radio Measurement (error)"},
+  {0x80 | CAT_FAST_BSS_TRANSITION,       "Fast BSS Transition (error)"},
+  {0x80 | CAT_HT,                        "High Throughput (error)"},
+  {0x80 | CAT_SA_QUERY,                  "SA Query (error)"},
+  {0x80 | CAT_PUBLIC_PROTECTED,          "Protected Dual of Public Action (error)"},
+  {0x80 | CAT_WNM,                       "WNM (error)"},
+  {0x80 | CAT_UNPROTECTED_WNM,           "Unprotected WNM (error)"},
+  {0x80 | CAT_TDLS,                      "TDLS (error)"},
+  {0x80 | CAT_MESH,                      "Mesh (error)"},
+  {0x80 | CAT_MULTIHOP,                  "Multihop (error)"},
+  {0x80 | CAT_SELF_PROTECTED,            "Self-protected (error)"},
+  {0x80 | CAT_MGMT_NOTIFICATION,         "Management Notification (error)"},
+  {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected (error)"},
+  {0x80 | CAT_VENDOR_SPECIFIC,           "Vendor Specific (error)"},
+  {0, NULL}
+};
+static value_string_ext category_codes_ext = VALUE_STRING_EXT_INIT(category_codes);
+
+static const value_string action_codes[] = {
+  {SM_ACTION_MEASUREMENT_REQUEST, "Measurement Request"},
+  {SM_ACTION_MEASUREMENT_REPORT,  "Measurement Report"},
+  {SM_ACTION_TPC_REQUEST,         "TPC Request"},
+  {SM_ACTION_TPC_REPORT,          "TPC Report"},
+  {SM_ACTION_CHAN_SWITCH_ANNC,    "Channel Switch Announcement"},
+  {0, NULL}
+};
+
+static const value_string vendor_action_types_mrvl[] = {
+  {MRVL_ACTION_MESH_MANAGEMENT, "Mesh Management"},
+  {0, NULL}
+};
+
+static const value_string mesh_mgt_action_codes_mrvl[] = {
+  {MRVL_MESH_MGMT_ACTION_RREQ, "Route Request"},
+  {MRVL_MESH_MGMT_ACTION_RREP, "Route Response"},
+  {MRVL_MESH_MGMT_ACTION_RERR, "Route Error"},
+  {MRVL_MESH_MGMT_ACTION_PLDM, "Peer Link Down"},
+  {0, NULL}
+};
+
+static const value_string mesh_path_selection_codes[] = {
+  {0x0, "Hybrid Wireless Mesh Protocol"},
+  {0, NULL}
+};
+
+static const value_string mesh_metric_codes[] = {
+  {0x0, "Airtime Link Metric"},
+  {0, NULL}
+};
+
+static const value_string wme_action_codes[] = {
+  {0x00, "Setup request"},
+  {0x01, "Setup response"},
+  {0x02, "Teardown"},
+  {0x00, NULL}
+};
+
+static const value_string wme_status_codes[] = {
+  {0x00, "Admission accepted"},
+  {0x01, "Invalid parameters"},
+  {0x03, "Refused"},
+  {0x00, NULL}
+};
+
+static const value_string mesh_action[] = {
+  {MESH_ACTION_LINK_METRIC_REPORT, "Mesh Link Metric Report"},
+  {MESH_ACTION_HWMP,               "HWMP Mesh Path Selection"},
+  {MESH_ACTION_GATE_ANNOUNCE,      "Gate Announcement"},
+  {MESH_ACTION_CONGESTION_CTL,     "Congestion Control Notification"},
+  {MESH_ACTION_MCCA_SETUP_REQUEST, "MCCA Setup Request"},
+  {MESH_ACTION_MCCA_SETUP_REPLY,   "MCCA Setup Reply"},
+  {MESH_ACTION_MCCA_ADV_REQUEST,   "MCCA Advertisement Request"},
+  {MESH_ACTION_MCCA_ADV,           "MCCA Advertisement"},
+  {MESH_ACTION_MCCA_TEARDOWN,      "MCCA Teardown"},
+  {MESH_ACTION_TBTT_ADJ_REQUEST,   "TBTT Adjustment Request"},
+  {MESH_ACTION_TBTT_ADJ_RESPONSE,  "TBTT Adjustment Response"},
+  {0, NULL}
+};
+static value_string_ext mesh_action_ext = VALUE_STRING_EXT_INIT(mesh_action);
+
+static const value_string multihop_action[] = {
+  {MULTIHOP_ACTION_PROXY_UPDATE,      "Proxy Update"},
+  {MULTIHOP_ACTION_PROXY_UPDATE_CONF, "Proxy Update Confirmation"},
+  {0, NULL}
+};
+
+static const value_string selfprot_action[] = {
+  {SELFPROT_ACTION_MESH_PEERING_OPEN,     "Mesh Peering Open"},
+  {SELFPROT_ACTION_MESH_PEERING_CONFIRM,  "Mesh Peering Confirm"},
+  {SELFPROT_ACTION_MESH_PEERING_CLOSE,    "Mesh Peering Close"},
+  {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM, "Mesh Group Key Inform"},
+  {SELFPROT_ACTION_MESH_GROUP_KEY_ACK,    "Mesh Group Key Ack"},
+  {0, NULL}
+};
+
+static const value_string mesh_peering_proto_ids[] = {
+  {MESH_PEERING_PROTO_MGMT,   "Mesh peering management protocol"},
+  {MESH_PEERING_PROTO_AMPE,   "Authenticated mesh peering exchange protocol"},
+  {MESH_PEERING_PROTO_VENDOR, "Vendor specific"},
+  {0, NULL}
+};
+
+static const true_false_string hwmp_targ_usn_flags = {
+  "[USN = 1] Target Sequence Number Unknown at Originator",
+  "[USN = 0] Target Sequence Number Known at Originator"
+};
+
+static const true_false_string hwmp_targ_to_flags = {
+  "[TO = 1] Only Target Will Respond",
+  "[TO = 0] Intermediate Nodes May Respond"
+};
+
+static const value_string ack_policy[] = {
+  {0x00, "Normal Ack"},
+  {0x01, "No Ack"},
+  {0x02, "No explicit acknowledgment"},
+  {0x03, "Block Ack"},
+  {0x00, NULL}
+};
+
+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"},
+  {0, NULL}
+};
+
+static const value_string ba_action_codes[] = {
+  {BA_ADD_BLOCK_ACK_REQUEST,  "Add Block Ack Request"},
+  {BA_ADD_BLOCK_ACK_RESPONSE, "Add Block Ack Response"},
+  {BA_DELETE_BLOCK_ACK,       "Delete Block Ack"},
+  {0x00, NULL}
+};
+
+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"},
+  {0, NULL}
+};
+
+static const value_string tsinfo_type[] = {
+  {0x0, "Aperiodic or unspecified Traffic"},
+  {0x1, "Periodic Traffic"},
+  {0, NULL}
+};
+
+static const value_string tsinfo_direction[] = {
+  {0x00, "Uplink"},
+  {0x01, "Downlink"},
+  {0x02, "Direct link"},
+  {0x03, "Bidirectional link"},
+  {0, NULL}
+};
+
+static const value_string tsinfo_access[] = {
+  {0x00, "Reserved"},
+  {0x01, "EDCA"},
+  {0x02, "HCCA"},
+  {0x03, "HEMM"},
+  {0, NULL}
+};
+
+static const value_string qos_up[] = {
+  {0x00, "Best Effort"},
+  {0x01, "Background"},
+  {0x02, "Spare"},
+  {0x03, "Excellent Effort"},
+  {0x04, "Controlled Load"},
+  {0x05, "Video"},
+  {0x06, "Voice"},
+  {0x07, "Network Control"},
+  {0, NULL}
+};
+
+static const value_string classifier_type[] = {
+  {0x00, "Ethernet parameters"},
+  {0x01, "TCP/UDP IP parameters"},
+  {0x02, "IEEE 802.1D/Q parameters"},
+  {0, NULL}
+};
+
+static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
+    "Immediate Acknowledgement Required",
+    "Sender Does Not Require Immediate Acknowledgement"
+};
+
+static const value_string ieee80211_block_ack_request_type_flags[] = {
+  {0x00, "Basic Block Ack Request"},
+  {0x01, "Reserved"},
+  {0x02, "Compressed Block Ack Request"},
+  {0x03, "Multi-TID Block Ack Request"},
+  {0x00, NULL}
+};
+
+static const value_string ieee80211_block_ack_type_flags[] = {
+  {0x00, "Basic Block Ack"},
+  {0x01, "Reserved"},
+  {0x02, "Compressed Block"},
+  {0x03, "Multi-TID Block"},
+  {0x00, NULL}
+};
+
+static const value_string ft_action_codes[] = {
+  {FT_ACTION_REQUEST, "FT Request"},
+  {FT_ACTION_RESPONSE, "FT Response"},
+  {FT_ACTION_CONFIRM, "FT Confirm"},
+  {FT_ACTION_ACK, "FT Ack"},
+  {0, NULL}
+};
+
+static const value_string sa_query_action_codes[] = {
+  {SA_QUERY_REQUEST, "SA Query Request"},
+  {SA_QUERY_RESPONSE, "SA Query Response"},
+  {0, NULL}
+};
+
+static const value_string ieee80211_data_encap_payload_types[] = {
+  {1, "Remote Request/Response"},
+  {2, "TDLS"},
+  {0, NULL}
+};
+
+static const true_false_string qos_info_field_qack_flags = {
+  "STAs/APs MIB attribute dot11QAckOptionImplemented is true",
+  "STAs/APs MIB attribute dot11QAckOptionImplemented is false"
+};
+
+static const true_false_string qos_info_field_more_data_ack_flags = {
+  "STA can process Ack frames with More Data bit and will remain in the awake state.",
+  "STA cannot process Ack frames with More Data bit in Frame Control field."
+};
+
+static const true_false_string qos_info_field_queue_req_flags = {
+  "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
+  "AP cannot process Queue Size subfield in QoS data frames."
+};
+
+  /* 7.3.1.17 Table 19b-Settings of the Max SP Length subfield */
+static const value_string qos_info_field_max_sp_length_flags[] = {
+  { 0x0, "QAP may deliver all buffered MSDUs and MMPDUs." },
+  { 0x2, "QAP may deliver a maximum of two MSDUs and MMPDUs per SP." },
+  { 0x1, "QAP may deliver a maximum of four MSDUs and MMPDUs per SP." },
+  { 0x3, "QAP may deliver a maximum of six MSDUs and MMPDUs per SP." },
+  { 0, NULL}
+};
+
+static const true_false_string rsn_preauth_flags = {
+  "Transmitter supports pre-authentication",
+  "Transmitter does not support pre-authentication"
+};
+
+static const true_false_string rsn_no_pairwise_flags = {
+  "Transmitter cannot support WEP default key 0 simultaneously with "
+  "Pairwise key",
+  "Transmitter can support WEP default key 0 simultaneously with "
+  "Pairwise key"
+};
+
+static const value_string rsn_cap_replay_counter[] = {
+  {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
+  {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
+  {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
+  {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
+  {0, NULL}
+};
+
+static const true_false_string ht_ldpc_coding_flag = {
+  "Transmitter supports receiving LDPC coded packets",
+  "Transmitter does not support receiving LDPC coded packets"
+};
+
+static const true_false_string ht_chan_width_flag = {
+  "Transmitter supports 20MHz and 40MHz operation",
+  "Transmitter only supports 20MHz operation"
+};
+
+static const value_string ht_sm_pwsave_flag[] = {
+  {0x00, "Static SM Power Save mode"},
+  {0x01, "Dynamic SM Power Save mode"},
+  {0x02, "Reserved"},
+  {0x03, "SM Power Save disabled"},
+  {0x00, NULL}
+};
+
+static const true_false_string ht_green_flag = {
+  "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
+  "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
+};
+
+static const value_string ht_rx_stbc_flag[] = {
+  {0x00, "No Rx STBC support"},
+  {0x01, "Rx support of one spatial stream"},
+  {0x02, "Rx support of one and two spatial streams"},
+  {0x03, "Rx support of one, two, and three spatial streams"},
+  {0x00, NULL}
+};
+
+  /* IEEE Stc 802.11ac/D3.1 */
+
+static const value_string vht_max_mpdu_length_flag[] = {
+  {0x00, "3 895"},
+  {0x01, "7 991"},
+  {0x02, "11 454"},
+  {0x03, "Reserved"},
+  {0x00, NULL}
+};
+
+static const value_string vht_supported_chan_width_set_flag[] = {
+  {0x00, "Neither 160MHz nor 80+80 supported"},
+  {0x01, "160MHz supported"},
+  {0x02, "160MHz and 80+80 Supported"},
+  {0x03, "Reserved"},
+  {0x00, NULL}
+};
+
+static const value_string vht_rx_stbc_flag[] = {
+  {0x00, "None"},
+  {0x01, "1 Spatial Stream Supported"},
+  {0x02, "1 to 2 Spatial Stream Supported"},
+  {0x03, "1 to 3 Spatial Stream Supported"},
+  {0x04, "1 to 4 Spatial Stream Supported"},
+  {0x02, "160MHz and 80+80 Supported"},
+  {0x05, "Reserved"},
+  {0x06, "Reserved"},
+  {0x07, "Reserved"},
+  {0x00, NULL}
+};
+
+static const value_string num_plus_one_3bit_flag[] = {
+  {0x00, "1"},
+  {0x01, "2"},
+  {0x02, "3"},
+  {0x03, "4"},
+  {0x04, "5"},
+  {0x05, "6"},
+  {0x06, "7"},
+  {0x07, "8"},
+  {0x00, NULL}
+};
+
+static const value_string vht_max_ampdu_flag[] = {
+  {0x00, "8 191"},
+  {0x01, "16 383"},
+  {0x02, "32 767"},
+  {0x03, "65,535"},
+  {0x04, "131 071"},
+  {0x05, "262 143"},
+  {0x06, "524 287"},
+  {0x07, "1 048 575"},
+  {0x00, NULL}
+};
+
+static const value_string vht_link_adapt_flag[] = {
+  {0x00, "No Feedback"},
+  {0x01, "Reserved (logically only solicited feedback)"},
+  {0x02, "Unsolicited feedback only"},
+  {0x03, "Both (can provide unsolicited feedback and respond to VHT MRQ)"},
+  {0x00, NULL}
+};
+
+static const value_string vht_supported_mcs_flag[] = {
+  {0x00, "MCS 0-7"},
+  {0x01, "MCS 0-8"},
+  {0x02, "MCS 0-9"},
+  {0x03, "Not Supported"},
+  {0x00, NULL}
+};
+
+static const value_string vht_op_channel_width_flag[] = {
+  {0x00, "20 MHz or 40 MHz"},
+  {0x01, "80 MHz"},
+  {0x02, "160 MHz"},
+  {0x03, "80+80 MHz"},
+  {0x00, NULL}
+};
+
+
+
+static const true_false_string ht_delayed_block_ack_flag = {
+  "Transmitter supports HT-Delayed BlockAck",
+  "Transmitter does not support HT-Delayed BlockAck"
+};
+
+static const true_false_string ht_max_amsdu_flag = {
+  "7935 bytes",
+  "3839 bytes"
+};
+
+static const true_false_string ht_dss_cck_40_flag = {
+  "Will/Can use DSSS/CCK in 40 MHz",
+  "Won't/Can't use of DSSS/CCK in 40 MHz"
+};
+
+static const true_false_string ht_psmp_flag = {
+  "Will/Can support PSMP operation",
+  "Won't/Can't support PSMP operation"
+};
+
+static const true_false_string ht_40_mhz_intolerant_flag = {
+  "Use of 40 MHz transmissions restricted/disallowed",
+  "Use of 40 MHz transmissions unrestricted/allowed"
+};
+
+static const value_string ampduparam_mpdu_start_spacing_flags[] = {
+  {0x00, "no restriction"},
+  {0x01, "1/4 [usec]"},
+  {0x02, "1/2 [usec]"},
+  {0x03, "1 [usec]"},
+  {0x04, "2 [usec]"},
+  {0x05, "4 [usec]"},
+  {0x06, "8 [usec]"},
+  {0x07, "16 [usec]"},
+  {0x00, NULL}
+};
+
+static const true_false_string mcsset_tx_mcs_set_defined_flag = {
+  "Defined",
+  "Not Defined",
+};
+
+static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
+  "Not Equal",
+  "Equal",
+};
+
+static const value_string mcsset_tx_max_spatial_streams_flags[] = {
+  {0x00, "1 spatial stream"},
+  {0x01, "2 spatial streams"},
+  {0x02, "3 spatial streams"},
+  {0x03, "4 spatial streams"},
+  {0x00, NULL}
+};
+
+static const value_string htex_transtime_flags[] = {
+  {0x00, "No Transition"},
+  {0x01, "400 usec"},
+  {0x02, "1.5 msec"},
+  {0x03, "5 msec"},
+  {0x00, NULL}
+};
+
+static const value_string htex_mcs_flags[] = {
+  {0x00, "STA does not provide MCS feedback"},
+  {0x01, "Reserved"},
+  {0x02, "STA provides only unsolicited MCS feedback"},
+  {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
+  {0x00, NULL}
+};
+
+static const value_string txbf_calib_flag[] = {
+  {0x00, "incapable"},
+  {0x01, "Limited involvement, cannot initiate"},
+  {0x02, "Limited involvement, can initiate"},
+  {0x03, "Fully capable"},
+  {0x00, NULL}
+};
+
+static const value_string txbf_feedback_flags[] = {
+  {0x00, "not supported"},
+  {0x01, "delayed feedback capable"},
+  {0x02, "immediate feedback capable"},
+  {0x03, "delayed and immediate feedback capable"},
+  {0x00, NULL}
+};
+
+static const value_string txbf_antenna_flags[] = {
+  {0x00, "1 TX antenna sounding"},
+  {0x01, "2 TX antenna sounding"},
+  {0x02, "3 TX antenna sounding"},
+  {0x03, "4 TX antenna sounding"},
+  {0x00, NULL}
+};
+
+static const value_string txbf_csi_max_rows_bf_flags[] = {
+  {0x00, "1 row of CSI"},
+  {0x01, "2 rows of CSI"},
+  {0x02, "3 rows of CSI"},
+  {0x03, "4 rows of CSI"},
+  {0x00, NULL}
+};
+
+static const value_string txbf_chan_est_flags[] = {
+  {0x00, "1 space time stream"},
+  {0x01, "2 space time streams"},
+  {0x02, "3 space time streams"},
+  {0x03, "4 space time streams"},
+  {0x00, NULL}
+};
+
+static const value_string txbf_min_group_flags[] = {
+  {0x00, "No grouping supported"},
+  {0x01, "Groups of 1,2 supported"},
+  {0x02, "Groups of 1,4 supported"},
+  {0x03, "Groups of 1,2,4 supported"},
+  {0x00, NULL}
+};
+
+static const value_string hta_ext_chan_offset_flag[] = {
+  {0x00, "No Extension Channel"},
+  {0x01, "Extension Channel above control channel"},
+  {0x02, "Undefined"},
+  {0x03, "Extension Channel below control channel"},
+  {0x00, NULL}
+};
+
+static const true_false_string hta_rec_tx_width_flag = {
+  "Any channel width enabled",
+  "Use 20MHz channel (control)"
+};
+
+static const true_false_string hta_rifs_mode_flag = {
+  "Use of RIFS permitted",
+  "Use of RIFS prohibited"
+};
+
+static const true_false_string hta_controlled_access_flag = {
+  "Not only PSMP",
+  "PSMP only"
+};
+
+static const value_string hta_service_interval_flag[] = {
+  {0x00, "5ms"},
+  {0x01, "10ms"},
+  {0x02, "15ms"},
+  {0x03, "20ms"},
+  {0x04, "25ms"},
+  {0x05, "30ms"},
+  {0x06, "35ms"},
+  {0x07, "40ms"},
+  {0x00, NULL}
+};
+
+static const value_string hta_operating_mode_flag[] = {
+  {0x00, "Pure HT, no protection"},
+  {0x01, "There may be non-HT devices (control & ext channel)"},
+  {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
+  {0x03, "Mixed: no non-HT is associated, protect on"},
+  {0x00, NULL}
+};
+
+static const true_false_string hta_non_gf_devices_flag = {
+  "All HT devices associated are GF capable",
+  "One or More HT devices are not GF capable"
+};
+
+static const true_false_string hta_dual_stbc_protection_flag = {
+  "Dual CTS protections is used",
+  "Regular use of RTS/CTS"
+};
+
+static const true_false_string hta_secondary_beacon_flag = {
+  "Secondary Beacon",
+  "Primary Beacon"
+};
+
+static const true_false_string hta_lsig_txop_protection_flag = {
+  "Full Support",
+  "Not full support"
+};
+
+static const true_false_string hta_pco_active_flag = {
+  "PCO is activated in the BSS",
+  "PCO is not activated in the BSS"
+};
+
+static const true_false_string hta_pco_phase_flag = {
+  "Switch to 20MHz phase/keep 20MHz",
+  "Switch to 40MHz phase/keep 40MHz"
+};
+
+static const value_string ht_info_secondary_channel_offset_flags[] = {
+  {0x00, "No secondary channel"},
+  {0x01, "Secondary channel is above the primary channel"},
+  {0x02, "Reserved"},
+  {0x03, "Secondary channel is below the primary channel"},
+  {0x00, NULL}
+};
+
+static const true_false_string ht_info_channel_width_flag = {
+  "Channel of any width supported",
+  "20 MHz channel width only"
+};
+
+static const true_false_string ht_info_rifs_mode_flag = {
+  "Permitted",
+  "Prohibited"
+};
+
+static const true_false_string ht_info_psmp_stas_only_flag = {
+  "Association requests are accepted from only PSMP capable STA",
+  "Association requests are accepted regardless of PSMP capability"
+};
+
+static const value_string ht_info_service_interval_granularity_flags[] = {
+  {0x00, "5 ms"},
+  {0x01, "10 ms"},
+  {0x02, "15 ms"},
+  {0x03, "20 ms"},
+  {0x04, "25 ms"},
+  {0x05, "30 ms"},
+  {0x06, "35 ms"},
+  {0x07, "40 ms"},
+  {0x00, NULL}
+};
+
+static const value_string ht_info_operating_mode_flags[] = {
+  {0x00, "All STAs are - 20/40 MHz HT or in a 20/40 MHz BSS or are 20 MHz HT in a 20 MHz BSS"},
+  {0x01, "HT non-member protection mode"},
+  {0x02, "Only HT STAs in the BSS, however, there exists at least one 20 MHz STA"},
+  {0x03, "HT mixed mode"},
+  {0x00, NULL}
+};
+
+static const true_false_string ht_info_non_greenfield_sta_present_flag = {
+  "One or more associated STAs are not greenfield capable",
+  "All associated STAs are greenfield capable"
+};
+
+static const true_false_string ht_info_transmit_burst_limit_flag = {
+  "2.4 GHz - 6.16 ms | All other bands - 3.08 ms",
+  "No limit"
+};
+
+static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
+  "Use of protection for non-HT STAs by overlapping BSSs is needed",
+  "Use of protection for non-HT STAs by overlapping BSSs is not needed"
+};
+
+static const true_false_string ht_info_dual_beacon_flag = {
+  "AP transmits a secondary beacon",
+  "No second beacon is transmitted"
+};
+
+static const true_false_string ht_info_dual_cts_protection_flag = {
+  "Required",
+  "Not required"
+};
+
+static const true_false_string ht_info_secondary_beacon_flag = {
+  "Secondary beacon",
+  "Primary beacon"
+};
+
+static const true_false_string ht_info_lsig_txop_protection_full_support_flag = {
+  "All HT STAs in the BSS support L-SIG TXOP protection",
+  "One or more HT STAs in the BSS do not support L-SIG TXOP protection"
+};
+
+static const true_false_string ht_info_pco_phase_flag = {
+  "Switch to or continue 40 MHz phase",
+  "Switch to or continue 20 MHz phase"
+};
+
+static const true_false_string htc_lac_trq_flag = {
+  "Want sounding PPDU",
+  "Don't want sounding PPDU"
+};
+
+static const true_false_string htc_lac_mai_mrq_flag = {
+  "MCS feedback requested",
+  "No MCS feedback requested"
+};
+
+static const value_string ieee80211_htc_lac_asel_command_flags[] = {
+  {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
+  {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
+  {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
+  {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
+  {0x04, "Sounding Label"},
+  {0x05, "No feedback, ASEL training failure"},
+  {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
+  {0x07, "Reserved"},
+  {0x00, NULL}
+};
+
+static const value_string ieee80211_htc_cal_pos_flags[] = {
+  {0x00, "Not a calibration frame"},
+  {0x01, "Calibration Start"},
+  {0x02, "Sounding Response"},
+  {0x03, "Sounding Complete"},
+  {0x00, NULL}
+};
+
+static const true_false_string ieee80211_htc_ndp_announcement_flag = {
+  "NDP will follow",
+  "No NDP will follow"
+};
+
+static const value_string ieee80211_htc_csi_steering_flags[] = {
+  {0x00, "No feedback required"},
+  {0x01, "CSI"},
+  {0x02, "Non-compressed Beamforming Feedback Matrix"},
+  {0x03, "Compressed Beamforming Feedback Matrix"},
+  {0x00, NULL}
+};
+
+static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
+  {0x00, "No Secondary Channel"},
+  {0x01, "Above Primary Channel"},
+  {0x02, "Reserved"},
+  {0x03, "Below Primary Channel"},
+  {0x00, NULL}
+};
+
+#define BSS_BITMASK_UP0   0x0001
+#define BSS_BITMASK_UP1   0x0002
+#define BSS_BITMASK_UP2   0x0004
+#define BSS_BITMASK_UP3   0x0008
+#define BSS_BITMASK_UP4   0x0010
+#define BSS_BITMASK_UP5   0x0020
+#define BSS_BITMASK_UP6   0x0040
+#define BSS_BITMASK_UP7   0x0080
+#define BSS_BITMASK_AC0   0x0100
+#define BSS_BITMASK_AC1   0x0200
+#define BSS_BITMASK_AC2   0x0400
+#define BSS_BITMASK_AC3   0x0800
+#define BSS_BITMASK_RSV   0xF000
+
+static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
+  {0x00, "Frames may be transmitted before the channel switch has been completed"},
+  {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
+  {0x00, NULL}
+};
+
+static const value_string service_interval_granularity_vals[] = {
+  { 0, "5 ms" },
+  { 1, "10 ms" },
+  { 2, "15 ms" },
+  { 3, "20 ms" },
+  { 4, "25 ms" },
+  { 5, "30 ms" },
+  { 6, "35 ms" },
+  { 7, "40 ms" },
+  { 0x00, NULL }
+};
+
+static const value_string wep_type_vals[] = {
+  { AIRPDCAP_KEY_TYPE_WEP, STRING_KEY_TYPE_WEP },
+  { AIRPDCAP_KEY_TYPE_WPA_PWD, STRING_KEY_TYPE_WPA_PWD },
+  { AIRPDCAP_KEY_TYPE_WPA_PSK, STRING_KEY_TYPE_WPA_PSK },
+  { 0x00, NULL }
+};
+
+static const value_string ieee80211_ht_pren_type_vals[] = {
+  { 51,  "HT Capabilities (802.11n D1.10)" },
+  { 52,  "HT Additional Capabilities (802.11n D1.00)" },
+  { 0, NULL }
+};
+
+static int proto_wlan = -1;
+static int proto_aggregate = -1;
+static gboolean ieee80211_tvb_invalid = FALSE;
+
+/* ************************************************************************* */
+/*                Header field info values for FC-field                      */
+/* ************************************************************************* */
+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_type_subtype = -1;
+
+static int hf_ieee80211_fc_flags = -1;
+static int hf_ieee80211_fc_to_ds = -1;
+static int hf_ieee80211_fc_from_ds = -1;
+static int hf_ieee80211_fc_data_ds = -1;
+
+static int hf_ieee80211_fc_more_frag = -1;
+static int hf_ieee80211_fc_retry = -1;
+static int hf_ieee80211_fc_pwr_mgt = -1;
+static int hf_ieee80211_fc_more_data = -1;
+static int hf_ieee80211_fc_protected = -1;
+static int hf_ieee80211_fc_order = -1;
+
+typedef struct retransmit_key {
+  guint8  bssid[6];
+  guint8  src[6];
+  guint16 seq_control;
+  guint   fnum;
+} retransmit_key;
+
+static GHashTable *fc_analyse_retransmit_table = NULL;
+static GHashTable *fc_first_frame_table = NULL;
+
+static int hf_ieee80211_fc_analysis_retransmission = -1;
+static int hf_ieee80211_fc_analysis_retransmission_frame = -1;
+
+/* ************************************************************************* */
+/*                   Header values for Duration/ID field                     */
+/* ************************************************************************* */
+static int hf_ieee80211_did_duration = -1;
+static int hf_ieee80211_assoc_id = -1;
+
+/* ************************************************************************* */
+/*         Header values for different address-fields (all 4 of them)        */
+/* ************************************************************************* */
+static int hf_ieee80211_addr_da = -1;  /* Destination address subfield */
+static int hf_ieee80211_addr_sa = -1;  /* Source address subfield */
+static int hf_ieee80211_addr_ra = -1;  /* Receiver address subfield */
+static int hf_ieee80211_addr_ta = -1;  /* Transmitter address subfield */
+static int hf_ieee80211_addr_bssid = -1;  /* address is bssid */
+
+static int hf_ieee80211_addr = -1;  /* Source or destination address subfield */
+
+
+/* ************************************************************************* */
+/*                Header values for QoS control field                        */
+/* ************************************************************************* */
+static int hf_ieee80211_qos = -1;
+static int hf_ieee80211_qos_tid = -1;
+static int hf_ieee80211_qos_priority = -1;
+static int hf_ieee80211_qos_ack_policy = -1;
+static int hf_ieee80211_qos_amsdu_present = -1;
+static int hf_ieee80211_qos_eosp = -1;
+static int hf_ieee80211_qos_bit4 = -1;
+static int hf_ieee80211_qos_txop_limit = -1;
+static int hf_ieee80211_qos_ps_buf_state = -1;
+static int hf_ieee80211_qos_buf_state_indicated = -1;
+static int hf_ieee80211_qos_highest_pri_buf_ac = -1;
+static int hf_ieee80211_qos_qap_buf_load = -1;
+static int hf_ieee80211_qos_txop_dur_req = -1;
+static int hf_ieee80211_qos_queue_size = -1;
+
+/* ************************************************************************* */
+/*                Header values for HT control field (+HTC)                  */
+/* ************************************************************************* */
+/* 802.11nD-1.10 & 802.11nD-2.0 7.1.3.5a */
+static int hf_ieee80211_htc = -1;
+static int hf_ieee80211_htc_lac = -1;
+static int hf_ieee80211_htc_lac_reserved = -1;
+static int hf_ieee80211_htc_lac_trq = -1;
+static int hf_ieee80211_htc_lac_mai_aseli = -1;
+static int hf_ieee80211_htc_lac_mai_mrq = -1;
+static int hf_ieee80211_htc_lac_mai_msi = -1;
+static int hf_ieee80211_htc_lac_mai_reserved = -1;
+static int hf_ieee80211_htc_lac_mfsi = -1;
+static int hf_ieee80211_htc_lac_mfb = -1;
+static int hf_ieee80211_htc_lac_asel_command = -1;
+static int hf_ieee80211_htc_lac_asel_data = -1;
+static int hf_ieee80211_htc_cal_pos = -1;
+static int hf_ieee80211_htc_cal_seq = -1;
+static int hf_ieee80211_htc_reserved1 = -1;
+static int hf_ieee80211_htc_csi_steering = -1;
+static int hf_ieee80211_htc_ndp_announcement = -1;
+static int hf_ieee80211_htc_reserved2 = -1;
+static int hf_ieee80211_htc_ac_constraint = -1;
+static int hf_ieee80211_htc_rdg_more_ppdu = -1;
+
+/* ************************************************************************* */
+/*                Header values for sequence number field                    */
+/* ************************************************************************* */
+static int hf_ieee80211_frag_number = -1;
+static int hf_ieee80211_seq_number = -1;
+
+/* ************************************************************************* */
+/*                   Header values for Frame Check field                     */
+/* ************************************************************************* */
+static int hf_ieee80211_fcs = -1;
+static int hf_ieee80211_fcs_good = -1;
+static int hf_ieee80211_fcs_bad = -1;
+
+/* ************************************************************************* */
+/*                   Header values for reassembly                            */
+/* ************************************************************************* */
+static int hf_ieee80211_fragments = -1;
+static int hf_ieee80211_fragment = -1;
+static int hf_ieee80211_fragment_overlap = -1;
+static int hf_ieee80211_fragment_overlap_conflict = -1;
+static int hf_ieee80211_fragment_multiple_tails = -1;
+static int hf_ieee80211_fragment_too_long_fragment = -1;
+static int hf_ieee80211_fragment_error = -1;
+static int hf_ieee80211_fragment_count = -1;
+static int hf_ieee80211_reassembled_in = -1;
+static int hf_ieee80211_reassembled_length = -1;
+
+static int proto_wlan_mgt = -1;
+
+/* ************************************************************************* */
+/*                      Fixed fields found in mgt frames                     */
+/* ************************************************************************* */
+static int hf_ieee80211_fixed_parameters = -1;  /* Protocol payload for management frames */
+
+static int hf_ieee80211_ff_auth_alg = -1;            /* Authentication algorithm field            */
+static int hf_ieee80211_ff_auth_seq = -1;            /* Authentication transaction sequence       */
+static int hf_ieee80211_ff_current_ap = -1;          /* Current AP MAC address                    */
+static int hf_ieee80211_ff_listen_ival = -1;         /* Listen interval fixed field               */
+static int hf_ieee80211_ff_timestamp = -1;           /* 64 bit timestamp                          */
+static int hf_ieee80211_ff_beacon_interval = -1;     /* 16 bit Beacon interval                    */
+static int hf_ieee80211_ff_assoc_id = -1;            /* 16 bit AID field                          */
+static int hf_ieee80211_ff_reason = -1;              /* 16 bit reason code                        */
+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_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_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;
+static int hf_ieee80211_ff_target_ap_address = -1;
+static int hf_ieee80211_ff_gas_comeback_delay = -1;
+static int hf_ieee80211_ff_gas_fragment_id = -1;
+static int hf_ieee80211_ff_more_gas_fragments = -1;
+static int hf_ieee80211_ff_query_request_length = -1;
+static int hf_ieee80211_ff_query_request = -1;
+static int hf_ieee80211_ff_query_response_length = -1;
+static int hf_ieee80211_ff_query_response = -1;
+static int hf_ieee80211_ff_anqp_info_id = -1;
+static int hf_ieee80211_ff_anqp_info_length = -1;
+static int hf_ieee80211_ff_anqp_info = -1;
+static int hf_ieee80211_ff_anqp_query_id = -1;
+static int hf_ieee80211_ff_anqp_capability = -1;
+static int hf_ieee80211_ff_anqp_capability_vlen = -1;
+static int hf_ieee80211_ff_anqp_capability_vendor = -1;
+static int hf_ieee80211_ff_venue_info_group = -1;
+static int hf_ieee80211_ff_venue_info_type = -1;
+static int hf_ieee80211_ff_anqp_venue_length = -1;
+static int hf_ieee80211_ff_anqp_venue_language = -1;
+static int hf_ieee80211_ff_anqp_venue_name = -1;
+static int hf_ieee80211_ff_anqp_nw_auth_type_indicator = -1;
+static int hf_ieee80211_ff_anqp_nw_auth_type_url_len = -1;
+static int hf_ieee80211_ff_anqp_nw_auth_type_url = -1;
+static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len = -1;
+static int hf_ieee80211_ff_anqp_roaming_consortium_oi = -1;
+static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6 = -1;
+static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4 = -1;
+static int hf_ieee80211_ff_anqp_nai_realm_count = -1;
+static int hf_ieee80211_ff_anqp_nai_field_len = -1;
+static int hf_ieee80211_ff_anqp_nai_realm_encoding = -1;
+static int hf_ieee80211_ff_anqp_nai_realm_length = -1;
+static int hf_ieee80211_ff_anqp_nai_realm = -1;
+static int hf_ieee80211_ff_anqp_nai_realm_eap_count = -1;
+static int hf_ieee80211_ff_anqp_nai_realm_eap_len = -1;
+static int hf_ieee80211_ff_anqp_nai_realm_eap_method = -1;
+static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count = -1;
+static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id = -1;
+static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len = -1;
+static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value = -1;
+static int hf_ieee80211_3gpp_gc_gud = -1;
+static int hf_ieee80211_3gpp_gc_udhl = -1;
+static int hf_ieee80211_3gpp_gc_iei = -1;
+static int hf_ieee80211_3gpp_gc_plmn_len = -1;
+static int hf_ieee80211_3gpp_gc_num_plmns = -1;
+static int hf_ieee80211_3gpp_gc_plmn = -1;
+static int hf_ieee80211_ff_anqp_domain_name_len = -1;
+static int hf_ieee80211_ff_anqp_domain_name = -1;
+static int hf_ieee80211_ff_tdls_action_code = -1;
+static int hf_ieee80211_ff_target_channel = -1;
+static int hf_ieee80211_ff_regulatory_class = -1;
+static int hf_ieee80211_ff_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;
+static int hf_ieee80211_ff_request_mode_pref_cand = -1;
+static int hf_ieee80211_ff_request_mode_abridged = -1;
+static int hf_ieee80211_ff_request_mode_disassoc_imminent = -1;
+static int hf_ieee80211_ff_request_mode_bss_term_included = -1;
+static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent = -1;
+static int hf_ieee80211_ff_disassoc_timer = -1;
+static int hf_ieee80211_ff_validity_interval = -1;
+static int hf_ieee80211_ff_url_len = -1;
+static int hf_ieee80211_ff_url = -1;
+
+static int hf_ieee80211_ff_sa_query_action_code = -1;
+static int hf_ieee80211_ff_transaction_id = -1;
+
+/* Vendor specific */
+static int hf_ieee80211_ff_marvell_action_type = -1;
+static int hf_ieee80211_ff_marvell_mesh_mgt_action_code = -1;
+static int hf_ieee80211_ff_marvell_mesh_mgt_length = -1;     /* Mesh Management length */
+static int hf_ieee80211_ff_marvell_mesh_mgt_mode = -1;       /* Mesh Management mode */
 static int hf_ieee80211_ff_marvell_mesh_mgt_ttl = -1;        /* Mesh Management TTL */
 static int hf_ieee80211_ff_marvell_mesh_mgt_dstcount = -1;   /* Mesh Management dst count */
 static int hf_ieee80211_ff_marvell_mesh_mgt_hopcount = -1;   /* Mesh Management hop count */
@@ -1804,6 +3000,8 @@ static int hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id = -1;
 static int hf_ieee80211_ff_mimo_csi_snr = -1;
 
 /*** Begin: 802.11s additions ***/
+static int hf_ieee80211_mesh_control_field = -1;
+
 static int hf_ieee80211_ff_mesh_action = -1;
 static int hf_ieee80211_ff_multihop_action = -1;
 static int hf_ieee80211_ff_mesh_flags = -1;
@@ -1866,23 +3064,25 @@ static int hf_ieee80211_ff_short_slot_time = -1;
 static int hf_ieee80211_ff_dsss_ofdm = -1;
 static int hf_ieee80211_ff_cf_spec_man = -1;
 static int hf_ieee80211_ff_cf_apsd = -1;
+static int hf_ieee80211_ff_radio_measurement = -1;
 static int hf_ieee80211_ff_cf_del_blk_ack = -1;
 static int hf_ieee80211_ff_cf_imm_blk_ack = -1;
 
 /* ************************************************************************* */
-/*                       A-MSDU fields                                             */
+/*                       A-MSDU fields                                       */
 /* ************************************************************************* */
-static int hf_ieee80211_amsdu_msdu_header_text = -1;
-
+static int hf_ieee80211_amsdu_subframe = -1;
+static int hf_ieee80211_amsdu_length = -1;
 
 /* ************************************************************************* */
 /*                       Tagged value format fields                          */
 /* ************************************************************************* */
-static int hf_ieee80211_tagged_parameters = -1;  /* Fixed payload item */
+static int hf_ieee80211_tagged_parameters = -1;  /* Tagged payload item */
 static int hf_ieee80211_tag = -1;
 static int hf_ieee80211_tag_number = -1;
 static int hf_ieee80211_tag_length = -1;
 static int hf_ieee80211_tag_interpretation = -1;
+static int hf_ieee80211_tag_data = -1;
 static int hf_ieee80211_tag_oui = -1;
 static int hf_ieee80211_tag_ssid = -1;
 static int hf_ieee80211_tag_supp_rates = -1;
@@ -1966,6 +3166,9 @@ static int hf_ieee80211_tag_measure_request_mac_address  = -1;
 static int hf_ieee80211_tag_measure_request_peer_mac_address = -1;
 static int hf_ieee80211_tag_measure_request_group_id = -1;
 
+static int hf_ieee80211_ht_pren_type = -1;
+static int hf_ieee80211_ht_pren_unknown = -1;
+
 static int hf_ieee80211_ht_cap = -1;
 static int hf_ieee80211_ht_vs_cap = -1;
 static int hf_ieee80211_ht_ldpc_coding = -1;
@@ -2070,6 +3273,75 @@ static int hf_ieee80211_tag_ap_channel_report_channel_list = -1;
 
 static int hf_ieee80211_tag_secondary_channel_offset = -1;
 
+static int hf_ieee80211_tag_bss_ap_avg_access_delay = -1;
+
+static int hf_ieee80211_tag_antenna_id = -1;
+
+static int hf_ieee80211_tag_rsni = -1;
+
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_up0 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_up1 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_up2 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_up3 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_up4 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_up5 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_up6 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_up7 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_ac0 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_ac1 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_ac2 = -1;
+static int hf_ieee80211_tag_bss_avb_adm_cap_ac3 = -1;
+
+static int hf_ieee80211_tag_bss_avg_ac_access_delay_be = -1;
+static int hf_ieee80211_tag_bss_avg_ac_access_delay_bk = -1;
+static int hf_ieee80211_tag_bss_avg_ac_access_delay_vi = -1;
+static int hf_ieee80211_tag_bss_avg_ac_access_delay_vo = -1;
+
+static int hf_ieee80211_tag_rm_enabled_capabilities = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b0 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b1 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b2 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b3 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b4 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b5 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b6 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b7 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b8 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b9 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b10 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b11 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b12 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b13 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b14 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b15 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b16 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b17 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b18to20 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b21to23 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b24to26 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b27 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b28 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b29 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b30 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b31 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b32 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_b33 = -1;
+static int hf_ieee80211_tag_rm_enabled_capabilities_o5 = -1;
+
 static int hf_ieee80211_tag_power_constraint_local = -1;
 
 static int hf_ieee80211_tag_power_capability_min = -1;
@@ -2180,7 +3452,28 @@ static int hf_ieee80211_tag_extended_capabilities_b1 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b2 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b3 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b4 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b5 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b6 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b7 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b8 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b9 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b10 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b11 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b12 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b13 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b14 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b15 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b16 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b17 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b18 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b19 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b20 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b21 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b22 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b23 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b24 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b25 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b26 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b27 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b28 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b29 = -1;
@@ -2189,16 +3482,88 @@ static int hf_ieee80211_tag_extended_capabilities_b31 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b32 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b33 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b34 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b35 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b36 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b37 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b38 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b39 = -1;
 static int hf_ieee80211_tag_extended_capabilities_b40 = -1;
 static int hf_ieee80211_tag_extended_capabilities_serv_int_granularity = -1;
+static int hf_ieee80211_tag_extended_capabilities_b44 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b45 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b46 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b47 = -1;
+static int hf_ieee80211_tag_extended_capabilities_b48 = -1;
+static int hf_ieee80211_tag_extended_capabilities_o7 = -1;
+static int hf_ieee80211_tag_extended_capabilities_o8 = -1;
 
 static int hf_ieee80211_tag_cisco_ccx1_unknown = -1;
 static int hf_ieee80211_tag_cisco_ccx1_name = -1;
 static int hf_ieee80211_tag_cisco_ccx1_clients = -1;
+static int hf_ieee80211_tag_cisco_ccx1_unknown2 = -1;
+
+static int hf_ieee80211_vht_cap = -1;
+static int hf_ieee80211_vht_max_mpdu_length = -1;
+static int hf_ieee80211_vht_supported_chan_width_set = -1;
+static int hf_ieee80211_vht_rx_ldpc = -1;
+static int hf_ieee80211_vht_short_gi_for_80 = -1;
+static int hf_ieee80211_vht_short_gi_for_160 = -1;
+static int hf_ieee80211_vht_tx_stbc = -1;
+static int hf_ieee80211_vht_rx_stbc = -1;
+static int hf_ieee80211_vht_su_beamformer_cap = -1;
+static int hf_ieee80211_vht_su_beamformee_cap = -1;
+static int hf_ieee80211_vht_beamformer_antennas = -1;
+static int hf_ieee80211_vht_sounding_dimensions = -1;
+static int hf_ieee80211_vht_mu_beamformer_cap = -1;
+static int hf_ieee80211_vht_mu_beamformee_cap = -1;
+static int hf_ieee80211_vht_txop_ps = -1;
+static int hf_ieee80211_vht_var_htc_field = -1;
+static int hf_ieee80211_vht_max_ampdu = -1;
+static int hf_ieee80211_vht_link_adaptation_cap = -1;
+static int hf_ieee80211_vht_rx_pattern = -1;
+static int hf_ieee80211_vht_tx_pattern = -1;
+static int hf_ieee80211_vht_reserv = -1;
+
+static int hf_ieee80211_vht_mcsset = -1;
+
+static int hf_ieee80211_vht_mcsset_rx_mcs_map = -1;
+static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss = -1;
+static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss = -1;
+static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss = -1;
+static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss = -1;
+static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss = -1;
+static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss = -1;
+static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss = -1;
+static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss = -1;
+
+static int hf_ieee80211_vht_mcsset_rx_highest_long_gi = -1;
+
+static int hf_ieee80211_vht_mcsset_tx_mcs_map = -1;
+static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss = -1;
+static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss = -1;
+static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss = -1;
+static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss = -1;
+static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss = -1;
+static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss = -1;
+static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss = -1;
+static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss = -1;
+
+static int hf_ieee80211_vht_op = -1;
+static int hf_ieee80211_vht_op_channel_width = -1;
+static int hf_ieee80211_vht_op_channel_center0 = -1;
+static int hf_ieee80211_vht_op_channel_center1 = -1;
+
+static int hf_ieee80211_vht_op_basic_mcs_map = -1;
+static int hf_ieee80211_vht_op_max_basic_mcs_for_1_ss = -1;
+static int hf_ieee80211_vht_op_max_basic_mcs_for_2_ss = -1;
+static int hf_ieee80211_vht_op_max_basic_mcs_for_3_ss = -1;
+static int hf_ieee80211_vht_op_max_basic_mcs_for_4_ss = -1;
+static int hf_ieee80211_vht_op_max_basic_mcs_for_5_ss = -1;
+static int hf_ieee80211_vht_op_max_basic_mcs_for_6_ss = -1;
+static int hf_ieee80211_vht_op_max_basic_mcs_for_7_ss = -1;
+static int hf_ieee80211_vht_op_max_basic_mcs_for_8_ss = -1;
+
+static int hf_ieee80211_vht_mcsset_tx_highest_long_gi = -1;
 
 static int hf_ieee80211_tag_neighbor_report_bssid = -1;
 static int hf_ieee80211_tag_neighbor_report_bssid_info = -1;
@@ -2249,11 +3614,40 @@ static int hf_ieee80211_tag_ft_subelem_igtk_ipn = -1;
 static int hf_ieee80211_tag_ft_subelem_igtk_key_length = -1;
 static int hf_ieee80211_tag_ft_subelem_igtk_key = -1;
 
+/* IEEE Std 802.11-2012: 11r 8.4.2.52 */
+static int hf_ieee80211_tag_ric_data_id = -1;
+static int hf_ieee80211_tag_ric_data_desc_cnt = -1;
+static int hf_ieee80211_tag_ric_data_status_code = -1;
+
+/* IEEE Std 802.11-2012: 11r 8.4.2.53 */
+static int hf_ieee80211_tag_ric_desc_rsrc_type = -1;
+static int hf_ieee80211_tag_ric_desc_var_params = -1;
+
 /* IEEE Std 802.11w-2009 7.3.2.55 */
 static int hf_ieee80211_tag_mmie_keyid = -1;
 static int hf_ieee80211_tag_mmie_ipn = -1;
 static int hf_ieee80211_tag_mmie_mic = -1;
 
+/*WAPI-Specification 7.3.2.25 : WAPI Parameter Set*/
+static int hf_ieee80211_tag_wapi_param_set_version = -1;
+
+static int hf_ieee80211_tag_wapi_param_set_akm_suite_count = -1;
+static int hf_ieee80211_tag_wapi_param_set_akm_suite_oui = -1;
+static int hf_ieee80211_tag_wapi_param_set_akm_suite_type = -1;
+
+static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count = -1;
+static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui = -1;
+static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type = -1;
+
+static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui = -1;
+static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type = -1;
+
+static int hf_ieee80211_tag_wapi_param_set_capab = -1;
+static int hf_ieee80211_tag_wapi_param_set_capab_preauth = -1;
+static int hf_ieee80211_tag_wapi_param_set_capab_rsvd = -1;
+static int hf_ieee80211_tag_wapi_param_set_bkid_count = -1;
+static int hf_ieee80211_tag_wapi_param_set_bkid_list = -1;
+
 /* IEEE Std 802.11v-2011 7.3.2.61 */
 static int hf_ieee80211_tag_time_adv_timing_capab = -1;
 static int hf_ieee80211_tag_time_adv_time_value = -1;
@@ -2268,6 +3662,30 @@ static int hf_ieee80211_tag_time_adv_time_value_reserved = -1;
 static int hf_ieee80211_tag_time_adv_time_error = -1;
 static int hf_ieee80211_tag_time_adv_time_update_counter = -1;
 
+/* IEEE Std 802.11-2012 8.4.2.81 */
+static int hf_ieee80211_tag_bss_max_idle_period = -1;
+static int hf_ieee80211_tag_bss_max_idle_options_protected = -1;
+
+/* IEEE Std 802.11-2012 8.4.2.82 */
+static int hf_ieee80211_tag_tfs_request_id = -1;
+static int hf_ieee80211_tag_tfs_request_ac_delete_after_match = -1;
+static int hf_ieee80211_tag_tfs_request_ac_notify = -1;
+static int hf_ieee80211_tag_tfs_request_subelem_id = -1;
+static int hf_ieee80211_tag_tfs_request_subelem_len = -1;
+static int hf_ieee80211_tag_tfs_request_subelem = -1;
+
+/* IEEE Std 802.11-2012 8.4.2.83 */
+static int hf_ieee80211_tag_tfs_response_subelem_id = -1;
+static int hf_ieee80211_tag_tfs_response_subelem_len = -1;
+static int hf_ieee80211_tag_tfs_response_subelem = -1;
+static int hf_ieee80211_tag_tfs_response_status = -1;
+static int hf_ieee80211_tag_tfs_response_id = -1;
+
+/* IEEE Std 802.11-2012 8.4.2.84 */
+static int hf_ieee80211_tag_wnm_sleep_mode_action_type = -1;
+static int hf_ieee80211_tag_wnm_sleep_mode_response_status = -1;
+static int hf_ieee80211_tag_wnm_sleep_mode_interval = -1;
+
 /* IEEE Std 802.11v-2011 7.3.2.87 */
 static int hf_ieee80211_tag_time_zone = -1;
 
@@ -2419,10 +3837,17 @@ static int hf_ieee80211_wfa_ie_wme_tspec_medium = -1;
 static int hf_ieee80211_aironet_ie_type = -1;
 static int hf_ieee80211_aironet_ie_version = -1;
 static int hf_ieee80211_aironet_ie_data = -1;
-static int hf_ieee80211_aironet_ie_qos_unk1 = -1;
+static int hf_ieee80211_aironet_ie_qos_reserved = -1;
 static int hf_ieee80211_aironet_ie_qos_paramset = -1;
 static int hf_ieee80211_aironet_ie_qos_val = -1;
 
+static int hf_ieee80211_vs_aruba_subtype = -1;
+static int hf_ieee80211_vs_aruba_apname = -1;
+static int hf_ieee80211_vs_aruba_data = -1;
+
+static int hf_ieee80211_rsn_ie_pmkid = -1;
+static int hf_ieee80211_rsn_ie_unknown = -1;
+
 static int hf_ieee80211_marvell_ie_type = -1;
 static int hf_ieee80211_marvell_ie_mesh_subtype = -1;
 static int hf_ieee80211_marvell_ie_mesh_version = -1;
@@ -2529,6 +3954,18 @@ static int hf_ieee80211_sched_spec_int = -1;
 static int hf_ieee80211_tclas_up = -1;
 static int hf_ieee80211_tclas_class_type = -1;
 static int hf_ieee80211_tclas_class_mask = -1;
+static int hf_ieee80211_tclas_class_mask0_src_addr = -1;
+static int hf_ieee80211_tclas_class_mask0_dst_addr = -1;
+static int hf_ieee80211_tclas_class_mask0_type = -1;
+static int hf_ieee80211_tclas_class_mask1_ver = -1;
+static int hf_ieee80211_tclas_class_mask1_src_ip = -1;
+static int hf_ieee80211_tclas_class_mask1_dst_ip = -1;
+static int hf_ieee80211_tclas_class_mask1_src_port = -1;
+static int hf_ieee80211_tclas_class_mask1_dst_port = -1;
+static int hf_ieee80211_tclas_class_mask1_ipv4_dscp = -1;
+static int hf_ieee80211_tclas_class_mask1_ipv4_proto = -1;
+static int hf_ieee80211_tclas_class_mask1_ipv6_flow = -1;
+static int hf_ieee80211_tclas_class_mask2_tci = -1;
 static int hf_ieee80211_tclas_src_mac_addr = -1;
 static int hf_ieee80211_tclas_dst_mac_addr = -1;
 static int hf_ieee80211_tclas_ether_type = -1;
@@ -2549,6 +3986,7 @@ static int hf_ieee80211_aruba_hb_seq = -1;
 static int hf_ieee80211_aruba_mtu = -1;
 
 static int hf_ieee80211_tag_vendor_oui_type = -1;
+static int hf_ieee80211_tag_vendor_data = -1;
 
 /* IEEE Std 802.11z-2010 7.3.2.62 */
 static int hf_ieee80211_tag_link_id_bssid = -1;
@@ -2583,6 +4021,37 @@ static int hf_ieee80211_tag_timeout_int_value = -1;
 /* Ethertype 89-0d */
 static int hf_ieee80211_data_encap_payload_type = -1;
 
+static int hf_ieee80211_anqp_wfa_subtype = -1;
+
+/* Hotspot 2.0 */
+static int hf_hs20_indication_dgaf_disabled = -1;
+
+static int hf_hs20_anqp_subtype = -1;
+static int hf_hs20_anqp_reserved = -1;
+static int hf_hs20_anqp_payload = -1;
+static int hf_hs20_anqp_hs_query_list = -1;
+static int hf_hs20_anqp_hs_capability_list = -1;
+static int hf_hs20_anqp_ofn_length = -1;
+static int hf_hs20_anqp_ofn_language = -1;
+static int hf_hs20_anqp_ofn_name = -1;
+static int hf_hs20_anqp_wan_metrics_link_status = -1;
+static int hf_hs20_anqp_wan_metrics_symmetric_link = -1;
+static int hf_hs20_anqp_wan_metrics_at_capacity = -1;
+static int hf_hs20_anqp_wan_metrics_reserved = -1;
+static int hf_hs20_anqp_wan_metrics_downlink_speed = -1;
+static int hf_hs20_anqp_wan_metrics_uplink_speed = -1;
+static int hf_hs20_anqp_wan_metrics_downlink_load = -1;
+static int hf_hs20_anqp_wan_metrics_uplink_load = -1;
+static int hf_hs20_anqp_wan_metrics_lmd = -1;
+static int hf_hs20_anqp_cc_proto_ip_proto = -1;
+static int hf_hs20_anqp_cc_proto_port_num = -1;
+static int hf_hs20_anqp_cc_proto_status = -1;
+static int hf_hs20_anqp_nai_hrq_count = -1;
+static int hf_hs20_anqp_nai_hrq_encoding_type = -1;
+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;
+
 /* ************************************************************************* */
 /*                               Protocol trees                              */
 /* ************************************************************************* */
@@ -2643,6 +4112,14 @@ static gint ett_hta_cap1_tree = -1;
 static gint ett_hta_cap2_tree = -1;
 static gint ett_htc_tree = -1;
 
+static gint ett_vht_cap_tree = -1;
+static gint ett_vht_mcsset_tree = -1;
+static gint ett_vht_rx_mcsbit_tree = -1;
+static gint ett_vht_tx_mcsbit_tree = -1;
+static gint ett_vht_basic_mcsbit_tree = -1;
+
+static gint ett_vht_op_tree = -1;
+
 static gint ett_ht_info_delimiter1_tree = -1;
 static gint ett_ht_info_delimiter2_tree = -1;
 static gint ett_ht_info_delimiter3_tree = -1;
@@ -2654,9 +4131,24 @@ static gint ett_tag_measure_report_type_tree = -1;
 static gint ett_tag_measure_report_basic_map_tree = -1;
 static gint ett_tag_measure_report_rpi_tree = -1;
 static gint ett_tag_measure_report_frame_tree = -1;
+static gint ett_tag_bss_bitmask_tree = -1;
 static gint ett_tag_dfs_map_tree = -1;
 static gint ett_tag_erp_info_tree = -1;
-static gint ett_tag_ex_cap = -1;
+static gint ett_tag_ex_cap1 = -1;
+static gint ett_tag_ex_cap2 = -1;
+static gint ett_tag_ex_cap3 = -1;
+static gint ett_tag_ex_cap4 = -1;
+static gint ett_tag_ex_cap5 = -1;
+static gint ett_tag_ex_cap6 = -1;
+static gint ett_tag_ex_cap7 = -1;
+static gint ett_tag_ex_cap8 = -1;
+
+static gint ett_tag_rm_cap1 = -1;
+static gint ett_tag_rm_cap2 = -1;
+static gint ett_tag_rm_cap3 = -1;
+static gint ett_tag_rm_cap4 = -1;
+static gint ett_tag_rm_cap5 = -1;
+static gint ett_tag_tclas_mask_tree = -1;
 
 static gint ett_tag_supported_channels = -1;
 
@@ -2664,6 +4156,11 @@ static gint ett_tag_neighbor_report_bssid_info_tree = -1;
 static gint ett_tag_neighbor_report_bssid_info_capability_tree = -1;
 static gint ett_tag_neighbor_report_sub_tag_tree = -1;
 
+static gint ett_tag_wapi_param_set_akm_tree = -1;
+static gint ett_tag_wapi_param_set_ucast_tree = -1;
+static gint ett_tag_wapi_param_set_mcast_tree = -1;
+static gint ett_tag_wapi_param_set_preauth_tree = -1;
+
 static gint ett_tag_time_adv_tree = -1;
 
 static gint ett_ff_ba_param_tree = -1;
@@ -2694,8 +4191,13 @@ static gint ett_gas_query = -1;
 static gint ett_gas_anqp = -1;
 static gint ett_nai_realm = -1;
 static gint ett_nai_realm_eap = -1;
+static gint ett_tag_ric_data_desc_ie = -1;
 static gint ett_anqp_vendor_capab = -1;
 
+static gint ett_hs20_cc_proto_port_tuple = -1;
+
+static gint ett_ssid_list = -1;
+
 static const fragment_items frag_items = {
   &ett_fragment,
   &ett_fragments,
@@ -2714,7 +4216,7 @@ static const fragment_items frag_items = {
   "fragments"
 };
 
-static enum_val_t wlan_ignore_wep_options[] = {
+static const enum_val_t wlan_ignore_wep_options[] = {
   { "no",         "No",               WLAN_IGNORE_WEP_NO    },
   { "without_iv", "Yes - without IV", WLAN_IGNORE_WEP_WO_IV },
   { "with_iv",    "Yes - with IV",    WLAN_IGNORE_WEP_W_IV  },
@@ -2729,52 +4231,50 @@ static dissector_handle_t data_handle;
 
 static int wlan_tap = -1;
 
-static const value_string access_network_type_vals[] =
-{
-  { 0, "Private network" },
-  { 1, "Private network with guest access" },
-  { 2, "Chargeable public network" },
-  { 3, "Free public network" },
-  { 4, "Personal device network" },
-  { 5, "Emergency services only network" },
+static const value_string access_network_type_vals[] = {
+  {  0, "Private network" },
+  {  1, "Private network with guest access" },
+  {  2, "Chargeable public network" },
+  {  3, "Free public network" },
+  {  4, "Personal device network" },
+  {  5, "Emergency services only network" },
   { 14, "Test or experimental" },
   { 15, "Wildcard" },
   { 0, NULL }
 };
 
-static const value_string adv_proto_id_vals[] =
-{
-  {0, "Access Network Query Protocol"},
-  {1, "MIH Information Service"},
-  {2, "MIH Command and Event Services Capability Discovery"},
-  {3, "Emergency Alert System (EAS)"},
-  {4, "Location-to-Service Translation Protocol"},
+static const value_string adv_proto_id_vals[] = {
+  {  0, "Access Network Query Protocol"},
+  {  1, "MIH Information Service"},
+  {  2, "MIH Command and Event Services Capability Discovery"},
+  {  3, "Emergency Alert System (EAS)"},
+  {  4, "Location-to-Service Translation Protocol"},
   {221, "Vendor Specific"},
   {0, NULL}
 };
 
-static const value_string timeout_int_types[] =
-{
+static const value_string timeout_int_types[] = {
   {1, "Reassociation deadline interval (TUs)"},
   {2, "Key lifetime interval (seconds)"},
   {3, "Association Comeback time (TUs)"},
   {0, NULL}
 };
 
-static const value_string tdls_action_codes[] ={
-  {TDLS_SETUP_REQUEST, "TDLS Setup Request"},
-  {TDLS_SETUP_RESPONSE, "TDLS Setup Response"},
-  {TDLS_SETUP_CONFIRM, "TDLS Setup Confirm"},
-  {TDLS_TEARDOWN, "TDLS Teardown"},
+static const value_string tdls_action_codes[] = {
+  {TDLS_SETUP_REQUEST,           "TDLS Setup Request"},
+  {TDLS_SETUP_RESPONSE,          "TDLS Setup Response"},
+  {TDLS_SETUP_CONFIRM,           "TDLS Setup Confirm"},
+  {TDLS_TEARDOWN,                "TDLS Teardown"},
   {TDLS_PEER_TRAFFIC_INDICATION, "TDLS Peer Traffic Indication"},
-  {TDLS_CHANNEL_SWITCH_REQUEST, "TDLS Channel Switch Request"},
+  {TDLS_CHANNEL_SWITCH_REQUEST,  "TDLS Channel Switch Request"},
   {TDLS_CHANNEL_SWITCH_RESPONSE, "TDLS Channel Switch Response"},
-  {TDLS_PEER_PSM_REQUEST, "TDLS Peer PSM Request"},
-  {TDLS_PEER_PSM_RESPONSE, "TDLS Peer PSM Response"},
-  {TDLS_PEER_TRAFFIC_RESPONSE, "TDLS Peer Traffic Response"},
-  {TDLS_DISCOVERY_REQUEST, "TDLS Discovery Request"},
+  {TDLS_PEER_PSM_REQUEST,        "TDLS Peer PSM Request"},
+  {TDLS_PEER_PSM_RESPONSE,       "TDLS Peer PSM Response"},
+  {TDLS_PEER_TRAFFIC_RESPONSE,   "TDLS Peer Traffic Response"},
+  {TDLS_DISCOVERY_REQUEST,       "TDLS Discovery Request"},
   {0, NULL}
 };
+static value_string_ext tdls_action_codes_ext = VALUE_STRING_EXT_INIT(tdls_action_codes);
 
 AIRPDCAP_CONTEXT airpdcap_ctx;
 
@@ -2794,8 +4294,8 @@ AIRPDCAP_CONTEXT airpdcap_ctx;
 #define PSMP_STA_INFO_FLAG_IA_RESERVED  0xFC000000
 
 static const value_string ff_psmp_sta_info_flags[] = {
-  { PSMP_STA_INFO_BROADCAST, "Broadcast"},
-  { PSMP_STA_INFO_MULTICAST, "Multicast"},
+  { PSMP_STA_INFO_BROADCAST,              "Broadcast"},
+  { PSMP_STA_INFO_MULTICAST,              "Multicast"},
   { PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED, "Individually Addressed"},
   {0, NULL}
 };
@@ -2804,8 +4304,9 @@ static void
 beacon_interval_base_custom(gchar *result, guint32 beacon_interval)
 {
    double temp_double;
+
    temp_double = (double)beacon_interval;
-   g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (temp_double * 1024 / 1000000) );
+   g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (temp_double * 1024 / 1000000));
 }
 
 /* ************************************************************************* */
@@ -2814,7 +4315,7 @@ beacon_interval_base_custom(gchar *result, guint32 beacon_interval)
 static int
 find_header_length (guint16 fcf, guint16 ctrl_fcf, gboolean is_ht)
 {
-  int len;
+  int     len;
   guint16 cw_fcf;
 
   switch (FCF_FRAME_TYPE (fcf)) {
@@ -2892,10 +4393,10 @@ has_mesh_control(guint16 fcf, guint16 qos_ctl, guint8 mesh_flags)
    * set, all reserved bits in the mesh_flags field are zero, and the address
    * extension mode is not a reserved value.
    */
-  return ((FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T4 || FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T2) &&
+  return (((FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T4) || (FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T2)) &&
           (QOS_MESH_CONTROL_PRESENT(qos_ctl)) &&
-          (mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION) == 0 &&
-          (mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION) != MESH_FLAGS_ADDRESS_EXTENSION);
+          ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION) == 0) &&
+          ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION) != MESH_FLAGS_ADDRESS_EXTENSION));
 }
 
 static int
@@ -2904,9 +4405,10 @@ find_mesh_control_length(guint8 mesh_flags)
   return 6 + 6*(mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION);
 }
 
-mimo_control_t get_mimo_control (tvbuff_t *tvb, int offset)
+static mimo_control_t
+get_mimo_control (tvbuff_t *tvb, int offset)
 {
-  guint16 mimo;
+  guint16        mimo;
   mimo_control_t output;
 
   mimo = tvb_get_letohs (tvb, offset);
@@ -2960,32 +4462,34 @@ mimo_control_t get_mimo_control (tvbuff_t *tvb, int offset)
   return output;
 }
 
-int get_mimo_na (guint8 nr, guint8 nc)
+static int
+get_mimo_na (guint8 nr, guint8 nc)
 {
-  if (nr == 2 && nc == 1){
+  if ((nr == 2) && (nc == 1)) {
     return 2;
-  }else if (nr == 2 && nc == 2){
+  } else if ((nr == 2) && (nc == 2)) {
     return 2;
-  }else if (nr == 3 && nc == 1){
+  } else if ((nr == 3) && (nc == 1)) {
     return 4;
-  }else if (nr == 3 && nc == 2){
+  } else if ((nr == 3) && (nc == 2)) {
     return 6;
-  }else if (nr == 3 && nc == 3){
+  } else if ((nr == 3) && (nc == 3)) {
     return 6;
-  }else if (nr == 4 && nc == 1){
+  } else if ((nr == 4) && (nc == 1)) {
     return 6;
-  }else if (nr == 4 && nc == 2){
+  } else if ((nr == 4) && (nc == 2)) {
     return 10;
-  }else if (nr == 4 && nc == 3){
+  } else if ((nr == 4) && (nc == 3)) {
     return 12;
-  }else if (nr == 4 && nc == 4){
+  } else if ((nr == 4) && (nc == 4)) {
     return 12;
-  }else{
+  } else{
     return 0;
   }
 }
 
-int get_mimo_ns (gboolean chan_width, guint8 output_grouping)
+static int
+get_mimo_ns (gboolean chan_width, guint8 output_grouping)
 {
   int ns = 0;
 
@@ -3031,12 +4535,13 @@ int get_mimo_ns (gboolean chan_width, guint8 output_grouping)
   return ns;
 }
 
-int add_mimo_csi_matrices_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
+static int
+add_mimo_csi_matrices_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
 {
   proto_item *snr_item;
   proto_tree *snr_tree;
-  int csi_matrix_size, start_offset;
-  int ns, i;
+  int         csi_matrix_size, start_offset;
+  int         ns, i;
 
   start_offset = offset;
   snr_item = proto_tree_add_text(tree, tvb, offset, mimo_cntrl.nc, "Signal to Noise Ratio");
@@ -3047,8 +4552,9 @@ int add_mimo_csi_matrices_report (proto_tree *tree, tvbuff_t *tvb, int offset, m
     guint8 snr;
 
     snr = tvb_get_guint8(tvb, offset);
-    proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1, snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
-    offset++;
+    proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
+                               snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
+    offset += 1;
   }
 
   ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
@@ -3059,12 +4565,13 @@ int add_mimo_csi_matrices_report (proto_tree *tree, tvbuff_t *tvb, int offset, m
   return offset - start_offset;
 }
 
-int add_mimo_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
+static int
+add_mimo_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
 {
   proto_item *snr_item;
   proto_tree *snr_tree;
-  int csi_matrix_size, start_offset;
-  int ns, i;
+  int         csi_matrix_size, start_offset;
+  int         ns, i;
 
   start_offset = offset;
   snr_item = proto_tree_add_text(tree, tvb, offset, mimo_cntrl.nc, "Signal to Noise Ratio");
@@ -3075,8 +4582,9 @@ int add_mimo_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int o
     guint8 snr;
 
     snr = tvb_get_guint8(tvb, offset);
-    proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1, snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
-    offset++;
+    proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
+                               snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
+    offset += 1;
   }
 
   ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
@@ -3087,12 +4595,13 @@ int add_mimo_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int o
   return offset - start_offset;
 }
 
-int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
+static int
+add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
 {
   proto_item *snr_item;
   proto_tree *snr_tree;
-  int csi_matrix_size, start_offset;
-  int ns, na, i;
+  int         csi_matrix_size, start_offset;
+  int         ns, na, i;
 
   start_offset = offset;
   snr_item = proto_tree_add_text(tree, tvb, offset, mimo_cntrl.nc, "Signal to Noise Ratio");
@@ -3103,8 +4612,9 @@ int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t
     guint8 snr;
 
     snr = tvb_get_guint8(tvb, offset);
-    proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1, snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
-    offset++;
+    proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
+                               snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
+    offset += 1;
   }
 
   na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
@@ -3121,20 +4631,20 @@ int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t
 /* ************************************************************************* */
 static void
 capture_ieee80211_common (const guchar * pd, int offset, int len,
-        packet_counts * ld, gboolean fixed_length_header,
-        gboolean datapad, gboolean is_ht)
+                          packet_counts * ld, gboolean fixed_length_header,
+                          gboolean datapad, gboolean is_ht)
 {
   guint16 fcf, hdr_length;
 
   if (!BYTES_ARE_IN_FRAME(offset, len, 2)) {
-    ld->other++;
+    ld->other += 1;
     return;
   }
 
   fcf = pletohs (&pd[offset]);
 
-  if (IS_PROTECTED(FCF_FLAGS(fcf)) && wlan_ignore_wep == WLAN_IGNORE_WEP_NO) {
-    ld->other++;
+  if (IS_PROTECTED(FCF_FLAGS(fcf)) && (wlan_ignore_wep == WLAN_IGNORE_WEP_NO)) {
+    ld->other += 1;
     return;
   }
 
@@ -3151,12 +4661,12 @@ capture_ieee80211_common (const guchar * pd, int offset, int len,
       } else {
         hdr_length = find_header_length (fcf, 0, is_ht);
         /* adjust the header length depending on the Mesh Control field */
-        if (FCF_FRAME_TYPE(fcf) == DATA_FRAME &&
+        if ((FCF_FRAME_TYPE(fcf) == DATA_FRAME) &&
             DATA_FRAME_IS_QOS(COMPOSE_FRAME_TYPE(fcf))) {
 
-          guint8 mesh_flags = pd[hdr_length];
-          guint16 qosoff = hdr_length - 2;
-          qosoff -= is_ht ? 4 : 0;
+          guint8  mesh_flags = pd[hdr_length];
+          guint16 qosoff     = hdr_length - 2;
+          qosoff -= (is_ht ? 4 : 0);
           if (has_mesh_control(fcf, pletohs(&pd[qosoff]), mesh_flags)) {
             hdr_length += find_mesh_control_length(mesh_flags);
           }
@@ -3196,25 +4706,25 @@ capture_ieee80211_common (const guchar * pd, int offset, int len,
            packet starts with 0x00 0x00 and, if so, treat it as an OLPC
            frame. */
       if (!BYTES_ARE_IN_FRAME(offset+hdr_length, len, 2)) {
-        ld->other++;
+        ld->other += 1;
         return;
       }
-      if (pd[offset+hdr_length] != 0xaa && pd[offset+hdr_length+1] != 0xaa) {
+      if ((pd[offset+hdr_length] != 0xaa) && (pd[offset+hdr_length+1] != 0xaa)) {
 #if 0
         /* XXX - this requires us to parse the header to find the source
            and destination addresses. */
-        if (BYTES_ARE_IN_FRAME(offset+hdr_length, len, 12) {
-          /* We have two MAC addresses after the header. */
-          if (memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0 ||
-              memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0) {
-            capture_eth (pd, offset + hdr_length, len, ld);
-            return;
-          }
+        if (BYTES_ARE_IN_FRAME(offset+hdr_length, len, 12)) {
+            /* We have two MAC addresses after the header. */
+            if ((memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0) ||
+                (memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0)) {
+              capture_eth (pd, offset + hdr_length, len, ld);
+              return;
+            }
         }
 #endif
-        if (pd[offset+hdr_length] == 0xff && pd[offset+hdr_length+1] == 0xff)
+        if ((pd[offset+hdr_length] == 0xff) && (pd[offset+hdr_length+1] == 0xff))
           capture_ipx (ld);
-        else if (pd[offset+hdr_length] == 0x00 && pd[offset+hdr_length+1] == 0x00)
+        else if ((pd[offset+hdr_length] == 0x00) && (pd[offset+hdr_length+1] == 0x00))
           capture_llc (pd, offset + hdr_length + 2, len, ld);
       }
       else {
@@ -3224,7 +4734,7 @@ capture_ieee80211_common (const guchar * pd, int offset, int len,
     }
 
     default:
-      ld->other++;
+      ld->other += 1;
       break;
   }
 }
@@ -3275,10 +4785,9 @@ static proto_tree *
 get_fixed_parameter_tree (proto_tree * tree, tvbuff_t *tvb, int start, int size)
 {
   proto_item *fixed_fields;
-  fixed_fields =
-    proto_tree_add_uint_format (tree, hf_ieee80211_fixed_parameters, tvb, start,
-        size, size, "Fixed parameters (%d bytes)",
-        size);
+
+  fixed_fields = proto_tree_add_item (tree, hf_ieee80211_fixed_parameters, tvb, start, size, ENC_NA);
+  proto_item_append_text(fixed_fields, " (%d bytes)",size);
 
   return proto_item_add_subtree (fixed_fields, ett_fixed_parameters);
 }
@@ -3292,14 +4801,8 @@ get_tagged_parameter_tree (proto_tree * tree, tvbuff_t *tvb, int start, int size
 {
   proto_item *tagged_fields;
 
-  tagged_fields = proto_tree_add_uint_format (tree, hf_ieee80211_tagged_parameters,
-    tvb,
-    start,
-    2,
-    size,
-    "Tagged parameters (%d bytes)",
-    size);
-  proto_item_set_len(tagged_fields, size);
+  tagged_fields = proto_tree_add_item(tree, hf_ieee80211_tagged_parameters, tvb, start, -1, ENC_NA);
+  proto_item_append_text(tagged_fields, " (%d bytes)",size);
 
   return proto_item_add_subtree (tagged_fields, ett_tagged_parameters);
 }
@@ -3312,76 +4815,76 @@ dissect_vendor_action_marvell(proto_tree *tree, tvbuff_t *tvb, int offset)
 
   octet = tvb_get_guint8(tvb, offset);
   proto_tree_add_item (tree, hf_ieee80211_ff_marvell_action_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset++;
+  offset += 1;
   switch (octet)
     {
       case MRVL_ACTION_MESH_MANAGEMENT:
         octet = tvb_get_guint8(tvb, offset);
         proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-        offset++;
+        offset += 1;
         switch (octet)
           {
             case MRVL_MESH_MGMT_ACTION_RREQ:
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_rreqid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-              offset+= 4;
+              offset += 4;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA);
-              offset+= 6;
+              offset += 6;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-              offset+= 4;
+              offset += 4;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-              offset+= 4;
+              offset += 4;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-              offset+= 4;
+              offset += 4;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
-              offset+= 6;
+              offset += 6;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-              offset+= 4;
+              offset += 4;
               break;
             case MRVL_MESH_MGMT_ACTION_RREP:
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
-              offset+= 6;
+              offset += 6;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-              offset+= 4;
+              offset += 4;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-              offset+= 4;
+              offset += 4;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-              offset+= 4;
+              offset += 4;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA);
-              offset+= 6;
+              offset += 6;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-              offset+= 4;
+              offset += 4;
               break;
             case MRVL_MESH_MGMT_ACTION_RERR:
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-              offset++;
+              offset += 1;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
-              offset+= 6;
+              offset += 6;
               proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-              offset+= 4;
+              offset += 4;
               break;
             default:
               break;
@@ -3398,7 +4901,7 @@ static guint
 dissect_advertisement_protocol(packet_info *pinfo, proto_tree *tree,
                                tvbuff_t *tvb, int offset, gboolean *anqp)
 {
-  guint8 tag_no, tag_len, left;
+  guint8      tag_no, tag_len, left;
   proto_item *item = NULL, *adv_item;
   proto_tree *adv_tree, *adv_tuple_tree;
 
@@ -3450,21 +4953,21 @@ dissect_advertisement_protocol(packet_info *pinfo, proto_tree *tree,
     proto_tree_add_item(adv_tuple_tree,
                         hf_ieee80211_tag_adv_proto_pame_bi, tvb,
                         offset, 1, ENC_BIG_ENDIAN);
-    offset++;
+    offset += 1;
     left--;
     proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_id, tvb,
                         offset, 1, ENC_BIG_ENDIAN);
-    offset++;
+    offset += 1;
     left--;
 
-    if (id == 0 && anqp)
+    if ((id == 0) && anqp)
       *anqp = TRUE;
 
     if (id == 221) {
       /* Vendor specific */
       guint8 len = tvb_get_guint8(tvb, offset);
-      offset++;
-      left--;
+      offset += 1;
+      left   -= 1;
       if (len > left) {
         expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
                                "Vendor specific info length error");
@@ -3473,7 +4976,7 @@ dissect_advertisement_protocol(packet_info *pinfo, proto_tree *tree,
       proto_tree_add_text(adv_tuple_tree, tvb, offset, len,
                           "Vendor Specific Advertisement Protocol info");
       offset += len;
-      left -= len;
+      left   -= len;
     }
   }
 
@@ -3486,26 +4989,38 @@ dissect_advertisement_protocol(packet_info *pinfo, proto_tree *tree,
 }
 
 static void
-dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
+dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
 {
-    while (offset + 2 <= end) {
-      proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
-                          tvb, offset, 2, ENC_LITTLE_ENDIAN);
-      offset += 2;
-    }
-    if (offset != end) {
-      expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
-                             "Unexpected ANQP Query list format");
-    }
+  while (offset + 2 <= end) {
+    proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
+                        tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if (offset != end) {
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
+                           "Unexpected ANQP Query list format");
+  }
+}
+
+static void dissect_hs20_anqp_hs_capability_list(proto_tree *tree,
+                                                 tvbuff_t *tvb,
+                                                 int offset, int end)
+{
+  while (offset < end) {
+    proto_tree_add_item(tree, hf_hs20_anqp_hs_capability_list,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+  }
 }
 
 static void
-dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
+dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
 {
-  guint16 id, len;
+  guint16     id, len;
   proto_item *item;
   proto_tree *vtree;
-  guint32 oui;
+  guint32     oui;
+  guint8      subtype;
 
   while (offset + 2 <= end) {
     id = tvb_get_letohs(tvb, offset);
@@ -3518,17 +5033,38 @@ dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
       proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vlen,
                           tvb, offset, 2, ENC_LITTLE_ENDIAN);
       offset += 2;
-      if (len < 3 || offset + len > end) {
-        expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
+      if ((len < 3) || ((offset + len) > end)) {
+        expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
                                "Invalid vendor-specific ANQP capability");
         return;
       }
       oui = tvb_get_ntoh24(tvb, offset);
       proto_tree_add_item(vtree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
       offset += 3;
-      len -= 3;
+      len    -= 3;
 
       switch (oui) {
+      case OUI_WFA:
+        if (len == 0)
+          break;
+        subtype = tvb_get_guint8(tvb, offset);
+        proto_item_append_text(vtree, " - WFA - %s",
+                               val_to_str(subtype, wfa_subtype_vals,
+                                          "Unknown (%u)"));
+        proto_tree_add_item(vtree, hf_ieee80211_anqp_wfa_subtype,
+                            tvb, offset, 1, ENC_NA);
+        offset++;
+        len--;
+        switch (subtype) {
+        case WFA_SUBTYPE_HS20_ANQP:
+          dissect_hs20_anqp_hs_capability_list(vtree, tvb, offset, end);
+          break;
+        default:
+          proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
+                              tvb, offset, len, ENC_NA);
+          break;
+        }
+        break;
       default:
         proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
                             tvb, offset, len, ENC_NA);
@@ -3539,28 +5075,30 @@ dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
     }
   }
   if (offset != end) {
-    expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
                            "Unexpected ANQP Capability list format");
   }
 }
 
 static const value_string venue_group_vals[] = {
-  { 0, "Unspecified" },
-  { 1, "Assembly" },
-  { 2, "Business" },
-  { 3, "Educational" },
-  { 4, "Factory and Industrial" },
-  { 5, "Institutional" },
-  { 6, "Mercantile" },
-  { 7, "Residential" },
-  { 8, "Storage" },
-  { 9, "Utility and Miscellaneous" },
+  {  0, "Unspecified" },
+  {  1, "Assembly" },
+  {  2, "Business" },
+  {  3, "Educational" },
+  {  4, "Factory and Industrial" },
+  {  5, "Institutional" },
+  {  6, "Mercantile" },
+  {  7, "Residential" },
+  {  8, "Storage" },
+  {  9, "Utility and Miscellaneous" },
   { 10, "Vehicular" },
   { 11, "Outdoor" },
   { 0, NULL }
 };
+static value_string_ext venue_group_vals_ext = VALUE_STRING_EXT_INIT(venue_group_vals);
 
-static void dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
+static void
+dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_group,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
@@ -3569,7 +5107,7 @@ static void dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static void
-dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
+dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
 {
   proto_item *item;
 
@@ -3579,16 +5117,16 @@ dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
     guint8 vlen = tvb_get_guint8(tvb, offset);
     item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_length,
                                tvb, offset, 1, ENC_BIG_ENDIAN);
-    offset++;
-    if (vlen > end - offset || vlen < 3) {
-      expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
+    offset += 1;
+    if ((vlen > (end - offset)) || (vlen < 3)) {
+      expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
                              "Invalid Venue Name Duple length");
       break;
     }
     proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_language,
                         tvb, offset, 3, ENC_ASCII|ENC_NA);
     proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_name,
-                        tvb, offset + 3, vlen - 3, ENC_ASCII|ENC_NA);
+                        tvb, offset + 3, vlen - 3, ENC_UTF_8|ENC_NA);
     offset += vlen;
   }
 }
@@ -3608,7 +5146,7 @@ dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
     guint16 len;
     proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_indicator,
                         tvb, offset, 1, ENC_BIG_ENDIAN);
-    offset++;
+    offset += 1;
     len = tvb_get_letohs(tvb, offset);
     proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url_len,
                         tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3620,9 +5158,11 @@ dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
   }
 }
 
-static void add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
+static void
+add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
 {
   const gchar *manuf_name;
+
   manuf_name = tvb_get_manuf_name_if_known(tvb, offset);
   if (manuf_name == NULL)
     return;
@@ -3630,20 +5170,20 @@ static void add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
 }
 
 static void
-dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, int offset,
+dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
                                 int end)
 {
   proto_item *item;
-  guint8 len;
+  guint8      len;
 
   while (offset < end) {
     len = tvb_get_guint8(tvb, offset);
     item = proto_tree_add_item(tree,
                                hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
                                tvb, offset, 1, ENC_BIG_ENDIAN);
-    offset++;
-    if (len > end - offset || len < 3) {
-      expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
+    offset += 1;
+    if ((len > (end - offset)) || (len < 3)) {
+      expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
                              "Invalid Roaming Consortium OI");
       break;
     }
@@ -3691,26 +5231,26 @@ static const value_string nai_realm_encoding_vals[] = {
 };
 
 static const value_string nai_realm_auth_param_id_vals[] = {
-  { 1, "Expanded EAP Method" },
-  { 2, "Non-EAP Inner Authentication Type" },
-  { 3, "Inner Authentication EAP Method Type" },
-  { 4, "Expanded Inner EAP Method" },
-  { 5, "Credential Type" },
-  { 6, "Tunneled EAP Method Credential Type" },
+  {   1, "Expanded EAP Method" },
+  {   2, "Non-EAP Inner Authentication Type" },
+  {   3, "Inner Authentication EAP Method Type" },
+  {   4, "Expanded Inner EAP Method" },
+  {   5, "Credential Type" },
+  {   6, "Tunneled EAP Method Credential Type" },
   { 221, "Vendor Specific" },
   { 0, NULL }
 };
 
 static void
-dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
+dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
 {
-  guint16 count, len;
+  guint16     count, len;
   proto_item *item, *r_item;
-  int f_end, eap_end;
-  guint8 nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
-  guint8 auth_param_id;
+  int         f_end, eap_end;
+  guint8      nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
+  guint8      auth_param_id;
   proto_tree *realm_tree, *eap_tree;
-  guint8 *realm;
+  guint8     *realm;
 
   count = tvb_get_letohs(tvb, offset);
   proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nai_realm_count,
@@ -3725,21 +5265,21 @@ dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
                                tvb, offset, 2, ENC_LITTLE_ENDIAN);
     offset += 2;
     if (offset + len > end) {
-      expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
+      expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
                              "Invalid NAI Realm List");
       break;
     }
     f_end = offset + len;
     proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_encoding,
                         tvb, offset, 1, ENC_LITTLE_ENDIAN);
-    offset++;
+    offset += 1;
     nai_len = tvb_get_guint8(tvb, offset);
     item = proto_tree_add_item(realm_tree,
                                hf_ieee80211_ff_anqp_nai_realm_length,
                                tvb, offset, 1, ENC_LITTLE_ENDIAN);
-    offset++;
+    offset += 1;
     if (offset + nai_len > f_end) {
-      expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
+      expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
                              "Invalid NAI Realm Data");
       break;
     }
@@ -3753,7 +5293,7 @@ dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
     eap_count = tvb_get_guint8(tvb, offset);
     proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_eap_count,
                         tvb, offset, 1, ENC_LITTLE_ENDIAN);
-    offset++;
+    offset += 1;
 
     while (eap_count > 0) {
       eap_len = tvb_get_guint8(tvb, offset);
@@ -3765,43 +5305,43 @@ dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
       item = proto_tree_add_item(eap_tree,
                                  hf_ieee80211_ff_anqp_nai_realm_eap_len,
                                  tvb, offset, 1, ENC_LITTLE_ENDIAN);
-      offset++;
+      offset += 1;
       if (offset + eap_len > f_end) {
-        expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
+        expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
                                "Invalid EAP Method subfield");
         break;
       }
 
       proto_item_append_text(eap_tree, ": %s",
-                             val_to_str(tvb_get_guint8(tvb, offset),
-                                        eap_type_vals, "Unknown (%d)"));
+                             val_to_str_ext(tvb_get_guint8(tvb, offset),
+                                            &eap_type_vals_ext, "Unknown (%d)"));
       proto_tree_add_item(eap_tree, hf_ieee80211_ff_anqp_nai_realm_eap_method,
                           tvb, offset, 1, ENC_LITTLE_ENDIAN);
-      offset++;
+      offset += 1;
       auth_param_count = tvb_get_guint8(tvb, offset);
       proto_tree_add_item(eap_tree,
                           hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
                           tvb, offset, 1, ENC_LITTLE_ENDIAN);
-      offset++;
+      offset += 1;
 
       while (auth_param_count > 0) {
         auth_param_id = tvb_get_guint8(tvb, offset);
         proto_tree_add_item(eap_tree,
                             hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
                             tvb, offset, 1, ENC_LITTLE_ENDIAN);
-        offset++;
+        offset += 1;
         auth_param_len = tvb_get_guint8(tvb, offset);
         proto_tree_add_item(eap_tree,
                             hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
                             tvb, offset, 1, ENC_LITTLE_ENDIAN);
-        offset++;
+        offset += 1;
         item = proto_tree_add_item(
           eap_tree, hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
           tvb, offset, auth_param_len, ENC_NA);
-        if (auth_param_id == 3 && auth_param_len == 1) {
+        if ((auth_param_id == 3) && (auth_param_len == 1)) {
           guint8 inner_method = tvb_get_guint8(tvb, offset);
           const char *str;
-          str = val_to_str(inner_method, eap_type_vals, "Unknown (%d)");
+          str = val_to_str_ext(inner_method, &eap_type_vals_ext, "Unknown (%d)");
 
           proto_item_append_text(eap_tree, " / %s", str);
           proto_item_append_text(item, " - %s", str);
@@ -3823,26 +5363,26 @@ dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
 static void
 dissect_3gpp_cellular_network_info(proto_tree *tree, tvbuff_t *tvb, int offset)
 {
-  guint8 iei, num;
+  guint8      iei, num;
   proto_item *item;
 
   /* See Annex A of 3GPP TS 24.234 v8.1.0 for description */
   proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_gud, tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
   proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_udhl, tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
   iei = tvb_get_guint8(tvb, offset);
   item = proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_iei, tvb, offset, 1, ENC_BIG_ENDIAN);
   if (iei == 0)
     proto_item_append_text(item, " (PLMN List)");
   else
     return;
-  offset++;
+  offset += 1;
   proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_plmn_len, tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
   num = tvb_get_guint8(tvb, offset);
   proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_num_plmns, tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
   while (num > 0) {
     guint8 o1, o2, o3;
     if (tvb_reported_length_remaining(tvb, offset) < 3)
@@ -3870,20 +5410,248 @@ dissect_domain_name_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
     len = tvb_get_guint8(tvb, offset);
     proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name_len,
                         tvb, offset, 1, ENC_BIG_ENDIAN);
-    offset++;
+    offset += 1;
     proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name,
                         tvb, offset, len, ENC_ASCII|ENC_NA);
     offset += len;
   }
 }
 
+#define HS20_ANQP_HS_QUERY_LIST 1
+#define HS20_ANQP_HS_CAPABILITY_LIST 2
+#define HS20_ANQP_OPERATOR_FRIENDLY_NAME 3
+#define HS20_ANQP_WAN_METRICS 4
+#define HS20_ANQP_CONNECTION_CAPABILITY 5
+#define HS20_ANQP_NAI_HOME_REALM_QUERY 6
+#define HS20_ANQP_OPERATING_CLASS_INDICATION 7
+
+static const value_string hs20_anqp_subtype_vals[] = {
+  { HS20_ANQP_HS_QUERY_LIST, "HS Query list" },
+  { HS20_ANQP_HS_CAPABILITY_LIST, "HS Capability List" },
+  { HS20_ANQP_OPERATOR_FRIENDLY_NAME, "Operator Friendly Name" },
+  { HS20_ANQP_WAN_METRICS, "WAN Metrics" },
+  { HS20_ANQP_CONNECTION_CAPABILITY, "Connection Capability" },
+  { HS20_ANQP_NAI_HOME_REALM_QUERY, "NAI Home Realm Query" },
+  { HS20_ANQP_OPERATING_CLASS_INDICATION, "Operating Class Indication" },
+  { 0, NULL }
+};
+
+static void dissect_hs20_anqp_hs_query_list(proto_tree *tree, tvbuff_t *tvb,
+                                            int offset, int end)
+{
+  while (offset < end) {
+    proto_tree_add_item(tree, hf_hs20_anqp_hs_query_list,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+  }
+}
+
+static void dissect_hs20_anqp_operator_friendly_name(proto_tree *tree,
+                                                     tvbuff_t *tvb, packet_info *pinfo,
+                                                     int offset, int end)
+{
+  while (offset + 4 <= end) {
+    guint8 vlen = tvb_get_guint8(tvb, offset);
+    proto_item *item = proto_tree_add_item(tree, hf_hs20_anqp_ofn_length,
+                                           tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+    if (vlen > end - offset || vlen < 3) {
+      expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
+                             "Invalid Operator Friendly Name Duple length");
+      break;
+    }
+    proto_tree_add_item(tree, hf_hs20_anqp_ofn_language,
+                        tvb, offset, 3, ENC_ASCII|ENC_NA);
+    proto_tree_add_item(tree, hf_hs20_anqp_ofn_name,
+                        tvb, offset + 3, vlen - 3, ENC_UTF_8|ENC_NA);
+    offset += vlen;
+  }
+}
+
+static const value_string hs20_wm_link_status_vals[] = {
+  { 0, "Reserved" },
+  { 1, "Link up" },
+  { 2, "Link down" },
+  { 3, "Link in test state" },
+  { 0, NULL }
+};
+
+static void dissect_hs20_anqp_wan_metrics(proto_tree *tree, tvbuff_t *tvb,
+                                          int offset, gboolean request)
+{
+  if (request)
+    return;
+
+  proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_link_status,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_symmetric_link,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_at_capacity,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_reserved,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset++;
+
+  proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_downlink_speed,
+                      tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  offset += 4;
+
+  proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_uplink_speed,
+                      tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  offset += 4;
+
+  proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_downlink_load,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset++;
+
+  proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_uplink_load,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset++;
+
+  proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_lmd,
+                      tvb, offset, 2, ENC_LITTLE_ENDIAN);
+}
+
+static const value_string hs20_cc_status_vals[] = {
+  { 0, "Closed" },
+  { 1, "Open" },
+  { 2, "Unknown" },
+  { 0, NULL }
+};
+
+static void
+dissect_hs20_anqp_connection_capability(proto_tree *tree, tvbuff_t *tvb,
+                                        int offset, int end)
+{
+  proto_item *item;
+  proto_tree *tuple;
+  while (offset + 4 <= end) {
+    guint8 ip_proto, status;
+    guint16 port_num;
+
+    ip_proto = tvb_get_guint8(tvb, offset);
+    port_num = tvb_get_letohs(tvb, offset + 1);
+    status = tvb_get_guint8(tvb, offset + 3);
+
+    item = proto_tree_add_text(tree, tvb, offset, 4, "ProtoPort Tuple - "
+                               "ip_proto=%u port_num=%u status=%s",
+                               ip_proto, port_num,
+                               val_to_str(status, hs20_cc_status_vals,
+                                          "Unknown (%u)"));
+    tuple = proto_item_add_subtree(item, ett_hs20_cc_proto_port_tuple);
+    proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_ip_proto,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+    proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_port_num,
+                        tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+    proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_status,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+  }
+}
+
+static void
+dissect_hs20_anqp_nai_home_realm_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
+                                       int offset, int end)
+{
+  guint8 len;
+  proto_item *item;
+
+  proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_count,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset++;
+
+  while (offset + 2 <= end) {
+    proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_encoding_type,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+    len = tvb_get_guint8(tvb, offset);
+    item = proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_length,
+                               tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+    if (offset + len > end) {
+      expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
+                             "Invalid NAI Home Realm Query length");
+      break;
+    }
+    proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_realm_name,
+                        tvb, offset, len, ENC_ASCII|ENC_NA);
+    offset += len;
+  }
+}
+
+static void dissect_hs20_anqp_oper_class_indic(proto_tree *tree, tvbuff_t *tvb,
+                                               int offset, int end)
+{
+  while (offset < end) {
+    proto_tree_add_item(tree, hf_hs20_anqp_oper_class_indic,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+  }
+}
+
+static void dissect_hs20_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
+                              int end, gboolean request, int idx)
+{
+  guint8 subtype;
+
+  subtype = tvb_get_guint8(tvb, offset);
+  proto_item_append_text(tree, " - HS 2.0 %s",
+                         val_to_str(subtype, hs20_anqp_subtype_vals,
+                                    "Unknown (%u)"));
+  if (idx == 0) {
+    col_append_fstr(pinfo->cinfo, COL_INFO, " HS 2.0 %s",
+                    val_to_str(subtype, hs20_anqp_subtype_vals,
+                               "Unknown (%u)"));
+  } else if (idx == 1) {
+    col_append_fstr(pinfo->cinfo, COL_INFO, ", ..");
+  }
+  proto_tree_add_item(tree, hf_hs20_anqp_subtype, tvb, offset, 1,
+                      ENC_LITTLE_ENDIAN);
+  offset++;
+
+  proto_tree_add_item(tree, hf_hs20_anqp_reserved, tvb, offset, 1,
+                      ENC_LITTLE_ENDIAN);
+  offset++;
+
+  switch (subtype) {
+  case HS20_ANQP_HS_QUERY_LIST:
+    dissect_hs20_anqp_hs_query_list(tree, tvb, offset, end);
+    break;
+  case HS20_ANQP_HS_CAPABILITY_LIST:
+    dissect_hs20_anqp_hs_capability_list(tree, tvb, offset, end);
+    break;
+  case HS20_ANQP_OPERATOR_FRIENDLY_NAME:
+    dissect_hs20_anqp_operator_friendly_name(tree, tvb, pinfo, offset, end);
+    break;
+  case HS20_ANQP_WAN_METRICS:
+    dissect_hs20_anqp_wan_metrics(tree, tvb, offset, request);
+    break;
+  case HS20_ANQP_CONNECTION_CAPABILITY:
+    dissect_hs20_anqp_connection_capability(tree, tvb, offset, end);
+    break;
+  case HS20_ANQP_NAI_HOME_REALM_QUERY:
+    dissect_hs20_anqp_nai_home_realm_query(tree, tvb, pinfo, offset, end);
+    break;
+  case HS20_ANQP_OPERATING_CLASS_INDICATION:
+    dissect_hs20_anqp_oper_class_indic(tree, tvb, offset, end);
+    break;
+  default:
+    if (offset == end)
+      break;
+    proto_tree_add_item(tree, hf_hs20_anqp_payload, tvb, offset,
+                        end - offset, ENC_NA);
+    break;
+  }
+}
+
 static int
-dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, int offset,
+dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
                   gboolean request, int idx)
 {
-  guint16 id, len;
-  guint32 oui;
-  guint8 subtype;
+  guint16     id, len;
+  guint32     oui;
   proto_item *item;
 
   item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_id,
@@ -3892,13 +5660,12 @@ dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, int offset,
   if (id != ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST) {
     if (idx == 0) {
       proto_item_append_text(tree, " - %s",
-                             val_to_str(id, anqp_info_id_vals,
-                                        "Unknown (%u)"));
-      col_append_fstr(g_pinfo->cinfo, COL_INFO, " %s",
-                      val_to_str(id, anqp_info_id_vals, "Unknown (%u)"));
+                             val_to_str_ext(id, &anqp_info_id_vals_ext, "Unknown (%u)"));
+      col_append_fstr(pinfo->cinfo, COL_INFO, " %s",
+                      val_to_str_ext(id, &anqp_info_id_vals_ext, "Unknown (%u)"));
     } else if (idx == 1) {
       proto_item_append_text(tree, ", ..");
-      col_append_fstr(g_pinfo->cinfo, COL_INFO, ", ..");
+      col_append_fstr(pinfo->cinfo, COL_INFO, ", ..");
     }
   }
   tree = proto_item_add_subtree(item, ett_gas_anqp);
@@ -3908,32 +5675,32 @@ dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, int offset,
   len = tvb_get_letohs(tvb, offset);
   offset += 2;
   if (tvb_reported_length_remaining(tvb, offset) < len) {
-    expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
                            "Invalid ANQP Info length");
     return 4 + len;
   }
   switch (id)
   {
   case ANQP_INFO_ANQP_QUERY_LIST:
-    dissect_anqp_query_list(tree, tvb, offset, offset + len);
+    dissect_anqp_query_list(tree, tvb, pinfo, offset, offset + len);
     break;
   case ANQP_INFO_ANQP_CAPAB_LIST:
-    dissect_anqp_capab_list(tree, tvb, offset, offset + len);
+    dissect_anqp_capab_list(tree, tvb, pinfo, offset, offset + len);
     break;
   case ANQP_INFO_VENUE_NAME_INFO:
-    dissect_venue_name_info(tree, tvb, offset, offset + len);
+    dissect_venue_name_info(tree, tvb, pinfo, offset, offset + len);
     break;
   case ANQP_INFO_NETWORK_AUTH_TYPE_INFO:
     dissect_network_auth_type(tree, tvb, offset, offset + len);
     break;
   case ANQP_INFO_ROAMING_CONSORTIUM_LIST:
-    dissect_roaming_consortium_list(tree, tvb, offset, offset + len);
+    dissect_roaming_consortium_list(tree, tvb, pinfo, offset, offset + len);
     break;
   case ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO:
     dissect_ip_addr_type_availability_info(tree, tvb, offset);
     break;
   case ANQP_INFO_NAI_REALM_LIST:
-    dissect_nai_realm_list(tree, tvb, offset, offset + len);
+    dissect_nai_realm_list(tree, tvb, pinfo, offset, offset + len);
     break;
   case ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO:
     dissect_3gpp_cellular_network_info(tree, tvb, offset);
@@ -3948,13 +5715,16 @@ dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, int offset,
 
     switch (oui) {
     case OUI_WFA:
-      subtype = tvb_get_guint8(tvb, offset);
-      if (subtype == WFA_SUBTYPE_P2P) {
-        proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u: P2P ANQP",
-                            subtype);
-        dissect_wifi_p2p_anqp(g_pinfo, tree, tvb, offset + 1, request);
-      } else {
-        proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u", subtype);
+      proto_tree_add_item(tree, hf_ieee80211_anqp_wfa_subtype, tvb, offset, 1,
+                          ENC_NA);
+      switch (tvb_get_guint8(tvb, offset)) {
+      case WFA_SUBTYPE_P2P:
+        dissect_wifi_p2p_anqp(pinfo, tree, tvb, offset + 1, request);
+        break;
+      case WFA_SUBTYPE_HS20_ANQP:
+        dissect_hs20_anqp(tree, tvb, pinfo, offset + 1, offset + len - 3, request,
+                          idx);
+        break;
       }
       break;
     default:
@@ -3973,31 +5743,31 @@ dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, int offset,
 }
 
 static void
-dissect_anqp(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean request)
+dissect_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, gboolean request)
 {
   int idx = 0;
 
   proto_item_append_text(tree, ": ANQP ");
   proto_item_append_text(tree, request ? "Request" : "Response");
   if (tvb_reported_length_remaining(tvb, offset) < 4) {
-    expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
                            "Not enough room for ANQP header");
     return;
   }
-  col_append_fstr(g_pinfo->cinfo, COL_INFO, ", ANQP %s",
+  col_append_fstr(pinfo->cinfo, COL_INFO, ", ANQP %s",
                   request ? "Req" : "Resp");
   while (tvb_reported_length_remaining(tvb, offset) > 0) {
-    offset += dissect_anqp_info(tree, tvb, offset, request, idx);
-    idx++;
+    offset += dissect_anqp_info(tree, tvb, pinfo, offset, request, idx);
+    idx += 1;
   }
 }
 
 static guint
-dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, int offset,
+dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
                             gboolean anqp)
 {
-  guint16 req_len;
-  int start = offset;
+  guint16     req_len;
+  int         start = offset;
   proto_item *item;
   proto_tree *query;
 
@@ -4006,7 +5776,7 @@ dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, int offset,
 
   item = proto_tree_add_text(tree, tvb, offset, 2 + req_len, "Query Request");
   if (tvb_reported_length_remaining(tvb, offset) < 2 + req_len) {
-    expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
                            "Invalid Query Request Length");
     return tvb_reported_length_remaining(tvb, offset);
   }
@@ -4020,7 +5790,7 @@ dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, int offset,
    * Advertisement Protocol IE)
    */
   if (anqp)
-    dissect_anqp(query, tvb, offset, TRUE);
+    dissect_anqp(query, tvb, pinfo, offset, TRUE);
   else
     proto_tree_add_item(query, hf_ieee80211_ff_query_request,
                         tvb, offset, req_len, ENC_NA);
@@ -4030,11 +5800,11 @@ dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, int offset,
 }
 
 static guint
-dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, int offset,
+dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
                              gboolean anqp)
 {
-  guint16 resp_len;
-  int start = offset;
+  guint16     resp_len;
+  int         start = offset;
   proto_item *item;
   proto_tree *query;
 
@@ -4044,7 +5814,7 @@ dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, int offset,
   item = proto_tree_add_text(tree, tvb, offset, 2 + resp_len,
                              "Query Response");
   if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
-    expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
                            "Invalid Query Response Length");
     return tvb_reported_length_remaining(tvb, offset);
   }
@@ -4056,7 +5826,7 @@ dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, int offset,
   /* Query Response (optional) */
   if (resp_len) {
     if (anqp)
-      dissect_anqp(query, tvb, offset, FALSE);
+      dissect_anqp(query, tvb, pinfo, offset, FALSE);
     else
       proto_tree_add_item(query, hf_ieee80211_ff_query_response,
                           tvb, offset, resp_len, ENC_NA);
@@ -4066,13 +5836,13 @@ dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, int offset,
   return offset - start;
 }
 
-static GHashTable *gas_fragment_table = NULL;
-static GHashTable *gas_reassembled_table = NULL;
+static reassembly_table gas_reassembly_table;
 
-static void ieee80211_gas_reassembly_init(void)
+static void
+ieee80211_gas_reassembly_init(void)
 {
-  fragment_table_init(&gas_fragment_table);
-  reassembled_table_init(&gas_reassembled_table);
+  reassembly_table_init(&gas_reassembly_table,
+                        &addresses_reassembly_table_functions);
 }
 
 static gint ett_gas_resp_fragment = -1;
@@ -4108,12 +5878,12 @@ static const fragment_items gas_resp_frag_items = {
 };
 
 static guint
-dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, int offset,
+dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
                               gboolean anqp, guint8 frag, gboolean more,
                               guint8 dialog_token)
 {
-  guint16 resp_len;
-  int start = offset;
+  guint16     resp_len;
+  int         start = offset;
   proto_item *item;
   proto_tree *query;
 
@@ -4123,7 +5893,7 @@ dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, int offset,
   item = proto_tree_add_text(tree, tvb, offset, 2 + resp_len,
                              "Query Response");
   if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
-    expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
                            "Invalid Query Response Length");
     return tvb_reported_length_remaining(tvb, offset);
   }
@@ -4134,26 +5904,25 @@ dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, int offset,
   offset += 2;
   /* Query Response (optional) */
   if (resp_len) {
-    if (anqp && frag == 0 && !more)
-      dissect_anqp(query, tvb, offset, FALSE);
+    if (anqp && (frag == 0) && !more)
+      dissect_anqp(query, tvb, pinfo, offset, FALSE);
     else {
       fragment_data *frag_msg;
       gboolean save_fragmented;
       tvbuff_t *new_tvb;
 
-      save_fragmented = g_pinfo->fragmented;
-      g_pinfo->fragmented = TRUE;
-      frag_msg = fragment_add_seq_check(tvb, offset, g_pinfo, dialog_token,
-                                        gas_fragment_table,
-                                        gas_reassembled_table, frag, resp_len,
-                                        more);
-      new_tvb = process_reassembled_data(tvb, offset, g_pinfo,
+      save_fragmented = pinfo->fragmented;
+      pinfo->fragmented = TRUE;
+      frag_msg = fragment_add_seq_check(&gas_reassembly_table, tvb, offset,
+                                        pinfo, dialog_token, NULL,
+                                        frag, resp_len, more);
+      new_tvb = process_reassembled_data(tvb, offset, pinfo,
                                          "Reassembled GAS Query Response",
                                          frag_msg, &gas_resp_frag_items,
                                          NULL, tree);
       if (new_tvb) {
         if (anqp)
-          dissect_anqp(query, new_tvb, 0, FALSE);
+          dissect_anqp(query, new_tvb, pinfo, 0, FALSE);
         else
           proto_tree_add_item(query, hf_ieee80211_ff_query_response,
                               new_tvb, 0,
@@ -4164,7 +5933,7 @@ dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, int offset,
       /* The old tvb cannot be used anymore */
       ieee80211_tvb_invalid = TRUE;
 
-      g_pinfo->fragmented = save_fragmented;
+      pinfo->fragmented = save_fragmented;
     }
     offset += resp_len;
   }
@@ -4177,13 +5946,13 @@ dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, int offset,
 /* ************************************************************************* */
 
 static guint
-add_fixed_field(proto_tree *tree, tvbuff_t *tvb, int offset,
+add_fixed_field(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
                 enum fixed_field lfcode);
 
 static guint64 last_timestamp;
 
 static guint
-add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   last_timestamp = tvb_get_letoh64(tvb, offset);
   proto_tree_add_item(tree, hf_ieee80211_ff_timestamp, tvb, offset, 8,
@@ -4192,17 +5961,17 @@ add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_beacon_interval, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
-  col_append_fstr(g_pinfo->cinfo, COL_INFO, ", BI=%d",
+  col_append_fstr(pinfo->cinfo, COL_INFO, ", BI=%d",
                   tvb_get_letohs(tvb, offset));
   return 2;
 }
 
 static guint
-add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_item *cap_item;
   proto_tree *cap_tree;
@@ -4239,6 +6008,8 @@ add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, int offset)
                       2, ENC_LITTLE_ENDIAN);
   proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_apsd, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ff_radio_measurement, tvb, offset, 2,
+                      ENC_LITTLE_ENDIAN);
   proto_tree_add_item(cap_tree, hf_ieee80211_ff_dsss_ofdm, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
   proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_del_blk_ack, tvb, offset, 2,
@@ -4249,7 +6020,7 @@ add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_auth_alg, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -4257,7 +6028,7 @@ add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_auth_seq, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -4265,7 +6036,7 @@ add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_current_ap, tvb, offset, 6,
                       ENC_NA);
@@ -4273,7 +6044,7 @@ add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_listen_ival, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -4281,7 +6052,7 @@ add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_reason, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -4289,7 +6060,7 @@ add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_assoc_id, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -4297,7 +6068,7 @@ add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_status_code, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -4305,7 +6076,7 @@ add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_category_code, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4313,7 +6084,7 @@ add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_action_code, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4321,7 +6092,7 @@ add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_dialog_token, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4329,7 +6100,7 @@ add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+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,
                       ENC_LITTLE_ENDIAN);
@@ -4337,7 +6108,7 @@ add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_wme_status_code, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4345,7 +6116,7 @@ add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_qos_action_code, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4353,7 +6124,7 @@ add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_ba_action, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4361,7 +6132,7 @@ add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_params,
                          ett_ff_ba_param_tree,
@@ -4371,7 +6142,7 @@ add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_block_ack_timeout, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -4379,7 +6150,7 @@ add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_ssc,
                          ett_ff_ba_ssc_tree, ieee80211_ff_block_ack_ssc_fields,
@@ -4388,7 +6159,7 @@ add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_tsinfo,
                          ett_tsinfo_tree, ieee80211_tsinfo_fields,
@@ -4397,7 +6168,7 @@ add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_mesh_action, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4405,7 +6176,7 @@ add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_multihop_action, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4413,18 +6184,18 @@ add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
-  int start = offset;
+  int    start = offset;
   guint8 flags;
 
   proto_tree_add_item(tree, hf_ieee80211_ff_mesh_flags, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
   flags = tvb_get_guint8(tvb, offset);
-  offset++;
+  offset += 1;
   proto_tree_add_item(tree, hf_ieee80211_ff_mesh_ttl, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
-  offset++;
+  offset += 1;
   proto_tree_add_item(tree, hf_ieee80211_ff_mesh_sequence, tvb, offset, 4,
                       ENC_LITTLE_ENDIAN);
   offset += 4;
@@ -4455,7 +6226,7 @@ add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_selfprot_action, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4463,7 +6234,7 @@ add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_dls_action_code, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4471,7 +6242,7 @@ add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_dst_mac_addr, tvb, offset, 6,
                       ENC_NA);
@@ -4479,7 +6250,7 @@ add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_src_mac_addr, tvb, offset, 6,
                       ENC_NA);
@@ -4487,7 +6258,7 @@ add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, int offset)
+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,
                       ENC_LITTLE_ENDIAN);
@@ -4495,7 +6266,7 @@ add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_delba_param,
                          ett_ff_ba_param_tree, ieee80211_ff_delba_param_fields,
@@ -4504,7 +6275,7 @@ add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_max_reg_pwr, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -4512,7 +6283,7 @@ add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
                       2, ENC_LITTLE_ENDIAN);
@@ -4520,15 +6291,15 @@ add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_country_str, tvb, offset, 3,
-                      ENC_ASCII);
+                      ENC_ASCII|ENC_NA);
   return 3;
 }
 
 static guint
-add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_max_tx_pwr, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4536,7 +6307,7 @@ add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_tx_pwr_used, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4544,7 +6315,7 @@ add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_transceiver_noise_floor, tvb,
                       offset, 1, ENC_LITTLE_ENDIAN);
@@ -4552,7 +6323,7 @@ add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_channel_width, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4560,7 +6331,7 @@ add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
                          ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
@@ -4569,7 +6340,7 @@ add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_qos_info_sta,
                          ett_ff_qos_info, ieee80211_ff_qos_info_sta_fields,
@@ -4578,7 +6349,7 @@ add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_sm_pwr_save,
                          ett_ff_sm_pwr_save, ieee80211_ff_sw_pwr_save_fields,
@@ -4587,7 +6358,7 @@ add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_pco_phase_cntrl, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4595,7 +6366,7 @@ add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_psmp_param_set,
                          ett_ff_psmp_param_set,
@@ -4605,7 +6376,7 @@ add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_item *mimo_item;
   proto_tree *mimo_tree;
@@ -4640,7 +6411,7 @@ add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ant_selection,
                          ett_ff_ant_sel, ieee80211_ff_ant_selection_fields,
@@ -4650,7 +6421,7 @@ add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, int offset)
 
 static guint
 add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
-                                            int offset)
+                                            packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset,
                          hf_ieee80211_ff_ext_channel_switch_announcement,
@@ -4661,7 +6432,7 @@ add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
 }
 
 static guint
-add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ht_info,
                          ett_ff_ht_info, ieee80211_ff_ht_info_fields,
@@ -4670,7 +6441,7 @@ add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_ht_action, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
@@ -4678,7 +6449,7 @@ add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_item *psmp_item;
   proto_tree *psmp_tree;
@@ -4743,7 +6514,7 @@ add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_item *sched_item;
   proto_tree *sched_tree;
@@ -4765,7 +6536,7 @@ add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_public_action, tvb, offset, 1,
                       ENC_BIG_ENDIAN);
@@ -4773,122 +6544,122 @@ add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
     switch (tvb_get_guint8(tvb, offset + 1)) {
     case SM_ACTION_MEASUREMENT_REQUEST:
     case SM_ACTION_MEASUREMENT_REPORT:
     case SM_ACTION_TPC_REQUEST:
     case SM_ACTION_TPC_REPORT:
-      add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-      add_fixed_field(tree, tvb, offset + 1, FIELD_ACTION_CODE);
-      add_fixed_field(tree, tvb, offset + 2, FIELD_DIALOG_TOKEN);
+      add_fixed_field(tree, tvb, pinfo, offset,     FIELD_CATEGORY_CODE);
+      add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_ACTION_CODE);
+      add_fixed_field(tree, tvb, pinfo, offset + 2, FIELD_DIALOG_TOKEN);
       return 3;
     case SM_ACTION_CHAN_SWITCH_ANNC:
     case SM_ACTION_EXT_CHAN_SWITCH_ANNC:
-      add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-      add_fixed_field(tree, tvb, offset + 1, FIELD_ACTION_CODE);
+      add_fixed_field(tree, tvb, pinfo, offset,     FIELD_CATEGORY_CODE);
+      add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_ACTION_CODE);
       return 2;
     default:
-      add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-      add_fixed_field(tree, tvb, offset + 1, FIELD_ACTION_CODE);
+      add_fixed_field(tree, tvb, pinfo, offset,     FIELD_CATEGORY_CODE);
+      add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_ACTION_CODE);
       return 2;
     }
 }
 
 static guint
-add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, int offset)
+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:
-    add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-    add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
-    add_fixed_field(tree, tvb, offset + 2, FIELD_DIALOG_TOKEN);
+    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:
-    add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-    add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
-    add_fixed_field(tree, tvb, offset + 2, FIELD_DIALOG_TOKEN);
-    add_fixed_field(tree, tvb, offset + 3, FIELD_STATUS_CODE);
+    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:
-    add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-    add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
-    add_fixed_field(tree, tvb, offset + 2, FIELD_QOS_TS_INFO);
-    add_fixed_field(tree, tvb, offset + 5, FIELD_REASON_CODE);
+    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:
-    add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-    add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
+    add_fixed_field(tree, tvb, pinfo, offset,     FIELD_CATEGORY_CODE);
+    add_fixed_field(tree, tvb, pinfo, offset + 1, FIELD_QOS_ACTION_CODE);
     return 2;
   default:
-    add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
+    add_fixed_field(tree, tvb, pinfo, offset,     FIELD_CATEGORY_CODE);
     return 2;
   }
 }
 
 static guint
-add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, int offset)
+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:
-    add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-    add_fixed_field(tree, tvb, offset + 1, FIELD_DLS_ACTION_CODE);
-    add_fixed_field(tree, tvb, offset + 2, FIELD_DST_MAC_ADDR);
-    add_fixed_field(tree, tvb, offset + 8, FIELD_SRC_MAC_ADDR);
-    add_fixed_field(tree, tvb, offset + 14, FIELD_CAP_INFO);
-    add_fixed_field(tree, tvb, offset + 16, FIELD_DLS_TIMEOUT);
+    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);
+    add_fixed_field(tree, tvb, pinfo, offset +  8, FIELD_SRC_MAC_ADDR);
+    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:
-    add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-    add_fixed_field(tree, tvb, offset + 1, FIELD_DLS_ACTION_CODE);
-    add_fixed_field(tree, tvb, offset + 2, FIELD_STATUS_CODE);
-    add_fixed_field(tree, tvb, offset + 4, FIELD_DST_MAC_ADDR);
-    add_fixed_field(tree, tvb, offset + 10, FIELD_SRC_MAC_ADDR);
+    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);
+    add_fixed_field(tree, tvb, pinfo, offset +  4, FIELD_DST_MAC_ADDR);
+    add_fixed_field(tree, tvb, pinfo, offset + 10, FIELD_SRC_MAC_ADDR);
     if (!hf_ieee80211_ff_status_code) {
-      add_fixed_field(tree, tvb, offset + 16, FIELD_CAP_INFO);
+      add_fixed_field(tree, tvb, pinfo, offset + 16, FIELD_CAP_INFO);
     }
     return 16;
   case SM_ACTION_DLS_TEARDOWN:
-    add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-    add_fixed_field(tree, tvb, offset + 1, FIELD_DLS_ACTION_CODE);
-    add_fixed_field(tree, tvb, offset + 2, FIELD_DST_MAC_ADDR);
-    add_fixed_field(tree, tvb, offset + 8, FIELD_SRC_MAC_ADDR);
-    add_fixed_field(tree, tvb, offset + 14, FIELD_REASON_CODE);
+    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);
+    add_fixed_field(tree, tvb, pinfo, offset +  8, FIELD_SRC_MAC_ADDR);
+    add_fixed_field(tree, tvb, pinfo, offset + 14, FIELD_REASON_CODE);
     return 16;
   default:
-    add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
+    add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
     return 2;
   }
 }
 
 static guint
-add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
   guint start = offset;
 
   switch (tvb_get_guint8(tvb, offset + 1)) {
   case BA_ADD_BLOCK_ACK_REQUEST:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_PARAM);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_TIMEOUT);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_ACTION_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_PARAM);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_TIMEOUT);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC);
     break;
   case BA_ADD_BLOCK_ACK_RESPONSE:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_PARAM);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_TIMEOUT);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_ACTION_CODE);
+    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_BLOCK_ACK_PARAM);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_TIMEOUT);
     break;
   case BA_DELETE_BLOCK_ACK:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DELBA_PARAM_SET);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_ACTION_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DELBA_PARAM_SET);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REASON_CODE);
     break;
   }
 
@@ -4896,22 +6667,25 @@ add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
-  guint start = offset;
-  guint32 oui;
-  guint8 code;
-  guint8 subtype;
+  guint    start = offset;
+  guint32  oui;
+  guint8   code;
+  guint8   subtype;
   gboolean anqp;
-  guint8 dialog_token;
-  guint8 frag;
+  guint8   dialog_token;
+  guint8   frag;
   gboolean more;
 
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-  code = tvb_get_guint8(tvb, offset);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_PA_ACTION_CODE);
+  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);
+    break;
   case PA_VENDOR_SPECIFIC:
     oui = tvb_get_ntoh24(tvb, offset);
     proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
@@ -4920,9 +6694,9 @@ add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, int offset)
     case OUI_WFA:
       subtype = tvb_get_guint8(tvb, offset);
       proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u", subtype);
-      offset++;
+      offset += 1;
       if (subtype == WFA_SUBTYPE_P2P) {
-        offset = dissect_wifi_p2p_public_action(g_pinfo, tree, tvb, offset);
+        offset = dissect_wifi_p2p_public_action(pinfo, tree, tvb, offset);
       }
       break;
     default:
@@ -4931,40 +6705,40 @@ add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, int offset)
     }
     break;
   case PA_GAS_INITIAL_REQUEST:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
-    offset += dissect_advertisement_protocol(g_pinfo, tree, tvb, offset,
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+    offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset,
                                              &anqp);
-    offset += dissect_gas_initial_request(tree, tvb, offset, anqp);
+    offset += dissect_gas_initial_request(tree, tvb, pinfo, offset, anqp);
     break;
   case PA_GAS_INITIAL_RESPONSE:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_GAS_COMEBACK_DELAY);
-    offset += dissect_advertisement_protocol(g_pinfo, tree, tvb, offset,
+    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_GAS_COMEBACK_DELAY);
+    offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset,
                                              &anqp);
-    offset += dissect_gas_initial_response(tree, tvb, offset, anqp);
+    offset += dissect_gas_initial_response(tree, tvb, pinfo, offset, anqp);
     break;
   case PA_GAS_COMEBACK_REQUEST:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
     break;
   case PA_GAS_COMEBACK_RESPONSE:
     dialog_token = tvb_get_guint8(tvb, offset);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
     frag = tvb_get_guint8(tvb, offset) & 0x7f;
     more = (tvb_get_guint8(tvb, offset) & 0x80) != 0;
-    offset += add_fixed_field(tree, tvb, offset, FIELD_GAS_FRAGMENT_ID);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_GAS_COMEBACK_DELAY);
-    offset += dissect_advertisement_protocol(g_pinfo, tree, tvb, offset,
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_GAS_FRAGMENT_ID);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_GAS_COMEBACK_DELAY);
+    offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset,
                                              &anqp);
-    offset += dissect_gas_comeback_response(tree, tvb, offset, anqp, frag,
+    offset += dissect_gas_comeback_response(tree, tvb, pinfo, offset, anqp, frag,
                                             more, dialog_token);
     break;
   case PA_TDLS_DISCOVERY_RESPONSE:
-    col_set_str(g_pinfo->cinfo, COL_PROTOCOL, "TDLS");
-    col_set_str(g_pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
+    col_set_str(pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO);
     break;
   }
 
@@ -4972,36 +6746,36 @@ add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
-  guint start = offset;
+  guint  start = offset;
   guint8 code;
 
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-  code = tvb_get_guint8(tvb, offset);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_FT_ACTION_CODE);
+  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_FT_ACTION_CODE);
 
   switch (code) {
   case FT_ACTION_REQUEST:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STA_ADDRESS);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TARGET_AP_ADDRESS);
     /* Followed by FT Request frame body (IEs) */
     break;
   case FT_ACTION_RESPONSE:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STA_ADDRESS);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TARGET_AP_ADDRESS);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
     /* Followed by FT Response frame body (IEs) */
     break;
   case FT_ACTION_CONFIRM:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STA_ADDRESS);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TARGET_AP_ADDRESS);
     /* Followed by FT Confirm frame body (IEs) */
     break;
   case FT_ACTION_ACK:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STA_ADDRESS);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TARGET_AP_ADDRESS);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
     /* Followed by FT Ack frame body (IEs) */
     break;
   }
@@ -5010,21 +6784,21 @@ add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
-  guint start = offset;
+  guint  start = offset;
   guint8 code;
 
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-  code = tvb_get_guint8(tvb, offset);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_SA_QUERY_ACTION_CODE);
+  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_SA_QUERY_ACTION_CODE);
 
   switch (code) {
   case SA_QUERY_REQUEST:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_TRANSACTION_ID);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TRANSACTION_ID);
     break;
   case SA_QUERY_RESPONSE:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_TRANSACTION_ID);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TRANSACTION_ID);
     break;
   }
 
@@ -5032,47 +6806,49 @@ add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
   guint length;
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_MESH_ACTION);
+
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MESH_ACTION);
   /* The only fixed fields are the category and mesh action.  The rest are IEs.
    */
   length = 2;
   if (tvb_get_guint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE) {
     /* ..except for the TBTT Adjustment Response, which has a status code field
      */
-    length += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
+    length += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
   }
   return length;
 }
 
 static guint
-add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
   guint start = offset;
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_MULTIHOP_ACTION);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_MESH_CONTROL);
+
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MULTIHOP_ACTION);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MESH_CONTROL);
   return offset - start;
 }
 
 static guint
-add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
   guint start = offset;
 
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_SELFPROT_ACTION);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SELFPROT_ACTION);
 
   switch (tvb_get_guint8(tvb, start + 1)) {
   case SELFPROT_ACTION_MESH_PEERING_OPEN:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO);
     break;
   case SELFPROT_ACTION_MESH_PEERING_CONFIRM:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_ASSOC_ID);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_ASSOC_ID);
     break;
   }
 
@@ -5080,13 +6856,13 @@ add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, int offset)
+wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
-  int start = offset;
+  int    start = offset;
   guint8 mode;
-  gint left;
+  gint   left;
 
-  offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
 
   mode = tvb_get_guint8(tvb, offset);
   proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_pref_cand,
@@ -5099,7 +6875,7 @@ wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, int offset)
                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
   proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_ff_disassoc_timer, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -5107,7 +6883,7 @@ wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, int offset)
 
   proto_tree_add_item(tree, hf_ieee80211_ff_validity_interval, tvb, offset, 1,
                       ENC_LITTLE_ENDIAN);
-  offset++;
+  offset += 1;
 
   if (mode & 0x08) {
     proto_tree_add_text(tree, tvb, offset, 8, "BSS Termination Duration");
@@ -5119,34 +6895,105 @@ wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, int offset)
     url_len = tvb_get_guint8(tvb, offset);
     proto_tree_add_item(tree, hf_ieee80211_ff_url_len, tvb, offset, 1,
                         ENC_LITTLE_ENDIAN);
-    offset++;
+    offset += 1;
     proto_tree_add_item(tree, hf_ieee80211_ff_url, tvb, offset, url_len,
                         ENC_ASCII|ENC_NA);
     offset += url_len;
   }
 
   left = tvb_reported_length_remaining(tvb, offset);
-  if (left > 0) {
-    proto_tree_add_text(tree, tvb, offset, left,
-                        "BSS Transition Candidate List Entries");
-    offset += left;
+  if (left > 0) {
+    proto_tree_add_text(tree, tvb, offset, left,
+                        "BSS Transition Candidate List Entries");
+    offset += left;
+  }
+
+  return offset - start;
+}
+
+static guint
+wnm_sleep_mode_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+  int start = offset;
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+  return offset - start;
+}
+
+static guint
+wnm_sleep_mode_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+  int start = offset;
+  guint16 key_data_len;
+  gint left;
+
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+  key_data_len = tvb_get_letohs(tvb, offset);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_KEY_DATA_LENGTH);
+  left = tvb_reported_length_remaining(tvb, offset);
+  if (left < key_data_len) {
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
+                           "WNM-Sleep Mode Response is not long enough to "
+                           "include Key Data");
+    return offset - start;
   }
+  proto_tree_add_item(tree, hf_ieee80211_ff_key_data, tvb, offset,
+                      key_data_len, ENC_NA);
+  offset += key_data_len;
+  return offset - start;
+}
+
+static guint
+wnm_tfs_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+  int start = offset;
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+  return offset - start;
+}
+
+static guint
+wnm_tfs_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+  int start = offset;
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+  return offset - start;
+}
 
+static guint
+wnm_notification_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
+{
+  int start = offset;
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_WNM_NOTIFICATION_TYPE);
   return offset - start;
 }
 
 static guint
-add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
   guint8 code;
-  guint start = offset;
+  guint  start = offset;
 
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-  code = tvb_get_guint8(tvb, offset);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_WNM_ACTION_CODE);
+  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_WNM_ACTION_CODE);
   switch (code) {
   case WNM_BSS_TRANS_MGMT_REQ:
-    offset += wnm_bss_trans_mgmt_req(tree, tvb, offset);
+    offset += wnm_bss_trans_mgmt_req(tree, tvb, pinfo, offset);
+    break;
+  case WNM_TFS_REQ:
+    offset += wnm_tfs_req(tree, tvb, pinfo, offset);
+    break;
+  case WNM_TFS_RESP:
+    offset += wnm_tfs_resp(tree, tvb, pinfo, offset);
+    break;
+  case WNM_SLEEP_MODE_REQ:
+    offset += wnm_sleep_mode_req(tree, tvb, pinfo, offset);
+    break;
+  case WNM_SLEEP_MODE_RESP:
+    offset += wnm_sleep_mode_resp(tree, tvb, pinfo, offset);
+    break;
+  case WNM_NOTIFICATION_REQ:
+    offset += wnm_notification_req(tree, tvb, pinfo, offset);
     break;
   }
 
@@ -5154,72 +7001,72 @@ add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
-  guint8 code;
+  guint8  code;
   guint16 status;
-  guint start = offset;
+  guint   start = offset;
 
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
   code = tvb_get_guint8(tvb, offset);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_TDLS_ACTION_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TDLS_ACTION_CODE);
   switch (code) {
   case TDLS_SETUP_REQUEST:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO);
     break;
   case TDLS_SETUP_RESPONSE:
     status = tvb_get_letohs(tvb, offset);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
     if (tvb_reported_length_remaining(tvb, offset) < 2) {
       if (status == 0) {
-        expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
+        expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
                                "TDLS Setup Response (success) does not "
                                "include mandatory fields");
       }
       break;
     }
-    offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CAP_INFO);
     break;
   case TDLS_SETUP_CONFIRM:
     status = tvb_get_letohs(tvb, offset);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
     if (tvb_reported_length_remaining(tvb, offset) < 1) {
       if (status == 0) {
-        expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
+        expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
                                "TDLS Setup Confirm (success) does not include "
                                "mandatory fields");
       }
       break;
     }
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
     break;
   case TDLS_TEARDOWN:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REASON_CODE);
     break;
   case TDLS_PEER_TRAFFIC_INDICATION:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
     break;
   case TDLS_CHANNEL_SWITCH_REQUEST:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_CHANNEL);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_REGULATORY_CLASS);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_TARGET_CHANNEL);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REGULATORY_CLASS);
     break;
   case TDLS_CHANNEL_SWITCH_RESPONSE:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
     break;
   case TDLS_PEER_PSM_REQUEST:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
     break;
   case TDLS_PEER_PSM_RESPONSE:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_STATUS_CODE);
     break;
   case TDLS_PEER_TRAFFIC_RESPONSE:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
     break;
   case TDLS_DISCOVERY_REQUEST:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
     break;
   }
 
@@ -5227,29 +7074,29 @@ add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
   guint start = offset;
 
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_WME_ACTION_CODE);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_WME_STATUS_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_WME_ACTION_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_DIALOG_TOKEN);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_WME_STATUS_CODE);
 
   return offset - start;  /* Size of fixed fields */
 }
 
 static guint
-add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
-  guint start = offset;
+  guint   start = offset;
   guint32 oui;
-  guint8 subtype;
+  guint8  subtype;
 
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
   oui = tvb_get_ntoh24(tvb, offset);
   proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
-  offset +=3;
+  offset += 3;
   switch (oui) {
   case OUI_MARVELL:
     offset = dissect_vendor_action_marvell(tree, tvb, offset);
@@ -5257,7 +7104,7 @@ add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, int offset)
   case OUI_WFA:
     subtype = tvb_get_guint8(tvb, offset);
     proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u", subtype);
-    offset++;
+    offset += 1;
     if (subtype == WFA_SUBTYPE_P2P) {
       offset = dissect_wifi_p2p_action(tree, tvb, offset);
     }
@@ -5271,55 +7118,55 @@ add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
-  guint start = offset;
+  guint  start = offset;
   guint8 n_sta, i;
   mimo_control_t mimo_cntrl;
 
-  offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
-  offset += add_fixed_field(tree, tvb, offset, FIELD_HT_ACTION_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CATEGORY_CODE);
+  offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HT_ACTION_CODE);
 
   switch (tvb_get_guint8(tvb, offset - 1)) {
   case HT_ACTION_NOTIFY_CHAN_WIDTH:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_CHANNEL_WIDTH);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_CHANNEL_WIDTH);
     break;
   case HT_ACTION_SM_PWR_SAVE:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_SM_PWR_CNTRL);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_SM_PWR_CNTRL);
     break;
   case HT_ACTION_PSMP_ACTION:
     n_sta = tvb_get_guint8(tvb, offset);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_PSMP_PARAM_SET);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PSMP_PARAM_SET);
     for (i = 0; i < (n_sta & 0x0F); i++) {
-      offset += add_fixed_field(tree, tvb, offset, FIELD_PSMP_STA_INFO);
+      offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PSMP_STA_INFO);
     }
     break;
   case HT_ACTION_SET_PCO_PHASE:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_PCO_PHASE_CNTRL);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_PCO_PHASE_CNTRL);
     break;
   case HT_ACTION_MIMO_CSI:
     mimo_cntrl = get_mimo_control(tvb, offset);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_MIMO_CNTRL);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MIMO_CNTRL);
     offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl);
     break;
   case HT_ACTION_MIMO_BEAMFORMING:
     mimo_cntrl = get_mimo_control(tvb, offset);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_MIMO_CNTRL);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MIMO_CNTRL);
     offset += add_mimo_beamforming_feedback_report(tree, tvb, offset,
                                                    mimo_cntrl);
     break;
   case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING:
     mimo_cntrl = get_mimo_control(tvb, offset);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_MIMO_CNTRL);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_MIMO_CNTRL);
     offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb,
                                                               offset,
                                                               mimo_cntrl);
     break;
   case HT_ACTION_ANT_SEL_FEEDBACK:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_ANT_SELECTION);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_ANT_SELECTION);
     break;
   case HT_ACTION_HT_INFO_EXCHANGE:
-    offset += add_fixed_field(tree, tvb, offset, FIELD_HT_INFORMATION);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_HT_INFORMATION);
     break;
   }
 
@@ -5327,47 +7174,47 @@ add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_action(proto_tree *tree, tvbuff_t *tvb, int offset)
+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, offset);
+    return add_ff_action_spectrum_mgmt(tree, tvb, pinfo, offset);
   case CAT_QOS:
-    return add_ff_action_qos(tree, tvb, offset);
+    return add_ff_action_qos(tree, tvb, pinfo, offset);
   case CAT_DLS:
-    return add_ff_action_dls(tree, tvb, offset);
+    return add_ff_action_dls(tree, tvb, pinfo, offset);
   case CAT_BLOCK_ACK:
-    return add_ff_action_block_ack(tree, tvb, offset);
+    return add_ff_action_block_ack(tree, tvb, pinfo, offset);
   case CAT_PUBLIC:
-    return add_ff_action_public(tree, tvb, offset);
+    return add_ff_action_public(tree, tvb, pinfo, offset);
   case CAT_FAST_BSS_TRANSITION:
-    return add_ff_action_fast_bss_transition(tree, tvb, offset);
+    return add_ff_action_fast_bss_transition(tree, tvb, pinfo, offset);
   case CAT_SA_QUERY:
-    return add_ff_action_sa_query(tree, tvb, offset);
+    return add_ff_action_sa_query(tree, tvb, pinfo, offset);
   case CAT_MESH:
-    return add_ff_action_mesh(tree, tvb, offset);
+    return add_ff_action_mesh(tree, tvb, pinfo, offset);
   case CAT_MULTIHOP:
-    return add_ff_action_multihop(tree, tvb, offset);
+    return add_ff_action_multihop(tree, tvb, pinfo, offset);
   case CAT_SELF_PROTECTED:
-    return add_ff_action_self_protected(tree, tvb, offset);
+    return add_ff_action_self_protected(tree, tvb, pinfo, offset);
   case CAT_WNM:
-    return add_ff_action_wnm(tree, tvb, offset);
+    return add_ff_action_wnm(tree, tvb, pinfo, offset);
   case CAT_TDLS:
-    return add_ff_action_tdls(tree, tvb, offset);
+    return add_ff_action_tdls(tree, tvb, pinfo, offset);
   case CAT_MGMT_NOTIFICATION:  /* Management notification frame */
-    return add_ff_action_mgmt_notification(tree, tvb, offset);
+    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, offset);
+    return add_ff_action_vendor_specific(tree, tvb, pinfo, offset);
   case CAT_HT:
-    return add_ff_action_ht(tree, tvb, offset);
+    return add_ff_action_ht(tree, tvb, pinfo, offset);
   default:
-    add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
+    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, int offset)
+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,
                       ENC_BIG_ENDIAN);
@@ -5375,7 +7222,7 @@ add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6,
                       ENC_NA);
@@ -5383,7 +7230,7 @@ add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6,
                       ENC_NA);
@@ -5391,7 +7238,7 @@ add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -5399,7 +7246,7 @@ add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1,
                       ENC_BIG_ENDIAN);
@@ -5409,7 +7256,7 @@ add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset,
                       1, ENC_BIG_ENDIAN);
@@ -5417,7 +7264,7 @@ add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2,
                       ENC_LITTLE_ENDIAN);
@@ -5425,20 +7272,20 @@ add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
 {
   guint8 code;
   code = tvb_get_guint8(tvb, offset);
-  col_set_str(g_pinfo->cinfo, COL_INFO,
-              val_to_str_const(code, tdls_action_codes,
-                               "Unknown TDLS Action"));
+  col_set_str(pinfo->cinfo, COL_INFO,
+              val_to_str_ext_const(code, &tdls_action_codes_ext,
+                                   "Unknown TDLS Action"));
   proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1,
                       ENC_BIG_ENDIAN);
   return 1;
 }
 
 static guint
-add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1,
                       ENC_BIG_ENDIAN);
@@ -5446,7 +7293,7 @@ add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_regulatory_class(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_regulatory_class(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
 {
   proto_tree_add_item(tree, hf_ieee80211_ff_regulatory_class, tvb, offset, 1,
                       ENC_BIG_ENDIAN);
@@ -5454,109 +7301,124 @@ add_ff_regulatory_class(proto_tree *tree, tvbuff_t *tvb, int offset)
 }
 
 static guint
-add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
+add_ff_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(g_pinfo->cinfo, COL_INFO,
-              val_to_str_const(code, wnm_action_codes,
-                               "Unknown WNM Action"));
-  proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1,
-                      ENC_BIG_ENDIAN);
+  col_set_str(pinfo->cinfo, COL_INFO,
+              val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action"));
+  proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_BIG_ENDIAN);
   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,
+                      ENC_LITTLE_ENDIAN);
+  return 2;
+}
+
 struct ieee80211_fixed_field_dissector {
   enum fixed_field lfcode;
-  guint (*dissector)(proto_tree *tree, tvbuff_t *tvb, int offset);
+  guint (*dissector)(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset);
 };
 
+static guint
+add_ff_wnm_notification_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
+{
+  proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_type,
+                      tvb, offset, 1, ENC_NA);
+  return 1;
+}
+
 #define FF_FIELD(f, func) { FIELD_ ## f, add_ff_ ## func }
 
 static const struct ieee80211_fixed_field_dissector ff_dissectors[] = {
-  FF_FIELD(TIMESTAMP, timestamp),
-  FF_FIELD(BEACON_INTERVAL, beacon_interval),
-  FF_FIELD(CAP_INFO, cap_info),
-  FF_FIELD(AUTH_ALG, auth_alg),
-  FF_FIELD(AUTH_TRANS_SEQ, auth_trans_seq),
-  FF_FIELD(CURRENT_AP_ADDR, current_ap_addr),
-  FF_FIELD(LISTEN_IVAL, listen_ival),
-  FF_FIELD(REASON_CODE, reason_code),
-  FF_FIELD(ASSOC_ID, assoc_id),
-  FF_FIELD(STATUS_CODE, status_code),
-  FF_FIELD(CATEGORY_CODE, category_code),
-  FF_FIELD(ACTION_CODE, action_code),
-  FF_FIELD(DIALOG_TOKEN, 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),
-  FF_FIELD(BLOCK_ACK_ACTION_CODE, block_ack_action_code),
-  FF_FIELD(BLOCK_ACK_PARAM, block_ack_param),
-  FF_FIELD(BLOCK_ACK_TIMEOUT, block_ack_timeout),
-  FF_FIELD(BLOCK_ACK_SSC, block_ack_ssc),
-  FF_FIELD(QOS_TS_INFO, qos_ts_info),
-  FF_FIELD(MESH_ACTION, mesh_action),
-  FF_FIELD(MULTIHOP_ACTION, multihop_action),
-  FF_FIELD(MESH_CONTROL, mesh_control),
-  FF_FIELD(SELFPROT_ACTION, selfprot_action),
-  FF_FIELD(DLS_ACTION_CODE, dls_action_code),
-  FF_FIELD(DST_MAC_ADDR, dst_mac_addr),
-  FF_FIELD(SRC_MAC_ADDR, src_mac_addr),
-  FF_FIELD(DLS_TIMEOUT, dls_timeout),
-  FF_FIELD(DELBA_PARAM_SET, delba_param_set),
-  FF_FIELD(MAX_REG_PWR, max_reg_pwr),
-  FF_FIELD(MEASUREMENT_PILOT_INT, measurement_pilot_int),
-  FF_FIELD(COUNTRY_STR, country_str),
-  FF_FIELD(MAX_TX_PWR, max_tx_pwr),
-  FF_FIELD(TX_PWR_USED, tx_pwr_used),
-  FF_FIELD(TRANSCEIVER_NOISE_FLOOR, transceiver_noise_floor),
-  FF_FIELD(CHANNEL_WIDTH, channel_width),
-  FF_FIELD(QOS_INFO_AP, qos_info_ap),
-  FF_FIELD(QOS_INFO_STA, qos_info_sta),
-  FF_FIELD(SM_PWR_CNTRL, sm_pwr_cntrl),
-  FF_FIELD(PCO_PHASE_CNTRL, pco_phase_cntrl),
-  FF_FIELD(PSMP_PARAM_SET, psmp_param_set),
-  FF_FIELD(MIMO_CNTRL, mimo_cntrl),
-  FF_FIELD(ANT_SELECTION, ant_selection),
-  FF_FIELD(EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT,
-           extended_channel_switch_announcement),
-  FF_FIELD(HT_INFORMATION, ht_information),
-  FF_FIELD(HT_ACTION_CODE, ht_action_code),
-  FF_FIELD(PSMP_STA_INFO, psmp_sta_info),
-  FF_FIELD(SCHEDULE_INFO, schedule_info),
-  FF_FIELD(PA_ACTION_CODE, pa_action_code),
-  FF_FIELD(ACTION, action),
-  FF_FIELD(FT_ACTION_CODE, ft_action_code),
-  FF_FIELD(STA_ADDRESS, sta_address),
-  FF_FIELD(TARGET_AP_ADDRESS, target_ap_address),
-  FF_FIELD(GAS_COMEBACK_DELAY, gas_comeback_delay),
-  FF_FIELD(GAS_FRAGMENT_ID, gas_fragment_id),
-  FF_FIELD(SA_QUERY_ACTION_CODE, sa_query_action_code),
-  FF_FIELD(TRANSACTION_ID, transaction_id),
-  FF_FIELD(TDLS_ACTION_CODE, tdls_action_code),
-  FF_FIELD(TARGET_CHANNEL, target_channel),
-  FF_FIELD(REGULATORY_CLASS, regulatory_class),
-  FF_FIELD(WNM_ACTION_CODE, wnm_action_code),
-  { -1, NULL }
+  FF_FIELD(TIMESTAMP                             , timestamp),
+  FF_FIELD(BEACON_INTERVAL                       , beacon_interval),
+  FF_FIELD(CAP_INFO                              , cap_info),
+  FF_FIELD(AUTH_ALG                              , auth_alg),
+  FF_FIELD(AUTH_TRANS_SEQ                        , auth_trans_seq),
+  FF_FIELD(CURRENT_AP_ADDR                       , current_ap_addr),
+  FF_FIELD(LISTEN_IVAL                           , listen_ival),
+  FF_FIELD(REASON_CODE                           , reason_code),
+  FF_FIELD(ASSOC_ID                              , assoc_id),
+  FF_FIELD(STATUS_CODE                           , status_code),
+  FF_FIELD(CATEGORY_CODE                         , category_code),
+  FF_FIELD(ACTION_CODE                           , action_code),
+  FF_FIELD(DIALOG_TOKEN                          , 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),
+  FF_FIELD(BLOCK_ACK_ACTION_CODE                 , block_ack_action_code),
+  FF_FIELD(BLOCK_ACK_PARAM                       , block_ack_param),
+  FF_FIELD(BLOCK_ACK_TIMEOUT                     , block_ack_timeout),
+  FF_FIELD(BLOCK_ACK_SSC                         , block_ack_ssc),
+  FF_FIELD(QOS_TS_INFO                           , qos_ts_info),
+  FF_FIELD(MESH_ACTION                           , mesh_action),
+  FF_FIELD(MULTIHOP_ACTION                       , multihop_action),
+  FF_FIELD(MESH_CONTROL                          , mesh_control),
+  FF_FIELD(SELFPROT_ACTION                       , selfprot_action),
+  FF_FIELD(DLS_ACTION_CODE                       , dls_action_code),
+  FF_FIELD(DST_MAC_ADDR                          , dst_mac_addr),
+  FF_FIELD(SRC_MAC_ADDR                          , src_mac_addr),
+  FF_FIELD(DLS_TIMEOUT                           , dls_timeout),
+  FF_FIELD(DELBA_PARAM_SET                       , delba_param_set),
+  FF_FIELD(MAX_REG_PWR                           , max_reg_pwr),
+  FF_FIELD(MEASUREMENT_PILOT_INT                 , measurement_pilot_int),
+  FF_FIELD(COUNTRY_STR                           , country_str),
+  FF_FIELD(MAX_TX_PWR                            , max_tx_pwr),
+  FF_FIELD(TX_PWR_USED                           , tx_pwr_used),
+  FF_FIELD(TRANSCEIVER_NOISE_FLOOR               , transceiver_noise_floor),
+  FF_FIELD(CHANNEL_WIDTH                         , channel_width),
+  FF_FIELD(QOS_INFO_AP                           , qos_info_ap),
+  FF_FIELD(QOS_INFO_STA                          , qos_info_sta),
+  FF_FIELD(SM_PWR_CNTRL                          , sm_pwr_cntrl),
+  FF_FIELD(PCO_PHASE_CNTRL                       , pco_phase_cntrl),
+  FF_FIELD(PSMP_PARAM_SET                        , psmp_param_set),
+  FF_FIELD(MIMO_CNTRL                            , mimo_cntrl),
+  FF_FIELD(ANT_SELECTION                         , ant_selection),
+  FF_FIELD(EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT  , extended_channel_switch_announcement) ,
+  FF_FIELD(HT_INFORMATION                        , ht_information),
+  FF_FIELD(HT_ACTION_CODE                        , ht_action_code),
+  FF_FIELD(PSMP_STA_INFO                         , psmp_sta_info),
+  FF_FIELD(SCHEDULE_INFO                         , schedule_info),
+  FF_FIELD(PA_ACTION_CODE                        , pa_action_code),
+  FF_FIELD(ACTION                                , action),
+  FF_FIELD(FT_ACTION_CODE                        , ft_action_code),
+  FF_FIELD(STA_ADDRESS                           , sta_address),
+  FF_FIELD(TARGET_AP_ADDRESS                     , target_ap_address),
+  FF_FIELD(GAS_COMEBACK_DELAY                    , gas_comeback_delay),
+  FF_FIELD(GAS_FRAGMENT_ID                       , gas_fragment_id),
+  FF_FIELD(SA_QUERY_ACTION_CODE                  , sa_query_action_code),
+  FF_FIELD(TRANSACTION_ID                        , transaction_id),
+  FF_FIELD(TDLS_ACTION_CODE                      , tdls_action_code),
+  FF_FIELD(TARGET_CHANNEL                        , target_channel),
+  FF_FIELD(REGULATORY_CLASS                      , regulatory_class),
+  FF_FIELD(WNM_ACTION_CODE                       , wnm_action_code),
+  FF_FIELD(KEY_DATA_LENGTH                       , key_data_length),
+  FF_FIELD(WNM_NOTIFICATION_TYPE                 , wnm_notification_type),
+  { (enum fixed_field)-1                         , NULL }
 };
 
 #undef FF_FIELD
 
 static guint
-add_fixed_field(proto_tree *tree, tvbuff_t *tvb, int offset,
+add_fixed_field(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
                 enum fixed_field lfcode)
 {
   int i;
   for (i = 0; ff_dissectors[i].dissector; i++) {
     if (ff_dissectors[i].lfcode == lfcode) {
-      return ff_dissectors[i].dissector(tree, tvb, offset);
+      return ff_dissectors[i].dissector(tree, tvb, pinfo, offset);
     }
   }
   return 0;
 }
 
-static const value_string ieee80211_rsn_cipher_vals[] =
-{
+static const value_string ieee80211_rsn_cipher_vals[] = {
   {0, "NONE"},
   {1, "WEP (40-bit)"},
   {2, "TKIP"},
@@ -5568,8 +7430,7 @@ static const value_string ieee80211_rsn_cipher_vals[] =
   {0, NULL}
 };
 
-static const value_string ieee80211_rsn_keymgmt_vals[] =
-{
+static const value_string ieee80211_rsn_keymgmt_vals[] = {
   {0, "NONE"},
   {1, "WPA"},
   {2, "PSK"},
@@ -5584,8 +7445,9 @@ static const value_string ieee80211_rsn_keymgmt_vals[] =
 static void
 oui_base_custom(gchar *result, guint32 oui)
 {
-  guint8 p_oui[3];
+  guint8       p_oui[3];
   const gchar *manuf_name;
+
   p_oui[0] = oui >> 16 & 0xFF;
   p_oui[1] = oui >> 8 & 0xFF;
   p_oui[2] = oui & 0xFF;
@@ -5594,48 +7456,56 @@ oui_base_custom(gchar *result, guint32 oui)
   manuf_name = get_manuf_name_if_known(p_oui);
   if (manuf_name == NULL) {
       /* Could not find an OUI. */
-      g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x", p_oui[0], p_oui[1], p_oui[2] );
+      g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x", p_oui[0], p_oui[1], p_oui[2]);
   }
   else {
       /* Found an address string. */
-      g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x (%s)", p_oui[0], p_oui[1], p_oui[2], manuf_name );
+      g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x (%s)", p_oui[0], p_oui[1], p_oui[2], manuf_name);
   }
 }
+
 static void
 rsn_gcs_base_custom(gchar *result, guint32 gcs)
 {
-  gchar *oui_result=NULL;
-  oui_result = ep_alloc(SHORT_STR);
+  gchar *oui_result;
+
+  oui_result = (gchar *)ep_alloc(SHORT_STR);
   oui_result[0] = '\0';
   oui_base_custom(oui_result, gcs >> 8);
-  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d") );
+  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
+             val_to_str(gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d"));
 }
 
 static void
 rsn_pcs_base_custom(gchar *result, guint32 pcs)
 {
-  gchar *oui_result=NULL;
-  oui_result = ep_alloc(SHORT_STR);
+  gchar *oui_result;
+
+  oui_result = (gchar *)ep_alloc(SHORT_STR);
   oui_result[0] = '\0';
   oui_base_custom(oui_result, pcs >> 8);
-  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d") );
+  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
+             val_to_str(pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d"));
 
 }
 static void
 rsn_akms_base_custom(gchar *result, guint32 akms)
 {
-  gchar *oui_result=NULL;
-  oui_result = ep_alloc(SHORT_STR);
+  gchar *oui_result;
+
+  oui_result = (gchar *)ep_alloc(SHORT_STR);
   oui_result[0] = '\0';
   oui_base_custom(oui_result, akms >> 8);
-  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d") );
+  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
+             val_to_str(akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d"));
 }
 
 static gchar *
 rsn_pcs_return(guint32 pcs)
 {
-  gchar *result=NULL;
-  result = ep_alloc(SHORT_STR);
+  gchar *result;
+
+  result = (gchar *)ep_alloc(SHORT_STR);
   result[0] = '\0';
   rsn_pcs_base_custom(result, pcs);
 
@@ -5645,8 +7515,9 @@ rsn_pcs_return(guint32 pcs)
 static gchar *
 rsn_akms_return(guint32 akms)
 {
-  gchar *result=NULL;
-  result = ep_alloc(SHORT_STR);
+  gchar *result;
+
+  result = (gchar *)ep_alloc(SHORT_STR);
   result[0] = '\0';
   rsn_akms_base_custom(result, akms);
 
@@ -5656,24 +7527,33 @@ rsn_akms_return(guint32 akms)
 static void
 rsn_gmcs_base_custom(gchar *result, guint32 gmcs)
 {
-  gchar *oui_result=NULL;
-  oui_result = ep_alloc(SHORT_STR);
+  gchar *oui_result;
+
+  oui_result = (gchar *)ep_alloc(SHORT_STR);
   oui_result[0] = '\0';
   oui_base_custom(oui_result, gmcs >> 8);
-  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d") );
+  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
+             val_to_str(gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d"));
 }
 
-/* WPA / WME */
-static const value_string ieee802111_wfa_ie_type_vals[] =
+static void
+rsni_base_custom(gchar *result, guint32 rsni)
 {
+   double temp_double;
+
+   temp_double = (double)rsni;
+   g_snprintf(result, ITEM_LABEL_LENGTH, "%f dB", (temp_double / 2));
+}
+
+/* WPA / WME */
+static const value_string ieee802111_wfa_ie_type_vals[] = {
   { 1, "WPA Information Element" },
   { 2, "WMM/WME" },
   { 4, "WPS" },
   { 0, NULL }
 };
 
-static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] =
-{
+static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] = {
   { 0, "NONE" },
   { 1, "WEP (40-bit)" },
   { 2, "TKIP" },
@@ -5685,8 +7565,7 @@ static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] =
   { 0, NULL }
 };
 
-static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] =
-{
+static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] = {
   { 0, "NONE" },
   { 1, "WPA" },
   { 2, "PSK" },
@@ -5739,43 +7618,53 @@ static const value_string ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals[
   { 3, "WMM AP may deliver a maximum of 6 buffered frames (MSDUs and MMPDUs) per USP" },
   { 0, NULL}
 };
-static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = { "WMM delivery and trigger enabled", "non-WMM PS" };
+static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = {
+  "WMM delivery and trigger enabled",
+  "non-WMM PS"
+};
 
 static void
 wpa_mcs_base_custom(gchar *result, guint32 mcs)
 {
-  gchar *oui_result=NULL;
-  oui_result = ep_alloc(SHORT_STR);
+  gchar *oui_result;
+
+  oui_result = (gchar *)ep_alloc(SHORT_STR);
   oui_result[0] = '\0';
   oui_base_custom(oui_result, mcs >> 8);
-  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d") );
+  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
+             val_to_str(mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d"));
 }
 
 static void
 wpa_ucs_base_custom(gchar *result, guint32 ucs)
 {
-  gchar *oui_result=NULL;
-  oui_result = ep_alloc(SHORT_STR);
+  gchar *oui_result;
+
+  oui_result = (gchar *)ep_alloc(SHORT_STR);
   oui_result[0] = '\0';
   oui_base_custom(oui_result, ucs >> 8);
-  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d") );
+  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
+             val_to_str(ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d"));
 
 }
 static void
 wpa_akms_base_custom(gchar *result, guint32 akms)
 {
-  gchar *oui_result=NULL;
-  oui_result = ep_alloc(SHORT_STR);
+  gchar *oui_result;
+
+  oui_result = (gchar *)ep_alloc(SHORT_STR);
   oui_result[0] = '\0';
   oui_base_custom(oui_result, akms >> 8);
-  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d") );
+  g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
+             val_to_str(akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d"));
 }
 
 static gchar *
 wpa_ucs_return(guint32 ucs)
 {
-  gchar *result=NULL;
-  result = ep_alloc(SHORT_STR);
+  gchar *result;
+
+  result = (gchar *)ep_alloc(SHORT_STR);
   result[0] = '\0';
   wpa_ucs_base_custom(result, ucs);
 
@@ -5785,24 +7674,44 @@ wpa_ucs_return(guint32 ucs)
 static gchar *
 wpa_akms_return(guint32 akms)
 {
-  gchar *result=NULL;
-  result = ep_alloc(SHORT_STR);
+  gchar *result;
+
+  result = (gchar *)ep_alloc(SHORT_STR);
   result[0] = '\0';
   wpa_akms_base_custom(result, akms);
 
   return result;
 }
 
-static const value_string ieee802111_wfa_ie_wme_type[] =
-{
+/* For each Field */
+static const value_string ieee80211_wapi_suite_type[] = {
+  {0, "Reserved"},
+  {1, "WAI Certificate Authentication and Key Management"},
+  {2, "WAI Preshared Key Authentication and Key Management"},
+  {0, NULL},
+};
+/* For Summary Tag Information */
+static const value_string ieee80211_wapi_suite_type_short[] = {
+  {0, "Reserved"},
+  {1, "WAI-CERT"},
+  {2, "WAI-PSK"},
+  {0, NULL},
+};
+
+static const value_string ieee80211_wapi_cipher_type[] = {
+  {0, "Reserved"},
+  {1, "WPI-SMS4"},
+  {0, NULL},
+};
+
+static const value_string ieee802111_wfa_ie_wme_type[] = {
   { 0, "Information Element" },
   { 1, "Parameter Element" },
   { 2, "TSPEC Element" },
   { 0, NULL}
 };
 
-static const value_string ft_subelem_id_vals[] =
-{
+static const value_string ft_subelem_id_vals[] = {
   {0, "Reserved"},
   {1, "PMK-R1 key holder identifier (R1KH-ID)"},
   {2, "GTK subelement"},
@@ -5811,14 +7720,16 @@ static const value_string ft_subelem_id_vals[] =
   {0, NULL}
 };
 
-static int dissect_qos_info(proto_tree * tree, tvbuff_t *tvb, int offset, int ftype)
+static int
+dissect_qos_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
 {
   proto_tree *qos_info_tree;
   proto_item *qos_info_item;
+
   qos_info_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_qos_info, tvb, offset, 1, ENC_NA);
   qos_info_tree = proto_item_add_subtree(qos_info_item, ett_wme_qos_info);
 
-  switch(ftype){
+  switch (ftype) {
     case MGT_ASSOC_REQ:
     case MGT_PROBE_REQ:
     case MGT_REASSOC_REQ:
@@ -5844,7 +7755,7 @@ static int dissect_qos_info(proto_tree * tree, tvbuff_t *tvb, int offset, int ft
       break;
     }
     default:
-        expert_add_info_format(g_pinfo, qos_info_item, PI_UNDECODED, PI_WARN, "Could not deduce direction to decode correctly, ftype %u", ftype);
+        expert_add_info_format(pinfo, qos_info_item, PI_UNDECODED, PI_WARN, "Could not deduce direction to decode correctly, ftype %u", ftype);
       break;
     }
 
@@ -5853,16 +7764,16 @@ static int dissect_qos_info(proto_tree * tree, tvbuff_t *tvb, int offset, int ft
 }
 
 static int
-dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32 tag_len, int ftype)
+dissect_vendor_ie_wpawme(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, guint32 tag_len, int ftype)
 {
   guint8 type;
 
   proto_tree_add_item(tree, hf_ieee80211_wfa_ie_type, tvb, offset, 1, ENC_NA);
   type = tvb_get_guint8(tvb, offset);
-  proto_item_append_text(tree, ": %s", val_to_str(type, ieee802111_wfa_ie_type_vals, "Unknown %d" ));
+  proto_item_append_text(tree, ": %s", val_to_str(type, ieee802111_wfa_ie_type_vals, "Unknown %d"));
   offset += 1;
 
-  switch(type){
+  switch (type) {
     case 1:   /* Wi-Fi Protected Access (WPA) */
     {
       proto_item *wpa_mcs_item, *wpa_ucs_item, *wpa_akms_item;
@@ -5870,7 +7781,7 @@ dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32
       proto_tree *wpa_mcs_tree, *wpa_ucs_tree, *wpa_akms_tree;
       proto_tree *wpa_sub_ucs_tree, *wpa_sub_akms_tree;
       guint16 ucs_count, akms_count;
-      guint i;
+      guint ii;
 
       proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
       offset += 2;
@@ -5881,7 +7792,7 @@ dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32
       proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
 
       /* Check if OUI is 00:50:F2 (WFA) */
-      if(tvb_get_ntoh24(tvb, offset) == 0x0050F2)
+      if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME)
       {
         proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_wfa_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
       } else {
@@ -5896,14 +7807,14 @@ dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32
 
       wpa_ucs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_list, tvb, offset, ucs_count * 4, ENC_NA);
       wpa_ucs_tree = proto_item_add_subtree(wpa_ucs_item, ett_wpa_ucs_tree);
-      for(i = 1; i <= ucs_count; i++)
+      for (ii = 0; ii < ucs_count; ii++)
       {
         wpa_sub_ucs_item = proto_tree_add_item(wpa_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs, tvb, offset, 4, ENC_BIG_ENDIAN);
         wpa_sub_ucs_tree = proto_item_add_subtree(wpa_sub_ucs_item, ett_wpa_sub_ucs_tree);
         proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
 
         /* Check if OUI is 00:50:F2 (WFA) */
-        if(tvb_get_ntoh24(tvb, offset) == 0x0050F2)
+        if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME)
         {
           proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_wfa_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
           proto_item_append_text(wpa_ucs_item, " %s", wpa_ucs_return(tvb_get_ntohl(tvb, offset)));
@@ -5920,14 +7831,14 @@ dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32
 
       wpa_akms_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_list, tvb, offset, akms_count * 4, ENC_NA);
       wpa_akms_tree = proto_item_add_subtree(wpa_akms_item, ett_wpa_akms_tree);
-      for(i = 1; i <= akms_count; i++)
+      for (ii = 0; ii < akms_count; ii++)
       {
         wpa_sub_akms_item = proto_tree_add_item(wpa_akms_tree, hf_ieee80211_wfa_ie_wpa_akms, tvb, offset, 4, ENC_BIG_ENDIAN);
         wpa_sub_akms_tree = proto_item_add_subtree(wpa_sub_akms_item, ett_wpa_sub_akms_tree);
         proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
 
         /* Check if OUI is 00:50:F2 (WFA) */
-        if(tvb_get_ntoh24(tvb, offset) == 0x0050F2)
+        if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME)
         {
           proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_wfa_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
           proto_item_append_text(wpa_akms_item, " %s", wpa_akms_return(tvb_get_ntohl(tvb, offset)));
@@ -5944,28 +7855,26 @@ dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32
 
       proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_subtype, tvb, offset, 1, ENC_NA);
       subtype = tvb_get_guint8(tvb, offset);
-      proto_item_append_text(tree, ": %s", val_to_str(subtype, ieee802111_wfa_ie_wme_type, "Unknown %d" ));
+      proto_item_append_text(tree, ": %s", val_to_str(subtype, ieee802111_wfa_ie_wme_type, "Unknown %d"));
+      offset += 1;
+      proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA);
       offset += 1;
-      switch(subtype){
+      switch (subtype) {
         case 0: /* WME Information Element */
         {
-          proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA);
-          offset += 1;
           /* WME QoS Info Field */
-          offset = dissect_qos_info(tree, tvb, offset, ftype);
+          offset = dissect_qos_info(tree, tvb, pinfo, offset, ftype);
           break;
         }
         case 1: /* WME Parameter Element */
         {
           int i;
-          proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA);
-          offset += 1;
           /* WME QoS Info Field */
-          offset = dissect_qos_info(tree, tvb, offset, ftype);
+          offset = dissect_qos_info(tree, tvb, pinfo, offset, ftype);
           proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_reserved, tvb, offset, 1, ENC_NA);
           offset += 1;
           /* AC Parameters */
-          for(i = 0; i < 4; i++)
+          for (i = 0; i < 4; i++)
           {
             proto_item *ac_item, *aci_aifsn_item, *ecw_item;
             proto_tree *ac_tree, *aci_aifsn_tree, *ecw_tree;
@@ -5983,7 +7892,7 @@ dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32
             proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_reserved, tvb, offset, 1, ENC_NA);
             aci_aifsn = tvb_get_guint8(tvb, offset);
             proto_item_append_text(ac_item, " ACI %u (%s), ACM %s, AIFSN %u",
-            (aci_aifsn & 0x60) >> 5, match_strval((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
+            (aci_aifsn & 0x60) >> 5, try_val_to_str((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
             (aci_aifsn & 0x10) ? "yes" : "no ", aci_aifsn & 0x0f);
             offset += 1;
 
@@ -5993,7 +7902,7 @@ dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32
             proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_max, tvb, offset, 1, ENC_NA);
             proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_min, tvb, offset, 1, ENC_NA);
             ecw = tvb_get_guint8(tvb, offset);
-            proto_item_append_text(ac_item, ", ECWmin %u ,ECWmax %u", ecw & 0x0f, (ecw & 0xf0) >> 4 );
+            proto_item_append_text(ac_item, ", ECWmin %u ,ECWmax %u", ecw & 0x0f, (ecw & 0xf0) >> 4);
             offset += 1;
 
             /* TXOP Limit */
@@ -6003,7 +7912,7 @@ dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32
           }
           break;
         }
-        case 3:   /* WME TSPEC Element */
+        case 2:   /* WME TSPEC Element */
         {
 
             proto_item *tsinfo_item;
@@ -6069,22 +7978,29 @@ dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32
         default:
           /* No default Action */
         break;
-      } /* End switch(subtype) */
+      } /* End switch (subtype) */
       break;
     }
     case 4: /* WPS: Wifi Protected Setup */
     {
-      dissect_wps_tlvs(tree, tvb, offset, tag_len-4, NULL);
+      dissect_wps_tlvs(tree, tvb, offset, tag_len-1, NULL);
     }
     break;
     default:
       /* No default Action...*/
     break;
-  } /* End switch(type) */
+  } /* End switch (type) */
 
   return offset;
 }
 
+static void dissect_hs20_indication(proto_tree *tree, tvbuff_t *tvb,
+                                    int offset)
+{
+  proto_tree_add_item(tree, hf_hs20_indication_dgaf_disabled, tvb, offset, 1,
+                      ENC_LITTLE_ENDIAN);
+}
+
 static void
 dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
 {
@@ -6098,30 +8014,36 @@ dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
     dissect_wifi_p2p_ie(pinfo, item, tag_tvb, 4, tag_len - 4);
     proto_item_append_text(item, ": P2P");
     break;
+  case WFA_SUBTYPE_WIFI_DISPLAY:
+    dissect_wifi_display_ie(pinfo, item, tag_tvb, 4, tag_len - 4);
+    proto_item_append_text(item, ": Wi-Fi Display");
+    break;
+  case WFA_SUBTYPE_HS20_INDICATION:
+    dissect_hs20_indication(item, tag_tvb, 4);
+    proto_item_append_text(item, ": Hotspot 2.0 Indication");
+    break;
   }
 }
 
 static void
-dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tag_tvb)
+dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tvb, int offset, guint32 tag_len)
 {
-  guint tag_off = 0;
-  guint tag_len = tvb_length(tag_tvb);
-  guint pmkid_len = tag_len - 4;
-  char out_buff[SHORT_STR], valid_str[SHORT_STR] = "";
-
-  if (tag_len >= 4 && !tvb_memeql(tag_tvb, tag_off, RSN_OUI"\x04", 4)) {
-    /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
-     * This is only used within EAPOL-Key frame Key Data. */
-    if (pmkid_len != PMKID_LEN) {
-      g_snprintf(valid_str, SHORT_STR,
-        "(invalid PMKID len=%d, expected 16) ", pmkid_len);
+
+  switch(tvb_get_guint8(tvb, offset)){
+    case 4:
+    {
+      /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
+       * This is only used within EAPOL-Key frame Key Data. */
+      proto_tree_add_item(tree, hf_ieee80211_rsn_ie_pmkid, tvb, offset, 16, ENC_NA);
     }
-    g_snprintf(out_buff, SHORT_STR, "RSN PMKID: %s%s", valid_str,
-      tvb_bytes_to_str(tag_tvb, 4, pmkid_len));
-    proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tag_tvb, 0,
-      tag_len, out_buff);
+    break;
+    default:
+      proto_tree_add_item(tree, hf_ieee80211_rsn_ie_unknown, tvb, offset, tag_len, ENC_NA);
+    break;
   }
+
   proto_item_append_text(item, ": RSN");
+
 }
 
 typedef enum {
@@ -6129,8 +8051,8 @@ typedef enum {
 } marvell_ie_type_t;
 
 static void
-dissect_vendor_ie_marvell(proto_item * item _U_, proto_tree * ietree,
-                          tvbuff_t * tvb, int offset, guint32 tag_len)
+dissect_vendor_ie_marvell(proto_item *item _U_, proto_tree *ietree,
+                          tvbuff_t *tvb, int offset, guint32 tag_len)
 {
   guint8 type;
 
@@ -6141,15 +8063,15 @@ dissect_vendor_ie_marvell(proto_item * item _U_, proto_tree * ietree,
   switch (type) {
   case MARVELL_IE_MESH:
     proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_subtype, tvb,
-                         offset++, 1, ENC_LITTLE_ENDIAN );
+                         offset++, 1, ENC_LITTLE_ENDIAN);
     proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_version, tvb,
-                         offset++, 1, ENC_LITTLE_ENDIAN );
+                         offset++, 1, ENC_LITTLE_ENDIAN);
     proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_active_proto_id, tvb,
-                         offset++, 1, ENC_LITTLE_ENDIAN );
+                         offset++, 1, ENC_LITTLE_ENDIAN);
     proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_active_metric_id, tvb,
-                         offset++, 1, ENC_LITTLE_ENDIAN );
+                         offset++, 1, ENC_LITTLE_ENDIAN);
     proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_cap, tvb,
-                         offset++, 1, ENC_LITTLE_ENDIAN );
+                         offset++, 1, ENC_LITTLE_ENDIAN);
     break;
 
   default:
@@ -6174,13 +8096,13 @@ typedef enum {
 
 typedef enum {
   ATHEROS_IE_CAP_TURBOP = 0x01,
-  ATHEROS_IE_CAP_COMP = 0x02,
-  ATHEROS_IE_CAP_FF = 0x04,
-  ATHEROS_IE_CAP_XR = 0x08,
-  ATHEROS_IE_CAP_AR = 0x10,
-  ATHEROS_IE_CAP_BURST = 0x20,
-  ATHEROS_IE_CAP_WME = 0x40,
-  ATHEROS_IE_CAP_BOOST = 0x80
+  ATHEROS_IE_CAP_COMP   = 0x02,
+  ATHEROS_IE_CAP_FF     = 0x04,
+  ATHEROS_IE_CAP_XR     = 0x08,
+  ATHEROS_IE_CAP_AR     = 0x10,
+  ATHEROS_IE_CAP_BURST  = 0x20,
+  ATHEROS_IE_CAP_WME    = 0x40,
+  ATHEROS_IE_CAP_BOOST  = 0x80
 } atheros_ie_cap_t;
 
 static const value_string atheros_ie_type_vals[] = {
@@ -6190,33 +8112,32 @@ static const value_string atheros_ie_type_vals[] = {
 };
 
 static void
-dissect_vendor_ie_atheros_cap(proto_item * item _U_, tvbuff_t *tvb, int offset)
+dissect_vendor_ie_atheros_cap(proto_item *item _U_, tvbuff_t *tvb, int offset)
 {
   proto_tree *cap_tree;
 
   cap_tree = proto_item_add_subtree(item, ett_ath_cap_tree);
 
   proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_turbop, tvb, offset, 1, ENC_NA);
-  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_comp, tvb, offset, 1, ENC_NA);
-  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ff, tvb, offset, 1, ENC_NA);
-  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_xr, tvb, offset, 1, ENC_NA);
-  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ar, tvb, offset, 1, ENC_NA);
-  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_burst, tvb, offset, 1, ENC_NA);
-  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_wme, tvb, offset, 1, ENC_NA);
-  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_boost, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_comp,   tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ff,     tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_xr,     tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ar,     tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_burst,  tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_wme,    tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_boost,  tvb, offset, 1, ENC_NA);
 
 }
 
 static void
-dissect_vendor_ie_atheros(proto_item * item _U_, proto_tree * ietree,
-                          tvbuff_t * tvb, int offset, guint tag_len,
-                          packet_info * pinfo, proto_item *ti_len)
+dissect_vendor_ie_atheros(proto_item *item _U_, proto_tree *ietree,
+                          tvbuff_t *tvb, int offset, guint tag_len,
+                          packet_info *pinfo, proto_item *ti_len)
 {
-  guint8 type;
-  guint8 subtype;
-  guint8 version;
+  guint8      type;
+  guint8      subtype;
+  guint8      version;
   proto_item *cap_item;
-  proto_item *ti;
 
   if (tag_len <= 3) {
         expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be >= 6", tag_len+3); /* Add length of OUI to tag_length */
@@ -6225,90 +8146,89 @@ dissect_vendor_ie_atheros(proto_item * item _U_, proto_tree * ietree,
   proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_type, tvb, offset, 1, ENC_NA);
   type = tvb_get_guint8(tvb, offset);
   proto_item_append_text(item, ": %s", val_to_str_const(type, atheros_ie_type_vals, "Unknown"));
-  offset += 1;
+  offset  += 1;
   tag_len -= 1;
 
   proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_subtype, tvb, offset, 1, ENC_NA);
-  subtype = tvb_get_guint8(tvb, offset);
-  offset += 1;
+  subtype  = tvb_get_guint8(tvb, offset);
+  offset  += 1;
   tag_len -= 1;
 
   proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_version, tvb, offset, 1, ENC_NA);
-  version = tvb_get_guint8(tvb, offset);
-  offset += 1;
+  version  = tvb_get_guint8(tvb, offset);
+  offset  += 1;
   tag_len -= 1;
 
-  if(version == 0)
+  if (version == 0)
   {
-    switch(type){
+    switch (type) {
       case ATHEROS_IE_ADVCAP:
       {
-        switch(subtype){
+        switch (subtype) {
           case ATHEROS_IE_ADVCAP_S:
           {
-            cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_cap, tvb, offset, 1, ENC_NA);
+            cap_item  = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_cap, tvb, offset, 1, ENC_NA);
             dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
-            offset += 1;
-            tag_len -= 1;
+            offset   += 1;
+            tag_len  -= 1;
 
             proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_defkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
-            offset += 2;
+            offset  += 2;
             tag_len -= 2;
             break;
           }
           default:
           /* No default Action */
           break;
-        } /* End switch(subtype) */
+        } /* End switch (subtype) */
         break;
       }
       case ATHEROS_IE_XR:
       {
-        switch(subtype){
+        switch (subtype) {
           case ATHEROS_IE_XR_S:
           {
             proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_info, tvb, offset, 1, ENC_NA);
-            offset += 1;
+            offset  += 1;
             tag_len -= 1;
 
             proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_bssid, tvb, offset, 6, ENC_NA);
-            offset += 6;
+            offset  += 6;
             tag_len -= 6;
 
             proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_bssid, tvb, offset, 6, ENC_NA);
-            offset += 6;
+            offset  += 6;
             tag_len -= 6;
 
             proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN);
-            offset += 2;
+            offset  += 2;
             tag_len -= 2;
 
-            cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_cap, tvb, offset, 1, ENC_NA);
+            cap_item  = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_cap, tvb, offset, 1, ENC_NA);
             dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
-            offset += 1;
-            tag_len -= 1;
+            offset   += 1;
+            tag_len  -= 1;
 
-            cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_cap, tvb, offset, 1, ENC_NA);
+            cap_item  = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_cap, tvb, offset, 1, ENC_NA);
             dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
-            offset += 1;
-            tag_len -= 1;
+            offset   += 1;
+            tag_len  -= 1;
             break;
           }
           default:
           /* No default Action */
           break;
-        } /* End switch(subtype) */
+        } /* End switch (subtype) */
         break;
         default:
         /* No default Action */
         break;
-      } /* End switch(type) */
+      } /* End switch (type) */
 
     }
   }
-  if(tag_len > 0 ){
-   ti = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA);
-   expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_WARN, "Unknown Data (not interpreted)");
+  if (tag_len > 0) {
+    proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA);
   }
 }
 
@@ -6326,8 +8246,8 @@ static const value_string aironet_ie_type_vals[] = {
 };
 
 static void
-dissect_vendor_ie_aironet(proto_item * aironet_item, proto_tree * ietree,
-  tvbuff_t * tvb, int offset, guint32 tag_len)
+dissect_vendor_ie_aironet(proto_item *aironet_item, proto_tree *ietree,
+                          tvbuff_t *tvb, int offset, guint32 tag_len)
 {
   guint8  type;
   int i;
@@ -6345,7 +8265,7 @@ dissect_vendor_ie_aironet(proto_item * aironet_item, proto_tree * ietree,
     dont_change = TRUE;
     break;
   case AIRONET_IE_QOS:
-    proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_qos_unk1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_qos_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
     offset += 1;
     proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_qos_paramset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
     offset += 1;
@@ -6360,7 +8280,7 @@ dissect_vendor_ie_aironet(proto_item * aironet_item, proto_tree * ietree,
       byte2 = tvb_get_guint8(tvb, offset + 1);
       txop = tvb_get_letohs(tvb, offset + 2);
       proto_tree_add_bytes_format(ietree, hf_ieee80211_aironet_ie_qos_val, tvb, offset, 4, NULL,
-          "CCX QoS Parameters??: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
+          "CCX QoS Parameters: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
         (byte1 & 0x60) >> 5, val_to_str((byte1 & 0x60) >> 5, wme_acs, "(Unknown: %d)"),
         (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
         byte2 & 0x0f, (byte2 & 0xf0) >> 4,
@@ -6386,15 +8306,54 @@ dissect_vendor_ie_aironet(proto_item * aironet_item, proto_tree * ietree,
   }
 }
 
+#define ARUBA_APNAME  3
+static const value_string ieee80211_vs_aruba_subtype_vals[] = {
+  { ARUBA_APNAME, "AP Name"},
+  { 0,                 NULL }
+};
+static void
+dissect_vendor_ie_aruba(proto_item *item, proto_tree *ietree,
+                          tvbuff_t *tvb, int offset, guint32 tag_len)
+{
+  guint8 type;
+
+  offset += 1; /* VS OUI Type */
+  tag_len -= 1;
+
+  type = tvb_get_guint8(tvb, offset);
+  proto_tree_add_item (ietree, hf_ieee80211_vs_aruba_subtype, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aruba_subtype_vals, "Unknown"));
+  offset += 1;
+  tag_len -= 1;
+
+  switch (type) {
+  case ARUBA_APNAME:
+    offset += 1;
+    tag_len -= 1;
+
+    proto_tree_add_item (ietree, hf_ieee80211_vs_aruba_apname, tvb,
+                         offset, tag_len, ENC_ASCII|ENC_NA);
+    proto_item_append_text(item, " (%s)", tvb_get_ephemeral_string(tvb, offset, tag_len));
+    break;
+
+  default:
+    proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_data, tvb, offset,
+      tag_len, ENC_NA);
+    proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(tvb, offset, tag_len));
+    break;
+  }
+}
+
 /* 802.11e 7.3.2.33 QoS Capability element */
-static int dissect_qos_capability(proto_tree * tree, tvbuff_t * tvb, int offset, int ftype)
+static int
+dissect_qos_capability(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
 {
   proto_item *cap_info_item;
   proto_tree *cap_info_tree;
 
   cap_info_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_cap_qos_info, tvb, offset, 1, ENC_NA);
   cap_info_tree = proto_item_add_subtree(cap_info_item, ett_qos_info_field_tree);
-  switch(ftype){
+  switch (ftype) {
     case MGT_ASSOC_REQ:
     case MGT_PROBE_REQ:
     case MGT_REASSOC_REQ:
@@ -6423,7 +8382,7 @@ static int dissect_qos_capability(proto_tree * tree, tvbuff_t * tvb, int offset,
       break;
     }
     default:
-        expert_add_info_format(g_pinfo, cap_info_item, PI_UNDECODED, PI_WARN, "Could not deduce direction to decode correctly, ftype %u", ftype);
+        expert_add_info_format(pinfo, cap_info_item, PI_UNDECODED, PI_WARN, "Could not deduce direction to decode correctly, ftype %u", ftype);
       break;
   }
 
@@ -6432,17 +8391,17 @@ static int dissect_qos_capability(proto_tree * tree, tvbuff_t * tvb, int offset,
 
 /* 7.3.2.25 RSN information element */
 static int
-dissect_rsn_ie(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb,
-    int offset, guint32 tag_len)
+dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
+               int offset, guint32 tag_len)
 {
   proto_item *rsn_gcs_item, *rsn_pcs_item, *rsn_akms_item, *rsn_cap_item, *rsn_pmkid_item, *rsn_gmcs_item;
   proto_item *rsn_sub_pcs_item, *rsn_sub_akms_item;
   proto_item *rsn_pcs_count, *rsn_akms_count, *rsn_pmkid_count;
   proto_tree *rsn_gcs_tree, *rsn_pcs_tree, *rsn_akms_tree, *rsn_cap_tree, *rsn_pmkid_tree, *rsn_gmcs_tree;
   proto_tree *rsn_sub_pcs_tree, *rsn_sub_akms_tree;
-  guint16 pcs_count, akms_count, pmkid_count;
-  guint i;
-  int tag_end = offset + tag_len;
+  guint16     pcs_count, akms_count, pmkid_count;
+  guint       ii;
+  int         tag_end = offset + tag_len;
 
   proto_tree_add_item(tree, hf_ieee80211_rsn_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
   offset += 2;
@@ -6453,7 +8412,7 @@ dissect_rsn_ie(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb,
   proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
 
     /* Check if OUI is 00:0F:AC (ieee80211) */
-  if(tvb_get_ntoh24(tvb, offset) == 0x000FAC)
+  if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
   {
     proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_80211_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
   } else {
@@ -6475,14 +8434,14 @@ dissect_rsn_ie(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb,
 
   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(i = 1; i <= pcs_count; i++)
+  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) == 0x000FAC)
+    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)));
@@ -6492,7 +8451,7 @@ dissect_rsn_ie(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb,
     offset += 4;
   }
 
-  if(offset >= tag_end)
+  if (offset >= tag_end)
   {
     return offset;
   }
@@ -6511,14 +8470,14 @@ dissect_rsn_ie(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb,
 
   rsn_akms_item = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_list, tvb, offset, akms_count * 4, ENC_NA);
   rsn_akms_tree = proto_item_add_subtree(rsn_akms_item, ett_rsn_akms_tree);
-  for(i = 1; i <= akms_count; i++)
+  for (ii = 0; ii < akms_count; ii++)
   {
     rsn_sub_akms_item = proto_tree_add_item(rsn_akms_tree, hf_ieee80211_rsn_akms, tvb, offset, 4, ENC_BIG_ENDIAN);
     rsn_sub_akms_tree = proto_item_add_subtree(rsn_sub_akms_item, ett_rsn_sub_akms_tree);
     proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
 
     /* Check if OUI is 00:0F:AC (ieee80211) */
-    if(tvb_get_ntoh24(tvb, offset) == 0x000FAC)
+    if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
     {
       proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
       proto_item_append_text(rsn_akms_item, " %s", rsn_akms_return(tvb_get_ntohl(tvb, offset)));
@@ -6540,7 +8499,7 @@ dissect_rsn_ie(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb,
   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_peerkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
   offset += 2;
-  if(offset >= tag_end)
+  if (offset >= tag_end)
   {
     return offset;
   }
@@ -6558,32 +8517,334 @@ dissect_rsn_ie(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb,
 
   rsn_pmkid_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_list, tvb, offset, pmkid_count * 16, ENC_NA);
   rsn_pmkid_tree = proto_item_add_subtree(rsn_pmkid_item, ett_rsn_pmkid_tree);
-  for(i = 1; i <= pmkid_count; i++)
+  for (ii = 0; ii < pmkid_count; ii++)
   {
     proto_tree_add_item(rsn_pmkid_tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA);
-    offset +=16;
+    offset += 16;
+  }
+
+  if (offset >= tag_end)
+  {
+    return offset;
+  }
+  /* Group Management Cipher Suite (802.11w)*/
+  rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN);
+  rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
+  proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_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_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
+  } else {
+    proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
+  }
+  offset += 4;
+
+  return offset;
+}
+static int
+dissect_extended_capabilities_ie(packet_info *pinfo, proto_tree *tree,
+                         proto_item *ti, proto_item *ti_len,
+                         guint32 tag_len, tvbuff_t *tvb,
+                         int offset, int tag_end)
+{
+  proto_item *ti_ex_cap;
+  proto_tree *ex_cap_tree;
+
+  if (tag_len < 1)
+  {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be greater than 0", tag_len);
+    return offset;
+  }
+  proto_item_append_text(ti, " (%u octet%s)", tag_len, plurality(tag_len, "", "s"));
+
+  /* Extended Capability octet 1 */
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 1)");
+  ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_ex_cap1);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b0, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b1, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b2, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b3, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b4, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b5, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b6, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b7, tvb, offset, 1, ENC_NA);
+  offset += 1;
+
+  /* Extended Capability octet 2 */
+  if (offset >= tag_end) {
+    return offset;
+  }
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 2)");
+  ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_ex_cap2);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b8, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b9, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b10, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b11, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b12, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b13, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b14, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b15, tvb, offset, 1, ENC_NA);
+  offset += 1;
+
+  /* Extended Capability octet 3 */
+  if (offset >= tag_end) {
+    return offset;
+  }
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 3)");
+  ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_ex_cap3);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b16, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b17, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b18, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b19, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b20, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b21, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b22, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b23, tvb, offset, 1, ENC_NA);
+  offset += 1;
+
+  /* Extended Capability octet 4 */
+  if (offset >= tag_end) {
+    return offset;
+  }
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 4)");
+  ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap4);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b24, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b25, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b26, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b27, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b28, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b29, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b30, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b31, tvb, offset, 1, ENC_NA);
+  offset += 1;
+
+  /* Extended Capability octet 5 */
+  if (offset >= tag_end) {
+    return offset;
+  }
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 5)");
+  ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap5);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b32, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b33, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b34, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b35, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b36, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b37, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b38, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b39, tvb, offset, 1, ENC_NA);
+  offset += 1;
+
+  /* Extended Capability octet 6 */
+  if (offset >= tag_end) {
+    return offset;
   }
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 6)");
+  ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap6);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b40, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_serv_int_granularity, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b44, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b45, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b46, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b47, tvb, offset, 1, ENC_NA);
+  offset += 1;
+
+
+  /* Extended Capability octet 7 */
+  if (offset >= tag_end) {
+    return offset;
+  }
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 7)");
+  ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap7);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b48, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_o7, tvb, offset, 1, ENC_NA);
+  offset += 1;
+
+  /* Extended Capability octet 8 */
+  if (offset >= tag_end) {
+    return offset;
+  }
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 8)");
+  ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap8);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_o8, tvb, offset, 1, ENC_NA);
+  offset += 1;
+
+  return offset;
+}
+static int
+dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset)
+{
+  proto_item *ti;
+  proto_tree *mcs_tree, *rx_mcs_tree, *tx_mcs_tree;
+
+  /* 8 byte Supported MCS set */
+  ti = proto_tree_add_item(tree, hf_ieee80211_vht_mcsset, tvb, offset, 8, ENC_NA);
+
+  mcs_tree = proto_item_add_subtree(ti, ett_vht_mcsset_tree);
+
+  ti = proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  rx_mcs_tree = proto_item_add_subtree(ti, ett_vht_rx_mcsbit_tree);
+
+  /* B0 - B15 */
+  proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+
+  offset += 2;
+  /* B16 - B28 13 bits*/
+  proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+
+  /* B29 - B31 2 reserved bits*/
+
+  offset += 2;
+  /* B32 - B47 */
+
+  ti = proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  tx_mcs_tree = proto_item_add_subtree(ti, ett_vht_tx_mcsbit_tree);
+  proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+
+  offset += 2;
+  /* B48 - B60 13 bits */
+  proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  /* B61 - B63 2 reserved bits*/
+
+  offset += 2;
+  return offset;
+}
+
+static int
+dissect_vht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
+         guint32 tag_len, proto_item *ti_len)
+{
+  proto_item *cap_item;
+  proto_tree *cap_tree;
+
+  if (tag_len != 12) {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "VHT Capabilities IE length %u wrong, must be = 12", tag_len);
+    return offset;
+  }
+
+  /* 4 byte VHT Capabilities  Info*/
+  cap_item = proto_tree_add_item(tree, hf_ieee80211_vht_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  cap_tree = proto_item_add_subtree(cap_item, ett_vht_cap_tree);
+
+  /* B0 - B1 2 bits */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_max_mpdu_length, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  /* B2 - B3 2 bits*/
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_supported_chan_width_set, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  /* B4 - B7 4x 1 bit fields */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_ldpc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_short_gi_for_80, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_short_gi_for_160, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_tx_stbc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  /* End of first byte */
+
+  /* B8 - B10 3 bit field */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_stbc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  /* B11 - B12 2x 1 bit fields */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_su_beamformer_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_su_beamformee_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  /* B13 - B15 3 bit field */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_beamformer_antennas, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  /* End of second byte */
+
+  /* B16 - B18 */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_sounding_dimensions, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  /* B19 */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_mu_beamformer_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  /* B20 - B22 2x 1 bit fields */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_mu_beamformee_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_txop_ps, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_var_htc_field, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  /* B23 - B25 3 bit field which takes us 2 bits into next byte */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_max_ampdu, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  /* B26 - B27 2 bit field */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_link_adaptation_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  /* B28 - B29 2x 1 bit fields */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_pattern, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_tx_pattern, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  /* B30 - B31 Reserved */
+  proto_tree_add_item(cap_tree, hf_ieee80211_vht_reserv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+
+  offset += 4;
+
+  /* 8 byte MCS set */
+  offset = dissect_vht_mcs_set(tree, tvb, offset);
+
+  return offset;
+}
+
+static int
+dissect_vht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
+         guint32 tag_len, proto_item *ti_len)
+{
+  proto_item *op_item, *ti;
+  proto_tree *op_tree, *basic_mcs_tree;
 
-  if(offset >= tag_end)
-  {
+  if (tag_len != 5) {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "VHT Operation IE length %u wrong, must be = 5", tag_len);
     return offset;
   }
-  /* Group Management Cipher Suite (802.11w)*/
-  rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN);
-  rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
-  proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
-  /* Check if OUI is 00:0F:AC (ieee80211) */
-  if(tvb_get_ntoh24(tvb, offset) == 0x000FAC)
-  {
-    proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
-  } else {
-    proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
-  }
-  offset += 4;
+
+  /* 3 byte VHT Operation Info*/
+  op_item = proto_tree_add_item(tree, hf_ieee80211_vht_op, tvb, offset, 3, ENC_NA);
+  op_tree = proto_item_add_subtree(op_item, ett_vht_op_tree);
+  proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center0, tvb, offset+1, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center1, tvb, offset+2, 1, ENC_LITTLE_ENDIAN);
+
+  offset += 3;
+  /* VHT Basic MCS Set */
+  ti = proto_tree_add_item(tree, hf_ieee80211_vht_op_basic_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  basic_mcs_tree = proto_item_add_subtree(ti, ett_vht_basic_mcsbit_tree);
+  proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_8_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+
+  offset += 2;
 
   return offset;
 }
 
+
 static void
 dissect_mobility_domain(proto_tree *tree, tvbuff_t *tvb, int offset,
                         guint32 tag_len)
@@ -6636,12 +8897,12 @@ dissect_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset,
     proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_id,
                         tvb, offset, 1, ENC_BIG_ENDIAN);
     id = tvb_get_guint8(tvb, offset);
-    offset++;
+    offset += 1;
 
     proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_len,
                         tvb, offset, 1, ENC_BIG_ENDIAN);
     len = tvb_get_guint8(tvb, offset);
-    offset++;
+    offset += 1;
 
     if (offset + len > end) {
       proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset,
@@ -6665,7 +8926,7 @@ dissect_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset,
         break;
       proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_length,
                           tvb, offset, 1, ENC_BIG_ENDIAN);
-      offset++;
+      offset += 1;
       if (offset > s_end)
         break;
       proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_rsc,
@@ -6693,7 +8954,7 @@ dissect_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset,
         break;
       proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_length,
                           tvb, offset, 1, ENC_BIG_ENDIAN);
-      offset++;
+      offset += 1;
       if (offset > s_end)
         break;
       proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key,
@@ -6724,6 +8985,37 @@ dissect_mmie(proto_tree *tree, tvbuff_t *tvb, int offset, guint32 tag_len)
                       ENC_NA);
 }
 
+static void
+dissect_ssid_list(proto_tree *tree, tvbuff_t *tvb, int offset, guint32 tag_len)
+{
+  int end = offset + tag_len;
+  proto_item *ssid;
+  proto_tree *entry;
+  gboolean first = TRUE;
+
+  while (offset + 1 <= end) {
+    guint8 len = tvb_get_guint8(tvb, offset + 1);
+    guint8 *str;
+
+    if (offset + 2 + len > end)
+      break;
+
+    str = tvb_get_ephemeral_string(tvb, offset + 2, len);
+    proto_item_append_text(tree, "%c %s", (first ? ':' : ','), str);
+    first = FALSE;
+    ssid = proto_tree_add_text(tree, tvb, offset, 2 + len, "SSID: %s", str);
+    entry = proto_item_add_subtree(ssid, ett_ssid_list);
+    proto_tree_add_item(entry, hf_ieee80211_tag_number, tvb, offset, 1,
+                        ENC_BIG_ENDIAN);
+    offset++;
+    proto_tree_add_uint(entry, hf_ieee80211_tag_length, tvb, offset, 1, len);
+    offset++;
+    proto_tree_add_item(entry, hf_ieee80211_tag_ssid, tvb, offset, len,
+                        ENC_ASCII|ENC_NA);
+    offset += len;
+  }
+}
+
 static void
 dissect_link_identifier(proto_tree *tree, tvbuff_t *tvb, int offset,
                         guint32 tag_len)
@@ -6808,7 +9100,7 @@ dissect_pti_control(proto_tree *tree, tvbuff_t *tvb, int offset,
 
   proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_tid, tvb,
                       offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_sequence_control, tvb,
                       offset, 2, ENC_LITTLE_ENDIAN);
@@ -6836,7 +9128,7 @@ dissect_pu_buffer_status(proto_tree *tree, tvbuff_t *tvb, int offset,
 }
 
 static void
-dissect_timeout_interval(proto_tree *tree, tvbuff_t *tvb, int offset,
+dissect_timeout_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
                          guint32 tag_len)
 {
   proto_item *pi;
@@ -6844,7 +9136,7 @@ dissect_timeout_interval(proto_tree *tree, tvbuff_t *tvb, int offset,
   pi = proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_type, tvb,
                            offset, 1, ENC_BIG_ENDIAN);
   if (tag_len < 5) {
-    expert_add_info_format(g_pinfo, pi, PI_MALFORMED, PI_ERROR,
+    expert_add_info_format(pinfo, pi, PI_MALFORMED, PI_ERROR,
                            "Timeout Interval content length must be at least "
                           "5 bytes");
     return;
@@ -6855,16 +9147,113 @@ dissect_timeout_interval(proto_tree *tree, tvbuff_t *tvb, int offset,
 }
 
 static int
-dissect_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean basic, gboolean vs) {
+dissect_ric_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
+                         guint32 tag_len, proto_item *ti, proto_item *ti_len, int ftype)
+{
+
+  proto_tree  *sub_tree;
+  guint8       desc_cnt = 0;
+  guint32      next_ie;
+  int          offset_r = 0;
+
+  if (tag_len !=  4)  {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "RIC Data Length must be 4 bytes");
+    return 0;
+  }
+
+  proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_id, tvb,
+                           offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+
+  desc_cnt = tvb_get_guint8(tvb,offset);
+  proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_desc_cnt, tvb,
+                           offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+
+  proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_status_code, tvb,
+                           offset, 2, ENC_LITTLE_ENDIAN);
+  offset += 2;
+
+  /* Our Design is such that all the Resource request IE's part of the RIC
+   * must be in the sub tree of RIC for better readability
+   * Even omnipeek does the same way.
+   */
+  sub_tree = proto_item_add_subtree(tree, ett_tag_ric_data_desc_ie);
+
+  proto_item_append_text(ti, " :Resource Descriptor List");
+  if (desc_cnt == 0) {
+    proto_item_append_text(ti, " :0 (Weird?)");
+  }
+
+  while ( desc_cnt !=0 ) {
+
+    next_ie = tvb_get_guint8(tvb,offset);
+    proto_item_append_text(ti, " :(%d:%s)", desc_cnt,val_to_str_ext(next_ie, &tag_num_vals_ext, "Reserved (%d)"));
+    /* Recursive call to avoid duplication of code*/
+    offset_r = add_tagged_field(pinfo, sub_tree, tvb, offset, ftype);
+    if (offset_r == 0 )/* should never happen, returns a min of 2*/
+      break;
+    /* This will ensure that the IE after RIC is processed
+     * only once. This gives us a good looking RIC IE :-)
+     */
+    tag_len += offset_r;
+    desc_cnt--;
+  }
+
+  return tag_len;
+}
+
+static int
+dissect_ric_descriptor(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
+                         guint32 tag_len, proto_item *ti, proto_item *ti_len)
+{
+
+  guint8       rsrc_type = 0;
+
+  if (tag_len < 1)  {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "RIC Data Length must be at least 1 byte");
+    return 0;
+  }
+
+  rsrc_type = tvb_get_guint8(tvb,offset);
+  proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_rsrc_type, tvb,
+                           offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+
+  if (rsrc_type == 1) {
+    /* Block ACK params
+     * 802.11-2012: 8.4.2.53 RIC Descriptor element
+     * Block Ack parameter set as defined in 8.4.1.14,
+     * Block Ack timeout value as defined in 8.4.1.15, and
+     * Block Ack starting sequence control as defined in 8.3.1.8
+     */
+    /* TODO: Still figuring out how to parse these ones,
+     * need a sample capture with at least HEX Dump
+     */
+    proto_item_append_text(ti, " :RIC Descriptors: Block ACK Params");
+    proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_var_params, tvb,
+                        offset, tag_len-1, ENC_NA);
+    offset += tag_len -1;
+  }else {
+    /* 0,2-255 are reserved*/
+    proto_item_append_text(ti, " :RIC Descriptors: 0(Reserved)");
+  }
+  return offset;
+}
+static int
+dissect_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean basic, gboolean vs)
+{
   proto_item *ti;
   proto_tree *mcs_tree, *bit_tree;
 
   /* 16 byte Supported MCS set */
-  if(vs)
+  if (vs)
   {
     ti = proto_tree_add_string(tree, hf_ieee80211_mcsset_vs, tvb, offset, 16,
       basic ? "Basic MCS Set" : "MCS Set");
-  }else
+  } else
   {
     ti = proto_tree_add_string(tree, hf_ieee80211_mcsset, tvb, offset, 16,
       basic ? "Basic MCS Set" : "MCS Set");
@@ -6912,77 +9301,376 @@ dissect_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean basic, gbo
 /*  802.11n D1.10 - HT Information IE  */
 static int
 dissect_ht_info_ie_1_1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
-         guint32 tag_len, proto_item *ti_len)
+                       guint32 tag_len, proto_item *ti_len)
 {
   proto_item *cap_item;
   proto_tree *cap_tree;
 
   cap_tree = tree;
 
-  if (tag_len < 22) {
-    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
-                           "HT Information IE content length %u wrong, must be at least 22 bytes", tag_len);
-    return offset;
-  }
+  if (tag_len < 22) {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "HT Information IE content length %u wrong, must be at least 22 bytes", tag_len);
+    return offset;
+  }
+
+
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+
+  cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter1, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter1_tree);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_channel_offset, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_channel_width, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_rifs_mode, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_psmp_stas_only, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_service_interval_granularity, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+
+  cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter2, tvb,
+                    offset, 2, ENC_LITTLE_ENDIAN);
+  cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter2_tree);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_operating_mode, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_non_greenfield_sta_present, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_transmit_burst_limit, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_obss_non_ht_stas_present, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_1, tvb,
+                    offset, 2, ENC_LITTLE_ENDIAN);
+  offset += 2;
+
+  cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter3, tvb,
+                    offset, 2, ENC_LITTLE_ENDIAN);
+  cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter3_tree);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_2, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_beacon, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_cts_protection, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_beacon, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_lsig_txop_protection_full_support, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_active, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_phase, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_3, tvb,
+                    offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+
+  offset = dissect_mcs_set(tree, tvb, offset, TRUE, FALSE);
+
+  return offset;
+}
+
+
+static int
+dissect_wapi_param_set(tvbuff_t *tvb, packet_info *pinfo,
+                          proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len,
+                          proto_item *ti, int ftype)
+{
+  /* Parse the WAPI Parameter Set IE Here*/
+  proto_item *item;
+  proto_tree *subtree;
+  guint16 loop_cnt, version  = 1, akm_cnt  = 1, ucast_cnt = 1, bkid_cnt = 1;
+  guint8  akm_suite_type = 0, ucast_cipher_type = 0, mcast_cipher_type = 0;
+
+  version = tvb_get_letohs(tvb, offset);
+  proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  offset += 2;
+
+  /*MIN: 2 + (2+4)+ (2+4) + 4 + 2 + 0 (BKID CNT and LIST)  =20*/
+  if (tag_len < 20) {
+      expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                "tag_len is  %d, its neither WAPI not BSS-AC-Access-Delay", tag_len);
+    return offset;
+  }
+
+  if (version != 1) {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "Version of WAPI protocol is %d, must be = 1", version);
+    return offset;
+  }
+
+  /* AKM Suites: list can't be 0*/
+  akm_cnt = tvb_get_letohs(tvb, offset);
+  item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_akm_suite_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  offset += 2;
+  if (akm_cnt != 0) {
+    proto_item_append_text(ti, " : AKM Suite List:");
+    for (loop_cnt = 0; loop_cnt < akm_cnt; loop_cnt++) {
+      subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_akm_tree);
+      proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_oui, tvb, offset, 3, ENC_NA);
+      offset += 3;
+      akm_suite_type = tvb_get_guint8(tvb,offset);
+      proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+      offset += 1;
+      proto_item_append_text(ti, " (%d,%s)", loop_cnt+1,val_to_str(akm_suite_type,
+      ieee80211_wapi_suite_type_short,"Reserved: %d"));
+    }
+    proto_item_append_text(ti, " /");
+  } else {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Number of AKM suites is 0, must be min 1");
+    return offset;
+
+  }
+  /* Unicast Cipher Suites: list can't be 0*/
+  ucast_cnt = tvb_get_letohs(tvb, offset);
+  item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
+                      tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  offset += 2;
+  if (ucast_cnt != 0) {
+    proto_item_append_text(ti, " Unicast Cipher List:");
+    for (loop_cnt = 0; loop_cnt < ucast_cnt; loop_cnt++) {
+      subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_ucast_tree);
+      proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui, tvb, offset, 3, ENC_NA);
+      offset += 3;
+      ucast_cipher_type = tvb_get_guint8(tvb,offset);
+      proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+      offset += 1;
+      proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(ucast_cipher_type,ieee80211_wapi_cipher_type,"Reserved: %d"));
+    }
+  proto_item_append_text(ti, " /");
+  } else {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Number of Unicast Cipher suites is 0, must be min  1");
+    return offset;
+
+  }
+
+  /* Multicast Cipher Suites*/
+  proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui, tvb, offset, 3, ENC_NA);
+  offset += 3;
+  mcast_cipher_type = tvb_get_guint8(tvb,offset);
+  proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+  proto_item_append_text(ti, " Multicast Cipher: %s", val_to_str(mcast_cipher_type,ieee80211_wapi_cipher_type,"Reserved: %d"));
+
+  /* WAPI capability*/
+  item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_capab, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_preauth_tree);
+  proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_capab_preauth, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_capab_rsvd, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+
+  offset += 2;
+  /* BKID List: The list can be 0
+   * Applicable only for assoc/re-assoc
+   */
+  if (ftype == MGT_ASSOC_REQ || ftype == MGT_REASSOC_REQ ) {
+    bkid_cnt = tvb_get_letohs(tvb, offset);
+    proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+    if (bkid_cnt != 0) {
+      for (loop_cnt = 0; loop_cnt < bkid_cnt; loop_cnt++) {
+        proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_list, tvb, offset, 16, ENC_NA);
+        offset += 16;
+      }
+    }
+  }
+  return offset;
+}
+
+static int dissect_bss_max_idle_period(proto_tree *tree, tvbuff_t *tvb,
+                                       int offset)
+{
+  proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_period,
+                      tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  offset += 2;
+  proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_options_protected,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset++;
+  return offset;
+}
+
+static int add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
+                            int offset, int ftype);
+
+enum tfs_request_subelem_id {
+  TFS_REQ_SUBELEM_TFS = 1,
+  TFS_REQ_SUBELEM_VENDOR_SPECIFIC = 221
+};
+
+static const value_string tfs_request_subelem_ids[] = {
+  { TFS_REQ_SUBELEM_TFS, "TFS subelement" },
+  { TFS_REQ_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
+  { 0, NULL }
+};
+
+static int dissect_tfs_request(packet_info *pinfo, proto_tree *tree,
+                               tvbuff_t *tvb, int offset, guint32 tag_len,
+                               int ftype)
+{
+  int end = offset + tag_len;
+
+  proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_id,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset++;
+  proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_delete_after_match,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_notify,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset++;
+  if (offset + 1 >= end) {
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_WARN,
+                           "No TFS Request subelements in TFS Request");
+    return end;
+  }
+
+  while (offset + 1 < end) {
+    guint8 id, len;
+    int s_offset, s_end;
+
+    id = tvb_get_guint8(tvb, offset);
+    proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_id,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+    len = tvb_get_guint8(tvb, offset);
+    proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_len,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+    if (offset + len > end) {
+      expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
+                             "Not enough data for TFS Request subelement");
+      return end;
+    }
+    switch (id) {
+    case TFS_REQ_SUBELEM_TFS:
+      s_offset = offset;
+      s_end = offset + len;
+      while (s_offset < s_end) {
+        int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, ftype);
+        s_offset += tlen;
+      }
+      break;
+    default:
+      proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem,
+                          tvb, offset, len, ENC_NA);
+      break;
+    }
+    offset += len;
+  }
+
+  if (offset < end) {
+    proto_tree_add_text(tree, tvb, offset, end - offset,
+                        "Unexpected extra data");
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_WARN,
+                           "Extra data after TFS Subelements");
+  }
+
+  return end;
+}
+
+enum tfs_response_subelem_id {
+  TFS_RESP_SUBELEM_TFS_STATUS = 1,
+  TFS_RESP_SUBELEM_TFS = 2,
+  TFS_RESP_SUBELEM_VENDOR_SPECIFIC = 221
+};
+
+static const value_string tfs_response_subelem_ids[] = {
+  { TFS_RESP_SUBELEM_TFS_STATUS, "TFS Status subelement" },
+  { TFS_RESP_SUBELEM_TFS, "TFS subelement" },
+  { TFS_RESP_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
+  { 0, NULL }
+};
+
+static int dissect_tfs_response(packet_info *pinfo, proto_tree *tree,
+                                tvbuff_t *tvb, int offset, guint32 tag_len,
+                                int ftype)
+{
+  int end = offset + tag_len;
+
+  while (offset + 3 <= end) {
+    guint8 id, len;
+    int s_offset, s_end;
 
+    id = tvb_get_guint8(tvb, offset);
+    proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_id,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+    len = tvb_get_guint8(tvb, offset);
+    proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_len,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset++;
+    if (offset + len > end) {
+      expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
+                             "Not enough data for TFS Request subelement");
+      return end;
+    }
+    switch (id) {
+    case TFS_RESP_SUBELEM_TFS_STATUS:
+      proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_status,
+                          tvb, offset, 1, ENC_LITTLE_ENDIAN);
+      proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_id,
+                          tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
+      break;
+    case TFS_RESP_SUBELEM_TFS:
+      s_offset = offset;
+      s_end = offset + len;
+      while (s_offset < s_end) {
+        int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, ftype);
+        s_offset += tlen;
+      }
+      break;
+    default:
+      proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem,
+                          tvb, offset, len, ENC_NA);
+      break;
+    }
 
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset += 1;
+    offset += len;
+  }
 
-  cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter1, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter1_tree);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_channel_offset, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_channel_width, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_rifs_mode, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_psmp_stas_only, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_service_interval_granularity, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  offset += 1;
+  if (offset < end) {
+    proto_tree_add_text(tree, tvb, offset, end - offset,
+                        "Unexpected extra data");
+    expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_WARN,
+                           "Extra data after TFS Status subelements");
+  }
 
-  cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter2, tvb,
-                    offset, 2, ENC_LITTLE_ENDIAN);
-  cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter2_tree);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_operating_mode, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_non_greenfield_sta_present, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_transmit_burst_limit, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_obss_non_ht_stas_present, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_1, tvb,
-                    offset, 2, ENC_LITTLE_ENDIAN);
-  offset += 2;
+  return end;
+}
 
-  cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter3, tvb,
-                    offset, 2, ENC_LITTLE_ENDIAN);
-  cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter3_tree);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_2, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_beacon, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_cts_protection, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  offset += 1;
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_beacon, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_lsig_txop_protection_full_support, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_active, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_phase, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_3, tvb,
-                    offset, 1, ENC_LITTLE_ENDIAN);
-  offset += 1;
+static const value_string wnm_sleep_mode_action_types[] = {
+  { 0, "Enter WNM-Sleep Mode" },
+  { 1, "Exit WNM-Sleep Mode" },
+  { 0, NULL }
+};
 
-  offset = dissect_mcs_set(tree, tvb, offset, TRUE, FALSE);
+static const value_string wnm_sleep_mode_response_status_vals[] = {
+  { 0, "Enter/Exit WNM-Sleep Mode Accept" },
+  { 1, "Exit WNM-Sleep Mode Accept, GTK/IGTK update required" },
+  { 2, "Denied. The AP is unable to perform the requested action." },
+  { 3, "Denied temporarily. The AP is unable to perform the requested action "
+    "at the current time. The request can be submitted again at a later time."
+  },
+  { 4, "Denied. Due to the pending key expiration." },
+  { 5, "Denied. The requested action was not granted due to other WNM services "
+    "in use by the requesting STA." },
+  { 0, NULL }
+};
 
+static int dissect_wnm_sleep_mode(proto_tree *tree, tvbuff_t *tvb, int offset)
+{
+  proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_action_type,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset++;
+  proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_response_status,
+                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset++;
+  proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_interval,
+                      tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  offset += 2;
   return offset;
 }
 
@@ -6993,7 +9681,8 @@ static const value_string time_adv_timing_capab_vals[] = {
   { 0, NULL }
 };
 
-static int dissect_time_adv(proto_tree *tree, tvbuff_t *tvb, int offset)
+static int
+dissect_time_adv(proto_tree *tree, tvbuff_t *tvb, int offset)
 {
   guint8 capab;
   proto_item *item;
@@ -7004,7 +9693,7 @@ static int dissect_time_adv(proto_tree *tree, tvbuff_t *tvb, int offset)
   capab = tvb_get_guint8(tvb, offset);
   proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_timing_capab,
                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset++;
+  offset += 1;
 
   switch (capab) {
   case 1:
@@ -7028,102 +9717,361 @@ static int dissect_time_adv(proto_tree *tree, tvbuff_t *tvb, int offset)
     tm.tm_mon = tvb_get_guint8(tvb, offset) - 1;
     proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_month,
                         tvb, offset, 1, ENC_LITTLE_ENDIAN);
-    offset++;
+    offset += 1;
     tm.tm_mday = tvb_get_guint8(tvb, offset);
     proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_day,
                         tvb, offset, 1, ENC_LITTLE_ENDIAN);
-    offset++;
+    offset += 1;
     tm.tm_hour = tvb_get_guint8(tvb, offset);
     proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_hours,
                         tvb, offset, 1, ENC_LITTLE_ENDIAN);
-    offset++;
+    offset += 1;
     tm.tm_min = tvb_get_guint8(tvb, offset);
     proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_minutes,
                         tvb, offset, 1, ENC_LITTLE_ENDIAN);
-    offset++;
+    offset += 1;
     tm.tm_sec = tvb_get_guint8(tvb, offset);
     proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_seconds,
                         tvb, offset, 1, ENC_LITTLE_ENDIAN);
-    offset++;
+    offset += 1;
     proto_tree_add_item(subtree,
                         hf_ieee80211_tag_time_adv_time_value_milliseconds,
                         tvb, offset, 2, ENC_LITTLE_ENDIAN);
     offset += 2;
-    proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
-                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
-    offset++;
-
-    tm.tm_isdst = -1;
-    t = mktime(&tm);
-    if (t != -1) {
-      t += last_timestamp / 1000000;
-      now = localtime(&t);
-      if (now)
-        proto_item_append_text(item,
-                               ": current time=%u-%02u-%02u %02u:%02u:%02u",
-                               now->tm_year + 1900, now->tm_mon + 1,
-                               now->tm_mday, now->tm_hour, now->tm_min,
-                               now->tm_sec);
-    }
-
-    proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
-                        tvb, offset, 5, ENC_NA);
-    offset += 5;
-
-    proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
-                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
-    offset++;
-    break;
+    proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset += 1;
+
+    tm.tm_isdst = -1;
+    t = mktime(&tm);
+    if (t != -1) {
+      t += (time_t)(last_timestamp / 1000000);
+      now = localtime(&t);
+      if (now)
+        proto_item_append_text(item,
+                               ": current time=%u-%02u-%02u %02u:%02u:%02u",
+                               now->tm_year + 1900, now->tm_mon + 1,
+                               now->tm_mday, now->tm_hour, now->tm_min,
+                               now->tm_sec);
+    }
+
+    proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
+                        tvb, offset, 5, ENC_NA);
+    offset += 5;
+
+    proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
+                        tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    offset += 1;
+    break;
+  }
+
+  return offset;
+}
+
+static int
+dissect_time_zone(proto_tree *tree, tvbuff_t *tvb, int offset,
+                  guint32 tag_len)
+{
+  proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
+                      ENC_ASCII|ENC_NA);
+  return offset + tag_len;
+}
+
+static int
+dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo,
+                          proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len,
+                          int tag_end, proto_item *ti)
+{
+  if (tag_len < 1) {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "AP Channel Report length %u wrong, must be > 1", tag_len);
+    return offset;
+  }
+
+  proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_regulatory_class, tvb,
+                      offset, 1, ENC_LITTLE_ENDIAN);
+  proto_item_append_text(ti, ": Regulatory Class %u, Channel List :", tvb_get_guint8(tvb, offset));
+  offset += 1;
+
+  while (offset < tag_end)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA);
+    proto_item_append_text(ti, " %u,", tvb_get_guint8(tvb, offset));
+    offset += 1;
+  }
+  return offset;
+}
+static int
+dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo,
+                                    proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
+{
+
+  if (tag_len != 1) {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
+    return offset;
+  }
+
+  proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
+                      offset, 1, ENC_LITTLE_ENDIAN);
+
+  offset += 1;
+
+  return offset;
+}
+
+static int
+dissect_bss_avg_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
+                                    proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
+{
+
+  if (tag_len != 1) {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "BSS Average Access Delay length %u wrong, must be = 1", tag_len);
+    return offset;
+  }
+
+  proto_tree_add_item(tree, hf_ieee80211_tag_bss_ap_avg_access_delay, tvb,
+                      offset, 1, ENC_LITTLE_ENDIAN);
+
+  offset += 1;
+
+  return offset;
+}
+
+static int
+dissect_antenna_ie(tvbuff_t *tvb, packet_info *pinfo,
+                                    proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
+{
+
+  if (tag_len != 1) {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "Antenna length %u wrong, must be = 1", tag_len);
+    return offset;
+  }
+
+  proto_tree_add_item(tree, hf_ieee80211_tag_antenna_id, tvb,
+                      offset, 1, ENC_LITTLE_ENDIAN);
+
+  offset += 1;
+
+  return offset;
+}
+
+static int
+dissect_rsni_ie(tvbuff_t *tvb, packet_info *pinfo,
+                                    proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
+{
+
+  if (tag_len != 1) {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "RSNI length %u wrong, must be = 1", tag_len);
+    return offset;
+  }
+
+  proto_tree_add_item(tree, hf_ieee80211_tag_rsni, tvb,
+                      offset, 1, ENC_LITTLE_ENDIAN);
+
+  offset += 1;
+
+  return offset;
+}
+
+static int
+dissect_bss_available_admission_capacity_ie(tvbuff_t *tvb, packet_info *pinfo,
+                                    proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
+{
+  proto_item *ti;
+  proto_tree *btree;
+  guint16 bitmask;
+  if (tag_len < 2) {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
+                           "BSS Available Admission Capacity length %u wrong, must > = 2", tag_len);
+    return offset;
+  }
+
+  ti = proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask, tvb,
+                      offset, 2, ENC_LITTLE_ENDIAN);
+  btree = proto_item_add_subtree(ti, ett_tag_bss_bitmask_tree);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  bitmask = tvb_get_letohs(tvb, offset);
+  offset += 2;
+
+  if(bitmask & BSS_BITMASK_UP0)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_UP1)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_UP2)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_UP3)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_UP4)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_UP5)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_UP6)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_UP7)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_AC0)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_AC1)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_AC2)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
+  }
+  if(bitmask & BSS_BITMASK_AC3)
+  {
+    proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    offset += 2;
   }
-
   return offset;
 }
 
-static int dissect_time_zone(proto_tree *tree, tvbuff_t *tvb, int offset,
-                             guint32 tag_len)
-{
-  proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
-                      ENC_ASCII|ENC_NA);
-  return offset + tag_len;
-}
-
 static int
-dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo,
-         proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len, int tag_end, proto_item *ti)
+dissect_bss_ac_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
+                                    proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
 {
-  if (tag_len < 1) {
+
+  if (tag_len == 4) {
     expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
-                           "AP Channel Report length %u wrong, must be > 1", tag_len);
+                           "BSS AC Access Delay length %u wrong, must = 4", tag_len);
     return offset;
   }
 
-  proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_regulatory_class, tvb,
-                      offset, 1, ENC_LITTLE_ENDIAN);
-  proto_item_append_text(ti, ": Regulatory Class %u, Channel List :", tvb_get_guint8(tvb, offset) );
+  /* TODO: Display the scaled representation of the average
+    medium access delay (a big (precalculed) value_string ?)
+    See 8.4.2.46 BSS AC Access Delay element ... */
+
+  proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_be, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+  proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_bk, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+  proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  offset += 1;
+  proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vo, tvb, offset, 1, ENC_LITTLE_ENDIAN);
   offset += 1;
 
-  while(offset < tag_end)
-  {
-    proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA);
-    proto_item_append_text(ti, " %u,", tvb_get_guint8(tvb, offset) );
-    offset += 1;
-  }
   return offset;
 }
+
 static int
-dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo,
-         proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
+dissect_rm_enabled_capabilities_ie(packet_info *pinfo, proto_tree *tree,
+                         proto_item *ti, proto_item *ti_len,
+                         guint32 tag_len, tvbuff_t *tvb,
+                         int offset, int tag_end _U_)
 {
+  proto_item *ti_ex_cap;
+  proto_tree *ex_cap_tree;
 
-  if (tag_len != 1) {
-    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
-                           "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
+  if (tag_len != 5)
+  {
+    expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "RM Enabled Capabilities length %u wrong, must = 4", tag_len);
     return offset;
   }
+  proto_item_append_text(ti, " (%d octets)", tag_len);
+
+  /* RM Enabled Capability octet 1 */
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 1)");
+  ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_rm_cap1);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b0, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b1, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b2, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b3, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b4, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b5, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b6, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b7, tvb, offset, 1, ENC_NA);
+  offset += 1;
 
-  proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
-                      offset, 1, ENC_LITTLE_ENDIAN);
+  /* RM Enabled Capability octet 2 */
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 2)");
+  ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_rm_cap2);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b8, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b9, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b10, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b11, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b12, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b13, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b14, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b15, tvb, offset, 1, ENC_NA);
+  offset += 1;
+
+  /* RM Enabled Capability octet 3 */
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 3)");
+  ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_rm_cap3);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b16, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b17, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b18to20, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b21to23, tvb, offset, 1, ENC_NA);
+  offset += 1;
+
+  /* RM Enabled Capability octet 4 */
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 4)");
+  ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_rm_cap4);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b24to26, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b27, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b28, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b29, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b30, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b31, tvb, offset, 1, ENC_NA);
+  offset += 1;
 
+  /* RM Enabled Capability octet 5 */
+  ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA);
+  proto_item_append_text(ti_ex_cap, " (octet 5)");
+  ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_rm_cap5);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b32, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b33, tvb, offset, 1, ENC_NA);
+  proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_o5, tvb, offset, 1, ENC_NA);
   offset += 1;
 
   return offset;
@@ -7131,14 +10079,14 @@ dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo,
 
 static int
 dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
-         guint32 tag_len, proto_item *ti_len, gboolean vs )
+                         guint32 tag_len, proto_item *ti_len, gboolean vs)
 {
   proto_item *cap_item, *ti;
   proto_tree *cap_tree;
 
   if (tag_len != 26) {
     expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
-                           "HT Capability IE length %u wrong, must be = 26", tag_len);
+                           "HT Capabilities IE length %u wrong, must be = 26", tag_len);
     return offset;
   }
 
@@ -7146,7 +10094,7 @@ dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, in
     return offset;
 
   /* 2 byte HT Capabilities  Info*/
-  if(vs)
+  if (vs)
   {
     cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_vs_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
   }
@@ -7155,29 +10103,28 @@ dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, in
     cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
   }
   cap_tree = proto_item_add_subtree(cap_item, ett_ht_cap_tree);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_ldpc_coding, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_chan_width, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_sm_pwsave, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_green, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_short20, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_short40, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_tx_stbc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset += 1;
-
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_rx_stbc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_delayed_block_ack, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_max_amsdu, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_dss_cck_40, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_psmp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_40_mhz_intolerant, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  proto_tree_add_item(cap_tree, hf_ieee80211_ht_l_sig, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset += 1;
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_ldpc_coding, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_chan_width, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_sm_pwsave, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_green, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_short20, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_short40, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_tx_stbc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_rx_stbc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_delayed_block_ack, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_max_amsdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_dss_cck_40, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_psmp, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_40_mhz_intolerant, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(cap_tree, hf_ieee80211_ht_l_sig, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  offset += 2;
 
   /* 1 byte A-MPDU Parameters */
-  if(vs)
+  if (vs)
   {
     cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  }else
+  } else
   {
     cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam, tvb, offset, 1, ENC_LITTLE_ENDIAN);
   }
@@ -7193,7 +10140,7 @@ dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, in
 
 
   /* 2 byte HT Extended Capabilities */
-  if(vs)
+  if (vs)
   {
     cap_item = proto_tree_add_item(tree, hf_ieee80211_htex_vs_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
   } else {
@@ -7210,7 +10157,7 @@ dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, in
 
 
   /* 4 byte TxBF capabilities */
-  if(vs)
+  if (vs)
   {
     cap_item = proto_tree_add_item(tree, hf_ieee80211_txbf_vs, tvb, offset, 4, ENC_LITTLE_ENDIAN);
   } else {
@@ -7224,7 +10171,7 @@ dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, in
   proto_tree_add_item(cap_tree, hf_ieee80211_txbf_tx_ndp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
   proto_tree_add_item(cap_tree, hf_ieee80211_txbf_impl_txbf, tvb, offset, 1, ENC_LITTLE_ENDIAN);
   proto_tree_add_item(cap_tree, hf_ieee80211_txbf_calib, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset +=1;
+  offset += 1;
 
   proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_csi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
   proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_uncomp_fm, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -7232,7 +10179,7 @@ dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, in
   proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_bf_csi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
   proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_uncomp_fm_feed, tvb, offset, 1, ENC_LITTLE_ENDIAN);
   proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_comp_fm_feed, tvb, offset, 2, ENC_LITTLE_ENDIAN);
-  offset +=1;
+  offset += 1;
 
   proto_tree_add_item(cap_tree, hf_ieee80211_txbf_min_group, tvb, offset, 1, ENC_LITTLE_ENDIAN);
   proto_tree_add_item(cap_tree, hf_ieee80211_txbf_csi_num_bf_ant, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -7246,7 +10193,7 @@ dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, in
   offset += 1;
 
   /* 1 byte Antenna Selection (ASEL) capabilities */
-  if(vs)
+  if (vs)
   {
     cap_item = proto_tree_add_item(tree, hf_ieee80211_antsel_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
   }
@@ -7271,7 +10218,7 @@ dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, in
 
 static int
 dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
-         guint32 tag_len, proto_item *ti_len)
+                       guint32 tag_len, proto_item *ti_len)
 {
   proto_item *cap_item;
   proto_tree *cap_tree;
@@ -7365,7 +10312,7 @@ dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
  */
 
 static void
-dissect_ht_control(proto_tree *tree, tvbuff_t * tvb, int offset)
+dissect_ht_control(proto_tree *tree, tvbuff_t *tvb, int offset)
 {
   proto_item *ti;
   proto_tree *htc_tree, *lac_subtree;
@@ -7379,130 +10326,153 @@ dissect_ht_control(proto_tree *tree, tvbuff_t * tvb, int offset)
   /* Start: Link Adaptation Control */
   ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_lac, tvb, offset, 2, ENC_LITTLE_ENDIAN);
   lac_subtree = proto_item_add_subtree(ti, ett_htc_tree);
-  proto_tree_add_boolean(lac_subtree, hf_ieee80211_htc_lac_reserved, tvb, offset, 1, htc);
-  proto_tree_add_boolean(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 1, htc);
+  proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 1, ENC_LITTLE_ENDIAN);
 
   if (HTC_IS_ASELI(htc)) {
-    proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 1, htc);
+    proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 1, ENC_LITTLE_ENDIAN);
   } else {
-    proto_tree_add_boolean(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 1, htc);
-    if (HTC_LAC_MAI_MRQ(htc)){
-      proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 1, htc);
+    proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+    if (HTC_LAC_MAI_MRQ(htc)) {
+      proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
     } else {
-      proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 1, htc);
+      proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
     }
   }
 
-  proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, htc);
-  offset++;
+  proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
 
   if (HTC_IS_ASELI(htc)) {
-    proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 1, htc);
-    proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 1, htc);
+    proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+    proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 2, ENC_LITTLE_ENDIAN);
   } else {
-    proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 1, htc);
+    proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 2, ENC_LITTLE_ENDIAN);
   }
+  offset += 2;
   /* End: Link Adaptation Control */
 
-  offset++;
-  htc = tvb_get_letohs(tvb, offset);
+  proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 2, ENC_LITTLE_ENDIAN);
 
-  proto_tree_add_uint(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 1, htc);
-  proto_tree_add_uint(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 1, htc);
-  proto_tree_add_uint(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 1, htc);
-  proto_tree_add_uint(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 1, htc);
+  proto_tree_add_item(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+  proto_tree_add_item(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
 
-  offset++;
-  proto_tree_add_boolean(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 1, htc);
-  proto_tree_add_uint(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 1, htc);
-  proto_tree_add_boolean(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 1, htc);
-  proto_tree_add_boolean(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 1, htc);
+  /* offset += 2; */
 }
 
 static void
-dissect_frame_control(proto_tree * tree, tvbuff_t * tvb, gboolean wlan_broken_fc,
-                      guint32 offset)
+dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, gboolean wlan_broken_fc,
+                      guint32 offset, packet_info *pinfo)
 {
   guint16 fcf, flags, frame_type_subtype;
   proto_tree *fc_tree, *flag_tree;
-  proto_item *fc_item, *flag_item, *hidden_item;
+  proto_item *fc_item, *flag_item, *hidden_item, *ti;
 
   fcf = FETCH_FCF(offset);
 
   flags = FCF_FLAGS(fcf);
   frame_type_subtype = COMPOSE_FRAME_TYPE(fcf);
 
-  proto_tree_add_uint (tree, hf_ieee80211_fc_frame_type_subtype,
-    tvb, wlan_broken_fc?offset+1:offset, 1,
-    frame_type_subtype);
-
-  fc_item = proto_tree_add_uint_format (tree, hf_ieee80211_fc_field, tvb,
-    offset, 2, fcf, "Frame Control: 0x%04X (%s)",
-    fcf, wlan_broken_fc?"Swapped":"Normal");
+  /* Swap offset... */
+  if(wlan_broken_fc)
+  {
+    offset += 1;
+  }
 
-  fc_tree = proto_item_add_subtree (fc_item, ett_fc_tree);
+  proto_tree_add_uint(tree, hf_ieee80211_fc_frame_type_subtype, tvb, offset, 1, frame_type_subtype);
 
-  proto_tree_add_uint (fc_tree, hf_ieee80211_fc_proto_version, tvb, wlan_broken_fc?offset+1:offset, 1,
-    FCF_PROT_VERSION (fcf));
+  fc_item = proto_tree_add_item(tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_BIG_ENDIAN);
 
-  proto_tree_add_uint (fc_tree, hf_ieee80211_fc_frame_type, tvb, wlan_broken_fc?offset+1:offset, 1,
-    FCF_FRAME_TYPE (fcf));
+  fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
 
-  proto_tree_add_uint (fc_tree, hf_ieee80211_fc_frame_subtype, tvb, wlan_broken_fc?offset+1:offset, 1,
-    FCF_FRAME_SUBTYPE (fcf));
+  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);
+  offset += 1;
 
-  flag_item = proto_tree_add_uint_format (fc_tree, hf_ieee80211_fc_flags, tvb,
-    wlan_broken_fc?offset:offset+1, 1,
-    flags, "Flags: 0x%X", flags);
+  /* Reswap offset...*/
+  if(wlan_broken_fc)
+  {
+    offset -= 1;
+    proto_item_append_text(fc_item, "(Swapped)");
+  }
 
+  /* 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_uint (flag_tree, hf_ieee80211_fc_data_ds, tvb, wlan_broken_fc?offset:offset+1, 1,
-    FLAGS_DS_STATUS (flags));
-  hidden_item = proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_to_ds, tvb, offset+1, 1, 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_boolean (flag_tree, hf_ieee80211_fc_from_ds, tvb, offset+1, 1, flags);
+  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_boolean (flag_tree, hf_ieee80211_fc_more_frag, tvb, wlan_broken_fc?offset:offset+1, 1,
-    flags);
-  proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_retry, tvb, wlan_broken_fc?offset:offset+1, 1,
-    flags);
-  proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, wlan_broken_fc?offset:offset+1, 1,
-    flags);
-  proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_more_data, tvb, wlan_broken_fc?offset:offset+1, 1,
-    flags);
-  proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_protected, tvb, wlan_broken_fc?offset:offset+1, 1,
-    flags);
-  proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_order, tvb, wlan_broken_fc?offset:offset+1, 1,
-    flags);
+  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_format(pinfo, ti, PI_SEQUENCE, PI_NOTE, "Retransmission (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);
+  proto_tree_add_item(flag_tree, hf_ieee80211_fc_order, tvb, offset, 1, ENC_NA);
+}
+
+static void
+dissect_durid(proto_tree *hdr_tree, tvbuff_t *tvb, guint16 fts, gint offset)
+{
+  guint16 durid = tvb_get_letohs(tvb, offset);
+
+  if (durid < 0x8000) {
+    proto_tree_add_uint_format_value(hdr_tree, hf_ieee80211_did_duration, tvb,
+      offset, 2, durid, "%u microseconds", durid);
+  } else if (((durid & 0xC000) == 0xC000) &&
+             ((durid & 0x3FFF) > 0) && ((durid & 0x3FFF) <= 2007) &&
+             (fts == CTRL_PS_POLL)) {
+    proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, 2, offset,
+      ENC_LITTLE_ENDIAN);
+  } else if (durid == 0x8000) {
+    proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
+      offset, 2, durid, "Duration/ID: %u", durid);
+  } else {
+    proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
+      offset, 2, durid, "Duration/ID: %u (reserved)", durid & 0x3FFF);
+  }
 }
 
+
 static void
 dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
                     guint offset, proto_item *item, proto_item *ti_len, gint tag_len)
 {
 
-  proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, 3, "802.11n (Pre) OUI");
-  /* 802.11n OUI  Information Element */
-  if (4 <= tag_len && !tvb_memeql(tvb, offset, PRE_11N_OUI"\x33", 4)) {
-    proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 3, 1,"802.11n (Pre) HT information" );
+  guint8 type;
 
-    dissect_ht_capability_ie(tvb, pinfo, tree, offset+4, tag_len - 4, ti_len, TRUE);
-    proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
-  }
-  else {
-    if (4 <= tag_len && !tvb_memeql(tvb, offset, PRE_11N_OUI"\x34", 4)) {
-      proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 3, 1, "HT additional information (802.11n D1.00)");
+  proto_tree_add_item(tree, hf_ieee80211_ht_pren_type, tvb, offset, 1, ENC_NA);
+  type = tvb_get_guint8(tvb, offset);
+  offset += 1;
+  tag_len -= 1;
+
+
+  switch(type){
+    case 51:
+      dissect_ht_capability_ie(tvb, pinfo, tree, offset, tag_len, ti_len, TRUE);
+      proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
+    break;
 
-      dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset+4, tag_len - 4, ti_len);
+    case 52:
+      dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset, tag_len, ti_len);
       proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
-    }
-    else {
-        proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 3, 1, "Unknown type");
-        proto_item_append_text(item, ": 802.11n (pre) Unknown type");
-        proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 4,
-                  tag_len - 4, "Not interpreted");
-    }
+    break;
+
+    default:
+      proto_tree_add_item(tree, hf_ieee80211_ht_pren_unknown, tvb, offset, tag_len, ENC_NA);
+    break;
   }
+
 }
 
 static guint
@@ -7511,11 +10481,11 @@ dissect_interworking(packet_info *pinfo, proto_tree *tree, proto_item *item,
 {
   guint8 len;
 
-  offset++;
+  offset += 1;
   len = tvb_get_guint8(tvb, offset);
-  offset++;
+  offset += 1;
 
-  if (tvb_reported_length_remaining(tvb, offset) < len || len == 0) {
+  if ((tvb_reported_length_remaining(tvb, offset) < len) || (len == 0)) {
     expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
                            "Truncated Interworking element");
     return offset;
@@ -7531,20 +10501,20 @@ dissect_interworking(packet_info *pinfo, proto_tree *tree, proto_item *item,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
   proto_tree_add_item(tree, hf_ieee80211_tag_interworking_uesa,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
 
-  if (len == 1 + 2 || len == 1 + 2 + 6) {
+  if ((len == (1 + 2)) || (len == (1 + 2 + 6))) {
     dissect_venue_info(tree, tvb, offset);
     offset += 2;
   }
 
-  if (len == 1 + 6 || len == 1 + 2 + 6) {
+  if ((len == (1 + 6)) || (len == (1 + 2 + 6))) {
     proto_tree_add_item(tree, hf_ieee80211_tag_interworking_hessid,
                         tvb, offset, 6, ENC_NA);
     offset += 6;
   }
 
-  if (len != 1 && len != 1 + 2 && len != 1 + 6 && len != 1 + 2 + 6) {
+  if ((len != 1) && (len != (1 + 2)) && (len != (1 + 6)) && (len != (1 + 2 + 6))) {
     expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
                            "Invalid Interworking element length");
   }
@@ -7559,12 +10529,12 @@ dissect_roaming_consortium(packet_info *pinfo, proto_tree *tree,
   guint8 len, oi_lens, oi1_len, oi2_len;
   int end;
 
-  offset++;
+  offset += 1;
   len = tvb_get_guint8(tvb, offset);
-  offset++;
+  offset += 1;
   end = offset + len;
 
-  if (tvb_reported_length_remaining(tvb, offset) < len || len < 2) {
+  if ((tvb_reported_length_remaining(tvb, offset) < len) || (len < 2)) {
     expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
                            "Truncated Roaming Consortium element");
     return 2 + len;
@@ -7572,7 +10542,7 @@ dissect_roaming_consortium(packet_info *pinfo, proto_tree *tree,
 
   proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
 
   oi_lens = tvb_get_guint8(tvb, offset);
   oi1_len = oi_lens & 0x0f;
@@ -7581,7 +10551,7 @@ dissect_roaming_consortium(packet_info *pinfo, proto_tree *tree,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
   proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2_len,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
 
   if (offset + oi1_len > end) {
     expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
@@ -7619,29 +10589,45 @@ dissect_roaming_consortium(packet_info *pinfo, proto_tree *tree,
 /*           Dissect and add tagged (optional) fields to proto tree          */
 /* ************************************************************************* */
 
-
 static int beacon_padding = 0; /* beacon padding bug */
 
-static int ieee80211_tag_ssid(packet_info *pinfo, proto_tree *tree,
-                              proto_item *ti, proto_item *ti_len,
-                              guint32 tag_len, tvbuff_t *tvb, int offset)
+static int
+ieee80211_tag_ssid(packet_info *pinfo, proto_tree *tree,
+                   proto_item *ti, proto_item *ti_len,
+                   guint32 tag_len, tvbuff_t *tvb, int offset)
 {
   /* 7.3.2.1 SSID element (0) */
-  guint8 *ssid; /* The SSID may consist of arbitrary bytes */
+  gchar *ssid; /* The SSID may consist of arbitrary bytes */
+  const gchar *ssid_end;
+  gint ssid_len = tag_len;
 
   if (beacon_padding != 0) /* padding bug */
     return offset;
 
-  if(tag_len > MAX_SSID_LEN) {
+  if (ssid_len > MAX_SSID_LEN) {
     expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
                            "SSID length (%u) greater than maximum (%u)",
-                           tag_len, MAX_SSID_LEN);
+                           ssid_len, MAX_SSID_LEN);
+    ssid_len = MAX_SSID_LEN;
+  }
+
+  ssid = tvb_get_ephemeral_string(tvb, offset + 2, ssid_len);
+  if (ssid_len == (gint)tag_len) {
+    AirPDcapSetLastSSID(&airpdcap_ctx, (CHAR *) ssid, ssid_len);
+  }
+  g_utf8_validate(ssid, ssid_len, &ssid_end);
+  ssid[ssid_end - ssid] = '\0';
+  if ((gint)(ssid_end - ssid) == ssid_len) {
+    proto_tree_add_item(tree, hf_ieee80211_tag_ssid, tvb, offset + 2, tag_len,
+                        ENC_ASCII|ENC_NA);
+  } else {
+    emem_strbuf_t *ssid_sb = ep_strbuf_new(ssid);
+    ep_strbuf_append(ssid_sb, " [truncated]");
+    proto_tree_add_string_format_value(tree, hf_ieee80211_tag_ssid, tvb, offset + 2, tag_len,
+                        ssid, "%s", ssid_sb->str);
+    ssid = ssid_sb->str;
   }
 
-  ssid = tvb_get_ephemeral_string(tvb, offset + 2, tag_len);
-  AirPDcapSetLastSSID(&airpdcap_ctx, (CHAR *) ssid, tag_len);
-  proto_tree_add_item(tree, hf_ieee80211_tag_ssid, tvb, offset + 2, tag_len,
-                      ENC_ASCII|ENC_NA);
   if (tag_len > 0) {
     proto_item_append_text(ti, ": %s", ssid);
 
@@ -7656,15 +10642,16 @@ static int ieee80211_tag_ssid(packet_info *pinfo, proto_tree *tree,
     col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Broadcast");
   }
 
-  beacon_padding++; /* padding bug */
+  beacon_padding += 1; /* padding bug */
 
   return offset + 2 + tag_len;
 }
 
-static int ieee80211_tag_supp_rates(packet_info *pinfo, proto_tree *tree,
-                                    proto_item *ti, proto_item *ti_len,
-                                    guint32 tag_len, tvbuff_t *tvb,
-                                    int offset, int tag_end)
+static int
+ieee80211_tag_supp_rates(packet_info *pinfo, proto_tree *tree,
+                         proto_item *ti, proto_item *ti_len,
+                         guint32 tag_len, tvbuff_t *tvb,
+                         int offset, int tag_end)
 {
   /* 7.3.2.2 Supported Rates element (1) */
   if (tag_len < 1) {
@@ -7680,10 +10667,10 @@ static int ieee80211_tag_supp_rates(packet_info *pinfo, proto_tree *tree,
     proto_tree_add_item(tree, hf_ieee80211_tag_supp_rates, tvb, offset, 1,
                         ENC_BIG_ENDIAN);
     proto_item_append_text(ti, " %s,",
-                           val_to_str_const(tvb_get_guint8(tvb, offset),
-                                            ieee80211_supported_rates_vals,
-                                            "Unknown Rate") );
-    offset++;
+                           val_to_str_ext_const(tvb_get_guint8(tvb, offset),
+                                                &ieee80211_supported_rates_vals_ext,
+                                                "Unknown Rate"));
+    offset += 1;
   }
 
   proto_item_append_text(ti, " [Mbit/sec]");
@@ -7691,9 +10678,10 @@ static int ieee80211_tag_supp_rates(packet_info *pinfo, proto_tree *tree,
   return offset;
 }
 
-static int ieee80211_tag_fh_parameter(packet_info *pinfo, proto_tree *tree,
-                                      proto_item *ti_len, guint32 tag_len,
-                                      tvbuff_t *tvb, int offset)
+static int
+ieee80211_tag_fh_parameter(packet_info *pinfo, proto_tree *tree,
+                           proto_item *ti_len, guint32 tag_len,
+                           tvbuff_t *tvb, int offset)
 {
   /* 7.3.2.3 FH Parameter Set element (2) */
   if (tag_len < 5) {
@@ -7710,49 +10698,51 @@ static int ieee80211_tag_fh_parameter(packet_info *pinfo, proto_tree *tree,
 
   proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_set,
                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_pattern,
                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_index,
                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset++;
+  offset += 1;
 
   return offset;
 }
 
-static int ieee80211_tag_ds_parameter(packet_info *pinfo, proto_tree *tree,
-                                      proto_item *ti, proto_item *ti_len,
-                                      guint32 tag_len, tvbuff_t *tvb,
-                                      int offset)
+static int
+ieee80211_tag_ds_parameter(packet_info *pinfo, proto_tree *tree,
+                           proto_item *ti, proto_item *ti_len,
+                           guint32 tag_len, tvbuff_t *tvb,
+                           int offset)
 {
   /* 7.3.2.4 DS Parameter Set element (3) */
   if (tag_len != 1) {
     expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
-                           "Tag length %u wrong, must be = 1", tag_len);
+        "Tag length %u wrong, must be = 1", tag_len);
     return offset;
   }
 
   offset += 2;
 
   proto_tree_add_item(tree, hf_ieee80211_tag_ds_param_channel,
-                      tvb, offset, 1, ENC_BIG_ENDIAN);
+        tvb, offset, 1, ENC_BIG_ENDIAN);
 
   proto_item_append_text(ti, ": Current Channel: %u",
                          tvb_get_guint8(tvb, offset));
 
   wlan_stats.channel = tvb_get_guint8(tvb, offset);
-  offset++;
+  offset += 1;
 
   return offset;
 }
 
-static int ieee80211_tag_cf_parameter(packet_info *pinfo, proto_tree *tree,
-                                      proto_item *ti, proto_item *ti_len,
-                                      guint32 tag_len, tvbuff_t *tvb,
-                                      int offset)
+static int
+ieee80211_tag_cf_parameter(packet_info *pinfo, proto_tree *tree,
+                           proto_item *ti, proto_item *ti_len,
+                           guint32 tag_len, tvbuff_t *tvb,
+                           int offset)
 {
   /* 7.3.2.5 CF Parameter Set element (4) */
   if (tag_len != 6) {
@@ -7766,12 +10756,12 @@ static int ieee80211_tag_cf_parameter(packet_info *pinfo, proto_tree *tree,
   proto_tree_add_item(tree, hf_ieee80211_tag_cfp_count,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
   proto_item_append_text(ti, ": CFP count %u", tvb_get_guint8(tvb, offset));
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tag_cfp_period,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
   proto_item_append_text(ti, ": CFP Period %u", tvb_get_guint8(tvb, offset));
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tag_cfp_max_duration,
                       tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -7783,14 +10773,15 @@ static int ieee80211_tag_cf_parameter(packet_info *pinfo, proto_tree *tree,
                       tvb, offset, 2, ENC_LITTLE_ENDIAN);
   proto_item_append_text(ti, ": CFP Dur Remaining %u",
                          tvb_get_letohs(tvb, offset));
-  offset++;
+  offset += 1;
 
   return offset;
 }
 
-static int ieee80211_tag_tim(packet_info *pinfo, proto_tree *tree,
-                             proto_item *ti, proto_item *ti_len,
-                             guint32 tag_len, tvbuff_t *tvb, int offset)
+static int
+ieee80211_tag_tim(packet_info *pinfo, proto_tree *tree,
+                  proto_item *ti, proto_item *ti_len,
+                  guint32 tag_len, tvbuff_t *tvb, int offset)
 {
   proto_tree *bmapctl_tree;
   proto_item *bmapctl_item;
@@ -7807,12 +10798,12 @@ static int ieee80211_tag_tim(packet_info *pinfo, proto_tree *tree,
   proto_tree_add_item(tree, hf_ieee80211_tim_dtim_count,
                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
   proto_item_append_text(ti, ": DTIM %u of", tvb_get_guint8(tvb, offset));
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tim_dtim_period,
                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
   proto_item_append_text(ti, " %u bitmap", tvb_get_guint8(tvb, offset + 1));
-  offset++;
+  offset += 1;
 
   bmapctl_item = proto_tree_add_item(tree, hf_ieee80211_tim_bmapctl,
                                      tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -7821,7 +10812,7 @@ static int ieee80211_tag_tim(packet_info *pinfo, proto_tree *tree,
                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
   proto_tree_add_item(bmapctl_tree, hf_ieee80211_tim_bmapctl_offset,
                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tim_partial_virtual_bitmap,
                       tvb, offset, tag_len - 3, ENC_NA);
@@ -7830,10 +10821,11 @@ static int ieee80211_tag_tim(packet_info *pinfo, proto_tree *tree,
   return offset;
 }
 
-static int ieee80211_tag_ibss_parameter(packet_info *pinfo, proto_tree *tree,
-                                        proto_item *ti, proto_item *ti_len,
-                                        guint32 tag_len, tvbuff_t *tvb,
-                                        int offset)
+static int
+ieee80211_tag_ibss_parameter(packet_info *pinfo, proto_tree *tree,
+                             proto_item *ti, proto_item *ti_len,
+                             guint32 tag_len, tvbuff_t *tvb,
+                             int offset)
 {
   /* 7.3.2.7 IBSS Parameter Set element (6) */
 
@@ -7861,10 +10853,11 @@ static const value_string environment_vals[] = {
   { 0,    NULL }
 };
 
-static int ieee80211_tag_country_info(packet_info *pinfo, proto_tree *tree,
-                                      proto_item *ti, proto_item *ti_len,
-                                      guint32 tag_len, tvbuff_t *tvb,
-                                      int offset, int tag_end)
+static int
+ieee80211_tag_country_info(packet_info *pinfo, proto_tree *tree,
+                           proto_item *ti, proto_item *ti_len,
+                           guint32 tag_len, tvbuff_t *tvb,
+                           int offset, int tag_end)
 {
   /* 7.3.2.9 Country information element (7) */
   proto_tree *sub_tree;
@@ -7889,14 +10882,14 @@ static int ieee80211_tag_country_info(packet_info *pinfo, proto_tree *tree,
   proto_item_append_text(ti, ", Environment %s",
                          val_to_str(tvb_get_guint8(tvb, offset),
                                     environment_vals,"Unknown (0x%02x)"));
-  offset++;
+  offset += 1;
 
   while (offset < tag_end) {
     /* Padding ? */
     if ((tag_end - offset) < 3) {
       proto_tree_add_item(tree, hf_ieee80211_tag_country_info_pad,
                           tvb, offset, 1, ENC_NA);
-      offset++;
+      offset += 1;
       continue;
     }
     if (tvb_get_guint8(tvb, offset) <= 200) { /* 802.11d */
@@ -7908,18 +10901,18 @@ static int ieee80211_tag_country_info(packet_info *pinfo, proto_tree *tree,
                           tvb, offset, 1, ENC_BIG_ENDIAN);
       proto_item_append_text(sub_item, ": First Channel Number: %d",
                              tvb_get_guint8(tvb, offset));
-      offset++;
+      offset += 1;
       proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_nc,
                           tvb, offset, 1, ENC_BIG_ENDIAN);
       proto_item_append_text(sub_item, ", Number of Channels: %d",
                              tvb_get_guint8(tvb, offset));
-      offset++;
+      offset += 1;
       proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_mtpl,
                           tvb, offset, 1, ENC_BIG_ENDIAN);
       proto_item_append_text(sub_item,
                              ", Maximum Transmit Power Level: %d dBm",
                              tvb_get_guint8(tvb, offset));
-      offset++;
+      offset += 1;
     } else { /* 802.11j */
       sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_rrc,
                                      tvb, offset, 3, ENC_NA);
@@ -7930,29 +10923,30 @@ static int ieee80211_tag_country_info(packet_info *pinfo, proto_tree *tree,
       proto_item_append_text(sub_item,
                              ": Regulatory Extension Identifier: %d",
                              tvb_get_guint8(tvb, offset));
-      offset++;
+      offset += 1;
       proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_rc,
                           tvb, offset, 1, ENC_BIG_ENDIAN);
       proto_item_append_text(sub_item, ", Regulatory Class: %d",
                              tvb_get_guint8(tvb, offset));
-      offset++;
+      offset += 1;
       proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_cc,
                           tvb, offset, 1, ENC_BIG_ENDIAN);
       proto_item_append_text(sub_item, ", Coverage Class: %d",
                              tvb_get_guint8(tvb, offset));
-      offset++;
+      offset += 1;
     }
   }
 
   return offset;
 }
 
-static int ieee80211_tag_fh_hopping_parameter(packet_info *pinfo,
-                                              proto_tree *tree,
-                                              proto_item *ti,
-                                              proto_item *ti_len,
-                                              guint32 tag_len, tvbuff_t *tvb,
-                                              int offset)
+static int
+ieee80211_tag_fh_hopping_parameter(packet_info *pinfo,
+                                   proto_tree *tree,
+                                   proto_item *ti,
+                                   proto_item *ti_len,
+                                   guint32 tag_len, tvbuff_t *tvb,
+                                   int offset)
 {
   /* 7.3.2.10 Hopping Pattern Parameters information element (8) */
   if (tag_len < 2) {
@@ -7966,21 +10960,22 @@ static int ieee80211_tag_fh_hopping_parameter(packet_info *pinfo,
   proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
   proto_item_append_text(ti, ": Prime Radix: %u", tvb_get_guint8(tvb, offset));
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
   proto_item_append_text(ti, ", Number of Channels: %u",
                          tvb_get_guint8(tvb, offset));
-  offset++;
+  offset += 1;
 
   return offset;
 }
 
-static int ieee80211_tag_fh_hopping_table(packet_info *pinfo, proto_tree *tree,
-                                          proto_item *ti_len,
-                                          guint32 tag_len, tvbuff_t *tvb,
-                                          int offset, int tag_end)
+static int
+ieee80211_tag_fh_hopping_table(packet_info *pinfo, proto_tree *tree,
+                               proto_item *ti_len,
+                               guint32 tag_len, tvbuff_t *tvb,
+                               int offset, int tag_end)
 {
   /* 7.3.2.11 Hopping Pattern Table information element (9) */
   if (tag_len < 4) {
@@ -7993,19 +10988,19 @@ static int ieee80211_tag_fh_hopping_table(packet_info *pinfo, proto_tree *tree,
 
   proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_flag,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_number_of_sets,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_modulus,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
 
   proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_offset,
                       tvb, offset, 1, ENC_BIG_ENDIAN);
-  offset++;
+  offset += 1;
 
   while (offset < tag_end) {
     proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_random_table,
@@ -8017,30 +11012,33 @@ static int ieee80211_tag_fh_hopping_table(packet_info *pinfo, proto_tree *tree,
 }
 
 static int
-add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int offset, int ftype)
+add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype)
 {
-  guint32 oui;
-  tvbuff_t *tag_tvb;
+  guint32       oui;
+  tvbuff_t     *tag_tvb;
   const guint8 *tag_data_ptr;
-  guint32 tag_no, tag_len;
-  int n, ret;
-  char print_buff[SHORT_STR];
-  proto_tree * orig_tree=tree;
-  proto_item *ti = NULL, *ti_len = NULL;
-  int tag_end;
-
-  tag_no = tvb_get_guint8(tvb, offset);
+  guint32       tag_no, tag_len;
+  int           n, ret;
+  char          print_buff[SHORT_STR];
+  proto_tree   *orig_tree = tree;
+  proto_item   *ti        = NULL;
+  proto_item   *ti_len, *ti_tag;
+  int           tag_end;
+
+  tag_no  = tvb_get_guint8(tvb, offset);
   tag_len = tvb_get_guint8(tvb, offset + 1);
   tag_end = offset + 2 + tag_len;
+
   if (tree) {
     ti = proto_tree_add_item(orig_tree, hf_ieee80211_tag, tvb, offset, 2 + tag_len , ENC_NA);
-    proto_item_append_text(ti, ": %s", val_to_str(tag_no, tag_num_vals, "Reserved (%d)"));
+    proto_item_append_text(ti, ": %s", val_to_str_ext(tag_no, &tag_num_vals_ext, "Reserved (%d)"));
 
     tree = proto_item_add_subtree(ti, ett_80211_mgt_ie);
 
-    proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_BIG_ENDIAN);
-
   }
+
+  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) {
@@ -8085,7 +11083,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
     break;
 
     case TAG_REQUEST: /* 7.3.2.12 Request information element (10) */
-      while(offset < tag_end )
+      while (offset < tag_end)
       {
         proto_tree_add_item(tree, hf_ieee80211_tag_request, tvb, offset, 1, ENC_BIG_ENDIAN);
         offset += 1;
@@ -8093,7 +11091,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       break;
 
     case TAG_QBSS_LOAD: /* 7.3.2.28 BSS Load element (11) */
-      if (tag_len < 4 || tag_len >5)
+      if ((tag_len < 4) || (tag_len > 5))
       {
         expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 4 or 5", tag_len);
         break;
@@ -8131,7 +11129,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       }
       offset += 2;
 
-      add_fixed_field(tree, tvb, offset, FIELD_QOS_TS_INFO);
+      add_fixed_field(tree, tvb, pinfo, offset, FIELD_QOS_TS_INFO);
       offset += 3;
 
       proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -8190,21 +11188,38 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       {
       guint8 type;
       guint8 version;
+      proto_item *class_mask;
+      proto_tree *mask_tree;
 
       offset += 2;
       proto_tree_add_item(tree, hf_ieee80211_tclas_up, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-      type = tvb_get_guint8(tvb, offset);
       offset += 1;
 
+      type = tvb_get_guint8(tvb, offset);
       proto_tree_add_item(tree, hf_ieee80211_tclas_class_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
       offset += 1;
 
-      proto_tree_add_item(tree, hf_ieee80211_tclas_class_mask, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+      class_mask = proto_tree_add_item(tree, hf_ieee80211_tclas_class_mask,
+                                       tvb, offset, 1, ENC_LITTLE_ENDIAN);
       offset += 1;
 
       switch (type)
         {
           case 0:
+            offset--;
+            mask_tree = proto_item_add_subtree(class_mask,
+                                               ett_tag_tclas_mask_tree);
+            proto_tree_add_item(mask_tree,
+                                hf_ieee80211_tclas_class_mask0_src_addr,
+                                tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(mask_tree,
+                                hf_ieee80211_tclas_class_mask0_dst_addr,
+                                tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(mask_tree,
+                                hf_ieee80211_tclas_class_mask0_type,
+                                tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            offset++;
+
             proto_tree_add_item(tree, hf_ieee80211_tclas_src_mac_addr, tvb, offset, 6, ENC_NA);
             offset += 6;
 
@@ -8216,8 +11231,41 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
             break;
 
           case 1:
-            version = tvb_get_guint8(tvb, offset + 5);
-            proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
+            version = tvb_get_guint8(tvb, offset);
+            offset--;
+
+            mask_tree = proto_item_add_subtree(class_mask,
+                                               ett_tag_tclas_mask_tree);
+            proto_tree_add_item(mask_tree,
+                                hf_ieee80211_tclas_class_mask1_ver,
+                                tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(mask_tree,
+                                hf_ieee80211_tclas_class_mask1_src_ip,
+                                tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(mask_tree,
+                                hf_ieee80211_tclas_class_mask1_dst_ip,
+                                tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(mask_tree,
+                                hf_ieee80211_tclas_class_mask1_src_port,
+                                tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(mask_tree,
+                                hf_ieee80211_tclas_class_mask1_dst_port,
+                                tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            if (version == 4) {
+              proto_tree_add_item(mask_tree,
+                                  hf_ieee80211_tclas_class_mask1_ipv4_dscp,
+                                  tvb, offset, 1, ENC_LITTLE_ENDIAN);
+              proto_tree_add_item(mask_tree,
+                                  hf_ieee80211_tclas_class_mask1_ipv4_proto,
+                                  tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            } else {
+              proto_tree_add_item(mask_tree,
+                                  hf_ieee80211_tclas_class_mask1_ipv6_flow,
+                                  tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            }
+            offset += 1;
+
+            proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset, 1, ENC_LITTLE_ENDIAN);
             offset += 1;
             if (version == 4)
             {
@@ -8250,6 +11298,14 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
             break;
 
           case 2:
+            offset--;
+            mask_tree = proto_item_add_subtree(class_mask,
+                                               ett_tag_tclas_mask_tree);
+            proto_tree_add_item(mask_tree,
+                                hf_ieee80211_tclas_class_mask2_tci,
+                                tvb, offset, 1, ENC_LITTLE_ENDIAN);
+            offset++;
+
             proto_tree_add_item(tree, hf_ieee80211_tclas_tag_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
             offset += 2;
             break;
@@ -8268,7 +11324,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       }
       offset += 2;
 
-      add_fixed_field(tree, tvb, offset, FIELD_SCHEDULE_INFO);
+      add_fixed_field(tree, tvb, pinfo, offset, FIELD_SCHEDULE_INFO);
       offset += 2;
 
       proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
@@ -8296,7 +11352,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       offset += 2;
 
       proto_tree_add_item(tree, hf_ieee80211_tag_power_constraint_local, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-      proto_item_append_text(ti, " :%d", tvb_get_guint8(tvb, offset));
+      proto_item_append_text(ti, "%d", tvb_get_guint8(tvb, offset));
       offset += 1;
 
       break;
@@ -8344,11 +11400,11 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       offset += 2;
 
       proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_trsmt_pow, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-      proto_item_append_text(ti, " Transmit Power :%d", tvb_get_guint8(tvb, offset));
+      proto_item_append_text(ti, " Transmit Power%d", tvb_get_guint8(tvb, offset));
       offset += 1;
 
       proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_link_mrg, tvb, offset, 1, ENC_LITTLE_ENDIAN);
-      proto_item_append_text(ti, ", Link Margin :%d", tvb_get_guint8(tvb, offset));
+      proto_item_append_text(ti, ", Link Margin%d", tvb_get_guint8(tvb, offset));
       offset += 1;
 
       break;
@@ -8358,18 +11414,18 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       {
         proto_item *chan_item;
         proto_tree *chan_tree;
-        guint i = 1;
+        guint       i = 1;
 
         offset += 2;
         if (tag_len % 2 == 1) {
            expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u must be even",tag_len);
            break;
         }
-        while(offset < tag_end)
+        while (offset < tag_end)
         {
           chan_item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_channels, tvb, offset, 2, ENC_NA);
           proto_item_append_text(chan_item, " #%d", i);
-          i++;
+          i += 1;
 
           chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
 
@@ -8404,6 +11460,8 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
       proto_item_append_text(ti, ", Count: %d ", tvb_get_guint8(tvb, offset));
       offset += 1;
+
+      break;
     }
 
     case TAG_MEASURE_REQ: /* 7.3.2.21 Measurement Request element (38) with update from 802.11k-2008 */
@@ -8438,7 +11496,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
         request_type = tvb_get_guint8 (tvb, offset);
         offset += 1;
 
-        switch(request_type) {
+        switch (request_type) {
           case 0: /* Basic Request */
           case 1: /* Clear channel assessment (CCA) request */
           case 2: /* Receive power indication (RPI) histogram request */
@@ -8491,10 +11549,9 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
             proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_bssid, tvb, offset, 6, ENC_NA);
             offset += 6;
 
-            while(offset < tag_end)
+            while (offset < tag_end)
             {
               guint8 sub_id, sub_length, sub_tag_end;
-              proto_item *ti;
               proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_id, tvb, offset, 1, ENC_NA);
               sub_id = tvb_get_guint8(tvb, offset);
               offset += 1;
@@ -8504,7 +11561,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
               offset += 1;
               sub_tag_end = offset + sub_length;
 
-              switch(sub_id){
+              switch (sub_id) {
                 case MEASURE_REQ_BEACON_SUB_SSID: /* SSID (0) */
                   proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_ssid, tvb, offset, sub_length, ENC_ASCII|ENC_NA);
                   offset += sub_length;
@@ -8530,10 +11587,11 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
                   /* no default action */
                   break;
              }
-             if(offset < sub_tag_end)
+             if (offset < sub_tag_end)
              {
-               ti = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA);
-               expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_WARN, " Unknown Data (not interpreted)");
+               proto_item *tix;
+               tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA);
+               expert_add_info_format(pinfo, tix, PI_UNDECODED, PI_WARN, " Unknown Data (not interpreted)");
                offset = sub_tag_end;
              }
             }
@@ -8880,7 +11938,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
         proto_tree_add_item(tree, hf_ieee80211_tag_dfs_recovery_interval, tvb, offset, 1, ENC_NA);
         offset += 1;
 
-        while(offset < tag_end)
+        while (offset < tag_end)
         {
           ti_sup_map = proto_tree_add_item(tree, hf_ieee80211_tag_dfs_channel_map, tvb, offset, 2, ENC_NA);
           sub_map_tree = proto_item_add_subtree(ti_sup_map, ett_tag_dfs_map_tree);
@@ -8922,7 +11980,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       offset += 2;
 
       proto_tree_add_item(tree, hf_ieee80211_ts_delay, tvb, offset, 4, ENC_LITTLE_ENDIAN);
-      proto_item_append_text(ti, " : %d", tvb_get_ntohl(tvb, offset) );
+      proto_item_append_text(ti, " : %d", tvb_get_ntohl(tvb, offset));
       offset += 4;
       break;
 
@@ -8949,119 +12007,40 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
         /* proto_item *ti_cap;
         proto_tree *cap_tree; */
         offset += 2;
-        offset = dissect_qos_capability(tree, tvb, offset, ftype);
-      }
-      break;
-
-    case TAG_RSN_IE: /* 7.3.2.25 RSN information element (48) */
-      if (tag_len < 20)
-      {
-        expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be >= 20", tag_len);
-        break;
-      }
-      offset += 2;
-
-      offset = dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len);
-      break;
-
-    case TAG_EXT_SUPP_RATES: /* 7.3.2.14 Extended Supported Rates element (50) */
-      if(tag_len < 1)
-      {
-        expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be greater than 0", tag_len);
-        break;
-      }
-      offset += 2;
-
-      while(offset < tag_end)
-      {
-        proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA);
-        proto_item_append_text(ti, " %s,", val_to_str_const(tvb_get_guint8(tvb, offset), ieee80211_supported_rates_vals, "Unknown Rate") );
-        offset += 1;
-      }
-      proto_item_append_text(ti, " [Mbit/sec]");
-      break;
-
-    case TAG_EXTENDED_CAPABILITIES: /* 7.3.2.27 Extended Capabilities information element (127) */
-    {
-      proto_item *ti_ex_cap;
-      proto_tree *ex_cap_tree;
-
-      if (tag_len < 1)
-      {
-        expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be greater than 0", tag_len);
-        break;
-      }
-      offset += 2;
-
-      /* Extended Capability octet 0 */
-      ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
-      proto_item_append_text(ti_ex_cap, " (octet 0)");
-      ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_ex_cap);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b0, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b1, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b2, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b3, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b4, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b6, tvb, offset, 1, ENC_NA);
-      offset += 1;
-
-      /* Extended Capability octet 1 */
-      if (offset >= tag_end) {
-        break;
-      }
-      ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
-      proto_item_append_text(ti_ex_cap, " (octet 1)");
-      offset += 1;
-
-      /* Extended Capability octet 2 */
-      if (offset >= tag_end) {
-        break;
+        offset = dissect_qos_capability(tree, tvb, pinfo, offset, ftype);
       }
-      ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
-      proto_item_append_text(ti_ex_cap, " (octet 2)");
-      offset += 1;
+      break;
 
-      /* Extended Capability octet 3 */
-      if (offset >= tag_end) {
+    case TAG_RSN_IE: /* 7.3.2.25 RSN information element (48) */
+      if (tag_len < 18)
+      {
+        expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be >= 18", tag_len);
         break;
       }
-      ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
-      proto_item_append_text(ti_ex_cap, " (octet 3)");
-      ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b27, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b28, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b29, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b30, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b31, tvb, offset, 1, ENC_NA);
-      offset += 1;
+      offset += 2;
+
+      offset = dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len);
+      break;
 
-      /* Extended Capability octet 4 */
-      if (offset >= tag_end) {
+    case TAG_EXT_SUPP_RATES: /* 7.3.2.14 Extended Supported Rates element (50) */
+      if (tag_len < 1)
+      {
+        expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be greater than 0", tag_len);
         break;
       }
-      ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
-      proto_item_append_text(ti_ex_cap, " (octet 4)");
-      ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b32, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b33, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b34, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b36, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b37, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b38, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b39, tvb, offset, 1, ENC_NA);
-      offset += 1;
+      offset += 2;
 
-      /* Extended Capability octet 5 */
-      if (offset >= tag_end) {
-        break;
+      while (offset < tag_end)
+      {
+        proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA);
+        proto_item_append_text(ti, " %s,", val_to_str_ext_const(tvb_get_guint8(tvb, offset), &ieee80211_supported_rates_vals_ext, "Unknown Rate"));
+        offset += 1;
       }
-      ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
-      proto_item_append_text(ti_ex_cap, " (octet 5)");
-      ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b40, tvb, offset, 1, ENC_NA);
-      proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_serv_int_granularity, tvb, offset, 1, ENC_NA);
-      offset += 1;
+      proto_item_append_text(ti, " [Mbit/sec]");
+      break;
 
+    case TAG_EXTENDED_CAPABILITIES: /* 7.3.2.27 Extended Capabilities information element (127) */
+      dissect_extended_capabilities_ie(pinfo, tree, ti, ti_len, tag_len, tvb, offset+2, tag_end);
       break;
 
     case TAG_CISCO_CCX1_CKIP: /* Cisco CCX1 CKIP + Device Name (133) */
@@ -9092,6 +12071,16 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       /* Total number off associated clients and repeater access points */
       proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_clients, tvb, offset, 1, ENC_NA);
       offset += 1;
+      proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown2, tvb, offset, 3, ENC_NA);
+      offset += 3;
+      break;
+
+    case TAG_VHT_CAPABILITY:
+      dissect_vht_capability_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len);
+      break;
+
+    case TAG_VHT_OPERATION:
+      dissect_vht_operation_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len);
       break;
 
     case TAG_VENDOR_SPECIFIC_IE: /* 7.3.2.26 Vendor Specific information element (221) */
@@ -9101,30 +12090,30 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
         break;
       }
       {
+        guint32 tag_vs_len = tag_len;
 
         offset += 2;
         oui = tvb_get_ntoh24(tvb, offset);
         tag_tvb = tvb_new_subset(tvb, offset, tag_len, tag_len);
         proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
         proto_item_append_text(ti, ": %s", uint_get_manuf_name(oui));
+        offset += 3;
+        tag_vs_len -= 3;
 
-        if (tag_len > 3) {
-          proto_tree_add_item(ti, hf_ieee80211_tag_vendor_oui_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
+        if (tag_len > 0) {
+          proto_tree_add_item(ti, hf_ieee80211_tag_vendor_oui_type, tvb, offset, 1, ENC_BIG_ENDIAN);
         }
 
       switch (oui) {
         /* 802.11 specific vendor ids */
-#       define WPAWME_OUI  0x0050F2
-#       define RSNOUI_VAL  0x000FAC
-#       define PRE11N_OUI  0x00904c
-        case WPAWME_OUI:
-          offset = dissect_vendor_ie_wpawme(tree, tvb, offset + 3, tag_len, ftype);
+        case OUI_WPAWME:
+          offset = dissect_vendor_ie_wpawme(tree, tvb, pinfo, offset, tag_vs_len, ftype);
           break;
-        case RSNOUI_VAL:
-          dissect_vendor_ie_rsn(ti, tree, tag_tvb);
+        case OUI_RSN:
+          dissect_vendor_ie_rsn(ti, tree, tvb, offset, tag_vs_len);
           break;
-        case PRE11N_OUI:
-          dissect_vendor_ie_ht(tvb, pinfo, tree, offset, ti, ti_len, tag_len);
+        case OUI_PRE11N:
+          dissect_vendor_ie_ht(tvb, pinfo, tree, offset, ti, ti_len, tag_vs_len);
           break;
         case OUI_WFA:
           dissect_vendor_ie_wfa(pinfo, ti, tag_tvb);
@@ -9132,17 +12121,19 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
 
         /* Normal IEEE vendor ids (from oui.h) */
         case OUI_CISCOWL:  /* Cisco Wireless (Aironet) */
-          dissect_vendor_ie_aironet(ti, tree, tvb, offset + 3, tag_len - 3);
+          dissect_vendor_ie_aironet(ti, tree, tvb, offset, tag_vs_len);
           break;
         case OUI_MARVELL:
-          dissect_vendor_ie_marvell(ti, tree, tvb, offset + 3, tag_len - 3);
+          dissect_vendor_ie_marvell(ti, tree, tvb, offset, tag_vs_len);
           break;
         case OUI_ATHEROS:
-          dissect_vendor_ie_atheros(ti, tree, tvb, offset + 3, tag_len - 3, pinfo, ti_len);
+          dissect_vendor_ie_atheros(ti, tree, tvb, offset, tag_vs_len, pinfo, ti_len);
+          break;
+        case OUI_ARUBA:
+          dissect_vendor_ie_aruba(ti, tree, tvb, offset, tag_vs_len);
           break;
         default:
-          proto_tree_add_string (tree, hf_ieee80211_tag_interpretation, tvb, offset + 3,
-            tag_len - 3, "Not interpreted");
+          proto_tree_add_item(tree, hf_ieee80211_tag_vendor_data, tvb, offset, tag_vs_len, ENC_NA);
           break;
         }
 
@@ -9161,12 +12152,23 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       dissect_mmie(tree, tvb, offset + 2, tag_len);
       break;
 
+    case TAG_SSID_LIST:
+      dissect_ssid_list(tree, tvb, offset + 2, tag_len);
+      break;
+
     case TAG_TIME_ZONE:
       dissect_time_zone(tree, tvb, offset + 2, tag_len);
       break;
 
     case TAG_TIMEOUT_INTERVAL:
-      dissect_timeout_interval(tree, tvb, offset + 2, tag_len);
+      dissect_timeout_interval(tree, tvb, pinfo, offset + 2, tag_len);
+      break;
+
+    case TAG_RIC_DATA: /* RIC Data (RDE) (57) */
+     /* Assigning the return value will ensure that the IE after RIC is processed
+      * only once. This gives us a good looking RIC IE :-)
+      */
+      tag_len = dissect_ric_data(pinfo, tree, tvb, offset + 2, tag_len, ti, ti_len, ftype);
       break;
 
     case TAG_LINK_IDENTIFIER:
@@ -9201,10 +12203,59 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       dissect_secondary_channel_offset_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
       break;
 
+    case TAG_BSS_AVG_ACCESS_DELAY: /* BSS Average Access Delay element (63) */
+      dissect_bss_avg_access_delay_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
+      break;
+
+    case TAG_ANTENNA: /* Antenna element (64) */
+      dissect_antenna_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
+      break;
+
+    case TAG_RSNI: /* RSNI element (65) */
+      dissect_rsni_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
+      break;
+
+    case TAG_BSS_AVB_ADM_CAPACITY:
+      dissect_bss_available_admission_capacity_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
+      break;
+
+    case TAG_IE_68_CONFLICT: /* Conflict: WAPI Vs. IEEE */
+      if (tag_len >= 20) { /* It Might be WAPI*/
+        dissect_wapi_param_set(tvb, pinfo, tree, offset + 2,tag_len, ti_len, ti, ftype);
+      }
+      else { /* BSS AC Access Delay (68) */
+        dissect_bss_ac_access_delay_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
+      }
+      break;
+
+    case TAG_BSS_MAX_IDLE_PERIOD:
+      dissect_bss_max_idle_period(tree, tvb, offset + 2);
+      break;
+
+    case TAG_TFS_REQUEST:
+      dissect_tfs_request(pinfo, tree, tvb, offset + 2, tag_len, ftype);
+      break;
+
+    case TAG_TFS_RESPONSE:
+      dissect_tfs_response(pinfo, tree, tvb, offset + 2, tag_len, ftype);
+      break;
+
+    case TAG_WNM_SLEEP_MODE:
+      dissect_wnm_sleep_mode(tree, tvb, offset + 2);
+      break;
+
     case TAG_TIME_ADV:
       dissect_time_adv(tree, tvb, offset + 2);
       break;
 
+    case TAG_RM_ENABLED_CAPABILITY: /* RM Enabled Capabilities (70) */
+      dissect_rm_enabled_capabilities_ie(pinfo, tree, ti, ti_len, tag_len, tvb, offset+2, tag_end);
+      break;
+
+    case TAG_RIC_DESCRIPTOR: /* RIC Descriptor (75) */
+      dissect_ric_descriptor(pinfo, tree, tvb, offset + 2, tag_len, ti, ti_len);
+      break;
+
     case TAG_MESH_PEERING_MGMT:
       {
         guint start = offset + 2;
@@ -9224,12 +12275,12 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
             break;
 
           case SELFPROT_ACTION_MESH_PEERING_CLOSE:
-            if (tag_len == 8 || tag_len == 24)
+            if ((tag_len == 8) || (tag_len == 24))
               {
                 proto_tree_add_item (tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
                 offset += 2;
               }
-            offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
+            offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REASON_CODE);
             break;
 
           /* unexpected values */
@@ -9241,7 +12292,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
         if (tag_len - (offset - start) == 16)
           {
             proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA);
-            offset +=16;
+            offset += 16;
           }
         break;
       }
@@ -9370,7 +12421,7 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
             proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA);
             offset += 6;
           }
-          offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
+          offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_REASON_CODE);
         }
         break;
       }
@@ -9395,7 +12446,6 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
         break;
       }
       break;
-    }
 
     case TAG_INTERWORKING:
       dissect_interworking(pinfo, tree, ti, tvb, offset);
@@ -9434,13 +12484,13 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
             "Neighbor Report: Error: Tag length must be at least 13 bytes long");
         break;
       }
-      offset+=2;
+      offset += 2;
       tag_offset = offset;
 
       proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid, tvb, offset, 6, ENC_NA);
 
       /*** Begin: BSSID Information ***/
-      offset+=6;
+      offset += 6;
       bssid_info = tvb_get_letohl (tvb, offset);
       parent_item = proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_bssid_info, tvb, offset, 4, bssid_info, "BSSID Information: 0x%08X", bssid_info);
       bssid_info_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_tree);
@@ -9459,24 +12509,24 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reserved, tvb, offset+1, 3, (bssid_info & 0xfffff000) >> 12);
       /*** End: BSSID Information ***/
 
-      offset+=4;
+      offset += 4;
       info = tvb_get_guint8 (tvb, offset);
       proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_reg_class, tvb, offset, 1, info, "Regulatory Class: 0x%02X", info);
 
-      offset++;
+      offset += 1;
       info = tvb_get_guint8 (tvb, offset);
       proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_channel_number, tvb, offset, 1, info, "Channel Number: 0x%02X", info);
 
-      offset++;
+      offset += 1;
       info = tvb_get_guint8 (tvb, offset);
       proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_phy_type, tvb, offset, 1, info, "PHY Type: 0x%02X", info);
 
-      offset++;
+      offset += 1;
       sub_tag_id = tvb_get_guint8 (tvb, offset);
-      offset++;
+      offset += 1;
       sub_tag_length = tvb_get_guint8 (tvb, offset);
 
-      offset++;
+      offset += 1;
       sub_tag_tvb = tvb_new_subset(tvb, offset, sub_tag_length, -1);
 
       switch (sub_tag_id) {
@@ -9527,10 +12577,10 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
         break;
       }
 
-      offset+=2;
+      offset += 2;
       tag_offset = offset;
 
-      offset+= add_fixed_field(tree, tvb, offset, FIELD_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT);
+      offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT);
 
       if (tag_len > (offset - tag_offset))
       {
@@ -9554,15 +12604,15 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
         break;
       }
 
-      offset+=2;
+      offset += 2;
 
       current_field = tvb_get_guint8 (tvb, offset);
       proto_tree_add_uint(tree, hf_ieee80211_tag_supported_reg_classes_current, tvb, offset, 1, current_field);
 
-      offset++;
+      offset += 1;
       /* Partially taken from the ssid section */
       tag_data_ptr = tvb_get_ptr (tvb, offset, tag_len);
-      for (i = 0, n = 0; i < tag_len && n < SHORT_STR; i++) {
+      for (i = 0, n = 0; (i < tag_len) && (n < SHORT_STR); i++) {
         ret = g_snprintf (print_buff + n, SHORT_STR - n, (i == tag_len-1)?"%d":"%d, ", tag_data_ptr[i]);
         if (ret >= SHORT_STR - n) {
           /* ret >= <buf_size> means buffer truncated  */
@@ -9575,13 +12625,16 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
       break;
     }
     default:
-      tvb_ensure_bytes_exist (tvb, offset + 2, tag_len);
-      proto_tree_add_string (tree, hf_ieee80211_tag_interpretation, tvb, offset + 1 + 1,
-          tag_len, "Not interpreted");
-      proto_item_append_text(ti, ": Tag %u Len %u", tag_no, tag_len);
+      proto_tree_add_item(tree, hf_ieee80211_tag_data, tvb, offset + 1 + 1, tag_len, ENC_NA);
+      expert_add_info_format(pinfo, ti_tag, PI_UNDECODED, PI_NOTE,
+                             "Dissector for 802.11 IE Tag"
+                             " (%s) code not implemented, Contact"
+                             " Wireshark developers if you want this supported", val_to_str_ext(tag_no,
+                                            &tag_num_vals_ext, "(%d)"));
+      proto_item_append_text(ti, ": Undecoded");
       break;
   }
-  if(offset < tag_end){
+  if (offset < tag_end) {
     /* TODO: add Expert info to indicate there is unknown data ! but all tagged option don't yet return offset.
       For the moment, this code only remove Clang Warnings about not used offset... */
   }
@@ -9589,8 +12642,8 @@ add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int off
 }
 
 void
-ieee_80211_add_tagged_parameters (tvbuff_t * tvb, int offset, packet_info * pinfo,
-  proto_tree * tree, int tagged_parameters_len, int ftype)
+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;
 
@@ -9602,7 +12655,7 @@ ieee_80211_add_tagged_parameters (tvbuff_t * tvb, int offset, packet_info * pinf
       /* XXX - flag this as an error? */
       next_len = tagged_parameters_len;
     }
-    offset += next_len;
+    offset                += next_len;
     tagged_parameters_len -= next_len;
   }
 }
@@ -9611,17 +12664,15 @@ ieee_80211_add_tagged_parameters (tvbuff_t * tvb, int offset, packet_info * pinf
 /*                     Dissect 802.11 management frame                       */
 /* ************************************************************************* */
 static void
-dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
-    proto_tree * tree)
+dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
-  proto_item *ti = NULL;
+  proto_item *ti;
   proto_tree *mgt_tree;
   proto_tree *fixed_tree;
   proto_tree *tagged_tree;
-  int offset = 0;
-  int tagged_parameter_tree_len;
+  int         offset = 0;
+  int         tagged_parameter_tree_len;
 
-  g_pinfo = pinfo;
   ieee80211_tvb_invalid = FALSE;
 
   CHECK_DISPLAY_AS_X(data_handle,proto_wlan_mgt, tvb, pinfo, tree);
@@ -9634,8 +12685,8 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
 
     case MGT_ASSOC_REQ:
       fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 4);
-      add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
-      add_fixed_field(fixed_tree, tvb, 2, FIELD_LISTEN_IVAL);
+      add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_CAP_INFO);
+      add_fixed_field(fixed_tree, tvb, pinfo, 2, FIELD_LISTEN_IVAL);
       offset = 4;  /* Size of fixed fields */
 
       tagged_parameter_tree_len =
@@ -9649,9 +12700,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
 
     case MGT_ASSOC_RESP:
       fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6);
-      add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
-      add_fixed_field(fixed_tree, tvb, 2, FIELD_STATUS_CODE);
-      add_fixed_field(fixed_tree, tvb, 4, FIELD_ASSOC_ID);
+      add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_CAP_INFO);
+      add_fixed_field(fixed_tree, tvb, pinfo, 2, FIELD_STATUS_CODE);
+      add_fixed_field(fixed_tree, tvb, pinfo, 4, FIELD_ASSOC_ID);
       offset = 6;  /* Size of fixed fields */
 
       tagged_parameter_tree_len =
@@ -9665,9 +12716,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
 
     case MGT_REASSOC_REQ:
       fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 10);
-      add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
-      add_fixed_field(fixed_tree, tvb, 2, FIELD_LISTEN_IVAL);
-      add_fixed_field(fixed_tree, tvb, 4, FIELD_CURRENT_AP_ADDR);
+      add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_CAP_INFO);
+      add_fixed_field(fixed_tree, tvb, pinfo, 2, FIELD_LISTEN_IVAL);
+      add_fixed_field(fixed_tree, tvb, pinfo, 4, FIELD_CURRENT_AP_ADDR);
       offset = 10;  /* Size of fixed fields */
 
       tagged_parameter_tree_len =
@@ -9680,9 +12731,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
 
     case MGT_REASSOC_RESP:
       fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6);
-      add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
-      add_fixed_field(fixed_tree, tvb, 2, FIELD_STATUS_CODE);
-      add_fixed_field(fixed_tree, tvb, 4, FIELD_ASSOC_ID);
+      add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_CAP_INFO);
+      add_fixed_field(fixed_tree, tvb, pinfo, 2, FIELD_STATUS_CODE);
+      add_fixed_field(fixed_tree, tvb, pinfo, 4, FIELD_ASSOC_ID);
       offset = 6;  /* Size of fixed fields */
 
       tagged_parameter_tree_len =
@@ -9707,9 +12758,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
     case MGT_PROBE_RESP:
     {
       fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12);
-      add_fixed_field(fixed_tree, tvb, 0, FIELD_TIMESTAMP);
-      add_fixed_field(fixed_tree, tvb, 8, FIELD_BEACON_INTERVAL);
-      add_fixed_field(fixed_tree, tvb, 10, FIELD_CAP_INFO);
+      add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_TIMESTAMP);
+      add_fixed_field(fixed_tree, tvb, pinfo, 8, FIELD_BEACON_INTERVAL);
+      add_fixed_field(fixed_tree, tvb, pinfo, 10, FIELD_CAP_INFO);
       offset = 12;  /* Size of fixed fields */
 
       tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
@@ -9720,15 +12771,15 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
     case MGT_MEASUREMENT_PILOT:
     {
       fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12);
-      offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_TIMESTAMP);
-      offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_MEASUREMENT_PILOT_INT);
-      offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_BEACON_INTERVAL);
-      offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_CAP_INFO);
-      offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_COUNTRY_STR);
-      offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_MAX_REG_PWR);
-      offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_MAX_TX_PWR);
-      offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_TX_PWR_USED);
-      offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_TRANSCEIVER_NOISE_FLOOR);
+      offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_TIMESTAMP);
+      offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_MEASUREMENT_PILOT_INT);
+      offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_BEACON_INTERVAL);
+      offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_CAP_INFO);
+      offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_COUNTRY_STR);
+      offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_MAX_REG_PWR);
+      offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_MAX_TX_PWR);
+      offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_TX_PWR_USED);
+      offset += add_fixed_field(fixed_tree, tvb, pinfo, offset, FIELD_TRANSCEIVER_NOISE_FLOOR);
       /* TODO DS Parameter Set ??? */
 
       tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
@@ -9738,9 +12789,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
     }
     case MGT_BEACON:    /* Dissect protocol payload fields  */
       fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12);
-      add_fixed_field(fixed_tree, tvb, 0, FIELD_TIMESTAMP);
-      add_fixed_field(fixed_tree, tvb, 8, FIELD_BEACON_INTERVAL);
-      add_fixed_field(fixed_tree, tvb, 10, FIELD_CAP_INFO);
+      add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_TIMESTAMP);
+      add_fixed_field(fixed_tree, tvb, pinfo, 8, FIELD_BEACON_INTERVAL);
+      add_fixed_field(fixed_tree, tvb, pinfo, 10, FIELD_CAP_INFO);
       offset = 12;  /* Size of fixed fields */
 
       tagged_parameter_tree_len =
@@ -9756,7 +12807,7 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
 
     case MGT_DISASS:
       fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 2);
-      add_fixed_field(fixed_tree, tvb, 0, FIELD_REASON_CODE);
+      add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_REASON_CODE);
       offset = 2; /* Size of fixed fields */
       tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
       if (tagged_parameter_tree_len > 0) {
@@ -9769,9 +12820,9 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
 
     case MGT_AUTHENTICATION:
       fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6);
-      add_fixed_field(fixed_tree, tvb, 0, FIELD_AUTH_ALG);
-      add_fixed_field(fixed_tree, tvb, 2, FIELD_AUTH_TRANS_SEQ);
-      add_fixed_field(fixed_tree, tvb, 4, FIELD_STATUS_CODE);
+      add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_AUTH_ALG);
+      add_fixed_field(fixed_tree, tvb, pinfo, 2, FIELD_AUTH_TRANS_SEQ);
+      add_fixed_field(fixed_tree, tvb, pinfo, 4, FIELD_STATUS_CODE);
       offset = 6;  /* Size of fixed fields */
 
       tagged_parameter_tree_len =
@@ -9789,7 +12840,7 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
 
     case MGT_DEAUTHENTICATION:
       fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 2);
-      add_fixed_field(fixed_tree, tvb, 0, FIELD_REASON_CODE);
+      add_fixed_field(fixed_tree, tvb, pinfo, 0, FIELD_REASON_CODE);
       offset = 2; /* Size of fixed fields */
       tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
       if (tagged_parameter_tree_len > 0) {
@@ -9807,7 +12858,7 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
       lcl_fixed_hdr = proto_tree_add_text(mgt_tree, tvb, 0, 0, "Fixed parameters");
       lcl_fixed_tree = proto_item_add_subtree (lcl_fixed_hdr, ett_fixed_parameters);
 
-      offset += add_fixed_field(lcl_fixed_tree, tvb, 0, FIELD_ACTION);
+      offset += add_fixed_field(lcl_fixed_tree, tvb, pinfo, 0, FIELD_ACTION);
 
       proto_item_set_len(lcl_fixed_hdr, offset);
       if (ieee80211_tvb_invalid)
@@ -9829,7 +12880,7 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
       lcl_fixed_hdr = proto_tree_add_text(mgt_tree, tvb, 0, 0, "Fixed parameters");
       lcl_fixed_tree = proto_item_add_subtree (lcl_fixed_hdr, ett_fixed_parameters);
 
-      offset += add_fixed_field(lcl_fixed_tree, tvb, 0, FIELD_ACTION);
+      offset += add_fixed_field(lcl_fixed_tree, tvb, pinfo, 0, FIELD_ACTION);
 
       proto_item_set_len(lcl_fixed_hdr, offset);
       if (ieee80211_tvb_invalid)
@@ -9857,12 +12908,12 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
       proto_tree_add_item(aruba_tree, hf_ieee80211_aruba, tvb, offset, 2, ENC_BIG_ENDIAN);
       offset += 2;
       /* HeartBeat Sequence */
-      if ( type == 0x0005 )
+      if (type == 0x0005)
       {
         proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_hb_seq, tvb, offset, 8, ENC_BIG_ENDIAN);
       }
       /* MTU Size */
-      if ( type == 0x0003 )
+      if (type == 0x0003)
       {
         proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_mtu, tvb, offset, 2, ENC_BIG_ENDIAN);
       }
@@ -9901,7 +12952,7 @@ crc32_802_tvb_padded(tvbuff_t *tvb, guint hdr_len, guint hdr_size, guint len)
     ((unsigned char)(c_crc>>16)<<8) |
     ((unsigned char)(c_crc>>24)<<0);
 
-  return ( c_crc );
+  return (c_crc);
 }
 
 typedef enum {
@@ -9924,51 +12975,53 @@ typedef enum {
  */
 
 static void
-dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
-        proto_tree * tree, gboolean fixed_length_header, gint fcs_len,
-        gboolean wlan_broken_fc, gboolean datapad,
-        gboolean is_ht)
+dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
+                          proto_tree *tree, gboolean fixed_length_header, gint fcs_len,
+                          gboolean wlan_broken_fc, gboolean datapad,
+                          gboolean is_ht)
 {
-  guint16 fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
-  guint16 seq_control;
-  guint32 seq_number, frag_number;
-  gboolean more_frags;
-  const guint8 *src = NULL;
-  const guint8 *dst = NULL;
-  const guint8 *bssid = NULL;
-  proto_item *ti = NULL;
-  proto_item *fcs_item = NULL;
-  proto_item *cw_item = NULL;
-  proto_item *hidden_item;
-  proto_tree *volatile hdr_tree = NULL;
-  proto_tree *fcs_tree = NULL;
-  proto_tree *cw_tree = NULL;
-  guint16 hdr_len, ohdr_len, htc_len = 0;
-  gboolean has_fcs, fcs_good, fcs_bad;
-  gint len, reported_len, ivlen;
-  gboolean is_amsdu = 0;
-  gboolean save_fragmented;
-  tvbuff_t *volatile next_tvb = NULL;
-  guint32 addr_type;
+  guint16          fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
+  guint16          seq_control;
+  guint32          seq_number, frag_number;
+  gboolean         more_frags;
+  const guint8    *src         = NULL;
+  const guint8    *dst         = NULL;
+  const guint8    *bssid       = NULL;
+  proto_item      *ti          = NULL;
+  proto_item      *fcs_item    = NULL;
+  proto_item      *cw_item     = NULL;
+  proto_item      *hidden_item;
+  proto_tree      *fcs_tree    = NULL;
+  proto_tree      *cw_tree     = NULL;
+  guint16          hdr_len, ohdr_len;
+  guint16          htc_len     = 0;
+  gboolean         has_fcs, fcs_good, fcs_bad;
+  gint             len, reported_len, ivlen;
+  gboolean         is_amsdu    = 0;
+  gboolean         save_fragmented;
+  guint32          addr_type;
+  guint8           octet1, octet2;
+  char             out_buff[SHORT_STR];
+  gint             is_iv_bad;
+  guchar           iv_buff[4];
+  const char      *addr1_str   = NULL;
+  int              addr1_hf    = -1;
+  guint            offset;
+  const gchar     *fts_str;
+  gchar            flag_str[]  = "opmPRMFTC";
+  gint             ii;
+  guint16          qosoff      = 0;
+  guint16          qos_control = 0;
+  gint             meshctl_len = 0;
+  guint8           mesh_flags;
+  guint16          meshoff     = 0;
+  static wlan_hdr  whdrs[4];
+  gboolean         retransmitted;
+
   volatile encap_t encap_type;
-  guint8 octet1, octet2;
-  char out_buff[SHORT_STR];
-  gint is_iv_bad;
-  guchar iv_buff[4];
-  const char *addr1_str = NULL;
-  int addr1_hf = -1;
-  guint offset;
-  const gchar *fts_str;
-  gchar flag_str[] = "opmPRMFTC";
-  gint ii;
-  guint16 qosoff = 0, qos_control = 0;
-  gint meshctl_len = 0;
-  guint8 mesh_flags;
-  guint16 meshoff = 0;
-
-  wlan_hdr *volatile whdr;
-  static wlan_hdr whdrs[4];
-  gboolean retransmitted;
+  proto_tree *volatile hdr_tree = NULL;
+  tvbuff_t   *volatile next_tvb = NULL;
+  wlan_hdr   *volatile whdr;
 
   whdr= &whdrs[0];
 
@@ -9987,8 +13040,8 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
   else
     hdr_len = find_header_length (fcf, ctrl_fcf, is_ht);
 
-  fts_str = val_to_str_const(frame_type_subtype, frame_type_subtype_vals,
-              "Unrecognized (Reserved frame)");
+  fts_str = val_to_str_ext_const(frame_type_subtype, &frame_type_subtype_vals_ext,
+                                 "Unrecognized (Reserved frame)");
   col_set_str (pinfo->cinfo, COL_INFO, fts_str);
 
 
@@ -10002,13 +13055,13 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
   }
 
   if (is_ht && IS_STRICTLY_ORDERED(flags) &&
-    ((FCF_FRAME_TYPE(fcf) == MGT_FRAME) || (FCF_FRAME_TYPE(fcf) == DATA_FRAME &&
-      DATA_FRAME_IS_QOS(frame_type_subtype)))) {
+      ((FCF_FRAME_TYPE(fcf) == MGT_FRAME) ||
+       ((FCF_FRAME_TYPE(fcf) == DATA_FRAME) && DATA_FRAME_IS_QOS(frame_type_subtype)))) {
     htc_len = 4;
   }
 
   /* adjust the header length depending on the Mesh Control field */
-  if (FCF_FRAME_TYPE(fcf) == DATA_FRAME &&
+  if ((FCF_FRAME_TYPE(fcf) == DATA_FRAME) &&
       DATA_FRAME_IS_QOS(frame_type_subtype)) {
         qosoff = hdr_len - htc_len - 2;
         qos_control = tvb_get_letohs(tvb, qosoff);
@@ -10033,20 +13086,15 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
   if (datapad)
     hdr_len = roundup2(hdr_len, 4);
 
-  /* Add the FC to the current tree */
+  /* Add the FC and duration/id to the current tree */
   if (tree)
     {
       ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, hdr_len,
-          "IEEE 802.11 %s", fts_str);
+                                           "IEEE 802.11 %s", fts_str);
       hdr_tree = proto_item_add_subtree (ti, ett_80211);
 
-      dissect_frame_control(hdr_tree, tvb, wlan_broken_fc, 0);
-
-      if (frame_type_subtype == CTRL_PS_POLL)
-        proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, 2, 2, ENC_LITTLE_ENDIAN);
-      else
-        proto_tree_add_uint (hdr_tree, hf_ieee80211_did_duration, tvb, 2, 2,
-            tvb_get_letohs (tvb, 2));
+      dissect_frame_control(hdr_tree, tvb, wlan_broken_fc, 0, pinfo);
+      dissect_durid(hdr_tree, tvb, frame_type_subtype, 2);
     }
 
   /*
@@ -10064,18 +13112,15 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
       /*
        * All management frame types have the same header.
        */
-      src = tvb_get_ptr (tvb, 10, 6);
-      dst = tvb_get_ptr (tvb, 4, 6);
-
-      SET_ADDRESS_SUB(&pinfo->dl_src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
-      SET_ADDRESS_SUB(&pinfo->src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
-      SET_ADDRESS_SUB(&pinfo->dl_dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
-      SET_ADDRESS_SUB(&pinfo->dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
+      TVB_SET_ADDRESS_HF(&pinfo->dl_src, AT_ETHER, tvb, 10, 6, hf_ieee80211_addr_sa);
+      COPY_ADDRESS_SHALLOW(&pinfo->src, &pinfo->dl_src);
+      TVB_SET_ADDRESS_HF(&pinfo->dl_dst, AT_ETHER, tvb, 4, 6, hf_ieee80211_addr_da);
+      COPY_ADDRESS_SHALLOW(&pinfo->dst, &pinfo->dl_dst);
 
       /* for tap */
-      SET_ADDRESS_SUB(&whdr->bssid, AT_ETHER, AT_SUB_IEEE80211, 6, tvb_get_ptr(tvb, 16,6));
-      SET_ADDRESS_SUB(&whdr->src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
-      SET_ADDRESS_SUB(&whdr->dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
+      TVB_SET_ADDRESS_HF(&whdr->bssid, AT_ETHER, tvb, 16, 6, hf_ieee80211_addr_bssid);
+      COPY_ADDRESS_SHALLOW(&whdr->src, &pinfo->dl_src);
+      COPY_ADDRESS_SHALLOW(&whdr->dst, &pinfo->dl_dst);
       whdr->type = frame_type_subtype;
 
       seq_control = tvb_get_letohs(tvb, 22);
@@ -10090,27 +13135,25 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 
       if (tree)
       {
-        proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, dst);
+        proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
+        proto_tree_add_item (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, ENC_NA);
 
-        proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, src);
+        proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
+        proto_tree_add_item (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, ENC_NA);
 
         proto_tree_add_item (hdr_tree, hf_ieee80211_addr_bssid, tvb, 16, 6, ENC_NA);
 
         /* add items for wlan.addr filter */
-        hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, dst);
+        hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
         PROTO_ITEM_SET_HIDDEN(hidden_item);
-        hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, src);
+        hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
         PROTO_ITEM_SET_HIDDEN(hidden_item);
 
         hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
         PROTO_ITEM_SET_HIDDEN(hidden_item);
 
-
-        proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2,
-            frag_number);
-
-        proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2,
-            seq_number);
+        proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, frag_number);
+        proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, seq_number);
       }
       break;
 
@@ -10166,13 +13209,13 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
        * Start shoving in other fields if needed.
        * XXX - Should we look for is_ht as well?
        */
-      if (frame_type_subtype == CTRL_CONTROL_WRAPPER && tree) {
+      if ((frame_type_subtype == CTRL_CONTROL_WRAPPER) && tree) {
         cw_item = proto_tree_add_text(hdr_tree, tvb, offset, 2,
           "Contained Frame Control");
         cw_tree = proto_item_add_subtree (cw_item, ett_cntrl_wrapper_fc);
-        dissect_frame_control(cw_tree, tvb, FALSE, offset);
+        dissect_frame_control(cw_tree, tvb, FALSE, offset, pinfo);
         dissect_ht_control(hdr_tree, tvb, offset + 2);
-        offset+=6;
+        offset += 6;
         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);
@@ -10231,70 +13274,65 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 
             bar_control = tvb_get_letohs(tvb, offset);
             block_ack_type = (bar_control & 0x0006) >> 1;
-            proto_tree_add_uint(hdr_tree, hf_ieee80211_block_ack_request_type, tvb,
-              offset, 1, block_ack_type);
-            bar_parent_item = proto_tree_add_uint_format(hdr_tree,
-              hf_ieee80211_block_ack_request_control, tvb, offset, 2, bar_control,
-              "Block Ack Request (BAR) Control: 0x%04X", bar_control);
+            proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_request_type, tvb,
+              offset, 2, ENC_LITTLE_ENDIAN);
+            bar_parent_item = proto_tree_add_item(hdr_tree,
+              hf_ieee80211_block_ack_request_control, tvb, offset, 2, ENC_LITTLE_ENDIAN);
             bar_sub_tree = proto_item_add_subtree(bar_parent_item,
               ett_block_ack);
-            proto_tree_add_boolean(bar_sub_tree,
-              hf_ieee80211_block_ack_control_ack_policy, tvb, offset, 1, bar_control);
-            proto_tree_add_boolean(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
-              tvb, offset, 1, bar_control);
-            proto_tree_add_boolean(bar_sub_tree,
-              hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 1,
-              bar_control);
-            proto_tree_add_uint(bar_sub_tree, hf_ieee80211_block_ack_control_reserved,
-              tvb, offset, 2, bar_control);
+            proto_tree_add_item(bar_sub_tree,
+              hf_ieee80211_block_ack_control_ack_policy, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
+              tvb, offset, 2, ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(bar_sub_tree,
+              hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 2,
+              ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(bar_sub_tree, hf_ieee80211_block_ack_control_reserved,
+              tvb, offset, 2, ENC_LITTLE_ENDIAN);
 
             switch (block_ack_type)
             {
               case 0: /*Basic BlockAckReq */
               {
-                proto_tree_add_uint(bar_sub_tree,
-                hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset+1, 1,
-                  bar_control);
+                proto_tree_add_item(bar_sub_tree,
+                hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
                 offset += 2;
 
-                /*offset +=*/ add_fixed_field(hdr_tree, tvb, offset,
+                /*offset +=*/ add_fixed_field(hdr_tree, tvb, pinfo, offset,
                   FIELD_BLOCK_ACK_SSC);
                 break;
               }
               case 2: /* Compressed BlockAckReq */
               {
-                proto_tree_add_uint(bar_sub_tree,
-                hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset+1, 1,
-                  bar_control);
+                proto_tree_add_item(bar_sub_tree,
+                hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
                 offset += 2;
 
-                /*offset +=*/ add_fixed_field(hdr_tree, tvb, offset,
+                /*offset +=*/ add_fixed_field(hdr_tree, tvb, pinfo, offset,
                   FIELD_BLOCK_ACK_SSC);
                 break;
               }
               case 3: /* Multi-TID BlockAckReq */
               {
                 guint8 tid_count;
-                guint i;
+                guint iii;
                 proto_tree *bar_mtid_tree, *bar_mtid_sub_tree;
 
                 tid_count = ((bar_control & 0xF000) >> 12) + 1;
-                proto_tree_add_uint_format(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid_info, tvb, offset+1, 1, bar_control,
-                decode_numeric_bitfield(bar_control, 0xF000, 16,"Number of TIDs Present: 0x%%X"), tid_count);
+                proto_tree_add_uint(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid_info, tvb, offset, 2, tid_count);
                 offset += 2;
 
                 bar_parent_item = proto_tree_add_text (hdr_tree, tvb, offset, tid_count*4, "Per TID Info");
                 bar_mtid_tree = proto_item_add_subtree(bar_parent_item, ett_block_ack);
-                for (i = 1; i <= tid_count; i++) {
-                  bar_parent_item = proto_tree_add_uint(bar_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, i);
+                for (iii = 0; iii < tid_count; iii++) {
+                  bar_parent_item = proto_tree_add_uint(bar_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, iii);
                   bar_mtid_sub_tree = proto_item_add_subtree(bar_parent_item, ett_block_ack);
 
-                  bar_control = tvb_get_letohs(tvb, offset);
-                  proto_tree_add_uint(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, bar_control);
-                  proto_tree_add_uint(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset+1, 1, bar_control);
+                  proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+                  proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
                   offset += 2;
 
-                  offset += add_fixed_field(bar_mtid_sub_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
+                  offset += add_fixed_field(bar_mtid_sub_tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC);
                 }
                 break;
               }
@@ -10322,31 +13360,29 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 
             ba_control = tvb_get_letohs(tvb, offset);
             block_ack_type = (ba_control & 0x0006) >> 1;
-            proto_tree_add_uint(hdr_tree, hf_ieee80211_block_ack_type, tvb, offset, 1, block_ack_type);
-            ba_parent_item = proto_tree_add_uint_format(hdr_tree,
-              hf_ieee80211_block_ack_control, tvb, offset, 2, ba_control,
-              "Block Ack (BA) Control: 0x%04X", ba_control);
+            proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+            ba_parent_item = proto_tree_add_item(hdr_tree,
+              hf_ieee80211_block_ack_control, tvb, offset, 2, ENC_LITTLE_ENDIAN);
             ba_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
-            proto_tree_add_boolean(ba_sub_tree, hf_ieee80211_block_ack_control_ack_policy,
-              tvb, offset, 1, ba_control);
-            proto_tree_add_boolean(ba_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
-              tvb, offset, 1, ba_control);
-            proto_tree_add_boolean(ba_sub_tree,
-              hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 1,
-              ba_control);
-            proto_tree_add_uint(ba_sub_tree, hf_ieee80211_block_ack_control_reserved, tvb,
-              offset, 2, ba_control);
+            proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_ack_policy,
+              tvb, offset, 2, ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
+              tvb, offset, 2, ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(ba_sub_tree,
+              hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 2,
+              ENC_LITTLE_ENDIAN);
+            proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_reserved, tvb,
+              offset, 2, ENC_LITTLE_ENDIAN);
 
             switch (block_ack_type)
             {
               case 0: /*Basic BlockAck */
               {
-                proto_tree_add_uint(ba_sub_tree,
-                hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset+1, 1,
-                  ba_control);
+                proto_tree_add_item(ba_sub_tree,
+                hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
                 offset += 2;
 
-                offset += add_fixed_field(hdr_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
+                offset += add_fixed_field(hdr_tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC);
                 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 128, ENC_NA);
                 /*offset += 128;*/
                 break;
@@ -10359,12 +13395,12 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
                 proto_item *ba_bitmap_item;
                 proto_tree *ba_bitmap_tree;
 
-                proto_tree_add_uint(ba_sub_tree, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset+1, 1, ba_control);
+                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, offset, FIELD_BLOCK_ACK_SSC);
+                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);
@@ -10380,28 +13416,25 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
               case 3:  /* Multi-TID BlockAck */
               {
                 guint8 tid_count;
-                guint i;
+                guint iii;
                 proto_tree *ba_mtid_tree, *ba_mtid_sub_tree;
 
                 tid_count = ((ba_control & 0xF000) >> 12) + 1;
-                proto_tree_add_uint_format(ba_sub_tree,
-                hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset+1, 1,
-                  ba_control, decode_numeric_bitfield(ba_control, 0xF000,
-                  16,"Number of TIDs Present: 0x%%X"), tid_count);
+                proto_tree_add_uint(ba_sub_tree,
+                hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset, 2, tid_count);
                 offset += 2;
 
                 ba_parent_item = proto_tree_add_text (hdr_tree, tvb, offset, tid_count*4, "Per TID Info");
                 ba_mtid_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
-                for (i = 1; i <= tid_count; i++) {
-                  ba_parent_item = proto_tree_add_uint(ba_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, i);
+                for (iii = 0; iii < tid_count; iii++) {
+                  ba_parent_item = proto_tree_add_uint(ba_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, iii);
                   ba_mtid_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
 
-                  ba_control = tvb_get_letohs(tvb, offset);
-                  proto_tree_add_uint(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ba_control);
-                  proto_tree_add_uint(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset+1, 1, ba_control);
+                  proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+                  proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
                   offset += 2;
 
-                  offset += add_fixed_field(ba_mtid_sub_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
+                  offset += add_fixed_field(ba_mtid_sub_tree, tvb, pinfo, offset, FIELD_BLOCK_ACK_SSC);
                   proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
                   offset += 8;
                 }
@@ -10416,6 +13449,8 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
     }
 
     case DATA_FRAME:
+    {
+      guint32 src_offset, dst_offset, bssid_offset;
       addr_type = FCF_ADDR_SELECTOR (fcf);
 
       /* In order to show src/dst address we must always do the following */
@@ -10423,40 +13458,46 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
       {
 
         case DATA_ADDR_T1:
-          src = tvb_get_ptr (tvb, 10, 6);
-          dst = tvb_get_ptr (tvb, 4, 6);
-          bssid = tvb_get_ptr (tvb, 16, 6);
+          src_offset = 10;
+          dst_offset = 4;
+          bssid_offset = 16;
           break;
 
         case DATA_ADDR_T2:
-          src = tvb_get_ptr (tvb, 16, 6);
-          dst = tvb_get_ptr (tvb, 4, 6);
-          bssid = tvb_get_ptr (tvb, 10, 6);
+          src_offset = 16;
+          dst_offset = 4;
+          bssid_offset = 10;
           break;
 
         case DATA_ADDR_T3:
-          src = tvb_get_ptr (tvb, 10, 6);
-          dst = tvb_get_ptr (tvb, 16, 6);
-          bssid = tvb_get_ptr (tvb, 4, 6);
+          src_offset = 10;
+          dst_offset = 16;
+          bssid_offset = 4;
           break;
 
         case DATA_ADDR_T4:
-          src = tvb_get_ptr (tvb, 24, 6);
-          dst = tvb_get_ptr (tvb, 16, 6);
-          bssid = tvb_get_ptr (tvb, 16, 6);
+          src_offset = 24;
+          dst_offset = 16;
+          bssid_offset = 16;
+          break;
+        default:
+          /* Should never happen? */
+          src_offset = 0;
+          dst_offset = 0;
+          bssid_offset = 0;
           break;
       }
 
-      SET_ADDRESS_SUB(&pinfo->dl_src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
-      SET_ADDRESS_SUB(&pinfo->src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
-      SET_ADDRESS_SUB(&pinfo->dl_dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
-      SET_ADDRESS_SUB(&pinfo->dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
+      TVB_SET_ADDRESS_HF(&pinfo->dl_src, AT_ETHER, tvb, src_offset, 6, hf_ieee80211_addr_sa);
+      COPY_ADDRESS_SHALLOW(&pinfo->src, &pinfo->dl_src);
+      TVB_SET_ADDRESS_HF(&pinfo->dl_dst, AT_ETHER, tvb, dst_offset, 6, hf_ieee80211_addr_da);
+      COPY_ADDRESS_SHALLOW(&pinfo->dst, &pinfo->dl_dst);
 
       /* for tap */
 
-      SET_ADDRESS_SUB(&whdr->bssid, AT_ETHER, AT_SUB_IEEE80211, 6, bssid);
-      SET_ADDRESS_SUB(&whdr->src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
-      SET_ADDRESS_SUB(&whdr->dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
+      TVB_SET_ADDRESS_HF(&whdr->bssid, AT_ETHER, tvb, bssid_offset, 6, hf_ieee80211_addr_bssid);
+      COPY_ADDRESS_SHALLOW(&whdr->src, &pinfo->dl_src);
+      COPY_ADDRESS_SHALLOW(&whdr->dst, &pinfo->dl_dst);
       whdr->type = frame_type_subtype;
 
       seq_control = tvb_get_letohs(tvb, 22);
@@ -10472,86 +13513,84 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 
         switch (addr_type)
         {
-
+          /* XXX - using the offsets set above, could all of these cases be collapsed into one? */
           case DATA_ADDR_T1:
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, dst);
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, src);
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_bssid, tvb, 16, 6, bssid);
-            proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2,
-               frag_number);
-            proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2,
-               seq_number);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_bssid, tvb, 16, 6, ENC_NA);
+            proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, frag_number);
+            proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, seq_number);
 
             /* add items for wlan.addr filter */
-            hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, dst);
+            hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
-            hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, src);
+            hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
             hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
             break;
 
           case DATA_ADDR_T2:
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, dst);
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_bssid, tvb, 10, 6, bssid);
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_sa, tvb, 16, 6, src);
-            proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2,
-               frag_number);
-            proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2,
-               seq_number);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_bssid, tvb, 10, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_sa, tvb, 16, 6, ENC_NA);
+            proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, frag_number);
+            proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, seq_number);
 
             /* add items for wlan.addr filter */
-            hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, dst);
+            hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
             hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
-            hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, src);
+            hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
             break;
 
           case DATA_ADDR_T3:
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_bssid, tvb, 4, 6, bssid);
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, src);
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_da, tvb, 16, 6, dst);
-
-            proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2,
-               frag_number);
-            proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2,
-               seq_number);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_bssid, tvb, 4, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, ENC_NA);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_da, tvb, 16, 6, ENC_NA);
+            proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, frag_number);
+            proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, seq_number);
 
             /* add items for wlan.addr filter */
             hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
-            hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, src);
+            hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
-            hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, dst);
+            hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
             break;
 
           case DATA_ADDR_T4:
             proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
             proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_da, tvb, 16, 6, dst);
-            proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2,
-               frag_number);
-            proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2,
-               seq_number);
-            proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_sa, tvb, 24, 6, src);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_da, tvb, 16, 6, ENC_NA);
+            proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, frag_number);
+            proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, seq_number);
+            proto_tree_add_item (hdr_tree, hf_ieee80211_addr_sa, tvb, 24, 6, ENC_NA);
 
             /* add items for wlan.addr filter */
             hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
             hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
-            hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, dst);
+            hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
-            hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 24, 6, src);
+            hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 24, 6, ENC_NA);
             PROTO_ITEM_SET_HIDDEN(hidden_item);
             break;
         }
 
       }
       break;
+    }
   }
 
   len = tvb_length_remaining(tvb, hdr_len);
@@ -10614,7 +13653,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
          * We have the entire packet, and it includes a 4-byte FCS.
          * Slice it off, and put it into the tree.
          */
-        len -= 4;
+        len          -= 4;
         reported_len -= 4;
         if (tree)
         {
@@ -10633,15 +13672,12 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
             fcs_bad = TRUE;
           }
 
-          if(fcs_good) {
-            fcs_item = proto_tree_add_uint_format(hdr_tree, hf_ieee80211_fcs, tvb,
-                hdr_len + len, 4, sent_fcs,
-                "Frame check sequence: 0x%08x [correct]", sent_fcs);
+          fcs_item = proto_tree_add_item(hdr_tree, hf_ieee80211_fcs, tvb,
+                hdr_len + len, 4, ENC_LITTLE_ENDIAN);
+          if (fcs_good) {
+            proto_item_append_text(fcs_item, " [correct]");
           } else {
-            fcs_item = proto_tree_add_uint_format(hdr_tree, hf_ieee80211_fcs, tvb,
-                hdr_len + len, 4, sent_fcs,
-                "Frame check sequence: 0x%08x [incorrect, should be 0x%08x]",
-                sent_fcs, fcs);
+            proto_item_append_text(fcs_item, " [incorrect, should be 0x%08x]", fcs);
             flag_str[8] = '.';
           }
 
@@ -10686,145 +13722,103 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
     case DATA_FRAME:
       if (tree && DATA_FRAME_IS_QOS(frame_type_subtype))
       {
-        proto_item *qos_fields;
+        proto_item *qos_fields, *qos_ti;
         proto_tree *qos_tree;
 
-        guint16 qos_tid;
-        guint16 qos_priority;
-        guint16 qos_ack_policy;
-        guint16 qos_amsdu_present;
         guint16 qos_eosp;
         guint16 qos_field_content;
 
-        qos_fields = proto_tree_add_text(hdr_tree, tvb, qosoff, 2,
-            "QoS Control");
+        qos_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_qos, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
         qos_tree = proto_item_add_subtree (qos_fields, ett_qos_parameters);
 
-        qos_tid = QOS_TID(qos_control);
-        qos_priority = QOS_PRIORITY(qos_control);
-        qos_ack_policy = QOS_ACK_POLICY(qos_control);
-        qos_amsdu_present = QOS_AMSDU_PRESENT(qos_control);
         qos_eosp = QOS_EOSP(qos_control);
         qos_field_content = QOS_FIELD_CONTENT(qos_control);
 
-        proto_tree_add_uint (qos_tree, hf_ieee80211_qos_tid, tvb,
-            qosoff, 1, qos_tid);
+        proto_tree_add_item(qos_tree, hf_ieee80211_qos_tid, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
 
-        proto_tree_add_uint_format (qos_tree, hf_ieee80211_qos_priority, tvb,
-            qosoff, 1, qos_priority,
-            "Priority: %d (%s) (%s)",
-            qos_priority, qos_tags[qos_priority], qos_acs[qos_priority]);
+        qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_priority, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
+        PROTO_ITEM_SET_GENERATED(qos_ti);
 
         if (flags & FLAG_FROM_DS) {
-          proto_tree_add_boolean (qos_tree, hf_ieee80211_qos_eosp, tvb,
-              qosoff, 1, qos_control);
+          proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
         } else {
-          proto_tree_add_boolean (qos_tree, hf_ieee80211_qos_bit4, tvb,
-              qosoff, 1, qos_control);
+          proto_tree_add_item(qos_tree, hf_ieee80211_qos_bit4, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
         }
 
-        proto_tree_add_uint (qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 1,
-            qos_ack_policy);
+        proto_tree_add_item(qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
 
         if (flags & FLAG_FROM_DS) {
           if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
-            proto_tree_add_boolean(qos_tree, hf_ieee80211_qos_amsdu_present, tvb,
-                qosoff, 1, qos_amsdu_present);
-            is_amsdu = qos_amsdu_present;
+            proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
+            is_amsdu = QOS_AMSDU_PRESENT(qos_control);
           }
           if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)) {
             /* txop limit */
+              qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_limit, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
             if (qos_field_content == 0) {
-              proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_txop_limit, tvb,
-                  qosoff + 1, 1, qos_field_content,
-                                                "transmit one frame immediately (0)");
-            } else {
-              proto_tree_add_uint (qos_tree, hf_ieee80211_qos_txop_limit, tvb,
-                                   qosoff + 1, 1, qos_field_content);
+              proto_item_append_text(qos_ti, " (transmit one frame immediately)");
             }
           } else {
             /* qap ps buffer state */
             proto_item *qos_ps_buf_state_fields;
             proto_tree *qos_ps_buf_state_tree;
-            guint8 qap_buf_load;
 
-            qos_ps_buf_state_fields = proto_tree_add_text(qos_tree, tvb, qosoff + 1, 1,
-                "QAP PS Buffer State: 0x%x", qos_field_content);
+            qos_ps_buf_state_fields = proto_tree_add_item(qos_tree, hf_ieee80211_qos_ps_buf_state, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
             qos_ps_buf_state_tree = proto_item_add_subtree (qos_ps_buf_state_fields, ett_qos_ps_buf_state);
 
-            proto_tree_add_boolean (qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated,
-                                    tvb, qosoff + 1, 1, qos_field_content);
+            proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
 
             if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)) {
-              proto_tree_add_uint (qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb,
-                  qosoff + 1, 1, qos_field_content);
-
-              qap_buf_load = QOS_PS_QAP_BUF_LOAD(qos_field_content);
-              switch (qap_buf_load) {
+              proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
+              qos_ti = proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
+              switch (QOS_PS_QAP_BUF_LOAD(qos_field_content)) {
 
               case 0:
-                proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb,
-                    qosoff + 1, 1, qos_field_content,
-                    "no buffered traffic (0)");
+                proto_item_append_text(qos_ti, " (no buffered traffic)");
                 break;
 
               default:
-                proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb,
-                    qosoff + 1, 1, qos_field_content,
-                    "%d octets (%d)", qap_buf_load*4096, qap_buf_load);
+                proto_item_append_text(qos_ti, " (%d octets)", QOS_PS_QAP_BUF_LOAD(qos_field_content)*4096);
                 break;
 
               case 15:
-                proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb,
-                    qosoff + 1, 1, qos_field_content,
-                    "greater than 57344 octets (15)");
+                proto_item_append_text(qos_ti, " (greater than 57344 octets)");
                 break;
               }
+
             }
           }
         } else {
           if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
-            proto_tree_add_boolean(qos_tree, hf_ieee80211_qos_amsdu_present, tvb,
-                qosoff, 1, qos_amsdu_present);
-            is_amsdu = qos_amsdu_present;
+            proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
+            is_amsdu = QOS_AMSDU_PRESENT(qos_control);
           }
           if (qos_eosp) {
             /* queue size */
+            qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_queue_size, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
             switch (qos_field_content) {
-
             case 0:
-              proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
-                                                tvb, qosoff + 1, 1, qos_field_content,
-                  "no buffered traffic in the queue (0)");
+              proto_item_append_text(qos_ti, " (no buffered traffic in the queue)");
               break;
 
             default:
-              proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
-                                                tvb, qosoff + 1, 1, qos_field_content,
-                                                "%u bytes (%u)", qos_field_content*256, qos_field_content);
+              proto_item_append_text(qos_ti, " (%u bytes)", qos_field_content*256);
               break;
 
             case 254:
-              proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
-                                                tvb, qosoff + 1, 1, qos_field_content,
-                  "more than 64768 octets (254)");
+              proto_item_append_text(qos_ti, " (more than 64768 octets)");
               break;
 
             case 255:
-              proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
-                                                tvb, qosoff + 1, 1, qos_field_content,
-                  "unspecified or unknown (256)");
+              proto_item_append_text(qos_ti, " (unspecified or unknown)");
               break;
             }
           } else {
             /* txop duration requested */
+            qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_dur_req,
+                                   tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
             if (qos_field_content == 0) {
-              proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_txop_dur_req,
-                                                tvb, qosoff + 1, 1, qos_field_content,
-                                                "no TXOP requested (0)");
-            } else {
-              proto_tree_add_uint (qos_tree, hf_ieee80211_qos_txop_dur_req,
-                                   tvb, qosoff + 1, 1, qos_field_content);
+              proto_item_append_text(qos_ti, " (no TXOP requested)");
             }
           }
         }
@@ -10838,9 +13832,9 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
           proto_item *msh_fields;
           proto_tree *msh_tree;
 
-          msh_fields = proto_tree_add_text(hdr_tree, tvb, meshoff, meshctl_len, "Mesh Control field");
+          msh_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_mesh_control_field, tvb, meshoff, meshctl_len, ENC_NA);
           msh_tree = proto_item_add_subtree (msh_fields, ett_msh_control);
-          add_fixed_field(msh_tree, tvb, meshoff, FIELD_MESH_CONTROL);
+          add_fixed_field(msh_tree, tvb, pinfo, meshoff, FIELD_MESH_CONTROL);
         }
 
       } /* end of qos control field */
@@ -10866,7 +13860,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
          * data: last seq_control seen and frame number
          */
         retransmitted = FALSE;
-        if(!pinfo->fd->flags.visited){
+        if (!pinfo->fd->flags.visited) {
           retransmit_key key;
           retransmit_key *result;
 
@@ -10874,40 +13868,41 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
           memcpy(key.src, src, 6);
           key.seq_control = 0;
           result = (retransmit_key *)g_hash_table_lookup(fc_analyse_retransmit_table, &key);
-          if (result && result->seq_control == seq_control) {
-               /* keep a pointer to the first seen frame, could be done with proto data? */
-               fnum = result->fnum;
-               g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER( pinfo->fd->num),
-                  GINT_TO_POINTER(fnum));
-               retransmitted = TRUE;
+          if (result && (result->seq_control == seq_control)) {
+            /* keep a pointer to the first seen frame, could be done with proto data? */
+            fnum = result->fnum;
+            g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER(pinfo->fd->num),
+                                GINT_TO_POINTER(fnum));
+            retransmitted = TRUE;
           } else {
-               /* first time or new seq*/
-               if (!result) {
-                  result = se_alloc(sizeof(retransmit_key));
-                  *result = key;
-                  g_hash_table_insert(fc_analyse_retransmit_table, result, result);
-               }
-               result->seq_control = seq_control;
-               result->fnum =  pinfo->fd->num;
-           }
+            /* first time or new seq*/
+            if (!result) {
+              result = se_new(retransmit_key);
+              *result = key;
+              g_hash_table_insert(fc_analyse_retransmit_table, result, result);
+            }
+            result->seq_control = seq_control;
+            result->fnum =  pinfo->fd->num;
+          }
         }
-        else if ((fnum = GPOINTER_TO_UINT(g_hash_table_lookup(fc_first_frame_table, GINT_TO_POINTER( pinfo->fd->num))))) {
-           retransmitted = TRUE;
+        else if ((fnum = GPOINTER_TO_UINT(g_hash_table_lookup(fc_first_frame_table, GINT_TO_POINTER(pinfo->fd->num))))) {
+          retransmitted = TRUE;
         }
 
         if (retransmitted) {
-            col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
-            if (tree) {
-                proto_item *item;
-
-                item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0, "Retransmitted frame");
-                PROTO_ITEM_SET_GENERATED(item);
-                item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame,tvb, 0, 0, fnum);
-                PROTO_ITEM_SET_GENERATED(item);
-            }
-            next_tvb = tvb_new_subset (tvb, hdr_len, len, reported_len);
-            call_dissector(data_handle, next_tvb, pinfo, tree);
-            goto end_of_wlan;
+          col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
+          if (tree) {
+            proto_item *item;
+
+            item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0,
+                                            "Retransmitted frame");
+            PROTO_ITEM_SET_GENERATED(item);
+            item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame,tvb, 0, 0, fnum);
+            PROTO_ITEM_SET_GENERATED(item);
+          }
+          next_tvb = tvb_new_subset (tvb, hdr_len, len, reported_len);
+          call_dissector(data_handle, next_tvb, pinfo, tree);
+          goto end_of_wlan;
         }
       }
 
@@ -10922,17 +13917,17 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 
   if (IS_PROTECTED(FCF_FLAGS(fcf))
       && !pinfo->pseudo_header->ieee_802_11.decrypted
-      && wlan_ignore_wep != WLAN_IGNORE_WEP_WO_IV) {
+      && (wlan_ignore_wep != WLAN_IGNORE_WEP_WO_IV)) {
     /*
      * It's a WEP or WPA encrypted frame, and it hasn't already been
      * decrypted; dissect the protections parameters and decrypt the data,
      * if we have a matching key. Otherwise display it as data.
      */
 
-    gboolean can_decrypt = FALSE;
-    proto_tree *wep_tree = NULL;
-    guint32 iv;
-    guint8 key, keybyte;
+    gboolean    can_decrypt = FALSE;
+    proto_tree *wep_tree    = NULL;
+    guint32     iv;
+    guint8      key, keybyte;
 
     /* Davide Schiera (2006-11-27): define algorithms constants and macros  */
 #define PROTECTION_ALG_WEP  AIRPDCAP_KEY_TYPE_WEP
@@ -10959,8 +13954,6 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
     key = KEY_OCTET_WEP_KEY(keybyte);
     if ((keybyte & KEY_EXTIV) && (len >= EXTIV_LEN)) {
       /* Extended IV; this frame is likely encrypted with TKIP or CCMP */
-
-
       if (tree) {
         proto_item *extiv_fields;
 
@@ -11012,9 +14005,9 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
       }
 
       /* Subtract out the length of the IV. */
-      len -= EXTIV_LEN;
+      len          -= EXTIV_LEN;
       reported_len -= EXTIV_LEN;
-      ivlen = EXTIV_LEN;
+      ivlen         = EXTIV_LEN;
       /* It is unknown whether this is TKIP or CCMP, so let's not even try to
        * parse TKIP Michael MIC+ICV or CCMP MIC. */
 
@@ -11033,10 +14026,10 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
         } else {
           /* Ok, we have a trailer and the whole packet. Decrypt it!      */
           /* TODO: At the moment we won't add the trailer to the tree,    */
-          /* so don't remove the trailer from the packet              */
-          len -= sec_trailer;
+          /* so don't remove the trailer from the packet                  */
+          len          -= sec_trailer;
           reported_len -= sec_trailer;
-          can_decrypt = TRUE;
+          can_decrypt   = TRUE;
         }
       }
       /* Davide Schiera --------------------------------------------------  */
@@ -11072,9 +14065,9 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
         proto_tree_add_uint (wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
 
       /* Subtract out the length of the IV. */
-      len -= 4;
+      len          -= 4;
       reported_len -= 4;
-      ivlen = 4;
+      ivlen         = 4;
 
       /* Davide Schiera (2006-11-27): Even if the decryption was not */
       /* successful, set the algorithm                               */
@@ -11103,7 +14096,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
          */
         reported_len -= 4;
         if (len > reported_len)
-          len = reported_len;
+          len         = reported_len;
       } else {
         /*
          * We have the entire packet, and it includes a 4-byte ICV.
@@ -11114,9 +14107,9 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
          * XXX - the ICV is encrypted; we're putting the encrypted
          * value, not the decrypted value, into the tree.
          */
-        len -= 4;
+        len          -= 4;
         reported_len -= 4;
-        can_decrypt = TRUE;
+        can_decrypt   = TRUE;
       }
     }
 
@@ -11132,7 +14125,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 
     /* Davide Schiera (2006-11-26): decrypted before parsing header and    */
     /* protection header                                  */
-    if (!can_decrypt || next_tvb == NULL) {
+    if (!can_decrypt || (next_tvb == NULL)) {
       /*
        * WEP decode impossible or failed, treat payload as raw data
        * and don't attempt fragment reassembly or further dissection.
@@ -11141,27 +14134,27 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 
       if (tree) {
         /* Davide Schiera (2006-11-21): added WEP or WPA separation      */
-        if (algorithm==PROTECTION_ALG_WEP) {
+        if (algorithm == PROTECTION_ALG_WEP) {
           if (can_decrypt)
             proto_tree_add_uint_format (wep_tree, hf_ieee80211_wep_icv, tvb,
                 hdr_len + ivlen + len, 4,
                 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
                 "WEP ICV: 0x%08x (not verified)",
                 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
-        } else if (algorithm==PROTECTION_ALG_CCMP) {
-        } else if (algorithm==PROTECTION_ALG_TKIP) {
+        } else if (algorithm == PROTECTION_ALG_CCMP) {
+        } else if (algorithm == PROTECTION_ALG_TKIP) {
         }
       }
       /* Davide Schiera (2006-11-21) ----------------------------------  */
 
-      if (pinfo->ethertype != ETHERTYPE_CENTRINO_PROMISC && wlan_ignore_wep == WLAN_IGNORE_WEP_NO) {
+      if ((pinfo->ethertype != ETHERTYPE_CENTRINO_PROMISC) && (wlan_ignore_wep == WLAN_IGNORE_WEP_NO)) {
         /* Some wireless drivers (such as Centrino) WEP payload already decrypted */
         call_dissector(data_handle, next_tvb, pinfo, tree);
         goto end_of_wlan;
       }
     } else {
       /* Davide Schiera (2006-11-21): added WEP or WPA separation        */
-      if (algorithm==PROTECTION_ALG_WEP) {
+      if (algorithm == PROTECTION_ALG_WEP) {
         if (tree)
           proto_tree_add_uint_format (wep_tree, hf_ieee80211_wep_icv, tvb,
               hdr_len + ivlen + len, 4,
@@ -11229,7 +14222,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
    * life.)
    */
   save_fragmented = pinfo->fragmented;
-  if (wlan_defragment && (more_frags || frag_number != 0)) {
+  if (wlan_defragment && (more_frags || (frag_number != 0))) {
     fragment_data *fd_head;
 
     /*
@@ -11240,9 +14233,8 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
      */
     if (reported_len < 0)
       THROW(ReportedBoundsError);
-    fd_head = fragment_add_seq_802_11(next_tvb, hdr_len, pinfo, seq_number,
-        wlan_fragment_table,
-        wlan_reassembled_table,
+    fd_head = fragment_add_seq_802_11(&wlan_reassembly_table,
+        next_tvb, hdr_len, pinfo, seq_number, NULL,
         frag_number,
         reported_len,
         more_frags);
@@ -11291,36 +14283,32 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
       break;
 
     case DATA_FRAME:
-      if (is_amsdu && tvb_reported_length_remaining(next_tvb, 0) > 4){
-        tvbuff_t *volatile msdu_tvb = NULL;
-        guint32 msdu_offset = 0;
-        guint i = 1;
-        const guint8 *lcl_src = NULL;
-        const guint8 *lcl_dst = NULL;
-        guint16 msdu_length;
-        proto_item *parent_item;
-        proto_tree *mpdu_tree;
-        proto_tree *subframe_tree;
+      if (is_amsdu && (tvb_reported_length_remaining(next_tvb, 0) > 4)) {
+        proto_item   *parent_item;
+        proto_tree   *mpdu_tree;
+        guint32       msdu_offset = 0;
+        guint         i           = 1;
 
         parent_item = proto_tree_add_protocol_format(tree, proto_aggregate, next_tvb, 0,
                                     tvb_reported_length_remaining(next_tvb, 0), "IEEE 802.11 Aggregate MSDU");
         mpdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_parent_tree);
 
         do {
-          lcl_dst = tvb_get_ptr (next_tvb, msdu_offset, 6);
-          lcl_src = tvb_get_ptr (next_tvb, msdu_offset+6, 6);
+          tvbuff_t *volatile  msdu_tvb;
+          guint16             msdu_length;
+          proto_tree         *subframe_tree;
+
           msdu_length = tvb_get_ntohs (next_tvb, msdu_offset+12);
 
-          parent_item = proto_tree_add_uint_format(mpdu_tree, hf_ieee80211_amsdu_msdu_header_text, next_tvb,
-                            msdu_offset, roundup2(msdu_offset+14+msdu_length, 4),
-                            i, "A-MSDU Subframe #%u", i);
+          parent_item = proto_tree_add_item(mpdu_tree, hf_ieee80211_amsdu_subframe, next_tvb,
+                            msdu_offset, roundup2(msdu_offset+14+msdu_length, 4), ENC_NA);
+          proto_item_append_text(parent_item, " #%u", i);
           subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
-          i++;
+          i += 1;
 
-          proto_tree_add_ether(subframe_tree, hf_ieee80211_addr_da, next_tvb, msdu_offset, 6, lcl_dst);
-          proto_tree_add_ether(subframe_tree, hf_ieee80211_addr_sa, next_tvb, msdu_offset+6, 6, lcl_src);
-          proto_tree_add_uint_format(subframe_tree, hf_ieee80211_mcsset_highest_data_rate, next_tvb, msdu_offset+12, 2,
-          msdu_length, "MSDU length: 0x%04X", msdu_length);
+          proto_tree_add_item(subframe_tree, hf_ieee80211_addr_da, next_tvb, msdu_offset, 6, ENC_NA);
+          proto_tree_add_item(subframe_tree, hf_ieee80211_addr_sa, next_tvb, msdu_offset+6, 6, ENC_NA);
+          proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_length, next_tvb, msdu_offset+12, 2, ENC_BIG_ENDIAN);
 
           msdu_offset += 14;
           msdu_tvb = tvb_new_subset(next_tvb, msdu_offset, msdu_length, -1);
@@ -11362,26 +14350,21 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
            packet starts with 0x00 0x00 and, if so, treat it as an OLPC
            frame. */
       encap_type = ENCAP_802_2;
-      TRY {
+      if (tvb_bytes_exist(next_tvb, 0, 2)) {
         octet1 = tvb_get_guint8(next_tvb, 0);
         octet2 = tvb_get_guint8(next_tvb, 1);
-        if (octet1 != 0xaa || octet2 != 0xaa) {
-          if (tvb_memeql(next_tvb, 6, pinfo->dl_src.data, 6) == 0 ||
-              tvb_memeql(next_tvb, 0, pinfo->dl_dst.data, 6) == 0)
+        if ((octet1 != 0xaa) || (octet2 != 0xaa)) {
+          if ((tvb_memeql(next_tvb, 6, (const guint8 *)pinfo->dl_src.data, 6) == 0) ||
+              (tvb_memeql(next_tvb, 0, (const guint8 *)pinfo->dl_dst.data, 6) == 0))
             encap_type = ENCAP_ETHERNET;
-          else if (octet1 == 0xff && octet2 == 0xff)
+          else if ((octet1 == 0xff) && (octet2 == 0xff))
             encap_type = ENCAP_IPX;
-          else if (octet1 == 0x00 && octet2 == 0x00) {
+          else if ((octet1 == 0x00) && (octet2 == 0x00)) {
             proto_tree_add_text(tree, next_tvb, 0, 2, "Mysterious OLPC stuff");
             next_tvb = tvb_new_subset_remaining (next_tvb, 2);
           }
         }
       }
-      CATCH2(BoundsError, ReportedBoundsError) {
-      ; /* do nothing */
-
-      }
-      ENDTRY;
 
       switch (encap_type) {
 
@@ -11411,20 +14394,20 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
  * Dissect 802.11 with a variable-length link-layer header.
  */
 static void
-dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
+dissect_ieee80211 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
   dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
-      pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, FALSE);
+                            pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, FALSE);
 }
 
 /*
  * Dissect 802.11 with a variable-length link-layer header and data padding.
  */
 static void
-dissect_ieee80211_datapad (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
+dissect_ieee80211_datapad (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
   dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
-      pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, TRUE, FALSE);
+                            pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, TRUE, FALSE);
 }
 
 /*
@@ -11433,7 +14416,7 @@ dissect_ieee80211_datapad (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tre
  * packets with the control field byte swapped).
  */
 static void
-dissect_ieee80211_bsfc (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
+dissect_ieee80211_bsfc (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
   dissect_ieee80211_common (tvb, pinfo, tree, FALSE, 0, TRUE, FALSE, FALSE);
 }
@@ -11443,7 +14426,7 @@ dissect_ieee80211_bsfc (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
  * maximum length).
  */
 static void
-dissect_ieee80211_fixed (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
+dissect_ieee80211_fixed (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
   dissect_ieee80211_common (tvb, pinfo, tree, TRUE, 0, FALSE, FALSE, FALSE);
 }
@@ -11454,837 +14437,541 @@ dissect_ieee80211_fixed (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
  * If so, we can dispense with this.
  */
 static void
-dissect_ieee80211_ht (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
+dissect_ieee80211_ht (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
   dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
-      pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, TRUE);
+                            pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, TRUE);
 }
 
 static void
 wlan_defragment_init(void)
 {
-  fragment_table_init(&wlan_fragment_table);
-  reassembled_table_init(&wlan_reassembled_table);
+  reassembly_table_init(&wlan_reassembly_table,
+                        &addresses_reassembly_table_functions);
 }
 
 /* ------------- */
-static guint
-retransmit_hash(gconstpointer k)
-{
-  const retransmit_key *key = (const retransmit_key *)k;
-  guint hash_val;
-  int i;
-
-  hash_val = 0;
-  for (i = 0; i < 6; i++)
-    hash_val += key->bssid[i];
-
-  for (i = 0; i < 6; i++)
-    hash_val += key->src[i];
-
-  return hash_val;
-}
-
-static gint
-retransmit_equal(gconstpointer k1, gconstpointer k2)
-{
-  const retransmit_key *key1 = (const retransmit_key *)k1;
-  const retransmit_key *key2 = (const retransmit_key *)k2;
-
-  return ( (!memcmp(key1->bssid, key2->bssid, 6) && !memcmp( key1->src, key2->src, 6))? TRUE:FALSE);
-}
-
-static guint
-frame_hash(gconstpointer k)
-{
-  guint32 frame = GPOINTER_TO_UINT(k);
-
-  return frame;
-}
-
-static gint
-frame_equal(gconstpointer k1, gconstpointer k2)
-{
-  guint32 frame1 = GPOINTER_TO_UINT(k1);
-  guint32 frame2 = GPOINTER_TO_UINT(k2);
-
-  return frame1==frame2;
-}
-
-static void
-wlan_retransmit_init(void)
-{
-  if ( fc_analyse_retransmit_table ){
-      g_hash_table_destroy(fc_analyse_retransmit_table);
-      fc_analyse_retransmit_table = NULL;
-  }
-
-  if( fc_first_frame_table ){
-      g_hash_table_destroy(fc_first_frame_table);
-      fc_first_frame_table = NULL;
-  }
-
-  if (wlan_subdissector)
-      return;
-
-  fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
-  fc_first_frame_table = g_hash_table_new( frame_hash, frame_equal);
-
-}
-
-void
-proto_register_ieee80211 (void)
-{
-  static const value_string frame_type[] = {
-    {MGT_FRAME,     "Management frame"},
-    {CONTROL_FRAME, "Control frame"},
-    {DATA_FRAME,    "Data frame"},
-    {0,             NULL}
-  };
-
-  static const value_string tofrom_ds[] = {
-    {0,                       "Not leaving DS or network is operating "
-      "in AD-HOC mode (To DS: 0 From DS: 0)"},
-    {FLAG_TO_DS,              "Frame from STA to DS via an AP (To DS: 1 "
-      "From DS: 0)"},
-    {FLAG_FROM_DS,            "Frame from DS to a STA via AP(To DS: 0 "
-      "From DS: 1)"},
-    {FLAG_TO_DS|FLAG_FROM_DS, "WDS (AP to AP) or Mesh (MP to MP) Frame "
-      "(To DS: 1 From DS: 1)"},
-    {0, NULL}
-  };
-
-  static const true_false_string tods_flag = {
-    "Frame is entering DS",
-    "Frame is not entering DS"
-  };
-
-  static const true_false_string fromds_flag = {
-    "Frame is exiting DS",
-    "Frame is not exiting DS"
-  };
-
-  static const true_false_string more_frags = {
-    "More fragments follow",
-    "This is the last fragment"
-  };
-
-  static const true_false_string retry_flags = {
-    "Frame is being retransmitted",
-    "Frame is not being retransmitted"
-  };
-
-  static const true_false_string pm_flags = {
-    "STA will go to sleep",
-    "STA will stay up"
-  };
-
-  static const true_false_string md_flags = {
-    "Data is buffered for STA at AP",
-    "No data buffered"
-  };
-
-  static const true_false_string protected_flags = {
-    "Data is protected",
-    "Data is not protected"
-  };
-
-  static const true_false_string order_flags = {
-    "Strictly ordered",
-    "Not strictly ordered"
-  };
-
-  static const true_false_string cf_ess_flags = {
-    "Transmitter is an AP",
-    "Transmitter is a STA"
-  };
-
-
-  static const true_false_string cf_privacy_flags = {
-    "AP/STA can support WEP",
-    "AP/STA cannot support WEP"
-  };
-
-  static const true_false_string cf_preamble_flags = {
-    "Short preamble allowed",
-    "Short preamble not allowed"
-  };
-
-  static const true_false_string cf_pbcc_flags = {
-    "PBCC modulation allowed",
-    "PBCC modulation not allowed"
-  };
-
-  static const true_false_string cf_agility_flags = {
-    "Channel agility in use",
-    "Channel agility not in use"
-  };
-
-  static const true_false_string short_slot_time_flags = {
-    "Short slot time in use",
-    "Short slot time not in use"
-  };
-
-  static const true_false_string dsss_ofdm_flags = {
-    "DSSS-OFDM modulation allowed",
-    "DSSS-OFDM modulation not allowed"
-  };
-
-  static const true_false_string cf_spec_man_flags = {
-    "dot11SpectrumManagementRequired TRUE",
-    "dot11SpectrumManagementRequired FALSE"
-  };
-
-  static const true_false_string cf_apsd_flags = {
-    "apsd implemented",
-    "apsd not implemented"
-  };
-
-  static const true_false_string cf_del_blk_ack_flags = {
-    "delayed block ack implemented",
-    "delayed block ack not implemented"
-  };
-
-  static const true_false_string cf_imm_blk_ack_flags = {
-    "immediate block ack implemented",
-    "immediate block ack not implemented"
-  };
-  static const true_false_string cf_ibss_flags = {
-    "Transmitter belongs to an IBSS",
-    "Transmitter belongs to a BSS"
-  };
-
-  static const true_false_string eosp_flag = {
-    "End of service period",
-    "Service period"
-  };
-
-  static const true_false_string bit4_flag = {
-    "Bits 8-15 of QoS Control field are Queue Size",
-    "Bits 8-15 of QoS Control field are TXOP Duration Requested"
-  };
-
-  static const true_false_string ieee80211_qos_amsdu_present_flag = {
-    "A-MSDU",
-    "MSDU"
-  };
-
-  static const value_string sta_cf_pollable[] = {
-    {0x00, "Station is not CF-Pollable"},
-    {0x02, "Station is CF-Pollable, "
-     "not requesting to be placed on the  CF-polling list"},
-    {0x01, "Station is CF-Pollable, "
-     "requesting to be placed on the CF-polling list"},
-    {0x03, "Station is CF-Pollable, requesting never to be polled"},
-    {0x0200, "QSTA requesting association in QBSS"},
-    {0, NULL}
-  };
-
-  static const value_string ap_cf_pollable[] = {
-    {0x00, "No point coordinator at AP"},
-    {0x02, "Point coordinator at AP for delivery only (no polling)"},
-    {0x01, "Point coordinator at AP for delivery and polling"},
-    {0x03, "Reserved"},
-    {0x0200, "QAP (HC) does not use CFP for delivery of unicast data type frames"},
-    {0x0202, "QAP (HC) uses CFP for delivery, but does not send CF-Polls to non-QoS STAs"},
-    {0x0201, "QAP (HC) uses CFP for delivery, and sends CF-Polls to non-QoS STAs"},
-    {0x0203, "Reserved"},
-    {0, NULL}
-  };
-
-
-  static const value_string auth_alg[] = {
-    {0x00, "Open System"},
-    {0x01, "Shared key"},
-    {0x02, "Fast BSS Transition"},
-    {0x80, "Network EAP"},  /* Cisco proprietary? */
-    {0, NULL}
-  };
-
-  static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
-    "Permitted in QoS Data MPDUs",
-    "Not Permitted"
-  };
-
-  static const true_false_string ff_block_ack_params_policy_flag = {
-    "Immediate Block Ack",
-    "Delayed Block Ack"
-  };
-
-  static const value_string  ff_channel_width_vals[] = {
-    {0x00, "20 MHz channel width only"},
-    {0x01, "Any channel width in the STA's Supported Channel Width Set"},
-    {0, NULL}
-  };
-
-  static const true_false_string ff_qos_info_ap_q_ack_flag = {
-      "Implemented",
-      "Not Implemented"
-  };
-
-  static const true_false_string ff_qos_info_ap_queue_req_flag = {
-      "Can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
-      "Can NOT process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
-  };
-
-  static const true_false_string ff_qos_info_ap_txop_request_flag = {
-      "Can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
-      "Can NOT process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
-  };
-
-  static const true_false_string ff_qos_info_sta_ac_flag = {
-      "Trigger-enabled and Delivery-enabled",
-      "Neither Trigger-enabled nor Delivery-enabled"
-  };
-
-  static const true_false_string ff_qos_info_sta_q_ack_flag = {
-      "Implemented",
-      "Not Implemented"
-  };
-
-  static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
-    {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
-    {0x01, "AP may deliver a maximum of two MSDUs and MMPDUs per SP"},
-    {0x02, "AP may deliver a maximum of four MSDUs and MMPDUs per SP"},
-    {0x03, "AP may deliver a maximum of six MSDUs and MMPDUs per SP"},
-    {0, NULL}
-  };
-
-  static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
-      "Can process ACK frames with the More Data bit in the Frame Control field set to 1",
-      "Can NOT process ACK frames with the More Data bit in the Frame Control field set to 1"
-  };
+static guint
+retransmit_hash(gconstpointer k)
+{
+  const retransmit_key *key = (const retransmit_key *)k;
+  guint hash_val;
+  int   i;
 
-  static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
-      "Dynamic SM Power Save mode",
-      "Static SM Power Save mode"
-  };
+  hash_val = 0;
+  for (i = 0; i < 6; i++)
+    hash_val += key->bssid[i];
 
-  static const true_false_string ff_pco_phase_cntrl_flag = {
-      "40 MHz Phase",
-      "20 MHz Phase"
-  };
+  for (i = 0; i < 6; i++)
+    hash_val += key->src[i];
 
-  static const true_false_string ff_psmp_param_set_more_psmp_flag = {
-      "More PSMP Sequences Follow",
-      "No PSMP Sequences Follow"
-  };
+  return hash_val;
+}
 
-  static const value_string ff_mimo_cntrl_nc_index_flags[] = {
-    {0x00, "1 Column"},
-    {0x01, "2 Columns"},
-    {0x02, "3 Columns"},
-    {0x03, "4 Columns"},
-    {0, NULL}
-  };
+static gint
+retransmit_equal(gconstpointer k1, gconstpointer k2)
+{
+  const retransmit_key *key1 = (const retransmit_key *)k1;
+  const retransmit_key *key2 = (const retransmit_key *)k2;
 
-  static const value_string ff_mimo_cntrl_nr_index_flags[] = {
-    {0x00, "1 Row"},
-    {0x01, "2 Rows"},
-    {0x02, "3 Rows"},
-    {0x03, "4 Rows"},
-    {0, NULL}
-  };
+  return ((!memcmp(key1->bssid, key2->bssid, 6) && !memcmp(key1->src, key2->src, 6)) ? TRUE:FALSE);
+}
 
-  static const true_false_string ff_mimo_cntrl_channel_width_flag = {
-      "40 MHz",
-      "20 MHz"
-  };
+static guint
+frame_hash(gconstpointer k)
+{
+  guint32 frame = GPOINTER_TO_UINT(k);
 
-  static const true_false_string ff_ht_info_information_request_flag = {
-      "Requesting HT Information Exchange management action frame",
-      "Should not send an HT Information Exchange management action frame"
-  };
+  return frame;
+}
 
-  static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
-      "Transmitting station is intolerant of 40 MHz operation",
-      "Transmitting station permits 40 MHz operation"
-  };
+static gint
+frame_equal(gconstpointer k1, gconstpointer k2)
+{
+  guint32 frame1 = GPOINTER_TO_UINT(k1);
+  guint32 frame2 = GPOINTER_TO_UINT(k2);
 
-  static const true_false_string ff_ht_info_sta_chan_width_flag = {
-      "40 MHz",
-      "20 MHz"
-  };
+  return frame1==frame2;
+}
 
-  static const value_string ff_ht_action_flags[] = {
-    {HT_ACTION_NOTIFY_CHAN_WIDTH, "Notify Channel Width"},
-    {HT_ACTION_SM_PWR_SAVE, "Spatial Multiplexing (SM) Power Save"},
-    {HT_ACTION_PSMP_ACTION, "Power Save Multi-Poll (PSMP) action frame"},
-    {HT_ACTION_SET_PCO_PHASE, "Set PCO Phase"},
-    {HT_ACTION_MIMO_CSI, "MIMO CSI Matrices"},
-    {HT_ACTION_MIMO_BEAMFORMING, "MIMO Non-compressed Beamforming"},
-    {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING, "MIMO Compressed Beamforming"},
-    {HT_ACTION_ANT_SEL_FEEDBACK, "Antenna Selection Indices Feedback"},
-    {HT_ACTION_HT_INFO_EXCHANGE, "HT Information Exchange"},
-    {0x00, NULL}
-  };
+/* Davide Schiera (2006-11-26): this function will try to decrypt with WEP or  */
+/* WPA and return a tvb to the caller to add a new tab. It returns the    */
+/* algorithm used for decryption (WEP, TKIP, CCMP) and the header and    */
+/* trailer lengths.                                      */
+static tvbuff_t *
+try_decrypt(tvbuff_t *tvb, guint offset, guint len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer)
+{
+  const guint8      *enc_data;
+  tvbuff_t          *decr_tvb = NULL;
+  guint32            dec_caplen;
+  guchar             dec_data[AIRPDCAP_MAX_CAPLEN];
+  AIRPDCAP_KEY_ITEM  used_key;
 
-  static const value_string ff_mimo_cntrl_grouping_flags[] = {
-    {0x00, "No Grouping"},
-    {0x01, "Carrier Groups of 2"},
-    {0x02, "Carrier Groups of 4"},
-    {0x03, "Reserved"},
-    {0, NULL}
-  };
+  if (!enable_decryption)
+    return NULL;
 
-  static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
-    {0x00, "4 Bits"},
-    {0x01, "5 Bits"},
-    {0x02, "6 Bits"},
-    {0x03, "8 Bits"},
-    {0, NULL}
-  };
+  /* get the entire packet                                  */
+  enc_data = tvb_get_ptr(tvb, 0, len+offset);
 
-  static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
-    {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
-    {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
-    {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
-    {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
-    {0, NULL}
-  };
+  /*  process packet with AirPDcap                              */
+  if (AirPDcapPacketProcess(&airpdcap_ctx, enc_data, offset, offset+len, dec_data, &dec_caplen,
+                            &used_key, FALSE, TRUE)==AIRPDCAP_RET_SUCCESS)
+  {
+    guint8 *tmp;
+    *algorithm=used_key.KeyType;
+    switch (*algorithm) {
+      case AIRPDCAP_KEY_TYPE_WEP:
+        *sec_header=AIRPDCAP_WEP_HEADER;
+        *sec_trailer=AIRPDCAP_WEP_TRAILER;
+        break;
+      case AIRPDCAP_KEY_TYPE_CCMP:
+        *sec_header=AIRPDCAP_RSNA_HEADER;
+        *sec_trailer=AIRPDCAP_CCMP_TRAILER;
+        break;
+      case AIRPDCAP_KEY_TYPE_TKIP:
+        *sec_header=AIRPDCAP_RSNA_HEADER;
+        *sec_trailer=AIRPDCAP_TKIP_TRAILER;
+        break;
+      default:
+        return NULL;
+    }
 
+    /* allocate buffer for decrypted payload                      */
+    tmp = (guint8 *)g_memdup(dec_data+offset, dec_caplen-offset);
 
+    len = dec_caplen-offset;
 
-  static const value_string ff_pa_action_codes[] = {
-    {PA_DSE_ENABLEMENT, "DSE enablement"},
-    {PA_DSE_DEENABLEMENT, "DSE deenablement"},
-    {PA_DSE_REG_LOC_ANNOUNCEMENT, "DSE Registered Location Announcement"},
-    {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement"},
-    {PA_DSE_MEASUREMENT_REQUEST, "DSE measurement request"},
-    {PA_DSE_MEASUREMENT_REPORT, "DSE measurement report"},
-    {PA_MEASUREMENT_PILOT, "Measurement Pilot"},
-    {PA_DSE_POWER_CONSTRAINT, "DSE power constraint"},
-    {PA_VENDOR_SPECIFIC, "Vendor Specific"},
-    {PA_GAS_INITIAL_REQUEST, "GAS Initial Request"},
-    {PA_GAS_INITIAL_RESPONSE, "GAS Initial Response"},
-    {PA_GAS_COMEBACK_REQUEST, "GAS Comeback Request"},
-    {PA_GAS_COMEBACK_RESPONSE, "GAS Comeback Response"},
-    {PA_TDLS_DISCOVERY_RESPONSE, "TDLS Discovery Response"},
-    {0x00, NULL}
-  };
+    /* decrypt successful, let's set up a new data tvb.              */
+    decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
+    tvb_set_free_cb(decr_tvb, g_free);
+  }
 
-  static const value_string category_codes[] = {
-    {CAT_SPECTRUM_MGMT, "Spectrum Management (SM)"},
-    {0x80 | CAT_SPECTRUM_MGMT, "Spectrum Management (SM) (error)"},
-    {CAT_QOS, "Quality of Service (QoS)"},
-    {0x80 | CAT_QOS, "Quality of Service (QoS (error))"},
-    {CAT_DLS, "Direct-Link Setup (DLS)"},
-    {0x80 | CAT_DLS, "Direct-Link Setup (DLS) (error)"},
-    {CAT_BLOCK_ACK, "Block Ack"},
-    {0x80 | CAT_BLOCK_ACK, "Block Ack (error)"},
-    {CAT_PUBLIC, "Public Action"},
-    {0x80 | CAT_PUBLIC, "Public Action (error)"},
-    {CAT_RADIO_MEASUREMENT, "Radio Measurement"},
-    {0x80 | CAT_RADIO_MEASUREMENT, "Radio Measurement (error)"},
-    {CAT_FAST_BSS_TRANSITION, "Fast BSS Transition"},
-    {0x80 | CAT_FAST_BSS_TRANSITION, "Fast BSS Transition (error)"},
-    {CAT_HT, "High Throughput"},
-    {0x80 | CAT_HT, "High Throughput (error)"},
-    {CAT_SA_QUERY, "SA Query"},
-    {0x80 | CAT_SA_QUERY, "SA Query (error)"},
-    {CAT_PUBLIC_PROTECTED, "Protected Dual of Public Action"},
-    {0x80 | CAT_PUBLIC_PROTECTED, "Protected Dual of Public Action (error)"},
-    {CAT_WNM, "WNM"},
-    {0x80 | CAT_WNM, "WNM (error)"},
-    {CAT_UNPROTECTED_WNM, "Unprotected WNM"},
-    {0x80 | CAT_UNPROTECTED_WNM, "Unprotected WNM (error)"},
-    {CAT_TDLS, "TDLS"},
-    {0x80 | CAT_TDLS, "TDLS (error)"},
-    {CAT_MESH, "MESH"},
-    {0x80 | CAT_MESH, "Mesh (error)"},
-    {CAT_MULTIHOP, "Multihop"},
-    {0x80 | CAT_MULTIHOP, "Multihop (error)"},
-    {CAT_SELF_PROTECTED, "Self-protected"},
-    {0x80 | CAT_SELF_PROTECTED, "Self-protected (error)"},
-    {CAT_MGMT_NOTIFICATION, "Management Notification"},
-    {0x80 | CAT_MGMT_NOTIFICATION, "Management Notification (error)"},
-    {CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected"},
-    {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected (error)"},
-    {CAT_VENDOR_SPECIFIC, "Vendor Specific"},
-    {0x80 | CAT_VENDOR_SPECIFIC, "Vendor Specific (error)"},
-    {0, NULL}
-  };
+  return decr_tvb;
+}
+/*  Davide Schiera -----------------------------------------------------------  */
 
-  static const value_string action_codes[] ={
-    {SM_ACTION_MEASUREMENT_REQUEST, "Measurement Request"},
-    {SM_ACTION_MEASUREMENT_REPORT, "Measurement Report"},
-    {SM_ACTION_TPC_REQUEST, "TPC Request"},
-    {SM_ACTION_TPC_REPORT, "TPC Report"},
-    {SM_ACTION_CHAN_SWITCH_ANNC, "Channel Switch Announcement"},
-    {0, NULL}
-  };
 
-  static const value_string vendor_action_types_mrvl[] ={
-    {MRVL_ACTION_MESH_MANAGEMENT, "Mesh Management"},
-    {0, NULL}
-  };
+/* Collect our WEP and WPA keys */
+static void
+set_airpdcap_keys(void)
+{
+  PAIRPDCAP_KEYS_COLLECTION  keys;
+  GByteArray                *bytes = NULL;
+  guint                      i;
 
-  static const value_string mesh_mgt_action_codes_mrvl[] ={
-    {MRVL_MESH_MGMT_ACTION_RREQ, "Route Request"},
-    {MRVL_MESH_MGMT_ACTION_RREP, "Route Response"},
-    {MRVL_MESH_MGMT_ACTION_RERR, "Route Error"},
-    {MRVL_MESH_MGMT_ACTION_PLDM, "Peer Link Down"},
-    {0, NULL}
-  };
+  keys = (PAIRPDCAP_KEYS_COLLECTION)se_alloc(sizeof(AIRPDCAP_KEYS_COLLECTION));
+  keys->nKeys = 0;
 
-  static const value_string mesh_path_selection_codes[] ={
-    {0x0, "Hybrid Wireless Mesh Protocol"},
-    {0, NULL}
-  };
+  for (i = 0; (uat_wep_key_records != NULL) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS); i++)
+  {
+    decryption_key_t *dk;
+    dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key);
 
-  static const value_string mesh_metric_codes[] ={
-    {0x0, "Airtime Link Metric"},
-    {0, NULL}
-  };
+    if (dk != NULL)
+    {
+      AIRPDCAP_KEY_ITEM          key;
+      if (dk->type == AIRPDCAP_KEY_TYPE_WEP)
+      {
+        gboolean res;
+        key.KeyType = AIRPDCAP_KEY_TYPE_WEP;
 
-  static const value_string wme_action_codes[] = {
-    {0x00, "Setup request"},
-    {0x01, "Setup response"},
-    {0x02, "Teardown"},
-    {0x00, NULL}
-  };
+        bytes = g_byte_array_new();
+        res = hex_str_to_bytes(dk->key->str, bytes, FALSE);
 
-  static const value_string wme_status_codes[] = {
-    {0x00, "Admission accepted"},
-    {0x01, "Invalid parameters"},
-    {0x03, "Refused"},
-    {0x00, NULL}
-  };
+        if (dk->key->str && res && (bytes->len > 0) && (bytes->len <= AIRPDCAP_WEP_KEY_MAXLEN))
+        {
+          /*
+           * WEP key is correct (well, the can be even or odd, so it is not
+           * a real check, I think... is a check performed somewhere in the
+           * AirPDcap function???)
+           */
+          memcpy(key.KeyData.Wep.WepKey, bytes->data, bytes->len);
+          key.KeyData.Wep.WepKeyLen = bytes->len;
+          keys->Keys[keys->nKeys] = key;
+          keys->nKeys += 1;
+        }
+      }
+      else if (dk->type == AIRPDCAP_KEY_TYPE_WPA_PWD)
+      {
+        key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PWD;
 
-  static const value_string mesh_action[] ={
-    {MESH_ACTION_LINK_METRIC_REPORT, "Mesh Link Metric Report"},
-    {MESH_ACTION_HWMP, "HWMP Mesh Path Selection"},
-    {MESH_ACTION_GATE_ANNOUNCE, "Gate Announcement"},
-    {MESH_ACTION_CONGESTION_CTL, "Congestion Control Notification"},
-    {MESH_ACTION_MCCA_SETUP_REQUEST, "MCCA Setup Request"},
-    {MESH_ACTION_MCCA_SETUP_REPLY, "MCCA Setup Reply"},
-    {MESH_ACTION_MCCA_ADV_REQUEST, "MCCA Advertisement Request"},
-    {MESH_ACTION_MCCA_ADV, "MCCA Advertisement"},
-    {MESH_ACTION_MCCA_TEARDOWN, "MCCA Teardown"},
-    {MESH_ACTION_TBTT_ADJ_REQUEST, "TBTT Adjustment Request"},
-    {MESH_ACTION_TBTT_ADJ_RESPONSE, "TBTT Adjustment Response"},
-    {0, NULL}
-  };
+        /* XXX - This just lops the end if the key off if it's too long.
+         *       Should we handle this more gracefully? */
+        g_strlcpy(key.UserPwd.Passphrase, dk->key->str, AIRPDCAP_WPA_PASSPHRASE_MAX_LEN+1);
 
-  static const value_string multihop_action[] ={
-    {MULTIHOP_ACTION_PROXY_UPDATE, "Proxy Update"},
-    {MULTIHOP_ACTION_PROXY_UPDATE_CONF, "Proxy Update Confirmation"},
-    {0, NULL}
-  };
+        key.UserPwd.SsidLen = 0;
+        if ((dk->ssid != NULL) && (dk->ssid->len <= AIRPDCAP_WPA_SSID_MAX_LEN))
+        {
+          memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
+          key.UserPwd.SsidLen = dk->ssid->len;
+        }
 
-  static const value_string selfprot_action[] = {
-    {SELFPROT_ACTION_MESH_PEERING_OPEN, "Mesh Peering Open"},
-    {SELFPROT_ACTION_MESH_PEERING_CONFIRM, "Mesh Peering Confirm"},
-    {SELFPROT_ACTION_MESH_PEERING_CLOSE, "Mesh Peering Close"},
-    {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM, "Mesh Group Key Inform"},
-    {SELFPROT_ACTION_MESH_GROUP_KEY_ACK, "Mesh Group Key Ack"},
-    {0, NULL}
-  };
+        keys->Keys[keys->nKeys] = key;
+        keys->nKeys += 1;
+      }
+      else if (dk->type == AIRPDCAP_KEY_TYPE_WPA_PSK)
+      {
+        key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PSK;
 
-  static const value_string mesh_peering_proto_ids[] = {
-    {MESH_PEERING_PROTO_MGMT, "Mesh peering management protocol"},
-    {MESH_PEERING_PROTO_AMPE, "Authenticated mesh peering exchange protocol"},
-    {MESH_PEERING_PROTO_VENDOR, "Vendor specific"},
-    {0, NULL}
-  };
+        bytes = g_byte_array_new();
+        hex_str_to_bytes(dk->key->str, bytes, FALSE);
 
-  static const true_false_string hwmp_targ_usn_flags = {
-    "[USN = 1] Target Sequence Number Unknown at Originator",
-    "[USN = 0] Target Sequence Number Known at Originator"
-  };
+        /* XXX - Pass the correct array of bytes... */
+        if (bytes->len <= AIRPDCAP_WPA_PSK_LEN) {
+          memcpy(key.KeyData.Wpa.Psk, bytes->data, bytes->len);
 
-  static const true_false_string hwmp_targ_to_flags = {
-    "[TO = 1] Only Target Will Respond",
-    "[TO = 0] Intermediate Nodes May Respond"
-  };
+          keys->Keys[keys->nKeys] = key;
+          keys->nKeys += 1;
+        }
+      }
+    }
+  }
 
-  static const value_string ack_policy[] = {
-    {0x00, "Normal Ack"},
-    {0x01, "No Ack"},
-    {0x02, "No explicit acknowledgment"},
-    {0x03, "Block Ack"},
-    {0x00, NULL}
-  };
+  /* Now set the keys */
+  AirPDcapSetKeys(&airpdcap_ctx, keys->Keys, keys->nKeys);
+  if (bytes)
+    g_byte_array_free(bytes, TRUE);
 
-  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"},
-    {0, NULL}
-  };
+}
 
-  static const value_string ba_action_codes[] = {
-    {BA_ADD_BLOCK_ACK_REQUEST, "Add Block Ack Request"},
-    {BA_ADD_BLOCK_ACK_RESPONSE, "Add Block Ack Response"},
-    {BA_DELETE_BLOCK_ACK, "Delete Block Ack"},
-    {0x00, NULL}
-  };
+static void
+init_wepkeys(void)
+{
 
-  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"},
-    {0, NULL}
-  };
+  /*
+   * XXX - AirPDcap - That God sends it to us beautiful (che dio ce la mandi bona)
+   * The next lines will add a key to the AirPDcap context. The keystring will be added
+   * to the old WEP array too, but we don't care, because the packets will come here
+   * already decrypted... One of these days we will fix this too
+   */
+  set_airpdcap_keys();
+}
 
-  static const value_string tsinfo_type[] = {
-    {0x0, "Aperiodic or unspecified Traffic"},
-    {0x1, "Periodic Traffic"},
-    {0, NULL}
-  };
+/*
+ * This code had been taken from AirSnort crack.c function classify()
+ * Permission granted by snax <at> shmoo dot com
+ * weak_iv - determine which key byte an iv is useful in resolving
+ * parm     - p, pointer to the first byte of an IV
+ * return   -  n - this IV is weak for byte n of a WEP key
+ *            -1 - this IV is not weak for any key bytes
+ *
+ * This function tests for IVs that are known to satisfy the criteria
+ * for a weak IV as specified in FMS section 7.1
+ *
+ */
+static int
+weak_iv(guchar *iv)
+{
+  guchar sum, k;
 
-  static const value_string tsinfo_direction[] = {
-    {0x00, "Uplink"},
-    {0x01, "Downlink"},
-    {0x02, "Direct link"},
-    {0x03, "Bidirectional link"},
-    {0, NULL}
-  };
+  if ((iv[1] == 255) && (iv[0] > 2) && (iv[0] < 16)) {
+    return iv[0] -3;
+  }
 
-  static const value_string tsinfo_access[] = {
-    {0x00, "Reserved"},
-    {0x01, "EDCA"},
-    {0x02, "HCCA"},
-    {0x03, "HEMM"},
-    {0, NULL}
-  };
+  sum = iv[0] + iv[1];
+  if (sum == 1) {
+    if (iv[2] <= 0x0a) {
+      return iv[2] +2;
+    }
+    else if (iv[2] == 0xff) {
+      return 0;
+    }
+  }
+  k = 0xfe - iv[2];
+  if ((sum == k)  && ((iv[2] >= 0xf2) && (iv[2] <= 0xfe) && (iv[2] != 0xfd))) {
+    return k;
+  }
+  return -1;
+}
 
-  static const value_string qos_up[] = {
-    {0x00, "Best Effort"},
-    {0x01, "Background"},
-    {0x02, "Spare"},
-    {0x03, "Excellent Effort"},
-    {0x04, "Controlled Load"},
-    {0x05, "Video"},
-    {0x06, "Voice"},
-    {0x07, "Network Control"},
-    {0, NULL}
-  };
+static void
+wlan_retransmit_init(void)
+{
+  if (fc_analyse_retransmit_table) {
+    g_hash_table_destroy(fc_analyse_retransmit_table);
+    fc_analyse_retransmit_table = NULL;
+  }
 
-  static const value_string classifier_type[] = {
-    {0x00, "Ethernet parameters"},
-    {0x01, "TCP/UDP IP parameters"},
-    {0x02, "IEEE 802.1D/Q parameters"},
-    {0, NULL}
-  };
+  if (fc_first_frame_table) {
+    g_hash_table_destroy(fc_first_frame_table);
+    fc_first_frame_table = NULL;
+  }
 
-  static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
-      "Immediate Acknowledgement Required",
-      "Sender Does Not Require Immediate Acknowledgement"
-  };
+  if (wlan_subdissector)
+    return;
 
-  static const value_string ieee80211_block_ack_request_type_flags[] = {
-    {0x00, "Basic Block Ack Request"},
-    {0x01, "Reserved"},
-    {0x02, "Compressed Block Ack Request"},
-    {0x03, "Multi-TID Block Ack Request"},
-    {0x00, NULL}
-  };
+  fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
+  fc_first_frame_table = g_hash_table_new(frame_hash, frame_equal);
 
-  static const value_string ieee80211_block_ack_type_flags[] = {
-    {0x00, "Basic Block Ack"},
-    {0x01, "Reserved"},
-    {0x02, "Compressed Block"},
-    {0x03, "Multi-TID Block"},
-    {0x00, NULL}
-  };
+}
 
-  static const value_string ft_action_codes[] ={
-    {FT_ACTION_REQUEST, "FT Request"},
-    {FT_ACTION_RESPONSE, "FT Response"},
-    {FT_ACTION_CONFIRM, "FT Confirm"},
-    {FT_ACTION_ACK, "FT Ack"},
-    {0, NULL}
-  };
+static void
+dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+  int         offset = 0;
+  guint8      type;
+  int         tagged_parameter_tree_len;
+  proto_tree *tagged_tree;
 
-  static const value_string sa_query_action_codes[] ={
-    {SA_QUERY_REQUEST, "SA Query Request"},
-    {SA_QUERY_RESPONSE, "SA Query Response"},
-    {0, NULL}
-  };
+  type = tvb_get_guint8(tvb, offset);
+  proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
+                      1, ENC_BIG_ENDIAN);
+  offset += 1;
+  switch (type) {
+  case 1:
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
+    /* TODO: IEEE 802.11r */
+    break;
+  case 2:
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
+    col_clear(pinfo->cinfo, COL_INFO);
+    offset += add_fixed_field(tree, tvb, pinfo, offset, FIELD_ACTION);
+    tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
+    if (tagged_parameter_tree_len > 0) {
+      tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
+                                              tagged_parameter_tree_len);
+      ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
+                                       tagged_parameter_tree_len, -1);
+    }
+    break;
+  }
+}
 
-  static const value_string ieee80211_data_encap_payload_types[] = {
-    {1, "Remote Request/Response"},
-    {2, "TDLS"},
-    {0, NULL}
-  };
+void
+proto_register_ieee80211 (void)
+{
 
   static hf_register_info hf[] = {
     {&hf_ieee80211_fc_field,
-     {"Frame Control Field", "wlan.fc", FT_UINT16, BASE_HEX, NULL, 0,
+     {"Frame Control Field", "wlan.fc",
+      FT_UINT16, BASE_HEX, NULL, 0,
       "MAC Frame control", HFILL }},
 
     {&hf_ieee80211_fc_proto_version,
-     {"Version", "wlan.fc.version", FT_UINT8, BASE_DEC, NULL, 0,
+     {"Version", "wlan.fc.version",
+      FT_UINT8, BASE_DEC, NULL, 0x03,
       "MAC Protocol version", HFILL }},  /* 0 */
 
     {&hf_ieee80211_fc_frame_type,
-     {"Type", "wlan.fc.type", FT_UINT8, BASE_DEC, VALS(frame_type), 0,
+     {"Type", "wlan.fc.type",
+      FT_UINT8, BASE_DEC, VALS(frame_type), 0x0C,
       "Frame type", HFILL }},
 
     {&hf_ieee80211_fc_frame_subtype,
-     {"Subtype", "wlan.fc.subtype", FT_UINT8, BASE_DEC, NULL, 0,
+     {"Subtype", "wlan.fc.subtype",
+      FT_UINT8, BASE_DEC, NULL, 0xF0,
       "Frame subtype", HFILL }},  /* 2 */
 
     {&hf_ieee80211_fc_frame_type_subtype,
-     {"Type/Subtype", "wlan.fc.type_subtype", FT_UINT8, BASE_HEX, VALS(frame_type_subtype_vals), 0,
+     {"Type/Subtype", "wlan.fc.type_subtype",
+      FT_UINT8, 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_flags,
-     {"Protocol Flags", "wlan.flags", FT_UINT8, BASE_HEX, NULL, 0,
+     {"Flags", "wlan.flags",
+      FT_UINT8, BASE_HEX, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_fc_data_ds,
-     {"DS status", "wlan.fc.ds", FT_UINT8, BASE_HEX, VALS (&tofrom_ds), (FLAG_FROM_DS|FLAG_TO_DS),
+     {"DS status", "wlan.fc.ds",
+      FT_UINT8, BASE_HEX, VALS(tofrom_ds), (FLAG_FROM_DS|FLAG_TO_DS),
       "Data-frame DS-traversal status", HFILL }},  /* 3 */
 
     {&hf_ieee80211_fc_to_ds,
-     {"To DS", "wlan.fc.tods", FT_BOOLEAN, 8, TFS (&tods_flag), FLAG_TO_DS,
+     {"To DS", "wlan.fc.tods",
+      FT_BOOLEAN, 8, TFS (&tods_flag), FLAG_TO_DS,
       "To DS flag", HFILL }},    /* 4 */
 
     {&hf_ieee80211_fc_from_ds,
-     {"From DS", "wlan.fc.fromds", FT_BOOLEAN, 8, TFS (&fromds_flag), FLAG_FROM_DS,
+     {"From DS", "wlan.fc.fromds",
+      FT_BOOLEAN, 8, TFS (&fromds_flag), FLAG_FROM_DS,
       "From DS flag", HFILL }},    /* 5 */
 
     {&hf_ieee80211_fc_more_frag,
-     {"More Fragments", "wlan.fc.frag", FT_BOOLEAN, 8, TFS (&more_frags), FLAG_MORE_FRAGMENTS,
+     {"More Fragments", "wlan.fc.frag",
+      FT_BOOLEAN, 8, TFS (&more_fragments), FLAG_MORE_FRAGMENTS,
       "More Fragments flag", HFILL }},  /* 6 */
 
     {&hf_ieee80211_fc_retry,
-     {"Retry", "wlan.fc.retry", FT_BOOLEAN, 8, TFS (&retry_flags), FLAG_RETRY,
+     {"Retry", "wlan.fc.retry",
+      FT_BOOLEAN, 8, TFS (&retry_flags), FLAG_RETRY,
       "Retransmission flag", HFILL }},
 
     { &hf_ieee80211_fc_analysis_retransmission,
-     {"Retransmission", "wlan.analysis.retransmission", FT_NONE, BASE_NONE,
-      NULL, 0x0, "This frame is a suspected wireless retransmission", HFILL }},
+     {"Retransmission", "wlan.analysis.retransmission",
+      FT_NONE, BASE_NONE, NULL, 0x0,
+      "This frame is a suspected wireless retransmission", HFILL }},
 
     { &hf_ieee80211_fc_analysis_retransmission_frame,
-     {"Retransmission of frame", "wlan.analysis.retransmission_frame", FT_FRAMENUM, BASE_NONE,
-      NULL, 0x0, "This is a retransmission of frame #", HFILL }},
+     {"Retransmission of frame", "wlan.analysis.retransmission_frame",
+      FT_FRAMENUM, BASE_NONE, NULL, 0x0,
+      "This is a retransmission of frame #", HFILL }},
 
     {&hf_ieee80211_fc_pwr_mgt,
-     {"PWR MGT", "wlan.fc.pwrmgt", FT_BOOLEAN, 8, TFS (&pm_flags), FLAG_POWER_MGT,
+     {"PWR MGT", "wlan.fc.pwrmgt",
+      FT_BOOLEAN, 8, TFS (&pm_flags), FLAG_POWER_MGT,
       "Power management status", HFILL }},
 
     {&hf_ieee80211_fc_more_data,
-     {"More Data", "wlan.fc.moredata", FT_BOOLEAN, 8, TFS (&md_flags), FLAG_MORE_DATA,
+     {"More Data", "wlan.fc.moredata",
+      FT_BOOLEAN, 8, TFS (&md_flags), FLAG_MORE_DATA,
       "More data flag", HFILL }},
 
     {&hf_ieee80211_fc_protected,
-     {"Protected flag", "wlan.fc.protected", FT_BOOLEAN, 8, TFS (&protected_flags), FLAG_PROTECTED,
+     {"Protected flag", "wlan.fc.protected",
+      FT_BOOLEAN, 8, TFS (&protected_flags), FLAG_PROTECTED,
       NULL, HFILL }},
 
     {&hf_ieee80211_fc_order,
-     {"Order flag", "wlan.fc.order", FT_BOOLEAN, 8, TFS (&order_flags), FLAG_ORDER,
+     {"Order flag", "wlan.fc.order",
+      FT_BOOLEAN, 8, TFS (&order_flags), FLAG_ORDER,
       "Strictly ordered flag", HFILL }},
 
     {&hf_ieee80211_assoc_id,
-     {"Association ID","wlan.aid",FT_UINT16, BASE_DEC, NULL, 0x3FFF,
+     {"Association ID","wlan.aid"
+      ,FT_UINT16, BASE_DEC, NULL, 0x3FFF,
       "Association-ID field", HFILL }},
 
     {&hf_ieee80211_did_duration,
-     {"Duration", "wlan.duration", FT_UINT16, BASE_DEC, NULL, 0,
+     {"Duration", "wlan.duration",
+      FT_UINT16, BASE_DEC, NULL, 0x7FFF,
       "Duration field", HFILL }},
 
     {&hf_ieee80211_addr_da,
-     {"Destination address", "wlan.da", FT_ETHER, BASE_NONE, NULL, 0,
+     {"Destination address", "wlan.da",
+      FT_ETHER, BASE_NONE, NULL, 0,
       "Destination Hardware Address", HFILL }},
 
     {&hf_ieee80211_addr_sa,
-     {"Source address", "wlan.sa", FT_ETHER, BASE_NONE, NULL, 0,
+     {"Source address", "wlan.sa",
+      FT_ETHER, BASE_NONE, NULL, 0,
       "Source Hardware Address", HFILL }},
 
     { &hf_ieee80211_addr,
-      {"Hardware address", "wlan.addr", FT_ETHER, BASE_NONE, NULL, 0,
+      {"Hardware address", "wlan.addr",
+       FT_ETHER, BASE_NONE, NULL, 0,
        "SA, DA, BSSID, RA or TA Hardware Address", HFILL }},
 
     {&hf_ieee80211_addr_ra,
-     {"Receiver address", "wlan.ra", FT_ETHER, BASE_NONE, NULL, 0,
+     {"Receiver address", "wlan.ra",
+      FT_ETHER, BASE_NONE, NULL, 0,
       "Receiving Station Hardware Address", HFILL }},
 
     {&hf_ieee80211_addr_ta,
-     {"Transmitter address", "wlan.ta", FT_ETHER, BASE_NONE, NULL, 0,
+     {"Transmitter address", "wlan.ta",
+      FT_ETHER, BASE_NONE, NULL, 0,
       "Transmitting Station Hardware Address", HFILL }},
 
     {&hf_ieee80211_addr_bssid,
-     {"BSS Id", "wlan.bssid", FT_ETHER, BASE_NONE, NULL, 0,
+     {"BSS Id", "wlan.bssid",
+      FT_ETHER, BASE_NONE, NULL, 0,
       "Basic Service Set ID", HFILL }},
 
     {&hf_ieee80211_frag_number,
-     {"Fragment number", "wlan.frag", FT_UINT16, BASE_DEC, NULL, 0,
+     {"Fragment number", "wlan.frag",
+      FT_UINT16, BASE_DEC, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_seq_number,
-     {"Sequence number", "wlan.seq", FT_UINT16, BASE_DEC, NULL, 0,
+     {"Sequence number", "wlan.seq",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_mesh_control_field,
+     {"Mesh Control Field", "wlan.mesh.control_field",
+      FT_NONE, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_qos,
+     {"Qos Control", "wlan.qos",
+      FT_UINT16, BASE_HEX, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_qos_tid,
-     {"TID", "wlan.qos.tid", FT_UINT16, BASE_DEC, NULL, 0,
+     {"TID", "wlan.qos.tid",
+      FT_UINT16, BASE_DEC, NULL, 0x000F,
       NULL, HFILL }},
 
     {&hf_ieee80211_qos_priority,
-     {"Priority", "wlan.qos.priority", FT_UINT16, BASE_DEC, NULL, 0,
+     {"Priority", "wlan.qos.priority",
+      FT_UINT16, BASE_DEC, VALS(ieee80211_qos_tags_acs), 0x0007,
       "802.1D Tag", HFILL }},
 
     {&hf_ieee80211_qos_eosp,
-     {"EOSP", "wlan.qos.eosp", FT_BOOLEAN, 8, TFS (&eosp_flag), QOS_FLAG_EOSP,
+     {"EOSP", "wlan.qos.eosp",
+      FT_BOOLEAN, 16, TFS (&eosp_flag), QOS_FLAG_EOSP,
       "EOSP Field", HFILL }},
 
     {&hf_ieee80211_qos_bit4,
-     {"QoS bit 4", "wlan.qos.bit4", FT_BOOLEAN, 8, TFS (&bit4_flag), QOS_FLAG_EOSP,
+     {"QoS bit 4", "wlan.qos.bit4",
+      FT_BOOLEAN, 16, TFS (&bit4_flag), QOS_FLAG_EOSP,
       NULL, HFILL }},
 
     {&hf_ieee80211_qos_ack_policy,
-     {"Ack Policy", "wlan.qos.ack", FT_UINT8, BASE_HEX,  VALS (&ack_policy), 0,
+     {"Ack Policy", "wlan.qos.ack",
+      FT_UINT16, BASE_HEX,  VALS(ack_policy), 0x0060,
       NULL, HFILL }},
 
     {&hf_ieee80211_qos_amsdu_present,
-     {"Payload Type", "wlan.qos.amsdupresent", FT_BOOLEAN, BASE_NONE,
-      TFS(&ieee80211_qos_amsdu_present_flag), 0x0, NULL, HFILL }},
+     {"Payload Type", "wlan.qos.amsdupresent",
+      FT_BOOLEAN, 16,
+      TFS(&ieee80211_qos_amsdu_present_flag), 0x0080, NULL, HFILL }},
 
     {&hf_ieee80211_qos_txop_limit,
-     {"TXOP Limit", "wlan.qos.txop_limit", FT_UINT16, BASE_DEC, NULL, 0,
+     {"TXOP Limit", "wlan.qos.txop_limit",
+      FT_UINT16, BASE_DEC, NULL, 0xFF00,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_qos_ps_buf_state,
+     {"QAP PS Buffer State", "wlan.qos.ps_buf_state",
+      FT_UINT16, BASE_HEX, NULL, 0xFF00,
       NULL, HFILL }},
 
     {&hf_ieee80211_qos_buf_state_indicated,
      {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
-       FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+      FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0200,
       NULL, HFILL }},
 
     {&hf_ieee80211_qos_highest_pri_buf_ac,
      {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
-       FT_UINT8, BASE_DEC, VALS(wme_acs), 0x0C,
+       FT_UINT16, BASE_DEC, VALS(wme_acs), 0x0C00,
       NULL, HFILL }},
 
     {&hf_ieee80211_qos_qap_buf_load,
      {"QAP Buffered Load", "wlan.qos.qap_buf_load",
-       FT_UINT8, BASE_DEC, NULL, 0xF0,
+      FT_UINT16, BASE_DEC, NULL, 0xF000,
       NULL, HFILL }},
 
     {&hf_ieee80211_qos_txop_dur_req,
-     {"TXOP Duration Requested", "wlan.qos.txop_dur_req", FT_UINT16, BASE_DEC, NULL, 0,
+     {"TXOP Duration Requested", "wlan.qos.txop_dur_req",
+      FT_UINT16, BASE_DEC, NULL, 0xFF00,
       NULL, HFILL }},
 
     {&hf_ieee80211_qos_queue_size,
-     {"Queue Size", "wlan.qos.queue_size", FT_UINT16, BASE_DEC, NULL, 0,
+     {"Queue Size", "wlan.qos.queue_size",
+      FT_UINT16, BASE_DEC, NULL, 0xFF00,
       NULL, HFILL }},
 
     {&hf_ieee80211_fcs,
-     {"Frame check sequence", "wlan.fcs", FT_UINT32, BASE_HEX,
-      NULL, 0, "Frame Check Sequence (FCS)", HFILL }},
+     {"Frame check sequence", "wlan.fcs",
+      FT_UINT32, BASE_HEX, NULL, 0,
+      "Frame Check Sequence (FCS)", HFILL }},
 
     {&hf_ieee80211_fcs_good,
-     {"Good", "wlan.fcs_good", FT_BOOLEAN, BASE_NONE,
-      NULL, 0x0, "True if the FCS is correct", HFILL }},
+     {"Good", "wlan.fcs_good",
+      FT_BOOLEAN, BASE_NONE, NULL, 0x0,
+      "True if the FCS is correct", HFILL }},
 
     {&hf_ieee80211_fcs_bad,
-     {"Bad", "wlan.fcs_bad", FT_BOOLEAN, BASE_NONE,
-      NULL, 0x0, "True if the FCS is incorrect", HFILL }},
+     {"Bad", "wlan.fcs_bad",
+      FT_BOOLEAN, BASE_NONE, NULL, 0x0,
+      "True if the FCS is incorrect", HFILL }},
 
     {&hf_ieee80211_fragment_overlap,
-      {"Fragment overlap", "wlan.fragment.overlap", FT_BOOLEAN, BASE_NONE,
-       NULL, 0x0, "Fragment overlaps with other fragments", HFILL }},
+      {"Fragment overlap", "wlan.fragment.overlap",
+       FT_BOOLEAN, BASE_NONE,
+       NULL, 0x0,
+       "Fragment overlaps with other fragments", HFILL }},
 
     {&hf_ieee80211_fragment_overlap_conflict,
       {"Conflicting data in fragment overlap", "wlan.fragment.overlap.conflict",
@@ -12307,626 +14994,260 @@ proto_register_ieee80211 (void)
        "Defragmentation error due to illegal fragments", HFILL }},
 
     {&hf_ieee80211_fragment_count,
-      {"Fragment count", "wlan.fragment.count", FT_UINT32, BASE_DEC, NULL, 0x0,
+      {"Fragment count", "wlan.fragment.count",
+       FT_UINT32, BASE_DEC, NULL, 0x0,
        NULL, HFILL }},
 
     {&hf_ieee80211_fragment,
-      {"802.11 Fragment", "wlan.fragment", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
+      {"802.11 Fragment", "wlan.fragment",
+       FT_FRAMENUM, BASE_NONE, NULL, 0x0,
        NULL, HFILL }},
 
     {&hf_ieee80211_fragments,
-      {"802.11 Fragments", "wlan.fragments", FT_NONE, BASE_NONE, NULL, 0x0,
+      {"802.11 Fragments", "wlan.fragments",
+       FT_NONE, BASE_NONE, NULL, 0x0,
        NULL, HFILL }},
 
     {&hf_ieee80211_reassembled_in,
-      {"Reassembled 802.11 in frame", "wlan.reassembled_in", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
+      {"Reassembled 802.11 in frame", "wlan.reassembled_in",
+       FT_FRAMENUM, BASE_NONE, NULL, 0x0,
        "This 802.11 packet is reassembled in this frame", HFILL }},
 
     {&hf_ieee80211_reassembled_length,
-      {"Reassembled 802.11 length", "wlan.reassembled.length", FT_UINT32, BASE_DEC, NULL, 0x0,
+      {"Reassembled 802.11 length", "wlan.reassembled.length",
+       FT_UINT32, BASE_DEC, NULL, 0x0,
        "The total length of the reassembled payload", HFILL }},
 
     {&hf_ieee80211_wep_iv,
-     {"Initialization Vector", "wlan.wep.iv", FT_UINT24, BASE_HEX, NULL, 0,
+     {"Initialization Vector", "wlan.wep.iv",
+      FT_UINT24, BASE_HEX, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_wep_iv_weak,
-     {"Weak IV", "wlan.wep.weakiv", FT_BOOLEAN, BASE_NONE, NULL,0x0,
+     {"Weak IV", "wlan.wep.weakiv",
+      FT_BOOLEAN, BASE_NONE, NULL,0x0,
        NULL,HFILL}},
 
     {&hf_ieee80211_tkip_extiv,
-     {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv", FT_STRING,
-      BASE_NONE, NULL, 0, "TKIP Extended Initialization Vector", HFILL }},
+     {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv",
+      FT_STRING, BASE_NONE, NULL, 0,
+      "TKIP Extended Initialization Vector", HFILL }},
 
     {&hf_ieee80211_ccmp_extiv,
-     {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv", FT_STRING,
-      BASE_NONE, NULL, 0, "CCMP Extended Initialization Vector", HFILL }},
+     {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv",
+      FT_STRING, BASE_NONE, NULL, 0,
+      "CCMP Extended Initialization Vector", HFILL }},
 
     {&hf_ieee80211_wep_key,
-     {"Key Index", "wlan.wep.key", FT_UINT8, BASE_DEC, NULL, 0,
+     {"Key Index", "wlan.wep.key",
+      FT_UINT8, BASE_DEC, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_wep_icv,
-     {"WEP ICV", "wlan.wep.icv", FT_UINT32, BASE_HEX, NULL, 0,
+     {"WEP ICV", "wlan.wep.icv",
+      FT_UINT32, BASE_HEX, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_block_ack_request_control,
      {"Block Ack Request (BAR) Control", "wlan.bar.control",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_block_ack_control,
      {"Block Ack Request Control", "wlan.ba.control",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_block_ack_control_ack_policy,
      {"BAR Ack Policy", "wlan.ba.control.ackpolicy",
-      FT_BOOLEAN, 16, TFS (&ieee80211_block_ack_control_ack_policy_flag), 0x01, "Block Ack Request (BAR) Ack Policy", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ieee80211_block_ack_control_ack_policy_flag), 0x01,
+      "Block Ack Request (BAR) Ack Policy", HFILL }},
 
     {&hf_ieee80211_block_ack_control_multi_tid,
      {"Multi-TID", "wlan.ba.control.multitid",
-      FT_BOOLEAN, 16, 0, 0x02, "Multi-Traffic Identifier (TID)", HFILL }},
+      FT_BOOLEAN, 16, 0, 0x02,
+      "Multi-Traffic Identifier (TID)", HFILL }},
 
     {&hf_ieee80211_block_ack_control_compressed_bitmap,
      {"Compressed Bitmap", "wlan.ba.control.cbitmap",
-      FT_BOOLEAN, 16, 0, 0x04, NULL, HFILL }},
+      FT_BOOLEAN, 16, 0, 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_block_ack_control_reserved,
      {"Reserved", "wlan.ba.control.cbitmap",
-      FT_UINT16, BASE_HEX, NULL, 0x0ff8, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0ff8,
+      NULL, HFILL }},
 
     {&hf_ieee80211_block_ack_control_basic_tid_info,
      {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
-      FT_UINT16, BASE_HEX, NULL, 0xf000, "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0xf000,
+      "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL }},
 
     {&hf_ieee80211_block_ack_control_compressed_tid_info,
      {"TID for which a BlockAck frame is requested", "wlan.bar.compressed.tidinfo",
-      FT_UINT16, BASE_HEX, NULL, 0xf000, "Traffic Identifier (TID) for which a BlockAck frame is requested", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0xf000,
+      "Traffic Identifier (TID) for which a BlockAck frame is requested", HFILL }},
 
     {&hf_ieee80211_block_ack_control_multi_tid_info,
      {"Number of TIDs Present", "wlan.ba.mtid.tidinfo",
-      FT_UINT16, BASE_HEX, NULL, 0xf000, "Number of Traffic Identifiers (TIDs) Present", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0xf000,
+      "Number of Traffic Identifiers (TIDs) Present", HFILL }},
 
     {&hf_ieee80211_block_ack_multi_tid_info,
      {"Traffic Identifier (TID) Info", "wlan.ba.mtid.tid",
-      FT_UINT8, BASE_DEC, 0, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_block_ack_multi_tid_reserved,
      {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
-      FT_UINT16, BASE_HEX, 0, 0x0fff, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0x0fff,
+      NULL, HFILL }},
 
     {&hf_ieee80211_block_ack_multi_tid_value,
      {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
-      FT_UINT16, BASE_HEX, 0, 0xf000, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0xf000,
+      NULL, HFILL }},
 
     {&hf_ieee80211_block_ack_request_type,
      {"Block Ack Request Type", "wlan.bar.type",
-      FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_request_type_flags), 0, "Block Ack Request (BAR) Type", HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_request_type_flags), 0x06,
+      "Block Ack Request (BAR) Type", HFILL }},
 
     {&hf_ieee80211_block_ack_type,
      {"Block Ack Type", "wlan.ba.type",
-      FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_type_flags), 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_type_flags), 0x06,
+      NULL, HFILL }},
 
     {&hf_ieee80211_block_ack_bitmap,
      {"Block Ack Bitmap", "wlan.ba.bm",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_block_ack_bitmap_missing_frame,
      {"Missing frame", "wlan.ba.bm.missing_frame",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_data_encap_payload_type,
      {"Payload Type", "wlan.data_encap.payload_type",
-      FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types), 0, NULL,
-      HFILL }},
+      FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_tdls_action_code,
      {"Action code", "wlan_mgt.fixed.action_code",
-      FT_UINT8, BASE_DEC, VALS(tdls_action_codes), 0,
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tdls_action_codes_ext, 0,
       "Management action code", HFILL }},
 
     {&hf_ieee80211_ff_target_channel,
      {"Target Channel", "wlan_mgt.fixed.target_channel",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_regulatory_class,
      {"Regulatory Class", "wlan_mgt.fixed.regulatory_class",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_wnm_action_code,
      {"Action code", "wlan_mgt.fixed.action_code",
-      FT_UINT8, BASE_DEC, VALS(wnm_action_codes), 0,
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &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 }},
+
+    {&hf_ieee80211_ff_key_data_length,
+     {"Key Data Length", "wlan_mgt.fixed.key_data_length",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_ieee80211_ff_wnm_notification_type,
+     {"WNM-Notification type", "wlan_mgt.fixed.wnm_notification_type",
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &wnm_notification_types_ext, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_request_mode_pref_cand,
-     {"Preferred Candidate List Included",
-      "wlan_mgt.fixed.request_mode.pref_cand",
-      FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
+     {"Preferred Candidate List Included","wlan_mgt.fixed.request_mode.pref_cand",
+      FT_UINT8, BASE_DEC, NULL, 0x01,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_request_mode_abridged,
      {"Abridged", "wlan_mgt.fixed.request_mode.abridged",
-      FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x02,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_request_mode_disassoc_imminent,
-     {"Disassociation Imminent",
-      "wlan_mgt.fixed.request_mode.disassoc_imminent",
-      FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
+     {"Disassociation Imminent", "wlan_mgt.fixed.request_mode.disassoc_imminent",
+      FT_UINT8, BASE_DEC, NULL, 0x04,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_request_mode_bss_term_included,
-     {"BSS Termination Included",
-      "wlan_mgt.fixed.request_mode.bss_term_included",
-      FT_UINT8, BASE_DEC, NULL, 0x08, NULL, HFILL }},
+     {"BSS Termination Included", "wlan_mgt.fixed.request_mode.bss_term_included",
+      FT_UINT8, BASE_DEC, NULL, 0x08,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
-     {"ESS Disassociation Imminent",
-      "wlan_mgt.fixed.request_mode.ess_disassoc_imminent",
-      FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
+     {"ESS Disassociation Imminent", "wlan_mgt.fixed.request_mode.ess_disassoc_imminent",
+      FT_UINT8, BASE_DEC, NULL, 0x10,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_disassoc_timer,
      {"Disassociation Timer", "wlan_mgt.fixed.disassoc_timer",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_validity_interval,
      {"Validity Interval", "wlan_mgt.fixed.validity_interval",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_url_len,
      {"Session Information URL Length",
       "wlan_mgt.fixed.session_information.url_length",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_url,
      {"Session Information URL", "wlan_mgt.fixed.session_information.url",
-      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
-  };
-
-  static const true_false_string qos_info_field_qack_flags = {
-    "STAs/APs MIB attribute dot11QAckOptionImplemented is true",
-    "STAs/APs MIB attribute dot11QAckOptionImplemented is false"
-  };
-
-  static const true_false_string qos_info_field_more_data_ack_flags = {
-    "STA can process Ack frames with More Data bit and will remain in the awake state.",
-    "STA cannot process Ack frames with More Data bit in Frame Control field."
-  };
-
-  static const true_false_string qos_info_field_queue_req_flags = {
-    "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
-    "AP cannot process Queue Size subfield in QoS data frames."
-  };
-
-  /* 7.3.1.17 Table 19b-Settings of the Max SP Length subfield */
-  static const value_string qos_info_field_max_sp_length_flags[] =
-  {
-    { 0x0, "QAP may deliver all buffered MSDUs and MMPDUs." },
-    { 0x2, "QAP may deliver a maximum of two MSDUs and MMPDUs per SP." },
-    { 0x1, "QAP may deliver a maximum of four MSDUs and MMPDUs per SP." },
-    { 0x3, "QAP may deliver a maximum of six MSDUs and MMPDUs per SP." },
-    { 0, NULL}
-  };
-
-  static const true_false_string rsn_preauth_flags = {
-    "Transmitter supports pre-authentication",
-    "Transmitter does not support pre-authentication"
-  };
-
-  static const true_false_string rsn_no_pairwise_flags = {
-    "Transmitter cannot support WEP default key 0 simultaneously with "
-    "Pairwise key",
-    "Transmitter can support WEP default key 0 simultaneously with "
-    "Pairwise key"
-  };
-
-  static const value_string rsn_cap_replay_counter[] = {
-    {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
-    {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
-    {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
-    {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
-    {0, NULL}
-  };
-
-  static const true_false_string ht_ldpc_coding_flag = {
-    "Transmitter supports receiving LDPC coded packets",
-    "Transmitter does not support receiving LDPC coded packets"
-  };
-
-  static const true_false_string ht_chan_width_flag = {
-    "Transmitter supports 20MHz and 40MHz operation",
-    "Transmitter only supports 20MHz operation"
-  };
-
-  static const value_string ht_sm_pwsave_flag[] = {
-    {0x00, "Static SM Power Save mode"},
-    {0x01, "Dynamic SM Power Save mode"},
-    {0x02, "Reserved"},
-    {0x03, "SM Power Save disabled"},
-    {0x00, NULL}
-  };
-
-  static const true_false_string ht_green_flag = {
-    "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
-    "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
-  };
-
-  static const value_string ht_rx_stbc_flag[] = {
-    {0x00, "No Rx STBC support"},
-    {0x01, "Rx support of one spatial stream"},
-    {0x02, "Rx support of one and two spatial streams"},
-    {0x03, "Rx support of one, two, and three spatial streams"},
-    {0x00, NULL}
-  };
-
-  static const true_false_string ht_delayed_block_ack_flag = {
-    "Transmitter supports HT-Delayed BlockAck",
-    "Transmitter does not support HT-Delayed BlockAck"
-  };
-
-  static const true_false_string ht_max_amsdu_flag = {
-    "7935 bytes",
-    "3839 bytes"
-  };
-
-  static const true_false_string ht_dss_cck_40_flag = {
-    "Will/Can use DSSS/CCK in 40 MHz",
-    "Won't/Can't use of DSSS/CCK in 40 MHz"
-  };
-
-  static const true_false_string ht_psmp_flag = {
-    "Will/Can support PSMP operation",
-    "Won't/Can't support PSMP operation"
-  };
-
-  static const true_false_string ht_40_mhz_intolerant_flag = {
-    "Use of 40 MHz transmissions restricted/disallowed",
-    "Use of 40 MHz transmissions unrestricted/allowed"
-  };
-
-  static const value_string ampduparam_mpdu_start_spacing_flags[] = {
-    {0x00, "no restriction"},
-    {0x01, "1/4 [usec]"},
-    {0x02, "1/2 [usec]"},
-    {0x03, "1 [usec]"},
-    {0x04, "2 [usec]"},
-    {0x05, "4 [usec]"},
-    {0x06, "8 [usec]"},
-    {0x07, "16 [usec]"},
-    {0x00, NULL}
-  };
-
-  static const true_false_string mcsset_tx_mcs_set_defined_flag = {
-    "Defined",
-    "Not Defined",
-  };
-
-  static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
-    "Not Equal",
-    "Equal",
-  };
-
-  static const value_string mcsset_tx_max_spatial_streams_flags[] = {
-    {0x00, "1 spatial stream"},
-    {0x01, "2 spatial streams"},
-    {0x02, "3 spatial streams"},
-    {0x03, "4 spatial streams"},
-    {0x00, NULL}
-  };
-
-  static const value_string htex_transtime_flags[] = {
-    {0x00, "No Transition"},
-    {0x01, "400 usec"},
-    {0x02, "1.5 msec"},
-    {0x03, "5 msec"},
-    {0x00, NULL}
-  };
-
-  static const value_string htex_mcs_flags[] = {
-    {0x00, "STA does not provide MCS feedback"},
-    {0x01, "Reserved"},
-    {0x02, "STA provides only unsolicited MCS feedback"},
-    {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
-    {0x00, NULL}
-  };
-
-  static const value_string txbf_calib_flag[] = {
-    {0x00, "incapable"},
-    {0x01, "Limited involvement, cannot initiate"},
-    {0x02, "Limited involvement, can initiate"},
-    {0x03, "Fully capable"},
-    {0x00, NULL}
-  };
-
-  static const value_string txbf_feedback_flags[] = {
-    {0x00, "not supported"},
-    {0x01, "delayed feedback capable"},
-    {0x02, "immediate feedback capable"},
-    {0x03, "delayed and immediate feedback capable"},
-    {0x00, NULL}
-  };
-
-  static const value_string txbf_antenna_flags[] = {
-    {0x00, "1 TX antenna sounding"},
-    {0x01, "2 TX antenna sounding"},
-    {0x02, "3 TX antenna sounding"},
-    {0x03, "4 TX antenna sounding"},
-    {0x00, NULL}
-  };
-
-  static const value_string txbf_csi_max_rows_bf_flags[] = {
-    {0x00, "1 row of CSI"},
-    {0x01, "2 rows of CSI"},
-    {0x02, "3 rows of CSI"},
-    {0x03, "4 rows of CSI"},
-    {0x00, NULL}
-  };
-
-  static const value_string txbf_chan_est_flags[] = {
-    {0x00, "1 space time stream"},
-    {0x01, "2 space time streams"},
-    {0x02, "3 space time streams"},
-    {0x03, "4 space time streams"},
-    {0x00, NULL}
-  };
-
-  static const value_string txbf_min_group_flags[] = {
-    {0x00, "No grouping supported"},
-    {0x01, "Groups of 1,2 supported"},
-    {0x02, "Groups of 1,4 supported"},
-    {0x03, "Groups of 1,2,4 supported"},
-    {0x00, NULL}
-  };
-
-  static const value_string hta_ext_chan_offset_flag[] = {
-    {0x00, "No Extension Channel"},
-    {0x01, "Extension Channel above control channel"},
-    {0x02, "Undefined"},
-    {0x03, "Extension Channel below control channel"},
-    {0x00, NULL}
-  };
-
-  static const true_false_string hta_rec_tx_width_flag = {
-    "Any channel width enabled",
-    "Use 20MHz channel (control)"
-  };
-
-  static const true_false_string hta_rifs_mode_flag = {
-    "Use of RIFS permitted",
-    "Use of RIFS prohibited"
-  };
-
-  static const true_false_string hta_controlled_access_flag = {
-    "Not only PSMP",
-    "PSMP only"
-  };
-
-  static const value_string hta_service_interval_flag[] = {
-    {0x00, "5ms"},
-    {0x01, "10ms"},
-    {0x02, "15ms"},
-    {0x03, "20ms"},
-    {0x04, "25ms"},
-    {0x05, "30ms"},
-    {0x06, "35ms"},
-    {0x07, "40ms"},
-    {0x00, NULL}
-  };
-
-  static const value_string hta_operating_mode_flag[] = {
-    {0x00, "Pure HT, no protection"},
-    {0x01, "There may be non-HT devices (control & ext channel)"},
-    {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
-    {0x03, "Mixed: no non-HT is associated, protect on"},
-    {0x00, NULL}
-  };
-
-  static const true_false_string hta_non_gf_devices_flag = {
-    "All HT devices associated are GF capable",
-    "One or More HT devices are not GF capable"
-  };
-
-  static const true_false_string hta_dual_stbc_protection_flag = {
-    "Dual CTS protections is used",
-    "Regular use of RTS/CTS"
-  };
-
-  static const true_false_string hta_secondary_beacon_flag = {
-    "Secondary Beacon",
-    "Primary Beacon"
-  };
-
-  static const true_false_string hta_lsig_txop_protection_flag = {
-    "Full Support",
-    "Not full support"
-  };
-
-  static const true_false_string hta_pco_active_flag = {
-    "PCO is activated in the BSS",
-    "PCO is not activated in the BSS"
-  };
-
-  static const true_false_string hta_pco_phase_flag = {
-    "Switch to 20MHz phase/keep 20MHz",
-    "Switch to 40MHz phase/keep 40MHz"
-  };
-
-  static const value_string ht_info_secondary_channel_offset_flags[] = {
-    {0x00, "No secondary channel"},
-    {0x01, "Secondary channel is above the primary channel"},
-    {0x02, "Reserved"},
-    {0x03, "Secondary channel is below the primary channel"},
-    {0x00, NULL}
-  };
-
-  static const true_false_string ht_info_channel_width_flag = {
-    "Channel of any width supported",
-    "20 MHz channel width only"
-  };
-
-  static const true_false_string ht_info_rifs_mode_flag = {
-    "Permitted",
-    "Prohibited"
-  };
-
-  static const true_false_string ht_info_psmp_stas_only_flag = {
-    "Association requests are accepted from only PSMP capable STA",
-    "Association requests are accepted regardless of PSMP capability"
-  };
-
-  static const value_string ht_info_service_interval_granularity_flags[] = {
-    {0x00, "5 ms"},
-    {0x01, "10 ms"},
-    {0x02, "15 ms"},
-    {0x03, "20 ms"},
-    {0x04, "25 ms"},
-    {0x05, "30 ms"},
-    {0x06, "35 ms"},
-    {0x07, "40 ms"},
-    {0x00, NULL}
-  };
-
-  static const value_string ht_info_operating_mode_flags[] = {
-    {0x00, "All STAs are - 20/40 MHz HT or in a 20/40 MHz BSS or are 20 MHz HT in a 20 MHz BSS"},
-    {0x01, "HT non-member protection mode"},
-    {0x02, "Only HT STAs in the BSS, however, there exists at least one 20 MHz STA"},
-    {0x03, "HT mixed mode"},
-    {0x00, NULL}
-  };
-
-  static const true_false_string ht_info_non_greenfield_sta_present_flag = {
-    "One or more associated STAs are not greenfield capable",
-    "All associated STAs are greenfield capable"
-  };
-
-  static const true_false_string ht_info_transmit_burst_limit_flag = {
-    "2.4 GHz - 6.16 ms | All other bands - 3.08 ms",
-    "No limit"
-  };
-
-  static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
-    "Use of protection for non-HT STAs by overlapping BSSs is needed",
-    "Use of protection for non-HT STAs by overlapping BSSs is not needed"
-  };
-
-  static const true_false_string ht_info_dual_beacon_flag = {
-    "AP transmits a secondary beacon",
-    "No second beacon is transmitted"
-  };
-
-  static const true_false_string ht_info_dual_cts_protection_flag = {
-    "Required",
-    "Not required"
-  };
-
-  static const true_false_string ht_info_secondary_beacon_flag = {
-    "Secondary beacon",
-    "Primary beacon"
-  };
-
-  static const true_false_string ht_info_lsig_txop_protection_full_support_flag = {
-    "All HT STAs in the BSS support L-SIG TXOP protection",
-    "One or more HT STAs in the BSS do not support L-SIG TXOP protection"
-  };
-
-  static const true_false_string ht_info_pco_phase_flag = {
-    "Switch to or continue 40 MHz phase",
-    "Switch to or continue 20 MHz phase"
-  };
-
-  static const true_false_string htc_lac_trq_flag = {
-    "Want sounding PPDU",
-    "Don't want sounding PPDU"
-  };
-
-  static const true_false_string htc_lac_mai_mrq_flag = {
-    "MCS feedback requested",
-    "No MCS feedback requested"
-  };
-
-  static const value_string ieee80211_htc_lac_asel_command_flags[] = {
-    {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
-    {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
-    {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
-    {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
-    {0x04, "Sounding Label"},
-    {0x05, "No feedback, ASEL training failure"},
-    {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
-    {0x07, "Reserved"},
-    {0x00, NULL}
-  };
-
-  static const value_string ieee80211_htc_cal_pos_flags[] = {
-    {0x00, "Not a calibration frame"},
-    {0x01, "Calibration Start"},
-    {0x02, "Sounding Response"},
-    {0x03, "Sounding Complete"},
-    {0x00, NULL}
-  };
-
-  static const true_false_string ieee80211_htc_ndp_announcement_flag = {
-    "NDP will follow",
-    "No NDP will follow"
-  };
-
-  static const value_string ieee80211_htc_csi_steering_flags[] = {
-    {0x00, "No feedback required"},
-    {0x01, "CSI"},
-    {0x02, "Non-compressed Beamforming Feedback Matrix"},
-    {0x03, "Compressed Beamforming Feedback Matrix"},
-    {0x00, NULL}
-  };
-
-  static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
-    {0x00, "No Secondary Channel"},
-    {0x01, "Above Primary Channel"},
-    {0x02, "Reserved"},
-    {0x03, "Below Primary Channel"},
-    {0x00, NULL}
-  };
-
-  static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
-    {0x00, "Frames may be transmitted before the channel switch has been completed"},
-    {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
-    {0x00, NULL}
-  };
-
-  static const value_string service_interval_granularity_vals[] = {
-    { 0, "5 ms" },
-    { 1, "10 ms" },
-    { 2, "15 ms" },
-    { 3, "20 ms" },
-    { 4, "25 ms" },
-    { 5, "30 ms" },
-    { 6, "35 ms" },
-    { 7, "40 ms" },
-    { 0x00, NULL }
-  };
-
-  static const value_string wep_type_vals[] = {
-    { AIRPDCAP_KEY_TYPE_WEP, STRING_KEY_TYPE_WEP },
-    { AIRPDCAP_KEY_TYPE_WPA_PWD, STRING_KEY_TYPE_WPA_PWD },
-    { AIRPDCAP_KEY_TYPE_WPA_PSK, STRING_KEY_TYPE_WPA_PSK },
-    { 0x00, NULL }
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
   };
 
   static hf_register_info ff[] = {
 
     {&hf_ieee80211_ff_timestamp,
-     {"Timestamp", "wlan_mgt.fixed.timestamp", FT_UINT64, BASE_HEX,
-      NULL, 0, NULL, HFILL }},
+     {"Timestamp", "wlan_mgt.fixed.timestamp",
+      FT_UINT64, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_auth_alg,
      {"Authentication Algorithm", "wlan_mgt.fixed.auth.alg",
-      FT_UINT16, BASE_DEC, VALS (&auth_alg), 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, VALS(auth_alg), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_beacon_interval,
-     {"Beacon Interval", "wlan_mgt.fixed.beacon", FT_UINT32, BASE_CUSTOM, beacon_interval_base_custom, 0,
+     {"Beacon Interval", "wlan_mgt.fixed.beacon",
+      FT_UINT32, BASE_CUSTOM, beacon_interval_base_custom, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_fixed_parameters,
-     {"Fixed parameters", "wlan_mgt.fixed.all", FT_UINT16, BASE_DEC, NULL, 0,
+     {"Fixed parameters", "wlan_mgt.fixed.all",
+      FT_NONE, BASE_NONE, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_tagged_parameters,
-     {"Tagged parameters", "wlan_mgt.tagged.all", FT_UINT16, BASE_DEC, NULL, 0,
+     {"Tagged parameters", "wlan_mgt.tagged.all",
+      FT_NONE, BASE_NONE, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_tag_ssid,
-     {"SSID", "wlan_mgt.ssid", FT_STRING, BASE_NONE, NULL, 0,
+     {"SSID", "wlan_mgt.ssid",
+      FT_STRING, BASE_NONE, NULL, 0,
       "Indicates the identity of an ESS or IBSS", HFILL }},
 
     {&hf_ieee80211_tag_supp_rates,
      {"Supported Rates", "wlan_mgt.supported_rates",
-      FT_UINT8, BASE_HEX, VALS(ieee80211_supported_rates_vals), 0x0,
+      FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_supported_rates_vals_ext, 0x0,
       "In Mbit/sec, (B) for Basic Rates", HFILL }},
 
     {&hf_ieee80211_tag_fh_dwell_time,
@@ -12950,563 +15271,688 @@ proto_register_ieee80211 (void)
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_block_ack_params,
-      {"Block Ack Parameters", "wlan_mgt.fixed.baparams",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+     {"Block Ack Parameters", "wlan_mgt.fixed.baparams",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_block_ack_params_amsdu_permitted,
-      {"A-MSDUs", "wlan_mgt.fixed.baparams.amsdu",
-      FT_BOOLEAN, 16, TFS (&ff_block_ack_params_amsdu_permitted_flag), 0x0001, "A-MSDU Permitted in QoS Data MPDUs", HFILL }},
+     {"A-MSDUs", "wlan_mgt.fixed.baparams.amsdu",
+      FT_BOOLEAN, 16, TFS (&ff_block_ack_params_amsdu_permitted_flag), 0x0001,
+      "A-MSDU Permitted in QoS Data MPDUs", HFILL }},
 
     {&hf_ieee80211_ff_block_ack_params_policy,
-      {"Block Ack Policy", "wlan_mgt.fixed.baparams.policy",
-      FT_BOOLEAN, 16, TFS (&ff_block_ack_params_policy_flag), 0x0002, NULL, HFILL }},
+     {"Block Ack Policy", "wlan_mgt.fixed.baparams.policy",
+      FT_BOOLEAN, 16, TFS (&ff_block_ack_params_policy_flag), 0x0002,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_block_ack_params_tid,
-      {"Traffic Identifier", "wlan_mgt.fixed.baparams.tid",
-      FT_UINT16, BASE_HEX, NULL, 0x003C, NULL, HFILL }},
+     {"Traffic Identifier", "wlan_mgt.fixed.baparams.tid",
+      FT_UINT16, BASE_HEX, NULL, 0x003C,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_block_ack_params_buffer_size,
-      {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan_mgt.fixed.baparams.buffersize",
-      FT_UINT16, BASE_DEC, NULL, 0xFFC0, "Number of Buffers", HFILL }},
+     {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan_mgt.fixed.baparams.buffersize",
+      FT_UINT16, BASE_DEC, NULL, 0xFFC0,
+      "Number of Buffers", HFILL }},
 
     {&hf_ieee80211_ff_block_ack_timeout,
-      {"Block Ack Timeout", "wlan_mgt.fixed.batimeout",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+     {"Block Ack Timeout", "wlan_mgt.fixed.batimeout",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_block_ack_ssc,
      {"Block Ack Starting Sequence Control (SSC)", "wlan_mgt.fixed.ssc",
-      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_block_ack_ssc_fragment,
      {"Fragment", "wlan_mgt.fixed.fragment",
-      FT_UINT16, BASE_DEC, 0, 0x000f, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, 0, 0x000f,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_block_ack_ssc_sequence,
      {"Starting Sequence Number", "wlan_mgt.fixed.sequence",
-      FT_UINT16, BASE_DEC, 0, 0xfff0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, 0, 0xfff0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_delba_param,
      {"Delete Block Ack (DELBA) Parameter Set", "wlan_mgt.fixed.delba.param",
-      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_delba_param_reserved,
      {"Reserved", "wlan_mgt.fixed.delba.param.reserved",
-      FT_UINT16, BASE_HEX, 0, 0x07ff, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0x07ff,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_delba_param_init,
      {"Initiator", "wlan_mgt.fixed.delba.param.initiator",
-      FT_BOOLEAN, 16, 0, 0x0800, NULL, HFILL }},
+      FT_BOOLEAN, 16, 0, 0x0800,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_delba_param_tid,
      {"TID", "wlan_mgt.fixed.delba.param.tid",
-      FT_UINT16, BASE_HEX, 0, 0xf000, "Traffic Identifier (TID)", HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0xf000,
+      "Traffic Identifier (TID)", HFILL }},
 
     {&hf_ieee80211_ff_max_reg_pwr,
      {"Maximum Regulation Power", "wlan_mgt.fixed.maxregpwr",
-      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_measurement_pilot_int,
      {"Measurement Pilot Interval", "wlan_mgt.fixed.msmtpilotint",
-      FT_UINT16, BASE_HEX, 0, 0, "Measurement Pilot Interval Fixed Field", HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0,
+      "Measurement Pilot Interval Fixed Field", HFILL }},
 
     {&hf_ieee80211_ff_country_str,
      {"Country String", "wlan_mgt.fixed.country",
-      FT_STRING, BASE_NONE, 0, 0, NULL, HFILL }},
+      FT_STRING, BASE_NONE, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_max_tx_pwr,
      {"Maximum Transmit Power", "wlan_mgt.fixed.maxtxpwr",
-      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_tx_pwr_used,
      {"Transmit Power Used", "wlan_mgt.fixed.txpwr",
-      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_transceiver_noise_floor,
      {"Transceiver Noise Floor", "wlan_mgt.fixed.tnoisefloor",
-      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_channel_width,
      {"Supported Channel Width", "wlan_mgt.fixed.chanwidth",
-      FT_UINT8, BASE_HEX, VALS (ff_channel_width_vals), 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ff_channel_width_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_qos_info_ap,
      {"QoS Information (AP)", "wlan_mgt.fixed.qosinfo.ap",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
      {"EDCA Parameter Set Update Count", "wlan_mgt.fixed.qosinfo.ap.edcaupdate",
-      FT_UINT8, BASE_HEX, NULL, 0x0F, "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x0F,
+      "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL }},
 
     {&hf_ieee80211_ff_qos_info_ap_q_ack,
      {"Q-Ack", "wlan_mgt.fixed.qosinfo.ap.qack",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_q_ack_flag), 0x10, "QoS Ack", HFILL }},
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_q_ack_flag), 0x10,
+      "QoS Ack", HFILL }},
 
     {&hf_ieee80211_ff_qos_info_ap_queue_req,
      {"Queue Request", "wlan_mgt.fixed.qosinfo.ap",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_queue_req_flag), 0x20, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_queue_req_flag), 0x20,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_qos_info_ap_txop_request,
      {"TXOP Request", "wlan_mgt.fixed.qosinfo.ap.txopreq",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_txop_request_flag), 0x40, "Transmit Opportunity (TXOP) Request", HFILL }},
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_txop_request_flag), 0x40,
+      "Transmit Opportunity (TXOP) Request", HFILL }},
 
     {&hf_ieee80211_ff_qos_info_ap_reserved,
      {"Reserved", "wlan_mgt.fixed.qosinfo.ap.reserved",
-      FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
+      FT_BOOLEAN, 8, NULL, 0x80,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_qos_info_sta,
      {"QoS Information (STA)", "wlan_mgt.fixed.qosinfo.sta",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_qos_info_sta_ac_vo,
      {"AC_VO", "wlan_mgt.fixed.qosinfo.sta.ac.vo",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x01, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_qos_info_sta_ac_vi,
      {"AC_VI", "wlan_mgt.fixed.qosinfo.sta.ac.vi",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x02, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_qos_info_sta_ac_bk,
      {"AC_BK", "wlan_mgt.fixed.qosinfo.sta.ac.bk",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x04, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_qos_info_sta_ac_be,
      {"AC_BE", "wlan_mgt.fixed.qosinfo.sta.ac.be",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x08, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x08,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_qos_info_sta_q_ack,
      {"Q-Ack", "wlan_mgt.fixed.qosinfo.sta.qack",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_q_ack_flag), 0x10, "QoS Ack", HFILL }},
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_q_ack_flag), 0x10,
+      "QoS Ack", HFILL }},
 
     {&hf_ieee80211_ff_qos_info_sta_max_sp_len,
      {"Service Period (SP) Length", "wlan_mgt.fixed.qosinfo.sta.splen",
-      FT_UINT8, BASE_HEX, VALS (&ff_qos_info_sta_max_sp_len_flags) , 0x60, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ff_qos_info_sta_max_sp_len_flags) , 0x60,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_qos_info_sta_more_data_ack,
      {"More Data Ack", "wlan_mgt.fixed.qosinfo.sta.moredataack",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_more_data_ack_flag), 0x80, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_more_data_ack_flag), 0x80,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_sm_pwr_save,
      {"Spatial Multiplexing (SM) Power Control", "wlan_mgt.fixed.sm.powercontrol",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_sm_pwr_save_enabled,
      {"SM Power Save", "wlan_mgt.fixed.sm.powercontrol.enabled",
-      FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01, "Spatial Multiplexing (SM) Power Save", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01,
+      "Spatial Multiplexing (SM) Power Save", HFILL }},
 
     {&hf_ieee80211_ff_sm_pwr_save_sm_mode,
      {"SM Mode", "wlan_mgt.fixed.sm.powercontrol.mode",
-      FT_BOOLEAN, 8, TFS (&ff_sm_pwr_save_sm_mode_flag), 0x02, "Spatial Multiplexing (SM) Mode", HFILL }},
+      FT_BOOLEAN, 8, TFS (&ff_sm_pwr_save_sm_mode_flag), 0x02,
+      "Spatial Multiplexing (SM) Mode", HFILL }},
 
     {&hf_ieee80211_ff_sm_pwr_save_reserved,
      {"Reserved", "wlan_mgt.fixed.sm.powercontrol.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xFC,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_pco_phase_cntrl,
      {"Phased Coexistence Operation (PCO) Phase Control", "wlan_mgt.fixed.pco.phasecntrl",
-      FT_BOOLEAN, BASE_NONE, TFS (&ff_pco_phase_cntrl_flag), 0x0, NULL, HFILL }},
+      FT_BOOLEAN, BASE_NONE, TFS (&ff_pco_phase_cntrl_flag), 0x0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_param_set,
      {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan_mgt.fixed.psmp.paramset",
-      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_param_set_n_sta,
      {"Number of STA Info Fields Present", "wlan_mgt.fixed.psmp.paramset.nsta",
-      FT_UINT16, BASE_HEX, 0, 0x000F, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0x000F,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_param_set_more_psmp,
      {"More PSMP", "wlan_mgt.fixed.psmp.paramset.more",
-      FT_BOOLEAN, 16, TFS(&ff_psmp_param_set_more_psmp_flag), 0x0010, "More Power Save Multi-Poll (PSMP)", HFILL }},
+      FT_BOOLEAN, 16, TFS(&ff_psmp_param_set_more_psmp_flag), 0x0010,
+      "More Power Save Multi-Poll (PSMP)", HFILL }},
 
     {&hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
      {"PSMP Sequence Duration [us]", "wlan_mgt.fixed.psmp.paramset.seqduration",
-      FT_UINT16, BASE_DEC, 0, 0xFFE0, "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL }},
+      FT_UINT16, BASE_DEC, 0, 0xFFE0,
+      "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL }},
 
     {&hf_ieee80211_ff_mimo_cntrl,
      {"MIMO Control", "wlan_mgt.fixed.mimo.control.",
-      FT_BYTES, BASE_NONE, 0, 0x0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, 0, 0x0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mimo_cntrl_nc_index,
      {"Nc Index", "wlan_mgt.fixed.mimo.control.ncindex",
-      FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags), 0x0003, "Number of Columns Less One", HFILL }},
+      FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags), 0x0003,
+      "Number of Columns Less One", HFILL }},
 
     {&hf_ieee80211_ff_mimo_cntrl_nr_index,
      {"Nr Index", "wlan_mgt.fixed.mimo.control.nrindex",
-      FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags), 0x000C, "Number of Rows Less One", HFILL }},
+      FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags), 0x000C,
+      "Number of Rows Less One", HFILL }},
 
     {&hf_ieee80211_ff_mimo_cntrl_channel_width,
      {"Channel Width", "wlan_mgt.fixed.mimo.control.chanwidth",
-      FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag), 0x0010, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag), 0x0010,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mimo_cntrl_grouping,
      {"Grouping (Ng)", "wlan_mgt.fixed.mimo.control.grouping",
-      FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags), 0x0060, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags), 0x0060,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mimo_cntrl_coefficient_size,
      {"Coefficient Size (Nb)", "wlan_mgt.fixed.mimo.control.cosize",
-      FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags), 0x0180, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags), 0x0180,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mimo_cntrl_codebook_info,
      {"Codebook Information", "wlan_mgt.fixed.mimo.control.codebookinfo",
-      FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags), 0x0600, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags), 0x0600,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
      {"Remaining Matrix Segment", "wlan_mgt.fixed.mimo.control.matrixseg",
-      FT_UINT16, BASE_HEX, 0, 0x3800, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0x3800,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mimo_cntrl_reserved,
      {"Reserved", "wlan_mgt.fixed.mimo.control.reserved",
-      FT_UINT16, BASE_HEX, 0, 0xC000, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0xC000,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
      {"Sounding Timestamp", "wlan_mgt.fixed.mimo.control.soundingtime",
-      FT_UINT32, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_sta_info,
      {"Power Save Multi-Poll (PSMP) Station Information", "wlan_mgt.fixed.psmp.stainfo",
-      FT_UINT64, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT64, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_sta_info_type,
      {"Sta Info Type", "wlan_mgt.fixed.psmp.stainfo.type",
-      FT_UINT32, BASE_HEX, VALS(ff_psmp_sta_info_flags), PSMP_STA_INFO_FLAG_TYPE, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, VALS(ff_psmp_sta_info_flags), PSMP_STA_INFO_FLAG_TYPE,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_sta_info_dtt_start_offset,
      {"DTT Start Offset", "wlan_mgt.fixed.psmp.stainfo.dttstart",
-      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_START, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_START,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_sta_info_dtt_duration,
      {"DTT Duration", "wlan_mgt.fixed.psmp.stainfo.dttduration",
-      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_DURATION, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_DURATION,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_sta_info_sta_id,
      {"Target Station ID", "wlan_mgt.fixed.psmp.stainfo.staid",
-      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_STA_ID, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_STA_ID,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
      {"UTT Start Offset", "wlan_mgt.fixed.psmp.stainfo.uttstart",
-      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_START, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_START,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_sta_info_utt_duration,
      {"UTT Duration", "wlan_mgt.fixed.psmp.stainfo.uttduration",
-      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_DURATION, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_DURATION,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_sta_info_reserved_small,
      {"Reserved", "wlan_mgt.fixed.psmp.stainfo.reserved",
-      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_IA_RESERVED, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_IA_RESERVED,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_sta_info_reserved_large,
      {"Reserved", "wlan_mgt.fixed.psmp.stainfo.reserved",
-      FT_UINT64, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT64, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
      {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan_mgt.fixed.psmp.stainfo.multicastid",
-      FT_UINT64, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT64, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ant_selection,
      {"Antenna Selection", "wlan_mgt.fixed.antsel",
-      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ant_selection_0,
      {"Antenna 0", "wlan_mgt.fixed.antsel.ant0",
-      FT_UINT8, BASE_HEX, 0, 0x01, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ant_selection_1,
      {"Antenna 1", "wlan_mgt.fixed.antsel.ant1",
-      FT_UINT8, BASE_HEX, 0, 0x02, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ant_selection_2,
      {"Antenna 2", "wlan_mgt.fixed.antsel.ant2",
-      FT_UINT8, BASE_HEX, 0, 0x04, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ant_selection_3,
      {"Antenna 3", "wlan_mgt.fixed.antsel.ant3",
-      FT_UINT8, BASE_HEX, 0, 0x08, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0x08,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ant_selection_4,
      {"Antenna 4", "wlan_mgt.fixed.antsel.ant4",
-      FT_UINT8, BASE_HEX, 0, 0x10, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0x10,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ant_selection_5,
      {"Antenna 5", "wlan_mgt.fixed.antsel.ant5",
-      FT_UINT8, BASE_HEX, 0, 0x20, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0x20,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ant_selection_6,
      {"Antenna 6", "wlan_mgt.fixed.antsel.ant6",
-      FT_UINT8, BASE_HEX, 0, 0x40, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0x40,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ant_selection_7,
      {"Antenna 7", "wlan_mgt.fixed.antsel.ant7",
-      FT_UINT8, BASE_HEX, 0, 0x80, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0x80,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ext_channel_switch_announcement,
      {"Extended Channel Switch Announcement", "wlan_mgt.fixed.extchansw",
-      FT_UINT32, BASE_HEX, 0, 0, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
      {"Channel Switch Mode", "wlan_mgt.fixed.extchansw.switchmode",
-      FT_UINT32, BASE_HEX, VALS(ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags), 0x000000FF, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, VALS(ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags), 0x000000FF,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ext_channel_switch_announcement_new_reg_class,
      {"New Regulatory Class", "wlan_mgt.fixed.extchansw.new.regclass",
-      FT_UINT32, BASE_HEX, NULL, 0x0000FF00, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0x0000FF00,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
      {"New Channel Number", "wlan_mgt.fixed.extchansw.new.channumber",
-      FT_UINT32, BASE_HEX, NULL, 0x00FF0000, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0x00FF0000,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
      {"Channel Switch Count", "wlan_mgt.extchanswitch.switchcount",
-      FT_UINT32, BASE_HEX, NULL, 0xFF000000, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0xFF000000,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ht_info,
      {"HT Information", "wlan_mgt.fixed.extchansw",
-      FT_UINT8, BASE_HEX, 0, 0, "HT Information Fixed Field", HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0,
+      "HT Information Fixed Field", HFILL }},
 
     {&hf_ieee80211_ff_ht_info_information_request,
      {"Information Request", "wlan_mgt.fixed.mimo.control.chanwidth",
-      FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag), 0x01, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag), 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ht_info_40_mhz_intolerant,
      {"40 MHz Intolerant", "wlan_mgt.fixed.mimo.control.chanwidth",
-      FT_BOOLEAN, 8, TFS(&ff_ht_info_40_mhz_intolerant_flag), 0x02, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&ff_ht_info_40_mhz_intolerant_flag), 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ht_info_sta_chan_width,
      {"Station Channel Width", "wlan_mgt.fixed.mimo.control.chanwidth",
-      FT_BOOLEAN, 8, TFS(&ff_ht_info_sta_chan_width_flag), 0x04, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&ff_ht_info_sta_chan_width_flag), 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_ht_info_reserved,
      {"Reserved", "wlan_mgt.fixed.extchansw",
-      FT_UINT8, BASE_HEX, 0, 0xF8, "Reserved Field", HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0xF8,
+      "Reserved Field", HFILL }},
 
     {&hf_ieee80211_ff_ht_action,
      {"HT Action", "wlan_mgt.fixed.htact",
-      FT_UINT8, BASE_HEX, VALS (&ff_ht_action_flags), 0, "HT Action Code", HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ff_ht_action_flags), 0,
+      "HT Action Code", HFILL }},
 
     {&hf_ieee80211_ff_mimo_csi_snr,
      {"Signal to Noise Ratio (SNR)", "wlan_mgt.mimo.csimatrices.snr",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_public_action,
      {"Public Action", "wlan_mgt.fixed.publicact",
-      FT_UINT8, BASE_HEX, VALS(ff_pa_action_codes), 0, "Public Action Code", HFILL }},
+      FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_pa_action_codes_ext, 0,
+      "Public Action Code", HFILL }},
 
     {&hf_ieee80211_ff_capture,
-     {"Capabilities Information", "wlan_mgt.fixed.capabilities", FT_UINT16, BASE_HEX, NULL, 0,
+     {"Capabilities Information", "wlan_mgt.fixed.capabilities",
+      FT_UINT16, BASE_HEX, NULL, 0,
       "Capability information", HFILL }},
 
     {&hf_ieee80211_ff_cf_ess,
      {"ESS capabilities", "wlan_mgt.fixed.capabilities.ess",
-      FT_BOOLEAN, 16, TFS (&cf_ess_flags), 0x0001, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS (&cf_ess_flags), 0x0001,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_cf_ibss,
      {"IBSS status", "wlan_mgt.fixed.capabilities.ibss",
-      FT_BOOLEAN, 16, TFS (&cf_ibss_flags), 0x0002, "IBSS participation", HFILL }},
+      FT_BOOLEAN, 16, TFS(&cf_ibss_flags), 0x0002,
+      "IBSS participation", HFILL }},
 
     {&hf_ieee80211_ff_cf_sta_poll,
      {"CFP participation capabilities", "wlan_mgt.fixed.capabilities.cfpoll.sta",
-      FT_UINT16, BASE_HEX, VALS (&sta_cf_pollable), 0x020C,
+      FT_UINT16, BASE_HEX, VALS(sta_cf_pollable), 0x020C,
       "CF-Poll capabilities for a STA", HFILL }},
 
     {&hf_ieee80211_ff_cf_ap_poll,
      {"CFP participation capabilities", "wlan_mgt.fixed.capabilities.cfpoll.ap",
-      FT_UINT16, BASE_HEX, VALS (&ap_cf_pollable), 0x020C,
+      FT_UINT16, BASE_HEX, VALS(ap_cf_pollable), 0x020C,
       "CF-Poll capabilities for an AP", HFILL }},
 
     {&hf_ieee80211_ff_cf_privacy,
      {"Privacy", "wlan_mgt.fixed.capabilities.privacy",
-      FT_BOOLEAN, 16, TFS (&cf_privacy_flags), 0x0010, "WEP support", HFILL }},
+      FT_BOOLEAN, 16, TFS(&cf_privacy_flags), 0x0010,
+      "WEP support", HFILL }},
 
     {&hf_ieee80211_ff_cf_preamble,
      {"Short Preamble", "wlan_mgt.fixed.capabilities.preamble",
-      FT_BOOLEAN, 16, TFS (&cf_preamble_flags), 0x0020, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed), 0x0020,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_cf_pbcc,
      {"PBCC", "wlan_mgt.fixed.capabilities.pbcc",
-      FT_BOOLEAN, 16, TFS (&cf_pbcc_flags), 0x0040, "PBCC Modulation", HFILL }},
+      FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed), 0x0040,
+      "PBCC Modulation", HFILL }},
 
     {&hf_ieee80211_ff_cf_agility,
      {"Channel Agility", "wlan_mgt.fixed.capabilities.agility",
-      FT_BOOLEAN, 16, TFS (&cf_agility_flags), 0x0080, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse), 0x0080,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_cf_spec_man,
      {"Spectrum Management", "wlan_mgt.fixed.capabilities.spec_man",
-      FT_BOOLEAN, 16, TFS (&cf_spec_man_flags), 0x0100, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x0100,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_short_slot_time,
      {"Short Slot Time", "wlan_mgt.fixed.capabilities.short_slot_time",
-      FT_BOOLEAN, 16, TFS (&short_slot_time_flags), 0x0400, NULL,
-      HFILL }},
+      FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse), 0x0400,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_cf_apsd,
      {"Automatic Power Save Delivery", "wlan_mgt.fixed.capabilities.apsd",
-      FT_BOOLEAN, 16, TFS (&cf_apsd_flags), 0x0800, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x0800,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_ff_radio_measurement,
+     {"Radio Measurement", "wlan_mgt.fixed.capabilities.radio_measurement",
+      FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x1000,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_dsss_ofdm,
      {"DSSS-OFDM", "wlan_mgt.fixed.capabilities.dsss_ofdm",
-      FT_BOOLEAN, 16, TFS (&dsss_ofdm_flags), 0x2000, "DSSS-OFDM Modulation",
-      HFILL }},
+      FT_BOOLEAN, 16,  TFS(&tfs_allowed_not_allowed), 0x2000,
+      "DSSS-OFDM Modulation", HFILL }},
 
     {&hf_ieee80211_ff_cf_del_blk_ack,
      {"Delayed Block Ack", "wlan_mgt.fixed.capabilities.del_blk_ack",
-      FT_BOOLEAN, 16, TFS (&cf_del_blk_ack_flags), 0x4000, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x4000,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_cf_imm_blk_ack,
      {"Immediate Block Ack", "wlan_mgt.fixed.capabilities.imm_blk_ack",
-      FT_BOOLEAN, 16, TFS (&cf_imm_blk_ack_flags), 0x8000, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x8000,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_auth_seq,
      {"Authentication SEQ", "wlan_mgt.fixed.auth_seq",
-      FT_UINT16, BASE_HEX, NULL, 0, "Authentication Sequence Number", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "Authentication Sequence Number", HFILL }},
 
     {&hf_ieee80211_ff_assoc_id,
      {"Association ID", "wlan_mgt.fixed.aid",
-      FT_UINT16, BASE_HEX, NULL, 0x3FFF, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x3FFF,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_listen_ival,
      {"Listen Interval", "wlan_mgt.fixed.listen_ival",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_current_ap,
      {"Current AP", "wlan_mgt.fixed.current_ap",
-      FT_ETHER, BASE_NONE, NULL, 0, "MAC address of current AP", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      "MAC address of current AP", HFILL }},
 
     {&hf_ieee80211_ff_reason,
      {"Reason code", "wlan_mgt.fixed.reason_code",
-      FT_UINT16, BASE_HEX, VALS (&ieee80211_reason_code), 0,
+      FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_reason_code_ext, 0,
       "Reason for unsolicited notification", HFILL }},
 
     {&hf_ieee80211_ff_status_code,
      {"Status code", "wlan_mgt.fixed.status_code",
-      FT_UINT16, BASE_HEX, VALS (&ieee80211_status_code), 0,
+      FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_status_code_ext, 0,
       "Status of requested event", HFILL }},
 
     {&hf_ieee80211_ff_category_code,
      {"Category code", "wlan_mgt.fixed.category_code",
-      FT_UINT16, BASE_DEC, VALS (&category_codes), 0,
+      FT_UINT16, BASE_DEC|BASE_EXT_STRING, &category_codes_ext, 0,
       "Management action category", HFILL }},
 
     {&hf_ieee80211_ff_action_code,
      {"Action code", "wlan_mgt.fixed.action_code",
-      FT_UINT16, BASE_DEC, VALS (&action_codes), 0,
+      FT_UINT16, BASE_DEC, VALS(action_codes), 0,
       "Management action code", HFILL }},
 
     {&hf_ieee80211_ff_dialog_token,
      {"Dialog token", "wlan_mgt.fixed.dialog_token",
-      FT_UINT8, BASE_HEX, NULL, 0, "Management action dialog token", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Management action 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,
+      FT_UINT8, BASE_DEC, VALS(vendor_action_types_mrvl), 0,
       "Vendor Specific Action Type (Marvell)", HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_action_code,
      {"Mesh action(Marvell)", "wlan_mgt.fixed.mrvl_mesh_action",
-      FT_UINT8, BASE_HEX, VALS (&mesh_mgt_action_codes_mrvl), 0,
+      FT_UINT8, BASE_HEX, VALS(mesh_mgt_action_codes_mrvl), 0,
       "Mesh action code(Marvell)", HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_length,
      {"Message Length", "wlan_mgt.fixed.length",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_mode,
      {"Message Mode", "wlan_mgt.fixed.mode",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_ttl,
      {"Message TTL", "wlan_mgt.fixed.ttl",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_dstcount,
      {"Destination Count", "wlan_mgt.fixed.dstcount",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_hopcount,
      {"Hop Count", "wlan_mgt.fixed.hopcount",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_rreqid,
      {"RREQ ID", "wlan_mgt.fixed.rreqid",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_sa,
      {"Source Address", "wlan_mgt.fixed.sa",
-      FT_ETHER, BASE_NONE, NULL, 0, "Source MAC address", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      "Source MAC address", HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_ssn,
      {"SSN", "wlan_mgt.fixed.ssn",
-      FT_UINT32, BASE_DEC, NULL, 0, "Source Sequence Number", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      "Source Sequence Number", HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_metric,
      {"Metric", "wlan_mgt.fixed.metric",
-      FT_UINT32, BASE_DEC, NULL, 0, "Route Metric", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      "Route Metric", HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_flags,
      {"RREQ Flags", "wlan_mgt.fixed.hopcount",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_da,
      {"Destination Address", "wlan_mgt.fixed.da",
-      FT_ETHER, BASE_NONE, NULL, 0, "Destination MAC address", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      "Destination MAC address", HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_dsn,
      {"DSN", "wlan_mgt.fixed.dsn",
-      FT_UINT32, BASE_DEC, NULL, 0, "Destination Sequence Number", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      "Destination Sequence Number", HFILL }},
 
     {&hf_ieee80211_ff_marvell_mesh_mgt_lifetime,
      {"Lifetime", "wlan_mgt.fixed.lifetime",
-      FT_UINT32, BASE_DEC, NULL, 0, "Route Lifetime", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      "Route Lifetime", HFILL }},
 
     {&hf_ieee80211_ff_wme_action_code,
      {"Action code", "wlan_mgt.fixed.action_code",
-      FT_UINT16, BASE_HEX, VALS (&wme_action_codes), 0,
+      FT_UINT16, BASE_HEX, VALS(wme_action_codes), 0,
       "Management notification action code", HFILL }},
 
     {&hf_ieee80211_ff_wme_status_code,
      {"Status code", "wlan_mgt.fixed.status_code",
-      FT_UINT16, BASE_HEX, VALS (&wme_status_codes), 0,
+      FT_UINT16, BASE_HEX, VALS(wme_status_codes), 0,
       "Management notification setup response status code", HFILL }},
 
     {&hf_ieee80211_ff_mesh_action,
      {"Mesh Action code", "wlan_mgt.fixed.mesh_action",
-      FT_UINT8, BASE_HEX, VALS (&mesh_action), 0,
+      FT_UINT8, BASE_HEX|BASE_EXT_STRING, &mesh_action_ext, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_multihop_action,
      {"Multihop Action code", "wlan_mgt.fixed.multihop_action",
-      FT_UINT8, BASE_HEX, VALS (&multihop_action), 0,
+      FT_UINT8, BASE_HEX, VALS(multihop_action), 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_mesh_flags,
      {"Mesh Flags", "wlan_mgt.fixed.mesh_flags",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mesh_ttl,
      {"Mesh TTL", "wlan_mgt.fixed.mesh_ttl",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mesh_sequence,
      {"Sequence Number", "wlan_mgt.fixed.mesh_sequence",
-      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mesh_addr4,
      {"Mesh Extended Address 4", "wlan_mgt.fixed.mesh_addr4",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mesh_addr5,
      {"Mesh Extended Address 5", "wlan_mgt.fixed.mesh_addr5",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_mesh_addr6,
      {"Mesh Extended Address 6", "wlan_mgt.fixed.mesh_addr6",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_selfprot_action,
      {"Self-protected Action code", "wlan_mgt.fixed.selfprot_action",
-      FT_UINT8, BASE_HEX, VALS (&selfprot_action), 0,
+      FT_UINT8, BASE_HEX, VALS(selfprot_action), 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_mesh_peering_proto,
      {"Mesh Peering Protocol ID", "wlan.peering.proto",
-      FT_UINT16, BASE_HEX, VALS (&mesh_peering_proto_ids), 0,
+      FT_UINT16, BASE_HEX, VALS(mesh_peering_proto_ids), 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_mesh_peering_local_link_id,
@@ -13520,47 +15966,58 @@ proto_register_ieee80211 (void)
       "Mesh Peering Management Peer Link ID", HFILL }},
 
     {&hf_ieee80211_ff_hwmp_flags,
-     {"HWMP Flags", "wlan.hwmp.flags", FT_UINT8, BASE_HEX, NULL, 0,
+     {"HWMP Flags", "wlan.hwmp.flags",
+      FT_UINT8, BASE_HEX, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_hopcount,
-     {"HWMP Hop Count", "wlan.hwmp.hopcount", FT_UINT8, BASE_DEC, NULL, 0,
+     {"HWMP Hop Count", "wlan.hwmp.hopcount",
+      FT_UINT8, BASE_DEC, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_ttl,
-     {"HWMP TTL", "wlan.hwmp.ttl", FT_UINT8, BASE_DEC, NULL, 0,
+     {"HWMP TTL", "wlan.hwmp.ttl",
+      FT_UINT8, BASE_DEC, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_pdid,
-     {"HWMP Path Discovery ID", "wlan.hwmp.pdid", FT_UINT32, BASE_DEC, NULL, 0,
+     {"HWMP Path Discovery ID", "wlan.hwmp.pdid",
+      FT_UINT32, BASE_DEC, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_orig_sta,
-     {"Originator STA Address", "wlan.hwmp.orig_sta", FT_ETHER, BASE_NONE, NULL, 0,
+     {"Originator STA Address", "wlan.hwmp.orig_sta",
+      FT_ETHER, BASE_NONE, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_orig_sn,
-     {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn", FT_UINT32, BASE_DEC, NULL, 0,
+     {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn",
+      FT_UINT32, BASE_DEC, NULL, 0,
       NULL, HFILL}},
 
     {&hf_ieee80211_ff_hwmp_orig_ext,
-     {"Originator External Address", "wlan.hwmp.orig_ext", FT_ETHER, BASE_NONE, NULL, 0,
+     {"Originator External Address", "wlan.hwmp.orig_ext",
+      FT_ETHER, BASE_NONE, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_lifetime,
-     {"HWMP Lifetime", "wlan.hwmp.lifetime", FT_UINT32, BASE_DEC, NULL, 0,
+     {"HWMP Lifetime", "wlan.hwmp.lifetime",
+      FT_UINT32, BASE_DEC, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_metric,
-     {"HWMP Metric", "wlan.hwmp.metric", FT_UINT32, BASE_DEC, NULL, 0,
+     {"HWMP Metric", "wlan.hwmp.metric",
+      FT_UINT32, BASE_DEC, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_targ_count,
-     {"HWMP Target Count", "wlan.hwmp.targ_count", FT_UINT8, BASE_DEC, NULL, 0,
+     {"HWMP Target Count", "wlan.hwmp.targ_count",
+      FT_UINT8, BASE_DEC, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_targ_flags,
-     {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags", FT_UINT8, BASE_HEX, NULL, 0,
+     {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags",
+      FT_UINT8, BASE_HEX, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_targ_to_flags,
@@ -13574,16 +16031,19 @@ proto_register_ieee80211 (void)
       "Unknown Target HWMP Sequence Number Flag", HFILL }},
 
     {&hf_ieee80211_ff_hwmp_targ_sta,
-     {"Target STA Address", "wlan.hwmp.targ_sta", FT_ETHER, BASE_NONE, NULL, 0,
+     {"Target STA Address", "wlan.hwmp.targ_sta",
+      FT_ETHER, BASE_NONE, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_targ_ext,
-     {"Target External Address", "wlan.hwmp.targ_ext", FT_ETHER, BASE_NONE, NULL, 0,
+     {"Target External Address", "wlan.hwmp.targ_ext",
+      FT_ETHER, BASE_NONE, NULL, 0,
       NULL, HFILL }},
 
     {&hf_ieee80211_ff_hwmp_targ_sn,
      {"Target HWMP Sequence Number", "wlan.hwmp.targ_sn",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mesh_config_path_sel_protocol,
      {"Path Selection Protocol", "wlan.mesh.config.ps_protocol",
@@ -13636,34 +16096,38 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_rann_sn,
      {"Root STA Sequence Number", "wlan.rann.rann_sn",
-      FT_UINT32, BASE_DEC, NULL, 0, "Root Mesh STA Sequence Number", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      "Root Mesh STA Sequence Number", HFILL }},
 
     {&hf_ieee80211_rann_interval,
-     {"RANN Interval", "wlan.rann.interval", FT_UINT32, BASE_DEC, NULL, 0,
+     {"RANN Interval", "wlan.rann.interval",
+      FT_UINT32, BASE_DEC, NULL, 0,
       "Root Announcement Interval", HFILL }},
 
     {&hf_ieee80211_ff_qos_action_code,
      {"Action code", "wlan_mgt.fixed.action_code",
-      FT_UINT16, BASE_HEX, VALS (&qos_action_codes), 0,
+      FT_UINT16, BASE_HEX, VALS(qos_action_codes), 0,
       "QoS management action code", HFILL }},
 
     {&hf_ieee80211_ff_ba_action,
      {"Action code", "wlan_mgt.fixed.action_code",
-      FT_UINT8, BASE_HEX, VALS (&ba_action_codes), 0,
+      FT_UINT8, BASE_HEX, VALS(ba_action_codes), 0,
       "Block Ack action code", HFILL }},
 
     {&hf_ieee80211_ff_dls_action_code,
      {"Action code", "wlan_mgt.fixed.action_code",
-      FT_UINT16, BASE_HEX, VALS (&dls_action_codes), 0,
+      FT_UINT16, BASE_HEX, VALS(dls_action_codes), 0,
       "DLS management action code", HFILL }},
 
     {&hf_ieee80211_ff_dst_mac_addr,
      {"Destination address", "wlan_mgt.fixed.dst_mac_addr",
-      FT_ETHER, BASE_NONE, NULL, 0, "Destination MAC address", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      "Destination MAC address", HFILL }},
 
     {&hf_ieee80211_ff_src_mac_addr,
      {"Source address", "wlan_mgt.fixed.src_mac_addr",
-      FT_ETHER, BASE_NONE, NULL, 0, "Source MAC address", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      "Source MAC address", HFILL }},
 
     {&hf_ieee80211_ff_ft_action_code,
      {"Action code", "wlan_mgt.fixed.action_code",
@@ -13672,84 +16136,108 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_ff_sta_address,
      {"STA Address", "wlan_mgt.fixed.sta_address",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_target_ap_address,
      {"Target AP Address", "wlan_mgt.fixed.target_ap_address",
-      FT_ETHER, BASE_NONE, NULL, 0, "Target AP MAC address", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      "Target AP MAC address", HFILL }},
 
     {&hf_ieee80211_ff_gas_comeback_delay,
      {"GAS Comeback Delay", "wlan_mgt.fixed.gas_comeback_delay",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_gas_fragment_id,
      {"GAS Query Response Fragment ID", "wlan_mgt.fixed.gas_fragment_id",
-      FT_UINT8, BASE_DEC, NULL, 0x7f, NULL, HFILL
-     }},
+      FT_UINT8, BASE_DEC, NULL, 0x7f,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_more_gas_fragments,
      {"More GAS Fragments", "wlan_mgt.fixed.more_gas_fragments",
-      FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x80,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_query_request_length,
      {"Query Request Length", "wlan_mgt.fixed.query_request_length",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_query_request,
      {"Query Request", "wlan_mgt.fixed.query_request",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_query_response_length,
      {"Query Response Length", "wlan_mgt.fixed.query_response_length",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_query_response,
      {"Query Response", "wlan_mgt.fixed.query_response",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_gas_resp_fragments,
      {"GAS Query Response fragments", "wlan_mgt.fixed.fragments",
-      FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+      FT_NONE, BASE_NONE, NULL, 0x00,
+      NULL, HFILL } },
+
     {&hf_ieee80211_gas_resp_fragment,
      {"GAS Query Response fragment", "wlan_mgt.fixed.fragment",
-      FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+      FT_FRAMENUM, BASE_NONE, NULL, 0x00,
+      NULL, HFILL } },
+
     {&hf_ieee80211_gas_resp_fragment_overlap,
      {"GAS Query Response fragment overlap", "wlan_mgt.fixed.fragment.overlap",
-      FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+      FT_BOOLEAN, BASE_NONE, NULL, 0x00,
+      NULL, HFILL } },
+
     {&hf_ieee80211_gas_resp_fragment_overlap_conflict,
-     {"GAS Query Response fragment overlapping with conflicting data",
-      "wlan_mgt.fixed.fragment.overlap.conflicts",
-      FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+     {"GAS Query Response fragment overlapping with conflicting data", "wlan_mgt.fixed.fragment.overlap.conflicts",
+      FT_BOOLEAN, BASE_NONE, NULL, 0x00,
+      NULL, HFILL } },
+
     {&hf_ieee80211_gas_resp_fragment_multiple_tails,
-     {"GAS Query Response has multiple tail fragments",
-      "wlan_mgt.fixed.fragment.multiple_tails",
-      FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+     {"GAS Query Response has multiple tail fragments",  "wlan_mgt.fixed.fragment.multiple_tails",
+      FT_BOOLEAN, BASE_NONE, NULL, 0x00,
+      NULL, HFILL } },
+
     {&hf_ieee80211_gas_resp_fragment_too_long_fragment,
-     {"GAS Query Response fragment too long",
-      "wlan_mgt.fixed.fragment.too_long_fragment",
-      FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+     {"GAS Query Response fragment too long", "wlan_mgt.fixed.fragment.too_long_fragment",
+      FT_BOOLEAN, BASE_NONE, NULL, 0x00,
+      NULL, HFILL } },
+
     {&hf_ieee80211_gas_resp_fragment_error,
      {"GAS Query Response reassembly error", "wlan_mgt.fixed.fragment.error",
-      FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+      FT_FRAMENUM, BASE_NONE, NULL, 0x00,
+      NULL, HFILL } },
+
     {&hf_ieee80211_gas_resp_fragment_count,
      {"GAS Query Response fragment count", "wlan_mgt.fixed.fragment.count",
-      FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } },
+      FT_UINT32, BASE_DEC, NULL, 0x00,
+      NULL, HFILL } },
+
     {&hf_ieee80211_gas_resp_reassembled_in,
      {"Reassembled in", "wlan_mgt.fixed.reassembled.in",
-      FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
+      FT_FRAMENUM, BASE_NONE, NULL, 0x00,
+      NULL, HFILL } },
+
     {&hf_ieee80211_gas_resp_reassembled_length,
      {"Reassembled length", "wlan_mgt.fixed.reassembled.length",
-      FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } },
+      FT_UINT32, BASE_DEC, NULL, 0x00,
+      NULL, HFILL } },
 
     {&hf_ieee80211_ff_anqp_info_id,
      {"Info ID", "wlan_mgt.fixed.anqp.info_id",
-      FT_UINT16, BASE_DEC, VALS(anqp_info_id_vals), 0,
+      FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
       "Access Network Query Protocol Info ID", HFILL }},
 
     {&hf_ieee80211_ff_anqp_info_length,
      {"Length", "wlan_mgt.fixed.anqp.info_length",
-      FT_UINT16, BASE_DEC, NULL, 0, "Access Network Query Protocol Length",
-      HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      "Access Network Query Protocol Length", HFILL }},
 
     {&hf_ieee80211_ff_anqp_info,
      {"Information", "wlan_mgt.fixed.anqp.info",
@@ -13758,33 +16246,38 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_ff_anqp_query_id,
      {"ANQP Query ID", "wlan_mgt.fixed.anqp.query_id",
-      FT_UINT16, BASE_DEC, VALS(anqp_info_id_vals), 0,
+      FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
       "Access Network Query Protocol Query ID", HFILL }},
 
     {&hf_ieee80211_ff_anqp_capability,
      {"ANQP Capability", "wlan_mgt.fixed.anqp.capability",
-      FT_UINT16, BASE_DEC, VALS(anqp_info_id_vals), 0,
+      FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
       "Access Network Query Protocol Query ID", HFILL }},
+
     {&hf_ieee80211_ff_anqp_capability_vlen,
-     {"Vendor-specific Capability Length",
-      "wlan_mgt.fixed.anqp.capability_vlen",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+     {"Vendor-specific Capability Length", "wlan_mgt.fixed.anqp.capability_vlen",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_capability_vendor,
-     {"Vendor-specific Capability",
-      "wlan_mgt.fixed.anqp.capability_vendor",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+     {"Vendor-specific Capability", "wlan_mgt.fixed.anqp.capability_vendor",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_venue_info_group,
      {"Venue Group", "wlan_mgt.fixed.venue_info.group",
-      FT_UINT8, BASE_DEC, VALS(venue_group_vals), 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &venue_group_vals_ext, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_venue_info_type,
      {"Venue Type", "wlan_mgt.fixed.venue_info.type",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_anqp_venue_length,
      {"Venue Name Duple Length", "wlan_mgt.fixed.anqp.venue.length",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_anqp_venue_language,
      {"Language Code", "wlan_mgt.fixed.anqp.venue.language",
@@ -13793,29 +16286,33 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_ff_anqp_venue_name,
      {"Venue Name", "wlan_mgt.fixed.anqp.venue.name",
-      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_anqp_nw_auth_type_indicator,
-     {"Network Authentication Type Indicator",
-      "wlan_mgt.fixed.anqp.nw_auth_type.indicator",
-      FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals), 0, NULL, HFILL }},
+     {"Network Authentication Type Indicator", "wlan_mgt.fixed.anqp.nw_auth_type.indicator",
+      FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_anqp_nw_auth_type_url_len,
-     {"Re-direct URL Length",
-      "wlan_mgt.fixed.anqp.nw_auth_type.url_len",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+     {"Re-direct URL Length", "wlan_mgt.fixed.anqp.nw_auth_type.url_len",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_anqp_nw_auth_type_url,
      {"Re-direct URL", "wlan_mgt.fixed.anqp.nw_auth_type_url",
-      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
      {"OI Length", "wlan_mgt.fixed.anqp.roaming_consortium.oi_len",
-      FT_UINT8, BASE_DEC, NULL, 0, "Roaming Consortium OI Length", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      "Roaming Consortium OI Length", HFILL }},
 
     {&hf_ieee80211_ff_anqp_roaming_consortium_oi,
      {"OI", "wlan_mgt.fixed.anqp.roaming_consortium.oi",
-      FT_BYTES, BASE_NONE, NULL, 0, "Roaming Consortium OI", HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      "Roaming Consortium OI", HFILL }},
 
     {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
      {"IPv6 Address", "wlan_mgt.fixed.anqp.ip_addr_availability.ipv6",
@@ -13829,72 +16326,89 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_ff_anqp_nai_realm_count,
      {"NAI Realm Count", "wlan_mgt.fixed.anqp.nai_realm_list.count",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_field_len,
-     {"NAI Realm Data Field Length",
-      "wlan_mgt.fixed.anqp.nai_realm_list.field_len",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+     {"NAI Realm Data Field Length", "wlan_mgt.fixed.anqp.nai_realm_list.field_len",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_realm_encoding,
-     {"NAI Realm Encoding",
-      "wlan_mgt.fixed.naqp_nai_realm_list.encoding",
-      FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals), 0x01, NULL, HFILL }},
+     {"NAI Realm Encoding", "wlan_mgt.fixed.naqp_nai_realm_list.encoding",
+      FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals), 0x01,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_realm_length,
-     {"NAI Realm Length",
-      "wlan_mgt.fixed.naqp_nai_realm_list.realm_length",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+     {"NAI Realm Length", "wlan_mgt.fixed.naqp_nai_realm_list.realm_length",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_realm,
-     {"NAI Realm",
-      "wlan_mgt.fixed.naqp_nai_realm_list.realm",
-      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+     {"NAI Realm", "wlan_mgt.fixed.naqp_nai_realm_list.realm",
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_realm_eap_count,
-     {"EAP Method Count",
-      "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_count",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+     {"EAP Method Count", "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_count",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_realm_eap_len,
-     {"EAP Method subfield Length",
-      "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_len",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+     {"EAP Method subfield Length", "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_len",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_realm_eap_method,
-     {"EAP Method",
-      "wlan_mgt.fixed.naqp_nai_realm_list.eap_method",
-      FT_UINT8, BASE_DEC, VALS(eap_type_vals), 0, NULL, HFILL }},
+     {"EAP Method", "wlan_mgt.fixed.naqp_nai_realm_list.eap_method",
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &eap_type_vals_ext, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
-     {"Authentication Parameter Count",
-      "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_count",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+     {"Authentication Parameter Count", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_count",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
-     {"Authentication Parameter ID",
-      "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_id",
-      FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals),
-      0, NULL, HFILL }},
+     {"Authentication Parameter ID", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_id",
+      FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals), 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
-     {"Authentication Parameter Length",
-      "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_len",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+     {"Authentication Parameter Length", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_len",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
-     {"Authentication Parameter Value",
-      "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_value",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+     {"Authentication Parameter Value", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_value",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_3gpp_gc_gud,
      {"GUD", "wlan_mgt.fixed.anqp.3gpp_cellular_info.gud",
       FT_UINT8, BASE_DEC, NULL, 0,
       "Generic container User Data", HFILL }},
+
     {&hf_ieee80211_3gpp_gc_udhl,
      {"UDHL", "wlan_mgt.fixed.anqp.3gpp_cellular_info.udhl",
       FT_UINT8, BASE_DEC, NULL, 0,
       "User Data Header Length", HFILL }},
+
     {&hf_ieee80211_3gpp_gc_iei,
      {"IEI", "wlan_mgt.fixed.anqp.3gpp_cellular_info.iei",
       FT_UINT8, BASE_DEC, NULL, 0,
       "Information Element Identity", HFILL }},
+
     {&hf_ieee80211_3gpp_gc_plmn_len,
      {"PLMN Length", "wlan_mgt.fixed.anqp.3gpp_cellular_info.plmn_len",
       FT_UINT8, BASE_DEC, NULL, 0,
       "Length of PLMN List value contents", HFILL }},
+
     {&hf_ieee80211_3gpp_gc_num_plmns,
      {"Number of PLMNs", "wlan_mgt.fixed.anqp.3gpp_cellular_info.num_plmns",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_3gpp_gc_plmn,
      {"PLMN", "wlan_mgt.fixed.anqp.3gpp_cellular_info.plmn",
       FT_STRING, BASE_NONE, NULL, 0,
@@ -13902,14 +16416,18 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_ff_anqp_domain_name_len,
      {"Domain Name Length", "wlan_mgt.fixed.anqp.domain_name_list.len",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_ff_anqp_domain_name,
      {"Domain Name", "wlan_mgt.fixed.anqp.domain_name_list.name",
-      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ff_dls_timeout,
      {"DLS timeout", "wlan_mgt.fixed.dls_timeout",
-      FT_UINT16, BASE_HEX, NULL, 0, "DLS timeout value", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "DLS timeout value", HFILL }},
 
     {&hf_ieee80211_ff_sa_query_action_code,
      {"Action code", "wlan_mgt.fixed.action_code",
@@ -13918,7 +16436,128 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_ff_transaction_id,
      {"Transaction Id", "wlan_mgt.fixed.transaction_id",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_anqp_wfa_subtype,
+     {"ANQP WFA Subtype", "wlan_mgt.anqp.wfa.subtype",
+      FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals), 0, NULL, HFILL }},
+
+    {&hf_hs20_indication_dgaf_disabled,
+     {"DGAF Disabled", "wlan_mgt.hs20.indication.dgaf_disabled",
+      FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
+
+    {&hf_hs20_anqp_subtype,
+     {"Subtype", "wlan_mgt.hs20.anqp.subtype",
+      FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals), 0,
+      "Hotspot 2.0 ANQP Subtype", HFILL }},
+
+    {&hf_hs20_anqp_reserved,
+     {"Reserved", "wlan_mgt.hs20.anqp.reserved",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_hs20_anqp_payload,
+     {"Payload", "wlan_mgt.hs20.anqp.payload",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      "Hotspot 2.0 ANQP Payload", HFILL }},
+
+    {&hf_hs20_anqp_hs_query_list,
+     {"Queried Subtype", "wlan_mgt.hs20.anqp.hs_query_list",
+      FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals), 0,
+      "Queried HS 2.0 Element Subtype", HFILL }},
+
+    {&hf_hs20_anqp_hs_capability_list,
+     {"Capability", "wlan_mgt.hs20.anqp.hs_capability_list",
+      FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals), 0,
+      "Hotspot 2.0 ANQP Subtype Capability", HFILL }},
+
+    {&hf_hs20_anqp_ofn_length,
+     {"Length", "wlan_mgt.hs20.anqp.ofn.length",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      "Operator Friendly Name Length", HFILL }},
+
+    {&hf_hs20_anqp_ofn_language,
+     {"Language Code", "wlan_mgt.hs20.anqp.ofn.language",
+      FT_STRING, BASE_NONE, NULL, 0,
+      "Operator Friendly Name Language Code", HFILL }},
+
+    {&hf_hs20_anqp_ofn_name,
+     {"Operator Friendly Name", "wlan_mgt.hs20.anqp.ofn.name",
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_hs20_anqp_wan_metrics_link_status,
+     {"Link Status", "wlan_mgt.hs20.anqp.wan_metrics.link_status",
+      FT_UINT8, BASE_DEC, VALS(hs20_wm_link_status_vals), 0x03, NULL, HFILL }},
+
+    {&hf_hs20_anqp_wan_metrics_symmetric_link,
+     {"Symmetric Link", "wlan_mgt.hs20.anqp.wan_metrics.symmetric_link",
+      FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
+
+    {&hf_hs20_anqp_wan_metrics_at_capacity,
+     {"At Capacity", "wlan_mgt.hs20.anqp.wan_metrics.at_capacity",
+      FT_UINT8, BASE_DEC, NULL, 0x08, NULL, HFILL }},
+
+    {&hf_hs20_anqp_wan_metrics_reserved,
+     {"Reserved", "wlan_mgt.hs20.anqp.wan_metrics.reserved",
+      FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
+
+    {&hf_hs20_anqp_wan_metrics_downlink_speed,
+     {"Downlink Speed", "wlan_mgt.hs20.anqp.wan_metrics.downlink_speed",
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_hs20_anqp_wan_metrics_uplink_speed,
+     {"Uplink Speed", "wlan_mgt.hs20.anqp.wan_metrics.uplink_speed",
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_hs20_anqp_wan_metrics_downlink_load,
+     {"Downlink Load", "wlan_mgt.hs20.anqp.wan_metrics.downlink_load",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_hs20_anqp_wan_metrics_uplink_load,
+     {"Uplink Load", "wlan_mgt.hs20.anqp.wan_metrics.uplink_load",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_hs20_anqp_wan_metrics_lmd,
+     {"LMD", "wlan_mgt.hs20.anqp.wan_metrics.lmd",
+      FT_UINT16, BASE_DEC, NULL, 0, "Load Measurement Duration", HFILL }},
+
+    {&hf_hs20_anqp_cc_proto_ip_proto,
+     {"IP Protocol", "wlan_mgt.hs20.anqp.cc.ip_proto",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      "ProtoPort Tuple - IP Protocol", HFILL }},
+
+    {&hf_hs20_anqp_cc_proto_port_num,
+     {"Port Number", "wlan_mgt.hs20.anqp.cc.port_num",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      "ProtoPort Tuple - Port Number", HFILL }},
+
+    {&hf_hs20_anqp_cc_proto_status,
+     {"Status", "wlan_mgt.hs20.anqp.cc.status",
+      FT_UINT8, BASE_DEC, VALS(hs20_cc_status_vals), 0,
+      "ProtoPort Tuple - Status", HFILL }},
+
+    {&hf_hs20_anqp_nai_hrq_count,
+     {"NAI Home Realm Count", "wlan_mgt.hs20.anqp.nai_hrq.count",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_hs20_anqp_nai_hrq_encoding_type,
+     {"NAI Home Realm Encoding Type",
+      "wlan_mgt.hs20.anqp.nai_hrq.encoding_type",
+      FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals),
+      0x01, NULL, HFILL }},
+
+    {&hf_hs20_anqp_nai_hrq_length,
+     {"NAI Home Realm Name Length", "wlan_mgt.hs20.anqp.nai_hrq.length",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_hs20_anqp_nai_hrq_realm_name,
+     {"NAI Home Realm Name", "wlan_mgt.hs20.anqp.nai_hrq.name",
+      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+
+    {&hf_hs20_anqp_oper_class_indic,
+     {"Operating Class", "wlan_mgt.hs20.anqp.oper_class_indic.oper_class",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_ieee80211_tag,
      {"Tag", "wlan_mgt.tag",
@@ -13927,16 +16566,23 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_tag_number,
      {"Tag Number", "wlan_mgt.tag.number",
-      FT_UINT8, BASE_DEC, VALS(tag_num_vals), 0,
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tag_num_vals_ext, 0,
       "Element ID", HFILL }},
 
     {&hf_ieee80211_tag_length,
      {"Tag length", "wlan_mgt.tag.length",
-      FT_UINT32, BASE_DEC, NULL, 0, "Length of tag", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      "Length of tag", HFILL }},
 
     {&hf_ieee80211_tag_interpretation,
      {"Tag interpretation", "wlan_mgt.tag.interpretation",
-      FT_STRING, BASE_NONE, NULL, 0, "Interpretation of tag", HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0,
+      "Interpretation of tag", HFILL }},
+
+    {&hf_ieee80211_tag_data,
+     {"Tag Data", "wlan_mgt.tag.data",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      "Data Interpretation of tag", HFILL }},
 
     {&hf_ieee80211_tag_oui,
      {"OUI", "wlan_mgt.tag.oui",
@@ -13968,8 +16614,14 @@ proto_register_ieee80211 (void)
       "Indicates the maximum time (in TU) remaining in the present CFP", HFILL }},
 
     {&hf_ieee80211_tag_vendor_oui_type,
-     {"Vendor Specific OUI Type", "wlan_mgt.tag.oui.type",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+     {"Vendor Specific OUI Type", "wlan_mgt.tag.vendor.oui.type",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_vendor_data,
+     {"Vendor Specific Data", "wlan_mgt.tag.vendor.data",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      "Unknown/undecoded Vendor Specific Data", HFILL }},
 
     {&hf_ieee80211_tim_dtim_count,
      {"DTIM count", "wlan_mgt.tim.dtim_count",
@@ -14098,7 +16750,7 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_tag_request,
      {"Requested Element ID", "wlan_mgt.tag.request",
-      FT_UINT8, BASE_DEC, VALS(tag_num_vals), 0,
+      FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tag_num_vals_ext, 0,
       "The list of elements that are to be included in the responding STA Probe Response frame", HFILL }},
 
     {&hf_ieee80211_tclas_up,
@@ -14115,6 +16767,42 @@ 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 }},
 
     {&hf_ieee80211_tclas_src_mac_addr,
      {"Source address", "wlan_mgt.tclas.type",
@@ -14159,16 +16847,17 @@ proto_register_ieee80211 (void)
     {&hf_ieee80211_tclas_dscp,
      {"IPv4 DSCP", "wlan_mgt.tclas.dscp",
       FT_UINT8, BASE_HEX, NULL, 0,
-    "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL }},
+      "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL }},
 
     {&hf_ieee80211_tclas_protocol,
      {"Protocol", "wlan_mgt.tclas.protocol",
-      FT_UINT8, BASE_HEX, NULL, 0, "IPv4 Protocol", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "IPv4 Protocol", HFILL }},
 
     {&hf_ieee80211_tclas_ipv6_src,
      {"IPv6 Src Addr", "wlan_mgt.tclas.ipv6_src",
-      FT_IPv6, BASE_NONE,
-      NULL, 0, NULL, HFILL }},
+      FT_IPv6, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tclas_ipv6_dst,
      {"IPv6 Dst Addr", "wlan_mgt.tclas.ipv6_dst",
@@ -14191,76 +16880,94 @@ proto_register_ieee80211 (void)
       NULL, HFILL }},
 
     {&hf_ieee80211_rsn_version,
-     {"RSN Version", "wlan_mgt.rsn.version", FT_UINT16, BASE_DEC,
-      NULL, 0, "Indicates the version number of the RSNA protocol", HFILL }},
+     {"RSN Version", "wlan_mgt.rsn.version",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      "Indicates the version number of the RSNA protocol", HFILL }},
 
     {&hf_ieee80211_rsn_gcs,
-     {"Group Cipher Suite", "wlan_mgt.rsn.gcs", FT_UINT32, BASE_CUSTOM,
-      rsn_gcs_base_custom, 0, "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
+     {"Group Cipher Suite", "wlan_mgt.rsn.gcs",
+      FT_UINT32, BASE_CUSTOM, rsn_gcs_base_custom, 0,
+      "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
 
     {&hf_ieee80211_rsn_gcs_oui,
-     {"Group Cipher Suite OUI", "wlan_mgt.rsn.gcs.oui", FT_UINT24, BASE_CUSTOM,
-      oui_base_custom, 0, NULL, HFILL }},
+     {"Group Cipher Suite OUI", "wlan_mgt.rsn.gcs.oui",
+      FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_gcs_type,
-     {"Group Cipher Suite type", "wlan_mgt.rsn.gcs.type", FT_UINT8, BASE_DEC,
-      NULL, 0, NULL, HFILL }},
+     {"Group Cipher Suite type", "wlan_mgt.rsn.gcs.type",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_gcs_80211_type,
-     {"Group Cipher Suite type", "wlan_mgt.rsn.gcs.type", FT_UINT8, BASE_DEC,
-      VALS(ieee80211_rsn_cipher_vals), 0, NULL, HFILL }},
+     {"Group Cipher Suite type", "wlan_mgt.rsn.gcs.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_pcs_count,
-     {"Pairwise Cipher Suite Count", "wlan_mgt.rsn.pcs.count", FT_UINT16, BASE_DEC,
-      NULL, 0, "Indicates the number of pairwise cipher suite selectors that are contained in the Pairwise Cipher Suite List", HFILL }},
+     {"Pairwise Cipher Suite Count", "wlan_mgt.rsn.pcs.count",
+      FT_UINT16, BASE_DEC,  NULL, 0,
+      "Indicates the number of pairwise cipher suite selectors that are contained in the Pairwise Cipher Suite List", HFILL }},
 
     {&hf_ieee80211_rsn_pcs_list,
-     {"Pairwise Cipher Suite List", "wlan_mgt.rsn.pcs.list", FT_NONE, BASE_NONE,
-      NULL, 0, "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL }},
+     {"Pairwise Cipher Suite List", "wlan_mgt.rsn.pcs.list",
+      FT_NONE, BASE_NONE, NULL, 0,
+      "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL }},
 
     {&hf_ieee80211_rsn_pcs,
-     {"Pairwise Cipher Suite", "wlan_mgt.rsn.pcs", FT_UINT32, BASE_CUSTOM,
-      rsn_pcs_base_custom, 0, NULL, HFILL }},
+     {"Pairwise Cipher Suite", "wlan_mgt.rsn.pcs",
+      FT_UINT32, BASE_CUSTOM, rsn_pcs_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_pcs_oui,
-     {"Pairwise Cipher Suite OUI", "wlan_mgt.rsn.pcs.oui", FT_UINT24, BASE_CUSTOM,
-      oui_base_custom, 0, NULL, HFILL }},
+     {"Pairwise Cipher Suite OUI", "wlan_mgt.rsn.pcs.oui",
+      FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_pcs_type,
-     {"Pairwise Cipher Suite type", "wlan_mgt.rsn.pcs.type", FT_UINT8, BASE_DEC,
-      NULL, 0, NULL, HFILL }},
+     {"Pairwise Cipher Suite type", "wlan_mgt.rsn.pcs.type",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_pcs_80211_type,
-     {"Pairwise Cipher Suite type", "wlan_mgt.rsn.pcs.type", FT_UINT8, BASE_DEC,
-      VALS(ieee80211_rsn_cipher_vals), 0, NULL, HFILL }},
+     {"Pairwise Cipher Suite type", "wlan_mgt.rsn.pcs.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_akms_count,
-     {"Auth Key Management (AKM) Suite Count", "wlan_mgt.rsn.akms.count", FT_UINT16, BASE_DEC,
-      NULL, 0, "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
+     {"Auth Key Management (AKM) Suite Count", "wlan_mgt.rsn.akms.count",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
 
     {&hf_ieee80211_rsn_akms_list,
-     {"Auth Key Management (AKM) List", "wlan_mgt.rsn.akms.list", FT_NONE, BASE_NONE,
-      NULL, 0, "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
+     {"Auth Key Management (AKM) List", "wlan_mgt.rsn.akms.list",
+      FT_NONE, BASE_NONE, NULL, 0,
+      "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
 
     {&hf_ieee80211_rsn_akms,
-     {"Auth Key Management (AKM) Suite", "wlan_mgt.rsn.akms", FT_UINT32, BASE_CUSTOM,
-      rsn_akms_base_custom, 0, NULL, HFILL }},
+     {"Auth Key Management (AKM) Suite", "wlan_mgt.rsn.akms",
+      FT_UINT32, BASE_CUSTOM, rsn_akms_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_akms_oui,
-     {"Auth Key Management (AKM) OUI", "wlan_mgt.rsn.akms.oui", FT_UINT24, BASE_CUSTOM,
-      oui_base_custom, 0, NULL, HFILL }},
+     {"Auth Key Management (AKM) OUI", "wlan_mgt.rsn.akms.oui",
+      FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_akms_type,
-     {"Auth Key Management (AKM) type", "wlan_mgt.rsn.akms.type", FT_UINT8, BASE_DEC,
-      NULL, 0, NULL, HFILL }},
+     {"Auth Key Management (AKM) type", "wlan_mgt.rsn.akms.type",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_akms_80211_type,
-     {"Auth Key Management (AKM) type", "wlan_mgt.rsn.akms.type", FT_UINT8, BASE_DEC,
-      VALS(ieee80211_rsn_keymgmt_vals), 0, NULL, HFILL }},
+     {"Auth Key Management (AKM) type", "wlan_mgt.rsn.akms.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_keymgmt_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_cap,
-     {"RSN Capabilities", "wlan_mgt.rsn.capabilities", FT_UINT16, BASE_HEX,
-      NULL, 0, "RSN Capability information", HFILL }},
+     {"RSN Capabilities", "wlan_mgt.rsn.capabilities",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "RSN Capability information", HFILL }},
 
     {&hf_ieee80211_rsn_cap_preauth,
      {"RSN Pre-Auth capabilities", "wlan_mgt.rsn.capabilities.preauth",
@@ -14273,68 +16980,83 @@ proto_register_ieee80211 (void)
       NULL, HFILL }},
 
     {&hf_ieee80211_rsn_cap_ptksa_replay_counter,
-     {"RSN PTKSA Replay Counter capabilities",
-      "wlan_mgt.rsn.capabilities.ptksa_replay_counter",
+     {"RSN PTKSA Replay Counter capabilities", "wlan_mgt.rsn.capabilities.ptksa_replay_counter",
       FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter), 0x000C,
       NULL, HFILL }},
 
     {&hf_ieee80211_rsn_cap_gtksa_replay_counter,
-     {"RSN GTKSA Replay Counter capabilities",
-      "wlan_mgt.rsn.capabilities.gtksa_replay_counter",
+     {"RSN GTKSA Replay Counter capabilities", "wlan_mgt.rsn.capabilities.gtksa_replay_counter",
       FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter), 0x0030,
       NULL, HFILL }},
 
     {&hf_ieee80211_rsn_cap_mfpr,
-     {"Management Frame Protection Required",
-      "wlan_mgt.rsn.capabilities.mfpr",
-      FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL }},
+     {"Management Frame Protection Required", "wlan_mgt.rsn.capabilities.mfpr",
+      FT_BOOLEAN, 16, NULL, 0x0040,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_cap_mfpc,
-     {"Management Frame Protection Capable",
-      "wlan_mgt.rsn.capabilities.mfpc",
-      FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL }},
+     {"Management Frame Protection Capable", "wlan_mgt.rsn.capabilities.mfpc",
+      FT_BOOLEAN, 16, NULL, 0x0080,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_cap_peerkey,
-     {"PeerKey Enabled",
-      "wlan_mgt.rsn.capabilities.peerkey",
-      FT_BOOLEAN, 16, NULL, 0x0200, NULL, HFILL }},
+     {"PeerKey Enabled", "wlan_mgt.rsn.capabilities.peerkey",
+      FT_BOOLEAN, 16, NULL, 0x0200,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_pmkid_count,
-     {"PMKID Count", "wlan_mgt.rsn.pmkid.count", FT_UINT16, BASE_DEC,
-      NULL, 0, "Indicates the number of PMKID  selectors that are contained in the PMKID Suite List", HFILL }},
+     {"PMKID Count", "wlan_mgt.rsn.pmkid.count",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      "Indicates the number of PMKID  selectors that are contained in the PMKID Suite List", HFILL }},
 
     {&hf_ieee80211_rsn_pmkid_list,
-     {"PMKID List", "wlan_mgt.rsn.pmkid.list", FT_NONE, BASE_NONE,
-      NULL, 0, "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
+     {"PMKID List", "wlan_mgt.rsn.pmkid.list",
+      FT_NONE, BASE_NONE, NULL, 0,
+      "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
 
     {&hf_ieee80211_rsn_pmkid,
-     {"PMKID", "wlan_mgt.pmkid.akms", FT_BYTES, BASE_NONE,
-      NULL, 0, NULL, HFILL }},
+     {"PMKID", "wlan_mgt.pmkid.akms",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_gmcs,
-     {"Group Management Cipher Suite", "wlan_mgt.rsn.gmcs", FT_UINT32, BASE_CUSTOM,
-      rsn_gmcs_base_custom, 0, "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
+     {"Group Management Cipher Suite", "wlan_mgt.rsn.gmcs",
+      FT_UINT32, BASE_CUSTOM, rsn_gmcs_base_custom, 0,
+      "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
 
     {&hf_ieee80211_rsn_gmcs_oui,
-     {"Group Management Cipher Suite OUI", "wlan_mgt.rsn.gmcs.oui", FT_UINT24, BASE_CUSTOM,
-      oui_base_custom, 0, NULL, HFILL }},
+     {"Group Management Cipher Suite OUI", "wlan_mgt.rsn.gmcs.oui",
+      FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_gmcs_type,
-     {"Group Management Cipher Suite type", "wlan_mgt.rsn.gmcs.type", FT_UINT8, BASE_DEC,
-      NULL, 0, NULL, HFILL }},
+     {"Group Management Cipher Suite type", "wlan_mgt.rsn.gmcs.type",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_rsn_gmcs_80211_type,
-     {"Group Management Cipher Suite type", "wlan_mgt.rsn.gmcs.type", FT_UINT8, BASE_DEC,
-      VALS(ieee80211_rsn_cipher_vals), 0, NULL, HFILL }},
+     {"Group Management Cipher Suite type", "wlan_mgt.rsn.gmcs.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
+      NULL, HFILL }},
 
+    {&hf_ieee80211_ht_pren_type,
+     {"802.11n (Pre) Type", "wlan_mgt.vs.pren.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_ht_pren_type_vals), 0,
+      "Vendor Specific HT Type", HFILL }},
+    {&hf_ieee80211_ht_pren_unknown,
+     {"802.11n (Pre) Unknown Data", "wlan_mgt.vs.pren.unknown_data",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_cap,
-     {"HT Capabilities Info", "wlan_mgt.ht.capabilities", FT_UINT16, BASE_HEX,
-      NULL, 0, "HT Capability information", HFILL }},
+     {"HT Capabilities Info", "wlan_mgt.ht.capabilities",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "HT Capabilities information", HFILL }},
 
     {&hf_ieee80211_ht_vs_cap,
-     {"HT Capabilities Info (VS)", "wlan_mgt.vs.ht.capabilities", FT_UINT16, BASE_HEX,
-      NULL, 0, "Vendor Specific HT Capability information", HFILL }},
+     {"HT Capabilities Info (VS)", "wlan_mgt.vs.ht.capabilities",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "Vendor Specific HT Capabilities information", HFILL }},
 
     {&hf_ieee80211_ht_ldpc_coding,
      {"HT LDPC coding capability", "wlan_mgt.ht.capabilities.ldpccoding",
@@ -14348,7 +17070,7 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_ht_sm_pwsave,
      {"HT SM Power Save", "wlan_mgt.ht.capabilities.sm",
-      FT_UINT16, BASE_HEX, VALS (&ht_sm_pwsave_flag), 0x000c,
+      FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag), 0x000c,
       NULL, HFILL }},
 
     {&hf_ieee80211_ht_green,
@@ -14373,7 +17095,7 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_ht_rx_stbc,
      {"HT Rx STBC", "wlan_mgt.ht.capabilities.rxstbc",
-      FT_UINT16, BASE_HEX, VALS (&ht_rx_stbc_flag), 0x0300,
+      FT_UINT16, BASE_HEX, VALS(ht_rx_stbc_flag), 0x0300,
       "HT Tx STBC", HFILL }},
 
     {&hf_ieee80211_ht_delayed_block_ack,
@@ -14407,12 +17129,14 @@ proto_register_ieee80211 (void)
       NULL, HFILL }},
 
     {&hf_ieee80211_ampduparam,
-     {"A-MPDU Parameters", "wlan_mgt.ht.ampduparam", FT_UINT16, BASE_HEX,
-      NULL, 0, NULL, HFILL }},
+     {"A-MPDU Parameters", "wlan_mgt.ht.ampduparam",
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ampduparam_vs,
-     {"A-MPDU Parameters (VS)", "wlan_mgt.vs.ht.ampduparam", FT_UINT16, BASE_HEX,
-      NULL, 0, "Vendor Specific A-MPDU Parameters", HFILL }},
+     {"A-MPDU Parameters (VS)", "wlan_mgt.vs.ht.ampduparam",
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Vendor Specific A-MPDU Parameters", HFILL }},
 
     {&hf_ieee80211_ampduparam_mpdu,
      {"Maximum Rx A-MPDU Length", "wlan_mgt.ht.ampduparam.maxlength",
@@ -14431,51 +17155,63 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_mcsset,
      {"Rx Supported Modulation and Coding Scheme Set", "wlan_mgt.ht.mcsset",
-      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_vs,
      {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan_mgt.vs.ht.mcsset",
-      FT_STRING, BASE_NONE, NULL, 0, "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0,
+      "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL }},
 
     {&hf_ieee80211_mcsset_rx_bitmask,
      {"Rx Modulation and Coding Scheme (One bit per modulation)", "wlan_mgt.ht.mcsset.rxbitmask",
-      FT_NONE, BASE_NONE, NULL, 0, "One bit per modulation", HFILL }},
+      FT_NONE, BASE_NONE, NULL, 0,
+      "One bit per modulation", HFILL }},
 
     {&hf_ieee80211_mcsset_rx_bitmask_0to7,
      {"Rx Bitmask Bits 0-7", "wlan_mgt.ht.mcsset.rxbitmask.0to7",
-      FT_UINT32, BASE_HEX, 0, 0x000000ff, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x000000ff,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_rx_bitmask_8to15,
      {"Rx Bitmask Bits 8-15", "wlan_mgt.ht.mcsset.rxbitmask.8to15",
-      FT_UINT32, BASE_HEX, 0, 0x0000ff00, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x0000ff00,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_rx_bitmask_16to23,
      {"Rx Bitmask Bits 16-23", "wlan_mgt.ht.mcsset.rxbitmask.16to23",
-      FT_UINT32, BASE_HEX, 0, 0x00ff0000, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x00ff0000,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_rx_bitmask_24to31,
      {"Rx Bitmask Bits 24-31", "wlan_mgt.ht.mcsset.rxbitmask.24to31",
-      FT_UINT32, BASE_HEX, 0, 0xff000000, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0xff000000,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_rx_bitmask_32,
      {"Rx Bitmask Bit 32", "wlan_mgt.ht.mcsset.rxbitmask.32",
-      FT_UINT32, BASE_HEX, 0, 0x000001, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x000001,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_rx_bitmask_33to38,
      {"Rx Bitmask Bits 33-38", "wlan_mgt.ht.mcsset.rxbitmask.33to38",
-      FT_UINT32, BASE_HEX, 0, 0x00007e, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x00007e,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_rx_bitmask_39to52,
      {"Rx Bitmask Bits 39-52", "wlan_mgt.ht.mcsset.rxbitmask.39to52",
-      FT_UINT32, BASE_HEX, 0, 0x1fff80, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x1fff80,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_rx_bitmask_53to76,
      {"Rx Bitmask Bits 53-76", "wlan_mgt.ht.mcsset.rxbitmask.53to76",
-      FT_UINT32, BASE_HEX, 0, 0x1fffffe0, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x1fffffe0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_highest_data_rate,
      {"Highest Supported Data Rate", "wlan_mgt.ht.mcsset.highestdatarate",
-      FT_UINT16, BASE_HEX, 0, 0x03ff, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0x03ff,
+      NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_tx_mcs_set_defined,
      {"Tx Supported MCS Set", "wlan_mgt.ht.mcsset.txsetdefined",
@@ -14489,7 +17225,7 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_mcsset_tx_max_spatial_streams,
      {"Tx Maximum Number of Spatial Streams Supported", "wlan_mgt.ht.mcsset.txmaxss",
-      FT_UINT16, BASE_HEX, VALS (&mcsset_tx_max_spatial_streams_flags) , 0x000c,
+      FT_UINT16, BASE_HEX, VALS(mcsset_tx_max_spatial_streams_flags) , 0x000c,
       NULL, HFILL }},
 
     {&hf_ieee80211_mcsset_tx_unequal_modulation,
@@ -14498,12 +17234,14 @@ proto_register_ieee80211 (void)
       NULL, HFILL }},
 
     {&hf_ieee80211_htex_cap,
-     {"HT Extended Capabilities", "wlan_mgt.htex.capabilities", FT_UINT16, BASE_HEX,
-      NULL, 0, "HT Extended Capability information", HFILL }},
+     {"HT Extended Capabilities", "wlan_mgt.htex.capabilities",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "HT Extended Capability information", HFILL }},
 
     {&hf_ieee80211_htex_vs_cap,
-     {"HT Extended Capabilities (VS)", "wlan_mgt.vs.htex.capabilities", FT_UINT16, BASE_HEX,
-      NULL, 0, "Vendor Specific HT Extended Capability information", HFILL }},
+     {"HT Extended Capabilities (VS)", "wlan_mgt.vs.htex.capabilities",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "Vendor Specific HT Extended Capability information", HFILL }},
 
     {&hf_ieee80211_htex_pco,
      {"Transmitter supports PCO", "wlan_mgt.htex.capabilities.pco",
@@ -14512,12 +17250,12 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_htex_transtime,
      {"Time needed to transition between 20MHz and 40MHz", "wlan_mgt.htex.capabilities.transtime",
-      FT_UINT16, BASE_HEX, VALS (&htex_transtime_flags), 0x0006,
+      FT_UINT16, BASE_HEX, VALS(htex_transtime_flags), 0x0006,
       NULL, HFILL }},
 
     {&hf_ieee80211_htex_mcs,
      {"MCS Feedback capability", "wlan_mgt.htex.capabilities.mcs",
-      FT_UINT16, BASE_HEX, VALS (&htex_mcs_flags), 0x0300,
+      FT_UINT16, BASE_HEX, VALS(htex_mcs_flags), 0x0300,
       NULL, HFILL }},
 
     {&hf_ieee80211_htex_htc_support,
@@ -14531,12 +17269,14 @@ proto_register_ieee80211 (void)
       NULL, HFILL }},
 
     {&hf_ieee80211_txbf,
-     {"Transmit Beam Forming (TxBF) Capabilities", "wlan_mgt.txbf", FT_UINT16, BASE_HEX,
-      NULL, 0, NULL, HFILL }},
+     {"Transmit Beam Forming (TxBF) Capabilities", "wlan_mgt.txbf",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_txbf_vs,
-     {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan_mgt.vs.txbf", FT_UINT16, BASE_HEX,
-      NULL, 0, "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL }},
+     {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan_mgt.vs.txbf",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL }},
 
     {&hf_ieee80211_txbf_cap,
      {"Transmit Beamforming", "wlan_mgt.txbf.txbf",
@@ -14570,7 +17310,7 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_txbf_calib,
      {"Calibration", "wlan_mgt.txbf.calibration",
-      FT_UINT32, BASE_HEX, VALS (&txbf_calib_flag), 0x000000c0,
+      FT_UINT32, BASE_HEX, VALS(txbf_calib_flag), 0x000000c0,
       NULL, HFILL }},
 
     {&hf_ieee80211_txbf_expl_csi,
@@ -14590,47 +17330,322 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_txbf_expl_bf_csi,
      {"Receiver can return explicit CSI feedback", "wlan_mgt.txbf.rcsi",
-      FT_UINT32, BASE_HEX, VALS (&txbf_feedback_flags), 0x00001800,
+      FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00001800,
       NULL, HFILL }},
 
     {&hf_ieee80211_txbf_expl_uncomp_fm_feed,
      {"Receiver can return explicit uncompressed Beamforming Feedback Matrix", "wlan_mgt.txbf.fm.uncompressed.rbf",
-      FT_UINT32, BASE_HEX, VALS (&txbf_feedback_flags), 0x00006000,
+      FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00006000,
       NULL, HFILL }},
 
     {&hf_ieee80211_txbf_expl_comp_fm_feed,
      {"STA can compress and use compressed Beamforming Feedback Matrix", "wlan_mgt.txbf.fm.compressed.bf",
-      FT_UINT32, BASE_HEX, VALS (&txbf_feedback_flags), 0x00018000,
+      FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00018000,
       "Station can compress and use compressed Beamforming Feedback Matrix", HFILL }},
 
     {&hf_ieee80211_txbf_min_group,
      {"Minimal grouping used for explicit feedback reports", "wlan_mgt.txbf.mingroup",
-      FT_UINT32, BASE_HEX, VALS (&txbf_min_group_flags), 0x00060000,
+      FT_UINT32, BASE_HEX, VALS(txbf_min_group_flags), 0x00060000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_cap,
+     {"VHT Capabilities Info", "wlan_mgt.vht.capabilities",
+      FT_UINT32, BASE_HEX, NULL, 0,
+      "VHT Capabilities information", HFILL }},
+
+    {&hf_ieee80211_vht_max_mpdu_length,
+     {"Maximum MPDU Length", "wlan_mgt.vht.capabilities.maxmpdulength",
+      FT_UINT32, BASE_HEX, VALS(vht_max_mpdu_length_flag), 0x00000003,
+      "In Octets unit", HFILL }},
+
+    {&hf_ieee80211_vht_supported_chan_width_set,
+     {"Supported Channel Width Set", "wlan_mgt.vht.capabilities.supportedchanwidthset",
+      FT_UINT32, BASE_HEX, VALS(vht_supported_chan_width_set_flag), 0x0000000c,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_rx_ldpc,
+     {"Rx LDPC", "wlan_mgt.vht.capabilities.rxldpc",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000010,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_short_gi_for_80,
+     {"Short GI for 80MHz", "wlan_mgt.vht.capabilities.short80",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000020,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_short_gi_for_160,
+     {"Short GI for 160MHz and 80+80MHz", "wlan_mgt.vht.capabilities.short160",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000040,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_tx_stbc,
+     {"Tx STBC", "wlan_mgt.vht.capabilities.txstbc",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000080,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_rx_stbc,
+     {"Rx STBC", "wlan_mgt.vht.capabilities.rxstbc",
+      FT_UINT32, BASE_HEX, VALS(vht_rx_stbc_flag), 0x00000700,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_su_beamformer_cap,
+     {"SU Beam-former Capable", "wlan_mgt.vht.capabilities.subeamformer",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000800,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_su_beamformee_cap,
+     {"SU Beam-formee Capable", "wlan_mgt.vht.capabilities.subeamformee",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00001000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_beamformer_antennas,
+     {"Compressed Steering Number of Beamformer Antennas Supported", "wlan_mgt.vht.capabilities.beamformerants",
+      FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag), 0x0000e000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_sounding_dimensions,
+     {"Number of Sounding Dimensions", "wlan_mgt.vht.capabilities.soundingdimensions",
+      FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag), 0x00070000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mu_beamformer_cap,
+     {"MU Beam-former Capable", "wlan_mgt.vht.capabilities.mubeamformer",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00080000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mu_beamformee_cap,
+     {"MU Beam-formee Capable", "wlan_mgt.vht.capabilities.mubeamformee",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00100000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_txop_ps,
+     {"VHT TXOP PS", "wlan_mgt.vht.capabilities.vhttxopps",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00200000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_var_htc_field,
+     {"+HTC-VHT Capable (VHT variant HT Control field)", "wlan_mgt.vht.capabilities.vhthtc",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00400000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_max_ampdu,
+     {"Max A-MPDU Length", "wlan_mgt.vht.capabilities.maxampdu",
+      FT_UINT32, BASE_HEX, VALS(vht_max_ampdu_flag), 0x03800000,
+      "In Octets unit", HFILL }},
+
+    {&hf_ieee80211_vht_link_adaptation_cap,
+     {"VHT Link Adaptation", "wlan_mgt.vht.capabilities.linkadapt",
+      FT_UINT32, BASE_HEX, VALS(vht_link_adapt_flag), 0x0c000000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_rx_pattern,
+     {"Rx Antenna Pattern Consistency", "wlan_mgt.vht.capabilities.rxpatconsist",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x10000000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_tx_pattern,
+     {"Tx Antenna Pattern Consistency", "wlan_mgt.vht.capabilities.txpatconsist",
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x20000000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_reserv,
+     {"Reserved", "wlan_mgt.vht.reserved",
+      FT_BOOLEAN, 32, NULL, 0xc0000000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset,
+     {"VHT Supported MCS Set", "wlan_mgt.vht.mcsset",
+      FT_NONE, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_rx_mcs_map,
+     {"Rx MCS Map", "wlan_mgt.vht.mcsset.rxmcsmap",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
+     {"Rx 1 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss1",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
+     {"Rx 2 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss2",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
+     {"Rx 3 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss3",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
+     {"Rx 4 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss4",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
+     {"Rx 5 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss5",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
+     {"Rx 6 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss6",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
+     {"Rx 7 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss7",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
+     {"Rx 8 SS", "wlan_mgt.vht.mcsset.rxmcsmap.ss8",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_rx_highest_long_gi,
+     {"Rx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan_mgt.vht.mcsset.rxhighestlonggirate",
+      FT_UINT16, BASE_HEX, NULL, 0x1fff,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_tx_mcs_map,
+     {"Tx MCS Map", "wlan_mgt.vht.mcsset.txmcsmap",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
+     {"Tx 1 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss1",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
+     {"Tx 2 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss2",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
+     {"Tx 3 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss3",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
+     {"Tx 4 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss4",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
+     {"Tx 5 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss5",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
+     {"Tx 6 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss6",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
+     {"Tx 7 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss7",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
+     {"Tx 8 SS", "wlan_mgt.vht.mcsset.txmcsmap.ss8",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_mcsset_tx_highest_long_gi,
+     {"Tx Highest Long GI Data Rate  (in Mb/s, 0 = subfield not in use)", "wlan_mgt.vht.mcsset.txhighestlonggirate",
+      FT_UINT16, BASE_HEX, NULL, 0x1fff,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op,
+     {"VHT Operation Info", "wlan_mgt.vht.op",
+      FT_NONE, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_channel_width,
+     {"Channel Width", "wlan_mgt.vht.op.channelwidth",
+      FT_UINT8, BASE_HEX, VALS(vht_op_channel_width_flag), 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_channel_center0,
+     {"Channel Center Segment 0", "wlan_mgt.vht.op.channelcenter0",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_channel_center1,
+     {"Channel Center Segment 1", "wlan_mgt.vht.op.channelcenter1",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_basic_mcs_map,
+     {"Basic MCS Map", "wlan_mgt.vht.op.basicmcsmap",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
+     {"Basic 1 SS", "wlan_mgt.vht.op.basicmcsmap.ss1",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
+     {"Basic 2 SS", "wlan_mgt.vht.op.basicmcsmap.ss2",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
+     {"Basic 3 SS", "wlan_mgt.vht.op.basicmcsmap.ss3",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
+     {"Basic 4 SS", "wlan_mgt.vht.op.basicmcsmap.ss4",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
+     {"Basic 5 SS", "wlan_mgt.vht.op.basicmcsmap.ss5",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
+     {"Basic 6 SS", "wlan_mgt.vht.op.basicmcsmap.ss6",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
+     {"Basic 7 SS", "wlan_mgt.vht.op.basicmcsmap.ss7",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
+     {"Basic 8 SS", "wlan_mgt.vht.op.basicmcsmap.ss8",
+      FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
       NULL, HFILL }},
 
     {&hf_ieee80211_txbf_csi_num_bf_ant,
      {"Max antennae STA can support when CSI feedback required", "wlan_mgt.txbf.csinumant",
-      FT_UINT32, BASE_HEX, VALS (&txbf_antenna_flags), 0x00180000,
+      FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x00180000,
       "Max antennae station can support when CSI feedback required", HFILL }},
 
     {&hf_ieee80211_txbf_uncomp_sm_bf_ant,
      {"Max antennae STA can support when uncompressed Beamforming feedback required", "wlan_mgt.txbf.fm.uncompressed.maxant",
-      FT_UINT32, BASE_HEX, VALS (&txbf_antenna_flags), 0x00600000,
+      FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x00600000,
       "Max antennae station can support when uncompressed Beamforming feedback required", HFILL }},
 
     {&hf_ieee80211_txbf_comp_sm_bf_ant,
      {"Max antennae STA can support when compressed Beamforming feedback required", "wlan_mgt.txbf.fm.compressed.maxant",
-      FT_UINT32, BASE_HEX, VALS (&txbf_antenna_flags), 0x01800000,
+      FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x01800000,
       "Max antennae station can support when compressed Beamforming feedback required", HFILL }},
 
     {&hf_ieee80211_txbf_csi_max_rows_bf,
      {"Maximum number of rows of CSI explicit feedback", "wlan_mgt.txbf.csi.maxrows",
-      FT_UINT32, BASE_HEX, VALS (&txbf_csi_max_rows_bf_flags), 0x06000000,
+      FT_UINT32, BASE_HEX, VALS(txbf_csi_max_rows_bf_flags), 0x06000000,
       NULL, HFILL }},
 
     {&hf_ieee80211_txbf_chan_est,
      {"Maximum number of space time streams for which channel dimensions can be simultaneously estimated", "wlan_mgt.txbf.channelest",
-      FT_UINT32, BASE_HEX, VALS (&txbf_chan_est_flags), 0x18000000,
+      FT_UINT32, BASE_HEX, VALS(txbf_chan_est_flags), 0x18000000,
       NULL, HFILL }},
 
     {&hf_ieee80211_txbf_resrv,
@@ -14639,16 +17654,18 @@ proto_register_ieee80211 (void)
       NULL, HFILL }},
 
     {&hf_ieee80211_hta_cc,
-     {"HT Control Channel", "wlan_mgt.hta.control_channel", FT_UINT8, BASE_DEC,
-      NULL, 0, NULL, HFILL }},
+     {"HT Control Channel", "wlan_mgt.hta.control_channel",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_hta_cap,
-     {"HT Additional Capabilities", "wlan_mgt.hta.capabilities", FT_UINT16, BASE_HEX,
-      NULL, 0, "HT Additional Capability information", HFILL }},
+     {"HT Additional Capabilities", "wlan_mgt.hta.capabilities",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "HT Additional Capability information", HFILL }},
 
     {&hf_ieee80211_hta_ext_chan_offset,
      {"Extension Channel Offset", "wlan_mgt.hta.capabilities.extchan",
-      FT_UINT16, BASE_HEX, VALS (&hta_ext_chan_offset_flag), 0x0003,
+      FT_UINT16, BASE_HEX, VALS(hta_ext_chan_offset_flag), 0x0003,
       NULL, HFILL }},
 
     {&hf_ieee80211_hta_rec_tx_width,
@@ -14668,12 +17685,12 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_hta_service_interval,
      {"Service Interval Granularity", "wlan_mgt.hta.capabilities.serviceinterval",
-      FT_UINT16, BASE_HEX, VALS (&hta_service_interval_flag), 0x00E0,
+      FT_UINT16, BASE_HEX, VALS(hta_service_interval_flag), 0x00E0,
       NULL, HFILL }},
 
     {&hf_ieee80211_hta_operating_mode,
      {"Operating Mode", "wlan_mgt.hta.capabilities.operatingmode",
-      FT_UINT16, BASE_HEX, VALS (&hta_operating_mode_flag), 0x0003,
+      FT_UINT16, BASE_HEX, VALS(hta_operating_mode_flag), 0x0003,
       NULL, HFILL }},
 
     {&hf_ieee80211_hta_non_gf_devices,
@@ -14713,150 +17730,452 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_antsel,
      {"Antenna Selection (ASEL) Capabilities", "wlan_mgt.asel",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_antsel_vs,
      {"Antenna Selection (ASEL) Capabilities (VS)", "wlan_mgt.vs.asel",
-      FT_UINT8, BASE_HEX, NULL, 0, "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL }},
 
     {&hf_ieee80211_antsel_b0,
      {"Antenna Selection Capable", "wlan_mgt.asel.capable",
-      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x01, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_antsel_b1,
      {"Explicit CSI Feedback Based Tx ASEL", "wlan_mgt.asel.txcsi",
-      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x02, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_antsel_b2,
      {"Antenna Indices Feedback Based Tx ASEL", "wlan_mgt.asel.txif",
-      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x04, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_antsel_b3,
      {"Explicit CSI Feedback", "wlan_mgt.asel.csi",
-      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x08, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x08,
+      NULL, HFILL }},
 
     {&hf_ieee80211_antsel_b4,
      {"Antenna Indices Feedback", "wlan_mgt.asel.if",
-      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x10, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x10,
+      NULL, HFILL }},
 
     {&hf_ieee80211_antsel_b5,
      {"Rx ASEL", "wlan_mgt.asel.rx",
-      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x20, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x20,
+      NULL, HFILL }},
 
     {&hf_ieee80211_antsel_b6,
      {"Tx Sounding PPDUs", "wlan_mgt.asel.sppdu",
-      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x40, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x40,
+      NULL, HFILL }},
 
     {&hf_ieee80211_antsel_b7,
      {"Reserved", "wlan_mgt.asel.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x80,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_delimiter1,
      {"HT Information Subset (1 of 3)", "wlan_mgt.ht.info.delim1",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_primary_channel,
      {"Primary Channel", "wlan_mgt.ht.info.primarychannel",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_secondary_channel_offset,
      {"Secondary channel offset", "wlan_mgt.ht.info.secchanoffset",
-      FT_UINT8, BASE_HEX, VALS (&ht_info_secondary_channel_offset_flags), 0x03, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ht_info_secondary_channel_offset_flags), 0x03,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_channel_width,
      {"Supported channel width", "wlan_mgt.ht.info.chanwidth",
-      FT_BOOLEAN, 8, TFS (&ht_info_channel_width_flag), 0x04, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&ht_info_channel_width_flag), 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_rifs_mode,
      {"Reduced Interframe Spacing (RIFS)", "wlan_mgt.ht.info.rifs",
-      FT_BOOLEAN, 8, TFS (&ht_info_rifs_mode_flag), 0x08, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&ht_info_rifs_mode_flag), 0x08,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_psmp_stas_only,
      {"Power Save Multi-Poll (PSMP) stations only", "wlan_mgt.ht.info.psmponly",
-      FT_BOOLEAN, 8, TFS (&ht_info_psmp_stas_only_flag), 0x10, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&ht_info_psmp_stas_only_flag), 0x10,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_service_interval_granularity,
      {"Shortest service interval", "wlan_mgt.ht.info.",
-      FT_UINT8, BASE_HEX, VALS (&ht_info_service_interval_granularity_flags), 0xe0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ht_info_service_interval_granularity_flags), 0xe0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_delimiter2,
      {"HT Information Subset (2 of 3)", "wlan_mgt.ht.info.delim2",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_operating_mode,
      {"Operating mode of BSS", "wlan_mgt.ht.info.operatingmode",
-      FT_UINT16, BASE_HEX, VALS (&ht_info_operating_mode_flags), 0x0003, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, VALS(ht_info_operating_mode_flags), 0x0003,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_non_greenfield_sta_present,
      {"Non-greenfield STAs present", "wlan_mgt.ht.info.greenfield",
-      FT_BOOLEAN, 16, TFS (&ht_info_non_greenfield_sta_present_flag), 0x0004, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_non_greenfield_sta_present_flag), 0x0004,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_transmit_burst_limit,
      {"Transmit burst limit", "wlan_mgt.ht.info.burstlim",
-      FT_BOOLEAN, 16, TFS (&ht_info_transmit_burst_limit_flag), 0x0008, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_transmit_burst_limit_flag), 0x0008,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_obss_non_ht_stas_present,
      {"OBSS non-HT STAs present", "wlan_mgt.ht.info.obssnonht",
-      FT_BOOLEAN, 16, TFS (&ht_info_obss_non_ht_stas_present_flag), 0x0010, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_obss_non_ht_stas_present_flag), 0x0010,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_reserved_1,
      {"Reserved", "wlan_mgt.ht.info.reserved1",
-      FT_UINT16, BASE_HEX, NULL, 0xffe0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0xffe0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_delimiter3,
      {"HT Information Subset (3 of 3)", "wlan_mgt.ht.info.delim3",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_reserved_2,
      {"Reserved", "wlan_mgt.ht.info.reserved2",
-      FT_UINT16, BASE_HEX, NULL, 0x003f, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x003f,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_dual_beacon,
      {"Dual beacon", "wlan_mgt.ht.info.dualbeacon",
-      FT_BOOLEAN, 16, TFS (&ht_info_dual_beacon_flag), 0x0040, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_dual_beacon_flag), 0x0040,
+      NULL, HFILL }},
 
     {&hf_ieee80211_ht_info_dual_cts_protection,
      {"Dual Clear To Send (CTS) protection", "wlan_mgt.ht.info.dualcts",
-      FT_BOOLEAN, 16, TFS (&ht_info_dual_cts_protection_flag), 0x0080, NULL, HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_dual_cts_protection_flag), 0x0080,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_ht_info_secondary_beacon,
+     {"Beacon ID", "wlan_mgt.ht.info.secondarybeacon",
+      FT_BOOLEAN, 16, TFS (&ht_info_secondary_beacon_flag), 0x0100,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_ht_info_lsig_txop_protection_full_support,
+     {"L-SIG TXOP Protection Full Support", "wlan_mgt.ht.info.lsigprotsupport",
+      FT_BOOLEAN, 16, TFS (&ht_info_lsig_txop_protection_full_support_flag), 0x0200,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_ht_info_pco_active,
+     {"Phased Coexistence Operation (PCO)", "wlan_mgt.ht.info.pco.active",
+      FT_BOOLEAN, 16, TFS (&tfs_active_inactive), 0x0400,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_ht_info_pco_phase,
+     {"Phased Coexistence Operation (PCO) Phase", "wlan_mgt.ht.info.pco.phase",
+      FT_BOOLEAN, 16, TFS (&ht_info_pco_phase_flag), 0x0800,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_ht_info_reserved_3,
+     {"Reserved", "wlan_mgt.ht.info.reserved3",
+      FT_UINT16, BASE_HEX, NULL, 0xf000,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_ap_channel_report_regulatory_class,
+     {"Regulatory Class", "wlan_mgt.ap_channel_report.regulatory_class",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_ap_channel_report_channel_list,
+     {"Channel List", "wlan_mgt.ap_channel_report.channel_list",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_secondary_channel_offset,
+     {"Secondary Channel Offset", "wlan_mgt.secchanoffset",
+      FT_UINT8, BASE_HEX, VALS(ieee80211_tag_secondary_channel_offset_flags), 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_bss_ap_avg_access_delay,
+     {"AP Average Access Delay", "wlan_mgt.bss_ap_avg_access_delay",
+      FT_UINT8, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_antenna_id,
+     {"Antenna ID", "wlan_mgt.antenna.id",
+      FT_UINT8, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_rsni,
+     {"RSNI", "wlan_mgt.rsni",
+      FT_UINT8, BASE_CUSTOM, rsni_base_custom, 0x0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
+     {"Available Admission Capacity Bitmask", "wlan_mgt.bss_avb_adm_cap.bitmask",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
+     {"UP0 (bit0)", "wlan_mgt.bss_avb_adm_cap.bitmask.up0",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
+     {"UP1 (bit1)", "wlan_mgt.bss_avb_adm_cap.bitmask.up1",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP1,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
+     {"UP2 (bit2)", "wlan_mgt.bss_avb_adm_cap.bitmask.up2",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP2,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
+     {"UP3 (bit3)", "wlan_mgt.bss_avb_adm_cap.bitmask.up3",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP3,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
+     {"UP4 (bit4)", "wlan_mgt.bss_avb_adm_cap.bitmask.up4",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP4,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
+     {"UP5 (bit5)", "wlan_mgt.bss_avb_adm_cap.bitmask.up5",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP5,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
+     {"UP0 (bit6)", "wlan_mgt.bss_avb_adm_cap.bitmask.up6",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP6,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
+     {"UP7 (bit7)", "wlan_mgt.bss_avb_adm_cap.bitmask.up7",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP7,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
+     {"AC0 (bit8)", "wlan_mgt.bss_avb_adm_cap.bitmask.ac0",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
+     {"AC1 (bit9)", "wlan_mgt.bss_avb_adm_cap.bitmask.AC1",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC1,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
+     {"AC2 (bit10)", "wlan_mgt.bss_avb_adm_cap.bitmask.ac2",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC2,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
+     {"AC3 (bit11)", "wlan_mgt.bss_avb_adm_cap.bitmask.ac3",
+      FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC3,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
+     {"Reserved", "wlan_mgt.bss_avb_adm_cap.bitmask.rsv",
+      FT_UINT16, BASE_HEX, NULL, BSS_BITMASK_RSV,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_up0,
+     {"UP0", "wlan_mgt.bss_avb_adm_cap.up0",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_up1,
+     {"UP1", "wlan_mgt.bss_avb_adm_cap.up1",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_up2,
+     {"UP2", "wlan_mgt.bss_avb_adm_cap.up2",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_up3,
+     {"UP3", "wlan_mgt.bss_avb_adm_cap.up3",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_up4,
+     {"UP4", "wlan_mgt.bss_avb_adm_cap.up4",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_up5,
+     {"UP5", "wlan_mgt.bss_avb_adm_cap.up5",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_up6,
+     {"UP6", "wlan_mgt.bss_avb_adm_cap.up6",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_up7,
+     {"UP7", "wlan_mgt.bss_avb_adm_cap.up7",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_ac0,
+     {"AC0", "wlan_mgt.bss_avb_adm_cap.ac0",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_ac1,
+     {"AC1", "wlan_mgt.bss_avb_adm_cap.ac1",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_ac2,
+     {"AC2", "wlan_mgt.bss_avb_adm_cap.ac2",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avb_adm_cap_ac3,
+     {"AC3", "wlan_mgt.bss_avb_adm_cap.ac3",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
 
-    {&hf_ieee80211_ht_info_secondary_beacon,
-     {"Beacon ID", "wlan_mgt.ht.info.secondarybeacon",
-      FT_BOOLEAN, 16, TFS (&ht_info_secondary_beacon_flag), 0x0100, NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avg_ac_access_delay_be,
+     {"AC Average Access Delay for Best Effort", "wlan_mgt.bss_avg_ac_access_delay.be",
+      FT_UINT8, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avg_ac_access_delay_bk,
+     {"AC Average Access Delay for Best Background", "wlan_mgt.bss_avg_ac_access_delay.bk",
+      FT_UINT8, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avg_ac_access_delay_vi,
+     {"AC Average Access Delay for Video", "wlan_mgt.bss_avg_ac_access_delay_vi",
+      FT_UINT8, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_bss_avg_ac_access_delay_vo,
+     {"AC Average Access Delay for Voice", "wlan_mgt.bss_avg_ac_access_delay_vo",
+      FT_UINT8, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
 
-    {&hf_ieee80211_ht_info_lsig_txop_protection_full_support,
-     {"L-SIG TXOP Protection Full Support", "wlan_mgt.ht.info.lsigprotsupport",
-      FT_BOOLEAN, 16, TFS (&ht_info_lsig_txop_protection_full_support_flag), 0x0200, NULL, HFILL }},
 
-    {&hf_ieee80211_ht_info_pco_active,
-     {"Phased Coexistence Operation (PCO)", "wlan_mgt.ht.info.pco.active",
-      FT_BOOLEAN, 16, TFS (&tfs_active_inactive), 0x0400, NULL, HFILL }},
+    /* 802.11-2012 Table 8-119-RM Enabled Capabilities definition */
+    {&hf_ieee80211_tag_rm_enabled_capabilities,
+     {"RM Capabilities", "wlan_mgt.rmcap",
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Signals support for radio measurements in a device", HFILL }},
 
-    {&hf_ieee80211_ht_info_pco_phase,
-     {"Phased Coexistence Operation (PCO) Phase", "wlan_mgt.ht.info.pco.phase",
-      FT_BOOLEAN, 16, TFS (&ht_info_pco_phase_flag), 0x0800, NULL, HFILL }},
+    /* RM Enabled Capability octet 1 */
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b0,
+     {"Link Measurement", "wlan_mgt.rmcap.b0",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b1,
+     {"Neighbor Report", "wlan_mgt.rmcap.b1",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b2,
+     {"Parallel Measurements", "wlan_mgt.rmcap.b2",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b3,
+     {"Repeated Measurements", "wlan_mgt.rmcap.b3",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b4,
+     {"Beacon Passive Measurement", "wlan_mgt.rmcap.b4",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b5,
+     {"Beacon Active Measurement", "wlan_mgt.rmcap.b5",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b6,
+     {"Beacon Table Measurement", "wlan_mgt.rmcap.b6",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b7,
+     {"Beacon Measurement Reporting Conditions", "wlan_mgt.rmcap.b7",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
+      NULL, HFILL }},
 
-    {&hf_ieee80211_ht_info_reserved_3,
-     {"Reserved", "wlan_mgt.ht.info.reserved3",
-      FT_UINT16, BASE_HEX, NULL, 0xf000, NULL, HFILL }},
+    /* RM Enabled Capability octet 2 */
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b8,
+     {"Frame Measurement", "wlan_mgt.rmcap.b8",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b9,
+     {"Channel Load Measurement", "wlan_mgt.rmcap.b9",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b10,
+     {"Noise Histogram Measurement", "wlan_mgt.rmcap.b10",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b11,
+     {"Statistics Measurement", "wlan_mgt.rmcap.b11",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b12,
+     {"LCI Measurement", "wlan_mgt.rmcap.b12",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b13,
+     {"LCI Azimuth capability", "wlan_mgt.rmcap.b13",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b14,
+     {"Transmit Stream/Category Measurement", "wlan_mgt.rmcap.b14",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b15,
+     {"Triggered Transmit Stream/Category Measurement", "wlan_mgt.rmcap.b15",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
+      NULL, HFILL }},
 
-    {&hf_ieee80211_tag_ap_channel_report_regulatory_class,
-     {"Regulatory Class", "wlan_mgt.ap_channel_report.regulatory_class",
-      FT_UINT8, BASE_DEC, NULL, 0,
+    /* RM Enabled Capability octet 3 */
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b16,
+     {"AP Channel Report capability", "wlan_mgt.rmcap.b16",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b17,
+     {"RM MIB capability", "wlan_mgt.rmcap.b17",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
+     {"Operating Channel Max Measurement Duration", "wlan_mgt.rmcap.b18to20",
+      FT_UINT8, BASE_DEC, NULL, 0x1C,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
+     {"Nonoperating Channel Max Measurement Duration", "wlan_mgt.rmcap.b21to23",
+      FT_UINT8, BASE_DEC, NULL, 0xE0,
       NULL, HFILL }},
 
-    {&hf_ieee80211_tag_ap_channel_report_channel_list,
-     {"Channel List", "wlan_mgt.ap_channel_report.channel_list",
-      FT_UINT8, BASE_DEC, NULL, 0,
+    /* RM Enabled Capability octet 4 */
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
+     {"Measurement Pilotcapability", "wlan_mgt.rmcap.b24to26",
+      FT_UINT8, BASE_DEC, NULL, 0x07,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b27,
+     {"Measurement Pilot Transmission Information", "wlan_mgt.rmcap.b27",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b28,
+     {"Neighbor Report TSF Offset", "wlan_mgt.rmcap.b28",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b29,
+     {"RCPI Measurement capability", "wlan_mgt.rmcap.b29",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b30,
+     {"RSNI Measurement capability", "wlan_mgt.rmcap.b30",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b31,
+     {"BSS Average Access Delay capability", "wlan_mgt.rmcap.b31",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
       NULL, HFILL }},
 
-    {&hf_ieee80211_tag_secondary_channel_offset,
-     {"Secondary Channel Offset", "wlan_mgt.secchanoffset",
-      FT_UINT8, BASE_HEX, VALS (&ieee80211_tag_secondary_channel_offset_flags), 0,
+    /* RM Enabled Capability octet 5 */
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b32,
+     {"BSS Available Admission Capacity capability", "wlan_mgt.rmcap.b32",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
+      NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_b33,
+     {"Antenna capability", "wlan_mgt.rmcap.b33",
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
       NULL, HFILL }},
+    {&hf_ieee80211_tag_rm_enabled_capabilities_o5,
+     {"Reserved", "wlan_mgt.rmcap.o5",
+      FT_UINT8, BASE_HEX, NULL, 0xFC,
+      "Must be zero", HFILL }},
 
     {&hf_ieee80211_tag_power_constraint_local,
      {"Local Power Constraint", "wlan_mgt.powercon.local",
-      FT_UINT8, BASE_HEX, NULL, 0,
+      FT_UINT8, BASE_DEC, NULL, 0,
       "Value that allows the mitigation requirements to be satisfied in the current channel", HFILL }},
 
     {&hf_ieee80211_tag_power_capability_min,
@@ -14911,1486 +18230,2286 @@ proto_register_ieee80211 (void)
 
     {&hf_ieee80211_tag_measure_request_token,
      {"Measurement Token", "wlan_mgt.measure.req.token",
-      FT_UINT8, BASE_HEX, NULL, 0xff, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xff,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_mode,
      {"Measurement Request Mode", "wlan_mgt.measure.req.mode",
-      FT_UINT8, BASE_HEX, NULL, 0xff, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xff,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_mode_parallel,
      {"Parallel", "wlan_mgt.measure.req.reqmode.parallel",
-      FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
+      FT_BOOLEAN, 8, NULL, 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_mode_enable,
      {"Measurement Request Mode Field", "wlan_mgt.measure.req.reqmode.enable",
-      FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x02, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_mode_request,
      {"Measurement Reports", "wlan_mgt.measure.req.reqmode.request",
-      FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x04, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_mode_report,
      {"Autonomous Measurement Reports", "wlan_mgt.measure.req.reqmode.report",
-      FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x08, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x08,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_mode_duration_mandatory,
      {"Duration Mandatory", "wlan_mgt.measure.req.reqmode.duration_mandatory",
-      FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x10, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x10,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_mode_reserved,
      {"Reserved", "wlan_mgt.measure.req.reqmode.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xE0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_type,
      {"Measurement Request Type", "wlan_mgt.measure.req.reqtype",
-      FT_UINT8, BASE_HEX, VALS (&ieee80211_tag_measure_request_type_flags), 0x00, NULL, HFILL }},
+      FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_request_type_flags_ext, 0x00,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_channel_number,
      {"Measurement Channel Number", "wlan_mgt.measure.req.channelnumber",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_start_time,
      {"Measurement Start Time", "wlan_mgt.measure.req.starttime",
-      FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT64, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_duration,
      {"Measurement Duration", "wlan_mgt.measure.req.channelnumber",
-      FT_UINT16, BASE_HEX, NULL, 0, "in TU (1 TU = 1024 us)", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "in TU (1 TU = 1024 us)", HFILL }},
 
     {&hf_ieee80211_tag_measure_request_regulatory_class,
      {"Measurement Channel Number", "wlan_mgt.measure.req.regclass",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_randomization_interval,
      {"Randomization Interval", "wlan_mgt.measure.req.randint",
-      FT_UINT16, BASE_HEX, NULL, 0, "in TU (1 TU = 1024 us)", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "in TU (1 TU = 1024 us)", HFILL }},
 
     {&hf_ieee80211_tag_measure_request_measurement_mode,
      {"Measurement Mode", "wlan_mgt.measure.req.measurementmode",
-      FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_measurement_mode_flags), 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_measurement_mode_flags), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_bssid,
      {"BSSID", "wlan_mgt.measure.req.bssid",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_subelement_length,
      {"Length", "wlan_mgt.measure.req.sub.length",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_beacon_sub_id,
      {"SubElement ID", "wlan_mgt.measure.req.beacon.sub.id",
-      FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_beacon_sub_id_flags), 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_beacon_sub_id_flags), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_beacon_sub_ssid,
      {"SSID", "wlan_mgt.measure.req.beacon.sub.ssid",
-      FT_STRING, BASE_NONE, 0, 0, NULL, HFILL }},
+      FT_STRING, BASE_NONE, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition,
      {"Reporting Condition", "wlan_mgt.measure.req.beacon.sub.bri.repcond",
-      FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags), 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset,
      {"Threshold/Offset", "wlan_mgt.measure.req.beacon.sub.bri.threshold_offset",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail,
      {"Reporting Detail", "wlan_mgt.measure.req.beacon.sub.bri.reporting_detail",
-      FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags), 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_beacon_sub_request,
      {"Request", "wlan_mgt.measure.req.beacon.sub.request",
-      FT_UINT8, BASE_DEC, 0, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, 0, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_beacon_unknown,
      {"Unknown Data", "wlan_mgt.measure.req.beacon.unknown",
-      FT_BYTES, BASE_NONE, NULL, 0, "(not interpreted)", HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      "(not interpreted)", HFILL }},
 
     {&hf_ieee80211_tag_measure_request_frame_request_type,
      {"Frame Request Type", "wlan_mgt.measure.req.frame_request_type",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_mac_address,
      {"MAC Address", "wlan_mgt.measure.req.mac_address",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_peer_mac_address,
      {"Peer MAC Address", "wlan_mgt.measure.req.peer_mac_address",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_request_group_id,
      {"Group ID", "wlan_mgt.measure.req.groupid",
-      FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_group_id_flags), 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_request_group_id_flags_ext, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_measurement_token,
      {"Measurement Token", "wlan_mgt.measure.req.token",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_mode,
      {"Measurement Report Mode", "wlan_mgt.measure.req.mode",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_mode_late,
      {"Measurement Report Mode Field", "wlan_mgt.measure.rep.repmode.late",
-      FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_mode_incapable,
      {"Measurement Reports", "wlan_mgt.measure.rep.repmode.incapable",
-      FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x02, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_mode_refused,
      {"Autonomous Measurement Reports", "wlan_mgt.measure.rep.repmode.refused",
-      FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x04, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_mode_reserved,
      {"Reserved", "wlan_mgt.measure.rep.repmode.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0xf8, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xf8,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_type,
      {"Measurement Report Type", "wlan_mgt.measure.rep.reptype",
-      FT_UINT8, BASE_HEX, VALS (&ieee80211_tag_measure_report_type_flags), 0x00, NULL, HFILL }},
+      FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_report_type_flags_ext, 0x00,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_channel_number,
      {"Measurement Channel Number", "wlan_mgt.measure.rep.channelnumber",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_start_time,
      {"Measurement Start Time", "wlan_mgt.measure.rep.starttime",
-      FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT64, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_duration,
      {"Measurement Duration", "wlan_mgt.measure.rep.channelnumber",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_cca_busy_fraction,
      {"CCA Busy Fraction", "wlan_mgt.measure.rep.ccabusy",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_basic_map_field,
      {"Map Field", "wlan_mgt.measure.rep.mapfield",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_map_field_bss,
      {"BSS", "wlan_mgt.measure.rep.repmode.mapfield.bss",
-      FT_BOOLEAN, 8, TFS (&ieee80211_tag_measure_map_field_bss_flag), 0x01, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&ieee80211_tag_measure_map_field_bss_flag), 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_map_field_odfm,
      {"Orthogonal Frequency Division Multiplexing (ODFM) Preamble", "wlan_mgt.measure.rep.repmode.mapfield.bss",
-      FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x02, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_map_field_unident_signal,
      {"Unidentified Signal", "wlan_mgt.measure.rep.repmode.mapfield.unidentsig",
-      FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x04, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_map_field_radar,
      {"Radar", "wlan_mgt.measure.rep.repmode.mapfield.radar",
-      FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x08, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x08,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_map_field_unmeasured,
      {"Unmeasured", "wlan_mgt.measure.rep.repmode.mapfield.unmeasured",
-      FT_BOOLEAN, 8, TFS (&tfs_true_false), 0x10, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_true_false), 0x10,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_map_field_reserved,
      {"Reserved", "wlan_mgt.measure.rep.repmode.mapfield.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0xe0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xe0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_rpi_histogram_report,
      {"Receive Power Indicator (RPI) Histogram Report", "wlan_mgt.measure.rep.rpi.histogram_report",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_rpi_histogram_report_0,
      {"RPI 0 Density", "wlan_mgt.measure.rep.rpi.rpi0density",
-      FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 0 Density", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Receive Power Indicator (RPI) 0 Density", HFILL }},
 
     {&hf_ieee80211_tag_measure_rpi_histogram_report_1,
      {"RPI 1 Density", "wlan_mgt.measure.rep.rpi.rpi1density",
-      FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 1 Density", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Receive Power Indicator (RPI) 1 Density", HFILL }},
 
     {&hf_ieee80211_tag_measure_rpi_histogram_report_2,
      {"RPI 2 Density", "wlan_mgt.measure.rep.rpi.rpi2density",
-      FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 2 Density", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Receive Power Indicator (RPI) 2 Density", HFILL }},
 
     {&hf_ieee80211_tag_measure_rpi_histogram_report_3,
      {"RPI 3 Density", "wlan_mgt.measure.rep.rpi.rpi3density",
-      FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 3 Density", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Receive Power Indicator (RPI) 3 Density", HFILL }},
 
     {&hf_ieee80211_tag_measure_rpi_histogram_report_4,
      {"RPI 4 Density", "wlan_mgt.measure.rep.rpi.rpi4density",
-      FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 4 Density", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Receive Power Indicator (RPI) 4 Density", HFILL }},
 
     {&hf_ieee80211_tag_measure_rpi_histogram_report_5,
      {"RPI 5 Density", "wlan_mgt.measure.rep.rpi.rpi5density",
-      FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 5 Density", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Receive Power Indicator (RPI) 5 Density", HFILL }},
 
     {&hf_ieee80211_tag_measure_rpi_histogram_report_6,
      {"RPI 6 Density", "wlan_mgt.measure.rep.rpi.rpi6density",
-      FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 6 Density", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Receive Power Indicator (RPI) 6 Density", HFILL }},
 
     {&hf_ieee80211_tag_measure_rpi_histogram_report_7,
      {"RPI 7 Density", "wlan_mgt.measure.rep.rpi.rpi7density",
-      FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 7 Density", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "Receive Power Indicator (RPI) 7 Density", HFILL }},
 
     {&hf_ieee80211_tag_measure_report_regulatory_class,
      {"Regulatory Class", "wlan_mgt.measure.rep.regclass",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_channel_load,
      {"Channel Load", "wlan_mgt.measure.rep.chanload",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_frame_info,
      {"Reported Frame Information", "wlan_mgt.measure.rep.frameinfo",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_frame_info_phy_type,
      {"Condensed PHY", "wlan_mgt.measure.rep.frameinfo.phytype",
-      FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x7F,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_frame_info_frame_type,
      {"Reported Frame Type", "wlan_mgt.measure.rep.frameinfo.frametype",
-      FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_report_frame_info_frame_type_flag), 0x80, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_report_frame_info_frame_type_flag), 0x80,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_rcpi,
      {"Received Channel Power Indicator (RCPI)", "wlan_mgt.measure.rep.rcpi",
-      FT_UINT8, BASE_HEX, NULL, 0, "in dBm", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "in dBm", HFILL }},
 
     {&hf_ieee80211_tag_measure_report_rsni,
      {"Received Signal to Noise Indicator (RSNI)", "wlan_mgt.measure.rep.rsni",
-      FT_UINT8, BASE_HEX, NULL, 0, "in dB", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "in dB", HFILL }},
 
     {&hf_ieee80211_tag_measure_report_bssid,
      {"BSSID Being Reported", "wlan_mgt.measure.rep.bssid",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ant_id,
      {"Antenna ID", "wlan_mgt.measure.rep.antid",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_anpi,
      {"ANPI", "wlan_mgt.measure.rep.anpi",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ipi_density_0,
      {"IPI Density 0", "wlan_mgt.measure.rep.ipi_density0",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ipi_density_1,
      {"IPI Density 1", "wlan_mgt.measure.rep.ipi_density1",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ipi_density_2,
      {"IPI Density 2", "wlan_mgt.measure.rep.ipi_density2",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ipi_density_3,
      {"IPI Density 3", "wlan_mgt.measure.rep.ipi_density3",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ipi_density_4,
      {"IPI Density 4", "wlan_mgt.measure.rep.ipi_density4",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ipi_density_5,
      {"IPI Density 5", "wlan_mgt.measure.rep.ipi_density5",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ipi_density_6,
      {"IPI Density 6", "wlan_mgt.measure.rep.ipi_density6",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ipi_density_7,
      {"IPI Density 7", "wlan_mgt.measure.rep.ipi_density7",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
-     {&hf_ieee80211_tag_measure_report_ipi_density_8,
+    {&hf_ieee80211_tag_measure_report_ipi_density_8,
      {"IPI Density 8", "wlan_mgt.measure.rep.ipi_density8",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ipi_density_9,
      {"IPI Density 9", "wlan_mgt.measure.rep.ipi_density9",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_ipi_density_10,
      {"IPI Density 10", "wlan_mgt.measure.rep.ipi_density10",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_measure_report_parent_tsf,
      {"Parent Timing Synchronization Function (TSF)", "wlan_mgt.measure.rep.parenttsf",
-      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_quiet_count,
      {"Count", "wlan_mgt.quiet.count",
-      FT_UINT8, BASE_DEC, NULL, 0, "Set to the number of TBTTs until the beacon interval during which the next quiet interval shall start", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      "Set to the number of TBTTs until the beacon interval during which the next quiet interval shall start", HFILL }},
 
     {&hf_ieee80211_tag_quiet_period,
      {"Period", "wlan_mgt.quiet.period",
-      FT_UINT8, BASE_DEC, NULL, 0, "Set to the number of beacon intervals between the start of regularly scheduled quiet intervals", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      "Set to the number of beacon intervals between the start of regularly scheduled quiet intervals", HFILL }},
 
     {&hf_ieee80211_tag_quiet_duration,
      {"Duration", "wlan_mgt.quiet.duration",
-      FT_UINT16, BASE_DEC, NULL, 0, "Set to the duration of the quiet interval", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      "Set to the duration of the quiet interval", HFILL }},
 
     {&hf_ieee80211_tag_quiet_offset,
      {"Offset", "wlan_mgt.quiet.offset",
-      FT_UINT16, BASE_DEC, NULL, 0, "Set to the offset of the start of the quiet interval from the TBTT", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      "Set to the offset of the start of the quiet interval from the TBTT", HFILL }},
 
     {&hf_ieee80211_tag_dfs_owner,
      {"Owner", "wlan_mgt.dfs.owner",
-      FT_ETHER, BASE_NONE, NULL, 0, "Set to the individual IEEE MAC address of the STA that is the currently known DFS Owner in the IBSS", HFILL  }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      "Set to the individual IEEE MAC address of the STA that is the currently known DFS Owner in the IBSS", HFILL  }},
 
     {&hf_ieee80211_tag_dfs_recovery_interval,
      {"Recovery Interval", "wlan_mgt.dfs.recovery_interval",
-      FT_UINT8, BASE_DEC, NULL, 0, "Indicates the time interval that shall be used for DFS owner recovery", HFILL  }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      "Indicates the time interval that shall be used for DFS owner recovery", HFILL  }},
 
     {&hf_ieee80211_tag_dfs_channel_map,
      {"Channel Map", "wlan_mgt.dfs.channel_map",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL  }},
+      FT_NONE, BASE_NONE, NULL, 0,
+      NULL, HFILL  }},
 
     {&hf_ieee80211_tag_dfs_channel_number,
      {"Channel Number", "wlan_mgt.dfs.channel_number",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL  }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL  }},
 
     {&hf_ieee80211_tag_dfs_map,
      {"Map", "wlan_mgt.dfs.map",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL  }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL  }},
 
     {&hf_ieee80211_tag_erp_info,
      {"ERP Information", "wlan_mgt.erp_info",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL  }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL  }},
 
     {&hf_ieee80211_tag_erp_info_erp_present,
      {"Non ERP Present", "wlan_mgt.erp_info.erp_present",
-      FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x01, NULL, HFILL  }},
+      FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x01,
+      NULL, HFILL  }},
 
     {&hf_ieee80211_tag_erp_info_use_protection,
      {"Use Protection", "wlan_mgt.erp_info.use_protection",
-      FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x02, NULL, HFILL  }},
+      FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x02,
+      NULL, HFILL  }},
 
     {&hf_ieee80211_tag_erp_info_barker_preamble_mode,
      {"Barker Preamble Mode", "wlan_mgt.erp_info.barker_preamble_mode",
-      FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x04, NULL, HFILL  }},
+      FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x04,
+      NULL, HFILL  }},
 
     {&hf_ieee80211_tag_erp_info_reserved,
      {"Reserved", "wlan_mgt.erp_info.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0xF8, NULL, HFILL  }},
+      FT_UINT8, BASE_HEX, NULL, 0xF8,
+      NULL, HFILL  }},
 
-    /* Table 7-35a-Capabilities field */
+    /* Table 8-103-Capabilities field */
     {&hf_ieee80211_tag_extended_capabilities,
      {"Extended Capabilities", "wlan_mgt.extcap",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     /* P802.11n/D6.0 */
-    /* Extended Capability octet 0 */
+    /* Extended Capability octet 1 */
     {&hf_ieee80211_tag_extended_capabilities_b0,
-     {"20/40 BSS Coexistence Management Support", "wlan_mgt.extcap.infoexchange.b0",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0001, "HT Information Exchange Support", HFILL }},
+     {"20/40 BSS Coexistence Management Support", "wlan_mgt.extcap.b0",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
+      "HT Information Exchange Support", HFILL }},
 
     /* P802.11p/D4.0 */
     {&hf_ieee80211_tag_extended_capabilities_b1,
-     {"On-demand beacon", "wlan_mgt.extcap.infoexchange.b1",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0002, NULL, HFILL }},
+     {"On-demand beacon", "wlan_mgt.extcap.b1",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b2,
-     {"Extended Channel Switching", "wlan_mgt.extcap.infoexchange.b2",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0004, NULL, HFILL }},
+     {"Extended Channel Switching", "wlan_mgt.extcap.b2",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b3,
-     {"WAVE indication", "wlan_mgt.extcap.infoexchange.b3",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0008, NULL, HFILL }},
+     {"WAVE indication", "wlan_mgt.extcap.b3",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
+      NULL, HFILL }},
     /*End: P802.11p/D4.0 */
 
-    {&hf_ieee80211_tag_extended_capabilities_b4,
-     {"PSMP Capability", "wlan_mgt.extcap.infoexchange.b4",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0010, NULL, HFILL }},
+    {&hf_ieee80211_tag_extended_capabilities_b4,
+     {"PSMP Capability", "wlan_mgt.extcap.b4",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b5,
+     {"Reserved", "wlan_mgt.extcap.b5",
+      FT_UINT8, BASE_HEX, NULL, 0x20,
+      "Must be zero", HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b6,
+     {"S-PSMP Support", "wlan_mgt.extcap.b6",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b7,
+     {"Event", "wlan_mgt.extcap.b7",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
+      NULL, HFILL }},
+
+
+    /* Extended Capability octet 2 */
+    {&hf_ieee80211_tag_extended_capabilities_b8,
+     {"Diagnostics", "wlan_mgt.extcap.b8",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b9,
+     {"Multicast Diagnostics", "wlan_mgt.extcap.b9",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b10,
+     {"Location Tracking", "wlan_mgt.extcap.b10",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b11,
+     {"FMS", "wlan_mgt.extcap.b11",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b12,
+     {"Proxy ARP Service", "wlan_mgt.extcap.b12",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b13,
+     {"Collocated Interference Reporting", "wlan_mgt.extcap.b13",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b14,
+     {"Civic Location", "wlan_mgt.extcap.b14",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b15,
+     {"Geospatial Location", "wlan_mgt.extcap.b15",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
+      NULL, HFILL }},
+
+
+    /* Extended Capability octet 3 */
+    {&hf_ieee80211_tag_extended_capabilities_b16,
+     {"TFS", "wlan_mgt.extcap.b16",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b17,
+     {"WNM-Sleep Mode", "wlan_mgt.extcap.b17",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b18,
+     {"TIM Broadcast", "wlan_mgt.extcap.b18",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b19,
+     {"BSS Transition", "wlan_mgt.extcap.b19",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b20,
+     {"QoS Traffic Capability", "wlan_mgt.extcap.b20",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b21,
+     {"AC Station Count", "wlan_mgt.extcap.b21",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b22,
+     {"Multiple BSSID", "wlan_mgt.extcap.b22",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b23,
+     {"Timing Measurement", "wlan_mgt.extcap.b23",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
+      NULL, HFILL }},
+
+
+    /* Extended Capability octet 4 */
+    {&hf_ieee80211_tag_extended_capabilities_b24,
+     {"Channel Usage", "wlan_mgt.extcap.b24",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b25,
+     {"SSID List", "wlan_mgt.extcap.b25",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
+      NULL, HFILL }},
 
-    {&hf_ieee80211_tag_extended_capabilities_b6,
-     {"S-PSMP Support", "wlan_mgt.extcap.infoexchange.b6",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0040, NULL, HFILL }},
+    {&hf_ieee80211_tag_extended_capabilities_b26,
+     {"DMS", "wlan_mgt.extcap.b26",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
+      NULL, HFILL }},
 
-    /* Extended Capability octet 3 */
     {&hf_ieee80211_tag_extended_capabilities_b27,
-     {"UTC TSF Offset", "wlan_mgt.extcap.infoexchange.b27",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0008, NULL, HFILL }},
+     {"UTC TSF Offset", "wlan_mgt.extcap.b27",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b28,
-     {"Peer U-APSD Buffer STA Support", "wlan_mgt.extcap.infoexchange.b28",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0010, NULL, HFILL }},
+     {"Peer U-APSD Buffer STA Support", "wlan_mgt.extcap.b28",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b29,
-     {"TDLS Peer PSM Support", "wlan_mgt.extcap.infoexchange.b29",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0020, NULL, HFILL }},
+     {"TDLS Peer PSM Support", "wlan_mgt.extcap.b29",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b30,
-     {"TDLS channel switching", "wlan_mgt.extcap.infoexchange.b30",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0040, NULL, HFILL }},
+     {"TDLS channel switching", "wlan_mgt.extcap.b30",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b31,
-     {"Interworking", "wlan_mgt.extcap.infoexchange.b31",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0080, NULL, HFILL }},
+     {"Interworking", "wlan_mgt.extcap.b31",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
+      NULL, HFILL }},
 
-    /* Extended Capability octet 4 */
+
+    /* Extended Capability octet 5 */
     {&hf_ieee80211_tag_extended_capabilities_b32,
-     {"QoS Map", "wlan_mgt.extcap.infoexchange.b32",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0001, NULL, HFILL }},
+     {"QoS Map", "wlan_mgt.extcap.b32",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b33,
-     {"EBR", "wlan_mgt.extcap.infoexchange.b33",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0002, NULL, HFILL }},
+     {"EBR", "wlan_mgt.extcap.b33",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b34,
-     {"SSPN Interface", "wlan_mgt.extcap.infoexchange.b34",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0004, NULL, HFILL }},
+     {"SSPN Interface", "wlan_mgt.extcap.b34",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b35,
+     {"Reserved", "wlan_mgt.extcap.b35",
+      FT_UINT8, BASE_HEX, NULL, 0x08,
+      "Must be zero", HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b36,
-     {"MSGCF Capability", "wlan_mgt.extcap.infoexchange.b36",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0010, NULL, HFILL }},
+     {"MSGCF Capability", "wlan_mgt.extcap.b36",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b37,
-     {"TDLS support", "wlan_mgt.extcap.infoexchange.b37",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0020, NULL, HFILL }},
+     {"TDLS support", "wlan_mgt.extcap.b37",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b38,
-     {"TDLS Prohibited", "wlan_mgt.extcap.infoexchange.b38",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0040, NULL, HFILL }},
+     {"TDLS Prohibited", "wlan_mgt.extcap.b38",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_b39,
-     {"TDLS Channel Switching Prohibited", "wlan_mgt.extcap.infoexchange.b39",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0080, NULL, HFILL }},
+     {"TDLS Channel Switching Prohibited", "wlan_mgt.extcap.b39",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
+      NULL, HFILL }},
 
-    /* Extended Capability octet 5 */
+
+    /* Extended Capability octet 6 */
     {&hf_ieee80211_tag_extended_capabilities_b40,
-     {"Reject Unadmitted Frame", "wlan_mgt.extcap.infoexchange.b40",
-      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0001, NULL, HFILL }},
+     {"Reject Unadmitted Frame", "wlan_mgt.extcap.b40",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
      {"Service Interval Granularity",
-      "wlan_mgt.extcap.infoexchange.serv_int_granularity",
-      FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals), 0x000e,
+      "wlan_mgt.extcap.serv_int_granularity",
+      FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals), 0x0e,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b44,
+     {"Identifier Location", "wlan_mgt.extcap.b44",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b45,
+     {"U-APSD Coexistence", "wlan_mgt.extcap.b45",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_b46,
+     {"WNM-Notification", "wlan_mgt.extcap.b46",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
       NULL, HFILL }},
 
+    {&hf_ieee80211_tag_extended_capabilities_b47,
+     {"Reserved", "wlan_mgt.extcap.b47",
+      FT_UINT8, BASE_HEX, NULL, 0x80,
+      "Must be zero", HFILL }},
+
+    /* Extended Capability octet 7 */
+    {&hf_ieee80211_tag_extended_capabilities_b48,
+     {"UTF-8 SSID", "wlan_mgt.extcap.b48",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
+      "The SSID in this BSS is interpreted using UTF-8 encoding", HFILL }},
+
+    {&hf_ieee80211_tag_extended_capabilities_o7,
+     {"Reserved", "wlan_mgt.extcap.o7",
+      FT_UINT8, BASE_HEX, NULL, 0xfe,
+      "Must be zero", HFILL }},
+
+    /* Extended Capability octet 8 */
+
+    {&hf_ieee80211_tag_extended_capabilities_o8,
+     {"Reserved", "wlan_mgt.extcap.o8",
+      FT_UINT8, BASE_HEX, NULL, 0xff,
+      "Must be zero", HFILL }},
+
     {&hf_ieee80211_tag_cisco_ccx1_unknown,
      {"Unknown", "wlan_mgt.cisco.ccx1.unknown",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_cisco_ccx1_name,
      {"Name", "wlan_mgt.cisco.ccx1.name",
-      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_cisco_ccx1_clients,
      {"Clients", "wlan_mgt.cisco.ccx1.clients",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_cisco_ccx1_unknown2,
+     {"Unknown2", "wlan_mgt.cisco.ccx1.unknown2",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid,
      {"BSSID", "wlan_mgt.nreport.bssid",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info,
      {"BSSID Information", "wlan_mgt.nreport.bssid.info",
-      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_reachability,
      {"AP Reachability", "wlan_mgt.nreport.bssid.info.reachability",
-      FT_UINT16, BASE_HEX, NULL, 0x0003, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0003,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_security,
      {"Security", "wlan_mgt.nreport.bssid.info.security",
-      FT_UINT16, BASE_HEX, NULL, 0x0004, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0004,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_key_scope,
      {"Key Scope", "wlan_mgt.nreport.bssid.info.keyscope",
-      FT_UINT16, BASE_HEX, NULL, 0x0008, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0008,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng,
      {"Capability: Spectrum Management", "wlan_mgt.nreport.bssid.info.capability.specmngt",
-      FT_UINT16, BASE_HEX, NULL, 0x0010, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0010,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos,
      {"Capability: QoS", "wlan_mgt.nreport.bssid.info.capability.qos",
-      FT_UINT16, BASE_HEX, NULL, 0x0020, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0020,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd,
      {"Capability: APSD", "wlan_mgt.nreport.bssid.info.capability.apsd",
-      FT_UINT16, BASE_HEX, NULL, 0x0040, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0040,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt,
      {"Capability: Radio Measurement", "wlan_mgt.nreport.bssid.info.capability.radiomsnt",
-      FT_UINT16, BASE_HEX, NULL, 0x0080, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0080,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback,
      {"Capability: Delayed Block Ack", "wlan_mgt.nreport.bssid.info.capability.dback",
-      FT_UINT16, BASE_HEX, NULL, 0x0100, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0100,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback,
      {"Capability: Immediate Block Ack", "wlan_mgt.nreport.bssid.info.capability.iback",
-      FT_UINT16, BASE_HEX, NULL, 0x0200, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0200,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain,
      {"Mobility Domain", "wlan_mgt.nreport.bssid.info.mobilitydomain",
-      FT_UINT16, BASE_HEX, NULL, 0x0400, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0400,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput,
      {"High Throughput", "wlan_mgt.nreport.bssid.info.hthoughput",
-      FT_UINT16, BASE_HEX, NULL, 0x0800, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0800,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_bssid_info_reserved,
      {"Reserved", "wlan_mgt.nreport.bssid.info.reserved",
-      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_reg_class,
      {"Regulatory Class", "wlan_mgt.nreport.regclass",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_channel_number,
      {"Channel Number", "wlan_mgt.nreport.channumber",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_neighbor_report_phy_type,
      {"PHY Type", "wlan_mgt.nreport.phytype",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_supported_reg_classes_current,
      {"Current Regulatory Class", "wlan_mgt.supregclass.current",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tag_supported_reg_classes_alternate,
      {"Alternate Regulatory Classes", "wlan_mgt.supregclass.alt",
-      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_type,
      {"Type", "wlan_mgt.wfa.ie.type",
-      FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals), 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_version,
      {"WPA Version", "wlan_mgt.wfa.ie.wpa.version",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_mcs,
-     {"Multicast Cipher Suite", "wlan_mgt.wfa.ie.wpa.mcs", FT_UINT32, BASE_CUSTOM,
-      wpa_mcs_base_custom, 0, "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
+     {"Multicast Cipher Suite", "wlan_mgt.wfa.ie.wpa.mcs",
+      FT_UINT32, BASE_CUSTOM, wpa_mcs_base_custom, 0,
+      "Contains the cipher suite selector used by the BSS to protect broadcast/multicasttraffic", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_mcs_oui,
-     {"Multicast Cipher Suite OUI", "wlan_mgt.wfa.ie.wpa.mcs.oui", FT_UINT24, BASE_CUSTOM,
-      oui_base_custom, 0, NULL, HFILL }},
+     {"Multicast Cipher Suite OUI", "wlan_mgt.wfa.ie.wpa.mcs.oui",
+      FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_mcs_type,
-     {"Multicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.mcs.type", FT_UINT8, BASE_DEC,
-      NULL, 0, NULL, HFILL }},
+     {"Multicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.mcs.type",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_mcs_wfa_type,
-     {"Multicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.mcs.type", FT_UINT8, BASE_DEC,
-      VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0, NULL, HFILL }},
+     {"Multicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.mcs.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_ucs_count,
-     {"Unicast Cipher Suite Count", "wlan_mgt.wfa.ie.wpa.ucs.count", FT_UINT16, BASE_DEC,
-      NULL, 0, "Indicates the number of pairwise cipher suite selectors that are contained in the Unicast Cipher Suite List", HFILL }},
+     {"Unicast Cipher Suite Count", "wlan_mgt.wfa.ie.wpa.ucs.count",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      "Indicates the number of pairwise cipher suite selectors that are contained in the Unicast Cipher Suite List", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_ucs_list,
-     {"Unicast Cipher Suite List", "wlan_mgt.wfa.ie.wpa.ucs.list", FT_NONE, BASE_NONE,
-      NULL, 0, "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL }},
+     {"Unicast Cipher Suite List", "wlan_mgt.wfa.ie.wpa.ucs.list",
+      FT_NONE, BASE_NONE, NULL, 0,
+      "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_ucs,
-     {"Unicast Cipher Suite", "wlan_mgt.wfa.ie.wpa.ucs", FT_UINT32, BASE_CUSTOM,
-      wpa_ucs_base_custom, 0, NULL, HFILL }},
+     {"Unicast Cipher Suite", "wlan_mgt.wfa.ie.wpa.ucs",
+      FT_UINT32, BASE_CUSTOM, wpa_ucs_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_ucs_oui,
-     {"Unicast Cipher Suite OUI", "wlan_mgt.wfa.ie.wpau.cs.oui", FT_UINT24, BASE_CUSTOM,
-      oui_base_custom, 0, NULL, HFILL }},
+     {"Unicast Cipher Suite OUI", "wlan_mgt.wfa.ie.wpau.cs.oui",
+      FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_ucs_type,
-     {"Unicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.ucs.type", FT_UINT8, BASE_DEC,
-      NULL, 0, NULL, HFILL }},
+     {"Unicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.ucs.type",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_ucs_wfa_type,
-     {"Unicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.ucs.type", FT_UINT8, BASE_DEC,
-      VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0, NULL, HFILL }},
+     {"Unicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.ucs.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_akms_count,
-     {"Auth Key Management (AKM) Suite Count", "wlan_mgt.wfa.ie.wpa.akms.count", FT_UINT16, BASE_DEC,
-      NULL, 0, "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
+     {"Auth Key Management (AKM) Suite Count", "wlan_mgt.wfa.ie.wpa.akms.count",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_akms_list,
-     {"Auth Key Management (AKM) List", "wlan_mgt.wfa.ie.wpa.akms.list", FT_NONE, BASE_NONE,
-      NULL, 0, "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
+     {"Auth Key Management (AKM) List", "wlan_mgt.wfa.ie.wpa.akms.list",
+      FT_NONE, BASE_NONE, NULL, 0,
+      "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_akms,
-     {"Auth Key Management (AKM) Suite", "wlan_mgt.wfa.ie.wpa.akms", FT_UINT32, BASE_CUSTOM,
-      wpa_akms_base_custom, 0, NULL, HFILL }},
+     {"Auth Key Management (AKM) Suite", "wlan_mgt.wfa.ie.wpa.akms",
+      FT_UINT32, BASE_CUSTOM, wpa_akms_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_akms_oui,
-     {"Auth Key Management (AKM) OUI", "wlan_mgt.wfa.ie.wpa.akms.oui", FT_UINT24, BASE_CUSTOM,
-      oui_base_custom, 0, NULL, HFILL }},
+     {"Auth Key Management (AKM) OUI", "wlan_mgt.wfa.ie.wpa.akms.oui",
+      FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_akms_type,
-     {"Auth Key Management (AKM) type", "wlan_mgt.wfa.ie.wpa.akms.type", FT_UINT8, BASE_DEC,
-      NULL, 0, NULL, HFILL }},
+     {"Auth Key Management (AKM) type", "wlan_mgt.wfa.ie.wpa.akms.type",
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wpa_akms_wfa_type,
-     {"Auth Key Management (AKM) type", "wlan_mgt.wfa.ie.wpa.type", FT_UINT8, BASE_DEC,
-      VALS(ieee80211_wfa_ie_wpa_keymgmt_vals), 0, NULL, HFILL }},
+     {"Auth Key Management (AKM) type", "wlan_mgt.wfa.ie.wpa.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_keymgmt_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_subtype,
      {"WME Subtype", "wlan_mgt.wfa.ie.wme.subtype",
-      FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type), 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_version,
      {"WME Version", "wlan_mgt.wfa.ie.wme.version",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_qos_info,
      {"WME QoS Info", "wlan_mgt.wfa.ie.wme.qos_info",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
      {"Max SP Length", "wlan_mgt.wfa.ie.wme.qos_info.sta.max_sp_length",
-      FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals), 0x60, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals), 0x60,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
      {"AC_BE", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_be",
-      FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x08, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x08,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
      {"AC_BK", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_bk",
-      FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x04, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
      {"AC_VI", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_vi",
-      FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x02, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
      {"AC_VO", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_vo",
-      FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x01, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
      {"Reserved", "wlan_mgt.wfa.ie.wme.qos_info.sta.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0x90, "Must Be Zero", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x90,
+      "Must Be Zero", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
      {"U-APSD", "wlan_mgt.wfa.ie.wme.qos_info.ap.u_apsd",
-      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80, "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL }},
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
+      "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
      {"Parameter Set Count", "wlan_mgt.wfa.ie.wme.qos_info.ap.parameter_set_count",
-      FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x0F,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
      {"Reserved", "wlan_mgt.wfa.ie.wme.qos_info.ap.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0x70, "Must Be Zero", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x70,
+      "Must Be Zero", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_reserved,
      {"Reserved", "wlan_mgt.wfa.ie.wme.reserved",
-      FT_BYTES, BASE_NONE, NULL, 0, "Must Be Zero", HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      "Must Be Zero", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_ac_parameters,
      {"Ac Parameters", "wlan_mgt.wfa.ie.wme.acp",
-      FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_NONE, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
      {"ACI / AIFSN Field", "wlan_mgt.wfa.ie.wme.acp.aci_aifsn",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_acp_aci,
      {"ACI", "wlan_mgt.wfa.ie.wme.acp.aci",
-      FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals), 0x60, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals), 0x60,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_acp_acm,
      {"Admission Control Mandatory", "wlan_mgt.wfa.ie.wme.acp.aci",
-      FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_acp_aifsn,
      {"AIFSN", "wlan_mgt.wfa.ie.wme.acp.aifsn",
-      FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x0F,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_acp_reserved,
      {"Reserved", "wlan_mgt.wfa.ie.wme.acp.reserved",
-      FT_UINT8, BASE_DEC, NULL, 0x80, "Must be Zero", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x80,
+      "Must be Zero", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_acp_ecw,
      {"ECW", "wlan_mgt.wfa.ie.wme.acp.ecw",
-      FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x00,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_acp_ecw_max,
      {"ECW Max", "wlan_mgt.wfa.ie.wme.acp.ecw.max",
-      FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0xF0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_acp_ecw_min,
      {"ECW Min", "wlan_mgt.wfa.ie.wme.acp.ecw.min",
-      FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x0F,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_acp_txop_limit,
      {"TXOP Limit", "wlan_mgt.wfa.ie.wme.acp.txop_limit",
-      FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0x00,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
      {"TS Info", "wlan_mgt.wfa.ie.wme.tspec.ts_info",
-      FT_UINT24, BASE_HEX, NULL, 0, "Traffic Stream (TS) Info", HFILL }},
+      FT_UINT24, BASE_HEX, NULL, 0,
+      "Traffic Stream (TS) Info", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
      {"TID", "wlan_mgt.wfa.ie.wme.tspec.ts_info.tid",
-      FT_UINT24, BASE_DEC, NULL, 0x00001E, "Traffic Stream Info ID (TID)", HFILL }},
+      FT_UINT24, BASE_DEC, NULL, 0x00001E,
+      "Traffic Stream Info ID (TID)", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
-     {"Direction", "wlan_mgt.wfa.ie.wme.tspec.ts_info.dir", FT_UINT24, BASE_DEC,
-      VALS (&ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals), 0x000060, "Traffic Stream (TS) Info Direction", HFILL }},
+     {"Direction", "wlan_mgt.wfa.ie.wme.tspec.ts_info.dir",
+      FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals), 0x000060,
+      "Traffic Stream (TS) Info Direction", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
-     {"PSB", "wlan_mgt.wfa.ie.wme.tspec.ts_info.psb", FT_UINT24, BASE_DEC,
-      VALS (&ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals), 0x000400, "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL }},
+     {"PSB", "wlan_mgt.wfa.ie.wme.tspec.ts_info.psb",
+      FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals), 0x000400,
+      "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
-     {"UP", "wlan_mgt.wfa.ie.wme.tspec.ts_info.up", FT_UINT24, BASE_DEC,
-      VALS (&ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals), 0x003800, "Traffic Stream (TS) Info User Priority (UP)", HFILL }},
+     {"UP", "wlan_mgt.wfa.ie.wme.tspec.ts_info.up",
+      FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals), 0x003800,
+      "Traffic Stream (TS) Info User Priority (UP)", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
-     {"Reserved", "wlan_mgt.wfa.ie.wme.tspec.ts_info.reserved", FT_UINT24, BASE_HEX,
-      NULL, 0xFFC381, "Must be Zero", HFILL }},
+     {"Reserved", "wlan_mgt.wfa.ie.wme.tspec.ts_info.reserved",
+      FT_UINT24, BASE_HEX, NULL, 0xFFC381,
+      "Must be Zero", HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_nor_msdu,
      {"Normal MSDU Size", "wlan_mgt.wfa.ie.wme.tspec.nor_msdu",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_max_msdu,
      {"Maximum MSDU Size", "wlan_mgt.wfa.ie.wme.tspec.max_msdu",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_min_srv,
      {"Minimum Service Interval", "wlan_mgt.wfa.ie.wme.tspec.min_srv",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_max_srv,
      {"Maximum Service Interval", "wlan_mgt.wfa.ie.wme.tspec.max_srv",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_inact_int,
      {"Inactivity Interval", "wlan_mgt.wfa.ie.wme.tspec.inact_int",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_susp_int,
      {"Suspension Interval", "wlan_mgt.wfa.ie.wme.tspec.susp_int",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_srv_start,
      {"Service Start Time", "wlan_mgt.wfa.ie.wme.tspec.srv_start",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_min_data,
      {"Minimum Data Rate", "wlan_mgt.wfa.ie.wme.tspec.min_data",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_mean_data,
      {"Mean Data Rate", "wlan_mgt.wfa.ie.wme.tspec.mean_data",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_peak_data,
      {"Peak Data Rate", "wlan_mgt.wfa.ie.wme.tspec.peak_data",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_burst_size,
      {"Burst Size", "wlan_mgt.wfa.ie.wme.tspec.burst_size",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_delay_bound,
      {"Delay Bound", "wlan_mgt.wfa.ie.wme.tspec.delay_bound",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_min_phy,
      {"Minimum PHY Rate", "wlan_mgt.wfa.ie.wme.tspec.min_phy",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_surplus,
      {"Surplus Bandwidth Allowance", "wlan_mgt.wfa.ie.wme.tspec.surplus",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_wfa_ie_wme_tspec_medium,
      {"Medium Time", "wlan_mgt.wfa.ie.wme.tspec.medium",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_rsn_ie_pmkid,
+     {"RSN PMKID", "wlan_mgt.rsn.ie.pmkid",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_rsn_ie_unknown,
+     {"RSN Unknown", "wlan_mgt.rsn.ie.unknown",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_marvell_ie_type,
      {"Type", "wlan_mgt.marvell.ie.type",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_marvell_ie_mesh_subtype,
      {"Subtype", "wlan_mgt.marvell.ie.subtype",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_marvell_ie_mesh_version,
      {"Version", "wlan_mgt.marvell.ie.version",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_marvell_ie_mesh_active_proto_id,
      {"Path Selection Protocol", "wlan_mgt.marvell.ie.proto_id",
-      FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes), 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_marvell_ie_mesh_active_metric_id,
      {"Path Selection Metric", "wlan_mgt.marvell.ie.metric_id",
-      FT_UINT8, BASE_HEX, VALS(mesh_metric_codes), 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(mesh_metric_codes), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_marvell_ie_mesh_cap,
      {"Mesh Capabilities", "wlan_mgt.marvell.ie.cap",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_marvell_ie_data,
-      { "Marvell IE data", "wlan_mgt.marvell.data",
-        FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+     { "Marvell IE data", "wlan_mgt.marvell.data",
+       FT_BYTES, BASE_NONE, NULL, 0x0,
+       NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_type,
      {"Type", "wlan_mgt.atheros.ie.type",
-      FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals), 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_subtype,
      {"Subtype", "wlan_mgt.atheros.ie.subtype",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_version,
      {"Version", "wlan_mgt.atheros.ie.version",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_cap_f_turbop,
      {"Turbo Prime", "wlan_mgt.ie.atheros.capabilities.turbop",
-      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_TURBOP, NULL, HFILL }},
+      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_TURBOP,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_cap_f_comp,
      {"Compression", "wlan_mgt.ie.atheros.capabilities.comp",
-      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_COMP, NULL, HFILL }},
+      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_COMP,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_cap_f_ff,
      {"Fast Frames", "wlan_mgt.ie.atheros.capabilities.ff",
-      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_FF, NULL, HFILL }},
+      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_FF,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_cap_f_xr,
      {"eXtended Range", "wlan_mgt.ie.atheros.capabilities.xr",
-      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_XR, NULL, HFILL }},
+      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_XR,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_cap_f_ar,
      {"Advanced Radar", "wlan_mgt.ie.atheros.capabilities.ar",
-      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_AR, NULL, HFILL }},
+      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_AR,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_cap_f_burst,
      {"Burst", "wlan_mgt.ie.atheros.capabilities.burst",
-      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BURST, NULL, HFILL }},
+      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BURST,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_cap_f_wme,
      {"CWMin tuning", "wlan_mgt.ie.atheros.capabilities.wme",
-      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_WME, NULL, HFILL }},
+      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_WME,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_cap_f_boost,
      {"Boost", "wlan_mgt.ie.atheros.capabilities.boost",
-      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BOOST, NULL, HFILL }},
+      FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BOOST,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_advcap_cap,
      {"Capabilities", "wlan_mgt.atheros.ie.advcap.cap",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_advcap_defkey,
      {"Default key index", "wlan_mgt.atheros.ie.advcap.defkey",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_xr_info,
      {"Info", "wlan_mgt.atheros.ie.xr.info",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_xr_base_bssid,
      {"Base BSS Id", "wlan_mgt.atheros.ie.xr.base_bssid",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_xr_xr_bssid,
      {"XR BSS Id", "wlan_mgt.atheros.ie.xr.xr_bssid",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_xr_xr_beacon,
      {"XR Beacon Interval", "wlan_mgt.atheros.ie.xr.xr_beacon",
-      FT_UINT32, BASE_CUSTOM, beacon_interval_base_custom, 0, NULL, HFILL }},
+      FT_UINT32, BASE_CUSTOM, beacon_interval_base_custom, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_xr_base_cap,
      {"Base capabilities", "wlan_mgt.atheros.ie.xr.base_cap",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_xr_xr_cap,
      {"XR capabilities", "wlan_mgt.atheros.ie.xr.xr_cap",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_atheros_ie_data,
      {"Atheros IE data", "wlan_mgt.atheros.data",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_aironet_ie_type,
      {"Aironet IE type", "wlan_mgt.aironet.type",
-      FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals), 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals), 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_aironet_ie_version,
      {"Aironet IE CCX version?", "wlan_mgt.aironet.version",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_aironet_ie_data,
-      { "Aironet IE data", "wlan_mgt.aironet.data",
-        FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+     { "Aironet IE data", "wlan_mgt.aironet.data",
+       FT_BYTES, BASE_NONE, NULL, 0x0,
+       NULL, HFILL }},
 
     {&hf_ieee80211_qbss_version,
      {"QBSS Version", "wlan_mgt.qbss.version",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qbss_scount,
      {"Station Count", "wlan_mgt.qbss.scount",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qbss_cu,
      {"Channel Utilization", "wlan_mgt.qbss.cu",
-       FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qbss_adc,
      {"Available Admission Capabilities", "wlan_mgt.qbss.adc",
-     FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qbss2_cu,
      {"Channel Utilization", "wlan_mgt.qbss2.cu",
-       FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qbss2_gl,
      {"G.711 CU Quantum", "wlan_mgt.qbss2.glimit",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qbss2_cal,
      {"Call Admission Limit", "wlan_mgt.qbss2.cal",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qbss2_scount,
      {"Station Count", "wlan_mgt.qbss2.scount",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
-    {&hf_ieee80211_aironet_ie_qos_unk1,
-     {"Aironet IE QoS unknown 1", "wlan_mgt.aironet.qos.unk1",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+    {&hf_ieee80211_aironet_ie_qos_reserved,
+     {"Aironet IE QoS reserved", "wlan_mgt.aironet.qos.reserved",
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_aironet_ie_qos_paramset,
      {"Aironet IE QoS paramset", "wlan_mgt.aironet.qos.paramset",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_aironet_ie_qos_val,
      {"Aironet IE QoS valueset", "wlan_mgt.aironet.qos.val",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
+    /* Vendor Specific : Aruba Networks */
+    {&hf_ieee80211_vs_aruba_subtype,
+     {"Subtype", "wlan_mgt.vs.aruba.subtype",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_vs_aruba_subtype_vals), 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vs_aruba_apname,
+     {"AP Name", "wlan_mgt.vs.aruba.ap_name",
+      FT_STRINGZ, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_vs_aruba_data,
+     {"Data", "wlan_mgt.vs.aruba.data",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tsinfo,
      {"Traffic Stream (TS) Info", "wlan_mgt.ts_info",
-      FT_UINT24, BASE_HEX, NULL, 0, "Traffic Stream (TS) Info field", HFILL }},
+      FT_UINT24, BASE_HEX, NULL, 0,
+      "Traffic Stream (TS) Info field", HFILL }},
 
     {&hf_ieee80211_tsinfo_type,
-     {"Traffic Type", "wlan_mgt.ts_info.type", FT_UINT24, BASE_DEC,
-      VALS (&tsinfo_type), 0x000001, "Traffic Stream (TS) Info Traffic Type", HFILL }},
+     {"Traffic Type", "wlan_mgt.ts_info.type",
+      FT_UINT24, BASE_DEC, VALS(tsinfo_type), 0x000001,
+      "Traffic Stream (TS) Info Traffic Type", HFILL }},
 
     {&hf_ieee80211_tsinfo_tsid,
      {"Traffic Stream ID (TSID)", "wlan_mgt.ts_info.tsid",
-      FT_UINT24, BASE_DEC, NULL, 0x00001E, "Traffic Stream ID (TSID) Info TSID", HFILL }},
+      FT_UINT24, BASE_DEC, NULL, 0x00001E,
+      "Traffic Stream ID (TSID) Info TSID", HFILL }},
 
     {&hf_ieee80211_tsinfo_dir,
-     {"Direction", "wlan_mgt.ts_info.dir", FT_UINT24, BASE_DEC,
-      VALS (&tsinfo_direction), 0x000060, "Traffic Stream (TS) Info Direction", HFILL }},
+     {"Direction", "wlan_mgt.ts_info.dir",
+      FT_UINT24, BASE_DEC, VALS(tsinfo_direction), 0x000060,
+      "Traffic Stream (TS) Info Direction", HFILL }},
 
     {&hf_ieee80211_tsinfo_access,
-     {"Access Policy", "wlan_mgt.ts_info.dir", FT_UINT24, BASE_DEC,
-      VALS (&tsinfo_access), 0x000180, "Traffic Stream (TS) Info Access Policy", HFILL }},
+     {"Access Policy", "wlan_mgt.ts_info.dir",
+      FT_UINT24, BASE_DEC, VALS(tsinfo_access), 0x000180,
+      "Traffic Stream (TS) Info Access Policy", HFILL }},
 
     {&hf_ieee80211_tsinfo_agg,
-     {"Aggregation", "wlan_mgt.ts_info.agg", FT_UINT24, BASE_DEC,
-      NULL, 0x000200, "Traffic Stream (TS) Info Access Policy", HFILL }},
+     {"Aggregation", "wlan_mgt.ts_info.agg",
+      FT_UINT24, BASE_DEC, NULL, 0x000200,
+      "Traffic Stream (TS) Info Access Policy", HFILL }},
 
     {&hf_ieee80211_tsinfo_apsd,
-     {"Automatic Power-Save Delivery (APSD)", "wlan_mgt.ts_info.apsd", FT_UINT24, BASE_DEC,
-      NULL, 0x000400, "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL }},
+     {"Automatic Power-Save Delivery (APSD)", "wlan_mgt.ts_info.apsd",
+      FT_UINT24, BASE_DEC, NULL, 0x000400,
+      "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL }},
 
     {&hf_ieee80211_tsinfo_up,
-     {"User Priority", "wlan_mgt.ts_info.up", FT_UINT24, BASE_DEC,
-      VALS (&qos_up), 0x003800, "Traffic Stream (TS) Info User Priority", HFILL }},
+     {"User Priority", "wlan_mgt.ts_info.up",
+      FT_UINT24, BASE_DEC, VALS(qos_up), 0x003800,
+      "Traffic Stream (TS) Info User Priority", HFILL }},
 
     {&hf_ieee80211_tsinfo_ack,
-     {"Ack Policy", "wlan_mgt.ts_info.ack", FT_UINT24, BASE_DEC,
-      VALS (&ack_policy), 0x00C000, "Traffic Stream (TS) Info Ack Policy", HFILL }},
+     {"Ack Policy", "wlan_mgt.ts_info.ack",
+      FT_UINT24, BASE_DEC, VALS(ack_policy), 0x00C000,
+      "Traffic Stream (TS) Info Ack Policy", HFILL }},
 
     {&hf_ieee80211_tsinfo_sched,
-     {"Schedule", "wlan_mgt.ts_info.sched", FT_UINT24, BASE_DEC,
-      NULL, 0x010000, "Traffic Stream (TS) Info Schedule", HFILL }},
+     {"Schedule", "wlan_mgt.ts_info.sched",
+      FT_UINT24, BASE_DEC, NULL, 0x010000,
+      "Traffic Stream (TS) Info Schedule", HFILL }},
 
     {&hf_ieee80211_tsinfo_rsv,
-     {"Reserved", "wlan_mgt.ts_info.rsv", FT_UINT24, BASE_HEX,
-      NULL, 0xFE0000, "Must be Zero", HFILL }},
+     {"Reserved", "wlan_mgt.ts_info.rsv",
+      FT_UINT24, BASE_HEX, NULL, 0xFE0000,
+      "Must be Zero", HFILL }},
 
     {&hf_ieee80211_tspec_nor_msdu,
      {"Normal MSDU Size", "wlan_mgt.tspec.nor_msdu",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_max_msdu,
      {"Maximum MSDU Size", "wlan_mgt.tspec.max_msdu",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_min_srv,
      {"Minimum Service Interval", "wlan_mgt.tspec.min_srv",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_max_srv,
      {"Maximum Service Interval", "wlan_mgt.tspec.max_srv",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_inact_int,
      {"Inactivity Interval", "wlan_mgt.tspec.inact_int",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_susp_int,
      {"Suspension Interval", "wlan_mgt.tspec.susp_int",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_srv_start,
      {"Service Start Time", "wlan_mgt.tspec.srv_start",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_min_data,
      {"Minimum Data Rate", "wlan_mgt.tspec.min_data",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_mean_data,
      {"Mean Data Rate", "wlan_mgt.tspec.mean_data",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_peak_data,
      {"Peak Data Rate", "wlan_mgt.tspec.peak_data",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_burst_size,
      {"Burst Size", "wlan_mgt.tspec.burst_size",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_delay_bound,
      {"Delay Bound", "wlan_mgt.tspec.delay_bound",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_min_phy,
      {"Minimum PHY Rate", "wlan_mgt.tspec.min_phy",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_surplus,
      {"Surplus Bandwidth Allowance", "wlan_mgt.tspec.surplus",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tspec_medium,
      {"Medium Time", "wlan_mgt.tspec.medium",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      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, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_tclas_process,
-     {"Processing", "wlan_mgt.tclas_proc.processing", FT_UINT8, BASE_DEC,
-      VALS(ieee80211_tclas_process_flag), 0, "TCLAS Processing", HFILL }},
+     {"Processing", "wlan_mgt.tclas_proc.processing",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_tclas_process_flag), 0,
+      "TCLAS Processing", HFILL }},
 
     {&hf_ieee80211_tag_qos_cap_qos_info,
-     {"QoS Info", "wlan_mgt.tag.qos_cap.qos_info", FT_UINT8, BASE_HEX,
-      NULL, 0, "TCLAS Processing", HFILL }},
+     {"QoS Info", "wlan_mgt.tag.qos_cap.qos_info",
+      FT_UINT8, BASE_HEX, NULL, 0,
+      "TCLAS Processing", HFILL }},
 
     {&hf_ieee80211_qos_info_field_vo_uapsd,
      {"AC_VO U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.vo_uapsd",
-       FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qos_info_field_vi_uapsd,
      {"AC_VI U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.vi_uapsd",
-       FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qos_info_field_bk_uapsd,
      {"AC_BK U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.bk_uapsd",
-       FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qos_info_field_be_uapsd,
      {"AC_BE U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.be_uapsd",
-       FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qos_info_field_qack,
      {"Q-ACK", "wlan_mgt.tag.qos_cap.qos_info.qack",
-       FT_BOOLEAN, 8, TFS(&qos_info_field_qack_flags), 0x10, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&qos_info_field_qack_flags), 0x10,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qos_info_field_max_sp_length,
      {"Max SP-Length", "wlan_mgt.tag.qos_cap.qos_info.max_sp_length",
-       FT_UINT8, BASE_HEX, VALS(qos_info_field_max_sp_length_flags),
-       0x60, NULL , HFILL }},
+      FT_UINT8, BASE_HEX, VALS(qos_info_field_max_sp_length_flags), 0x60,
+      NULL , HFILL }},
 
     {&hf_ieee80211_qos_info_field_more_data_ack,
      {"More Data Ack", "wlan_mgt.tag.qos_cap.qos_info.more_data_ack",
-       FT_BOOLEAN, 8, TFS(&qos_info_field_more_data_ack_flags) , 0x80, NULL, HFILL }},
+      FT_BOOLEAN, 8, TFS(&qos_info_field_more_data_ack_flags) , 0x80,
+      NULL, HFILL }},
 
     {&hf_ieee80211_qos_info_field_edca_upd_cnt,
-      {"EDCA Parameter Set Update Count", "wlan_mgt.tag.qos_cap.qos_info.edca_upd_cnt",
-        FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL}},
+     {"EDCA Parameter Set Update Count", "wlan_mgt.tag.qos_cap.qos_info.edca_upd_cnt",
+      FT_UINT8, BASE_DEC, NULL, 0x07,
+      NULL, HFILL}},
 
     {&hf_ieee80211_qos_info_field_queue_req,
-      {"Queue Request", "wlan_mgt.tag.qos_cap.qos_info.queue_req",
-        FT_BOOLEAN, 8, TFS(&qos_info_field_queue_req_flags), 0x07, NULL, HFILL}},
+     {"Queue Request", "wlan_mgt.tag.qos_cap.qos_info.queue_req",
+      FT_BOOLEAN, 8, TFS(&qos_info_field_queue_req_flags), 0x07,
+      NULL, HFILL}},
 
     {&hf_ieee80211_qos_info_field_txop_req,
-      {"TXOP Request", "wlan_mgt.tag.qos_cap.qos_info.txop_req",
-        FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x40, NULL, HFILL}},
+     {"TXOP Request", "wlan_mgt.tag.qos_cap.qos_info.txop_req",
+      FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x40,
+      NULL, HFILL}},
 
     {&hf_ieee80211_qos_info_field_reserved,
-      {"Reserved", "wlan_mgt.tag.qos_cap.qos_info.reserved",
-        FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}},
+     {"Reserved", "wlan_mgt.tag.qos_cap.qos_info.reserved",
+      FT_BOOLEAN, 8, NULL, 0x80,
+      NULL, HFILL}},
 
     {&hf_ieee80211_tag_ext_supp_rates,
      {"Extended Supported Rates", "wlan_mgt.extended_supported_rates",
-      FT_UINT8, BASE_HEX, VALS(ieee80211_supported_rates_vals), 0x0,
+      FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_supported_rates_vals_ext, 0x0,
       "In Mbit/sec, (B) for Basic Rates", HFILL }},
 
     {&hf_ieee80211_sched_info,
      {"Schedule Info", "wlan_mgt.sched.sched_info",
-      FT_UINT16, BASE_HEX, NULL, 0, "Schedule Info field", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "Schedule Info field", HFILL }},
 
     {&hf_ieee80211_sched_info_agg,
-     {"Schedule Aggregation", "wlan_mgt.sched_info.agg", FT_UINT16, BASE_DEC,
-      NULL, 0x0001, "Traffic Stream (TS) Info Access Policy", HFILL }},
+     {"Schedule Aggregation", "wlan_mgt.sched_info.agg",
+      FT_UINT16, BASE_DEC, NULL, 0x0001,
+      "Traffic Stream (TS) Info Access Policy", HFILL }},
 
     {&hf_ieee80211_sched_info_tsid,
      {"Schedule Traffic Stream ID (TSID)", "wlan_mgt.sched_info.tsid",
-      FT_UINT16, BASE_DEC, NULL, 0x001E, "Traffic Stream ID (TSID) Info TSID", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0x001E,
+      "Traffic Stream ID (TSID) Info TSID", HFILL }},
 
     {&hf_ieee80211_sched_info_dir,
-     {"Schedule Direction", "wlan_mgt.sched_info.dir", FT_UINT16, BASE_DEC,
-      VALS (&tsinfo_direction), 0x0060, "Traffic Stream (TS) Info Direction", HFILL }},
+     {"Schedule Direction", "wlan_mgt.sched_info.dir",
+      FT_UINT16, BASE_DEC, VALS(tsinfo_direction), 0x0060,
+      "Traffic Stream (TS) Info Direction", HFILL }},
 
     {&hf_ieee80211_sched_srv_start,
      {"Service Start Time", "wlan_mgt.sched.srv_start",
-      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_sched_srv_int,
      {"Service Interval", "wlan_mgt.sched.srv_int",
-      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_sched_spec_int,
      {"Specification Interval", "wlan_mgt.sched.spec_int",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_aruba,
      {"Aruba Type", "wlan_mgt.aruba.type",
-      FT_UINT16, BASE_DEC, VALS(aruba_mgt_typevals), 0, "Aruba Management", HFILL }},
+      FT_UINT16, BASE_DEC|BASE_EXT_STRING, &aruba_mgt_typevals_ext, 0,
+      "Aruba Management", HFILL }},
 
     {&hf_ieee80211_aruba_hb_seq,
      {"Aruba Heartbeat Sequence", "wlan_mgt.aruba.heartbeat_sequence",
-      FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT64, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_ieee80211_aruba_mtu,
      {"Aruba MTU Size", "wlan_mgt.aruba.mtu_size",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     /* Start: HT Control (+HTC) */
     {&hf_ieee80211_htc,
      {"HT Control (+HTC)", "wlan_mgt.htc",
-      FT_UINT32, BASE_HEX, NULL, 0, "High Throughput Control (+HTC)", HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0,
+      "High Throughput Control (+HTC)", HFILL }},
+
     {&hf_ieee80211_htc_lac,
      {"Link Adaptation Control (LAC)", "wlan_mgt.htc.lac",
-      FT_UINT16, BASE_HEX, NULL, 0, "High Throughput Control Link Adaptation Control (LAC)", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      "High Throughput Control Link Adaptation Control (LAC)", HFILL }},
+
     {&hf_ieee80211_htc_lac_reserved,
      {"Reserved", "wlan_mgt.htc.lac.reserved",
-      FT_BOOLEAN, 16, NULL, 0x0001, "High Throughput Control Link Adaptation Control Reserved", HFILL }},
+      FT_BOOLEAN, 16, NULL, 0x0001,
+      "High Throughput Control Link Adaptation Control Reserved", HFILL }},
+
     {&hf_ieee80211_htc_lac_trq,
      {"Training Request (TRQ)", "wlan_mgt.htc.lac.trq",
-      FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag), 0x0002, "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL }},
+      FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag), 0x0002,
+      "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL }},
+
     {&hf_ieee80211_htc_lac_mai_aseli,
      {"Antenna Selection Indication (ASELI)", "wlan_mgt.htc.lac.mai.aseli",
-      FT_UINT16, BASE_HEX, NULL, 0x003C, "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x003C,
+      "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL }},
+
     {&hf_ieee80211_htc_lac_mai_mrq,
      {"MCS Request (MRQ)", "wlan_mgt.htc.lac.mai.mrq",
-      FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag), 0x0004, "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL }},
+      FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag), 0x0004,
+      "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL }},
+
     {&hf_ieee80211_htc_lac_mai_msi,
      {"MCS Request Sequence Identifier (MSI)", "wlan_mgt.htc.lac.mai.msi",
-      FT_UINT16, BASE_HEX, NULL, 0x0038, "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0038,
+      "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL }},
+
     {&hf_ieee80211_htc_lac_mai_reserved,
      {"Reserved", "wlan_mgt.htc.lac.mai.reserved",
-      FT_UINT16, BASE_HEX, NULL, 0x0038, "High Throughput Control Link Adaptation Control MAI Reserved", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0038,
+      "High Throughput Control Link Adaptation Control MAI Reserved", HFILL }},
+
     {&hf_ieee80211_htc_lac_mfsi,
      {"MCS Feedback Sequence Identifier (MFSI)", "wlan_mgt.htc.lac.mfsi",
-      FT_UINT16, BASE_DEC, NULL, 0x01C0, "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0x01C0,
+      "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL }},
+
     {&hf_ieee80211_htc_lac_asel_command,
      {"Antenna Selection (ASEL) Command", "wlan_mgt.htc.lac.asel.command",
-      FT_UINT16, BASE_HEX, VALS (&ieee80211_htc_lac_asel_command_flags), 0x0E00, "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL }},
+      FT_UINT16, BASE_HEX, VALS(ieee80211_htc_lac_asel_command_flags), 0x0E00,
+      "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL }},
+
     {&hf_ieee80211_htc_lac_asel_data,
      {"Antenna Selection (ASEL) Data", "wlan_mgt.htc.lac.asel.data",
-      FT_UINT16, BASE_HEX, NULL, 0xF000, "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0xF000,
+      "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL }},
+
     {&hf_ieee80211_htc_lac_mfb,
      {"MCS Feedback (MFB)", "wlan_mgt.htc.lac.mfb",
-      FT_UINT16, BASE_HEX, NULL, 0xFE00, "High Throughput Control Link Adaptation Control MCS Feedback", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0xFE00,
+      "High Throughput Control Link Adaptation Control MCS Feedback", HFILL }},
+
     {&hf_ieee80211_htc_cal_pos,
      {"Calibration Position", "wlan_mgt.htc.cal.pos",
-      FT_UINT16, BASE_DEC, VALS (&ieee80211_htc_cal_pos_flags), 0x0003, "High Throughput Control Calibration Position", HFILL }},
+      FT_UINT16, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags), 0x0003,
+      "High Throughput Control Calibration Position", HFILL }},
+
     {&hf_ieee80211_htc_cal_seq,
      {"Calibration Sequence Identifier", "wlan_mgt.htc.cal.seq",
-      FT_UINT16, BASE_DEC, NULL, 0x000C, "High Throughput Control Calibration Sequence Identifier", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0x000C,
+      "High Throughput Control Calibration Sequence Identifier", HFILL }},
+
     {&hf_ieee80211_htc_reserved1,
      {"Reserved", "wlan_mgt.htc.reserved1",
-      FT_UINT16, BASE_DEC, NULL, 0x0030, "High Throughput Control Reserved", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0x0030,
+      "High Throughput Control Reserved", HFILL }},
+
     {&hf_ieee80211_htc_csi_steering,
      {"CSI/Steering", "wlan_mgt.htc.csi_steering",
-      FT_UINT16, BASE_DEC, VALS (&ieee80211_htc_csi_steering_flags), 0x00C0, "High Throughput Control CSI/Steering", HFILL }},
+      FT_UINT16, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags), 0x00C0,
+      "High Throughput Control CSI/Steering", HFILL }},
+
     {&hf_ieee80211_htc_ndp_announcement,
      {"NDP Announcement", "wlan_mgt.htc.ndp_announcement",
-      FT_BOOLEAN, 16, TFS(&ieee80211_htc_ndp_announcement_flag), 0x0100, "High Throughput Control NDP Announcement", HFILL }},
+      FT_BOOLEAN, 16, TFS(&ieee80211_htc_ndp_announcement_flag), 0x0100,
+      "High Throughput Control NDP Announcement", HFILL }},
+
     {&hf_ieee80211_htc_reserved2,
      {"Reserved", "wlan_mgt.htc.reserved2",
-      FT_UINT16, BASE_HEX, NULL, 0x3E00, "High Throughput Control Reserved", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x3E00,
+      "High Throughput Control Reserved", HFILL }},
+
     {&hf_ieee80211_htc_ac_constraint,
      {"AC Constraint", "wlan_mgt.htc.ac_constraint",
-      FT_BOOLEAN, 16, NULL, 0x4000, "High Throughput Control AC Constraint", HFILL }},
+      FT_BOOLEAN, 16, NULL, 0x4000,
+      "High Throughput Control AC Constraint", HFILL }},
+
     {&hf_ieee80211_htc_rdg_more_ppdu,
      {"RDG/More PPDU", "wlan_mgt.htc.rdg_more_ppdu",
-      FT_BOOLEAN, 16, NULL, 0x8000, "High Throughput Control RDG/More PPDU", HFILL }},
+      FT_BOOLEAN, 16, NULL, 0x8000,
+      "High Throughput Control RDG/More PPDU", HFILL }},
     /* End: HT Control (+HTC) */
 
     /* MDIE */
     {&hf_ieee80211_tag_mobility_domain_mdid,
      {"Mobility Domain Identifier", "wlan_mgt.mobility_domain.mdid",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_mobility_domain_ft_capab,
      {"FT Capability and Policy", "wlan_mgt.mobility_domain.ft_capab",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
      {"Fast BSS Transition over DS",
       "wlan_mgt.mobility_domain.ft_capab.ft_over_ds",
-      FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x01,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
      {"Resource Request Protocol Capability",
       "wlan_mgt.mobility_domain.ft_capab.resource_req",
-      FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x02,
+      NULL, HFILL }},
 
     /* FTIE */
     {&hf_ieee80211_tag_ft_mic_control,
      {"MIC Control", "wlan_mgt.ft.mic_control",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_element_count,
      {"Element Count", "wlan_mgt.ft.element_count",
-      FT_UINT16, BASE_DEC, NULL, 0xff00, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0xff00,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_mic,
      {"MIC", "wlan_mgt.ft.mic",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_anonce,
      {"ANonce", "wlan_mgt.ft.anonce",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_snonce,
      {"SNonce", "wlan_mgt.ft.snonce",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_id,
      {"Subelement ID", "wlan_mgt.ft.subelem.id",
-      FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals), 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals), 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_len,
      {"Length", "wlan_mgt.ft.subelem.len",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_data,
      {"Data", "wlan_mgt.ft.subelem.data",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_r1kh_id,
      {"PMK-R1 key holder identifier (R1KH-ID)", "wlan_mgt.ft.subelem.r1kh_id",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_gtk_key_info,
      {"Key Info", "wlan_mgt.ft.subelem.gtk.key_info",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_gtk_key_id,
      {"Key ID", "wlan_mgt.ft.subelem.gtk.key_id",
-      FT_UINT16, BASE_DEC, NULL, 0x0003, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0x0003,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_gtk_key_length,
      {"Key Length", "wlan_mgt.ft.subelem.gtk.key_length",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_gtk_rsc,
      {"RSC", "wlan_mgt.ft.subelem.gtk.rsc",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_gtk_key,
      {"GTK", "wlan_mgt.ft.subelem.gtk.key",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_r0kh_id,
      {"PMK-R0 key holder identifier (R0KH-ID)", "wlan_mgt.ft.subelem.r0kh_id",
-      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_igtk_key_id,
      {"Key ID", "wlan_mgt.ft.subelem.igtk.key_id",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_igtk_ipn,
      {"IPN", "wlan_mgt.ft.subelem.igtk.ipn",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_igtk_key_length,
      {"Key Length", "wlan_mgt.ft.subelem.igtk.key_length",
-      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_ft_subelem_igtk_key,
      {"Wrapped Key (IGTK)", "wlan_mgt.ft.subelem.igtk.key",
       FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
 
+    /* RIC Data IE: 802.11-2012: 8.4.2.52 */
+    {&hf_ieee80211_tag_ric_data_id,
+     {"Resource Handshake Identifier", "wlan_mgt.ric_data.id",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_ieee80211_tag_ric_data_desc_cnt,
+     {"Resource Descriptor Count", "wlan_mgt.ric_data.desc_cnt",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_ieee80211_tag_ric_data_status_code,
+     {"Status Code", "wlan_mgt.ric_data.status_code",
+      FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_status_code_ext, 0,
+      "Status of requested Resource", HFILL }},
+
+    /* RIC Descriptor IE: 802.11-2012: 8.4.2.53 */
+    {&hf_ieee80211_tag_ric_desc_rsrc_type,
+     {"Resource Type", "wlan_mgt.ric_desc.rsrc_type",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&hf_ieee80211_tag_ric_desc_var_params,
+     {"Variable Params", "wlan_mgt.ric_desc.var_params",
+      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+
     /* MMIE */
     {&hf_ieee80211_tag_mmie_keyid,
      {"KeyID", "wlan_mgt.mmie.keyid",
       FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+
     {&hf_ieee80211_tag_mmie_ipn,
      {"IPN", "wlan_mgt.mmie.ipn",
       FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+
     {&hf_ieee80211_tag_mmie_mic,
      {"MIC", "wlan_mgt.mmie.mic",
       FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
 
+    /* WAPI Parameter Set*/
+    {&hf_ieee80211_tag_wapi_param_set_version,
+     {"Version", "wlan_mgt.wapi.version",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_akm_suite_count,
+     {"AKM Suite Count", "wlan_mgt.wapi.akm_suite.count",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_akm_suite_oui,
+     {"AKM Suite OUI", "wlan_mgt.wapi.akm_suite.oui",
+      FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_akm_suite_type,
+     {"AKM Suite Type", "wlan_mgt.wapi.akm_suite.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_suite_type) , 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
+     {"Unicast Cipher Suite Count", "wlan_mgt.wapi.unicast_cipher.suite.count",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui,
+     {"Unicast Cipher Suite OUI", "wlan_mgt.wapi.unicast_cipher.suite.oui",
+      FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type,
+     {"Unicast Cipher Suite Type", "wlan_mgt.wapi.unicast_cipher.suite.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type) , 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui,
+     {"Multicast Cipher Suite OUI", "wlan_mgt.wapi.multicast_cipher.suite.oui",
+      FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type,
+     {"Multicast Cipher Suite Type", "wlan_mgt.wapi.multicast_cipher.suite.type",
+      FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type) , 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_capab,
+     {"WAPI Capability Info", "wlan_mgt.wapi.capab",
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_capab_preauth,
+     {"Supports Preauthentication?", "wlan_mgt.wapi.capab.preauth",
+      FT_BOOLEAN, 16 , NULL, 0x0001,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_capab_rsvd,
+     {"Reserved", "wlan_mgt.wapi.capab.rsvd",
+      FT_UINT16, BASE_DEC , NULL, 0xFFFE,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_bkid_count,
+     {"No of BKID's", "wlan_mgt.wapi.bkid.count",
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_ieee80211_tag_wapi_param_set_bkid_list,
+     {"BKID", "wlan_mgt.wapi.bkid",
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
+    /* BSS Max Idle Period */
+    {&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",
+      FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
+
+    /* TFS Request */
+    {&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,
+      "TFS Request Subelement Data", HFILL }},
+
+    /* TFS Response */
+    {&hf_ieee80211_tag_tfs_response_subelem_id,
+     {"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 }},
+
+    /* WNM-Sleep Mode */
+    {&hf_ieee80211_tag_wnm_sleep_mode_action_type,
+     {"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 }},
+
     /* Time Advertisement */
     {&hf_ieee80211_tag_time_adv_timing_capab,
      {"Timing capabilities", "wlan_mgt.time_adv.timing_capab",
-      FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals), 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals), 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_value,
      {"Time Value", "wlan_mgt.time_adv.time_value",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_value_year,
      {"Time Value: Year", "wlan_mgt.time_adv.time_value.year",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_value_month,
      {"Time Value: Month", "wlan_mgt.time_adv.time_value.month",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_value_day,
      {"Time Value: Day", "wlan_mgt.time_adv.time_value.month",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_value_hours,
      {"Time Value: Hours", "wlan_mgt.time_adv.time_value.hours",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_value_minutes,
      {"Time Value: Minutes", "wlan_mgt.time_adv.time_value.minutes",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_value_seconds,
      {"Time Value: Seconds", "wlan_mgt.time_adv.time_value.seconds",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_value_milliseconds,
      {"Time Value: Milliseconds", "wlan_mgt.time_adv.time_value.milliseconds",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_value_reserved,
      {"Time Value: Reserved", "wlan_mgt.time_adv.time_value.reserved",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_error,
      {"Time Error", "wlan_mgt.time_adv.time_error",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_time_adv_time_update_counter,
      {"Time Update Counter", "wlan_mgt.time_adv.time_update_counter",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     /* Time Zone */
     {&hf_ieee80211_tag_time_zone,
      {"Time Zone", "wlan_mgt.time_zone",
-      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     /* Interworking */
     {&hf_ieee80211_tag_interworking_access_network_type,
      {"Access Network Type", "wlan_mgt.interworking.access_network_type",
-      FT_UINT8, BASE_DEC, VALS(access_network_type_vals), 0x0f, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, VALS(access_network_type_vals), 0x0f,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_interworking_internet,
      {"Internet", "wlan_mgt.interworking.internet",
-      FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x10,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_interworking_asra,
      {"ASRA", "wlan_mgt.interworking.asra",
-      FT_UINT8, BASE_DEC, NULL, 0x20, "Additional Step Required for Access",
-      HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x20,
+      "Additional Step Required for Access", HFILL }},
+
     {&hf_ieee80211_tag_interworking_esr,
      {"ESR", "wlan_mgt.interworking.esr",
-      FT_UINT8, BASE_DEC, NULL, 0x40, "Emergency services reachable", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x40,
+      "Emergency services reachable", HFILL }},
+
     {&hf_ieee80211_tag_interworking_uesa,
      {"UESA", "wlan_mgt.interworking.uesa",
       FT_UINT8, BASE_DEC, NULL, 0x80,
       "Unauthenticated emergency service accessible", HFILL }},
+
     {&hf_ieee80211_tag_interworking_hessid,
      {"HESSID", "wlan_mgt.interworking.hessid",
-      FT_ETHER, BASE_NONE, NULL, 0, "Homogeneous ESS identifier", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      "Homogeneous ESS identifier", HFILL }},
 
     /* Advertisement Protocol */
     {&hf_ieee80211_tag_adv_proto_resp_len_limit,
      {"Query Response Length Limit", "wlan_mgt.adv_proto.resp_len_limit",
-      FT_UINT8, BASE_DEC, NULL, 0x7f, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x7f,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_adv_proto_pame_bi,
      {"PAME-BI", "wlan_mgt.adv_proto.pame_bi",
       FT_UINT8, BASE_DEC, NULL, 0x80,
       "Pre-Association Message Xchange BSSID Independent (PAME-BI)", HFILL }},
+
     {&hf_ieee80211_tag_adv_proto_id,
      {"Advertisement Protocol ID", "wlan_mgt.adv_proto.id",
-      FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals), 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals), 0,
+      NULL, HFILL }},
 
     /* Roaming Consortium */
     {&hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
      {"Number of ANQP OIs", "wlan_mgt.roaming_consortium.num_anqp_oi",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_roaming_consortium_oi1_len,
      {"OI #1 Length", "wlan_mgt.roaming_consortium.oi1_len",
-      FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x0f,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_roaming_consortium_oi2_len,
      {"OI #2 Length", "wlan_mgt.roaming_consortium.oi2_len",
-      FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0xf0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_roaming_consortium_oi1,
      {"OI #1", "wlan_mgt.roaming_consortium.oi1",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_roaming_consortium_oi2,
      {"OI #2", "wlan_mgt.roaming_consortium.oi2",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_roaming_consortium_oi3,
      {"OI #3", "wlan_mgt.roaming_consortium.oi3",
-      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     /* Timeout Interval */
     {&hf_ieee80211_tag_timeout_int_type,
      {"Timeout Interval Type", "wlan_mgt.timeout_int.type",
-      FT_UINT8, BASE_DEC, VALS(timeout_int_types), 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, VALS(timeout_int_types), 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_timeout_int_value,
      {"Timeout Interval Value", "wlan_mgt.timeout_int.value",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     /* Link Identifier */
     {&hf_ieee80211_tag_link_id_bssid,
      {"BSSID", "wlan_mgt.link_id.bssid",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_link_id_init_sta,
      {"TDLS initiator STA Address", "wlan_mgt.link_id.init_sta",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_link_id_resp_sta,
      {"TDLS responder STA Address", "wlan_mgt.link_id.resp_sta",
-      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     /* Wakeup Schedule */
     {&hf_ieee80211_tag_wakeup_schedule_offset,
      {"Offset", "wlan_mgt.wakeup_schedule.offset",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_wakeup_schedule_interval,
      {"Interval", "wlan_mgt.wakeup_schedule.interval",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_wakeup_schedule_awake_window_slots,
      {"Awake Window Slots", "wlan_mgt.wakeup_schedule.awake_window_slots",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
-     {"Maximum Awake Window Duration",
-      "wlan_mgt.wakeup_schedule.max_awake_dur",
-      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+     {"Maximum Awake Window Duration", "wlan_mgt.wakeup_schedule.max_awake_dur",
+      FT_UINT32, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_wakeup_schedule_idle_count,
      {"Idle Count", "wlan_mgt.wakeup_schedule.idle_count",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     /* Channel Switch Timing */
     {&hf_ieee80211_tag_channel_switch_timing_switch_time,
      {"Switch Time", "wlan_mgt.channel_switch_timing.switch_time",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_channel_switch_timing_switch_timeout,
      {"Switch Timeout", "wlan_mgt.channel_switch_timing.switch_timeout",
-      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     /* PTI Control */
     {&hf_ieee80211_tag_pti_control_tid,
      {"TID", "wlan_mgt.pti_control.tid",
-      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_pti_control_sequence_control,
      {"Sequence Control", "wlan_mgt.pti_control.sequence_control",
-      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0,
+      NULL, HFILL }},
 
     /* PU Buffer Status */
     {&hf_ieee80211_tag_pu_buffer_status_ac_bk,
      {"AC_BK traffic available", "wlan_mgt.pu_buffer_status.ac_bk",
-      FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x01,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_pu_buffer_status_ac_be,
      {"AC_BE traffic available", "wlan_mgt.pu_buffer_status.ac_be",
-      FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x02,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_pu_buffer_status_ac_vi,
      {"AC_VI traffic available", "wlan_mgt.pu_buffer_status.ac_vi",
-      FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0x04,
+      NULL, HFILL }},
+
     {&hf_ieee80211_tag_pu_buffer_status_ac_vo,
      {"AC_VO traffic available", "wlan_mgt.pu_buffer_status.ac_vo",
-      FT_UINT8, BASE_DEC, NULL, 0x08, NULL, HFILL }}
+      FT_UINT8, BASE_DEC, NULL, 0x08,
+      NULL, HFILL }}
   };
 
   static hf_register_info aggregate_fields[] = {
-    {&hf_ieee80211_amsdu_msdu_header_text,
-     {"MAC Service Data Unit (MSDU)", "wlan_aggregate.msduheader", FT_UINT16,
-      BASE_DEC, 0, 0x0000, NULL, HFILL }}
+    {&hf_ieee80211_amsdu_subframe,
+     {"A-MSDU Subframe", "wlan_aggregate.a_mdsu.subframe",
+      FT_NONE, BASE_NONE, NULL, 0x0,
+      "Aggregate MAC Service Data Unit (MSDU) Subframe", HFILL }},
+
+    {&hf_ieee80211_amsdu_length,
+     {"A-MSDU Length", "wlan_aggregate.a_mdsu.length",
+      FT_UINT16, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }}
   };
 
   static uat_field_t wep_uat_flds[] = {
@@ -16458,6 +20577,12 @@ proto_register_ieee80211 (void)
     &ett_mimo_report,
     &ett_cntrl_wrapper_fc,
     &ett_cntrl_wrapper_payload,
+    &ett_vht_cap_tree,
+    &ett_vht_mcsset_tree,
+    &ett_vht_rx_mcsbit_tree,
+    &ett_vht_tx_mcsbit_tree,
+    &ett_vht_basic_mcsbit_tree,
+    &ett_vht_op_tree,
     &ett_ht_info_delimiter1_tree,
     &ett_ht_info_delimiter2_tree,
     &ett_ht_info_delimiter3_tree,
@@ -16472,11 +20597,25 @@ proto_register_ieee80211 (void)
     &ett_tag_measure_report_frame_tree,
     &ett_tag_dfs_map_tree,
     &ett_tag_erp_info_tree,
-    &ett_tag_ex_cap,
+    &ett_tag_ex_cap1,
+    &ett_tag_ex_cap2,
+    &ett_tag_ex_cap3,
+    &ett_tag_ex_cap4,
+    &ett_tag_ex_cap5,
+    &ett_tag_ex_cap6,
+    &ett_tag_ex_cap7,
+    &ett_tag_ex_cap8,
+    &ett_tag_rm_cap1,
+    &ett_tag_rm_cap2,
+    &ett_tag_rm_cap3,
+    &ett_tag_rm_cap4,
+    &ett_tag_rm_cap5,
+    &ett_tag_tclas_mask_tree,
     &ett_tag_supported_channels,
     &ett_tag_neighbor_report_bssid_info_tree,
     &ett_tag_neighbor_report_bssid_info_capability_tree,
     &ett_tag_neighbor_report_sub_tag_tree,
+    &ett_tag_bss_bitmask_tree,
     &ett_ampduparam_tree,
     &ett_mcsset_tree,
     &ett_mcsbit_tree,
@@ -16491,6 +20630,10 @@ proto_register_ieee80211 (void)
     &ett_tsinfo_tree,
     &ett_sched_tree,
     &ett_fcs,
+    &ett_tag_wapi_param_set_akm_tree,
+    &ett_tag_wapi_param_set_ucast_tree,
+    &ett_tag_wapi_param_set_mcast_tree,
+    &ett_tag_wapi_param_set_preauth_tree,
     &ett_tag_time_adv_tree,
     &ett_adv_proto,
     &ett_adv_proto_tuple,
@@ -16500,7 +20643,10 @@ proto_register_ieee80211 (void)
     &ett_gas_anqp,
     &ett_nai_realm,
     &ett_nai_realm_eap,
-    &ett_anqp_vendor_capab
+    &ett_tag_ric_data_desc_ie,
+    &ett_anqp_vendor_capab,
+    &ett_hs20_cc_proto_port_tuple,
+    &ett_ssid_list
   };
   module_t *wlan_module;
 
@@ -16509,19 +20655,23 @@ proto_register_ieee80211 (void)
   proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
       "IEEE 802.11 Aggregate Data", "wlan_aggregate");
   proto_register_field_array(proto_aggregate, aggregate_fields, array_length(aggregate_fields));
+
   proto_wlan = proto_register_protocol ("IEEE 802.11 wireless LAN",
       "IEEE 802.11", "wlan");
   proto_register_field_array (proto_wlan, hf, array_length (hf));
+
   proto_wlan_mgt = proto_register_protocol ("IEEE 802.11 wireless LAN management frame",
       "802.11 MGT", "wlan_mgt");
   proto_register_field_array (proto_wlan_mgt, ff, array_length (ff));
+
   proto_register_subtree_array (tree_array, array_length (tree_array));
 
-  register_dissector("wlan", dissect_ieee80211, proto_wlan);
-  register_dissector("wlan_fixed", dissect_ieee80211_fixed, proto_wlan);
-  register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
+  register_dissector("wlan",         dissect_ieee80211,         proto_wlan);
+  register_dissector("wlan_fixed",   dissect_ieee80211_fixed,   proto_wlan);
+  register_dissector("wlan_bsfc",    dissect_ieee80211_bsfc,    proto_wlan);
   register_dissector("wlan_datapad", dissect_ieee80211_datapad, proto_wlan);
-  register_dissector("wlan_ht", dissect_ieee80211_ht, proto_wlan);
+  register_dissector("wlan_ht",      dissect_ieee80211_ht,      proto_wlan);
+
   register_init_routine(wlan_defragment_init);
   register_init_routine(wlan_retransmit_init);
   register_init_routine(ieee80211_gas_reassembly_init);
@@ -16574,18 +20724,18 @@ proto_register_ieee80211 (void)
     "Valid key formats");
 
   wep_uat = uat_new("WEP and WPA Decryption Keys",
-            sizeof(uat_wep_key_record_t),  /* record size */
-            "80211_keys",               /* filename */
-            TRUE,                       /* from_profile */
-            (void*) &uat_wep_key_records,  /* data_ptr */
-            &num_wepkeys_uat,           /* numitems_ptr */
-            UAT_AFFECTS_DISSECTION,     /* affects dissection of packets, but not set of named fields */
-            NULL,                       /* help */
-            uat_wep_key_record_copy_cb,        /* copy callback */
-            uat_wep_key_record_update_cb,      /* update callback */
-            uat_wep_key_record_free_cb,        /* free callback */
-            NULL,                       /* post update callback */
-            wep_uat_flds);             /* UAT field definitions */
+            sizeof(uat_wep_key_record_t), /* record size */
+            "80211_keys",                 /* filename */
+            TRUE,                         /* from_profile */
+            (void**) &uat_wep_key_records,/* data_ptr */
+            &num_wepkeys_uat,             /* numitems_ptr */
+            UAT_AFFECTS_DISSECTION,       /* affects dissection of packets, but not set of named fields */
+            NULL,                         /* help */
+            uat_wep_key_record_copy_cb,   /* copy callback */
+            uat_wep_key_record_update_cb, /* update callback */
+            uat_wep_key_record_free_cb,   /* free callback */
+            init_wepkeys,                 /* post update callback - update the WEP/WPA keys */
+            wep_uat_flds);                /* UAT field definitions */
 
   prefs_register_uat_preference(wlan_module,
                                 "wep_key_table",
@@ -16594,40 +20744,6 @@ proto_register_ieee80211 (void)
                                 wep_uat);
 }
 
-static void
-dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
-{
-  int offset = 0;
-  guint8 type;
-  int tagged_parameter_tree_len;
-  proto_tree *tagged_tree;
-
-  g_pinfo = pinfo;
-
-  type = tvb_get_guint8(tvb, offset);
-  proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
-                      1, ENC_BIG_ENDIAN);
-  offset++;
-  switch (type) {
-  case 1:
-    col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
-    /* TODO: IEEE 802.11r */
-    break;
-  case 2:
-    col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
-    col_clear(pinfo->cinfo, COL_INFO);
-    offset += add_fixed_field(tree, tvb, offset, FIELD_ACTION);
-    tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
-    if (tagged_parameter_tree_len > 0) {
-      tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
-                                              tagged_parameter_tree_len);
-      ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
-                                       tagged_parameter_tree_len, -1);
-    }
-    break;
-  }
-}
-
 void
 proto_reg_handoff_ieee80211(void)
 {
@@ -16636,10 +20752,10 @@ proto_reg_handoff_ieee80211(void)
   /*
    * Get handles for the LLC, IPX and Ethernet  dissectors.
    */
-  llc_handle = find_dissector("llc");
-  ipx_handle = find_dissector("ipx");
+  llc_handle            = find_dissector("llc");
+  ipx_handle            = find_dissector("ipx");
   eth_withoutfcs_handle = find_dissector("eth_withoutfcs");
-  data_handle = find_dissector("data");
+  data_handle           = find_dissector("data");
 
   ieee80211_handle = find_dissector("wlan");
   dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11, ieee80211_handle);
@@ -16676,191 +20792,6 @@ proto_reg_handoff_ieee80211(void)
                 data_encap_handle);
 }
 
-/* Davide Schiera (2006-11-26): this function will try to decrypt with WEP or  */
-/* WPA and return a tvb to the caller to add a new tab. It returns the    */
-/* algorithm used for decryption (WEP, TKIP, CCMP) and the header and    */
-/* trailer lengths.                                      */
-static tvbuff_t *
-try_decrypt(tvbuff_t *tvb, guint offset, guint len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer) {
-  const guint8 *enc_data;
-  guint8 *tmp = NULL;
-  tvbuff_t *decr_tvb = NULL;
-  guint32 dec_caplen;
-  guchar dec_data[AIRPDCAP_MAX_CAPLEN];
-  AIRPDCAP_KEY_ITEM used_key;
-
-  if (!enable_decryption)
-    return NULL;
-
-  /* get the entire packet                                  */
-  enc_data = tvb_get_ptr(tvb, 0, len+offset);
-
-  /*  process packet with AirPDcap                              */
-  if (AirPDcapPacketProcess(&airpdcap_ctx, enc_data, offset, offset+len, dec_data, &dec_caplen, &used_key, FALSE, TRUE)==AIRPDCAP_RET_SUCCESS)
-  {
-    *algorithm=used_key.KeyType;
-    switch (*algorithm) {
-      case AIRPDCAP_KEY_TYPE_WEP:
-        *sec_header=AIRPDCAP_WEP_HEADER;
-        *sec_trailer=AIRPDCAP_WEP_TRAILER;
-        break;
-      case AIRPDCAP_KEY_TYPE_CCMP:
-        *sec_header=AIRPDCAP_RSNA_HEADER;
-        *sec_trailer=AIRPDCAP_CCMP_TRAILER;
-        break;
-      case AIRPDCAP_KEY_TYPE_TKIP:
-        *sec_header=AIRPDCAP_RSNA_HEADER;
-        *sec_trailer=AIRPDCAP_TKIP_TRAILER;
-        break;
-      default:
-        return NULL;
-    }
-
-    /* allocate buffer for decrypted payload                      */
-    tmp = g_memdup(dec_data+offset, dec_caplen-offset);
-
-    len=dec_caplen-offset;
-
-    /* decrypt successful, let's set up a new data tvb.              */
-    decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
-    tvb_set_free_cb(decr_tvb, g_free);
-  }
-
-  return decr_tvb;
-}
-/*  Davide Schiera -----------------------------------------------------------  */
-
-
-/* Collect our WEP and WPA keys */
-static
-void set_airpdcap_keys(void)
-{
-  guint i = 0;
-  AIRPDCAP_KEY_ITEM key;
-  PAIRPDCAP_KEYS_COLLECTION keys;
-  decryption_key_t* dk = NULL;
-  GByteArray *bytes = NULL;
-  gboolean res;
-
-  keys=(PAIRPDCAP_KEYS_COLLECTION)se_alloc(sizeof(AIRPDCAP_KEYS_COLLECTION));
-  keys->nKeys = 0;
-
-  for(i = 0; (uat_wep_key_records != NULL) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS); i++)
-  {
-    dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key);
-
-    if(dk != NULL)
-    {
-      if(dk->type == AIRPDCAP_KEY_TYPE_WEP)
-      {
-        key.KeyType = AIRPDCAP_KEY_TYPE_WEP;
-
-        bytes = g_byte_array_new();
-        res = hex_str_to_bytes(dk->key->str, bytes, FALSE);
-
-        if (dk->key->str && res && bytes->len > 0 && bytes->len <= AIRPDCAP_WEP_KEY_MAXLEN)
-        {
-          /*
-           * WEP key is correct (well, the can be even or odd, so it is not
-           * a real check, I think... is a check performed somewhere in the
-           * AirPDcap function??? )
-           */
-          memcpy(key.KeyData.Wep.WepKey, bytes->data, bytes->len);
-          key.KeyData.Wep.WepKeyLen = bytes->len;
-          keys->Keys[keys->nKeys] = key;
-          keys->nKeys++;
-        }
-      }
-      else if(dk->type == AIRPDCAP_KEY_TYPE_WPA_PWD)
-      {
-        key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PWD;
-
-        /* XXX - This just lops the end if the key off if it's too long.
-         *       Should we handle this more gracefully? */
-        g_strlcpy(key.UserPwd.Passphrase, dk->key->str, AIRPDCAP_WPA_PASSPHRASE_MAX_LEN+1);
-
-        key.UserPwd.SsidLen = 0;
-        if(dk->ssid != NULL && dk->ssid->len <= AIRPDCAP_WPA_SSID_MAX_LEN)
-        {
-          memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
-          key.UserPwd.SsidLen = dk->ssid->len;
-        }
-
-        keys->Keys[keys->nKeys] = key;
-        keys->nKeys++;
-      }
-      else if(dk->type == AIRPDCAP_KEY_TYPE_WPA_PMK)
-      {
-        key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PMK;
-
-        bytes = g_byte_array_new();
-        hex_str_to_bytes(dk->key->str, bytes, FALSE);
-
-        /* XXX - Pass the correct array of bytes... */
-        if (bytes->len <= AIRPDCAP_WPA_PMK_LEN) {
-          memcpy(key.KeyData.Wpa.Pmk, bytes->data, bytes->len);
-
-          keys->Keys[keys->nKeys] = key;
-          keys->nKeys++;
-        }
-      }
-    }
-  }
-
-  /* Now set the keys */
-  AirPDcapSetKeys(&airpdcap_ctx,keys->Keys,keys->nKeys);
-  if (bytes)
-    g_byte_array_free(bytes, TRUE);
-
-}
-
-static void init_wepkeys(void) {
-
-  /*
-   * XXX - AirPDcap - That God sends it to us beautiful (che dio ce la mandi bona)
-   * The next lines will add a key to the AirPDcap context. The keystring will be added
-   * to the old WEP array too, but we don't care, because the packets will come here
-   * already decrypted... One of these days we will fix this too
-   */
-  set_airpdcap_keys();
-}
-/*
- * This code had been taken from AirSnort crack.c function classify()
- * Permission granted by snax <at> shmoo dot com
- * weak_iv - determine which key byte an iv is useful in resolving
- * parm     - p, pointer to the first byte of an IV
- * return   -  n - this IV is weak for byte n of a WEP key
- *            -1 - this IV is not weak for any key bytes
- *
- * This function tests for IVs that are known to satisfy the criteria
- * for a weak IV as specified in FMS section 7.1
- *
- */
-static int
-weak_iv(guchar *iv)
-{
-  guchar sum, k;
-
-  if (iv[1] == 255 && iv[0] > 2 && iv[0] < 16) {
-    return iv[0] -3;
-  }
-
-  sum = iv[0] + iv[1];
-  if (sum == 1) {
-    if (iv[2] <= 0x0a) {
-      return iv[2] +2;
-    }
-    else if (iv[2] == 0xff){
-      return 0;
-    }
-  }
-  k = 0xfe - iv[2];
-  if (sum == k  && (iv[2] >= 0xf2 && iv[2] <= 0xfe && iv[2] != 0xfd)){
-    return k;
-  }
-  return -1;
-}
-
 /*
  * Editor modelines
  *