From Didier Gautheron:
[obnox/wireshark/wip.git] / epan / dissectors / packet-ieee80211.c
index ab38458932aa12b8e74ee85c2493db1f3d306164..4e2c5f254b9df54dcdafaed7bd23c86918c8d1c1 100644 (file)
@@ -47,6 +47,9 @@
  *
  * Dutin Johnson - 802.11n and portions of 802.11k and 802.11ma
  * dustin@dustinj.us & dustin.johnson@cacetech.com
+ *
+ * 04/21/2008 - Added dissection for 802.11p
+ * Arada Systems <http://www.aradasystems.com>
  */
 
 #ifdef HAVE_CONFIG_H
 #include "packet-llc.h"
 #include "packet-ieee80211.h"
 #include <epan/etypes.h>
+#include <epan/greproto.h>
 #include <epan/oui.h>
 #include <epan/crc32.h>
 #include <epan/tap.h>
 #include <epan/emem.h>
 #include <epan/crypt/wep-wpadefs.h>
+#include <epan/expert.h>
 
 #include <ctype.h>
 #include "isprint.h"
 
-#ifdef HAVE_AIRPCAP
-#include <airpcap.h>
-#include <airpcap_loader.h>
-#else
-/* XXX - This is probably a bit much */
-#define MAX_ENCRYPTION_KEYS 64
-#endif
+#include "packet-wps.h"
 
 #ifndef roundup2
-#define        roundup2(x, y)  (((x)+((y)-1))&(~((y)-1)))  /* if y is powers of two */
+#define roundup2(x, y)  (((x)+((y)-1))&(~((y)-1)))  /* if y is powers of two */
 #endif
 
 /* Defragment fragmented 802.11 datagrams */
 static gboolean wlan_defragment = TRUE;
 
+/* call subdissector for retransmitted frames */
+static gboolean wlan_subdissector = TRUE;
+
 /* Check for the presence of the 802.11 FCS */
 static gboolean wlan_check_fcs = FALSE;
 
+/* Ignore vendor-specific HT elements */
+static gboolean wlan_ignore_draft_ht = FALSE;
+
 /* Ignore the WEP bit; assume packet is decrypted */
 #define WLAN_IGNORE_WEP_NO     0
 #define WLAN_IGNORE_WEP_WO_IV  1
@@ -107,20 +112,24 @@ static gint wlan_ignore_wep = WLAN_IGNORE_WEP_NO;
 static GHashTable *wlan_fragment_table = NULL;
 static GHashTable *wlan_reassembled_table = NULL;
 
+/* Statistical data */
+static struct _wlan_stats wlan_stats;
+
 /* Stuff for the WEP decoder */
+static gboolean enable_decryption = FALSE;
+static void init_wepkeys(void);
 
+#ifndef HAVE_AIRPDCAP
 static gint num_wepkeys = 0;
-static gboolean enable_decryption = FALSE;
 static guint8 **wep_keys = NULL;
 static int *wep_keylens = NULL;
-static void init_wepkeys(void);
-#ifndef HAVE_AIRPDCAP
 static tvbuff_t *try_decrypt_wep(tvbuff_t *tvb, guint32 offset, guint32 len);
 static int wep_decrypt(guint8 *buf, guint32 len, int key_override);
 #else
 /* 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);
 #endif
+
 static int weak_iv(guchar *iv);
 #define SSWAP(a,b) {guint8 tmp = s[a]; s[a] = s[b]; s[b] = tmp;}
 
@@ -271,14 +280,14 @@ int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t
 #define QOS_AMSDU_PRESENT(x)  (((x) & 0x0080) >> 6)
 #define QOS_FIELD_CONTENT(x)  (((x) & 0xFF00) >> 8)
 
-#define QOS_FLAG_EOSP    0x08
+#define QOS_FLAG_EOSP    0x10
 
 /*
  * Extract subfields from the result of QOS_FIELD_CONTENT().
  */
-#define QOS_PS_BUF_STATE(x)  (((x) & 0x02) >> 1)
-#define QOS_PS_BUF_AC(x)     (((x) & 0x0C) >> 2)
-#define QOS_PS_BUF_LOAD(x)   (((x) & 0xF0) >> 4)
+#define QOS_PS_BUF_STATE_INDICATED(x)  (((x) & 0x02) >> 1)
+#define QOS_PS_HIGHEST_PRI_BUF_AC(x)   (((x) & 0x0C) >> 2)
+#define QOS_PS_QAP_BUF_LOAD(x)         (((x) & 0xF0) >> 4)
 
 /*
  * Extract subfields from the HT Control field.
@@ -356,6 +365,7 @@ int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t
 #define MGT_DEAUTHENTICATION   0x0C  /* Deauthentication           */
 #define MGT_ACTION             0x0D  /* Action                     */
 #define MGT_ACTION_NO_ACK      0x0E  /* Action No Ack              */
+#define MGT_ARUBA_WLAN         0x0F  /* Aruba WLAN Specific        */
 
 /*
  * COMPOSE_FRAME_TYPE() values for control frames.
@@ -454,51 +464,57 @@ int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t
 /* ************************************************************************* */
 /*        Logical field codes (IEEE 802.11 encoding of tags)                 */
 /* ************************************************************************* */
-#define TAG_SSID                  0x00
-#define TAG_SUPP_RATES            0x01
-#define TAG_FH_PARAMETER          0x02
-#define TAG_DS_PARAMETER          0x03
-#define TAG_CF_PARAMETER          0x04
-#define TAG_TIM                   0x05
-#define TAG_IBSS_PARAMETER        0x06
-#define TAG_COUNTRY_INFO          0x07
-#define TAG_FH_HOPPING_PARAMETER  0x08
-#define TAG_FH_HOPPING_TABLE      0x09
-#define TAG_REQUEST               0x0A
-#define TAG_QBSS_LOAD             0x0B
-#define TAG_EDCA_PARAM_SET        0x0C
-#define TAG_TSPEC                 0x0D
-#define TAG_TCLAS                 0x0E
-#define TAG_SCHEDULE              0x0F
-#define TAG_CHALLENGE_TEXT        0x10
-#define TAG_POWER_CONSTRAINT      0x20
-#define TAG_POWER_CAPABILITY      0x21
-#define TAG_TPC_REQUEST           0x22
-#define TAG_TPC_REPORT            0x23
-#define TAG_SUPPORTED_CHANNELS    0x24
-#define TAG_CHANNEL_SWITCH_ANN    0x25
-#define TAG_MEASURE_REQ           0x26
-#define TAG_MEASURE_REP           0x27
-#define TAG_QUIET                 0x28
-#define TAG_IBSS_DFS              0x29
-#define TAG_ERP_INFO              0x2A
-#define TAG_TS_DELAY              0x2B
-#define TAG_TCLAS_PROCESS         0x2C
-#define TAG_HT_CAPABILITY         0x2D  /* IEEE Stc 802.11n/D2.0 */
-#define TAG_QOS_CAPABILITY        0x2E
-#define TAG_ERP_INFO_OLD          0x2F  /* IEEE Std 802.11g/D4.0 */
-#define TAG_RSN_IE                0x30
-#define TAG_EXT_SUPP_RATES        0x32
-#define TAG_NEIGHBOR_REPORT       0x34
-#define TAG_HT_INFO               0x3D  /* IEEE Stc 802.11n/D2.0 */
+#define TAG_SSID                     0x00
+#define TAG_SUPP_RATES               0x01
+#define TAG_FH_PARAMETER             0x02
+#define TAG_DS_PARAMETER             0x03
+#define TAG_CF_PARAMETER             0x04
+#define TAG_TIM                      0x05
+#define TAG_IBSS_PARAMETER           0x06
+#define TAG_COUNTRY_INFO             0x07
+#define TAG_FH_HOPPING_PARAMETER     0x08
+#define TAG_FH_HOPPING_TABLE         0x09
+#define TAG_REQUEST                  0x0A
+#define TAG_QBSS_LOAD                0x0B
+#define TAG_EDCA_PARAM_SET           0x0C
+#define TAG_TSPEC                    0x0D
+#define TAG_TCLAS                    0x0E
+#define TAG_SCHEDULE                 0x0F
+#define TAG_CHALLENGE_TEXT           0x10
+#define TAG_POWER_CONSTRAINT         0x20
+#define TAG_POWER_CAPABILITY         0x21
+#define TAG_TPC_REQUEST              0x22
+#define TAG_TPC_REPORT               0x23
+#define TAG_SUPPORTED_CHANNELS       0x24
+#define TAG_CHANNEL_SWITCH_ANN       0x25
+#define TAG_MEASURE_REQ              0x26
+#define TAG_MEASURE_REP              0x27
+#define TAG_QUIET                    0x28
+#define TAG_IBSS_DFS                 0x29
+#define TAG_ERP_INFO                 0x2A
+#define TAG_TS_DELAY                 0x2B
+#define TAG_TCLAS_PROCESS            0x2C
+#define TAG_HT_CAPABILITY            0x2D  /* IEEE Stc 802.11n/D2.0 */
+#define TAG_QOS_CAPABILITY           0x2E
+#define TAG_ERP_INFO_OLD             0x2F  /* IEEE Std 802.11g/D4.0 */
+#define TAG_RSN_IE                   0x30
+/* Reserved 49 */
+#define TAG_EXT_SUPP_RATES           0x32
+#define TAG_NEIGHBOR_REPORT          0x34
+#define TAG_HT_INFO                  0x3D  /* IEEE Stc 802.11n/D2.0 */
 #define TAG_SECONDARY_CHANNEL_OFFSET 0x3E  /* IEEE Stc 802.11n/D1.10/D2.0 */
-#define TAG_EXTENDED_CAPABILITIES 0X7F   /* IEEE Stc 802.11n/D1.10/D2.0 */
-#define TAG_AGERE_PROPRIETARY     0x80
-#define TAG_CISCO_UNKNOWN_1       0x85  /* Cisco Compatible eXtensions */
-#define TAG_CISCO_UNKNOWN_2       0x88  /* Cisco Compatible eXtensions? */
-#define TAG_CISCO_UNKNOWN_3       0x95  /* Cisco Compatible eXtensions */
-#define TAG_VENDOR_SPECIFIC_IE    0xDD
-#define TAG_SYMBOL_PROPRIETARY    0xAD
+#define TAG_WSIE                     0x45   /* tag of the Wave Service Information (802.11p) */
+#define TAG_20_40_BSS_CO_EX          0x48   /* IEEE P802.11n/D6.0 */
+#define TAG_20_40_BSS_INTOL_CH_REP   0x49   /* IEEE P802.11n/D6.0 */
+#define TAG_OVERLAP_BSS_SCAN_PAR     0x49   /* IEEE P802.11n/D6.0 */
+#define TAG_EXTENDED_CAPABILITIES    0X7F   /* IEEE Stc 802.11n/D1.10/D2.0 */
+#define TAG_AGERE_PROPRIETARY        0x80
+#define TAG_CISCO_CCX1_CKIP          0x85  /* Cisco Compatible eXtensions */
+#define TAG_CISCO_UNKNOWN_88         0x88  /* Cisco Compatible eXtensions? */
+#define TAG_CISCO_UNKNOWN_95         0x95  /* Cisco Compatible eXtensions */
+#define TAG_CISCO_UNKNOWN_96         0x96  /* Cisco Compatible eXtensions */
+#define TAG_VENDOR_SPECIFIC_IE       0xDD
+#define TAG_SYMBOL_PROPRIETARY       0xAD
 #if 0 /* Not yet assigned tag numbers by ANA */
 #define TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT    0xFF
 #define TAG_SUPPORTED_REGULATORY_CLASSES            0xFE
@@ -511,34 +527,48 @@ int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t
 
 #define PMKID_LEN 16
 
+/* ************************************************************************* */
+/*              Wireless Access in Vehicular Environment  IEEE 802.11p       */
+/* ************************************************************************* */
+#define WAVE_ACID       0x0001
+#define WAVE_ACM        0x0002
+#define WAVE_ACF        0x0004
+#define WAVE_PRIORITY   0x0008
+#define WAVE_CHANNEL    0x0010
+#define WAVE_IPV6ADDR   0x0020
+#define WAVE_PEERMAC    0x0040
+
+
+
 /* ************************************************************************* */
 /*                         Frame types, and their names                      */
 /* ************************************************************************* */
 static const value_string frame_type_subtype_vals[] = {
-  {MGT_ASSOC_REQ,        "Association Request"},
-  {MGT_ASSOC_RESP,       "Association Response"},
-  {MGT_REASSOC_REQ,      "Reassociation Request"},
-  {MGT_REASSOC_RESP,     "Reassociation Response"},
-  {MGT_PROBE_REQ,        "Probe Request"},
-  {MGT_PROBE_RESP,       "Probe Response"},
-  {MGT_MEASUREMENT_PILOT,"Measurement Pilot"},
-  {MGT_BEACON,           "Beacon frame"},
-  {MGT_ATIM,             "ATIM"},
-  {MGT_DISASS,           "Dissassociate"},
-  {MGT_AUTHENTICATION,   "Authentication"},
-  {MGT_DEAUTHENTICATION, "Deauthentication"},
-  {MGT_ACTION,           "Action"},
-  {MGT_ACTION_NO_ACK,    "Action No Ack"},
-
-  {CTRL_CONTROL_WRAPPER, "Control Wrapper"},
-  {CTRL_BLOCK_ACK_REQ,   "802.11 Block Ack Req"},
-  {CTRL_BLOCK_ACK,       "802.11 Block Ack"},
-  {CTRL_PS_POLL,         "Power-Save poll"},
-  {CTRL_RTS,             "Request-to-send"},
-  {CTRL_CTS,             "Clear-to-send"},
-  {CTRL_ACKNOWLEDGEMENT, "Acknowledgement"},
-  {CTRL_CFP_END,         "CF-End (Control-frame)"},
-  {CTRL_CFP_ENDACK,      "CF-End + CF-Ack (Control-frame)"},
+  {MGT_ASSOC_REQ,             "Association Request"},
+  {MGT_ASSOC_RESP,            "Association Response"},
+  {MGT_REASSOC_REQ,           "Reassociation Request"},
+  {MGT_REASSOC_RESP,          "Reassociation Response"},
+  {MGT_PROBE_REQ,             "Probe Request"},
+  {MGT_PROBE_RESP,            "Probe Response"},
+  {MGT_MEASUREMENT_PILOT,     "Measurement Pilot"},
+  {MGT_BEACON,                "Beacon frame"},
+  {MGT_ATIM,                  "ATIM"},
+  {MGT_DISASS,                "Disassociate"},
+  {MGT_AUTHENTICATION,        "Authentication"},
+  {MGT_DEAUTHENTICATION,      "Deauthentication"},
+  {MGT_ACTION,                "Action"},
+  {MGT_ACTION_NO_ACK,         "Action No Ack"},
+  {MGT_ARUBA_WLAN,            "Aruba Management"},
+
+  {CTRL_CONTROL_WRAPPER,      "Control Wrapper"},
+  {CTRL_BLOCK_ACK_REQ,        "802.11 Block Ack Req"},
+  {CTRL_BLOCK_ACK,            "802.11 Block Ack"},
+  {CTRL_PS_POLL,              "Power-Save poll"},
+  {CTRL_RTS,                  "Request-to-send"},
+  {CTRL_CTS,                  "Clear-to-send"},
+  {CTRL_ACKNOWLEDGEMENT,      "Acknowledgement"},
+  {CTRL_CFP_END,              "CF-End (Control-frame)"},
+  {CTRL_CFP_ENDACK,           "CF-End + CF-Ack (Control-frame)"},
 
   {DATA,                      "Data"},
   {DATA_CF_ACK,               "Data + CF-Ack"},
@@ -589,11 +619,32 @@ static const char *qos_acs[8] = {
 /* ************************************************************************* */
 /*                   WME Access Category Names (by WME ACI)                  */
 /* ************************************************************************* */
-static const char *wme_acs[4] = {
-  "Best Effort",
-  "Background",
-  "Video",
-  "Voice",
+static const value_string wme_acs[] = {
+  { 0, "Best Effort" },
+  { 1, "Background" },
+  { 2, "Video" },
+  { 3, "Voice" },
+  { 0, NULL }
+};
+
+/* ************************************************************************* */
+/*                  Aruba Management Type                                    */
+/* ************************************************************************* */
+static const value_string aruba_mgt_typevals[] = {
+  { 0x0001,       "Hello" },
+  { 0x0002,       "Probe" },
+  { 0x0003,       "MTU" },
+  { 0x0004,       "Ageout" },
+  { 0x0005,       "Heartbeat" },
+  { 0x0006,       "Deauth" },
+  { 0x0007,       "Disassoc" },
+  { 0x0008,       "Probe response" },
+  { 0x0009,       "Tunnel update" },
+  { 0x000A,       "Laser beam active" },
+  { 0x000B,       "Client IP" },
+  { 0x000C,       "Laser beam active v2" },
+  { 0x000D,       "AP statistics" },
+  { 0,            NULL }
 };
 
 /*** Begin: Action Fixed Parameter ***/
@@ -636,19 +687,70 @@ static const char *wme_acs[4] = {
 #define HT_ACTION_MIMO_COMPRESSED_BEAMFORMING 6
 #define HT_ACTION_ANT_SEL_FEEDBACK            7
 #define HT_ACTION_HT_INFO_EXCHANGE            8
+
+/* Vendor actions */
+/* MARVELL */
+#define MRVL_ACTION_MESH_MANAGEMENT     1
+
+#define MRVL_MESH_MGMT_ACTION_RREQ      0
+#define MRVL_MESH_MGMT_ACTION_RREP      1
+#define MRVL_MESH_MGMT_ACTION_RERR      2
+#define MRVL_MESH_MGMT_ACTION_PLDM      3
+
 /*** End: Action Fixed Parameter ***/
 
 static int proto_wlan = -1;
 static int proto_aggregate = -1;
 static packet_info * g_pinfo;
 
+static int proto_radio = -1;
+static int proto_wlancap = -1;
+static int proto_prism = -1;
+
 /* ************************************************************************* */
 /*                Header field info values for radio information             */
 /* ************************************************************************* */
+static int hf_mactime = -1;
+static int hf_hosttime = -1;
 static int hf_data_rate = -1;
 static int hf_channel = -1;
+static int hf_channel_frequency = -1;
+static int hf_normrssi_antsignal = -1;
+static int hf_dbm_antsignal = -1;
+static int hf_rawrssi_antsignal = -1;
+static int hf_normrssi_antnoise = -1;
+static int hf_dbm_antnoise = -1;
+static int hf_rawrssi_antnoise = -1;
 static int hf_signal_strength = -1;
 
+/* Prism radio header */
+static int hf_prism_msgcode = -1;
+static int hf_prism_msglen = -1;
+static int hf_prism_rssi_data = -1;
+static int hf_prism_sq_data = -1;
+static int hf_prism_signal_data = -1;
+static int hf_prism_noise_data = -1;
+static int hf_prism_rate_data = -1;
+static int hf_prism_istx_data = -1;
+static int hf_prism_frmlen_data = -1;
+
+/* AVS WLANCAP radio header */
+static int hf_wlan_magic = -1;
+static int hf_wlan_version = -1;
+static int hf_wlan_length = -1;
+static int hf_wlan_phytype = -1;
+static int hf_wlan_antenna = -1;
+static int hf_wlan_priority = -1;
+static int hf_wlan_ssi_type = -1;
+static int hf_wlan_ssi_signal = -1;
+static int hf_wlan_ssi_noise = -1;
+static int hf_wlan_preamble = -1;
+static int hf_wlan_encoding = -1;
+static int hf_wlan_sequence = -1;
+static int hf_wlan_drops = -1;
+static int hf_wlan_receiver_addr = -1;
+static int hf_wlan_padding = -1;
+
 /* ************************************************************************* */
 /*                Header field info values for FC-field                      */
 /* ************************************************************************* */
@@ -670,6 +772,18 @@ static int hf_fc_more_data = -1;
 static int hf_fc_protected = -1;
 static int hf_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_fc_analysis_retransmission = -1;
+static int hf_fc_analysis_retransmission_frame = -1;
 
 /* ************************************************************************* */
 /*                   Header values for Duration/ID field                     */
@@ -698,15 +812,13 @@ static int hf_qos_priority = -1;
 static int hf_qos_ack_policy = -1;
 static int hf_qos_amsdu_present = -1;
 static int hf_qos_eosp = -1;
-static int hf_qos_field_content = -1;
-/*static int hf_qos_txop_limit = -1;*/
-/*  FIXME: hf_ values not defined
-static int hf_qos_buf_state = -1;
-static int hf_qos_buf_ac = -1;
-static int hf_qos_buf_load = -1;
-*/
-/*static int hf_qos_txop_dur_req = -1;
-static int hf_qos_queue_size = -1;*/
+static int hf_qos_bit4 = -1;
+static int hf_qos_txop_limit = -1;
+static int hf_qos_buf_state_indicated = -1;
+static int hf_qos_highest_pri_buf_ac = -1;
+static int hf_qos_qap_buf_load = -1;
+static int hf_qos_txop_dur_req = -1;
+static int hf_qos_queue_size = -1;
 
 /* ************************************************************************* */
 /*                Header values for HT control field (+HTC)                  */
@@ -760,28 +872,75 @@ static int hf_reassembled_in = -1;
 
 
 static int proto_wlan_mgt = -1;
+
+/* ************************************************************************* */
+/*                   Header values for WAVE                                  */
+/* ************************************************************************* */
+static int hf_pst_timingquality = -1;
+static int hf_pst_providercount = -1;
+static int hf_pst_length =        -1;
+static int hf_pst_contents =      -1;
+
+static int hf_pst_acid =        -1;
+static int hf_pst_acm_length =  -1;
+static int hf_pst_acm =         -1;
+static int hf_pst_acm_contents =-1;
+static int hf_pst_acf =         -1;
+static int hf_pst_priority =    -1;
+static int hf_pst_ipv6addr =    -1;
+static int hf_pst_serviceport = -1;
+static int hf_pst_addressing =  -1;
+static int hf_pst_macaddr =     -1;
+static int hf_pst_channel =     -1;
+
+static int hf_chan_noc =        -1;
+static int hf_chan_length =     -1;
+static int hf_chan_content =    -1;
+static int hf_chan_channel =    -1;
+static int hf_chan_adapt   =    -1;
+static int hf_chan_rate    =    -1;
+static int hf_chan_tx_pow  =    -1;
+
 /* ************************************************************************* */
 /*                      Fixed fields found in mgt frames                     */
 /* ************************************************************************* */
-static int ff_auth_alg = -1;  /* Authentication algorithm field            */
-static int ff_auth_seq = -1;  /* Authentication transaction sequence       */
-static int ff_current_ap = -1;  /* Current AP MAC address                    */
-static int ff_listen_ival = -1;  /* Listen interval fixed field               */
-static int ff_timestamp = -1;  /* 64 bit timestamp                          */
-static int ff_beacon_interval = -1;  /* 16 bit Beacon interval            */
-static int ff_assoc_id = -1;  /* 16 bit AID field                          */
-static int ff_reason = -1;  /* 16 bit reason code                        */
-static int ff_status_code = -1;  /* Status code                               */
-static int ff_category_code = -1;  /* 8 bit Category code */
-static int ff_action_code = -1;    /* 8 bit Action code */
-static int ff_dialog_token = -1;  /* 8 bit Dialog token */
-static int ff_wme_action_code = -1;  /* Management notification action code */
-static int ff_wme_status_code = -1;  /* Management notification setup response status code */
+static int ff_auth_alg = -1;            /* Authentication algorithm field            */
+static int ff_auth_seq = -1;            /* Authentication transaction sequence       */
+static int ff_current_ap = -1;          /* Current AP MAC address                    */
+static int ff_listen_ival = -1;         /* Listen interval fixed field               */
+static int ff_timestamp = -1;           /* 64 bit timestamp                          */
+static int ff_beacon_interval = -1;     /* 16 bit Beacon interval                    */
+static int ff_assoc_id = -1;            /* 16 bit AID field                          */
+static int ff_reason = -1;              /* 16 bit reason code                        */
+static int ff_status_code = -1;         /* Status code                               */
+static int ff_category_code = -1;       /* 8 bit Category code */
+static int ff_action_code = -1;         /* 8 bit Action code */
+static int ff_dialog_token = -1;        /* 8 bit Dialog token */
+static int ff_wme_action_code = -1;     /* Management notification action code */
+static int ff_wme_status_code = -1;     /* Management notification setup response status code */
 static int ff_qos_action_code = -1;
 static int ff_dls_action_code = -1;
-static int ff_dst_mac_addr = -1;  /* DLS destination MAC addressi */
-static int ff_src_mac_addr = -1;  /* DLS source MAC addressi */
-static int ff_dls_timeout = -1;    /* DLS timeout value */
+static int ff_dst_mac_addr = -1;        /* DLS destination MAC addressi */
+static int ff_src_mac_addr = -1;        /* DLS source MAC addressi */
+static int ff_dls_timeout = -1;         /* DLS timeout value */
+
+/* Vendor specific */
+static int ff_marvell_action_type = -1;
+static int ff_marvell_mesh_mgt_action_code = -1;
+static int ff_mesh_mgt_length = -1;     /* Mesh Management length */
+static int ff_mesh_mgt_mode = -1;       /* Mesh Management mode */
+static int ff_mesh_mgt_ttl = -1;        /* Mesh Management TTL */
+static int ff_mesh_mgt_dstcount = -1;   /* Mesh Management dst count */
+static int ff_mesh_mgt_hopcount = -1;   /* Mesh Management hop count */
+static int ff_mesh_mgt_rreqid = -1;     /* Mesh Management RREQ ID */
+static int ff_mesh_mgt_sa = -1;         /* Mesh Management src addr */
+static int ff_mesh_mgt_ssn = -1;        /* Mesh Management src sequence number */
+static int ff_mesh_mgt_metric = -1;     /* Mesh Management metric */
+static int ff_mesh_mgt_flags = -1;      /* Mesh Management RREQ flags */
+static int ff_mesh_mgt_da = -1;         /* Mesh Management dst addr */
+static int ff_mesh_mgt_dsn = -1;        /* Mesh Management dst sequence number */
+static int ff_mesh_mgt_lifetime = -1;   /* Mesh Management lifetime */
+
 
 /*** Begin: Block Ack Action Fixed Field - Dustin Johnson ***/
 static int ff_ba_action = -1;
@@ -789,7 +948,7 @@ static int ff_ba_action = -1;
 
 /*** Begin: Block Ack Params Fixed Field - Dustin Johnson ***/
 static int ff_block_ack_params = -1;
-static int ff_block_ack_params_amsdu_premitted = -1;
+static int ff_block_ack_params_amsdu_permitted = -1;
 static int ff_block_ack_params_policy = -1;
 static int ff_block_ack_params_tid = -1;
 static int ff_block_ack_params_buffer_size = -1;
@@ -817,7 +976,7 @@ static int ff_max_reg_pwr = -1;
 /*** End: Max Regulation Power Fixed Field - Dustin Johnson ***/
 
 /*** Begin: Measurement Pilot Interval Fixed Field - Dustin Johnson ***/
-static int ff_measurment_pilot_int = -1;
+static int ff_measurement_pilot_int = -1;
 /*** End: Measurement Pilot Interval Fixed Field - Dustin Johnson ***/
 
 /*** Begin: Country String Fixed Field - Dustin Johnson ***/
@@ -840,16 +999,16 @@ static int ff_transceiver_noise_floor = -1;
 static int ff_channel_width = -1;
 /*** End: Channel Width Fixed Field - Dustin Johnson ***/
 
-/*** Begin: QoS Inforamtion AP Fixed Field - Dustin Johnson ***/
+/*** Begin: QoS Information AP Fixed Field - Dustin Johnson ***/
 static int ff_qos_info_ap = -1;
 static int ff_qos_info_ap_edca_param_set_counter = -1;
 static int ff_qos_info_ap_q_ack = -1;
 static int ff_qos_info_ap_queue_req = -1;
 static int ff_qos_info_ap_txop_request = -1;
 static int ff_qos_info_ap_reserved = -1;
-/*** End: QoS Inforamtion AP Fixed Field - Dustin Johnson ***/
+/*** End: QoS Information AP Fixed Field - Dustin Johnson ***/
 
-/*** Begin: QoS Inforamtion STA Fixed Field - Dustin Johnson ***/
+/*** Begin: QoS Information STA Fixed Field - Dustin Johnson ***/
 static int ff_qos_info_sta = -1;
 static int ff_qos_info_sta_ac_vo = -1;
 static int ff_qos_info_sta_ac_vi = -1;
@@ -858,7 +1017,7 @@ static int ff_qos_info_sta_ac_be = -1;
 static int ff_qos_info_sta_q_ack = -1;
 static int ff_qos_info_sta_max_sp_len = -1;
 static int ff_qos_info_sta_more_data_ack = -1;
-/*** End: QoS Inforamtion STA Fixed Field - Dustin Johnson ***/
+/*** End: QoS Information STA Fixed Field - Dustin Johnson ***/
 
 /*** Begin: Spatial Multiplexing (SM) Power Control - Dustin Johnson ***/
 static int ff_sm_pwr_save = -1;
@@ -976,6 +1135,7 @@ static int tim_bmapctl = -1;
 
 static int hf_fixed_parameters = -1;  /* Protocol payload for management frames */
 static int hf_tagged_parameters = -1;  /* Fixed payload item */
+static int hf_tagged_ssid = -1;
 static int hf_wep_iv = -1;
 static int hf_wep_iv_weak = -1;
 static int hf_tkip_extiv = -1;
@@ -1010,6 +1170,7 @@ static int hf_block_ack_request_type = -1;
 static int hf_block_ack_multi_tid_reserved = -1;
 static int hf_block_ack_multi_tid_value = -1;
 static int hf_block_ack_type = -1;
+static int hf_block_ack_bitmap = -1;
 /*** End: Block Ack Request/Block Ack  - Dustin Johnson***/
 
 static int ht_cap = -1;
@@ -1119,6 +1280,9 @@ static int hf_tag_power_capability_min = -1;
 static int hf_tag_power_capability_max = -1;
 /*** End: Power Capability Tag - Dustin Johnson ***/
 
+static int hf_tag_tpc_report_trsmt_pow = -1;
+static int hf_tag_tpc_report_link_mrg = -1;
+
 /*** Begin: Power Capability Tag - Dustin Johnson ***/
 static int hf_tag_supported_channels = -1;
 static int hf_tag_supported_channels_first = -1;
@@ -1189,6 +1353,10 @@ static int hf_tag_measure_report_parent_tsf = -1;
 
 /*** Begin: Extended Capabilities Tag - Dustin Johnson ***/
 static int hf_tag_extended_capabilities = -1;
+static int hf_tag_extended_capabilities_b0 = -1;
+static int hf_tag_extended_capabilities_b1 = -1;
+static int hf_tag_extended_capabilities_b2 = -1;
+static int hf_tag_extended_capabilities_b3 = -1;
 /*** End: Extended Capabilities Tag - Dustin Johnson ***/
 
 /*** Begin: Neighbor Report Tag - Dustin Johnson ***/
@@ -1265,6 +1433,14 @@ static int hf_aironet_ie_qos_unk1 = -1;
 static int hf_aironet_ie_qos_paramset = -1;
 static int hf_aironet_ie_qos_val = -1;
 
+static int hf_marvell_ie_type = -1;
+static int hf_marvell_ie_mesh_subtype = -1;
+static int hf_marvell_ie_mesh_version = -1;
+static int hf_marvell_ie_mesh_active_proto_id = -1;
+static int hf_marvell_ie_mesh_active_metric_id = -1;
+static int hf_marvell_ie_mesh_cap = -1;
+static int hf_marvell_ie_data = -1;
+
 /*QBSS - Version 1,2,802.11e*/
 
 static int hf_qbss2_cal = -1;
@@ -1322,6 +1498,9 @@ static int cf_ipv6_src = -1;
 static int cf_ipv6_dst = -1;
 static int cf_flow = -1;
 static int cf_tag_type = -1;
+static int cf_aruba = -1;
+static int cf_aruba_hb_seq = -1;
+static int cf_aruba_mtu = -1;
 
 /* ************************************************************************* */
 /*                               Protocol trees                              */
@@ -1368,6 +1547,8 @@ static gint ett_ht_info_delimiter3_tree = -1;
 static gint ett_tag_measure_request_tree = -1;
 /*** End: 802.11n D1.10 - Tag Measure Request IE  - Dustin Johnson ***/
 
+static gint ett_tag_ex_cap = -1;
+
 /*** Begin: Supported Channels Tag - Dustin Johnson ***/
 static gint ett_tag_supported_channels = -1;
 /*** End: Supported Channels Tag - Dustin Johnson ***/
@@ -1387,9 +1568,9 @@ static gint ett_ff_ba_ssc_tree = -1;
 static gint ett_ff_delba_param_tree = -1;
 /*** End: DELBA Parameter Set Fixed Field - Dustin Johnson ***/
 
-/*** Begin: QoS Inforamtion AP/STA Fixed Field - Dustin Johnson ***/
+/*** Begin: QoS Information AP/STA Fixed Field - Dustin Johnson ***/
 static gint ett_ff_qos_info = -1;
-/*** End: QoS Inforamtion AP/STA Fixed Field - Dustin Johnson ***/
+/*** End: QoS Information AP/STA Fixed Field - Dustin Johnson ***/
 
 /*** Begin: Spatial Multiplexing (SM) Power Control - Dustin Johnson ***/
 static gint ett_ff_sm_pwr_save = -1;
@@ -1426,15 +1607,24 @@ static gint ett_ff_psmp_sta_info = -1;
 /*** Begin: A-MSDU Dissection - Dustin Johnson ***/
 static gint ett_msdu_aggregation_parent_tree = -1;
 static gint ett_msdu_aggregation_subframe_tree = -1;
-static gint ett_msdu_aggregation_msdu_tree = -1;
 /*** End: A-MSDU Dissection - Dustin Johnson ***/
 
+/***  Begin: WAVE Service information element Dissection - IEEE 802.11p Draft 4.0 ***/
+static gint ett_pst_tree = -1;
+static gint ett_pst_cap_tree = -1;
+static gint ett_chan_noc_tree = -1;
+static gint ett_wave_chnl_tree = -1;
+
+/***  End: WAVE Service information element Dissection - IEEE 802.11p Draft 4.0 ***/
+
 static gint ett_80211_mgt_ie = -1;
 static gint ett_tsinfo_tree = -1;
 static gint ett_sched_tree = -1;
 
 static gint ett_fcs = -1;
 
+static gint ett_radio = -1;
+
 static const fragment_items frag_items = {
   &ett_fragment,
   &ett_fragments,
@@ -1456,10 +1646,12 @@ static enum_val_t wlan_ignore_wep_options[] = {
   { NULL,         NULL,               0                     }
 };
 
+static dissector_handle_t ieee80211_handle;
 static dissector_handle_t llc_handle;
 static dissector_handle_t ipx_handle;
 static dissector_handle_t eth_withoutfcs_handle;
 static dissector_handle_t data_handle;
+static dissector_handle_t wlancap_handle;
 
 static int wlan_tap = -1;
 
@@ -1761,14 +1953,12 @@ capture_ieee80211_common (const guchar * pd, int offset, int len,
 
   fcf = pletohs (&pd[offset]);
 
-  if (IS_PROTECTED(FCF_FLAGS(fcf)) && wlan_ignore_wep == WLAN_IGNORE_WEP_NO)
-    {
-      ld->other++;
-      return;
-    }
+  if (IS_PROTECTED(FCF_FLAGS(fcf)) && wlan_ignore_wep == WLAN_IGNORE_WEP_NO) {
+    ld->other++;
+    return;
+  }
 
-  switch (COMPOSE_FRAME_TYPE (fcf))
-    {
+  switch (COMPOSE_FRAME_TYPE (fcf)) {
 
     case DATA:          /* We got a data frame */
     case DATA_CF_ACK:   /* Data with ACK */
@@ -1788,27 +1978,62 @@ capture_ieee80211_common (const guchar * pd, int offset, int len,
          and just stick the payload into an 802.11 frame.  I've seen
          captures that show frames of that sort.
 
-         This means we have to do the same check for Netware 802.3 -
-         or, if you will, "Netware 802.11" - that we do in the
-         Ethernet dissector, i.e. checking for 0xffff as the first
-         four bytes of the payload and, if we find it, treating it
-         as an IPX frame. */
+         We also handle some odd form of encapsulation in which a
+         complete Ethernet frame is encapsulated within an 802.11
+         data frame, with no 802.2 header.  This has been seen
+         from some hardware.
+
+         On top of that, at least at some point it appeared that
+         the OLPC XO sent out frames with two bytes of 0 between
+         the "end" of the 802.11 header and the beginning of
+         the payload.
+
+         So, if the packet doesn't start with 0xaa 0xaa:
+
+           we first use the same scheme that linux-wlan-ng does to detect
+           those encapsulated Ethernet frames, namely looking to see whether
+           the frame either starts with 6 octets that match the destination
+           address from the 802.11 header or has 6 octets that match the
+           source address from the 802.11 header following the first 6 octets,
+           and, if so, treat it as an encapsulated Ethernet frame;
+
+           otherwise, we use the same scheme that we use in the Ethernet
+           dissector to recognize Netware 802.3 frames, namely checking
+           whether the packet starts with 0xff 0xff and, if so, treat it
+           as an encapsulated IPX frame, and then check whether the
+           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++;
         return;
       }
-      if (pd[offset+hdr_length] == 0xff && pd[offset+hdr_length+1] == 0xff) {
-        capture_ipx (ld);
+      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;
+          }
+        }
+#endif
+        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)
+          capture_llc (pd, offset + hdr_length + 2, len, ld);
       }
       else {
         capture_llc (pd, offset + hdr_length, len, ld);
       }
       break;
+    }
 
     default:
       ld->other++;
       break;
-    }
   }
 }
 
@@ -1850,6 +2075,128 @@ capture_ieee80211_ht (const guchar * pd, int offset, int len, packet_counts * ld
   capture_ieee80211_common (pd, offset, len, ld, FALSE, FALSE, TRUE);
 }
 
+#define WLANCAP_MAGIC_COOKIE_BASE 0x80211000
+#define WLANCAP_MAGIC_COOKIE_V1 0x80211001
+#define WLANCAP_MAGIC_COOKIE_V2 0x80211002
+
+/*
+ * Prism II-based wlan devices have a monitoring mode that sticks
+ * a proprietary header on each packet with lots of good
+ * information.  This file is responsible for decoding that
+ * data.
+ *
+ * Support by Tim Newsham
+ *
+ * A value from the header.
+ *
+ * It appears from looking at the linux-wlan-ng and Prism II HostAP
+ * drivers, and various patches to the orinoco_cs drivers to add
+ * Prism headers, that:
+ *
+ *      the "did" identifies what the value is (i.e., what it's the value
+ *      of);
+ *
+ *      "status" is 0 if the value is present or 1 if it's absent;
+ *
+ *      "len" is the length of the value (always 4, in that code);
+ *
+ *      "data" is the value of the data (or 0 if not present).
+ *
+ * Note: all of those values are in the *host* byte order of the machine
+ * on which the capture was written.
+ */
+struct val_80211 {
+  unsigned int did;
+  unsigned short status, len;
+  unsigned int data;
+};
+
+/*
+ * Header attached during Prism monitor mode.
+ *
+ * At least according to one paper I've seen, the Prism 2.5 chip set
+ * provides:
+ *
+ *      RSSI (receive signal strength indication) is "the total power
+ *      received by the radio hardware while receiving the frame,
+ *      including signal, interfereence, and background noise";
+ *
+ *      "silence value" is "the total power observed just before the
+ *      start of the frame".
+ *
+ * None of the drivers I looked at supply the "rssi" or "sq" value,
+ * but they do supply "signal" and "noise" values, along with a "rate"
+ * value that's 1/5 of the raw value from what is presumably a raw
+ * HFA384x frame descriptor, with the comment "set to 802.11 units",
+ * which presumably means the units are 500 Kb/s.
+ *
+ * I infer from the current NetBSD "wi" driver that "signal" and "noise"
+ * are adjusted dBm values, with the dBm value having 100 added to it
+ * for the Prism II cards (although the NetBSD code has an XXX comment
+ * for the #define for WI_PRISM_DBM_OFFSET) and 149 (with no XXX comment)
+ * for the Orinoco cards.
+ *
+ * XXX - what about other drivers that supply Prism headers, such as
+ * old versions of the MadWifi driver?
+ */
+struct prism_hdr {
+  unsigned int msgcode, msglen;
+  char devname[16];
+  struct val_80211 hosttime, mactime, channel, rssi, sq, signal,
+    noise, rate, istx, frmlen;
+};
+
+void
+capture_prism(const guchar *pd, int offset, int len, packet_counts *ld)
+{
+  guint32 cookie;
+
+  if (!BYTES_ARE_IN_FRAME(offset, len, sizeof(guint32))) {
+    ld->other++;
+    return;
+  }
+
+  /* Some captures with DLT_PRISM have the AVS WLAN header */
+  cookie = pntohl(pd);
+  if ((cookie == WLANCAP_MAGIC_COOKIE_V1) ||
+      (cookie == WLANCAP_MAGIC_COOKIE_V2)) {
+    capture_wlancap(pd, offset, len, ld);
+    return;
+  }
+
+  /* Prism header */
+  if (!BYTES_ARE_IN_FRAME(offset, len, (int)sizeof(struct prism_hdr))) {
+    ld->other++;
+    return;
+  }
+  offset += sizeof(struct prism_hdr);
+
+  /* 802.11 header follows */
+  capture_ieee80211(pd, offset, len, ld);
+}
+
+void
+capture_wlancap(const guchar *pd, int offset, int len, packet_counts *ld)
+{
+  guint32 length;
+
+  if (!BYTES_ARE_IN_FRAME(offset, len, sizeof(guint32)*2)) {
+    ld->other++;
+    return;
+  }
+
+  length = pntohl(pd+sizeof(guint32));
+
+  if (!BYTES_ARE_IN_FRAME(offset, len, length)) {
+    ld->other++;
+    return;
+  }
+
+  offset += length;
+
+  /* 802.11 header follows */
+  capture_ieee80211(pd, offset, len, ld);
+}
 
 /* ************************************************************************* */
 /*          Add the subtree used to store the fixed parameters               */
@@ -1878,7 +2225,7 @@ get_tagged_parameter_tree (proto_tree * tree, tvbuff_t *tvb, int start, int size
   tagged_fields = proto_tree_add_uint_format (tree, hf_tagged_parameters,
     tvb,
     start,
-    size,
+    2,
     size,
     "Tagged parameters (%d bytes)",
     size);
@@ -1887,6 +2234,95 @@ get_tagged_parameter_tree (proto_tree * tree, tvbuff_t *tvb, int start, int size
 }
 
 
+static int
+dissect_vendor_action_marvell (proto_tree *tree, tvbuff_t *tvb, int offset)
+{
+  guint8 octet;
+
+  octet = tvb_get_guint8(tvb, offset);
+  proto_tree_add_item (tree, ff_marvell_action_type, tvb, offset, 1, TRUE);
+  offset++;
+  switch (octet)
+    {
+      case MRVL_ACTION_MESH_MANAGEMENT:
+        octet = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item (tree, ff_marvell_mesh_mgt_action_code, tvb, offset, 1, TRUE);
+        offset++;
+        switch (octet)
+          {
+            case MRVL_MESH_MGMT_ACTION_RREQ:
+              proto_tree_add_item (tree, ff_mesh_mgt_length, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_mode, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_hopcount, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_ttl, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_rreqid, tvb, offset, 4, TRUE);
+              offset+= 4;
+              proto_tree_add_item (tree, ff_mesh_mgt_sa, tvb, offset, 6, FALSE);
+              offset+= 6;
+              proto_tree_add_item (tree, ff_mesh_mgt_ssn, tvb, offset, 4, TRUE);
+              offset+= 4;
+              proto_tree_add_item (tree, ff_mesh_mgt_lifetime, tvb, offset, 4, TRUE);
+              offset+= 4;
+              proto_tree_add_item (tree, ff_mesh_mgt_metric, tvb, offset, 4, TRUE);
+              offset+= 4;
+              proto_tree_add_item (tree, ff_mesh_mgt_dstcount, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_flags, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_da, tvb, offset, 6, FALSE);
+              offset+= 6;
+              proto_tree_add_item (tree, ff_mesh_mgt_dsn, tvb, offset, 4, TRUE);
+              offset+= 4;
+              break;
+            case MRVL_MESH_MGMT_ACTION_RREP:
+              proto_tree_add_item (tree, ff_mesh_mgt_length, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_mode, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_hopcount, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_ttl, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_da, tvb, offset, 6, FALSE);
+              offset+= 6;
+              proto_tree_add_item (tree, ff_mesh_mgt_dsn, tvb, offset, 4, TRUE);
+              offset+= 4;
+              proto_tree_add_item (tree, ff_mesh_mgt_lifetime, tvb, offset, 4, TRUE);
+              offset+= 4;
+              proto_tree_add_item (tree, ff_mesh_mgt_metric, tvb, offset, 4, TRUE);
+              offset+= 4;
+              proto_tree_add_item (tree, ff_mesh_mgt_sa, tvb, offset, 6, FALSE);
+              offset+= 6;
+              proto_tree_add_item (tree, ff_mesh_mgt_ssn, tvb, offset, 4, TRUE);
+              offset+= 4;
+              break;
+            case MRVL_MESH_MGMT_ACTION_RERR:
+              proto_tree_add_item (tree, ff_mesh_mgt_length, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_mode, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_dstcount, tvb, offset, 1, TRUE);
+              offset++;
+              proto_tree_add_item (tree, ff_mesh_mgt_da, tvb, offset, 6, FALSE);
+              offset+= 6;
+              proto_tree_add_item (tree, ff_mesh_mgt_dsn, tvb, offset, 4, TRUE);
+              offset+= 4;
+              break;
+            default:
+              break;
+          }
+        break;
+      default:
+        break;
+    }
+
+  return offset;
+}
+
 /* ************************************************************************* */
 /*              Dissect and add fixed mgmt fields to protocol tree           */
 /* ************************************************************************* */
@@ -1928,7 +2364,7 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
         proto_tree_add_double_format (tree, ff_beacon_interval, tvb, offset, 2,
           temp_double,"Beacon Interval: %f [Seconds]", temp_double);
         if (check_col (g_pinfo->cinfo, COL_INFO)) {
-          col_append_fstr(g_pinfo->cinfo, COL_INFO, ",BI=%d", capability);
+          col_append_fstr(g_pinfo->cinfo, COL_INFO, ", BI=%d", capability);
         }
         length += 2;
         break;
@@ -2060,7 +2496,7 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
         param_item = proto_tree_add_uint(tree, ff_block_ack_params, tvb, offset, 2, params);
         param_tree = proto_item_add_subtree (param_item, ett_ff_ba_param_tree);
 
-        proto_tree_add_boolean(param_tree, ff_block_ack_params_amsdu_premitted, tvb, offset, 1, params);
+        proto_tree_add_boolean(param_tree, ff_block_ack_params_amsdu_permitted, tvb, offset, 1, params);
         proto_tree_add_boolean(param_tree, ff_block_ack_params_policy, tvb, offset, 1, params);
         proto_tree_add_uint(param_tree, ff_block_ack_params_tid, tvb, offset, 1, params);
         proto_tree_add_uint(param_tree, ff_block_ack_params_buffer_size, tvb, offset, 2, params);
@@ -2187,7 +2623,7 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
 
     /*** Begin: Measurement Pilot Interval Fixed Field - Dustin Johnson ***/
     case FIELD_MEASUREMENT_PILOT_INT:
-      proto_tree_add_uint(tree, ff_measurment_pilot_int, tvb, offset, 2, tvb_get_letohs (tvb, offset));
+      proto_tree_add_uint(tree, ff_measurement_pilot_int, tvb, offset, 2, tvb_get_letohs (tvb, offset));
       length +=2;
       break;
     /*** End: Measurement Pilot Interval Fixed Field - Dustin Johnson ***/
@@ -2231,7 +2667,7 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
       break;
     /*** End: Channel Width Fixed Field - Dustin Johnson ***/
 
-    /*** Begin: QoS Inforamtion AP Fixed Field - Dustin Johnson ***/
+    /*** Begin: QoS Information AP Fixed Field - Dustin Johnson ***/
     case FIELD_QOS_INFO_AP:
       {
         guint8 info;
@@ -2251,9 +2687,9 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
         length +=1;
         break;
       }
-    /*** End: QoS Inforamtion AP Fixed Field - Dustin Johnson ***/
+    /*** End: QoS Information AP Fixed Field - Dustin Johnson ***/
 
-    /*** Begin: QoS Inforamtion STA Fixed Field - Dustin Johnson ***/
+    /*** Begin: QoS Information STA Fixed Field - Dustin Johnson ***/
     case FIELD_QOS_INFO_STA:
       {
         guint8 info;
@@ -2276,7 +2712,7 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
         length +=1;
         break;
       }
-    /*** End: QoS Inforamtion STA Fixed Field - Dustin Johnson ***/
+    /*** End: QoS Information STA Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Spatial Multiplexing (SM) Power Control - Dustin Johnson ***/
     case FIELD_SM_PWR_CNTRL:
@@ -2644,8 +3080,7 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
                   {
                     case BA_ADD_BLOCK_ACK_REQUEST:
                       {
-                        guint start = 0;
-                        start = offset;
+                        guint start = offset;
 
                         offset += add_fixed_field(action_tree, tvb, offset, FIELD_CATEGORY_CODE);
                         offset += add_fixed_field(action_tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
@@ -2658,8 +3093,7 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
                       }
                     case BA_ADD_BLOCK_ACK_RESPONSE:
                       {
-                        guint start = 0;
-                        start = offset;
+                        guint start = offset;
 
                         offset += add_fixed_field(action_tree, tvb, offset, FIELD_CATEGORY_CODE);
                         offset += add_fixed_field(action_tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
@@ -2672,8 +3106,7 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
                       }
                     case BA_DELETE_BLOCK_ACK:
                       {
-                        guint start = 0;
-                        start = offset;
+                        guint start = offset;
 
                         offset += add_fixed_field(action_tree, tvb, offset, FIELD_CATEGORY_CODE);
                         offset += add_fixed_field(action_tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
@@ -2688,8 +3121,7 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
 
             case CAT_MGMT_NOTIFICATION:  /* Management notification frame */
               {
-                guint start = 0;
-                start = offset;
+                guint start = offset;
 
                 offset += add_fixed_field(action_tree, tvb, offset, FIELD_CATEGORY_CODE);
                 offset += add_fixed_field(action_tree, tvb, offset, FIELD_WME_ACTION_CODE);
@@ -2699,6 +3131,31 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
                 break;
               }
 
+            case CAT_VENDOR_SPECIFIC:  /* Vendor Specific Category */
+              {
+                guint start = offset;
+                guint32 oui;
+                const guint8 *tag_data_ptr;
+
+                offset += add_fixed_field(action_tree, tvb, offset, FIELD_CATEGORY_CODE);
+                oui = tvb_get_ntoh24(tvb, offset);
+                tag_data_ptr = tvb_get_ptr(tvb, offset, 3);
+                proto_tree_add_bytes_format (action_tree, tag_oui, tvb, offset, 3,
+                                             tag_data_ptr, "Vendor: %s", get_manuf_name(tag_data_ptr));
+                offset += 3;
+                switch (oui)
+                  {
+                    case OUI_MARVELL:
+                      offset = dissect_vendor_action_marvell (action_tree, tvb, offset);
+                      break;
+                    default:
+                      /* Don't know how to handle this vendor */
+                      break;
+                  }/* switch(oui) */
+                length = offset - start;  /* Size of fixed fields */
+                break;
+              }/* Case vendor specific */
+
             case CAT_HT:
               {
                 guint start = 0;
@@ -2769,7 +3226,7 @@ add_fixed_field(proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
                       break;
 
                     default:
-                      /* Unkown */
+                      /* Unknown */
                       break;
                   }
                 length = offset - start;
@@ -2805,26 +3262,27 @@ static const value_string wpa_keymgmt_vals[] =
   {0, NULL}
 };
 
+
 static void
-dissect_vendor_ie_wpawme(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_tvb)
+dissect_vendor_ie_wpawme(proto_item * item, proto_tree * tree, tvbuff_t * tag_tvb)
 {
   gint tag_off = 0;
-  gint tag_len = tvb_length_remaining(tag_tvb, 0);
+  gint tag_len = tvb_length(tag_tvb);
   gchar out_buff[SHORT_STR];
   guint i, byte1, byte2;
 
   /* Wi-Fi Protected Access (WPA) Information Element */
   if (tag_off + 6 <= tag_len && !tvb_memeql(tag_tvb, tag_off, WPA_OUI"\x01", 4)) {
     g_snprintf(out_buff, SHORT_STR, "WPA IE, type %u, version %u",
-    tvb_get_guint8(tag_tvb, tag_off + 3), tvb_get_letohs(tag_tvb, tag_off + 4));
+      tvb_get_guint8(tag_tvb, tag_off + 3), tvb_get_letohs(tag_tvb, tag_off + 4));
     proto_tree_add_string(tree, tag_interpretation, tag_tvb, tag_off, 6, out_buff);
     tag_off += 6;
     if (tag_off + 4 <= tag_len) {
       /* multicast cipher suite */
       if (!tvb_memeql(tag_tvb, tag_off, WPA_OUI, 3)) {
         g_snprintf(out_buff, SHORT_STR, "Multicast cipher suite: %s",
-        val_to_str(tvb_get_guint8(tag_tvb, tag_off + 3), wpa_cipher_vals,
-          "UNKNOWN"));
+          val_to_str(tvb_get_guint8(tag_tvb, tag_off + 3), wpa_cipher_vals,
+            "UNKNOWN"));
         proto_tree_add_string(tree, tag_interpretation, tag_tvb, tag_off, 4,
           out_buff);
         tag_off += 4;
@@ -2841,7 +3299,7 @@ dissect_vendor_ie_wpawme(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_
               g_snprintf(out_buff, SHORT_STR,
                 "Unicast cipher suite %u: %s", i,
                 val_to_str(tvb_get_guint8(tag_tvb, tag_off + 3),
-                wpa_cipher_vals, "UNKNOWN"));
+                  wpa_cipher_vals, "UNKNOWN"));
               proto_tree_add_string(tree, tag_interpretation, tag_tvb, tag_off, 4,
                 out_buff);
               tag_off += 4;
@@ -2863,7 +3321,7 @@ dissect_vendor_ie_wpawme(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_
                 g_snprintf(out_buff, SHORT_STR,
                   "auth key management suite %u: %s", i,
                   val_to_str(tvb_get_guint8(tag_tvb, tag_off + 3),
-                  wpa_keymgmt_vals, "UNKNOWN"));
+                    wpa_keymgmt_vals, "UNKNOWN"));
                 proto_tree_add_string(tree, tag_interpretation, tag_tvb, tag_off, 4,
                   out_buff);
                 tag_off += 4;
@@ -2879,7 +3337,7 @@ dissect_vendor_ie_wpawme(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_
     if (tag_off < tag_len)
       proto_tree_add_string(tree, tag_interpretation, tag_tvb,
         tag_off, tag_len - tag_off, "Not interpreted");
-      proto_item_append_text(ietree, ": WPA");
+      proto_item_append_text(item, ": WPA");
   } else if (tag_off + 7 <= tag_len && !tvb_memeql(tag_tvb, tag_off, WME_OUI"\x02\x00", 5)) {
     /* Wireless Multimedia Enhancements (WME) Information Element */
     g_snprintf(out_buff, SHORT_STR,
@@ -2888,7 +3346,7 @@ dissect_vendor_ie_wpawme(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_
       tvb_get_guint8(tag_tvb, tag_off+5), tvb_get_guint8(tag_tvb, tag_off+6));
     proto_tree_add_string(tree, tag_interpretation, tag_tvb, tag_off, 7,
       out_buff);
-    proto_item_append_text(ietree, ": WME");
+    proto_item_append_text(item, ": WME");
   } else if (tag_off + 24 <= tag_len && !tvb_memeql(tag_tvb, tag_off, WME_OUI"\x02\x01", 5)) {
     /* Wireless Multimedia Enhancements (WME) Parameter Element */
     g_snprintf(out_buff, SHORT_STR,
@@ -2903,30 +3361,31 @@ dissect_vendor_ie_wpawme(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_
       byte2 = tvb_get_guint8(tag_tvb, tag_off + 1);
       g_snprintf(out_buff, SHORT_STR,
         "WME AC Parameters: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
-         (byte1 & 0x60) >> 5, wme_acs[(byte1 & 0x60) >> 5],
+         (byte1 & 0x60) >> 5, match_strval((byte1 & 0x60) >> 5, wme_acs),
          (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
-         byte2 & 0x0f, byte2 & 0xf0 >> 4,
+         byte2 & 0x0f, (byte2 & 0xf0) >> 4,
          tvb_get_letohs(tag_tvb, tag_off + 2));
       proto_tree_add_string(tree, tag_interpretation, tag_tvb, tag_off, 4,
         out_buff);
       tag_off += 4;
     }
-    proto_item_append_text(ietree, ": WME");
+    proto_item_append_text(item, ": WME");
   } else if (tag_off + 56 <= tag_len && !tvb_memeql(tag_tvb, tag_off, WME_OUI"\x02\x02", 5)) {
     /* Wireless Multimedia Enhancements (WME) TSPEC Element */
     guint16 ts_info, msdu_size, surplus_bandwidth;
     const char *direction[] = { "Uplink", "Downlink", "Reserved", "Bi-directional" };
     const value_string fields[] = {
-      {12, "Minimum Service Interval"},
-      {16, "Maximum Service Interval"},
-      {20, "Inactivity Interval"},
-      {24, "Service Start Time"},
-      {28, "Minimum Data Rate"},
-      {32, "Mean Data Rate"},
-      {36, "Maximum Burst Size"},
-      {40, "Minimum PHY Rate"},
-      {44, "Peak Data Rate"},
-      {48, "Delay Bound"},
+      {13, "Minimum Service Interval"},
+      {17, "Maximum Service Interval"},
+      {21, "Inactivity Interval"},
+      {25, "Suspension Interval"},
+      {29, "Service Start Time"},
+      {33, "Minimum Data Rate"},
+      {37, "Mean Data Rate"},
+      {41, "Peak Data Rate"},
+      {45, "Maximum Burst Size"},
+      {49, "Delay Bound"},
+      {53, "Minimum PHY Rate"},
       {0, NULL}
     };
     const char *field;
@@ -2946,9 +3405,9 @@ dissect_vendor_ie_wpawme(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_
       byte1, qos_tags[byte1], qos_acs[byte1],
       (ts_info & 0x0080) ? "" : "not ",
       direction[(ts_info >> 5) & 0x3]);
-    proto_tree_add_string(tree, tag_interpretation, tag_tvb, tag_off, 2,
+    proto_tree_add_string(tree, tag_interpretation, tag_tvb, tag_off, 3,
       out_buff);
-    tag_off += 2;
+    tag_off += 3;
 
     msdu_size = tvb_get_letohs(tag_tvb, tag_off);
     g_snprintf(out_buff, SHORT_STR,
@@ -2970,7 +3429,7 @@ dissect_vendor_ie_wpawme(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_
       proto_tree_add_string(tree, tag_interpretation, tag_tvb, tag_off, 4,
         out_buff);
       tag_off += 4;
-      if (tag_off == 52)
+      if (tag_off == 57)
         break;
     }
 
@@ -2987,15 +3446,18 @@ dissect_vendor_ie_wpawme(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_
     proto_tree_add_string(tree, tag_interpretation, tag_tvb, tag_off, 2,
       out_buff);
     tag_off += 2;
-    proto_item_append_text(ietree, ": WME");
+    proto_item_append_text(item, ": WME");
+  } else if (tag_off + 6 <= tag_len && !tvb_memeql(tag_tvb, tag_off, WPA_OUI"\x04", 4)) {
+    dissect_wps_tlvs(item, tag_tvb, tag_off+4, tag_len-4, NULL);
+    proto_item_append_text(item, ": WPS");
   }
 }
 
 static void
-dissect_vendor_ie_rsn(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_tvb)
+dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tag_tvb)
 {
   guint tag_off = 0;
-  guint tag_len = tvb_length_remaining(tag_tvb, 0);
+  guint tag_len = tvb_length(tag_tvb);
   guint pmkid_len = tag_len - 4;
   char out_buff[SHORT_STR], valid_str[SHORT_STR] = "";
 
@@ -3011,7 +3473,42 @@ dissect_vendor_ie_rsn(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_tvb
     proto_tree_add_string(tree, tag_interpretation, tag_tvb, 0,
       tag_len, out_buff);
   }
-  proto_item_append_text(ietree, ": RSN");
+  proto_item_append_text(item, ": RSN");
+}
+
+typedef enum {
+  MARVELL_IE_MESH = 4
+} 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)
+{
+  guint8 type;
+
+  type = tvb_get_guint8(tvb, offset);
+  proto_tree_add_item (ietree, hf_marvell_ie_type, tvb, offset, 1, TRUE);
+  offset += 1;
+
+  switch (type) {
+  case MARVELL_IE_MESH:
+    proto_tree_add_item (ietree, hf_marvell_ie_mesh_subtype, tvb,
+                         offset++, 1, TRUE );
+    proto_tree_add_item (ietree, hf_marvell_ie_mesh_version, tvb,
+                         offset++, 1, TRUE );
+    proto_tree_add_item (ietree, hf_marvell_ie_mesh_active_proto_id, tvb,
+                         offset++, 1, TRUE );
+    proto_tree_add_item (ietree, hf_marvell_ie_mesh_active_metric_id, tvb,
+                         offset++, 1, TRUE );
+    proto_tree_add_item (ietree, hf_marvell_ie_mesh_cap, tvb,
+                         offset++, 1, TRUE );
+    break;
+
+  default:
+    proto_tree_add_item(ietree, hf_marvell_ie_data, tvb, offset,
+      tag_len - 1, FALSE);
+    break;
+  }
 }
 
 typedef enum {
@@ -3064,7 +3561,7 @@ dissect_vendor_ie_aironet(proto_item * aironet_item, proto_tree * ietree,
       proto_tree_add_bytes_format(ietree, hf_aironet_ie_qos_val, tvb, offset, 4,
         tvb_get_ptr(tvb, offset, 4),
           "CCX QoS Parameters??: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
-        (byte1 & 0x60) >> 5, wme_acs[(byte1 & 0x60) >> 5],
+        (byte1 & 0x60) >> 5, match_strval((byte1 & 0x60) >> 5, wme_acs),
         (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
         byte2 & 0x0f, (byte2 & 0xf0) >> 4,
         txop);
@@ -3093,7 +3590,7 @@ static void
 dissect_rsn_ie(proto_tree * tree, tvbuff_t * tag_tvb)
 {
   guint tag_off = 0;
-  guint tag_len = tvb_length_remaining(tag_tvb, 0);
+  guint tag_len = tvb_length(tag_tvb);
   guint16 rsn_capab;
   char out_buff[SHORT_STR];
   int i, count;
@@ -3225,18 +3722,18 @@ dissect_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean basic, gbo
   bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
 
   /* Bits 0 - 31 */
-  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_0to7, tvb, offset, 1, TRUE);
-  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_8to15, tvb, offset + 1, 1, TRUE);
-  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_16to23, tvb, offset + 2, 1, TRUE);
-  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_24to31, tvb, offset + 3, 1, TRUE);
+  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_0to7, tvb, offset, 4, TRUE);
+  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_8to15, tvb, offset, 4, TRUE);
+  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_16to23, tvb, offset, 4, TRUE);
+  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_24to31, tvb, offset, 4, TRUE);
 
   /* Bits 32 - 52 */
-  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_32, tvb, offset + 4, 1, TRUE);
-  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_33to38, tvb, offset + 4, 1, TRUE);
-  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_39to52, tvb, offset + 4, 3, TRUE);
+  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_32, tvb, offset + 4, 4, TRUE);
+  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_33to38, tvb, offset + 4, 4, TRUE);
+  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_39to52, tvb, offset + 4, 4, TRUE);
 
   /* Bits 53 - 76 */
-  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_53to76, tvb, offset + 6, 3, TRUE);
+  proto_tree_add_item(bit_tree, mcsset_rx_bitmask_53to76, tvb, offset + 6, 4, TRUE);
 
   capability = tvb_get_letohs (tvb, offset+10);
   proto_tree_add_uint_format(mcs_tree, mcsset_highest_data_rate, tvb, offset + 10, 2,
@@ -3341,6 +3838,101 @@ dissect_ht_info_ie_1_1(proto_tree * tree, tvbuff_t * tvb, int offset,
   }
 }
 
+/***  WAVE Service information element Dissection - IEEE 802.11p Draft 4.0 ***/
+static void
+dissect_wsie_ie(proto_tree * tree, tvbuff_t * tvb, int offset, guint32 tag_len _U_)
+{
+  proto_item *pst_item, *cap_item, *chan_noc_item, *chnl_item;
+  proto_tree *pst_tree, *cap_tree, *chan_noc_tree, *chnl_tree;
+
+  guint8 providercount, pst_contents, pst_acm_length;
+  int i;
+  guint16 pst_length = 0;
+  guint16 chan_noc;
+  guint8 chan_length = 0;
+  int local_offset;
+
+  proto_tree_add_item(tree, hf_pst_timingquality, tvb, offset, 2, TRUE);
+  offset+=2;
+
+  providercount = tvb_get_guint8 (tvb, offset);
+  pst_item = proto_tree_add_item(tree, hf_pst_providercount, tvb, offset, 1, TRUE);
+  pst_tree = proto_item_add_subtree(pst_item,ett_pst_tree);
+  offset++;
+
+  for (i=0;i<providercount;i++) {
+
+    local_offset = offset;
+    cap_item = proto_tree_add_text (pst_tree, tvb, local_offset, pst_length, "Capabilities of Provider :%u", i+1);
+    cap_tree = proto_item_add_subtree(cap_item, ett_pst_cap_tree);
+
+    pst_length = tvb_get_letohl(tvb, local_offset);
+    proto_tree_add_item(cap_tree, hf_pst_length, tvb, local_offset, 2, TRUE);
+    local_offset+=2;
+
+    pst_contents = tvb_get_guint8 (tvb, local_offset);
+    proto_tree_add_item(cap_tree, hf_pst_contents, tvb, local_offset, 1, TRUE);
+    local_offset++;
+
+    if (pst_contents & WAVE_ACID) {
+      proto_tree_add_item(cap_tree, hf_pst_acid, tvb, local_offset, 1, TRUE);
+      local_offset++;
+    }
+
+    if (pst_contents & WAVE_ACM) {
+      pst_acm_length = tvb_get_guint8 (tvb, local_offset);
+      proto_tree_add_item(cap_tree, hf_pst_acm_length, tvb, local_offset, 1, TRUE);
+      local_offset++;
+      proto_tree_add_item(cap_tree, hf_pst_acm, tvb, local_offset, pst_acm_length, FALSE);
+    }
+    if (pst_contents & WAVE_ACF) {
+      local_offset +=32;
+    }
+    if (pst_contents & WAVE_PRIORITY) {
+      proto_tree_add_item(cap_tree, hf_pst_priority, tvb, local_offset, 1, TRUE);
+      local_offset++;
+    }
+    if (pst_contents & WAVE_IPV6ADDR) {
+      proto_tree_add_item(cap_tree, hf_pst_ipv6addr, tvb, local_offset, 16, FALSE);
+      local_offset +=16;
+      proto_tree_add_item(cap_tree, hf_pst_serviceport, tvb, local_offset, 2, FALSE);
+      local_offset +=2;
+      proto_tree_add_item(cap_tree, hf_pst_addressing, tvb, local_offset, 1, FALSE);
+      local_offset++;
+    }
+    if (pst_contents & WAVE_PEERMAC) {
+      proto_tree_add_item(cap_tree, hf_pst_macaddr, tvb, local_offset, 6, FALSE);
+      local_offset +=6;
+    }
+    if (pst_contents & WAVE_CHANNEL) {
+      proto_tree_add_item(cap_tree, hf_pst_channel, tvb, local_offset, 1, FALSE);
+      local_offset++;
+    }
+
+    offset = offset + pst_length;
+  }
+
+  chan_noc = tvb_get_guint8 (tvb, offset);
+  chan_noc_item = proto_tree_add_item(tree, hf_chan_noc, tvb, offset, 1, TRUE);
+  chan_noc_tree = proto_item_add_subtree(chan_noc_item,ett_chan_noc_tree);
+  offset++;
+
+  if (chan_noc != 0){
+    for (i=0;i<chan_noc;i++) {
+      chan_length = tvb_get_guint8 (tvb, offset);
+      chnl_item = proto_tree_add_text (chan_noc_tree, tvb, offset, chan_length, "Channel :%u Information ", i+1);
+      chnl_tree = proto_item_add_subtree(chnl_item, ett_wave_chnl_tree);
+      proto_tree_add_item(chnl_tree, hf_chan_length, tvb, offset, 1, TRUE);
+      proto_tree_add_item(chnl_tree, hf_chan_content, tvb, offset+1, 1, TRUE);
+      proto_tree_add_item(chnl_tree, hf_chan_channel, tvb, offset+2, 1, TRUE);
+      proto_tree_add_item(chnl_tree, hf_chan_adapt, tvb, offset+3, 1, TRUE);
+      proto_tree_add_item(chnl_tree, hf_chan_rate, tvb, offset+4, 1, TRUE);
+      proto_tree_add_item(chnl_tree, hf_chan_tx_pow, tvb, offset+5, 1, TRUE);
+      offset = offset + chan_length;
+    }
+  }
+}
+
 /*** Begin: Secondary Channel Offset Tag - Dustin Johnson ***/
 static void secondary_channel_offset_ie(proto_tree * tree, tvbuff_t * tvb, int offset, guint32 tag_len)
 {
@@ -3358,7 +3950,7 @@ static void secondary_channel_offset_ie(proto_tree * tree, tvbuff_t * tvb, int o
   offset++;
   if ((tag_len - (offset-tag_offset)) > 0)
   {
-    proto_tree_add_text (tree, tvb, offset, tag_len - (offset-tag_offset), "Unkown Data");
+    proto_tree_add_text (tree, tvb, offset, tag_len - (offset-tag_offset), "Unknown Data");
     return;
   }
 }
@@ -3386,6 +3978,9 @@ dissect_ht_capability_ie(proto_tree * tree, tvbuff_t * tvb, int offset,
     return;
   }
 
+  if (wlan_ignore_draft_ht && vs)
+    return;
+
   /* 2 byte HT Capabilities  Info*/
   capability = tvb_get_letohs (tvb, offset);
   cap_item = proto_tree_add_item(tree, vs ? ht_vs_cap : ht_cap, tvb,
@@ -3428,13 +4023,17 @@ dissect_ht_capability_ie(proto_tree * tree, tvbuff_t * tvb, int offset,
   cap_item = proto_tree_add_item(tree, vs ? ampduparam_vs : ampduparam, tvb,
                     offset, 1, TRUE);
   cap_tree = proto_item_add_subtree(cap_item, ett_ampduparam_tree);
-  proto_tree_add_uint_format(cap_tree, ampduparam_mpdu, tvb, offset, 1, capability, decode_numeric_bitfield(capability, 0x03, 8,"Maximum Rx A-MPDU Length: %%04.0Lf [Bytes]"), pow(2,13+(capability & 0x3))-1);
+  proto_tree_add_uint_format(cap_tree, ampduparam_mpdu, tvb, offset, 1, capability,
+                             "%sMaximum Rx A-MPDU Length: %04.0f [Bytes]",
+                             decode_numeric_bitfield(capability, 0x03, 8, ""),
+                             pow(2,13+(capability & 0x3))-1);
   proto_tree_add_uint(cap_tree, ampduparam_mpdu_start_spacing, tvb, offset, 1, capability);
   proto_tree_add_uint(cap_tree, ampduparam_reserved, tvb, offset, 1, capability);
   offset += 1;
   tag_val_off += 1;
 
-  dissect_mcs_set(cap_tree, tvb, offset, FALSE, vs);
+  /* 16 byte MCS set */
+  dissect_mcs_set(tree, tvb, offset, FALSE, vs);
   offset += 16;
   tag_val_off += 16;
 
@@ -3558,6 +4157,9 @@ dissect_ht_info_ie_1_0(proto_tree * tree, tvbuff_t * tvb, int offset,
     return;
   }
 
+  if (wlan_ignore_draft_ht)
+    return;
+
   g_snprintf(out_buff, SHORT_STR, "Control Channel %d",
              tvb_get_guint8(tvb, offset));
   proto_tree_add_string(tree, tag_interpretation, tvb, offset, 1, out_buff);
@@ -3710,7 +4312,7 @@ dissect_frame_control(proto_tree * tree, tvbuff_t * tvb, gboolean wlan_broken_fc
 {
   guint16 fcf, flags, frame_type_subtype;
   proto_tree *fc_tree, *flag_tree;
-  proto_item *fc_item, *flag_item;
+  proto_item *fc_item, *flag_item, *hidden_item;
 
   fcf = FETCH_FCF(offset);
 
@@ -3743,8 +4345,10 @@ dissect_frame_control(proto_tree * tree, tvbuff_t * tvb, gboolean wlan_broken_fc
   flag_tree = proto_item_add_subtree (flag_item, ett_proto_flags);
   proto_tree_add_uint (flag_tree, hf_fc_data_ds, tvb, wlan_broken_fc?offset:offset+1, 1,
     FLAGS_DS_STATUS (flags));
-  proto_tree_add_boolean_hidden (flag_tree, hf_fc_to_ds, tvb, offset+1, 1, flags);
-  proto_tree_add_boolean_hidden (flag_tree, hf_fc_from_ds, tvb, offset+1, 1, flags);
+  hidden_item = proto_tree_add_boolean (flag_tree, hf_fc_to_ds, tvb, offset+1, 1, flags);
+  PROTO_ITEM_SET_HIDDEN(hidden_item);
+  hidden_item = proto_tree_add_boolean (flag_tree, hf_fc_from_ds, tvb, offset+1, 1, flags);
+  PROTO_ITEM_SET_HIDDEN(hidden_item);
   proto_tree_add_boolean (flag_tree, hf_fc_more_frag, tvb, wlan_broken_fc?offset:offset+1, 1,
     flags);
   proto_tree_add_boolean (flag_tree, hf_fc_retry, tvb, wlan_broken_fc?offset:offset+1, 1,
@@ -3760,33 +4364,28 @@ dissect_frame_control(proto_tree * tree, tvbuff_t * tvb, gboolean wlan_broken_fc
 }
 
 static void
-dissect_vendor_ie_ht(proto_tree * ietree, proto_tree * tree, tvbuff_t * tag_tvb)
+dissect_vendor_ie_ht(proto_item * item, proto_tree * tree, tvbuff_t * tag_tvb)
 {
-  gint tag_len = tvb_length_remaining(tag_tvb, 0);
-  gchar out_buff[SHORT_STR];
+  gint tag_len = tvb_length(tag_tvb);
 
-  g_snprintf(out_buff, SHORT_STR, "802.11n (Pre) OUI");
-  proto_tree_add_string(tree, tag_interpretation, tag_tvb, 0, 3, out_buff);
+  proto_tree_add_string(tree, tag_interpretation, tag_tvb, 0, 3, "802.11n (Pre) OUI");
   /* 802.11n OUI  Information Element */
   if (4 <= tag_len && !tvb_memeql(tag_tvb, 0, PRE_11N_OUI"\x33", 4)) {
-    g_snprintf(out_buff, SHORT_STR, "802.11n (Pre) HT information");
-    proto_tree_add_string(tree, tag_interpretation, tag_tvb, 3, 1, out_buff);
+    proto_tree_add_string(tree, tag_interpretation, tag_tvb, 3, 1,"802.11n (Pre) HT information" );
 
     dissect_ht_capability_ie(tree, tag_tvb, 4, tag_len - 4, TRUE);
-    proto_item_append_text(ietree, ": HT Capabilities (802.11n D1.10)");
+    proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
   }
   else {
     if (4 <= tag_len && !tvb_memeql(tag_tvb, 0, PRE_11N_OUI"\x34", 4)) {
-      g_snprintf(out_buff, SHORT_STR, "HT additional information (802.11n D1.00)");
-      proto_tree_add_string(tree, tag_interpretation, tag_tvb, 3, 1, out_buff);
+      proto_tree_add_string(tree, tag_interpretation, tag_tvb, 3, 1, "HT additional information (802.11n D1.00)");
 
       dissect_ht_info_ie_1_0(tree, tag_tvb, 4, tag_len - 4);
-      proto_item_append_text(ietree, ": HT Additional Capabilities (802.11n D1.00)");
+      proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
     }
     else {
-        g_snprintf(out_buff, SHORT_STR, "Unknown type");
-        proto_tree_add_string(tree, tag_interpretation, tag_tvb, 3, 1, out_buff);
-        proto_item_append_text(ietree, ": 802.11n (pre) Unknown type");
+        proto_tree_add_string(tree, tag_interpretation, tag_tvb, 3, 1, "Unknown type");
+        proto_item_append_text(item, ": 802.11n (pre) Unknown type");
         proto_tree_add_string(tree, tag_interpretation, tag_tvb, 4,
                   tag_len - 4, "Not interpreted");
     }
@@ -3813,35 +4412,40 @@ static const value_string tag_num_vals[] = {
   { TAG_ERP_INFO_OLD,         "ERP Information" },
   { TAG_RSN_IE,               "RSN Information" },
   { TAG_EXT_SUPP_RATES,       "Extended Supported Rates" },
-  { TAG_CISCO_UNKNOWN_1,      "Cisco Unknown 1 + Device Name" },
-  { TAG_CISCO_UNKNOWN_2,      "Cisco Unknown 2" },
-  { TAG_CISCO_UNKNOWN_3,      "Cisco Unknown 3" },
+  { 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_VENDOR_SPECIFIC_IE,   "Vendor Specific" },
   { TAG_SYMBOL_PROPRIETARY,   "Symbol Proprietary"},
   { TAG_AGERE_PROPRIETARY,    "Agere Proprietary"},
-  { 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_TS_DELAY,          "TS Delay"},
-  { TAG_TCLAS_PROCESS,      "TCLAS Processing"},
-  { TAG_HT_CAPABILITY,    "HT Capabilities (802.11n D1.10)"},
+  { 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_TS_DELAY,             "TS Delay"},
+  { TAG_TCLAS_PROCESS,        "TCLAS Processing"},
+  { TAG_HT_CAPABILITY,        "HT Capabilities (802.11n D1.10)"},
   { TAG_NEIGHBOR_REPORT,      "Neighbor Report"},
-  { TAG_HT_INFO,           "HT Information (802.11n D1.10)"},
+  { TAG_HT_INFO,              "HT Information (802.11n D1.10)"},
   { TAG_SECONDARY_CHANNEL_OFFSET, "Secondary Channel Offset (802.11n D1.10)"},
-  { TAG_QOS_CAPABILITY,      "QoS Capability"},
-  { 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_WSIE,                     "Wave Service Information"}, /* www.aradasystems.com */
+  { 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_QOS_CAPABILITY,           "QoS Capability"},
+  { 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_EXTENDED_CAPABILITIES,    "Extended Capabilities"},
   #if 0 /*Not yet assigned tag numbers by ANA */
   { TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement"},
@@ -3870,25 +4474,34 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
   char out_buff[SHORT_STR];
   char print_buff[SHORT_STR];
   proto_tree * orig_tree=tree;
-  proto_item *ti;
+  proto_item *ti = NULL, *en;
+  guint8 tag_len_len; /* The length of the length parameter in bytes*/
 
   tag_no = tvb_get_guint8(tvb, offset);
-  tag_len = tvb_get_guint8(tvb, offset + 1);
+  if(tag_no == TAG_WSIE){
+    tag_len_len = 2;
+    tag_len = tvb_get_letohl(tvb, offset + 1);
+  }else{
+    tag_len_len = 1;
+    tag_len = tvb_get_guint8(tvb, offset + 1);
+  }
 
-  ti=proto_tree_add_text(orig_tree,tvb,offset,tag_len+2,"%s",
+  if (tree) {
+    ti=proto_tree_add_text(orig_tree,tvb,offset,tag_len+1+tag_len_len,"%s",
                          val_to_str(tag_no, tag_num_vals,
                          (tag_no >= 17 && tag_no <= 31) ?
                          "Reserved for challenge text" : "Reserved tag number" ));
-  tree=proto_item_add_subtree(ti,ett_80211_mgt_ie);
+    tree=proto_item_add_subtree(ti,ett_80211_mgt_ie);
 
-  proto_tree_add_uint_format (tree, tag_number, tvb, offset, 1, tag_no,
+    proto_tree_add_uint_format (tree, tag_number, tvb, offset, 1, tag_no,
             "Tag Number: %u (%s)",
             tag_no,
             val_to_str(tag_no, tag_num_vals,
                        (tag_no >= 17 && tag_no <= 31) ?
                        "Reserved for challenge text" :
                        "Reserved tag number"));
-  proto_tree_add_uint (tree, (tag_no==TAG_TIM ? tim_length : tag_length), tvb, offset + 1, 1, tag_len);
+  }
+  proto_tree_add_uint (tree, (tag_no==TAG_TIM ? tim_length : tag_length), tvb, offset + 1, tag_len_len, tag_len);
 
   switch (tag_no)
   {
@@ -3902,22 +4515,33 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
 #ifdef HAVE_AIRPDCAP
         AirPDcapSetLastSSID(&airpdcap_ctx, (CHAR *) ssid, tag_len);
 #endif
-        proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
+        ti = proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
                                tag_len, (char *) ssid);
         if (check_col (pinfo->cinfo, COL_INFO)) {
           if (tag_len > 0) {
-            col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID\"%s\"",
+            col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID=\"%s\"",
                             format_text(ssid, tag_len));
           } else {
-            col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID: Broadcast");
+            col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Broadcast");
           }
         }
+        if (tag_len > MAX_SSID_LEN) {
+          expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_ERROR,
+                                 "SSID length (%u) greater than maximum (%u)",
+                                 tag_len, MAX_SSID_LEN);
+        }
         if (tag_len > 0) {
           proto_item_append_text(ti, ": \"%s\"",
                                  format_text(ssid, tag_len));
+          memcpy(wlan_stats.ssid, ssid, MIN(tag_len, MAX_SSID_LEN));
+          wlan_stats.ssid_len = tag_len;
         } else {
           proto_item_append_text(ti, ": Broadcast");
         }
+        en = proto_tree_add_string_format (tree, hf_tagged_ssid, tvb, offset + 2,
+                                           tag_len, format_text(ssid, tag_len),
+                                           "SSID: %s", format_text(ssid, tag_len));
+        PROTO_ITEM_SET_HIDDEN (en);
         beacon_padding++; /* padding bug */
       }
       break;
@@ -3940,16 +4564,14 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
           ret = g_snprintf (print_buff + n, SHORT_STR - n, "%2.1f%s ",
                           (tag_data_ptr[i] & 0x7F) * 0.5,
                           (tag_data_ptr[i] & 0x80) ? "(B)" : "");
-          if (ret == -1 || ret >= SHORT_STR - n) {
-            /* Some versions of snprintf return -1 if they'd truncate
-               the output. Others return <buf_size> or greater.  */
+          if (ret >= SHORT_STR - n) {
+            /* ret = <buf_size> or greater. means buffer truncated */
             break;
           }
           n += ret;
         }
       }
       g_snprintf (out_buff, SHORT_STR, "Supported rates: %s [Mbit/sec]", print_buff);
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
            tag_len, out_buff);
       proto_item_append_text(ti, ": %s", print_buff);
@@ -3968,7 +4590,6 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
           tvb_get_guint8(tvb, offset + 4),
           tvb_get_guint8(tvb, offset + 5),
           tvb_get_guint8(tvb, offset + 6));
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
                              tag_len, out_buff);
       break;
@@ -3982,10 +4603,10 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
       }
       g_snprintf (out_buff, SHORT_STR, "Current Channel: %u",
                 tvb_get_guint8(tvb, offset + 2));
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
                              tag_len, out_buff);
       proto_item_append_text(ti, ": %s", out_buff);
+      wlan_stats.channel = tvb_get_guint8(tvb, offset + 2);
       break;
 
     case TAG_CF_PARAMETER:
@@ -3997,22 +4618,18 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
       }
       g_snprintf (out_buff, SHORT_STR, "CFP count: %u",
                 tvb_get_guint8(tvb, offset + 2));
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string_format(tree, tag_interpretation, tvb, offset + 2,
                                    1, out_buff, "%s", out_buff);
       g_snprintf (out_buff, SHORT_STR, "CFP period: %u",
                 tvb_get_guint8(tvb, offset + 3));
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string_format(tree, tag_interpretation, tvb, offset + 3,
                                    1, out_buff, "%s", out_buff);
       g_snprintf (out_buff, SHORT_STR, "CFP max duration: %u",
                 tvb_get_letohs(tvb, offset + 4));
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string_format(tree, tag_interpretation, tvb, offset + 4,
                                    2, out_buff, "%s", out_buff);
       g_snprintf (out_buff, SHORT_STR, "CFP Remaining: %u",
                 tvb_get_letohs(tvb, offset + 6));
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string_format(tree, tag_interpretation, tvb, offset + 6,
                                    2, out_buff, "%s", out_buff);
       proto_item_append_text(ti, ": CFP count %u, CFP period %u, CFP max duration %u, "
@@ -4074,7 +4691,6 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
               }
             }
           }
-          out_buff[SHORT_STR-1] = '\0';
           proto_tree_add_string_format (tree, tag_interpretation, tvb, offset + 5,
                bmaplen, out_buff, "%s", out_buff);
         }
@@ -4090,7 +4706,6 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
       }
       g_snprintf (out_buff, SHORT_STR, "ATIM window 0x%X",
                 tvb_get_letohs(tvb, offset + 2));
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
            tag_len, out_buff);
       proto_item_append_text(ti, ": %s", out_buff);
@@ -4111,7 +4726,6 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
         g_snprintf (out_buff, SHORT_STR, "Country Code: %s, %s Environment",
                  format_text(ccode, 2),
                  val_to_str(tvb_get_guint8(tvb, offset + 4), environment_vals,"Unknown (0x%02x)"));
-        out_buff[SHORT_STR-1] = '\0';
         proto_item_append_text(ti, ": %s", out_buff);
         proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,3, out_buff);
 
@@ -4164,7 +4778,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
          proto_tree_add_uint (tree, hf_qbss_version, tvb, offset + 2, tag_len, 2);
          proto_tree_add_item (tree, hf_qbss_scount, tvb, offset + 2, 2, TRUE);
          proto_tree_add_item (tree, hf_qbss_cu, tvb, offset + 4, 1, FALSE);
-         proto_tree_add_item (tree, hf_qbss_adc, tvb, offset + 5, 2, FALSE);
+         proto_tree_add_item (tree, hf_qbss_adc, tvb, offset + 5, 2, TRUE);
       }
       break;
 
@@ -4178,7 +4792,6 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
       g_snprintf (out_buff, SHORT_STR, "Prime Radix: %u, Number of Channels: %u",
                 tvb_get_guint8(tvb, offset + 2),
                 tvb_get_guint8(tvb, offset + 3));
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2, tag_len, out_buff);
       proto_item_append_text(ti, ": %s", out_buff);
       break;
@@ -4314,7 +4927,6 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
     case TAG_CHALLENGE_TEXT:
       g_snprintf (out_buff, SHORT_STR, "Challenge text: %s",
                 tvb_bytes_to_str(tvb, offset + 2, tag_len));
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
            tag_len, out_buff);
       break;
@@ -4337,17 +4949,15 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
                   /* 802.11g, 7.3.2.13: 1 means "one or more ... STAs
                    * are not short preamble capable" */
                   erp_info & 0x04 ? "long": "short or long");
-        print_buff[SHORT_STR-1] = '\0';
         g_snprintf (out_buff, SHORT_STR,
                   "ERP info: 0x%x (%s)",erp_info,print_buff);
-        out_buff[SHORT_STR-1] = '\0';
         proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
                                tag_len, out_buff);
         proto_item_append_text(ti, ": %s", print_buff);
       }
       break;
 
-    case TAG_CISCO_UNKNOWN_1:
+    case TAG_CISCO_CCX1_CKIP:
       /* From WCS manual:
        * If Aironet IE support is enabled, the access point sends an Aironet
        * IE 0x85 (which contains the access point name, load, number of
@@ -4370,22 +4980,37 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
          followed by '\0' for ASCII termination */
       g_snprintf (out_buff, SHORT_STR, "%.16s",
                 tvb_format_stringzpad(tvb, offset + 12, 16));
-      out_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string_format (tree, tag_interpretation, tvb, offset + 2,
            tag_len, "", "Tag interpretation: Unknown + Name: %s #Clients: %u",
            out_buff,
            /* Total number off associated clients and repeater access points */
            tvb_get_guint8(tvb, offset + 28));
       if (check_col (pinfo->cinfo, COL_INFO)) {
-          col_append_fstr(pinfo->cinfo, COL_INFO, ", Name\"%s\"", out_buff);
+          col_append_fstr(pinfo->cinfo, COL_INFO, ", Name=\"%s\"", out_buff);
       }
       break;
 
+/* Std 802.11-2007
+ * 7.3.2.26 Vendor Specific information element
+ * The
+ * information element is in the format shown in Figure 7-75 and requires that the first 3 octets of the
+ * information field contain the OUI of the entity that has defined the content of the particular Vendor Specific
+ * information element. The length of the information field (n) is 3 >= n =< 255. The OUI field shall be a public
+ * OUI assigned by the IEEE. It is 3 octets in length. The length of the vendor-specific content is n-3 octets.
+ *
+ *          Element ID Length OUI Vendor-specific content
+ * Octets   1          1      3    n-3
+ */
+
     case TAG_VENDOR_SPECIFIC_IE:
       tvb_ensure_bytes_exist (tvb, offset + 2, tag_len);
       if (tag_len >= 3) {
         oui = tvb_get_ntoh24(tvb, offset + 2);
         tag_tvb = tvb_new_subset(tvb, offset + 2, tag_len, tag_len);
+        tag_data_ptr = tvb_get_ptr(tag_tvb, 0, 3);
+        proto_tree_add_bytes_format (tree, tag_oui, tvb, offset + 2, 3,
+          tag_data_ptr, "Vendor: %s", get_manuf_name(tag_data_ptr));
+        proto_item_append_text(ti, ": %s", get_manuf_name(tag_data_ptr));
 
 #define WPAWME_OUI  0x0050F2
 #define RSNOUI_VAL  0x000FAC
@@ -4404,11 +5029,10 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
         case PRE11N_OUI:
           dissect_vendor_ie_ht(ti, tree, tag_tvb);
           break;
+        case OUI_MARVELL:
+          dissect_vendor_ie_marvell(ti, tree, tvb, offset + 5, tag_len - 3);
+          break;
         default:
-          tag_data_ptr = tvb_get_ptr(tag_tvb, 0, 3);
-          proto_tree_add_bytes_format (tree, tag_oui, tvb, offset + 2, 3,
-            tag_data_ptr, "Vendor: %s", get_manuf_name(tag_data_ptr));
-          proto_item_append_text(ti, ": %s", get_manuf_name(tag_data_ptr));
           proto_tree_add_string (tree, tag_interpretation, tvb, offset + 5,
             tag_len - 3, "Not interpreted");
           break;
@@ -4435,22 +5059,45 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
       break;
     /*** End: Secondary Channel Offset Tag - Dustin Johnson ***/
 
+    /***  Begin: WAVE Service information element Dissection - IEEE 802.11p Draft 4.0 ***/
+    case TAG_WSIE:
+      dissect_wsie_ie(tree, tvb, offset + 3, tag_len);
+      break;
+    /***  End: WAVE Service information element Dissection - IEEE 802.11p Draft 4.0 ***/
+
     /*** Begin: Power Capability Tag - Dustin Johnson ***/
     case TAG_POWER_CAPABILITY:
+    {
+      offset += 2;
+      if (tag_len != 2)
       {
-        offset += 2;
-        if (tag_len != 2)
-        {
-          proto_tree_add_text (tree, tvb, offset + 2, tag_len,
-            "Power Capability: Error: Tag length must be exactly 2 bytes long");
-        }
-
-        proto_tree_add_item(tree, hf_tag_power_capability_min, tvb, offset, 1, TRUE);
-        proto_tree_add_item(tree, hf_tag_power_capability_max, tvb, offset+1, 1, TRUE);
-        break;
+        proto_tree_add_text (tree, tvb, offset + 2, tag_len,
+                             "Power Capability: Error: Tag length must be exactly 2 bytes long");
       }
-    /*** End: Power Capability Tag - Dustin Johnson ***/
 
+      proto_tree_add_item(tree, hf_tag_power_capability_min, tvb, offset, 1, TRUE);
+      proto_tree_add_item(tree, hf_tag_power_capability_max, tvb, offset+1, 1, TRUE);
+      break;
+    }
+    /*** End: Power Capability Tag - Dustin Johnson ***/
+    /*
+     * 7.3.2.18 TPC Report element
+     *
+     */
+    case TAG_TPC_REPORT:
+      if(tag_len !=2)
+        proto_tree_add_text (tree, tvb, offset + 2, tag_len,
+                             "TPC Report: Error: Tag length must be 2 bytes long");
+      /* Transmit Power field
+       * The field is coded as a signed integer in units of decibels relative to 1 mW
+       */
+      offset += 2;
+      proto_tree_add_item(tree, hf_tag_tpc_report_trsmt_pow, tvb, offset, 1, TRUE);
+      offset++;
+      /* Link Margin */
+      proto_tree_add_item(tree, hf_tag_tpc_report_link_mrg, tvb, offset, 1, TRUE);
+      offset++;
+      break;
     /*** Begin: Supported Channels Tag - Dustin Johnson ***/
     case TAG_SUPPORTED_CHANNELS:
       {
@@ -4462,16 +5109,16 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
         if (tag_len > 8) /* XXX Is this a sane limit? */
         {
           proto_tree_add_text (tree, tvb, offset + 2, tag_len,
-            "Supported Channels: Error: Tag length too long");
+                               "Supported Channels: Error: Tag length too long");
         } else if (tag_len % 2 == 1) {
           proto_tree_add_text (tree, tvb, offset + 2, tag_len,
-            "Supported Channels: Error: Tag length must be even");
+                               "Supported Channels: Error: Tag length must be even");
         }
 
         for (i=0; i<(tag_len/2); i++)
         {
           chan_item = proto_tree_add_uint_format(tree, hf_tag_supported_channels, tvb, offset, 2, i,
-            "Supported Channels Set #%d", i);
+                                                 "Supported Channels Set #%d", i);
           chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
           proto_tree_add_item(chan_tree, hf_tag_supported_channels_first, tvb, offset++, 1, TRUE);
           proto_tree_add_item(chan_tree, hf_tag_supported_channels_range, tvb, offset++, 1, TRUE);
@@ -4485,7 +5132,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
       if (tag_len < 3)
       {
         proto_tree_add_text (tree, tvb, offset + 2, tag_len,
-            "Measurement Request: Error: Tag length must be at least 3 bytes long");
+                             "Measurement Request: Error: Tag length must be at least 3 bytes long");
       } else {
         guint8 info, request_type;
         guint tag_offset;
@@ -4496,11 +5143,11 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
         tag_offset = offset;
         info = tvb_get_guint8 (tvb, offset);
         proto_tree_add_uint_format(tree, hf_tag_measure_request_measurement_token, tvb,
-            offset, 1, info, "Measurement Token: 0x%02X", info);
+                                   offset, 1, info, "Measurement Token: 0x%02X", info);
 
         info = tvb_get_guint8 (tvb, ++offset);
         parent_item = proto_tree_add_uint_format(tree, hf_tag_measure_request_mode, tvb,
-            offset, 1, info, "Measurement Request Mode: 0x%02X", info);
+                                                 offset, 1, info, "Measurement Request Mode: 0x%02X", info);
         sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_tree);
         proto_tree_add_uint(sub_tree, hf_tag_measure_request_mode_reserved1, tvb, offset, 1, info);
         proto_tree_add_boolean(sub_tree, hf_tag_measure_request_mode_enable, tvb, offset, 1, info);
@@ -4526,7 +5173,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
             proto_tree_add_uint_format(sub_tree, hf_tag_measure_request_channel_number, tvb, offset, 1, channel_number, "Measurement Channel Number: 0x%02X", channel_number);
 
             start_time = tvb_get_letoh64 (tvb, offset);
-            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_request_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016llX", start_time);
+            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_request_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016" G_GINT64_MODIFIER "X", start_time);
 
             offset += 8;
             duration = tvb_get_letohs (tvb, offset);
@@ -4659,7 +5306,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
             /* TODO */
           case 255: /* Measurement Pause Request*/
             /* TODO */
-          default: /* unkown */
+          default: /* unknown */
             proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Undissected Data");
             break;
         }
@@ -4668,11 +5315,15 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
       break;
     /* End: Measure Request Tag - Dustin Johnson */
     /* Begin: Measure Report Tag - Dustin Johnson */
+        /* 7.3.2.22 Measurement Report element
+         * The Length field is variable and depends on the length of the
+         * Measurement Report field. The minimum value of the Length field is 3.
+         */
     case TAG_MEASURE_REP:
-      if (tag_len < 5)
+      if (tag_len < 3)
       {
         proto_tree_add_text (tree, tvb, offset + 2, tag_len,
-            "Measurement Report: Error: Tag length must be at least 5 bytes long");
+            "Measurement Report: Error: Tag length must be at least 3 bytes long");
       } else {
         guint8 info, report_type, channel_number;
         guint16 duration;
@@ -4701,8 +5352,10 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
         report_type = tvb_get_guint8 (tvb, offset);
         parent_item = proto_tree_add_uint(tree, hf_tag_measure_report_type, tvb, offset, 1, report_type);
         sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_tree);
-
         offset++;
+
+        if (tag_len == 3)
+            break;
         switch (report_type) {
           case 0: /* Basic Report */
           {
@@ -4713,7 +5366,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
 
             offset++;
             start_time = tvb_get_letoh64 (tvb, offset);
-            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_report_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016" PRIx64, start_time);
+            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_report_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016" G_GINT64_MODIFIER "x", start_time);
 
             offset += 8;
             duration = tvb_get_letohs (tvb, offset);
@@ -4738,7 +5391,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
 
             offset++;
             start_time = tvb_get_letoh64 (tvb, offset);
-            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_report_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016llX", start_time);
+            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_report_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016" G_GINT64_MODIFIER "X", start_time);
 
             offset += 8;
             duration = tvb_get_letohs (tvb, offset);
@@ -4754,7 +5407,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
 
             offset++;
             start_time = tvb_get_letoh64 (tvb, offset);
-            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_report_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016llX", start_time);
+            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_report_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016" G_GINT64_MODIFIER "X", start_time);
 
             offset += 8;
             duration = tvb_get_letohs (tvb, offset);
@@ -4794,7 +5447,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
 
             offset++;
             start_time = tvb_get_letoh64 (tvb, offset);
-            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_report_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016llX", start_time);
+            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_report_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016" G_GINT64_MODIFIER "X", start_time);
 
             offset += 8;
             duration = tvb_get_letohs (tvb, offset);
@@ -4825,7 +5478,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
 
             offset++;
             start_time = tvb_get_letoh64 (tvb, offset);
-            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_report_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016llX", start_time);
+            proto_tree_add_uint64_format(sub_tree, hf_tag_measure_report_start_time, tvb, offset, 8, start_time, "Measurement Start Time: 0x%016" G_GINT64_MODIFIER "X", start_time);
 
             offset += 8;
             duration = tvb_get_letohs (tvb, offset);
@@ -4874,7 +5527,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
             /* TODO */
           case 9: /* Transmit Stream Measurement Report */
             /* TODO */
-          default: /* unkown */
+          default: /* unknown */
             proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Undissected Data");
             break;
         }
@@ -4883,26 +5536,36 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
       break;
     /*** End: Measure Report Tag - Dustin Johnson ***/
     /*** Begin: Extended Capabilities Tag - Dustin Johnson ***/
+    /* The Capabilities field is a bit field indicating the capabilities being advertised
+     * by the STA transmitting the information element
+     */
     case TAG_EXTENDED_CAPABILITIES:
     {
       guint tag_offset;
       guint8 info_exchange;
+      proto_item *ti;
+      proto_tree *ex_cap_tree;
 
       if (tag_len < 1)
       {
         proto_tree_add_text (tree, tvb, offset + 2, tag_len,
-            "Extendend Capabilities: Error: Tag length must be at least 1 byte long");
+            "Extended Capabilities: Error: Tag length must be at least 1 byte long");
         break;
       }
       offset+=2;
       tag_offset = offset;
 
       info_exchange = tvb_get_guint8 (tvb, offset);
-      proto_tree_add_uint(tree, hf_tag_extended_capabilities, tvb, offset, 1, info_exchange);
+      ti = proto_tree_add_item (tree, hf_tag_extended_capabilities, tvb, offset, 1, FALSE);
+      ex_cap_tree = proto_item_add_subtree (ti, ett_tag_ex_cap);
+      proto_tree_add_item (ex_cap_tree, hf_tag_extended_capabilities_b0, tvb, offset, 1, FALSE);
+      proto_tree_add_item (ex_cap_tree, hf_tag_extended_capabilities_b1, tvb, offset, 1, FALSE);
+      proto_tree_add_item (ex_cap_tree, hf_tag_extended_capabilities_b2, tvb, offset, 1, FALSE);
+      proto_tree_add_item (ex_cap_tree, hf_tag_extended_capabilities_b3, tvb, offset, 1, FALSE);
 
       if (tag_len > (offset - tag_offset))
       {
-        proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Unkown Data");
+        proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Unknown Data");
         break;
       }
       break;
@@ -5010,7 +5673,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
 
       if (tag_len > (offset - tag_offset))
       {
-        proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Unkown Data");
+        proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Unknown Data");
         break;
       }
       break;
@@ -5036,7 +5699,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
 
       if (tag_len > (offset - tag_offset))
       {
-        proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Unkown Data");
+        proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Unknown Data");
         break;
       }
       break;
@@ -5071,14 +5734,12 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
       tag_data_ptr = tvb_get_ptr (tvb, offset, tag_len);
       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 == -1 || ret >= SHORT_STR - n) {
-          /* Some versions of snprintf return -1 if they'd truncate
-             the output. Others return <buf_size> or greater.  */
+        if (ret >= SHORT_STR - n) {
+          /* ret >= <buf_size> means buffer truncated  */
           break;
         }
         n += ret;
       }
-      print_buff[SHORT_STR-1] = '\0';
       proto_tree_add_string (tree, hf_tag_supported_reg_classes_alternate, tvb, offset, tag_len, print_buff);
 
       break;
@@ -5087,13 +5748,13 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
 #endif
     default:
       tvb_ensure_bytes_exist (tvb, offset + 2, tag_len);
-      proto_tree_add_string (tree, tag_interpretation, tvb, offset + 2,
+      proto_tree_add_string (tree, tag_interpretation, tvb, offset + 1 + tag_len_len,
           tag_len, "Not interpreted");
       proto_item_append_text(ti, ": Tag %u Len %u", tag_no, tag_len);
       break;
   }
 
-  return tag_len + 2;
+  return tag_len + 1 + tag_len_len;
 }
 
 void
@@ -5331,6 +5992,30 @@ dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
       }
       break;
     }
+    case MGT_ARUBA_WLAN:
+    {
+      proto_item *aruba_hdr;
+      proto_tree *aruba_tree;
+      guint16 type;
+      type = tvb_get_ntohs(tvb, offset);
+
+      aruba_hdr = proto_tree_add_text(mgt_tree, tvb, 0, 0, "Aruba Management");
+      aruba_tree = proto_item_add_subtree(aruba_hdr, ett_fixed_parameters);
+
+      proto_tree_add_item(aruba_tree, cf_aruba, tvb, offset, 2, FALSE);
+      offset += 2;
+      /* HeartBeat Sequence */
+      if ( type == 0x0005 )
+      {
+        proto_tree_add_item(aruba_tree, cf_aruba_hb_seq, tvb, offset, 8, FALSE);
+      }
+      /* MTU Size */
+      if ( type == 0x0003 )
+      {
+        proto_tree_add_item(aruba_tree, cf_aruba_mtu, tvb, offset, 2, FALSE);
+      }
+      break;
+    }
   }
 }
 
@@ -5341,8 +6026,7 @@ set_src_addr_cols(packet_info *pinfo, const guint8 *addr, const char *type)
     col_add_fstr(pinfo->cinfo, COL_RES_DL_SRC, "%s (%s)",
         get_ether_name(addr), type);
   if (check_col(pinfo->cinfo, COL_UNRES_DL_SRC))
-    col_add_fstr(pinfo->cinfo, COL_UNRES_DL_SRC, "%s",
-        ether_to_str(addr));
+    col_add_str(pinfo->cinfo, COL_UNRES_DL_SRC, ether_to_str(addr));
 }
 
 static void
@@ -5352,8 +6036,7 @@ set_dst_addr_cols(packet_info *pinfo, const guint8 *addr, const char *type)
     col_add_fstr(pinfo->cinfo, COL_RES_DL_DST, "%s (%s)",
         get_ether_name(addr), type);
   if (check_col(pinfo->cinfo, COL_UNRES_DL_DST))
-    col_add_fstr(pinfo->cinfo, COL_UNRES_DL_DST, "%s",
-        ether_to_str(addr));
+    col_add_str(pinfo->cinfo, COL_UNRES_DL_DST, ether_to_str(addr));
 }
 
 static guint32
@@ -5394,8 +6077,7 @@ typedef enum {
 
 static void
 dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
-        proto_tree * tree, gboolean fixed_length_header,
-        gboolean has_radio_information, gint fcs_len,
+        proto_tree * tree, gboolean fixed_length_header, gint fcs_len,
         gboolean wlan_broken_fc, gboolean datapad,
         gboolean is_ht)
 {
@@ -5409,7 +6091,8 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
   proto_item *ti = NULL;
   proto_item *fcs_item = NULL;
   proto_item *cw_item = NULL;
-  proto_tree *hdr_tree = 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;
@@ -5424,32 +6107,21 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
   char out_buff[SHORT_STR];
   gint is_iv_bad;
   guchar iv_buff[4];
-  char *addr1_str = NULL;
+  const char *addr1_str = NULL;
   int addr1_hf = -1;
   guint offset;
+  const gchar *fts_str;
+  gchar flag_str[] = "opmPRMFTC";
+  gint i;
 
   wlan_hdr *volatile whdr;
   static wlan_hdr whdrs[4];
-  whdr= &whdrs[0];
+  gboolean retransmitted;
 
-  if (check_col (pinfo->cinfo, COL_PROTOCOL))
-    col_set_str (pinfo->cinfo, COL_PROTOCOL, "IEEE 802.11");
-  if (check_col (pinfo->cinfo, COL_INFO))
-    col_clear (pinfo->cinfo, COL_INFO);
+  whdr= &whdrs[0];
 
-  /* Add the radio information, if present, to the column information */
-  if (has_radio_information) {
-    if (check_col(pinfo->cinfo, COL_TX_RATE)) {
-      col_add_fstr(pinfo->cinfo, COL_TX_RATE, "%u.%u",
-          pinfo->pseudo_header->ieee_802_11.data_rate / 2,
-          pinfo->pseudo_header->ieee_802_11.data_rate & 1 ? 5 : 0);
-    }
-    if (check_col(pinfo->cinfo, COL_RSSI)) {
-      /* XX - this is a percentage, not a dBm or normalized or raw RSSI */
-      col_add_fstr(pinfo->cinfo, COL_RSSI, "%u",
-          pinfo->pseudo_header->ieee_802_11.signal_level);
-    }
-  }
+  col_set_str (pinfo->cinfo, COL_PROTOCOL, "IEEE 802.11");
+  col_clear(pinfo->cinfo, COL_INFO);
 
   fcf = FETCH_FCF(0);
   frame_type_subtype = COMPOSE_FRAME_TYPE(fcf);
@@ -5466,46 +6138,34 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
   if (datapad)
     hdr_len = roundup2(hdr_len, 4);
 
+  fts_str = val_to_str_const(frame_type_subtype, frame_type_subtype_vals,
+              "Unrecognized (Reserved frame)");
   if (check_col (pinfo->cinfo, COL_INFO))
-      col_set_str (pinfo->cinfo, COL_INFO,
-          val_to_str(frame_type_subtype, frame_type_subtype_vals,
-              "Unrecognized (Reserved frame)"));
+      col_set_str (pinfo->cinfo, COL_INFO, fts_str);
+
 
   flags = FCF_FLAGS (fcf);
   more_frags = HAVE_FRAGMENTS (flags);
 
+  for (i = 0; i < 8; i++) {
+    if (! (flags & 0x80 >> i)) {
+      flag_str[i] = '.';
+    }
+  }
+
   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)))) {
     htc_len = 4;
   }
 
-  /* Add the radio information, if present, and the FC to the current tree */
+  /* Add the FC to the current tree */
   if (tree)
     {
       ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, hdr_len,
-          "IEEE 802.11");
+          "IEEE 802.11 %s", fts_str);
       hdr_tree = proto_item_add_subtree (ti, ett_80211);
 
-      if (has_radio_information) {
-        proto_tree_add_uint_format(hdr_tree, hf_data_rate,
-             tvb, 0, 0,
-             pinfo->pseudo_header->ieee_802_11.data_rate,
-             "Data Rate: %u.%u Mb/s",
-             pinfo->pseudo_header->ieee_802_11.data_rate / 2,
-             pinfo->pseudo_header->ieee_802_11.data_rate & 1 ? 5 : 0);
-
-        proto_tree_add_uint(hdr_tree, hf_channel,
-            tvb, 0, 0,
-            pinfo->pseudo_header->ieee_802_11.channel);
-
-        proto_tree_add_uint_format(hdr_tree, hf_signal_strength,
-            tvb, 0, 0,
-            pinfo->pseudo_header->ieee_802_11.signal_level,
-            "Signal Strength: %u%%",
-            pinfo->pseudo_header->ieee_802_11.signal_level);
-      }
-
       dissect_frame_control(hdr_tree, tvb, wlan_broken_fc, 0);
 
       if (frame_type_subtype == CTRL_PS_POLL)
@@ -5553,10 +6213,10 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
       if (check_col (pinfo->cinfo, COL_INFO))
       {
         col_append_fstr(pinfo->cinfo, COL_INFO,
-            ",SN=%d", seq_number);
+            ", SN=%d", seq_number);
 
         col_append_fstr(pinfo->cinfo, COL_INFO,
-            ",FN=%d",frag_number);
+            ", FN=%d",frag_number);
       }
 
       if (tree)
@@ -5566,8 +6226,10 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
         proto_tree_add_ether (hdr_tree, hf_addr_sa, tvb, 10, 6, src);
 
         /* add items for wlan.addr filter */
-        proto_tree_add_ether_hidden(hdr_tree, hf_addr, tvb, 4, 6, dst);
-        proto_tree_add_ether_hidden(hdr_tree, hf_addr, tvb, 10, 6, src);
+        hidden_item = proto_tree_add_ether (hdr_tree, hf_addr, tvb, 4, 6, dst);
+        PROTO_ITEM_SET_HIDDEN(hidden_item);
+        hidden_item = proto_tree_add_ether (hdr_tree, hf_addr, tvb, 10, 6, src);
+        PROTO_ITEM_SET_HIDDEN(hidden_item);
 
         proto_tree_add_ether (hdr_tree, hf_addr_bssid, tvb, 16, 6,
             tvb_get_ptr (tvb, 16, 6));
@@ -5686,7 +6348,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
             proto_item *bar_parent_item;
             proto_tree *bar_sub_tree;
 
-            proto_tree_add_item(hdr_tree, hf_addr_ra, tvb, offset, 6, FALSE);
+            proto_tree_add_item(hdr_tree, hf_addr_ta, tvb, offset, 6, FALSE);
             offset += 6;
 
             bar_control = tvb_get_letohs(tvb, offset);
@@ -5806,7 +6468,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
                 offset += 2;
 
                 offset += add_fixed_field(hdr_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
-                proto_tree_add_text(hdr_tree, tvb, offset, 128, "Block Ack Bitmap");
+                proto_tree_add_item(hdr_tree, hf_block_ack_bitmap, tvb, offset, 128, FALSE);
                 offset += 128;
                 break;
               }
@@ -5816,7 +6478,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
                 offset += 2;
 
                 offset += add_fixed_field(hdr_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
-                proto_tree_add_text(hdr_tree, tvb, offset, 8, "Block Ack Bitmap");
+                proto_tree_add_item(hdr_tree, hf_block_ack_bitmap, tvb, offset, 8, FALSE);
                 offset += 8;
                 break;
               }
@@ -5844,7 +6506,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
                   offset += 2;
 
                   offset += add_fixed_field(ba_mtid_sub_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
-                  proto_tree_add_text(ba_mtid_sub_tree, tvb, offset, 8, "Block Ack Bitmap");
+                  proto_tree_add_item(ba_mtid_sub_tree, hf_block_ack_bitmap, tvb, offset, 8, FALSE);
                   offset += 8;
                 }
                 break;
@@ -5909,10 +6571,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
       if (check_col (pinfo->cinfo, COL_INFO))
       {
         col_append_fstr(pinfo->cinfo, COL_INFO,
-            ",SN=%d", seq_number);
-
-        col_append_fstr(pinfo->cinfo, COL_INFO,
-            ",FN=%d",frag_number);
+            ", SN=%d, FN=%d", seq_number,frag_number);
       }
 
       /* Now if we have a tree we start adding stuff */
@@ -5925,22 +6584,22 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
           case DATA_ADDR_T1:
             proto_tree_add_ether (hdr_tree, hf_addr_da, tvb, 4, 6, dst);
             proto_tree_add_ether (hdr_tree, hf_addr_sa, tvb, 10, 6, src);
-            proto_tree_add_ether (hdr_tree, hf_addr_bssid, tvb, 16, 6,
-                tvb_get_ptr (tvb, 16, 6));
+            proto_tree_add_ether (hdr_tree, hf_addr_bssid, tvb, 16, 6, bssid);
             proto_tree_add_uint (hdr_tree, hf_frag_number, tvb, 22, 2,
                frag_number);
             proto_tree_add_uint (hdr_tree, hf_seq_number, tvb, 22, 2,
                seq_number);
 
             /* add items for wlan.addr filter */
-            proto_tree_add_ether_hidden(hdr_tree, hf_addr, tvb, 4, 6, dst);
-            proto_tree_add_ether_hidden(hdr_tree, hf_addr, tvb, 10, 6, src);
+            hidden_item = proto_tree_add_ether (hdr_tree, hf_addr, tvb, 4, 6, dst);
+            PROTO_ITEM_SET_HIDDEN(hidden_item);
+            hidden_item = proto_tree_add_ether (hdr_tree, hf_addr, tvb, 10, 6, src);
+            PROTO_ITEM_SET_HIDDEN(hidden_item);
             break;
 
           case DATA_ADDR_T2:
             proto_tree_add_ether (hdr_tree, hf_addr_da, tvb, 4, 6, dst);
-            proto_tree_add_ether (hdr_tree, hf_addr_bssid, tvb, 10, 6,
-                tvb_get_ptr (tvb, 10, 6));
+            proto_tree_add_ether (hdr_tree, hf_addr_bssid, tvb, 10, 6, bssid);
             proto_tree_add_ether (hdr_tree, hf_addr_sa, tvb, 16, 6, src);
             proto_tree_add_uint (hdr_tree, hf_frag_number, tvb, 22, 2,
                frag_number);
@@ -5948,13 +6607,14 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
                seq_number);
 
             /* add items for wlan.addr filter */
-            proto_tree_add_ether_hidden(hdr_tree, hf_addr, tvb, 4, 6, dst);
-            proto_tree_add_ether_hidden(hdr_tree, hf_addr, tvb, 16, 6, src);
+            hidden_item = proto_tree_add_ether (hdr_tree, hf_addr, tvb, 4, 6, dst);
+            PROTO_ITEM_SET_HIDDEN(hidden_item);
+            hidden_item = proto_tree_add_ether (hdr_tree, hf_addr, tvb, 16, 6, src);
+            PROTO_ITEM_SET_HIDDEN(hidden_item);
             break;
 
           case DATA_ADDR_T3:
-            proto_tree_add_ether (hdr_tree, hf_addr_bssid, tvb, 4, 6,
-                tvb_get_ptr (tvb, 4, 6));
+            proto_tree_add_ether (hdr_tree, hf_addr_bssid, tvb, 4, 6, bssid);
             proto_tree_add_ether (hdr_tree, hf_addr_sa, tvb, 10, 6, src);
             proto_tree_add_ether (hdr_tree, hf_addr_da, tvb, 16, 6, dst);
 
@@ -5964,8 +6624,10 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
                seq_number);
 
             /* add items for wlan.addr filter */
-            proto_tree_add_ether_hidden(hdr_tree, hf_addr, tvb, 10, 6, src);
-            proto_tree_add_ether_hidden(hdr_tree, hf_addr, tvb, 16, 6, dst);
+            hidden_item = proto_tree_add_ether (hdr_tree, hf_addr, tvb, 10, 6, src);
+            PROTO_ITEM_SET_HIDDEN(hidden_item);
+            hidden_item = proto_tree_add_ether (hdr_tree, hf_addr, tvb, 16, 6, dst);
+            PROTO_ITEM_SET_HIDDEN(hidden_item);
             break;
 
           case DATA_ADDR_T4:
@@ -5981,8 +6643,10 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
             proto_tree_add_ether (hdr_tree, hf_addr_sa, tvb, 24, 6, src);
 
             /* add items for wlan.addr filter */
-            proto_tree_add_ether_hidden(hdr_tree, hf_addr, tvb, 16, 6, dst);
-            proto_tree_add_ether_hidden(hdr_tree, hf_addr, tvb, 24, 6, src);
+            hidden_item = proto_tree_add_ether (hdr_tree, hf_addr, tvb, 16, 6, dst);
+            PROTO_ITEM_SET_HIDDEN(hidden_item);
+            hidden_item = proto_tree_add_ether (hdr_tree, hf_addr, tvb, 24, 6, src);
+            PROTO_ITEM_SET_HIDDEN(hidden_item);
             break;
         }
 
@@ -6062,33 +6726,42 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
             fcs_bad = TRUE;
           }
 
-          if(fcs_good)
+          if(fcs_good) {
             fcs_item = proto_tree_add_uint_format(hdr_tree, hf_fcs, tvb,
                 hdr_len + len, 4, sent_fcs,
                 "Frame check sequence: 0x%08x [correct]", sent_fcs);
-          else
+          } else {
             fcs_item = proto_tree_add_uint_format(hdr_tree, hf_fcs, tvb,
                 hdr_len + len, 4, sent_fcs,
                 "Frame check sequence: 0x%08x [incorrect, should be 0x%08x]",
                 sent_fcs, fcs);
+            flag_str[8] = '.';
+          }
+
+          proto_tree_set_appendix(hdr_tree, tvb, hdr_len + len, 4);
 
           fcs_tree = proto_item_add_subtree(fcs_item, ett_fcs);
 
           fcs_item = proto_tree_add_boolean(fcs_tree,
               hf_fcs_good, tvb,
-              hdr_len + len, 2,
+              hdr_len + len, 4,
               fcs_good);
           PROTO_ITEM_SET_GENERATED(fcs_item);
 
           fcs_item = proto_tree_add_boolean(fcs_tree,
               hf_fcs_bad, tvb,
-              hdr_len + len, 2,
+              hdr_len + len, 4,
               fcs_bad);
           PROTO_ITEM_SET_GENERATED(fcs_item);
         }
       }
+    } else {
+      flag_str[8] = '\0';
     }
 
+    proto_item_append_text(ti, ", Flags: %s", flag_str);
+    if (check_col (pinfo->cinfo, COL_INFO))
+      col_append_fstr (pinfo->cinfo, COL_INFO, ", Flags=%s", flag_str);
 
 
   /*
@@ -6137,7 +6810,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
         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);
+        qos_field_content = QOS_FIELD_CONTENT(qos_control);
 
         proto_tree_add_uint_format (qos_tree, hf_qos_priority, tvb,
             qosoff, 1, qos_priority,
@@ -6146,7 +6819,10 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 
         if (flags & FLAG_FROM_DS) {
           proto_tree_add_boolean (qos_tree, hf_qos_eosp, tvb,
-              qosoff, 1, qos_eosp);
+              qosoff, 1, qos_control);
+        } else {
+          proto_tree_add_boolean (qos_tree, hf_qos_bit4, tvb,
+              qosoff, 1, qos_control);
         }
 
         proto_tree_add_uint (qos_tree, hf_qos_ack_policy, tvb, qosoff, 1,
@@ -6160,37 +6836,53 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
           }
           if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)) {
             /* txop limit */
-            proto_tree_add_uint_format (qos_tree, hf_qos_field_content, tvb,
-                qosoff + 1, 1, qos_field_content, "Transmit Opportunity (TXOP) Limit: 0x%02X", qos_field_content);
-
+            if (qos_field_content == 0) {
+              proto_tree_add_uint_format_value (qos_tree, hf_qos_txop_limit, tvb,
+                  qosoff + 1, 1, qos_field_content,
+                                                "transmit one frame immediately (0)");
+            } else {
+              proto_tree_add_uint (qos_tree, hf_qos_txop_limit, tvb,
+                                   qosoff + 1, 1, qos_field_content);
+            }
           } else {
             /* qap ps buffer state */
             proto_item *qos_ps_buf_state_fields;
-                proto_tree *qos_ps_buf_state_tree;
-            guint16 buf_state;
-            guint16 buf_ac;
-            guint16 buf_load;
-
-            buf_state = QOS_PS_BUF_STATE(qos_field_content);
-            buf_ac = QOS_PS_BUF_AC(qos_field_content);  /*access category */
-            buf_load = QOS_PS_BUF_LOAD(qos_field_content);
+            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_tree = proto_item_add_subtree (qos_ps_buf_state_fields, ett_qos_ps_buf_state);
 
-/*  FIXME: hf_ values not defined
-            proto_tree_add_boolean (qos_ps_buf_state_tree, hf_qos_buf_state, tvb,
-                1, 1, buf_state);
+            proto_tree_add_boolean (qos_ps_buf_state_tree, hf_qos_buf_state_indicated,
+                                    tvb, 1, 1, qos_field_content);
 
-            proto_tree_add_uint_format (qos_ps_buf_state_tree, hf_qos_buf_ac, tvb,
-            qosoff + 1, 1, buf_ac, "Priority: %d (%s)",
-                buf_ac, wme_acs[buf_ac]);
+            if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)) {
+              proto_tree_add_uint (qos_ps_buf_state_tree, hf_qos_highest_pri_buf_ac, tvb,
+                  qosoff + 1, 1, qos_field_content);
 
-            proto_tree_add_uint_format (qos_ps_buf_state_tree, hf_qos_buf_load, tvb,
-                qosoff + 1, 1, buf_load, "Buffered load: %d ", (buf_load * 4096));
-*/
+              qap_buf_load = QOS_PS_QAP_BUF_LOAD(qos_field_content);
+              switch (qap_buf_load) {
 
+              case 0:
+                proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_qos_qap_buf_load, tvb,
+                    qosoff + 1, 1, qos_field_content,
+                    "no buffered traffic (0)");
+                break;
+
+              default:
+                proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_qos_qap_buf_load, tvb,
+                    qosoff + 1, 1, qos_field_content,
+                    "%d octets (%d)", qap_buf_load*4096, qap_buf_load);
+                break;
+
+              case 15:
+                proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_qos_qap_buf_load, tvb,
+                    qosoff + 1, 1, qos_field_content,
+                    "greater than 57344 octets (15)");
+                break;
+              }
+            }
           }
         } else {
           if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
@@ -6199,13 +6891,43 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
             is_amsdu = qos_amsdu_present;
           }
           if (qos_eosp) {
-            /* txop limit requested */
-            proto_tree_add_uint_format (qos_tree, hf_qos_field_content, tvb,
-                qosoff + 1, 1, qos_field_content, "Queue Size: %d", (qos_field_content * 254));
-          } else {
             /* queue size */
-            proto_tree_add_uint_format (qos_tree, hf_qos_field_content, tvb,
-            qosoff + 1, 1, qos_field_content, "Transmit Opportunity (TXOP) Limit Requested: 0x%02X", qos_field_content);
+            switch (qos_field_content) {
+
+            case 0:
+              proto_tree_add_uint_format_value (qos_tree, hf_qos_queue_size,
+                                                tvb, qosoff + 1, 1, qos_field_content,
+                  "no buffered traffic in the queue (0)");
+              break;
+
+            default:
+              proto_tree_add_uint_format_value (qos_tree, hf_qos_queue_size,
+                                                tvb, qosoff + 1, 1, qos_field_content,
+                                                "%u bytes (%u)", qos_field_content*256, qos_field_content);
+              break;
+
+            case 254:
+              proto_tree_add_uint_format_value (qos_tree, hf_qos_queue_size,
+                                                tvb, qosoff + 1, 1, qos_field_content,
+                  "more than 64768 octets (254)");
+              break;
+
+            case 255:
+              proto_tree_add_uint_format_value (qos_tree, hf_qos_queue_size,
+                                                tvb, qosoff + 1, 1, qos_field_content,
+                  "unspecified or unknown (256)");
+              break;
+            }
+          } else {
+            /* txop duration requested */
+            if (qos_field_content == 0) {
+              proto_tree_add_uint_format_value (qos_tree, hf_qos_txop_dur_req,
+                                                tvb, qosoff + 1, 1, qos_field_content,
+                                                "no TXOP requested (0)");
+            } else {
+              proto_tree_add_uint (qos_tree, hf_qos_txop_dur_req,
+                                   tvb, qosoff + 1, 1, qos_field_content);
+            }
           }
         }
 
@@ -6221,7 +6943,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
       /* and WPA2 decryption                                  */
       if (enable_decryption && !pinfo->fd->flags.visited) {
         const guint8 *enc_data = tvb_get_ptr(tvb, 0, hdr_len+reported_len);
-        AirPDcapPacketProcess(&airpdcap_ctx, enc_data, hdr_len+reported_len, NULL, 0, NULL, FALSE, FALSE, TRUE, FALSE);
+        AirPDcapPacketProcess(&airpdcap_ctx, enc_data, hdr_len, hdr_len+reported_len, NULL, 0, NULL, TRUE, FALSE);
       }
       /* Davide Schiera --------------------------------------------------------  */
 #endif
@@ -6232,6 +6954,58 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
       if (DATA_FRAME_IS_NULL(frame_type_subtype))
         return;
 
+      if (!wlan_subdissector) {
+        guint fnum = 0;
+
+        /* key: bssid:src
+         * data: last seq_control seen and frame number
+         */
+        retransmitted = FALSE;
+        if(!pinfo->fd->flags.visited){
+          retransmit_key key;
+          retransmit_key *result;
+
+          memcpy(key.bssid, bssid, 6);
+          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;
+          } 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;
+           }
+        }
+        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_fc_analysis_retransmission, tvb, 0, 0, "Retransmitted frame");
+                PROTO_ITEM_SET_GENERATED(item);
+                item=proto_tree_add_uint(hdr_tree, hf_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;
+        }
+      }
+
       break;
 
     case CONTROL_FRAME:
@@ -6264,7 +7038,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 #define PROTECTION_ALG_CCMP  2
 #define PROTECTION_ALG_RSNA  PROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP
 #endif
-    guint8 algorithm=-1;
+    guint8 algorithm=G_MAXUINT8;
     /* Davide Schiera (2006-11-27): added macros to check the algorithm    */
     /* used could be TKIP or CCMP                            */
 #define IS_TKIP(tvb, hdr_len)  (tvb_get_guint8(tvb, hdr_len + 1) & 0x20)
@@ -6318,6 +7092,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 #ifdef HAVE_AIRPDCAP
         }
 #endif
+        proto_item_set_len (ti, hdr_len + 8);
 
         wep_tree = proto_item_add_subtree (extiv_fields, ett_wep_parameters);
 
@@ -6451,6 +7226,16 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
       }
     }
 
+    if (algorithm == PROTECTION_ALG_WEP) {
+      g_strlcpy (wlan_stats.protection, "WEP", MAX_PROTECT_LEN);
+    } else if (algorithm == PROTECTION_ALG_TKIP) {
+      g_strlcpy (wlan_stats.protection, "TKIP", MAX_PROTECT_LEN);
+    } else if (algorithm == PROTECTION_ALG_CCMP) {
+      g_strlcpy (wlan_stats.protection, "CCMP", MAX_PROTECT_LEN);
+    } else {
+      g_strlcpy (wlan_stats.protection, "Unknown", MAX_PROTECT_LEN);
+    }
+
 #ifndef HAVE_AIRPDCAP
     if (can_decrypt)
       next_tvb = try_decrypt_wep(tvb, hdr_len, reported_len + 8);
@@ -6564,6 +7349,8 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
      * whatever reassembly is in progress, if any, and see
      * if it's done.
      */
+    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,
@@ -6600,8 +7387,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 
   if (next_tvb == NULL) {
     /* Just show this as an incomplete fragment. */
-    if (check_col(pinfo->cinfo, COL_INFO))
-      col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
+    col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
     next_tvb = tvb_new_subset (tvb, hdr_len, len, reported_len);
     call_dissector(data_handle, next_tvb, pinfo, tree);
     pinfo->fragmented = save_fragmented;
@@ -6625,8 +7411,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
         guint16 msdu_length;
         proto_item *parent_item;
         proto_tree *mpdu_tree;
-        proto_tree *subrame_tree;
-        proto_tree *msdu_tree;
+        proto_tree *subframe_tree;
 
         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");
@@ -6640,20 +7425,17 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
           parent_item = proto_tree_add_uint_format(mpdu_tree, amsdu_msdu_header_text, next_tvb,
                             msdu_offset, roundup2(msdu_offset+14+msdu_length, 4),
                             i, "A-MSDU Subframe #%u", i);
-          subrame_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
+          subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
           i++;
 
-          proto_tree_add_ether(subrame_tree, hf_addr_da, next_tvb, msdu_offset, 6, dst);
-          proto_tree_add_ether(subrame_tree, hf_addr_sa, next_tvb, msdu_offset+6, 6, src);
-          proto_tree_add_uint_format(subrame_tree, mcsset_highest_data_rate, next_tvb, msdu_offset+12, 2,
+          proto_tree_add_ether(subframe_tree, hf_addr_da, next_tvb, msdu_offset, 6, dst);
+          proto_tree_add_ether(subframe_tree, hf_addr_sa, next_tvb, msdu_offset+6, 6, src);
+          proto_tree_add_uint_format(subframe_tree, mcsset_highest_data_rate, next_tvb, msdu_offset+12, 2,
           msdu_length, "MSDU length: 0x%04X", msdu_length);
 
           msdu_offset += 14;
-          parent_item = proto_tree_add_text(subrame_tree, next_tvb, msdu_offset, msdu_length, "Mac Service Data Unit (MSDU)");
-          msdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_msdu_tree);
-
           msdu_tvb = tvb_new_subset(next_tvb, msdu_offset, msdu_length, -1);
-          call_dissector(llc_handle, msdu_tvb, pinfo, msdu_tree);
+          call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
           msdu_offset = roundup2(msdu_offset+msdu_length, 4);
         } while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
 
@@ -6670,6 +7452,11 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
          data frame, with no 802.2 header.  This has been seen
          from some hardware.
 
+         On top of that, at least at some point it appeared that
+         the OLPC XO sent out frames with two bytes of 0 between
+         the "end" of the 802.11 header and the beginning of
+         the payload.
+
          So, if the packet doesn't start with 0xaa 0xaa:
 
            we first use the same scheme that linux-wlan-ng does to detect
@@ -6682,7 +7469,9 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
            otherwise, we use the same scheme that we use in the Ethernet
            dissector to recognize Netware 802.3 frames, namely checking
            whether the packet starts with 0xff 0xff and, if so, treat it
-           as an encapsulated IPX frame. */
+           as an encapsulated IPX frame, and then check whether the
+           packet starts with 0x00 0x00 and, if so, treat it as an OLPC
+           frame. */
       encap_type = ENCAP_802_2;
       TRY {
         octet1 = tvb_get_guint8(next_tvb, 0);
@@ -6695,6 +7484,10 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
             encap_type = ENCAP_ETHERNET;
           else if (octet1 == 0xff && octet2 == 0xff)
             encap_type = ENCAP_IPX;
+          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) {
@@ -6722,7 +7515,9 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
   pinfo->fragmented = save_fragmented;
 
   end_of_wlan:
+  whdr->stats = wlan_stats;
   tap_queue_packet(wlan_tap, pinfo, whdr);
+  memset (&wlan_stats, 0, sizeof wlan_stats);
 }
 
 /*
@@ -6731,7 +7526,7 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
 static void
 dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
 {
-  dissect_ieee80211_common (tvb, pinfo, tree, FALSE, FALSE,
+  dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
       pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, FALSE);
 }
 
@@ -6741,7 +7536,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
 static void
 dissect_ieee80211_datapad (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
 {
-  dissect_ieee80211_common (tvb, pinfo, tree, FALSE, FALSE,
+  dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
       pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, TRUE, FALSE);
 }
 
@@ -6750,9 +7545,47 @@ dissect_ieee80211_datapad (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tre
  * header containing radio information.
  */
 static void
-dissect_ieee80211_radio (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
+dissect_radio (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
 {
-  dissect_ieee80211_common (tvb, pinfo, tree, FALSE, TRUE,
+  proto_item *ti = NULL;
+  proto_tree *radio_tree = NULL;
+
+  col_set_str(pinfo->cinfo, COL_PROTOCOL, "Radio");
+  col_clear(pinfo->cinfo, COL_INFO);
+
+  /* Add the radio information to the column information */
+  if (check_col(pinfo->cinfo, COL_TX_RATE)) {
+    col_add_fstr(pinfo->cinfo, COL_TX_RATE, "%u.%u",
+        pinfo->pseudo_header->ieee_802_11.data_rate / 2,
+        pinfo->pseudo_header->ieee_802_11.data_rate & 1 ? 5 : 0);
+  }
+  if (check_col(pinfo->cinfo, COL_RSSI)) {
+    /* XX - this is a percentage, not a dBm or normalized or raw RSSI */
+    col_add_fstr(pinfo->cinfo, COL_RSSI, "%u",
+        pinfo->pseudo_header->ieee_802_11.signal_level);
+  }
+
+  if (tree) {
+    ti = proto_tree_add_item(tree, proto_radio, tvb, 0, 0, FALSE);
+    radio_tree = proto_item_add_subtree (ti, ett_radio);
+
+    proto_tree_add_uint64_format(radio_tree, hf_data_rate, tvb, 0, 0,
+             (guint64)pinfo->pseudo_header->ieee_802_11.data_rate * 500000,
+             "Data Rate: %u.%u Mb/s",
+             pinfo->pseudo_header->ieee_802_11.data_rate / 2,
+             pinfo->pseudo_header->ieee_802_11.data_rate & 1 ? 5 : 0);
+
+    proto_tree_add_uint(radio_tree, hf_channel, tvb, 0, 0,
+            pinfo->pseudo_header->ieee_802_11.channel);
+
+    proto_tree_add_uint_format(radio_tree, hf_signal_strength, tvb, 0, 0,
+            pinfo->pseudo_header->ieee_802_11.signal_level,
+            "Signal Strength: %u%%",
+            pinfo->pseudo_header->ieee_802_11.signal_level);
+  }
+
+  pinfo->current_proto = "IEEE 802.11";
+  dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
      pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, FALSE);
 }
 
@@ -6764,7 +7597,7 @@ dissect_ieee80211_radio (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
 static void
 dissect_ieee80211_bsfc (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
 {
-  dissect_ieee80211_common (tvb, pinfo, tree, FALSE, FALSE, 0, TRUE, FALSE, FALSE);
+  dissect_ieee80211_common (tvb, pinfo, tree, FALSE, 0, TRUE, FALSE, FALSE);
 }
 
 /*
@@ -6774,7 +7607,7 @@ dissect_ieee80211_bsfc (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
 static void
 dissect_ieee80211_fixed (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
 {
-  dissect_ieee80211_common (tvb, pinfo, tree, TRUE, FALSE, 0, FALSE, FALSE, FALSE);
+  dissect_ieee80211_common (tvb, pinfo, tree, TRUE, 0, FALSE, FALSE, FALSE);
 }
 
 /*
@@ -6785,7 +7618,7 @@ dissect_ieee80211_fixed (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
 static void
 dissect_ieee80211_ht (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
 {
-  dissect_ieee80211_common (tvb, pinfo, tree, FALSE, FALSE,
+  dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
       pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, TRUE);
 }
 
@@ -6796,6 +7629,665 @@ wlan_defragment_init(void)
   reassembled_table_init(&wlan_reassembled_table);
 }
 
+/* ------------- */
+static gboolean
+free_all(gpointer key_arg _U_, gpointer value _U_, gpointer user_data _U_)
+{
+  return TRUE;
+}
+
+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_foreach_remove(fc_analyse_retransmit_table,free_all, NULL);
+      g_hash_table_destroy(fc_analyse_retransmit_table);
+      fc_analyse_retransmit_table = NULL;
+  }
+
+  if( fc_first_frame_table ){
+      g_hash_table_foreach_remove(fc_first_frame_table,free_all, NULL);
+      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);
+
+}
+
+/* ------------- */
+
+/*
+ * yah, I know, macros, ugh, but it makes the code
+ * below more readable
+ * XXX - This should be rewritten to use ptvcursors, then.
+ */
+#define FIELD_PRESENT(name)     (hdr.name.status == 0 && hdr.name.did != 0)
+#define IFHELP(size, name, var, str) \
+        if(tree) {                                                \
+            proto_tree_add_uint_format(prism_tree, hf_prism_ ## name, \
+                tvb, offset, size, hdr.var, str, hdr.var);                \
+        }                                                                 \
+        offset += (size)
+#define INTFIELD(size, name, str)       IFHELP(size, name, name, str)
+#define VALFIELD(name, str) \
+        if (FIELD_PRESENT(name)) {                                      \
+            if(tree) {                                                  \
+                proto_tree_add_uint_format(prism_tree, hf_ ## name,     \
+                    tvb, offset, 12, hdr.name.data,                     \
+                    str ": 0x%x (DID 0x%x, Status 0x%x, Length 0x%x)",  \
+                    hdr.name.data, hdr.name.did,                        \
+                    hdr.name.status, hdr.name.len);                     \
+            }                                                           \
+        }                                                               \
+        offset += 12
+#define VALFIELD_PRISM(name, str) \
+        if (FIELD_PRESENT(name)) {                                      \
+            if(tree) {                                            \
+                proto_tree_add_uint_format(prism_tree, hf_prism_ ## name ## _data, \
+                    tvb, offset, 12, hdr.name.data,                        \
+                    str ": 0x%x (DID 0x%x, Status 0x%x, Length 0x%x)",     \
+                    hdr.name.data, hdr.name.did,                           \
+                    hdr.name.status, hdr.name.len);                        \
+            }                                                              \
+        }                                                                  \
+        offset += 12
+
+static void
+dissect_prism(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+    struct prism_hdr hdr;
+    proto_tree *prism_tree = NULL;
+    proto_item *ti;
+    tvbuff_t *next_tvb;
+    int offset;
+    guint32 msgcode;
+
+    offset = 0;
+
+    /* handle the new capture type. */
+    msgcode = tvb_get_ntohl(tvb, offset);
+    if ((msgcode == WLANCAP_MAGIC_COOKIE_V1) ||
+        (msgcode == WLANCAP_MAGIC_COOKIE_V2)) {
+      call_dissector(wlancap_handle, tvb, pinfo, tree);
+      return;
+    }
+
+    tvb_memcpy(tvb, (guint8 *)&hdr, offset, sizeof(hdr));
+
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, "Prism");
+    col_clear(pinfo->cinfo, COL_INFO);
+
+    if(check_col(pinfo->cinfo, COL_INFO))
+        col_add_fstr(pinfo->cinfo, COL_INFO, "Device: %.16s  "
+                     "Message 0x%x, Length %d", hdr.devname,
+                     hdr.msgcode, hdr.msglen);
+
+    if(tree) {
+        ti = proto_tree_add_item(tree, proto_prism, tvb, 0, sizeof hdr, FALSE);
+        prism_tree = proto_item_add_subtree(ti, ett_radio);
+    }
+
+    INTFIELD(4, msgcode, "Message Code: %d");
+    INTFIELD(4, msglen, "Message Length: %d");
+    if(tree) {
+        proto_tree_add_text(prism_tree, tvb, offset, sizeof hdr.devname,
+            "Device: %s", hdr.devname);
+    }
+    offset += sizeof hdr.devname;
+
+    if (FIELD_PRESENT(hosttime)) {
+      if(tree) {
+        proto_tree_add_uint64_format(prism_tree, hf_hosttime,
+            tvb, offset, 12, hdr.hosttime.data,
+            "Host timestamp: 0x%x (DID 0x%x, Status 0x%x, Length 0x%x)",
+            hdr.hosttime.data, hdr.hosttime.did,
+            hdr.hosttime.status, hdr.hosttime.len);
+      }
+    }
+    offset += 12;
+    if (FIELD_PRESENT(mactime)) {
+      if(tree) {
+        proto_tree_add_uint64_format(prism_tree, hf_mactime,
+            tvb, offset, 12, hdr.mactime.data,
+            "MAC timestamp: 0x%x (DID 0x%x, Status 0x%x, Length 0x%x)",
+            hdr.mactime.data, hdr.mactime.did,
+            hdr.mactime.status, hdr.mactime.len);
+      }
+    }
+    offset += 12;
+    if (FIELD_PRESENT(channel)) {
+      if (check_col(pinfo->cinfo, COL_FREQ_CHAN))
+        col_add_fstr(pinfo->cinfo, COL_FREQ_CHAN, "%u", hdr.channel.data);
+    }
+    VALFIELD(channel, "Channel");
+    if (FIELD_PRESENT(rssi)) {
+      if (check_col(pinfo->cinfo, COL_RSSI))
+        col_add_fstr(pinfo->cinfo, COL_RSSI, "%d", hdr.rssi.data);
+      if (tree) {
+        proto_tree_add_uint_format(prism_tree, hf_prism_rssi_data,
+            tvb, offset, 12, hdr.rssi.data,
+            "RSSI: 0x%x (DID 0x%x, Status 0x%x, Length 0x%x)",
+            hdr.rssi.data, hdr.rssi.did, hdr.rssi.status, hdr.rssi.len);
+      }
+    }
+    offset += 12;
+    VALFIELD_PRISM(sq, "SQ");
+    VALFIELD_PRISM(signal, "Signal");
+    VALFIELD_PRISM(noise, "Noise");
+    if (FIELD_PRESENT(rate)) {
+      if (check_col(pinfo->cinfo, COL_TX_RATE)) {
+        col_add_fstr(pinfo->cinfo, COL_TX_RATE, "%u.%u",
+                  hdr.rate.data / 2, hdr.rate.data & 1 ? 5 : 0);
+      }
+      if (tree) {
+          proto_tree_add_uint64_format(prism_tree, hf_data_rate,
+                  tvb, offset, 12, (guint64)hdr.rate.data * 500000,
+                  "Data Rate: %u.%u Mb/s",
+                  hdr.rate.data / 2, hdr.rate.data & 1 ? 5 : 0);
+      }
+    }
+    offset += 12;
+    VALFIELD_PRISM(istx, "IsTX");
+    VALFIELD_PRISM(frmlen, "Frame Length");
+
+    /* dissect the 802.11 header next */
+    next_tvb = tvb_new_subset_remaining(tvb, sizeof hdr);
+    call_dissector(ieee80211_handle, next_tvb, pinfo, tree);
+}
+
+/*
+ * AVS linux-wlan-based products use a new sniff header to replace the
+ * old Prism header.  This one has additional fields, is designed to be
+ * non-hardware-specific, and more importantly, version and length fields
+ * so it can be extended later without breaking anything.
+ *
+ * Support by Solomon Peachy
+ *
+ * Description, from the capturefrm.txt file in the linux-wlan-ng 0.2.9
+ * release (linux-wlan-ng-0.2.9/doc/capturefrm.txt):
+ *
+AVS Capture Frame Format
+Version 2.1.1
+
+1. Introduction
+The original header format for "monitor mode" or capturing frames was
+a considerable hack.  The document covers a redesign of that format.
+
+  Any questions, corrections, or proposed changes go to info@linux-wlan.com
+
+2. Frame Format
+All sniff frames follow the same format:
+
+        Offset  Name            Size            Description
+        --------------------------------------------------------------------
+        0       CaptureHeader                   AVS capture metadata header
+        64      802.11Header    [10-30]         802.11 frame header
+        ??      802.11Payload   [0-2312]        802.11 frame payload
+        ??      802.11FCS       4               802.11 frame check sequence
+
+Note that the header and payload are variable length and the payload
+may be empty.
+
+If the hardware does not supply the FCS to the driver, then the frame shall
+have a FCS of 0xFFFFFFFF.
+
+3. Byte Order
+All multibyte fields of the capture header are in "network" byte
+order.  The "host to network" and "network to host" functions should
+work just fine.  All the remaining multibyte fields are ordered
+according to their respective standards.
+
+4. Capture Header Format
+The following fields make up the AVS capture header:
+
+        Offset  Name            Type
+        ------------------------------
+        0       version         uint32
+        4       length          uint32
+        8       mactime         uint64
+        16      hosttime        uint64
+        24      phytype         uint32
+        28      frequency       uint32
+        32      datarate        uint32
+        36      antenna         uint32
+        40      priority        uint32
+        44      ssi_type        uint32
+        48      ssi_signal      int32
+        52      ssi_noise       int32
+        56      preamble        uint32
+        60      encoding        uint32
+        64      sequence        uint32
+        68      drops           uint32
+        72      receiver_addr   uint8[6]
+        78      padding         uint8[2]
+        ------------------------------
+        80
+
+The following subsections detail the fields of the capture header.
+
+4.1 version
+The version field identifies this type of frame as a subtype of
+ETH_P_802111_CAPTURE as received by an ARPHRD_IEEE80211_PRISM or
+an ARPHRD_IEEE80211_CAPTURE device.  The value of this field shall be
+0x80211002.  As new revisions of this header are necessary, we can
+increment the version appropriately.
+
+4.2 length
+The length field contains the length of the entire AVS capture header,
+in bytes.
+
+4.3 mactime
+Many WLAN devices supply a relatively high resolution frame reception
+time value.  This field contains the value supplied by the device.  If
+the device does not supply a receive time value, this field shall be
+set to zero.  The units for this field are microseconds.
+
+If possible, this time value should be absolute, representing the number
+of microseconds elapsed since the UNIX epoch.
+
+4.4 hosttime
+The hosttime field is set to the current value of the host maintained
+clock variable when the frame is received by the host.
+
+If possible, this time value should be absolute, representing the number
+of microseconds elapsed since the UNIX epoch.
+
+4.5 phytype
+The phytype field identifies what type of PHY is employed by the WLAN
+device used to capture this frame.  The valid values are:
+
+        PhyType                         Value
+        -------------------------------------
+        phytype_fhss_dot11_97            1
+        phytype_dsss_dot11_97            2
+        phytype_irbaseband               3
+        phytype_dsss_dot11_b             4
+        phytype_pbcc_dot11_b             5
+        phytype_ofdm_dot11_g             6
+        phytype_pbcc_dot11_g             7
+        phytype_ofdm_dot11_a             8
+        phytype_dss_ofdm_dot11_g         9
+
+4.6 frequency
+
+This represents the frequency or channel number of the receiver at the
+time the frame was received.  It is interpreted as follows:
+
+For frequency hopping radios, this field is broken in to the
+following subfields:
+
+        Byte    Subfield
+        ------------------------
+        Byte0   Hop Set
+        Byte1   Hop Pattern
+        Byte2   Hop Index
+        Byte3   reserved
+
+For non-hopping radios, the frequency is interpreted as follows:
+
+       Value                Meaning
+    -----------------------------------------
+       < 256           Channel number (using externally-defined
+                         channelization)
+       < 10000         Center frequency, in MHz
+      >= 10000         Center frequency, in KHz
+
+4.7 datarate
+The data rate field contains the rate at which the frame was received
+in units of 100kbps.
+
+4.8 antenna
+For WLAN devices that indicate the receive antenna for each frame, the
+antenna field shall contain an index value into the dot11AntennaList.
+If the device does not indicate a receive antenna value, this field
+shall be set to zero.
+
+4.9 priority
+The priority field indicates the receive priority of the frame.  The
+value is in the range [0-15] with the value 0 reserved to indicate
+contention period and the value 6 reserved to indicate contention free
+period.
+
+4.10 ssi_type
+The ssi_type field is used to indicate what type of signal strength
+information is present: "None", "Normalized RSSI" or "dBm".  "None"
+indicates that the underlying WLAN device does not supply any signal
+strength at all and the ssi_* values are unset.  "Normalized RSSI"
+values are integers in the range [0-1000] where higher numbers
+indicate stronger signal.  "dBm" values indicate an actual signal
+strength measurement quantity and are usually in the range [-108 - 10].
+The following values indicate the three types:
+
+        Value   Description
+        ---------------------------------------------
+        0       None
+        1       Normalized RSSI
+        2       dBm
+        3       Raw RSSI
+
+4.11 ssi_signal
+The ssi_signal field contains the signal strength value reported by
+the WLAN device for this frame.  Note that this is a signed quantity
+and if the ssi_type value is "dBm" that the value may be negative.
+
+4.12 ssi_noise
+The ssi_noise field contains the noise or "silence" value reported by
+the WLAN device.  This value is commonly defined to be the "signal
+strength reported immediately prior to the baseband processor lock on
+the frame preamble".  If the hardware does not provide noise data, this
+shall equal 0xffffffff.
+
+4.12 preamble
+For PHYs that support variable preamble lengths, the preamble field
+indicates the preamble type used for this frame.  The values are:
+
+        Value   Description
+        ---------------------------------------------
+        0       Undefined
+        1       Short Preamble
+        2       Long Preamble
+
+4.13 encoding
+This specifies the encoding of the received packet.  For PHYs that support
+multiple encoding types, this will tell us which one was used.
+
+        Value   Description
+        ---------------------------------------------
+        0       Unknown
+        1       CCK
+        2       PBCC
+        3       OFDM
+        4       DSSS-OFDM
+        5       BPSK
+        6       QPSK
+        7       16QAM
+        8       64QAM
+
+4.14 sequence
+This is a receive frame sequence counter.  The sniff host shall
+increment this by one for every valid frame received off the medium.
+By watching for gaps in the sequence numbers we can determine when
+packets are lost due to unreliable transport, rather than a frame never
+being received to begin with.
+
+4.15 drops
+This is a counter of the number of known frame drops that occured.  This
+is particularly useful when the system or hardware cannot keep up with
+the sniffer load.
+
+4.16 receiver_addr
+This specifies the MAC address of the receiver of this frame.
+It is six octets in length.  This field is followed by two octets of
+padding to keep the structure 32-bit word aligned.
+
+================================
+
+Changes: v2->v2.1
+
+ * Added contact e-mail address to introduction
+ * Added sniffer_addr, drop count, and sequence fields, bringing total
+   length to 80 bytes
+ * Bumped version to 0x80211002
+ * Mactime is specified in microseconds, not nanoseconds
+ * Added 64QAM, 16QAM, BPSK, QPSK encodings
+
+================================
+
+Changes: v2.1->v2.1.1
+
+ * Renamed 'channel' to 'frequency'
+ * Clarified the interpretation of the frequency/channel field.
+ * Renamed 'sniffer address' to 'receiver address'
+ * Clarified timestamp fields.
+ */
+
+/*
+ * Signal/noise strength type values.
+ */
+#define SSI_NONE        0       /* no SSI information */
+#define SSI_NORM_RSSI   1       /* normalized RSSI - 0-1000 */
+#define SSI_DBM         2       /* dBm */
+#define SSI_RAW_RSSI    3       /* raw RSSI from the hardware */
+
+static void
+dissect_wlancap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+    proto_tree *wlan_tree = NULL;
+    proto_item *ti;
+    tvbuff_t *next_tvb;
+    int offset;
+    guint32 version;
+    guint32 length;
+    guint32 channel;
+    guint32 datarate;
+    guint32 ssi_type;
+    guint32 antnoise;
+
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, "WLAN");
+    col_clear(pinfo->cinfo, COL_INFO);
+    offset = 0;
+
+    version = tvb_get_ntohl(tvb, offset) - WLANCAP_MAGIC_COOKIE_BASE;
+
+    length = tvb_get_ntohl(tvb, offset+4);
+
+    if(check_col(pinfo->cinfo, COL_INFO))
+        col_add_fstr(pinfo->cinfo, COL_INFO, "AVS WLAN Capture v%x, Length %d",version, length);
+
+    if (version > 2) {
+      goto skip;
+    }
+
+    /* Dissect the AVS header */
+    if (tree) {
+      ti = proto_tree_add_item(tree, proto_wlancap, tvb, 0, length, FALSE);
+      wlan_tree = proto_item_add_subtree(ti, ett_radio);
+      proto_tree_add_item(wlan_tree, hf_wlan_magic, tvb, offset, 4, FALSE);
+      proto_tree_add_item(wlan_tree, hf_wlan_version, tvb, offset, 4, FALSE);
+    }
+    offset+=4;
+    if (tree)
+      proto_tree_add_item(wlan_tree, hf_wlan_length, tvb, offset, 4, FALSE);
+    offset+=4;
+    if (tree)
+      proto_tree_add_item(wlan_tree, hf_mactime, tvb, offset, 8, FALSE);
+    offset+=8;
+    if (tree)
+      proto_tree_add_item(wlan_tree, hf_hosttime, tvb, offset, 8, FALSE);
+    offset+=8;
+    if (tree)
+      proto_tree_add_item(wlan_tree, hf_wlan_phytype, tvb, offset, 4, FALSE);
+    offset+=4;
+
+    /* XXX cook channel (fh uses different numbers) */
+    channel = tvb_get_ntohl(tvb, offset);
+    if (channel < 256) {
+      if (check_col(pinfo->cinfo, COL_FREQ_CHAN))
+        col_add_fstr(pinfo->cinfo, COL_FREQ_CHAN, "%u", channel);
+      if (tree)
+        proto_tree_add_uint(wlan_tree, hf_channel, tvb, offset, 4, channel);
+    } else if (channel < 10000) {
+      if (check_col(pinfo->cinfo, COL_FREQ_CHAN))
+        col_add_fstr(pinfo->cinfo, COL_FREQ_CHAN, "%u MHz", channel);
+      if (tree)
+        proto_tree_add_uint_format(wlan_tree, hf_channel_frequency, tvb, offset,
+                                   4, channel, "Frequency: %u MHz", channel);
+    } else {
+      if (check_col(pinfo->cinfo, COL_FREQ_CHAN))
+        col_add_fstr(pinfo->cinfo, COL_FREQ_CHAN, "%u KHz", channel);
+      if (tree)
+        proto_tree_add_uint_format(wlan_tree, hf_channel_frequency, tvb, offset,
+                                   4, channel, "Frequency: %u KHz", channel);
+    }
+    offset+=4;
+    datarate = tvb_get_ntohl(tvb, offset);
+    if (datarate < 100000) {
+      /* In units of 100 Kb/s; convert to b/s */
+      datarate *= 100000;
+    }
+    if (check_col(pinfo->cinfo, COL_TX_RATE)) {
+      col_add_fstr(pinfo->cinfo, COL_TX_RATE, "%u.%u",
+                   datarate / 1000000,
+                   ((datarate % 1000000) > 500000) ? 5 : 0);
+    }
+    if (tree) {
+      proto_tree_add_uint64_format(wlan_tree, hf_data_rate, tvb, offset, 4,
+                                   datarate,
+                                   "Data Rate: %u.%u Mb/s",
+                                   datarate/1000000,
+                                   ((datarate % 1000000) > 500000) ? 5 : 0);
+    }
+    offset+=4;
+    if (tree)
+      proto_tree_add_item(wlan_tree, hf_wlan_antenna, tvb, offset, 4, FALSE);
+    offset+=4;
+    if (tree)
+      proto_tree_add_item(wlan_tree, hf_wlan_priority, tvb, offset, 4, FALSE);
+    offset+=4;
+    ssi_type = tvb_get_ntohl(tvb, offset);
+    if (tree)
+      proto_tree_add_uint(wlan_tree, hf_wlan_ssi_type, tvb, offset, 4, ssi_type);
+    offset+=4;
+    switch (ssi_type) {
+
+    case SSI_NONE:
+    default:
+      /* either there is no SSI information, or we don't know what type it is */
+      break;
+
+    case SSI_NORM_RSSI:
+      /* Normalized RSSI */
+      if (check_col(pinfo->cinfo, COL_RSSI))
+        col_add_fstr(pinfo->cinfo, COL_RSSI, "%u (norm)", tvb_get_ntohl(tvb, offset));
+      if (tree)
+        proto_tree_add_item(wlan_tree, hf_normrssi_antsignal, tvb, offset, 4, FALSE);
+      break;
+
+    case SSI_DBM:
+      /* dBm */
+      if (check_col(pinfo->cinfo, COL_RSSI))
+        col_add_fstr(pinfo->cinfo, COL_RSSI, "%d dBm", tvb_get_ntohl(tvb, offset));
+      if (tree)
+        proto_tree_add_item(wlan_tree, hf_dbm_antsignal, tvb, offset, 4, FALSE);
+      break;
+
+    case SSI_RAW_RSSI:
+      /* Raw RSSI */
+      if (check_col(pinfo->cinfo, COL_RSSI))
+        col_add_fstr(pinfo->cinfo, COL_RSSI, "%u (raw)", tvb_get_ntohl(tvb, offset));
+      if (tree)
+        proto_tree_add_item(wlan_tree, hf_rawrssi_antsignal, tvb, offset, 4, FALSE);
+      break;
+    }
+    offset+=4;
+    antnoise = tvb_get_ntohl(tvb, offset);
+    /* 0xffffffff means "hardware does not provide noise data" */
+    if (antnoise != 0xffffffff) {
+      switch (ssi_type) {
+
+      case SSI_NONE:
+      default:
+        /* either there is no SSI information, or we don't know what type it is */
+        break;
+
+      case SSI_NORM_RSSI:
+        /* Normalized RSSI */
+        if (tree)
+          proto_tree_add_uint(wlan_tree, hf_normrssi_antnoise, tvb, offset, 4, antnoise);
+        break;
+
+      case SSI_DBM:
+        /* dBm */
+        if (tree)
+          proto_tree_add_int(wlan_tree, hf_dbm_antnoise, tvb, offset, 4, antnoise);
+        break;
+
+      case SSI_RAW_RSSI:
+        /* Raw RSSI */
+        if (tree)
+          proto_tree_add_uint(wlan_tree, hf_rawrssi_antnoise, tvb, offset, 4, antnoise);
+        break;
+      }
+    }
+    offset+=4;
+    if (tree)
+      proto_tree_add_item(wlan_tree, hf_wlan_preamble, tvb, offset, 4, FALSE);
+    offset+=4;
+    if (tree)
+      proto_tree_add_item(wlan_tree, hf_wlan_encoding, tvb, offset, 4, FALSE);
+    offset+=4;
+    if (version > 1) {
+      if (tree)
+        proto_tree_add_item(wlan_tree, hf_wlan_sequence, tvb, offset, 4, FALSE);
+      offset+=4;
+      if (tree)
+        proto_tree_add_item(wlan_tree, hf_wlan_drops, tvb, offset, 4, FALSE);
+      offset+=4;
+      if (tree)
+        proto_tree_add_item(wlan_tree, hf_wlan_receiver_addr, tvb, offset, 6, FALSE);
+      offset+=6;
+      if (tree)
+        proto_tree_add_item(wlan_tree, hf_wlan_padding, tvb, offset, 2, FALSE);
+      offset+=2;
+    }
+
+
+ skip:
+    offset = length;
+
+    /* dissect the 802.11 header next */
+    next_tvb = tvb_new_subset_remaining(tvb, offset);
+    call_dissector(ieee80211_handle, next_tvb, pinfo, tree);
+}
+
 void
 proto_register_ieee80211 (void)
 {
@@ -6899,22 +8391,22 @@ proto_register_ieee80211 (void)
 
   static const true_false_string cf_spec_man_flags = {
     "dot11SpectrumManagementRequired TRUE",
-    "dot11SpectrumManagementRequired FALSE",
+    "dot11SpectrumManagementRequired FALSE"
   };
 
   static const true_false_string cf_apsd_flags = {
     "apsd implemented",
-    "apsd not implemented",
+    "apsd not implemented"
   };
 
   static const true_false_string cf_del_blk_ack_flags = {
     "delayed block ack implemented",
-    "delayed block ack not 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",
+    "immediate block ack not implemented"
   };
   static const true_false_string cf_ibss_flags = {
     "Transmitter belongs to an IBSS",
@@ -6926,6 +8418,11 @@ proto_register_ieee80211 (void)
     "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 hf_qos_amsdu_present_flag = {
     "A-MSDU",
     "MSDU"
@@ -6963,7 +8460,7 @@ proto_register_ieee80211 (void)
   };
 
   /*** Begin: Block Ack Params Fixed Field - Dustin Johnson ***/
-  static const true_false_string ff_block_ack_params_amsdu_premitted_flag = {
+  static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
     "Permitted in QoS Data MPDUs",
     "Not Permitted"
   };
@@ -6975,13 +8472,14 @@ proto_register_ieee80211 (void)
   /*** End: Block Ack Params Fixed Field - Dustin Johnson ***/
 
   /*** Begin: Channel Width Fixed Field - Dustin Johnson ***/
-  static const true_false_string ff_channel_width_flag = {
-      "Channel of any width supported",
-      "20 MHz channel width only"
+  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}
   };
   /*** End: Channel Width Fixed Field - Dustin Johnson ***/
 
-  /*** Begin: QoS Inforamtion AP Fixed Field - Dustin Johnson ***/
+  /*** Begin: QoS Information AP Fixed Field - Dustin Johnson ***/
   static const true_false_string ff_qos_info_ap_q_ack_flag = {
       "Implemented",
       "Not Implemented"
@@ -6996,9 +8494,9 @@ proto_register_ieee80211 (void)
       "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"
   };
-  /*** End: QoS Inforamtion AP Fixed Field - Dustin Johnson ***/
+  /*** End: QoS Information AP Fixed Field - Dustin Johnson ***/
 
-  /*** Begin: QoS Inforamtion STA Fixed Field - Dustin Johnson ***/
+  /*** Begin: QoS Information STA Fixed Field - Dustin Johnson ***/
   static const true_false_string ff_qos_info_sta_ac_flag = {
       "Trigger-enabled and Delivery-enabled",
       "Neither Trigger-enabled nor Delivery-enabled"
@@ -7021,14 +8519,9 @@ proto_register_ieee80211 (void)
       "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"
   };
-  /*** End: QoS Inforamtion STA Fixed Field - Dustin Johnson ***/
+  /*** End: QoS Information STA Fixed Field - Dustin Johnson ***/
 
   /*** Begin: Spatial Multiplexing (SM) Power Control - Dustin Johnson ***/
-  static const true_false_string ff_sm_pwr_save_enabled_flag = {
-      "Enabled",
-      "Disabled"
-  };
-
   static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
       "Dynamic SM Power Save mode",
       "Static SM Power Save mode"
@@ -7133,7 +8626,7 @@ proto_register_ieee80211 (void)
     {0x00, "Broadcast"},
     {0x01, "Multicast"},
     {0x02, "Individually Addressed"},
-    {0x03, "Unkown"},
+    {0x03, "Unknown"},
     {0, NULL}
   };
   /*** End: PSMP Station Information Fixed Field - Dustin Johnson ***/
@@ -7274,6 +8767,29 @@ proto_register_ieee80211 (void)
     {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"},
@@ -7391,14 +8907,95 @@ proto_register_ieee80211 (void)
   };
   /*** End: Block Ack/Block Ack Request  - Dustin Johnson***/
 
+  static const value_string phy_type[] = {
+    { 0, "Unknown" },
+    { 1, "FHSS 802.11 '97" },
+    { 2, "DSSS 802.11 '97" },
+    { 3, "IR Baseband" },
+    { 4, "DSSS 802.11b" },
+    { 5, "PBCC 802.11b" },
+    { 6, "OFDM 802.11g" },
+    { 7, "PBCC 802.11g" },
+    { 8, "OFDM 802.11a" },
+    { 0, NULL }
+  };
+
+  static const value_string encoding_type[] = {
+    { 0, "Unknown" },
+    { 1, "CCK" },
+    { 2, "PBCC" },
+    { 3, "OFDM" },
+    { 4, "DSS-OFDM" },
+    { 5, "BPSK" },
+    { 6, "QPSK" },
+    { 7, "16QAM" },
+    { 8, "64QAM" },
+    { 0, NULL }
+  };
+
+  static const value_string ssi_type[] = {
+    { SSI_NONE, "None" },
+    { SSI_NORM_RSSI, "Normalized RSSI" },
+    { SSI_DBM, "dBm" },
+    { SSI_RAW_RSSI, "Raw RSSI" },
+    { 0, NULL }
+  };
+
+  static const value_string preamble_type[] = {
+    { 0, "Unknown" },
+    { 1, "Short" },
+    { 2, "Long" },
+    { 0, NULL }
+  };
+
   static hf_register_info hf[] = {
+    {&hf_mactime,
+     {"MAC timestamp", "wlan.mactime", FT_UINT64, BASE_DEC, NULL, 0x0,
+      "Value in microseconds of the MAC's Time Synchronization Function timer when the first bit of the MPDU arrived at the MAC", HFILL }},
+
+    {&hf_hosttime,
+     {"Host timestamp", "wlan.hosttime", FT_UINT64, BASE_DEC, NULL, 0x0,
+      NULL, HFILL }},
+
     {&hf_data_rate,
-     {"Data Rate", "wlan.data_rate", FT_UINT8, BASE_DEC, NULL, 0,
-      "Data rate (.5 Mb/s units)", HFILL }},
+     {"Data Rate", "wlan.data_rate", FT_UINT64, BASE_DEC, NULL, 0,
+      "Data rate (b/s)", HFILL }},
 
     {&hf_channel,
      {"Channel", "wlan.channel", FT_UINT8, BASE_DEC, NULL, 0,
-      "Radio channel", HFILL }},
+      "802.11 channel number that this frame was sent/received on", HFILL }},
+
+    {&hf_channel_frequency,
+     {"Channel frequency", "wlan.channel_frequency", FT_UINT32, BASE_DEC, NULL, 0x0,
+      "Channel frequency in megahertz that this frame was sent/received on", HFILL }},
+
+    {&hf_wlan_antenna,
+     {"Antenna", "wlan.antenna", FT_UINT32, BASE_DEC, NULL, 0x0,
+      "Antenna number this frame was sent/received over (starting at 0)", HFILL } },
+
+    {&hf_normrssi_antsignal,
+     {"Normalized RSSI Signal", "wlan.normrssi_antsignal", FT_UINT32, BASE_DEC, NULL, 0x0,
+      "RF signal power at the antenna, normalized to the range 0-1000", HFILL }},
+
+    {&hf_dbm_antsignal,
+     {"SSI Signal (dBm)", "wlan.dbm_antsignal", FT_INT32, BASE_DEC, NULL, 0x0,
+      "RF signal power at the antenna from a fixed, arbitrary value in decibels from one milliwatt", HFILL }},
+
+    {&hf_rawrssi_antsignal,
+     {"Raw RSSI Signal", "wlan.rawrssi_antsignal", FT_UINT32, BASE_DEC, NULL, 0x0,
+      "RF signal power at the antenna, reported as RSSI by the adapter", HFILL }},
+
+    {&hf_normrssi_antnoise,
+     {"Normalized RSSI Noise", "wlan.normrssi_antnoise", FT_UINT32, BASE_DEC, NULL, 0x0,
+      "RF noise power at the antenna, normalized to the range 0-1000", HFILL }},
+
+    {&hf_dbm_antnoise,
+     {"SSI Noise (dBm)", "radiotap.dbm_antnoise", FT_INT32, BASE_DEC, NULL, 0x0,
+      "RF noise power at the antenna from a fixed, arbitrary value in decibels per one milliwatt", HFILL }},
+
+    {&hf_rawrssi_antnoise,
+     {"Raw RSSI Noise", "wlan.rawrssi_antnoise", FT_UINT32, BASE_DEC, NULL, 0x0,
+      "RF noise power at the antenna, reported as RSSI by the adapter", HFILL }},
 
     {&hf_signal_strength,
      {"Signal Strength", "wlan.signal_strength", FT_UINT8, BASE_DEC, NULL, 0,
@@ -7422,14 +9019,14 @@ proto_register_ieee80211 (void)
 
     {&hf_fc_frame_type_subtype,
      {"Type/Subtype", "wlan.fc.type_subtype", FT_UINT8, BASE_HEX, VALS(frame_type_subtype_vals), 0,
-      "Type and subtype combined", HFILL }},
+      "Type and subtype combined (first byte: type, second byte: subtype)", HFILL }},
 
     {&hf_fc_flags,
      {"Protocol Flags", "wlan.flags", FT_UINT8, BASE_HEX, NULL, 0,
       "Protocol flags", HFILL }},
 
     {&hf_fc_data_ds,
-     {"DS status", "wlan.fc.ds", FT_UINT8, BASE_HEX, VALS (&tofrom_ds), 0,
+     {"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_fc_to_ds,
@@ -7448,6 +9045,14 @@ proto_register_ieee80211 (void)
      {"Retry", "wlan.fc.retry", FT_BOOLEAN, 8, TFS (&retry_flags), FLAG_RETRY,
       "Retransmission flag", HFILL }},
 
+    { &hf_fc_analysis_retransmission,
+     {"Retransmission", "wlan.analysis.retransmission", FT_NONE, BASE_NONE,
+      NULL, 0x0, "This frame is a suspected wireless retransmission", HFILL }},
+
+    { &hf_fc_analysis_retransmission_frame,
+     {"Retransmission of frame", "wlan.analysis.retransmission_frame", FT_FRAMENUM, BASE_NONE,
+      NULL, 0x0, "This is a retransmission of frame #", HFILL }},
+
     {&hf_fc_pwr_mgt,
      {"PWR MGT", "wlan.fc.pwrmgt", FT_BOOLEAN, 8, TFS (&pm_flags), FLAG_POWER_MGT,
       "Power management status", HFILL }},
@@ -7458,7 +9063,7 @@ proto_register_ieee80211 (void)
 
     {&hf_fc_protected,
      {"Protected flag", "wlan.fc.protected", FT_BOOLEAN, 8, TFS (&protected_flags), FLAG_PROTECTED,
-      "Protected flag", HFILL }},
+      NULL, HFILL }},
 
     {&hf_fc_order,
      {"Order flag", "wlan.fc.order", FT_BOOLEAN, 8, TFS (&order_flags), FLAG_ORDER,
@@ -7494,7 +9099,7 @@ proto_register_ieee80211 (void)
 
     {&hf_addr_addr1,
      {"First Address of Contained Frame", "wlan.controlwrap.addr1", FT_ETHER, BASE_NONE, NULL, 0,
-      "First Address of Contained Frame", HFILL }},
+      NULL, HFILL }},
 
     {&hf_addr_bssid,
      {"BSS Id", "wlan.bssid", FT_ETHER, BASE_NONE, NULL, 0,
@@ -7502,11 +9107,11 @@ proto_register_ieee80211 (void)
 
     {&hf_frag_number,
      {"Fragment number", "wlan.frag", FT_UINT16, BASE_DEC, NULL, 0,
-      "Fragment number", HFILL }},
+      NULL, HFILL }},
 
     {&hf_seq_number,
      {"Sequence number", "wlan.seq", FT_UINT16, BASE_DEC, NULL, 0,
-      "Sequence number", HFILL }},
+      NULL, HFILL }},
 
     {&hf_qos_priority,
      {"Priority", "wlan.qos.priority", FT_UINT16, BASE_DEC, NULL, 0,
@@ -7516,29 +9121,44 @@ proto_register_ieee80211 (void)
      {"EOSP", "wlan.qos.eosp", FT_BOOLEAN, 8, TFS (&eosp_flag), QOS_FLAG_EOSP,
       "EOSP Field", HFILL }},
 
+    {&hf_qos_bit4,
+     {"QoS bit 4", "wlan.qos.bit4", FT_BOOLEAN, 8, TFS (&bit4_flag), QOS_FLAG_EOSP,
+      NULL, HFILL }},
+
     {&hf_qos_ack_policy,
      {"Ack Policy", "wlan.qos.ack", FT_UINT8, BASE_HEX,  VALS (&ack_policy), 0,
-      "Ack Policy", HFILL }},
+      NULL, HFILL }},
 
     {&hf_qos_amsdu_present,
-     {"Payload Type", "wlan.qos.ampdupresent", FT_BOOLEAN, BASE_NONE,
-      TFS (&hf_qos_amsdu_present_flag), 0, "Payload Type", HFILL }},
+     {"Payload Type", "wlan.qos.amsdupresent", FT_BOOLEAN, BASE_NONE,
+      TFS (&hf_qos_amsdu_present_flag), 0x0, NULL, HFILL }},
+
+    {&hf_qos_txop_limit,
+     {"TXOP Limit", "wlan.qos.txop_limit", FT_UINT16, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_qos_buf_state_indicated,
+     {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
+       FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+      NULL, HFILL }},
 
-    {&hf_qos_field_content,
-     {"Content", "wlan.qos.fc_content", FT_UINT16, BASE_DEC, NULL, 0,
-      "Content1", HFILL }},
+    {&hf_qos_highest_pri_buf_ac,
+     {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
+       FT_UINT8, BASE_DEC, VALS(wme_acs), 0x0C,
+      NULL, HFILL }},
 
-/*    {&hf_qos_buffer_state,
-     {"QAP PS buffer State", "wlan.qos.ps_buf_state", FT_UINT16, BASE_DEC, NULL, 0,
-      "QAP PS buffer State", HFILL }},
+    {&hf_qos_qap_buf_load,
+     {"QAP Buffered Load", "wlan.qos.qap_buf_load",
+       FT_UINT8, BASE_DEC, NULL, 0xF0,
+      NULL, HFILL }},
 
     {&hf_qos_txop_dur_req,
      {"TXOP Duration Requested", "wlan.qos.txop_dur_req", FT_UINT16, BASE_DEC, NULL, 0,
-      "TXOP Duration Requested", HFILL }},
+      NULL, HFILL }},
 
     {&hf_qos_queue_size,
      {"Queue Size", "wlan.qos.queue_size", FT_UINT16, BASE_DEC, NULL, 0,
-      "Queue Size", HFILL }},*/
+      NULL, HFILL }},
 
     {&hf_fcs,
      {"Frame check sequence", "wlan.fcs", FT_UINT32, BASE_HEX,
@@ -7546,11 +9166,11 @@ proto_register_ieee80211 (void)
 
     {&hf_fcs_good,
      {"Good", "wlan.fcs_good", FT_BOOLEAN, BASE_NONE,
-      NULL, 0, "True if the FCS is correct", HFILL }},
+      NULL, 0x0, "True if the FCS is correct", HFILL }},
 
     {&hf_fcs_bad,
      {"Bad", "wlan.fcs_bad", FT_BOOLEAN, BASE_NONE,
-      NULL, 0, "True if the FCS is incorrect", HFILL }},
+      NULL, 0x0, "True if the FCS is incorrect", HFILL }},
 
     {&hf_fragment_overlap,
       {"Fragment overlap", "wlan.fragment.overlap", FT_BOOLEAN, BASE_NONE,
@@ -7578,11 +9198,11 @@ proto_register_ieee80211 (void)
 
     {&hf_fragment,
       {"802.11 Fragment", "wlan.fragment", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
-       "802.11 Fragment", HFILL }},
+       NULL, HFILL }},
 
     {&hf_fragments,
       {"802.11 Fragments", "wlan.fragments", FT_NONE, BASE_NONE, NULL, 0x0,
-       "802.11 Fragments", HFILL }},
+       NULL, HFILL }},
 
     {&hf_reassembled_in,
       {"Reassembled 802.11 in frame", "wlan.reassembled_in", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
@@ -7590,36 +9210,124 @@ proto_register_ieee80211 (void)
 
     {&hf_wep_iv,
      {"Initialization Vector", "wlan.wep.iv", FT_UINT24, BASE_HEX, NULL, 0,
-      "Initialization Vector", HFILL }},
+      NULL, HFILL }},
 
     {&hf_wep_iv_weak,
      {"Weak IV", "wlan.wep.weakiv", FT_BOOLEAN,BASE_NONE, NULL,0x0,
-       "Weak IV",HFILL}},
+       NULL,HFILL}},
 
     {&hf_tkip_extiv,
      {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv", FT_STRING,
-      BASE_HEX, NULL, 0, "TKIP Extended Initialization Vector", HFILL }},
+      BASE_NONE, NULL, 0, "TKIP Extended Initialization Vector", HFILL }},
 
     {&hf_ccmp_extiv,
      {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv", FT_STRING,
-      BASE_HEX, NULL, 0, "CCMP Extended Initialization Vector", HFILL }},
+      BASE_NONE, NULL, 0, "CCMP Extended Initialization Vector", HFILL }},
 
     {&hf_wep_key,
      {"Key Index", "wlan.wep.key", FT_UINT8, BASE_DEC, NULL, 0,
-      "Key Index", HFILL }},
+      NULL, HFILL }},
 
     {&hf_wep_icv,
      {"WEP ICV", "wlan.wep.icv", FT_UINT32, BASE_HEX, NULL, 0,
-      "WEP ICV", HFILL }},
+      NULL, HFILL }},
+    /***  Begin: WAVE Service information element Dissection - IEEE 802.11p Draft 4.0 ***/
+    {&hf_pst_timingquality,
+     {"Timing Quality", "pst.timingQuality", FT_UINT16, BASE_DEC, NULL, 0,
+      "PST Timing Quality", HFILL }},
+
+    {&hf_pst_providercount,
+     {"No. of Providers announcing their Services", "pst.providerCount", FT_UINT8, BASE_DEC, NULL, 0,
+      "Provider Count", HFILL }},
+
+    {&hf_pst_length,
+     {"Provider Service Table Length", "pst.length", FT_UINT16, BASE_DEC, NULL, 0,
+      "PST Length", HFILL }},
+
+    {&hf_pst_contents,
+     {"Provider Service Table Contents", "pst.contents", FT_UINT8, BASE_HEX, NULL, 0,
+      "PST Contents", HFILL }},
+
+    {&hf_pst_acid,
+     {"Application Class ID (ACID)", "pst.ACID", FT_UINT8, BASE_DEC, NULL, 0,
+      "PST ACID", HFILL }},
+
+    {&hf_pst_acm_length,
+     {"Application Context Mask (ACM) Length", "pst.ACM.length", FT_UINT8, BASE_DEC, NULL, 0,
+      "PST ACM Length", HFILL }},
+
+    {&hf_pst_acm,
+     {"Application Context Mask", "pst.ACM", FT_STRING, BASE_NONE, NULL, 0,
+      "PST ACM", HFILL }},
+
+    {&hf_pst_acm_contents,
+     {"Application Context Mask Contents (ACM)", "pst.ACM.contents", FT_UINT32, BASE_DEC, NULL, 0,
+      "PST ACM Contents", HFILL }},
+
+    {&hf_pst_acf,
+     {"Application Contents Field (ACF)", "pst.ACF", FT_UINT32, BASE_DEC, NULL, 0,
+      "PST ACF", HFILL }},
+
+    {&hf_pst_priority,
+     {"Application Priority", "pst.priority", FT_UINT8, BASE_DEC, NULL, 0,
+      "PST Priority", HFILL }},
+
+    {&hf_pst_ipv6addr,
+     {"Internet Protocol V6 Address", "pst.ipv6addr", FT_IPv6, BASE_NONE, NULL, 0,
+      "IP v6 Addr", HFILL }},
+
+    {&hf_pst_macaddr,
+     {"Medium Access Control Address (MAC addr)", "pst.macaddr", FT_ETHER, BASE_NONE, NULL, 0,
+      "MAC Address", HFILL }},
+
+    {&hf_pst_serviceport,
+     {"Service Port", "pst.serviceport", FT_UINT16, BASE_DEC, NULL, 0,
+      "PST Service Port", HFILL }},
+
+    {&hf_pst_addressing,
+     {"Addressing", "pst.addressing", FT_UINT8, BASE_DEC, NULL, 0,
+      "PST Addressing", HFILL }},
+
+    {&hf_pst_channel,
+     {"Service (IEE802.11) Channel", "pst.channel", FT_UINT8, BASE_DEC, NULL, 0,
+      "PST Service Channel", HFILL }},
+
+    {&hf_chan_noc,
+     {"Number of Channels", "chan.chan_uknown", FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_chan_length,
+     {"Length", "chan.chan_length", FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_chan_content,
+     {"Contents", "chan.chan_content", FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_chan_channel,
+     {"channel", "chan.chan_channel", FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_chan_adapt,
+     {"Adaptable", "chan.chan_adapt", FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_chan_rate,
+     {"Rate", "chan.chan_rate", FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
+
+    {&hf_chan_tx_pow,
+     {"Tx Power", "chan.chan_tx_pow", FT_UINT8, BASE_DEC, NULL, 0,
+      NULL, HFILL }},
 
     /*** Begin: Block Ack Request/Block Ack  - Dustin Johnson***/
     {&hf_block_ack_request_control,
      {"Block Ack Request (BAR) Control", "wlan.bar.control",
-      FT_UINT16, BASE_HEX, NULL, 0, "Block Ack Request (BAR) Control", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_block_ack_control,
      {"Block Ack Request Control", "wlan.ba.control",
-      FT_UINT16, BASE_HEX, NULL, 0, "Block Ack Request Control", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_block_ack_control_ack_policy,
      {"BAR Ack Policy", "wlan.ba.control.ackpolicy",
@@ -7631,11 +9339,11 @@ proto_register_ieee80211 (void)
 
     {&hf_block_ack_control_compressed_bitmap,
      {"Compressed Bitmap", "wlan.ba.control.cbitmap",
-      FT_BOOLEAN, 16, 0, 0x04, "Compressed Bitmap", HFILL }},
+      FT_BOOLEAN, 16, 0, 0x04, NULL, HFILL }},
 
     {&hf_block_ack_control_reserved,
      {"Reserved", "wlan.ba.control.cbitmap",
-      FT_UINT16, BASE_HEX, NULL, 0x0ff8, "Reserved", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0ff8, NULL, HFILL }},
 
     {&hf_block_ack_control_basic_tid_info,
      {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
@@ -7650,27 +9358,106 @@ proto_register_ieee80211 (void)
       FT_UINT16, BASE_HEX, NULL, 0xf000, "Number of Traffic Identifiers (TIDs) Present", HFILL }},
 
     {&hf_block_ack_multi_tid_info,
-     {"Traffic Identifier (TID) Info", "",
-      FT_UINT8, BASE_DEC, 0, 0, "Traffic Identifier (TID) Info", HFILL }},
+     {"Traffic Identifier (TID) Info", "wlan.ba.mtid.tid",
+      FT_UINT8, BASE_DEC, 0, 0, NULL, HFILL }},
 
     {&hf_block_ack_multi_tid_reserved,
      {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
-      FT_UINT16, BASE_HEX, 0, 0x0fff, "Reserved", HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0x0fff, NULL, HFILL }},
 
     {&hf_block_ack_multi_tid_value,
      {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
-      FT_UINT16, BASE_HEX, 0, 0xf000, "Multi-TID Value", HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0xf000, NULL, HFILL }},
 
     {&hf_block_ack_request_type,
      {"Block Ack Request Type", "wlan.bar.type",
       FT_UINT8, BASE_HEX, VALS(&hf_block_ack_request_type_flags), 0, "Block Ack Request (BAR) Type", HFILL }},
 
     {&hf_block_ack_type,
-     {"Block Ack Request Type", "wlan.ba.type",
-      FT_UINT8, BASE_HEX, VALS(&hf_block_ack_type_flags), 0, "Block Ack Request Type", HFILL }},
+     {"Block Ack Type", "wlan.ba.type",
+      FT_UINT8, BASE_HEX, VALS(&hf_block_ack_type_flags), 0, NULL, HFILL }},
+
+    {&hf_block_ack_bitmap,
+     {"Block Ack Bitmap", "wlan.ba.bm",
+      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }}
     /*** End: Block Ack Request/Block Ack  - Dustin Johnson***/
   };
 
+  static hf_register_info hf_prism[] = {
+    /* Prism-specific header fields
+       XXX - make as many of these generic as possible. */
+    { &hf_prism_msgcode,
+     {"Message Code", "prism.msgcode", FT_UINT32, BASE_HEX, NULL, 0x0,
+      NULL, HFILL }},
+
+    { &hf_prism_msglen,
+     {"Message Length", "prism.msglen", FT_UINT32, BASE_HEX, NULL, 0x0,
+      NULL, HFILL }},
+
+    { &hf_prism_rssi_data,
+     {"RSSI Field", "prism.rssi.data", FT_UINT32, BASE_HEX, NULL, 0x0,
+      NULL, HFILL }},
+
+    { &hf_prism_sq_data,
+     {"SQ Field", "prism.sq.data", FT_UINT32, BASE_HEX, NULL, 0x0,
+      NULL, HFILL }},
+
+    { &hf_prism_signal_data,
+     {"Signal Field", "prism.signal.data", FT_UINT32, BASE_HEX, NULL, 0x0,
+      NULL, HFILL }},
+
+    { &hf_prism_noise_data,
+     {"Noise Field", "prism.noise.data", FT_UINT32, BASE_HEX, NULL, 0x0,
+      NULL, HFILL }},
+
+    { &hf_prism_rate_data,
+     {"Rate Field", "prism.rate.data", FT_UINT32, BASE_HEX, NULL, 0x0,
+      NULL, HFILL }},
+
+    { &hf_prism_istx_data,
+     {"IsTX Field", "prism.istx.data", FT_UINT32, BASE_HEX, NULL, 0x0,
+      NULL, HFILL }},
+
+    { &hf_prism_frmlen_data,
+     {"Frame Length Field", "prism.frmlen.data", FT_UINT32, BASE_HEX, NULL, 0x0,
+      NULL, HFILL }}
+  };
+
+  static hf_register_info hf_wlancap[] = {
+    /* AVS-specific header fields.
+       XXX - make as many of these generic as possible. */
+    {&hf_wlan_magic,
+     {"Header magic", "wlancap.magic", FT_UINT32, BASE_HEX, NULL, 0xFFFFFFF0, NULL, HFILL } },
+    { &hf_wlan_version, { "Header revision", "wlancap.version", FT_UINT32,
+                          BASE_DEC, NULL, 0xF, NULL, HFILL } },
+    { &hf_wlan_length, { "Header length", "wlancap.length", FT_UINT32,
+                         BASE_DEC, NULL, 0x0, NULL, HFILL } },
+    {&hf_wlan_phytype,
+     {"PHY type", "wlan.phytype", FT_UINT32, BASE_DEC, VALS(phy_type), 0x0,
+      NULL, HFILL } },
+
+    { &hf_wlan_priority, { "Priority", "wlancap.priority", FT_UINT32, BASE_DEC,
+                           NULL, 0x0, NULL, HFILL } },
+    { &hf_wlan_ssi_type, { "SSI Type", "wlancap.ssi_type", FT_UINT32, BASE_DEC,
+                           VALS(ssi_type), 0x0, NULL, HFILL } },
+    { &hf_wlan_ssi_signal, { "SSI Signal", "wlancap.ssi_signal", FT_INT32,
+                           BASE_DEC, NULL, 0x0, NULL, HFILL } },
+    { &hf_wlan_ssi_noise, { "SSI Noise", "wlancap.ssi_noise", FT_INT32,
+                           BASE_DEC, NULL, 0x0, NULL, HFILL } },
+    { &hf_wlan_preamble, { "Preamble", "wlancap.preamble", FT_UINT32,
+                           BASE_DEC, VALS(preamble_type), 0x0, NULL, HFILL } },
+    { &hf_wlan_encoding, { "Encoding Type", "wlancap.encoding", FT_UINT32,
+                           BASE_DEC, VALS(encoding_type), 0x0, NULL, HFILL } },
+    { &hf_wlan_sequence, { "Receive sequence", "wlancap.sequence", FT_UINT32,
+                           BASE_DEC, NULL, 0x0, NULL, HFILL } },
+    { &hf_wlan_drops, { "Known Dropped Frames", "wlancap.drops", FT_UINT32,
+                           BASE_DEC, NULL, 0x0, NULL, HFILL } },
+    { &hf_wlan_receiver_addr, { "Receiver Address", "wlancap.receiver_addr", FT_ETHER,
+                           BASE_NONE, NULL, 0x0, "Receiver Hardware Address", HFILL } },
+    { &hf_wlan_padding, { "Padding", "wlancap.padding", FT_BYTES,
+                           BASE_NONE, NULL, 0x0, NULL, HFILL } }
+  };
+
   static const true_false_string rsn_preauth_flags = {
     "Transmitter supports pre-authentication",
     "Transmitter does not support pre-authentication"
@@ -7705,7 +9492,7 @@ proto_register_ieee80211 (void)
     {0x00, "Static SM Power Save mode"},
     {0x01, "Dynamic SM Power Save mode"},
     {0x02, "Reserved"},
-    {0x03, "SM enabled"},
+    {0x03, "SM Power Save disabled"},
     {0x00, NULL}
   };
 
@@ -7714,11 +9501,6 @@ proto_register_ieee80211 (void)
     "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
   };
 
-  static const true_false_string ht_tf_flag = {
-    "Supported",
-    "Not Supported "
-  };
-
   static const value_string ht_rx_stbc_flag[] = {
     {0x00, "No Rx STBC support"},
     {0x01, "Rx support of one spatial stream"},
@@ -7748,8 +9530,8 @@ proto_register_ieee80211 (void)
   };
 
   static const true_false_string ht_40_mhz_intolerant_flag = {
-    "Use of 40 Mhz transmissions restricted/disallowed",
-    "Use of 40 Mhz transmissions unrestricted/allowed"
+    "Use of 40 MHz transmissions restricted/disallowed",
+    "Use of 40 MHz transmissions unrestricted/allowed"
   };
 
   static const value_string ampduparam_mpdu_start_spacing_flags[] = {
@@ -7955,7 +9737,7 @@ proto_register_ieee80211 (void)
   };
 
   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"},
+    {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"},
@@ -7997,12 +9779,6 @@ proto_register_ieee80211 (void)
     "One or more HT STAs in the BSS do not support L-SIG TXOP protection"
   };
 
-  /* XXX - We might want to use tfs_active_inactive here */
-  static const true_false_string ht_info_pco_active_flag = {
-    "Active",
-    "Not active"
-  };
-
   static const true_false_string ht_info_pco_phase_flag = {
     "Switch to or continue 40 MHz phase",
     "Switch to or continue 20 MHz phase"
@@ -8059,11 +9835,6 @@ proto_register_ieee80211 (void)
     {0x00, NULL}
   };
 
-  static const true_false_string hf_tag_measure_enable_flag = {
-    "Enabled",
-    "Disabled"
-  };
-
   static const true_false_string hf_tag_measure_acc_not_acc = {
     "Accepted",
     "Not Accepted"
@@ -8104,8 +9875,8 @@ proto_register_ieee80211 (void)
   };
 
   static const true_false_string hf_tag_measure_map_field_bss_flag = {
-    "At least one MPDU was recieved by another BSS or IBSS in the measurement period.",
-    "No MPDUs were recieved from another BSS or IBSS in the measurement period."
+    "At least one MPDU was received by another BSS or IBSS in the measurement period.",
+    "No MPDUs were received from another BSS or IBSS in the measurement period."
   };
 
   static const true_false_string hf_tag_measure_detected_not_detected = {
@@ -8113,11 +9884,6 @@ proto_register_ieee80211 (void)
     "Not Detected"
   };
 
-  static const true_false_string hf_tag_measure_true_false = {
-    "True",
-    "False"
-  };
-
   static const value_string hf_tag_measure_request_measurement_mode_flags[] = {
     {0x00, "Passive"},
     {0x01, "Active"},
@@ -8161,11 +9927,6 @@ proto_register_ieee80211 (void)
     {0x00, NULL}
   };
 
-  static const true_false_string hf_tag_extended_capabilities_flag = {
-    "True - HT Information Exchange management frame type supported",
-    "False -  HT Information Exchange management frame type not supported"
-  };
-
   /*** Begin: Extended Channel Switch Announcement Tag - Dustin Johnson ***/
   static const value_string hf_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
     {0x00, "Frames may be transmitted before the channel switch has been completed"},
@@ -8175,42 +9936,47 @@ proto_register_ieee80211 (void)
   /*** End: Extended Channel Switch Announcement Tag - Dustin Johnson ***/
 
   static hf_register_info ff[] = {
+
     {&ff_timestamp,
      {"Timestamp", "wlan_mgt.fixed.timestamp", FT_STRING, BASE_NONE,
-      NULL, 0, "Timestamp", HFILL }},
+      NULL, 0, NULL, HFILL }},
 
     {&ff_auth_alg,
      {"Authentication Algorithm", "wlan_mgt.fixed.auth.alg",
-      FT_UINT16, BASE_DEC, VALS (&auth_alg), 0, "Authentication Algorithm", HFILL }},
+      FT_UINT16, BASE_DEC, VALS (&auth_alg), 0, NULL, HFILL }},
 
     {&ff_beacon_interval,
-     {"Beacon Interval", "wlan_mgt.fixed.beacon", FT_DOUBLE, BASE_DEC, NULL, 0,
-      "Beacon Interval", HFILL }},
+     {"Beacon Interval", "wlan_mgt.fixed.beacon", FT_DOUBLE, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     {&hf_fixed_parameters,
      {"Fixed parameters", "wlan_mgt.fixed.all", FT_UINT16, BASE_DEC, NULL, 0,
-      "Fixed parameters", HFILL }},
+      NULL, HFILL }},
 
     {&hf_tagged_parameters,
      {"Tagged parameters", "wlan_mgt.tagged.all", FT_UINT16, BASE_DEC, NULL, 0,
-      "Tagged parameters", HFILL }},
+      NULL, HFILL }},
+
+    {&hf_tagged_ssid,
+     {"SSID", "wlan_mgt.ssid", FT_STRING, BASE_NONE, NULL, 0,
+      NULL, HFILL }},
 
     /*** Begin: Block Ack Params Fixed Field - Dustin Johnson ***/
     {&ff_block_ack_params,
       {"Block Ack Parameters", "wlan_mgt.fixed.baparams",
-      FT_UINT16, BASE_HEX, NULL, 0, "Block Ack Parameters", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
 
-    {&ff_block_ack_params_amsdu_premitted,
+    {&ff_block_ack_params_amsdu_permitted,
       {"A-MSDUs", "wlan_mgt.fixed.baparams.amsdu",
-      FT_BOOLEAN, 16, TFS (&ff_block_ack_params_amsdu_premitted_flag), 0x0001, "A-MSDU Permitted in QoS Data MPDUs", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ff_block_ack_params_amsdu_permitted_flag), 0x0001, "A-MSDU Permitted in QoS Data MPDUs", HFILL }},
 
     {&ff_block_ack_params_policy,
       {"Block Ack Policy", "wlan_mgt.fixed.baparams.policy",
-      FT_BOOLEAN, 16, TFS (&ff_block_ack_params_policy_flag), 0x0002, "Block Ack Poplicy", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ff_block_ack_params_policy_flag), 0x0002, NULL, HFILL }},
 
     {&ff_block_ack_params_tid,
       {"Traffic Identifier", "wlan_mgt.fixed.baparams.tid",
-      FT_UINT8, BASE_HEX, NULL, 0x003C, "Traffic Identifier", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x003C, NULL, HFILL }},
 
     {&ff_block_ack_params_buffer_size,
       {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan_mgt.fixed.baparams.buffersize",
@@ -8220,337 +9986,337 @@ proto_register_ieee80211 (void)
     /*** Begin: Block Ack Timeout Fixed Field - Dustin Johnson ***/
     {&ff_block_ack_timeout,
       {"Block Ack Timeout", "wlan_mgt.fixed.batimeout",
-      FT_UINT16, BASE_HEX, NULL, 0, "Block Ack Timeout", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
     /*** End: Block Ack Timeout Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Block Ack Starting Sequence Control Fixed Field - Dustin Johnson ***/
     {&ff_block_ack_ssc,
-     {"Block Ack Starting Sequence Control (SSC)", "wlan.fixed.ssc",
-      FT_UINT16, BASE_HEX, 0, 0, "Block Ack Starting Sequence Control (SSC)", HFILL }},
+     {"Block Ack Starting Sequence Control (SSC)", "wlan_mgt.fixed.ssc",
+      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_block_ack_ssc_fragment,
-     {"Fragment", "wlan.fixed.fragment",
-      FT_UINT16, BASE_DEC, 0, 0x000f, "Fragment", HFILL }},
+     {"Fragment", "wlan_mgt.fixed.fragment",
+      FT_UINT16, BASE_DEC, 0, 0x000f, NULL, HFILL }},
 
     {&ff_block_ack_ssc_sequence,
-     {"Starting Sequence Number", "wlan.fixed.sequence",
-      FT_UINT16, BASE_DEC, 0, 0xfff0, "Starting Sequence Number", HFILL }},
+     {"Starting Sequence Number", "wlan_mgt.fixed.sequence",
+      FT_UINT16, BASE_DEC, 0, 0xfff0, NULL, HFILL }},
     /*** End: Block Ack Starting Sequence Control Fixed Field - Dustin Johnson ***/
 
     /*** Begin: DELBA Parameter Set Fixed Field - Dustin Johnson ***/
     {&ff_delba_param,
-     {"Delete Block Ack (DELBA) Parameter Set", "wlan.fixed.delba.param",
-      FT_UINT16, BASE_HEX, 0, 0, "Delete Block Ack (DELBA) Parameter Set", HFILL }},
+     {"Delete Block Ack (DELBA) Parameter Set", "wlan_mgt.fixed.delba.param",
+      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_delba_param_reserved,
-     {"Reserved", "wlan.fixed.delba.param.reserved",
-      FT_UINT16, BASE_HEX, 0, 0x07ff, "Reserved", HFILL }},
+     {"Reserved", "wlan_mgt.fixed.delba.param.reserved",
+      FT_UINT16, BASE_HEX, 0, 0x07ff, NULL, HFILL }},
 
     {&ff_delba_param_init,
-     {"Initiator", "wlan.fixed.delba.param.initiator",
-      FT_BOOLEAN, 16, 0, 0x08000, "Initiator", HFILL }},
+     {"Initiator", "wlan_mgt.fixed.delba.param.initiator",
+      FT_BOOLEAN, 16, 0, 0x0800, NULL, HFILL }},
 
     {&ff_delba_param_tid,
-     {"TID", "wlan.fixed.delba.param.tid",
+     {"TID", "wlan_mgt.fixed.delba.param.tid",
       FT_UINT16, BASE_HEX, 0, 0xf000, "Traffic Identifier (TID)", HFILL }},
     /*** End: DELBA Parameter Set Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Max Regulation Power Fixed Field - Dustin Johnson ***/
     {&ff_max_reg_pwr,
-     {"Maximum Regulation Power", "wlan.fixed.maxregpwr",
-      FT_UINT16, BASE_HEX, 0, 0, "Maximum Regulation Power", HFILL }},
+     {"Maximum Regulation Power", "wlan_mgt.fixed.maxregpwr",
+      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
     /*** End: Max Regulation Power Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Measurement Pilot Interval Fixed Field - Dustin Johnson ***/
-    {&ff_measurment_pilot_int,
-     {"Measurement Pilot Interval", "wlan.fixed.msmtpilotint",
+    {&ff_measurement_pilot_int,
+     {"Measurement Pilot Interval", "wlan_mgt.fixed.msmtpilotint",
       FT_UINT16, BASE_HEX, 0, 0, "Measurement Pilot Interval Fixed Field", HFILL }},
     /*** End: Measurement Pilot Interval Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Country String Fixed Field - Dustin Johnson ***/
     {&ff_country_str,
-     {"Country String", "wlan.fixed.country",
-      FT_STRING, BASE_NONE, 0, 0, "Country String", HFILL }},
+     {"Country String", "wlan_mgt.fixed.country",
+      FT_STRING, BASE_NONE, 0, 0, NULL, HFILL }},
     /*** End: Country String Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Maximum Transmit Power Fixed Field - Dustin Johnson ***/
     {&ff_max_tx_pwr,
-     {"Maximum Transmit Power", "wlan.fixed.maxtxpwr",
-      FT_INT8, BASE_HEX, 0, 0, "Maximum Transmit Power", HFILL }},
+     {"Maximum Transmit Power", "wlan_mgt.fixed.maxtxpwr",
+      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
     /*** End: Maximum Transmit Power Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Transmit Power Used Fixed Field - Dustin Johnson ***/
     {&ff_tx_pwr_used,
-     {"Transmit Power Used", "wlan.fixed.txpwr",
-      FT_INT8, BASE_HEX, 0, 0, "Transmit Power Used", HFILL }},
+     {"Transmit Power Used", "wlan_mgt.fixed.txpwr",
+      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
     /*** End: Transmit Power Used Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Transmit Power Used Fixed Field - Dustin Johnson ***/
     {&ff_transceiver_noise_floor,
-     {"Transceiver Noise Floor", "wlan.fixed.tnoisefloor",
-      FT_INT8, BASE_HEX, 0, 0, "Transceiver Noise Floor", HFILL }},
+     {"Transceiver Noise Floor", "wlan_mgt.fixed.tnoisefloor",
+      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
     /*** End: Transceiver Noise Floor Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Channel Width Fixed Field - Dustin Johnson ***/
     {&ff_channel_width,
-     {"Supported Channel Width", "fixed.chanwidth",
-      FT_UINT8, BASE_HEX, TFS (&ff_channel_width_flag), 0, "Supported Channel Width", HFILL }},
+     {"Supported Channel Width", "wlan_mgt.fixed.chanwidth",
+      FT_UINT8, BASE_HEX, VALS (ff_channel_width_vals), 0, NULL, HFILL }},
     /*** End: Channel Width Fixed Field - Dustin Johnson ***/
 
-    /*** Begin: QoS Inforamtion AP Fixed Field - Dustin Johnson ***/
+    /*** Begin: QoS Information AP Fixed Field - Dustin Johnson ***/
     {&ff_qos_info_ap,
-     {"QoS Inforamtion (AP)", "fixed.qosinfo.ap",
-      FT_UINT8, BASE_HEX, NULL, 0, "QoS Inforamtion (AP)", HFILL }},
+     {"QoS Information (AP)", "wlan_mgt.fixed.qosinfo.ap",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&ff_qos_info_ap_edca_param_set_counter,
-     {"EDCA Parameter Set Update Count", "fixed.qosinfo.ap.edcaupdate",
+     {"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 }},
 
     {&ff_qos_info_ap_q_ack,
-     {"Q-Ack", "fixed.qosinfo.ap.qack",
+     {"Q-Ack", "wlan_mgt.fixed.qosinfo.ap.qack",
       FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_q_ack_flag), 0x10, "QoS Ack", HFILL }},
 
     {&ff_qos_info_ap_queue_req,
-     {"Queue Request", "fixed.qosinfo.ap",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_queue_req_flag), 0x20, "Queue Request", HFILL }},
+     {"Queue Request", "wlan_mgt.fixed.qosinfo.ap",
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_queue_req_flag), 0x20, NULL, HFILL }},
 
     {&ff_qos_info_ap_txop_request,
-     {"TXOP Request", "fixed.qosinfo.ap.txopreq",
+     {"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 }},
 
     {&ff_qos_info_ap_reserved,
-     {"Reserved", "fixed.qosinfo.ap.reserved",
-      FT_BOOLEAN, 8, NULL, 0x80, "Reserved", HFILL }},
-    /*** End: QoS Inforamtion AP Fixed Field - Dustin Johnson ***/
+     {"Reserved", "wlan_mgt.fixed.qosinfo.ap.reserved",
+      FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
+    /*** End: QoS Information AP Fixed Field - Dustin Johnson ***/
 
-    /*** Begin: QoS Inforamtion STA Fixed Field - Dustin Johnson ***/
+    /*** Begin: QoS Information STA Fixed Field - Dustin Johnson ***/
     {&ff_qos_info_sta,
-     {"QoS Inforamtion (STA)", "fixed.qosinfo.sta",
-      FT_UINT8, BASE_HEX, NULL, 0, "QoS Inforamtion (STA)", HFILL }},
+     {"QoS Information (STA)", "wlan_mgt.fixed.qosinfo.sta",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&ff_qos_info_sta_ac_vo,
-     {"AC_VO", "fixed.qosinfo.sta.ac.vo",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x01, "AC_VO", HFILL }},
+     {"AC_VO", "wlan_mgt.fixed.qosinfo.sta.ac.vo",
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x01, NULL, HFILL }},
 
     {&ff_qos_info_sta_ac_vi,
-     {"AC_VI", "fixed.qosinfo.sta.ac.vi",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x02, "AC_VI", HFILL }},
+     {"AC_VI", "wlan_mgt.fixed.qosinfo.sta.ac.vi",
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x02, NULL, HFILL }},
 
     {&ff_qos_info_sta_ac_bk,
-     {"AC_BK", "fixed.qosinfo.sta.ac.bk",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x04, "AC_BK", HFILL }},
+     {"AC_BK", "wlan_mgt.fixed.qosinfo.sta.ac.bk",
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x04, NULL, HFILL }},
 
     {&ff_qos_info_sta_ac_be,
-     {"AC_BE", "fixed.qosinfo.sta.ac.be",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x08, "AC_BE", HFILL }},
+     {"AC_BE", "wlan_mgt.fixed.qosinfo.sta.ac.be",
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x08, NULL, HFILL }},
 
     {&ff_qos_info_sta_q_ack,
-     {"Q-Ack", "fixed.qosinfo.sta.qack",
+     {"Q-Ack", "wlan_mgt.fixed.qosinfo.sta.qack",
       FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_q_ack_flag), 0x10, "QoS Ack", HFILL }},
 
     {&ff_qos_info_sta_max_sp_len,
-     {"Service Period (SP) Length", "fixed.qosinfo.sta.splen",
-      FT_UINT8, BASE_HEX, VALS (&ff_qos_info_sta_max_sp_len_flags) , 0x60, "Service Period (SP) Length", HFILL }},
+     {"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 }},
 
     {&ff_qos_info_sta_more_data_ack,
-     {"More Data Ack", "fixed.qosinfo.sta.moredataack",
-      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_more_data_ack_flag), 0x80, "More Data Ack", HFILL }},
-    /*** End: QoS Inforamtion STA Fixed Field - Dustin Johnson ***/
+     {"More Data Ack", "wlan_mgt.fixed.qosinfo.sta.moredataack",
+      FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_more_data_ack_flag), 0x80, NULL, HFILL }},
+    /*** End: QoS Information STA Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Spatial Multiplexing (SM) Power Control - Dustin Johnson ***/
     {&ff_sm_pwr_save,
-     {"Spatial Multiplexing (SM) Power Control", "fixed.sm.powercontrol",
-      FT_UINT8, BASE_HEX, NULL, 0, "Spatial Multiplexing (SM) Power Control", HFILL }},
+     {"Spatial Multiplexing (SM) Power Control", "wlan_mgt.fixed.sm.powercontrol",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&ff_sm_pwr_save_enabled,
-     {"SM Power Save", "fixed.sm.powercontrol.enabled",
-      FT_BOOLEAN, 8, TFS (&ff_sm_pwr_save_enabled_flag), 0x01, "Spatial Multiplexing (SM) Power Save", HFILL }},
+     {"SM Power Save", "wlan_mgt.fixed.sm.powercontrol.enabled",
+      FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01, "Spatial Multiplexing (SM) Power Save", HFILL }},
 
     {&ff_sm_pwr_save_sm_mode,
-     {"SM Mode", "fixed.sm.powercontrol.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 }},
 
     {&ff_sm_pwr_save_reserved,
-     {"Reserved", "fixed.sm.powercontrol.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0xFC, "Reserved", HFILL }},
+     {"Reserved", "wlan_mgt.fixed.sm.powercontrol.reserved",
+      FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL }},
     /*** End: Spatial Multiplexing (SM) Power Control - Dustin Johnson ***/
 
     /*** Begin: PCO Phase Control Fixed Field - Dustin Johnson ***/
     {&ff_pco_phase_cntrl,
-     {"Phased Coexistence Operation (PCO) Phase Control", "fixed.pco.phasecntrl",
-      FT_BOOLEAN, 0, TFS (&ff_pco_phase_cntrl_flag), 0, "Phased Coexistence Operation (PCO) Phase Control", HFILL }},
+     {"Phased Coexistence Operation (PCO) Phase Control", "wlan_mgt.fixed.pco.phasecntrl",
+      FT_BOOLEAN, BASE_NONE, TFS (&ff_pco_phase_cntrl_flag), 0x0, NULL, HFILL }},
     /*** End: PCO Phase Control Fixed Field - Dustin Johnson ***/
 
     /*** Begin: PSMP Parameter Set Fixed Field - Dustin Johnson ***/
     {&ff_psmp_param_set,
-     {"Power Save Multi-Poll (PSMP) Parameter Set", "fixed.psmp.paramset",
-      FT_UINT16, BASE_HEX, 0, 0, "Power Save Multi-Poll (PSMP) Parameter Set", HFILL }},
+     {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan_mgt.fixed.psmp.paramset",
+      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_psmp_param_set_n_sta,
-     {"Number of STA Info Fields Present", "fixed.psmp.paramset.nsta",
-      FT_UINT8, BASE_HEX, 0, 0, "Number of STA Info Fields Present", HFILL }},
+     {"Number of STA Info Fields Present", "wlan_mgt.fixed.psmp.paramset.nsta",
+      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_psmp_param_set_more_psmp,
-     {"More PSMP", "fixed.psmp.paramset.more",
-      FT_BOOLEAN, 0, TFS(&ff_psmp_param_set_more_psmp_flag), 0, "More Power Save Multi-Poll (PSMP)", HFILL }},
+     {"More PSMP", "wlan_mgt.fixed.psmp.paramset.more",
+      FT_BOOLEAN, BASE_NONE, TFS(&ff_psmp_param_set_more_psmp_flag), 0x0, "More Power Save Multi-Poll (PSMP)", HFILL }},
 
     {&ff_psmp_param_set_psmp_sequence_duration,
-     {"PSMP Sequence Duration", "fixed.psmp.paramset.seqduration",
+     {"PSMP Sequence Duration", "wlan_mgt.fixed.psmp.paramset.seqduration",
       FT_UINT16, BASE_DEC, 0, 0, "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL }},
     /*** End: PSMP Parameter Set Fixed Field - Dustin Johnson ***/
 
     /*** Begin: MIMO Control Fixed Field - Dustin Johnson ***/
     {&ff_mimo_cntrl_nc_index,
-     {"Nc Index", "fixed.mimo.control.ncindex",
+     {"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 }},
 
     {&ff_mimo_cntrl_nr_index,
-     {"Nr Index", "fixed.mimo.control.nrindex",
+     {"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 }},
 
     {&ff_mimo_cntrl_channel_width,
-     {"Channel Width", "fixed.mimo.control.chanwidth",
-      FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag), 0x0010, "Channel Width", HFILL }},
+     {"Channel Width", "wlan_mgt.fixed.mimo.control.chanwidth",
+      FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag), 0x0010, NULL, HFILL }},
 
     {&ff_mimo_cntrl_grouping,
-     {"Grouping (Ng)", "fixed.mimo.control.grouping",
-      FT_UINT16, BASE_HEX, VALS (&ff_mimo_cntrl_grouping_flags), 0x0060, "Grouping (Ng)", HFILL }},
+     {"Grouping (Ng)", "wlan_mgt.fixed.mimo.control.grouping",
+      FT_UINT16, BASE_HEX, VALS (&ff_mimo_cntrl_grouping_flags), 0x0060, NULL, HFILL }},
 
     {&ff_mimo_cntrl_coefficient_size,
-     {"Coefficient Size (Nb)", "fixed.mimo.control.cosize",
-      FT_UINT16, BASE_HEX, VALS (&ff_mimo_cntrl_coefficient_size_flags), 0x0180, "Coefficient Size (Nb)", HFILL }},
+     {"Coefficient Size (Nb)", "wlan_mgt.fixed.mimo.control.cosize",
+      FT_UINT16, BASE_HEX, VALS (&ff_mimo_cntrl_coefficient_size_flags), 0x0180, NULL, HFILL }},
 
     {&ff_mimo_cntrl_codebook_info,
-     {"Codebook Information", "fixed.mimo.control.codebookinfo",
-      FT_UINT16, BASE_HEX, VALS (&ff_mimo_cntrl_codebook_info_flags), 0x0600, "Codebook Information", HFILL }},
+     {"Codebook Information", "wlan_mgt.fixed.mimo.control.codebookinfo",
+      FT_UINT16, BASE_HEX, VALS (&ff_mimo_cntrl_codebook_info_flags), 0x0600, NULL, HFILL }},
 
     {&ff_mimo_cntrl_remaining_matrix_segment,
-     {"Remaining Matrix Segment", "fixed.mimo.control.matrixseg",
-      FT_UINT16, BASE_HEX, 0, 0x3800, "Remaining Matrix Segment", HFILL }},
+     {"Remaining Matrix Segment", "wlan_mgt.fixed.mimo.control.matrixseg",
+      FT_UINT16, BASE_HEX, 0, 0x3800, NULL, HFILL }},
 
     {&ff_mimo_cntrl_reserved,
-     {"Reserved", "fixed.mimo.control.reserved",
-      FT_UINT16, BASE_HEX, 0, 0xC000, "Reserved", HFILL }},
+     {"Reserved", "wlan_mgt.fixed.mimo.control.reserved",
+      FT_UINT16, BASE_HEX, 0, 0xC000, NULL, HFILL }},
 
     {&ff_mimo_cntrl_sounding_timestamp,
-     {"Sounding Timestamp", "fixed.mimo.control.soundingtime",
-      FT_UINT32, BASE_HEX, 0, 0, "Sounding Timestamp", HFILL }},
+     {"Sounding Timestamp", "wlan_mgt.fixed.mimo.control.soundingtime",
+      FT_UINT32, BASE_HEX, 0, 0, NULL, HFILL }},
     /*** End: MIMO Control Fixed Field - Dustin Johnson ***/
 
     /*** Begin: PSMP Station Information Fixed Field - Dustin Johnson ***/
     {&ff_psmp_sta_info,
-     {"Power Save Multi-Poll (PSMP) Station Information", "fixed.psmp.stainfo",
-      FT_UINT8, BASE_HEX, VALS (&ff_psmp_sta_info_flags), 0, "Power Save Multi-Poll (PSMP) Station Information", HFILL }},
+     {"Power Save Multi-Poll (PSMP) Station Information", "wlan_mgt.fixed.psmp.stainfo",
+      FT_UINT8, BASE_HEX, VALS (&ff_psmp_sta_info_flags), 0, NULL, HFILL }},
 
     {&ff_psmp_sta_info_dtt_start_offset,
-     {"DTT Start Offset", "fixed.psmp.stainfo.dttstart",
-      FT_UINT16, BASE_HEX, 0, 0, "DTT Start Offset", HFILL }},
+     {"DTT Start Offset", "wlan_mgt.fixed.psmp.stainfo.dttstart",
+      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_psmp_sta_info_dtt_duration,
-     {"DTT Duration", "fixed.psmp.stainfo.dttduration",
-      FT_UINT8, BASE_HEX, 0, 0, "DTT Duration", HFILL }},
+     {"DTT Duration", "wlan_mgt.fixed.psmp.stainfo.dttduration",
+      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_psmp_sta_info_sta_id,
-     {"Target Station ID", "fixed.psmp.stainfo.staid",
-      FT_UINT16, BASE_HEX, 0, 0, "Target Station ID", HFILL }},
+     {"Target Station ID", "wlan_mgt.fixed.psmp.stainfo.staid",
+      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_psmp_sta_info_utt_start_offset,
-     {"UTT Start Offset", "fixed.psmp.stainfo.uttstart",
-      FT_UINT16, BASE_HEX, 0, 0, "UTT Start Offset", HFILL }},
+     {"UTT Start Offset", "wlan_mgt.fixed.psmp.stainfo.uttstart",
+      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_psmp_sta_info_utt_duration,
-     {"UTT Duration", "fixed.psmp.stainfo.uttduration",
-      FT_UINT16, BASE_HEX, 0, 0, "UTT Duration", HFILL }},
+     {"UTT Duration", "wlan_mgt.fixed.psmp.stainfo.uttduration",
+      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_psmp_sta_info_reserved_small,
-     {"Reserved", "fixed.psmp.stainfo.reserved",
-      FT_UINT16, BASE_HEX, 0, 0, "Reserved", HFILL }},
+     {"Reserved", "wlan_mgt.fixed.psmp.stainfo.reserved",
+      FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_psmp_sta_info_reserved_large,
-     {"Reserved", "fixed.psmp.stainfo.reserved",
-      FT_UINT64, BASE_HEX, 0, 0, "Reserved", HFILL }},
+     {"Reserved", "wlan_mgt.fixed.psmp.stainfo.reserved",
+      FT_UINT64, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_psmp_sta_info_psmp_multicast_id,
-     {"Power Save Multi-Poll (PSMP) Multicast ID", "fixed.psmp.stainfo.multicastid",
-      FT_UINT64, BASE_HEX, 0, 0, "Power Save Multi-Poll (PSMP) Multicast ID", HFILL }},
+     {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan_mgt.fixed.psmp.stainfo.multicastid",
+      FT_UINT64, BASE_HEX, 0, 0, NULL, HFILL }},
     /*** End: PSMP Station Information Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Antenna Selection Fixed Field - Dustin Johnson ***/
     {&ff_ant_selection,
-     {"Antenna Selection", "fixed.antsel",
-      FT_UINT8, BASE_HEX, 0, 0, "Antenna Selection", HFILL }},
+     {"Antenna Selection", "wlan_mgt.fixed.antsel",
+      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&ff_ant_selection_0,
-     {"Antenna 0", "fixed.antsel.ant0",
-      FT_UINT8, BASE_HEX, 0, 0x01, "Antenna 0", HFILL }},
+     {"Antenna 0", "wlan_mgt.fixed.antsel.ant0",
+      FT_UINT8, BASE_HEX, 0, 0x01, NULL, HFILL }},
 
     {&ff_ant_selection_1,
-     {"Antenna 1", "fixed.antsel.ant1",
-      FT_UINT8, BASE_HEX, 0, 0x02, "Antenna 1", HFILL }},
+     {"Antenna 1", "wlan_mgt.fixed.antsel.ant1",
+      FT_UINT8, BASE_HEX, 0, 0x02, NULL, HFILL }},
 
     {&ff_ant_selection_2,
-     {"Antenna 2", "fixed.antsel.ant2",
-      FT_UINT8, BASE_HEX, 0, 0x04, "Antenna 2", HFILL }},
+     {"Antenna 2", "wlan_mgt.fixed.antsel.ant2",
+      FT_UINT8, BASE_HEX, 0, 0x04, NULL, HFILL }},
 
     {&ff_ant_selection_3,
-     {"Antenna 3", "fixed.antsel.ant3",
-      FT_UINT8, BASE_HEX, 0, 0x08, "Antenna 3", HFILL }},
+     {"Antenna 3", "wlan_mgt.fixed.antsel.ant3",
+      FT_UINT8, BASE_HEX, 0, 0x08, NULL, HFILL }},
 
     {&ff_ant_selection_4,
-     {"Antenna 4", "fixed.antsel.ant4",
-      FT_UINT8, BASE_HEX, 0, 0x10, "Antenna 4", HFILL }},
+     {"Antenna 4", "wlan_mgt.fixed.antsel.ant4",
+      FT_UINT8, BASE_HEX, 0, 0x10, NULL, HFILL }},
 
     {&ff_ant_selection_5,
-     {"Antenna 5", "fixed.antsel.ant5",
-      FT_UINT8, BASE_HEX, 0, 0x20, "Antenna 5", HFILL }},
+     {"Antenna 5", "wlan_mgt.fixed.antsel.ant5",
+      FT_UINT8, BASE_HEX, 0, 0x20, NULL, HFILL }},
 
     {&ff_ant_selection_6,
-     {"Antenna 6", "fixed.antsel.ant6",
-      FT_UINT8, BASE_HEX, 0, 0x40, "Antenna 6", HFILL }},
+     {"Antenna 6", "wlan_mgt.fixed.antsel.ant6",
+      FT_UINT8, BASE_HEX, 0, 0x40, NULL, HFILL }},
 
     {&ff_ant_selection_7,
-     {"Antenna 7", "fixed.antsel.ant7",
-      FT_UINT8, BASE_HEX, 0, 0x80, "Antenna 7", HFILL }},
+     {"Antenna 7", "wlan_mgt.fixed.antsel.ant7",
+      FT_UINT8, BASE_HEX, 0, 0x80, NULL, HFILL }},
     /*** End: Antenna Selection Fixed Field - Dustin Johnson ***/
 
     /*** Begin: Extended Channel Switch Announcement Fixed Field - Dustin Johnson ***/
     {&ff_ext_channel_switch_announcement,
-     {"Extended Channel Switch Announcement", "fixed.extchansw",
-      FT_UINT32, BASE_HEX, 0, 0, "", HFILL }},
+     {"Extended Channel Switch Announcement", "wlan_mgt.fixed.extchansw",
+      FT_UINT32, BASE_HEX, 0, 0, NULL, HFILL }},
     /*** End: Extended Channel Switch Announcement Fixed Field - Dustin Johnson ***/
 
     /*** Begin: HT Information Fixed Field - Dustin Johnson ***/
     {&ff_ht_info,
-     {"HT Information", "fixed.extchansw",
+     {"HT Information", "wlan_mgt.fixed.extchansw",
       FT_UINT8, BASE_HEX, 0, 0, "HT Information Fixed Field", HFILL }},
 
     {&ff_ht_info_information_request,
-     {"Information Request", "fixed.mimo.control.chanwidth",
-      FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag), 0x01, "Information Request", HFILL }},
+     {"Information Request", "wlan_mgt.fixed.mimo.control.chanwidth",
+      FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag), 0x01, NULL, HFILL }},
 
     {&ff_ht_info_40_mhz_intolerant,
-     {"40 MHz Intolerant", "fixed.mimo.control.chanwidth",
-      FT_BOOLEAN, 8, TFS(&ff_ht_info_40_mhz_intolerant_flag), 0x02, "40 MHz Intolerant", HFILL }},
+     {"40 MHz Intolerant", "wlan_mgt.fixed.mimo.control.chanwidth",
+      FT_BOOLEAN, 8, TFS(&ff_ht_info_40_mhz_intolerant_flag), 0x02, NULL, HFILL }},
 
     {&ff_ht_info_sta_chan_width,
-     {"Station Channel Width", "fixed.mimo.control.chanwidth",
-      FT_BOOLEAN, 8, TFS(&ff_ht_info_sta_chan_width_flag), 0x04, "Station Channel Width", HFILL }},
+     {"Station Channel Width", "wlan_mgt.fixed.mimo.control.chanwidth",
+      FT_BOOLEAN, 8, TFS(&ff_ht_info_sta_chan_width_flag), 0x04, NULL, HFILL }},
 
     {&ff_ht_info_reserved,
-     {"Reserved", "fixed.extchansw",
+     {"Reserved", "wlan_mgt.fixed.extchansw",
       FT_UINT8, BASE_HEX, 0, 0xF8, "Reserved Field", HFILL }},
     /*** End: HT Information Fixed Field - Dustin Johnson ***/
 
     /*** Begin: HT Action Fixed Field - Dustin Johnson ***/
     {&ff_ht_action,
-     {"HT Action", "fixed.htact",
+     {"HT Action", "wlan_mgt.fixed.htact",
       FT_UINT8, BASE_HEX, VALS (&ff_ht_action_flags), 0, "HT Action Code", HFILL }},
     /*** End: HT Action Fixed Field - Dustin Johnson ***/
 
     /*** Begin: MIMO CSI Matrices Report - Dustin Johnson ***/
     {&ff_mimo_csi_snr,
      {"Signal to Noise Ratio (SNR)", "wlan_mgt.mimo.csimatrices.snr",
-      FT_UINT8, BASE_HEX, NULL, 0, "Signal to Noise Ratio (SNR)", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
     /*** End: MIMO CSI Matrices Report - Dustin Johnson ***/
 
     {&ff_capture,
@@ -8559,7 +10325,7 @@ proto_register_ieee80211 (void)
 
     {&ff_cf_ess,
      {"ESS capabilities", "wlan_mgt.fixed.capabilities.ess",
-      FT_BOOLEAN, 16, TFS (&cf_ess_flags), 0x0001, "ESS capabilities", HFILL }},
+      FT_BOOLEAN, 16, TFS (&cf_ess_flags), 0x0001, NULL, HFILL }},
 
     {&ff_cf_ibss,
      {"IBSS status", "wlan_mgt.fixed.capabilities.ibss",
@@ -8581,7 +10347,7 @@ proto_register_ieee80211 (void)
 
     {&ff_cf_preamble,
      {"Short Preamble", "wlan_mgt.fixed.capabilities.preamble",
-      FT_BOOLEAN, 16, TFS (&cf_preamble_flags), 0x0020, "Short Preamble", HFILL }},
+      FT_BOOLEAN, 16, TFS (&cf_preamble_flags), 0x0020, NULL, HFILL }},
 
     {&ff_cf_pbcc,
      {"PBCC", "wlan_mgt.fixed.capabilities.pbcc",
@@ -8589,20 +10355,20 @@ proto_register_ieee80211 (void)
 
     {&ff_cf_agility,
      {"Channel Agility", "wlan_mgt.fixed.capabilities.agility",
-      FT_BOOLEAN, 16, TFS (&cf_agility_flags), 0x0080, "Channel Agility", HFILL }},
+      FT_BOOLEAN, 16, TFS (&cf_agility_flags), 0x0080, NULL, HFILL }},
 
     {&ff_cf_spec_man,
      {"Spectrum Management", "wlan_mgt.fixed.capabilities.spec_man",
-      FT_BOOLEAN, 16, TFS (&cf_spec_man_flags), 0x0100, "Spectrum Management", HFILL }},
+      FT_BOOLEAN, 16, TFS (&cf_spec_man_flags), 0x0100, NULL, HFILL }},
 
     {&ff_short_slot_time,
      {"Short Slot Time", "wlan_mgt.fixed.capabilities.short_slot_time",
-      FT_BOOLEAN, 16, TFS (&short_slot_time_flags), 0x0400, "Short Slot Time",
+      FT_BOOLEAN, 16, TFS (&short_slot_time_flags), 0x0400, NULL,
       HFILL }},
 
     {&ff_cf_apsd,
      {"Automatic Power Save Delivery", "wlan_mgt.fixed.capabilities.apsd",
-      FT_BOOLEAN, 16, TFS (&cf_apsd_flags), 0x0800, "Automatic Power Save Delivery", HFILL }},
+      FT_BOOLEAN, 16, TFS (&cf_apsd_flags), 0x0800, NULL, HFILL }},
 
     {&ff_dsss_ofdm,
      {"DSSS-OFDM", "wlan_mgt.fixed.capabilities.dsss_ofdm",
@@ -8611,11 +10377,11 @@ proto_register_ieee80211 (void)
 
     {&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, "Delayed Block Ack", HFILL }},
+      FT_BOOLEAN, 16, TFS (&cf_del_blk_ack_flags), 0x4000, NULL, HFILL }},
 
     {&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, "Immediate Block Ack", HFILL }},
+      FT_BOOLEAN, 16, TFS (&cf_imm_blk_ack_flags), 0x8000, NULL, HFILL }},
 
     {&ff_auth_seq,
      {"Authentication SEQ", "wlan_mgt.fixed.auth_seq",
@@ -8623,11 +10389,11 @@ proto_register_ieee80211 (void)
 
     {&ff_assoc_id,
      {"Association ID", "wlan_mgt.fixed.aid",
-      FT_UINT16, BASE_HEX, NULL, 0, "Association ID", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&ff_listen_ival,
      {"Listen Interval", "wlan_mgt.fixed.listen_ival",
-      FT_UINT16, BASE_HEX, NULL, 0, "Listen Interval", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&ff_current_ap,
      {"Current AP", "wlan_mgt.fixed.current_ap",
@@ -8657,6 +10423,68 @@ proto_register_ieee80211 (void)
      {"Dialog token", "wlan_mgt.fixed.dialog_token",
       FT_UINT8, BASE_HEX, NULL, 0, "Management action dialog token", HFILL }},
 
+    {&ff_marvell_action_type,
+     {"Marvell Action type", "wlan_mgt.fixed.mrvl_action_type",
+      FT_UINT8, BASE_DEC, VALS (&vendor_action_types_mrvl), 0,
+      "Vendor Specific Action Type (Marvell)", HFILL }},
+
+    {&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,
+      "Mesh action code(Marvell)", HFILL }},
+
+    {&ff_mesh_mgt_length,
+     {"Message Length", "wlan_mgt.fixed.length",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&ff_mesh_mgt_mode,
+     {"Message Mode", "wlan_mgt.fixed.mode",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+
+    {&ff_mesh_mgt_ttl,
+     {"Message TTL", "wlan_mgt.fixed.ttl",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&ff_mesh_mgt_dstcount,
+     {"Destination Count", "wlan_mgt.fixed.dstcount",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&ff_mesh_mgt_hopcount,
+     {"Hop Count", "wlan_mgt.fixed.hopcount",
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&ff_mesh_mgt_rreqid,
+     {"RREQ ID", "wlan_mgt.fixed.rreqid",
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&ff_mesh_mgt_sa,
+     {"Source Address", "wlan_mgt.fixed.sa",
+      FT_ETHER, BASE_NONE, NULL, 0, "Source MAC address", HFILL }},
+
+    {&ff_mesh_mgt_ssn,
+     {"SSN", "wlan_mgt.fixed.ssn",
+      FT_UINT32, BASE_DEC, NULL, 0, "Source Sequence Number", HFILL }},
+
+    {&ff_mesh_mgt_metric,
+     {"Metric", "wlan_mgt.fixed.metric",
+      FT_UINT32, BASE_DEC, NULL, 0, "Route Metric", HFILL }},
+
+    {&ff_mesh_mgt_flags,
+     {"RREQ Flags", "wlan_mgt.fixed.hopcount",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+
+    {&ff_mesh_mgt_da,
+     {"Destination Address", "wlan_mgt.fixed.da",
+      FT_ETHER, BASE_NONE, NULL, 0, "Destination MAC address", HFILL }},
+
+    {&ff_mesh_mgt_dsn,
+     {"DSN", "wlan_mgt.fixed.dsn",
+      FT_UINT32, BASE_DEC, NULL, 0, "Destination Sequence Number", HFILL }},
+
+    {&ff_mesh_mgt_lifetime,
+     {"Lifetime", "wlan_mgt.fixed.lifetime",
+      FT_UINT32, BASE_DEC, NULL, 0, "Route Lifetime", HFILL }},
+
     {&ff_wme_action_code,
      {"Action code", "wlan_mgt.fixed.action_code",
       FT_UINT16, BASE_HEX, VALS (&wme_action_codes), 0,
@@ -8703,7 +10531,7 @@ proto_register_ieee80211 (void)
 
     {&tag_length,
      {"Tag length", "wlan_mgt.tag.length",
-      FT_UINT8, BASE_DEC, NULL, 0, "Length of tag", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, "Length of tag", HFILL }},
 
     {&tag_interpretation,
      {"Tag interpretation", "wlan_mgt.tag.interpretation",
@@ -8721,17 +10549,17 @@ proto_register_ieee80211 (void)
     {&tim_dtim_count,
      {"DTIM count", "wlan_mgt.tim.dtim_count",
       FT_UINT8, BASE_DEC, NULL, 0,
-      "DTIM count", HFILL }},
+      NULL, HFILL }},
 
     {&tim_dtim_period,
      {"DTIM period", "wlan_mgt.tim.dtim_period",
       FT_UINT8, BASE_DEC, NULL, 0,
-      "DTIM period", HFILL }},
+      NULL, HFILL }},
 
     {&tim_bmapctl,
      {"Bitmap control", "wlan_mgt.tim.bmapctl",
       FT_UINT8, BASE_HEX, NULL, 0,
-      "Bitmap control", HFILL }},
+      NULL, HFILL }},
 
     {&rsn_cap,
      {"RSN Capabilities", "wlan_mgt.rsn.capabilities", FT_UINT16, BASE_HEX,
@@ -8740,24 +10568,24 @@ proto_register_ieee80211 (void)
     {&rsn_cap_preauth,
      {"RSN Pre-Auth capabilities", "wlan_mgt.rsn.capabilities.preauth",
       FT_BOOLEAN, 16, TFS (&rsn_preauth_flags), 0x0001,
-      "RSN Pre-Auth capabilities", HFILL }},
+      NULL, HFILL }},
 
     {&rsn_cap_no_pairwise,
      {"RSN No Pairwise capabilities", "wlan_mgt.rsn.capabilities.no_pairwise",
       FT_BOOLEAN, 16, TFS (&rsn_no_pairwise_flags), 0x0002,
-      "RSN No Pairwise capabilities", HFILL }},
+      NULL, HFILL }},
 
     {&rsn_cap_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,
-      "RSN PTKSA Replay Counter capabilities", HFILL }},
+      NULL, HFILL }},
 
     {&rsn_cap_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,
-      "RSN GTKSA Replay Counter capabilities", HFILL }},
+      NULL, HFILL }},
 
     {&ht_cap,
      {"HT Capabilities Info", "wlan_mgt.ht.capabilities", FT_UINT16, BASE_HEX,
@@ -8770,37 +10598,37 @@ proto_register_ieee80211 (void)
     {&ht_ldpc_coding,
      {"HT LDPC coding capability", "wlan_mgt.ht.capabilities.ldpccoding",
       FT_BOOLEAN, 16, TFS (&ht_ldpc_coding_flag), 0x0001,
-      "HT LDPC coding capability", HFILL }},
+      NULL, HFILL }},
 
     {&ht_chan_width,
      {"HT Support channel width", "wlan_mgt.ht.capabilities.width",
       FT_BOOLEAN, 16, TFS (&ht_chan_width_flag), 0x0002,
-      "HT Support channel width", HFILL }},
+      NULL, HFILL }},
 
     {&ht_sm_pwsave,
      {"HT SM Power Save", "wlan_mgt.ht.capabilities.sm",
       FT_UINT16, BASE_HEX, VALS (&ht_sm_pwsave_flag), 0x000c,
-      "HT SM Power Save", HFILL }},
+      NULL, HFILL }},
 
     {&ht_green,
      {"HT Green Field", "wlan_mgt.ht.capabilities.green",
       FT_BOOLEAN, 16, TFS (&ht_green_flag), 0x0010,
-      "HT Green Field", HFILL }},
+      NULL, HFILL }},
 
     {&ht_short20,
      {"HT Short GI for 20MHz", "wlan_mgt.ht.capabilities.short20",
-      FT_BOOLEAN, 16, TFS (&ht_tf_flag), 0x0020,
-      "HT Short GI for 20MHz", HFILL }},
+      FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0020,
+      NULL, HFILL }},
 
     {&ht_short40,
      {"HT Short GI for 40MHz", "wlan_mgt.ht.capabilities.short40",
-      FT_BOOLEAN, 16, TFS (&ht_tf_flag), 0x0040,
-      "HT Short GI for 40MHz", HFILL }},
+      FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0040,
+      NULL, HFILL }},
 
     {&ht_tx_stbc,
      {"HT Tx STBC", "wlan_mgt.ht.capabilities.txstbc",
-      FT_BOOLEAN, 16, TFS (&ht_tf_flag), 0x0080,
-      "HT Tx STBC", HFILL }},
+      FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0080,
+      NULL, HFILL }},
 
     {&ht_rx_stbc,
      {"HT Rx STBC", "wlan_mgt.ht.capabilities.rxstbc",
@@ -8810,12 +10638,12 @@ proto_register_ieee80211 (void)
     {&ht_delayed_block_ack,
      {"HT Delayed Block ACK", "wlan_mgt.ht.capabilities.delayedblockack",
       FT_BOOLEAN, 16, TFS (&ht_delayed_block_ack_flag), 0x0400,
-      "HT Delayed Block ACK", HFILL }},
+      NULL, HFILL }},
 
     {&ht_max_amsdu,
      {"HT Max A-MSDU length", "wlan_mgt.ht.capabilities.amsdu",
       FT_BOOLEAN, 16, TFS (&ht_max_amsdu_flag), 0x0800,
-      "HT Max A-MSDU length", HFILL }},
+      NULL, HFILL }},
 
     {&ht_dss_cck_40,
      {"HT DSSS/CCK mode in 40MHz", "wlan_mgt.ht.capabilities.dsscck",
@@ -8825,21 +10653,21 @@ proto_register_ieee80211 (void)
     {&ht_psmp,
      {"HT PSMP Support", "wlan_mgt.ht.capabilities.psmp",
       FT_BOOLEAN, 16, TFS (&ht_psmp_flag), 0x2000,
-      "HT PSMP Support", HFILL }},
+      NULL, HFILL }},
 
     {&ht_40_mhz_intolerant,
      {"HT Forty MHz Intolerant", "wlan_mgt.ht.capabilities.40mhzintolerant",
       FT_BOOLEAN, 16, TFS (&ht_40_mhz_intolerant_flag), 0x4000,
-      "HT Forty MHz Intolerant", HFILL }},
+      NULL, HFILL }},
 
     {&ht_l_sig,
      {"HT L-SIG TXOP Protection support", "wlan_mgt.ht.capabilities.lsig",
-      FT_BOOLEAN, 16, TFS (&ht_tf_flag), 0x8000,
-      "HT L-SIG TXOP Protection support", HFILL }},
+      FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x8000,
+      NULL, HFILL }},
 
     {&ampduparam,
      {"A-MPDU Parameters", "wlan_mgt.ht.ampduparam", FT_UINT16, BASE_HEX,
-      NULL, 0, "A-MPDU Parameters", HFILL }},
+      NULL, 0, NULL, HFILL }},
 
     {&ampduparam_vs,
      {"A-MPDU Parameters (VS)", "wlan_mgt.vs.ht.ampduparam", FT_UINT16, BASE_HEX,
@@ -8848,21 +10676,21 @@ proto_register_ieee80211 (void)
     {&ampduparam_mpdu,
      {"Maximum Rx A-MPDU Length", "wlan_mgt.ht.ampduparam.maxlength",
       FT_UINT8, BASE_HEX, 0 , 0x03,
-      "Maximum Rx A-MPDU Length", HFILL }},
+      NULL, HFILL }},
 
     {&ampduparam_mpdu_start_spacing,
      {"MPDU Density", "wlan_mgt.ht.ampduparam.mpdudensity",
       FT_UINT8, BASE_HEX, VALS (&ampduparam_mpdu_start_spacing_flags) , 0x1c,
-      "MPDU Density", HFILL }},
+      NULL, HFILL }},
 
     {&ampduparam_reserved,
      {"Reserved", "wlan_mgt.ht.ampduparam.reserved",
       FT_UINT8, BASE_HEX, NULL, 0xE0,
-      "Reserved", HFILL }},
+      NULL, HFILL }},
 
     {&mcsset,
      {"Rx Supported Modulation and Coding Scheme Set", "wlan_mgt.ht.mcsset",
-      FT_STRING, BASE_NONE, NULL, 0, "Rx Supported Modulation and Coding Scheme Set", HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&mcsset_vs,
      {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan_mgt.vs.ht.mcsset",
@@ -8870,59 +10698,59 @@ proto_register_ieee80211 (void)
 
     {&mcsset_rx_bitmask_0to7,
      {"Rx Bitmask Bits 0-7", "wlan_mgt.ht.mcsset.rxbitmask.0to7",
-      FT_UINT32, BASE_HEX, 0, 0x000000ff, "Rx Bitmask Bits 0-7", HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x000000ff, NULL, HFILL }},
 
     {&mcsset_rx_bitmask_8to15,
      {"Rx Bitmask Bits 8-15", "wlan_mgt.ht.mcsset.rxbitmask.8to15",
-      FT_UINT32, BASE_HEX, 0, 0x0000ff00, "Rx Bitmask Bits 8-15", HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x0000ff00, NULL, HFILL }},
 
     {&mcsset_rx_bitmask_16to23,
      {"Rx Bitmask Bits 16-23", "wlan_mgt.ht.mcsset.rxbitmask.16to23",
-      FT_UINT32, BASE_HEX, 0, 0x00ff0000, "Rx Bitmask Bits 16-23", HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x00ff0000, NULL, HFILL }},
 
     {&mcsset_rx_bitmask_24to31,
      {"Rx Bitmask Bits 24-31", "wlan_mgt.ht.mcsset.rxbitmask.24to31",
-      FT_UINT32, BASE_HEX, 0, 0xff000000, "Rx Bitmask Bits 24-31", HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0xff000000, NULL, HFILL }},
 
     {&mcsset_rx_bitmask_32,
      {"Rx Bitmask Bit 32", "wlan_mgt.ht.mcsset.rxbitmask.32",
-      FT_UINT32, BASE_HEX, 0, 0x000001, "Rx Bitmask Bit 32", HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x000001, NULL, HFILL }},
 
     {&mcsset_rx_bitmask_33to38,
      {"Rx Bitmask Bits 33-38", "wlan_mgt.ht.mcsset.rxbitmask.33to38",
-      FT_UINT32, BASE_HEX, 0, 0x00007e, "Rx Bitmask Bits 33-38", HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x00007e, NULL, HFILL }},
 
     {&mcsset_rx_bitmask_39to52,
      {"Rx Bitmask Bits 39-52", "wlan_mgt.ht.mcsset.rxbitmask.39to52",
-      FT_UINT32, BASE_HEX, 0, 0x1fff80, "Rx Bitmask Bits 39-52", HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x1fff80, NULL, HFILL }},
 
     {&mcsset_rx_bitmask_53to76,
      {"Rx Bitmask Bits 53-76", "wlan_mgt.ht.mcsset.rxbitmask.53to76",
-      FT_UINT32, BASE_HEX, 0, 0x1fffffe0, "Rx Bitmask Bits 53-76", HFILL }},
+      FT_UINT32, BASE_HEX, 0, 0x1fffffe0, NULL, HFILL }},
 
     {&mcsset_highest_data_rate,
      {"Highest Supported Data Rate", "wlan_mgt.ht.mcsset.highestdatarate",
-      FT_UINT16, BASE_HEX, 0, 0x03ff, "Highest Supported Data Rate", HFILL }},
+      FT_UINT16, BASE_HEX, 0, 0x03ff, NULL, HFILL }},
 
     {&mcsset_tx_mcs_set_defined,
-     {"Tx Suported MCS Set", "wlan_mgt.ht.mcsset.txsetdefined",
+     {"Tx Supported MCS Set", "wlan_mgt.ht.mcsset.txsetdefined",
       FT_BOOLEAN, 16, TFS (&mcsset_tx_mcs_set_defined_flag), 0x0001,
-      "Tx Suported MCS Set", HFILL }},
+      NULL, HFILL }},
 
     {&mcsset_tx_rx_mcs_set_not_equal,
      {"Tx and Rx MCS Set", "wlan_mgt.ht.mcsset.txrxmcsnotequal",
       FT_BOOLEAN, 16, TFS (&mcsset_tx_rx_mcs_set_not_equal_flag), 0x0002,
-      "Tx and Rx MCS Set", HFILL }},
+      NULL, HFILL }},
 
     {&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,
-      "Tx Maximum Number of Spatial Streams Supported", HFILL }},
+      NULL, HFILL }},
 
     {&mcsset_tx_unequal_modulation,
      {"Unequal Modulation", "wlan_mgt.ht.mcsset.txunequalmod",
-      FT_BOOLEAN, 16, TFS (&ht_tf_flag), 0x0010,
-      "Unequal Modulation", HFILL }},
+      FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0010,
+      NULL, HFILL }},
 
     {&htex_cap,
      {"HT Extended Capabilities", "wlan_mgt.htex.capabilities", FT_UINT16, BASE_HEX,
@@ -8934,32 +10762,32 @@ proto_register_ieee80211 (void)
 
     {&htex_pco,
      {"Transmitter supports PCO", "wlan_mgt.htex.capabilities.pco",
-      FT_BOOLEAN, 16, TFS (&ht_tf_flag), 0x0001,
-      "Transmitter supports PCO", HFILL }},
+      FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0001,
+      NULL, HFILL }},
 
     {&htex_transtime,
      {"Time needed to transition between 20MHz and 40MHz", "wlan_mgt.htex.capabilities.transtime",
       FT_UINT16, BASE_HEX, VALS (&htex_transtime_flags), 0x0006,
-      "Time needed to transition between 20MHz and 40MHz", HFILL }},
+      NULL, HFILL }},
 
     {&htex_mcs,
      {"MCS Feedback capability", "wlan_mgt.htex.capabilities.mcs",
       FT_UINT16, BASE_HEX, VALS (&htex_mcs_flags), 0x0300,
-      "MCS Feedback capability", HFILL }},
+      NULL, HFILL }},
 
     {&htex_htc_support,
      {"High Throughput", "wlan_mgt.htex.capabilities.htc",
-      FT_BOOLEAN, 16, TFS (&ht_tf_flag), 0x0400,
-      "High Throughput", HFILL }},
+      FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0400,
+      NULL, HFILL }},
 
     {&htex_rd_responder,
      {"Reverse Direction Responder", "wlan_mgt.htex.capabilities.rdresponder",
-      FT_BOOLEAN, 16, TFS (&ht_tf_flag), 0x0800,
-      "Reverse Direction Responder", HFILL }},
+      FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0800,
+      NULL, HFILL }},
 
     {&txbf,
      {"Transmit Beam Forming (TxBF) Capabilities", "wlan_mgt.txbf", FT_UINT16, BASE_HEX,
-      NULL, 0, "Transmit Beam Forming (TxBF) Capabilities", HFILL }},
+      NULL, 0, NULL, HFILL }},
 
     {&txbf_vs,
      {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan_mgt.vs.txbf", FT_UINT16, BASE_HEX,
@@ -8967,63 +10795,63 @@ proto_register_ieee80211 (void)
 
     {&txbf_cap,
      {"Transmit Beamforming", "wlan_mgt.txbf.txbf",
-      FT_BOOLEAN, 32, TFS (&ht_tf_flag), 0x00000001,
-      "Transmit Beamforming", HFILL }},
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000001,
+      NULL, HFILL }},
 
     {&txbf_rcv_ssc,
      {"Receive Staggered Sounding", "wlan_mgt.txbf.rxss",
-      FT_BOOLEAN, 32, TFS (&ht_tf_flag), 0x00000002,
-      "Receive Staggered Sounding", HFILL }},
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000002,
+      NULL, HFILL }},
 
     {&txbf_tx_ssc,
      {"Transmit Staggered Sounding", "wlan_mgt.txbf.txss",
-      FT_BOOLEAN, 32, TFS (&ht_tf_flag), 0x00000004,
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000004,
       "Transmit staggered sounding", HFILL }},
 
     {&txbf_rcv_ndp,
      {"Receive Null Data packet (NDP)", "wlan_mgt.txbf.rxndp",
-      FT_BOOLEAN, 32, TFS (&ht_tf_flag), 0x00000008,
-      "Receive Null Data packet (NDP)", HFILL }},
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000008,
+      NULL, HFILL }},
 
     {&txbf_tx_ndp,
      {"Transmit Null Data packet (NDP)", "wlan_mgt.txbf.txndp",
-      FT_BOOLEAN, 32, TFS (&ht_tf_flag), 0x00000010,
-      "Transmit Null Data packet (NDP)", HFILL }},
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000010,
+      NULL, HFILL }},
 
     {&txbf_impl_txbf,
      {"Implicit TxBF capable", "wlan_mgt.txbf.impltxbf",
-      FT_BOOLEAN, 32, TFS (&ht_tf_flag), 0x00000020,
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000020,
       "Implicit Transmit Beamforming (TxBF) capable", HFILL }},
 
     {&txbf_calib,
      {"Calibration", "wlan_mgt.txbf.calibration",
       FT_UINT32, BASE_HEX, VALS (&txbf_calib_flag), 0x000000c0,
-      "Calibration", HFILL }},
+      NULL, HFILL }},
 
     {&txbf_expl_csi,
      {"STA can apply TxBF using CSI explicit feedback", "wlan_mgt.txbf.csi",
-      FT_BOOLEAN, 32, TFS (&ht_tf_flag), 0x00000100,
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000100,
       "Station can apply TxBF using CSI explicit feedback", HFILL }},
 
     {&txbf_expl_uncomp_fm,
      {"STA can apply TxBF using uncompressed beamforming feedback matrix", "wlan_mgt.txbf.fm.uncompressed.tbf",
-      FT_BOOLEAN, 32, TFS (&ht_tf_flag), 0x00000200,
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000200,
       "Station can apply TxBF using uncompressed beamforming feedback matrix", HFILL }},
 
     {&txbf_expl_comp_fm,
      {"STA can apply TxBF using compressed beamforming feedback matrix", "wlan_mgt.txbf.fm.compressed.tbf",
-      FT_BOOLEAN, 32, TFS (&ht_tf_flag), 0x00000400,
+      FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000400,
       "Station can apply TxBF using compressed beamforming feedback matrix", HFILL }},
 
     {&txbf_expl_bf_csi,
      {"Receiver can return explicit CSI feedback", "wlan_mgt.txbf.rcsi",
       FT_UINT32, BASE_HEX, VALS (&txbf_feedback_flags), 0x00001800,
-      "Receiver can return explicit CSI feedback", HFILL }},
+      NULL, HFILL }},
 
     {&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,
-      "Receiver can return explicit uncompressed Beamforming Feedback Matrix", HFILL }},
+      NULL, HFILL }},
 
     {&txbf_expl_comp_fm_feed,
      {"STA can compress and use compressed Beamforming Feedback Matrix", "wlan_mgt.txbf.fm.compressed.bf",
@@ -9033,7 +10861,7 @@ proto_register_ieee80211 (void)
     {&txbf_min_group,
      {"Minimal grouping used for explicit feedback reports", "wlan_mgt.txbf.mingroup",
       FT_UINT32, BASE_HEX, VALS (&txbf_min_group_flags), 0x00060000,
-      "Minimal grouping used for explicit feedback reports", HFILL }},
+      NULL, HFILL }},
 
     {&txbf_csi_num_bf_ant,
      {"Max antennae STA can support when CSI feedback required", "wlan_mgt.txbf.csinumant",
@@ -9051,19 +10879,19 @@ proto_register_ieee80211 (void)
       "Max antennae station can support when compressed Beamforming feedback required", HFILL }},
 
     {&txbf_csi_max_rows_bf,
-     {"Maximum number of rows of CSI explicit feeback", "wlan_mgt.txbf.csi.maxrows",
+     {"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,
-      "Maximum number of rows of CSI explicit feeback", HFILL }},
+      NULL, HFILL }},
 
     {&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,
-      "Maximum number of space time streams for which channel dimensions can be simultaneously estimated", HFILL }},
+      NULL, HFILL }},
 
     {&txbf_resrv,
      {"Reserved", "wlan_mgt.txbf.reserved",
       FT_UINT32, BASE_HEX, NULL, 0xe0000000,
-      "Reserved", HFILL }},
+      NULL, HFILL }},
 
     {&hta_cap,
      {"HT Additional Capabilities", "wlan_mgt.hta.capabilities", FT_UINT16, BASE_HEX,
@@ -9072,7 +10900,7 @@ proto_register_ieee80211 (void)
     {&hta_ext_chan_offset,
      {"Extension Channel Offset", "wlan_mgt.hta.capabilities.extchan",
       FT_UINT16, BASE_HEX, VALS (&hta_ext_chan_offset_flag), 0x0003,
-      "Extension Channel Offset", HFILL }},
+      NULL, HFILL }},
 
     {&hta_rec_tx_width,
      {"Recommended Tx Channel Width", "wlan_mgt.hta.capabilities.rectxwidth",
@@ -9082,22 +10910,22 @@ proto_register_ieee80211 (void)
     {&hta_rifs_mode,
      {"Reduced Interframe Spacing (RIFS) Mode", "wlan_mgt.hta.capabilities.rifsmode",
       FT_BOOLEAN, 16, TFS (&hta_rifs_mode_flag), 0x0008,
-      "Reduced Interframe Spacing (RIFS) Mode", HFILL }},
+      NULL, HFILL }},
 
     {&hta_controlled_access,
      {"Controlled Access Only", "wlan_mgt.hta.capabilities.controlledaccess",
       FT_BOOLEAN, 16, TFS (&hta_controlled_access_flag), 0x0010,
-      "Controlled Access Only", HFILL }},
+      NULL, HFILL }},
 
     {&hta_service_interval,
      {"Service Interval Granularity", "wlan_mgt.hta.capabilities.serviceinterval",
       FT_UINT16, BASE_HEX, VALS (&hta_service_interval_flag), 0x00E0,
-      "Service Interval Granularity", HFILL }},
+      NULL, HFILL }},
 
     {&hta_operating_mode,
      {"Operating Mode", "wlan_mgt.hta.capabilities.operatingmode",
       FT_UINT16, BASE_HEX, VALS (&hta_operating_mode_flag), 0x0003,
-      "Operating Mode", HFILL }},
+      NULL, HFILL }},
 
     {&hta_non_gf_devices,
      {"Non Greenfield (GF) devices Present", "wlan_mgt.hta.capabilities.nongfdevices",
@@ -9107,348 +10935,353 @@ proto_register_ieee80211 (void)
     {&hta_basic_stbc_mcs,
      {"Basic STB Modulation and Coding Scheme (MCS)", "wlan_mgt.hta.capabilities.",
       FT_UINT16, BASE_HEX, NULL , 0x007f,
-      "Basic STB Modulation and Coding Scheme (MCS)", HFILL }},
+      NULL, HFILL }},
 
     {&hta_dual_stbc_protection,
      {"Dual Clear To Send (CTS) Protection", "wlan_mgt.hta.capabilities.",
       FT_BOOLEAN, 16, TFS (&hta_dual_stbc_protection_flag), 0x0080,
-      "Dual Clear To Send (CTS) Protection", HFILL }},
+      NULL, HFILL }},
 
     {&hta_secondary_beacon,
      {"Secondary Beacon", "wlan_mgt.hta.capabilities.",
       FT_BOOLEAN, 16, TFS (&hta_secondary_beacon_flag), 0x0100,
-      "Secondary Beacon", HFILL }},
+      NULL, HFILL }},
 
     {&hta_lsig_txop_protection,
      {"L-SIG TXOP Protection Support", "wlan_mgt.hta.capabilities.",
       FT_BOOLEAN, 16, TFS (&hta_lsig_txop_protection_flag), 0x0200,
-      "L-SIG TXOP Protection Support", HFILL }},
+      NULL, HFILL }},
 
     {&hta_pco_active,
      {"Phased Coexistence Operation (PCO) Active", "wlan_mgt.hta.capabilities.",
       FT_BOOLEAN, 16, TFS (&hta_pco_active_flag), 0x0400,
-      "Phased Coexistence Operation (PCO) Active", HFILL }},
+      NULL, HFILL }},
 
     {&hta_pco_phase,
      {"Phased Coexistence Operation (PCO) Phase", "wlan_mgt.hta.capabilities.",
       FT_BOOLEAN, 16, TFS (&hta_pco_phase_flag), 0x0800,
-      "Phased Coexistence Operation (PCO) Phase", HFILL }},
+      NULL, HFILL }},
 
     {&antsel,
-     {"Antenna Selection (ASEL) Capabilties", "wlan_mgt.asel",
-      FT_UINT8, BASE_HEX, NULL, 0, "Antenna Selection (ASEL) Capabilties", HFILL }},
+     {"Antenna Selection (ASEL) Capabilities", "wlan_mgt.asel",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&antsel_vs,
-     {"Antenna Selection (ASEL) Capabilties (VS)", "wlan_mgt.vs.asel",
-      FT_UINT8, BASE_HEX, NULL, 0, "Vendor Specific Antenna Selection (ASEL) Capabilties", HFILL }},
+     {"Antenna Selection (ASEL) Capabilities (VS)", "wlan_mgt.vs.asel",
+      FT_UINT8, BASE_HEX, NULL, 0, "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL }},
 
     {&antsel_b0,
      {"Antenna Selection Capable", "wlan_mgt.asel.capable",
-      FT_BOOLEAN, 8, TFS (&ht_tf_flag), 0x01, "Antenna Selection Capable", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x01, NULL, HFILL }},
 
     {&antsel_b1,
      {"Explicit CSI Feedback Based Tx ASEL", "wlan_mgt.asel.txcsi",
-      FT_BOOLEAN, 8, TFS (&ht_tf_flag), 0x02, "Explicit CSI Feedback Based Tx ASEL", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x02, NULL, HFILL }},
 
     {&antsel_b2,
      {"Antenna Indices Feedback Based Tx ASEL", "wlan_mgt.asel.txif",
-      FT_BOOLEAN, 8, TFS (&ht_tf_flag), 0x04, "Antenna Indices Feedback Based Tx ASEL", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x04, NULL, HFILL }},
 
     {&antsel_b3,
      {"Explicit CSI Feedback", "wlan_mgt.asel.csi",
-      FT_BOOLEAN, 8, TFS (&ht_tf_flag), 0x08, "Explicit CSI Feedback", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x08, NULL, HFILL }},
 
     {&antsel_b4,
      {"Antenna Indices Feedback", "wlan_mgt.asel.if",
-      FT_BOOLEAN, 8, TFS (&ht_tf_flag), 0x10, "Antenna Indices Feedback", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x10, NULL, HFILL }},
 
     {&antsel_b5,
      {"Rx ASEL", "wlan_mgt.asel.rx",
-      FT_BOOLEAN, 8, TFS (&ht_tf_flag), 0x20, "Rx ASEL", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x20, NULL, HFILL }},
 
     {&antsel_b6,
      {"Tx Sounding PPDUs", "wlan_mgt.asel.sppdu",
-      FT_BOOLEAN, 8, TFS (&ht_tf_flag), 0x40, "Tx Sounding PPDUs", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x40, NULL, HFILL }},
 
     {&antsel_b7,
      {"Reserved", "wlan_mgt.asel.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0x80, "Reserved", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL }},
 
     {&ht_info_delimiter1,
      {"HT Information Delimiter #1", "wlan_mgt.ht.info.delim1",
-      FT_UINT8, BASE_HEX, NULL, 0xff, "HT Information Delimiter #1", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xff, NULL, HFILL }},
 
     {&ht_info_primary_channel,
      {"Primary Channel", "wlan_mgt.ht.info.primarychannel",
-      FT_UINT8, BASE_DEC, NULL, 0, "Primary Channel", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&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, "Secondary channel offset", HFILL }},
+      FT_UINT8, BASE_HEX, VALS (&ht_info_secondary_channel_offset_flags), 0x03, NULL, HFILL }},
 
     {&ht_info_channel_width,
      {"Supported channel width", "wlan_mgt.ht.info.chanwidth",
-      FT_BOOLEAN, 8, TFS (&ht_info_channel_width_flag), 0x04, "Supported channel width", HFILL }},
+      FT_BOOLEAN, 8, TFS (&ht_info_channel_width_flag), 0x04, NULL, HFILL }},
 
     {&ht_info_rifs_mode,
      {"Reduced Interframe Spacing (RIFS)", "wlan_mgt.ht.info.rifs",
-      FT_BOOLEAN, 8, TFS (&ht_info_rifs_mode_flag), 0x08, "Reduced Interframe Spacing (RIFS)", HFILL }},
+      FT_BOOLEAN, 8, TFS (&ht_info_rifs_mode_flag), 0x08, NULL, HFILL }},
 
     {&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, "Power Save Multi-Poll (PSMP) stations only", HFILL }},
+      FT_BOOLEAN, 8, TFS (&ht_info_psmp_stas_only_flag), 0x10, NULL, HFILL }},
 
     {&ht_info_service_interval_granularity,
      {"Shortest service interval", "wlan_mgt.ht.info.",
-      FT_UINT8, BASE_HEX, VALS (&ht_info_service_interval_granularity_flags), 0xe0, "Shortest service interval", HFILL }},
+      FT_UINT8, BASE_HEX, VALS (&ht_info_service_interval_granularity_flags), 0xe0, NULL, HFILL }},
 
     {&ht_info_delimiter2,
      {"HT Information Delimiter #2", "wlan_mgt.ht.info.delim2",
-      FT_UINT16, BASE_HEX, NULL, 0xffff, "HT Information Delimiter #2", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0xffff, NULL, HFILL }},
 
     {&ht_info_operating_mode,
      {"Operating mode of BSS", "wlan_mgt.ht.info.operatingmode",
-      FT_UINT16, BASE_HEX, VALS (&ht_info_operating_mode_flags), 0x0003, "Operating mode of BSS", HFILL }},
+      FT_UINT16, BASE_HEX, VALS (&ht_info_operating_mode_flags), 0x0003, NULL, HFILL }},
 
     {&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, "Non-greenfield STAs present", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_non_greenfield_sta_present_flag), 0x0004, NULL, HFILL }},
 
     {&ht_info_transmit_burst_limit,
      {"Transmit burst limit", "wlan_mgt.ht.info.burstlim",
-      FT_BOOLEAN, 16, TFS (&ht_info_transmit_burst_limit_flag), 0x0008, "Transmit burst limit", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_transmit_burst_limit_flag), 0x0008, NULL, HFILL }},
 
     {&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, "OBSS non-HT STAs present", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_obss_non_ht_stas_present_flag), 0x0010, NULL, HFILL }},
 
     {&ht_info_reserved_1,
      {"Reserved", "wlan_mgt.ht.info.reserved1",
-      FT_UINT16, BASE_HEX, NULL, 0xffe0, "Reserved", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0xffe0, NULL, HFILL }},
 
     {&ht_info_delimiter3,
      {"HT Information Delimiter #3", "wlan_mgt.ht.info.delim3",
-      FT_UINT16, BASE_HEX, NULL, 0xffff, "HT Information Delimiter #3", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0xffff, NULL, HFILL }},
 
     {&ht_info_reserved_2,
      {"Reserved", "wlan_mgt.ht.info.reserved2",
-      FT_UINT16, BASE_HEX, NULL, 0x003f, "Reserved", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x003f, NULL, HFILL }},
 
     {&ht_info_dual_beacon,
      {"Dual beacon", "wlan_mgt.ht.info.dualbeacon",
-      FT_BOOLEAN, 16, TFS (&ht_info_dual_beacon_flag), 0x0040, "Dual beacon", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_dual_beacon_flag), 0x0040, NULL, HFILL }},
 
     {&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, "Dual Clear To Send (CTS) protection", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_dual_cts_protection_flag), 0x0080, NULL, HFILL }},
 
     {&ht_info_secondary_beacon,
      {"Beacon ID", "wlan_mgt.ht.info.secondarybeacon",
-      FT_BOOLEAN, 16, TFS (&ht_info_secondary_beacon_flag), 0x0100, "Beacon ID", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_secondary_beacon_flag), 0x0100, NULL, HFILL }},
 
     {&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, "L-SIG TXOP Protection Full Support", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_lsig_txop_protection_full_support_flag), 0x0200, NULL, HFILL }},
 
     {&ht_info_pco_active,
      {"Phased Coexistence Operation (PCO)", "wlan_mgt.ht.info.pco.active",
-      FT_BOOLEAN, 16, TFS (&ht_info_pco_active_flag), 0x0400, "Phased Coexistence Operation (PCO)", HFILL }},
+      FT_BOOLEAN, 16, TFS (&tfs_active_inactive), 0x0400, NULL, HFILL }},
 
     {&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, "Phased Coexistence Operation (PCO) Phase", HFILL }},
+      FT_BOOLEAN, 16, TFS (&ht_info_pco_phase_flag), 0x0800, NULL, HFILL }},
 
     {&ht_info_reserved_3,
      {"Reserved", "wlan_mgt.ht.info.reserved3",
-      FT_UINT16, BASE_HEX, NULL, 0xf000, "Reserved", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0xf000, NULL, HFILL }},
 
     {&hf_tag_secondary_channel_offset,
      {"Secondary Channel Offset", "wlan_mgt.secchanoffset",
       FT_UINT8, BASE_HEX, VALS (&hf_tag_secondary_channel_offset_flags), 0,
-      "Secondary Channel Offset", HFILL }},
+      NULL, HFILL }},
 
     /*** Begin: Power Capability Tag - Dustin Johnson ***/
     {&hf_tag_power_capability_min,
      {"Minimum Transmit Power", "wlan_mgt.powercap.min",
-      FT_INT8, BASE_HEX, NULL, 0, "Minimum Transmit Power", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_power_capability_max,
      {"Maximum Transmit Power", "wlan_mgt.powercap.max",
-      FT_INT8, BASE_HEX, NULL, 0, "Maximum Transmit Power", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
     /*** End: Power Capability Tag - Dustin Johnson ***/
-
+    {&hf_tag_tpc_report_trsmt_pow,
+     {"Transmit Power", "wlan_mgt.tcprep.trsmt_pow",
+      FT_INT8, BASE_DEC, NULL, 0, NULL, HFILL }},
+    {&hf_tag_tpc_report_link_mrg,
+     {"Link Margin", "wlan_mgt.tcprep.link_mrg",
+      FT_INT8, BASE_DEC, NULL, 0, NULL, HFILL }},
     /*** Begin: Supported Channels Tag - Dustin Johnson ***/
     {&hf_tag_supported_channels,
      {"Supported Channels Set", "wlan_mgt.supchan",
-      FT_UINT8, BASE_DEC, NULL, 0, "Supported Channels Set", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_supported_channels_first,
      {"First Supported Channel", "wlan_mgt.supchan.first",
-      FT_UINT8, BASE_HEX, NULL, 0, "First Supported Channel", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_supported_channels_range,
      {"Supported Channel Range", "wlan_mgt.supchan.range",
-      FT_UINT8, BASE_HEX, NULL, 0, "Supported Channel Range", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
     /*** End: Supported Channels Tag - Dustin Johnson ***/
 
     /*** Start: Measurement Request Tag  - Dustin Johnson***/
     {&hf_tag_measure_request_measurement_token,
      {"Measurement Token", "wlan_mgt.measure.req.measuretoken",
-      FT_UINT8, BASE_HEX, NULL, 0xff, "Measurement Token", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xff, NULL, HFILL }},
 
     {&hf_tag_measure_request_mode,
      {"Measurement Request Mode", "wlan_mgt.measure.req.reqmode",
-      FT_UINT8, BASE_HEX, NULL, 0xff, "Measurement Request Mode", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xff, NULL, HFILL }},
 
     {&hf_tag_measure_request_mode_reserved1,
      {"Reserved", "wlan_mgt.measure.req.reqmode.reserved1",
-      FT_UINT8, BASE_HEX, NULL, 0x01, "Reserved", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
 
     {&hf_tag_measure_request_mode_enable,
      {"Measurement Request Mode Field", "wlan_mgt.measure.req.reqmode.enable",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_enable_flag), 0x02, "Measurement Request Mode Field", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x02, NULL, HFILL }},
 
     {&hf_tag_measure_request_mode_request,
      {"Measurement Reports", "wlan_mgt.measure.req.reqmode.request",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_acc_not_acc), 0x04, "Measurement Reports", HFILL }},
+      FT_BOOLEAN, 8, TFS (&hf_tag_measure_acc_not_acc), 0x04, NULL, HFILL }},
 
     {&hf_tag_measure_request_mode_report,
      {"Autonomous Measurement Reports", "wlan_mgt.measure.req.reqmode.report",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_acc_not_acc), 0x08, "Autonomous Measurement Reports", HFILL }},
+      FT_BOOLEAN, 8, TFS (&hf_tag_measure_acc_not_acc), 0x08, NULL, HFILL }},
 
     {&hf_tag_measure_request_mode_reserved2,
      {"Reserved", "wlan_mgt.measure.req.reqmode.reserved2",
-      FT_UINT8, BASE_HEX, NULL, 0xf0, "Reserved", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xf0, NULL, HFILL }},
 
     {&hf_tag_measure_request_type,
      {"Measurement Request Type", "wlan_mgt.measure.req.reqtype",
-      FT_UINT8, BASE_HEX, VALS (&hf_tag_measure_request_type_flags), 0x00, "Measurement Request Type", HFILL }},
+      FT_UINT8, BASE_HEX, VALS (&hf_tag_measure_request_type_flags), 0x00, NULL, HFILL }},
 
     {&hf_tag_measure_request_channel_number,
      {"Measurement Channel Number", "wlan_mgt.measure.req.channelnumber",
-      FT_UINT8, BASE_HEX, NULL, 0, "Measurement Channel Number", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_start_time,
      {"Measurement Start Time", "wlan_mgt.measure.req.starttime",
-      FT_UINT64, BASE_HEX, NULL, 0, "Measurement Start Time", HFILL }},
+      FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_duration,
      {"Measurement Duration", "wlan_mgt.measure.req.channelnumber",
-      FT_UINT16, BASE_HEX, NULL, 0, "Measurement Duration", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_regulatory_class,
      {"Measurement Channel Number", "wlan_mgt.measure.req.regclass",
-      FT_UINT8, BASE_HEX, NULL, 0, "Measurement Channel Number", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_randomization_interval,
      {"Randomization Interval", "wlan_mgt.measure.req.randint",
-      FT_UINT16, BASE_HEX, NULL, 0, "Randomization Interval", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_measurement_mode,
      {"Measurement Mode", "wlan_mgt.measure.req.measurementmode",
-      FT_UINT8, BASE_HEX, VALS(&hf_tag_measure_request_measurement_mode_flags), 0, "Measurement Mode", HFILL }},
+      FT_UINT8, BASE_HEX, VALS(&hf_tag_measure_request_measurement_mode_flags), 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_bssid,
      {"BSSID", "wlan_mgt.measure.req.bssid",
-      FT_ETHER, BASE_NONE, NULL, 0, "BSSID", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_reporting_condition,
      {"Reporting Condition", "wlan_mgt.measure.req.repcond",
-      FT_UINT8, BASE_HEX, VALS(&hf_tag_measure_request_reporting_condition_flags), 0, "Reporting Condition", HFILL }},
+      FT_UINT8, BASE_HEX, VALS(&hf_tag_measure_request_reporting_condition_flags), 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_threshold_offset_unsigned,
      {"Threshold/Offset", "wlan_mgt.measure.req.threshold",
-      FT_UINT8, BASE_HEX, 0, 0, "Threshold/Offset", HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_threshold_offset_signed,
      {"Threshold/Offset", "wlan_mgt.measure.req.threshold",
-      FT_INT8, BASE_HEX, 0, 0, "Threshold/Offset", HFILL }},
+      FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_report_mac,
      {"MAC on wich to gather data", "wlan_mgt.measure.req.reportmac",
-      FT_ETHER, BASE_NONE, NULL, 0, "MAC on wich to gather data", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_request_group_id,
      {"Group ID", "wlan_mgt.measure.req.groupid",
-      FT_INT8, BASE_HEX, VALS(&hf_tag_measure_request_group_id_flags), 0, "Group ID", HFILL }},
+      FT_UINT8, BASE_HEX, VALS(&hf_tag_measure_request_group_id_flags), 0, NULL, HFILL }},
     /*** End: Measurement Request Tag  - Dustin Johnson***/
 
     /*** Start: Measurement Report Tag  - Dustin Johnson***/
     {&hf_tag_measure_report_measurement_token,
      {"Measurement Token", "wlan_mgt.measure.req.clr",
-      FT_UINT8, BASE_HEX, NULL, 0, "Measurement Token", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_mode,
      {"Measurement Report Mode", "wlan_mgt.measure.req.clr",
-      FT_UINT8, BASE_HEX, NULL, 0, "Measurement Report Mode", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_mode_late,
      {"Measurement Report Mode Field", "wlan_mgt.measure.rep.repmode.late",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_enable_flag), 0x01, "Measurement Report Mode Field", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01, NULL, HFILL }},
 
     {&hf_tag_measure_report_mode_incapable,
      {"Measurement Reports", "wlan_mgt.measure.rep.repmode.incapable",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_acc_not_acc), 0x02, "Measurement Reports", HFILL }},
+      FT_BOOLEAN, 8, TFS (&hf_tag_measure_acc_not_acc), 0x02, NULL, HFILL }},
 
     {&hf_tag_measure_report_mode_refused,
      {"Autonomous Measurement Reports", "wlan_mgt.measure.rep.repmode.refused",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_acc_not_acc), 0x04, "Autonomous Measurement Reports", HFILL }},
+      FT_BOOLEAN, 8, TFS (&hf_tag_measure_acc_not_acc), 0x04, NULL, HFILL }},
 
     {&hf_tag_measure_report_mode_reserved,
      {"Reserved", "wlan_mgt.measure.rep.repmode.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0xf8, "Reserved", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xf8, NULL, HFILL }},
 
     {&hf_tag_measure_report_type,
      {"Measurement Report Type", "wlan_mgt.measure.rep.reptype",
-      FT_UINT8, BASE_HEX, VALS (&hf_tag_measure_report_type_flags), 0x00, "Measurement Report Type", HFILL }},
+      FT_UINT8, BASE_HEX, VALS (&hf_tag_measure_report_type_flags), 0x00, NULL, HFILL }},
 
     {&hf_tag_measure_report_channel_number,
      {"Measurement Channel Number", "wlan_mgt.measure.rep.channelnumber",
-      FT_UINT8, BASE_HEX, NULL, 0, "Measurement Channel Number", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_start_time,
      {"Measurement Start Time", "wlan_mgt.measure.rep.starttime",
-      FT_UINT64, BASE_HEX, NULL, 0, "Measurement Start Time", HFILL }},
+      FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_duration,
      {"Measurement Duration", "wlan_mgt.measure.rep.channelnumber",
-      FT_UINT16, BASE_HEX, NULL, 0, "Measurement Duration", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_cca_busy_fraction,
      {"CCA Busy Fraction", "wlan_mgt.measure.rep.ccabusy",
-      FT_UINT8, BASE_HEX, NULL, 0, "CCA Busy Fraction", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_basic_map_field,
      {"Map Field", "wlan_mgt.measure.rep.mapfield",
-      FT_UINT8, BASE_HEX, NULL, 0, "Map Field", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_map_field_bss,
      {"BSS", "wlan_mgt.measure.rep.repmode.mapfield.bss",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_map_field_bss_flag), 0x01, "BSS", HFILL }},
+      FT_BOOLEAN, 8, TFS (&hf_tag_measure_map_field_bss_flag), 0x01, NULL, HFILL }},
 
     {&hf_tag_measure_map_field_odfm,
-     {"Orthogonal Frequencey Division Multiplexing (ODFM) Preamble", "wlan_mgt.measure.rep.repmode.mapfield.bss",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_detected_not_detected), 0x02, "Orthogonal Frequencey Division Multiplexing (ODFM) Preamble", HFILL }},
+     {"Orthogonal Frequency Division Multiplexing (ODFM) Preamble", "wlan_mgt.measure.rep.repmode.mapfield.bss",
+      FT_BOOLEAN, 8, TFS (&hf_tag_measure_detected_not_detected), 0x02, NULL, HFILL }},
 
     {&hf_tag_measure_map_field_unident_signal,
      {"Unidentified Signal", "wlan_mgt.measure.rep.repmode.mapfield.unidentsig",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_detected_not_detected), 0x04, "Unidentified Signal", HFILL }},
+      FT_BOOLEAN, 8, TFS (&hf_tag_measure_detected_not_detected), 0x04, NULL, HFILL }},
 
     {&hf_tag_measure_map_field_radar,
      {"Radar", "wlan_mgt.measure.rep.repmode.mapfield.radar",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_detected_not_detected), 0x08, "Radar", HFILL }},
+      FT_BOOLEAN, 8, TFS (&hf_tag_measure_detected_not_detected), 0x08, NULL, HFILL }},
 
     {&hf_tag_measure_map_field_unmeasured,
      {"Unmeasured", "wlan_mgt.measure.rep.repmode.mapfield.unmeasured",
-      FT_BOOLEAN, 8, TFS (&hf_tag_measure_true_false), 0x10, "Unmeasured", HFILL }},
+      FT_BOOLEAN, 8, TFS (&tfs_true_false), 0x10, NULL, HFILL }},
 
     {&hf_tag_measure_map_field_reserved,
      {"Reserved", "wlan_mgt.measure.rep.repmode.mapfield.reserved",
-      FT_UINT8, BASE_HEX, NULL, 0xe0, "Reserved", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0xe0, NULL, HFILL }},
 
     {&hf_tag_measure_rpi_histogram_report,
-     {"Receive Power Indicator (RPI) Histogram Report", "",
-      FT_STRING, BASE_NONE, NULL, 0, "Receive Power Indicator (RPI) Histogram Report", HFILL }},
+     {"Receive Power Indicator (RPI) Histogram Report", "wlan_mgt.measure.rep.rpi.histogram_report",
+      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_rpi_histogram_report_0,
      {"RPI 0 Density", "wlan_mgt.measure.rep.rpi.rpi0density",
@@ -9484,204 +11317,253 @@ proto_register_ieee80211 (void)
 
     {&hf_tag_measure_report_regulatory_class,
      {"Regulatory Class", "wlan_mgt.measure.rep.regclass",
-      FT_UINT8, BASE_HEX, NULL, 0, "Regulatory Class", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_channel_load,
      {"Channel Load", "wlan_mgt.measure.rep.chanload",
-      FT_UINT8, BASE_HEX, NULL, 0, "Channel Load", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_frame_info,
      {"Reported Frame Information", "wlan_mgt.measure.rep.frameinfo",
-      FT_UINT8, BASE_HEX, NULL, 0, "Reported Frame Information", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_frame_info_phy_type,
      {"Condensed PHY", "wlan_mgt.measure.rep.frameinfo.phytype",
-      FT_UINT8, BASE_HEX, NULL, 0x7F, "Condensed PHY", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
 
     {&hf_tag_measure_report_frame_info_frame_type,
      {"Reported Frame Type", "wlan_mgt.measure.rep.frameinfo.frametype",
-      FT_UINT8, BASE_HEX, TFS(&hf_tag_measure_report_frame_info_frame_type_flag), 0x80, "Reported Frame Type", HFILL }},
+      FT_UINT8, BASE_HEX, TFS(&hf_tag_measure_report_frame_info_frame_type_flag), 0x80, NULL, HFILL }},
 
     {&hf_tag_measure_report_rcpi,
      {"Received Channel Power Indicator (RCPI)", "wlan_mgt.measure.rep.rcpi",
-      FT_UINT8, BASE_HEX, NULL, 0, "Received Channel Power Indicator (RCPI)", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_rsni,
      {"Received Signal to Noise Indicator (RSNI)", "wlan_mgt.measure.rep.rsni",
-      FT_UINT8, BASE_HEX, NULL, 0, "Received Signal to Noise Indicator (RSNI)", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_bssid,
      {"BSSID Being Reported", "wlan_mgt.measure.rep.bssid",
-      FT_ETHER, BASE_NONE, NULL, 0, "BSSID Being Reported", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_ant_id,
      {"Antenna ID", "wlan_mgt.measure.rep.antid",
-      FT_UINT8, BASE_HEX, NULL, 0, "Antenna ID", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_measure_report_parent_tsf,
      {"Parent Timing Synchronization Function (TSF)", "wlan_mgt.measure.rep.parenttsf",
-      FT_UINT32, BASE_HEX, NULL, 0, "Parent Timing Synchronization Function (TSF)", HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
     /*** End: Measurement Report Tag  - Dustin Johnson***/
 
     /*** Begin: Extended Capabilities Tag - Dustin Johnson ***/
+    /* Table 7-35a-Capabilities field */
     {&hf_tag_extended_capabilities,
-     {"HT Information Exchange Support", "wlan_mgt.extcap.infoexchange",
-      FT_UINT8, BASE_HEX, TFS(&hf_tag_extended_capabilities_flag), 0, "HT Information Exchange Support", HFILL }},
+     {"Extended Capabilities", "wlan_mgt.extcap",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+
+    /* P802.11n/D6.0 */
+    {&hf_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 }},
+
+    /* P802.11p/D4.0 */
+    {&hf_tag_extended_capabilities_b1,
+     {"On-demand beacon", "wlan_mgt.extcap.infoexchange.b1",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0002, NULL, HFILL }},
+
+    {&hf_tag_extended_capabilities_b2,
+     {"Extended Channel Switching", "wlan_mgt.extcap.infoexchange.b2",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0004, NULL, HFILL }},
+
+    {&hf_tag_extended_capabilities_b3,
+     {"WAVE indication", "wlan_mgt.extcap.infoexchange.b3",
+      FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0008, NULL, HFILL }},
+    /*End: P802.11p/D4.0 */
+
     /*** End: Extended Capabilities Tag - Dustin Johnson ***/
 
     /*** Begin: Neighbor Report Tag - Dustin Johnson ***/
     {&hf_tag_neighbor_report_bssid,
      {"BSSID", "wlan_mgt.nreport.bssid",
-      FT_ETHER, BASE_NONE, NULL, 0, "BSSID", HFILL }},
+      FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info,
      {"BSSID Information", "wlan_mgt.nreport.bssid.info",
-      FT_UINT32, BASE_HEX, NULL, 0, "BSSID Information", HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_reachability,
      {"AP Reachability", "wlan_mgt.nreport.bssid.info.reachability",
-      FT_UINT16, BASE_HEX, NULL, 0x0003, "AP Reachability", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0003, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_security,
      {"Security", "wlan_mgt.nreport.bssid.info.security",
-      FT_UINT16, BASE_HEX, NULL, 0x0004, "Security", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0004, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_key_scope,
      {"Key Scope", "wlan_mgt.nreport.bssid.info.keyscope",
-      FT_UINT16, BASE_HEX, NULL, 0x0008, "Key Scope", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0008, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_capability_spec_mng,
      {"Capability: Spectrum Management", "wlan_mgt.nreport.bssid.info.capability.specmngt",
-      FT_UINT16, BASE_HEX, NULL, 0x0010, "Capability: Spectrum Management", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0010, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_capability_qos,
      {"Capability: QoS", "wlan_mgt.nreport.bssid.info.capability.qos",
-      FT_UINT16, BASE_HEX, NULL, 0x0020, "Capability: QoS", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0020, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_capability_apsd,
      {"Capability: APSD", "wlan_mgt.nreport.bssid.info.capability.apsd",
-      FT_UINT16, BASE_HEX, NULL, 0x0040, "Capability: APSD", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0040, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_capability_radio_msnt,
      {"Capability: Radio Measurement", "wlan_mgt.nreport.bssid.info.capability.radiomsnt",
-      FT_UINT16, BASE_HEX, NULL, 0x0080, "Capability: Radio Measurement", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0080, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_capability_dback,
      {"Capability: Delayed Block Ack", "wlan_mgt.nreport.bssid.info.capability.dback",
-      FT_UINT16, BASE_HEX, NULL, 0x0100, "Capability: Delayed Block Ack", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0100, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_capability_iback,
      {"Capability: Immediate Block Ack", "wlan_mgt.nreport.bssid.info.capability.iback",
-      FT_UINT16, BASE_HEX, NULL, 0x0200, "Capability: Immediate Block Ack", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0200, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_mobility_domain,
      {"Mobility Domain", "wlan_mgt.nreport.bssid.info.mobilitydomain",
-      FT_UINT16, BASE_HEX, NULL, 0x0400, "Mobility Domain", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0400, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_high_throughput,
      {"High Throughput", "wlan_mgt.nreport.bssid.info.hthoughput",
-      FT_UINT16, BASE_HEX, NULL, 0x0800, "High Throughput", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0x0800, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_bssid_info_reserved,
      {"Reserved", "wlan_mgt.nreport.bssid.info.reserved",
-      FT_UINT32, BASE_HEX, NULL, 0, "Reserved", HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_reg_class,
      {"Regulatory Class", "wlan_mgt.nreport.regclass",
-      FT_UINT8, BASE_HEX, NULL, 0, "Regulatory Class", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_channel_number,
      {"Channel Number", "wlan_mgt.nreport.channumber",
-      FT_UINT8, BASE_HEX, NULL, 0, "Channel Number", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_neighbor_report_phy_type,
      {"PHY Type", "wlan_mgt.nreport.phytype",
-      FT_UINT8, BASE_HEX, NULL, 0, "PHY Type", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
     /*** End: Neighbor Report Tag - Dustin Johnson ***/
 
     /*** Begin: Extended Channel Switch Announcement Tag - Dustin Johnson ***/
     {&hf_tag_ext_channel_switch_announcement_switch_mode,
      {"Channel Switch Mode", "wlan_mgt.extchanswitch.switchmode",
-      FT_UINT8, BASE_HEX, VALS (&hf_tag_ext_channel_switch_announcement_switch_mode_flags), 0, "Channel Switch Mode", HFILL }},
+      FT_UINT8, BASE_HEX, VALS (&hf_tag_ext_channel_switch_announcement_switch_mode_flags), 0, NULL, HFILL }},
 
     {&hf_tag_ext_channel_switch_announcement_new_reg_class,
      {"New Regulatory Class", "wlan_mgt.extchanswitch.new.regclass",
-      FT_UINT8, BASE_HEX, NULL, 0, "New Regulatory Class", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_ext_channel_switch_announcement_new_chan_number,
      {"New Channel Number", "wlan_mgt.extchanswitch.new.channumber",
-      FT_UINT8, BASE_HEX, NULL, 0, "New Channel Number", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_ext_channel_switch_announcement_switch_count,
      {"Channel Switch Count", "wlan_mgt.extchanswitch.switchcount",
-      FT_UINT8, BASE_HEX, NULL, 0, "Channel Switch Count", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
     /*** End: Extended Channel Switch Announcement Tag - Dustin Johnson ***/
 
     /*** Begin: Supported Regulatory Classes Tag - Dustin Johnson ***/
     {&hf_tag_supported_reg_classes_current,
      {"Current Regulatory Class", "wlan_mgt.supregclass.current",
-      FT_UINT8, BASE_HEX, NULL, 0, "Current Regulatory Class", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_tag_supported_reg_classes_alternate,
      {"Alternate Regulatory Classes", "wlan_mgt.supregclass.alt",
-      FT_STRING, BASE_NONE, NULL, 0, "Alternate Regulatory Classes", HFILL }},
+      FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
     /*** End: Supported Regulatory Classes Tag - Dustin Johnson ***/
 
+    {&hf_marvell_ie_type,
+     {"Type", "wlan_mgt.marvell.ie.type",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+
+    {&hf_marvell_ie_mesh_subtype,
+     {"Subtype", "wlan_mgt.marvell.ie.subtype",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+
+    {&hf_marvell_ie_mesh_version,
+     {"Version", "wlan_mgt.marvell.ie.version",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+
+    {&hf_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 }},
+
+    {&hf_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 }},
+
+    {&hf_marvell_ie_mesh_cap,
+     {"Mesh Capabilities", "wlan_mgt.marvell.ie.cap",
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
+
+    {&hf_marvell_ie_data,
+      { "Marvell IE data", "wlan_mgt.marvell.data",
+        FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+
     {&hf_aironet_ie_type,
      {"Aironet IE type", "wlan_mgt.aironet.type",
-      FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals), 0, "Aironet IE type", HFILL }},
+      FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals), 0, NULL, HFILL }},
 
     {&hf_aironet_ie_version,
      {"Aironet IE CCX version?", "wlan_mgt.aironet.version",
-      FT_UINT8, BASE_DEC, NULL, 0, "Aironet IE CCX version?", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_aironet_ie_data,
       { "Aironet IE data", "wlan_mgt.aironet.data",
-        FT_BYTES, BASE_NONE, NULL, 0x0, "Aironet IE data", HFILL }},
+        FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
 
     {&hf_qbss_version,
      {"QBSS Version", "wlan_mgt.qbss.version",
-      FT_UINT8, BASE_DEC, NULL, 0, "QBSS Version", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_qbss_scount,
      {"Station Count", "wlan_mgt.qbss.scount",
-      FT_UINT16, BASE_DEC, NULL, 0, "Station Count", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_qbss_cu,
      {"Channel Utilization", "wlan_mgt.qbss.cu",
-       FT_UINT8, BASE_DEC, NULL, 0, "Channel Utilization", HFILL }},
+       FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_qbss_adc,
      {"Available Admission Capabilities", "wlan_mgt.qbss.adc",
-     FT_UINT8, BASE_DEC, NULL, 0, "Available Admission Capabilities", HFILL }},
+     FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_qbss2_cu,
      {"Channel Utilization", "wlan_mgt.qbss2.cu",
-       FT_UINT8, BASE_DEC, NULL, 0, "Channel Utilization", HFILL }},
+       FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_qbss2_gl,
      {"G.711 CU Quantum", "wlan_mgt.qbss2.glimit",
-      FT_UINT8, BASE_DEC, NULL, 0, "G.711 CU Quantum", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_qbss2_cal,
      {"Call Admission Limit", "wlan_mgt.qbss2.cal",
-      FT_UINT8, BASE_DEC, NULL, 0, "Call Admission Limit", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_qbss2_scount,
      {"Station Count", "wlan_mgt.qbss2.scount",
-      FT_UINT16, BASE_DEC, NULL, 0, "Station Count", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_aironet_ie_qos_unk1,
      {"Aironet IE QoS unknown 1", "wlan_mgt.aironet.qos.unk1",
-      FT_UINT8, BASE_HEX, NULL, 0, "Aironet IE QoS unknown 1", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_aironet_ie_qos_paramset,
      {"Aironet IE QoS paramset", "wlan_mgt.aironet.qos.paramset",
-      FT_UINT8, BASE_DEC, NULL, 0, "Aironet IE QoS paramset", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_aironet_ie_qos_val,
      {"Aironet IE QoS valueset", "wlan_mgt.aironet.qos.val",
-      FT_BYTES, BASE_NONE, NULL, 0, "Aironet IE QoS valueset", HFILL }},
+      FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&hf_ts_info,
      {"Traffic Stream (TS) Info", "wlan_mgt.ts_info",
@@ -9725,75 +11607,75 @@ proto_register_ieee80211 (void)
 
     {&tspec_nor_msdu,
      {"Normal MSDU Size", "wlan_mgt.tspec.nor_msdu",
-      FT_UINT16, BASE_DEC, NULL, 0, "Normal MSDU Size", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_max_msdu,
      {"Maximum MSDU Size", "wlan_mgt.tspec.max_msdu",
-      FT_UINT16, BASE_DEC, NULL, 0, "Maximum MSDU Size", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_min_srv,
      {"Minimum Service Interval", "wlan_mgt.tspec.min_srv",
-      FT_UINT32, BASE_DEC, NULL, 0, "Minimum Service Interval", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_max_srv,
      {"Maximum Service Interval", "wlan_mgt.tspec.max_srv",
-      FT_UINT32, BASE_DEC, NULL, 0, "Maximum Service Interval", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_inact_int,
      {"Inactivity Interval", "wlan_mgt.tspec.inact_int",
-      FT_UINT32, BASE_DEC, NULL, 0, "Inactivity Interval", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_susp_int,
      {"Suspension Interval", "wlan_mgt.tspec.susp_int",
-      FT_UINT32, BASE_DEC, NULL, 0, "Suspension Interval", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_srv_start,
      {"Service Start Time", "wlan_mgt.tspec.srv_start",
-      FT_UINT32, BASE_DEC, NULL, 0, "Service Start Time", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_min_data,
      {"Minimum Data Rate", "wlan_mgt.tspec.min_data",
-      FT_UINT32, BASE_DEC, NULL, 0, "Minimum Data Rate", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_mean_data,
      {"Mean Data Rate", "wlan_mgt.tspec.mean_data",
-      FT_UINT32, BASE_DEC, NULL, 0, "Mean Data Rate", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_peak_data,
      {"Peak Data Rate", "wlan_mgt.tspec.peak_data",
-      FT_UINT32, BASE_DEC, NULL, 0, "Peak Data Rate", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_burst_size,
      {"Burst Size", "wlan_mgt.tspec.burst_size",
-      FT_UINT32, BASE_DEC, NULL, 0, "Burst Size", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_delay_bound,
      {"Delay Bound", "wlan_mgt.tspec.delay_bound",
-      FT_UINT32, BASE_DEC, NULL, 0, "Delay Bound", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_min_phy,
      {"Minimum PHY Rate", "wlan_mgt.tspec.min_phy",
-      FT_UINT32, BASE_DEC, NULL, 0, "Minimum PHY Rate", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_surplus,
      {"Surplus Bandwidth Allowance", "wlan_mgt.tspec.surplus",
-      FT_UINT16, BASE_DEC, NULL, 0, "Surplus Bandwidth Allowance", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&tspec_medium,
      {"Medium Time", "wlan_mgt.tspec.medium",
-      FT_UINT16, BASE_DEC, NULL, 0, "Medium Time", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&ts_delay,
      {"Traffic Stream (TS) Delay", "wlan_mgt.ts_delay",
-      FT_UINT32, BASE_DEC, NULL, 0, "Traffic Stream (TS) Delay", HFILL }},
+      FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&hf_class_type,
      {"Classifier Type", "wlan_mgt.tclas.class_type", FT_UINT8, BASE_DEC,
-      VALS (classifier_type), 0, "Classifier Type", HFILL }},
+      VALS (classifier_type), 0, NULL, HFILL }},
 
     {&hf_class_mask,
      {"Classifier Mask", "wlan_mgt.tclas.class_mask", FT_UINT8, BASE_HEX,
-      NULL, 0, "Classifier Mask", HFILL }},
+      NULL, 0, NULL, HFILL }},
 
     {&hf_ether_type,
      {"Ethernet Type", "wlan_mgt.tclas.params.type", FT_UINT8, BASE_DEC,
@@ -9801,7 +11683,7 @@ proto_register_ieee80211 (void)
 
     {&hf_tclas_process,
      {"Processing", "wlan_mgt.tclas_proc.processing", FT_UINT8, BASE_DEC,
-      VALS (tclas_process), 0, "TCLAS Porcessing", HFILL }},
+      VALS (tclas_process), 0, "TCLAS Processing", HFILL }},
 
     {&hf_sched_info,
      {"Schedule Info", "wlan_mgt.sched.sched_info",
@@ -9809,39 +11691,39 @@ proto_register_ieee80211 (void)
 
     {&hf_sched_srv_start,
      {"Service Start Time", "wlan_mgt.sched.srv_start",
-      FT_UINT32, BASE_HEX, NULL, 0, "Service Start Time", HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_sched_srv_int,
      {"Service Interval", "wlan_mgt.sched.srv_int",
-      FT_UINT32, BASE_HEX, NULL, 0, "Service Interval", HFILL }},
+      FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_sched_spec_int,
      {"Specification Interval", "wlan_mgt.sched.spec_int",
-      FT_UINT16, BASE_HEX, NULL, 0, "Specification Interval", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&hf_action,
      {"Action", "wlan_mgt.fixed.action",
-      FT_UINT8, BASE_HEX, NULL, 0, "Action", HFILL }},
+      FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
 
     {&cf_version,
      {"IP Version", "wlan_mgt.tclas.params.version",
-      FT_UINT8, BASE_DEC, NULL, 0, "IP Version", HFILL }},
+      FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&cf_ipv4_src,
      {"IPv4 Src Addr", "wlan_mgt.tclas.params.ipv4_src",
-      FT_IPv4, BASE_NONE, NULL, 0, "IPv4 Src Addr", HFILL }},
+      FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&cf_ipv4_dst,
      {"IPv4 Dst Addr", "wlan_mgt.tclas.params.ipv4_dst",
-      FT_IPv4, BASE_NONE, NULL, 0, "IPv4 Dst Addr", HFILL }},
+      FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&cf_src_port,
      {"Source Port", "wlan_mgt.tclas.params.src_port",
-      FT_UINT16, BASE_DEC, NULL, 0, "Source Port", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&cf_dst_port,
      {"Destination Port", "wlan_mgt.tclas.params.dst_port",
-      FT_UINT16, BASE_DEC, NULL, 0, "Destination Port", HFILL }},
+      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     {&cf_dscp,
      {"IPv4 DSCP", "wlan_mgt.tclas.params.dscp",
@@ -9853,11 +11735,11 @@ proto_register_ieee80211 (void)
 
     {&cf_ipv6_src,
      {"IPv6 Src Addr", "wlan_mgt.tclas.params.ipv6_src",
-      FT_IPv6, BASE_NONE, NULL, 0, "IPv6 Src Addr", HFILL }},
+      FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&cf_ipv6_dst,
      {"IPv6 Dst Addr", "wlan_mgt.tclas.params.ipv6_dst",
-      FT_IPv6, BASE_NONE, NULL, 0, "IPv6 Dst Addr", HFILL }},
+      FT_IPv6, BASE_NONE, NULL, 0, NULL, HFILL }},
 
     {&cf_flow,
      {"Flow Label", "wlan_mgt.tclas.params.flow",
@@ -9865,7 +11747,19 @@ proto_register_ieee80211 (void)
 
     {&cf_tag_type,
      {"802.1Q Tag Type", "wlan_mgt.tclas.params.tag_type",
-      FT_UINT16, BASE_HEX, NULL, 0, "802.1Q Tag Type", HFILL }},
+      FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
+
+    {&cf_aruba,
+     {"Aruba Type", "wlan_mgt.aruba_type",
+      FT_UINT16, BASE_DEC, VALS(aruba_mgt_typevals), 0, "Aruba Management", HFILL }},
+
+    {&cf_aruba_hb_seq,
+     {"Aruba Heartbeat Sequence", "wlan_mgt.aruba_heartbeat_sequence",
+      FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL }},
+
+    {&cf_aruba_mtu,
+     {"Aruba MTU Size", "wlan_mgt.aruba_mtu_size",
+      FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
 
     /* Start: HT Control (+HTC) */
     {&hf_htc,
@@ -9927,14 +11821,14 @@ proto_register_ieee80211 (void)
       FT_BOOLEAN, 16, NULL, 0x4000, "High Throughput Control AC Constraint", HFILL }},
     {&hf_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) */
   };
 
   static hf_register_info aggregate_fields[] = {
     {&amsdu_msdu_header_text,
-     {"MAC Service Data Unit (MSDU)",  "wlan_aggregate.msduheader", FT_UINT16,
-      BASE_DEC, 0, 0x0000, "MAC Service Data Unit (MSDU)", HFILL }},
+     {"MAC Service Data Unit (MSDU)", "wlan_aggregate.msduheader", FT_UINT16,
+      BASE_DEC, 0, 0x0000, NULL, HFILL }}
   };
 
   static gint *tree_array[] = {
@@ -9972,8 +11866,8 @@ proto_register_ieee80211 (void)
     &ett_ht_info_delimiter3_tree,
     &ett_msdu_aggregation_parent_tree,
     &ett_msdu_aggregation_subframe_tree,
-    &ett_msdu_aggregation_msdu_tree,
     &ett_tag_measure_request_tree,
+    &ett_tag_ex_cap,
     &ett_tag_supported_channels,
     &ett_tag_neighbor_report_bssid_info_tree,
     &ett_tag_neighbor_report_bssid_info_capability_tree,
@@ -9991,13 +11885,19 @@ proto_register_ieee80211 (void)
     &ett_80211_mgt_ie,
     &ett_tsinfo_tree,
     &ett_sched_tree,
-    &ett_fcs
+    &ett_fcs,
+    &ett_radio,
+    &ett_pst_tree,
+    &ett_pst_cap_tree,
+    &ett_chan_noc_tree,
+    &ett_wave_chnl_tree
   };
   module_t *wlan_module;
 
+  memset (&wlan_stats, 0, sizeof wlan_stats);
 
   proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
-      "IEEE 802.11 Agfregate Data", "wlan_aggregate");
+      "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");
@@ -10011,18 +11911,38 @@ proto_register_ieee80211 (void)
   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_radio", dissect_ieee80211_radio, proto_wlan);
   register_dissector("wlan_ht", dissect_ieee80211_ht, proto_wlan);
   register_init_routine(wlan_defragment_init);
+  register_init_routine(wlan_retransmit_init);
+
+  proto_radio = proto_register_protocol("802.11 radio information", "Radio", "radio");
+
+  proto_prism = proto_register_protocol("Prism capture header", "Prism", "prism");
+  proto_register_field_array(proto_prism, hf_prism, array_length(hf_prism));
+
+  proto_wlancap = proto_register_protocol("AVS WLAN Capture header",
+      "AVS WLANCAP", "wlancap");
+  proto_register_field_array(proto_wlancap, hf_wlancap, array_length(hf_wlancap));
+  register_dissector("wlancap", dissect_wlancap, proto_wlancap);
 
   wlan_tap = register_tap("wlan");
 
   /* Register configuration options */
   wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
   prefs_register_bool_preference(wlan_module, "defragment",
-      "Reassemble fragmented 802.11 datagrams",
-      "Whether fragmented 802.11 datagrams should be reassembled",
-      &wlan_defragment);
+    "Reassemble fragmented 802.11 datagrams",
+    "Whether fragmented 802.11 datagrams should be reassembled",
+     &wlan_defragment);
+
+  prefs_register_bool_preference(wlan_module, "ignore_draft_ht",
+    "Ignore vendor-specific HT elements",
+    "Don't dissect 802.11n draft HT elements (which might contain duplicate information).",
+    &wlan_ignore_draft_ht);
+
+  prefs_register_bool_preference(wlan_module, "retransmitted",
+    "Call subdissector for retransmitted 802.11 frames",
+    "Whether retransmitted 802.11 frames should be subdissected",
+    &wlan_subdissector);
 
   prefs_register_bool_preference(wlan_module, "check_fcs",
     "Assume packets have FCS",
@@ -10032,10 +11952,10 @@ proto_register_ieee80211 (void)
   /* Davide Schiera (2006-11-26): changed "WEP bit" in "Protection bit"    */
   /*    (according to the document IEEE Std 802.11i-2004)              */
   prefs_register_enum_preference(wlan_module, "ignore_wep",
-      "Ignore the Protection bit",
-      "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
-      "and some also leave the IV (initialization vector).",
-      &wlan_ignore_wep, wlan_ignore_wep_options, TRUE);
+    "Ignore the Protection bit",
+    "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
+    "and some also leave the IV (initialization vector).",
+    &wlan_ignore_wep, wlan_ignore_wep_options, TRUE);
 
 #ifndef USE_ENV
 
@@ -10044,27 +11964,27 @@ proto_register_ieee80211 (void)
 #ifdef HAVE_AIRPDCAP
   /* Davide Schiera (2006-11-26): added reference to WPA/WPA2 decryption    */
   prefs_register_bool_preference(wlan_module, "enable_decryption",
-      "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
-      &enable_decryption);
+    "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
+    &enable_decryption);
 #else
   prefs_register_bool_preference(wlan_module, "enable_decryption",
-      "Enable decryption", "Enable WEP decryption",
-      &enable_decryption);
+    "Enable decryption", "Enable WEP decryption",
+    &enable_decryption);
 #endif
 
 #ifdef HAVE_AIRPDCAP
   prefs_register_static_text_preference(wlan_module, "info_decryption_key",
-      "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
-      "010203040506070809101111213 (104/128-bit WEP),\n"
-      "wpa-pwd:MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
-      "wpa-psk:0102030405...6061626364 (WPA + 256-bit key).  "
-      "Invalid keys will be ignored.",
-      "This is just a static text");
+    "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
+    "010203040506070809101111213 (104/128-bit WEP),\n"
+    "wpa-pwd:MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
+    "wpa-psk:0102030405...6061626364 (WPA + 256-bit key).  "
+    "Invalid keys will be ignored.",
+    "Valid key formats");
 #else
   prefs_register_static_text_preference(wlan_module, "info_decryption_key",
-      "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
-      "010203040506070809101111213 (104/128-bit WEP)",
-      "This is just a static text");
+    "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
+    "010203040506070809101111213 (104/128-bit WEP)",
+    "Valid key formats");
 #endif
 
   for (i = 0; i < MAX_ENCRYPTION_KEYS; i++) {
@@ -10073,28 +11993,28 @@ proto_register_ieee80211 (void)
     key_desc = g_string_new("");
     wep_keystr[i] = NULL;
     /* prefs_register_*_preference() expects unique strings, so
-     * we build them using g_string_sprintf and just leave them
+     * we build them using g_string_printf and just leave them
      * allocated. */
 #ifdef HAVE_AIRPDCAP
-  g_string_sprintf(key_name, "wep_key%d", i + 1);
-  g_string_sprintf(key_title, "Key #%d", i + 1);
-  /* Davide Schiera (2006-11-26): modified keys input tooltip          */
-  g_string_sprintf(key_desc,
+    g_string_printf(key_name, "wep_key%d", i + 1);
+    g_string_printf(key_title, "Key #%d", i + 1);
+    /* Davide Schiera (2006-11-26): modified keys input tooltip          */
+    g_string_printf(key_desc,
       "Key #%d string can be:"
       "   <wep hexadecimal key>;"
       "   wep:<wep hexadecimal key>;"
       "   wpa-pwd:<passphrase>[:<ssid>];"
       "   wpa-psk:<wpa hexadecimal key>", i + 1);
 #else
-    g_string_sprintf(key_name, "wep_key%d", i + 1);
-    g_string_sprintf(key_title, "WEP key #%d", i + 1);
-    g_string_sprintf(key_desc, "WEP key #%d bytes in hexadecimal (A:B:C:D:E) "
-        "[40bit], (A:B:C:D:E:F:G:H:I:J:K:L:M) [104bit], or whatever key "
-        "length you're using", i + 1);
+    g_string_printf(key_name, "wep_key%d", i + 1);
+    g_string_printf(key_title, "WEP key #%d", i + 1);
+    g_string_printf(key_desc, "WEP key #%d can be:"
+                    "   <wep hexadecimal key>;"
+                    "   wep:<wep hexadecimal key>", i + 1);
 #endif
 
     prefs_register_string_preference(wlan_module, key_name->str,
-        key_title->str, key_desc->str, (const char **) &wep_keystr[i]);
+                                     key_title->str, key_desc->str, (const char **) &wep_keystr[i]);
 
     g_string_free(key_name, FALSE);
     g_string_free(key_title, FALSE);
@@ -10106,8 +12026,8 @@ proto_register_ieee80211 (void)
 void
 proto_reg_handoff_ieee80211(void)
 {
-  dissector_handle_t ieee80211_handle;
-  dissector_handle_t ieee80211_radio_handle;
+  dissector_handle_t radio_handle;
+  dissector_handle_t prism_handle;
 
   /*
    * Get handles for the LLC, IPX and Ethernet  dissectors.
@@ -10119,11 +12039,43 @@ proto_reg_handoff_ieee80211(void)
 
   ieee80211_handle = find_dissector("wlan");
   dissector_add("wtap_encap", WTAP_ENCAP_IEEE_802_11, ieee80211_handle);
-  ieee80211_radio_handle = create_dissector_handle(dissect_ieee80211_radio,
-      proto_wlan);
-  dissector_add("wtap_encap", WTAP_ENCAP_IEEE_802_11_WITH_RADIO,
-      ieee80211_radio_handle);
   dissector_add("ethertype", ETHERTYPE_CENTRINO_PROMISC, ieee80211_handle);
+
+  /* Register handoff to radio-header dissectors */
+  radio_handle = create_dissector_handle(dissect_radio, proto_radio);
+  dissector_add("wtap_encap", WTAP_ENCAP_IEEE_802_11_WITH_RADIO, radio_handle);
+
+  prism_handle = create_dissector_handle(dissect_prism, proto_prism);
+  dissector_add("wtap_encap", WTAP_ENCAP_PRISM_HEADER, prism_handle);
+
+  wlancap_handle = create_dissector_handle(dissect_wlancap, proto_wlancap);
+  dissector_add("wtap_encap", WTAP_ENCAP_IEEE_802_11_WLAN_AVS, wlancap_handle);
+
+  /* Register handoff to Aruba GRE */
+  dissector_add("gre.proto", GRE_ARUBA_8200, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8210, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8220, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8230, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8240, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8250, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8260, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8270, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8280, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8290, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_82A0, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_82B0, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_82C0, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_82D0, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_82E0, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_82F0, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8300, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8310, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8320, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8330, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8340, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8350, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8360, ieee80211_handle);
+  dissector_add("gre.proto", GRE_ARUBA_8370, ieee80211_handle);
 }
 
 #ifdef HAVE_AIRPDCAP
@@ -10132,11 +12084,11 @@ proto_reg_handoff_ieee80211(void)
 /* algorithm used for decryption (WEP, TKIP, CCMP) and the header and    */
 /* trailer lengths.                                      */
 static tvbuff_t *
-try_decrypt(tvbuff_t *tvb, guint32 offset, guint32 len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer) {
+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;
-  size_t dec_caplen;
+  guint32 dec_caplen;
   guchar dec_data[AIRPDCAP_MAX_CAPLEN];
   AIRPDCAP_KEY_ITEM used_key;
 
@@ -10147,7 +12099,7 @@ try_decrypt(tvbuff_t *tvb, guint32 offset, guint32 len, guint8 *algorithm, guint
   enc_data = tvb_get_ptr(tvb, 0, len+offset);
 
   /*  process packet with AirPDcap                              */
-  if (AirPDcapPacketProcess(&airpdcap_ctx, enc_data, len+offset, dec_data, &dec_caplen, &used_key, FALSE, FALSE, FALSE, TRUE)==AIRPDCAP_RET_SUCCESS)
+  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) {
@@ -10175,9 +12127,8 @@ try_decrypt(tvbuff_t *tvb, guint32 offset, guint32 len, guint8 *algorithm, guint
     len=dec_caplen-offset;
 
     /* decrypt successful, let's set up a new data tvb.              */
-    decr_tvb = tvb_new_real_data(tmp, len, len);
+    decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
     tvb_set_free_cb(decr_tvb, g_free);
-    tvb_set_child_real_data_tvbuff(tvb, decr_tvb);
   } else
     g_free(tmp);
 
@@ -10210,15 +12161,15 @@ static tvbuff_t *try_decrypt_wep(tvbuff_t *tvb, guint32 offset, guint32 len) {
     if (wep_decrypt(tmp, len, i) == 0) {
 
       /* decrypt successful, let's set up a new data tvb. */
-      decr_tvb = tvb_new_real_data(tmp, len-8, len-8);
+      decr_tvb = tvb_new_child_real_data(tvb, tmp, len-8, len-8);
       tvb_set_free_cb(decr_tvb, g_free);
-      tvb_set_child_real_data_tvbuff(tvb, decr_tvb);
 
       break;
     }
   }
 
-  if ((!decr_tvb) && (tmp))    g_free(tmp);
+  if (!decr_tvb)
+    g_free(tmp);
 
 #if 0
   printf("de-wep %p\n", decr_tvb);
@@ -10228,6 +12179,23 @@ static tvbuff_t *try_decrypt_wep(tvbuff_t *tvb, guint32 offset, guint32 len) {
 }
 #endif
 
+/*
+ * Convert a raw WEP key or one prefixed with "wep:" to a byte array.
+ * Separators are allowed.
+ */
+/* XXX This is duplicated in epan/airpdcap.c:parse_key_string() */
+static gboolean
+wep_str_to_bytes(const char *hex_str, GByteArray *bytes) {
+  char *first_nibble = (char *) hex_str;
+
+  if (g_ascii_strncasecmp(hex_str, STRING_KEY_TYPE_WEP ":", 4) == 0) {
+    first_nibble += 4;
+  }
+
+  return hex_str_to_bytes(first_nibble, bytes, FALSE);
+}
+
+/* Collect our WEP and WPA keys */
 #ifdef HAVE_AIRPDCAP
 static
 void set_airpdcap_keys(void)
@@ -10256,7 +12224,7 @@ void set_airpdcap_keys(void)
         key.KeyType = AIRPDCAP_KEY_TYPE_WEP;
 
         bytes = g_byte_array_new();
-        res = hex_str_to_bytes(dk->key->str, bytes, FALSE);
+        res = wep_str_to_bytes(dk->key->str, bytes);
 
         if (dk->key->str && res && bytes->len > 0 && bytes->len <= AIRPDCAP_WEP_KEY_MAXLEN)
         {
@@ -10277,7 +12245,7 @@ void set_airpdcap_keys(void)
 
         /* XXX - This just lops the end if the key off if it's too long.
          *       Should we handle this more gracefully? */
-        strncpy(key.UserPwd.Passphrase, dk->key->str, AIRPDCAP_WPA_PASSPHRASE_MAX_LEN);
+        g_strlcpy(key.UserPwd.Passphrase, dk->key->str, AIRPDCAP_WPA_PASSPHRASE_MAX_LEN);
 
         key.UserPwd.SsidLen = 0;
         if(dk->ssid != NULL && dk->ssid->len <= AIRPDCAP_WPA_SSID_MAX_LEN)
@@ -10294,7 +12262,7 @@ void set_airpdcap_keys(void)
         key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PMK;
 
         bytes = g_byte_array_new();
-        res = hex_str_to_bytes(dk->key->str, bytes, FALSE);
+        res = wep_str_to_bytes(dk->key->str, bytes);
 
         /* XXX - Pass the correct array of bytes... */
         if (bytes-> len <= AIRPDCAP_WPA_PMK_LEN) {
@@ -10305,7 +12273,7 @@ void set_airpdcap_keys(void)
         }
       }
     }
-    if(tmpk != NULL) g_free(tmpk);
+    g_free(tmpk);
   }
 
   /* Now set the keys */
@@ -10403,6 +12371,7 @@ static int wep_decrypt(guint8 *buf, guint32 len, int keyidx) {
 #endif
 
 static void init_wepkeys(void) {
+#ifndef  HAVE_AIRPDCAP
   const char *tmp;
   int i, keyidx;
   GByteArray *bytes;
@@ -10413,9 +12382,7 @@ static void init_wepkeys(void) {
       g_free(wep_keys[i]);
     g_free(wep_keys);
   }
-
-  if (wep_keylens)
-    g_free(wep_keylens);
+  g_free(wep_keylens);
 
 #ifdef USE_ENV
   guint8 *buf;
@@ -10435,24 +12402,13 @@ static void init_wepkeys(void) {
   bytes = g_byte_array_new();
   num_wepkeys = 0;
   for ( i = 0; i < MAX_ENCRYPTION_KEYS; i++) {
-    res = hex_str_to_bytes(wep_keystr[i], bytes, FALSE);
+    g_strstrip(wep_keystr[i]);
+    res = wep_str_to_bytes(wep_keystr[i], bytes);
     if (wep_keystr[i] && res && bytes-> len > 0) {
       num_wepkeys++;
     }
   }
 
-#ifdef  HAVE_AIRPDCAP
-  /*
-  * 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();
-
-  /* END AirPDcap */
-#endif
-
   wep_keys = g_malloc0(num_wepkeys * sizeof(guint8*));
   wep_keylens = g_malloc(num_wepkeys * sizeof(int));
 
@@ -10477,11 +12433,9 @@ static void init_wepkeys(void) {
 #endif
 #endif
 
-      if (wep_keys[keyidx]) {
-        g_free(wep_keys[keyidx]);
-      }
+      g_free(wep_keys[keyidx]);
 
-      res = hex_str_to_bytes(tmp, bytes, FALSE);
+      res = wep_str_to_bytes(tmp, bytes);
       if (tmp && res && bytes->len > 0) {
         if (bytes->len > 32) {
           bytes->len = 32;
@@ -10498,11 +12452,23 @@ static void init_wepkeys(void) {
 #if 0
         printf("res: %d  bytes->len: %d\n", res, bytes->len);
 #endif
-        g_warning("Could not parse WEP key %d: %s", i + 1, tmp);
+        if (tmp[0] != 'w') /* Assume it begins with "wep:" or "wpa-*:" */
+          g_warning("Could not parse WEP key %d: %s", i + 1, tmp);
       }
     }
   }
   g_byte_array_free(bytes, TRUE);
+
+#else /* HAVE_AIRPDCAP defined */
+
+  /*
+   * 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();
+#endif /* HAVE_AIRPDCAP */
 }
 /*
  * This code had been taken from AirSnort crack.c function classify()
@@ -10519,26 +12485,26 @@ static void init_wepkeys(void) {
 static int
 weak_iv(guchar *iv)
 {
-        guchar sum, k;
+  guchar sum, k;
 
-        if (iv[1] == 255 && iv[0] > 2 && iv[0] < 16) {
-                return iv[0] -3;
-        }
+  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;
+  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;
 }
 
 /*