2 * Routines for Wireless LAN (IEEE 802.11) dissection
3 * Copyright 2000, Axis Communications AB
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 * The following people helped me by pointing out bugs etc. Thank you!
31 * Magnus Hultman-Persson
35 * 09/12/2003 - Added dissection of country information tag
37 * Ritchie<at>tipsybottle.com
39 * 03/22/2004 - Added dissection of RSN IE
40 * Jouni Malinen <jkmaline@cc.hut.fi>
42 * 10/24/2005 - Add dissection for 802.11e
43 * Zhu Yi <yi.zhu@intel.com>
45 * Dutin Johnson - 802.11n and portions of 802.11k and 802.11ma
46 * dustin@dustinj.us & dustin.johnson@cacetech.com
48 * 01/31/2008 - Added dissection of 802.11s
49 * Javier Cardona <javier@cozybit.com>
51 * 04/21/2008 - Added dissection for 802.11p
52 * Arada Systems <http://www.aradasystems.com>
54 * 05/29/2011 - UATification of decryption keys
55 * Michael Mann <mmann78@netscape.net>
57 * 07/30/2011 - Update 802.11s packet dissecting to the ratified standard (v12.0)
58 * Brian Cavagnolo <brian@cozybit.com>
60 * Enhance 802.11 dissector by Alexis La Goutte
65 * The 802.11 standard is "free", 6 month after the publication.
67 * IEEE Std 802.11-2007: Revision of IEEE Std 802.11-199
68 * include 8 amendments (802.11a,b,d,e,g,h,i,j)
69 * http://standards.ieee.org/getieee802/download/802.11-2007.pdf
71 * IEEE Std 802.11k-2008: Radio Resource Measurement of Wireless LANs
72 * http://standards.ieee.org/getieee802/download/802.11k-2008.pdf
74 * IEEE Std 802.11r-2008: Fast Basic Service Set (BSS) Transition
75 * http://standards.ieee.org/getieee802/download/802.11r-2008.pdf
77 * IEEE Std 802.11y-2008: 3650-3700 MHz Operation in USA
78 * http://standards.ieee.org/getieee802/download/802.11y-2008.pdf
80 * IEEE Std 802.11w-2009: Protected Management Frames
81 * http://standards.ieee.org/getieee802/download/802.11w-2009.pdf
83 * IEEE Std 802.11n-2009: Enhancements for Higher Throughput
84 * http://standards.ieee.org/getieee802/download/802.11n-2009.pdf
86 * IEEE Std 802.11p-2010: Wireless Access in Vehicular Environments
87 * http://standards.ieee.org/getieee802/download/802.11p-2010.pdf
89 * IEEE Std 802.11z-2010: Extensions to Direct-Link Setup (DLS)
90 * http://standards.ieee.org/getieee802/download/802.11z-2010.pdf
103 #include <epan/packet.h>
104 #include <epan/bitswap.h>
105 #include <epan/addr_resolv.h>
106 #include <epan/strutil.h>
107 #include <epan/prefs.h>
108 #include <epan/reassemble.h>
109 #include "packet-ipx.h"
110 #include "packet-llc.h"
111 #include "packet-ieee80211.h"
112 #include <epan/etypes.h>
113 #include <epan/greproto.h>
114 #include <epan/oui.h>
115 #include <wsutil/crc32.h>
116 #include <epan/crc32-tvb.h>
117 #include <epan/tap.h>
118 #include <epan/emem.h>
119 #include <epan/crypt/wep-wpadefs.h>
120 #include <epan/expert.h>
121 #include <epan/uat.h>
123 #include "packet-wps.h"
124 #include "packet-wifi-p2p.h"
126 /* Davide Schiera (2006-11-22): including AirPDcap project */
127 #include <epan/crypt/airpdcap_ws.h>
128 /* Davide Schiera (2006-11-22) ---------------------------------------------- */
130 extern const value_string eap_type_vals[]; /* from packet-eap.c */
133 #define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
136 /* Defragment fragmented 802.11 datagrams */
137 static gboolean wlan_defragment = TRUE;
139 /* call subdissector for retransmitted frames */
140 static gboolean wlan_subdissector = TRUE;
142 /* Check for the presence of the 802.11 FCS */
143 static gboolean wlan_check_fcs = FALSE;
145 /* Ignore vendor-specific HT elements */
146 static gboolean wlan_ignore_draft_ht = FALSE;
148 /* Ignore the WEP bit; assume packet is decrypted */
149 #define WLAN_IGNORE_WEP_NO 0
150 #define WLAN_IGNORE_WEP_WO_IV 1
151 #define WLAN_IGNORE_WEP_W_IV 2
152 static gint wlan_ignore_wep = WLAN_IGNORE_WEP_NO;
154 /* Tables for reassembly of fragments. */
155 static GHashTable *wlan_fragment_table = NULL;
156 static GHashTable *wlan_reassembled_table = NULL;
158 /* Statistical data */
159 static struct _wlan_stats wlan_stats;
161 /*-------------------------------------
162 * UAT for WEP decoder
163 *-------------------------------------
165 /* UAT entry structure. */
169 } uat_wep_key_record_t;
171 static uat_wep_key_record_t *uat_wep_key_records = NULL;
172 static uat_t * wep_uat = NULL;
173 static guint num_wepkeys_uat = 0;
175 static void* uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U_) {
176 uat_wep_key_record_t* new_key = (uat_wep_key_record_t *)n;
177 const uat_wep_key_record_t* old_key = (const uat_wep_key_record_t *)o;
179 if (old_key->string) {
180 new_key->string = g_strdup(old_key->string);
182 new_key->string = NULL;
188 static void uat_wep_key_record_update_cb(void* r, const char** err) {
189 uat_wep_key_record_t* rec = (uat_wep_key_record_t *)r;
190 decryption_key_t* dk;
192 if (rec->string == NULL) {
193 *err = ep_strdup_printf("Key can't be blank");
195 g_strstrip(rec->string);
196 dk = parse_key_string(rec->string, rec->key);
200 case AIRPDCAP_KEY_TYPE_WEP:
201 case AIRPDCAP_KEY_TYPE_WEP_40:
202 case AIRPDCAP_KEY_TYPE_WEP_104:
203 if (rec->key != AIRPDCAP_KEY_TYPE_WEP) {
204 *err = ep_strdup_printf("Invalid key format");
207 case AIRPDCAP_KEY_TYPE_WPA_PWD:
208 if (rec->key != AIRPDCAP_KEY_TYPE_WPA_PWD) {
209 *err = ep_strdup_printf("Invalid key format");
212 case AIRPDCAP_KEY_TYPE_WPA_PSK:
213 if (rec->key != AIRPDCAP_KEY_TYPE_WPA_PSK) {
214 *err = ep_strdup_printf("Invalid key format");
218 *err = ep_strdup_printf("Invalid key format");
222 *err = ep_strdup_printf("Invalid key format");
227 static void uat_wep_key_record_free_cb(void*r) {
228 uat_wep_key_record_t* key = (uat_wep_key_record_t *)r;
230 if (key->string) g_free(key->string);
233 UAT_VS_DEF(uat_wep_key_records, key, uat_wep_key_record_t, 0, STRING_KEY_TYPE_WEP)
234 UAT_CSTRING_CB_DEF(uat_wep_key_records, string, uat_wep_key_record_t)
236 /* Stuff for the WEP decoder */
237 static gboolean enable_decryption = FALSE;
238 static void init_wepkeys(void);
240 /* Davide Schiera (2006-11-26): created function to decrypt WEP and WPA/WPA2 */
241 static tvbuff_t *try_decrypt(tvbuff_t *tvb, guint32 offset, guint32 len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer);
243 static int weak_iv(guchar *iv);
244 #define SSWAP(a,b) {guint8 tmp = s[a]; s[a] = s[b]; s[b] = tmp;}
246 typedef struct mimo_control
252 guint8 coefficient_size;
253 guint8 codebook_info;
254 guint8 remaining_matrix_segment;
257 mimo_control_t get_mimo_control (tvbuff_t *tvb, int offset);
258 int add_mimo_csi_matrices_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl);
259 int add_mimo_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl);
260 int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl);
262 /* ************************************************************************* */
263 /* Miscellaneous Constants */
264 /* ************************************************************************* */
265 #define SHORT_STR 256
267 /* ************************************************************************* */
268 /* Define some very useful macros that are used to analyze frame types etc. */
269 /* ************************************************************************* */
272 * Fetch the frame control field and swap it if needed. "fcf" and "tvb"
273 * must be valid variables.
275 #define FETCH_FCF(off) (wlan_broken_fc ? \
276 BSWAP16(tvb_get_letohs(tvb, off)) : \
277 tvb_get_letohs(tvb, off))
280 * Extract the protocol version from the frame control field
282 #define FCF_PROT_VERSION(x) ((x) & 0x3)
285 * Extract the frame type from the frame control field.
287 #define FCF_FRAME_TYPE(x) (((x) & 0xC) >> 2)
290 * Extract the frame subtype from the frame control field.
292 #define FCF_FRAME_SUBTYPE(x) (((x) & 0xF0) >> 4)
295 * Convert the frame type and subtype from the frame control field into
296 * one of the MGT_, CTRL_, or DATA_ values.
298 #define COMPOSE_FRAME_TYPE(x) (((x & 0x0C)<< 2)+FCF_FRAME_SUBTYPE(x)) /* Create key to (sub)type */
301 * The subtype field of a data frame is, in effect, composed of 4 flag
302 * bits - CF-Ack, CF-Poll, Null (means the frame doesn't actually have
303 * any data), and QoS.
305 #define DATA_FRAME_IS_CF_ACK(x) ((x) & 0x01)
306 #define DATA_FRAME_IS_CF_POLL(x) ((x) & 0x02)
307 #define DATA_FRAME_IS_NULL(x) ((x) & 0x04)
308 #define DATA_FRAME_IS_QOS(x) ((x) & 0x08)
311 * Extract the flags from the frame control field.
313 #define FCF_FLAGS(x) (((x) & 0xFF00) >> 8)
316 * Bits from the flags field.
318 #define FLAG_TO_DS 0x01
319 #define FLAG_FROM_DS 0x02
320 #define FLAG_MORE_FRAGMENTS 0x04
321 #define FLAG_RETRY 0x08
322 #define FLAG_POWER_MGT 0x10
323 #define FLAG_MORE_DATA 0x20
324 #define FLAG_PROTECTED 0x40
325 #define FLAG_ORDER 0x80
328 * Test bits in the flags field.
331 * XXX - Only HAVE_FRAGMENTS, IS_PROTECTED, and IS_STRICTLY_ORDERED
332 * are in use. Should the rest be removed?
334 #define IS_TO_DS(x) ((x) & FLAG_TO_DS)
335 #define IS_FROM_DS(x) ((x) & FLAG_FROM_DS)
336 #define HAVE_FRAGMENTS(x) ((x) & FLAG_MORE_FRAGMENTS)
337 #define IS_RETRY(x) ((x) & FLAG_RETRY)
338 #define POWER_MGT_STATUS(x) ((x) & FLAG_POWER_MGT)
339 #define HAS_MORE_DATA(x) ((x) & FLAG_MORE_DATA)
340 #define IS_PROTECTED(x) ((x) & FLAG_PROTECTED)
341 #define IS_STRICTLY_ORDERED(x) ((x) & FLAG_ORDER)
344 * Extract subfields from the flags field.
346 #define FLAGS_DS_STATUS(x) ((x) & (FLAG_FROM_DS|FLAG_TO_DS))
349 * Extract an indication of the types of addresses in a data frame from
350 * the frame control field.
352 #define FCF_ADDR_SELECTOR(x) ((x) & ((FLAG_TO_DS|FLAG_FROM_DS) << 8))
354 #define DATA_ADDR_T1 0
355 #define DATA_ADDR_T2 (FLAG_FROM_DS << 8)
356 #define DATA_ADDR_T3 (FLAG_TO_DS << 8)
357 #define DATA_ADDR_T4 ((FLAG_TO_DS|FLAG_FROM_DS) << 8)
360 * Extract the fragment number and sequence number from the sequence
363 #define SEQCTL_FRAGMENT_NUMBER(x) ((x) & 0x000F)
364 #define SEQCTL_SEQUENCE_NUMBER(x) (((x) & 0xFFF0) >> 4)
367 * Extract subfields from the QoS control field.
369 #define QOS_TID(x) ((x) & 0x000F)
370 #define QOS_PRIORITY(x) ((x) & 0x0007)
371 #define QOS_EOSP(x) (((x) & 0x0010) >> 4) /* end of service period */
372 #define QOS_ACK_POLICY(x) (((x) & 0x0060) >> 5)
373 #define QOS_AMSDU_PRESENT(x) (((x) & 0x0080) >> 6)
374 #define QOS_FIELD_CONTENT(x) (((x) & 0xFF00) >> 8)
375 #define QOS_MESH_CONTROL_PRESENT(x) (((x) & 0x0100) >> 8)
377 #define QOS_FLAG_EOSP 0x10
380 * Extract subfields from the result of QOS_FIELD_CONTENT().
382 #define QOS_PS_BUF_STATE_INDICATED(x) (((x) & 0x02) >> 1)
383 #define QOS_PS_HIGHEST_PRI_BUF_AC(x) (((x) & 0x0C) >> 2)
384 #define QOS_PS_QAP_BUF_LOAD(x) (((x) & 0xF0) >> 4)
387 * Extract subfields from the HT Control field.
388 * .11n D-1.10 & D-2.0, 7.1.3.5a, 32 bits.
390 #define HTC_LAC(htc) ((htc) & 0xFF)
391 #define HTC_LAC_MAI(htc) (((htc) >> 2) & 0xF)
392 #define HTC_IS_ASELI(htc) (HTC_LAC_MAI(htc) == 0xE)
393 #define HTC_LAC_MAI_MRQ(htc) ((HTC_LAC_MAI(htc)) & 0x1)
394 #define HTC_LAC_MAI_MSI(htc) ((HTC_LAC_MAI(htc) >> 1) & 0x7)
395 #define HTC_LAC_MFSI(htc) (((htc) >> 4) & 0x7)
396 #define HTC_LAC_ASEL_CMD(htc) (((htc) >> 9) & 0x7)
397 #define HTC_LAC_ASEL_DATA(htc) (((htc) >> 12) & 0xF)
398 #define HTC_LAC_MFB(htc) (((htc) >> 9) & 0x7F)
399 #define HTC_CAL_POS(htc) (((htc) >> 16) & 0x3)
400 #define HTC_CAL_SEQ(htc) (((htc) >> 18) & 0x3)
401 #define HTC_CSI_STEERING(htc) (((htc) >> 22) & 0x3)
402 #define HTC_NDP_ANN(htc) (((htc) >> 24) & 0x1)
403 #define HTC_AC_CONSTRAINT(htc) (((htc) >> 30) & 0x1)
404 #define HTC_RDG_MORE_PPDU(htc) (((htc) >> 31) & 0x1)
407 * Extract subfields from the key octet in WEP-encrypted frames.
409 #define KEY_OCTET_WEP_KEY(x) (((x) & 0xC0) >> 6)
411 #define KEY_EXTIV 0x20
415 * Bits from the Mesh Flags field
417 #define MESH_FLAGS_ADDRESS_EXTENSION 0x3
419 /* ************************************************************************* */
420 /* Constants used to identify cooked frame types */
421 /* ************************************************************************* */
422 #define MGT_FRAME 0x00 /* Frame type is management */
423 #define CONTROL_FRAME 0x01 /* Frame type is control */
424 #define DATA_FRAME 0x02 /* Frame type is Data */
426 #define DATA_SHORT_HDR_LEN 24
427 #define DATA_LONG_HDR_LEN 30
428 #define MGT_FRAME_HDR_LEN 24 /* Length of Management frame-headers */
431 * COMPOSE_FRAME_TYPE() values for management frames.
433 #define MGT_ASSOC_REQ 0x00 /* association request */
434 #define MGT_ASSOC_RESP 0x01 /* association response */
435 #define MGT_REASSOC_REQ 0x02 /* reassociation request */
436 #define MGT_REASSOC_RESP 0x03 /* reassociation response */
437 #define MGT_PROBE_REQ 0x04 /* Probe request */
438 #define MGT_PROBE_RESP 0x05 /* Probe response */
439 #define MGT_MEASUREMENT_PILOT 0x06 /* Measurement Pilot */
440 #define MGT_BEACON 0x08 /* Beacon frame */
441 #define MGT_ATIM 0x09 /* ATIM */
442 #define MGT_DISASS 0x0A /* Disassociation */
443 #define MGT_AUTHENTICATION 0x0B /* Authentication */
444 #define MGT_DEAUTHENTICATION 0x0C /* Deauthentication */
445 #define MGT_ACTION 0x0D /* Action */
446 #define MGT_ACTION_NO_ACK 0x0E /* Action No Ack */
447 #define MGT_ARUBA_WLAN 0x0F /* Aruba WLAN Specific */
450 * COMPOSE_FRAME_TYPE() values for control frames.
452 #define CTRL_CONTROL_WRAPPER 0x17 /* Control Wrapper */
453 #define CTRL_BLOCK_ACK_REQ 0x18 /* Block ack Request */
454 #define CTRL_BLOCK_ACK 0x19 /* Block ack */
455 #define CTRL_PS_POLL 0x1A /* power-save poll */
456 #define CTRL_RTS 0x1B /* request to send */
457 #define CTRL_CTS 0x1C /* clear to send */
458 #define CTRL_ACKNOWLEDGEMENT 0x1D /* acknowledgement */
459 #define CTRL_CFP_END 0x1E /* contention-free period end */
460 #define CTRL_CFP_ENDACK 0x1F /* contention-free period end/ack */
463 * COMPOSE_FRAME_TYPE() values for data frames.
465 #define DATA 0x20 /* Data */
466 #define DATA_CF_ACK 0x21 /* Data + CF-Ack */
467 #define DATA_CF_POLL 0x22 /* Data + CF-Poll */
468 #define DATA_CF_ACK_POLL 0x23 /* Data + CF-Ack + CF-Poll */
469 #define DATA_NULL_FUNCTION 0x24 /* Null function (no data) */
470 #define DATA_CF_ACK_NOD 0x25 /* CF-Ack (no data) */
471 #define DATA_CF_POLL_NOD 0x26 /* CF-Poll (No data) */
472 #define DATA_CF_ACK_POLL_NOD 0x27 /* CF-Ack + CF-Poll (no data) */
474 #define DATA_QOS_DATA 0x28 /* QoS Data */
475 #define DATA_QOS_DATA_CF_ACK 0x29 /* QoS Data + CF-Ack */
476 #define DATA_QOS_DATA_CF_POLL 0x2A /* QoS Data + CF-Poll */
477 #define DATA_QOS_DATA_CF_ACK_POLL 0x2B /* QoS Data + CF-Ack + CF-Poll */
478 #define DATA_QOS_NULL 0x2C /* QoS Null */
479 #define DATA_QOS_CF_POLL_NOD 0x2E /* QoS CF-Poll (No Data) */
480 #define DATA_QOS_CF_ACK_POLL_NOD 0x2F /* QoS CF-Ack + CF-Poll (No Data) */
483 /* ************************************************************************* */
484 /* Logical field codes (dissector's encoding of fixed fields) */
485 /* ************************************************************************* */
487 FIELD_TIMESTAMP, /* 64-bit timestamp */
488 FIELD_BEACON_INTERVAL, /* 16-bit beacon interval */
489 FIELD_CAP_INFO, /* Add capability information tree */
490 FIELD_AUTH_ALG, /* Authentication algorithm used */
491 FIELD_AUTH_TRANS_SEQ, /* Authentication sequence number */
492 FIELD_CURRENT_AP_ADDR,
497 FIELD_CATEGORY_CODE, /* Management action category */
498 FIELD_ACTION_CODE, /* Management action code */
499 FIELD_DIALOG_TOKEN, /* Management action dialog token */
500 FIELD_WME_ACTION_CODE, /* Management notification action code */
501 FIELD_WME_DIALOG_TOKEN, /* Management notification dialog token */
502 FIELD_WME_STATUS_CODE, /* Management notification setup response status code
504 FIELD_QOS_ACTION_CODE,
506 FIELD_DLS_ACTION_CODE,
507 FIELD_DST_MAC_ADDR, /* DLS destination MAC address */
508 FIELD_SRC_MAC_ADDR, /* DLS source MAC address */
509 FIELD_DLS_TIMEOUT, /* DLS timeout value */
510 FIELD_SCHEDULE_INFO, /* Schedule Info field */
511 FIELD_ACTION, /* Action field */
512 FIELD_BLOCK_ACK_ACTION_CODE,
515 FIELD_BLOCK_ACK_PARAM,
516 FIELD_BLOCK_ACK_TIMEOUT,
518 FIELD_DELBA_PARAM_SET,
520 FIELD_MEASUREMENT_PILOT_INT,
524 FIELD_TRANSCEIVER_NOISE_FLOOR,
528 FIELD_PCO_PHASE_CNTRL,
529 FIELD_PSMP_PARAM_SET,
533 FIELD_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT,
534 FIELD_HT_INFORMATION,
535 FIELD_HT_ACTION_CODE,
536 FIELD_PA_ACTION_CODE,
537 FIELD_FT_ACTION_CODE,
539 FIELD_TARGET_AP_ADDRESS,
540 FIELD_GAS_COMEBACK_DELAY,
541 FIELD_GAS_FRAGMENT_ID,
542 FIELD_SA_QUERY_ACTION_CODE,
543 FIELD_TRANSACTION_ID,
544 FIELD_TDLS_ACTION_CODE,
545 FIELD_TARGET_CHANNEL,
546 FIELD_REGULATORY_CLASS,
548 FIELD_MULTIHOP_ACTION,
550 FIELD_SELFPROT_ACTION,
551 FIELD_WNM_ACTION_CODE,
552 /* add any new fixed field value above this line */
556 /* ************************************************************************* */
557 /* Logical field codes (IEEE 802.11 encoding of tags) */
558 /* ************************************************************************* */
560 #define TAG_SUPP_RATES 1
561 #define TAG_FH_PARAMETER 2
562 #define TAG_DS_PARAMETER 3
563 #define TAG_CF_PARAMETER 4
565 #define TAG_IBSS_PARAMETER 6
566 #define TAG_COUNTRY_INFO 7
567 #define TAG_FH_HOPPING_PARAMETER 8
568 #define TAG_FH_HOPPING_TABLE 9
569 #define TAG_REQUEST 10
570 #define TAG_QBSS_LOAD 11
571 #define TAG_EDCA_PARAM_SET 12
574 #define TAG_SCHEDULE 15
575 #define TAG_CHALLENGE_TEXT 16
577 #define TAG_POWER_CONSTRAINT 32
578 #define TAG_POWER_CAPABILITY 33
579 #define TAG_TPC_REQUEST 34
580 #define TAG_TPC_REPORT 35
581 #define TAG_SUPPORTED_CHANNELS 36
582 #define TAG_CHANNEL_SWITCH_ANN 37
583 #define TAG_MEASURE_REQ 38
584 #define TAG_MEASURE_REP 39
586 #define TAG_IBSS_DFS 41
587 #define TAG_ERP_INFO 42
588 #define TAG_TS_DELAY 43
589 #define TAG_TCLAS_PROCESS 44
590 #define TAG_HT_CAPABILITY 45 /* IEEE Stc 802.11n/D2.0 */
591 #define TAG_QOS_CAPABILITY 46
592 #define TAG_ERP_INFO_OLD 47 /* IEEE Std 802.11g/D4.0 */
593 #define TAG_RSN_IE 48
595 #define TAG_EXT_SUPP_RATES 50
596 #define TAG_AP_CHANNEL_REPORT 51
597 #define TAG_NEIGHBOR_REPORT 52
599 #define TAG_MOBILITY_DOMAIN 54 /* IEEE Std 802.11r-2008 */
600 #define TAG_FAST_BSS_TRANSITION 55 /* IEEE Std 802.11r-2008 */
601 #define TAG_TIMEOUT_INTERVAL 56 /* IEEE Std 802.11r-2008 */
602 #define TAG_RIC_DATA 57 /* IEEE Std 802.11r-2008 */
604 #define TAG_SUPPORTED_REGULATORY_CLASSES 59 /* IEEE Std 802.11w-2009 */
605 #define TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT 60 /* IEEE Std 802.11w-2009 */
606 #define TAG_HT_INFO 61 /* IEEE Stc 802.11n/D2.0 */
607 #define TAG_SECONDARY_CHANNEL_OFFSET 62 /* IEEE Stc 802.11n/D1.10/D2.0 */
608 #define TAG_TIME_ADV 69 /* IEEE Std 802.11p-2010 */
609 #define TAG_20_40_BSS_CO_EX 72 /* IEEE P802.11n/D6.0 */
610 #define TAG_20_40_BSS_INTOL_CH_REP 73 /* IEEE P802.11n/D6.0 */
611 #define TAG_OVERLAP_BSS_SCAN_PAR 74 /* IEEE P802.11n/D6.0 */
612 #define TAG_RIC_DESCRIPTOR 75 /* IEEE Std 802.11r-2008 */
613 #define TAG_MMIE 76 /* IEEE Std 802.11w-2009 */
614 #define TAG_TIME_ZONE 98 /* IEEE STd 802.11v-2011 */
615 #define TAG_LINK_IDENTIFIER 101 /* IEEE Std 802.11z-2010 */
616 #define TAG_WAKEUP_SCHEDULE 102 /* IEEE Std 802.11z-2010 */
617 #define TAG_CHANNEL_SWITCH_TIMING 104 /* IEEE Std 802.11z-2010 */
618 #define TAG_PTI_CONTROL 105 /* IEEE Std 802.11z-2010 */
619 #define TAG_PU_BUFFER_STATUS 106 /* IEEE Std 802.11z-2010 */
620 #define TAG_INTERWORKING 107 /* IEEE Std 802.11u-2011 */
621 #define TAG_ADVERTISEMENT_PROTOCOL 108 /* IEEE Std 802.11u-2011 */
622 #define TAG_EXPIDITED_BANDWIDTH_REQ 109 /* IEEE Std 802.11u-2011 */
623 #define TAG_QOS_MAP_SET 110 /* IEEE Std 802.11u-2011 */
624 #define TAG_ROAMING_CONSORTIUM 111 /* IEEE Std 802.11u-2011 */
625 #define TAG_EMERGENCY_ALERT_ID 112 /* IEEE Std 802.11u-2011 */
626 #define TAG_MESH_CONFIGURATION 113 /* IEEE Std 802.11s-2011 */
627 #define TAG_MESH_ID 114 /* IEEE Std 802.11s-2011 */
628 #define TAG_MESH_PEERING_MGMT 117 /* IEEE Std 802.11s-2011 */
629 #define TAG_RANN 126 /* IEEE Std 802.11s-2011 */
630 #define TAG_EXTENDED_CAPABILITIES 127 /* IEEE Stc 802.11n/D1.10/D2.0 */
631 #define TAG_AGERE_PROPRIETARY 128
632 #define TAG_MESH_PREQ 130 /* IEEE Std 802.11s-2011 */
633 #define TAG_MESH_PREP 131 /* IEEE Std 802.11s-2011 */
634 #define TAG_MESH_PERR 132 /* IEEE Std 802.11s-2011 */
635 #define TAG_CISCO_CCX1_CKIP 133 /* Cisco Compatible eXtensions */
636 #define TAG_CISCO_UNKNOWN_88 136 /* Cisco Compatible eXtensions? */
637 #define TAG_CISCO_UNKNOWN_95 149 /* Cisco Compatible eXtensions */
638 #define TAG_CISCO_UNKNOWN_96 150 /* Cisco Compatible eXtensions */
639 #define TAG_SYMBOL_PROPRIETARY 173
640 #define TAG_VENDOR_SPECIFIC_IE 221
642 static const value_string tag_num_vals[] = {
643 { TAG_SSID, "SSID parameter set" },
644 { TAG_SUPP_RATES, "Supported Rates" },
645 { TAG_FH_PARAMETER, "FH Parameter set" },
646 { TAG_DS_PARAMETER, "DS Parameter set" },
647 { TAG_CF_PARAMETER, "CF Parameter set" },
648 { TAG_TIM, "Traffic Indication Map (TIM)" },
649 { TAG_IBSS_PARAMETER, "IBSS Parameter set" },
650 { TAG_COUNTRY_INFO, "Country Information" },
651 { TAG_FH_HOPPING_PARAMETER, "Hopping Pattern Parameters" },
652 { TAG_FH_HOPPING_TABLE, "Hopping Pattern Table" },
653 { TAG_REQUEST, "Request" },
654 { TAG_QBSS_LOAD, "QBSS Load Element" },
655 { TAG_EDCA_PARAM_SET, "EDCA Parameter Set" },
656 { TAG_TSPEC, "Traffic Specification" },
657 { TAG_TCLAS, "Traffic Classification" },
658 { TAG_SCHEDULE, "Schedule" },
659 { TAG_CHALLENGE_TEXT, "Challenge text" },
660 { TAG_POWER_CONSTRAINT, "Power Constraint" },
661 { TAG_POWER_CAPABILITY, "Power Capability" },
662 { TAG_TPC_REQUEST, "TPC Request" },
663 { TAG_TPC_REPORT, "TPC Report" },
664 { TAG_SUPPORTED_CHANNELS, "Supported Channels" },
665 { TAG_CHANNEL_SWITCH_ANN, "Channel Switch Announcement" },
666 { TAG_MEASURE_REQ, "Measurement Request" },
667 { TAG_MEASURE_REP, "Measurement Report" },
668 { TAG_QUIET, "Quiet" },
669 { TAG_IBSS_DFS, "IBSS DFS" },
670 { TAG_ERP_INFO, "ERP Information" },
671 { TAG_TS_DELAY, "TS Delay" },
672 { TAG_TCLAS_PROCESS, "TCLAS Processing" },
673 { TAG_HT_CAPABILITY, "HT Capabilities (802.11n D1.10)" },
674 { TAG_QOS_CAPABILITY, "QoS Capability" },
675 { TAG_ERP_INFO_OLD, "ERP Information" }, /* Reserved... */
676 { TAG_RSN_IE, "RSN Information" },
677 { TAG_EXT_SUPP_RATES, "Extended Supported Rates" },
678 { TAG_AP_CHANNEL_REPORT, "AP Channel Report" },
679 { TAG_NEIGHBOR_REPORT, "Neighbor Report" },
680 { TAG_RCPI, "RCPI" },
681 { TAG_MOBILITY_DOMAIN, "Mobility Domain" },
682 { TAG_FAST_BSS_TRANSITION, "Fast BSS Transition" },
683 { TAG_TIMEOUT_INTERVAL, "Timeout Interval" },
684 { TAG_RIC_DATA, "RIC Data" },
685 { TAG_SUPPORTED_REGULATORY_CLASSES, "Supported Regulatory Classes" },
686 { TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement" },
687 { TAG_HT_INFO, "HT Information (802.11n D1.10)" },
688 { TAG_SECONDARY_CHANNEL_OFFSET, "Secondary Channel Offset (802.11n D1.10)" },
689 { TAG_TIME_ADV, "Time Advertisement" },
690 { TAG_20_40_BSS_CO_EX, "20/40 BSS Coexistence" },
691 { TAG_20_40_BSS_INTOL_CH_REP, "20/40 BSS Intolerant Channel Report" }, /* IEEE P802.11n/D6.0 */
692 { TAG_OVERLAP_BSS_SCAN_PAR, "Overlapping BSS Scan Parameters" }, /* IEEE P802.11n/D6.0 */
693 { TAG_RIC_DESCRIPTOR, "RIC Descriptor" },
694 { TAG_MMIE, "Management MIC" },
695 { TAG_TIME_ZONE, "Time Zone" },
696 { TAG_LINK_IDENTIFIER, "Link Identifier" },
697 { TAG_WAKEUP_SCHEDULE, "Wakeup Schedule" },
698 { TAG_CHANNEL_SWITCH_TIMING, "Channel Switch Timing" },
699 { TAG_PTI_CONTROL, "PTI Control" },
700 { TAG_PU_BUFFER_STATUS, "PU Buffer Status" },
701 { TAG_INTERWORKING, "Interworking" },
702 { TAG_ADVERTISEMENT_PROTOCOL, "Advertisement Protocol"},
703 { TAG_EXPIDITED_BANDWIDTH_REQ, "Expedited Bandwidth Request" },
704 { TAG_QOS_MAP_SET, "QoS Map Set" },
705 { TAG_ROAMING_CONSORTIUM, "Roaming Consortium" },
706 { TAG_EMERGENCY_ALERT_ID, "Emergency Alert Identifier" },
707 { TAG_MESH_ID, "Mesh ID" },
708 { TAG_MESH_CONFIGURATION, "Mesh Configuration" },
709 { TAG_MESH_PEERING_MGMT, "Mesh Peering Management" },
710 { TAG_RANN, "Root Announcement" },
711 { TAG_EXTENDED_CAPABILITIES, "Extended Capabilities" },
712 { TAG_AGERE_PROPRIETARY, "Agere Proprietary" },
713 { TAG_MESH_PREQ, "Path Request" },
714 { TAG_MESH_PREP, "Path Reply" },
715 { TAG_MESH_PERR, "Path Error" },
716 { TAG_CISCO_CCX1_CKIP, "Cisco CCX1 CKIP + Device Name" },
717 { TAG_CISCO_UNKNOWN_88, "Cisco Unknown 88" },
718 { TAG_CISCO_UNKNOWN_95, "Cisco Unknown 95" },
719 { TAG_CISCO_UNKNOWN_96, "Cisco Unknown 96" },
720 { TAG_SYMBOL_PROPRIETARY, "Symbol Proprietary" },
721 { TAG_VENDOR_SPECIFIC_IE, "Vendor Specific" },
725 #define WPA_OUI (const guint8 *) "\x00\x50\xF2"
726 #define RSN_OUI (const guint8 *) "\x00\x0F\xAC"
727 #define WME_OUI (const guint8 *) "\x00\x50\xF2"
728 #define PRE_11N_OUI (const guint8 *) "\x00\x90\x4c" /* 802.11n pre 1 oui */
729 #define WFA_OUI (const guint8 *) "\x50\x6f\x9a"
731 /* WFA vendor specific subtypes */
732 #define WFA_SUBTYPE_P2P 9
736 /* ************************************************************************* */
737 /* Supported Rates (7.3.2.2) */
738 /* ************************************************************************* */
740 static const value_string ieee80211_supported_rates_vals[] = {
781 { 0xFF, "BSS requires support for mandatory features of HT PHY (IEEE 802.11 - Clause 20)" },
784 /* ************************************************************************* */
785 /* 7.3.1.7 Reason Code field */
786 /* ************************************************************************* */
787 static const value_string ieee80211_reason_code[] = {
788 { 1, "Unspecified reason" },
789 { 2, "Previous authentication no longer valid" },
790 { 3, "Deauthenticated because sending STA is leaving (or has left) IBSS or ESS" },
791 { 4, "Disassociated due to inactivity" },
792 { 5, "Disassociated because AP is unable to handle all currently associated STAs" },
793 { 6, "Class 2 frame received from nonauthenticated STA" },
794 { 7, "Class 3 frame received from nonassociated STA" },
795 { 8, "Disassociated because sending STA is leaving (or has left) BSS" },
796 { 9, "STA requesting (re)association is not authenticated with responding STA" },
797 { 10, "Disassociated because the information in the Power Capability element is unacceptable" },
798 { 11, "Disassociated because the information in the Supported Channels element is unacceptable" },
800 { 13, "Invalid information element, i.e., an information element defined in this standard for which the content does not meet the specifications in Clause 7" },
801 { 14, "Message integrity code (MIC) failure" },
802 { 15, "4-Way Handshake timeout" },
803 { 16, "Group Key Handshake timeout" },
804 { 17, "Information element in 4-Way Handshake different from (Re)Association Request/Probe Response/Beacon frame" },
805 { 18, "Invalid group cipher" },
806 { 19, "Invalid pairwise cipher" },
807 { 20, "Invalid AKMP" },
808 { 21, "Unsupported RSN information element version" },
809 { 22, "Invalid RSN information element capabilities" },
810 { 23, "IEEE 802.1X authentication failed" },
811 { 24, "Cipher suite rejected because of the security policy" },
812 { 27, "Disassociated because session terminated by SSP request" },
813 { 28, "Disassociated because of lack of SSP roaming agreement" },
814 { 29, "Requested service rejected because of SSP cipher suite or AKM requirement " },
815 { 30, "Requested service not authorized in this location" },
816 { 31, "TS deleted because QoS AP lacks sufficient bandwidth for this QoS STA due to a change in BSS service characteristics or operational mode" },
817 { 32, "Disassociated for unspecified, QoS-related reason" },
818 { 33, "Disassociated because QoS AP lacks sufficient bandwidth for this QoS STA" },
819 { 34, "Disassociated because excessive number of frames need to be acknowledged, but are not acknowledged due to AP transmissions and/or poor channel conditions" },
820 { 35, "Disassociated because STA is transmitting outside the limits of its TXOPs" },
821 { 36, "Requested from peer STA as the STA is leaving the BSS (or resetting)" },
822 { 37, "Requested from peer STA as it does not want to use the mechanism" },
823 { 38, "Requested from peer STA as the STA received frames using the mechanism for which a setup is required" },
824 { 39, "Requested from peer STA due to timeout" },
825 { 45, "Peer STA does not support the requested cipher suite" },
826 { 46, "Disassociated because authorized access limit reached" },
827 { 47, "Disassociated due to external service requirements" },
828 { 52, "SME cancels the mesh peering instance with the reason other than reaching the maximum number of peer mesh STAs" },
829 { 53, "The mesh STA has reached the supported maximum number of peer mesh STAs" },
830 { 54, "The received information violates the Mesh Configuration policy configured in the mesh STA profile" },
831 { 55, "The mesh STA has received a Mesh Peering Close message requesting to close the mesh peering" },
832 { 56, "The mesh STA has re-sent dot11MeshMaxRetries Mesh Peering Open messages, without receiving a Mesh Peering Confirm message" },
833 { 57, "The confirmTimer for the mesh peering instance times out" },
834 { 58, "The mesh STA fails to unwrap the GTK or the values in the wrapped contents do not match" },
835 { 59, "The mesh STA receives inconsistent information about the mesh parameters between Mesh Peering Management frames" },
836 { 60, "The mesh STA fails the authenticated mesh peering exchange because due to failure in selecting either the pairwise ciphersuite or group ciphersuite" },
837 { 61, "The mesh STA does not have proxy information for this external destination" },
838 { 62, "The mesh STA does not have forwarding information for this destination" },
839 { 63, "The mesh STA determines that the link to the next hop of an active path in its forwarding information is no longer usable" },
840 { 64, "The Deauthentication frame was sent because the MAC address of the STA already exists in the mesh BSS. See 11.3.3 (Additional mechanisms for an AP collocated with a mesh STA)" },
841 { 65, "The mesh STA performs channel switch to meet regulatory requirements" },
842 { 66, "The mesh STA performs channel switch with unspecified reason" },
846 /* ************************************************************************* */
847 /* 7.3.1.9 Status Code field */
848 /* ************************************************************************* */
849 static const value_string ieee80211_status_code[] = {
851 { 1, "Unspecified failure" },
852 { 2, "TDLS wakeup schedule rejected but alternative schedule provided" },
853 { 3, "TDLS wakeup schedule rejected" },
854 { 5, "Security disabled" },
855 { 6, "Unacceptable lifetime" },
856 { 7, "Not in same BSS" },
857 { 10, "Cannot support all requested capabilities in the Capability Information field" },
858 { 11, "Reassociation denied due to inability to confirm that association exists" },
859 { 12, "Association denied due to reason outside the scope of this standard" },
860 { 13, "Responding STA does not support the specified authentication algorithm" },
861 { 14, "Received an Authentication frame with authentication transaction sequence number out of expected sequence" },
862 { 15, "Authentication rejected because of challenge failure" },
863 { 16, "Authentication rejected due to timeout waiting for next frame in sequence" },
864 { 17, "Association denied because AP is unable to handle additional associated STAs" },
865 { 18, "Association denied due to requesting STA not supporting all of the data rates in the BSSBasicRateSet parameter" },
866 { 19, "Association denied due to requesting STA not supporting the short preamble option" },
867 { 20, "Association denied due to requesting STA not supporting the PBCC modulation option" },
868 { 21, "Association denied due to requesting STA not supporting the Channel Agility option" },
869 { 22, "Association request rejected because Spectrum Management capability is required" },
870 { 23, "Association request rejected because the information in the Power Capability element is unacceptable" },
871 { 24, "Association request rejected because the information in the Supported Channels element is unacceptable" },
872 { 25, "Association denied due to requesting STA not supporting the Short Slot Time option" },
873 { 26, "Association denied due to requesting STA not supporting the DSSS-OFDM option" },
874 { 27, "Reserved Association denied because the requesting STA does not support HT features" },
875 { 28, "R0KH unreachable" },
876 { 29, "Association denied because the requesting STA does not support the phased coexistence operation (PCO) transition time required by the AP" },
877 { 30, "Association request rejected temporarily; try again later" },
878 { 31, "Robust Management frame policy violation" },
879 { 32, "Unspecified, QoS-related failure" },
880 { 33, "Association denied because QoS AP has insufficient bandwidth to handle another QoS STA" },
881 { 34, "Association denied due to excessive frame loss rates and/or poor conditions on current operating channel" },
882 { 35, "Association (with QoS BSS) denied because the requesting STA does not support the QoS facility" },
884 { 37, "The request has been declined" },
885 { 38, "The request has not been successful as one or more parameters have invalid values" },
886 { 39, "The TS has not been created because the request cannot be honored; however, a suggested TSPEC is provided so that the initiating STA may attempt to set another TS with the suggested changes to the TSPEC" },
887 { 40, "Invalid information element, i.e., an information element defined in this standard for which the content does not meet the specifications in Clause 7" },
888 { 41, "Invalid group cipher" },
889 { 42, "Invalid pairwise cipher" },
890 { 43, "Invalid AKMP" },
891 { 44, "Unsupported RSN information element version" },
892 { 45, "Invalid RSN information element capabilities" },
893 { 46, "Cipher suite rejected because of security policy" },
894 { 47, "The TS has not been created; however, the HC may be capable of creating a TS, in response to a request, after the time indicated in the TS Delay element" },
895 { 48, "Direct link is not allowed in the BSS by policy" },
896 { 49, "The Destination STA is not present within this BSS" },
897 { 50, "The Destination STA is not a QoS STA" },
898 { 51, "Association denied because the ListenInterval is too large" },
899 { 52, "Invalid FT Action frame count" },
900 { 53, "Invalid pairwise master key identifier (PMKID)" },
901 { 54, "Invalid MDIE" },
902 { 55, "Invalid FTIE" },
903 { 59, "GAS Advertisement Protocol not supported" },
904 { 60, "No outstanding GAS request" },
905 { 61, "GAS Response not received from the Advertisement Server" },
906 { 62, "STA timed out waiting for GAS Query Response" },
907 { 63, "GAS Response is larger than query response length limit" },
908 { 64, "Request refused because home network does not support request" },
909 { 65, "Advertisement Server in the network is not currently reachable" },
910 { 67, "Request refused due to permissions received via SSPN interface" },
911 { 68, "Request refused because AP does not support unauthenticated access" },
912 { 72, "Invalid contents of RSNIE" },
913 { 76, "Authentication is rejected because an Anti-Clogging Token is required" },
914 { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
915 { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
916 { 79, "Transmission failure" },
920 /* ************************************************************************* */
921 /* Frame types, and their names */
922 /* ************************************************************************* */
923 static const value_string frame_type_subtype_vals[] = {
924 {MGT_ASSOC_REQ, "Association Request"},
925 {MGT_ASSOC_RESP, "Association Response"},
926 {MGT_REASSOC_REQ, "Reassociation Request"},
927 {MGT_REASSOC_RESP, "Reassociation Response"},
928 {MGT_PROBE_REQ, "Probe Request"},
929 {MGT_PROBE_RESP, "Probe Response"},
930 {MGT_MEASUREMENT_PILOT, "Measurement Pilot"},
931 {MGT_BEACON, "Beacon frame"},
933 {MGT_DISASS, "Disassociate"},
934 {MGT_AUTHENTICATION, "Authentication"},
935 {MGT_DEAUTHENTICATION, "Deauthentication"},
936 {MGT_ACTION, "Action"},
937 {MGT_ACTION_NO_ACK, "Action No Ack"},
938 {MGT_ARUBA_WLAN, "Aruba Management"},
940 {CTRL_CONTROL_WRAPPER, "Control Wrapper"},
941 {CTRL_BLOCK_ACK_REQ, "802.11 Block Ack Req"},
942 {CTRL_BLOCK_ACK, "802.11 Block Ack"},
943 {CTRL_PS_POLL, "Power-Save poll"},
944 {CTRL_RTS, "Request-to-send"},
945 {CTRL_CTS, "Clear-to-send"},
946 {CTRL_ACKNOWLEDGEMENT, "Acknowledgement"},
947 {CTRL_CFP_END, "CF-End (Control-frame)"},
948 {CTRL_CFP_ENDACK, "CF-End + CF-Ack (Control-frame)"},
951 {DATA_CF_ACK, "Data + CF-Ack"},
952 {DATA_CF_POLL, "Data + CF-Poll"},
953 {DATA_CF_ACK_POLL, "Data + CF-Ack + CF-Poll"},
954 {DATA_NULL_FUNCTION, "Null function (No data)"},
955 {DATA_CF_ACK_NOD, "Acknowledgement (No data)"},
956 {DATA_CF_POLL_NOD, "CF-Poll (No data)"},
957 {DATA_CF_ACK_POLL_NOD, "CF-Ack/Poll (No data)"},
958 {DATA_QOS_DATA, "QoS Data"},
959 {DATA_QOS_DATA_CF_ACK, "QoS Data + CF-Acknowledgment"},
960 {DATA_QOS_DATA_CF_POLL, "QoS Data + CF-Poll"},
961 {DATA_QOS_DATA_CF_ACK_POLL, "QoS Data + CF-Ack + CF-Poll"},
962 {DATA_QOS_NULL, "QoS Null function (No data)"},
963 {DATA_QOS_CF_POLL_NOD, "QoS CF-Poll (No Data)"},
964 {DATA_QOS_CF_ACK_POLL_NOD, "QoS CF-Ack + CF-Poll (No data)"},
968 /* ************************************************************************* */
969 /* 802.1D Tag Names */
970 /* ************************************************************************* */
971 static const char *qos_tags[8] = {
982 /* ************************************************************************* */
983 /* WME Access Category Names (by 802.1D Tag) */
984 /* ************************************************************************* */
985 static const char *qos_acs[8] = {
996 /* ************************************************************************* */
997 /* WME Access Category Names (by WME ACI) */
998 /* ************************************************************************* */
999 static const value_string wme_acs[] = {
1000 { 0, "Best Effort" },
1001 { 1, "Background" },
1007 /* ************************************************************************* */
1008 /* Aruba Management Type */
1009 /* ************************************************************************* */
1010 static const value_string aruba_mgt_typevals[] = {
1011 { 0x0001, "Hello" },
1012 { 0x0002, "Probe" },
1014 { 0x0004, "Ageout" },
1015 { 0x0005, "Heartbeat" },
1016 { 0x0006, "Deauth" },
1017 { 0x0007, "Disassoc" },
1018 { 0x0008, "Probe response" },
1019 { 0x0009, "Tunnel update" },
1020 { 0x000A, "Laser beam active" },
1021 { 0x000B, "Client IP" },
1022 { 0x000C, "Laser beam active v2" },
1023 { 0x000D, "AP statistics" },
1027 /*** Begin: Action Fixed Parameter ***/
1028 #define CAT_SPECTRUM_MGMT 0
1031 #define CAT_BLOCK_ACK 3
1032 #define CAT_PUBLIC 4
1034 #define CAT_RADIO_MEASUREMENT 5
1035 #define CAT_FAST_BSS_TRANSITION 6
1037 #define CAT_SA_QUERY 8
1038 #define CAT_PUBLIC_PROTECTED 9
1040 #define CAT_UNPROTECTED_WNM 11
1043 /* per 11s draft 12.0 */
1045 #define CAT_MULTIHOP 14
1046 #define CAT_SELF_PROTECTED 15
1048 #define CAT_MGMT_NOTIFICATION 17
1049 #define CAT_VENDOR_SPECIFIC_PROTECTED 126
1050 #define CAT_VENDOR_SPECIFIC 127
1052 #define CAT_MESH_LINK_METRIC 31
1053 #define CAT_MESH_PATH_SELECTION 32
1054 #define CAT_MESH_INTERWORKING 33
1055 #define CAT_MESH_RESOURCE_COORDINATION 34
1056 #define CAT_MESH_SECURITY_ARCHITECTURE 35
1058 #define SM_ACTION_MEASUREMENT_REQUEST 0
1059 #define SM_ACTION_MEASUREMENT_REPORT 1
1060 #define SM_ACTION_TPC_REQUEST 2
1061 #define SM_ACTION_TPC_REPORT 3
1062 #define SM_ACTION_CHAN_SWITCH_ANNC 4
1063 #define SM_ACTION_EXT_CHAN_SWITCH_ANNC 5
1065 #define SM_ACTION_ADDTS_REQUEST 0
1066 #define SM_ACTION_ADDTS_RESPONSE 1
1067 #define SM_ACTION_DELTS 2
1068 #define SM_ACTION_QOS_SCHEDULE 3
1070 #define SM_ACTION_DLS_REQUEST 0
1071 #define SM_ACTION_DLS_RESPONSE 1
1072 #define SM_ACTION_DLS_TEARDOWN 2
1074 #define BA_ADD_BLOCK_ACK_REQUEST 0
1075 #define BA_ADD_BLOCK_ACK_RESPONSE 1
1076 #define BA_DELETE_BLOCK_ACK 2
1078 #define PA_DSE_ENABLEMENT 1
1079 #define PA_DSE_DEENABLEMENT 2
1080 #define PA_DSE_REG_LOC_ANNOUNCEMENT 3
1081 #define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4
1082 #define PA_DSE_MEASUREMENT_REQUEST 5
1083 #define PA_DSE_MEASUREMENT_REPORT 6
1084 #define PA_MEASUREMENT_PILOT 7
1085 #define PA_DSE_POWER_CONSTRAINT 8
1086 #define PA_VENDOR_SPECIFIC 9
1087 #define PA_GAS_INITIAL_REQUEST 10
1088 #define PA_GAS_INITIAL_RESPONSE 11
1089 #define PA_GAS_COMEBACK_REQUEST 12
1090 #define PA_GAS_COMEBACK_RESPONSE 13
1091 #define PA_TDLS_DISCOVERY_RESPONSE 14
1093 #define HT_ACTION_NOTIFY_CHAN_WIDTH 0
1094 #define HT_ACTION_SM_PWR_SAVE 1
1095 #define HT_ACTION_PSMP_ACTION 2
1096 #define HT_ACTION_SET_PCO_PHASE 3
1097 #define HT_ACTION_MIMO_CSI 4
1098 #define HT_ACTION_MIMO_BEAMFORMING 5
1099 #define HT_ACTION_MIMO_COMPRESSED_BEAMFORMING 6
1100 #define HT_ACTION_ANT_SEL_FEEDBACK 7
1101 #define HT_ACTION_HT_INFO_EXCHANGE 8
1103 /* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */
1104 #define FT_ACTION_REQUEST 1
1105 #define FT_ACTION_RESPONSE 2
1106 #define FT_ACTION_CONFIRM 3
1107 #define FT_ACTION_ACK 4
1109 /* SA Query Action frame codes (IEEE 802.11w-2009, 7.4.9) */
1110 #define SA_QUERY_REQUEST 0
1111 #define SA_QUERY_RESPONSE 1
1113 /* IEEE Std 802.11z-2010, 7.4.11, Table 7-57v1 */
1114 #define TDLS_SETUP_REQUEST 0
1115 #define TDLS_SETUP_RESPONSE 1
1116 #define TDLS_SETUP_CONFIRM 2
1117 #define TDLS_TEARDOWN 3
1118 #define TDLS_PEER_TRAFFIC_INDICATION 4
1119 #define TDLS_CHANNEL_SWITCH_REQUEST 5
1120 #define TDLS_CHANNEL_SWITCH_RESPONSE 6
1121 #define TDLS_PEER_PSM_REQUEST 7
1122 #define TDLS_PEER_PSM_RESPONSE 8
1123 #define TDLS_PEER_TRAFFIC_RESPONSE 9
1124 #define TDLS_DISCOVERY_REQUEST 10
1126 /* 11s draft 12.0, table 7-57v30 */
1127 #define MESH_ACTION_LINK_METRIC_REPORT 0
1128 #define MESH_ACTION_HWMP 1
1129 #define MESH_ACTION_GATE_ANNOUNCE 2
1130 #define MESH_ACTION_CONGESTION_CTL 3
1131 #define MESH_ACTION_MCCA_SETUP_REQUEST 4
1132 #define MESH_ACTION_MCCA_SETUP_REPLY 5
1133 #define MESH_ACTION_MCCA_ADV_REQUEST 6
1134 #define MESH_ACTION_MCCA_ADV 7
1135 #define MESH_ACTION_MCCA_TEARDOWN 8
1136 #define MESH_ACTION_TBTT_ADJ_REQUEST 9
1137 #define MESH_ACTION_TBTT_ADJ_RESPONSE 10
1139 /* 11s draft 12.0, table 7-57v42: Multihop Action field values */
1140 #define MULTIHOP_ACTION_PROXY_UPDATE 0
1141 #define MULTIHOP_ACTION_PROXY_UPDATE_CONF 1
1143 /* 11s draft 12.0, table 7-57v24: Self-protected Action field values */
1144 #define SELFPROT_ACTION_MESH_PEERING_OPEN 1
1145 #define SELFPROT_ACTION_MESH_PEERING_CONFIRM 2
1146 #define SELFPROT_ACTION_MESH_PEERING_CLOSE 3
1147 #define SELFPROT_ACTION_MESH_GROUP_KEY_INFORM 4
1148 #define SELFPROT_ACTION_MESH_GROUP_KEY_ACK 5
1150 /* 11s draft 12.0, table 7-43bj6: Mesh Peering Protocol Identifier field values */
1151 #define MESH_PEERING_PROTO_MGMT 0
1152 #define MESH_PEERING_PROTO_AMPE 1
1153 #define MESH_PEERING_PROTO_VENDOR 255
1155 /* Vendor actions */
1157 #define MRVL_ACTION_MESH_MANAGEMENT 1
1159 #define MRVL_MESH_MGMT_ACTION_RREQ 0
1160 #define MRVL_MESH_MGMT_ACTION_RREP 1
1161 #define MRVL_MESH_MGMT_ACTION_RERR 2
1162 #define MRVL_MESH_MGMT_ACTION_PLDM 3
1164 #define ANQP_INFO_ANQP_QUERY_LIST 256
1165 #define ANQP_INFO_ANQP_CAPAB_LIST 257
1166 #define ANQP_INFO_VENUE_NAME_INFO 258
1167 #define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO 259
1168 #define ANQP_INFO_NETWORK_AUTH_TYPE_INFO 260
1169 #define ANQP_INFO_ROAMING_CONSORTIUM_LIST 261
1170 #define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO 262
1171 #define ANQP_INFO_NAI_REALM_LIST 263
1172 #define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO 264
1173 #define ANQP_INFO_AP_GEOSPATIAL_LOCATION 265
1174 #define ANQP_INFO_AP_CIVIC_LOCATION 266
1175 #define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI 267
1176 #define ANQP_INFO_DOMAIN_NAME_LIST 268
1177 #define ANQP_INFO_EMERGENCY_ALERT_ID_URI 269
1178 #define ANQP_INFO_TDLS_CAPAB_INFO 270
1179 #define ANQP_INFO_EMERGENCY_NAI 271
1180 #define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST 56797
1182 /* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */
1183 static const value_string anqp_info_id_vals[] =
1185 {ANQP_INFO_ANQP_QUERY_LIST, "ANQP Query list"},
1186 {ANQP_INFO_ANQP_CAPAB_LIST, "ANQP Capability list"},
1187 {ANQP_INFO_VENUE_NAME_INFO, "Venue Name information"},
1188 {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO, "Emergency Call Number information"},
1189 {ANQP_INFO_NETWORK_AUTH_TYPE_INFO,
1190 "Network Authentication Type information"},
1191 {ANQP_INFO_ROAMING_CONSORTIUM_LIST, "Roaming Consortium list"},
1192 {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO,
1193 "IP Address Type Availability information"},
1194 {ANQP_INFO_NAI_REALM_LIST, "NAI Realm list"},
1195 {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO, "3GPP Cellular Network information"},
1196 {ANQP_INFO_AP_GEOSPATIAL_LOCATION, "AP Geospatial Location"},
1197 {ANQP_INFO_AP_CIVIC_LOCATION, "AP Civic Location"},
1198 {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI, "AP Location Public Identifier URI"},
1199 {ANQP_INFO_DOMAIN_NAME_LIST, "Domain Name list"},
1200 {ANQP_INFO_EMERGENCY_ALERT_ID_URI, "Emergency Alert Identifier URI"},
1201 {ANQP_INFO_TDLS_CAPAB_INFO, "TDLS Capability information"},
1202 {ANQP_INFO_EMERGENCY_NAI, "Emergency NAI"},
1203 {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST, "ANQP vendor-specific list"},
1207 /* IEEE 802.11v - WNM Action field values */
1210 WNM_EVENT_REPORT = 1,
1211 WNM_DIAGNOSTIC_REQ = 2,
1212 WNM_DIAGNOSTIC_REPORT = 3,
1213 WNM_LOCATION_CFG_REQ = 4,
1214 WNM_LOCATION_CFG_RESP = 5,
1215 WNM_BSS_TRANS_MGMT_QUERY = 6,
1216 WNM_BSS_TRANS_MGMT_REQ = 7,
1217 WNM_BSS_TRANS_MGMT_RESP = 8,
1220 WNM_COLLOCATED_INTERFERENCE_REQ = 11,
1221 WNM_COLLOCATED_INTERFERENCE_REPORT = 12,
1224 WNM_TFS_NOTIFY = 15,
1225 WNM_SLEEP_MODE_REQ = 16,
1226 WNM_SLEEP_MODE_RESP = 17,
1227 WNM_TIM_BROADCAST_REQ = 18,
1228 WNM_TIM_BROADCAST_RESP = 19,
1229 WNM_QOS_TRAFFIC_CAPAB_UPDATE = 20,
1230 WNM_CHANNEL_USAGE_REQ = 21,
1231 WNM_CHANNEL_USAGE_RESP = 22,
1234 WNM_TIMING_MEASUREMENT_REQ = 25,
1235 WNM_NOTIFICATION_REQ = 26,
1236 WNM_NOTIFICATION_RESP = 27
1239 static const value_string wnm_action_codes[] =
1241 { WNM_EVENT_REQ, "Event Request" },
1242 { WNM_EVENT_REPORT, "Event Report" },
1243 { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" },
1244 { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" },
1245 { WNM_LOCATION_CFG_REQ, "Location Configuration Request" },
1246 { WNM_LOCATION_CFG_RESP, "Location Configuration Response" },
1247 { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" },
1248 { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" },
1249 { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" },
1250 { WNM_FMS_REQ, "FMS Request" },
1251 { WNM_FMS_RESP, "FMS Response" },
1252 { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" },
1253 { WNM_COLLOCATED_INTERFERENCE_REPORT, "Collocated Interference Report" },
1254 { WNM_TFS_REQ, "TFS Request" },
1255 { WNM_TFS_RESP, "TFS Response" },
1256 { WNM_TFS_NOTIFY, "TFS Notify" },
1257 { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" },
1258 { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" },
1259 { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" },
1260 { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" },
1261 { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" },
1262 { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" },
1263 { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" },
1264 { WNM_DMS_REQ, "DMS Request" },
1265 { WNM_DMS_RESP, "DMS Response" },
1266 { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" },
1267 { WNM_NOTIFICATION_REQ, "WNM-Notification Request" },
1268 { WNM_NOTIFICATION_RESP, "WNM-Notification Response" },
1272 /*** End: Action Fixed Parameter ***/
1274 static const value_string ieee80211_tag_measure_request_type_flags[] = {
1275 {0x00, "Basic Request"},
1276 {0x01, "Clear Channel Assessment (CCA) Request"},
1277 {0x02, "Receive Power Indication (RPI) Histogram Request"},
1278 {0x03, "Channel Load Request"},
1279 {0x04, "Noise Histogram Request"},
1280 {0x05, "Beacon Request"},
1281 {0x06, "Frame Request"},
1282 {0x07, "STA Statistics Request"},
1283 {0x08, "Location Configuration Indication (LCI) Request"},
1284 {0x09, "Transmit Stream Measurement Request"},
1285 {0x0A, "Measurement Pause Request"},
1289 static const value_string ieee80211_tag_measure_report_type_flags[] = {
1290 { 0x00, "Basic Report" },
1291 { 0x01, "Clear Channel Assessment (CCA) Report" },
1292 { 0x02, "Receive Power Indication (RPI) Histogram Report" },
1293 { 0x03, "Channel Load Report" },
1294 { 0x04, "Noise Histogram Report" },
1295 { 0x05, "Beacon Report" },
1296 { 0x06, "Frame Report" },
1297 { 0x07, "STA Statistics Report" },
1298 { 0x08, "Location Configuration Information (LCI) Report" },
1299 { 0x09, "Transmit Stream Measurement Report" },
1303 static const true_false_string ieee80211_tag_measure_report_frame_info_frame_type_flag = {
1304 "Measurement Pilot Frame",
1305 "Beacon/Probe Response Frame"
1308 static const true_false_string ieee80211_tag_measure_map_field_bss_flag = {
1309 "At least one MPDU was received by another BSS or IBSS in the measurement period.",
1310 "No MPDUs were received from another BSS or IBSS in the measurement period."
1313 static const value_string ieee80211_tag_measure_request_measurement_mode_flags[] = {
1314 { 0x00, "Passive" },
1316 { 0x02, "Beacon Table" },
1320 #define MEASURE_REQ_BEACON_SUB_SSID 0
1321 #define MEASURE_REQ_BEACON_SUB_BRI 1
1322 #define MEASURE_REQ_BEACON_SUB_RD 2
1323 #define MEASURE_REQ_BEACON_SUB_REQUEST 10
1324 #define MEASURE_REQ_BEACON_SUB_APCP 51
1325 #define MEASURE_REQ_BEACON_SUB_VS 221
1327 static const value_string ieee80211_tag_measure_request_beacon_sub_id_flags[] = {
1328 { MEASURE_REQ_BEACON_SUB_SSID, "SSID" },
1329 { MEASURE_REQ_BEACON_SUB_BRI, "Beacon Reporting Information" },
1330 { MEASURE_REQ_BEACON_SUB_RD, "Reporting Detail" },
1331 { MEASURE_REQ_BEACON_SUB_REQUEST, "Request" },
1332 { MEASURE_REQ_BEACON_SUB_APCP, "AP Channel Report" },
1333 { MEASURE_REQ_BEACON_SUB_VS, "Vendor Specific" },
1337 static const value_string ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags[] = {
1338 { 0x00, "Report to be issued after each measurement." },
1339 { 0x01, "The measured RCPI level is greater than an absolute threshold." },
1340 { 0x02, "The measured RCPI level is less than an absolute threshold." },
1341 { 0x03, "The measured RSNI level is greater than an absolute threshold." },
1342 { 0x04, "The measured RSNI level is less than an absolute threshold." },
1343 { 0x05, "The measured RCPI level is greater than a threshold defined by an offset from the serving AP's reference RCPI." },
1344 { 0x06, "The measured RCPI level is less than a threshold defined by an offset from the serving AP's reference RCPI." },
1345 { 0x07, "The measured RSNI level is greater than a threshold defined by an offset from the serving AP's reference RSNI." },
1346 { 0x08, "The measured RSNI level is less than a threshold defined by an offset from the serving AP's reference RSNI." },
1347 { 0x09, "The measured RCPI level is in a range bound by the serving AP's reference RCPI and an offset from the serving AP's reference RCPI." },
1348 { 0x0a, "The measured RSNI level is in a range bound by the serving AP's reference RSNI and an offset from the serving AP's reference RSNI." },
1349 { 0xfe, "Report not required to be issued" },
1353 static const value_string ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags[] = {
1354 { 0, "No fixed length fields or elements" },
1355 { 1, "All fixed length fields and any requested elements in the Request information element if present" },
1356 { 2, "All fixed length fields and elements (default, used when Reporting Detail subelement is not included in Beacon Request" },
1360 static const value_string ieee80211_tag_measure_request_group_id_flags[] = {
1361 { 0x00, "STA Counters from dot11CountersTable" },
1362 { 0x01, "STA Counters from dot11MacStatistics group" },
1363 { 0x02, "QoS STA Counters for UP0 from dot11QosCountersTable" },
1364 { 0x03, "QoS STA Counters for UP1 from dot11QosCountersTable" },
1365 { 0x04, "QoS STA Counters for UP2 from dot11QosCountersTable" },
1366 { 0x05, "QoS STA Counters for UP3 from dot11QosCountersTable" },
1367 { 0x06, "QoS STA Counters for UP4 from dot11QosCountersTable" },
1368 { 0x07, "QoS STA Counters for UP5 from dot11QosCountersTable" },
1369 { 0x08, "QoS STA Counters for UP6 from dot11QosCountersTable" },
1370 { 0x09, "QoS STA Counters for UP7 from dot11QosCountersTable" },
1371 { 0x0a, "BSS Average Access Delays" },
1372 { 0x0b, "STA Counters from dot11A-MSDU Group" },
1373 { 0x0c, "STA Counters from dot11A-MPDU Group" },
1374 { 0x0d, "STA Counters from dot11 BAR, Channel Width, PSMP Group" },
1375 { 0x0e, "STA Counters from dot11Protection Group" },
1376 { 0x0f, "STBC Group" },
1380 static const value_string ieee80211_tclas_process_flag[] = {
1381 {0x00, "Incoming MSDU's higher layer parameters have to match to the parameters in all associated TCLAS elements."},
1382 {0x01, "Incoming MSDU's higher layer parameters have to match to at least one of the associated TCLAS elements."},
1383 {0x02, "Incoming MSDU's that do not belong to any other TS are classified to the TS for which this TCLAS Processing element is used. In this case, there will not be any associated TCLAS elements."},
1387 static int proto_wlan = -1;
1388 static int proto_aggregate = -1;
1389 static packet_info * g_pinfo;
1390 static gboolean ieee80211_tvb_invalid = FALSE;
1392 /* ************************************************************************* */
1393 /* Header field info values for FC-field */
1394 /* ************************************************************************* */
1395 static int hf_ieee80211_fc_field = -1;
1396 static int hf_ieee80211_fc_proto_version = -1;
1397 static int hf_ieee80211_fc_frame_type = -1;
1398 static int hf_ieee80211_fc_frame_subtype = -1;
1399 static int hf_ieee80211_fc_frame_type_subtype = -1;
1401 static int hf_ieee80211_fc_flags = -1;
1402 static int hf_ieee80211_fc_to_ds = -1;
1403 static int hf_ieee80211_fc_from_ds = -1;
1404 static int hf_ieee80211_fc_data_ds = -1;
1406 static int hf_ieee80211_fc_more_frag = -1;
1407 static int hf_ieee80211_fc_retry = -1;
1408 static int hf_ieee80211_fc_pwr_mgt = -1;
1409 static int hf_ieee80211_fc_more_data = -1;
1410 static int hf_ieee80211_fc_protected = -1;
1411 static int hf_ieee80211_fc_order = -1;
1413 typedef struct retransmit_key {
1416 guint16 seq_control;
1420 static GHashTable *fc_analyse_retransmit_table = NULL;
1421 static GHashTable *fc_first_frame_table = NULL;
1423 static int hf_ieee80211_fc_analysis_retransmission = -1;
1424 static int hf_ieee80211_fc_analysis_retransmission_frame = -1;
1426 /* ************************************************************************* */
1427 /* Header values for Duration/ID field */
1428 /* ************************************************************************* */
1429 static int hf_ieee80211_did_duration = -1;
1430 static int hf_ieee80211_assoc_id = -1;
1432 /* ************************************************************************* */
1433 /* Header values for different address-fields (all 4 of them) */
1434 /* ************************************************************************* */
1435 static int hf_ieee80211_addr_da = -1; /* Destination address subfield */
1436 static int hf_ieee80211_addr_sa = -1; /* Source address subfield */
1437 static int hf_ieee80211_addr_ra = -1; /* Receiver address subfield */
1438 static int hf_ieee80211_addr_ta = -1; /* Transmitter address subfield */
1439 static int hf_ieee80211_addr_bssid = -1; /* address is bssid */
1441 static int hf_ieee80211_addr = -1; /* Source or destination address subfield */
1444 /* ************************************************************************* */
1445 /* Header values for QoS control field */
1446 /* ************************************************************************* */
1447 static int hf_ieee80211_qos_tid = -1;
1448 static int hf_ieee80211_qos_priority = -1;
1449 static int hf_ieee80211_qos_ack_policy = -1;
1450 static int hf_ieee80211_qos_amsdu_present = -1;
1451 static int hf_ieee80211_qos_eosp = -1;
1452 static int hf_ieee80211_qos_bit4 = -1;
1453 static int hf_ieee80211_qos_txop_limit = -1;
1454 static int hf_ieee80211_qos_buf_state_indicated = -1;
1455 static int hf_ieee80211_qos_highest_pri_buf_ac = -1;
1456 static int hf_ieee80211_qos_qap_buf_load = -1;
1457 static int hf_ieee80211_qos_txop_dur_req = -1;
1458 static int hf_ieee80211_qos_queue_size = -1;
1460 /* ************************************************************************* */
1461 /* Header values for HT control field (+HTC) */
1462 /* ************************************************************************* */
1463 /* 802.11nD-1.10 & 802.11nD-2.0 7.1.3.5a */
1464 static int hf_ieee80211_htc = -1;
1465 static int hf_ieee80211_htc_lac = -1;
1466 static int hf_ieee80211_htc_lac_reserved = -1;
1467 static int hf_ieee80211_htc_lac_trq = -1;
1468 static int hf_ieee80211_htc_lac_mai_aseli = -1;
1469 static int hf_ieee80211_htc_lac_mai_mrq = -1;
1470 static int hf_ieee80211_htc_lac_mai_msi = -1;
1471 static int hf_ieee80211_htc_lac_mai_reserved = -1;
1472 static int hf_ieee80211_htc_lac_mfsi = -1;
1473 static int hf_ieee80211_htc_lac_mfb = -1;
1474 static int hf_ieee80211_htc_lac_asel_command = -1;
1475 static int hf_ieee80211_htc_lac_asel_data = -1;
1476 static int hf_ieee80211_htc_cal_pos = -1;
1477 static int hf_ieee80211_htc_cal_seq = -1;
1478 static int hf_ieee80211_htc_reserved1 = -1;
1479 static int hf_ieee80211_htc_csi_steering = -1;
1480 static int hf_ieee80211_htc_ndp_announcement = -1;
1481 static int hf_ieee80211_htc_reserved2 = -1;
1482 static int hf_ieee80211_htc_ac_constraint = -1;
1483 static int hf_ieee80211_htc_rdg_more_ppdu = -1;
1485 /* ************************************************************************* */
1486 /* Header values for sequence number field */
1487 /* ************************************************************************* */
1488 static int hf_ieee80211_frag_number = -1;
1489 static int hf_ieee80211_seq_number = -1;
1491 /* ************************************************************************* */
1492 /* Header values for Frame Check field */
1493 /* ************************************************************************* */
1494 static int hf_ieee80211_fcs = -1;
1495 static int hf_ieee80211_fcs_good = -1;
1496 static int hf_ieee80211_fcs_bad = -1;
1498 /* ************************************************************************* */
1499 /* Header values for reassembly */
1500 /* ************************************************************************* */
1501 static int hf_ieee80211_fragments = -1;
1502 static int hf_ieee80211_fragment = -1;
1503 static int hf_ieee80211_fragment_overlap = -1;
1504 static int hf_ieee80211_fragment_overlap_conflict = -1;
1505 static int hf_ieee80211_fragment_multiple_tails = -1;
1506 static int hf_ieee80211_fragment_too_long_fragment = -1;
1507 static int hf_ieee80211_fragment_error = -1;
1508 static int hf_ieee80211_fragment_count = -1;
1509 static int hf_ieee80211_reassembled_in = -1;
1510 static int hf_ieee80211_reassembled_length = -1;
1512 static int proto_wlan_mgt = -1;
1514 /* ************************************************************************* */
1515 /* Fixed fields found in mgt frames */
1516 /* ************************************************************************* */
1517 static int hf_ieee80211_fixed_parameters = -1; /* Protocol payload for management frames */
1519 static int hf_ieee80211_ff_auth_alg = -1; /* Authentication algorithm field */
1520 static int hf_ieee80211_ff_auth_seq = -1; /* Authentication transaction sequence */
1521 static int hf_ieee80211_ff_current_ap = -1; /* Current AP MAC address */
1522 static int hf_ieee80211_ff_listen_ival = -1; /* Listen interval fixed field */
1523 static int hf_ieee80211_ff_timestamp = -1; /* 64 bit timestamp */
1524 static int hf_ieee80211_ff_beacon_interval = -1; /* 16 bit Beacon interval */
1525 static int hf_ieee80211_ff_assoc_id = -1; /* 16 bit AID field */
1526 static int hf_ieee80211_ff_reason = -1; /* 16 bit reason code */
1527 static int hf_ieee80211_ff_status_code = -1; /* Status code */
1528 static int hf_ieee80211_ff_category_code = -1; /* 8 bit Category code */
1529 static int hf_ieee80211_ff_action_code = -1; /* 8 bit Action code */
1530 static int hf_ieee80211_ff_dialog_token = -1; /* 8 bit Dialog token */
1531 static int hf_ieee80211_ff_wme_action_code = -1; /* Management notification action code */
1532 static int hf_ieee80211_ff_wme_status_code = -1; /* Management notification setup response status code */
1533 static int hf_ieee80211_ff_qos_action_code = -1;
1534 static int hf_ieee80211_ff_dls_action_code = -1;
1535 static int hf_ieee80211_ff_dst_mac_addr = -1; /* DLS destination MAC addressi */
1536 static int hf_ieee80211_ff_src_mac_addr = -1; /* DLS source MAC addressi */
1537 static int hf_ieee80211_ff_dls_timeout = -1; /* DLS timeout value */
1538 static int hf_ieee80211_ff_ft_action_code = -1; /* 8 bit FT Action code */
1539 static int hf_ieee80211_ff_sta_address = -1;
1540 static int hf_ieee80211_ff_target_ap_address = -1;
1541 static int hf_ieee80211_ff_gas_comeback_delay = -1;
1542 static int hf_ieee80211_ff_gas_fragment_id = -1;
1543 static int hf_ieee80211_ff_more_gas_fragments = -1;
1544 static int hf_ieee80211_ff_query_request_length = -1;
1545 static int hf_ieee80211_ff_query_request = -1;
1546 static int hf_ieee80211_ff_query_response_length = -1;
1547 static int hf_ieee80211_ff_query_response = -1;
1548 static int hf_ieee80211_ff_anqp_info_id = -1;
1549 static int hf_ieee80211_ff_anqp_info_length = -1;
1550 static int hf_ieee80211_ff_anqp_info = -1;
1551 static int hf_ieee80211_ff_anqp_query_id = -1;
1552 static int hf_ieee80211_ff_anqp_capability = -1;
1553 static int hf_ieee80211_ff_anqp_capability_vlen = -1;
1554 static int hf_ieee80211_ff_anqp_capability_vendor = -1;
1555 static int hf_ieee80211_ff_venue_info_group = -1;
1556 static int hf_ieee80211_ff_venue_info_type = -1;
1557 static int hf_ieee80211_ff_anqp_venue_length = -1;
1558 static int hf_ieee80211_ff_anqp_venue_language = -1;
1559 static int hf_ieee80211_ff_anqp_venue_name = -1;
1560 static int hf_ieee80211_ff_anqp_nw_auth_type_indicator = -1;
1561 static int hf_ieee80211_ff_anqp_nw_auth_type_url_len = -1;
1562 static int hf_ieee80211_ff_anqp_nw_auth_type_url = -1;
1563 static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len = -1;
1564 static int hf_ieee80211_ff_anqp_roaming_consortium_oi = -1;
1565 static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6 = -1;
1566 static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4 = -1;
1567 static int hf_ieee80211_ff_anqp_nai_realm_count = -1;
1568 static int hf_ieee80211_ff_anqp_nai_field_len = -1;
1569 static int hf_ieee80211_ff_anqp_nai_realm_encoding = -1;
1570 static int hf_ieee80211_ff_anqp_nai_realm_length = -1;
1571 static int hf_ieee80211_ff_anqp_nai_realm = -1;
1572 static int hf_ieee80211_ff_anqp_nai_realm_eap_count = -1;
1573 static int hf_ieee80211_ff_anqp_nai_realm_eap_len = -1;
1574 static int hf_ieee80211_ff_anqp_nai_realm_eap_method = -1;
1575 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count = -1;
1576 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id = -1;
1577 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len = -1;
1578 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value = -1;
1579 static int hf_ieee80211_3gpp_gc_gud = -1;
1580 static int hf_ieee80211_3gpp_gc_udhl = -1;
1581 static int hf_ieee80211_3gpp_gc_iei = -1;
1582 static int hf_ieee80211_3gpp_gc_plmn_len = -1;
1583 static int hf_ieee80211_3gpp_gc_num_plmns = -1;
1584 static int hf_ieee80211_3gpp_gc_plmn = -1;
1585 static int hf_ieee80211_ff_anqp_domain_name_len = -1;
1586 static int hf_ieee80211_ff_anqp_domain_name = -1;
1587 static int hf_ieee80211_ff_tdls_action_code = -1;
1588 static int hf_ieee80211_ff_target_channel = -1;
1589 static int hf_ieee80211_ff_regulatory_class = -1;
1590 static int hf_ieee80211_ff_wnm_action_code = -1;
1591 static int hf_ieee80211_ff_request_mode_pref_cand = -1;
1592 static int hf_ieee80211_ff_request_mode_abridged = -1;
1593 static int hf_ieee80211_ff_request_mode_disassoc_imminent = -1;
1594 static int hf_ieee80211_ff_request_mode_bss_term_included = -1;
1595 static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent = -1;
1596 static int hf_ieee80211_ff_disassoc_timer = -1;
1597 static int hf_ieee80211_ff_validity_interval = -1;
1598 static int hf_ieee80211_ff_url_len = -1;
1599 static int hf_ieee80211_ff_url = -1;
1601 static int hf_ieee80211_ff_sa_query_action_code = -1;
1602 static int hf_ieee80211_ff_transaction_id = -1;
1604 /* Vendor specific */
1605 static int hf_ieee80211_ff_marvell_action_type = -1;
1606 static int hf_ieee80211_ff_marvell_mesh_mgt_action_code = -1;
1607 static int hf_ieee80211_ff_marvell_mesh_mgt_length = -1; /* Mesh Management length */
1608 static int hf_ieee80211_ff_marvell_mesh_mgt_mode = -1; /* Mesh Management mode */
1609 static int hf_ieee80211_ff_marvell_mesh_mgt_ttl = -1; /* Mesh Management TTL */
1610 static int hf_ieee80211_ff_marvell_mesh_mgt_dstcount = -1; /* Mesh Management dst count */
1611 static int hf_ieee80211_ff_marvell_mesh_mgt_hopcount = -1; /* Mesh Management hop count */
1612 static int hf_ieee80211_ff_marvell_mesh_mgt_rreqid = -1; /* Mesh Management RREQ ID */
1613 static int hf_ieee80211_ff_marvell_mesh_mgt_sa = -1; /* Mesh Management src addr */
1614 static int hf_ieee80211_ff_marvell_mesh_mgt_ssn = -1; /* Mesh Management src sequence number */
1615 static int hf_ieee80211_ff_marvell_mesh_mgt_metric = -1; /* Mesh Management metric */
1616 static int hf_ieee80211_ff_marvell_mesh_mgt_flags = -1; /* Mesh Management RREQ flags */
1617 static int hf_ieee80211_ff_marvell_mesh_mgt_da = -1; /* Mesh Management dst addr */
1618 static int hf_ieee80211_ff_marvell_mesh_mgt_dsn = -1; /* Mesh Management dst sequence number */
1619 static int hf_ieee80211_ff_marvell_mesh_mgt_lifetime = -1; /* Mesh Management lifetime */
1622 static int hf_ieee80211_ff_ba_action = -1;
1624 static int hf_ieee80211_ff_block_ack_params = -1;
1625 static int hf_ieee80211_ff_block_ack_params_amsdu_permitted = -1;
1626 static int hf_ieee80211_ff_block_ack_params_policy = -1;
1627 static int hf_ieee80211_ff_block_ack_params_tid = -1;
1628 static int hf_ieee80211_ff_block_ack_params_buffer_size = -1;
1630 static const int *ieee80211_ff_block_ack_params_fields[] = {
1631 &hf_ieee80211_ff_block_ack_params_amsdu_permitted,
1632 &hf_ieee80211_ff_block_ack_params_policy,
1633 &hf_ieee80211_ff_block_ack_params_tid,
1634 &hf_ieee80211_ff_block_ack_params_buffer_size,
1638 static int hf_ieee80211_ff_block_ack_timeout = -1;
1640 static int hf_ieee80211_ff_block_ack_ssc = -1;
1641 static int hf_ieee80211_ff_block_ack_ssc_fragment = -1;
1642 static int hf_ieee80211_ff_block_ack_ssc_sequence = -1;
1644 static const int *ieee80211_ff_block_ack_ssc_fields[] = {
1645 &hf_ieee80211_ff_block_ack_ssc_fragment,
1646 &hf_ieee80211_ff_block_ack_ssc_sequence,
1650 static int hf_ieee80211_ff_delba_param = -1;
1651 static int hf_ieee80211_ff_delba_param_reserved = -1;
1652 static int hf_ieee80211_ff_delba_param_init = -1;
1653 static int hf_ieee80211_ff_delba_param_tid = -1;
1655 static const int *ieee80211_ff_delba_param_fields[] = {
1656 &hf_ieee80211_ff_delba_param_reserved,
1657 &hf_ieee80211_ff_delba_param_init,
1658 &hf_ieee80211_ff_delba_param_tid,
1662 static int hf_ieee80211_ff_max_reg_pwr = -1;
1663 static int hf_ieee80211_ff_measurement_pilot_int = -1;
1664 static int hf_ieee80211_ff_country_str = -1;
1665 static int hf_ieee80211_ff_max_tx_pwr = -1;
1666 static int hf_ieee80211_ff_tx_pwr_used = -1;
1667 static int hf_ieee80211_ff_transceiver_noise_floor = -1;
1668 static int hf_ieee80211_ff_channel_width = -1;
1670 static int hf_ieee80211_ff_qos_info_ap = -1;
1671 static int hf_ieee80211_ff_qos_info_ap_edca_param_set_counter = -1;
1672 static int hf_ieee80211_ff_qos_info_ap_q_ack = -1;
1673 static int hf_ieee80211_ff_qos_info_ap_queue_req = -1;
1674 static int hf_ieee80211_ff_qos_info_ap_txop_request = -1;
1675 static int hf_ieee80211_ff_qos_info_ap_reserved = -1;
1677 static const int *ieee80211_ff_qos_info_ap_fields[] = {
1678 &hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
1679 &hf_ieee80211_ff_qos_info_ap_q_ack,
1680 &hf_ieee80211_ff_qos_info_ap_queue_req,
1681 &hf_ieee80211_ff_qos_info_ap_txop_request,
1682 &hf_ieee80211_ff_qos_info_ap_reserved,
1686 static int hf_ieee80211_ff_qos_info_sta = -1;
1687 static int hf_ieee80211_ff_qos_info_sta_ac_vo = -1;
1688 static int hf_ieee80211_ff_qos_info_sta_ac_vi = -1;
1689 static int hf_ieee80211_ff_qos_info_sta_ac_bk = -1;
1690 static int hf_ieee80211_ff_qos_info_sta_ac_be = -1;
1691 static int hf_ieee80211_ff_qos_info_sta_q_ack = -1;
1692 static int hf_ieee80211_ff_qos_info_sta_max_sp_len = -1;
1693 static int hf_ieee80211_ff_qos_info_sta_more_data_ack = -1;
1695 static const int *ieee80211_ff_qos_info_sta_fields[] = {
1696 &hf_ieee80211_ff_qos_info_sta_ac_vo,
1697 &hf_ieee80211_ff_qos_info_sta_ac_vi,
1698 &hf_ieee80211_ff_qos_info_sta_ac_bk,
1699 &hf_ieee80211_ff_qos_info_sta_ac_be,
1700 &hf_ieee80211_ff_qos_info_sta_q_ack,
1701 &hf_ieee80211_ff_qos_info_sta_max_sp_len,
1702 &hf_ieee80211_ff_qos_info_sta_more_data_ack,
1706 static int hf_ieee80211_ff_sm_pwr_save = -1;
1707 static int hf_ieee80211_ff_sm_pwr_save_enabled = -1;
1708 static int hf_ieee80211_ff_sm_pwr_save_sm_mode = -1;
1709 static int hf_ieee80211_ff_sm_pwr_save_reserved = -1;
1711 static const int *ieee80211_ff_sw_pwr_save_fields[] = {
1712 &hf_ieee80211_ff_sm_pwr_save_enabled,
1713 &hf_ieee80211_ff_sm_pwr_save_sm_mode,
1714 &hf_ieee80211_ff_sm_pwr_save_reserved,
1718 static int hf_ieee80211_ff_pco_phase_cntrl = -1;
1720 static int hf_ieee80211_ff_psmp_param_set = -1;
1721 static int hf_ieee80211_ff_psmp_param_set_n_sta = -1;
1722 static int hf_ieee80211_ff_psmp_param_set_more_psmp = -1;
1723 static int hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration = -1;
1725 static const int *ieee80211_ff_psmp_param_set_fields[] = {
1726 &hf_ieee80211_ff_psmp_param_set_n_sta,
1727 &hf_ieee80211_ff_psmp_param_set_more_psmp,
1728 &hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
1732 static int hf_ieee80211_ff_mimo_cntrl = -1;
1733 static int hf_ieee80211_ff_mimo_cntrl_nc_index = -1;
1734 static int hf_ieee80211_ff_mimo_cntrl_nr_index = -1;
1735 static int hf_ieee80211_ff_mimo_cntrl_channel_width = -1;
1736 static int hf_ieee80211_ff_mimo_cntrl_grouping = -1;
1737 static int hf_ieee80211_ff_mimo_cntrl_coefficient_size = -1;
1738 static int hf_ieee80211_ff_mimo_cntrl_codebook_info = -1;
1739 static int hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment = -1;
1740 static int hf_ieee80211_ff_mimo_cntrl_reserved = -1;
1741 static int hf_ieee80211_ff_mimo_cntrl_sounding_timestamp = -1;
1743 static int hf_ieee80211_ff_ant_selection = -1;
1744 static int hf_ieee80211_ff_ant_selection_0 = -1;
1745 static int hf_ieee80211_ff_ant_selection_1 = -1;
1746 static int hf_ieee80211_ff_ant_selection_2 = -1;
1747 static int hf_ieee80211_ff_ant_selection_3 = -1;
1748 static int hf_ieee80211_ff_ant_selection_4 = -1;
1749 static int hf_ieee80211_ff_ant_selection_5 = -1;
1750 static int hf_ieee80211_ff_ant_selection_6 = -1;
1751 static int hf_ieee80211_ff_ant_selection_7 = -1;
1753 static const int *ieee80211_ff_ant_selection_fields[] = {
1754 &hf_ieee80211_ff_ant_selection_0,
1755 &hf_ieee80211_ff_ant_selection_1,
1756 &hf_ieee80211_ff_ant_selection_2,
1757 &hf_ieee80211_ff_ant_selection_3,
1758 &hf_ieee80211_ff_ant_selection_4,
1759 &hf_ieee80211_ff_ant_selection_5,
1760 &hf_ieee80211_ff_ant_selection_6,
1761 &hf_ieee80211_ff_ant_selection_7,
1765 static int hf_ieee80211_ff_ext_channel_switch_announcement = -1;
1766 static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode = -1;
1767 static int hf_ieee80211_ff_ext_channel_switch_announcement_new_reg_class = -1;
1768 static int hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number = -1;
1769 static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_count = -1;
1771 static const int *ieee80211_ff_ext_channel_switch_announcement_fields[] = {
1772 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
1773 &hf_ieee80211_ff_ext_channel_switch_announcement_new_reg_class,
1774 &hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
1775 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
1779 static int hf_ieee80211_ff_ht_info = -1;
1780 static int hf_ieee80211_ff_ht_info_information_request = -1;
1781 static int hf_ieee80211_ff_ht_info_40_mhz_intolerant = -1;
1782 static int hf_ieee80211_ff_ht_info_sta_chan_width = -1;
1783 static int hf_ieee80211_ff_ht_info_reserved = -1;
1785 static const int *ieee80211_ff_ht_info_fields[] = {
1786 &hf_ieee80211_ff_ht_info_information_request,
1787 &hf_ieee80211_ff_ht_info_40_mhz_intolerant,
1788 &hf_ieee80211_ff_ht_info_sta_chan_width,
1789 &hf_ieee80211_ff_ht_info_reserved,
1793 static int hf_ieee80211_ff_ht_action = -1;
1795 static int hf_ieee80211_ff_psmp_sta_info = -1;
1796 static int hf_ieee80211_ff_psmp_sta_info_type = -1;
1797 static int hf_ieee80211_ff_psmp_sta_info_dtt_start_offset = -1;
1798 static int hf_ieee80211_ff_psmp_sta_info_dtt_duration = -1;
1799 static int hf_ieee80211_ff_psmp_sta_info_sta_id = -1;
1800 static int hf_ieee80211_ff_psmp_sta_info_utt_start_offset = -1;
1801 static int hf_ieee80211_ff_psmp_sta_info_utt_duration = -1;
1802 static int hf_ieee80211_ff_psmp_sta_info_reserved_small= -1;
1803 static int hf_ieee80211_ff_psmp_sta_info_reserved_large = -1;
1804 static int hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id = -1;
1806 static int hf_ieee80211_ff_mimo_csi_snr = -1;
1808 /*** Begin: 802.11s additions ***/
1809 static int hf_ieee80211_ff_mesh_action = -1;
1810 static int hf_ieee80211_ff_multihop_action = -1;
1811 static int hf_ieee80211_ff_mesh_flags = -1;
1812 static int hf_ieee80211_ff_mesh_ttl = -1;
1813 static int hf_ieee80211_ff_mesh_sequence = -1;
1814 static int hf_ieee80211_ff_mesh_addr4 = -1;
1815 static int hf_ieee80211_ff_mesh_addr5 = -1;
1816 static int hf_ieee80211_ff_mesh_addr6 = -1;
1817 static int hf_ieee80211_ff_selfprot_action = -1;
1819 static int hf_ieee80211_mesh_peering_proto = -1;
1820 static int hf_ieee80211_mesh_peering_local_link_id = -1;
1821 static int hf_ieee80211_mesh_peering_peer_link_id = -1;
1823 static int hf_ieee80211_ff_hwmp_flags = -1;
1824 static int hf_ieee80211_ff_hwmp_hopcount = -1;
1825 static int hf_ieee80211_ff_hwmp_ttl = -1;
1826 static int hf_ieee80211_ff_hwmp_pdid = -1;
1827 static int hf_ieee80211_ff_hwmp_orig_sta = -1;
1828 static int hf_ieee80211_ff_hwmp_orig_sn = -1;
1829 static int hf_ieee80211_ff_hwmp_orig_ext = -1;
1830 static int hf_ieee80211_ff_hwmp_lifetime = -1;
1831 static int hf_ieee80211_ff_hwmp_metric = -1;
1832 static int hf_ieee80211_ff_hwmp_targ_count = -1;
1833 static int hf_ieee80211_ff_hwmp_targ_flags = -1;
1834 static int hf_ieee80211_ff_hwmp_targ_to_flags = -1;
1835 static int hf_ieee80211_ff_hwmp_targ_usn_flags = -1;
1836 static int hf_ieee80211_ff_hwmp_targ_sta = -1;
1837 static int hf_ieee80211_ff_hwmp_targ_sn = -1;
1838 static int hf_ieee80211_ff_hwmp_targ_ext = -1;
1839 static int hf_ieee80211_rann_flags = -1;
1840 static int hf_ieee80211_rann_root_sta = -1;
1841 static int hf_ieee80211_rann_sn = -1;
1842 static int hf_ieee80211_rann_interval = -1;
1844 static int hf_ieee80211_mesh_config_path_sel_protocol = -1;
1845 static int hf_ieee80211_mesh_config_path_sel_metric = -1;
1846 static int hf_ieee80211_mesh_config_congestion_control = -1;
1847 static int hf_ieee80211_mesh_config_sync_method = -1;
1848 static int hf_ieee80211_mesh_config_auth_protocol = -1;
1849 static int hf_ieee80211_mesh_config_formation_info = -1;
1850 static int hf_ieee80211_mesh_config_capability = -1;
1851 static int hf_ieee80211_mesh_id = -1;
1853 static int hf_ieee80211_ff_public_action = -1;
1855 /* ************************************************************************* */
1856 /* Flags found in the capability field (fixed field) */
1857 /* ************************************************************************* */
1858 static int hf_ieee80211_ff_capture = -1;
1859 static int hf_ieee80211_ff_cf_ess = -1;
1860 static int hf_ieee80211_ff_cf_ibss = -1;
1861 static int hf_ieee80211_ff_cf_sta_poll = -1; /* CF pollable status for a STA */
1862 static int hf_ieee80211_ff_cf_ap_poll = -1; /* CF pollable status for an AP */
1863 static int hf_ieee80211_ff_cf_privacy = -1;
1864 static int hf_ieee80211_ff_cf_preamble = -1;
1865 static int hf_ieee80211_ff_cf_pbcc = -1;
1866 static int hf_ieee80211_ff_cf_agility = -1;
1867 static int hf_ieee80211_ff_short_slot_time = -1;
1868 static int hf_ieee80211_ff_dsss_ofdm = -1;
1869 static int hf_ieee80211_ff_cf_spec_man = -1;
1870 static int hf_ieee80211_ff_cf_apsd = -1;
1871 static int hf_ieee80211_ff_cf_del_blk_ack = -1;
1872 static int hf_ieee80211_ff_cf_imm_blk_ack = -1;
1874 /* ************************************************************************* */
1876 /* ************************************************************************* */
1877 static int hf_ieee80211_amsdu_msdu_header_text = -1;
1880 /* ************************************************************************* */
1881 /* Tagged value format fields */
1882 /* ************************************************************************* */
1883 static int hf_ieee80211_tagged_parameters = -1; /* Fixed payload item */
1884 static int hf_ieee80211_tag = -1;
1885 static int hf_ieee80211_tag_number = -1;
1886 static int hf_ieee80211_tag_length = -1;
1887 static int hf_ieee80211_tag_interpretation = -1;
1888 static int hf_ieee80211_tag_oui = -1;
1889 static int hf_ieee80211_tag_ssid = -1;
1890 static int hf_ieee80211_tag_supp_rates = -1;
1891 static int hf_ieee80211_tag_fh_dwell_time = -1;
1892 static int hf_ieee80211_tag_fh_hop_set = -1;
1893 static int hf_ieee80211_tag_fh_hop_pattern = -1;
1894 static int hf_ieee80211_tag_fh_hop_index = -1;
1895 static int hf_ieee80211_tag_ds_param_channel = -1;
1896 static int hf_ieee80211_tag_cfp_count = -1;
1897 static int hf_ieee80211_tag_cfp_period = -1;
1898 static int hf_ieee80211_tag_cfp_max_duration = -1;
1899 static int hf_ieee80211_tag_cfp_dur_remaining = -1;
1900 static int hf_ieee80211_tim_dtim_count = -1;
1901 static int hf_ieee80211_tim_dtim_period = -1;
1902 static int hf_ieee80211_tim_bmapctl = -1;
1903 static int hf_ieee80211_tim_bmapctl_mcast = -1;
1904 static int hf_ieee80211_tim_bmapctl_offset = -1;
1905 static int hf_ieee80211_tim_partial_virtual_bitmap = -1;
1906 static int hf_ieee80211_tag_ibss_atim_window = -1;
1907 static int hf_ieee80211_tag_country_info_code = -1;
1908 static int hf_ieee80211_tag_country_info_env = -1;
1909 static int hf_ieee80211_tag_country_info_pad = -1;
1910 static int hf_ieee80211_tag_country_info_fnm = -1;
1911 static int hf_ieee80211_tag_country_info_fnm_fcn = -1;
1912 static int hf_ieee80211_tag_country_info_fnm_nc = -1;
1913 static int hf_ieee80211_tag_country_info_fnm_mtpl = -1;
1914 static int hf_ieee80211_tag_country_info_rrc = -1;
1915 static int hf_ieee80211_tag_country_info_rrc_rei = -1;
1916 static int hf_ieee80211_tag_country_info_rrc_rc = -1;
1917 static int hf_ieee80211_tag_country_info_rrc_cc = -1;
1918 static int hf_ieee80211_tag_fh_hopping_parameter_prime_radix = -1;
1919 static int hf_ieee80211_tag_fh_hopping_parameter_nb_channels = -1;
1920 static int hf_ieee80211_tag_fh_hopping_table_flag = -1;
1921 static int hf_ieee80211_tag_fh_hopping_table_number_of_sets = -1;
1922 static int hf_ieee80211_tag_fh_hopping_table_modulus = -1;
1923 static int hf_ieee80211_tag_fh_hopping_table_offset = -1;
1924 static int hf_ieee80211_tag_fh_hopping_random_table = -1;
1925 static int hf_ieee80211_tag_request = -1;
1926 static int hf_ieee80211_tag_challenge_text = -1;
1928 static int hf_ieee80211_wep_iv = -1;
1929 static int hf_ieee80211_wep_iv_weak = -1;
1930 static int hf_ieee80211_tkip_extiv = -1;
1931 static int hf_ieee80211_ccmp_extiv = -1;
1932 static int hf_ieee80211_wep_key = -1;
1933 static int hf_ieee80211_wep_icv = -1;
1935 static int hf_ieee80211_block_ack_request_control = -1;
1936 static int hf_ieee80211_block_ack_control = -1;
1937 static int hf_ieee80211_block_ack_control_ack_policy = -1;
1938 static int hf_ieee80211_block_ack_control_multi_tid = -1;
1939 static int hf_ieee80211_block_ack_control_compressed_bitmap = -1;
1940 static int hf_ieee80211_block_ack_control_reserved = -1;
1942 static int hf_ieee80211_block_ack_control_basic_tid_info = -1;
1943 static int hf_ieee80211_block_ack_control_compressed_tid_info = -1;
1944 static int hf_ieee80211_block_ack_control_multi_tid_info = -1;
1946 static int hf_ieee80211_block_ack_multi_tid_info = -1;
1947 static int hf_ieee80211_block_ack_request_type = -1;
1948 static int hf_ieee80211_block_ack_multi_tid_reserved = -1;
1949 static int hf_ieee80211_block_ack_multi_tid_value = -1;
1950 static int hf_ieee80211_block_ack_type = -1;
1951 static int hf_ieee80211_block_ack_bitmap = -1;
1952 static int hf_ieee80211_block_ack_bitmap_missing_frame = -1;
1954 static int hf_ieee80211_tag_measure_request_measurement_mode = -1;
1955 static int hf_ieee80211_tag_measure_request_bssid = -1;
1957 static int hf_ieee80211_tag_measure_request_subelement_length = -1;
1958 static int hf_ieee80211_tag_measure_request_beacon_sub_id = -1;
1959 static int hf_ieee80211_tag_measure_request_beacon_sub_ssid = -1;
1960 static int hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition = -1;
1961 static int hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset = -1;
1962 static int hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail = -1;
1963 static int hf_ieee80211_tag_measure_request_beacon_sub_request = -1;
1964 static int hf_ieee80211_tag_measure_request_beacon_unknown = -1;
1966 static int hf_ieee80211_tag_measure_request_frame_request_type = -1;
1967 static int hf_ieee80211_tag_measure_request_mac_address = -1;
1968 static int hf_ieee80211_tag_measure_request_peer_mac_address = -1;
1969 static int hf_ieee80211_tag_measure_request_group_id = -1;
1971 static int hf_ieee80211_ht_cap = -1;
1972 static int hf_ieee80211_ht_vs_cap = -1;
1973 static int hf_ieee80211_ht_ldpc_coding = -1;
1974 static int hf_ieee80211_ht_chan_width = -1;
1975 static int hf_ieee80211_ht_sm_pwsave = -1;
1976 static int hf_ieee80211_ht_green = -1;
1977 static int hf_ieee80211_ht_short20 = -1;
1978 static int hf_ieee80211_ht_short40 = -1;
1979 static int hf_ieee80211_ht_tx_stbc = -1;
1980 static int hf_ieee80211_ht_rx_stbc = -1;
1981 static int hf_ieee80211_ht_delayed_block_ack = -1;
1982 static int hf_ieee80211_ht_max_amsdu = -1;
1983 static int hf_ieee80211_ht_dss_cck_40 = -1;
1984 static int hf_ieee80211_ht_psmp = -1;
1985 static int hf_ieee80211_ht_40_mhz_intolerant = -1;
1986 static int hf_ieee80211_ht_l_sig = -1;
1988 static int hf_ieee80211_ampduparam = -1;
1989 static int hf_ieee80211_ampduparam_vs = -1;
1990 static int hf_ieee80211_ampduparam_mpdu = -1;
1991 static int hf_ieee80211_ampduparam_mpdu_start_spacing = -1;
1992 static int hf_ieee80211_ampduparam_reserved = -1;
1994 static int hf_ieee80211_mcsset = -1;
1995 static int hf_ieee80211_mcsset_vs = -1;
1996 static int hf_ieee80211_mcsset_rx_bitmask = -1;
1997 static int hf_ieee80211_mcsset_rx_bitmask_0to7 = -1;
1998 static int hf_ieee80211_mcsset_rx_bitmask_8to15 = -1;
1999 static int hf_ieee80211_mcsset_rx_bitmask_16to23 = -1;
2000 static int hf_ieee80211_mcsset_rx_bitmask_24to31 = -1;
2001 static int hf_ieee80211_mcsset_rx_bitmask_32 = -1;
2002 static int hf_ieee80211_mcsset_rx_bitmask_33to38 = -1;
2003 static int hf_ieee80211_mcsset_rx_bitmask_39to52 = -1;
2004 static int hf_ieee80211_mcsset_rx_bitmask_53to76 = -1;
2005 static int hf_ieee80211_mcsset_highest_data_rate = -1;
2006 static int hf_ieee80211_mcsset_tx_mcs_set_defined = -1;
2007 static int hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal = -1;
2008 static int hf_ieee80211_mcsset_tx_max_spatial_streams = -1;
2009 static int hf_ieee80211_mcsset_tx_unequal_modulation = -1;
2011 static int hf_ieee80211_htex_cap = -1;
2012 static int hf_ieee80211_htex_vs_cap = -1;
2013 static int hf_ieee80211_htex_pco = -1;
2014 static int hf_ieee80211_htex_transtime = -1;
2015 static int hf_ieee80211_htex_mcs = -1;
2016 static int hf_ieee80211_htex_htc_support = -1;
2017 static int hf_ieee80211_htex_rd_responder = -1;
2019 static int hf_ieee80211_txbf = -1;
2020 static int hf_ieee80211_txbf_vs = -1;
2021 static int hf_ieee80211_txbf_cap = -1;
2022 static int hf_ieee80211_txbf_rcv_ssc = -1;
2023 static int hf_ieee80211_txbf_tx_ssc = -1;
2024 static int hf_ieee80211_txbf_rcv_ndp = -1;
2025 static int hf_ieee80211_txbf_tx_ndp = -1;
2026 static int hf_ieee80211_txbf_impl_txbf = -1;
2027 static int hf_ieee80211_txbf_calib = -1;
2028 static int hf_ieee80211_txbf_expl_csi = -1;
2029 static int hf_ieee80211_txbf_expl_uncomp_fm = -1;
2030 static int hf_ieee80211_txbf_expl_comp_fm = -1;
2031 static int hf_ieee80211_txbf_expl_bf_csi = -1;
2032 static int hf_ieee80211_txbf_expl_uncomp_fm_feed = -1;
2033 static int hf_ieee80211_txbf_expl_comp_fm_feed = -1;
2034 static int hf_ieee80211_txbf_csi_num_bf_ant = -1;
2035 static int hf_ieee80211_txbf_min_group = -1;
2036 static int hf_ieee80211_txbf_uncomp_sm_bf_ant = -1;
2037 static int hf_ieee80211_txbf_comp_sm_bf_ant = -1;
2038 static int hf_ieee80211_txbf_csi_max_rows_bf = -1;
2039 static int hf_ieee80211_txbf_chan_est = -1;
2040 static int hf_ieee80211_txbf_resrv = -1;
2042 /*** Begin: 802.11n D1.10 - HT Information IE ***/
2043 static int hf_ieee80211_ht_info_primary_channel = -1;
2045 static int hf_ieee80211_ht_info_delimiter1 = -1;
2046 static int hf_ieee80211_ht_info_secondary_channel_offset = -1;
2047 static int hf_ieee80211_ht_info_channel_width = -1;
2048 static int hf_ieee80211_ht_info_rifs_mode = -1;
2049 static int hf_ieee80211_ht_info_psmp_stas_only = -1;
2050 static int hf_ieee80211_ht_info_service_interval_granularity = -1;
2052 static int hf_ieee80211_ht_info_delimiter2 = -1;
2053 static int hf_ieee80211_ht_info_operating_mode = -1;
2054 static int hf_ieee80211_ht_info_non_greenfield_sta_present = -1;
2055 static int hf_ieee80211_ht_info_transmit_burst_limit = -1;
2056 static int hf_ieee80211_ht_info_obss_non_ht_stas_present = -1;
2057 static int hf_ieee80211_ht_info_reserved_1 = -1;
2059 static int hf_ieee80211_ht_info_delimiter3 = -1;
2060 static int hf_ieee80211_ht_info_reserved_2 = -1;
2061 static int hf_ieee80211_ht_info_dual_beacon = -1;
2062 static int hf_ieee80211_ht_info_dual_cts_protection = -1;
2063 static int hf_ieee80211_ht_info_secondary_beacon = -1;
2064 static int hf_ieee80211_ht_info_lsig_txop_protection_full_support = -1;
2065 static int hf_ieee80211_ht_info_pco_active = -1;
2066 static int hf_ieee80211_ht_info_pco_phase = -1;
2067 static int hf_ieee80211_ht_info_reserved_3 = -1;
2068 /*** End: 802.11n D1.10 - HT Information IE ***/
2070 static int hf_ieee80211_tag_ap_channel_report_regulatory_class = -1;
2071 static int hf_ieee80211_tag_ap_channel_report_channel_list = -1;
2073 static int hf_ieee80211_tag_secondary_channel_offset = -1;
2075 static int hf_ieee80211_tag_power_constraint_local = -1;
2077 static int hf_ieee80211_tag_power_capability_min = -1;
2078 static int hf_ieee80211_tag_power_capability_max = -1;
2080 static int hf_ieee80211_tag_tpc_report_trsmt_pow = -1;
2081 static int hf_ieee80211_tag_tpc_report_link_mrg = -1;
2083 static int hf_ieee80211_tag_supported_channels = -1;
2084 static int hf_ieee80211_tag_supported_channels_first = -1;
2085 static int hf_ieee80211_tag_supported_channels_range = -1;
2087 static int hf_ieee80211_csa_channel_switch_mode = -1;
2088 static int hf_ieee80211_csa_new_channel_number = -1;
2089 static int hf_ieee80211_csa_channel_switch_count = -1;
2091 static int hf_ieee80211_tag_measure_request_token = -1;
2092 static int hf_ieee80211_tag_measure_request_mode = -1;
2093 static int hf_ieee80211_tag_measure_request_mode_parallel = -1;
2094 static int hf_ieee80211_tag_measure_request_mode_enable = -1;
2095 static int hf_ieee80211_tag_measure_request_mode_request = -1;
2096 static int hf_ieee80211_tag_measure_request_mode_report = -1;
2097 static int hf_ieee80211_tag_measure_request_mode_duration_mandatory = -1;
2098 static int hf_ieee80211_tag_measure_request_mode_reserved = -1;
2099 static int hf_ieee80211_tag_measure_request_type = -1;
2101 static int hf_ieee80211_tag_measure_request_channel_number = -1;
2102 static int hf_ieee80211_tag_measure_request_start_time = -1;
2103 static int hf_ieee80211_tag_measure_request_duration = -1;
2105 static int hf_ieee80211_tag_measure_request_regulatory_class = -1;
2106 static int hf_ieee80211_tag_measure_request_randomization_interval = -1;
2108 static int hf_ieee80211_tag_measure_report_measurement_token = -1;
2109 static int hf_ieee80211_tag_measure_report_mode = -1;
2110 static int hf_ieee80211_tag_measure_report_mode_late = -1;
2111 static int hf_ieee80211_tag_measure_report_mode_incapable = -1;
2112 static int hf_ieee80211_tag_measure_report_mode_refused = -1;
2113 static int hf_ieee80211_tag_measure_report_mode_reserved = -1;
2114 static int hf_ieee80211_tag_measure_report_type = -1;
2115 static int hf_ieee80211_tag_measure_report_channel_number = -1;
2116 static int hf_ieee80211_tag_measure_report_start_time = -1;
2117 static int hf_ieee80211_tag_measure_report_duration = -1;
2119 static int hf_ieee80211_tag_measure_basic_map_field = -1;
2120 static int hf_ieee80211_tag_measure_map_field_bss = -1;
2121 static int hf_ieee80211_tag_measure_map_field_odfm = -1;
2122 static int hf_ieee80211_tag_measure_map_field_unident_signal = -1;
2123 static int hf_ieee80211_tag_measure_map_field_radar = -1;
2124 static int hf_ieee80211_tag_measure_map_field_unmeasured = -1;
2125 static int hf_ieee80211_tag_measure_map_field_reserved = -1;
2127 static int hf_ieee80211_tag_measure_cca_busy_fraction = -1;
2129 static int hf_ieee80211_tag_measure_rpi_histogram_report = -1;
2130 static int hf_ieee80211_tag_measure_rpi_histogram_report_0 = -1;
2131 static int hf_ieee80211_tag_measure_rpi_histogram_report_1 = -1;
2132 static int hf_ieee80211_tag_measure_rpi_histogram_report_2 = -1;
2133 static int hf_ieee80211_tag_measure_rpi_histogram_report_3 = -1;
2134 static int hf_ieee80211_tag_measure_rpi_histogram_report_4 = -1;
2135 static int hf_ieee80211_tag_measure_rpi_histogram_report_5 = -1;
2136 static int hf_ieee80211_tag_measure_rpi_histogram_report_6 = -1;
2137 static int hf_ieee80211_tag_measure_rpi_histogram_report_7 = -1;
2139 static int hf_ieee80211_tag_measure_report_regulatory_class = -1;
2140 static int hf_ieee80211_tag_measure_report_channel_load = -1;
2141 static int hf_ieee80211_tag_measure_report_frame_info = -1;
2142 static int hf_ieee80211_tag_measure_report_frame_info_phy_type = -1;
2143 static int hf_ieee80211_tag_measure_report_frame_info_frame_type = -1;
2144 static int hf_ieee80211_tag_measure_report_rcpi = -1;
2145 static int hf_ieee80211_tag_measure_report_rsni = -1;
2146 static int hf_ieee80211_tag_measure_report_bssid = -1;
2147 static int hf_ieee80211_tag_measure_report_ant_id = -1;
2148 static int hf_ieee80211_tag_measure_report_anpi = -1;
2149 static int hf_ieee80211_tag_measure_report_ipi_density_0 = -1;
2150 static int hf_ieee80211_tag_measure_report_ipi_density_1 = -1;
2151 static int hf_ieee80211_tag_measure_report_ipi_density_2 = -1;
2152 static int hf_ieee80211_tag_measure_report_ipi_density_3 = -1;
2153 static int hf_ieee80211_tag_measure_report_ipi_density_4 = -1;
2154 static int hf_ieee80211_tag_measure_report_ipi_density_5 = -1;
2155 static int hf_ieee80211_tag_measure_report_ipi_density_6 = -1;
2156 static int hf_ieee80211_tag_measure_report_ipi_density_7 = -1;
2157 static int hf_ieee80211_tag_measure_report_ipi_density_8 = -1;
2158 static int hf_ieee80211_tag_measure_report_ipi_density_9 = -1;
2159 static int hf_ieee80211_tag_measure_report_ipi_density_10 = -1;
2160 static int hf_ieee80211_tag_measure_report_parent_tsf = -1;
2162 static int hf_ieee80211_tag_quiet_count = -1;
2163 static int hf_ieee80211_tag_quiet_period = -1;
2164 static int hf_ieee80211_tag_quiet_duration = -1;
2165 static int hf_ieee80211_tag_quiet_offset = -1;
2167 static int hf_ieee80211_tag_dfs_owner = -1;
2168 static int hf_ieee80211_tag_dfs_recovery_interval = -1;
2169 static int hf_ieee80211_tag_dfs_channel_map = -1;
2170 static int hf_ieee80211_tag_dfs_channel_number = -1;
2171 static int hf_ieee80211_tag_dfs_map = -1;
2173 static int hf_ieee80211_tag_erp_info = -1;
2174 static int hf_ieee80211_tag_erp_info_erp_present = -1;
2175 static int hf_ieee80211_tag_erp_info_use_protection = -1;
2176 static int hf_ieee80211_tag_erp_info_barker_preamble_mode = -1;
2177 static int hf_ieee80211_tag_erp_info_reserved = -1;
2179 static int hf_ieee80211_tag_extended_capabilities = -1;
2180 static int hf_ieee80211_tag_extended_capabilities_b0 = -1;
2181 static int hf_ieee80211_tag_extended_capabilities_b1 = -1;
2182 static int hf_ieee80211_tag_extended_capabilities_b2 = -1;
2183 static int hf_ieee80211_tag_extended_capabilities_b3 = -1;
2184 static int hf_ieee80211_tag_extended_capabilities_b4 = -1;
2185 static int hf_ieee80211_tag_extended_capabilities_b6 = -1;
2186 static int hf_ieee80211_tag_extended_capabilities_b27 = -1;
2187 static int hf_ieee80211_tag_extended_capabilities_b28 = -1;
2188 static int hf_ieee80211_tag_extended_capabilities_b29 = -1;
2189 static int hf_ieee80211_tag_extended_capabilities_b30 = -1;
2190 static int hf_ieee80211_tag_extended_capabilities_b31 = -1;
2191 static int hf_ieee80211_tag_extended_capabilities_b32 = -1;
2192 static int hf_ieee80211_tag_extended_capabilities_b33 = -1;
2193 static int hf_ieee80211_tag_extended_capabilities_b34 = -1;
2194 static int hf_ieee80211_tag_extended_capabilities_b36 = -1;
2195 static int hf_ieee80211_tag_extended_capabilities_b37 = -1;
2196 static int hf_ieee80211_tag_extended_capabilities_b38 = -1;
2197 static int hf_ieee80211_tag_extended_capabilities_b39 = -1;
2198 static int hf_ieee80211_tag_extended_capabilities_b40 = -1;
2199 static int hf_ieee80211_tag_extended_capabilities_serv_int_granularity = -1;
2201 static int hf_ieee80211_tag_cisco_ccx1_unknown = -1;
2202 static int hf_ieee80211_tag_cisco_ccx1_name = -1;
2203 static int hf_ieee80211_tag_cisco_ccx1_clients = -1;
2205 static int hf_ieee80211_tag_neighbor_report_bssid = -1;
2206 static int hf_ieee80211_tag_neighbor_report_bssid_info = -1;
2207 static int hf_ieee80211_tag_neighbor_report_bssid_info_reachability = -1;
2208 static int hf_ieee80211_tag_neighbor_report_bssid_info_security = -1;
2209 static int hf_ieee80211_tag_neighbor_report_bssid_info_key_scope = -1;
2210 /*static int hf_ieee80211_tag_neighbor_report_bssid_info_capability = -1; */ /* TODO Make this the parent tree item */
2211 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng = -1;
2212 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos = -1;
2213 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd = -1;
2214 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt = -1;
2215 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback = -1;
2216 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback = -1;
2217 static int hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain = -1;
2218 static int hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput = -1;
2219 static int hf_ieee80211_tag_neighbor_report_bssid_info_reserved = -1;
2220 static int hf_ieee80211_tag_neighbor_report_reg_class = -1;
2221 static int hf_ieee80211_tag_neighbor_report_channel_number = -1;
2222 static int hf_ieee80211_tag_neighbor_report_phy_type = -1;
2224 static int hf_ieee80211_tag_supported_reg_classes_current = -1;
2225 static int hf_ieee80211_tag_supported_reg_classes_alternate = -1;
2227 /* IEEE Std 802.11r-2008 7.3.2.47 */
2228 static int hf_ieee80211_tag_mobility_domain_mdid = -1;
2229 static int hf_ieee80211_tag_mobility_domain_ft_capab = -1;
2230 static int hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds = -1;
2231 static int hf_ieee80211_tag_mobility_domain_ft_capab_resource_req = -1;
2233 /* IEEE Std 802.11r-2008 7.3.2.48 */
2234 static int hf_ieee80211_tag_ft_mic_control = -1;
2235 static int hf_ieee80211_tag_ft_element_count = -1;
2236 static int hf_ieee80211_tag_ft_mic = -1;
2237 static int hf_ieee80211_tag_ft_anonce = -1;
2238 static int hf_ieee80211_tag_ft_snonce = -1;
2239 static int hf_ieee80211_tag_ft_subelem_id = -1;
2240 static int hf_ieee80211_tag_ft_subelem_len = -1;
2241 static int hf_ieee80211_tag_ft_subelem_data = -1;
2242 static int hf_ieee80211_tag_ft_subelem_r1kh_id = -1;
2243 static int hf_ieee80211_tag_ft_subelem_gtk_key_info = -1;
2244 static int hf_ieee80211_tag_ft_subelem_gtk_key_id = -1;
2245 static int hf_ieee80211_tag_ft_subelem_gtk_key_length = -1;
2246 static int hf_ieee80211_tag_ft_subelem_gtk_rsc = -1;
2247 static int hf_ieee80211_tag_ft_subelem_gtk_key = -1;
2248 static int hf_ieee80211_tag_ft_subelem_r0kh_id = -1;
2249 static int hf_ieee80211_tag_ft_subelem_igtk_key_id = -1;
2250 static int hf_ieee80211_tag_ft_subelem_igtk_ipn = -1;
2251 static int hf_ieee80211_tag_ft_subelem_igtk_key_length = -1;
2252 static int hf_ieee80211_tag_ft_subelem_igtk_key = -1;
2254 /* IEEE Std 802.11w-2009 7.3.2.55 */
2255 static int hf_ieee80211_tag_mmie_keyid = -1;
2256 static int hf_ieee80211_tag_mmie_ipn = -1;
2257 static int hf_ieee80211_tag_mmie_mic = -1;
2259 /* IEEE Std 802.11v-2011 7.3.2.61 */
2260 static int hf_ieee80211_tag_time_adv_timing_capab = -1;
2261 static int hf_ieee80211_tag_time_adv_time_value = -1;
2262 static int hf_ieee80211_tag_time_adv_time_value_year = -1;
2263 static int hf_ieee80211_tag_time_adv_time_value_month = -1;
2264 static int hf_ieee80211_tag_time_adv_time_value_day = -1;
2265 static int hf_ieee80211_tag_time_adv_time_value_hours = -1;
2266 static int hf_ieee80211_tag_time_adv_time_value_minutes = -1;
2267 static int hf_ieee80211_tag_time_adv_time_value_seconds = -1;
2268 static int hf_ieee80211_tag_time_adv_time_value_milliseconds = -1;
2269 static int hf_ieee80211_tag_time_adv_time_value_reserved = -1;
2270 static int hf_ieee80211_tag_time_adv_time_error = -1;
2271 static int hf_ieee80211_tag_time_adv_time_update_counter = -1;
2273 /* IEEE Std 802.11v-2011 7.3.2.87 */
2274 static int hf_ieee80211_tag_time_zone = -1;
2276 /* IEEE Std 802.11u-2011 7.3.2.92 */
2277 static int hf_ieee80211_tag_interworking_access_network_type = -1;
2278 static int hf_ieee80211_tag_interworking_internet = -1;
2279 static int hf_ieee80211_tag_interworking_asra = -1;
2280 static int hf_ieee80211_tag_interworking_esr = -1;
2281 static int hf_ieee80211_tag_interworking_uesa = -1;
2282 static int hf_ieee80211_tag_interworking_hessid = -1;
2284 /* IEEE Std 802.11u-2011 7.3.2.93 */
2285 static int hf_ieee80211_tag_adv_proto_resp_len_limit = -1;
2286 static int hf_ieee80211_tag_adv_proto_pame_bi = -1;
2287 static int hf_ieee80211_tag_adv_proto_id = -1;
2289 /* IEEE Std 802.11u-2011 7.3.2.96 */
2290 static int hf_ieee80211_tag_roaming_consortium_num_anqp_oi = -1;
2291 static int hf_ieee80211_tag_roaming_consortium_oi1_len = -1;
2292 static int hf_ieee80211_tag_roaming_consortium_oi2_len = -1;
2293 static int hf_ieee80211_tag_roaming_consortium_oi1 = -1;
2294 static int hf_ieee80211_tag_roaming_consortium_oi2 = -1;
2295 static int hf_ieee80211_tag_roaming_consortium_oi3 = -1;
2297 /* 802.11n 7.3.2.48 */
2298 static int hf_ieee80211_hta_cc = -1;
2299 static int hf_ieee80211_hta_cap = -1;
2300 static int hf_ieee80211_hta_ext_chan_offset = -1;
2301 static int hf_ieee80211_hta_rec_tx_width = -1;
2302 static int hf_ieee80211_hta_rifs_mode = -1;
2303 static int hf_ieee80211_hta_controlled_access = -1;
2304 static int hf_ieee80211_hta_service_interval = -1;
2305 static int hf_ieee80211_hta_operating_mode = -1;
2306 static int hf_ieee80211_hta_non_gf_devices = -1;
2307 static int hf_ieee80211_hta_basic_stbc_mcs = -1;
2308 static int hf_ieee80211_hta_dual_stbc_protection = -1;
2309 static int hf_ieee80211_hta_secondary_beacon = -1;
2310 static int hf_ieee80211_hta_lsig_txop_protection = -1;
2311 static int hf_ieee80211_hta_pco_active = -1;
2312 static int hf_ieee80211_hta_pco_phase = -1;
2314 static int hf_ieee80211_antsel = -1;
2315 static int hf_ieee80211_antsel_vs = -1;
2316 static int hf_ieee80211_antsel_b0 = -1;
2317 static int hf_ieee80211_antsel_b1 = -1;
2318 static int hf_ieee80211_antsel_b2 = -1;
2319 static int hf_ieee80211_antsel_b3 = -1;
2320 static int hf_ieee80211_antsel_b4 = -1;
2321 static int hf_ieee80211_antsel_b5 = -1;
2322 static int hf_ieee80211_antsel_b6 = -1;
2323 static int hf_ieee80211_antsel_b7 = -1;
2325 static int hf_ieee80211_rsn_version = -1;
2326 static int hf_ieee80211_rsn_gcs = -1;
2327 static int hf_ieee80211_rsn_gcs_oui = -1;
2328 static int hf_ieee80211_rsn_gcs_type = -1;
2329 static int hf_ieee80211_rsn_gcs_80211_type = -1;
2330 static int hf_ieee80211_rsn_pcs_count = -1;
2331 static int hf_ieee80211_rsn_pcs_list = -1;
2332 static int hf_ieee80211_rsn_pcs = -1;
2333 static int hf_ieee80211_rsn_pcs_oui = -1;
2334 static int hf_ieee80211_rsn_pcs_80211_type = -1;
2335 static int hf_ieee80211_rsn_pcs_type = -1;
2336 static int hf_ieee80211_rsn_akms_count = -1;
2337 static int hf_ieee80211_rsn_akms_list = -1;
2338 static int hf_ieee80211_rsn_akms = -1;
2339 static int hf_ieee80211_rsn_akms_oui = -1;
2340 static int hf_ieee80211_rsn_akms_80211_type = -1;
2341 static int hf_ieee80211_rsn_akms_type = -1;
2342 static int hf_ieee80211_rsn_cap = -1;
2343 static int hf_ieee80211_rsn_cap_preauth = -1;
2344 static int hf_ieee80211_rsn_cap_no_pairwise = -1;
2345 static int hf_ieee80211_rsn_cap_ptksa_replay_counter = -1;
2346 static int hf_ieee80211_rsn_cap_gtksa_replay_counter = -1;
2347 static int hf_ieee80211_rsn_cap_mfpr = -1;
2348 static int hf_ieee80211_rsn_cap_mfpc = -1;
2349 static int hf_ieee80211_rsn_cap_peerkey = -1;
2350 static int hf_ieee80211_rsn_pmkid_count = -1;
2351 static int hf_ieee80211_rsn_pmkid_list = -1;
2352 static int hf_ieee80211_rsn_pmkid = -1;
2353 static int hf_ieee80211_rsn_gmcs = -1;
2354 static int hf_ieee80211_rsn_gmcs_oui = -1;
2355 static int hf_ieee80211_rsn_gmcs_type = -1;
2356 static int hf_ieee80211_rsn_gmcs_80211_type = -1;
2358 static int hf_ieee80211_wfa_ie_type = -1;
2359 static int hf_ieee80211_wfa_ie_wpa_version = -1;
2360 static int hf_ieee80211_wfa_ie_wpa_mcs = -1;
2361 static int hf_ieee80211_wfa_ie_wpa_mcs_oui = -1;
2362 static int hf_ieee80211_wfa_ie_wpa_mcs_type = -1;
2363 static int hf_ieee80211_wfa_ie_wpa_mcs_wfa_type = -1;
2364 static int hf_ieee80211_wfa_ie_wpa_ucs_count = -1;
2365 static int hf_ieee80211_wfa_ie_wpa_ucs_list = -1;
2366 static int hf_ieee80211_wfa_ie_wpa_ucs = -1;
2367 static int hf_ieee80211_wfa_ie_wpa_ucs_oui = -1;
2368 static int hf_ieee80211_wfa_ie_wpa_ucs_wfa_type = -1;
2369 static int hf_ieee80211_wfa_ie_wpa_ucs_type = -1;
2370 static int hf_ieee80211_wfa_ie_wpa_akms_count = -1;
2371 static int hf_ieee80211_wfa_ie_wpa_akms_list = -1;
2372 static int hf_ieee80211_wfa_ie_wpa_akms = -1;
2373 static int hf_ieee80211_wfa_ie_wpa_akms_oui = -1;
2374 static int hf_ieee80211_wfa_ie_wpa_akms_wfa_type = -1;
2375 static int hf_ieee80211_wfa_ie_wpa_akms_type = -1;
2376 static int hf_ieee80211_wfa_ie_wme_subtype = -1;
2377 static int hf_ieee80211_wfa_ie_wme_version = -1;
2378 static int hf_ieee80211_wfa_ie_wme_qos_info = -1;
2379 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length = -1;
2380 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be = -1;
2381 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk = -1;
2382 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi = -1;
2383 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo = -1;
2384 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved = -1;
2385 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd = -1;
2386 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count = -1;
2387 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved = -1;
2388 static int hf_ieee80211_wfa_ie_wme_reserved = -1;
2389 static int hf_ieee80211_wfa_ie_wme_ac_parameters = -1;
2390 static int hf_ieee80211_wfa_ie_wme_acp_aci_aifsn = -1;
2391 static int hf_ieee80211_wfa_ie_wme_acp_aci = -1;
2392 static int hf_ieee80211_wfa_ie_wme_acp_acm = -1;
2393 static int hf_ieee80211_wfa_ie_wme_acp_aifsn = -1;
2394 static int hf_ieee80211_wfa_ie_wme_acp_reserved = -1;
2395 static int hf_ieee80211_wfa_ie_wme_acp_ecw = -1;
2396 static int hf_ieee80211_wfa_ie_wme_acp_ecw_max = -1;
2397 static int hf_ieee80211_wfa_ie_wme_acp_ecw_min = -1;
2398 static int hf_ieee80211_wfa_ie_wme_acp_txop_limit = -1;
2399 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo = -1;
2400 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid = -1;
2401 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction = -1;
2402 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb = -1;
2403 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up = -1;
2404 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved = -1;
2405 static int hf_ieee80211_wfa_ie_wme_tspec_nor_msdu = -1;
2406 static int hf_ieee80211_wfa_ie_wme_tspec_max_msdu = -1;
2407 static int hf_ieee80211_wfa_ie_wme_tspec_min_srv = -1;
2408 static int hf_ieee80211_wfa_ie_wme_tspec_max_srv = -1;
2409 static int hf_ieee80211_wfa_ie_wme_tspec_inact_int = -1;
2410 static int hf_ieee80211_wfa_ie_wme_tspec_susp_int = -1;
2411 static int hf_ieee80211_wfa_ie_wme_tspec_srv_start = -1;
2412 static int hf_ieee80211_wfa_ie_wme_tspec_min_data = -1;
2413 static int hf_ieee80211_wfa_ie_wme_tspec_mean_data = -1;
2414 static int hf_ieee80211_wfa_ie_wme_tspec_peak_data = -1;
2415 static int hf_ieee80211_wfa_ie_wme_tspec_burst_size = -1;
2416 static int hf_ieee80211_wfa_ie_wme_tspec_delay_bound = -1;
2417 static int hf_ieee80211_wfa_ie_wme_tspec_min_phy = -1;
2418 static int hf_ieee80211_wfa_ie_wme_tspec_surplus = -1;
2419 static int hf_ieee80211_wfa_ie_wme_tspec_medium = -1;
2421 static int hf_ieee80211_aironet_ie_type = -1;
2422 static int hf_ieee80211_aironet_ie_version = -1;
2423 static int hf_ieee80211_aironet_ie_data = -1;
2424 static int hf_ieee80211_aironet_ie_qos_unk1 = -1;
2425 static int hf_ieee80211_aironet_ie_qos_paramset = -1;
2426 static int hf_ieee80211_aironet_ie_qos_val = -1;
2428 static int hf_ieee80211_marvell_ie_type = -1;
2429 static int hf_ieee80211_marvell_ie_mesh_subtype = -1;
2430 static int hf_ieee80211_marvell_ie_mesh_version = -1;
2431 static int hf_ieee80211_marvell_ie_mesh_active_proto_id = -1;
2432 static int hf_ieee80211_marvell_ie_mesh_active_metric_id = -1;
2433 static int hf_ieee80211_marvell_ie_mesh_cap = -1;
2434 static int hf_ieee80211_marvell_ie_data = -1;
2436 static int hf_ieee80211_atheros_ie_type = -1;
2437 static int hf_ieee80211_atheros_ie_subtype = -1;
2438 static int hf_ieee80211_atheros_ie_version = -1;
2439 static int hf_ieee80211_atheros_ie_cap_f_turbop = -1;
2440 static int hf_ieee80211_atheros_ie_cap_f_comp = -1;
2441 static int hf_ieee80211_atheros_ie_cap_f_ff = -1;
2442 static int hf_ieee80211_atheros_ie_cap_f_xr = -1;
2443 static int hf_ieee80211_atheros_ie_cap_f_ar = -1;
2444 static int hf_ieee80211_atheros_ie_cap_f_burst = -1;
2445 static int hf_ieee80211_atheros_ie_cap_f_wme = -1;
2446 static int hf_ieee80211_atheros_ie_cap_f_boost = -1;
2447 static int hf_ieee80211_atheros_ie_advcap_cap = -1;
2448 static int hf_ieee80211_atheros_ie_advcap_defkey = -1;
2449 static int hf_ieee80211_atheros_ie_xr_info = -1;
2450 static int hf_ieee80211_atheros_ie_xr_base_bssid = -1;
2451 static int hf_ieee80211_atheros_ie_xr_xr_bssid = -1;
2452 static int hf_ieee80211_atheros_ie_xr_xr_beacon = -1;
2453 static int hf_ieee80211_atheros_ie_xr_base_cap = -1;
2454 static int hf_ieee80211_atheros_ie_xr_xr_cap = -1;
2455 static int hf_ieee80211_atheros_ie_data = -1;
2457 /*QBSS - Version 1,2,802.11e*/
2459 static int hf_ieee80211_qbss2_cal = -1;
2460 static int hf_ieee80211_qbss2_gl = -1;
2461 static int hf_ieee80211_qbss_cu = -1;
2462 static int hf_ieee80211_qbss2_cu = -1;
2463 static int hf_ieee80211_qbss_scount = -1;
2464 static int hf_ieee80211_qbss2_scount = -1;
2465 static int hf_ieee80211_qbss_version = -1;
2466 static int hf_ieee80211_qbss_adc = -1;
2468 static int hf_ieee80211_tsinfo = -1;
2469 static int hf_ieee80211_tsinfo_type = -1;
2470 static int hf_ieee80211_tsinfo_tsid = -1;
2471 static int hf_ieee80211_tsinfo_dir = -1;
2472 static int hf_ieee80211_tsinfo_access = -1;
2473 static int hf_ieee80211_tsinfo_agg = -1;
2474 static int hf_ieee80211_tsinfo_apsd = -1;
2475 static int hf_ieee80211_tsinfo_up = -1;
2476 static int hf_ieee80211_tsinfo_ack = -1;
2477 static int hf_ieee80211_tsinfo_sched = -1;
2478 static int hf_ieee80211_tsinfo_rsv = -1;
2480 static const int *ieee80211_tsinfo_fields[] = {
2481 &hf_ieee80211_tsinfo_type,
2482 &hf_ieee80211_tsinfo_tsid,
2483 &hf_ieee80211_tsinfo_dir,
2484 &hf_ieee80211_tsinfo_access,
2485 &hf_ieee80211_tsinfo_agg,
2486 &hf_ieee80211_tsinfo_apsd,
2487 &hf_ieee80211_tsinfo_up,
2488 &hf_ieee80211_tsinfo_ack,
2489 &hf_ieee80211_tsinfo_sched,
2490 &hf_ieee80211_tsinfo_rsv,
2494 static int hf_ieee80211_tspec_nor_msdu = -1;
2495 static int hf_ieee80211_tspec_max_msdu = -1;
2496 static int hf_ieee80211_tspec_min_srv = -1;
2497 static int hf_ieee80211_tspec_max_srv = -1;
2498 static int hf_ieee80211_tspec_inact_int = -1;
2499 static int hf_ieee80211_tspec_susp_int = -1;
2500 static int hf_ieee80211_tspec_srv_start = -1;
2501 static int hf_ieee80211_tspec_min_data = -1;
2502 static int hf_ieee80211_tspec_mean_data = -1;
2503 static int hf_ieee80211_tspec_peak_data = -1;
2504 static int hf_ieee80211_tspec_burst_size = -1;
2505 static int hf_ieee80211_tspec_delay_bound = -1;
2506 static int hf_ieee80211_tspec_min_phy = -1;
2507 static int hf_ieee80211_tspec_surplus = -1;
2508 static int hf_ieee80211_tspec_medium = -1;
2509 static int hf_ieee80211_ts_delay = -1;
2510 static int hf_ieee80211_tclas_process = -1;
2511 static int hf_ieee80211_tag_qos_cap_qos_info = -1;
2512 static int hf_ieee80211_qos_info_field_vo_uapsd = -1;
2513 static int hf_ieee80211_qos_info_field_vi_uapsd = -1;
2514 static int hf_ieee80211_qos_info_field_bk_uapsd = -1;
2515 static int hf_ieee80211_qos_info_field_be_uapsd = -1;
2516 static int hf_ieee80211_qos_info_field_qack = -1;
2517 static int hf_ieee80211_qos_info_field_max_sp_length = -1;
2518 static int hf_ieee80211_qos_info_field_more_data_ack = -1;
2519 static int hf_ieee80211_qos_info_field_edca_upd_cnt = -1;
2520 static int hf_ieee80211_qos_info_field_queue_req = -1;
2521 static int hf_ieee80211_qos_info_field_txop_req = -1;
2522 static int hf_ieee80211_qos_info_field_reserved = -1;
2523 static int hf_ieee80211_tag_ext_supp_rates = -1;
2524 static int hf_ieee80211_sched_info = -1;
2525 static int hf_ieee80211_sched_info_agg = -1;
2526 static int hf_ieee80211_sched_info_tsid = -1;
2527 static int hf_ieee80211_sched_info_dir = -1;
2528 static int hf_ieee80211_sched_srv_start = -1;
2529 static int hf_ieee80211_sched_srv_int = -1;
2530 static int hf_ieee80211_sched_spec_int = -1;
2531 static int hf_ieee80211_tclas_up = -1;
2532 static int hf_ieee80211_tclas_class_type = -1;
2533 static int hf_ieee80211_tclas_class_mask = -1;
2534 static int hf_ieee80211_tclas_src_mac_addr = -1;
2535 static int hf_ieee80211_tclas_dst_mac_addr = -1;
2536 static int hf_ieee80211_tclas_ether_type = -1;
2537 static int hf_ieee80211_tclas_version = -1;
2538 static int hf_ieee80211_tclas_ipv4_src = -1;
2539 static int hf_ieee80211_tclas_ipv4_dst = -1;
2540 static int hf_ieee80211_tclas_src_port = -1;
2541 static int hf_ieee80211_tclas_dst_port = -1;
2542 static int hf_ieee80211_tclas_dscp = -1;
2543 static int hf_ieee80211_tclas_protocol = -1;
2544 static int hf_ieee80211_tclas_ipv6_src = -1;
2545 static int hf_ieee80211_tclas_ipv6_dst = -1;
2546 static int hf_ieee80211_tclas_flow = -1;
2547 static int hf_ieee80211_tclas_tag_type = -1;
2549 static int hf_ieee80211_aruba = -1;
2550 static int hf_ieee80211_aruba_hb_seq = -1;
2551 static int hf_ieee80211_aruba_mtu = -1;
2553 static int hf_ieee80211_tag_vendor_oui_type = -1;
2555 /* IEEE Std 802.11z-2010 7.3.2.62 */
2556 static int hf_ieee80211_tag_link_id_bssid = -1;
2557 static int hf_ieee80211_tag_link_id_init_sta = -1;
2558 static int hf_ieee80211_tag_link_id_resp_sta = -1;
2560 /* IEEE Std 802.11z-2010 7.3.2.63 */
2561 static int hf_ieee80211_tag_wakeup_schedule_offset = -1;
2562 static int hf_ieee80211_tag_wakeup_schedule_interval = -1;
2563 static int hf_ieee80211_tag_wakeup_schedule_awake_window_slots = -1;
2564 static int hf_ieee80211_tag_wakeup_schedule_max_awake_dur = -1;
2565 static int hf_ieee80211_tag_wakeup_schedule_idle_count = -1;
2567 /* IEEE Std 802.11z-2010 7.3.2.64 */
2568 static int hf_ieee80211_tag_channel_switch_timing_switch_time = -1;
2569 static int hf_ieee80211_tag_channel_switch_timing_switch_timeout = -1;
2571 /* IEEE Std 802.11z-2010 7.3.2.65 */
2572 static int hf_ieee80211_tag_pti_control_tid = -1;
2573 static int hf_ieee80211_tag_pti_control_sequence_control = -1;
2575 /* IEEE Std 802.11z-2010 7.3.2.66 */
2576 static int hf_ieee80211_tag_pu_buffer_status_ac_bk = -1;
2577 static int hf_ieee80211_tag_pu_buffer_status_ac_be = -1;
2578 static int hf_ieee80211_tag_pu_buffer_status_ac_vi = -1;
2579 static int hf_ieee80211_tag_pu_buffer_status_ac_vo = -1;
2581 /* IEEE Std 802.11r-2008 7.3.2.49 */
2582 static int hf_ieee80211_tag_timeout_int_type = -1;
2583 static int hf_ieee80211_tag_timeout_int_value = -1;
2585 /* Ethertype 89-0d */
2586 static int hf_ieee80211_data_encap_payload_type = -1;
2588 /* ************************************************************************* */
2589 /* Protocol trees */
2590 /* ************************************************************************* */
2591 static gint ett_80211 = -1;
2592 static gint ett_proto_flags = -1;
2593 static gint ett_cap_tree = -1;
2594 static gint ett_fc_tree = -1;
2595 static gint ett_cntrl_wrapper_fc = -1;
2596 static gint ett_cntrl_wrapper_payload = -1;
2597 static gint ett_fragments = -1;
2598 static gint ett_fragment = -1;
2599 static gint ett_block_ack = -1;
2600 static gint ett_block_ack_bitmap = -1;
2601 static gint ett_ath_cap_tree = -1;
2604 static gint ett_80211_mgt = -1;
2605 static gint ett_fixed_parameters = -1;
2606 static gint ett_tagged_parameters = -1;
2607 static gint ett_tag_bmapctl_tree = -1;
2608 static gint ett_tag_country_fnm_tree = -1;
2609 static gint ett_tag_country_rcc_tree = -1;
2610 static gint ett_qos_parameters = -1;
2611 static gint ett_qos_ps_buf_state = -1;
2612 static gint ett_qos_info_field_tree = -1;
2613 static gint ett_wep_parameters = -1;
2614 static gint ett_msh_control = -1;
2615 static gint ett_hwmp_targ_flags_tree = -1;
2617 static gint ett_rsn_gcs_tree = -1;
2618 static gint ett_rsn_pcs_tree = -1;
2619 static gint ett_rsn_sub_pcs_tree = -1;
2620 static gint ett_rsn_akms_tree = -1;
2621 static gint ett_rsn_sub_akms_tree = -1;
2622 static gint ett_rsn_cap_tree = -1;
2623 static gint ett_rsn_pmkid_tree = -1;
2624 static gint ett_rsn_gmcs_tree = -1;
2626 static gint ett_wpa_mcs_tree = -1;
2627 static gint ett_wpa_ucs_tree = -1;
2628 static gint ett_wpa_sub_ucs_tree = -1;
2629 static gint ett_wpa_akms_tree = -1;
2630 static gint ett_wpa_sub_akms_tree = -1;
2631 static gint ett_wme_ac = -1;
2632 static gint ett_wme_aci_aifsn = -1;
2633 static gint ett_wme_ecw = -1;
2634 static gint ett_wme_qos_info = -1;
2636 static gint ett_ht_cap_tree = -1;
2637 static gint ett_ampduparam_tree = -1;
2638 static gint ett_mcsset_tree = -1;
2639 static gint ett_mcsbit_tree = -1;
2640 static gint ett_htex_cap_tree = -1;
2641 static gint ett_txbf_tree = -1;
2642 static gint ett_antsel_tree = -1;
2643 static gint ett_hta_cap_tree = -1;
2644 static gint ett_hta_cap1_tree = -1;
2645 static gint ett_hta_cap2_tree = -1;
2646 static gint ett_htc_tree = -1;
2648 static gint ett_ht_info_delimiter1_tree = -1;
2649 static gint ett_ht_info_delimiter2_tree = -1;
2650 static gint ett_ht_info_delimiter3_tree = -1;
2652 static gint ett_tag_measure_request_mode_tree = -1;
2653 static gint ett_tag_measure_request_type_tree = -1;
2654 static gint ett_tag_measure_report_mode_tree = -1;
2655 static gint ett_tag_measure_report_type_tree = -1;
2656 static gint ett_tag_measure_report_basic_map_tree = -1;
2657 static gint ett_tag_measure_report_rpi_tree = -1;
2658 static gint ett_tag_measure_report_frame_tree = -1;
2659 static gint ett_tag_dfs_map_tree = -1;
2660 static gint ett_tag_erp_info_tree = -1;
2661 static gint ett_tag_ex_cap = -1;
2663 static gint ett_tag_supported_channels = -1;
2665 static gint ett_tag_neighbor_report_bssid_info_tree = -1;
2666 static gint ett_tag_neighbor_report_bssid_info_capability_tree = -1;
2667 static gint ett_tag_neighbor_report_sub_tag_tree = -1;
2669 static gint ett_tag_time_adv_tree = -1;
2671 static gint ett_ff_ba_param_tree = -1;
2672 static gint ett_ff_ba_ssc_tree = -1;
2673 static gint ett_ff_delba_param_tree = -1;
2674 static gint ett_ff_qos_info = -1;
2675 static gint ett_ff_sm_pwr_save = -1;
2676 static gint ett_ff_psmp_param_set = -1;
2677 static gint ett_ff_mimo_cntrl = -1;
2678 static gint ett_ff_ant_sel = -1;
2679 static gint ett_mimo_report = -1;
2680 static gint ett_ff_chan_switch_announce = -1;
2681 static gint ett_ff_ht_info = -1;
2682 static gint ett_ff_psmp_sta_info = -1;
2684 static gint ett_msdu_aggregation_parent_tree = -1;
2685 static gint ett_msdu_aggregation_subframe_tree = -1;
2687 static gint ett_80211_mgt_ie = -1;
2688 static gint ett_tsinfo_tree = -1;
2689 static gint ett_sched_tree = -1;
2691 static gint ett_fcs = -1;
2693 static gint ett_adv_proto = -1;
2694 static gint ett_adv_proto_tuple = -1;
2695 static gint ett_gas_query = -1;
2696 static gint ett_gas_anqp = -1;
2697 static gint ett_nai_realm = -1;
2698 static gint ett_nai_realm_eap = -1;
2699 static gint ett_anqp_vendor_capab = -1;
2701 static const fragment_items frag_items = {
2704 &hf_ieee80211_fragments,
2705 &hf_ieee80211_fragment,
2706 &hf_ieee80211_fragment_overlap,
2707 &hf_ieee80211_fragment_overlap_conflict,
2708 &hf_ieee80211_fragment_multiple_tails,
2709 &hf_ieee80211_fragment_too_long_fragment,
2710 &hf_ieee80211_fragment_error,
2711 &hf_ieee80211_fragment_count,
2712 &hf_ieee80211_reassembled_in,
2713 &hf_ieee80211_reassembled_length,
2717 static enum_val_t wlan_ignore_wep_options[] = {
2718 { "no", "No", WLAN_IGNORE_WEP_NO },
2719 { "without_iv", "Yes - without IV", WLAN_IGNORE_WEP_WO_IV },
2720 { "with_iv", "Yes - with IV", WLAN_IGNORE_WEP_W_IV },
2724 static dissector_handle_t ieee80211_handle;
2725 static dissector_handle_t llc_handle;
2726 static dissector_handle_t ipx_handle;
2727 static dissector_handle_t eth_withoutfcs_handle;
2728 static dissector_handle_t data_handle;
2730 static int wlan_tap = -1;
2732 static const value_string access_network_type_vals[] =
2734 { 0, "Private network" },
2735 { 1, "Private network with guest access" },
2736 { 2, "Chargeable public network" },
2737 { 3, "Free public network" },
2738 { 4, "Personal device network" },
2739 { 5, "Emergency services only network" },
2740 { 14, "Test or experimental" },
2745 static const value_string adv_proto_id_vals[] =
2747 {0, "Access Network Query Protocol"},
2748 {1, "MIH Information Service"},
2749 {2, "MIH Command and Event Services Capability Discovery"},
2750 {3, "Emergency Alert System (EAS)"},
2751 {4, "Location-to-Service Translation Protocol"},
2752 {221, "Vendor Specific"},
2756 static const value_string timeout_int_types[] =
2758 {1, "Reassociation deadline interval (TUs)"},
2759 {2, "Key lifetime interval (seconds)"},
2760 {3, "Association Comeback time (TUs)"},
2764 static const value_string tdls_action_codes[] ={
2765 {TDLS_SETUP_REQUEST, "TDLS Setup Request"},
2766 {TDLS_SETUP_RESPONSE, "TDLS Setup Response"},
2767 {TDLS_SETUP_CONFIRM, "TDLS Setup Confirm"},
2768 {TDLS_TEARDOWN, "TDLS Teardown"},
2769 {TDLS_PEER_TRAFFIC_INDICATION, "TDLS Peer Traffic Indication"},
2770 {TDLS_CHANNEL_SWITCH_REQUEST, "TDLS Channel Switch Request"},
2771 {TDLS_CHANNEL_SWITCH_RESPONSE, "TDLS Channel Switch Response"},
2772 {TDLS_PEER_PSM_REQUEST, "TDLS Peer PSM Request"},
2773 {TDLS_PEER_PSM_RESPONSE, "TDLS Peer PSM Response"},
2774 {TDLS_PEER_TRAFFIC_RESPONSE, "TDLS Peer Traffic Response"},
2775 {TDLS_DISCOVERY_REQUEST, "TDLS Discovery Request"},
2779 AIRPDCAP_CONTEXT airpdcap_ctx;
2781 #define PSMP_STA_INFO_BROADCAST 0
2782 #define PSMP_STA_INFO_MULTICAST 1
2783 #define PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED 2
2785 #define PSMP_STA_INFO_FLAG_TYPE 0x00000003
2786 #define PSMP_STA_INFO_FLAG_DTT_START 0x00001FFC
2787 #define PSMP_STA_INFO_FLAG_DTT_DURATION 0x001FE000
2789 #define PSMP_STA_INFO_FLAG_STA_ID 0x001FFFE0
2791 #define PSMP_STA_INFO_FLAG_UTT_START 0x0000FFE0
2792 #define PSMP_STA_INFO_FLAG_UTT_DURATION 0x03FF0000
2794 #define PSMP_STA_INFO_FLAG_IA_RESERVED 0xFC000000
2796 static const value_string ff_psmp_sta_info_flags[] = {
2797 { PSMP_STA_INFO_BROADCAST, "Broadcast"},
2798 { PSMP_STA_INFO_MULTICAST, "Multicast"},
2799 { PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED, "Individually Addressed"},
2804 beacon_interval_base_custom(gchar *result, guint32 beacon_interval)
2807 temp_double = (double)beacon_interval;
2808 g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (temp_double * 1024 / 1000000) );
2811 /* ************************************************************************* */
2812 /* Return the length of the current header (in bytes) */
2813 /* ************************************************************************* */
2815 find_header_length (guint16 fcf, guint16 ctrl_fcf, gboolean is_ht)
2820 switch (FCF_FRAME_TYPE (fcf)) {
2823 if (is_ht && IS_STRICTLY_ORDERED(FCF_FLAGS(fcf)))
2824 return MGT_FRAME_HDR_LEN + 4;
2826 return MGT_FRAME_HDR_LEN;
2829 if (COMPOSE_FRAME_TYPE(fcf) == CTRL_CONTROL_WRAPPER) {
2836 switch (COMPOSE_FRAME_TYPE (cw_fcf)) {
2839 case CTRL_ACKNOWLEDGEMENT:
2845 case CTRL_CFP_ENDACK:
2846 case CTRL_BLOCK_ACK_REQ:
2847 case CTRL_BLOCK_ACK:
2850 return len + 4; /* XXX */
2853 len = (FCF_ADDR_SELECTOR(fcf) ==
2854 DATA_ADDR_T4) ? DATA_LONG_HDR_LEN : DATA_SHORT_HDR_LEN;
2856 if (DATA_FRAME_IS_QOS(COMPOSE_FRAME_TYPE(fcf))) {
2858 if (is_ht && IS_STRICTLY_ORDERED(FCF_FLAGS(fcf))) {
2870 /* ************************************************************************* */
2871 /* Mesh Control field helper functions
2873 * Per IEEE 802.11s Draft 12.0 section 7.2.2.1:
2875 * The frame body consists of either:
2876 * The MSDU (or a fragment thereof), the Mesh Control field (if and only if the
2877 * frame is transmitted by a mesh STA and the Mesh Control Present subfield of
2878 * the QoS Control field is 1)...
2880 * We need a stateful sniffer for that. For now, use heuristics.
2882 * Notably, only mesh data frames contain the Mesh Control field in the header.
2883 * Other frames that contain mesh control (i.e., multihop action frames) have
2884 * it deeper in the frame body where it can be definitively identified.
2885 * Further, mesh data frames always have to-ds and from-ds either 11 or 01. We
2886 * use these facts to make our heuristics more reliable.
2887 * ************************************************************************* */
2889 has_mesh_control(guint16 fcf, guint16 qos_ctl, guint8 mesh_flags)
2891 /* assume mesh control present if the QOS field's Mesh Control Present bit is
2892 * set, all reserved bits in the mesh_flags field are zero, and the address
2893 * extension mode is not a reserved value.
2895 return ((FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T4 || FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T2) &&
2896 (QOS_MESH_CONTROL_PRESENT(qos_ctl)) &&
2897 (mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION) == 0 &&
2898 (mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION) != MESH_FLAGS_ADDRESS_EXTENSION);
2902 find_mesh_control_length(guint8 mesh_flags)
2904 return 6 + 6*(mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION);
2907 mimo_control_t get_mimo_control (tvbuff_t *tvb, int offset)
2910 mimo_control_t output;
2912 mimo = tvb_get_letohs (tvb, offset);
2914 output.nc = (mimo & 0x0003) + 1;
2915 output.nr = ((mimo & 0x000C) >> 2) + 1;
2916 output.chan_width = (mimo & 0x0010) >> 4;
2917 output.coefficient_size = 4; /* XXX - Is this a good default? */
2919 switch ((mimo & 0x0060) >> 5)
2922 output.grouping = 1;
2926 output.grouping = 2;
2930 output.grouping = 4;
2934 output.grouping = 1;
2938 switch ((mimo & 0x0180) >> 7)
2941 output.coefficient_size = 4;
2945 output.coefficient_size = 5;
2949 output.coefficient_size = 6;
2953 output.coefficient_size = 8;
2957 output.codebook_info = (mimo & 0x0600) >> 9;
2958 output.remaining_matrix_segment = (mimo & 0x3800) >> 11;
2963 int get_mimo_na (guint8 nr, guint8 nc)
2965 if (nr == 2 && nc == 1){
2967 }else if (nr == 2 && nc == 2){
2969 }else if (nr == 3 && nc == 1){
2971 }else if (nr == 3 && nc == 2){
2973 }else if (nr == 3 && nc == 3){
2975 }else if (nr == 4 && nc == 1){
2977 }else if (nr == 4 && nc == 2){
2979 }else if (nr == 4 && nc == 3){
2981 }else if (nr == 4 && nc == 4){
2988 int get_mimo_ns (gboolean chan_width, guint8 output_grouping)
2994 switch (output_grouping)
3012 switch (output_grouping)
3034 int add_mimo_csi_matrices_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
3036 proto_item *snr_item;
3037 proto_tree *snr_tree;
3038 int csi_matrix_size, start_offset;
3041 start_offset = offset;
3042 snr_item = proto_tree_add_text(tree, tvb, offset, mimo_cntrl.nc, "Signal to Noise Ratio");
3043 snr_tree = proto_item_add_subtree (snr_item, ett_mimo_report);
3045 for (i = 1; i <= mimo_cntrl.nr; i++)
3049 snr = tvb_get_guint8(tvb, offset);
3050 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1, snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
3054 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
3055 csi_matrix_size = ns*(3+(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size));
3056 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
3057 proto_tree_add_text(tree, tvb, offset, csi_matrix_size, "CSI Matrices");
3058 offset += csi_matrix_size;
3059 return offset - start_offset;
3062 int add_mimo_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
3064 proto_item *snr_item;
3065 proto_tree *snr_tree;
3066 int csi_matrix_size, start_offset;
3069 start_offset = offset;
3070 snr_item = proto_tree_add_text(tree, tvb, offset, mimo_cntrl.nc, "Signal to Noise Ratio");
3071 snr_tree = proto_item_add_subtree (snr_item, ett_mimo_report);
3073 for (i = 1; i <= mimo_cntrl.nc; i++)
3077 snr = tvb_get_guint8(tvb, offset);
3078 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1, snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
3082 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
3083 csi_matrix_size = ns*(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size);
3084 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
3085 proto_tree_add_text(tree, tvb, offset, csi_matrix_size, "Beamforming Feedback Matrices");
3086 offset += csi_matrix_size;
3087 return offset - start_offset;
3090 int add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
3092 proto_item *snr_item;
3093 proto_tree *snr_tree;
3094 int csi_matrix_size, start_offset;
3097 start_offset = offset;
3098 snr_item = proto_tree_add_text(tree, tvb, offset, mimo_cntrl.nc, "Signal to Noise Ratio");
3099 snr_tree = proto_item_add_subtree (snr_item, ett_mimo_report);
3101 for (i = 1; i <= mimo_cntrl.nc; i++)
3105 snr = tvb_get_guint8(tvb, offset);
3106 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1, snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
3110 na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
3111 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
3112 csi_matrix_size = ns*(na*((mimo_cntrl.codebook_info+1)*2 + 2)/2);
3113 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
3114 proto_tree_add_text(tree, tvb, offset, csi_matrix_size, "Compressed Beamforming Feedback Matrices");
3115 offset += csi_matrix_size;
3116 return offset - start_offset;
3119 /* ************************************************************************* */
3120 /* This is the capture function used to update packet counts */
3121 /* ************************************************************************* */
3123 capture_ieee80211_common (const guchar * pd, int offset, int len,
3124 packet_counts * ld, gboolean fixed_length_header,
3125 gboolean datapad, gboolean is_ht)
3127 guint16 fcf, hdr_length;
3129 if (!BYTES_ARE_IN_FRAME(offset, len, 2)) {
3134 fcf = pletohs (&pd[offset]);
3136 if (IS_PROTECTED(FCF_FLAGS(fcf)) && wlan_ignore_wep == WLAN_IGNORE_WEP_NO) {
3141 switch (COMPOSE_FRAME_TYPE (fcf)) {
3143 case DATA: /* We got a data frame */
3144 case DATA_CF_ACK: /* Data with ACK */
3146 case DATA_CF_ACK_POLL:
3149 if (fixed_length_header) {
3150 hdr_length = DATA_LONG_HDR_LEN;
3152 hdr_length = find_header_length (fcf, 0, is_ht);
3153 /* adjust the header length depending on the Mesh Control field */
3154 if (FCF_FRAME_TYPE(fcf) == DATA_FRAME &&
3155 DATA_FRAME_IS_QOS(COMPOSE_FRAME_TYPE(fcf))) {
3157 guint8 mesh_flags = pd[hdr_length];
3158 guint16 qosoff = hdr_length - 2;
3159 qosoff -= is_ht ? 4 : 0;
3160 if (has_mesh_control(fcf, pletohs(&pd[qosoff]), mesh_flags)) {
3161 hdr_length += find_mesh_control_length(mesh_flags);
3165 hdr_length = roundup2(hdr_length, 4);
3167 /* I guess some bridges take Netware Ethernet_802_3 frames,
3168 which are 802.3 frames (with a length field rather than
3169 a type field, but with no 802.2 header in the payload),
3170 and just stick the payload into an 802.11 frame. I've seen
3171 captures that show frames of that sort.
3173 We also handle some odd form of encapsulation in which a
3174 complete Ethernet frame is encapsulated within an 802.11
3175 data frame, with no 802.2 header. This has been seen
3178 On top of that, at least at some point it appeared that
3179 the OLPC XO sent out frames with two bytes of 0 between
3180 the "end" of the 802.11 header and the beginning of
3183 So, if the packet doesn't start with 0xaa 0xaa:
3185 we first use the same scheme that linux-wlan-ng does to detect
3186 those encapsulated Ethernet frames, namely looking to see whether
3187 the frame either starts with 6 octets that match the destination
3188 address from the 802.11 header or has 6 octets that match the
3189 source address from the 802.11 header following the first 6 octets,
3190 and, if so, treat it as an encapsulated Ethernet frame;
3192 otherwise, we use the same scheme that we use in the Ethernet
3193 dissector to recognize Netware 802.3 frames, namely checking
3194 whether the packet starts with 0xff 0xff and, if so, treat it
3195 as an encapsulated IPX frame, and then check whether the
3196 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
3198 if (!BYTES_ARE_IN_FRAME(offset+hdr_length, len, 2)) {
3202 if (pd[offset+hdr_length] != 0xaa && pd[offset+hdr_length+1] != 0xaa) {
3204 /* XXX - this requires us to parse the header to find the source
3205 and destination addresses. */
3206 if (BYTES_ARE_IN_FRAME(offset+hdr_length, len, 12) {
3207 /* We have two MAC addresses after the header. */
3208 if (memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0 ||
3209 memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0) {
3210 capture_eth (pd, offset + hdr_length, len, ld);
3215 if (pd[offset+hdr_length] == 0xff && pd[offset+hdr_length+1] == 0xff)
3217 else if (pd[offset+hdr_length] == 0x00 && pd[offset+hdr_length+1] == 0x00)
3218 capture_llc (pd, offset + hdr_length + 2, len, ld);
3221 capture_llc (pd, offset + hdr_length, len, ld);
3233 * Handle 802.11 with a variable-length link-layer header.
3236 capture_ieee80211 (const guchar * pd, int offset, int len, packet_counts * ld)
3238 capture_ieee80211_common (pd, offset, len, ld, FALSE, FALSE, FALSE);
3242 * Handle 802.11 with a variable-length link-layer header and data padding.
3245 capture_ieee80211_datapad (const guchar * pd, int offset, int len,
3248 capture_ieee80211_common (pd, offset, len, ld, FALSE, TRUE, FALSE);
3252 * Handle 802.11 with a fixed-length link-layer header (padded to the
3256 capture_ieee80211_fixed (const guchar * pd, int offset, int len, packet_counts * ld)
3258 capture_ieee80211_common (pd, offset, len, ld, TRUE, FALSE, FALSE);
3262 * Handle an HT 802.11 with a variable-length link-layer header.
3265 capture_ieee80211_ht (const guchar * pd, int offset, int len, packet_counts * ld)
3267 capture_ieee80211_common (pd, offset, len, ld, FALSE, FALSE, TRUE);
3271 /* ************************************************************************* */
3272 /* Add the subtree used to store the fixed parameters */
3273 /* ************************************************************************* */
3275 get_fixed_parameter_tree (proto_tree * tree, tvbuff_t *tvb, int start, int size)
3277 proto_item *fixed_fields;
3279 proto_tree_add_uint_format (tree, hf_ieee80211_fixed_parameters, tvb, start,
3280 size, size, "Fixed parameters (%d bytes)",
3283 return proto_item_add_subtree (fixed_fields, ett_fixed_parameters);
3287 /* ************************************************************************* */
3288 /* Add the subtree used to store tagged parameters */
3289 /* ************************************************************************* */
3291 get_tagged_parameter_tree (proto_tree * tree, tvbuff_t *tvb, int start, int size)
3293 proto_item *tagged_fields;
3295 tagged_fields = proto_tree_add_uint_format (tree, hf_ieee80211_tagged_parameters,
3300 "Tagged parameters (%d bytes)",
3302 proto_item_set_len(tagged_fields, size);
3304 return proto_item_add_subtree (tagged_fields, ett_tagged_parameters);
3309 dissect_vendor_action_marvell(proto_tree *tree, tvbuff_t *tvb, int offset)
3313 octet = tvb_get_guint8(tvb, offset);
3314 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_action_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3318 case MRVL_ACTION_MESH_MANAGEMENT:
3319 octet = tvb_get_guint8(tvb, offset);
3320 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3324 case MRVL_MESH_MGMT_ACTION_RREQ:
3325 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3327 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3329 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3331 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3333 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_rreqid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3335 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA);
3337 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3339 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3341 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3343 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3345 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3347 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
3349 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3352 case MRVL_MESH_MGMT_ACTION_RREP:
3353 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3355 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3357 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3359 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3361 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
3363 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3365 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3367 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3369 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA);
3371 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3374 case MRVL_MESH_MGMT_ACTION_RERR:
3375 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3377 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3379 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3381 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
3383 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3398 dissect_advertisement_protocol(packet_info *pinfo, proto_tree *tree,
3399 tvbuff_t *tvb, int offset, gboolean *anqp)
3401 guint8 tag_no, tag_len, left;
3402 proto_item *item = NULL, *adv_item;
3403 proto_tree *adv_tree, *adv_tuple_tree;
3407 tag_no = tvb_get_guint8(tvb, offset);
3409 item = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3411 tag_len = tvb_get_guint8(tvb, offset + 1);
3412 if (tag_no != TAG_ADVERTISEMENT_PROTOCOL) {
3413 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
3414 "Unexpected IE %d (expected Advertisement "
3415 "Protocol)", tag_no);
3419 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
3422 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
3423 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
3424 "Advertisement Protocol: IE must be at least 2 "
3431 adv_item = proto_tree_add_text(tree, tvb, offset, left,
3432 "Advertisement Protocol element");
3433 adv_tree = proto_item_add_subtree(adv_item, ett_adv_proto);
3438 id = tvb_get_guint8(tvb, offset + 1);
3440 proto_item_append_text(adv_item, ": ANQP");
3441 item = proto_tree_add_text(adv_tree, tvb, offset, 2,
3442 "Advertisement Protocol Tuple: %s",
3443 val_to_str(id, adv_proto_id_vals,
3445 adv_tuple_tree = proto_item_add_subtree(item, ett_adv_proto_tuple);
3447 proto_tree_add_item(adv_tuple_tree,
3448 hf_ieee80211_tag_adv_proto_resp_len_limit, tvb,
3449 offset, 1, ENC_BIG_ENDIAN);
3450 proto_tree_add_item(adv_tuple_tree,
3451 hf_ieee80211_tag_adv_proto_pame_bi, tvb,
3452 offset, 1, ENC_BIG_ENDIAN);
3455 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_id, tvb,
3456 offset, 1, ENC_BIG_ENDIAN);
3460 if (id == 0 && anqp)
3464 /* Vendor specific */
3465 guint8 len = tvb_get_guint8(tvb, offset);
3469 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
3470 "Vendor specific info length error");
3473 proto_tree_add_text(adv_tuple_tree, tvb, offset, len,
3474 "Vendor Specific Advertisement Protocol info");
3481 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
3482 "Unexpected extra data in the end");
3489 dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
3491 while (offset + 2 <= end) {
3492 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
3493 tvb, offset, 2, ENC_LITTLE_ENDIAN);
3496 if (offset != end) {
3497 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
3498 "Unexpected ANQP Query list format");
3503 dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
3510 while (offset + 2 <= end) {
3511 id = tvb_get_letohs(tvb, offset);
3512 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_capability,
3513 tvb, offset, 2, ENC_LITTLE_ENDIAN);
3515 if (id == ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST) {
3516 vtree = proto_item_add_subtree(item, ett_anqp_vendor_capab);
3517 len = tvb_get_letohs(tvb, offset);
3518 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vlen,
3519 tvb, offset, 2, ENC_LITTLE_ENDIAN);
3521 if (len < 3 || offset + len > end) {
3522 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
3523 "Invalid vendor-specific ANQP capability");
3526 oui = tvb_get_ntoh24(tvb, offset);
3527 proto_tree_add_item(vtree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
3533 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
3534 tvb, offset, len, ENC_NA);
3541 if (offset != end) {
3542 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
3543 "Unexpected ANQP Capability list format");
3547 static const value_string venue_group_vals[] = {
3548 { 0, "Unspecified" },
3551 { 3, "Educational" },
3552 { 4, "Factory and Industrial" },
3553 { 5, "Institutional" },
3554 { 6, "Mercantile" },
3555 { 7, "Residential" },
3557 { 9, "Utility and Miscellaneous" },
3558 { 10, "Vehicular" },
3563 static void dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
3565 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_group,
3566 tvb, offset, 1, ENC_BIG_ENDIAN);
3567 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_type,
3568 tvb, offset + 1, 1, ENC_BIG_ENDIAN);
3572 dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
3576 dissect_venue_info(tree, tvb, offset);
3578 while (offset + 4 <= end) {
3579 guint8 vlen = tvb_get_guint8(tvb, offset);
3580 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_length,
3581 tvb, offset, 1, ENC_BIG_ENDIAN);
3583 if (vlen > end - offset || vlen < 3) {
3584 expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
3585 "Invalid Venue Name Duple length");
3588 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_language,
3589 tvb, offset, 3, ENC_ASCII|ENC_NA);
3590 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_name,
3591 tvb, offset + 3, vlen - 3, ENC_ASCII|ENC_NA);
3596 static const value_string nw_auth_type_vals[] = {
3597 { 0, "Acceptance of terms and conditions" },
3598 { 1, "On-line enrollment supported" },
3599 { 2, "http/https redirection" },
3600 { 3, "DNS redirection" },
3605 dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
3607 while (offset + 3 <= end) {
3609 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_indicator,
3610 tvb, offset, 1, ENC_BIG_ENDIAN);
3612 len = tvb_get_letohs(tvb, offset);
3613 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url_len,
3614 tvb, offset, 2, ENC_LITTLE_ENDIAN);
3617 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url,
3618 tvb, offset, len, ENC_ASCII|ENC_NA);
3623 static void add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
3625 const gchar *manuf_name;
3626 manuf_name = tvb_get_manuf_name_if_known(tvb, offset);
3627 if (manuf_name == NULL)
3629 proto_item_append_text(item, " - %s", manuf_name);
3633 dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, int offset,
3639 while (offset < end) {
3640 len = tvb_get_guint8(tvb, offset);
3641 item = proto_tree_add_item(tree,
3642 hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
3643 tvb, offset, 1, ENC_BIG_ENDIAN);
3645 if (len > end - offset || len < 3) {
3646 expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
3647 "Invalid Roaming Consortium OI");
3650 item = proto_tree_add_item(tree,
3651 hf_ieee80211_ff_anqp_roaming_consortium_oi,
3652 tvb, offset, len, ENC_NA);
3653 add_manuf(item, tvb, offset);
3658 static const value_string ip_addr_avail_ipv6_vals[] = {
3659 { 0, "Address type not available" },
3660 { 1, "Address type available" },
3661 { 2, "Availability of the address type not known" },
3665 static const value_string ip_addr_avail_ipv4_vals[] = {
3666 { 0, "Address type not available" },
3667 { 1, "Public IPv4 address available" },
3668 { 2, "Port-restricted IPv4 address available" },
3669 { 3, "Single NATed private IPv4 address available" },
3670 { 4, "Double NATed private IPv4 address available" },
3671 { 5, "Port-restricted IPv4 address and single NATed IPv4 address available" },
3672 { 6, "Port-restricted IPv4 address and double NATed IPv4 address available" },
3673 { 7, "Availability of the address type is not known" },
3678 dissect_ip_addr_type_availability_info(proto_tree *tree, tvbuff_t *tvb,
3681 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
3682 tvb, offset, 1, ENC_BIG_ENDIAN);
3683 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
3684 tvb, offset, 1, ENC_BIG_ENDIAN);
3687 static const value_string nai_realm_encoding_vals[] = {
3688 { 0, "Formatted in accordance with RFC 4282" },
3689 { 1, "UTF-8 formatted that is not formatted in accordance with RFC 4282" },
3693 static const value_string nai_realm_auth_param_id_vals[] = {
3694 { 1, "Expanded EAP Method" },
3695 { 2, "Non-EAP Inner Authentication Type" },
3696 { 3, "Inner Authentication EAP Method Type" },
3697 { 4, "Expanded Inner EAP Method" },
3698 { 5, "Credential Type" },
3699 { 6, "Tunneled EAP Method Credential Type" },
3700 { 221, "Vendor Specific" },
3705 dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
3708 proto_item *item, *r_item;
3710 guint8 nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
3711 guint8 auth_param_id;
3712 proto_tree *realm_tree, *eap_tree;
3715 count = tvb_get_letohs(tvb, offset);
3716 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nai_realm_count,
3717 tvb, offset, 2, ENC_LITTLE_ENDIAN);
3720 len = tvb_get_letohs(tvb, offset);
3721 r_item = proto_tree_add_text(tree, tvb, offset, 2 + len, "NAI Realm Data");
3722 realm_tree = proto_item_add_subtree(r_item, ett_nai_realm);
3724 item = proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_field_len,
3725 tvb, offset, 2, ENC_LITTLE_ENDIAN);
3727 if (offset + len > end) {
3728 expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
3729 "Invalid NAI Realm List");
3732 f_end = offset + len;
3733 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_encoding,
3734 tvb, offset, 1, ENC_LITTLE_ENDIAN);
3736 nai_len = tvb_get_guint8(tvb, offset);
3737 item = proto_tree_add_item(realm_tree,
3738 hf_ieee80211_ff_anqp_nai_realm_length,
3739 tvb, offset, 1, ENC_LITTLE_ENDIAN);
3741 if (offset + nai_len > f_end) {
3742 expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
3743 "Invalid NAI Realm Data");
3746 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm,
3747 tvb, offset, nai_len, ENC_ASCII|ENC_NA);
3748 realm = tvb_get_ephemeral_string(tvb, offset, nai_len);
3750 proto_item_append_text(r_item, " (%s)", realm);
3753 eap_count = tvb_get_guint8(tvb, offset);
3754 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_eap_count,
3755 tvb, offset, 1, ENC_LITTLE_ENDIAN);
3758 while (eap_count > 0) {
3759 eap_len = tvb_get_guint8(tvb, offset);
3760 eap_end = offset + 1 + eap_len;
3761 item = proto_tree_add_text(realm_tree, tvb, offset, 1 + eap_len,
3763 eap_tree = proto_item_add_subtree(item, ett_nai_realm_eap);
3765 item = proto_tree_add_item(eap_tree,
3766 hf_ieee80211_ff_anqp_nai_realm_eap_len,
3767 tvb, offset, 1, ENC_LITTLE_ENDIAN);
3769 if (offset + eap_len > f_end) {
3770 expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
3771 "Invalid EAP Method subfield");
3775 proto_item_append_text(eap_tree, ": %s",
3776 val_to_str(tvb_get_guint8(tvb, offset),
3777 eap_type_vals, "Unknown (%d)"));
3778 proto_tree_add_item(eap_tree, hf_ieee80211_ff_anqp_nai_realm_eap_method,
3779 tvb, offset, 1, ENC_LITTLE_ENDIAN);
3781 auth_param_count = tvb_get_guint8(tvb, offset);
3782 proto_tree_add_item(eap_tree,
3783 hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
3784 tvb, offset, 1, ENC_LITTLE_ENDIAN);
3787 while (auth_param_count > 0) {
3788 auth_param_id = tvb_get_guint8(tvb, offset);
3789 proto_tree_add_item(eap_tree,
3790 hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
3791 tvb, offset, 1, ENC_LITTLE_ENDIAN);
3793 auth_param_len = tvb_get_guint8(tvb, offset);
3794 proto_tree_add_item(eap_tree,
3795 hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
3796 tvb, offset, 1, ENC_LITTLE_ENDIAN);
3798 item = proto_tree_add_item(
3799 eap_tree, hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
3800 tvb, offset, auth_param_len, ENC_NA);
3801 if (auth_param_id == 3 && auth_param_len == 1) {
3802 guint8 inner_method = tvb_get_guint8(tvb, offset);
3804 str = val_to_str(inner_method, eap_type_vals, "Unknown (%d)");
3806 proto_item_append_text(eap_tree, " / %s", str);
3807 proto_item_append_text(item, " - %s", str);
3809 offset += auth_param_len;
3824 dissect_3gpp_cellular_network_info(proto_tree *tree, tvbuff_t *tvb, int offset)
3829 /* See Annex A of 3GPP TS 24.234 v8.1.0 for description */
3830 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_gud, tvb, offset, 1, ENC_BIG_ENDIAN);
3832 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_udhl, tvb, offset, 1, ENC_BIG_ENDIAN);
3834 iei = tvb_get_guint8(tvb, offset);
3835 item = proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_iei, tvb, offset, 1, ENC_BIG_ENDIAN);
3837 proto_item_append_text(item, " (PLMN List)");
3841 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_plmn_len, tvb, offset, 1, ENC_BIG_ENDIAN);
3843 num = tvb_get_guint8(tvb, offset);
3844 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_num_plmns, tvb, offset, 1, ENC_BIG_ENDIAN);
3848 if (tvb_reported_length_remaining(tvb, offset) < 3)
3851 o1 = tvb_get_guint8(tvb, offset);
3852 o2 = tvb_get_guint8(tvb, offset + 1);
3853 o3 = tvb_get_guint8(tvb, offset + 2);
3854 proto_tree_add_string_format_value(tree, hf_ieee80211_3gpp_gc_plmn, tvb, offset, 3,
3855 "", "MCC %d%d%d MNC %d%d%c",
3856 o1 & 0x0f, (o1 & 0xf0) >> 4, o2 & 0x0f,
3857 o3 & 0x0f, (o3 & 0xf0) >> 4,
3858 ((o2 & 0xf0) == 0xf0) ? ' ' :
3859 ('0' + ((o2 & 0xf0) >> 4)));
3865 dissect_domain_name_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
3869 while (offset < end) {
3870 len = tvb_get_guint8(tvb, offset);
3871 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name_len,
3872 tvb, offset, 1, ENC_BIG_ENDIAN);
3874 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name,
3875 tvb, offset, len, ENC_ASCII|ENC_NA);
3881 dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, int offset,
3882 gboolean request, int idx)
3889 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_id,
3890 tvb, offset, 2, ENC_LITTLE_ENDIAN);
3891 id = tvb_get_letohs(tvb, offset);
3892 if (id != ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST) {
3894 proto_item_append_text(tree, " - %s",
3895 val_to_str(id, anqp_info_id_vals,
3897 col_append_fstr(g_pinfo->cinfo, COL_INFO, " %s",
3898 val_to_str(id, anqp_info_id_vals, "Unknown (%u)"));
3899 } else if (idx == 1) {
3900 proto_item_append_text(tree, ", ..");
3901 col_append_fstr(g_pinfo->cinfo, COL_INFO, ", ..");
3904 tree = proto_item_add_subtree(item, ett_gas_anqp);
3906 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_length,
3907 tvb, offset, 2, ENC_LITTLE_ENDIAN);
3908 len = tvb_get_letohs(tvb, offset);
3910 if (tvb_reported_length_remaining(tvb, offset) < len) {
3911 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
3912 "Invalid ANQP Info length");
3917 case ANQP_INFO_ANQP_QUERY_LIST:
3918 dissect_anqp_query_list(tree, tvb, offset, offset + len);
3920 case ANQP_INFO_ANQP_CAPAB_LIST:
3921 dissect_anqp_capab_list(tree, tvb, offset, offset + len);
3923 case ANQP_INFO_VENUE_NAME_INFO:
3924 dissect_venue_name_info(tree, tvb, offset, offset + len);
3926 case ANQP_INFO_NETWORK_AUTH_TYPE_INFO:
3927 dissect_network_auth_type(tree, tvb, offset, offset + len);
3929 case ANQP_INFO_ROAMING_CONSORTIUM_LIST:
3930 dissect_roaming_consortium_list(tree, tvb, offset, offset + len);
3932 case ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO:
3933 dissect_ip_addr_type_availability_info(tree, tvb, offset);
3935 case ANQP_INFO_NAI_REALM_LIST:
3936 dissect_nai_realm_list(tree, tvb, offset, offset + len);
3938 case ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO:
3939 dissect_3gpp_cellular_network_info(tree, tvb, offset);
3941 case ANQP_INFO_DOMAIN_NAME_LIST:
3942 dissect_domain_name_list(tree, tvb, offset, offset + len);
3944 case ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST:
3945 oui = tvb_get_ntoh24(tvb, offset);
3946 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
3951 subtype = tvb_get_guint8(tvb, offset);
3952 if (subtype == WFA_SUBTYPE_P2P) {
3953 proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u: P2P ANQP",
3955 dissect_wifi_p2p_anqp(g_pinfo, tree, tvb, offset + 1, request);
3957 proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u", subtype);
3961 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
3962 tvb, offset, len, ENC_NA);
3967 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
3968 tvb, offset, len, ENC_NA);
3976 dissect_anqp(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean request)
3980 proto_item_append_text(tree, ": ANQP ");
3981 proto_item_append_text(tree, request ? "Request" : "Response");
3982 if (tvb_reported_length_remaining(tvb, offset) < 4) {
3983 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
3984 "Not enough room for ANQP header");
3987 col_append_fstr(g_pinfo->cinfo, COL_INFO, ", ANQP %s",
3988 request ? "Req" : "Resp");
3989 while (tvb_reported_length_remaining(tvb, offset) > 0) {
3990 offset += dissect_anqp_info(tree, tvb, offset, request, idx);
3996 dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, int offset,
4004 /* Query Request Length (2 octets) */
4005 req_len = tvb_get_letohs(tvb, offset);
4007 item = proto_tree_add_text(tree, tvb, offset, 2 + req_len, "Query Request");
4008 if (tvb_reported_length_remaining(tvb, offset) < 2 + req_len) {
4009 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
4010 "Invalid Query Request Length");
4011 return tvb_reported_length_remaining(tvb, offset);
4013 query = proto_item_add_subtree(item, ett_gas_query);
4015 proto_tree_add_item(query, hf_ieee80211_ff_query_request_length,
4016 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4019 * Query Request (GAS query; formatted per protocol specified in the
4020 * Advertisement Protocol IE)
4023 dissect_anqp(query, tvb, offset, TRUE);
4025 proto_tree_add_item(query, hf_ieee80211_ff_query_request,
4026 tvb, offset, req_len, ENC_NA);
4029 return offset - start;
4033 dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, int offset,
4041 /* Query Response Length (2 octets) */
4042 resp_len = tvb_get_letohs(tvb, offset);
4044 item = proto_tree_add_text(tree, tvb, offset, 2 + resp_len,
4046 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
4047 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
4048 "Invalid Query Response Length");
4049 return tvb_reported_length_remaining(tvb, offset);
4051 query = proto_item_add_subtree(item, ett_gas_query);
4053 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
4054 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4056 /* Query Response (optional) */
4059 dissect_anqp(query, tvb, offset, FALSE);
4061 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
4062 tvb, offset, resp_len, ENC_NA);
4066 return offset - start;
4069 static GHashTable *gas_fragment_table = NULL;
4070 static GHashTable *gas_reassembled_table = NULL;
4072 static void ieee80211_gas_reassembly_init(void)
4074 fragment_table_init(&gas_fragment_table);
4075 reassembled_table_init(&gas_reassembled_table);
4078 static gint ett_gas_resp_fragment = -1;
4079 static gint ett_gas_resp_fragments = -1;
4081 static int hf_ieee80211_gas_resp_fragments = -1;
4082 static int hf_ieee80211_gas_resp_fragment = -1;
4083 static int hf_ieee80211_gas_resp_fragment_overlap = -1;
4084 static int hf_ieee80211_gas_resp_fragment_overlap_conflict = -1;
4085 static int hf_ieee80211_gas_resp_fragment_multiple_tails = -1;
4086 static int hf_ieee80211_gas_resp_fragment_too_long_fragment = -1;
4087 static int hf_ieee80211_gas_resp_fragment_error = -1;
4088 static int hf_ieee80211_gas_resp_fragment_count = -1;
4089 static int hf_ieee80211_gas_resp_reassembled_in = -1;
4090 static int hf_ieee80211_gas_resp_reassembled_length = -1;
4092 static const fragment_items gas_resp_frag_items = {
4093 &ett_gas_resp_fragment,
4094 &ett_gas_resp_fragments,
4095 &hf_ieee80211_gas_resp_fragments,
4096 &hf_ieee80211_gas_resp_fragment,
4097 &hf_ieee80211_gas_resp_fragment_overlap,
4098 &hf_ieee80211_gas_resp_fragment_overlap_conflict,
4099 &hf_ieee80211_gas_resp_fragment_multiple_tails,
4100 &hf_ieee80211_gas_resp_fragment_too_long_fragment,
4101 &hf_ieee80211_gas_resp_fragment_error,
4102 &hf_ieee80211_gas_resp_fragment_count,
4103 &hf_ieee80211_gas_resp_reassembled_in,
4104 &hf_ieee80211_gas_resp_reassembled_length,
4105 "GAS Response fragments"
4109 dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, int offset,
4110 gboolean anqp, guint8 frag, gboolean more,
4111 guint8 dialog_token)
4118 /* Query Response Length (2 octets) */
4119 resp_len = tvb_get_letohs(tvb, offset);
4121 item = proto_tree_add_text(tree, tvb, offset, 2 + resp_len,
4123 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
4124 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
4125 "Invalid Query Response Length");
4126 return tvb_reported_length_remaining(tvb, offset);
4128 query = proto_item_add_subtree(item, ett_gas_query);
4130 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
4131 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4133 /* Query Response (optional) */
4135 if (anqp && frag == 0 && !more)
4136 dissect_anqp(query, tvb, offset, FALSE);
4138 fragment_data *frag_msg;
4139 gboolean save_fragmented;
4142 save_fragmented = g_pinfo->fragmented;
4143 g_pinfo->fragmented = TRUE;
4144 frag_msg = fragment_add_seq_check(tvb, offset, g_pinfo, dialog_token,
4146 gas_reassembled_table, frag, resp_len,
4148 new_tvb = process_reassembled_data(tvb, offset, g_pinfo,
4149 "Reassembled GAS Query Response",
4150 frag_msg, &gas_resp_frag_items,
4154 dissect_anqp(query, new_tvb, 0, FALSE);
4156 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
4158 tvb_reported_length_remaining(new_tvb, 0),
4162 /* The old tvb cannot be used anymore */
4163 ieee80211_tvb_invalid = TRUE;
4165 g_pinfo->fragmented = save_fragmented;
4170 return offset - start;
4173 /* ************************************************************************* */
4174 /* Dissect and add fixed mgmt fields to protocol tree */
4175 /* ************************************************************************* */
4178 add_fixed_field(proto_tree *tree, tvbuff_t *tvb, int offset,
4179 enum fixed_field lfcode);
4181 static guint64 last_timestamp;
4184 add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, int offset)
4186 last_timestamp = tvb_get_letoh64(tvb, offset);
4187 proto_tree_add_item(tree, hf_ieee80211_ff_timestamp, tvb, offset, 8,
4193 add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, int offset)
4195 proto_tree_add_item(tree, hf_ieee80211_ff_beacon_interval, tvb, offset, 2,
4197 col_append_fstr(g_pinfo->cinfo, COL_INFO, ", BI=%d",
4198 tvb_get_letohs(tvb, offset));
4203 add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, int offset)
4205 proto_item *cap_item;
4206 proto_tree *cap_tree;
4208 cap_item = proto_tree_add_item(tree, hf_ieee80211_ff_capture, tvb, offset, 2,
4210 cap_tree = proto_item_add_subtree(cap_item, ett_cap_tree);
4212 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ess, tvb, offset, 2,
4214 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ibss, tvb, offset, 2,
4216 if ((tvb_get_letohs(tvb, offset) & 0x0001) != 0) {
4218 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ap_poll, tvb, offset, 2,
4222 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_sta_poll, tvb, offset, 2,
4226 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_privacy, tvb, offset, 2,
4228 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_preamble, tvb, offset, 2,
4230 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_pbcc, tvb, offset, 2,
4232 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_agility, tvb, offset, 2,
4234 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_spec_man, tvb, offset, 2,
4236 proto_tree_add_item(cap_tree, hf_ieee80211_ff_short_slot_time, tvb, offset,
4237 2, ENC_LITTLE_ENDIAN);
4238 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_apsd, tvb, offset, 2,
4240 proto_tree_add_item(cap_tree, hf_ieee80211_ff_dsss_ofdm, tvb, offset, 2,
4242 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_del_blk_ack, tvb, offset, 2,
4244 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_imm_blk_ack, tvb, offset, 2,
4250 add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, int offset)
4252 proto_tree_add_item(tree, hf_ieee80211_ff_auth_alg, tvb, offset, 2,
4258 add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, int offset)
4260 proto_tree_add_item(tree, hf_ieee80211_ff_auth_seq, tvb, offset, 2,
4266 add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
4268 proto_tree_add_item(tree, hf_ieee80211_ff_current_ap, tvb, offset, 6,
4274 add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, int offset)
4276 proto_tree_add_item(tree, hf_ieee80211_ff_listen_ival, tvb, offset, 2,
4282 add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4284 proto_tree_add_item(tree, hf_ieee80211_ff_reason, tvb, offset, 2,
4290 add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, int offset)
4292 proto_tree_add_item(tree, hf_ieee80211_ff_assoc_id, tvb, offset, 2,
4298 add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4300 proto_tree_add_item(tree, hf_ieee80211_ff_status_code, tvb, offset, 2,
4306 add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4308 proto_tree_add_item(tree, hf_ieee80211_ff_category_code, tvb, offset, 1,
4314 add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4316 proto_tree_add_item(tree, hf_ieee80211_ff_action_code, tvb, offset, 1,
4322 add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, int offset)
4324 proto_tree_add_item(tree, hf_ieee80211_ff_dialog_token, tvb, offset, 1,
4330 add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4332 proto_tree_add_item(tree, hf_ieee80211_ff_wme_action_code, tvb, offset, 1,
4338 add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4340 proto_tree_add_item(tree, hf_ieee80211_ff_wme_status_code, tvb, offset, 1,
4346 add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4348 proto_tree_add_item(tree, hf_ieee80211_ff_qos_action_code, tvb, offset, 1,
4354 add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4356 proto_tree_add_item(tree, hf_ieee80211_ff_ba_action, tvb, offset, 1,
4362 add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, int offset)
4364 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_params,
4365 ett_ff_ba_param_tree,
4366 ieee80211_ff_block_ack_params_fields,
4372 add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, int offset)
4374 proto_tree_add_item(tree, hf_ieee80211_ff_block_ack_timeout, tvb, offset, 2,
4380 add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, int offset)
4382 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_ssc,
4383 ett_ff_ba_ssc_tree, ieee80211_ff_block_ack_ssc_fields,
4389 add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, int offset)
4391 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_tsinfo,
4392 ett_tsinfo_tree, ieee80211_tsinfo_fields,
4398 add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, int offset)
4400 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_action, tvb, offset, 1,
4406 add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, int offset)
4408 proto_tree_add_item(tree, hf_ieee80211_ff_multihop_action, tvb, offset, 1,
4414 add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, int offset)
4419 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_flags, tvb, offset, 1,
4421 flags = tvb_get_guint8(tvb, offset);
4423 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_ttl, tvb, offset, 1,
4426 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_sequence, tvb, offset, 4,
4430 switch (flags & 0x03) {
4432 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr4, tvb, offset, 6,
4437 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr5, tvb, offset, 6,
4440 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr6, tvb, offset, 6,
4445 proto_item_append_text(tree, "Unknown Address Extension Mode");
4448 /* no default action */
4452 return offset - start;
4456 add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, int offset)
4458 proto_tree_add_item(tree, hf_ieee80211_ff_selfprot_action, tvb, offset, 1,
4464 add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4466 proto_tree_add_item(tree, hf_ieee80211_ff_dls_action_code, tvb, offset, 1,
4472 add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
4474 proto_tree_add_item(tree, hf_ieee80211_ff_dst_mac_addr, tvb, offset, 6,
4480 add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
4482 proto_tree_add_item(tree, hf_ieee80211_ff_src_mac_addr, tvb, offset, 6,
4488 add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, int offset)
4490 proto_tree_add_item(tree, hf_ieee80211_ff_dls_timeout, tvb, offset, 2,
4496 add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, int offset)
4498 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_delba_param,
4499 ett_ff_ba_param_tree, ieee80211_ff_delba_param_fields,
4505 add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, int offset)
4507 proto_tree_add_item(tree, hf_ieee80211_ff_max_reg_pwr, tvb, offset, 2,
4513 add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, int offset)
4515 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
4516 2, ENC_LITTLE_ENDIAN);
4521 add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, int offset)
4523 proto_tree_add_item(tree, hf_ieee80211_ff_country_str, tvb, offset, 3,
4529 add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, int offset)
4531 proto_tree_add_item(tree, hf_ieee80211_ff_max_tx_pwr, tvb, offset, 1,
4537 add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, int offset)
4539 proto_tree_add_item(tree, hf_ieee80211_ff_tx_pwr_used, tvb, offset, 1,
4545 add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, int offset)
4547 proto_tree_add_item(tree, hf_ieee80211_ff_transceiver_noise_floor, tvb,
4548 offset, 1, ENC_LITTLE_ENDIAN);
4553 add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, int offset)
4555 proto_tree_add_item(tree, hf_ieee80211_ff_channel_width, tvb, offset, 1,
4561 add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, int offset)
4563 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
4564 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
4570 add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, int offset)
4572 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_qos_info_sta,
4573 ett_ff_qos_info, ieee80211_ff_qos_info_sta_fields,
4579 add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
4581 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_sm_pwr_save,
4582 ett_ff_sm_pwr_save, ieee80211_ff_sw_pwr_save_fields,
4588 add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
4590 proto_tree_add_item(tree, hf_ieee80211_ff_pco_phase_cntrl, tvb, offset, 1,
4596 add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, int offset)
4598 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_psmp_param_set,
4599 ett_ff_psmp_param_set,
4600 ieee80211_ff_psmp_param_set_fields,
4606 add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
4608 proto_item *mimo_item;
4609 proto_tree *mimo_tree;
4611 mimo_item = proto_tree_add_item(tree, hf_ieee80211_ff_mimo_cntrl, tvb,
4613 mimo_tree = proto_item_add_subtree(mimo_item, ett_ff_mimo_cntrl);
4615 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_nc_index, tvb,
4616 offset, 1, ENC_LITTLE_ENDIAN);
4617 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_nr_index, tvb,
4618 offset, 1, ENC_LITTLE_ENDIAN);
4619 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_channel_width, tvb,
4620 offset, 1, ENC_LITTLE_ENDIAN);
4621 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_grouping, tvb,
4622 offset, 1, ENC_LITTLE_ENDIAN);
4623 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_coefficient_size,
4624 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4625 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_codebook_info, tvb,
4626 offset, 1, ENC_LITTLE_ENDIAN);
4627 proto_tree_add_item(mimo_tree,
4628 hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment, tvb,
4629 offset, 1, ENC_LITTLE_ENDIAN);
4630 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_reserved, tvb,
4631 offset, 1, ENC_LITTLE_ENDIAN);
4634 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
4635 tvb, offset, 4, ENC_LITTLE_ENDIAN);
4641 add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, int offset)
4643 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ant_selection,
4644 ett_ff_ant_sel, ieee80211_ff_ant_selection_fields,
4650 add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
4653 proto_tree_add_bitmask(tree, tvb, offset,
4654 hf_ieee80211_ff_ext_channel_switch_announcement,
4655 ett_ff_chan_switch_announce,
4656 ieee80211_ff_ext_channel_switch_announcement_fields,
4662 add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, int offset)
4664 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ht_info,
4665 ett_ff_ht_info, ieee80211_ff_ht_info_fields,
4671 add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4673 proto_tree_add_item(tree, hf_ieee80211_ff_ht_action, tvb, offset, 1,
4679 add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, int offset)
4681 proto_item *psmp_item;
4682 proto_tree *psmp_tree;
4684 psmp_item = proto_tree_add_item(tree, hf_ieee80211_ff_psmp_sta_info, tvb,
4685 offset, 8, ENC_LITTLE_ENDIAN);
4686 psmp_tree = proto_item_add_subtree(psmp_item, ett_ff_psmp_sta_info);
4688 proto_tree_add_item(psmp_item, hf_ieee80211_ff_psmp_sta_info_type, tvb,
4689 offset, 4, ENC_LITTLE_ENDIAN);
4691 switch (tvb_get_letohl(tvb, offset) & PSMP_STA_INFO_FLAG_TYPE) {
4692 case PSMP_STA_INFO_BROADCAST:
4693 proto_tree_add_item(psmp_tree,
4694 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
4695 offset, 4, ENC_LITTLE_ENDIAN);
4696 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
4697 tvb, offset, 4, ENC_LITTLE_ENDIAN);
4698 /* Missing 64 bit bitmask... */
4699 proto_tree_add_uint64(psmp_tree,
4700 hf_ieee80211_ff_psmp_sta_info_reserved_large,
4702 (tvb_get_letoh64(tvb, offset) &
4703 G_GINT64_CONSTANT(0xFFFFFFFFFFE00000)) >> 21);
4705 case PSMP_STA_INFO_MULTICAST:
4706 proto_tree_add_item(psmp_tree,
4707 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
4708 offset, 4, ENC_LITTLE_ENDIAN);
4709 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
4710 tvb, offset, 4, ENC_LITTLE_ENDIAN);
4711 /* Missing 64 bit bitmask... */
4712 proto_tree_add_uint64(psmp_tree,
4713 hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
4715 (tvb_get_letoh64(tvb, offset) &
4716 G_GINT64_CONSTANT(0xFFFFFFFFFFE00000)) >> 21);
4718 case PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED:
4719 proto_tree_add_item(psmp_tree,
4720 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
4721 offset, 4, ENC_LITTLE_ENDIAN);
4722 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
4723 tvb, offset, 4, ENC_LITTLE_ENDIAN);
4725 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_sta_id, tvb,
4726 offset, 4, ENC_LITTLE_ENDIAN);
4729 proto_tree_add_item(psmp_tree,
4730 hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
4731 tvb, offset, 4, ENC_LITTLE_ENDIAN);
4732 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_utt_duration,
4733 tvb, offset, 4, ENC_LITTLE_ENDIAN);
4734 proto_tree_add_item(psmp_tree,
4735 hf_ieee80211_ff_psmp_sta_info_reserved_small, tvb,
4736 offset, 4, ENC_LITTLE_ENDIAN);
4744 add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, int offset)
4746 proto_item *sched_item;
4747 proto_tree *sched_tree;
4749 sched_item = proto_tree_add_item(tree, hf_ieee80211_sched_info, tvb, offset,
4750 2, ENC_LITTLE_ENDIAN);
4751 sched_tree = proto_item_add_subtree(sched_item, ett_sched_tree);
4753 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_agg, tvb, offset, 2,
4755 if (tvb_get_letohs(tvb, offset) & 0x0001) {
4756 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_tsid, tvb, offset,
4757 2, ENC_LITTLE_ENDIAN);
4758 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_dir, tvb, offset,
4759 2, ENC_LITTLE_ENDIAN);
4766 add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
4768 proto_tree_add_item(tree, hf_ieee80211_ff_public_action, tvb, offset, 1,
4774 add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, int offset)
4776 switch (tvb_get_guint8(tvb, offset + 1)) {
4777 case SM_ACTION_MEASUREMENT_REQUEST:
4778 case SM_ACTION_MEASUREMENT_REPORT:
4779 case SM_ACTION_TPC_REQUEST:
4780 case SM_ACTION_TPC_REPORT:
4781 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4782 add_fixed_field(tree, tvb, offset + 1, FIELD_ACTION_CODE);
4783 add_fixed_field(tree, tvb, offset + 2, FIELD_DIALOG_TOKEN);
4785 case SM_ACTION_CHAN_SWITCH_ANNC:
4786 case SM_ACTION_EXT_CHAN_SWITCH_ANNC:
4787 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4788 add_fixed_field(tree, tvb, offset + 1, FIELD_ACTION_CODE);
4791 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4792 add_fixed_field(tree, tvb, offset + 1, FIELD_ACTION_CODE);
4798 add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, int offset)
4800 switch (tvb_get_guint8(tvb, offset + 1)) {
4801 case SM_ACTION_ADDTS_REQUEST:
4802 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4803 add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
4804 add_fixed_field(tree, tvb, offset + 2, FIELD_DIALOG_TOKEN);
4806 case SM_ACTION_ADDTS_RESPONSE:
4807 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4808 add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
4809 add_fixed_field(tree, tvb, offset + 2, FIELD_DIALOG_TOKEN);
4810 add_fixed_field(tree, tvb, offset + 3, FIELD_STATUS_CODE);
4812 case SM_ACTION_DELTS:
4813 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4814 add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
4815 add_fixed_field(tree, tvb, offset + 2, FIELD_QOS_TS_INFO);
4816 add_fixed_field(tree, tvb, offset + 5, FIELD_REASON_CODE);
4818 case SM_ACTION_QOS_SCHEDULE:
4819 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4820 add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
4823 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4829 add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, int offset)
4831 switch (tvb_get_guint8(tvb, offset + 1)) {
4832 case SM_ACTION_DLS_REQUEST:
4833 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4834 add_fixed_field(tree, tvb, offset + 1, FIELD_DLS_ACTION_CODE);
4835 add_fixed_field(tree, tvb, offset + 2, FIELD_DST_MAC_ADDR);
4836 add_fixed_field(tree, tvb, offset + 8, FIELD_SRC_MAC_ADDR);
4837 add_fixed_field(tree, tvb, offset + 14, FIELD_CAP_INFO);
4838 add_fixed_field(tree, tvb, offset + 16, FIELD_DLS_TIMEOUT);
4840 case SM_ACTION_DLS_RESPONSE:
4841 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4842 add_fixed_field(tree, tvb, offset + 1, FIELD_DLS_ACTION_CODE);
4843 add_fixed_field(tree, tvb, offset + 2, FIELD_STATUS_CODE);
4844 add_fixed_field(tree, tvb, offset + 4, FIELD_DST_MAC_ADDR);
4845 add_fixed_field(tree, tvb, offset + 10, FIELD_SRC_MAC_ADDR);
4846 if (!hf_ieee80211_ff_status_code) {
4847 add_fixed_field(tree, tvb, offset + 16, FIELD_CAP_INFO);
4850 case SM_ACTION_DLS_TEARDOWN:
4851 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4852 add_fixed_field(tree, tvb, offset + 1, FIELD_DLS_ACTION_CODE);
4853 add_fixed_field(tree, tvb, offset + 2, FIELD_DST_MAC_ADDR);
4854 add_fixed_field(tree, tvb, offset + 8, FIELD_SRC_MAC_ADDR);
4855 add_fixed_field(tree, tvb, offset + 14, FIELD_REASON_CODE);
4858 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4864 add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, int offset)
4866 guint start = offset;
4868 switch (tvb_get_guint8(tvb, offset + 1)) {
4869 case BA_ADD_BLOCK_ACK_REQUEST:
4870 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4871 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
4872 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
4873 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_PARAM);
4874 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_TIMEOUT);
4875 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
4877 case BA_ADD_BLOCK_ACK_RESPONSE:
4878 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4879 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
4880 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
4881 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
4882 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_PARAM);
4883 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_TIMEOUT);
4885 case BA_DELETE_BLOCK_ACK:
4886 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4887 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
4888 offset += add_fixed_field(tree, tvb, offset, FIELD_DELBA_PARAM_SET);
4889 offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
4893 return offset - start; /* Size of fixed fields */
4897 add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, int offset)
4899 guint start = offset;
4904 guint8 dialog_token;
4908 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4909 code = tvb_get_guint8(tvb, offset);
4910 offset += add_fixed_field(tree, tvb, offset, FIELD_PA_ACTION_CODE);
4913 case PA_VENDOR_SPECIFIC:
4914 oui = tvb_get_ntoh24(tvb, offset);
4915 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
4919 subtype = tvb_get_guint8(tvb, offset);
4920 proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u", subtype);
4922 if (subtype == WFA_SUBTYPE_P2P) {
4923 offset = dissect_wifi_p2p_public_action(g_pinfo, tree, tvb, offset);
4927 /* Don't know how to handle this vendor */
4931 case PA_GAS_INITIAL_REQUEST:
4932 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
4933 offset += dissect_advertisement_protocol(g_pinfo, tree, tvb, offset,
4935 offset += dissect_gas_initial_request(tree, tvb, offset, anqp);
4937 case PA_GAS_INITIAL_RESPONSE:
4938 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
4939 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
4940 offset += add_fixed_field(tree, tvb, offset, FIELD_GAS_COMEBACK_DELAY);
4941 offset += dissect_advertisement_protocol(g_pinfo, tree, tvb, offset,
4943 offset += dissect_gas_initial_response(tree, tvb, offset, anqp);
4945 case PA_GAS_COMEBACK_REQUEST:
4946 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
4948 case PA_GAS_COMEBACK_RESPONSE:
4949 dialog_token = tvb_get_guint8(tvb, offset);
4950 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
4951 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
4952 frag = tvb_get_guint8(tvb, offset) & 0x7f;
4953 more = (tvb_get_guint8(tvb, offset) & 0x80) != 0;
4954 offset += add_fixed_field(tree, tvb, offset, FIELD_GAS_FRAGMENT_ID);
4955 offset += add_fixed_field(tree, tvb, offset, FIELD_GAS_COMEBACK_DELAY);
4956 offset += dissect_advertisement_protocol(g_pinfo, tree, tvb, offset,
4958 offset += dissect_gas_comeback_response(tree, tvb, offset, anqp, frag,
4959 more, dialog_token);
4961 case PA_TDLS_DISCOVERY_RESPONSE:
4962 col_set_str(g_pinfo->cinfo, COL_PROTOCOL, "TDLS");
4963 col_set_str(g_pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
4964 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
4965 offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
4969 return offset - start; /* Size of fixed fields */
4973 add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset)
4975 guint start = offset;
4978 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
4979 code = tvb_get_guint8(tvb, offset);
4980 offset += add_fixed_field(tree, tvb, offset, FIELD_FT_ACTION_CODE);
4983 case FT_ACTION_REQUEST:
4984 offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
4985 offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
4986 /* Followed by FT Request frame body (IEs) */
4988 case FT_ACTION_RESPONSE:
4989 offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
4990 offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
4991 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
4992 /* Followed by FT Response frame body (IEs) */
4994 case FT_ACTION_CONFIRM:
4995 offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
4996 offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
4997 /* Followed by FT Confirm frame body (IEs) */
5000 offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
5001 offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
5002 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
5003 /* Followed by FT Ack frame body (IEs) */
5007 return offset - start; /* Size of fixed fields */
5011 add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, int offset)
5013 guint start = offset;
5016 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5017 code = tvb_get_guint8(tvb, offset);
5018 offset += add_fixed_field(tree, tvb, offset, FIELD_SA_QUERY_ACTION_CODE);
5021 case SA_QUERY_REQUEST:
5022 offset += add_fixed_field(tree, tvb, offset, FIELD_TRANSACTION_ID);
5024 case SA_QUERY_RESPONSE:
5025 offset += add_fixed_field(tree, tvb, offset, FIELD_TRANSACTION_ID);
5029 return offset - start; /* Size of fixed fields */
5033 add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, int offset)
5036 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5037 offset += add_fixed_field(tree, tvb, offset, FIELD_MESH_ACTION);
5038 /* The only fixed fields are the category and mesh action. The rest are IEs.
5041 if (tvb_get_guint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE) {
5042 /* ..except for the TBTT Adjustment Response, which has a status code field
5044 length += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
5050 add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, int offset)
5052 guint start = offset;
5053 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5054 offset += add_fixed_field(tree, tvb, offset, FIELD_MULTIHOP_ACTION);
5055 offset += add_fixed_field(tree, tvb, offset, FIELD_MESH_CONTROL);
5056 return offset - start;
5060 add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, int offset)
5062 guint start = offset;
5064 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5065 offset += add_fixed_field(tree, tvb, offset, FIELD_SELFPROT_ACTION);
5067 switch (tvb_get_guint8(tvb, start + 1)) {
5068 case SELFPROT_ACTION_MESH_PEERING_OPEN:
5069 offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
5071 case SELFPROT_ACTION_MESH_PEERING_CONFIRM:
5072 offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
5073 offset += add_fixed_field(tree, tvb, offset, FIELD_ASSOC_ID);
5077 return offset - start;
5081 wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, int offset)
5087 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
5089 mode = tvb_get_guint8(tvb, offset);
5090 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_pref_cand,
5091 tvb, offset, 1, ENC_LITTLE_ENDIAN);
5092 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_abridged,
5093 tvb, offset, 1, ENC_LITTLE_ENDIAN);
5094 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_disassoc_imminent,
5095 tvb, offset, 1, ENC_LITTLE_ENDIAN);
5096 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_bss_term_included,
5097 tvb, offset, 1, ENC_LITTLE_ENDIAN);
5098 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
5099 tvb, offset, 1, ENC_LITTLE_ENDIAN);
5102 proto_tree_add_item(tree, hf_ieee80211_ff_disassoc_timer, tvb, offset, 2,
5106 proto_tree_add_item(tree, hf_ieee80211_ff_validity_interval, tvb, offset, 1,
5111 proto_tree_add_text(tree, tvb, offset, 8, "BSS Termination Duration");
5117 url_len = tvb_get_guint8(tvb, offset);
5118 proto_tree_add_item(tree, hf_ieee80211_ff_url_len, tvb, offset, 1,
5121 proto_tree_add_item(tree, hf_ieee80211_ff_url, tvb, offset, url_len,
5126 left = tvb_reported_length_remaining(tvb, offset);
5128 proto_tree_add_text(tree, tvb, offset, left,
5129 "BSS Transition Candidate List Entries");
5133 return offset - start;
5137 add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, int offset)
5140 guint start = offset;
5142 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5143 code = tvb_get_guint8(tvb, offset);
5144 offset += add_fixed_field(tree, tvb, offset, FIELD_WNM_ACTION_CODE);
5146 case WNM_BSS_TRANS_MGMT_REQ:
5147 offset += wnm_bss_trans_mgmt_req(tree, tvb, offset);
5151 return offset - start; /* Size of fixed fields */
5155 add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, int offset)
5159 guint start = offset;
5161 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5162 code = tvb_get_guint8(tvb, offset);
5163 offset += add_fixed_field(tree, tvb, offset, FIELD_TDLS_ACTION_CODE);
5165 case TDLS_SETUP_REQUEST:
5166 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
5167 offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
5169 case TDLS_SETUP_RESPONSE:
5170 status = tvb_get_letohs(tvb, offset);
5171 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
5172 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
5173 if (tvb_reported_length_remaining(tvb, offset) < 2) {
5175 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
5176 "TDLS Setup Response (success) does not "
5177 "include mandatory fields");
5181 offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
5183 case TDLS_SETUP_CONFIRM:
5184 status = tvb_get_letohs(tvb, offset);
5185 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
5186 if (tvb_reported_length_remaining(tvb, offset) < 1) {
5188 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
5189 "TDLS Setup Confirm (success) does not include "
5190 "mandatory fields");
5194 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
5197 offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
5199 case TDLS_PEER_TRAFFIC_INDICATION:
5200 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
5202 case TDLS_CHANNEL_SWITCH_REQUEST:
5203 offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_CHANNEL);
5204 offset += add_fixed_field(tree, tvb, offset, FIELD_REGULATORY_CLASS);
5206 case TDLS_CHANNEL_SWITCH_RESPONSE:
5207 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
5209 case TDLS_PEER_PSM_REQUEST:
5210 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
5212 case TDLS_PEER_PSM_RESPONSE:
5213 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
5214 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
5216 case TDLS_PEER_TRAFFIC_RESPONSE:
5217 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
5219 case TDLS_DISCOVERY_REQUEST:
5220 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
5224 return offset - start; /* Size of fixed fields */
5228 add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, int offset)
5230 guint start = offset;
5232 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5233 offset += add_fixed_field(tree, tvb, offset, FIELD_WME_ACTION_CODE);
5234 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
5235 offset += add_fixed_field(tree, tvb, offset, FIELD_WME_STATUS_CODE);
5237 return offset - start; /* Size of fixed fields */
5241 add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, int offset)
5243 guint start = offset;
5247 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5248 oui = tvb_get_ntoh24(tvb, offset);
5249 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
5253 offset = dissect_vendor_action_marvell(tree, tvb, offset);
5256 subtype = tvb_get_guint8(tvb, offset);
5257 proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u", subtype);
5259 if (subtype == WFA_SUBTYPE_P2P) {
5260 offset = dissect_wifi_p2p_action(tree, tvb, offset);
5264 /* Don't know how to handle this vendor */
5268 return offset - start; /* Size of fixed fields */
5272 add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, int offset)
5274 guint start = offset;
5276 mimo_control_t mimo_cntrl;
5278 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5279 offset += add_fixed_field(tree, tvb, offset, FIELD_HT_ACTION_CODE);
5281 switch (tvb_get_guint8(tvb, offset - 1)) {
5282 case HT_ACTION_NOTIFY_CHAN_WIDTH:
5283 offset += add_fixed_field(tree, tvb, offset, FIELD_CHANNEL_WIDTH);
5285 case HT_ACTION_SM_PWR_SAVE:
5286 offset += add_fixed_field(tree, tvb, offset, FIELD_SM_PWR_CNTRL);
5288 case HT_ACTION_PSMP_ACTION:
5289 n_sta = tvb_get_guint8(tvb, offset);
5290 offset += add_fixed_field(tree, tvb, offset, FIELD_PSMP_PARAM_SET);
5291 for (i = 0; i < (n_sta & 0x0F); i++) {
5292 offset += add_fixed_field(tree, tvb, offset, FIELD_PSMP_STA_INFO);
5295 case HT_ACTION_SET_PCO_PHASE:
5296 offset += add_fixed_field(tree, tvb, offset, FIELD_PCO_PHASE_CNTRL);
5298 case HT_ACTION_MIMO_CSI:
5299 mimo_cntrl = get_mimo_control(tvb, offset);
5300 offset += add_fixed_field(tree, tvb, offset, FIELD_MIMO_CNTRL);
5301 offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl);
5303 case HT_ACTION_MIMO_BEAMFORMING:
5304 mimo_cntrl = get_mimo_control(tvb, offset);
5305 offset += add_fixed_field(tree, tvb, offset, FIELD_MIMO_CNTRL);
5306 offset += add_mimo_beamforming_feedback_report(tree, tvb, offset,
5309 case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING:
5310 mimo_cntrl = get_mimo_control(tvb, offset);
5311 offset += add_fixed_field(tree, tvb, offset, FIELD_MIMO_CNTRL);
5312 offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb,
5316 case HT_ACTION_ANT_SEL_FEEDBACK:
5317 offset += add_fixed_field(tree, tvb, offset, FIELD_ANT_SELECTION);
5319 case HT_ACTION_HT_INFO_EXCHANGE:
5320 offset += add_fixed_field(tree, tvb, offset, FIELD_HT_INFORMATION);
5324 return offset - start;
5328 add_ff_action(proto_tree *tree, tvbuff_t *tvb, int offset)
5330 switch (tvb_get_guint8(tvb, offset) & 0x7f) {
5331 case CAT_SPECTRUM_MGMT:
5332 return add_ff_action_spectrum_mgmt(tree, tvb, offset);
5334 return add_ff_action_qos(tree, tvb, offset);
5336 return add_ff_action_dls(tree, tvb, offset);
5338 return add_ff_action_block_ack(tree, tvb, offset);
5340 return add_ff_action_public(tree, tvb, offset);
5341 case CAT_FAST_BSS_TRANSITION:
5342 return add_ff_action_fast_bss_transition(tree, tvb, offset);
5344 return add_ff_action_sa_query(tree, tvb, offset);
5346 return add_ff_action_mesh(tree, tvb, offset);
5348 return add_ff_action_multihop(tree, tvb, offset);
5349 case CAT_SELF_PROTECTED:
5350 return add_ff_action_self_protected(tree, tvb, offset);
5352 return add_ff_action_wnm(tree, tvb, offset);
5354 return add_ff_action_tdls(tree, tvb, offset);
5355 case CAT_MGMT_NOTIFICATION: /* Management notification frame */
5356 return add_ff_action_mgmt_notification(tree, tvb, offset);
5357 case CAT_VENDOR_SPECIFIC: /* Vendor Specific Category */
5358 return add_ff_action_vendor_specific(tree, tvb, offset);
5360 return add_ff_action_ht(tree, tvb, offset);
5362 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5368 add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5370 proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1,
5376 add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, int offset)
5378 proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6,
5384 add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, int offset)
5386 proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6,
5392 add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, int offset)
5394 proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2,
5400 add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, int offset)
5402 proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1,
5404 proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1,
5410 add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5412 proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset,
5418 add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, int offset)
5420 proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2,
5426 add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5429 code = tvb_get_guint8(tvb, offset);
5430 col_set_str(g_pinfo->cinfo, COL_INFO,
5431 val_to_str_const(code, tdls_action_codes,
5432 "Unknown TDLS Action"));
5433 proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1,
5439 add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, int offset)
5441 proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1,
5447 add_ff_regulatory_class(proto_tree *tree, tvbuff_t *tvb, int offset)
5449 proto_tree_add_item(tree, hf_ieee80211_ff_regulatory_class, tvb, offset, 1,
5455 add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5458 code = tvb_get_guint8(tvb, offset);
5459 col_set_str(g_pinfo->cinfo, COL_INFO,
5460 val_to_str_const(code, wnm_action_codes,
5461 "Unknown WNM Action"));
5462 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1,
5467 struct ieee80211_fixed_field_dissector {
5468 enum fixed_field lfcode;
5469 guint (*dissector)(proto_tree *tree, tvbuff_t *tvb, int offset);
5472 #define FF_FIELD(f, func) { FIELD_ ## f, add_ff_ ## func }
5474 static const struct ieee80211_fixed_field_dissector ff_dissectors[] = {
5475 FF_FIELD(TIMESTAMP, timestamp),
5476 FF_FIELD(BEACON_INTERVAL, beacon_interval),
5477 FF_FIELD(CAP_INFO, cap_info),
5478 FF_FIELD(AUTH_ALG, auth_alg),
5479 FF_FIELD(AUTH_TRANS_SEQ, auth_trans_seq),
5480 FF_FIELD(CURRENT_AP_ADDR, current_ap_addr),
5481 FF_FIELD(LISTEN_IVAL, listen_ival),
5482 FF_FIELD(REASON_CODE, reason_code),
5483 FF_FIELD(ASSOC_ID, assoc_id),
5484 FF_FIELD(STATUS_CODE, status_code),
5485 FF_FIELD(CATEGORY_CODE, category_code),
5486 FF_FIELD(ACTION_CODE, action_code),
5487 FF_FIELD(DIALOG_TOKEN, dialog_token),
5488 FF_FIELD(WME_ACTION_CODE, wme_action_code),
5489 FF_FIELD(WME_STATUS_CODE, wme_status_code),
5490 FF_FIELD(QOS_ACTION_CODE, qos_action_code),
5491 FF_FIELD(BLOCK_ACK_ACTION_CODE, block_ack_action_code),
5492 FF_FIELD(BLOCK_ACK_PARAM, block_ack_param),
5493 FF_FIELD(BLOCK_ACK_TIMEOUT, block_ack_timeout),
5494 FF_FIELD(BLOCK_ACK_SSC, block_ack_ssc),
5495 FF_FIELD(QOS_TS_INFO, qos_ts_info),
5496 FF_FIELD(MESH_ACTION, mesh_action),
5497 FF_FIELD(MULTIHOP_ACTION, multihop_action),
5498 FF_FIELD(MESH_CONTROL, mesh_control),
5499 FF_FIELD(SELFPROT_ACTION, selfprot_action),
5500 FF_FIELD(DLS_ACTION_CODE, dls_action_code),
5501 FF_FIELD(DST_MAC_ADDR, dst_mac_addr),
5502 FF_FIELD(SRC_MAC_ADDR, src_mac_addr),
5503 FF_FIELD(DLS_TIMEOUT, dls_timeout),
5504 FF_FIELD(DELBA_PARAM_SET, delba_param_set),
5505 FF_FIELD(MAX_REG_PWR, max_reg_pwr),
5506 FF_FIELD(MEASUREMENT_PILOT_INT, measurement_pilot_int),
5507 FF_FIELD(COUNTRY_STR, country_str),
5508 FF_FIELD(MAX_TX_PWR, max_tx_pwr),
5509 FF_FIELD(TX_PWR_USED, tx_pwr_used),
5510 FF_FIELD(TRANSCEIVER_NOISE_FLOOR, transceiver_noise_floor),
5511 FF_FIELD(CHANNEL_WIDTH, channel_width),
5512 FF_FIELD(QOS_INFO_AP, qos_info_ap),
5513 FF_FIELD(QOS_INFO_STA, qos_info_sta),
5514 FF_FIELD(SM_PWR_CNTRL, sm_pwr_cntrl),
5515 FF_FIELD(PCO_PHASE_CNTRL, pco_phase_cntrl),
5516 FF_FIELD(PSMP_PARAM_SET, psmp_param_set),
5517 FF_FIELD(MIMO_CNTRL, mimo_cntrl),
5518 FF_FIELD(ANT_SELECTION, ant_selection),
5519 FF_FIELD(EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT,
5520 extended_channel_switch_announcement),
5521 FF_FIELD(HT_INFORMATION, ht_information),
5522 FF_FIELD(HT_ACTION_CODE, ht_action_code),
5523 FF_FIELD(PSMP_STA_INFO, psmp_sta_info),
5524 FF_FIELD(SCHEDULE_INFO, schedule_info),
5525 FF_FIELD(PA_ACTION_CODE, pa_action_code),
5526 FF_FIELD(ACTION, action),
5527 FF_FIELD(FT_ACTION_CODE, ft_action_code),
5528 FF_FIELD(STA_ADDRESS, sta_address),
5529 FF_FIELD(TARGET_AP_ADDRESS, target_ap_address),
5530 FF_FIELD(GAS_COMEBACK_DELAY, gas_comeback_delay),
5531 FF_FIELD(GAS_FRAGMENT_ID, gas_fragment_id),
5532 FF_FIELD(SA_QUERY_ACTION_CODE, sa_query_action_code),
5533 FF_FIELD(TRANSACTION_ID, transaction_id),
5534 FF_FIELD(TDLS_ACTION_CODE, tdls_action_code),
5535 FF_FIELD(TARGET_CHANNEL, target_channel),
5536 FF_FIELD(REGULATORY_CLASS, regulatory_class),
5537 FF_FIELD(WNM_ACTION_CODE, wnm_action_code),
5544 add_fixed_field(proto_tree *tree, tvbuff_t *tvb, int offset,
5545 enum fixed_field lfcode)
5548 for (i = 0; ff_dissectors[i].dissector; i++) {
5549 if (ff_dissectors[i].lfcode == lfcode) {
5550 return ff_dissectors[i].dissector(tree, tvb, offset);
5556 static const value_string ieee80211_rsn_cipher_vals[] =
5559 {1, "WEP (40-bit)"},
5563 {5, "WEP (104-bit)"},
5565 {7, "Group addressed traffic not allowed"},
5569 static const value_string ieee80211_rsn_keymgmt_vals[] =
5574 {3, "FT over IEEE 802.1X"},
5575 {4, "FT using PSK"},
5576 {5, "WPA (SHA256)"},
5577 {6, "PSK (SHA256)"},
5578 {7, "TDLS / TPK Handshake"},
5583 oui_base_custom(gchar *result, guint32 oui)
5586 const gchar *manuf_name;
5587 p_oui[0] = oui >> 16 & 0xFF;
5588 p_oui[1] = oui >> 8 & 0xFF;
5589 p_oui[2] = oui & 0xFF;
5591 /* Attempt an OUI lookup. */
5592 manuf_name = get_manuf_name_if_known(p_oui);
5593 if (manuf_name == NULL) {
5594 /* Could not find an OUI. */
5595 g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x", p_oui[0], p_oui[1], p_oui[2] );
5598 /* Found an address string. */
5599 g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x (%s)", p_oui[0], p_oui[1], p_oui[2], manuf_name );
5603 rsn_gcs_base_custom(gchar *result, guint32 gcs)
5605 gchar *oui_result=NULL;
5606 oui_result = ep_alloc(SHORT_STR);
5607 oui_result[0] = '\0';
5608 oui_base_custom(oui_result, gcs >> 8);
5609 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d") );
5613 rsn_pcs_base_custom(gchar *result, guint32 pcs)
5615 gchar *oui_result=NULL;
5616 oui_result = ep_alloc(SHORT_STR);
5617 oui_result[0] = '\0';
5618 oui_base_custom(oui_result, pcs >> 8);
5619 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d") );
5623 rsn_akms_base_custom(gchar *result, guint32 akms)
5625 gchar *oui_result=NULL;
5626 oui_result = ep_alloc(SHORT_STR);
5627 oui_result[0] = '\0';
5628 oui_base_custom(oui_result, akms >> 8);
5629 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d") );
5633 rsn_pcs_return(guint32 pcs)
5636 result = ep_alloc(SHORT_STR);
5638 rsn_pcs_base_custom(result, pcs);
5644 rsn_akms_return(guint32 akms)
5647 result = ep_alloc(SHORT_STR);
5649 rsn_akms_base_custom(result, akms);
5655 rsn_gmcs_base_custom(gchar *result, guint32 gmcs)
5657 gchar *oui_result=NULL;
5658 oui_result = ep_alloc(SHORT_STR);
5659 oui_result[0] = '\0';
5660 oui_base_custom(oui_result, gmcs >> 8);
5661 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d") );
5665 static const value_string ieee802111_wfa_ie_type_vals[] =
5667 { 1, "WPA Information Element" },
5673 static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] =
5676 { 1, "WEP (40-bit)" },
5680 { 5, "WEP (104-bit)" },
5682 { 7, "Group addressed traffic not allowed" },
5686 static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] =
5691 { 3, "FT over IEEE 802.1X" },
5692 { 4, "FT using PSK" },
5693 { 5, "WPA (SHA256)" },
5694 { 6, "PSK (SHA256)" },
5695 { 7, "TDLS / TPK Handshake" },
5699 static const value_string ieee80211_wfa_ie_wme_acs_vals[] = {
5700 { 0, "Best Effort" },
5701 { 1, "Background" },
5707 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals[] = {
5710 { 2, "Direct link" },
5711 { 3, "Bidirectional link" },
5715 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals[] = {
5721 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals[] = {
5722 { 0, "Best Effort" },
5723 { 1, "Background" },
5725 { 3, "Excellent Effort" },
5726 { 4, "Controlled Load" },
5729 { 7, "Network Control" },
5733 static const value_string ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals[] = {
5734 { 0, "WMM AP may deliver all buffered frames (MSDUs and MMPDUs)" },
5735 { 1, "WMM AP may deliver a maximum of 2 buffered frames (MSDUs and MMPDUs) per USP" },
5736 { 2, "WMM AP may deliver a maximum of 4 buffered frames (MSDUs and MMPDUs) per USP" },
5737 { 3, "WMM AP may deliver a maximum of 6 buffered frames (MSDUs and MMPDUs) per USP" },
5740 static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = { "WMM delivery and trigger enabled", "non-WMM PS" };
5743 wpa_mcs_base_custom(gchar *result, guint32 mcs)
5745 gchar *oui_result=NULL;
5746 oui_result = ep_alloc(SHORT_STR);
5747 oui_result[0] = '\0';
5748 oui_base_custom(oui_result, mcs >> 8);
5749 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d") );
5753 wpa_ucs_base_custom(gchar *result, guint32 ucs)
5755 gchar *oui_result=NULL;
5756 oui_result = ep_alloc(SHORT_STR);
5757 oui_result[0] = '\0';
5758 oui_base_custom(oui_result, ucs >> 8);
5759 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d") );
5763 wpa_akms_base_custom(gchar *result, guint32 akms)
5765 gchar *oui_result=NULL;
5766 oui_result = ep_alloc(SHORT_STR);
5767 oui_result[0] = '\0';
5768 oui_base_custom(oui_result, akms >> 8);
5769 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, val_to_str( akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d") );
5773 wpa_ucs_return(guint32 ucs)
5776 result = ep_alloc(SHORT_STR);
5778 wpa_ucs_base_custom(result, ucs);
5784 wpa_akms_return(guint32 akms)
5787 result = ep_alloc(SHORT_STR);
5789 wpa_akms_base_custom(result, akms);
5794 static const value_string ieee802111_wfa_ie_wme_type[] =
5796 { 0, "Information Element" },
5797 { 1, "Parameter Element" },
5798 { 2, "TSPEC Element" },
5802 static const value_string ft_subelem_id_vals[] =
5805 {1, "PMK-R1 key holder identifier (R1KH-ID)"},
5806 {2, "GTK subelement"},
5807 {3, "PMK-R0 key holder identifier (R0KH-ID)"},
5812 static int dissect_qos_info(proto_tree * tree, tvbuff_t *tvb, int offset, int ftype)
5814 proto_tree *qos_info_tree;
5815 proto_item *qos_info_item;
5816 qos_info_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_qos_info, tvb, offset, 1, ENC_NA);
5817 qos_info_tree = proto_item_add_subtree(qos_info_item, ett_wme_qos_info);
5822 case MGT_REASSOC_REQ:
5824 /* To AP so decode as per WMM standard Figure 7 QoS Info field when sent from WMM STA*/
5825 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length, tvb, offset, 1, ENC_NA);
5826 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be, tvb, offset, 1, ENC_NA);
5827 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk, tvb, offset, 1, ENC_NA);
5828 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi, tvb, offset, 1, ENC_NA);
5829 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo, tvb, offset, 1, ENC_NA);
5830 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved, tvb, offset, 1, ENC_NA);
5834 case MGT_PROBE_RESP:
5835 case MGT_ASSOC_RESP:
5836 case MGT_REASSOC_RESP:
5838 /* From AP so decode as per WMM standard Figure 6 QoS Info field when sent from WMM AP */
5839 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd, tvb, offset, 1, ENC_NA);
5840 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count, tvb, offset, 1, ENC_NA);
5841 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved, tvb, offset, 1, ENC_NA);
5845 expert_add_info_format(g_pinfo, qos_info_item, PI_UNDECODED, PI_WARN, "Could not deduce direction to decode correctly, ftype %u", ftype);
5854 dissect_vendor_ie_wpawme(proto_tree * tree, tvbuff_t * tvb, int offset, guint32 tag_len, int ftype)
5858 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_type, tvb, offset, 1, ENC_NA);
5859 type = tvb_get_guint8(tvb, offset);
5860 proto_item_append_text(tree, ": %s", val_to_str(type, ieee802111_wfa_ie_type_vals, "Unknown %d" ));
5864 case 1: /* Wi-Fi Protected Access (WPA) */
5866 proto_item *wpa_mcs_item, *wpa_ucs_item, *wpa_akms_item;
5867 proto_item *wpa_sub_ucs_item, *wpa_sub_akms_item;
5868 proto_tree *wpa_mcs_tree, *wpa_ucs_tree, *wpa_akms_tree;
5869 proto_tree *wpa_sub_ucs_tree, *wpa_sub_akms_tree;
5870 guint16 ucs_count, akms_count;
5873 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5876 /* Multicast Cipher Suite */
5877 wpa_mcs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_mcs, tvb, offset, 4, ENC_BIG_ENDIAN);
5878 wpa_mcs_tree = proto_item_add_subtree(wpa_mcs_item, ett_wpa_mcs_tree);
5879 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
5881 /* Check if OUI is 00:50:F2 (WFA) */
5882 if(tvb_get_ntoh24(tvb, offset) == 0x0050F2)
5884 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_wfa_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
5886 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
5890 /* Unicast Cipher Suites */
5891 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5892 ucs_count = tvb_get_letohs(tvb, offset);
5895 wpa_ucs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_list, tvb, offset, ucs_count * 4, ENC_NA);
5896 wpa_ucs_tree = proto_item_add_subtree(wpa_ucs_item, ett_wpa_ucs_tree);
5897 for(i = 1; i <= ucs_count; i++)
5899 wpa_sub_ucs_item = proto_tree_add_item(wpa_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs, tvb, offset, 4, ENC_BIG_ENDIAN);
5900 wpa_sub_ucs_tree = proto_item_add_subtree(wpa_sub_ucs_item, ett_wpa_sub_ucs_tree);
5901 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
5903 /* Check if OUI is 00:50:F2 (WFA) */
5904 if(tvb_get_ntoh24(tvb, offset) == 0x0050F2)
5906 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_wfa_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
5907 proto_item_append_text(wpa_ucs_item, " %s", wpa_ucs_return(tvb_get_ntohl(tvb, offset)));
5909 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
5914 /* Authenticated Key Management Suites */
5915 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5916 akms_count = tvb_get_letohs(tvb, offset);
5919 wpa_akms_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_list, tvb, offset, akms_count * 4, ENC_NA);
5920 wpa_akms_tree = proto_item_add_subtree(wpa_akms_item, ett_wpa_akms_tree);
5921 for(i = 1; i <= akms_count; i++)
5923 wpa_sub_akms_item = proto_tree_add_item(wpa_akms_tree, hf_ieee80211_wfa_ie_wpa_akms, tvb, offset, 4, ENC_BIG_ENDIAN);
5924 wpa_sub_akms_tree = proto_item_add_subtree(wpa_sub_akms_item, ett_wpa_sub_akms_tree);
5925 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
5927 /* Check if OUI is 00:50:F2 (WFA) */
5928 if(tvb_get_ntoh24(tvb, offset) == 0x0050F2)
5930 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_wfa_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
5931 proto_item_append_text(wpa_akms_item, " %s", wpa_akms_return(tvb_get_ntohl(tvb, offset)));
5933 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
5939 case 2: /* Wireless Multimedia Enhancements (WME) */
5943 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_subtype, tvb, offset, 1, ENC_NA);
5944 subtype = tvb_get_guint8(tvb, offset);
5945 proto_item_append_text(tree, ": %s", val_to_str(subtype, ieee802111_wfa_ie_wme_type, "Unknown %d" ));
5948 case 0: /* WME Information Element */
5950 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA);
5952 /* WME QoS Info Field */
5953 offset = dissect_qos_info(tree, tvb, offset, ftype);
5956 case 1: /* WME Parameter Element */
5959 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA);
5961 /* WME QoS Info Field */
5962 offset = dissect_qos_info(tree, tvb, offset, ftype);
5963 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_reserved, tvb, offset, 1, ENC_NA);
5966 for(i = 0; i < 4; i++)
5968 proto_item *ac_item, *aci_aifsn_item, *ecw_item;
5969 proto_tree *ac_tree, *aci_aifsn_tree, *ecw_tree;
5970 guint8 aci_aifsn, ecw;
5972 ac_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_ac_parameters, tvb, offset, 4, ENC_NA);
5973 ac_tree = proto_item_add_subtree(ac_item, ett_wme_ac);
5975 /* ACI/AIFSN Field */
5976 aci_aifsn_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_aci_aifsn, tvb, offset, 1, ENC_NA);
5977 aci_aifsn_tree = proto_item_add_subtree(aci_aifsn_item, ett_wme_aci_aifsn);
5978 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_aci, tvb, offset, 1, ENC_NA);
5979 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_acm, tvb, offset, 1, ENC_NA);
5980 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_aifsn, tvb, offset, 1, ENC_NA);
5981 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_reserved, tvb, offset, 1, ENC_NA);
5982 aci_aifsn = tvb_get_guint8(tvb, offset);
5983 proto_item_append_text(ac_item, " ACI %u (%s), ACM %s, AIFSN %u",
5984 (aci_aifsn & 0x60) >> 5, match_strval((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
5985 (aci_aifsn & 0x10) ? "yes" : "no ", aci_aifsn & 0x0f);
5988 /* ECWmin/ECWmax field */
5989 ecw_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_ecw, tvb, offset, 1, ENC_NA);
5990 ecw_tree = proto_item_add_subtree(ecw_item, ett_wme_ecw);
5991 proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_max, tvb, offset, 1, ENC_NA);
5992 proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_min, tvb, offset, 1, ENC_NA);
5993 ecw = tvb_get_guint8(tvb, offset);
5994 proto_item_append_text(ac_item, ", ECWmin %u ,ECWmax %u", ecw & 0x0f, (ecw & 0xf0) >> 4 );
5998 proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_txop_limit, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5999 proto_item_append_text(ac_item, ", TXOP %u", tvb_get_letohs(tvb, offset));
6004 case 3: /* WME TSPEC Element */
6007 proto_item *tsinfo_item;
6008 proto_tree *tsinfo_tree;
6010 tsinfo_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6011 tsinfo_tree = proto_item_add_subtree(tsinfo_item, ett_tsinfo_tree);
6013 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6014 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6015 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6016 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6017 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6020 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6023 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6026 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6029 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6032 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6035 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6038 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6041 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6044 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6047 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6050 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6053 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6056 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6059 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6062 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6068 /* No default Action */
6070 } /* End switch(subtype) */
6073 case 4: /* WPS: Wifi Protected Setup */
6075 dissect_wps_tlvs(tree, tvb, offset, tag_len-4, NULL);
6079 /* No default Action...*/
6081 } /* End switch(type) */
6087 dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
6089 gint tag_len = tvb_length(tag_tvb);
6094 switch (tvb_get_guint8(tag_tvb, 3)) {
6095 case WFA_SUBTYPE_P2P:
6096 dissect_wifi_p2p_ie(pinfo, item, tag_tvb, 4, tag_len - 4);
6097 proto_item_append_text(item, ": P2P");
6103 dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tag_tvb)
6106 guint tag_len = tvb_length(tag_tvb);
6107 guint pmkid_len = tag_len - 4;
6108 char out_buff[SHORT_STR], valid_str[SHORT_STR] = "";
6110 if (tag_len >= 4 && !tvb_memeql(tag_tvb, tag_off, RSN_OUI"\x04", 4)) {
6111 /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
6112 * This is only used within EAPOL-Key frame Key Data. */
6113 if (pmkid_len != PMKID_LEN) {
6114 g_snprintf(valid_str, SHORT_STR,
6115 "(invalid PMKID len=%d, expected 16) ", pmkid_len);
6117 g_snprintf(out_buff, SHORT_STR, "RSN PMKID: %s%s", valid_str,
6118 tvb_bytes_to_str(tag_tvb, 4, pmkid_len));
6119 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tag_tvb, 0,
6122 proto_item_append_text(item, ": RSN");
6127 } marvell_ie_type_t;
6130 dissect_vendor_ie_marvell(proto_item * item _U_, proto_tree * ietree,
6131 tvbuff_t * tvb, int offset, guint32 tag_len)
6135 type = tvb_get_guint8(tvb, offset);
6136 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6140 case MARVELL_IE_MESH:
6141 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_subtype, tvb,
6142 offset++, 1, ENC_LITTLE_ENDIAN );
6143 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_version, tvb,
6144 offset++, 1, ENC_LITTLE_ENDIAN );
6145 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_active_proto_id, tvb,
6146 offset++, 1, ENC_LITTLE_ENDIAN );
6147 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_active_metric_id, tvb,
6148 offset++, 1, ENC_LITTLE_ENDIAN );
6149 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_cap, tvb,
6150 offset++, 1, ENC_LITTLE_ENDIAN );
6154 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_data, tvb, offset,
6155 tag_len - 1, ENC_NA);
6161 ATHEROS_IE_ADVCAP = 1,
6163 } atheros_ie_type_t;
6166 ATHEROS_IE_ADVCAP_S = 1
6167 } atheros_ie_advcap_subtype_t;
6171 } atheros_ie_xr_subtype_t;
6174 ATHEROS_IE_CAP_TURBOP = 0x01,
6175 ATHEROS_IE_CAP_COMP = 0x02,
6176 ATHEROS_IE_CAP_FF = 0x04,
6177 ATHEROS_IE_CAP_XR = 0x08,
6178 ATHEROS_IE_CAP_AR = 0x10,
6179 ATHEROS_IE_CAP_BURST = 0x20,
6180 ATHEROS_IE_CAP_WME = 0x40,
6181 ATHEROS_IE_CAP_BOOST = 0x80
6184 static const value_string atheros_ie_type_vals[] = {
6185 { ATHEROS_IE_ADVCAP, "Advanced Capability"},
6186 { ATHEROS_IE_XR, "eXtended Range"},
6191 dissect_vendor_ie_atheros_cap(proto_item * item _U_, tvbuff_t *tvb, int offset)
6193 proto_tree *cap_tree;
6195 cap_tree = proto_item_add_subtree(item, ett_ath_cap_tree);
6197 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_turbop, tvb, offset, 1, ENC_NA);
6198 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_comp, tvb, offset, 1, ENC_NA);
6199 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ff, tvb, offset, 1, ENC_NA);
6200 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_xr, tvb, offset, 1, ENC_NA);
6201 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ar, tvb, offset, 1, ENC_NA);
6202 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_burst, tvb, offset, 1, ENC_NA);
6203 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_wme, tvb, offset, 1, ENC_NA);
6204 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_boost, tvb, offset, 1, ENC_NA);
6209 dissect_vendor_ie_atheros(proto_item * item _U_, proto_tree * ietree,
6210 tvbuff_t * tvb, int offset, guint tag_len,
6211 packet_info * pinfo, proto_item *ti_len)
6216 proto_item *cap_item;
6220 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be >= 6", tag_len+3); /* Add length of OUI to tag_length */
6223 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_type, tvb, offset, 1, ENC_NA);
6224 type = tvb_get_guint8(tvb, offset);
6225 proto_item_append_text(item, ": %s", val_to_str_const(type, atheros_ie_type_vals, "Unknown"));
6229 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_subtype, tvb, offset, 1, ENC_NA);
6230 subtype = tvb_get_guint8(tvb, offset);
6234 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_version, tvb, offset, 1, ENC_NA);
6235 version = tvb_get_guint8(tvb, offset);
6242 case ATHEROS_IE_ADVCAP:
6245 case ATHEROS_IE_ADVCAP_S:
6247 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_cap, tvb, offset, 1, ENC_NA);
6248 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
6252 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_defkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6258 /* No default Action */
6260 } /* End switch(subtype) */
6266 case ATHEROS_IE_XR_S:
6268 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_info, tvb, offset, 1, ENC_NA);
6272 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_bssid, tvb, offset, 6, ENC_NA);
6276 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_bssid, tvb, offset, 6, ENC_NA);
6280 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6284 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_cap, tvb, offset, 1, ENC_NA);
6285 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
6289 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_cap, tvb, offset, 1, ENC_NA);
6290 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
6296 /* No default Action */
6298 } /* End switch(subtype) */
6301 /* No default Action */
6303 } /* End switch(type) */
6308 ti = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA);
6309 expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_WARN, "Unknown Data (not interpreted)");
6314 AIRONET_IE_VERSION = 3,
6316 AIRONET_IE_QBSS_V2 = 14
6317 } aironet_ie_type_t;
6319 static const value_string aironet_ie_type_vals[] = {
6320 { AIRONET_IE_VERSION, "CCX version"},
6321 { AIRONET_IE_QOS, "Qos"},
6322 { AIRONET_IE_QBSS_V2, "QBSS V2 - CCA"},
6327 dissect_vendor_ie_aironet(proto_item * aironet_item, proto_tree * ietree,
6328 tvbuff_t * tvb, int offset, guint32 tag_len)
6332 gboolean dont_change = FALSE; /* Don't change the IE item text to default */
6334 type = tvb_get_guint8(tvb, offset);
6335 proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6339 case AIRONET_IE_VERSION:
6340 proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_version, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6341 proto_item_append_text(aironet_item, ": Aironet CCX version = %d",
6342 tvb_get_guint8(tvb, offset));
6345 case AIRONET_IE_QOS:
6346 proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_qos_unk1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6348 proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_qos_paramset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6351 /* XXX: just copied over from WME. Maybe "Best Effort" and "Background"
6352 * need to be swapped. Also, the "TXOP" may be TXOP - or not.
6354 for (i = 0; i < 4; i++) {
6355 guint8 byte1, byte2;
6357 byte1 = tvb_get_guint8(tvb, offset);
6358 byte2 = tvb_get_guint8(tvb, offset + 1);
6359 txop = tvb_get_letohs(tvb, offset + 2);
6360 proto_tree_add_bytes_format(ietree, hf_ieee80211_aironet_ie_qos_val, tvb, offset, 4, NULL,
6361 "CCX QoS Parameters??: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
6362 (byte1 & 0x60) >> 5, val_to_str((byte1 & 0x60) >> 5, wme_acs, "(Unknown: %d)"),
6363 (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
6364 byte2 & 0x0f, (byte2 & 0xf0) >> 4,
6369 case AIRONET_IE_QBSS_V2:
6370 /* Extract Values */
6371 proto_tree_add_item (ietree, hf_ieee80211_qbss2_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6372 proto_tree_add_item (ietree, hf_ieee80211_qbss2_cu, tvb, offset + 2, 1, ENC_BIG_ENDIAN);
6373 proto_tree_add_item (ietree, hf_ieee80211_qbss2_cal, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
6374 proto_tree_add_item (ietree, hf_ieee80211_qbss2_gl, tvb, offset + 4, 1, ENC_BIG_ENDIAN);
6377 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_data, tvb, offset,
6378 tag_len - 1, ENC_NA);
6382 proto_item_append_text(aironet_item, ": Aironet %s",
6383 val_to_str_const(type, aironet_ie_type_vals, "Unknown"));
6387 /* 802.11e 7.3.2.33 QoS Capability element */
6388 static int dissect_qos_capability(proto_tree * tree, tvbuff_t * tvb, int offset, int ftype)
6390 proto_item *cap_info_item;
6391 proto_tree *cap_info_tree;
6393 cap_info_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_cap_qos_info, tvb, offset, 1, ENC_NA);
6394 cap_info_tree = proto_item_add_subtree(cap_info_item, ett_qos_info_field_tree);
6398 case MGT_REASSOC_REQ:
6400 /* To AP so decode as STA: Figure 33h-QoS Info field when set by a non-AP QSTA */
6401 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_vo_uapsd, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6402 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_vi_uapsd, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6403 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_bk_uapsd, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6404 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_be_uapsd, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6405 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_qack, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6406 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_max_sp_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6407 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_more_data_ack, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6411 case MGT_PROBE_RESP:
6412 case MGT_ASSOC_RESP:
6413 case MGT_REASSOC_RESP:
6415 /* From AP so decode as AP: Figure 33g-QoS Info field when sent by a QAP */
6416 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_edca_upd_cnt, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6417 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_qack, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6418 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_queue_req, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6419 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_txop_req, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6420 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6424 expert_add_info_format(g_pinfo, cap_info_item, PI_UNDECODED, PI_WARN, "Could not deduce direction to decode correctly, ftype %u", ftype);
6431 /* 7.3.2.25 RSN information element */
6433 dissect_rsn_ie(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb,
6434 int offset, guint32 tag_len)
6436 proto_item *rsn_gcs_item, *rsn_pcs_item, *rsn_akms_item, *rsn_cap_item, *rsn_pmkid_item, *rsn_gmcs_item;
6437 proto_item *rsn_sub_pcs_item, *rsn_sub_akms_item;
6438 proto_item *rsn_pcs_count, *rsn_akms_count, *rsn_pmkid_count;
6439 proto_tree *rsn_gcs_tree, *rsn_pcs_tree, *rsn_akms_tree, *rsn_cap_tree, *rsn_pmkid_tree, *rsn_gmcs_tree;
6440 proto_tree *rsn_sub_pcs_tree, *rsn_sub_akms_tree;
6441 guint16 pcs_count, akms_count, pmkid_count;
6443 int tag_end = offset + tag_len;
6445 proto_tree_add_item(tree, hf_ieee80211_rsn_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6448 /* 7.3.2.25.1 Group Cipher suites */
6449 rsn_gcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gcs, tvb, offset, 4, ENC_BIG_ENDIAN);
6450 rsn_gcs_tree = proto_item_add_subtree(rsn_gcs_item, ett_rsn_gcs_tree);
6451 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
6453 /* Check if OUI is 00:0F:AC (ieee80211) */
6454 if(tvb_get_ntoh24(tvb, offset) == 0x000FAC)
6456 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_80211_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
6458 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
6462 /* 7.3.2.25.2 Pairwise Cipher suites */
6463 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6464 pcs_count = tvb_get_letohs(tvb, offset);
6467 if (offset + (pcs_count * 4) > tag_end)
6469 expert_add_info_format(pinfo, rsn_pcs_count, PI_MALFORMED, PI_ERROR,
6470 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
6471 pcs_count = (tag_end - offset) / 4;
6474 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA);
6475 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
6476 for(i = 1; i <= pcs_count; i++)
6478 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN);
6479 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
6480 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
6482 /* Check if OUI is 00:0F:AC (ieee80211) */
6483 if(tvb_get_ntoh24(tvb, offset) == 0x000FAC)
6485 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
6486 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(tvb_get_ntohl(tvb, offset)));
6488 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
6493 if(offset >= tag_end)
6498 /* 7.3.2.25.2 AKM suites */
6499 rsn_akms_count = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6500 akms_count = tvb_get_letohs(tvb, offset);
6503 if (offset + (akms_count * 4) > tag_end)
6505 expert_add_info_format(pinfo, rsn_akms_count, PI_MALFORMED, PI_ERROR,
6506 "Auth Key Management (AKM) Suite Count too large, 4*%u > %d", akms_count, tag_end - offset);
6507 akms_count = (tag_end - offset) / 4;
6510 rsn_akms_item = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_list, tvb, offset, akms_count * 4, ENC_NA);
6511 rsn_akms_tree = proto_item_add_subtree(rsn_akms_item, ett_rsn_akms_tree);
6512 for(i = 1; i <= akms_count; i++)
6514 rsn_sub_akms_item = proto_tree_add_item(rsn_akms_tree, hf_ieee80211_rsn_akms, tvb, offset, 4, ENC_BIG_ENDIAN);
6515 rsn_sub_akms_tree = proto_item_add_subtree(rsn_sub_akms_item, ett_rsn_sub_akms_tree);
6516 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
6518 /* Check if OUI is 00:0F:AC (ieee80211) */
6519 if(tvb_get_ntoh24(tvb, offset) == 0x000FAC)
6521 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
6522 proto_item_append_text(rsn_akms_item, " %s", rsn_akms_return(tvb_get_ntohl(tvb, offset)));
6524 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
6529 /* 7.3.2.25.3 RSN capabilities */
6530 rsn_cap_item = proto_tree_add_item(tree, hf_ieee80211_rsn_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6531 rsn_cap_tree = proto_item_add_subtree(rsn_cap_item, ett_rsn_cap_tree);
6533 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_preauth, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6534 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_no_pairwise, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6535 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_ptksa_replay_counter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6536 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_gtksa_replay_counter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6537 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_mfpr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6538 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_mfpc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6539 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_peerkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6541 if(offset >= tag_end)
6545 /* 7.3.2.25.4 PMKID */
6546 rsn_pmkid_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6547 pmkid_count = tvb_get_letohs(tvb, offset);
6550 if (offset + (pmkid_count * 16) > tag_end)
6552 expert_add_info_format(pinfo, rsn_pmkid_count, PI_MALFORMED, PI_ERROR,
6553 "PMKID Count too large, 16*%u > %d", pmkid_count, tag_end - offset);
6554 pmkid_count = (tag_end - offset) / 16;
6557 rsn_pmkid_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_list, tvb, offset, pmkid_count * 16, ENC_NA);
6558 rsn_pmkid_tree = proto_item_add_subtree(rsn_pmkid_item, ett_rsn_pmkid_tree);
6559 for(i = 1; i <= pmkid_count; i++)
6561 proto_tree_add_item(rsn_pmkid_tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA);
6565 if(offset >= tag_end)
6569 /* Group Management Cipher Suite (802.11w)*/
6570 rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN);
6571 rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
6572 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
6573 /* Check if OUI is 00:0F:AC (ieee80211) */
6574 if(tvb_get_ntoh24(tvb, offset) == 0x000FAC)
6576 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
6578 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
6586 dissect_mobility_domain(proto_tree *tree, tvbuff_t *tvb, int offset,
6590 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
6591 "MDIE content length must be at least 3 bytes");
6595 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_mdid,
6596 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6597 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab,
6598 tvb, offset + 2, 1, ENC_BIG_ENDIAN);
6599 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
6600 tvb, offset + 2, 1, ENC_BIG_ENDIAN);
6601 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
6602 tvb, offset + 2, 1, ENC_BIG_ENDIAN);
6606 dissect_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset,
6609 int end = offset + tag_len;
6611 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
6612 "FTIE content length must be at least 82 bytes");
6616 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic_control,
6617 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6618 proto_tree_add_item(tree, hf_ieee80211_tag_ft_element_count,
6619 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6621 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic,
6622 tvb, offset, 16, ENC_NA);
6624 proto_tree_add_item(tree, hf_ieee80211_tag_ft_anonce,
6625 tvb, offset, 32, ENC_NA);
6627 proto_tree_add_item(tree, hf_ieee80211_tag_ft_snonce,
6628 tvb, offset, 32, ENC_NA);
6631 while (offset + 2 <= end) {
6634 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_id,
6635 tvb, offset, 1, ENC_BIG_ENDIAN);
6636 id = tvb_get_guint8(tvb, offset);
6639 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_len,
6640 tvb, offset, 1, ENC_BIG_ENDIAN);
6641 len = tvb_get_guint8(tvb, offset);
6644 if (offset + len > end) {
6645 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset,
6646 end - offset, "Invalid FTIE subelement");
6650 s_end = offset + len;
6653 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_r1kh_id,
6654 tvb, offset, len, ENC_NA);
6657 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_info,
6658 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6659 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_id,
6660 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6664 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_length,
6665 tvb, offset, 1, ENC_BIG_ENDIAN);
6669 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_rsc,
6670 tvb, offset, 8, ENC_NA);
6674 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key,
6675 tvb, offset, s_end - offset, ENC_NA);
6678 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_r0kh_id,
6679 tvb, offset, len, ENC_ASCII|ENC_NA);
6682 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_id,
6683 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6687 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_ipn,
6688 tvb, offset, 6, ENC_NA);
6692 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_length,
6693 tvb, offset, 1, ENC_BIG_ENDIAN);
6697 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key,
6698 tvb, offset, 24, ENC_NA);
6701 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_data,
6702 tvb, offset, len, ENC_NA);
6710 dissect_mmie(proto_tree *tree, tvbuff_t *tvb, int offset, guint32 tag_len)
6713 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
6714 "MMIE content length must be at least 16 bytes");
6718 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_keyid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6719 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_ipn, tvb, offset + 2, 6,
6721 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_mic, tvb, offset + 8, 8,
6726 dissect_link_identifier(proto_tree *tree, tvbuff_t *tvb, int offset,
6730 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
6731 "Link Identifier content length must be at least "
6736 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_bssid, tvb,
6738 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_init_sta, tvb,
6739 offset + 6, 6, ENC_NA);
6740 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_resp_sta, tvb,
6741 offset + 12, 6, ENC_NA);
6745 dissect_wakeup_schedule(proto_tree *tree, tvbuff_t *tvb, int offset,
6749 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
6750 "Wakeup Schedule content length must be at least "
6755 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_offset, tvb,
6756 offset, 4, ENC_LITTLE_ENDIAN);
6759 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_interval, tvb,
6760 offset, 4, ENC_LITTLE_ENDIAN);
6763 proto_tree_add_item(tree,
6764 hf_ieee80211_tag_wakeup_schedule_awake_window_slots, tvb,
6765 offset, 4, ENC_LITTLE_ENDIAN);
6768 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
6769 tvb, offset, 4, ENC_LITTLE_ENDIAN);
6772 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_idle_count, tvb,
6773 offset, 2, ENC_LITTLE_ENDIAN);
6777 dissect_channel_switch_timing(proto_tree *tree, tvbuff_t *tvb, int offset,
6781 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
6782 "Channel Switch Timing content length must be at "
6787 proto_tree_add_item(tree, hf_ieee80211_tag_channel_switch_timing_switch_time,
6788 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6791 proto_tree_add_item(tree,
6792 hf_ieee80211_tag_channel_switch_timing_switch_timeout,
6793 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6797 dissect_pti_control(proto_tree *tree, tvbuff_t *tvb, int offset,
6801 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
6802 "PTI Control content length must be at least "
6807 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_tid, tvb,
6808 offset, 1, ENC_BIG_ENDIAN);
6811 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_sequence_control, tvb,
6812 offset, 2, ENC_LITTLE_ENDIAN);
6816 dissect_pu_buffer_status(proto_tree *tree, tvbuff_t *tvb, int offset,
6820 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
6821 "PU Buffer Status content length must be at least "
6826 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_bk, tvb,
6827 offset, 1, ENC_BIG_ENDIAN);
6828 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_be, tvb,
6829 offset, 1, ENC_BIG_ENDIAN);
6830 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_vi, tvb,
6831 offset, 1, ENC_BIG_ENDIAN);
6832 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_vo, tvb,
6833 offset, 1, ENC_BIG_ENDIAN);
6837 dissect_timeout_interval(proto_tree *tree, tvbuff_t *tvb, int offset,
6842 pi = proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_type, tvb,
6843 offset, 1, ENC_BIG_ENDIAN);
6845 expert_add_info_format(g_pinfo, pi, PI_MALFORMED, PI_ERROR,
6846 "Timeout Interval content length must be at least "
6851 proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_value, tvb,
6852 offset + 1, 4, ENC_LITTLE_ENDIAN);
6856 dissect_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean basic, gboolean vs) {
6858 proto_tree *mcs_tree, *bit_tree;
6860 /* 16 byte Supported MCS set */
6863 ti = proto_tree_add_string(tree, hf_ieee80211_mcsset_vs, tvb, offset, 16,
6864 basic ? "Basic MCS Set" : "MCS Set");
6867 ti = proto_tree_add_string(tree, hf_ieee80211_mcsset, tvb, offset, 16,
6868 basic ? "Basic MCS Set" : "MCS Set");
6870 mcs_tree = proto_item_add_subtree(ti, ett_mcsset_tree);
6872 /* Rx MCS Bitmask */
6873 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_rx_bitmask, tvb, offset, 10, ENC_NA);
6874 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
6877 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_0to7, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6878 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_8to15, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6879 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_16to23, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6880 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_24to31, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6884 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_32, tvb, offset , 4, ENC_LITTLE_ENDIAN);
6885 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_33to38, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6886 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_39to52, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6890 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_53to76, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6893 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_highest_data_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6896 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_mcs_set_defined, tvb, offset, 1,
6898 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal, tvb, offset, 1,
6900 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_max_spatial_streams, tvb, offset, 1,
6902 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_unequal_modulation, tvb, offset, 1,
6910 /* 802.11n D1.10 - HT Information IE */
6912 dissect_ht_info_ie_1_1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
6913 guint32 tag_len, proto_item *ti_len)
6915 proto_item *cap_item;
6916 proto_tree *cap_tree;
6921 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
6922 "HT Information IE content length %u wrong, must be at least 22 bytes", tag_len);
6927 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6930 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter1, tvb,
6931 offset, 1, ENC_LITTLE_ENDIAN);
6932 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter1_tree);
6933 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_channel_offset, tvb,
6934 offset, 1, ENC_LITTLE_ENDIAN);
6935 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_channel_width, tvb,
6936 offset, 1, ENC_LITTLE_ENDIAN);
6937 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_rifs_mode, tvb,
6938 offset, 1, ENC_LITTLE_ENDIAN);
6939 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_psmp_stas_only, tvb,
6940 offset, 1, ENC_LITTLE_ENDIAN);
6941 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_service_interval_granularity, tvb,
6942 offset, 1, ENC_LITTLE_ENDIAN);
6945 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter2, tvb,
6946 offset, 2, ENC_LITTLE_ENDIAN);
6947 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter2_tree);
6948 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_operating_mode, tvb,
6949 offset, 1, ENC_LITTLE_ENDIAN);
6950 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_non_greenfield_sta_present, tvb,
6951 offset, 1, ENC_LITTLE_ENDIAN);
6952 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_transmit_burst_limit, tvb,
6953 offset, 1, ENC_LITTLE_ENDIAN);
6954 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_obss_non_ht_stas_present, tvb,
6955 offset, 1, ENC_LITTLE_ENDIAN);
6956 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_1, tvb,
6957 offset, 2, ENC_LITTLE_ENDIAN);
6960 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter3, tvb,
6961 offset, 2, ENC_LITTLE_ENDIAN);
6962 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter3_tree);
6963 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_2, tvb,
6964 offset, 1, ENC_LITTLE_ENDIAN);
6965 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_beacon, tvb,
6966 offset, 1, ENC_LITTLE_ENDIAN);
6967 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_cts_protection, tvb,
6968 offset, 1, ENC_LITTLE_ENDIAN);
6970 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_beacon, tvb,
6971 offset, 1, ENC_LITTLE_ENDIAN);
6972 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_lsig_txop_protection_full_support, tvb,
6973 offset, 1, ENC_LITTLE_ENDIAN);
6974 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_active, tvb,
6975 offset, 1, ENC_LITTLE_ENDIAN);
6976 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_phase, tvb,
6977 offset, 1, ENC_LITTLE_ENDIAN);
6978 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_3, tvb,
6979 offset, 1, ENC_LITTLE_ENDIAN);
6982 offset = dissect_mcs_set(tree, tvb, offset, TRUE, FALSE);
6987 static const value_string time_adv_timing_capab_vals[] = {
6988 { 0, "No standardized external time source" },
6989 { 1, "Timestamp offset based on UTC" },
6990 { 2, "UTC time at which the TSF timer is 0" },
6994 static int dissect_time_adv(proto_tree *tree, tvbuff_t *tvb, int offset)
6998 proto_tree *subtree;
7002 capab = tvb_get_guint8(tvb, offset);
7003 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_timing_capab,
7004 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7009 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
7010 tvb, offset, 10, ENC_NA);
7013 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
7014 tvb, offset, 5, ENC_NA);
7018 item = proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
7019 tvb, offset, 10, ENC_NA);
7020 subtree = proto_item_add_subtree(item, ett_tag_time_adv_tree);
7021 memset(&tm, 0, sizeof(tm));
7022 tm.tm_year = tvb_get_letohs(tvb, offset) - 1900;
7023 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_year,
7024 tvb, offset, 2, ENC_LITTLE_ENDIAN);
7026 tm.tm_mon = tvb_get_guint8(tvb, offset) - 1;
7027 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_month,
7028 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7030 tm.tm_mday = tvb_get_guint8(tvb, offset);
7031 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_day,
7032 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7034 tm.tm_hour = tvb_get_guint8(tvb, offset);
7035 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_hours,
7036 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7038 tm.tm_min = tvb_get_guint8(tvb, offset);
7039 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_minutes,
7040 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7042 tm.tm_sec = tvb_get_guint8(tvb, offset);
7043 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_seconds,
7044 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7046 proto_tree_add_item(subtree,
7047 hf_ieee80211_tag_time_adv_time_value_milliseconds,
7048 tvb, offset, 2, ENC_LITTLE_ENDIAN);
7050 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
7051 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7057 t += last_timestamp / 1000000;
7058 now = localtime(&t);
7060 proto_item_append_text(item,
7061 ": current time=%u-%02u-%02u %02u:%02u:%02u",
7062 now->tm_year + 1900, now->tm_mon + 1,
7063 now->tm_mday, now->tm_hour, now->tm_min,
7067 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
7068 tvb, offset, 5, ENC_NA);
7071 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
7072 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7080 static int dissect_time_zone(proto_tree *tree, tvbuff_t *tvb, int offset,
7083 proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
7085 return offset + tag_len;
7089 dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo,
7090 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len, int tag_end, proto_item *ti)
7093 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7094 "AP Channel Report length %u wrong, must be > 1", tag_len);
7098 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_regulatory_class, tvb,
7099 offset, 1, ENC_LITTLE_ENDIAN);
7100 proto_item_append_text(ti, ": Regulatory Class %u, Channel List :", tvb_get_guint8(tvb, offset) );
7103 while(offset < tag_end)
7105 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA);
7106 proto_item_append_text(ti, " %u,", tvb_get_guint8(tvb, offset) );
7112 dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo,
7113 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
7117 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7118 "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
7122 proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
7123 offset, 1, ENC_LITTLE_ENDIAN);
7131 dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
7132 guint32 tag_len, proto_item *ti_len, gboolean vs )
7134 proto_item *cap_item, *ti;
7135 proto_tree *cap_tree;
7137 if (tag_len != 26) {
7138 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7139 "HT Capability IE length %u wrong, must be = 26", tag_len);
7143 if (wlan_ignore_draft_ht && vs)
7146 /* 2 byte HT Capabilities Info*/
7149 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_vs_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7153 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7155 cap_tree = proto_item_add_subtree(cap_item, ett_ht_cap_tree);
7156 proto_tree_add_item(cap_tree, hf_ieee80211_ht_ldpc_coding, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7157 proto_tree_add_item(cap_tree, hf_ieee80211_ht_chan_width, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7158 proto_tree_add_item(cap_tree, hf_ieee80211_ht_sm_pwsave, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7159 proto_tree_add_item(cap_tree, hf_ieee80211_ht_green, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7160 proto_tree_add_item(cap_tree, hf_ieee80211_ht_short20, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7161 proto_tree_add_item(cap_tree, hf_ieee80211_ht_short40, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7162 proto_tree_add_item(cap_tree, hf_ieee80211_ht_tx_stbc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7165 proto_tree_add_item(cap_tree, hf_ieee80211_ht_rx_stbc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7166 proto_tree_add_item(cap_tree, hf_ieee80211_ht_delayed_block_ack, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7167 proto_tree_add_item(cap_tree, hf_ieee80211_ht_max_amsdu, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7168 proto_tree_add_item(cap_tree, hf_ieee80211_ht_dss_cck_40, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7169 proto_tree_add_item(cap_tree, hf_ieee80211_ht_psmp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7170 proto_tree_add_item(cap_tree, hf_ieee80211_ht_40_mhz_intolerant, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7171 proto_tree_add_item(cap_tree, hf_ieee80211_ht_l_sig, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7174 /* 1 byte A-MPDU Parameters */
7177 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7180 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7182 cap_tree = proto_item_add_subtree(cap_item, ett_ampduparam_tree);
7183 ti = proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7184 proto_item_append_text(ti, " (%04.0f[Bytes])",pow(2,13+(tvb_get_guint8(tvb, offset) & 0x3))-1);
7185 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu_start_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7186 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7189 /* 16 byte MCS set */
7190 offset = dissect_mcs_set(tree, tvb, offset, FALSE, vs);
7193 /* 2 byte HT Extended Capabilities */
7196 cap_item = proto_tree_add_item(tree, hf_ieee80211_htex_vs_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7198 cap_item = proto_tree_add_item(tree, hf_ieee80211_htex_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7200 cap_tree = proto_item_add_subtree(cap_item, ett_htex_cap_tree);
7201 proto_tree_add_item(cap_tree, hf_ieee80211_htex_pco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7202 proto_tree_add_item(cap_tree, hf_ieee80211_htex_transtime, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7204 proto_tree_add_item(cap_tree, hf_ieee80211_htex_mcs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7205 proto_tree_add_item(cap_tree, hf_ieee80211_htex_htc_support, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7206 proto_tree_add_item(cap_tree, hf_ieee80211_htex_rd_responder, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7210 /* 4 byte TxBF capabilities */
7213 cap_item = proto_tree_add_item(tree, hf_ieee80211_txbf_vs, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7215 cap_item = proto_tree_add_item(tree, hf_ieee80211_txbf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7217 cap_tree = proto_item_add_subtree(cap_item, ett_txbf_tree);
7218 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_cap, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7219 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_rcv_ssc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7220 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_tx_ssc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7221 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_rcv_ndp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7222 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_tx_ndp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7223 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_impl_txbf, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7224 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_calib, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7227 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_csi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7228 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_uncomp_fm, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7229 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_comp_fm, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7230 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_bf_csi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7231 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_uncomp_fm_feed, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7232 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_comp_fm_feed, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7235 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_min_group, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7236 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_csi_num_bf_ant, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7237 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_uncomp_sm_bf_ant, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7238 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_comp_sm_bf_ant, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7241 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_csi_max_rows_bf, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7242 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_chan_est, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7243 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_resrv, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7246 /* 1 byte Antenna Selection (ASEL) capabilities */
7249 cap_item = proto_tree_add_item(tree, hf_ieee80211_antsel_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7253 cap_item = proto_tree_add_item(tree, hf_ieee80211_antsel, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7255 cap_tree = proto_item_add_subtree(cap_item, ett_antsel_tree);
7256 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b0, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7257 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7258 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7259 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7260 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b4, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7261 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b5, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7262 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b6, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7263 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b7, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7271 dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
7272 guint32 tag_len, proto_item *ti_len)
7274 proto_item *cap_item;
7275 proto_tree *cap_tree;
7277 if (tag_len != 22) {
7278 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7279 "Tag length %u wrong, must be = 22", tag_len);
7283 if (wlan_ignore_draft_ht)
7286 /* 1 HT Control Channel */
7287 proto_tree_add_item(tree, hf_ieee80211_hta_cc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7290 /* 1 byte HT additional capabilities */
7291 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 1,
7293 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap_tree);
7295 proto_tree_add_item(cap_tree, hf_ieee80211_hta_ext_chan_offset, tvb, offset, 1,
7297 proto_tree_add_item(cap_tree, hf_ieee80211_hta_rec_tx_width, tvb, offset, 1,
7299 proto_tree_add_item(cap_tree, hf_ieee80211_hta_rifs_mode, tvb, offset, 1,
7301 proto_tree_add_item(cap_tree, hf_ieee80211_hta_controlled_access, tvb, offset, 1,
7303 proto_tree_add_item(cap_tree, hf_ieee80211_hta_service_interval, tvb, offset, 1,
7307 /* 2 byte HT additional capabilities */
7308 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 2,
7310 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap1_tree);
7312 proto_tree_add_item(cap_tree, hf_ieee80211_hta_operating_mode, tvb, offset, 2,
7314 proto_tree_add_item(cap_tree, hf_ieee80211_hta_non_gf_devices, tvb, offset, 2,
7319 /* 2 byte HT additional capabilities */
7320 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 2,
7322 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap2_tree);
7324 proto_tree_add_item(cap_tree, hf_ieee80211_hta_basic_stbc_mcs, tvb, offset, 2,
7326 proto_tree_add_item(cap_tree, hf_ieee80211_hta_dual_stbc_protection, tvb, offset, 2,
7328 proto_tree_add_item(cap_tree, hf_ieee80211_hta_secondary_beacon, tvb, offset, 2,
7330 proto_tree_add_item(cap_tree, hf_ieee80211_hta_lsig_txop_protection, tvb, offset, 2,
7332 proto_tree_add_item(cap_tree, hf_ieee80211_hta_pco_active, tvb, offset, 2,
7334 proto_tree_add_item(cap_tree, hf_ieee80211_hta_pco_phase, tvb, offset, 2,
7338 /* 16 byte Supported MCS set */
7339 offset = dissect_mcs_set(tree, tvb, offset, FALSE, TRUE);
7344 /* 802.11n-D1.10 and 802.11n-D2.0, 7.1.3.5a */
7348 * "The Order field is 1 bit in length and is set to 1 in any non-QoS Data
7349 * frame that contains an MSDU, or fragment thereof, which is being
7350 * transferred using the StrictlyOrdered service class. The presence of the
7351 * HT Control field in frames is indicated by setting the Order field to 1
7352 * in any Data type or Management type frame that is transmitted with a
7353 * value of HT_GF or HT_MM for the FORMAT parameter of the TXVECTOR except
7354 * a non-QoS Data frame or a Control Wrapper frame. The Order field is set
7355 * to 0 in all other frames. All non-HT QoS STAs set the Order field to 0."
7357 * ...so does this mean that we can check for the presence of +HTC by
7358 * looking for QoS frames with the Order bit set, or do we need extra
7359 * information from the PHY (which would be monumentally silly)?
7361 * At any rate, it doesn't look like any equipment we have produces
7362 * +HTC frames, so the code is completely untested.
7366 dissect_ht_control(proto_tree *tree, tvbuff_t * tvb, int offset)
7369 proto_tree *htc_tree, *lac_subtree;
7372 htc = tvb_get_letohs(tvb, offset);
7374 ti = proto_tree_add_item(tree, hf_ieee80211_htc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7375 htc_tree = proto_item_add_subtree(ti, ett_htc_tree);
7377 /* Start: Link Adaptation Control */
7378 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_lac, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7379 lac_subtree = proto_item_add_subtree(ti, ett_htc_tree);
7380 proto_tree_add_boolean(lac_subtree, hf_ieee80211_htc_lac_reserved, tvb, offset, 1, htc);
7381 proto_tree_add_boolean(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 1, htc);
7383 if (HTC_IS_ASELI(htc)) {
7384 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 1, htc);
7386 proto_tree_add_boolean(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 1, htc);
7387 if (HTC_LAC_MAI_MRQ(htc)){
7388 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 1, htc);
7390 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 1, htc);
7394 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, htc);
7397 if (HTC_IS_ASELI(htc)) {
7398 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 1, htc);
7399 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 1, htc);
7401 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 1, htc);
7403 /* End: Link Adaptation Control */
7406 htc = tvb_get_letohs(tvb, offset);
7408 proto_tree_add_uint(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 1, htc);
7409 proto_tree_add_uint(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 1, htc);
7410 proto_tree_add_uint(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 1, htc);
7411 proto_tree_add_uint(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 1, htc);
7414 proto_tree_add_boolean(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 1, htc);
7415 proto_tree_add_uint(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 1, htc);
7416 proto_tree_add_boolean(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 1, htc);
7417 proto_tree_add_boolean(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 1, htc);
7421 dissect_frame_control(proto_tree * tree, tvbuff_t * tvb, gboolean wlan_broken_fc,
7424 guint16 fcf, flags, frame_type_subtype;
7425 proto_tree *fc_tree, *flag_tree;
7426 proto_item *fc_item, *flag_item, *hidden_item;
7428 fcf = FETCH_FCF(offset);
7430 flags = FCF_FLAGS(fcf);
7431 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf);
7433 proto_tree_add_uint (tree, hf_ieee80211_fc_frame_type_subtype,
7434 tvb, wlan_broken_fc?offset+1:offset, 1,
7435 frame_type_subtype);
7437 fc_item = proto_tree_add_uint_format (tree, hf_ieee80211_fc_field, tvb,
7438 offset, 2, fcf, "Frame Control: 0x%04X (%s)",
7439 fcf, wlan_broken_fc?"Swapped":"Normal");
7441 fc_tree = proto_item_add_subtree (fc_item, ett_fc_tree);
7443 proto_tree_add_uint (fc_tree, hf_ieee80211_fc_proto_version, tvb, wlan_broken_fc?offset+1:offset, 1,
7444 FCF_PROT_VERSION (fcf));
7446 proto_tree_add_uint (fc_tree, hf_ieee80211_fc_frame_type, tvb, wlan_broken_fc?offset+1:offset, 1,
7447 FCF_FRAME_TYPE (fcf));
7449 proto_tree_add_uint (fc_tree, hf_ieee80211_fc_frame_subtype, tvb, wlan_broken_fc?offset+1:offset, 1,
7450 FCF_FRAME_SUBTYPE (fcf));
7452 flag_item = proto_tree_add_uint_format (fc_tree, hf_ieee80211_fc_flags, tvb,
7453 wlan_broken_fc?offset:offset+1, 1,
7454 flags, "Flags: 0x%X", flags);
7456 flag_tree = proto_item_add_subtree (flag_item, ett_proto_flags);
7457 proto_tree_add_uint (flag_tree, hf_ieee80211_fc_data_ds, tvb, wlan_broken_fc?offset:offset+1, 1,
7458 FLAGS_DS_STATUS (flags));
7459 hidden_item = proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_to_ds, tvb, offset+1, 1, flags);
7460 PROTO_ITEM_SET_HIDDEN(hidden_item);
7461 hidden_item = proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_from_ds, tvb, offset+1, 1, flags);
7462 PROTO_ITEM_SET_HIDDEN(hidden_item);
7463 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_more_frag, tvb, wlan_broken_fc?offset:offset+1, 1,
7465 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_retry, tvb, wlan_broken_fc?offset:offset+1, 1,
7467 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, wlan_broken_fc?offset:offset+1, 1,
7469 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_more_data, tvb, wlan_broken_fc?offset:offset+1, 1,
7471 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_protected, tvb, wlan_broken_fc?offset:offset+1, 1,
7473 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_order, tvb, wlan_broken_fc?offset:offset+1, 1,
7478 dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
7479 guint offset, proto_item *item, proto_item *ti_len, gint tag_len)
7482 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, 3, "802.11n (Pre) OUI");
7483 /* 802.11n OUI Information Element */
7484 if (4 <= tag_len && !tvb_memeql(tvb, offset, PRE_11N_OUI"\x33", 4)) {
7485 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 3, 1,"802.11n (Pre) HT information" );
7487 dissect_ht_capability_ie(tvb, pinfo, tree, offset+4, tag_len - 4, ti_len, TRUE);
7488 proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
7491 if (4 <= tag_len && !tvb_memeql(tvb, offset, PRE_11N_OUI"\x34", 4)) {
7492 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 3, 1, "HT additional information (802.11n D1.00)");
7494 dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset+4, tag_len - 4, ti_len);
7495 proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
7498 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 3, 1, "Unknown type");
7499 proto_item_append_text(item, ": 802.11n (pre) Unknown type");
7500 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 4,
7501 tag_len - 4, "Not interpreted");
7507 dissect_interworking(packet_info *pinfo, proto_tree *tree, proto_item *item,
7508 tvbuff_t *tvb, int offset)
7513 len = tvb_get_guint8(tvb, offset);
7516 if (tvb_reported_length_remaining(tvb, offset) < len || len == 0) {
7517 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
7518 "Truncated Interworking element");
7522 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_access_network_type,
7523 tvb, offset, 1, ENC_BIG_ENDIAN);
7524 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_internet,
7525 tvb, offset, 1, ENC_BIG_ENDIAN);
7526 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_asra,
7527 tvb, offset, 1, ENC_BIG_ENDIAN);
7528 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_esr,
7529 tvb, offset, 1, ENC_BIG_ENDIAN);
7530 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_uesa,
7531 tvb, offset, 1, ENC_BIG_ENDIAN);
7534 if (len == 1 + 2 || len == 1 + 2 + 6) {
7535 dissect_venue_info(tree, tvb, offset);
7539 if (len == 1 + 6 || len == 1 + 2 + 6) {
7540 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_hessid,
7541 tvb, offset, 6, ENC_NA);
7545 if (len != 1 && len != 1 + 2 && len != 1 + 6 && len != 1 + 2 + 6) {
7546 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
7547 "Invalid Interworking element length");
7554 dissect_roaming_consortium(packet_info *pinfo, proto_tree *tree,
7555 proto_item *item, tvbuff_t *tvb, int offset)
7557 guint8 len, oi_lens, oi1_len, oi2_len;
7561 len = tvb_get_guint8(tvb, offset);
7565 if (tvb_reported_length_remaining(tvb, offset) < len || len < 2) {
7566 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
7567 "Truncated Roaming Consortium element");
7571 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
7572 tvb, offset, 1, ENC_BIG_ENDIAN);
7575 oi_lens = tvb_get_guint8(tvb, offset);
7576 oi1_len = oi_lens & 0x0f;
7577 oi2_len = (oi_lens & 0xf0) >> 4;
7578 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1_len,
7579 tvb, offset, 1, ENC_BIG_ENDIAN);
7580 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2_len,
7581 tvb, offset, 1, ENC_BIG_ENDIAN);
7584 if (offset + oi1_len > end) {
7585 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
7586 "Truncated Roaming Consortium element");
7590 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1,
7591 tvb, offset, oi1_len, ENC_NA);
7592 add_manuf(item, tvb, offset);
7595 if (offset + oi2_len > end) {
7596 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
7597 "Truncated Roaming Consortium element");
7602 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2,
7603 tvb, offset, oi2_len, ENC_NA);
7608 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi3,
7609 tvb, offset, end - offset, ENC_NA);
7616 /* ************************************************************************* */
7617 /* Dissect and add tagged (optional) fields to proto tree */
7618 /* ************************************************************************* */
7621 static int beacon_padding = 0; /* beacon padding bug */
7623 static int ieee80211_tag_ssid(packet_info *pinfo, proto_tree *tree,
7624 proto_item *ti, proto_item *ti_len,
7625 guint32 tag_len, tvbuff_t *tvb, int offset)
7627 /* 7.3.2.1 SSID element (0) */
7628 guint8 *ssid; /* The SSID may consist of arbitrary bytes */
7630 if (beacon_padding != 0) /* padding bug */
7633 if(tag_len > MAX_SSID_LEN) {
7634 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7635 "SSID length (%u) greater than maximum (%u)",
7636 tag_len, MAX_SSID_LEN);
7639 ssid = tvb_get_ephemeral_string(tvb, offset + 2, tag_len);
7640 AirPDcapSetLastSSID(&airpdcap_ctx, (CHAR *) ssid, tag_len);
7641 proto_tree_add_item(tree, hf_ieee80211_tag_ssid, tvb, offset + 2, tag_len,
7644 proto_item_append_text(ti, ": %s", ssid);
7646 col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID=%s", ssid);
7649 memcpy(wlan_stats.ssid, ssid, MIN(tag_len, MAX_SSID_LEN));
7650 wlan_stats.ssid_len = tag_len;
7652 proto_item_append_text(ti, ": Broadcast");
7654 col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Broadcast");
7657 beacon_padding++; /* padding bug */
7659 return offset + 2 + tag_len;
7662 static int ieee80211_tag_supp_rates(packet_info *pinfo, proto_tree *tree,
7663 proto_item *ti, proto_item *ti_len,
7664 guint32 tag_len, tvbuff_t *tvb,
7665 int offset, int tag_end)
7667 /* 7.3.2.2 Supported Rates element (1) */
7669 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7670 "Tag length %u too short, must be greater than 0",
7677 while (offset < tag_end) {
7678 proto_tree_add_item(tree, hf_ieee80211_tag_supp_rates, tvb, offset, 1,
7680 proto_item_append_text(ti, " %s,",
7681 val_to_str_const(tvb_get_guint8(tvb, offset),
7682 ieee80211_supported_rates_vals,
7687 proto_item_append_text(ti, " [Mbit/sec]");
7692 static int ieee80211_tag_fh_parameter(packet_info *pinfo, proto_tree *tree,
7693 proto_item *ti_len, guint32 tag_len,
7694 tvbuff_t *tvb, int offset)
7696 /* 7.3.2.3 FH Parameter Set element (2) */
7698 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7699 "Tag length %u too short, must be >= 5", tag_len);
7705 proto_tree_add_item(tree, hf_ieee80211_tag_fh_dwell_time,
7706 tvb, offset, 2, ENC_LITTLE_ENDIAN);
7709 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_set,
7710 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7713 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_pattern,
7714 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7717 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_index,
7718 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7724 static int ieee80211_tag_ds_parameter(packet_info *pinfo, proto_tree *tree,
7725 proto_item *ti, proto_item *ti_len,
7726 guint32 tag_len, tvbuff_t *tvb,
7729 /* 7.3.2.4 DS Parameter Set element (3) */
7731 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7732 "Tag length %u wrong, must be = 1", tag_len);
7738 proto_tree_add_item(tree, hf_ieee80211_tag_ds_param_channel,
7739 tvb, offset, 1, ENC_BIG_ENDIAN);
7741 proto_item_append_text(ti, ": Current Channel: %u",
7742 tvb_get_guint8(tvb, offset));
7744 wlan_stats.channel = tvb_get_guint8(tvb, offset);
7750 static int ieee80211_tag_cf_parameter(packet_info *pinfo, proto_tree *tree,
7751 proto_item *ti, proto_item *ti_len,
7752 guint32 tag_len, tvbuff_t *tvb,
7755 /* 7.3.2.5 CF Parameter Set element (4) */
7757 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7758 "Tag length %u wrong, must be = 6", tag_len);
7764 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_count,
7765 tvb, offset, 1, ENC_BIG_ENDIAN);
7766 proto_item_append_text(ti, ": CFP count %u", tvb_get_guint8(tvb, offset));
7769 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_period,
7770 tvb, offset, 1, ENC_BIG_ENDIAN);
7771 proto_item_append_text(ti, ": CFP Period %u", tvb_get_guint8(tvb, offset));
7774 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_max_duration,
7775 tvb, offset, 2, ENC_LITTLE_ENDIAN);
7776 proto_item_append_text(ti, ": CFP Max Duration %u",
7777 tvb_get_letohs(tvb, offset));
7780 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_dur_remaining,
7781 tvb, offset, 2, ENC_LITTLE_ENDIAN);
7782 proto_item_append_text(ti, ": CFP Dur Remaining %u",
7783 tvb_get_letohs(tvb, offset));
7789 static int ieee80211_tag_tim(packet_info *pinfo, proto_tree *tree,
7790 proto_item *ti, proto_item *ti_len,
7791 guint32 tag_len, tvbuff_t *tvb, int offset)
7793 proto_tree *bmapctl_tree;
7794 proto_item *bmapctl_item;
7796 /* 7.3.2.6 TIM (5) */
7798 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7799 "Tag length %u too short, must be >= 4", tag_len);
7805 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_count,
7806 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7807 proto_item_append_text(ti, ": DTIM %u of", tvb_get_guint8(tvb, offset));
7810 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_period,
7811 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7812 proto_item_append_text(ti, " %u bitmap", tvb_get_guint8(tvb, offset + 1));
7815 bmapctl_item = proto_tree_add_item(tree, hf_ieee80211_tim_bmapctl,
7816 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7817 bmapctl_tree = proto_item_add_subtree(bmapctl_item, ett_tag_bmapctl_tree);
7818 proto_tree_add_item(bmapctl_tree, hf_ieee80211_tim_bmapctl_mcast,
7819 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7820 proto_tree_add_item(bmapctl_tree, hf_ieee80211_tim_bmapctl_offset,
7821 tvb, offset, 1, ENC_LITTLE_ENDIAN);
7824 proto_tree_add_item(tree, hf_ieee80211_tim_partial_virtual_bitmap,
7825 tvb, offset, tag_len - 3, ENC_NA);
7826 offset += tag_len - 3;
7831 static int ieee80211_tag_ibss_parameter(packet_info *pinfo, proto_tree *tree,
7832 proto_item *ti, proto_item *ti_len,
7833 guint32 tag_len, tvbuff_t *tvb,
7836 /* 7.3.2.7 IBSS Parameter Set element (6) */
7839 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7840 "Tag length %u wrong, must be = 2", tag_len);
7846 proto_tree_add_item(tree, hf_ieee80211_tag_ibss_atim_window,
7847 tvb, offset, 2, ENC_LITTLE_ENDIAN);
7848 proto_item_append_text(ti, ": ATIM window 0x%x",
7849 tvb_get_letohs(tvb, offset));
7855 static const value_string environment_vals[] = {
7857 { 0x4f, "Outdoor" },
7862 static int ieee80211_tag_country_info(packet_info *pinfo, proto_tree *tree,
7863 proto_item *ti, proto_item *ti_len,
7864 guint32 tag_len, tvbuff_t *tvb,
7865 int offset, int tag_end)
7867 /* 7.3.2.9 Country information element (7) */
7868 proto_tree *sub_tree;
7869 proto_item *sub_item;
7872 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7873 "Tag length %u too short, must be >= 6", tag_len);
7879 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_code,
7880 tvb, offset, 2, ENC_ASCII|ENC_NA);
7881 proto_item_append_text(ti, ": Country Code %s",
7882 tvb_get_ephemeral_string(tvb, offset, 2));
7885 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
7886 tvb, offset, 1, ENC_BIG_ENDIAN);
7887 proto_item_append_text(ti, ", Environment %s",
7888 val_to_str(tvb_get_guint8(tvb, offset),
7889 environment_vals,"Unknown (0x%02x)"));
7892 while (offset < tag_end) {
7894 if ((tag_end - offset) < 3) {
7895 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_pad,
7896 tvb, offset, 1, ENC_NA);
7900 if (tvb_get_guint8(tvb, offset) <= 200) { /* 802.11d */
7901 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_fnm,
7902 tvb, offset, 3, ENC_NA);
7903 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_fnm_tree);
7905 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_fcn,
7906 tvb, offset, 1, ENC_BIG_ENDIAN);
7907 proto_item_append_text(sub_item, ": First Channel Number: %d",
7908 tvb_get_guint8(tvb, offset));
7910 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_nc,
7911 tvb, offset, 1, ENC_BIG_ENDIAN);
7912 proto_item_append_text(sub_item, ", Number of Channels: %d",
7913 tvb_get_guint8(tvb, offset));
7915 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_mtpl,
7916 tvb, offset, 1, ENC_BIG_ENDIAN);
7917 proto_item_append_text(sub_item,
7918 ", Maximum Transmit Power Level: %d dBm",
7919 tvb_get_guint8(tvb, offset));
7921 } else { /* 802.11j */
7922 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_rrc,
7923 tvb, offset, 3, ENC_NA);
7924 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_rcc_tree);
7926 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_rei,
7927 tvb, offset, 1, ENC_BIG_ENDIAN);
7928 proto_item_append_text(sub_item,
7929 ": Regulatory Extension Identifier: %d",
7930 tvb_get_guint8(tvb, offset));
7932 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_rc,
7933 tvb, offset, 1, ENC_BIG_ENDIAN);
7934 proto_item_append_text(sub_item, ", Regulatory Class: %d",
7935 tvb_get_guint8(tvb, offset));
7937 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_cc,
7938 tvb, offset, 1, ENC_BIG_ENDIAN);
7939 proto_item_append_text(sub_item, ", Coverage Class: %d",
7940 tvb_get_guint8(tvb, offset));
7948 static int ieee80211_tag_fh_hopping_parameter(packet_info *pinfo,
7952 guint32 tag_len, tvbuff_t *tvb,
7955 /* 7.3.2.10 Hopping Pattern Parameters information element (8) */
7957 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7958 "Tag length %u too short, must be >= 2", tag_len);
7964 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
7965 tvb, offset, 1, ENC_BIG_ENDIAN);
7966 proto_item_append_text(ti, ": Prime Radix: %u", tvb_get_guint8(tvb, offset));
7969 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
7970 tvb, offset, 1, ENC_BIG_ENDIAN);
7971 proto_item_append_text(ti, ", Number of Channels: %u",
7972 tvb_get_guint8(tvb, offset));
7978 static int ieee80211_tag_fh_hopping_table(packet_info *pinfo, proto_tree *tree,
7980 guint32 tag_len, tvbuff_t *tvb,
7981 int offset, int tag_end)
7983 /* 7.3.2.11 Hopping Pattern Table information element (9) */
7985 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7986 "Tag length %u too short, must be >= 4", tag_len);
7992 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_flag,
7993 tvb, offset, 1, ENC_BIG_ENDIAN);
7996 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_number_of_sets,
7997 tvb, offset, 1, ENC_BIG_ENDIAN);
8000 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_modulus,
8001 tvb, offset, 1, ENC_BIG_ENDIAN);
8004 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_offset,
8005 tvb, offset, 1, ENC_BIG_ENDIAN);
8008 while (offset < tag_end) {
8009 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_random_table,
8010 tvb, offset, 2, ENC_BIG_ENDIAN);
8018 add_tagged_field(packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int offset, int ftype)
8022 const guint8 *tag_data_ptr;
8023 guint32 tag_no, tag_len;
8025 char print_buff[SHORT_STR];
8026 proto_tree * orig_tree=tree;
8027 proto_item *ti = NULL, *ti_len = NULL;
8030 tag_no = tvb_get_guint8(tvb, offset);
8031 tag_len = tvb_get_guint8(tvb, offset + 1);
8032 tag_end = offset + 2 + tag_len;
8034 ti = proto_tree_add_item(orig_tree, hf_ieee80211_tag, tvb, offset, 2 + tag_len , ENC_NA);
8035 proto_item_append_text(ti, ": %s", val_to_str(tag_no, tag_num_vals, "Reserved (%d)"));
8037 tree = proto_item_add_subtree(ti, ett_80211_mgt_ie);
8039 proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_BIG_ENDIAN);
8042 ti_len = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
8046 offset += ieee80211_tag_ssid(pinfo, tree, ti, ti_len, tag_len, tvb,
8049 case TAG_SUPP_RATES:
8050 offset += ieee80211_tag_supp_rates(pinfo, tree, ti, ti_len, tag_len, tvb,
8053 case TAG_FH_PARAMETER:
8054 offset += ieee80211_tag_fh_parameter(pinfo, tree, ti_len, tag_len, tvb,
8057 case TAG_DS_PARAMETER:
8058 offset += ieee80211_tag_ds_parameter(pinfo, tree, ti, ti_len, tag_len, tvb,
8061 case TAG_CF_PARAMETER:
8062 offset += ieee80211_tag_cf_parameter(pinfo, tree, ti, ti_len, tag_len, tvb,
8066 offset += ieee80211_tag_tim(pinfo, tree, ti, ti_len, tag_len, tvb, offset);
8068 case TAG_IBSS_PARAMETER:
8069 offset += ieee80211_tag_ibss_parameter(pinfo, tree, ti, ti_len, tag_len,
8072 case TAG_COUNTRY_INFO:
8073 offset += ieee80211_tag_country_info(pinfo, tree, ti, ti_len, tag_len, tvb,
8076 case TAG_FH_HOPPING_PARAMETER:
8077 offset += ieee80211_tag_fh_hopping_parameter(pinfo, tree, ti, ti_len,
8078 tag_len, tvb, offset);
8080 case TAG_FH_HOPPING_TABLE:
8081 offset += ieee80211_tag_fh_hopping_table(pinfo, tree, ti_len, tag_len,
8082 tvb, offset, tag_end);
8085 case TAG_REQUEST: /* 7.3.2.12 Request information element (10) */
8086 while(offset < tag_end )
8088 proto_tree_add_item(tree, hf_ieee80211_tag_request, tvb, offset, 1, ENC_BIG_ENDIAN);
8093 case TAG_QBSS_LOAD: /* 7.3.2.28 BSS Load element (11) */
8094 if (tag_len < 4 || tag_len >5)
8096 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 4 or 5", tag_len);
8102 /* QBSS Version 1 */
8103 proto_item_append_text(ti, " Cisco QBSS Version 1 - non CCA");
8105 /* Extract Values */
8106 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset + 2, tag_len, 1);
8107 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN);
8108 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 4, 1, ENC_BIG_ENDIAN);
8109 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 5, 1, ENC_BIG_ENDIAN);
8111 else if (tag_len == 5)
8113 /* QBSS Version 2 */
8114 proto_item_append_text(ti, " 802.11e CCA Version");
8116 /* Extract Values */
8117 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset + 2, tag_len, 2);
8118 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN);
8119 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 4, 1, ENC_BIG_ENDIAN);
8120 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 5, 2, ENC_LITTLE_ENDIAN);
8124 case TAG_TSPEC: /* 7.3.2.30 TSPEC element (13) */
8127 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 55", tag_len);
8132 add_fixed_field(tree, tvb, offset, FIELD_QOS_TS_INFO);
8135 proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8138 proto_tree_add_item(tree, hf_ieee80211_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8141 proto_tree_add_item(tree, hf_ieee80211_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8144 proto_tree_add_item(tree, hf_ieee80211_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8147 proto_tree_add_item(tree, hf_ieee80211_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8150 proto_tree_add_item(tree, hf_ieee80211_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8153 proto_tree_add_item(tree, hf_ieee80211_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8156 proto_tree_add_item(tree, hf_ieee80211_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8159 proto_tree_add_item(tree, hf_ieee80211_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8162 proto_tree_add_item(tree, hf_ieee80211_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8165 proto_tree_add_item(tree, hf_ieee80211_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8168 proto_tree_add_item(tree, hf_ieee80211_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8171 proto_tree_add_item(tree, hf_ieee80211_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8174 proto_tree_add_item(tree, hf_ieee80211_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8177 proto_tree_add_item(tree, hf_ieee80211_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8182 case TAG_TCLAS: /* 7.3.2.31 TCLAS element (14) */
8185 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be >= 6", tag_len);
8193 proto_tree_add_item(tree, hf_ieee80211_tclas_up, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8194 type = tvb_get_guint8(tvb, offset);
8197 proto_tree_add_item(tree, hf_ieee80211_tclas_class_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8200 proto_tree_add_item(tree, hf_ieee80211_tclas_class_mask, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8206 proto_tree_add_item(tree, hf_ieee80211_tclas_src_mac_addr, tvb, offset, 6, ENC_NA);
8209 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_mac_addr, tvb, offset, 6, ENC_NA);
8212 proto_tree_add_item(tree, hf_ieee80211_tclas_ether_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8217 version = tvb_get_guint8(tvb, offset + 5);
8218 proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
8222 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN);
8224 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN);
8226 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN);
8228 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN);
8230 proto_tree_add_item(tree, hf_ieee80211_tclas_dscp, tvb, offset, 1, ENC_BIG_ENDIAN);
8232 proto_tree_add_item(tree, hf_ieee80211_tclas_protocol, tvb, offset, 1, ENC_BIG_ENDIAN);
8235 else if (version == 6)
8237 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_src, tvb, offset, 16, ENC_NA);
8239 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_dst, tvb, offset, 16, ENC_NA);
8241 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN);
8243 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN);
8245 proto_tree_add_item(tree, hf_ieee80211_tclas_flow, tvb, offset, 3, ENC_BIG_ENDIAN);
8251 proto_tree_add_item(tree, hf_ieee80211_tclas_tag_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8261 case TAG_SCHEDULE: /* 7.3.2.34 Schedule element (15) */
8264 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 14", tag_len);
8269 add_fixed_field(tree, tvb, offset, FIELD_SCHEDULE_INFO);
8272 proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8275 proto_tree_add_item(tree, hf_ieee80211_sched_srv_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8278 proto_tree_add_item(tree, hf_ieee80211_sched_spec_int, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8282 case TAG_CHALLENGE_TEXT: /* 7.3.2.8 Challenge Text element (16) */
8284 proto_tree_add_item(tree, hf_ieee80211_tag_challenge_text, tvb, offset, tag_len, ENC_NA);
8287 case TAG_POWER_CONSTRAINT: /* 7.3.2.15 Power Constraint element (32) */
8291 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 1", tag_len);
8296 proto_tree_add_item(tree, hf_ieee80211_tag_power_constraint_local, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8297 proto_item_append_text(ti, " :%d", tvb_get_guint8(tvb, offset));
8303 case TAG_POWER_CAPABILITY: /* 7.3.2.16 Power Capability element (33) */
8307 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 2", tag_len);
8312 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_min, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8313 proto_item_append_text(ti, " Min: %d", tvb_get_guint8(tvb, offset));
8316 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_max, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8317 proto_item_append_text(ti, ", Max :%d", tvb_get_guint8(tvb, offset));
8322 case TAG_TPC_REQUEST: /* 7.3.2.18 TPC Request element (34) */
8326 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 0", tag_len);
8335 case TAG_TPC_REPORT: /* 7.3.2.18 TPC Report element (35) */
8339 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 2", tag_len);
8344 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_trsmt_pow, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8345 proto_item_append_text(ti, " Transmit Power :%d", tvb_get_guint8(tvb, offset));
8348 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_link_mrg, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8349 proto_item_append_text(ti, ", Link Margin :%d", tvb_get_guint8(tvb, offset));
8355 case TAG_SUPPORTED_CHANNELS: /* 7.3.2.19 Supported Channels element (36) */
8357 proto_item *chan_item;
8358 proto_tree *chan_tree;
8362 if (tag_len % 2 == 1) {
8363 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u must be even",tag_len);
8366 while(offset < tag_end)
8368 chan_item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_channels, tvb, offset, 2, ENC_NA);
8369 proto_item_append_text(chan_item, " #%d", i);
8372 chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
8374 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_first, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8375 proto_item_append_text(chan_item, " First: %d", tvb_get_guint8(tvb, offset));
8378 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_range, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8379 proto_item_append_text(chan_item, ", Range: %d ", tvb_get_guint8(tvb, offset));
8385 case TAG_CHANNEL_SWITCH_ANN: /* 7.3.2.20 Channel Switch Announcement element (37) */
8389 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 3", tag_len);
8394 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8395 proto_item_append_text(ti, " Mode: %d", tvb_get_guint8(tvb, offset));
8398 proto_tree_add_item(tree, hf_ieee80211_csa_new_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8399 proto_item_append_text(ti, ", Number: %d ", tvb_get_guint8(tvb, offset));
8402 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8403 proto_item_append_text(ti, ", Count: %d ", tvb_get_guint8(tvb, offset));
8407 case TAG_MEASURE_REQ: /* 7.3.2.21 Measurement Request element (38) with update from 802.11k-2008 */
8410 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be >= 3", tag_len);
8414 guint8 request_type;
8415 proto_item *parent_item;
8416 proto_tree *sub_tree;
8420 proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_token, tvb, offset, 1, ENC_NA);
8423 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_mode, tvb, offset, 1, ENC_NA);
8424 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_mode_tree);
8425 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_parallel, tvb, offset, 1, ENC_NA);
8426 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_enable, tvb, offset, 1, ENC_NA);
8427 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_request, tvb, offset, 1, ENC_NA);
8428 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_report, tvb, offset, 1, ENC_NA);
8429 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_duration_mandatory, tvb, offset, 1, ENC_NA);
8430 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_reserved, tvb, offset, 1, ENC_NA);
8434 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_type, tvb, offset, 1, ENC_NA);
8435 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_type_tree);
8436 request_type = tvb_get_guint8 (tvb, offset);
8439 switch(request_type) {
8440 case 0: /* Basic Request */
8441 case 1: /* Clear channel assessment (CCA) request */
8442 case 2: /* Receive power indication (RPI) histogram request */
8445 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
8448 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
8451 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8455 case 3: /* Channel Load Request */
8456 case 4: /* Noise Histogram Request */
8458 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_regulatory_class, tvb, offset, 1, ENC_NA);
8461 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
8464 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8467 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8469 /* TODO Add Optional Subelements */
8472 case 5: /* Beacon Request */
8474 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_regulatory_class, tvb, offset, 1, ENC_NA);
8477 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
8480 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8483 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8486 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_measurement_mode, tvb, offset, 1, ENC_NA);
8489 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_bssid, tvb, offset, 6, ENC_NA);
8492 while(offset < tag_end)
8494 guint8 sub_id, sub_length, sub_tag_end;
8496 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_id, tvb, offset, 1, ENC_NA);
8497 sub_id = tvb_get_guint8(tvb, offset);
8500 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA);
8501 sub_length = tvb_get_guint8(tvb, offset);
8503 sub_tag_end = offset + sub_length;
8506 case MEASURE_REQ_BEACON_SUB_SSID: /* SSID (0) */
8507 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_ssid, tvb, offset, sub_length, ENC_ASCII|ENC_NA);
8508 offset += sub_length;
8510 case MEASURE_REQ_BEACON_SUB_BRI: /* Beacon Reporting Information (1) */
8511 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition, tvb, offset, 1, ENC_BIG_ENDIAN);
8513 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset, tvb, offset, 1, ENC_BIG_ENDIAN);
8516 case MEASURE_REQ_BEACON_SUB_RD: /* Reporting Detail (2) */
8517 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail, tvb, offset, 1, ENC_BIG_ENDIAN);
8520 case MEASURE_REQ_BEACON_SUB_REQUEST: /* Request (10) */
8521 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_request, tvb, offset, 1, ENC_BIG_ENDIAN);
8524 case MEASURE_REQ_BEACON_SUB_APCP: /* Request (51) */
8528 /* no default action */
8531 if(offset < sub_tag_end)
8533 ti = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA);
8534 expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_WARN, " Unknown Data (not interpreted)");
8535 offset = sub_tag_end;
8541 case 6: /* Frame Request */
8543 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_regulatory_class, tvb, offset, 1, ENC_NA);
8546 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
8549 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8552 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8555 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_frame_request_type, tvb, offset, 1, ENC_NA);
8558 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mac_address, tvb, offset, 6, ENC_NA);
8561 /* TODO Add Optional Subelements */
8564 case 7: /* BSTA Statistics Request */
8566 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_peer_mac_address, tvb, offset, 6, ENC_NA);
8569 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8572 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8575 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_group_id, tvb, offset, 1, ENC_NA);
8578 /* TODO Add Optional Subelements */
8581 case 8: /* Location Configuration Indication (LCI) Request */
8583 case 9: /* Transmit Stream Measurement Request */
8585 case 255: /* Measurement Pause Request*/
8587 default: /* unknown */
8593 case TAG_MEASURE_REP: /* 7.3.2.22 Measurement Report element (39) with update from 802.11k-2008 */
8596 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be >= 3", tag_len);
8600 proto_item *parent_item;
8601 proto_tree *sub_tree;
8605 proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_measurement_token, tvb, offset, 1, ENC_NA);
8608 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_mode, tvb, offset, 1, ENC_NA);
8609 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_mode_tree);
8610 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_late, tvb, offset, 1, ENC_NA);
8611 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_incapable, tvb, offset, 1, ENC_NA);
8612 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_refused, tvb, offset, 1, ENC_NA);
8613 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_reserved, tvb, offset, 1, ENC_NA);
8616 report_type = tvb_get_guint8(tvb, offset);
8617 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8618 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_type_tree);
8623 switch (report_type) {
8624 case 0: /* Basic Report */
8626 proto_tree *sub_tree_map_field;
8628 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
8631 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
8634 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8638 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_basic_map_field, tvb, offset, 1, ENC_NA);
8639 sub_tree_map_field = proto_item_add_subtree(parent_item, ett_tag_measure_report_basic_map_tree);
8640 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_bss, tvb, offset, 1, ENC_NA);
8641 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_odfm, tvb, offset, 1, ENC_NA);
8642 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_unident_signal, tvb, offset, 1, ENC_NA);
8643 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_radar, tvb, offset, 1, ENC_NA);
8644 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_unmeasured, tvb, offset, 1, ENC_NA);
8645 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_reserved, tvb, offset, 1, ENC_NA);
8648 case 1: /* Clear channel assessment (CCA) report */
8649 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
8652 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
8655 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8658 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_cca_busy_fraction, tvb, offset, 1, ENC_NA);
8661 case 2: /* Receive power indication (RPI) histogram report */
8662 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
8665 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
8668 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8671 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report, tvb, offset, 8, ENC_NA);
8672 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_rpi_tree);
8674 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_0, tvb, offset, 1, ENC_NA);
8677 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_1, tvb, offset, 1, ENC_NA);
8680 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_2, tvb, offset, 1, ENC_NA);
8683 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_3, tvb, offset, 1, ENC_NA);
8686 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_4, tvb, offset, 1, ENC_NA);
8689 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_5, tvb, offset, 1, ENC_NA);
8692 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_6, tvb, offset, 1, ENC_NA);
8695 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_7, tvb, offset, 1, ENC_NA);
8698 case 3: /* Channel Load Report */
8700 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_regulatory_class, tvb, offset, 1, ENC_NA);
8703 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
8706 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
8709 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8712 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_load, tvb, offset, 1, ENC_NA);
8715 /* TODO Add Optional Subelements */
8718 case 4: /* Noise Histogram Report */
8719 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_regulatory_class, tvb, offset, 1, ENC_NA);
8722 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
8725 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
8728 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8731 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA);
8734 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_anpi, tvb, offset, 1, ENC_NA);
8737 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_0, tvb, offset, 1, ENC_NA);
8740 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_1, tvb, offset, 1, ENC_NA);
8743 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_2, tvb, offset, 1, ENC_NA);
8746 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_3, tvb, offset, 1, ENC_NA);
8749 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_4, tvb, offset, 1, ENC_NA);
8752 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_5, tvb, offset, 1, ENC_NA);
8755 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_6, tvb, offset, 1, ENC_NA);
8758 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_7, tvb, offset, 1, ENC_NA);
8761 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_8, tvb, offset, 1, ENC_NA);
8764 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_9, tvb, offset, 1, ENC_NA);
8767 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_10, tvb, offset, 1, ENC_NA);
8770 /* TODO Add Optional Subelements */
8772 case 5: /* Beacon Report */
8774 proto_tree *sub_tree_frame_info;
8776 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_regulatory_class, tvb, offset, 1, ENC_NA);
8779 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
8782 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
8785 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8788 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_frame_info, tvb, offset, 1, ENC_NA);
8789 sub_tree_frame_info = proto_item_add_subtree(parent_item, ett_tag_measure_report_frame_tree);
8790 proto_tree_add_item(sub_tree_frame_info, hf_ieee80211_tag_measure_report_frame_info_phy_type, tvb, offset, 1, ENC_NA);
8791 proto_tree_add_item(sub_tree_frame_info, hf_ieee80211_tag_measure_report_frame_info_frame_type, tvb, offset, 1, ENC_NA);
8794 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rcpi, tvb, offset, 1, ENC_NA);
8797 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rsni, tvb, offset, 1, ENC_NA);
8800 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_bssid, tvb, offset, 6, ENC_NA);
8803 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA);
8806 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8808 /* TODO Add Optional Subelements */
8811 case 6: /* Frame Report */
8812 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_regulatory_class, tvb, offset, 1, ENC_NA);
8815 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
8818 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
8821 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8824 /* TODO Add Optional Subelements */
8826 case 7: /* BSTA Statistics Report */
8828 case 8: /* Location Configuration Information Report element */
8830 case 9: /* Transmit Stream Measurement Report */
8832 default: /* unknown */
8837 case TAG_QUIET: /* 7.3.2.23 Quiet element (40) */
8840 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 6", tag_len);
8845 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_count, tvb, offset, 1, ENC_NA);
8846 proto_item_append_text(ti, " Count: %d", tvb_get_guint8(tvb, offset));
8849 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_period, tvb, offset, 1, ENC_NA);
8850 proto_item_append_text(ti, " Period: %d", tvb_get_guint8(tvb, offset));
8853 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8854 proto_item_append_text(ti, " Duration: %d", tvb_get_letohs(tvb, offset));
8857 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8858 proto_item_append_text(ti, " Offset: %d", tvb_get_letohs(tvb, offset));
8863 case TAG_IBSS_DFS: /* 7.3.2.24 IBSS DFS element (41) */
8866 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be >= 7", tag_len);
8870 proto_item *ti_sup_map;
8871 proto_tree *sub_map_tree;
8874 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_owner, tvb, offset, 6, ENC_NA);
8875 proto_item_append_text(ti, " Owner: %s", tvb_ether_to_str(tvb, offset));
8878 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_recovery_interval, tvb, offset, 1, ENC_NA);
8881 while(offset < tag_end)
8883 ti_sup_map = proto_tree_add_item(tree, hf_ieee80211_tag_dfs_channel_map, tvb, offset, 2, ENC_NA);
8884 sub_map_tree = proto_item_add_subtree(ti_sup_map, ett_tag_dfs_map_tree);
8885 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_channel_number, tvb, offset, 1, ENC_NA);
8886 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_map, tvb, offset, 1, ENC_NA);
8891 case TAG_ERP_INFO: /* 7.3.2.13 ERP Information element (42) */
8892 case TAG_ERP_INFO_OLD:
8895 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 1", tag_len);
8900 proto_tree *erp_tree;
8904 ti_erp = proto_tree_add_item(tree, hf_ieee80211_tag_erp_info, tvb, offset, 1, ENC_NA);
8905 erp_tree = proto_item_add_subtree(ti_erp, ett_tag_erp_info_tree);
8906 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_erp_present, tvb, offset, 1, ENC_NA);
8907 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_use_protection, tvb, offset, 1, ENC_NA);
8908 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_barker_preamble_mode, tvb, offset, 1, ENC_NA);
8909 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_reserved, tvb, offset, 1, ENC_NA);
8914 case TAG_TS_DELAY: /* 7.3.2.32 TS Delay element (43) */
8917 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 4", tag_len);
8922 proto_tree_add_item(tree, hf_ieee80211_ts_delay, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8923 proto_item_append_text(ti, " : %d", tvb_get_ntohl(tvb, offset) );
8927 case TAG_TCLAS_PROCESS: /* 7.3.2.33 TCLAS Processing element (44) */
8930 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 1", tag_len);
8935 proto_tree_add_item(tree, hf_ieee80211_tclas_process, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8936 proto_item_append_text(ti, " : %s", val_to_str(tvb_get_guint8(tvb, offset), ieee80211_tclas_process_flag, "Unknown %d"));
8940 case TAG_QOS_CAPABILITY: /* 7.3.2.35 QoS Capability element (46) */
8943 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 1", tag_len);
8947 /* proto_item *ti_cap;
8948 proto_tree *cap_tree; */
8950 offset = dissect_qos_capability(tree, tvb, offset, ftype);
8954 case TAG_RSN_IE: /* 7.3.2.25 RSN information element (48) */
8957 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be >= 20", tag_len);
8962 offset = dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len);
8965 case TAG_EXT_SUPP_RATES: /* 7.3.2.14 Extended Supported Rates element (50) */
8968 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be greater than 0", tag_len);
8973 while(offset < tag_end)
8975 proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA);
8976 proto_item_append_text(ti, " %s,", val_to_str_const(tvb_get_guint8(tvb, offset), ieee80211_supported_rates_vals, "Unknown Rate") );
8979 proto_item_append_text(ti, " [Mbit/sec]");
8982 case TAG_EXTENDED_CAPABILITIES: /* 7.3.2.27 Extended Capabilities information element (127) */
8984 proto_item *ti_ex_cap;
8985 proto_tree *ex_cap_tree;
8989 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be greater than 0", tag_len);
8994 /* Extended Capability octet 0 */
8995 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
8996 proto_item_append_text(ti_ex_cap, " (octet 0)");
8997 ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_ex_cap);
8998 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b0, tvb, offset, 1, ENC_NA);
8999 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b1, tvb, offset, 1, ENC_NA);
9000 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b2, tvb, offset, 1, ENC_NA);
9001 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b3, tvb, offset, 1, ENC_NA);
9002 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b4, tvb, offset, 1, ENC_NA);
9003 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b6, tvb, offset, 1, ENC_NA);
9006 /* Extended Capability octet 1 */
9007 if (offset >= tag_end) {
9010 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
9011 proto_item_append_text(ti_ex_cap, " (octet 1)");
9014 /* Extended Capability octet 2 */
9015 if (offset >= tag_end) {
9018 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
9019 proto_item_append_text(ti_ex_cap, " (octet 2)");
9022 /* Extended Capability octet 3 */
9023 if (offset >= tag_end) {
9026 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
9027 proto_item_append_text(ti_ex_cap, " (octet 3)");
9028 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap);
9029 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b27, tvb, offset, 1, ENC_NA);
9030 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b28, tvb, offset, 1, ENC_NA);
9031 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b29, tvb, offset, 1, ENC_NA);
9032 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b30, tvb, offset, 1, ENC_NA);
9033 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b31, tvb, offset, 1, ENC_NA);
9036 /* Extended Capability octet 4 */
9037 if (offset >= tag_end) {
9040 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
9041 proto_item_append_text(ti_ex_cap, " (octet 4)");
9042 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap);
9043 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b32, tvb, offset, 1, ENC_NA);
9044 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b33, tvb, offset, 1, ENC_NA);
9045 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b34, tvb, offset, 1, ENC_NA);
9046 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b36, tvb, offset, 1, ENC_NA);
9047 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b37, tvb, offset, 1, ENC_NA);
9048 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b38, tvb, offset, 1, ENC_NA);
9049 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b39, tvb, offset, 1, ENC_NA);
9052 /* Extended Capability octet 5 */
9053 if (offset >= tag_end) {
9056 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
9057 proto_item_append_text(ti_ex_cap, " (octet 5)");
9058 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap);
9059 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b40, tvb, offset, 1, ENC_NA);
9060 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_serv_int_granularity, tvb, offset, 1, ENC_NA);
9065 case TAG_CISCO_CCX1_CKIP: /* Cisco CCX1 CKIP + Device Name (133) */
9067 * If Aironet IE support is enabled, the access point sends an Aironet
9068 * IE 0x85 (which contains the access point name, load, number of
9069 * associated clients, and so on) in the beacon and probe responses of
9070 * this WLAN, and the controller sends Aironet IEs 0x85 and 0x95
9071 * (which contains the management IP address of the controller and
9072 * the IP address of the access point) in the reassociation response
9073 * if it receives Aironet IE 0x85 in the reassociation request.
9078 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u too short, must be >= 26", tag_len);
9082 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown, tvb, offset, 10, ENC_NA);
9085 /* The Name of the sending device starts at offset 10 and is up to
9086 15 or 16 bytes in length, \0 padded */
9087 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_name, tvb, offset, 16, ENC_ASCII|ENC_NA);
9090 /* Total number off associated clients and repeater access points */
9091 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_clients, tvb, offset, 1, ENC_NA);
9095 case TAG_VENDOR_SPECIFIC_IE: /* 7.3.2.26 Vendor Specific information element (221) */
9098 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be >= 3", tag_len);
9104 oui = tvb_get_ntoh24(tvb, offset);
9105 tag_tvb = tvb_new_subset(tvb, offset, tag_len, tag_len);
9106 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
9107 proto_item_append_text(ti, ": %s", uint_get_manuf_name(oui));
9110 proto_tree_add_item(ti, hf_ieee80211_tag_vendor_oui_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
9114 /* 802.11 specific vendor ids */
9115 # define WPAWME_OUI 0x0050F2
9116 # define RSNOUI_VAL 0x000FAC
9117 # define PRE11N_OUI 0x00904c
9119 offset = dissect_vendor_ie_wpawme(tree, tvb, offset + 3, tag_len, ftype);
9122 dissect_vendor_ie_rsn(ti, tree, tag_tvb);
9125 dissect_vendor_ie_ht(tvb, pinfo, tree, offset, ti, ti_len, tag_len);
9128 dissect_vendor_ie_wfa(pinfo, ti, tag_tvb);
9131 /* Normal IEEE vendor ids (from oui.h) */
9132 case OUI_CISCOWL: /* Cisco Wireless (Aironet) */
9133 dissect_vendor_ie_aironet(ti, tree, tvb, offset + 3, tag_len - 3);
9136 dissect_vendor_ie_marvell(ti, tree, tvb, offset + 3, tag_len - 3);
9139 dissect_vendor_ie_atheros(ti, tree, tvb, offset + 3, tag_len - 3, pinfo, ti_len);
9142 proto_tree_add_string (tree, hf_ieee80211_tag_interpretation, tvb, offset + 3,
9143 tag_len - 3, "Not interpreted");
9150 case TAG_MOBILITY_DOMAIN:
9151 dissect_mobility_domain(tree, tvb, offset + 2, tag_len);
9154 case TAG_FAST_BSS_TRANSITION:
9155 dissect_fast_bss_transition(tree, tvb, offset + 2, tag_len);
9159 dissect_mmie(tree, tvb, offset + 2, tag_len);
9163 dissect_time_zone(tree, tvb, offset + 2, tag_len);
9166 case TAG_TIMEOUT_INTERVAL:
9167 dissect_timeout_interval(tree, tvb, offset + 2, tag_len);
9170 case TAG_LINK_IDENTIFIER:
9171 dissect_link_identifier(tree, tvb, offset + 2, tag_len);
9174 case TAG_WAKEUP_SCHEDULE:
9175 dissect_wakeup_schedule(tree, tvb, offset + 2, tag_len);
9178 case TAG_CHANNEL_SWITCH_TIMING:
9179 dissect_channel_switch_timing(tree, tvb, offset + 2, tag_len);
9182 case TAG_PTI_CONTROL:
9183 dissect_pti_control(tree, tvb, offset + 2, tag_len);
9186 case TAG_PU_BUFFER_STATUS:
9187 dissect_pu_buffer_status(tree, tvb, offset + 2, tag_len);
9190 case TAG_HT_CAPABILITY:
9191 dissect_ht_capability_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len, FALSE);
9195 dissect_ht_info_ie_1_1(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
9198 case TAG_SECONDARY_CHANNEL_OFFSET:
9199 dissect_secondary_channel_offset_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
9203 dissect_time_adv(tree, tvb, offset + 2);
9206 case TAG_MESH_PEERING_MGMT:
9208 guint start = offset + 2;
9210 proto_tree_add_item (tree, hf_ieee80211_mesh_peering_proto, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9212 proto_tree_add_item (tree, hf_ieee80211_mesh_peering_local_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9214 switch (tvb_get_guint8(tvb, 1))
9215 { /* Self-protected action field */
9216 case SELFPROT_ACTION_MESH_PEERING_OPEN:
9219 case SELFPROT_ACTION_MESH_PEERING_CONFIRM:
9220 proto_tree_add_item (tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9224 case SELFPROT_ACTION_MESH_PEERING_CLOSE:
9225 if (tag_len == 8 || tag_len == 24)
9227 proto_tree_add_item (tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9230 offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
9233 /* unexpected values */
9235 proto_tree_add_text (tree, tvb, offset, tag_len, "Unexpected Self-protected action");
9239 if (tag_len - (offset - start) == 16)
9241 proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA);
9247 case TAG_MESH_CONFIGURATION:
9250 proto_tree_add_item (tree, hf_ieee80211_mesh_config_path_sel_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9251 proto_tree_add_item (tree, hf_ieee80211_mesh_config_path_sel_metric, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
9252 proto_tree_add_item (tree, hf_ieee80211_mesh_config_congestion_control, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
9253 proto_tree_add_item (tree, hf_ieee80211_mesh_config_sync_method, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
9254 proto_tree_add_item (tree, hf_ieee80211_mesh_config_auth_protocol, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
9255 proto_tree_add_item (tree, hf_ieee80211_mesh_config_formation_info, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
9256 proto_tree_add_item (tree, hf_ieee80211_mesh_config_capability, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
9264 proto_tree_add_item(tree, hf_ieee80211_mesh_id, tvb, offset, tag_len, ENC_ASCII|ENC_NA);
9266 col_append_fstr(pinfo->cinfo, COL_INFO, ", MESHID=%s", tvb_get_ephemeral_string(tvb, offset, tag_len));
9267 proto_item_append_text(ti, ": %s", tvb_get_ephemeral_string(tvb, offset, tag_len));
9275 guint8 flags = tvb_get_guint8(tvb, offset + 2);
9278 proto_tree *subtree;
9281 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9283 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9285 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9287 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_pdid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9289 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA);
9291 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9294 if (flags & (1<<6)) {
9295 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_orig_ext, tvb, offset, 6, ENC_NA);
9298 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9300 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9302 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9303 targs = tvb_get_guint8 (tvb, offset);
9305 for (i = 0; i < targs; i++) {
9306 item = proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9307 subtree = proto_item_add_subtree(item, ett_hwmp_targ_flags_tree);
9308 proto_tree_add_boolean(subtree, hf_ieee80211_ff_hwmp_targ_to_flags, tvb, offset, 1, flags);
9309 proto_tree_add_boolean(subtree, hf_ieee80211_ff_hwmp_targ_usn_flags, tvb, offset, 1, flags);
9311 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
9313 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9321 guint8 flags = tvb_get_guint8(tvb, offset + 2);
9323 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9325 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9327 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset , 1, ENC_LITTLE_ENDIAN);
9329 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
9331 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9333 if (flags & (1<<6)) {
9334 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA);
9337 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9339 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9341 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA);
9343 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9353 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9355 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_BIG_ENDIAN);
9356 targs = tvb_get_guint8 (tvb, offset);
9358 for (i = 0; i < targs; i++) {
9359 guint8 flags = tvb_get_guint8(tvb, offset);
9361 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9363 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
9365 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9367 if (flags & (1<<6)) {
9368 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA);
9371 offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
9379 proto_tree_add_item (tree, hf_ieee80211_rann_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
9381 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_BIG_ENDIAN);
9383 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_BIG_ENDIAN);
9385 proto_tree_add_item (tree, hf_ieee80211_rann_root_sta, tvb, offset, 6, ENC_NA);
9387 proto_tree_add_item (tree, hf_ieee80211_rann_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9389 proto_tree_add_item (tree, hf_ieee80211_rann_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9391 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9398 case TAG_INTERWORKING:
9399 dissect_interworking(pinfo, tree, ti, tvb, offset);
9401 case TAG_ADVERTISEMENT_PROTOCOL:
9403 dissect_advertisement_protocol(pinfo, tree, tvb, offset, NULL);
9406 case TAG_ROAMING_CONSORTIUM:
9407 dissect_roaming_consortium(pinfo, tree, ti, tvb, offset);
9409 case TAG_AP_CHANNEL_REPORT: /* 7.3.2.36 AP Channel Report element */
9410 dissect_ap_channel_report(tvb, pinfo, tree, offset + 2, tag_len, ti_len, tag_end, ti);
9412 case TAG_NEIGHBOR_REPORT:
9414 #define SUB_TAG_TSF_INFO 0x01
9415 #define SUB_TAG_MEASUREMENT_PILOT_INFO 0x02
9416 #define SUB_TAG_HT_CAPABILITIES 0x03
9417 #define SUB_TAG_HT_INFO 0x04
9418 #define SUB_TAG_SEC_CHANNEL_OFFSET 0x05
9419 #define SUB_TAG_VENDOR_SPECIFIC 0xDD
9424 guint32 bssid_info, info, sub_tag_length;
9425 proto_item *parent_item;
9426 proto_tree *bssid_info_subtree, *sub_tag_tree;
9427 tvbuff_t *volatile sub_tag_tvb = NULL;
9431 proto_tree_add_text (tree, tvb, offset + 2, tag_len,
9432 "Neighbor Report: Error: Tag length must be at least 13 bytes long");
9436 tag_offset = offset;
9438 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid, tvb, offset, 6, ENC_NA);
9440 /*** Begin: BSSID Information ***/
9442 bssid_info = tvb_get_letohl (tvb, offset);
9443 parent_item = proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_bssid_info, tvb, offset, 4, bssid_info, "BSSID Information: 0x%08X", bssid_info);
9444 bssid_info_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_tree);
9446 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reachability, tvb, offset, 1, bssid_info);
9447 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_security, tvb, offset, 1, bssid_info);
9448 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_key_scope, tvb, offset, 1, bssid_info);
9449 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng, tvb, offset, 1, bssid_info);
9450 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos, tvb, offset, 1, bssid_info);
9451 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd, tvb, offset, 1, bssid_info);
9452 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt, tvb, offset, 1, bssid_info);
9453 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback, tvb, offset+1, 1, bssid_info);
9454 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback, tvb, offset+1, 1, bssid_info);
9455 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain, tvb, offset+1, 1, bssid_info);
9456 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput, tvb, offset+1, 1, bssid_info);
9457 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reserved, tvb, offset+1, 3, (bssid_info & 0xfffff000) >> 12);
9458 /*** End: BSSID Information ***/
9461 info = tvb_get_guint8 (tvb, offset);
9462 proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_reg_class, tvb, offset, 1, info, "Regulatory Class: 0x%02X", info);
9465 info = tvb_get_guint8 (tvb, offset);
9466 proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_channel_number, tvb, offset, 1, info, "Channel Number: 0x%02X", info);
9469 info = tvb_get_guint8 (tvb, offset);
9470 proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_phy_type, tvb, offset, 1, info, "PHY Type: 0x%02X", info);
9473 sub_tag_id = tvb_get_guint8 (tvb, offset);
9475 sub_tag_length = tvb_get_guint8 (tvb, offset);
9478 sub_tag_tvb = tvb_new_subset(tvb, offset, sub_tag_length, -1);
9480 switch (sub_tag_id) {
9481 case SUB_TAG_TSF_INFO:
9484 case SUB_TAG_MEASUREMENT_PILOT_INFO:
9487 case SUB_TAG_HT_CAPABILITIES:
9488 parent_item = proto_tree_add_text (tree, tvb, offset, sub_tag_length, "HT Capabilities");
9489 sub_tag_tree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_sub_tag_tree);
9490 dissect_ht_capability_ie(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len, FALSE);
9492 case SUB_TAG_HT_INFO:
9493 parent_item = proto_tree_add_text (tree, tvb, offset, sub_tag_length, "HT Information");
9494 sub_tag_tree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_sub_tag_tree);
9495 dissect_ht_info_ie_1_1(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len);
9497 case SUB_TAG_SEC_CHANNEL_OFFSET:
9498 parent_item = proto_tree_add_text (tree, tvb, offset, sub_tag_length, "Secondary Channel Offset");
9499 sub_tag_tree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_sub_tag_tree);
9500 dissect_secondary_channel_offset_ie(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len);
9502 case SUB_TAG_VENDOR_SPECIFIC:
9507 offset += sub_tag_length;
9509 if (tag_len > (offset - tag_offset))
9511 proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Unknown Data");
9517 case TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT:
9523 proto_tree_add_text (tree, tvb, offset + 2, tag_len,
9524 "Extended Channel Switch Announcement: Error: Tag length must be exactly 4 bytes long");
9529 tag_offset = offset;
9531 offset+= add_fixed_field(tree, tvb, offset, FIELD_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT);
9533 if (tag_len > (offset - tag_offset))
9535 proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Unknown Data");
9540 case TAG_SUPPORTED_REGULATORY_CLASSES:
9542 guint8 current_field;
9546 proto_tree_add_text (tree, tvb, offset + 2, tag_len,
9547 "Supported Regulatory Classes: Error: Tag length must be at least 2 bytes long");
9549 } else if (tag_len > 32) {
9550 proto_tree_add_text (tree, tvb, offset + 2, tag_len,
9551 "Supported Regulatory Classes: Error: Tag length must be no more than 32 bytes long");
9557 current_field = tvb_get_guint8 (tvb, offset);
9558 proto_tree_add_uint(tree, hf_ieee80211_tag_supported_reg_classes_current, tvb, offset, 1, current_field);
9561 /* Partially taken from the ssid section */
9562 tag_data_ptr = tvb_get_ptr (tvb, offset, tag_len);
9563 for (i = 0, n = 0; i < tag_len && n < SHORT_STR; i++) {
9564 ret = g_snprintf (print_buff + n, SHORT_STR - n, (i == tag_len-1)?"%d":"%d, ", tag_data_ptr[i]);
9565 if (ret >= SHORT_STR - n) {
9566 /* ret >= <buf_size> means buffer truncated */
9571 proto_tree_add_string (tree, hf_ieee80211_tag_supported_reg_classes_alternate, tvb, offset, tag_len, print_buff);
9576 tvb_ensure_bytes_exist (tvb, offset + 2, tag_len);
9577 proto_tree_add_string (tree, hf_ieee80211_tag_interpretation, tvb, offset + 1 + 1,
9578 tag_len, "Not interpreted");
9579 proto_item_append_text(ti, ": Tag %u Len %u", tag_no, tag_len);
9582 if(offset < tag_end){
9583 /* TODO: add Expert info to indicate there is unknown data ! but all tagged option don't yet return offset.
9584 For the moment, this code only remove Clang Warnings about not used offset... */
9586 return tag_len + 1 + 1;
9590 ieee_80211_add_tagged_parameters (tvbuff_t * tvb, int offset, packet_info * pinfo,
9591 proto_tree * tree, int tagged_parameters_len, int ftype)
9595 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
9596 while (tagged_parameters_len > 0) {
9597 if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype))==0)
9599 if (next_len > tagged_parameters_len) {
9600 /* XXX - flag this as an error? */
9601 next_len = tagged_parameters_len;
9604 tagged_parameters_len -= next_len;
9608 /* ************************************************************************* */
9609 /* Dissect 802.11 management frame */
9610 /* ************************************************************************* */
9612 dissect_ieee80211_mgt (guint16 fcf, tvbuff_t * tvb, packet_info * pinfo,
9615 proto_item *ti = NULL;
9616 proto_tree *mgt_tree;
9617 proto_tree *fixed_tree;
9618 proto_tree *tagged_tree;
9620 int tagged_parameter_tree_len;
9623 ieee80211_tvb_invalid = FALSE;
9625 CHECK_DISPLAY_AS_X(data_handle,proto_wlan_mgt, tvb, pinfo, tree);
9627 ti = proto_tree_add_item (tree, proto_wlan_mgt, tvb, 0, -1, ENC_NA);
9628 mgt_tree = proto_item_add_subtree (ti, ett_80211_mgt);
9630 switch (COMPOSE_FRAME_TYPE(fcf))
9634 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 4);
9635 add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
9636 add_fixed_field(fixed_tree, tvb, 2, FIELD_LISTEN_IVAL);
9637 offset = 4; /* Size of fixed fields */
9639 tagged_parameter_tree_len =
9640 tvb_reported_length_remaining(tvb, offset);
9641 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
9642 tagged_parameter_tree_len);
9643 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
9644 tagged_parameter_tree_len, MGT_ASSOC_REQ);
9648 case MGT_ASSOC_RESP:
9649 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6);
9650 add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
9651 add_fixed_field(fixed_tree, tvb, 2, FIELD_STATUS_CODE);
9652 add_fixed_field(fixed_tree, tvb, 4, FIELD_ASSOC_ID);
9653 offset = 6; /* Size of fixed fields */
9655 tagged_parameter_tree_len =
9656 tvb_reported_length_remaining(tvb, offset);
9657 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
9658 tagged_parameter_tree_len);
9659 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
9660 tagged_parameter_tree_len, MGT_ASSOC_RESP);
9664 case MGT_REASSOC_REQ:
9665 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 10);
9666 add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
9667 add_fixed_field(fixed_tree, tvb, 2, FIELD_LISTEN_IVAL);
9668 add_fixed_field(fixed_tree, tvb, 4, FIELD_CURRENT_AP_ADDR);
9669 offset = 10; /* Size of fixed fields */
9671 tagged_parameter_tree_len =
9672 tvb_reported_length_remaining(tvb, offset);
9673 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
9674 tagged_parameter_tree_len);
9675 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
9676 tagged_parameter_tree_len, MGT_REASSOC_REQ);
9679 case MGT_REASSOC_RESP:
9680 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6);
9681 add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
9682 add_fixed_field(fixed_tree, tvb, 2, FIELD_STATUS_CODE);
9683 add_fixed_field(fixed_tree, tvb, 4, FIELD_ASSOC_ID);
9684 offset = 6; /* Size of fixed fields */
9686 tagged_parameter_tree_len =
9687 tvb_reported_length_remaining(tvb, offset);
9688 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
9689 tagged_parameter_tree_len);
9690 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
9691 tagged_parameter_tree_len, MGT_REASSOC_RESP);
9697 tagged_parameter_tree_len =
9698 tvb_reported_length_remaining(tvb, offset);
9699 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
9700 tagged_parameter_tree_len);
9701 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
9702 tagged_parameter_tree_len, MGT_PROBE_REQ);
9705 case MGT_PROBE_RESP:
9707 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12);
9708 add_fixed_field(fixed_tree, tvb, 0, FIELD_TIMESTAMP);
9709 add_fixed_field(fixed_tree, tvb, 8, FIELD_BEACON_INTERVAL);
9710 add_fixed_field(fixed_tree, tvb, 10, FIELD_CAP_INFO);
9711 offset = 12; /* Size of fixed fields */
9713 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
9714 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset, tagged_parameter_tree_len);
9715 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_PROBE_RESP);
9718 case MGT_MEASUREMENT_PILOT:
9720 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12);
9721 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_TIMESTAMP);
9722 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_MEASUREMENT_PILOT_INT);
9723 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_BEACON_INTERVAL);
9724 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_CAP_INFO);
9725 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_COUNTRY_STR);
9726 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_MAX_REG_PWR);
9727 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_MAX_TX_PWR);
9728 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_TX_PWR_USED);
9729 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_TRANSCEIVER_NOISE_FLOOR);
9730 /* TODO DS Parameter Set ??? */
9732 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
9733 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset, tagged_parameter_tree_len);
9734 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_MEASUREMENT_PILOT);
9737 case MGT_BEACON: /* Dissect protocol payload fields */
9738 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12);
9739 add_fixed_field(fixed_tree, tvb, 0, FIELD_TIMESTAMP);
9740 add_fixed_field(fixed_tree, tvb, 8, FIELD_BEACON_INTERVAL);
9741 add_fixed_field(fixed_tree, tvb, 10, FIELD_CAP_INFO);
9742 offset = 12; /* Size of fixed fields */
9744 tagged_parameter_tree_len =
9745 tvb_reported_length_remaining(tvb, offset);
9746 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
9747 tagged_parameter_tree_len);
9748 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
9749 tagged_parameter_tree_len, MGT_BEACON);
9756 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 2);
9757 add_fixed_field(fixed_tree, tvb, 0, FIELD_REASON_CODE);
9758 offset = 2; /* Size of fixed fields */
9759 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
9760 if (tagged_parameter_tree_len > 0) {
9761 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
9762 tagged_parameter_tree_len);
9763 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
9764 tagged_parameter_tree_len, MGT_DISASS);
9768 case MGT_AUTHENTICATION:
9769 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6);
9770 add_fixed_field(fixed_tree, tvb, 0, FIELD_AUTH_ALG);
9771 add_fixed_field(fixed_tree, tvb, 2, FIELD_AUTH_TRANS_SEQ);
9772 add_fixed_field(fixed_tree, tvb, 4, FIELD_STATUS_CODE);
9773 offset = 6; /* Size of fixed fields */
9775 tagged_parameter_tree_len =
9776 tvb_reported_length_remaining(tvb, offset);
9777 if (tagged_parameter_tree_len > 0)
9779 tagged_tree = get_tagged_parameter_tree (mgt_tree,
9782 tagged_parameter_tree_len);
9783 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
9784 tagged_parameter_tree_len, MGT_AUTHENTICATION);
9788 case MGT_DEAUTHENTICATION:
9789 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 2);
9790 add_fixed_field(fixed_tree, tvb, 0, FIELD_REASON_CODE);
9791 offset = 2; /* Size of fixed fields */
9792 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
9793 if (tagged_parameter_tree_len > 0) {
9794 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
9795 tagged_parameter_tree_len);
9796 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
9797 tagged_parameter_tree_len, MGT_DEAUTHENTICATION);
9803 proto_item *lcl_fixed_hdr;
9804 proto_tree *lcl_fixed_tree;
9805 lcl_fixed_hdr = proto_tree_add_text(mgt_tree, tvb, 0, 0, "Fixed parameters");
9806 lcl_fixed_tree = proto_item_add_subtree (lcl_fixed_hdr, ett_fixed_parameters);
9808 offset += add_fixed_field(lcl_fixed_tree, tvb, 0, FIELD_ACTION);
9810 proto_item_set_len(lcl_fixed_hdr, offset);
9811 if (ieee80211_tvb_invalid)
9812 break; /* Buffer not available for further processing */
9813 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
9814 if (tagged_parameter_tree_len > 0)
9816 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
9817 tagged_parameter_tree_len);
9818 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
9819 tagged_parameter_tree_len, MGT_ACTION);
9823 case MGT_ACTION_NO_ACK:
9825 proto_item *lcl_fixed_hdr;
9826 proto_tree *lcl_fixed_tree;
9827 lcl_fixed_hdr = proto_tree_add_text(mgt_tree, tvb, 0, 0, "Fixed parameters");
9828 lcl_fixed_tree = proto_item_add_subtree (lcl_fixed_hdr, ett_fixed_parameters);
9830 offset += add_fixed_field(lcl_fixed_tree, tvb, 0, FIELD_ACTION);
9832 proto_item_set_len(lcl_fixed_hdr, offset);
9833 if (ieee80211_tvb_invalid)
9834 break; /* Buffer not available for further processing */
9835 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
9836 if (tagged_parameter_tree_len > 0)
9838 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
9839 tagged_parameter_tree_len);
9840 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
9841 tagged_parameter_tree_len, MGT_ACTION_NO_ACK);
9845 case MGT_ARUBA_WLAN:
9847 proto_item *aruba_hdr;
9848 proto_tree *aruba_tree;
9850 type = tvb_get_ntohs(tvb, offset);
9852 aruba_hdr = proto_tree_add_text(mgt_tree, tvb, 0, 0, "Aruba Management");
9853 aruba_tree = proto_item_add_subtree(aruba_hdr, ett_fixed_parameters);
9855 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba, tvb, offset, 2, ENC_BIG_ENDIAN);
9857 /* HeartBeat Sequence */
9858 if ( type == 0x0005 )
9860 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_hb_seq, tvb, offset, 8, ENC_BIG_ENDIAN);
9863 if ( type == 0x0003 )
9865 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_mtu, tvb, offset, 2, ENC_BIG_ENDIAN);
9873 set_src_addr_cols(packet_info *pinfo, const guint8 *addr, const char *type)
9875 col_add_fstr(pinfo->cinfo, COL_RES_DL_SRC, "%s (%s)",
9876 get_ether_name(addr), type);
9877 col_add_str(pinfo->cinfo, COL_UNRES_DL_SRC, ether_to_str(addr));
9881 set_dst_addr_cols(packet_info *pinfo, const guint8 *addr, const char *type)
9883 col_add_fstr(pinfo->cinfo, COL_RES_DL_DST, "%s (%s)",
9884 get_ether_name(addr), type);
9885 col_add_str(pinfo->cinfo, COL_UNRES_DL_DST, ether_to_str(addr));
9889 crc32_802_tvb_padded(tvbuff_t *tvb, guint hdr_len, guint hdr_size, guint len)
9893 c_crc = crc32_ccitt_tvb(tvb, hdr_len);
9894 c_crc = crc32_ccitt_seed(tvb_get_ptr(tvb, hdr_size, len), len, ~c_crc);
9897 c_crc = ((unsigned char)(c_crc>>0)<<24) |
9898 ((unsigned char)(c_crc>>8)<<16) |
9899 ((unsigned char)(c_crc>>16)<<8) |
9900 ((unsigned char)(c_crc>>24)<<0);
9912 /* ************************************************************************* */
9913 /* Dissect 802.11 frame */
9914 /* ************************************************************************* */
9917 * The 802.11n specification makes some fairly significant changes to the
9918 * layout of the MAC header. The first two bits of the MAC header are the
9919 * protocol version. You'd think that the 802.11 committee would have
9920 * bumped the version to indicate a different MAC layout, but NOOOO -- we
9921 * have to go digging for bits in various locations instead.
9925 dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo,
9926 proto_tree * tree, gboolean fixed_length_header, gint fcs_len,
9927 gboolean wlan_broken_fc, gboolean datapad,
9930 guint16 fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
9931 guint16 seq_control;
9932 guint32 seq_number, frag_number;
9933 gboolean more_frags;
9934 const guint8 *src = NULL;
9935 const guint8 *dst = NULL;
9936 const guint8 *bssid = NULL;
9937 proto_item *ti = NULL;
9938 proto_item *fcs_item = NULL;
9939 proto_item *cw_item = NULL;
9940 proto_item *hidden_item;
9941 proto_tree *volatile hdr_tree = NULL;
9942 proto_tree *fcs_tree = NULL;
9943 proto_tree *cw_tree = NULL;
9944 guint16 hdr_len, ohdr_len, htc_len = 0;
9945 gboolean has_fcs, fcs_good, fcs_bad;
9946 gint len, reported_len, ivlen;
9947 gboolean is_amsdu = 0;
9948 gboolean save_fragmented;
9949 tvbuff_t *volatile next_tvb = NULL;
9951 volatile encap_t encap_type;
9952 guint8 octet1, octet2;
9953 char out_buff[SHORT_STR];
9956 const char *addr1_str = NULL;
9959 const gchar *fts_str;
9960 gchar flag_str[] = "opmPRMFTC";
9962 guint16 qosoff = 0, qos_control = 0;
9963 gint meshctl_len = 0;
9965 guint16 meshoff = 0;
9967 wlan_hdr *volatile whdr;
9968 static wlan_hdr whdrs[4];
9969 gboolean retransmitted;
9973 col_set_str (pinfo->cinfo, COL_PROTOCOL, "802.11");
9974 col_clear(pinfo->cinfo, COL_INFO);
9977 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf);
9978 if (frame_type_subtype == CTRL_CONTROL_WRAPPER)
9979 ctrl_fcf = FETCH_FCF(10);
9983 if (fixed_length_header)
9984 hdr_len = DATA_LONG_HDR_LEN;
9986 hdr_len = find_header_length (fcf, ctrl_fcf, is_ht);
9988 fts_str = val_to_str_const(frame_type_subtype, frame_type_subtype_vals,
9989 "Unrecognized (Reserved frame)");
9990 col_set_str (pinfo->cinfo, COL_INFO, fts_str);
9993 flags = FCF_FLAGS (fcf);
9994 more_frags = HAVE_FRAGMENTS (flags);
9996 for (ii = 0; ii < 8; ii++) {
9997 if (! (flags & 0x80 >> ii)) {
10002 if (is_ht && IS_STRICTLY_ORDERED(flags) &&
10003 ((FCF_FRAME_TYPE(fcf) == MGT_FRAME) || (FCF_FRAME_TYPE(fcf) == DATA_FRAME &&
10004 DATA_FRAME_IS_QOS(frame_type_subtype)))) {
10008 /* adjust the header length depending on the Mesh Control field */
10009 if (FCF_FRAME_TYPE(fcf) == DATA_FRAME &&
10010 DATA_FRAME_IS_QOS(frame_type_subtype)) {
10011 qosoff = hdr_len - htc_len - 2;
10012 qos_control = tvb_get_letohs(tvb, qosoff);
10013 if (tvb_length(tvb) > hdr_len) {
10015 mesh_flags = tvb_get_guint8 (tvb, hdr_len);
10016 if (has_mesh_control(fcf, qos_control, mesh_flags)) {
10017 meshctl_len = find_mesh_control_length(mesh_flags);
10018 hdr_len += meshctl_len;
10024 * Some portions of this code calculate offsets relative to the end of the
10025 * header. But when the header has been padded to align the data this must
10026 * be done relative to true header size, not the padded/aligned value. To
10027 * simplify this work we stash the original header size in ohdr_len instead
10028 * of recalculating it every time we need it.
10030 ohdr_len = hdr_len;
10032 hdr_len = roundup2(hdr_len, 4);
10034 /* Add the FC to the current tree */
10037 ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, hdr_len,
10038 "IEEE 802.11 %s", fts_str);
10039 hdr_tree = proto_item_add_subtree (ti, ett_80211);
10041 dissect_frame_control(hdr_tree, tvb, wlan_broken_fc, 0);
10043 if (frame_type_subtype == CTRL_PS_POLL)
10044 proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, 2, 2, ENC_LITTLE_ENDIAN);
10046 proto_tree_add_uint (hdr_tree, hf_ieee80211_did_duration, tvb, 2, 2,
10047 tvb_get_letohs (tvb, 2));
10051 * Decode the part of the frame header that isn't the same for all
10058 switch (FCF_FRAME_TYPE (fcf))
10063 * All management frame types have the same header.
10065 src = tvb_get_ptr (tvb, 10, 6);
10066 dst = tvb_get_ptr (tvb, 4, 6);
10068 SET_ADDRESS(&pinfo->dl_src, AT_ETHER, 6, src);
10069 SET_ADDRESS(&pinfo->src, AT_ETHER, 6, src);
10070 SET_ADDRESS(&pinfo->dl_dst, AT_ETHER, 6, dst);
10071 SET_ADDRESS(&pinfo->dst, AT_ETHER, 6, dst);
10074 SET_ADDRESS(&whdr->bssid, AT_ETHER, 6, tvb_get_ptr(tvb, 16,6));
10075 SET_ADDRESS(&whdr->src, AT_ETHER, 6, src);
10076 SET_ADDRESS(&whdr->dst, AT_ETHER, 6, dst);
10077 whdr->type = frame_type_subtype;
10079 seq_control = tvb_get_letohs(tvb, 22);
10080 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control);
10081 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control);
10083 col_append_fstr(pinfo->cinfo, COL_INFO,
10084 ", SN=%d", seq_number);
10086 col_append_fstr(pinfo->cinfo, COL_INFO,
10087 ", FN=%d",frag_number);
10091 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, dst);
10093 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, src);
10095 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_bssid, tvb, 16, 6, ENC_NA);
10097 /* add items for wlan.addr filter */
10098 hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, dst);
10099 PROTO_ITEM_SET_HIDDEN(hidden_item);
10100 hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, src);
10101 PROTO_ITEM_SET_HIDDEN(hidden_item);
10103 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
10104 PROTO_ITEM_SET_HIDDEN(hidden_item);
10107 proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2,
10110 proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2,
10115 case CONTROL_FRAME:
10118 * Control Wrapper frames insert themselves between address 1
10119 * and address 2 in a normal control frame. Process address 1
10120 * first, then handle the rest of the frame in dissect_control.
10122 if (frame_type_subtype == CTRL_CONTROL_WRAPPER) {
10123 offset = 10; /* FC + D/ID + Address 1 + CFC + HTC */
10124 ctrl_fcf = FETCH_FCF(10);
10125 ctrl_type_subtype = COMPOSE_FRAME_TYPE(ctrl_fcf);
10127 offset = 10; /* FC + D/ID + Address 1 */
10128 ctrl_type_subtype = frame_type_subtype;
10131 switch (ctrl_type_subtype)
10134 addr1_str = "BSSID";
10135 addr1_hf = hf_ieee80211_addr_bssid;
10139 case CTRL_ACKNOWLEDGEMENT:
10141 case CTRL_CFP_ENDACK:
10142 case CTRL_BLOCK_ACK_REQ:
10143 case CTRL_BLOCK_ACK:
10145 addr1_hf = hf_ieee80211_addr_ra;
10151 if (!addr1_str) /* XXX - Should we throw some sort of error? */
10154 /* Add address 1 */
10155 dst = tvb_get_ptr(tvb, 4, 6);
10156 set_dst_addr_cols(pinfo, dst, addr1_str);
10158 proto_tree_add_item(hdr_tree, addr1_hf, tvb, 4, 6, ENC_BIG_ENDIAN);
10159 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
10160 PROTO_ITEM_SET_HIDDEN(hidden_item);
10164 * Start shoving in other fields if needed.
10165 * XXX - Should we look for is_ht as well?
10167 if (frame_type_subtype == CTRL_CONTROL_WRAPPER && tree) {
10168 cw_item = proto_tree_add_text(hdr_tree, tvb, offset, 2,
10169 "Contained Frame Control");
10170 cw_tree = proto_item_add_subtree (cw_item, ett_cntrl_wrapper_fc);
10171 dissect_frame_control(cw_tree, tvb, FALSE, offset);
10172 dissect_ht_control(hdr_tree, tvb, offset + 2);
10174 cw_item = proto_tree_add_text(hdr_tree, tvb, offset, 2,
10176 hdr_tree = proto_item_add_subtree (cw_item, ett_cntrl_wrapper_fc);
10179 switch (ctrl_type_subtype)
10183 case CTRL_CFP_ENDACK:
10185 src = tvb_get_ptr (tvb, offset, 6);
10186 set_src_addr_cols(pinfo, src, "BSSID");
10188 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
10189 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
10190 PROTO_ITEM_SET_HIDDEN(hidden_item);
10197 src = tvb_get_ptr (tvb, offset, 6);
10198 set_src_addr_cols(pinfo, src, "TA");
10200 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
10201 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
10202 PROTO_ITEM_SET_HIDDEN(hidden_item);
10207 case CTRL_CONTROL_WRAPPER:
10209 /* XXX - We shouldn't see this. Should we throw an error? */
10213 case CTRL_BLOCK_ACK_REQ:
10215 src = tvb_get_ptr (tvb, offset, 6);
10216 set_src_addr_cols(pinfo, src, "TA");
10220 guint16 bar_control;
10221 guint8 block_ack_type;
10222 proto_item *bar_parent_item;
10223 proto_tree *bar_sub_tree;
10225 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
10226 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
10227 PROTO_ITEM_SET_HIDDEN(hidden_item);
10230 bar_control = tvb_get_letohs(tvb, offset);
10231 block_ack_type = (bar_control & 0x0006) >> 1;
10232 proto_tree_add_uint(hdr_tree, hf_ieee80211_block_ack_request_type, tvb,
10233 offset, 1, block_ack_type);
10234 bar_parent_item = proto_tree_add_uint_format(hdr_tree,
10235 hf_ieee80211_block_ack_request_control, tvb, offset, 2, bar_control,
10236 "Block Ack Request (BAR) Control: 0x%04X", bar_control);
10237 bar_sub_tree = proto_item_add_subtree(bar_parent_item,
10239 proto_tree_add_boolean(bar_sub_tree,
10240 hf_ieee80211_block_ack_control_ack_policy, tvb, offset, 1, bar_control);
10241 proto_tree_add_boolean(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
10242 tvb, offset, 1, bar_control);
10243 proto_tree_add_boolean(bar_sub_tree,
10244 hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 1,
10246 proto_tree_add_uint(bar_sub_tree, hf_ieee80211_block_ack_control_reserved,
10247 tvb, offset, 2, bar_control);
10249 switch (block_ack_type)
10251 case 0: /*Basic BlockAckReq */
10253 proto_tree_add_uint(bar_sub_tree,
10254 hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset+1, 1,
10258 /*offset +=*/ add_fixed_field(hdr_tree, tvb, offset,
10259 FIELD_BLOCK_ACK_SSC);
10262 case 2: /* Compressed BlockAckReq */
10264 proto_tree_add_uint(bar_sub_tree,
10265 hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset+1, 1,
10269 /*offset +=*/ add_fixed_field(hdr_tree, tvb, offset,
10270 FIELD_BLOCK_ACK_SSC);
10273 case 3: /* Multi-TID BlockAckReq */
10277 proto_tree *bar_mtid_tree, *bar_mtid_sub_tree;
10279 tid_count = ((bar_control & 0xF000) >> 12) + 1;
10280 proto_tree_add_uint_format(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid_info, tvb, offset+1, 1, bar_control,
10281 decode_numeric_bitfield(bar_control, 0xF000, 16,"Number of TIDs Present: 0x%%X"), tid_count);
10284 bar_parent_item = proto_tree_add_text (hdr_tree, tvb, offset, tid_count*4, "Per TID Info");
10285 bar_mtid_tree = proto_item_add_subtree(bar_parent_item, ett_block_ack);
10286 for (i = 1; i <= tid_count; i++) {
10287 bar_parent_item = proto_tree_add_uint(bar_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, i);
10288 bar_mtid_sub_tree = proto_item_add_subtree(bar_parent_item, ett_block_ack);
10290 bar_control = tvb_get_letohs(tvb, offset);
10291 proto_tree_add_uint(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, bar_control);
10292 proto_tree_add_uint(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset+1, 1, bar_control);
10295 offset += add_fixed_field(bar_mtid_sub_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
10304 case CTRL_BLOCK_ACK:
10306 src = tvb_get_ptr (tvb, offset, 6);
10307 set_src_addr_cols(pinfo, src, "TA");
10311 guint16 ba_control;
10312 guint8 block_ack_type;
10313 proto_item *ba_parent_item;
10314 proto_tree *ba_sub_tree;
10316 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
10317 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
10318 PROTO_ITEM_SET_HIDDEN(hidden_item);
10321 ba_control = tvb_get_letohs(tvb, offset);
10322 block_ack_type = (ba_control & 0x0006) >> 1;
10323 proto_tree_add_uint(hdr_tree, hf_ieee80211_block_ack_type, tvb, offset, 1, block_ack_type);
10324 ba_parent_item = proto_tree_add_uint_format(hdr_tree,
10325 hf_ieee80211_block_ack_control, tvb, offset, 2, ba_control,
10326 "Block Ack (BA) Control: 0x%04X", ba_control);
10327 ba_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
10328 proto_tree_add_boolean(ba_sub_tree, hf_ieee80211_block_ack_control_ack_policy,
10329 tvb, offset, 1, ba_control);
10330 proto_tree_add_boolean(ba_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
10331 tvb, offset, 1, ba_control);
10332 proto_tree_add_boolean(ba_sub_tree,
10333 hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 1,
10335 proto_tree_add_uint(ba_sub_tree, hf_ieee80211_block_ack_control_reserved, tvb,
10336 offset, 2, ba_control);
10338 switch (block_ack_type)
10340 case 0: /*Basic BlockAck */
10342 proto_tree_add_uint(ba_sub_tree,
10343 hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset+1, 1,
10347 offset += add_fixed_field(hdr_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
10348 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 128, ENC_NA);
10352 case 2: /* Compressed BlockAck */
10357 proto_item *ba_bitmap_item;
10358 proto_tree *ba_bitmap_tree;
10360 proto_tree_add_uint(ba_sub_tree, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset+1, 1, ba_control);
10363 ssn = tvb_get_letohs(tvb, offset);
10365 offset += add_fixed_field(hdr_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
10366 bmap = tvb_get_letoh64(tvb, offset);
10367 ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
10368 ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap);
10369 for (f = 0; f < 64; f++) {
10370 if (bmap & (G_GINT64_CONSTANT(1) << f))
10372 proto_tree_add_uint_format_value(ba_bitmap_tree, hf_ieee80211_block_ack_bitmap_missing_frame,
10373 tvb, offset + (f/8), 1, ssn + f, "%u", ssn + f);
10378 case 3: /* Multi-TID BlockAck */
10382 proto_tree *ba_mtid_tree, *ba_mtid_sub_tree;
10384 tid_count = ((ba_control & 0xF000) >> 12) + 1;
10385 proto_tree_add_uint_format(ba_sub_tree,
10386 hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset+1, 1,
10387 ba_control, decode_numeric_bitfield(ba_control, 0xF000,
10388 16,"Number of TIDs Present: 0x%%X"), tid_count);
10391 ba_parent_item = proto_tree_add_text (hdr_tree, tvb, offset, tid_count*4, "Per TID Info");
10392 ba_mtid_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
10393 for (i = 1; i <= tid_count; i++) {
10394 ba_parent_item = proto_tree_add_uint(ba_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, i);
10395 ba_mtid_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
10397 ba_control = tvb_get_letohs(tvb, offset);
10398 proto_tree_add_uint(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ba_control);
10399 proto_tree_add_uint(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset+1, 1, ba_control);
10402 offset += add_fixed_field(ba_mtid_sub_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
10403 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
10417 addr_type = FCF_ADDR_SELECTOR (fcf);
10419 /* In order to show src/dst address we must always do the following */
10424 src = tvb_get_ptr (tvb, 10, 6);
10425 dst = tvb_get_ptr (tvb, 4, 6);
10426 bssid = tvb_get_ptr (tvb, 16, 6);
10430 src = tvb_get_ptr (tvb, 16, 6);
10431 dst = tvb_get_ptr (tvb, 4, 6);
10432 bssid = tvb_get_ptr (tvb, 10, 6);
10436 src = tvb_get_ptr (tvb, 10, 6);
10437 dst = tvb_get_ptr (tvb, 16, 6);
10438 bssid = tvb_get_ptr (tvb, 4, 6);
10442 src = tvb_get_ptr (tvb, 24, 6);
10443 dst = tvb_get_ptr (tvb, 16, 6);
10444 bssid = tvb_get_ptr (tvb, 16, 6);
10448 SET_ADDRESS(&pinfo->dl_src, AT_ETHER, 6, src);
10449 SET_ADDRESS(&pinfo->src, AT_ETHER, 6, src);
10450 SET_ADDRESS(&pinfo->dl_dst, AT_ETHER, 6, dst);
10451 SET_ADDRESS(&pinfo->dst, AT_ETHER, 6, dst);
10455 SET_ADDRESS(&whdr->bssid, AT_ETHER, 6, bssid);
10456 SET_ADDRESS(&whdr->src, AT_ETHER, 6, src);
10457 SET_ADDRESS(&whdr->dst, AT_ETHER, 6, dst);
10458 whdr->type = frame_type_subtype;
10460 seq_control = tvb_get_letohs(tvb, 22);
10461 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control);
10462 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control);
10464 col_append_fstr(pinfo->cinfo, COL_INFO,
10465 ", SN=%d, FN=%d", seq_number,frag_number);
10467 /* Now if we have a tree we start adding stuff */
10475 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, dst);
10476 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, src);
10477 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_bssid, tvb, 16, 6, bssid);
10478 proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2,
10480 proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2,
10483 /* add items for wlan.addr filter */
10484 hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, dst);
10485 PROTO_ITEM_SET_HIDDEN(hidden_item);
10486 hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, src);
10487 PROTO_ITEM_SET_HIDDEN(hidden_item);
10488 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
10489 PROTO_ITEM_SET_HIDDEN(hidden_item);
10493 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, dst);
10494 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_bssid, tvb, 10, 6, bssid);
10495 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_sa, tvb, 16, 6, src);
10496 proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2,
10498 proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2,
10501 /* add items for wlan.addr filter */
10502 hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, dst);
10503 PROTO_ITEM_SET_HIDDEN(hidden_item);
10504 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
10505 PROTO_ITEM_SET_HIDDEN(hidden_item);
10506 hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, src);
10507 PROTO_ITEM_SET_HIDDEN(hidden_item);
10511 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_bssid, tvb, 4, 6, bssid);
10512 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, src);
10513 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_da, tvb, 16, 6, dst);
10515 proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2,
10517 proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2,
10520 /* add items for wlan.addr filter */
10521 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
10522 PROTO_ITEM_SET_HIDDEN(hidden_item);
10523 hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, src);
10524 PROTO_ITEM_SET_HIDDEN(hidden_item);
10525 hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, dst);
10526 PROTO_ITEM_SET_HIDDEN(hidden_item);
10530 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
10531 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
10532 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_da, tvb, 16, 6, dst);
10533 proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2,
10535 proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2,
10537 proto_tree_add_ether (hdr_tree, hf_ieee80211_addr_sa, tvb, 24, 6, src);
10539 /* add items for wlan.addr filter */
10540 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
10541 PROTO_ITEM_SET_HIDDEN(hidden_item);
10542 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
10543 PROTO_ITEM_SET_HIDDEN(hidden_item);
10544 hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, dst);
10545 PROTO_ITEM_SET_HIDDEN(hidden_item);
10546 hidden_item = proto_tree_add_ether (hdr_tree, hf_ieee80211_addr, tvb, 24, 6, src);
10547 PROTO_ITEM_SET_HIDDEN(hidden_item);
10555 len = tvb_length_remaining(tvb, hdr_len);
10556 reported_len = tvb_reported_length_remaining(tvb, hdr_len);
10560 case 0: /* Definitely has no FCS */
10564 case 4: /* Definitely has an FCS */
10568 case -2: /* Data frames have no FCS, other frames have an FCS */
10569 if (FCF_FRAME_TYPE (fcf) == DATA_FRAME)
10575 default: /* Don't know - use "wlan_check_fcs" */
10576 has_fcs = wlan_check_fcs;
10582 * Well, this packet should, in theory, have an FCS.
10583 * Do we have the entire packet, and does it have enough data for
10586 if (reported_len < 4)
10589 * The packet is claimed not to even have enough data for a 4-byte
10591 * Pretend it doesn't have an FCS.
10595 else if (len < reported_len)
10598 * The packet is claimed to have enough data for a 4-byte FCS, but
10599 * we didn't capture all of the packet.
10600 * Slice off the 4-byte FCS from the reported length, and trim the
10601 * captured length so it's no more than the reported length; that
10602 * will slice off what of the FCS, if any, is in the captured
10606 if (len > reported_len)
10607 len = reported_len;
10612 * We have the entire packet, and it includes a 4-byte FCS.
10613 * Slice it off, and put it into the tree.
10619 guint32 sent_fcs = tvb_get_ntohl(tvb, hdr_len + len);
10623 fcs = crc32_802_tvb_padded(tvb, ohdr_len, hdr_len, len);
10625 fcs = crc32_802_tvb(tvb, hdr_len + len);
10626 if (fcs == sent_fcs) {
10635 fcs_item = proto_tree_add_uint_format(hdr_tree, hf_ieee80211_fcs, tvb,
10636 hdr_len + len, 4, sent_fcs,
10637 "Frame check sequence: 0x%08x [correct]", sent_fcs);
10639 fcs_item = proto_tree_add_uint_format(hdr_tree, hf_ieee80211_fcs, tvb,
10640 hdr_len + len, 4, sent_fcs,
10641 "Frame check sequence: 0x%08x [incorrect, should be 0x%08x]",
10646 proto_tree_set_appendix(hdr_tree, tvb, hdr_len + len, 4);
10648 fcs_tree = proto_item_add_subtree(fcs_item, ett_fcs);
10650 fcs_item = proto_tree_add_boolean(fcs_tree,
10651 hf_ieee80211_fcs_good, tvb,
10654 PROTO_ITEM_SET_GENERATED(fcs_item);
10656 fcs_item = proto_tree_add_boolean(fcs_tree,
10657 hf_ieee80211_fcs_bad, tvb,
10660 PROTO_ITEM_SET_GENERATED(fcs_item);
10664 flag_str[8] = '\0';
10667 proto_item_append_text(ti, ", Flags: %s", flag_str);
10668 col_append_fstr (pinfo->cinfo, COL_INFO, ", Flags=%s", flag_str);
10672 * Only management and data frames have a body, so we don't have
10673 * anything more to do for other types of frames.
10675 switch (FCF_FRAME_TYPE (fcf))
10679 if (htc_len == 4) {
10680 dissect_ht_control(hdr_tree, tvb, ohdr_len - 4);
10685 if (tree && DATA_FRAME_IS_QOS(frame_type_subtype))
10687 proto_item *qos_fields;
10688 proto_tree *qos_tree;
10691 guint16 qos_priority;
10692 guint16 qos_ack_policy;
10693 guint16 qos_amsdu_present;
10695 guint16 qos_field_content;
10697 qos_fields = proto_tree_add_text(hdr_tree, tvb, qosoff, 2,
10699 qos_tree = proto_item_add_subtree (qos_fields, ett_qos_parameters);
10701 qos_tid = QOS_TID(qos_control);
10702 qos_priority = QOS_PRIORITY(qos_control);
10703 qos_ack_policy = QOS_ACK_POLICY(qos_control);
10704 qos_amsdu_present = QOS_AMSDU_PRESENT(qos_control);
10705 qos_eosp = QOS_EOSP(qos_control);
10706 qos_field_content = QOS_FIELD_CONTENT(qos_control);
10708 proto_tree_add_uint (qos_tree, hf_ieee80211_qos_tid, tvb,
10709 qosoff, 1, qos_tid);
10711 proto_tree_add_uint_format (qos_tree, hf_ieee80211_qos_priority, tvb,
10712 qosoff, 1, qos_priority,
10713 "Priority: %d (%s) (%s)",
10714 qos_priority, qos_tags[qos_priority], qos_acs[qos_priority]);
10716 if (flags & FLAG_FROM_DS) {
10717 proto_tree_add_boolean (qos_tree, hf_ieee80211_qos_eosp, tvb,
10718 qosoff, 1, qos_control);
10720 proto_tree_add_boolean (qos_tree, hf_ieee80211_qos_bit4, tvb,
10721 qosoff, 1, qos_control);
10724 proto_tree_add_uint (qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 1,
10727 if (flags & FLAG_FROM_DS) {
10728 if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
10729 proto_tree_add_boolean(qos_tree, hf_ieee80211_qos_amsdu_present, tvb,
10730 qosoff, 1, qos_amsdu_present);
10731 is_amsdu = qos_amsdu_present;
10733 if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)) {
10735 if (qos_field_content == 0) {
10736 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_txop_limit, tvb,
10737 qosoff + 1, 1, qos_field_content,
10738 "transmit one frame immediately (0)");
10740 proto_tree_add_uint (qos_tree, hf_ieee80211_qos_txop_limit, tvb,
10741 qosoff + 1, 1, qos_field_content);
10744 /* qap ps buffer state */
10745 proto_item *qos_ps_buf_state_fields;
10746 proto_tree *qos_ps_buf_state_tree;
10747 guint8 qap_buf_load;
10749 qos_ps_buf_state_fields = proto_tree_add_text(qos_tree, tvb, qosoff + 1, 1,
10750 "QAP PS Buffer State: 0x%x", qos_field_content);
10751 qos_ps_buf_state_tree = proto_item_add_subtree (qos_ps_buf_state_fields, ett_qos_ps_buf_state);
10753 proto_tree_add_boolean (qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated,
10754 tvb, qosoff + 1, 1, qos_field_content);
10756 if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)) {
10757 proto_tree_add_uint (qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb,
10758 qosoff + 1, 1, qos_field_content);
10760 qap_buf_load = QOS_PS_QAP_BUF_LOAD(qos_field_content);
10761 switch (qap_buf_load) {
10764 proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb,
10765 qosoff + 1, 1, qos_field_content,
10766 "no buffered traffic (0)");
10770 proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb,
10771 qosoff + 1, 1, qos_field_content,
10772 "%d octets (%d)", qap_buf_load*4096, qap_buf_load);
10776 proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb,
10777 qosoff + 1, 1, qos_field_content,
10778 "greater than 57344 octets (15)");
10784 if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
10785 proto_tree_add_boolean(qos_tree, hf_ieee80211_qos_amsdu_present, tvb,
10786 qosoff, 1, qos_amsdu_present);
10787 is_amsdu = qos_amsdu_present;
10791 switch (qos_field_content) {
10794 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
10795 tvb, qosoff + 1, 1, qos_field_content,
10796 "no buffered traffic in the queue (0)");
10800 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
10801 tvb, qosoff + 1, 1, qos_field_content,
10802 "%u bytes (%u)", qos_field_content*256, qos_field_content);
10806 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
10807 tvb, qosoff + 1, 1, qos_field_content,
10808 "more than 64768 octets (254)");
10812 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
10813 tvb, qosoff + 1, 1, qos_field_content,
10814 "unspecified or unknown (256)");
10818 /* txop duration requested */
10819 if (qos_field_content == 0) {
10820 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_txop_dur_req,
10821 tvb, qosoff + 1, 1, qos_field_content,
10822 "no TXOP requested (0)");
10824 proto_tree_add_uint (qos_tree, hf_ieee80211_qos_txop_dur_req,
10825 tvb, qosoff + 1, 1, qos_field_content);
10830 /* Do we have +HTC? */
10831 if (htc_len == 4) {
10832 dissect_ht_control(hdr_tree, tvb, ohdr_len - 4);
10835 if (meshctl_len != 0) {
10836 proto_item *msh_fields;
10837 proto_tree *msh_tree;
10839 msh_fields = proto_tree_add_text(hdr_tree, tvb, meshoff, meshctl_len, "Mesh Control field");
10840 msh_tree = proto_item_add_subtree (msh_fields, ett_msh_control);
10841 add_fixed_field(msh_tree, tvb, meshoff, FIELD_MESH_CONTROL);
10844 } /* end of qos control field */
10845 /* Davide Schiera (2006-11-21): process handshake packet with AirPDcap */
10846 /* the processing will take care of 4-way handshake sessions for WPA */
10847 /* and WPA2 decryption */
10848 if (enable_decryption && !pinfo->fd->flags.visited) {
10849 const guint8 *enc_data = tvb_get_ptr(tvb, 0, hdr_len+reported_len);
10850 AirPDcapPacketProcess(&airpdcap_ctx, enc_data, hdr_len, hdr_len+reported_len, NULL, 0, NULL, TRUE, FALSE);
10852 /* Davide Schiera -------------------------------------------------------- */
10855 * No-data frames don't have a body.
10857 if (DATA_FRAME_IS_NULL(frame_type_subtype))
10860 if (!wlan_subdissector) {
10864 * data: last seq_control seen and frame number
10866 retransmitted = FALSE;
10867 if(!pinfo->fd->flags.visited){
10868 retransmit_key key;
10869 retransmit_key *result;
10871 memcpy(key.bssid, bssid, 6);
10872 memcpy(key.src, src, 6);
10873 key.seq_control = 0;
10874 result = (retransmit_key *)g_hash_table_lookup(fc_analyse_retransmit_table, &key);
10875 if (result && result->seq_control == seq_control) {
10876 /* keep a pointer to the first seen frame, could be done with proto data? */
10877 fnum = result->fnum;
10878 g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER( pinfo->fd->num),
10879 GINT_TO_POINTER(fnum));
10880 retransmitted = TRUE;
10882 /* first time or new seq*/
10884 result = se_alloc(sizeof(retransmit_key));
10886 g_hash_table_insert(fc_analyse_retransmit_table, result, result);
10888 result->seq_control = seq_control;
10889 result->fnum = pinfo->fd->num;
10892 else if ((fnum = GPOINTER_TO_UINT(g_hash_table_lookup(fc_first_frame_table, GINT_TO_POINTER( pinfo->fd->num))))) {
10893 retransmitted = TRUE;
10896 if (retransmitted) {
10897 col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
10901 item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0, "Retransmitted frame");
10902 PROTO_ITEM_SET_GENERATED(item);
10903 item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame,tvb, 0, 0, fnum);
10904 PROTO_ITEM_SET_GENERATED(item);
10906 next_tvb = tvb_new_subset (tvb, hdr_len, len, reported_len);
10907 call_dissector(data_handle, next_tvb, pinfo, tree);
10914 case CONTROL_FRAME:
10921 if (IS_PROTECTED(FCF_FLAGS(fcf))
10922 && !pinfo->pseudo_header->ieee_802_11.decrypted
10923 && wlan_ignore_wep != WLAN_IGNORE_WEP_WO_IV) {
10925 * It's a WEP or WPA encrypted frame, and it hasn't already been
10926 * decrypted; dissect the protections parameters and decrypt the data,
10927 * if we have a matching key. Otherwise display it as data.
10930 gboolean can_decrypt = FALSE;
10931 proto_tree *wep_tree = NULL;
10933 guint8 key, keybyte;
10935 /* Davide Schiera (2006-11-27): define algorithms constants and macros */
10936 #define PROTECTION_ALG_WEP AIRPDCAP_KEY_TYPE_WEP
10937 #define PROTECTION_ALG_TKIP AIRPDCAP_KEY_TYPE_TKIP
10938 #define PROTECTION_ALG_CCMP AIRPDCAP_KEY_TYPE_CCMP
10939 #define PROTECTION_ALG_RSNA PROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP
10940 guint8 algorithm=G_MAXUINT8;
10941 /* Davide Schiera (2006-11-27): added macros to check the algorithm */
10942 /* used could be TKIP or CCMP */
10943 #define IS_TKIP(tvb, hdr_len) (tvb_get_guint8(tvb, hdr_len + 1) & 0x20)
10944 #define IS_CCMP(tvb, hdr_len) (tvb_get_guint8(tvb, hdr_len + 2) == 0)
10945 /* Davide Schiera ----------------------------------------------------- */
10947 /* Davide Schiera (2006-11-21): recorded original lengths to pass them */
10948 /* to the packets process function */
10949 guint32 sec_header=0;
10950 guint32 sec_trailer=0;
10952 next_tvb = try_decrypt(tvb, hdr_len, reported_len, &algorithm, &sec_header, &sec_trailer);
10953 /* Davide Schiera ----------------------------------------------------- */
10955 keybyte = tvb_get_guint8(tvb, hdr_len + 3);
10956 key = KEY_OCTET_WEP_KEY(keybyte);
10957 if ((keybyte & KEY_EXTIV) && (len >= EXTIV_LEN)) {
10958 /* Extended IV; this frame is likely encrypted with TKIP or CCMP */
10962 proto_item *extiv_fields;
10964 /* Davide Schiera (2006-11-27): differentiated CCMP and TKIP if */
10965 /* it's possible */
10966 if (algorithm==PROTECTION_ALG_TKIP)
10967 extiv_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 8,
10968 "TKIP parameters");
10969 else if (algorithm==PROTECTION_ALG_CCMP)
10970 extiv_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 8,
10971 "CCMP parameters");
10973 /* Davide Schiera -------------------------------------------- */
10974 /* Davide Schiera (2006-11-27): differentiated CCMP and TKIP if*/
10975 /* it's possible */
10976 if (IS_TKIP(tvb, hdr_len)) {
10977 algorithm=PROTECTION_ALG_TKIP;
10978 extiv_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 8,
10979 "TKIP parameters");
10980 } else if (IS_CCMP(tvb, hdr_len)) {
10981 algorithm=PROTECTION_ALG_CCMP;
10982 extiv_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 8,
10983 "CCMP parameters");
10985 extiv_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 8,
10986 "TKIP/CCMP parameters");
10988 proto_item_set_len (ti, hdr_len + 8);
10990 wep_tree = proto_item_add_subtree (extiv_fields, ett_wep_parameters);
10992 if (algorithm==PROTECTION_ALG_TKIP) {
10993 g_snprintf(out_buff, SHORT_STR, "0x%08X%02X%02X",
10994 tvb_get_letohl(tvb, hdr_len + 4),
10995 tvb_get_guint8(tvb, hdr_len),
10996 tvb_get_guint8(tvb, hdr_len + 2));
10997 proto_tree_add_string(wep_tree, hf_ieee80211_tkip_extiv, tvb, hdr_len,
10998 EXTIV_LEN, out_buff);
10999 } else if (algorithm==PROTECTION_ALG_CCMP) {
11000 g_snprintf(out_buff, SHORT_STR, "0x%08X%02X%02X",
11001 tvb_get_letohl(tvb, hdr_len + 4),
11002 tvb_get_guint8(tvb, hdr_len + 1),
11003 tvb_get_guint8(tvb, hdr_len));
11004 proto_tree_add_string(wep_tree, hf_ieee80211_ccmp_extiv, tvb, hdr_len,
11005 EXTIV_LEN, out_buff);
11008 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
11011 /* Subtract out the length of the IV. */
11013 reported_len -= EXTIV_LEN;
11015 /* It is unknown whether this is TKIP or CCMP, so let's not even try to
11016 * parse TKIP Michael MIC+ICV or CCMP MIC. */
11018 /* Davide Schiera (2006-11-21): enable TKIP and CCMP decryption */
11019 /* checking for the trailer */
11020 if (next_tvb!=NULL) {
11021 if (reported_len < (gint) sec_trailer) {
11022 /* There is no space for a trailer, ignore it and don't decrypt */
11024 } else if (len < reported_len) {
11025 /* There is space for a trailer, but we haven't capture all the */
11026 /* packet. Slice off the trailer, but don't try to decrypt */
11027 reported_len -= sec_trailer;
11028 if (len > reported_len)
11029 len = reported_len;
11031 /* Ok, we have a trailer and the whole packet. Decrypt it! */
11032 /* TODO: At the moment we won't add the trailer to the tree, */
11033 /* so don't remove the trailer from the packet */
11034 len -= sec_trailer;
11035 reported_len -= sec_trailer;
11036 can_decrypt = TRUE;
11039 /* Davide Schiera -------------------------------------------------- */
11041 /* No Ext. IV - WEP packet */
11043 * XXX - pass the IV and key to "try_decrypt_wep()", and have it pass
11044 * them to "wep_decrypt()", rather than having "wep_decrypt()" extract
11047 * Also, just pass the data *following* the WEP parameters as the
11048 * buffer to decrypt.
11050 iv = tvb_get_ntoh24(tvb, hdr_len);
11052 proto_item *wep_fields;
11054 wep_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 4,
11057 wep_tree = proto_item_add_subtree (wep_fields, ett_wep_parameters);
11058 proto_tree_add_uint (wep_tree, hf_ieee80211_wep_iv, tvb, hdr_len, 3, iv);
11059 tvb_memcpy(tvb, iv_buff, hdr_len, 3);
11060 is_iv_bad = weak_iv(iv_buff);
11061 if (is_iv_bad != -1) {
11062 proto_tree_add_boolean_format (wep_tree, hf_ieee80211_wep_iv_weak,
11064 "Weak IV for key byte %d",
11069 proto_tree_add_uint (wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
11071 /* Subtract out the length of the IV. */
11076 /* Davide Schiera (2006-11-27): Even if the decryption was not */
11077 /* successful, set the algorithm */
11078 algorithm=PROTECTION_ALG_WEP;
11081 * Well, this packet should, in theory, have an ICV.
11082 * Do we have the entire packet, and does it have enough data for
11085 if (reported_len < 4) {
11087 * The packet is claimed not to even have enough data for a
11089 * Pretend it doesn't have an ICV.
11092 } else if (len < reported_len) {
11094 * The packet is claimed to have enough data for a 4-byte ICV,
11095 * but we didn't capture all of the packet.
11096 * Slice off the 4-byte ICV from the reported length, and trim
11097 * the captured length so it's no more than the reported length;
11098 * that will slice off what of the ICV, if any, is in the
11102 if (len > reported_len)
11103 len = reported_len;
11106 * We have the entire packet, and it includes a 4-byte ICV.
11107 * Slice it off, and put it into the tree.
11109 * We only support decrypting if we have the the ICV.
11111 * XXX - the ICV is encrypted; we're putting the encrypted
11112 * value, not the decrypted value, into the tree.
11116 can_decrypt = TRUE;
11120 if (algorithm == PROTECTION_ALG_WEP) {
11121 g_strlcpy (wlan_stats.protection, "WEP", MAX_PROTECT_LEN);
11122 } else if (algorithm == PROTECTION_ALG_TKIP) {
11123 g_strlcpy (wlan_stats.protection, "TKIP", MAX_PROTECT_LEN);
11124 } else if (algorithm == PROTECTION_ALG_CCMP) {
11125 g_strlcpy (wlan_stats.protection, "CCMP", MAX_PROTECT_LEN);
11127 g_strlcpy (wlan_stats.protection, "Unknown", MAX_PROTECT_LEN);
11130 /* Davide Schiera (2006-11-26): decrypted before parsing header and */
11131 /* protection header */
11132 if (!can_decrypt || next_tvb == NULL) {
11134 * WEP decode impossible or failed, treat payload as raw data
11135 * and don't attempt fragment reassembly or further dissection.
11137 next_tvb = tvb_new_subset(tvb, hdr_len + ivlen, len, reported_len);
11140 /* Davide Schiera (2006-11-21): added WEP or WPA separation */
11141 if (algorithm==PROTECTION_ALG_WEP) {
11143 proto_tree_add_uint_format (wep_tree, hf_ieee80211_wep_icv, tvb,
11144 hdr_len + ivlen + len, 4,
11145 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
11146 "WEP ICV: 0x%08x (not verified)",
11147 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
11148 } else if (algorithm==PROTECTION_ALG_CCMP) {
11149 } else if (algorithm==PROTECTION_ALG_TKIP) {
11152 /* Davide Schiera (2006-11-21) ---------------------------------- */
11154 if (pinfo->ethertype != ETHERTYPE_CENTRINO_PROMISC && wlan_ignore_wep == WLAN_IGNORE_WEP_NO) {
11155 /* Some wireless drivers (such as Centrino) WEP payload already decrypted */
11156 call_dissector(data_handle, next_tvb, pinfo, tree);
11160 /* Davide Schiera (2006-11-21): added WEP or WPA separation */
11161 if (algorithm==PROTECTION_ALG_WEP) {
11163 proto_tree_add_uint_format (wep_tree, hf_ieee80211_wep_icv, tvb,
11164 hdr_len + ivlen + len, 4,
11165 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
11166 "WEP ICV: 0x%08x (correct)",
11167 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
11169 add_new_data_source(pinfo, next_tvb, "Decrypted WEP data");
11170 } else if (algorithm==PROTECTION_ALG_CCMP) {
11171 add_new_data_source(pinfo, next_tvb, "Decrypted CCMP data");
11172 } else if (algorithm==PROTECTION_ALG_TKIP) {
11173 add_new_data_source(pinfo, next_tvb, "Decrypted TKIP data");
11175 /* Davide Schiera (2006-11-21) ------------------------------------- */
11176 /* Davide Schiera (2006-11-27): undefine macros and definitions */
11179 #undef PROTECTION_ALG_CCMP
11180 #undef PROTECTION_ALG_TKIP
11181 #undef PROTECTION_ALG_WEP
11182 /* Davide Schiera -------------------------------------------------- */
11186 * WEP decryption successful!
11188 * Use the tvbuff we got back from the decryption; the data starts at
11189 * the beginning. The lengths are already correct for the decoded WEP
11196 * Not a WEP-encrypted frame; just use the data from the tvbuff
11199 * The payload starts at "hdr_len" (i.e., just past the 802.11
11200 * MAC header), the length of data in the tvbuff following the
11201 * 802.11 header is "len", and the length of data in the packet
11202 * following the 802.11 header is "reported_len".
11208 * Do defragmentation if "wlan_defragment" is true, and we have more
11209 * fragments or this isn't the first fragment.
11211 * We have to do some special handling to catch frames that
11212 * have the "More Fragments" indicator not set but that
11213 * don't show up as reassembled and don't have any other
11214 * fragments present. Some networking interfaces appear
11215 * to do reassembly even when you're capturing raw packets
11216 * *and* show the reassembled packet without the "More
11217 * Fragments" indicator set *but* with a non-zero fragment
11220 * "fragment_add_seq_802_11()" handles that; we want to call it
11221 * even if we have a short frame, so that it does those checks - if
11222 * the frame is short, it doesn't do reassembly on it.
11224 * (This could get some false positives if we really *did* only
11225 * capture the last fragment of a fragmented packet, but that's
11228 save_fragmented = pinfo->fragmented;
11229 if (wlan_defragment && (more_frags || frag_number != 0)) {
11230 fragment_data *fd_head;
11233 * If we've already seen this frame, look it up in the
11234 * table of reassembled packets, otherwise add it to
11235 * whatever reassembly is in progress, if any, and see
11238 if (reported_len < 0)
11239 THROW(ReportedBoundsError);
11240 fd_head = fragment_add_seq_802_11(next_tvb, hdr_len, pinfo, seq_number,
11241 wlan_fragment_table,
11242 wlan_reassembled_table,
11246 next_tvb = process_reassembled_data(tvb, hdr_len, pinfo,
11247 "Reassembled 802.11", fd_head,
11248 &frag_items, NULL, hdr_tree);
11251 * If this is the first fragment, dissect its contents, otherwise
11252 * just show it as a fragment.
11254 if (frag_number != 0) {
11255 /* Not the first fragment - don't dissect it. */
11258 /* First fragment, or not fragmented. Dissect what we have here. */
11260 /* Get a tvbuff for the payload. */
11261 next_tvb = tvb_new_subset (next_tvb, hdr_len, len, reported_len);
11264 * If this is the first fragment, but not the only fragment,
11265 * tell the next protocol that.
11268 pinfo->fragmented = TRUE;
11270 pinfo->fragmented = FALSE;
11274 if (next_tvb == NULL) {
11275 /* Just show this as an incomplete fragment. */
11276 col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
11277 next_tvb = tvb_new_subset (tvb, hdr_len, len, reported_len);
11278 call_dissector(data_handle, next_tvb, pinfo, tree);
11279 pinfo->fragmented = save_fragmented;
11283 switch (FCF_FRAME_TYPE (fcf))
11287 dissect_ieee80211_mgt (fcf, next_tvb, pinfo, tree);
11291 if (is_amsdu && tvb_reported_length_remaining(next_tvb, 0) > 4){
11292 tvbuff_t *volatile msdu_tvb = NULL;
11293 guint32 msdu_offset = 0;
11295 const guint8 *lcl_src = NULL;
11296 const guint8 *lcl_dst = NULL;
11297 guint16 msdu_length;
11298 proto_item *parent_item;
11299 proto_tree *mpdu_tree;
11300 proto_tree *subframe_tree;
11302 parent_item = proto_tree_add_protocol_format(tree, proto_aggregate, next_tvb, 0,
11303 tvb_reported_length_remaining(next_tvb, 0), "IEEE 802.11 Aggregate MSDU");
11304 mpdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_parent_tree);
11307 lcl_dst = tvb_get_ptr (next_tvb, msdu_offset, 6);
11308 lcl_src = tvb_get_ptr (next_tvb, msdu_offset+6, 6);
11309 msdu_length = tvb_get_ntohs (next_tvb, msdu_offset+12);
11311 parent_item = proto_tree_add_uint_format(mpdu_tree, hf_ieee80211_amsdu_msdu_header_text, next_tvb,
11312 msdu_offset, roundup2(msdu_offset+14+msdu_length, 4),
11313 i, "A-MSDU Subframe #%u", i);
11314 subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
11317 proto_tree_add_ether(subframe_tree, hf_ieee80211_addr_da, next_tvb, msdu_offset, 6, lcl_dst);
11318 proto_tree_add_ether(subframe_tree, hf_ieee80211_addr_sa, next_tvb, msdu_offset+6, 6, lcl_src);
11319 proto_tree_add_uint_format(subframe_tree, hf_ieee80211_mcsset_highest_data_rate, next_tvb, msdu_offset+12, 2,
11320 msdu_length, "MSDU length: 0x%04X", msdu_length);
11323 msdu_tvb = tvb_new_subset(next_tvb, msdu_offset, msdu_length, -1);
11324 call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
11325 msdu_offset = roundup2(msdu_offset+msdu_length, 4);
11326 } while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
11330 /* I guess some bridges take Netware Ethernet_802_3 frames,
11331 which are 802.3 frames (with a length field rather than
11332 a type field, but with no 802.2 header in the payload),
11333 and just stick the payload into an 802.11 frame. I've seen
11334 captures that show frames of that sort.
11336 We also handle some odd form of encapsulation in which a
11337 complete Ethernet frame is encapsulated within an 802.11
11338 data frame, with no 802.2 header. This has been seen
11339 from some hardware.
11341 On top of that, at least at some point it appeared that
11342 the OLPC XO sent out frames with two bytes of 0 between
11343 the "end" of the 802.11 header and the beginning of
11346 So, if the packet doesn't start with 0xaa 0xaa:
11348 we first use the same scheme that linux-wlan-ng does to detect
11349 those encapsulated Ethernet frames, namely looking to see whether
11350 the frame either starts with 6 octets that match the destination
11351 address from the 802.11 header or has 6 octets that match the
11352 source address from the 802.11 header following the first 6 octets,
11353 and, if so, treat it as an encapsulated Ethernet frame;
11355 otherwise, we use the same scheme that we use in the Ethernet
11356 dissector to recognize Netware 802.3 frames, namely checking
11357 whether the packet starts with 0xff 0xff and, if so, treat it
11358 as an encapsulated IPX frame, and then check whether the
11359 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
11361 encap_type = ENCAP_802_2;
11363 octet1 = tvb_get_guint8(next_tvb, 0);
11364 octet2 = tvb_get_guint8(next_tvb, 1);
11365 if (octet1 != 0xaa || octet2 != 0xaa) {
11366 if (tvb_memeql(next_tvb, 6, pinfo->dl_src.data, 6) == 0 ||
11367 tvb_memeql(next_tvb, 0, pinfo->dl_dst.data, 6) == 0)
11368 encap_type = ENCAP_ETHERNET;
11369 else if (octet1 == 0xff && octet2 == 0xff)
11370 encap_type = ENCAP_IPX;
11371 else if (octet1 == 0x00 && octet2 == 0x00) {
11372 proto_tree_add_text(tree, next_tvb, 0, 2, "Mysterious OLPC stuff");
11373 next_tvb = tvb_new_subset_remaining (next_tvb, 2);
11377 CATCH2(BoundsError, ReportedBoundsError) {
11383 switch (encap_type) {
11386 call_dissector(llc_handle, next_tvb, pinfo, tree);
11389 case ENCAP_ETHERNET:
11390 call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
11394 call_dissector(ipx_handle, next_tvb, pinfo, tree);
11399 pinfo->fragmented = save_fragmented;
11402 whdr->stats = wlan_stats;
11403 tap_queue_packet(wlan_tap, pinfo, whdr);
11404 memset (&wlan_stats, 0, sizeof wlan_stats);
11408 * Dissect 802.11 with a variable-length link-layer header.
11411 dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
11413 dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
11414 pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, FALSE);
11418 * Dissect 802.11 with a variable-length link-layer header and data padding.
11421 dissect_ieee80211_datapad (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
11423 dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
11424 pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, TRUE, FALSE);
11428 * Dissect 802.11 with a variable-length link-layer header and a byte-swapped
11429 * control field (some hardware sends out LWAPP-encapsulated 802.11
11430 * packets with the control field byte swapped).
11433 dissect_ieee80211_bsfc (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
11435 dissect_ieee80211_common (tvb, pinfo, tree, FALSE, 0, TRUE, FALSE, FALSE);
11439 * Dissect 802.11 with a fixed-length link-layer header (padded to the
11443 dissect_ieee80211_fixed (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
11445 dissect_ieee80211_common (tvb, pinfo, tree, TRUE, 0, FALSE, FALSE, FALSE);
11449 * Dissect an HT 802.11 frame with a variable-length link-layer header.
11450 * XXX - Can we tell if a frame is +HTC just by looking at the MAC header?
11451 * If so, we can dispense with this.
11454 dissect_ieee80211_ht (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
11456 dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
11457 pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, TRUE);
11461 wlan_defragment_init(void)
11463 fragment_table_init(&wlan_fragment_table);
11464 reassembled_table_init(&wlan_reassembled_table);
11467 /* ------------- */
11469 retransmit_hash(gconstpointer k)
11471 const retransmit_key *key = (const retransmit_key *)k;
11476 for (i = 0; i < 6; i++)
11477 hash_val += key->bssid[i];
11479 for (i = 0; i < 6; i++)
11480 hash_val += key->src[i];
11486 retransmit_equal(gconstpointer k1, gconstpointer k2)
11488 const retransmit_key *key1 = (const retransmit_key *)k1;
11489 const retransmit_key *key2 = (const retransmit_key *)k2;
11491 return ( (!memcmp(key1->bssid, key2->bssid, 6) && !memcmp( key1->src, key2->src, 6))? TRUE:FALSE);
11495 frame_hash(gconstpointer k)
11497 guint32 frame = GPOINTER_TO_UINT(k);
11503 frame_equal(gconstpointer k1, gconstpointer k2)
11505 guint32 frame1 = GPOINTER_TO_UINT(k1);
11506 guint32 frame2 = GPOINTER_TO_UINT(k2);
11508 return frame1==frame2;
11512 wlan_retransmit_init(void)
11514 if ( fc_analyse_retransmit_table ){
11515 g_hash_table_destroy(fc_analyse_retransmit_table);
11516 fc_analyse_retransmit_table = NULL;
11519 if( fc_first_frame_table ){
11520 g_hash_table_destroy(fc_first_frame_table);
11521 fc_first_frame_table = NULL;
11524 if (wlan_subdissector)
11527 fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
11528 fc_first_frame_table = g_hash_table_new( frame_hash, frame_equal);
11533 proto_register_ieee80211 (void)
11535 static const value_string frame_type[] = {
11536 {MGT_FRAME, "Management frame"},
11537 {CONTROL_FRAME, "Control frame"},
11538 {DATA_FRAME, "Data frame"},
11542 static const value_string tofrom_ds[] = {
11543 {0, "Not leaving DS or network is operating "
11544 "in AD-HOC mode (To DS: 0 From DS: 0)"},
11545 {FLAG_TO_DS, "Frame from STA to DS via an AP (To DS: 1 "
11547 {FLAG_FROM_DS, "Frame from DS to a STA via AP(To DS: 0 "
11549 {FLAG_TO_DS|FLAG_FROM_DS, "WDS (AP to AP) or Mesh (MP to MP) Frame "
11550 "(To DS: 1 From DS: 1)"},
11554 static const true_false_string tods_flag = {
11555 "Frame is entering DS",
11556 "Frame is not entering DS"
11559 static const true_false_string fromds_flag = {
11560 "Frame is exiting DS",
11561 "Frame is not exiting DS"
11564 static const true_false_string more_frags = {
11565 "More fragments follow",
11566 "This is the last fragment"
11569 static const true_false_string retry_flags = {
11570 "Frame is being retransmitted",
11571 "Frame is not being retransmitted"
11574 static const true_false_string pm_flags = {
11575 "STA will go to sleep",
11579 static const true_false_string md_flags = {
11580 "Data is buffered for STA at AP",
11584 static const true_false_string protected_flags = {
11585 "Data is protected",
11586 "Data is not protected"
11589 static const true_false_string order_flags = {
11590 "Strictly ordered",
11591 "Not strictly ordered"
11594 static const true_false_string cf_ess_flags = {
11595 "Transmitter is an AP",
11596 "Transmitter is a STA"
11600 static const true_false_string cf_privacy_flags = {
11601 "AP/STA can support WEP",
11602 "AP/STA cannot support WEP"
11605 static const true_false_string cf_preamble_flags = {
11606 "Short preamble allowed",
11607 "Short preamble not allowed"
11610 static const true_false_string cf_pbcc_flags = {
11611 "PBCC modulation allowed",
11612 "PBCC modulation not allowed"
11615 static const true_false_string cf_agility_flags = {
11616 "Channel agility in use",
11617 "Channel agility not in use"
11620 static const true_false_string short_slot_time_flags = {
11621 "Short slot time in use",
11622 "Short slot time not in use"
11625 static const true_false_string dsss_ofdm_flags = {
11626 "DSSS-OFDM modulation allowed",
11627 "DSSS-OFDM modulation not allowed"
11630 static const true_false_string cf_spec_man_flags = {
11631 "dot11SpectrumManagementRequired TRUE",
11632 "dot11SpectrumManagementRequired FALSE"
11635 static const true_false_string cf_apsd_flags = {
11636 "apsd implemented",
11637 "apsd not implemented"
11640 static const true_false_string cf_del_blk_ack_flags = {
11641 "delayed block ack implemented",
11642 "delayed block ack not implemented"
11645 static const true_false_string cf_imm_blk_ack_flags = {
11646 "immediate block ack implemented",
11647 "immediate block ack not implemented"
11649 static const true_false_string cf_ibss_flags = {
11650 "Transmitter belongs to an IBSS",
11651 "Transmitter belongs to a BSS"
11654 static const true_false_string eosp_flag = {
11655 "End of service period",
11659 static const true_false_string bit4_flag = {
11660 "Bits 8-15 of QoS Control field are Queue Size",
11661 "Bits 8-15 of QoS Control field are TXOP Duration Requested"
11664 static const true_false_string ieee80211_qos_amsdu_present_flag = {
11669 static const value_string sta_cf_pollable[] = {
11670 {0x00, "Station is not CF-Pollable"},
11671 {0x02, "Station is CF-Pollable, "
11672 "not requesting to be placed on the CF-polling list"},
11673 {0x01, "Station is CF-Pollable, "
11674 "requesting to be placed on the CF-polling list"},
11675 {0x03, "Station is CF-Pollable, requesting never to be polled"},
11676 {0x0200, "QSTA requesting association in QBSS"},
11680 static const value_string ap_cf_pollable[] = {
11681 {0x00, "No point coordinator at AP"},
11682 {0x02, "Point coordinator at AP for delivery only (no polling)"},
11683 {0x01, "Point coordinator at AP for delivery and polling"},
11684 {0x03, "Reserved"},
11685 {0x0200, "QAP (HC) does not use CFP for delivery of unicast data type frames"},
11686 {0x0202, "QAP (HC) uses CFP for delivery, but does not send CF-Polls to non-QoS STAs"},
11687 {0x0201, "QAP (HC) uses CFP for delivery, and sends CF-Polls to non-QoS STAs"},
11688 {0x0203, "Reserved"},
11693 static const value_string auth_alg[] = {
11694 {0x00, "Open System"},
11695 {0x01, "Shared key"},
11696 {0x02, "Fast BSS Transition"},
11697 {0x80, "Network EAP"}, /* Cisco proprietary? */
11701 static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
11702 "Permitted in QoS Data MPDUs",
11706 static const true_false_string ff_block_ack_params_policy_flag = {
11707 "Immediate Block Ack",
11708 "Delayed Block Ack"
11711 static const value_string ff_channel_width_vals[] = {
11712 {0x00, "20 MHz channel width only"},
11713 {0x01, "Any channel width in the STA's Supported Channel Width Set"},
11717 static const true_false_string ff_qos_info_ap_q_ack_flag = {
11722 static const true_false_string ff_qos_info_ap_queue_req_flag = {
11723 "Can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
11724 "Can NOT process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
11727 static const true_false_string ff_qos_info_ap_txop_request_flag = {
11728 "Can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
11729 "Can NOT process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
11732 static const true_false_string ff_qos_info_sta_ac_flag = {
11733 "Trigger-enabled and Delivery-enabled",
11734 "Neither Trigger-enabled nor Delivery-enabled"
11737 static const true_false_string ff_qos_info_sta_q_ack_flag = {
11742 static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
11743 {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
11744 {0x01, "AP may deliver a maximum of two MSDUs and MMPDUs per SP"},
11745 {0x02, "AP may deliver a maximum of four MSDUs and MMPDUs per SP"},
11746 {0x03, "AP may deliver a maximum of six MSDUs and MMPDUs per SP"},
11750 static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
11751 "Can process ACK frames with the More Data bit in the Frame Control field set to 1",
11752 "Can NOT process ACK frames with the More Data bit in the Frame Control field set to 1"
11755 static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
11756 "Dynamic SM Power Save mode",
11757 "Static SM Power Save mode"
11760 static const true_false_string ff_pco_phase_cntrl_flag = {
11765 static const true_false_string ff_psmp_param_set_more_psmp_flag = {
11766 "More PSMP Sequences Follow",
11767 "No PSMP Sequences Follow"
11770 static const value_string ff_mimo_cntrl_nc_index_flags[] = {
11771 {0x00, "1 Column"},
11772 {0x01, "2 Columns"},
11773 {0x02, "3 Columns"},
11774 {0x03, "4 Columns"},
11778 static const value_string ff_mimo_cntrl_nr_index_flags[] = {
11786 static const true_false_string ff_mimo_cntrl_channel_width_flag = {
11791 static const true_false_string ff_ht_info_information_request_flag = {
11792 "Requesting HT Information Exchange management action frame",
11793 "Should not send an HT Information Exchange management action frame"
11796 static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
11797 "Transmitting station is intolerant of 40 MHz operation",
11798 "Transmitting station permits 40 MHz operation"
11801 static const true_false_string ff_ht_info_sta_chan_width_flag = {
11806 static const value_string ff_ht_action_flags[] = {
11807 {HT_ACTION_NOTIFY_CHAN_WIDTH, "Notify Channel Width"},
11808 {HT_ACTION_SM_PWR_SAVE, "Spatial Multiplexing (SM) Power Save"},
11809 {HT_ACTION_PSMP_ACTION, "Power Save Multi-Poll (PSMP) action frame"},
11810 {HT_ACTION_SET_PCO_PHASE, "Set PCO Phase"},
11811 {HT_ACTION_MIMO_CSI, "MIMO CSI Matrices"},
11812 {HT_ACTION_MIMO_BEAMFORMING, "MIMO Non-compressed Beamforming"},
11813 {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING, "MIMO Compressed Beamforming"},
11814 {HT_ACTION_ANT_SEL_FEEDBACK, "Antenna Selection Indices Feedback"},
11815 {HT_ACTION_HT_INFO_EXCHANGE, "HT Information Exchange"},
11819 static const value_string ff_mimo_cntrl_grouping_flags[] = {
11820 {0x00, "No Grouping"},
11821 {0x01, "Carrier Groups of 2"},
11822 {0x02, "Carrier Groups of 4"},
11823 {0x03, "Reserved"},
11827 static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
11835 static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
11836 {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
11837 {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
11838 {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
11839 {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
11845 static const value_string ff_pa_action_codes[] = {
11846 {PA_DSE_ENABLEMENT, "DSE enablement"},
11847 {PA_DSE_DEENABLEMENT, "DSE deenablement"},
11848 {PA_DSE_REG_LOC_ANNOUNCEMENT, "DSE Registered Location Announcement"},
11849 {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement"},
11850 {PA_DSE_MEASUREMENT_REQUEST, "DSE measurement request"},
11851 {PA_DSE_MEASUREMENT_REPORT, "DSE measurement report"},
11852 {PA_MEASUREMENT_PILOT, "Measurement Pilot"},
11853 {PA_DSE_POWER_CONSTRAINT, "DSE power constraint"},
11854 {PA_VENDOR_SPECIFIC, "Vendor Specific"},
11855 {PA_GAS_INITIAL_REQUEST, "GAS Initial Request"},
11856 {PA_GAS_INITIAL_RESPONSE, "GAS Initial Response"},
11857 {PA_GAS_COMEBACK_REQUEST, "GAS Comeback Request"},
11858 {PA_GAS_COMEBACK_RESPONSE, "GAS Comeback Response"},
11859 {PA_TDLS_DISCOVERY_RESPONSE, "TDLS Discovery Response"},
11863 static const value_string category_codes[] = {
11864 {CAT_SPECTRUM_MGMT, "Spectrum Management (SM)"},
11865 {0x80 | CAT_SPECTRUM_MGMT, "Spectrum Management (SM) (error)"},
11866 {CAT_QOS, "Quality of Service (QoS)"},
11867 {0x80 | CAT_QOS, "Quality of Service (QoS (error))"},
11868 {CAT_DLS, "Direct-Link Setup (DLS)"},
11869 {0x80 | CAT_DLS, "Direct-Link Setup (DLS) (error)"},
11870 {CAT_BLOCK_ACK, "Block Ack"},
11871 {0x80 | CAT_BLOCK_ACK, "Block Ack (error)"},
11872 {CAT_PUBLIC, "Public Action"},
11873 {0x80 | CAT_PUBLIC, "Public Action (error)"},
11874 {CAT_RADIO_MEASUREMENT, "Radio Measurement"},
11875 {0x80 | CAT_RADIO_MEASUREMENT, "Radio Measurement (error)"},
11876 {CAT_FAST_BSS_TRANSITION, "Fast BSS Transition"},
11877 {0x80 | CAT_FAST_BSS_TRANSITION, "Fast BSS Transition (error)"},
11878 {CAT_HT, "High Throughput"},
11879 {0x80 | CAT_HT, "High Throughput (error)"},
11880 {CAT_SA_QUERY, "SA Query"},
11881 {0x80 | CAT_SA_QUERY, "SA Query (error)"},
11882 {CAT_PUBLIC_PROTECTED, "Protected Dual of Public Action"},
11883 {0x80 | CAT_PUBLIC_PROTECTED, "Protected Dual of Public Action (error)"},
11885 {0x80 | CAT_WNM, "WNM (error)"},
11886 {CAT_UNPROTECTED_WNM, "Unprotected WNM"},
11887 {0x80 | CAT_UNPROTECTED_WNM, "Unprotected WNM (error)"},
11888 {CAT_TDLS, "TDLS"},
11889 {0x80 | CAT_TDLS, "TDLS (error)"},
11890 {CAT_MESH, "MESH"},
11891 {0x80 | CAT_MESH, "Mesh (error)"},
11892 {CAT_MULTIHOP, "Multihop"},
11893 {0x80 | CAT_MULTIHOP, "Multihop (error)"},
11894 {CAT_SELF_PROTECTED, "Self-protected"},
11895 {0x80 | CAT_SELF_PROTECTED, "Self-protected (error)"},
11896 {CAT_MGMT_NOTIFICATION, "Management Notification"},
11897 {0x80 | CAT_MGMT_NOTIFICATION, "Management Notification (error)"},
11898 {CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected"},
11899 {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected (error)"},
11900 {CAT_VENDOR_SPECIFIC, "Vendor Specific"},
11901 {0x80 | CAT_VENDOR_SPECIFIC, "Vendor Specific (error)"},
11905 static const value_string action_codes[] ={
11906 {SM_ACTION_MEASUREMENT_REQUEST, "Measurement Request"},
11907 {SM_ACTION_MEASUREMENT_REPORT, "Measurement Report"},
11908 {SM_ACTION_TPC_REQUEST, "TPC Request"},
11909 {SM_ACTION_TPC_REPORT, "TPC Report"},
11910 {SM_ACTION_CHAN_SWITCH_ANNC, "Channel Switch Announcement"},
11914 static const value_string vendor_action_types_mrvl[] ={
11915 {MRVL_ACTION_MESH_MANAGEMENT, "Mesh Management"},
11919 static const value_string mesh_mgt_action_codes_mrvl[] ={
11920 {MRVL_MESH_MGMT_ACTION_RREQ, "Route Request"},
11921 {MRVL_MESH_MGMT_ACTION_RREP, "Route Response"},
11922 {MRVL_MESH_MGMT_ACTION_RERR, "Route Error"},
11923 {MRVL_MESH_MGMT_ACTION_PLDM, "Peer Link Down"},
11927 static const value_string mesh_path_selection_codes[] ={
11928 {0x0, "Hybrid Wireless Mesh Protocol"},
11932 static const value_string mesh_metric_codes[] ={
11933 {0x0, "Airtime Link Metric"},
11937 static const value_string wme_action_codes[] = {
11938 {0x00, "Setup request"},
11939 {0x01, "Setup response"},
11940 {0x02, "Teardown"},
11944 static const value_string wme_status_codes[] = {
11945 {0x00, "Admission accepted"},
11946 {0x01, "Invalid parameters"},
11951 static const value_string mesh_action[] ={
11952 {MESH_ACTION_LINK_METRIC_REPORT, "Mesh Link Metric Report"},
11953 {MESH_ACTION_HWMP, "HWMP Mesh Path Selection"},
11954 {MESH_ACTION_GATE_ANNOUNCE, "Gate Announcement"},
11955 {MESH_ACTION_CONGESTION_CTL, "Congestion Control Notification"},
11956 {MESH_ACTION_MCCA_SETUP_REQUEST, "MCCA Setup Request"},
11957 {MESH_ACTION_MCCA_SETUP_REPLY, "MCCA Setup Reply"},
11958 {MESH_ACTION_MCCA_ADV_REQUEST, "MCCA Advertisement Request"},
11959 {MESH_ACTION_MCCA_ADV, "MCCA Advertisement"},
11960 {MESH_ACTION_MCCA_TEARDOWN, "MCCA Teardown"},
11961 {MESH_ACTION_TBTT_ADJ_REQUEST, "TBTT Adjustment Request"},
11962 {MESH_ACTION_TBTT_ADJ_RESPONSE, "TBTT Adjustment Response"},
11966 static const value_string multihop_action[] ={
11967 {MULTIHOP_ACTION_PROXY_UPDATE, "Proxy Update"},
11968 {MULTIHOP_ACTION_PROXY_UPDATE_CONF, "Proxy Update Confirmation"},
11972 static const value_string selfprot_action[] = {
11973 {SELFPROT_ACTION_MESH_PEERING_OPEN, "Mesh Peering Open"},
11974 {SELFPROT_ACTION_MESH_PEERING_CONFIRM, "Mesh Peering Confirm"},
11975 {SELFPROT_ACTION_MESH_PEERING_CLOSE, "Mesh Peering Close"},
11976 {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM, "Mesh Group Key Inform"},
11977 {SELFPROT_ACTION_MESH_GROUP_KEY_ACK, "Mesh Group Key Ack"},
11981 static const value_string mesh_peering_proto_ids[] = {
11982 {MESH_PEERING_PROTO_MGMT, "Mesh peering management protocol"},
11983 {MESH_PEERING_PROTO_AMPE, "Authenticated mesh peering exchange protocol"},
11984 {MESH_PEERING_PROTO_VENDOR, "Vendor specific"},
11988 static const true_false_string hwmp_targ_usn_flags = {
11989 "[USN = 1] Target Sequence Number Unknown at Originator",
11990 "[USN = 0] Target Sequence Number Known at Originator"
11993 static const true_false_string hwmp_targ_to_flags = {
11994 "[TO = 1] Only Target Will Respond",
11995 "[TO = 0] Intermediate Nodes May Respond"
11998 static const value_string ack_policy[] = {
11999 {0x00, "Normal Ack"},
12001 {0x02, "No explicit acknowledgment"},
12002 {0x03, "Block Ack"},
12006 static const value_string qos_action_codes[] = {
12007 {SM_ACTION_ADDTS_REQUEST, "ADDTS Request"},
12008 {SM_ACTION_ADDTS_RESPONSE, "ADDTS Response"},
12009 {SM_ACTION_DELTS, "DELTS"},
12010 {SM_ACTION_QOS_SCHEDULE, "Schedule"},
12014 static const value_string ba_action_codes[] = {
12015 {BA_ADD_BLOCK_ACK_REQUEST, "Add Block Ack Request"},
12016 {BA_ADD_BLOCK_ACK_RESPONSE, "Add Block Ack Response"},
12017 {BA_DELETE_BLOCK_ACK, "Delete Block Ack"},
12021 static const value_string dls_action_codes[] = {
12022 {SM_ACTION_DLS_REQUEST, "DLS Request"},
12023 {SM_ACTION_DLS_RESPONSE, "DLS Response"},
12024 {SM_ACTION_DLS_TEARDOWN, "DLS Teardown"},
12028 static const value_string tsinfo_type[] = {
12029 {0x0, "Aperiodic or unspecified Traffic"},
12030 {0x1, "Periodic Traffic"},
12034 static const value_string tsinfo_direction[] = {
12036 {0x01, "Downlink"},
12037 {0x02, "Direct link"},
12038 {0x03, "Bidirectional link"},
12042 static const value_string tsinfo_access[] = {
12043 {0x00, "Reserved"},
12050 static const value_string qos_up[] = {
12051 {0x00, "Best Effort"},
12052 {0x01, "Background"},
12054 {0x03, "Excellent Effort"},
12055 {0x04, "Controlled Load"},
12058 {0x07, "Network Control"},
12062 static const value_string classifier_type[] = {
12063 {0x00, "Ethernet parameters"},
12064 {0x01, "TCP/UDP IP parameters"},
12065 {0x02, "IEEE 802.1D/Q parameters"},
12069 static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
12070 "Immediate Acknowledgement Required",
12071 "Sender Does Not Require Immediate Acknowledgement"
12074 static const value_string ieee80211_block_ack_request_type_flags[] = {
12075 {0x00, "Basic Block Ack Request"},
12076 {0x01, "Reserved"},
12077 {0x02, "Compressed Block Ack Request"},
12078 {0x03, "Multi-TID Block Ack Request"},
12082 static const value_string ieee80211_block_ack_type_flags[] = {
12083 {0x00, "Basic Block Ack"},
12084 {0x01, "Reserved"},
12085 {0x02, "Compressed Block"},
12086 {0x03, "Multi-TID Block"},
12090 static const value_string ft_action_codes[] ={
12091 {FT_ACTION_REQUEST, "FT Request"},
12092 {FT_ACTION_RESPONSE, "FT Response"},
12093 {FT_ACTION_CONFIRM, "FT Confirm"},
12094 {FT_ACTION_ACK, "FT Ack"},
12098 static const value_string sa_query_action_codes[] ={
12099 {SA_QUERY_REQUEST, "SA Query Request"},
12100 {SA_QUERY_RESPONSE, "SA Query Response"},
12104 static const value_string ieee80211_data_encap_payload_types[] = {
12105 {1, "Remote Request/Response"},
12110 static hf_register_info hf[] = {
12111 {&hf_ieee80211_fc_field,
12112 {"Frame Control Field", "wlan.fc", FT_UINT16, BASE_HEX, NULL, 0,
12113 "MAC Frame control", HFILL }},
12115 {&hf_ieee80211_fc_proto_version,
12116 {"Version", "wlan.fc.version", FT_UINT8, BASE_DEC, NULL, 0,
12117 "MAC Protocol version", HFILL }}, /* 0 */
12119 {&hf_ieee80211_fc_frame_type,
12120 {"Type", "wlan.fc.type", FT_UINT8, BASE_DEC, VALS(frame_type), 0,
12121 "Frame type", HFILL }},
12123 {&hf_ieee80211_fc_frame_subtype,
12124 {"Subtype", "wlan.fc.subtype", FT_UINT8, BASE_DEC, NULL, 0,
12125 "Frame subtype", HFILL }}, /* 2 */
12127 {&hf_ieee80211_fc_frame_type_subtype,
12128 {"Type/Subtype", "wlan.fc.type_subtype", FT_UINT8, BASE_HEX, VALS(frame_type_subtype_vals), 0,
12129 "Type and subtype combined (first byte: type, second byte: subtype)", HFILL }},
12131 {&hf_ieee80211_fc_flags,
12132 {"Protocol Flags", "wlan.flags", FT_UINT8, BASE_HEX, NULL, 0,
12135 {&hf_ieee80211_fc_data_ds,
12136 {"DS status", "wlan.fc.ds", FT_UINT8, BASE_HEX, VALS (&tofrom_ds), (FLAG_FROM_DS|FLAG_TO_DS),
12137 "Data-frame DS-traversal status", HFILL }}, /* 3 */
12139 {&hf_ieee80211_fc_to_ds,
12140 {"To DS", "wlan.fc.tods", FT_BOOLEAN, 8, TFS (&tods_flag), FLAG_TO_DS,
12141 "To DS flag", HFILL }}, /* 4 */
12143 {&hf_ieee80211_fc_from_ds,
12144 {"From DS", "wlan.fc.fromds", FT_BOOLEAN, 8, TFS (&fromds_flag), FLAG_FROM_DS,
12145 "From DS flag", HFILL }}, /* 5 */
12147 {&hf_ieee80211_fc_more_frag,
12148 {"More Fragments", "wlan.fc.frag", FT_BOOLEAN, 8, TFS (&more_frags), FLAG_MORE_FRAGMENTS,
12149 "More Fragments flag", HFILL }}, /* 6 */
12151 {&hf_ieee80211_fc_retry,
12152 {"Retry", "wlan.fc.retry", FT_BOOLEAN, 8, TFS (&retry_flags), FLAG_RETRY,
12153 "Retransmission flag", HFILL }},
12155 { &hf_ieee80211_fc_analysis_retransmission,
12156 {"Retransmission", "wlan.analysis.retransmission", FT_NONE, BASE_NONE,
12157 NULL, 0x0, "This frame is a suspected wireless retransmission", HFILL }},
12159 { &hf_ieee80211_fc_analysis_retransmission_frame,
12160 {"Retransmission of frame", "wlan.analysis.retransmission_frame", FT_FRAMENUM, BASE_NONE,
12161 NULL, 0x0, "This is a retransmission of frame #", HFILL }},
12163 {&hf_ieee80211_fc_pwr_mgt,
12164 {"PWR MGT", "wlan.fc.pwrmgt", FT_BOOLEAN, 8, TFS (&pm_flags), FLAG_POWER_MGT,
12165 "Power management status", HFILL }},
12167 {&hf_ieee80211_fc_more_data,
12168 {"More Data", "wlan.fc.moredata", FT_BOOLEAN, 8, TFS (&md_flags), FLAG_MORE_DATA,
12169 "More data flag", HFILL }},
12171 {&hf_ieee80211_fc_protected,
12172 {"Protected flag", "wlan.fc.protected", FT_BOOLEAN, 8, TFS (&protected_flags), FLAG_PROTECTED,
12175 {&hf_ieee80211_fc_order,
12176 {"Order flag", "wlan.fc.order", FT_BOOLEAN, 8, TFS (&order_flags), FLAG_ORDER,
12177 "Strictly ordered flag", HFILL }},
12179 {&hf_ieee80211_assoc_id,
12180 {"Association ID","wlan.aid",FT_UINT16, BASE_DEC, NULL, 0x3FFF,
12181 "Association-ID field", HFILL }},
12183 {&hf_ieee80211_did_duration,
12184 {"Duration", "wlan.duration", FT_UINT16, BASE_DEC, NULL, 0,
12185 "Duration field", HFILL }},
12187 {&hf_ieee80211_addr_da,
12188 {"Destination address", "wlan.da", FT_ETHER, BASE_NONE, NULL, 0,
12189 "Destination Hardware Address", HFILL }},
12191 {&hf_ieee80211_addr_sa,
12192 {"Source address", "wlan.sa", FT_ETHER, BASE_NONE, NULL, 0,
12193 "Source Hardware Address", HFILL }},
12195 { &hf_ieee80211_addr,
12196 {"Hardware address", "wlan.addr", FT_ETHER, BASE_NONE, NULL, 0,
12197 "SA, DA, BSSID, RA or TA Hardware Address", HFILL }},
12199 {&hf_ieee80211_addr_ra,
12200 {"Receiver address", "wlan.ra", FT_ETHER, BASE_NONE, NULL, 0,
12201 "Receiving Station Hardware Address", HFILL }},
12203 {&hf_ieee80211_addr_ta,
12204 {"Transmitter address", "wlan.ta", FT_ETHER, BASE_NONE, NULL, 0,
12205 "Transmitting Station Hardware Address", HFILL }},
12207 {&hf_ieee80211_addr_bssid,
12208 {"BSS Id", "wlan.bssid", FT_ETHER, BASE_NONE, NULL, 0,
12209 "Basic Service Set ID", HFILL }},
12211 {&hf_ieee80211_frag_number,
12212 {"Fragment number", "wlan.frag", FT_UINT16, BASE_DEC, NULL, 0,
12215 {&hf_ieee80211_seq_number,
12216 {"Sequence number", "wlan.seq", FT_UINT16, BASE_DEC, NULL, 0,
12219 {&hf_ieee80211_qos_tid,
12220 {"TID", "wlan.qos.tid", FT_UINT16, BASE_DEC, NULL, 0,
12223 {&hf_ieee80211_qos_priority,
12224 {"Priority", "wlan.qos.priority", FT_UINT16, BASE_DEC, NULL, 0,
12225 "802.1D Tag", HFILL }},
12227 {&hf_ieee80211_qos_eosp,
12228 {"EOSP", "wlan.qos.eosp", FT_BOOLEAN, 8, TFS (&eosp_flag), QOS_FLAG_EOSP,
12229 "EOSP Field", HFILL }},
12231 {&hf_ieee80211_qos_bit4,
12232 {"QoS bit 4", "wlan.qos.bit4", FT_BOOLEAN, 8, TFS (&bit4_flag), QOS_FLAG_EOSP,
12235 {&hf_ieee80211_qos_ack_policy,
12236 {"Ack Policy", "wlan.qos.ack", FT_UINT8, BASE_HEX, VALS (&ack_policy), 0,
12239 {&hf_ieee80211_qos_amsdu_present,
12240 {"Payload Type", "wlan.qos.amsdupresent", FT_BOOLEAN, BASE_NONE,
12241 TFS(&ieee80211_qos_amsdu_present_flag), 0x0, NULL, HFILL }},
12243 {&hf_ieee80211_qos_txop_limit,
12244 {"TXOP Limit", "wlan.qos.txop_limit", FT_UINT16, BASE_DEC, NULL, 0,
12247 {&hf_ieee80211_qos_buf_state_indicated,
12248 {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
12249 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
12252 {&hf_ieee80211_qos_highest_pri_buf_ac,
12253 {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
12254 FT_UINT8, BASE_DEC, VALS(wme_acs), 0x0C,
12257 {&hf_ieee80211_qos_qap_buf_load,
12258 {"QAP Buffered Load", "wlan.qos.qap_buf_load",
12259 FT_UINT8, BASE_DEC, NULL, 0xF0,
12262 {&hf_ieee80211_qos_txop_dur_req,
12263 {"TXOP Duration Requested", "wlan.qos.txop_dur_req", FT_UINT16, BASE_DEC, NULL, 0,
12266 {&hf_ieee80211_qos_queue_size,
12267 {"Queue Size", "wlan.qos.queue_size", FT_UINT16, BASE_DEC, NULL, 0,
12270 {&hf_ieee80211_fcs,
12271 {"Frame check sequence", "wlan.fcs", FT_UINT32, BASE_HEX,
12272 NULL, 0, "Frame Check Sequence (FCS)", HFILL }},
12274 {&hf_ieee80211_fcs_good,
12275 {"Good", "wlan.fcs_good", FT_BOOLEAN, BASE_NONE,
12276 NULL, 0x0, "True if the FCS is correct", HFILL }},
12278 {&hf_ieee80211_fcs_bad,
12279 {"Bad", "wlan.fcs_bad", FT_BOOLEAN, BASE_NONE,
12280 NULL, 0x0, "True if the FCS is incorrect", HFILL }},
12282 {&hf_ieee80211_fragment_overlap,
12283 {"Fragment overlap", "wlan.fragment.overlap", FT_BOOLEAN, BASE_NONE,
12284 NULL, 0x0, "Fragment overlaps with other fragments", HFILL }},
12286 {&hf_ieee80211_fragment_overlap_conflict,
12287 {"Conflicting data in fragment overlap", "wlan.fragment.overlap.conflict",
12288 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12289 "Overlapping fragments contained conflicting data", HFILL }},
12291 {&hf_ieee80211_fragment_multiple_tails,
12292 {"Multiple tail fragments found", "wlan.fragment.multipletails",
12293 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12294 "Several tails were found when defragmenting the packet", HFILL }},
12296 {&hf_ieee80211_fragment_too_long_fragment,
12297 {"Fragment too long", "wlan.fragment.toolongfragment",
12298 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
12299 "Fragment contained data past end of packet", HFILL }},
12301 {&hf_ieee80211_fragment_error,
12302 {"Defragmentation error", "wlan.fragment.error",
12303 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
12304 "Defragmentation error due to illegal fragments", HFILL }},
12306 {&hf_ieee80211_fragment_count,
12307 {"Fragment count", "wlan.fragment.count", FT_UINT32, BASE_DEC, NULL, 0x0,
12310 {&hf_ieee80211_fragment,
12311 {"802.11 Fragment", "wlan.fragment", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
12314 {&hf_ieee80211_fragments,
12315 {"802.11 Fragments", "wlan.fragments", FT_NONE, BASE_NONE, NULL, 0x0,
12318 {&hf_ieee80211_reassembled_in,
12319 {"Reassembled 802.11 in frame", "wlan.reassembled_in", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
12320 "This 802.11 packet is reassembled in this frame", HFILL }},
12322 {&hf_ieee80211_reassembled_length,
12323 {"Reassembled 802.11 length", "wlan.reassembled.length", FT_UINT32, BASE_DEC, NULL, 0x0,
12324 "The total length of the reassembled payload", HFILL }},
12326 {&hf_ieee80211_wep_iv,
12327 {"Initialization Vector", "wlan.wep.iv", FT_UINT24, BASE_HEX, NULL, 0,
12330 {&hf_ieee80211_wep_iv_weak,
12331 {"Weak IV", "wlan.wep.weakiv", FT_BOOLEAN, BASE_NONE, NULL,0x0,
12334 {&hf_ieee80211_tkip_extiv,
12335 {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv", FT_STRING,
12336 BASE_NONE, NULL, 0, "TKIP Extended Initialization Vector", HFILL }},
12338 {&hf_ieee80211_ccmp_extiv,
12339 {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv", FT_STRING,
12340 BASE_NONE, NULL, 0, "CCMP Extended Initialization Vector", HFILL }},
12342 {&hf_ieee80211_wep_key,
12343 {"Key Index", "wlan.wep.key", FT_UINT8, BASE_DEC, NULL, 0,
12346 {&hf_ieee80211_wep_icv,
12347 {"WEP ICV", "wlan.wep.icv", FT_UINT32, BASE_HEX, NULL, 0,
12350 {&hf_ieee80211_block_ack_request_control,
12351 {"Block Ack Request (BAR) Control", "wlan.bar.control",
12352 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
12354 {&hf_ieee80211_block_ack_control,
12355 {"Block Ack Request Control", "wlan.ba.control",
12356 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
12358 {&hf_ieee80211_block_ack_control_ack_policy,
12359 {"BAR Ack Policy", "wlan.ba.control.ackpolicy",
12360 FT_BOOLEAN, 16, TFS (&ieee80211_block_ack_control_ack_policy_flag), 0x01, "Block Ack Request (BAR) Ack Policy", HFILL }},
12362 {&hf_ieee80211_block_ack_control_multi_tid,
12363 {"Multi-TID", "wlan.ba.control.multitid",
12364 FT_BOOLEAN, 16, 0, 0x02, "Multi-Traffic Identifier (TID)", HFILL }},
12366 {&hf_ieee80211_block_ack_control_compressed_bitmap,
12367 {"Compressed Bitmap", "wlan.ba.control.cbitmap",
12368 FT_BOOLEAN, 16, 0, 0x04, NULL, HFILL }},
12370 {&hf_ieee80211_block_ack_control_reserved,
12371 {"Reserved", "wlan.ba.control.cbitmap",
12372 FT_UINT16, BASE_HEX, NULL, 0x0ff8, NULL, HFILL }},
12374 {&hf_ieee80211_block_ack_control_basic_tid_info,
12375 {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
12376 FT_UINT16, BASE_HEX, NULL, 0xf000, "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL }},
12378 {&hf_ieee80211_block_ack_control_compressed_tid_info,
12379 {"TID for which a BlockAck frame is requested", "wlan.bar.compressed.tidinfo",
12380 FT_UINT16, BASE_HEX, NULL, 0xf000, "Traffic Identifier (TID) for which a BlockAck frame is requested", HFILL }},
12382 {&hf_ieee80211_block_ack_control_multi_tid_info,
12383 {"Number of TIDs Present", "wlan.ba.mtid.tidinfo",
12384 FT_UINT16, BASE_HEX, NULL, 0xf000, "Number of Traffic Identifiers (TIDs) Present", HFILL }},
12386 {&hf_ieee80211_block_ack_multi_tid_info,
12387 {"Traffic Identifier (TID) Info", "wlan.ba.mtid.tid",
12388 FT_UINT8, BASE_DEC, 0, 0, NULL, HFILL }},
12390 {&hf_ieee80211_block_ack_multi_tid_reserved,
12391 {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
12392 FT_UINT16, BASE_HEX, 0, 0x0fff, NULL, HFILL }},
12394 {&hf_ieee80211_block_ack_multi_tid_value,
12395 {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
12396 FT_UINT16, BASE_HEX, 0, 0xf000, NULL, HFILL }},
12398 {&hf_ieee80211_block_ack_request_type,
12399 {"Block Ack Request Type", "wlan.bar.type",
12400 FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_request_type_flags), 0, "Block Ack Request (BAR) Type", HFILL }},
12402 {&hf_ieee80211_block_ack_type,
12403 {"Block Ack Type", "wlan.ba.type",
12404 FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_type_flags), 0, NULL, HFILL }},
12406 {&hf_ieee80211_block_ack_bitmap,
12407 {"Block Ack Bitmap", "wlan.ba.bm",
12408 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
12410 {&hf_ieee80211_block_ack_bitmap_missing_frame,
12411 {"Missing frame", "wlan.ba.bm.missing_frame",
12412 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
12414 {&hf_ieee80211_data_encap_payload_type,
12415 {"Payload Type", "wlan.data_encap.payload_type",
12416 FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types), 0, NULL,
12419 {&hf_ieee80211_ff_tdls_action_code,
12420 {"Action code", "wlan_mgt.fixed.action_code",
12421 FT_UINT8, BASE_DEC, VALS(tdls_action_codes), 0,
12422 "Management action code", HFILL }},
12424 {&hf_ieee80211_ff_target_channel,
12425 {"Target Channel", "wlan_mgt.fixed.target_channel",
12426 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12428 {&hf_ieee80211_ff_regulatory_class,
12429 {"Regulatory Class", "wlan_mgt.fixed.regulatory_class",
12430 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12432 {&hf_ieee80211_ff_wnm_action_code,
12433 {"Action code", "wlan_mgt.fixed.action_code",
12434 FT_UINT8, BASE_DEC, VALS(wnm_action_codes), 0,
12435 "Management action code", HFILL }},
12437 {&hf_ieee80211_ff_request_mode_pref_cand,
12438 {"Preferred Candidate List Included",
12439 "wlan_mgt.fixed.request_mode.pref_cand",
12440 FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
12441 {&hf_ieee80211_ff_request_mode_abridged,
12442 {"Abridged", "wlan_mgt.fixed.request_mode.abridged",
12443 FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
12444 {&hf_ieee80211_ff_request_mode_disassoc_imminent,
12445 {"Disassociation Imminent",
12446 "wlan_mgt.fixed.request_mode.disassoc_imminent",
12447 FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
12448 {&hf_ieee80211_ff_request_mode_bss_term_included,
12449 {"BSS Termination Included",
12450 "wlan_mgt.fixed.request_mode.bss_term_included",
12451 FT_UINT8, BASE_DEC, NULL, 0x08, NULL, HFILL }},
12452 {&hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
12453 {"ESS Disassociation Imminent",
12454 "wlan_mgt.fixed.request_mode.ess_disassoc_imminent",
12455 FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
12456 {&hf_ieee80211_ff_disassoc_timer,
12457 {"Disassociation Timer", "wlan_mgt.fixed.disassoc_timer",
12458 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
12459 {&hf_ieee80211_ff_validity_interval,
12460 {"Validity Interval", "wlan_mgt.fixed.validity_interval",
12461 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12462 {&hf_ieee80211_ff_url_len,
12463 {"Session Information URL Length",
12464 "wlan_mgt.fixed.session_information.url_length",
12465 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
12466 {&hf_ieee80211_ff_url,
12467 {"Session Information URL", "wlan_mgt.fixed.session_information.url",
12468 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
12471 static const true_false_string qos_info_field_qack_flags = {
12472 "STAs/APs MIB attribute dot11QAckOptionImplemented is true",
12473 "STAs/APs MIB attribute dot11QAckOptionImplemented is false"
12476 static const true_false_string qos_info_field_more_data_ack_flags = {
12477 "STA can process Ack frames with More Data bit and will remain in the awake state.",
12478 "STA cannot process Ack frames with More Data bit in Frame Control field."
12481 static const true_false_string qos_info_field_queue_req_flags = {
12482 "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
12483 "AP cannot process Queue Size subfield in QoS data frames."
12486 /* 7.3.1.17 Table 19b-Settings of the Max SP Length subfield */
12487 static const value_string qos_info_field_max_sp_length_flags[] =
12489 { 0x0, "QAP may deliver all buffered MSDUs and MMPDUs." },
12490 { 0x2, "QAP may deliver a maximum of two MSDUs and MMPDUs per SP." },
12491 { 0x1, "QAP may deliver a maximum of four MSDUs and MMPDUs per SP." },
12492 { 0x3, "QAP may deliver a maximum of six MSDUs and MMPDUs per SP." },
12496 static const true_false_string rsn_preauth_flags = {
12497 "Transmitter supports pre-authentication",
12498 "Transmitter does not support pre-authentication"
12501 static const true_false_string rsn_no_pairwise_flags = {
12502 "Transmitter cannot support WEP default key 0 simultaneously with "
12504 "Transmitter can support WEP default key 0 simultaneously with "
12508 static const value_string rsn_cap_replay_counter[] = {
12509 {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
12510 {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
12511 {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
12512 {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
12516 static const true_false_string ht_ldpc_coding_flag = {
12517 "Transmitter supports receiving LDPC coded packets",
12518 "Transmitter does not support receiving LDPC coded packets"
12521 static const true_false_string ht_chan_width_flag = {
12522 "Transmitter supports 20MHz and 40MHz operation",
12523 "Transmitter only supports 20MHz operation"
12526 static const value_string ht_sm_pwsave_flag[] = {
12527 {0x00, "Static SM Power Save mode"},
12528 {0x01, "Dynamic SM Power Save mode"},
12529 {0x02, "Reserved"},
12530 {0x03, "SM Power Save disabled"},
12534 static const true_false_string ht_green_flag = {
12535 "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
12536 "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
12539 static const value_string ht_rx_stbc_flag[] = {
12540 {0x00, "No Rx STBC support"},
12541 {0x01, "Rx support of one spatial stream"},
12542 {0x02, "Rx support of one and two spatial streams"},
12543 {0x03, "Rx support of one, two, and three spatial streams"},
12547 static const true_false_string ht_delayed_block_ack_flag = {
12548 "Transmitter supports HT-Delayed BlockAck",
12549 "Transmitter does not support HT-Delayed BlockAck"
12552 static const true_false_string ht_max_amsdu_flag = {
12557 static const true_false_string ht_dss_cck_40_flag = {
12558 "Will/Can use DSSS/CCK in 40 MHz",
12559 "Won't/Can't use of DSSS/CCK in 40 MHz"
12562 static const true_false_string ht_psmp_flag = {
12563 "Will/Can support PSMP operation",
12564 "Won't/Can't support PSMP operation"
12567 static const true_false_string ht_40_mhz_intolerant_flag = {
12568 "Use of 40 MHz transmissions restricted/disallowed",
12569 "Use of 40 MHz transmissions unrestricted/allowed"
12572 static const value_string ampduparam_mpdu_start_spacing_flags[] = {
12573 {0x00, "no restriction"},
12574 {0x01, "1/4 [usec]"},
12575 {0x02, "1/2 [usec]"},
12576 {0x03, "1 [usec]"},
12577 {0x04, "2 [usec]"},
12578 {0x05, "4 [usec]"},
12579 {0x06, "8 [usec]"},
12580 {0x07, "16 [usec]"},
12584 static const true_false_string mcsset_tx_mcs_set_defined_flag = {
12589 static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
12594 static const value_string mcsset_tx_max_spatial_streams_flags[] = {
12595 {0x00, "1 spatial stream"},
12596 {0x01, "2 spatial streams"},
12597 {0x02, "3 spatial streams"},
12598 {0x03, "4 spatial streams"},
12602 static const value_string htex_transtime_flags[] = {
12603 {0x00, "No Transition"},
12604 {0x01, "400 usec"},
12605 {0x02, "1.5 msec"},
12610 static const value_string htex_mcs_flags[] = {
12611 {0x00, "STA does not provide MCS feedback"},
12612 {0x01, "Reserved"},
12613 {0x02, "STA provides only unsolicited MCS feedback"},
12614 {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
12618 static const value_string txbf_calib_flag[] = {
12619 {0x00, "incapable"},
12620 {0x01, "Limited involvement, cannot initiate"},
12621 {0x02, "Limited involvement, can initiate"},
12622 {0x03, "Fully capable"},
12626 static const value_string txbf_feedback_flags[] = {
12627 {0x00, "not supported"},
12628 {0x01, "delayed feedback capable"},
12629 {0x02, "immediate feedback capable"},
12630 {0x03, "delayed and immediate feedback capable"},
12634 static const value_string txbf_antenna_flags[] = {
12635 {0x00, "1 TX antenna sounding"},
12636 {0x01, "2 TX antenna sounding"},
12637 {0x02, "3 TX antenna sounding"},
12638 {0x03, "4 TX antenna sounding"},
12642 static const value_string txbf_csi_max_rows_bf_flags[] = {
12643 {0x00, "1 row of CSI"},
12644 {0x01, "2 rows of CSI"},
12645 {0x02, "3 rows of CSI"},
12646 {0x03, "4 rows of CSI"},
12650 static const value_string txbf_chan_est_flags[] = {
12651 {0x00, "1 space time stream"},
12652 {0x01, "2 space time streams"},
12653 {0x02, "3 space time streams"},
12654 {0x03, "4 space time streams"},
12658 static const value_string txbf_min_group_flags[] = {
12659 {0x00, "No grouping supported"},
12660 {0x01, "Groups of 1,2 supported"},
12661 {0x02, "Groups of 1,4 supported"},
12662 {0x03, "Groups of 1,2,4 supported"},
12666 static const value_string hta_ext_chan_offset_flag[] = {
12667 {0x00, "No Extension Channel"},
12668 {0x01, "Extension Channel above control channel"},
12669 {0x02, "Undefined"},
12670 {0x03, "Extension Channel below control channel"},
12674 static const true_false_string hta_rec_tx_width_flag = {
12675 "Any channel width enabled",
12676 "Use 20MHz channel (control)"
12679 static const true_false_string hta_rifs_mode_flag = {
12680 "Use of RIFS permitted",
12681 "Use of RIFS prohibited"
12684 static const true_false_string hta_controlled_access_flag = {
12689 static const value_string hta_service_interval_flag[] = {
12701 static const value_string hta_operating_mode_flag[] = {
12702 {0x00, "Pure HT, no protection"},
12703 {0x01, "There may be non-HT devices (control & ext channel)"},
12704 {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
12705 {0x03, "Mixed: no non-HT is associated, protect on"},
12709 static const true_false_string hta_non_gf_devices_flag = {
12710 "All HT devices associated are GF capable",
12711 "One or More HT devices are not GF capable"
12714 static const true_false_string hta_dual_stbc_protection_flag = {
12715 "Dual CTS protections is used",
12716 "Regular use of RTS/CTS"
12719 static const true_false_string hta_secondary_beacon_flag = {
12720 "Secondary Beacon",
12724 static const true_false_string hta_lsig_txop_protection_flag = {
12729 static const true_false_string hta_pco_active_flag = {
12730 "PCO is activated in the BSS",
12731 "PCO is not activated in the BSS"
12734 static const true_false_string hta_pco_phase_flag = {
12735 "Switch to 20MHz phase/keep 20MHz",
12736 "Switch to 40MHz phase/keep 40MHz"
12739 static const value_string ht_info_secondary_channel_offset_flags[] = {
12740 {0x00, "No secondary channel"},
12741 {0x01, "Secondary channel is above the primary channel"},
12742 {0x02, "Reserved"},
12743 {0x03, "Secondary channel is below the primary channel"},
12747 static const true_false_string ht_info_channel_width_flag = {
12748 "Channel of any width supported",
12749 "20 MHz channel width only"
12752 static const true_false_string ht_info_rifs_mode_flag = {
12757 static const true_false_string ht_info_psmp_stas_only_flag = {
12758 "Association requests are accepted from only PSMP capable STA",
12759 "Association requests are accepted regardless of PSMP capability"
12762 static const value_string ht_info_service_interval_granularity_flags[] = {
12774 static const value_string ht_info_operating_mode_flags[] = {
12775 {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"},
12776 {0x01, "HT non-member protection mode"},
12777 {0x02, "Only HT STAs in the BSS, however, there exists at least one 20 MHz STA"},
12778 {0x03, "HT mixed mode"},
12782 static const true_false_string ht_info_non_greenfield_sta_present_flag = {
12783 "One or more associated STAs are not greenfield capable",
12784 "All associated STAs are greenfield capable"
12787 static const true_false_string ht_info_transmit_burst_limit_flag = {
12788 "2.4 GHz - 6.16 ms | All other bands - 3.08 ms",
12792 static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
12793 "Use of protection for non-HT STAs by overlapping BSSs is needed",
12794 "Use of protection for non-HT STAs by overlapping BSSs is not needed"
12797 static const true_false_string ht_info_dual_beacon_flag = {
12798 "AP transmits a secondary beacon",
12799 "No second beacon is transmitted"
12802 static const true_false_string ht_info_dual_cts_protection_flag = {
12807 static const true_false_string ht_info_secondary_beacon_flag = {
12808 "Secondary beacon",
12812 static const true_false_string ht_info_lsig_txop_protection_full_support_flag = {
12813 "All HT STAs in the BSS support L-SIG TXOP protection",
12814 "One or more HT STAs in the BSS do not support L-SIG TXOP protection"
12817 static const true_false_string ht_info_pco_phase_flag = {
12818 "Switch to or continue 40 MHz phase",
12819 "Switch to or continue 20 MHz phase"
12822 static const true_false_string htc_lac_trq_flag = {
12823 "Want sounding PPDU",
12824 "Don't want sounding PPDU"
12827 static const true_false_string htc_lac_mai_mrq_flag = {
12828 "MCS feedback requested",
12829 "No MCS feedback requested"
12832 static const value_string ieee80211_htc_lac_asel_command_flags[] = {
12833 {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
12834 {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
12835 {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
12836 {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
12837 {0x04, "Sounding Label"},
12838 {0x05, "No feedback, ASEL training failure"},
12839 {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
12840 {0x07, "Reserved"},
12844 static const value_string ieee80211_htc_cal_pos_flags[] = {
12845 {0x00, "Not a calibration frame"},
12846 {0x01, "Calibration Start"},
12847 {0x02, "Sounding Response"},
12848 {0x03, "Sounding Complete"},
12852 static const true_false_string ieee80211_htc_ndp_announcement_flag = {
12854 "No NDP will follow"
12857 static const value_string ieee80211_htc_csi_steering_flags[] = {
12858 {0x00, "No feedback required"},
12860 {0x02, "Non-compressed Beamforming Feedback Matrix"},
12861 {0x03, "Compressed Beamforming Feedback Matrix"},
12865 static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
12866 {0x00, "No Secondary Channel"},
12867 {0x01, "Above Primary Channel"},
12868 {0x02, "Reserved"},
12869 {0x03, "Below Primary Channel"},
12873 static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
12874 {0x00, "Frames may be transmitted before the channel switch has been completed"},
12875 {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
12879 static const value_string service_interval_granularity_vals[] = {
12891 static const value_string wep_type_vals[] = {
12892 { AIRPDCAP_KEY_TYPE_WEP, STRING_KEY_TYPE_WEP },
12893 { AIRPDCAP_KEY_TYPE_WPA_PWD, STRING_KEY_TYPE_WPA_PWD },
12894 { AIRPDCAP_KEY_TYPE_WPA_PSK, STRING_KEY_TYPE_WPA_PSK },
12898 static hf_register_info ff[] = {
12900 {&hf_ieee80211_ff_timestamp,
12901 {"Timestamp", "wlan_mgt.fixed.timestamp", FT_UINT64, BASE_HEX,
12902 NULL, 0, NULL, HFILL }},
12904 {&hf_ieee80211_ff_auth_alg,
12905 {"Authentication Algorithm", "wlan_mgt.fixed.auth.alg",
12906 FT_UINT16, BASE_DEC, VALS (&auth_alg), 0, NULL, HFILL }},
12908 {&hf_ieee80211_ff_beacon_interval,
12909 {"Beacon Interval", "wlan_mgt.fixed.beacon", FT_UINT32, BASE_CUSTOM, beacon_interval_base_custom, 0,
12912 {&hf_ieee80211_fixed_parameters,
12913 {"Fixed parameters", "wlan_mgt.fixed.all", FT_UINT16, BASE_DEC, NULL, 0,
12916 {&hf_ieee80211_tagged_parameters,
12917 {"Tagged parameters", "wlan_mgt.tagged.all", FT_UINT16, BASE_DEC, NULL, 0,
12920 {&hf_ieee80211_tag_ssid,
12921 {"SSID", "wlan_mgt.ssid", FT_STRING, BASE_NONE, NULL, 0,
12922 "Indicates the identity of an ESS or IBSS", HFILL }},
12924 {&hf_ieee80211_tag_supp_rates,
12925 {"Supported Rates", "wlan_mgt.supported_rates",
12926 FT_UINT8, BASE_HEX, VALS(ieee80211_supported_rates_vals), 0x0,
12927 "In Mbit/sec, (B) for Basic Rates", HFILL }},
12929 {&hf_ieee80211_tag_fh_dwell_time,
12930 {"Dwell Time", "wlan_mgt.fh.dwell_time",
12931 FT_UINT16, BASE_HEX, NULL, 0x0,
12932 "In Time Unit (TU)", HFILL }},
12934 {&hf_ieee80211_tag_fh_hop_set,
12935 {"Hop Set", "wlan_mgt.fh.hop_set",
12936 FT_UINT8, BASE_DEC, NULL, 0x0,
12939 {&hf_ieee80211_tag_fh_hop_pattern,
12940 {"Hop Pattern", "wlan_mgt.fh.hop_pattern",
12941 FT_UINT8, BASE_DEC, NULL, 0x0,
12944 {&hf_ieee80211_tag_fh_hop_index,
12945 {"Hop Index", "wlan_mgt.fh.hop_index",
12946 FT_UINT8, BASE_DEC, NULL, 0x0,
12949 {&hf_ieee80211_ff_block_ack_params,
12950 {"Block Ack Parameters", "wlan_mgt.fixed.baparams",
12951 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
12953 {&hf_ieee80211_ff_block_ack_params_amsdu_permitted,
12954 {"A-MSDUs", "wlan_mgt.fixed.baparams.amsdu",
12955 FT_BOOLEAN, 16, TFS (&ff_block_ack_params_amsdu_permitted_flag), 0x0001, "A-MSDU Permitted in QoS Data MPDUs", HFILL }},
12957 {&hf_ieee80211_ff_block_ack_params_policy,
12958 {"Block Ack Policy", "wlan_mgt.fixed.baparams.policy",
12959 FT_BOOLEAN, 16, TFS (&ff_block_ack_params_policy_flag), 0x0002, NULL, HFILL }},
12961 {&hf_ieee80211_ff_block_ack_params_tid,
12962 {"Traffic Identifier", "wlan_mgt.fixed.baparams.tid",
12963 FT_UINT16, BASE_HEX, NULL, 0x003C, NULL, HFILL }},
12965 {&hf_ieee80211_ff_block_ack_params_buffer_size,
12966 {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan_mgt.fixed.baparams.buffersize",
12967 FT_UINT16, BASE_DEC, NULL, 0xFFC0, "Number of Buffers", HFILL }},
12969 {&hf_ieee80211_ff_block_ack_timeout,
12970 {"Block Ack Timeout", "wlan_mgt.fixed.batimeout",
12971 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
12973 {&hf_ieee80211_ff_block_ack_ssc,
12974 {"Block Ack Starting Sequence Control (SSC)", "wlan_mgt.fixed.ssc",
12975 FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
12977 {&hf_ieee80211_ff_block_ack_ssc_fragment,
12978 {"Fragment", "wlan_mgt.fixed.fragment",
12979 FT_UINT16, BASE_DEC, 0, 0x000f, NULL, HFILL }},
12981 {&hf_ieee80211_ff_block_ack_ssc_sequence,
12982 {"Starting Sequence Number", "wlan_mgt.fixed.sequence",
12983 FT_UINT16, BASE_DEC, 0, 0xfff0, NULL, HFILL }},
12985 {&hf_ieee80211_ff_delba_param,
12986 {"Delete Block Ack (DELBA) Parameter Set", "wlan_mgt.fixed.delba.param",
12987 FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
12989 {&hf_ieee80211_ff_delba_param_reserved,
12990 {"Reserved", "wlan_mgt.fixed.delba.param.reserved",
12991 FT_UINT16, BASE_HEX, 0, 0x07ff, NULL, HFILL }},
12993 {&hf_ieee80211_ff_delba_param_init,
12994 {"Initiator", "wlan_mgt.fixed.delba.param.initiator",
12995 FT_BOOLEAN, 16, 0, 0x0800, NULL, HFILL }},
12997 {&hf_ieee80211_ff_delba_param_tid,
12998 {"TID", "wlan_mgt.fixed.delba.param.tid",
12999 FT_UINT16, BASE_HEX, 0, 0xf000, "Traffic Identifier (TID)", HFILL }},
13001 {&hf_ieee80211_ff_max_reg_pwr,
13002 {"Maximum Regulation Power", "wlan_mgt.fixed.maxregpwr",
13003 FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
13005 {&hf_ieee80211_ff_measurement_pilot_int,
13006 {"Measurement Pilot Interval", "wlan_mgt.fixed.msmtpilotint",
13007 FT_UINT16, BASE_HEX, 0, 0, "Measurement Pilot Interval Fixed Field", HFILL }},
13009 {&hf_ieee80211_ff_country_str,
13010 {"Country String", "wlan_mgt.fixed.country",
13011 FT_STRING, BASE_NONE, 0, 0, NULL, HFILL }},
13013 {&hf_ieee80211_ff_max_tx_pwr,
13014 {"Maximum Transmit Power", "wlan_mgt.fixed.maxtxpwr",
13015 FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
13017 {&hf_ieee80211_ff_tx_pwr_used,
13018 {"Transmit Power Used", "wlan_mgt.fixed.txpwr",
13019 FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
13021 {&hf_ieee80211_ff_transceiver_noise_floor,
13022 {"Transceiver Noise Floor", "wlan_mgt.fixed.tnoisefloor",
13023 FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
13025 {&hf_ieee80211_ff_channel_width,
13026 {"Supported Channel Width", "wlan_mgt.fixed.chanwidth",
13027 FT_UINT8, BASE_HEX, VALS (ff_channel_width_vals), 0, NULL, HFILL }},
13029 {&hf_ieee80211_ff_qos_info_ap,
13030 {"QoS Information (AP)", "wlan_mgt.fixed.qosinfo.ap",
13031 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
13033 {&hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
13034 {"EDCA Parameter Set Update Count", "wlan_mgt.fixed.qosinfo.ap.edcaupdate",
13035 FT_UINT8, BASE_HEX, NULL, 0x0F, "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL }},
13037 {&hf_ieee80211_ff_qos_info_ap_q_ack,
13038 {"Q-Ack", "wlan_mgt.fixed.qosinfo.ap.qack",
13039 FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_q_ack_flag), 0x10, "QoS Ack", HFILL }},
13041 {&hf_ieee80211_ff_qos_info_ap_queue_req,
13042 {"Queue Request", "wlan_mgt.fixed.qosinfo.ap",
13043 FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_queue_req_flag), 0x20, NULL, HFILL }},
13045 {&hf_ieee80211_ff_qos_info_ap_txop_request,
13046 {"TXOP Request", "wlan_mgt.fixed.qosinfo.ap.txopreq",
13047 FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_txop_request_flag), 0x40, "Transmit Opportunity (TXOP) Request", HFILL }},
13049 {&hf_ieee80211_ff_qos_info_ap_reserved,
13050 {"Reserved", "wlan_mgt.fixed.qosinfo.ap.reserved",
13051 FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
13053 {&hf_ieee80211_ff_qos_info_sta,
13054 {"QoS Information (STA)", "wlan_mgt.fixed.qosinfo.sta",
13055 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
13057 {&hf_ieee80211_ff_qos_info_sta_ac_vo,
13058 {"AC_VO", "wlan_mgt.fixed.qosinfo.sta.ac.vo",
13059 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x01, NULL, HFILL }},
13061 {&hf_ieee80211_ff_qos_info_sta_ac_vi,
13062 {"AC_VI", "wlan_mgt.fixed.qosinfo.sta.ac.vi",
13063 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x02, NULL, HFILL }},
13065 {&hf_ieee80211_ff_qos_info_sta_ac_bk,
13066 {"AC_BK", "wlan_mgt.fixed.qosinfo.sta.ac.bk",
13067 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x04, NULL, HFILL }},
13069 {&hf_ieee80211_ff_qos_info_sta_ac_be,
13070 {"AC_BE", "wlan_mgt.fixed.qosinfo.sta.ac.be",
13071 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x08, NULL, HFILL }},
13073 {&hf_ieee80211_ff_qos_info_sta_q_ack,
13074 {"Q-Ack", "wlan_mgt.fixed.qosinfo.sta.qack",
13075 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_q_ack_flag), 0x10, "QoS Ack", HFILL }},
13077 {&hf_ieee80211_ff_qos_info_sta_max_sp_len,
13078 {"Service Period (SP) Length", "wlan_mgt.fixed.qosinfo.sta.splen",
13079 FT_UINT8, BASE_HEX, VALS (&ff_qos_info_sta_max_sp_len_flags) , 0x60, NULL, HFILL }},
13081 {&hf_ieee80211_ff_qos_info_sta_more_data_ack,
13082 {"More Data Ack", "wlan_mgt.fixed.qosinfo.sta.moredataack",
13083 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_more_data_ack_flag), 0x80, NULL, HFILL }},
13085 {&hf_ieee80211_ff_sm_pwr_save,
13086 {"Spatial Multiplexing (SM) Power Control", "wlan_mgt.fixed.sm.powercontrol",
13087 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
13089 {&hf_ieee80211_ff_sm_pwr_save_enabled,
13090 {"SM Power Save", "wlan_mgt.fixed.sm.powercontrol.enabled",
13091 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01, "Spatial Multiplexing (SM) Power Save", HFILL }},
13093 {&hf_ieee80211_ff_sm_pwr_save_sm_mode,
13094 {"SM Mode", "wlan_mgt.fixed.sm.powercontrol.mode",
13095 FT_BOOLEAN, 8, TFS (&ff_sm_pwr_save_sm_mode_flag), 0x02, "Spatial Multiplexing (SM) Mode", HFILL }},
13097 {&hf_ieee80211_ff_sm_pwr_save_reserved,
13098 {"Reserved", "wlan_mgt.fixed.sm.powercontrol.reserved",
13099 FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL }},
13101 {&hf_ieee80211_ff_pco_phase_cntrl,
13102 {"Phased Coexistence Operation (PCO) Phase Control", "wlan_mgt.fixed.pco.phasecntrl",
13103 FT_BOOLEAN, BASE_NONE, TFS (&ff_pco_phase_cntrl_flag), 0x0, NULL, HFILL }},
13105 {&hf_ieee80211_ff_psmp_param_set,
13106 {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan_mgt.fixed.psmp.paramset",
13107 FT_UINT16, BASE_HEX, 0, 0, NULL, HFILL }},
13109 {&hf_ieee80211_ff_psmp_param_set_n_sta,
13110 {"Number of STA Info Fields Present", "wlan_mgt.fixed.psmp.paramset.nsta",
13111 FT_UINT16, BASE_HEX, 0, 0x000F, NULL, HFILL }},
13113 {&hf_ieee80211_ff_psmp_param_set_more_psmp,
13114 {"More PSMP", "wlan_mgt.fixed.psmp.paramset.more",
13115 FT_BOOLEAN, 16, TFS(&ff_psmp_param_set_more_psmp_flag), 0x0010, "More Power Save Multi-Poll (PSMP)", HFILL }},
13117 {&hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
13118 {"PSMP Sequence Duration [us]", "wlan_mgt.fixed.psmp.paramset.seqduration",
13119 FT_UINT16, BASE_DEC, 0, 0xFFE0, "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL }},
13121 {&hf_ieee80211_ff_mimo_cntrl,
13122 {"MIMO Control", "wlan_mgt.fixed.mimo.control.",
13123 FT_BYTES, BASE_NONE, 0, 0x0, NULL, HFILL }},
13125 {&hf_ieee80211_ff_mimo_cntrl_nc_index,
13126 {"Nc Index", "wlan_mgt.fixed.mimo.control.ncindex",
13127 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags), 0x0003, "Number of Columns Less One", HFILL }},
13129 {&hf_ieee80211_ff_mimo_cntrl_nr_index,
13130 {"Nr Index", "wlan_mgt.fixed.mimo.control.nrindex",
13131 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags), 0x000C, "Number of Rows Less One", HFILL }},
13133 {&hf_ieee80211_ff_mimo_cntrl_channel_width,
13134 {"Channel Width", "wlan_mgt.fixed.mimo.control.chanwidth",
13135 FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag), 0x0010, NULL, HFILL }},
13137 {&hf_ieee80211_ff_mimo_cntrl_grouping,
13138 {"Grouping (Ng)", "wlan_mgt.fixed.mimo.control.grouping",
13139 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags), 0x0060, NULL, HFILL }},
13141 {&hf_ieee80211_ff_mimo_cntrl_coefficient_size,
13142 {"Coefficient Size (Nb)", "wlan_mgt.fixed.mimo.control.cosize",
13143 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags), 0x0180, NULL, HFILL }},
13145 {&hf_ieee80211_ff_mimo_cntrl_codebook_info,
13146 {"Codebook Information", "wlan_mgt.fixed.mimo.control.codebookinfo",
13147 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags), 0x0600, NULL, HFILL }},
13149 {&hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
13150 {"Remaining Matrix Segment", "wlan_mgt.fixed.mimo.control.matrixseg",
13151 FT_UINT16, BASE_HEX, 0, 0x3800, NULL, HFILL }},
13153 {&hf_ieee80211_ff_mimo_cntrl_reserved,
13154 {"Reserved", "wlan_mgt.fixed.mimo.control.reserved",
13155 FT_UINT16, BASE_HEX, 0, 0xC000, NULL, HFILL }},
13157 {&hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
13158 {"Sounding Timestamp", "wlan_mgt.fixed.mimo.control.soundingtime",
13159 FT_UINT32, BASE_HEX, 0, 0, NULL, HFILL }},
13161 {&hf_ieee80211_ff_psmp_sta_info,
13162 {"Power Save Multi-Poll (PSMP) Station Information", "wlan_mgt.fixed.psmp.stainfo",
13163 FT_UINT64, BASE_HEX, 0, 0, NULL, HFILL }},
13165 {&hf_ieee80211_ff_psmp_sta_info_type,
13166 {"Sta Info Type", "wlan_mgt.fixed.psmp.stainfo.type",
13167 FT_UINT32, BASE_HEX, VALS(ff_psmp_sta_info_flags), PSMP_STA_INFO_FLAG_TYPE, NULL, HFILL }},
13169 {&hf_ieee80211_ff_psmp_sta_info_dtt_start_offset,
13170 {"DTT Start Offset", "wlan_mgt.fixed.psmp.stainfo.dttstart",
13171 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_START, NULL, HFILL }},
13173 {&hf_ieee80211_ff_psmp_sta_info_dtt_duration,
13174 {"DTT Duration", "wlan_mgt.fixed.psmp.stainfo.dttduration",
13175 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_DURATION, NULL, HFILL }},
13177 {&hf_ieee80211_ff_psmp_sta_info_sta_id,
13178 {"Target Station ID", "wlan_mgt.fixed.psmp.stainfo.staid",
13179 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_STA_ID, NULL, HFILL }},
13181 {&hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
13182 {"UTT Start Offset", "wlan_mgt.fixed.psmp.stainfo.uttstart",
13183 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_START, NULL, HFILL }},
13185 {&hf_ieee80211_ff_psmp_sta_info_utt_duration,
13186 {"UTT Duration", "wlan_mgt.fixed.psmp.stainfo.uttduration",
13187 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_DURATION, NULL, HFILL }},
13189 {&hf_ieee80211_ff_psmp_sta_info_reserved_small,
13190 {"Reserved", "wlan_mgt.fixed.psmp.stainfo.reserved",
13191 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_IA_RESERVED, NULL, HFILL }},
13193 {&hf_ieee80211_ff_psmp_sta_info_reserved_large,
13194 {"Reserved", "wlan_mgt.fixed.psmp.stainfo.reserved",
13195 FT_UINT64, BASE_HEX, 0, 0, NULL, HFILL }},
13197 {&hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
13198 {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan_mgt.fixed.psmp.stainfo.multicastid",
13199 FT_UINT64, BASE_HEX, 0, 0, NULL, HFILL }},
13201 {&hf_ieee80211_ff_ant_selection,
13202 {"Antenna Selection", "wlan_mgt.fixed.antsel",
13203 FT_UINT8, BASE_HEX, 0, 0, NULL, HFILL }},
13205 {&hf_ieee80211_ff_ant_selection_0,
13206 {"Antenna 0", "wlan_mgt.fixed.antsel.ant0",
13207 FT_UINT8, BASE_HEX, 0, 0x01, NULL, HFILL }},
13209 {&hf_ieee80211_ff_ant_selection_1,
13210 {"Antenna 1", "wlan_mgt.fixed.antsel.ant1",
13211 FT_UINT8, BASE_HEX, 0, 0x02, NULL, HFILL }},
13213 {&hf_ieee80211_ff_ant_selection_2,
13214 {"Antenna 2", "wlan_mgt.fixed.antsel.ant2",
13215 FT_UINT8, BASE_HEX, 0, 0x04, NULL, HFILL }},
13217 {&hf_ieee80211_ff_ant_selection_3,
13218 {"Antenna 3", "wlan_mgt.fixed.antsel.ant3",
13219 FT_UINT8, BASE_HEX, 0, 0x08, NULL, HFILL }},
13221 {&hf_ieee80211_ff_ant_selection_4,
13222 {"Antenna 4", "wlan_mgt.fixed.antsel.ant4",
13223 FT_UINT8, BASE_HEX, 0, 0x10, NULL, HFILL }},
13225 {&hf_ieee80211_ff_ant_selection_5,
13226 {"Antenna 5", "wlan_mgt.fixed.antsel.ant5",
13227 FT_UINT8, BASE_HEX, 0, 0x20, NULL, HFILL }},
13229 {&hf_ieee80211_ff_ant_selection_6,
13230 {"Antenna 6", "wlan_mgt.fixed.antsel.ant6",
13231 FT_UINT8, BASE_HEX, 0, 0x40, NULL, HFILL }},
13233 {&hf_ieee80211_ff_ant_selection_7,
13234 {"Antenna 7", "wlan_mgt.fixed.antsel.ant7",
13235 FT_UINT8, BASE_HEX, 0, 0x80, NULL, HFILL }},
13237 {&hf_ieee80211_ff_ext_channel_switch_announcement,
13238 {"Extended Channel Switch Announcement", "wlan_mgt.fixed.extchansw",
13239 FT_UINT32, BASE_HEX, 0, 0, NULL, HFILL }},
13241 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
13242 {"Channel Switch Mode", "wlan_mgt.fixed.extchansw.switchmode",
13243 FT_UINT32, BASE_HEX, VALS(ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags), 0x000000FF, NULL, HFILL }},
13245 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_reg_class,
13246 {"New Regulatory Class", "wlan_mgt.fixed.extchansw.new.regclass",
13247 FT_UINT32, BASE_HEX, NULL, 0x0000FF00, NULL, HFILL }},
13249 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
13250 {"New Channel Number", "wlan_mgt.fixed.extchansw.new.channumber",
13251 FT_UINT32, BASE_HEX, NULL, 0x00FF0000, NULL, HFILL }},
13253 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
13254 {"Channel Switch Count", "wlan_mgt.extchanswitch.switchcount",
13255 FT_UINT32, BASE_HEX, NULL, 0xFF000000, NULL, HFILL }},
13257 {&hf_ieee80211_ff_ht_info,
13258 {"HT Information", "wlan_mgt.fixed.extchansw",
13259 FT_UINT8, BASE_HEX, 0, 0, "HT Information Fixed Field", HFILL }},
13261 {&hf_ieee80211_ff_ht_info_information_request,
13262 {"Information Request", "wlan_mgt.fixed.mimo.control.chanwidth",
13263 FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag), 0x01, NULL, HFILL }},
13265 {&hf_ieee80211_ff_ht_info_40_mhz_intolerant,
13266 {"40 MHz Intolerant", "wlan_mgt.fixed.mimo.control.chanwidth",
13267 FT_BOOLEAN, 8, TFS(&ff_ht_info_40_mhz_intolerant_flag), 0x02, NULL, HFILL }},
13269 {&hf_ieee80211_ff_ht_info_sta_chan_width,
13270 {"Station Channel Width", "wlan_mgt.fixed.mimo.control.chanwidth",
13271 FT_BOOLEAN, 8, TFS(&ff_ht_info_sta_chan_width_flag), 0x04, NULL, HFILL }},
13273 {&hf_ieee80211_ff_ht_info_reserved,
13274 {"Reserved", "wlan_mgt.fixed.extchansw",
13275 FT_UINT8, BASE_HEX, 0, 0xF8, "Reserved Field", HFILL }},
13277 {&hf_ieee80211_ff_ht_action,
13278 {"HT Action", "wlan_mgt.fixed.htact",
13279 FT_UINT8, BASE_HEX, VALS (&ff_ht_action_flags), 0, "HT Action Code", HFILL }},
13281 {&hf_ieee80211_ff_mimo_csi_snr,
13282 {"Signal to Noise Ratio (SNR)", "wlan_mgt.mimo.csimatrices.snr",
13283 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
13285 {&hf_ieee80211_ff_public_action,
13286 {"Public Action", "wlan_mgt.fixed.publicact",
13287 FT_UINT8, BASE_HEX, VALS(ff_pa_action_codes), 0, "Public Action Code", HFILL }},
13289 {&hf_ieee80211_ff_capture,
13290 {"Capabilities Information", "wlan_mgt.fixed.capabilities", FT_UINT16, BASE_HEX, NULL, 0,
13291 "Capability information", HFILL }},
13293 {&hf_ieee80211_ff_cf_ess,
13294 {"ESS capabilities", "wlan_mgt.fixed.capabilities.ess",
13295 FT_BOOLEAN, 16, TFS (&cf_ess_flags), 0x0001, NULL, HFILL }},
13297 {&hf_ieee80211_ff_cf_ibss,
13298 {"IBSS status", "wlan_mgt.fixed.capabilities.ibss",
13299 FT_BOOLEAN, 16, TFS (&cf_ibss_flags), 0x0002, "IBSS participation", HFILL }},
13301 {&hf_ieee80211_ff_cf_sta_poll,
13302 {"CFP participation capabilities", "wlan_mgt.fixed.capabilities.cfpoll.sta",
13303 FT_UINT16, BASE_HEX, VALS (&sta_cf_pollable), 0x020C,
13304 "CF-Poll capabilities for a STA", HFILL }},
13306 {&hf_ieee80211_ff_cf_ap_poll,
13307 {"CFP participation capabilities", "wlan_mgt.fixed.capabilities.cfpoll.ap",
13308 FT_UINT16, BASE_HEX, VALS (&ap_cf_pollable), 0x020C,
13309 "CF-Poll capabilities for an AP", HFILL }},
13311 {&hf_ieee80211_ff_cf_privacy,
13312 {"Privacy", "wlan_mgt.fixed.capabilities.privacy",
13313 FT_BOOLEAN, 16, TFS (&cf_privacy_flags), 0x0010, "WEP support", HFILL }},
13315 {&hf_ieee80211_ff_cf_preamble,
13316 {"Short Preamble", "wlan_mgt.fixed.capabilities.preamble",
13317 FT_BOOLEAN, 16, TFS (&cf_preamble_flags), 0x0020, NULL, HFILL }},
13319 {&hf_ieee80211_ff_cf_pbcc,
13320 {"PBCC", "wlan_mgt.fixed.capabilities.pbcc",
13321 FT_BOOLEAN, 16, TFS (&cf_pbcc_flags), 0x0040, "PBCC Modulation", HFILL }},
13323 {&hf_ieee80211_ff_cf_agility,
13324 {"Channel Agility", "wlan_mgt.fixed.capabilities.agility",
13325 FT_BOOLEAN, 16, TFS (&cf_agility_flags), 0x0080, NULL, HFILL }},
13327 {&hf_ieee80211_ff_cf_spec_man,
13328 {"Spectrum Management", "wlan_mgt.fixed.capabilities.spec_man",
13329 FT_BOOLEAN, 16, TFS (&cf_spec_man_flags), 0x0100, NULL, HFILL }},
13331 {&hf_ieee80211_ff_short_slot_time,
13332 {"Short Slot Time", "wlan_mgt.fixed.capabilities.short_slot_time",
13333 FT_BOOLEAN, 16, TFS (&short_slot_time_flags), 0x0400, NULL,
13336 {&hf_ieee80211_ff_cf_apsd,
13337 {"Automatic Power Save Delivery", "wlan_mgt.fixed.capabilities.apsd",
13338 FT_BOOLEAN, 16, TFS (&cf_apsd_flags), 0x0800, NULL, HFILL }},
13340 {&hf_ieee80211_ff_dsss_ofdm,
13341 {"DSSS-OFDM", "wlan_mgt.fixed.capabilities.dsss_ofdm",
13342 FT_BOOLEAN, 16, TFS (&dsss_ofdm_flags), 0x2000, "DSSS-OFDM Modulation",
13345 {&hf_ieee80211_ff_cf_del_blk_ack,
13346 {"Delayed Block Ack", "wlan_mgt.fixed.capabilities.del_blk_ack",
13347 FT_BOOLEAN, 16, TFS (&cf_del_blk_ack_flags), 0x4000, NULL, HFILL }},
13349 {&hf_ieee80211_ff_cf_imm_blk_ack,
13350 {"Immediate Block Ack", "wlan_mgt.fixed.capabilities.imm_blk_ack",
13351 FT_BOOLEAN, 16, TFS (&cf_imm_blk_ack_flags), 0x8000, NULL, HFILL }},
13353 {&hf_ieee80211_ff_auth_seq,
13354 {"Authentication SEQ", "wlan_mgt.fixed.auth_seq",
13355 FT_UINT16, BASE_HEX, NULL, 0, "Authentication Sequence Number", HFILL }},
13357 {&hf_ieee80211_ff_assoc_id,
13358 {"Association ID", "wlan_mgt.fixed.aid",
13359 FT_UINT16, BASE_HEX, NULL, 0x3FFF, NULL, HFILL }},
13361 {&hf_ieee80211_ff_listen_ival,
13362 {"Listen Interval", "wlan_mgt.fixed.listen_ival",
13363 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
13365 {&hf_ieee80211_ff_current_ap,
13366 {"Current AP", "wlan_mgt.fixed.current_ap",
13367 FT_ETHER, BASE_NONE, NULL, 0, "MAC address of current AP", HFILL }},
13369 {&hf_ieee80211_ff_reason,
13370 {"Reason code", "wlan_mgt.fixed.reason_code",
13371 FT_UINT16, BASE_HEX, VALS (&ieee80211_reason_code), 0,
13372 "Reason for unsolicited notification", HFILL }},
13374 {&hf_ieee80211_ff_status_code,
13375 {"Status code", "wlan_mgt.fixed.status_code",
13376 FT_UINT16, BASE_HEX, VALS (&ieee80211_status_code), 0,
13377 "Status of requested event", HFILL }},
13379 {&hf_ieee80211_ff_category_code,
13380 {"Category code", "wlan_mgt.fixed.category_code",
13381 FT_UINT16, BASE_DEC, VALS (&category_codes), 0,
13382 "Management action category", HFILL }},
13384 {&hf_ieee80211_ff_action_code,
13385 {"Action code", "wlan_mgt.fixed.action_code",
13386 FT_UINT16, BASE_DEC, VALS (&action_codes), 0,
13387 "Management action code", HFILL }},
13389 {&hf_ieee80211_ff_dialog_token,
13390 {"Dialog token", "wlan_mgt.fixed.dialog_token",
13391 FT_UINT8, BASE_HEX, NULL, 0, "Management action dialog token", HFILL }},
13393 {&hf_ieee80211_ff_marvell_action_type,
13394 {"Marvell Action type", "wlan_mgt.fixed.mrvl_action_type",
13395 FT_UINT8, BASE_DEC, VALS (&vendor_action_types_mrvl), 0,
13396 "Vendor Specific Action Type (Marvell)", HFILL }},
13398 {&hf_ieee80211_ff_marvell_mesh_mgt_action_code,
13399 {"Mesh action(Marvell)", "wlan_mgt.fixed.mrvl_mesh_action",
13400 FT_UINT8, BASE_HEX, VALS (&mesh_mgt_action_codes_mrvl), 0,
13401 "Mesh action code(Marvell)", HFILL }},
13403 {&hf_ieee80211_ff_marvell_mesh_mgt_length,
13404 {"Message Length", "wlan_mgt.fixed.length",
13405 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13407 {&hf_ieee80211_ff_marvell_mesh_mgt_mode,
13408 {"Message Mode", "wlan_mgt.fixed.mode",
13409 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
13411 {&hf_ieee80211_ff_marvell_mesh_mgt_ttl,
13412 {"Message TTL", "wlan_mgt.fixed.ttl",
13413 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13415 {&hf_ieee80211_ff_marvell_mesh_mgt_dstcount,
13416 {"Destination Count", "wlan_mgt.fixed.dstcount",
13417 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13419 {&hf_ieee80211_ff_marvell_mesh_mgt_hopcount,
13420 {"Hop Count", "wlan_mgt.fixed.hopcount",
13421 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13423 {&hf_ieee80211_ff_marvell_mesh_mgt_rreqid,
13424 {"RREQ ID", "wlan_mgt.fixed.rreqid",
13425 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13427 {&hf_ieee80211_ff_marvell_mesh_mgt_sa,
13428 {"Source Address", "wlan_mgt.fixed.sa",
13429 FT_ETHER, BASE_NONE, NULL, 0, "Source MAC address", HFILL }},
13431 {&hf_ieee80211_ff_marvell_mesh_mgt_ssn,
13432 {"SSN", "wlan_mgt.fixed.ssn",
13433 FT_UINT32, BASE_DEC, NULL, 0, "Source Sequence Number", HFILL }},
13435 {&hf_ieee80211_ff_marvell_mesh_mgt_metric,
13436 {"Metric", "wlan_mgt.fixed.metric",
13437 FT_UINT32, BASE_DEC, NULL, 0, "Route Metric", HFILL }},
13439 {&hf_ieee80211_ff_marvell_mesh_mgt_flags,
13440 {"RREQ Flags", "wlan_mgt.fixed.hopcount",
13441 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
13443 {&hf_ieee80211_ff_marvell_mesh_mgt_da,
13444 {"Destination Address", "wlan_mgt.fixed.da",
13445 FT_ETHER, BASE_NONE, NULL, 0, "Destination MAC address", HFILL }},
13447 {&hf_ieee80211_ff_marvell_mesh_mgt_dsn,
13448 {"DSN", "wlan_mgt.fixed.dsn",
13449 FT_UINT32, BASE_DEC, NULL, 0, "Destination Sequence Number", HFILL }},
13451 {&hf_ieee80211_ff_marvell_mesh_mgt_lifetime,
13452 {"Lifetime", "wlan_mgt.fixed.lifetime",
13453 FT_UINT32, BASE_DEC, NULL, 0, "Route Lifetime", HFILL }},
13455 {&hf_ieee80211_ff_wme_action_code,
13456 {"Action code", "wlan_mgt.fixed.action_code",
13457 FT_UINT16, BASE_HEX, VALS (&wme_action_codes), 0,
13458 "Management notification action code", HFILL }},
13460 {&hf_ieee80211_ff_wme_status_code,
13461 {"Status code", "wlan_mgt.fixed.status_code",
13462 FT_UINT16, BASE_HEX, VALS (&wme_status_codes), 0,
13463 "Management notification setup response status code", HFILL }},
13465 {&hf_ieee80211_ff_mesh_action,
13466 {"Mesh Action code", "wlan_mgt.fixed.mesh_action",
13467 FT_UINT8, BASE_HEX, VALS (&mesh_action), 0,
13470 {&hf_ieee80211_ff_multihop_action,
13471 {"Multihop Action code", "wlan_mgt.fixed.multihop_action",
13472 FT_UINT8, BASE_HEX, VALS (&multihop_action), 0,
13475 {&hf_ieee80211_ff_mesh_flags,
13476 {"Mesh Flags", "wlan_mgt.fixed.mesh_flags",
13477 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
13479 {&hf_ieee80211_ff_mesh_ttl,
13480 {"Mesh TTL", "wlan_mgt.fixed.mesh_ttl",
13481 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
13483 {&hf_ieee80211_ff_mesh_sequence,
13484 {"Sequence Number", "wlan_mgt.fixed.mesh_sequence",
13485 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
13487 {&hf_ieee80211_ff_mesh_addr4,
13488 {"Mesh Extended Address 4", "wlan_mgt.fixed.mesh_addr4",
13489 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
13491 {&hf_ieee80211_ff_mesh_addr5,
13492 {"Mesh Extended Address 5", "wlan_mgt.fixed.mesh_addr5",
13493 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
13495 {&hf_ieee80211_ff_mesh_addr6,
13496 {"Mesh Extended Address 6", "wlan_mgt.fixed.mesh_addr6",
13497 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
13499 {&hf_ieee80211_ff_selfprot_action,
13500 {"Self-protected Action code", "wlan_mgt.fixed.selfprot_action",
13501 FT_UINT8, BASE_HEX, VALS (&selfprot_action), 0,
13504 {&hf_ieee80211_mesh_peering_proto,
13505 {"Mesh Peering Protocol ID", "wlan.peering.proto",
13506 FT_UINT16, BASE_HEX, VALS (&mesh_peering_proto_ids), 0,
13509 {&hf_ieee80211_mesh_peering_local_link_id,
13510 {"Local Link ID", "wlan.peering.local_id",
13511 FT_UINT16, BASE_HEX, NULL, 0,
13512 "Mesh Peering Management Local Link ID", HFILL }},
13514 {&hf_ieee80211_mesh_peering_peer_link_id,
13515 {"Peer Link ID", "wlan.peering.peer_id",
13516 FT_UINT16, BASE_HEX, NULL, 0,
13517 "Mesh Peering Management Peer Link ID", HFILL }},
13519 {&hf_ieee80211_ff_hwmp_flags,
13520 {"HWMP Flags", "wlan.hwmp.flags", FT_UINT8, BASE_HEX, NULL, 0,
13523 {&hf_ieee80211_ff_hwmp_hopcount,
13524 {"HWMP Hop Count", "wlan.hwmp.hopcount", FT_UINT8, BASE_DEC, NULL, 0,
13527 {&hf_ieee80211_ff_hwmp_ttl,
13528 {"HWMP TTL", "wlan.hwmp.ttl", FT_UINT8, BASE_DEC, NULL, 0,
13531 {&hf_ieee80211_ff_hwmp_pdid,
13532 {"HWMP Path Discovery ID", "wlan.hwmp.pdid", FT_UINT32, BASE_DEC, NULL, 0,
13535 {&hf_ieee80211_ff_hwmp_orig_sta,
13536 {"Originator STA Address", "wlan.hwmp.orig_sta", FT_ETHER, BASE_NONE, NULL, 0,
13539 {&hf_ieee80211_ff_hwmp_orig_sn,
13540 {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn", FT_UINT32, BASE_DEC, NULL, 0,
13543 {&hf_ieee80211_ff_hwmp_orig_ext,
13544 {"Originator External Address", "wlan.hwmp.orig_ext", FT_ETHER, BASE_NONE, NULL, 0,
13547 {&hf_ieee80211_ff_hwmp_lifetime,
13548 {"HWMP Lifetime", "wlan.hwmp.lifetime", FT_UINT32, BASE_DEC, NULL, 0,
13551 {&hf_ieee80211_ff_hwmp_metric,
13552 {"HWMP Metric", "wlan.hwmp.metric", FT_UINT32, BASE_DEC, NULL, 0,
13555 {&hf_ieee80211_ff_hwmp_targ_count,
13556 {"HWMP Target Count", "wlan.hwmp.targ_count", FT_UINT8, BASE_DEC, NULL, 0,
13559 {&hf_ieee80211_ff_hwmp_targ_flags,
13560 {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags", FT_UINT8, BASE_HEX, NULL, 0,
13563 {&hf_ieee80211_ff_hwmp_targ_to_flags,
13564 {"TO Flag", "wlan.hwmp.to_flag",
13565 FT_BOOLEAN, 8, TFS (&hwmp_targ_to_flags), 0x01,
13566 "Target Only Flag", HFILL }},
13568 {&hf_ieee80211_ff_hwmp_targ_usn_flags,
13569 {"USN Flag", "wlan.hwmp.usn_flag",
13570 FT_BOOLEAN, 8, TFS (&hwmp_targ_usn_flags), 0x04,
13571 "Unknown Target HWMP Sequence Number Flag", HFILL }},
13573 {&hf_ieee80211_ff_hwmp_targ_sta,
13574 {"Target STA Address", "wlan.hwmp.targ_sta", FT_ETHER, BASE_NONE, NULL, 0,
13577 {&hf_ieee80211_ff_hwmp_targ_ext,
13578 {"Target External Address", "wlan.hwmp.targ_ext", FT_ETHER, BASE_NONE, NULL, 0,
13581 {&hf_ieee80211_ff_hwmp_targ_sn,
13582 {"Target HWMP Sequence Number", "wlan.hwmp.targ_sn",
13583 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
13585 {&hf_ieee80211_mesh_config_path_sel_protocol,
13586 {"Path Selection Protocol", "wlan.mesh.config.ps_protocol",
13587 FT_UINT8, BASE_HEX, NULL, 0,
13588 "Mesh Configuration Path Selection Protocol", HFILL }},
13590 {&hf_ieee80211_mesh_config_path_sel_metric,
13591 {"Path Selection Metric", "wlan.mesh.config.ps_metric",
13592 FT_UINT8, BASE_HEX, NULL, 0,
13593 "Mesh Configuration Path Selection Metric", HFILL }},
13595 {&hf_ieee80211_mesh_config_congestion_control,
13596 {"Congestion Control", "wlan.mesh.config.cong_ctl",
13597 FT_UINT8, BASE_HEX, NULL, 0,
13598 "Mesh Configuration Congestion Control", HFILL }},
13600 {&hf_ieee80211_mesh_config_sync_method,
13601 {"Synchronization Method", "wlan.mesh.config.sync_method",
13602 FT_UINT8, BASE_HEX, NULL, 0,
13603 "Mesh Configuration Synchronization Method", HFILL }},
13605 {&hf_ieee80211_mesh_config_auth_protocol,
13606 {"Authentication Protocol", "wlan.mesh.config.auth_protocol",
13607 FT_UINT8, BASE_HEX, NULL, 0,
13608 "Mesh Configuration Authentication Protocol", HFILL }},
13610 {&hf_ieee80211_mesh_config_formation_info,
13611 {"Formation Info", "wlan.mesh.config.formation_info",
13612 FT_UINT8, BASE_HEX, NULL, 0,
13613 "Mesh Configuration Formation Info", HFILL }},
13615 {&hf_ieee80211_mesh_config_capability,
13616 {"Capability", "wlan.mesh.config.cap",
13617 FT_UINT8, BASE_HEX, NULL, 0,
13618 "Mesh Configuration Capability", HFILL }},
13620 {&hf_ieee80211_mesh_id,
13621 {"Mesh ID", "wlan.mesh.id",
13622 FT_STRING, BASE_NONE, NULL, 0,
13625 {&hf_ieee80211_rann_flags,
13626 {"RANN Flags", "wlan.rann.flags",
13627 FT_UINT8, BASE_HEX, NULL, 0,
13628 "Root Announcement Flags", HFILL }},
13630 {&hf_ieee80211_rann_root_sta,
13631 {"Root STA Address", "wlan.rann.root_sta", FT_ETHER, BASE_NONE, NULL, 0,
13632 "Root Mesh STA Address", HFILL }},
13634 {&hf_ieee80211_rann_sn,
13635 {"Root STA Sequence Number", "wlan.rann.rann_sn",
13636 FT_UINT32, BASE_DEC, NULL, 0, "Root Mesh STA Sequence Number", HFILL }},
13638 {&hf_ieee80211_rann_interval,
13639 {"RANN Interval", "wlan.rann.interval", FT_UINT32, BASE_DEC, NULL, 0,
13640 "Root Announcement Interval", HFILL }},
13642 {&hf_ieee80211_ff_qos_action_code,
13643 {"Action code", "wlan_mgt.fixed.action_code",
13644 FT_UINT16, BASE_HEX, VALS (&qos_action_codes), 0,
13645 "QoS management action code", HFILL }},
13647 {&hf_ieee80211_ff_ba_action,
13648 {"Action code", "wlan_mgt.fixed.action_code",
13649 FT_UINT8, BASE_HEX, VALS (&ba_action_codes), 0,
13650 "Block Ack action code", HFILL }},
13652 {&hf_ieee80211_ff_dls_action_code,
13653 {"Action code", "wlan_mgt.fixed.action_code",
13654 FT_UINT16, BASE_HEX, VALS (&dls_action_codes), 0,
13655 "DLS management action code", HFILL }},
13657 {&hf_ieee80211_ff_dst_mac_addr,
13658 {"Destination address", "wlan_mgt.fixed.dst_mac_addr",
13659 FT_ETHER, BASE_NONE, NULL, 0, "Destination MAC address", HFILL }},
13661 {&hf_ieee80211_ff_src_mac_addr,
13662 {"Source address", "wlan_mgt.fixed.src_mac_addr",
13663 FT_ETHER, BASE_NONE, NULL, 0, "Source MAC address", HFILL }},
13665 {&hf_ieee80211_ff_ft_action_code,
13666 {"Action code", "wlan_mgt.fixed.action_code",
13667 FT_UINT8, BASE_DEC, VALS(ft_action_codes), 0,
13668 "Management action code", HFILL }},
13670 {&hf_ieee80211_ff_sta_address,
13671 {"STA Address", "wlan_mgt.fixed.sta_address",
13672 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
13674 {&hf_ieee80211_ff_target_ap_address,
13675 {"Target AP Address", "wlan_mgt.fixed.target_ap_address",
13676 FT_ETHER, BASE_NONE, NULL, 0, "Target AP MAC address", HFILL }},
13678 {&hf_ieee80211_ff_gas_comeback_delay,
13679 {"GAS Comeback Delay", "wlan_mgt.fixed.gas_comeback_delay",
13680 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
13682 {&hf_ieee80211_ff_gas_fragment_id,
13683 {"GAS Query Response Fragment ID", "wlan_mgt.fixed.gas_fragment_id",
13684 FT_UINT8, BASE_DEC, NULL, 0x7f, NULL, HFILL
13687 {&hf_ieee80211_ff_more_gas_fragments,
13688 {"More GAS Fragments", "wlan_mgt.fixed.more_gas_fragments",
13689 FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL }},
13691 {&hf_ieee80211_ff_query_request_length,
13692 {"Query Request Length", "wlan_mgt.fixed.query_request_length",
13693 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
13695 {&hf_ieee80211_ff_query_request,
13696 {"Query Request", "wlan_mgt.fixed.query_request",
13697 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
13699 {&hf_ieee80211_ff_query_response_length,
13700 {"Query Response Length", "wlan_mgt.fixed.query_response_length",
13701 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
13703 {&hf_ieee80211_ff_query_response,
13704 {"Query Response", "wlan_mgt.fixed.query_response",
13705 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
13707 {&hf_ieee80211_gas_resp_fragments,
13708 {"GAS Query Response fragments", "wlan_mgt.fixed.fragments",
13709 FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } },
13710 {&hf_ieee80211_gas_resp_fragment,
13711 {"GAS Query Response fragment", "wlan_mgt.fixed.fragment",
13712 FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
13713 {&hf_ieee80211_gas_resp_fragment_overlap,
13714 {"GAS Query Response fragment overlap", "wlan_mgt.fixed.fragment.overlap",
13715 FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
13716 {&hf_ieee80211_gas_resp_fragment_overlap_conflict,
13717 {"GAS Query Response fragment overlapping with conflicting data",
13718 "wlan_mgt.fixed.fragment.overlap.conflicts",
13719 FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
13720 {&hf_ieee80211_gas_resp_fragment_multiple_tails,
13721 {"GAS Query Response has multiple tail fragments",
13722 "wlan_mgt.fixed.fragment.multiple_tails",
13723 FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
13724 {&hf_ieee80211_gas_resp_fragment_too_long_fragment,
13725 {"GAS Query Response fragment too long",
13726 "wlan_mgt.fixed.fragment.too_long_fragment",
13727 FT_BOOLEAN, BASE_NONE, NULL, 0x00, NULL, HFILL } },
13728 {&hf_ieee80211_gas_resp_fragment_error,
13729 {"GAS Query Response reassembly error", "wlan_mgt.fixed.fragment.error",
13730 FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
13731 {&hf_ieee80211_gas_resp_fragment_count,
13732 {"GAS Query Response fragment count", "wlan_mgt.fixed.fragment.count",
13733 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } },
13734 {&hf_ieee80211_gas_resp_reassembled_in,
13735 {"Reassembled in", "wlan_mgt.fixed.reassembled.in",
13736 FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } },
13737 {&hf_ieee80211_gas_resp_reassembled_length,
13738 {"Reassembled length", "wlan_mgt.fixed.reassembled.length",
13739 FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } },
13741 {&hf_ieee80211_ff_anqp_info_id,
13742 {"Info ID", "wlan_mgt.fixed.anqp.info_id",
13743 FT_UINT16, BASE_DEC, VALS(anqp_info_id_vals), 0,
13744 "Access Network Query Protocol Info ID", HFILL }},
13746 {&hf_ieee80211_ff_anqp_info_length,
13747 {"Length", "wlan_mgt.fixed.anqp.info_length",
13748 FT_UINT16, BASE_DEC, NULL, 0, "Access Network Query Protocol Length",
13751 {&hf_ieee80211_ff_anqp_info,
13752 {"Information", "wlan_mgt.fixed.anqp.info",
13753 FT_BYTES, BASE_NONE, NULL, 0,
13754 "Access Network Query Protocol Information", HFILL }},
13756 {&hf_ieee80211_ff_anqp_query_id,
13757 {"ANQP Query ID", "wlan_mgt.fixed.anqp.query_id",
13758 FT_UINT16, BASE_DEC, VALS(anqp_info_id_vals), 0,
13759 "Access Network Query Protocol Query ID", HFILL }},
13761 {&hf_ieee80211_ff_anqp_capability,
13762 {"ANQP Capability", "wlan_mgt.fixed.anqp.capability",
13763 FT_UINT16, BASE_DEC, VALS(anqp_info_id_vals), 0,
13764 "Access Network Query Protocol Query ID", HFILL }},
13765 {&hf_ieee80211_ff_anqp_capability_vlen,
13766 {"Vendor-specific Capability Length",
13767 "wlan_mgt.fixed.anqp.capability_vlen",
13768 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
13769 {&hf_ieee80211_ff_anqp_capability_vendor,
13770 {"Vendor-specific Capability",
13771 "wlan_mgt.fixed.anqp.capability_vendor",
13772 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
13774 {&hf_ieee80211_ff_venue_info_group,
13775 {"Venue Group", "wlan_mgt.fixed.venue_info.group",
13776 FT_UINT8, BASE_DEC, VALS(venue_group_vals), 0, NULL, HFILL }},
13778 {&hf_ieee80211_ff_venue_info_type,
13779 {"Venue Type", "wlan_mgt.fixed.venue_info.type",
13780 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13782 {&hf_ieee80211_ff_anqp_venue_length,
13783 {"Venue Name Duple Length", "wlan_mgt.fixed.anqp.venue.length",
13784 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13786 {&hf_ieee80211_ff_anqp_venue_language,
13787 {"Language Code", "wlan_mgt.fixed.anqp.venue.language",
13788 FT_STRING, BASE_NONE, NULL, 0,
13789 "Venue Name Language Code", HFILL }},
13791 {&hf_ieee80211_ff_anqp_venue_name,
13792 {"Venue Name", "wlan_mgt.fixed.anqp.venue.name",
13793 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
13795 {&hf_ieee80211_ff_anqp_nw_auth_type_indicator,
13796 {"Network Authentication Type Indicator",
13797 "wlan_mgt.fixed.anqp.nw_auth_type.indicator",
13798 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals), 0, NULL, HFILL }},
13800 {&hf_ieee80211_ff_anqp_nw_auth_type_url_len,
13801 {"Re-direct URL Length",
13802 "wlan_mgt.fixed.anqp.nw_auth_type.url_len",
13803 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
13805 {&hf_ieee80211_ff_anqp_nw_auth_type_url,
13806 {"Re-direct URL", "wlan_mgt.fixed.anqp.nw_auth_type_url",
13807 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
13809 {&hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
13810 {"OI Length", "wlan_mgt.fixed.anqp.roaming_consortium.oi_len",
13811 FT_UINT8, BASE_DEC, NULL, 0, "Roaming Consortium OI Length", HFILL }},
13813 {&hf_ieee80211_ff_anqp_roaming_consortium_oi,
13814 {"OI", "wlan_mgt.fixed.anqp.roaming_consortium.oi",
13815 FT_BYTES, BASE_NONE, NULL, 0, "Roaming Consortium OI", HFILL }},
13817 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
13818 {"IPv6 Address", "wlan_mgt.fixed.anqp.ip_addr_availability.ipv6",
13819 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv6_vals), 0x03,
13820 "IP Address Type Availability information for IPv6", HFILL }},
13822 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
13823 {"IPv4 Address", "wlan_mgt.fixed.anqp.ip_addr_availability.ipv4",
13824 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv4_vals), 0xfc,
13825 "IP Address Type Availability information for IPv4", HFILL }},
13827 {&hf_ieee80211_ff_anqp_nai_realm_count,
13828 {"NAI Realm Count", "wlan_mgt.fixed.anqp.nai_realm_list.count",
13829 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
13830 {&hf_ieee80211_ff_anqp_nai_field_len,
13831 {"NAI Realm Data Field Length",
13832 "wlan_mgt.fixed.anqp.nai_realm_list.field_len",
13833 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
13834 {&hf_ieee80211_ff_anqp_nai_realm_encoding,
13835 {"NAI Realm Encoding",
13836 "wlan_mgt.fixed.naqp_nai_realm_list.encoding",
13837 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals), 0x01, NULL, HFILL }},
13838 {&hf_ieee80211_ff_anqp_nai_realm_length,
13839 {"NAI Realm Length",
13840 "wlan_mgt.fixed.naqp_nai_realm_list.realm_length",
13841 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13842 {&hf_ieee80211_ff_anqp_nai_realm,
13844 "wlan_mgt.fixed.naqp_nai_realm_list.realm",
13845 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
13846 {&hf_ieee80211_ff_anqp_nai_realm_eap_count,
13847 {"EAP Method Count",
13848 "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_count",
13849 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13850 {&hf_ieee80211_ff_anqp_nai_realm_eap_len,
13851 {"EAP Method subfield Length",
13852 "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_len",
13853 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13854 {&hf_ieee80211_ff_anqp_nai_realm_eap_method,
13856 "wlan_mgt.fixed.naqp_nai_realm_list.eap_method",
13857 FT_UINT8, BASE_DEC, VALS(eap_type_vals), 0, NULL, HFILL }},
13858 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
13859 {"Authentication Parameter Count",
13860 "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_count",
13861 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13862 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
13863 {"Authentication Parameter ID",
13864 "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_id",
13865 FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals),
13867 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
13868 {"Authentication Parameter Length",
13869 "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_len",
13870 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13871 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
13872 {"Authentication Parameter Value",
13873 "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_value",
13874 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
13876 {&hf_ieee80211_3gpp_gc_gud,
13877 {"GUD", "wlan_mgt.fixed.anqp.3gpp_cellular_info.gud",
13878 FT_UINT8, BASE_DEC, NULL, 0,
13879 "Generic container User Data", HFILL }},
13880 {&hf_ieee80211_3gpp_gc_udhl,
13881 {"UDHL", "wlan_mgt.fixed.anqp.3gpp_cellular_info.udhl",
13882 FT_UINT8, BASE_DEC, NULL, 0,
13883 "User Data Header Length", HFILL }},
13884 {&hf_ieee80211_3gpp_gc_iei,
13885 {"IEI", "wlan_mgt.fixed.anqp.3gpp_cellular_info.iei",
13886 FT_UINT8, BASE_DEC, NULL, 0,
13887 "Information Element Identity", HFILL }},
13888 {&hf_ieee80211_3gpp_gc_plmn_len,
13889 {"PLMN Length", "wlan_mgt.fixed.anqp.3gpp_cellular_info.plmn_len",
13890 FT_UINT8, BASE_DEC, NULL, 0,
13891 "Length of PLMN List value contents", HFILL }},
13892 {&hf_ieee80211_3gpp_gc_num_plmns,
13893 {"Number of PLMNs", "wlan_mgt.fixed.anqp.3gpp_cellular_info.num_plmns",
13894 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13895 {&hf_ieee80211_3gpp_gc_plmn,
13896 {"PLMN", "wlan_mgt.fixed.anqp.3gpp_cellular_info.plmn",
13897 FT_STRING, BASE_NONE, NULL, 0,
13898 "PLMN information", HFILL }},
13900 {&hf_ieee80211_ff_anqp_domain_name_len,
13901 {"Domain Name Length", "wlan_mgt.fixed.anqp.domain_name_list.len",
13902 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13903 {&hf_ieee80211_ff_anqp_domain_name,
13904 {"Domain Name", "wlan_mgt.fixed.anqp.domain_name_list.name",
13905 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
13907 {&hf_ieee80211_ff_dls_timeout,
13908 {"DLS timeout", "wlan_mgt.fixed.dls_timeout",
13909 FT_UINT16, BASE_HEX, NULL, 0, "DLS timeout value", HFILL }},
13911 {&hf_ieee80211_ff_sa_query_action_code,
13912 {"Action code", "wlan_mgt.fixed.action_code",
13913 FT_UINT8, BASE_DEC, VALS(sa_query_action_codes), 0,
13914 "Management action code", HFILL }},
13916 {&hf_ieee80211_ff_transaction_id,
13917 {"Transaction Id", "wlan_mgt.fixed.transaction_id",
13918 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
13920 {&hf_ieee80211_tag,
13921 {"Tag", "wlan_mgt.tag",
13922 FT_NONE, BASE_NONE, 0x0, 0,
13925 {&hf_ieee80211_tag_number,
13926 {"Tag Number", "wlan_mgt.tag.number",
13927 FT_UINT8, BASE_DEC, VALS(tag_num_vals), 0,
13928 "Element ID", HFILL }},
13930 {&hf_ieee80211_tag_length,
13931 {"Tag length", "wlan_mgt.tag.length",
13932 FT_UINT32, BASE_DEC, NULL, 0, "Length of tag", HFILL }},
13934 {&hf_ieee80211_tag_interpretation,
13935 {"Tag interpretation", "wlan_mgt.tag.interpretation",
13936 FT_STRING, BASE_NONE, NULL, 0, "Interpretation of tag", HFILL }},
13938 {&hf_ieee80211_tag_oui,
13939 {"OUI", "wlan_mgt.tag.oui",
13940 FT_UINT24, BASE_CUSTOM, oui_base_custom, 0, "OUI of vendor specific IE", HFILL }},
13942 {&hf_ieee80211_tag_ds_param_channel,
13943 {"Current Channel", "wlan_mgt.ds.current_channel",
13944 FT_UINT8, BASE_DEC, NULL, 0,
13945 "DS Parameter Set - Current Channel", HFILL }},
13947 {&hf_ieee80211_tag_cfp_count,
13948 {"CFP Count", "wlan_mgt.cfp.count",
13949 FT_UINT8, BASE_DEC, NULL, 0,
13950 "Indicates how many delivery traffic indication messages (DTIMs)", HFILL }},
13952 {&hf_ieee80211_tag_cfp_period,
13953 {"CFP Period", "wlan_mgt.cfp.period",
13954 FT_UINT8, BASE_DEC, NULL, 0,
13955 "Indicates the number of DTIM intervals between the start of CFPs", HFILL }},
13957 {&hf_ieee80211_tag_cfp_max_duration,
13958 {"CFP Max Duration", "wlan_mgt.cfp.max_duration",
13959 FT_UINT16, BASE_DEC, NULL, 0,
13960 "Indicates the maximum duration (in TU) of the CFP that may be generated by this PCF", HFILL }},
13962 {&hf_ieee80211_tag_cfp_dur_remaining,
13963 {"CFP Dur Remaining", "wlan_mgt.cfp.dur_remaining",
13964 FT_UINT16, BASE_DEC, NULL, 0,
13965 "Indicates the maximum time (in TU) remaining in the present CFP", HFILL }},
13967 {&hf_ieee80211_tag_vendor_oui_type,
13968 {"Vendor Specific OUI Type", "wlan_mgt.tag.oui.type",
13969 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
13971 {&hf_ieee80211_tim_dtim_count,
13972 {"DTIM count", "wlan_mgt.tim.dtim_count",
13973 FT_UINT8, BASE_DEC, NULL, 0,
13974 "Indicates how many Beacon frames (including the current frame) appear before the next DTIM", HFILL }},
13976 {&hf_ieee80211_tim_dtim_period,
13977 {"DTIM period", "wlan_mgt.tim.dtim_period",
13978 FT_UINT8, BASE_DEC, NULL, 0,
13979 "Indicates the number of beacon intervals between successive DTIMs", HFILL }},
13981 {&hf_ieee80211_tim_bmapctl,
13982 {"Bitmap control", "wlan_mgt.tim.bmapctl",
13983 FT_UINT8, BASE_HEX, NULL, 0,
13986 {&hf_ieee80211_tim_bmapctl_mcast,
13987 {"Multicast", "wlan_mgt.tim.bmapctl.multicast",
13988 FT_BOOLEAN, 8, NULL, 0x1,
13989 "Contains the Traffic Indicator bit associated with Association ID 0", HFILL }},
13991 {&hf_ieee80211_tim_bmapctl_offset,
13992 {"Bitmap Offset", "wlan_mgt.tim.bmapctl.offset",
13993 FT_UINT8, BASE_HEX, NULL, 0xFE,
13996 {&hf_ieee80211_tim_partial_virtual_bitmap,
13997 {"Partial Virtual Bitmap", "wlan_mgt.tim.partial_virtual_bitmap",
13998 FT_BYTES, BASE_NONE, NULL, 0x0,
14001 {&hf_ieee80211_tag_ibss_atim_window,
14002 {"Atim Windows", "wlan_mgt.ibss.atim_windows",
14003 FT_UINT16, BASE_HEX, NULL, 0x0,
14004 "Contains the ATIM Window length in TU", HFILL }},
14006 {&hf_ieee80211_tag_country_info_code,
14007 {"Code", "wlan_mgt.country_info.code",
14008 FT_STRING, BASE_NONE, NULL, 0x0,
14011 {&hf_ieee80211_tag_country_info_env,
14012 {"Environment", "wlan_mgt.country_info.environment",
14013 FT_UINT8, BASE_HEX, VALS(environment_vals), 0x0,
14016 {&hf_ieee80211_tag_country_info_pad,
14017 {"Padding", "wlan_mgt.country_info.padding",
14018 FT_BYTES, BASE_NONE, NULL, 0x0,
14021 {&hf_ieee80211_tag_country_info_fnm,
14022 {"Country Info", "wlan_mgt.country_info.fnm",
14023 FT_NONE, BASE_NONE, NULL, 0x0,
14026 {&hf_ieee80211_tag_country_info_fnm_fcn,
14027 {"First Channel Number", "wlan_mgt.country_info.fnm.fcn",
14028 FT_UINT8, BASE_DEC, NULL, 0x0,
14031 {&hf_ieee80211_tag_country_info_fnm_nc,
14032 {"Number of Channels", "wlan_mgt.country_info.fnm.nc",
14033 FT_UINT8, BASE_DEC, NULL, 0x0,
14036 {&hf_ieee80211_tag_country_info_fnm_mtpl,
14037 {"Maximum Transmit Power Level (in dBm)", "wlan_mgt.country_info.fnm.mtpl",
14038 FT_UINT8, BASE_DEC, NULL, 0x0,
14041 {&hf_ieee80211_tag_country_info_rrc,
14042 {"Country Info", "wlan_mgt.country_info.rrc",
14043 FT_NONE, BASE_NONE, NULL, 0x0,
14046 {&hf_ieee80211_tag_country_info_rrc_rei,
14047 {"Regulatory Extension Identifier", "wlan_mgt.country_info.rrc.rei",
14048 FT_UINT8, BASE_DEC, NULL, 0x0,
14051 {&hf_ieee80211_tag_country_info_rrc_rc,
14052 {"Regulatory Class", "wlan_mgt.country_info.rrc.rc",
14053 FT_UINT8, BASE_DEC, NULL, 0x0,
14056 {&hf_ieee80211_tag_country_info_rrc_cc,
14057 {"Coverage Class", "wlan_mgt.country_info.rrc.cc",
14058 FT_UINT8, BASE_DEC, NULL, 0x0,
14061 {&hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
14062 {"Prime Radix", "wlan_mgt.fh_hopping.parameter.prime_radix",
14063 FT_UINT8, BASE_DEC, NULL, 0x0,
14066 {&hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
14067 {"Number of Channels", "wlan_mgt.fh_hopping.parameter.nb_channels",
14068 FT_UINT8, BASE_DEC, NULL, 0x0,
14071 {&hf_ieee80211_tag_fh_hopping_table_flag,
14072 {"Flag", "wlan_mgt.fh_hopping.table.flag",
14073 FT_UINT8, BASE_HEX, NULL, 0x0,
14074 "Indicates that a Random Table is present when the value is 1", HFILL }},
14076 {&hf_ieee80211_tag_fh_hopping_table_number_of_sets,
14077 {"Number of Sets", "wlan_mgt.fh_hopping.table.number_of_sets",
14078 FT_UINT8, BASE_DEC, NULL, 0x0,
14079 "Indicates the total number of sets within the hopping patterns", HFILL }},
14081 {&hf_ieee80211_tag_fh_hopping_table_modulus,
14082 {"Modulus", "wlan_mgt.fh_hopping.table.modulus",
14083 FT_UINT8, BASE_HEX, NULL, 0x0,
14084 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL }},
14086 {&hf_ieee80211_tag_fh_hopping_table_offset,
14087 {"Offset", "wlan_mgt.fh_hopping.table.offset",
14088 FT_UINT8, BASE_HEX, NULL, 0x0,
14089 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL }},
14091 {&hf_ieee80211_tag_fh_hopping_random_table,
14092 {"Random Table", "wlan_mgt.fh_hopping.table.random_table",
14093 FT_UINT16, BASE_HEX, NULL, 0x0,
14094 "It is a vector of single octet values that indicate the random sequence to be followed during a hopping sequence", HFILL }},
14096 {&hf_ieee80211_tag_request,
14097 {"Requested Element ID", "wlan_mgt.tag.request",
14098 FT_UINT8, BASE_DEC, VALS(tag_num_vals), 0,
14099 "The list of elements that are to be included in the responding STA Probe Response frame", HFILL }},
14101 {&hf_ieee80211_tclas_up,
14102 {"User Priority", "wlan_mgt.tclas.user_priority",
14103 FT_UINT8, BASE_DEC, NULL, 0,
14104 "Contains the value of the UP of the associated MSDUs", HFILL }},
14106 {&hf_ieee80211_tclas_class_type,
14107 {"Classifier Type", "wlan_mgt.tclas.class_type",
14108 FT_UINT8, BASE_DEC, VALS (classifier_type), 0,
14109 "Specifies the type of classifier parameters", HFILL }},
14111 {&hf_ieee80211_tclas_class_mask,
14112 {"Classifier Mask", "wlan_mgt.tclas.class_mask",
14113 FT_UINT8, BASE_HEX, NULL, 0,
14114 "Specifies a bitmap where bits that are set to 1 identify a subset of the classifier parameters", HFILL }},
14116 {&hf_ieee80211_tclas_src_mac_addr,
14117 {"Source address", "wlan_mgt.tclas.type",
14118 FT_ETHER, BASE_NONE, NULL, 0,
14119 "Classifier Parameters Ethernet Type", HFILL }},
14121 {&hf_ieee80211_tclas_dst_mac_addr,
14122 {"Destination address", "wlan_mgt.tclas.type",
14123 FT_ETHER, BASE_NONE, NULL, 0,
14126 {&hf_ieee80211_tclas_ether_type,
14127 {"Ethernet Type", "wlan_mgt.tclas.type",
14128 FT_UINT8, BASE_DEC, NULL, 0,
14131 {&hf_ieee80211_tclas_version,
14132 {"IP Version", "wlan_mgt.tclas.version",
14133 FT_UINT8, BASE_DEC, NULL, 0,
14136 {&hf_ieee80211_tclas_ipv4_src,
14137 {"IPv4 Src Addr", "wlan_mgt.tclas.ipv4_src",
14138 FT_IPv4, BASE_NONE, NULL, 0,
14141 {&hf_ieee80211_tclas_ipv4_dst,
14142 {"IPv4 Dst Addr", "wlan_mgt.tclas.ipv4_dst",
14143 FT_IPv4, BASE_NONE, NULL, 0,
14146 {&hf_ieee80211_tclas_src_port,
14147 {"Source Port", "wlan_mgt.tclas.src_port",
14148 FT_UINT16, BASE_DEC, NULL, 0,
14151 {&hf_ieee80211_tclas_dst_port,
14152 {"Destination Port", "wlan_mgt.tclas.dst_port",
14153 FT_UINT16, BASE_DEC, NULL, 0,
14156 {&hf_ieee80211_tclas_dscp,
14157 {"IPv4 DSCP", "wlan_mgt.tclas.dscp",
14158 FT_UINT8, BASE_HEX, NULL, 0,
14159 "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL }},
14161 {&hf_ieee80211_tclas_protocol,
14162 {"Protocol", "wlan_mgt.tclas.protocol",
14163 FT_UINT8, BASE_HEX, NULL, 0, "IPv4 Protocol", HFILL }},
14165 {&hf_ieee80211_tclas_ipv6_src,
14166 {"IPv6 Src Addr", "wlan_mgt.tclas.ipv6_src",
14167 FT_IPv6, BASE_NONE,
14168 NULL, 0, NULL, HFILL }},
14170 {&hf_ieee80211_tclas_ipv6_dst,
14171 {"IPv6 Dst Addr", "wlan_mgt.tclas.ipv6_dst",
14172 FT_IPv6, BASE_NONE, NULL, 0,
14175 {&hf_ieee80211_tclas_flow,
14176 {"Flow Label", "wlan_mgt.tclas.flow",
14177 FT_UINT24, BASE_HEX, NULL, 0,
14178 "IPv6 Flow Label", HFILL }},
14180 {&hf_ieee80211_tclas_tag_type,
14181 {"802.1Q Tag Type", "wlan_mgt.tclas.tag_type",
14182 FT_UINT16, BASE_HEX, NULL, 0,
14185 {&hf_ieee80211_tag_challenge_text,
14186 {"Challenge Text", "wlan_mgt.tag.challenge_text",
14187 FT_BYTES, BASE_NONE, NULL, 0,
14190 {&hf_ieee80211_rsn_version,
14191 {"RSN Version", "wlan_mgt.rsn.version", FT_UINT16, BASE_DEC,
14192 NULL, 0, "Indicates the version number of the RSNA protocol", HFILL }},
14194 {&hf_ieee80211_rsn_gcs,
14195 {"Group Cipher Suite", "wlan_mgt.rsn.gcs", FT_UINT32, BASE_CUSTOM,
14196 rsn_gcs_base_custom, 0, "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
14198 {&hf_ieee80211_rsn_gcs_oui,
14199 {"Group Cipher Suite OUI", "wlan_mgt.rsn.gcs.oui", FT_UINT24, BASE_CUSTOM,
14200 oui_base_custom, 0, NULL, HFILL }},
14202 {&hf_ieee80211_rsn_gcs_type,
14203 {"Group Cipher Suite type", "wlan_mgt.rsn.gcs.type", FT_UINT8, BASE_DEC,
14204 NULL, 0, NULL, HFILL }},
14206 {&hf_ieee80211_rsn_gcs_80211_type,
14207 {"Group Cipher Suite type", "wlan_mgt.rsn.gcs.type", FT_UINT8, BASE_DEC,
14208 VALS(ieee80211_rsn_cipher_vals), 0, NULL, HFILL }},
14210 {&hf_ieee80211_rsn_pcs_count,
14211 {"Pairwise Cipher Suite Count", "wlan_mgt.rsn.pcs.count", FT_UINT16, BASE_DEC,
14212 NULL, 0, "Indicates the number of pairwise cipher suite selectors that are contained in the Pairwise Cipher Suite List", HFILL }},
14214 {&hf_ieee80211_rsn_pcs_list,
14215 {"Pairwise Cipher Suite List", "wlan_mgt.rsn.pcs.list", FT_NONE, BASE_NONE,
14216 NULL, 0, "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL }},
14218 {&hf_ieee80211_rsn_pcs,
14219 {"Pairwise Cipher Suite", "wlan_mgt.rsn.pcs", FT_UINT32, BASE_CUSTOM,
14220 rsn_pcs_base_custom, 0, NULL, HFILL }},
14222 {&hf_ieee80211_rsn_pcs_oui,
14223 {"Pairwise Cipher Suite OUI", "wlan_mgt.rsn.pcs.oui", FT_UINT24, BASE_CUSTOM,
14224 oui_base_custom, 0, NULL, HFILL }},
14226 {&hf_ieee80211_rsn_pcs_type,
14227 {"Pairwise Cipher Suite type", "wlan_mgt.rsn.pcs.type", FT_UINT8, BASE_DEC,
14228 NULL, 0, NULL, HFILL }},
14230 {&hf_ieee80211_rsn_pcs_80211_type,
14231 {"Pairwise Cipher Suite type", "wlan_mgt.rsn.pcs.type", FT_UINT8, BASE_DEC,
14232 VALS(ieee80211_rsn_cipher_vals), 0, NULL, HFILL }},
14234 {&hf_ieee80211_rsn_akms_count,
14235 {"Auth Key Management (AKM) Suite Count", "wlan_mgt.rsn.akms.count", FT_UINT16, BASE_DEC,
14236 NULL, 0, "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
14238 {&hf_ieee80211_rsn_akms_list,
14239 {"Auth Key Management (AKM) List", "wlan_mgt.rsn.akms.list", FT_NONE, BASE_NONE,
14240 NULL, 0, "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
14242 {&hf_ieee80211_rsn_akms,
14243 {"Auth Key Management (AKM) Suite", "wlan_mgt.rsn.akms", FT_UINT32, BASE_CUSTOM,
14244 rsn_akms_base_custom, 0, NULL, HFILL }},
14246 {&hf_ieee80211_rsn_akms_oui,
14247 {"Auth Key Management (AKM) OUI", "wlan_mgt.rsn.akms.oui", FT_UINT24, BASE_CUSTOM,
14248 oui_base_custom, 0, NULL, HFILL }},
14250 {&hf_ieee80211_rsn_akms_type,
14251 {"Auth Key Management (AKM) type", "wlan_mgt.rsn.akms.type", FT_UINT8, BASE_DEC,
14252 NULL, 0, NULL, HFILL }},
14254 {&hf_ieee80211_rsn_akms_80211_type,
14255 {"Auth Key Management (AKM) type", "wlan_mgt.rsn.akms.type", FT_UINT8, BASE_DEC,
14256 VALS(ieee80211_rsn_keymgmt_vals), 0, NULL, HFILL }},
14258 {&hf_ieee80211_rsn_cap,
14259 {"RSN Capabilities", "wlan_mgt.rsn.capabilities", FT_UINT16, BASE_HEX,
14260 NULL, 0, "RSN Capability information", HFILL }},
14262 {&hf_ieee80211_rsn_cap_preauth,
14263 {"RSN Pre-Auth capabilities", "wlan_mgt.rsn.capabilities.preauth",
14264 FT_BOOLEAN, 16, TFS(&rsn_preauth_flags), 0x0001,
14267 {&hf_ieee80211_rsn_cap_no_pairwise,
14268 {"RSN No Pairwise capabilities", "wlan_mgt.rsn.capabilities.no_pairwise",
14269 FT_BOOLEAN, 16, TFS(&rsn_no_pairwise_flags), 0x0002,
14272 {&hf_ieee80211_rsn_cap_ptksa_replay_counter,
14273 {"RSN PTKSA Replay Counter capabilities",
14274 "wlan_mgt.rsn.capabilities.ptksa_replay_counter",
14275 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter), 0x000C,
14278 {&hf_ieee80211_rsn_cap_gtksa_replay_counter,
14279 {"RSN GTKSA Replay Counter capabilities",
14280 "wlan_mgt.rsn.capabilities.gtksa_replay_counter",
14281 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter), 0x0030,
14284 {&hf_ieee80211_rsn_cap_mfpr,
14285 {"Management Frame Protection Required",
14286 "wlan_mgt.rsn.capabilities.mfpr",
14287 FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL }},
14289 {&hf_ieee80211_rsn_cap_mfpc,
14290 {"Management Frame Protection Capable",
14291 "wlan_mgt.rsn.capabilities.mfpc",
14292 FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL }},
14294 {&hf_ieee80211_rsn_cap_peerkey,
14295 {"PeerKey Enabled",
14296 "wlan_mgt.rsn.capabilities.peerkey",
14297 FT_BOOLEAN, 16, NULL, 0x0200, NULL, HFILL }},
14299 {&hf_ieee80211_rsn_pmkid_count,
14300 {"PMKID Count", "wlan_mgt.rsn.pmkid.count", FT_UINT16, BASE_DEC,
14301 NULL, 0, "Indicates the number of PMKID selectors that are contained in the PMKID Suite List", HFILL }},
14303 {&hf_ieee80211_rsn_pmkid_list,
14304 {"PMKID List", "wlan_mgt.rsn.pmkid.list", FT_NONE, BASE_NONE,
14305 NULL, 0, "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
14307 {&hf_ieee80211_rsn_pmkid,
14308 {"PMKID", "wlan_mgt.pmkid.akms", FT_BYTES, BASE_NONE,
14309 NULL, 0, NULL, HFILL }},
14311 {&hf_ieee80211_rsn_gmcs,
14312 {"Group Management Cipher Suite", "wlan_mgt.rsn.gmcs", FT_UINT32, BASE_CUSTOM,
14313 rsn_gmcs_base_custom, 0, "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
14315 {&hf_ieee80211_rsn_gmcs_oui,
14316 {"Group Management Cipher Suite OUI", "wlan_mgt.rsn.gmcs.oui", FT_UINT24, BASE_CUSTOM,
14317 oui_base_custom, 0, NULL, HFILL }},
14319 {&hf_ieee80211_rsn_gmcs_type,
14320 {"Group Management Cipher Suite type", "wlan_mgt.rsn.gmcs.type", FT_UINT8, BASE_DEC,
14321 NULL, 0, NULL, HFILL }},
14323 {&hf_ieee80211_rsn_gmcs_80211_type,
14324 {"Group Management Cipher Suite type", "wlan_mgt.rsn.gmcs.type", FT_UINT8, BASE_DEC,
14325 VALS(ieee80211_rsn_cipher_vals), 0, NULL, HFILL }},
14328 {&hf_ieee80211_ht_cap,
14329 {"HT Capabilities Info", "wlan_mgt.ht.capabilities", FT_UINT16, BASE_HEX,
14330 NULL, 0, "HT Capability information", HFILL }},
14332 {&hf_ieee80211_ht_vs_cap,
14333 {"HT Capabilities Info (VS)", "wlan_mgt.vs.ht.capabilities", FT_UINT16, BASE_HEX,
14334 NULL, 0, "Vendor Specific HT Capability information", HFILL }},
14336 {&hf_ieee80211_ht_ldpc_coding,
14337 {"HT LDPC coding capability", "wlan_mgt.ht.capabilities.ldpccoding",
14338 FT_BOOLEAN, 16, TFS (&ht_ldpc_coding_flag), 0x0001,
14341 {&hf_ieee80211_ht_chan_width,
14342 {"HT Support channel width", "wlan_mgt.ht.capabilities.width",
14343 FT_BOOLEAN, 16, TFS (&ht_chan_width_flag), 0x0002,
14346 {&hf_ieee80211_ht_sm_pwsave,
14347 {"HT SM Power Save", "wlan_mgt.ht.capabilities.sm",
14348 FT_UINT16, BASE_HEX, VALS (&ht_sm_pwsave_flag), 0x000c,
14351 {&hf_ieee80211_ht_green,
14352 {"HT Green Field", "wlan_mgt.ht.capabilities.green",
14353 FT_BOOLEAN, 16, TFS (&ht_green_flag), 0x0010,
14356 {&hf_ieee80211_ht_short20,
14357 {"HT Short GI for 20MHz", "wlan_mgt.ht.capabilities.short20",
14358 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0020,
14361 {&hf_ieee80211_ht_short40,
14362 {"HT Short GI for 40MHz", "wlan_mgt.ht.capabilities.short40",
14363 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0040,
14366 {&hf_ieee80211_ht_tx_stbc,
14367 {"HT Tx STBC", "wlan_mgt.ht.capabilities.txstbc",
14368 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0080,
14371 {&hf_ieee80211_ht_rx_stbc,
14372 {"HT Rx STBC", "wlan_mgt.ht.capabilities.rxstbc",
14373 FT_UINT16, BASE_HEX, VALS (&ht_rx_stbc_flag), 0x0300,
14374 "HT Tx STBC", HFILL }},
14376 {&hf_ieee80211_ht_delayed_block_ack,
14377 {"HT Delayed Block ACK", "wlan_mgt.ht.capabilities.delayedblockack",
14378 FT_BOOLEAN, 16, TFS (&ht_delayed_block_ack_flag), 0x0400,
14381 {&hf_ieee80211_ht_max_amsdu,
14382 {"HT Max A-MSDU length", "wlan_mgt.ht.capabilities.amsdu",
14383 FT_BOOLEAN, 16, TFS (&ht_max_amsdu_flag), 0x0800,
14386 {&hf_ieee80211_ht_dss_cck_40,
14387 {"HT DSSS/CCK mode in 40MHz", "wlan_mgt.ht.capabilities.dsscck",
14388 FT_BOOLEAN, 16, TFS (&ht_dss_cck_40_flag), 0x1000,
14389 "HT DSS/CCK mode in 40MHz", HFILL }},
14391 {&hf_ieee80211_ht_psmp,
14392 {"HT PSMP Support", "wlan_mgt.ht.capabilities.psmp",
14393 FT_BOOLEAN, 16, TFS (&ht_psmp_flag), 0x2000,
14396 {&hf_ieee80211_ht_40_mhz_intolerant,
14397 {"HT Forty MHz Intolerant", "wlan_mgt.ht.capabilities.40mhzintolerant",
14398 FT_BOOLEAN, 16, TFS (&ht_40_mhz_intolerant_flag), 0x4000,
14401 {&hf_ieee80211_ht_l_sig,
14402 {"HT L-SIG TXOP Protection support", "wlan_mgt.ht.capabilities.lsig",
14403 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x8000,
14406 {&hf_ieee80211_ampduparam,
14407 {"A-MPDU Parameters", "wlan_mgt.ht.ampduparam", FT_UINT16, BASE_HEX,
14408 NULL, 0, NULL, HFILL }},
14410 {&hf_ieee80211_ampduparam_vs,
14411 {"A-MPDU Parameters (VS)", "wlan_mgt.vs.ht.ampduparam", FT_UINT16, BASE_HEX,
14412 NULL, 0, "Vendor Specific A-MPDU Parameters", HFILL }},
14414 {&hf_ieee80211_ampduparam_mpdu,
14415 {"Maximum Rx A-MPDU Length", "wlan_mgt.ht.ampduparam.maxlength",
14416 FT_UINT8, BASE_HEX, 0, 0x03,
14419 {&hf_ieee80211_ampduparam_mpdu_start_spacing,
14420 {"MPDU Density", "wlan_mgt.ht.ampduparam.mpdudensity",
14421 FT_UINT8, BASE_HEX, VALS(&duparam_mpdu_start_spacing_flags), 0x1c,
14424 {&hf_ieee80211_ampduparam_reserved,
14425 {"Reserved", "wlan_mgt.ht.ampduparam.reserved",
14426 FT_UINT8, BASE_HEX, NULL, 0xE0,
14429 {&hf_ieee80211_mcsset,
14430 {"Rx Supported Modulation and Coding Scheme Set", "wlan_mgt.ht.mcsset",
14431 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
14433 {&hf_ieee80211_mcsset_vs,
14434 {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan_mgt.vs.ht.mcsset",
14435 FT_STRING, BASE_NONE, NULL, 0, "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL }},
14437 {&hf_ieee80211_mcsset_rx_bitmask,
14438 {"Rx Modulation and Coding Scheme (One bit per modulation)", "wlan_mgt.ht.mcsset.rxbitmask",
14439 FT_NONE, BASE_NONE, NULL, 0, "One bit per modulation", HFILL }},
14441 {&hf_ieee80211_mcsset_rx_bitmask_0to7,
14442 {"Rx Bitmask Bits 0-7", "wlan_mgt.ht.mcsset.rxbitmask.0to7",
14443 FT_UINT32, BASE_HEX, 0, 0x000000ff, NULL, HFILL }},
14445 {&hf_ieee80211_mcsset_rx_bitmask_8to15,
14446 {"Rx Bitmask Bits 8-15", "wlan_mgt.ht.mcsset.rxbitmask.8to15",
14447 FT_UINT32, BASE_HEX, 0, 0x0000ff00, NULL, HFILL }},
14449 {&hf_ieee80211_mcsset_rx_bitmask_16to23,
14450 {"Rx Bitmask Bits 16-23", "wlan_mgt.ht.mcsset.rxbitmask.16to23",
14451 FT_UINT32, BASE_HEX, 0, 0x00ff0000, NULL, HFILL }},
14453 {&hf_ieee80211_mcsset_rx_bitmask_24to31,
14454 {"Rx Bitmask Bits 24-31", "wlan_mgt.ht.mcsset.rxbitmask.24to31",
14455 FT_UINT32, BASE_HEX, 0, 0xff000000, NULL, HFILL }},
14457 {&hf_ieee80211_mcsset_rx_bitmask_32,
14458 {"Rx Bitmask Bit 32", "wlan_mgt.ht.mcsset.rxbitmask.32",
14459 FT_UINT32, BASE_HEX, 0, 0x000001, NULL, HFILL }},
14461 {&hf_ieee80211_mcsset_rx_bitmask_33to38,
14462 {"Rx Bitmask Bits 33-38", "wlan_mgt.ht.mcsset.rxbitmask.33to38",
14463 FT_UINT32, BASE_HEX, 0, 0x00007e, NULL, HFILL }},
14465 {&hf_ieee80211_mcsset_rx_bitmask_39to52,
14466 {"Rx Bitmask Bits 39-52", "wlan_mgt.ht.mcsset.rxbitmask.39to52",
14467 FT_UINT32, BASE_HEX, 0, 0x1fff80, NULL, HFILL }},
14469 {&hf_ieee80211_mcsset_rx_bitmask_53to76,
14470 {"Rx Bitmask Bits 53-76", "wlan_mgt.ht.mcsset.rxbitmask.53to76",
14471 FT_UINT32, BASE_HEX, 0, 0x1fffffe0, NULL, HFILL }},
14473 {&hf_ieee80211_mcsset_highest_data_rate,
14474 {"Highest Supported Data Rate", "wlan_mgt.ht.mcsset.highestdatarate",
14475 FT_UINT16, BASE_HEX, 0, 0x03ff, NULL, HFILL }},
14477 {&hf_ieee80211_mcsset_tx_mcs_set_defined,
14478 {"Tx Supported MCS Set", "wlan_mgt.ht.mcsset.txsetdefined",
14479 FT_BOOLEAN, 16, TFS (&mcsset_tx_mcs_set_defined_flag), 0x0001,
14482 {&hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal,
14483 {"Tx and Rx MCS Set", "wlan_mgt.ht.mcsset.txrxmcsnotequal",
14484 FT_BOOLEAN, 16, TFS (&mcsset_tx_rx_mcs_set_not_equal_flag), 0x0002,
14487 {&hf_ieee80211_mcsset_tx_max_spatial_streams,
14488 {"Tx Maximum Number of Spatial Streams Supported", "wlan_mgt.ht.mcsset.txmaxss",
14489 FT_UINT16, BASE_HEX, VALS (&mcsset_tx_max_spatial_streams_flags) , 0x000c,
14492 {&hf_ieee80211_mcsset_tx_unequal_modulation,
14493 {"Unequal Modulation", "wlan_mgt.ht.mcsset.txunequalmod",
14494 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0010,
14497 {&hf_ieee80211_htex_cap,
14498 {"HT Extended Capabilities", "wlan_mgt.htex.capabilities", FT_UINT16, BASE_HEX,
14499 NULL, 0, "HT Extended Capability information", HFILL }},
14501 {&hf_ieee80211_htex_vs_cap,
14502 {"HT Extended Capabilities (VS)", "wlan_mgt.vs.htex.capabilities", FT_UINT16, BASE_HEX,
14503 NULL, 0, "Vendor Specific HT Extended Capability information", HFILL }},
14505 {&hf_ieee80211_htex_pco,
14506 {"Transmitter supports PCO", "wlan_mgt.htex.capabilities.pco",
14507 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0001,
14510 {&hf_ieee80211_htex_transtime,
14511 {"Time needed to transition between 20MHz and 40MHz", "wlan_mgt.htex.capabilities.transtime",
14512 FT_UINT16, BASE_HEX, VALS (&htex_transtime_flags), 0x0006,
14515 {&hf_ieee80211_htex_mcs,
14516 {"MCS Feedback capability", "wlan_mgt.htex.capabilities.mcs",
14517 FT_UINT16, BASE_HEX, VALS (&htex_mcs_flags), 0x0300,
14520 {&hf_ieee80211_htex_htc_support,
14521 {"High Throughput", "wlan_mgt.htex.capabilities.htc",
14522 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0400,
14525 {&hf_ieee80211_htex_rd_responder,
14526 {"Reverse Direction Responder", "wlan_mgt.htex.capabilities.rdresponder",
14527 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0800,
14530 {&hf_ieee80211_txbf,
14531 {"Transmit Beam Forming (TxBF) Capabilities", "wlan_mgt.txbf", FT_UINT16, BASE_HEX,
14532 NULL, 0, NULL, HFILL }},
14534 {&hf_ieee80211_txbf_vs,
14535 {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan_mgt.vs.txbf", FT_UINT16, BASE_HEX,
14536 NULL, 0, "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL }},
14538 {&hf_ieee80211_txbf_cap,
14539 {"Transmit Beamforming", "wlan_mgt.txbf.txbf",
14540 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000001,
14543 {&hf_ieee80211_txbf_rcv_ssc,
14544 {"Receive Staggered Sounding", "wlan_mgt.txbf.rxss",
14545 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000002,
14548 {&hf_ieee80211_txbf_tx_ssc,
14549 {"Transmit Staggered Sounding", "wlan_mgt.txbf.txss",
14550 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000004,
14553 {&hf_ieee80211_txbf_rcv_ndp,
14554 {"Receive Null Data packet (NDP)", "wlan_mgt.txbf.rxndp",
14555 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000008,
14558 {&hf_ieee80211_txbf_tx_ndp,
14559 {"Transmit Null Data packet (NDP)", "wlan_mgt.txbf.txndp",
14560 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000010,
14563 {&hf_ieee80211_txbf_impl_txbf,
14564 {"Implicit TxBF capable", "wlan_mgt.txbf.impltxbf",
14565 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000020,
14566 "Implicit Transmit Beamforming (TxBF) capable", HFILL }},
14568 {&hf_ieee80211_txbf_calib,
14569 {"Calibration", "wlan_mgt.txbf.calibration",
14570 FT_UINT32, BASE_HEX, VALS (&txbf_calib_flag), 0x000000c0,
14573 {&hf_ieee80211_txbf_expl_csi,
14574 {"STA can apply TxBF using CSI explicit feedback", "wlan_mgt.txbf.csi",
14575 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000100,
14576 "Station can apply TxBF using CSI explicit feedback", HFILL }},
14578 {&hf_ieee80211_txbf_expl_uncomp_fm,
14579 {"STA can apply TxBF using uncompressed beamforming feedback matrix", "wlan_mgt.txbf.fm.uncompressed.tbf",
14580 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000200,
14581 "Station can apply TxBF using uncompressed beamforming feedback matrix", HFILL }},
14583 {&hf_ieee80211_txbf_expl_comp_fm,
14584 {"STA can apply TxBF using compressed beamforming feedback matrix", "wlan_mgt.txbf.fm.compressed.tbf",
14585 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000400,
14586 "Station can apply TxBF using compressed beamforming feedback matrix", HFILL }},
14588 {&hf_ieee80211_txbf_expl_bf_csi,
14589 {"Receiver can return explicit CSI feedback", "wlan_mgt.txbf.rcsi",
14590 FT_UINT32, BASE_HEX, VALS (&txbf_feedback_flags), 0x00001800,
14593 {&hf_ieee80211_txbf_expl_uncomp_fm_feed,
14594 {"Receiver can return explicit uncompressed Beamforming Feedback Matrix", "wlan_mgt.txbf.fm.uncompressed.rbf",
14595 FT_UINT32, BASE_HEX, VALS (&txbf_feedback_flags), 0x00006000,
14598 {&hf_ieee80211_txbf_expl_comp_fm_feed,
14599 {"STA can compress and use compressed Beamforming Feedback Matrix", "wlan_mgt.txbf.fm.compressed.bf",
14600 FT_UINT32, BASE_HEX, VALS (&txbf_feedback_flags), 0x00018000,
14601 "Station can compress and use compressed Beamforming Feedback Matrix", HFILL }},
14603 {&hf_ieee80211_txbf_min_group,
14604 {"Minimal grouping used for explicit feedback reports", "wlan_mgt.txbf.mingroup",
14605 FT_UINT32, BASE_HEX, VALS (&txbf_min_group_flags), 0x00060000,
14608 {&hf_ieee80211_txbf_csi_num_bf_ant,
14609 {"Max antennae STA can support when CSI feedback required", "wlan_mgt.txbf.csinumant",
14610 FT_UINT32, BASE_HEX, VALS (&txbf_antenna_flags), 0x00180000,
14611 "Max antennae station can support when CSI feedback required", HFILL }},
14613 {&hf_ieee80211_txbf_uncomp_sm_bf_ant,
14614 {"Max antennae STA can support when uncompressed Beamforming feedback required", "wlan_mgt.txbf.fm.uncompressed.maxant",
14615 FT_UINT32, BASE_HEX, VALS (&txbf_antenna_flags), 0x00600000,
14616 "Max antennae station can support when uncompressed Beamforming feedback required", HFILL }},
14618 {&hf_ieee80211_txbf_comp_sm_bf_ant,
14619 {"Max antennae STA can support when compressed Beamforming feedback required", "wlan_mgt.txbf.fm.compressed.maxant",
14620 FT_UINT32, BASE_HEX, VALS (&txbf_antenna_flags), 0x01800000,
14621 "Max antennae station can support when compressed Beamforming feedback required", HFILL }},
14623 {&hf_ieee80211_txbf_csi_max_rows_bf,
14624 {"Maximum number of rows of CSI explicit feedback", "wlan_mgt.txbf.csi.maxrows",
14625 FT_UINT32, BASE_HEX, VALS (&txbf_csi_max_rows_bf_flags), 0x06000000,
14628 {&hf_ieee80211_txbf_chan_est,
14629 {"Maximum number of space time streams for which channel dimensions can be simultaneously estimated", "wlan_mgt.txbf.channelest",
14630 FT_UINT32, BASE_HEX, VALS (&txbf_chan_est_flags), 0x18000000,
14633 {&hf_ieee80211_txbf_resrv,
14634 {"Reserved", "wlan_mgt.txbf.reserved",
14635 FT_UINT32, BASE_HEX, NULL, 0xe0000000,
14638 {&hf_ieee80211_hta_cc,
14639 {"HT Control Channel", "wlan_mgt.hta.control_channel", FT_UINT8, BASE_DEC,
14640 NULL, 0, NULL, HFILL }},
14642 {&hf_ieee80211_hta_cap,
14643 {"HT Additional Capabilities", "wlan_mgt.hta.capabilities", FT_UINT16, BASE_HEX,
14644 NULL, 0, "HT Additional Capability information", HFILL }},
14646 {&hf_ieee80211_hta_ext_chan_offset,
14647 {"Extension Channel Offset", "wlan_mgt.hta.capabilities.extchan",
14648 FT_UINT16, BASE_HEX, VALS (&hta_ext_chan_offset_flag), 0x0003,
14651 {&hf_ieee80211_hta_rec_tx_width,
14652 {"Recommended Tx Channel Width", "wlan_mgt.hta.capabilities.rectxwidth",
14653 FT_BOOLEAN, 16, TFS (&hta_rec_tx_width_flag), 0x0004,
14654 "Recommended Transmit Channel Width", HFILL }},
14656 {&hf_ieee80211_hta_rifs_mode,
14657 {"Reduced Interframe Spacing (RIFS) Mode", "wlan_mgt.hta.capabilities.rifsmode",
14658 FT_BOOLEAN, 16, TFS (&hta_rifs_mode_flag), 0x0008,
14661 {&hf_ieee80211_hta_controlled_access,
14662 {"Controlled Access Only", "wlan_mgt.hta.capabilities.controlledaccess",
14663 FT_BOOLEAN, 16, TFS (&hta_controlled_access_flag), 0x0010,
14666 {&hf_ieee80211_hta_service_interval,
14667 {"Service Interval Granularity", "wlan_mgt.hta.capabilities.serviceinterval",
14668 FT_UINT16, BASE_HEX, VALS (&hta_service_interval_flag), 0x00E0,
14671 {&hf_ieee80211_hta_operating_mode,
14672 {"Operating Mode", "wlan_mgt.hta.capabilities.operatingmode",
14673 FT_UINT16, BASE_HEX, VALS (&hta_operating_mode_flag), 0x0003,
14676 {&hf_ieee80211_hta_non_gf_devices,
14677 {"Non Greenfield (GF) devices Present", "wlan_mgt.hta.capabilities.nongfdevices",
14678 FT_BOOLEAN, 16, TFS (&hta_non_gf_devices_flag), 0x0004,
14679 "on Greenfield (GF) devices Present", HFILL }},
14681 {&hf_ieee80211_hta_basic_stbc_mcs,
14682 {"Basic STB Modulation and Coding Scheme (MCS)", "wlan_mgt.hta.capabilities.",
14683 FT_UINT16, BASE_HEX, NULL , 0x007f,
14686 {&hf_ieee80211_hta_dual_stbc_protection,
14687 {"Dual Clear To Send (CTS) Protection", "wlan_mgt.hta.capabilities.",
14688 FT_BOOLEAN, 16, TFS (&hta_dual_stbc_protection_flag), 0x0080,
14691 {&hf_ieee80211_hta_secondary_beacon,
14692 {"Secondary Beacon", "wlan_mgt.hta.capabilities.",
14693 FT_BOOLEAN, 16, TFS (&hta_secondary_beacon_flag), 0x0100,
14696 {&hf_ieee80211_hta_lsig_txop_protection,
14697 {"L-SIG TXOP Protection Support", "wlan_mgt.hta.capabilities.",
14698 FT_BOOLEAN, 16, TFS (&hta_lsig_txop_protection_flag), 0x0200,
14701 {&hf_ieee80211_hta_pco_active,
14702 {"Phased Coexistence Operation (PCO) Active", "wlan_mgt.hta.capabilities.",
14703 FT_BOOLEAN, 16, TFS (&hta_pco_active_flag), 0x0400,
14706 {&hf_ieee80211_hta_pco_phase,
14707 {"Phased Coexistence Operation (PCO) Phase", "wlan_mgt.hta.capabilities.",
14708 FT_BOOLEAN, 16, TFS (&hta_pco_phase_flag), 0x0800,
14711 {&hf_ieee80211_antsel,
14712 {"Antenna Selection (ASEL) Capabilities", "wlan_mgt.asel",
14713 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
14715 {&hf_ieee80211_antsel_vs,
14716 {"Antenna Selection (ASEL) Capabilities (VS)", "wlan_mgt.vs.asel",
14717 FT_UINT8, BASE_HEX, NULL, 0, "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL }},
14719 {&hf_ieee80211_antsel_b0,
14720 {"Antenna Selection Capable", "wlan_mgt.asel.capable",
14721 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x01, NULL, HFILL }},
14723 {&hf_ieee80211_antsel_b1,
14724 {"Explicit CSI Feedback Based Tx ASEL", "wlan_mgt.asel.txcsi",
14725 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x02, NULL, HFILL }},
14727 {&hf_ieee80211_antsel_b2,
14728 {"Antenna Indices Feedback Based Tx ASEL", "wlan_mgt.asel.txif",
14729 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x04, NULL, HFILL }},
14731 {&hf_ieee80211_antsel_b3,
14732 {"Explicit CSI Feedback", "wlan_mgt.asel.csi",
14733 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x08, NULL, HFILL }},
14735 {&hf_ieee80211_antsel_b4,
14736 {"Antenna Indices Feedback", "wlan_mgt.asel.if",
14737 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x10, NULL, HFILL }},
14739 {&hf_ieee80211_antsel_b5,
14740 {"Rx ASEL", "wlan_mgt.asel.rx",
14741 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x20, NULL, HFILL }},
14743 {&hf_ieee80211_antsel_b6,
14744 {"Tx Sounding PPDUs", "wlan_mgt.asel.sppdu",
14745 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x40, NULL, HFILL }},
14747 {&hf_ieee80211_antsel_b7,
14748 {"Reserved", "wlan_mgt.asel.reserved",
14749 FT_UINT8, BASE_HEX, NULL, 0x80, NULL, HFILL }},
14751 {&hf_ieee80211_ht_info_delimiter1,
14752 {"HT Information Subset (1 of 3)", "wlan_mgt.ht.info.delim1",
14753 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
14755 {&hf_ieee80211_ht_info_primary_channel,
14756 {"Primary Channel", "wlan_mgt.ht.info.primarychannel",
14757 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
14759 {&hf_ieee80211_ht_info_secondary_channel_offset,
14760 {"Secondary channel offset", "wlan_mgt.ht.info.secchanoffset",
14761 FT_UINT8, BASE_HEX, VALS (&ht_info_secondary_channel_offset_flags), 0x03, NULL, HFILL }},
14763 {&hf_ieee80211_ht_info_channel_width,
14764 {"Supported channel width", "wlan_mgt.ht.info.chanwidth",
14765 FT_BOOLEAN, 8, TFS (&ht_info_channel_width_flag), 0x04, NULL, HFILL }},
14767 {&hf_ieee80211_ht_info_rifs_mode,
14768 {"Reduced Interframe Spacing (RIFS)", "wlan_mgt.ht.info.rifs",
14769 FT_BOOLEAN, 8, TFS (&ht_info_rifs_mode_flag), 0x08, NULL, HFILL }},
14771 {&hf_ieee80211_ht_info_psmp_stas_only,
14772 {"Power Save Multi-Poll (PSMP) stations only", "wlan_mgt.ht.info.psmponly",
14773 FT_BOOLEAN, 8, TFS (&ht_info_psmp_stas_only_flag), 0x10, NULL, HFILL }},
14775 {&hf_ieee80211_ht_info_service_interval_granularity,
14776 {"Shortest service interval", "wlan_mgt.ht.info.",
14777 FT_UINT8, BASE_HEX, VALS (&ht_info_service_interval_granularity_flags), 0xe0, NULL, HFILL }},
14779 {&hf_ieee80211_ht_info_delimiter2,
14780 {"HT Information Subset (2 of 3)", "wlan_mgt.ht.info.delim2",
14781 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
14783 {&hf_ieee80211_ht_info_operating_mode,
14784 {"Operating mode of BSS", "wlan_mgt.ht.info.operatingmode",
14785 FT_UINT16, BASE_HEX, VALS (&ht_info_operating_mode_flags), 0x0003, NULL, HFILL }},
14787 {&hf_ieee80211_ht_info_non_greenfield_sta_present,
14788 {"Non-greenfield STAs present", "wlan_mgt.ht.info.greenfield",
14789 FT_BOOLEAN, 16, TFS (&ht_info_non_greenfield_sta_present_flag), 0x0004, NULL, HFILL }},
14791 {&hf_ieee80211_ht_info_transmit_burst_limit,
14792 {"Transmit burst limit", "wlan_mgt.ht.info.burstlim",
14793 FT_BOOLEAN, 16, TFS (&ht_info_transmit_burst_limit_flag), 0x0008, NULL, HFILL }},
14795 {&hf_ieee80211_ht_info_obss_non_ht_stas_present,
14796 {"OBSS non-HT STAs present", "wlan_mgt.ht.info.obssnonht",
14797 FT_BOOLEAN, 16, TFS (&ht_info_obss_non_ht_stas_present_flag), 0x0010, NULL, HFILL }},
14799 {&hf_ieee80211_ht_info_reserved_1,
14800 {"Reserved", "wlan_mgt.ht.info.reserved1",
14801 FT_UINT16, BASE_HEX, NULL, 0xffe0, NULL, HFILL }},
14803 {&hf_ieee80211_ht_info_delimiter3,
14804 {"HT Information Subset (3 of 3)", "wlan_mgt.ht.info.delim3",
14805 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
14807 {&hf_ieee80211_ht_info_reserved_2,
14808 {"Reserved", "wlan_mgt.ht.info.reserved2",
14809 FT_UINT16, BASE_HEX, NULL, 0x003f, NULL, HFILL }},
14811 {&hf_ieee80211_ht_info_dual_beacon,
14812 {"Dual beacon", "wlan_mgt.ht.info.dualbeacon",
14813 FT_BOOLEAN, 16, TFS (&ht_info_dual_beacon_flag), 0x0040, NULL, HFILL }},
14815 {&hf_ieee80211_ht_info_dual_cts_protection,
14816 {"Dual Clear To Send (CTS) protection", "wlan_mgt.ht.info.dualcts",
14817 FT_BOOLEAN, 16, TFS (&ht_info_dual_cts_protection_flag), 0x0080, NULL, HFILL }},
14819 {&hf_ieee80211_ht_info_secondary_beacon,
14820 {"Beacon ID", "wlan_mgt.ht.info.secondarybeacon",
14821 FT_BOOLEAN, 16, TFS (&ht_info_secondary_beacon_flag), 0x0100, NULL, HFILL }},
14823 {&hf_ieee80211_ht_info_lsig_txop_protection_full_support,
14824 {"L-SIG TXOP Protection Full Support", "wlan_mgt.ht.info.lsigprotsupport",
14825 FT_BOOLEAN, 16, TFS (&ht_info_lsig_txop_protection_full_support_flag), 0x0200, NULL, HFILL }},
14827 {&hf_ieee80211_ht_info_pco_active,
14828 {"Phased Coexistence Operation (PCO)", "wlan_mgt.ht.info.pco.active",
14829 FT_BOOLEAN, 16, TFS (&tfs_active_inactive), 0x0400, NULL, HFILL }},
14831 {&hf_ieee80211_ht_info_pco_phase,
14832 {"Phased Coexistence Operation (PCO) Phase", "wlan_mgt.ht.info.pco.phase",
14833 FT_BOOLEAN, 16, TFS (&ht_info_pco_phase_flag), 0x0800, NULL, HFILL }},
14835 {&hf_ieee80211_ht_info_reserved_3,
14836 {"Reserved", "wlan_mgt.ht.info.reserved3",
14837 FT_UINT16, BASE_HEX, NULL, 0xf000, NULL, HFILL }},
14839 {&hf_ieee80211_tag_ap_channel_report_regulatory_class,
14840 {"Regulatory Class", "wlan_mgt.ap_channel_report.regulatory_class",
14841 FT_UINT8, BASE_DEC, NULL, 0,
14844 {&hf_ieee80211_tag_ap_channel_report_channel_list,
14845 {"Channel List", "wlan_mgt.ap_channel_report.channel_list",
14846 FT_UINT8, BASE_DEC, NULL, 0,
14849 {&hf_ieee80211_tag_secondary_channel_offset,
14850 {"Secondary Channel Offset", "wlan_mgt.secchanoffset",
14851 FT_UINT8, BASE_HEX, VALS (&ieee80211_tag_secondary_channel_offset_flags), 0,
14854 {&hf_ieee80211_tag_power_constraint_local,
14855 {"Local Power Constraint", "wlan_mgt.powercon.local",
14856 FT_UINT8, BASE_HEX, NULL, 0,
14857 "Value that allows the mitigation requirements to be satisfied in the current channel", HFILL }},
14859 {&hf_ieee80211_tag_power_capability_min,
14860 {"Minimum Transmit Power", "wlan_mgt.powercap.min",
14861 FT_UINT8, BASE_HEX, NULL, 0,
14862 "The nominal minimum transmit power with which the STA is capable of transmitting in the current channel", HFILL }},
14864 {&hf_ieee80211_tag_power_capability_max,
14865 {"Maximum Transmit Power", "wlan_mgt.powercap.max",
14866 FT_UINT8, BASE_HEX, NULL, 0,
14867 "The nominal maximum transmit power with which the STA is capable of transmitting in the current channel", HFILL }},
14869 {&hf_ieee80211_tag_tpc_report_trsmt_pow,
14870 {"Transmit Power", "wlan_mgt.tcprep.trsmt_pow",
14871 FT_INT8, BASE_DEC, NULL, 0,
14874 {&hf_ieee80211_tag_tpc_report_link_mrg,
14875 {"Link Margin", "wlan_mgt.tcprep.link_mrg",
14876 FT_INT8, BASE_DEC, NULL, 0,
14879 {&hf_ieee80211_tag_supported_channels,
14880 {"Supported Channels Set", "wlan_mgt.supchan",
14881 FT_NONE, BASE_NONE, NULL, 0,
14884 {&hf_ieee80211_tag_supported_channels_first,
14885 {"First Supported Channel", "wlan_mgt.supchan.first",
14886 FT_UINT8, BASE_DEC, NULL, 0,
14889 {&hf_ieee80211_tag_supported_channels_range,
14890 {"Supported Channel Range", "wlan_mgt.supchan.range",
14891 FT_UINT8, BASE_DEC, NULL, 0,
14894 {&hf_ieee80211_csa_channel_switch_mode,
14895 {"Channel Switch Mode", "wlan_mgt.csa.channel_switch_mode",
14896 FT_UINT8, BASE_HEX, NULL, 0,
14897 "Indicates any restrictions on transmission until a channel switch", HFILL }},
14899 {&hf_ieee80211_csa_new_channel_number,
14900 {"New Channel Number", "wlan_mgt.csa.new_channel_number",
14901 FT_UINT8, BASE_HEX, NULL, 0,
14902 "Set to the number of the channel to which the STA is moving", HFILL }},
14904 {&hf_ieee80211_csa_channel_switch_count,
14905 {"Channel Switch Count", "wlan_mgt.csa.channel_switch_count",
14906 FT_UINT8, BASE_DEC, NULL, 0,
14907 "Set to the number of TBTTs until the STA sending the Channel Switch Announcement element switches to the new channel or shall be set to 0", HFILL }},
14909 {&hf_ieee80211_tag_measure_request_token,
14910 {"Measurement Token", "wlan_mgt.measure.req.token",
14911 FT_UINT8, BASE_HEX, NULL, 0xff, NULL, HFILL }},
14913 {&hf_ieee80211_tag_measure_request_mode,
14914 {"Measurement Request Mode", "wlan_mgt.measure.req.mode",
14915 FT_UINT8, BASE_HEX, NULL, 0xff, NULL, HFILL }},
14917 {&hf_ieee80211_tag_measure_request_mode_parallel,
14918 {"Parallel", "wlan_mgt.measure.req.reqmode.parallel",
14919 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
14921 {&hf_ieee80211_tag_measure_request_mode_enable,
14922 {"Measurement Request Mode Field", "wlan_mgt.measure.req.reqmode.enable",
14923 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x02, NULL, HFILL }},
14925 {&hf_ieee80211_tag_measure_request_mode_request,
14926 {"Measurement Reports", "wlan_mgt.measure.req.reqmode.request",
14927 FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x04, NULL, HFILL }},
14929 {&hf_ieee80211_tag_measure_request_mode_report,
14930 {"Autonomous Measurement Reports", "wlan_mgt.measure.req.reqmode.report",
14931 FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x08, NULL, HFILL }},
14933 {&hf_ieee80211_tag_measure_request_mode_duration_mandatory,
14934 {"Duration Mandatory", "wlan_mgt.measure.req.reqmode.duration_mandatory",
14935 FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x10, NULL, HFILL }},
14937 {&hf_ieee80211_tag_measure_request_mode_reserved,
14938 {"Reserved", "wlan_mgt.measure.req.reqmode.reserved",
14939 FT_UINT8, BASE_HEX, NULL, 0xE0, NULL, HFILL }},
14941 {&hf_ieee80211_tag_measure_request_type,
14942 {"Measurement Request Type", "wlan_mgt.measure.req.reqtype",
14943 FT_UINT8, BASE_HEX, VALS (&ieee80211_tag_measure_request_type_flags), 0x00, NULL, HFILL }},
14945 {&hf_ieee80211_tag_measure_request_channel_number,
14946 {"Measurement Channel Number", "wlan_mgt.measure.req.channelnumber",
14947 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
14949 {&hf_ieee80211_tag_measure_request_start_time,
14950 {"Measurement Start Time", "wlan_mgt.measure.req.starttime",
14951 FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL }},
14953 {&hf_ieee80211_tag_measure_request_duration,
14954 {"Measurement Duration", "wlan_mgt.measure.req.channelnumber",
14955 FT_UINT16, BASE_HEX, NULL, 0, "in TU (1 TU = 1024 us)", HFILL }},
14957 {&hf_ieee80211_tag_measure_request_regulatory_class,
14958 {"Measurement Channel Number", "wlan_mgt.measure.req.regclass",
14959 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
14961 {&hf_ieee80211_tag_measure_request_randomization_interval,
14962 {"Randomization Interval", "wlan_mgt.measure.req.randint",
14963 FT_UINT16, BASE_HEX, NULL, 0, "in TU (1 TU = 1024 us)", HFILL }},
14965 {&hf_ieee80211_tag_measure_request_measurement_mode,
14966 {"Measurement Mode", "wlan_mgt.measure.req.measurementmode",
14967 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_measurement_mode_flags), 0, NULL, HFILL }},
14969 {&hf_ieee80211_tag_measure_request_bssid,
14970 {"BSSID", "wlan_mgt.measure.req.bssid",
14971 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
14973 {&hf_ieee80211_tag_measure_request_subelement_length,
14974 {"Length", "wlan_mgt.measure.req.sub.length",
14975 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
14977 {&hf_ieee80211_tag_measure_request_beacon_sub_id,
14978 {"SubElement ID", "wlan_mgt.measure.req.beacon.sub.id",
14979 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_beacon_sub_id_flags), 0, NULL, HFILL }},
14981 {&hf_ieee80211_tag_measure_request_beacon_sub_ssid,
14982 {"SSID", "wlan_mgt.measure.req.beacon.sub.ssid",
14983 FT_STRING, BASE_NONE, 0, 0, NULL, HFILL }},
14985 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition,
14986 {"Reporting Condition", "wlan_mgt.measure.req.beacon.sub.bri.repcond",
14987 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags), 0, NULL, HFILL }},
14989 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset,
14990 {"Threshold/Offset", "wlan_mgt.measure.req.beacon.sub.bri.threshold_offset",
14991 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
14993 {&hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail,
14994 {"Reporting Detail", "wlan_mgt.measure.req.beacon.sub.bri.reporting_detail",
14995 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags), 0, NULL, HFILL }},
14997 {&hf_ieee80211_tag_measure_request_beacon_sub_request,
14998 {"Request", "wlan_mgt.measure.req.beacon.sub.request",
14999 FT_UINT8, BASE_DEC, 0, 0, NULL, HFILL }},
15001 {&hf_ieee80211_tag_measure_request_beacon_unknown,
15002 {"Unknown Data", "wlan_mgt.measure.req.beacon.unknown",
15003 FT_BYTES, BASE_NONE, NULL, 0, "(not interpreted)", HFILL }},
15005 {&hf_ieee80211_tag_measure_request_frame_request_type,
15006 {"Frame Request Type", "wlan_mgt.measure.req.frame_request_type",
15007 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15009 {&hf_ieee80211_tag_measure_request_mac_address,
15010 {"MAC Address", "wlan_mgt.measure.req.mac_address",
15011 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
15013 {&hf_ieee80211_tag_measure_request_peer_mac_address,
15014 {"Peer MAC Address", "wlan_mgt.measure.req.peer_mac_address",
15015 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
15017 {&hf_ieee80211_tag_measure_request_group_id,
15018 {"Group ID", "wlan_mgt.measure.req.groupid",
15019 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_group_id_flags), 0, NULL, HFILL }},
15021 {&hf_ieee80211_tag_measure_report_measurement_token,
15022 {"Measurement Token", "wlan_mgt.measure.req.token",
15023 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15025 {&hf_ieee80211_tag_measure_report_mode,
15026 {"Measurement Report Mode", "wlan_mgt.measure.req.mode",
15027 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15029 {&hf_ieee80211_tag_measure_report_mode_late,
15030 {"Measurement Report Mode Field", "wlan_mgt.measure.rep.repmode.late",
15031 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01, NULL, HFILL }},
15033 {&hf_ieee80211_tag_measure_report_mode_incapable,
15034 {"Measurement Reports", "wlan_mgt.measure.rep.repmode.incapable",
15035 FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x02, NULL, HFILL }},
15037 {&hf_ieee80211_tag_measure_report_mode_refused,
15038 {"Autonomous Measurement Reports", "wlan_mgt.measure.rep.repmode.refused",
15039 FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x04, NULL, HFILL }},
15041 {&hf_ieee80211_tag_measure_report_mode_reserved,
15042 {"Reserved", "wlan_mgt.measure.rep.repmode.reserved",
15043 FT_UINT8, BASE_HEX, NULL, 0xf8, NULL, HFILL }},
15045 {&hf_ieee80211_tag_measure_report_type,
15046 {"Measurement Report Type", "wlan_mgt.measure.rep.reptype",
15047 FT_UINT8, BASE_HEX, VALS (&ieee80211_tag_measure_report_type_flags), 0x00, NULL, HFILL }},
15049 {&hf_ieee80211_tag_measure_report_channel_number,
15050 {"Measurement Channel Number", "wlan_mgt.measure.rep.channelnumber",
15051 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15053 {&hf_ieee80211_tag_measure_report_start_time,
15054 {"Measurement Start Time", "wlan_mgt.measure.rep.starttime",
15055 FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL }},
15057 {&hf_ieee80211_tag_measure_report_duration,
15058 {"Measurement Duration", "wlan_mgt.measure.rep.channelnumber",
15059 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
15061 {&hf_ieee80211_tag_measure_cca_busy_fraction,
15062 {"CCA Busy Fraction", "wlan_mgt.measure.rep.ccabusy",
15063 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15065 {&hf_ieee80211_tag_measure_basic_map_field,
15066 {"Map Field", "wlan_mgt.measure.rep.mapfield",
15067 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15069 {&hf_ieee80211_tag_measure_map_field_bss,
15070 {"BSS", "wlan_mgt.measure.rep.repmode.mapfield.bss",
15071 FT_BOOLEAN, 8, TFS (&ieee80211_tag_measure_map_field_bss_flag), 0x01, NULL, HFILL }},
15073 {&hf_ieee80211_tag_measure_map_field_odfm,
15074 {"Orthogonal Frequency Division Multiplexing (ODFM) Preamble", "wlan_mgt.measure.rep.repmode.mapfield.bss",
15075 FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x02, NULL, HFILL }},
15077 {&hf_ieee80211_tag_measure_map_field_unident_signal,
15078 {"Unidentified Signal", "wlan_mgt.measure.rep.repmode.mapfield.unidentsig",
15079 FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x04, NULL, HFILL }},
15081 {&hf_ieee80211_tag_measure_map_field_radar,
15082 {"Radar", "wlan_mgt.measure.rep.repmode.mapfield.radar",
15083 FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x08, NULL, HFILL }},
15085 {&hf_ieee80211_tag_measure_map_field_unmeasured,
15086 {"Unmeasured", "wlan_mgt.measure.rep.repmode.mapfield.unmeasured",
15087 FT_BOOLEAN, 8, TFS (&tfs_true_false), 0x10, NULL, HFILL }},
15089 {&hf_ieee80211_tag_measure_map_field_reserved,
15090 {"Reserved", "wlan_mgt.measure.rep.repmode.mapfield.reserved",
15091 FT_UINT8, BASE_HEX, NULL, 0xe0, NULL, HFILL }},
15093 {&hf_ieee80211_tag_measure_rpi_histogram_report,
15094 {"Receive Power Indicator (RPI) Histogram Report", "wlan_mgt.measure.rep.rpi.histogram_report",
15095 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
15097 {&hf_ieee80211_tag_measure_rpi_histogram_report_0,
15098 {"RPI 0 Density", "wlan_mgt.measure.rep.rpi.rpi0density",
15099 FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 0 Density", HFILL }},
15101 {&hf_ieee80211_tag_measure_rpi_histogram_report_1,
15102 {"RPI 1 Density", "wlan_mgt.measure.rep.rpi.rpi1density",
15103 FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 1 Density", HFILL }},
15105 {&hf_ieee80211_tag_measure_rpi_histogram_report_2,
15106 {"RPI 2 Density", "wlan_mgt.measure.rep.rpi.rpi2density",
15107 FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 2 Density", HFILL }},
15109 {&hf_ieee80211_tag_measure_rpi_histogram_report_3,
15110 {"RPI 3 Density", "wlan_mgt.measure.rep.rpi.rpi3density",
15111 FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 3 Density", HFILL }},
15113 {&hf_ieee80211_tag_measure_rpi_histogram_report_4,
15114 {"RPI 4 Density", "wlan_mgt.measure.rep.rpi.rpi4density",
15115 FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 4 Density", HFILL }},
15117 {&hf_ieee80211_tag_measure_rpi_histogram_report_5,
15118 {"RPI 5 Density", "wlan_mgt.measure.rep.rpi.rpi5density",
15119 FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 5 Density", HFILL }},
15121 {&hf_ieee80211_tag_measure_rpi_histogram_report_6,
15122 {"RPI 6 Density", "wlan_mgt.measure.rep.rpi.rpi6density",
15123 FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 6 Density", HFILL }},
15125 {&hf_ieee80211_tag_measure_rpi_histogram_report_7,
15126 {"RPI 7 Density", "wlan_mgt.measure.rep.rpi.rpi7density",
15127 FT_UINT8, BASE_HEX, NULL, 0, "Receive Power Indicator (RPI) 7 Density", HFILL }},
15129 {&hf_ieee80211_tag_measure_report_regulatory_class,
15130 {"Regulatory Class", "wlan_mgt.measure.rep.regclass",
15131 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15133 {&hf_ieee80211_tag_measure_report_channel_load,
15134 {"Channel Load", "wlan_mgt.measure.rep.chanload",
15135 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15137 {&hf_ieee80211_tag_measure_report_frame_info,
15138 {"Reported Frame Information", "wlan_mgt.measure.rep.frameinfo",
15139 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15141 {&hf_ieee80211_tag_measure_report_frame_info_phy_type,
15142 {"Condensed PHY", "wlan_mgt.measure.rep.frameinfo.phytype",
15143 FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
15145 {&hf_ieee80211_tag_measure_report_frame_info_frame_type,
15146 {"Reported Frame Type", "wlan_mgt.measure.rep.frameinfo.frametype",
15147 FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_report_frame_info_frame_type_flag), 0x80, NULL, HFILL }},
15149 {&hf_ieee80211_tag_measure_report_rcpi,
15150 {"Received Channel Power Indicator (RCPI)", "wlan_mgt.measure.rep.rcpi",
15151 FT_UINT8, BASE_HEX, NULL, 0, "in dBm", HFILL }},
15153 {&hf_ieee80211_tag_measure_report_rsni,
15154 {"Received Signal to Noise Indicator (RSNI)", "wlan_mgt.measure.rep.rsni",
15155 FT_UINT8, BASE_HEX, NULL, 0, "in dB", HFILL }},
15157 {&hf_ieee80211_tag_measure_report_bssid,
15158 {"BSSID Being Reported", "wlan_mgt.measure.rep.bssid",
15159 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
15161 {&hf_ieee80211_tag_measure_report_ant_id,
15162 {"Antenna ID", "wlan_mgt.measure.rep.antid",
15163 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15165 {&hf_ieee80211_tag_measure_report_anpi,
15166 {"ANPI", "wlan_mgt.measure.rep.anpi",
15167 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15169 {&hf_ieee80211_tag_measure_report_ipi_density_0,
15170 {"IPI Density 0", "wlan_mgt.measure.rep.ipi_density0",
15171 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15173 {&hf_ieee80211_tag_measure_report_ipi_density_1,
15174 {"IPI Density 1", "wlan_mgt.measure.rep.ipi_density1",
15175 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15177 {&hf_ieee80211_tag_measure_report_ipi_density_2,
15178 {"IPI Density 2", "wlan_mgt.measure.rep.ipi_density2",
15179 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15181 {&hf_ieee80211_tag_measure_report_ipi_density_3,
15182 {"IPI Density 3", "wlan_mgt.measure.rep.ipi_density3",
15183 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15185 {&hf_ieee80211_tag_measure_report_ipi_density_4,
15186 {"IPI Density 4", "wlan_mgt.measure.rep.ipi_density4",
15187 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15189 {&hf_ieee80211_tag_measure_report_ipi_density_5,
15190 {"IPI Density 5", "wlan_mgt.measure.rep.ipi_density5",
15191 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15193 {&hf_ieee80211_tag_measure_report_ipi_density_6,
15194 {"IPI Density 6", "wlan_mgt.measure.rep.ipi_density6",
15195 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15197 {&hf_ieee80211_tag_measure_report_ipi_density_7,
15198 {"IPI Density 7", "wlan_mgt.measure.rep.ipi_density7",
15199 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15201 {&hf_ieee80211_tag_measure_report_ipi_density_8,
15202 {"IPI Density 8", "wlan_mgt.measure.rep.ipi_density8",
15203 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15205 {&hf_ieee80211_tag_measure_report_ipi_density_9,
15206 {"IPI Density 9", "wlan_mgt.measure.rep.ipi_density9",
15207 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15209 {&hf_ieee80211_tag_measure_report_ipi_density_10,
15210 {"IPI Density 10", "wlan_mgt.measure.rep.ipi_density10",
15211 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15213 {&hf_ieee80211_tag_measure_report_parent_tsf,
15214 {"Parent Timing Synchronization Function (TSF)", "wlan_mgt.measure.rep.parenttsf",
15215 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
15217 {&hf_ieee80211_tag_quiet_count,
15218 {"Count", "wlan_mgt.quiet.count",
15219 FT_UINT8, BASE_DEC, NULL, 0, "Set to the number of TBTTs until the beacon interval during which the next quiet interval shall start", HFILL }},
15221 {&hf_ieee80211_tag_quiet_period,
15222 {"Period", "wlan_mgt.quiet.period",
15223 FT_UINT8, BASE_DEC, NULL, 0, "Set to the number of beacon intervals between the start of regularly scheduled quiet intervals", HFILL }},
15225 {&hf_ieee80211_tag_quiet_duration,
15226 {"Duration", "wlan_mgt.quiet.duration",
15227 FT_UINT16, BASE_DEC, NULL, 0, "Set to the duration of the quiet interval", HFILL }},
15229 {&hf_ieee80211_tag_quiet_offset,
15230 {"Offset", "wlan_mgt.quiet.offset",
15231 FT_UINT16, BASE_DEC, NULL, 0, "Set to the offset of the start of the quiet interval from the TBTT", HFILL }},
15233 {&hf_ieee80211_tag_dfs_owner,
15234 {"Owner", "wlan_mgt.dfs.owner",
15235 FT_ETHER, BASE_NONE, NULL, 0, "Set to the individual IEEE MAC address of the STA that is the currently known DFS Owner in the IBSS", HFILL }},
15237 {&hf_ieee80211_tag_dfs_recovery_interval,
15238 {"Recovery Interval", "wlan_mgt.dfs.recovery_interval",
15239 FT_UINT8, BASE_DEC, NULL, 0, "Indicates the time interval that shall be used for DFS owner recovery", HFILL }},
15241 {&hf_ieee80211_tag_dfs_channel_map,
15242 {"Channel Map", "wlan_mgt.dfs.channel_map",
15243 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
15245 {&hf_ieee80211_tag_dfs_channel_number,
15246 {"Channel Number", "wlan_mgt.dfs.channel_number",
15247 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15249 {&hf_ieee80211_tag_dfs_map,
15250 {"Map", "wlan_mgt.dfs.map",
15251 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15253 {&hf_ieee80211_tag_erp_info,
15254 {"ERP Information", "wlan_mgt.erp_info",
15255 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15257 {&hf_ieee80211_tag_erp_info_erp_present,
15258 {"Non ERP Present", "wlan_mgt.erp_info.erp_present",
15259 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x01, NULL, HFILL }},
15261 {&hf_ieee80211_tag_erp_info_use_protection,
15262 {"Use Protection", "wlan_mgt.erp_info.use_protection",
15263 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x02, NULL, HFILL }},
15265 {&hf_ieee80211_tag_erp_info_barker_preamble_mode,
15266 {"Barker Preamble Mode", "wlan_mgt.erp_info.barker_preamble_mode",
15267 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x04, NULL, HFILL }},
15269 {&hf_ieee80211_tag_erp_info_reserved,
15270 {"Reserved", "wlan_mgt.erp_info.reserved",
15271 FT_UINT8, BASE_HEX, NULL, 0xF8, NULL, HFILL }},
15273 /* Table 7-35a-Capabilities field */
15274 {&hf_ieee80211_tag_extended_capabilities,
15275 {"Extended Capabilities", "wlan_mgt.extcap",
15276 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15278 /* P802.11n/D6.0 */
15279 /* Extended Capability octet 0 */
15280 {&hf_ieee80211_tag_extended_capabilities_b0,
15281 {"20/40 BSS Coexistence Management Support", "wlan_mgt.extcap.infoexchange.b0",
15282 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0001, "HT Information Exchange Support", HFILL }},
15284 /* P802.11p/D4.0 */
15285 {&hf_ieee80211_tag_extended_capabilities_b1,
15286 {"On-demand beacon", "wlan_mgt.extcap.infoexchange.b1",
15287 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0002, NULL, HFILL }},
15289 {&hf_ieee80211_tag_extended_capabilities_b2,
15290 {"Extended Channel Switching", "wlan_mgt.extcap.infoexchange.b2",
15291 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0004, NULL, HFILL }},
15293 {&hf_ieee80211_tag_extended_capabilities_b3,
15294 {"WAVE indication", "wlan_mgt.extcap.infoexchange.b3",
15295 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0008, NULL, HFILL }},
15296 /*End: P802.11p/D4.0 */
15298 {&hf_ieee80211_tag_extended_capabilities_b4,
15299 {"PSMP Capability", "wlan_mgt.extcap.infoexchange.b4",
15300 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0010, NULL, HFILL }},
15302 {&hf_ieee80211_tag_extended_capabilities_b6,
15303 {"S-PSMP Support", "wlan_mgt.extcap.infoexchange.b6",
15304 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0040, NULL, HFILL }},
15306 /* Extended Capability octet 3 */
15307 {&hf_ieee80211_tag_extended_capabilities_b27,
15308 {"UTC TSF Offset", "wlan_mgt.extcap.infoexchange.b27",
15309 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0008, NULL, HFILL }},
15311 {&hf_ieee80211_tag_extended_capabilities_b28,
15312 {"Peer U-APSD Buffer STA Support", "wlan_mgt.extcap.infoexchange.b28",
15313 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0010, NULL, HFILL }},
15315 {&hf_ieee80211_tag_extended_capabilities_b29,
15316 {"TDLS Peer PSM Support", "wlan_mgt.extcap.infoexchange.b29",
15317 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0020, NULL, HFILL }},
15319 {&hf_ieee80211_tag_extended_capabilities_b30,
15320 {"TDLS channel switching", "wlan_mgt.extcap.infoexchange.b30",
15321 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0040, NULL, HFILL }},
15323 {&hf_ieee80211_tag_extended_capabilities_b31,
15324 {"Interworking", "wlan_mgt.extcap.infoexchange.b31",
15325 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0080, NULL, HFILL }},
15327 /* Extended Capability octet 4 */
15328 {&hf_ieee80211_tag_extended_capabilities_b32,
15329 {"QoS Map", "wlan_mgt.extcap.infoexchange.b32",
15330 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0001, NULL, HFILL }},
15332 {&hf_ieee80211_tag_extended_capabilities_b33,
15333 {"EBR", "wlan_mgt.extcap.infoexchange.b33",
15334 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0002, NULL, HFILL }},
15336 {&hf_ieee80211_tag_extended_capabilities_b34,
15337 {"SSPN Interface", "wlan_mgt.extcap.infoexchange.b34",
15338 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0004, NULL, HFILL }},
15340 {&hf_ieee80211_tag_extended_capabilities_b36,
15341 {"MSGCF Capability", "wlan_mgt.extcap.infoexchange.b36",
15342 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0010, NULL, HFILL }},
15344 {&hf_ieee80211_tag_extended_capabilities_b37,
15345 {"TDLS support", "wlan_mgt.extcap.infoexchange.b37",
15346 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0020, NULL, HFILL }},
15348 {&hf_ieee80211_tag_extended_capabilities_b38,
15349 {"TDLS Prohibited", "wlan_mgt.extcap.infoexchange.b38",
15350 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0040, NULL, HFILL }},
15352 {&hf_ieee80211_tag_extended_capabilities_b39,
15353 {"TDLS Channel Switching Prohibited", "wlan_mgt.extcap.infoexchange.b39",
15354 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0080, NULL, HFILL }},
15356 /* Extended Capability octet 5 */
15357 {&hf_ieee80211_tag_extended_capabilities_b40,
15358 {"Reject Unadmitted Frame", "wlan_mgt.extcap.infoexchange.b40",
15359 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0001, NULL, HFILL }},
15361 {&hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
15362 {"Service Interval Granularity",
15363 "wlan_mgt.extcap.infoexchange.serv_int_granularity",
15364 FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals), 0x000e,
15367 {&hf_ieee80211_tag_cisco_ccx1_unknown,
15368 {"Unknown", "wlan_mgt.cisco.ccx1.unknown",
15369 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
15371 {&hf_ieee80211_tag_cisco_ccx1_name,
15372 {"Name", "wlan_mgt.cisco.ccx1.name",
15373 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
15375 {&hf_ieee80211_tag_cisco_ccx1_clients,
15376 {"Clients", "wlan_mgt.cisco.ccx1.clients",
15377 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15379 {&hf_ieee80211_tag_neighbor_report_bssid,
15380 {"BSSID", "wlan_mgt.nreport.bssid",
15381 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
15383 {&hf_ieee80211_tag_neighbor_report_bssid_info,
15384 {"BSSID Information", "wlan_mgt.nreport.bssid.info",
15385 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
15387 {&hf_ieee80211_tag_neighbor_report_bssid_info_reachability,
15388 {"AP Reachability", "wlan_mgt.nreport.bssid.info.reachability",
15389 FT_UINT16, BASE_HEX, NULL, 0x0003, NULL, HFILL }},
15391 {&hf_ieee80211_tag_neighbor_report_bssid_info_security,
15392 {"Security", "wlan_mgt.nreport.bssid.info.security",
15393 FT_UINT16, BASE_HEX, NULL, 0x0004, NULL, HFILL }},
15395 {&hf_ieee80211_tag_neighbor_report_bssid_info_key_scope,
15396 {"Key Scope", "wlan_mgt.nreport.bssid.info.keyscope",
15397 FT_UINT16, BASE_HEX, NULL, 0x0008, NULL, HFILL }},
15399 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng,
15400 {"Capability: Spectrum Management", "wlan_mgt.nreport.bssid.info.capability.specmngt",
15401 FT_UINT16, BASE_HEX, NULL, 0x0010, NULL, HFILL }},
15403 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos,
15404 {"Capability: QoS", "wlan_mgt.nreport.bssid.info.capability.qos",
15405 FT_UINT16, BASE_HEX, NULL, 0x0020, NULL, HFILL }},
15407 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd,
15408 {"Capability: APSD", "wlan_mgt.nreport.bssid.info.capability.apsd",
15409 FT_UINT16, BASE_HEX, NULL, 0x0040, NULL, HFILL }},
15411 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt,
15412 {"Capability: Radio Measurement", "wlan_mgt.nreport.bssid.info.capability.radiomsnt",
15413 FT_UINT16, BASE_HEX, NULL, 0x0080, NULL, HFILL }},
15415 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback,
15416 {"Capability: Delayed Block Ack", "wlan_mgt.nreport.bssid.info.capability.dback",
15417 FT_UINT16, BASE_HEX, NULL, 0x0100, NULL, HFILL }},
15419 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback,
15420 {"Capability: Immediate Block Ack", "wlan_mgt.nreport.bssid.info.capability.iback",
15421 FT_UINT16, BASE_HEX, NULL, 0x0200, NULL, HFILL }},
15423 {&hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain,
15424 {"Mobility Domain", "wlan_mgt.nreport.bssid.info.mobilitydomain",
15425 FT_UINT16, BASE_HEX, NULL, 0x0400, NULL, HFILL }},
15427 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput,
15428 {"High Throughput", "wlan_mgt.nreport.bssid.info.hthoughput",
15429 FT_UINT16, BASE_HEX, NULL, 0x0800, NULL, HFILL }},
15431 {&hf_ieee80211_tag_neighbor_report_bssid_info_reserved,
15432 {"Reserved", "wlan_mgt.nreport.bssid.info.reserved",
15433 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
15435 {&hf_ieee80211_tag_neighbor_report_reg_class,
15436 {"Regulatory Class", "wlan_mgt.nreport.regclass",
15437 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15439 {&hf_ieee80211_tag_neighbor_report_channel_number,
15440 {"Channel Number", "wlan_mgt.nreport.channumber",
15441 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15443 {&hf_ieee80211_tag_neighbor_report_phy_type,
15444 {"PHY Type", "wlan_mgt.nreport.phytype",
15445 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15447 {&hf_ieee80211_tag_supported_reg_classes_current,
15448 {"Current Regulatory Class", "wlan_mgt.supregclass.current",
15449 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15451 {&hf_ieee80211_tag_supported_reg_classes_alternate,
15452 {"Alternate Regulatory Classes", "wlan_mgt.supregclass.alt",
15453 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
15455 {&hf_ieee80211_wfa_ie_type,
15456 {"Type", "wlan_mgt.wfa.ie.type",
15457 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals), 0, NULL, HFILL }},
15459 {&hf_ieee80211_wfa_ie_wpa_version,
15460 {"WPA Version", "wlan_mgt.wfa.ie.wpa.version",
15461 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15463 {&hf_ieee80211_wfa_ie_wpa_mcs,
15464 {"Multicast Cipher Suite", "wlan_mgt.wfa.ie.wpa.mcs", FT_UINT32, BASE_CUSTOM,
15465 wpa_mcs_base_custom, 0, "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
15467 {&hf_ieee80211_wfa_ie_wpa_mcs_oui,
15468 {"Multicast Cipher Suite OUI", "wlan_mgt.wfa.ie.wpa.mcs.oui", FT_UINT24, BASE_CUSTOM,
15469 oui_base_custom, 0, NULL, HFILL }},
15471 {&hf_ieee80211_wfa_ie_wpa_mcs_type,
15472 {"Multicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.mcs.type", FT_UINT8, BASE_DEC,
15473 NULL, 0, NULL, HFILL }},
15475 {&hf_ieee80211_wfa_ie_wpa_mcs_wfa_type,
15476 {"Multicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.mcs.type", FT_UINT8, BASE_DEC,
15477 VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0, NULL, HFILL }},
15479 {&hf_ieee80211_wfa_ie_wpa_ucs_count,
15480 {"Unicast Cipher Suite Count", "wlan_mgt.wfa.ie.wpa.ucs.count", FT_UINT16, BASE_DEC,
15481 NULL, 0, "Indicates the number of pairwise cipher suite selectors that are contained in the Unicast Cipher Suite List", HFILL }},
15483 {&hf_ieee80211_wfa_ie_wpa_ucs_list,
15484 {"Unicast Cipher Suite List", "wlan_mgt.wfa.ie.wpa.ucs.list", FT_NONE, BASE_NONE,
15485 NULL, 0, "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL }},
15487 {&hf_ieee80211_wfa_ie_wpa_ucs,
15488 {"Unicast Cipher Suite", "wlan_mgt.wfa.ie.wpa.ucs", FT_UINT32, BASE_CUSTOM,
15489 wpa_ucs_base_custom, 0, NULL, HFILL }},
15491 {&hf_ieee80211_wfa_ie_wpa_ucs_oui,
15492 {"Unicast Cipher Suite OUI", "wlan_mgt.wfa.ie.wpau.cs.oui", FT_UINT24, BASE_CUSTOM,
15493 oui_base_custom, 0, NULL, HFILL }},
15495 {&hf_ieee80211_wfa_ie_wpa_ucs_type,
15496 {"Unicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.ucs.type", FT_UINT8, BASE_DEC,
15497 NULL, 0, NULL, HFILL }},
15499 {&hf_ieee80211_wfa_ie_wpa_ucs_wfa_type,
15500 {"Unicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.ucs.type", FT_UINT8, BASE_DEC,
15501 VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0, NULL, HFILL }},
15503 {&hf_ieee80211_wfa_ie_wpa_akms_count,
15504 {"Auth Key Management (AKM) Suite Count", "wlan_mgt.wfa.ie.wpa.akms.count", FT_UINT16, BASE_DEC,
15505 NULL, 0, "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
15507 {&hf_ieee80211_wfa_ie_wpa_akms_list,
15508 {"Auth Key Management (AKM) List", "wlan_mgt.wfa.ie.wpa.akms.list", FT_NONE, BASE_NONE,
15509 NULL, 0, "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
15511 {&hf_ieee80211_wfa_ie_wpa_akms,
15512 {"Auth Key Management (AKM) Suite", "wlan_mgt.wfa.ie.wpa.akms", FT_UINT32, BASE_CUSTOM,
15513 wpa_akms_base_custom, 0, NULL, HFILL }},
15515 {&hf_ieee80211_wfa_ie_wpa_akms_oui,
15516 {"Auth Key Management (AKM) OUI", "wlan_mgt.wfa.ie.wpa.akms.oui", FT_UINT24, BASE_CUSTOM,
15517 oui_base_custom, 0, NULL, HFILL }},
15519 {&hf_ieee80211_wfa_ie_wpa_akms_type,
15520 {"Auth Key Management (AKM) type", "wlan_mgt.wfa.ie.wpa.akms.type", FT_UINT8, BASE_DEC,
15521 NULL, 0, NULL, HFILL }},
15523 {&hf_ieee80211_wfa_ie_wpa_akms_wfa_type,
15524 {"Auth Key Management (AKM) type", "wlan_mgt.wfa.ie.wpa.type", FT_UINT8, BASE_DEC,
15525 VALS(ieee80211_wfa_ie_wpa_keymgmt_vals), 0, NULL, HFILL }},
15527 {&hf_ieee80211_wfa_ie_wme_subtype,
15528 {"WME Subtype", "wlan_mgt.wfa.ie.wme.subtype",
15529 FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type), 0, NULL, HFILL }},
15531 {&hf_ieee80211_wfa_ie_wme_version,
15532 {"WME Version", "wlan_mgt.wfa.ie.wme.version",
15533 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15535 {&hf_ieee80211_wfa_ie_wme_qos_info,
15536 {"WME QoS Info", "wlan_mgt.wfa.ie.wme.qos_info",
15537 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15539 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
15540 {"Max SP Length", "wlan_mgt.wfa.ie.wme.qos_info.sta.max_sp_length",
15541 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals), 0x60, NULL, HFILL }},
15543 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
15544 {"AC_BE", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_be",
15545 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x08, NULL, HFILL }},
15547 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
15548 {"AC_BK", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_bk",
15549 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x04, NULL, HFILL }},
15551 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
15552 {"AC_VI", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_vi",
15553 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x02, NULL, HFILL }},
15555 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
15556 {"AC_VO", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_vo",
15557 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x01, NULL, HFILL }},
15559 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
15560 {"Reserved", "wlan_mgt.wfa.ie.wme.qos_info.sta.reserved",
15561 FT_UINT8, BASE_HEX, NULL, 0x90, "Must Be Zero", HFILL }},
15563 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
15564 {"U-APSD", "wlan_mgt.wfa.ie.wme.qos_info.ap.u_apsd",
15565 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80, "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL }},
15567 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
15568 {"Parameter Set Count", "wlan_mgt.wfa.ie.wme.qos_info.ap.parameter_set_count",
15569 FT_UINT8, BASE_HEX, NULL, 0x0F, NULL, HFILL }},
15571 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
15572 {"Reserved", "wlan_mgt.wfa.ie.wme.qos_info.ap.reserved",
15573 FT_UINT8, BASE_HEX, NULL, 0x70, "Must Be Zero", HFILL }},
15575 {&hf_ieee80211_wfa_ie_wme_reserved,
15576 {"Reserved", "wlan_mgt.wfa.ie.wme.reserved",
15577 FT_BYTES, BASE_NONE, NULL, 0, "Must Be Zero", HFILL }},
15579 {&hf_ieee80211_wfa_ie_wme_ac_parameters,
15580 {"Ac Parameters", "wlan_mgt.wfa.ie.wme.acp",
15581 FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
15583 {&hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
15584 {"ACI / AIFSN Field", "wlan_mgt.wfa.ie.wme.acp.aci_aifsn",
15585 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15587 {&hf_ieee80211_wfa_ie_wme_acp_aci,
15588 {"ACI", "wlan_mgt.wfa.ie.wme.acp.aci",
15589 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals), 0x60, NULL, HFILL }},
15591 {&hf_ieee80211_wfa_ie_wme_acp_acm,
15592 {"Admission Control Mandatory", "wlan_mgt.wfa.ie.wme.acp.aci",
15593 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10, NULL, HFILL }},
15595 {&hf_ieee80211_wfa_ie_wme_acp_aifsn,
15596 {"AIFSN", "wlan_mgt.wfa.ie.wme.acp.aifsn",
15597 FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL }},
15599 {&hf_ieee80211_wfa_ie_wme_acp_reserved,
15600 {"Reserved", "wlan_mgt.wfa.ie.wme.acp.reserved",
15601 FT_UINT8, BASE_DEC, NULL, 0x80, "Must be Zero", HFILL }},
15603 {&hf_ieee80211_wfa_ie_wme_acp_ecw,
15604 {"ECW", "wlan_mgt.wfa.ie.wme.acp.ecw",
15605 FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }},
15607 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max,
15608 {"ECW Max", "wlan_mgt.wfa.ie.wme.acp.ecw.max",
15609 FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL }},
15611 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min,
15612 {"ECW Min", "wlan_mgt.wfa.ie.wme.acp.ecw.min",
15613 FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL }},
15615 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit,
15616 {"TXOP Limit", "wlan_mgt.wfa.ie.wme.acp.txop_limit",
15617 FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL }},
15619 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
15620 {"TS Info", "wlan_mgt.wfa.ie.wme.tspec.ts_info",
15621 FT_UINT24, BASE_HEX, NULL, 0, "Traffic Stream (TS) Info", HFILL }},
15623 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
15624 {"TID", "wlan_mgt.wfa.ie.wme.tspec.ts_info.tid",
15625 FT_UINT24, BASE_DEC, NULL, 0x00001E, "Traffic Stream Info ID (TID)", HFILL }},
15627 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
15628 {"Direction", "wlan_mgt.wfa.ie.wme.tspec.ts_info.dir", FT_UINT24, BASE_DEC,
15629 VALS (&ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals), 0x000060, "Traffic Stream (TS) Info Direction", HFILL }},
15631 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
15632 {"PSB", "wlan_mgt.wfa.ie.wme.tspec.ts_info.psb", FT_UINT24, BASE_DEC,
15633 VALS (&ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals), 0x000400, "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL }},
15635 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
15636 {"UP", "wlan_mgt.wfa.ie.wme.tspec.ts_info.up", FT_UINT24, BASE_DEC,
15637 VALS (&ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals), 0x003800, "Traffic Stream (TS) Info User Priority (UP)", HFILL }},
15639 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
15640 {"Reserved", "wlan_mgt.wfa.ie.wme.tspec.ts_info.reserved", FT_UINT24, BASE_HEX,
15641 NULL, 0xFFC381, "Must be Zero", HFILL }},
15643 {&hf_ieee80211_wfa_ie_wme_tspec_nor_msdu,
15644 {"Normal MSDU Size", "wlan_mgt.wfa.ie.wme.tspec.nor_msdu",
15645 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15647 {&hf_ieee80211_wfa_ie_wme_tspec_max_msdu,
15648 {"Maximum MSDU Size", "wlan_mgt.wfa.ie.wme.tspec.max_msdu",
15649 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15651 {&hf_ieee80211_wfa_ie_wme_tspec_min_srv,
15652 {"Minimum Service Interval", "wlan_mgt.wfa.ie.wme.tspec.min_srv",
15653 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15655 {&hf_ieee80211_wfa_ie_wme_tspec_max_srv,
15656 {"Maximum Service Interval", "wlan_mgt.wfa.ie.wme.tspec.max_srv",
15657 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15659 {&hf_ieee80211_wfa_ie_wme_tspec_inact_int,
15660 {"Inactivity Interval", "wlan_mgt.wfa.ie.wme.tspec.inact_int",
15661 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15663 {&hf_ieee80211_wfa_ie_wme_tspec_susp_int,
15664 {"Suspension Interval", "wlan_mgt.wfa.ie.wme.tspec.susp_int",
15665 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15667 {&hf_ieee80211_wfa_ie_wme_tspec_srv_start,
15668 {"Service Start Time", "wlan_mgt.wfa.ie.wme.tspec.srv_start",
15669 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15671 {&hf_ieee80211_wfa_ie_wme_tspec_min_data,
15672 {"Minimum Data Rate", "wlan_mgt.wfa.ie.wme.tspec.min_data",
15673 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15675 {&hf_ieee80211_wfa_ie_wme_tspec_mean_data,
15676 {"Mean Data Rate", "wlan_mgt.wfa.ie.wme.tspec.mean_data",
15677 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15679 {&hf_ieee80211_wfa_ie_wme_tspec_peak_data,
15680 {"Peak Data Rate", "wlan_mgt.wfa.ie.wme.tspec.peak_data",
15681 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15683 {&hf_ieee80211_wfa_ie_wme_tspec_burst_size,
15684 {"Burst Size", "wlan_mgt.wfa.ie.wme.tspec.burst_size",
15685 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15687 {&hf_ieee80211_wfa_ie_wme_tspec_delay_bound,
15688 {"Delay Bound", "wlan_mgt.wfa.ie.wme.tspec.delay_bound",
15689 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15691 {&hf_ieee80211_wfa_ie_wme_tspec_min_phy,
15692 {"Minimum PHY Rate", "wlan_mgt.wfa.ie.wme.tspec.min_phy",
15693 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15695 {&hf_ieee80211_wfa_ie_wme_tspec_surplus,
15696 {"Surplus Bandwidth Allowance", "wlan_mgt.wfa.ie.wme.tspec.surplus",
15697 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15699 {&hf_ieee80211_wfa_ie_wme_tspec_medium,
15700 {"Medium Time", "wlan_mgt.wfa.ie.wme.tspec.medium",
15701 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15703 {&hf_ieee80211_marvell_ie_type,
15704 {"Type", "wlan_mgt.marvell.ie.type",
15705 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15707 {&hf_ieee80211_marvell_ie_mesh_subtype,
15708 {"Subtype", "wlan_mgt.marvell.ie.subtype",
15709 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15711 {&hf_ieee80211_marvell_ie_mesh_version,
15712 {"Version", "wlan_mgt.marvell.ie.version",
15713 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15715 {&hf_ieee80211_marvell_ie_mesh_active_proto_id,
15716 {"Path Selection Protocol", "wlan_mgt.marvell.ie.proto_id",
15717 FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes), 0, NULL, HFILL }},
15719 {&hf_ieee80211_marvell_ie_mesh_active_metric_id,
15720 {"Path Selection Metric", "wlan_mgt.marvell.ie.metric_id",
15721 FT_UINT8, BASE_HEX, VALS(mesh_metric_codes), 0, NULL, HFILL }},
15723 {&hf_ieee80211_marvell_ie_mesh_cap,
15724 {"Mesh Capabilities", "wlan_mgt.marvell.ie.cap",
15725 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15727 {&hf_ieee80211_marvell_ie_data,
15728 { "Marvell IE data", "wlan_mgt.marvell.data",
15729 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
15731 {&hf_ieee80211_atheros_ie_type,
15732 {"Type", "wlan_mgt.atheros.ie.type",
15733 FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals), 0, NULL, HFILL }},
15735 {&hf_ieee80211_atheros_ie_subtype,
15736 {"Subtype", "wlan_mgt.atheros.ie.subtype",
15737 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15739 {&hf_ieee80211_atheros_ie_version,
15740 {"Version", "wlan_mgt.atheros.ie.version",
15741 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15743 {&hf_ieee80211_atheros_ie_cap_f_turbop,
15744 {"Turbo Prime", "wlan_mgt.ie.atheros.capabilities.turbop",
15745 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_TURBOP, NULL, HFILL }},
15747 {&hf_ieee80211_atheros_ie_cap_f_comp,
15748 {"Compression", "wlan_mgt.ie.atheros.capabilities.comp",
15749 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_COMP, NULL, HFILL }},
15751 {&hf_ieee80211_atheros_ie_cap_f_ff,
15752 {"Fast Frames", "wlan_mgt.ie.atheros.capabilities.ff",
15753 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_FF, NULL, HFILL }},
15755 {&hf_ieee80211_atheros_ie_cap_f_xr,
15756 {"eXtended Range", "wlan_mgt.ie.atheros.capabilities.xr",
15757 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_XR, NULL, HFILL }},
15759 {&hf_ieee80211_atheros_ie_cap_f_ar,
15760 {"Advanced Radar", "wlan_mgt.ie.atheros.capabilities.ar",
15761 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_AR, NULL, HFILL }},
15763 {&hf_ieee80211_atheros_ie_cap_f_burst,
15764 {"Burst", "wlan_mgt.ie.atheros.capabilities.burst",
15765 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BURST, NULL, HFILL }},
15767 {&hf_ieee80211_atheros_ie_cap_f_wme,
15768 {"CWMin tuning", "wlan_mgt.ie.atheros.capabilities.wme",
15769 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_WME, NULL, HFILL }},
15771 {&hf_ieee80211_atheros_ie_cap_f_boost,
15772 {"Boost", "wlan_mgt.ie.atheros.capabilities.boost",
15773 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BOOST, NULL, HFILL }},
15775 {&hf_ieee80211_atheros_ie_advcap_cap,
15776 {"Capabilities", "wlan_mgt.atheros.ie.advcap.cap",
15777 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15779 {&hf_ieee80211_atheros_ie_advcap_defkey,
15780 {"Default key index", "wlan_mgt.atheros.ie.advcap.defkey",
15781 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
15783 {&hf_ieee80211_atheros_ie_xr_info,
15784 {"Info", "wlan_mgt.atheros.ie.xr.info",
15785 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15787 {&hf_ieee80211_atheros_ie_xr_base_bssid,
15788 {"Base BSS Id", "wlan_mgt.atheros.ie.xr.base_bssid",
15789 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
15791 {&hf_ieee80211_atheros_ie_xr_xr_bssid,
15792 {"XR BSS Id", "wlan_mgt.atheros.ie.xr.xr_bssid",
15793 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
15795 {&hf_ieee80211_atheros_ie_xr_xr_beacon,
15796 {"XR Beacon Interval", "wlan_mgt.atheros.ie.xr.xr_beacon",
15797 FT_UINT32, BASE_CUSTOM, beacon_interval_base_custom, 0, NULL, HFILL }},
15799 {&hf_ieee80211_atheros_ie_xr_base_cap,
15800 {"Base capabilities", "wlan_mgt.atheros.ie.xr.base_cap",
15801 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15803 {&hf_ieee80211_atheros_ie_xr_xr_cap,
15804 {"XR capabilities", "wlan_mgt.atheros.ie.xr.xr_cap",
15805 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15807 {&hf_ieee80211_atheros_ie_data,
15808 {"Atheros IE data", "wlan_mgt.atheros.data",
15809 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
15811 {&hf_ieee80211_aironet_ie_type,
15812 {"Aironet IE type", "wlan_mgt.aironet.type",
15813 FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals), 0, NULL, HFILL }},
15815 {&hf_ieee80211_aironet_ie_version,
15816 {"Aironet IE CCX version?", "wlan_mgt.aironet.version",
15817 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15819 {&hf_ieee80211_aironet_ie_data,
15820 { "Aironet IE data", "wlan_mgt.aironet.data",
15821 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
15823 {&hf_ieee80211_qbss_version,
15824 {"QBSS Version", "wlan_mgt.qbss.version",
15825 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15827 {&hf_ieee80211_qbss_scount,
15828 {"Station Count", "wlan_mgt.qbss.scount",
15829 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15831 {&hf_ieee80211_qbss_cu,
15832 {"Channel Utilization", "wlan_mgt.qbss.cu",
15833 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15835 {&hf_ieee80211_qbss_adc,
15836 {"Available Admission Capabilities", "wlan_mgt.qbss.adc",
15837 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15839 {&hf_ieee80211_qbss2_cu,
15840 {"Channel Utilization", "wlan_mgt.qbss2.cu",
15841 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15843 {&hf_ieee80211_qbss2_gl,
15844 {"G.711 CU Quantum", "wlan_mgt.qbss2.glimit",
15845 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15847 {&hf_ieee80211_qbss2_cal,
15848 {"Call Admission Limit", "wlan_mgt.qbss2.cal",
15849 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15851 {&hf_ieee80211_qbss2_scount,
15852 {"Station Count", "wlan_mgt.qbss2.scount",
15853 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15855 {&hf_ieee80211_aironet_ie_qos_unk1,
15856 {"Aironet IE QoS unknown 1", "wlan_mgt.aironet.qos.unk1",
15857 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
15859 {&hf_ieee80211_aironet_ie_qos_paramset,
15860 {"Aironet IE QoS paramset", "wlan_mgt.aironet.qos.paramset",
15861 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
15863 {&hf_ieee80211_aironet_ie_qos_val,
15864 {"Aironet IE QoS valueset", "wlan_mgt.aironet.qos.val",
15865 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
15867 {&hf_ieee80211_tsinfo,
15868 {"Traffic Stream (TS) Info", "wlan_mgt.ts_info",
15869 FT_UINT24, BASE_HEX, NULL, 0, "Traffic Stream (TS) Info field", HFILL }},
15871 {&hf_ieee80211_tsinfo_type,
15872 {"Traffic Type", "wlan_mgt.ts_info.type", FT_UINT24, BASE_DEC,
15873 VALS (&tsinfo_type), 0x000001, "Traffic Stream (TS) Info Traffic Type", HFILL }},
15875 {&hf_ieee80211_tsinfo_tsid,
15876 {"Traffic Stream ID (TSID)", "wlan_mgt.ts_info.tsid",
15877 FT_UINT24, BASE_DEC, NULL, 0x00001E, "Traffic Stream ID (TSID) Info TSID", HFILL }},
15879 {&hf_ieee80211_tsinfo_dir,
15880 {"Direction", "wlan_mgt.ts_info.dir", FT_UINT24, BASE_DEC,
15881 VALS (&tsinfo_direction), 0x000060, "Traffic Stream (TS) Info Direction", HFILL }},
15883 {&hf_ieee80211_tsinfo_access,
15884 {"Access Policy", "wlan_mgt.ts_info.dir", FT_UINT24, BASE_DEC,
15885 VALS (&tsinfo_access), 0x000180, "Traffic Stream (TS) Info Access Policy", HFILL }},
15887 {&hf_ieee80211_tsinfo_agg,
15888 {"Aggregation", "wlan_mgt.ts_info.agg", FT_UINT24, BASE_DEC,
15889 NULL, 0x000200, "Traffic Stream (TS) Info Access Policy", HFILL }},
15891 {&hf_ieee80211_tsinfo_apsd,
15892 {"Automatic Power-Save Delivery (APSD)", "wlan_mgt.ts_info.apsd", FT_UINT24, BASE_DEC,
15893 NULL, 0x000400, "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL }},
15895 {&hf_ieee80211_tsinfo_up,
15896 {"User Priority", "wlan_mgt.ts_info.up", FT_UINT24, BASE_DEC,
15897 VALS (&qos_up), 0x003800, "Traffic Stream (TS) Info User Priority", HFILL }},
15899 {&hf_ieee80211_tsinfo_ack,
15900 {"Ack Policy", "wlan_mgt.ts_info.ack", FT_UINT24, BASE_DEC,
15901 VALS (&ack_policy), 0x00C000, "Traffic Stream (TS) Info Ack Policy", HFILL }},
15903 {&hf_ieee80211_tsinfo_sched,
15904 {"Schedule", "wlan_mgt.ts_info.sched", FT_UINT24, BASE_DEC,
15905 NULL, 0x010000, "Traffic Stream (TS) Info Schedule", HFILL }},
15907 {&hf_ieee80211_tsinfo_rsv,
15908 {"Reserved", "wlan_mgt.ts_info.rsv", FT_UINT24, BASE_HEX,
15909 NULL, 0xFE0000, "Must be Zero", HFILL }},
15911 {&hf_ieee80211_tspec_nor_msdu,
15912 {"Normal MSDU Size", "wlan_mgt.tspec.nor_msdu",
15913 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15915 {&hf_ieee80211_tspec_max_msdu,
15916 {"Maximum MSDU Size", "wlan_mgt.tspec.max_msdu",
15917 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15919 {&hf_ieee80211_tspec_min_srv,
15920 {"Minimum Service Interval", "wlan_mgt.tspec.min_srv",
15921 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15923 {&hf_ieee80211_tspec_max_srv,
15924 {"Maximum Service Interval", "wlan_mgt.tspec.max_srv",
15925 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15927 {&hf_ieee80211_tspec_inact_int,
15928 {"Inactivity Interval", "wlan_mgt.tspec.inact_int",
15929 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15931 {&hf_ieee80211_tspec_susp_int,
15932 {"Suspension Interval", "wlan_mgt.tspec.susp_int",
15933 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15935 {&hf_ieee80211_tspec_srv_start,
15936 {"Service Start Time", "wlan_mgt.tspec.srv_start",
15937 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15939 {&hf_ieee80211_tspec_min_data,
15940 {"Minimum Data Rate", "wlan_mgt.tspec.min_data",
15941 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15943 {&hf_ieee80211_tspec_mean_data,
15944 {"Mean Data Rate", "wlan_mgt.tspec.mean_data",
15945 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15947 {&hf_ieee80211_tspec_peak_data,
15948 {"Peak Data Rate", "wlan_mgt.tspec.peak_data",
15949 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15951 {&hf_ieee80211_tspec_burst_size,
15952 {"Burst Size", "wlan_mgt.tspec.burst_size",
15953 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15955 {&hf_ieee80211_tspec_delay_bound,
15956 {"Delay Bound", "wlan_mgt.tspec.delay_bound",
15957 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15959 {&hf_ieee80211_tspec_min_phy,
15960 {"Minimum PHY Rate", "wlan_mgt.tspec.min_phy",
15961 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15963 {&hf_ieee80211_tspec_surplus,
15964 {"Surplus Bandwidth Allowance", "wlan_mgt.tspec.surplus",
15965 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15967 {&hf_ieee80211_tspec_medium,
15968 {"Medium Time", "wlan_mgt.tspec.medium",
15969 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
15971 {&hf_ieee80211_ts_delay,
15972 {"Traffic Stream (TS) Delay", "wlan_mgt.ts_delay",
15973 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
15975 {&hf_ieee80211_tclas_process,
15976 {"Processing", "wlan_mgt.tclas_proc.processing", FT_UINT8, BASE_DEC,
15977 VALS(ieee80211_tclas_process_flag), 0, "TCLAS Processing", HFILL }},
15979 {&hf_ieee80211_tag_qos_cap_qos_info,
15980 {"QoS Info", "wlan_mgt.tag.qos_cap.qos_info", FT_UINT8, BASE_HEX,
15981 NULL, 0, "TCLAS Processing", HFILL }},
15983 {&hf_ieee80211_qos_info_field_vo_uapsd,
15984 {"AC_VO U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.vo_uapsd",
15985 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
15987 {&hf_ieee80211_qos_info_field_vi_uapsd,
15988 {"AC_VI U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.vi_uapsd",
15989 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
15991 {&hf_ieee80211_qos_info_field_bk_uapsd,
15992 {"AC_BK U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.bk_uapsd",
15993 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
15995 {&hf_ieee80211_qos_info_field_be_uapsd,
15996 {"AC_BE U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.be_uapsd",
15997 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL }},
15999 {&hf_ieee80211_qos_info_field_qack,
16000 {"Q-ACK", "wlan_mgt.tag.qos_cap.qos_info.qack",
16001 FT_BOOLEAN, 8, TFS(&qos_info_field_qack_flags), 0x10, NULL, HFILL }},
16003 {&hf_ieee80211_qos_info_field_max_sp_length,
16004 {"Max SP-Length", "wlan_mgt.tag.qos_cap.qos_info.max_sp_length",
16005 FT_UINT8, BASE_HEX, VALS(qos_info_field_max_sp_length_flags),
16006 0x60, NULL , HFILL }},
16008 {&hf_ieee80211_qos_info_field_more_data_ack,
16009 {"More Data Ack", "wlan_mgt.tag.qos_cap.qos_info.more_data_ack",
16010 FT_BOOLEAN, 8, TFS(&qos_info_field_more_data_ack_flags) , 0x80, NULL, HFILL }},
16012 {&hf_ieee80211_qos_info_field_edca_upd_cnt,
16013 {"EDCA Parameter Set Update Count", "wlan_mgt.tag.qos_cap.qos_info.edca_upd_cnt",
16014 FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL}},
16016 {&hf_ieee80211_qos_info_field_queue_req,
16017 {"Queue Request", "wlan_mgt.tag.qos_cap.qos_info.queue_req",
16018 FT_BOOLEAN, 8, TFS(&qos_info_field_queue_req_flags), 0x07, NULL, HFILL}},
16020 {&hf_ieee80211_qos_info_field_txop_req,
16021 {"TXOP Request", "wlan_mgt.tag.qos_cap.qos_info.txop_req",
16022 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x40, NULL, HFILL}},
16024 {&hf_ieee80211_qos_info_field_reserved,
16025 {"Reserved", "wlan_mgt.tag.qos_cap.qos_info.reserved",
16026 FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL}},
16028 {&hf_ieee80211_tag_ext_supp_rates,
16029 {"Extended Supported Rates", "wlan_mgt.extended_supported_rates",
16030 FT_UINT8, BASE_HEX, VALS(ieee80211_supported_rates_vals), 0x0,
16031 "In Mbit/sec, (B) for Basic Rates", HFILL }},
16033 {&hf_ieee80211_sched_info,
16034 {"Schedule Info", "wlan_mgt.sched.sched_info",
16035 FT_UINT16, BASE_HEX, NULL, 0, "Schedule Info field", HFILL }},
16037 {&hf_ieee80211_sched_info_agg,
16038 {"Schedule Aggregation", "wlan_mgt.sched_info.agg", FT_UINT16, BASE_DEC,
16039 NULL, 0x0001, "Traffic Stream (TS) Info Access Policy", HFILL }},
16041 {&hf_ieee80211_sched_info_tsid,
16042 {"Schedule Traffic Stream ID (TSID)", "wlan_mgt.sched_info.tsid",
16043 FT_UINT16, BASE_DEC, NULL, 0x001E, "Traffic Stream ID (TSID) Info TSID", HFILL }},
16045 {&hf_ieee80211_sched_info_dir,
16046 {"Schedule Direction", "wlan_mgt.sched_info.dir", FT_UINT16, BASE_DEC,
16047 VALS (&tsinfo_direction), 0x0060, "Traffic Stream (TS) Info Direction", HFILL }},
16049 {&hf_ieee80211_sched_srv_start,
16050 {"Service Start Time", "wlan_mgt.sched.srv_start",
16051 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
16053 {&hf_ieee80211_sched_srv_int,
16054 {"Service Interval", "wlan_mgt.sched.srv_int",
16055 FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
16057 {&hf_ieee80211_sched_spec_int,
16058 {"Specification Interval", "wlan_mgt.sched.spec_int",
16059 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
16061 {&hf_ieee80211_aruba,
16062 {"Aruba Type", "wlan_mgt.aruba.type",
16063 FT_UINT16, BASE_DEC, VALS(aruba_mgt_typevals), 0, "Aruba Management", HFILL }},
16065 {&hf_ieee80211_aruba_hb_seq,
16066 {"Aruba Heartbeat Sequence", "wlan_mgt.aruba.heartbeat_sequence",
16067 FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL }},
16069 {&hf_ieee80211_aruba_mtu,
16070 {"Aruba MTU Size", "wlan_mgt.aruba.mtu_size",
16071 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
16073 /* Start: HT Control (+HTC) */
16074 {&hf_ieee80211_htc,
16075 {"HT Control (+HTC)", "wlan_mgt.htc",
16076 FT_UINT32, BASE_HEX, NULL, 0, "High Throughput Control (+HTC)", HFILL }},
16077 {&hf_ieee80211_htc_lac,
16078 {"Link Adaptation Control (LAC)", "wlan_mgt.htc.lac",
16079 FT_UINT16, BASE_HEX, NULL, 0, "High Throughput Control Link Adaptation Control (LAC)", HFILL }},
16080 {&hf_ieee80211_htc_lac_reserved,
16081 {"Reserved", "wlan_mgt.htc.lac.reserved",
16082 FT_BOOLEAN, 16, NULL, 0x0001, "High Throughput Control Link Adaptation Control Reserved", HFILL }},
16083 {&hf_ieee80211_htc_lac_trq,
16084 {"Training Request (TRQ)", "wlan_mgt.htc.lac.trq",
16085 FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag), 0x0002, "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL }},
16086 {&hf_ieee80211_htc_lac_mai_aseli,
16087 {"Antenna Selection Indication (ASELI)", "wlan_mgt.htc.lac.mai.aseli",
16088 FT_UINT16, BASE_HEX, NULL, 0x003C, "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL }},
16089 {&hf_ieee80211_htc_lac_mai_mrq,
16090 {"MCS Request (MRQ)", "wlan_mgt.htc.lac.mai.mrq",
16091 FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag), 0x0004, "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL }},
16092 {&hf_ieee80211_htc_lac_mai_msi,
16093 {"MCS Request Sequence Identifier (MSI)", "wlan_mgt.htc.lac.mai.msi",
16094 FT_UINT16, BASE_HEX, NULL, 0x0038, "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL }},
16095 {&hf_ieee80211_htc_lac_mai_reserved,
16096 {"Reserved", "wlan_mgt.htc.lac.mai.reserved",
16097 FT_UINT16, BASE_HEX, NULL, 0x0038, "High Throughput Control Link Adaptation Control MAI Reserved", HFILL }},
16098 {&hf_ieee80211_htc_lac_mfsi,
16099 {"MCS Feedback Sequence Identifier (MFSI)", "wlan_mgt.htc.lac.mfsi",
16100 FT_UINT16, BASE_DEC, NULL, 0x01C0, "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL }},
16101 {&hf_ieee80211_htc_lac_asel_command,
16102 {"Antenna Selection (ASEL) Command", "wlan_mgt.htc.lac.asel.command",
16103 FT_UINT16, BASE_HEX, VALS (&ieee80211_htc_lac_asel_command_flags), 0x0E00, "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL }},
16104 {&hf_ieee80211_htc_lac_asel_data,
16105 {"Antenna Selection (ASEL) Data", "wlan_mgt.htc.lac.asel.data",
16106 FT_UINT16, BASE_HEX, NULL, 0xF000, "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL }},
16107 {&hf_ieee80211_htc_lac_mfb,
16108 {"MCS Feedback (MFB)", "wlan_mgt.htc.lac.mfb",
16109 FT_UINT16, BASE_HEX, NULL, 0xFE00, "High Throughput Control Link Adaptation Control MCS Feedback", HFILL }},
16110 {&hf_ieee80211_htc_cal_pos,
16111 {"Calibration Position", "wlan_mgt.htc.cal.pos",
16112 FT_UINT16, BASE_DEC, VALS (&ieee80211_htc_cal_pos_flags), 0x0003, "High Throughput Control Calibration Position", HFILL }},
16113 {&hf_ieee80211_htc_cal_seq,
16114 {"Calibration Sequence Identifier", "wlan_mgt.htc.cal.seq",
16115 FT_UINT16, BASE_DEC, NULL, 0x000C, "High Throughput Control Calibration Sequence Identifier", HFILL }},
16116 {&hf_ieee80211_htc_reserved1,
16117 {"Reserved", "wlan_mgt.htc.reserved1",
16118 FT_UINT16, BASE_DEC, NULL, 0x0030, "High Throughput Control Reserved", HFILL }},
16119 {&hf_ieee80211_htc_csi_steering,
16120 {"CSI/Steering", "wlan_mgt.htc.csi_steering",
16121 FT_UINT16, BASE_DEC, VALS (&ieee80211_htc_csi_steering_flags), 0x00C0, "High Throughput Control CSI/Steering", HFILL }},
16122 {&hf_ieee80211_htc_ndp_announcement,
16123 {"NDP Announcement", "wlan_mgt.htc.ndp_announcement",
16124 FT_BOOLEAN, 16, TFS(&ieee80211_htc_ndp_announcement_flag), 0x0100, "High Throughput Control NDP Announcement", HFILL }},
16125 {&hf_ieee80211_htc_reserved2,
16126 {"Reserved", "wlan_mgt.htc.reserved2",
16127 FT_UINT16, BASE_HEX, NULL, 0x3E00, "High Throughput Control Reserved", HFILL }},
16128 {&hf_ieee80211_htc_ac_constraint,
16129 {"AC Constraint", "wlan_mgt.htc.ac_constraint",
16130 FT_BOOLEAN, 16, NULL, 0x4000, "High Throughput Control AC Constraint", HFILL }},
16131 {&hf_ieee80211_htc_rdg_more_ppdu,
16132 {"RDG/More PPDU", "wlan_mgt.htc.rdg_more_ppdu",
16133 FT_BOOLEAN, 16, NULL, 0x8000, "High Throughput Control RDG/More PPDU", HFILL }},
16134 /* End: HT Control (+HTC) */
16137 {&hf_ieee80211_tag_mobility_domain_mdid,
16138 {"Mobility Domain Identifier", "wlan_mgt.mobility_domain.mdid",
16139 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
16140 {&hf_ieee80211_tag_mobility_domain_ft_capab,
16141 {"FT Capability and Policy", "wlan_mgt.mobility_domain.ft_capab",
16142 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
16143 {&hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
16144 {"Fast BSS Transition over DS",
16145 "wlan_mgt.mobility_domain.ft_capab.ft_over_ds",
16146 FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
16147 {&hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
16148 {"Resource Request Protocol Capability",
16149 "wlan_mgt.mobility_domain.ft_capab.resource_req",
16150 FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
16153 {&hf_ieee80211_tag_ft_mic_control,
16154 {"MIC Control", "wlan_mgt.ft.mic_control",
16155 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
16156 {&hf_ieee80211_tag_ft_element_count,
16157 {"Element Count", "wlan_mgt.ft.element_count",
16158 FT_UINT16, BASE_DEC, NULL, 0xff00, NULL, HFILL }},
16159 {&hf_ieee80211_tag_ft_mic,
16160 {"MIC", "wlan_mgt.ft.mic",
16161 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16162 {&hf_ieee80211_tag_ft_anonce,
16163 {"ANonce", "wlan_mgt.ft.anonce",
16164 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16165 {&hf_ieee80211_tag_ft_snonce,
16166 {"SNonce", "wlan_mgt.ft.snonce",
16167 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16168 {&hf_ieee80211_tag_ft_subelem_id,
16169 {"Subelement ID", "wlan_mgt.ft.subelem.id",
16170 FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals), 0, NULL, HFILL }},
16171 {&hf_ieee80211_tag_ft_subelem_len,
16172 {"Length", "wlan_mgt.ft.subelem.len",
16173 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
16174 {&hf_ieee80211_tag_ft_subelem_data,
16175 {"Data", "wlan_mgt.ft.subelem.data",
16176 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16177 {&hf_ieee80211_tag_ft_subelem_r1kh_id,
16178 {"PMK-R1 key holder identifier (R1KH-ID)", "wlan_mgt.ft.subelem.r1kh_id",
16179 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16180 {&hf_ieee80211_tag_ft_subelem_gtk_key_info,
16181 {"Key Info", "wlan_mgt.ft.subelem.gtk.key_info",
16182 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
16183 {&hf_ieee80211_tag_ft_subelem_gtk_key_id,
16184 {"Key ID", "wlan_mgt.ft.subelem.gtk.key_id",
16185 FT_UINT16, BASE_DEC, NULL, 0x0003, NULL, HFILL }},
16186 {&hf_ieee80211_tag_ft_subelem_gtk_key_length,
16187 {"Key Length", "wlan_mgt.ft.subelem.gtk.key_length",
16188 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
16189 {&hf_ieee80211_tag_ft_subelem_gtk_rsc,
16190 {"RSC", "wlan_mgt.ft.subelem.gtk.rsc",
16191 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16192 {&hf_ieee80211_tag_ft_subelem_gtk_key,
16193 {"GTK", "wlan_mgt.ft.subelem.gtk.key",
16194 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16195 {&hf_ieee80211_tag_ft_subelem_r0kh_id,
16196 {"PMK-R0 key holder identifier (R0KH-ID)", "wlan_mgt.ft.subelem.r0kh_id",
16197 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
16198 {&hf_ieee80211_tag_ft_subelem_igtk_key_id,
16199 {"Key ID", "wlan_mgt.ft.subelem.igtk.key_id",
16200 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
16201 {&hf_ieee80211_tag_ft_subelem_igtk_ipn,
16202 {"IPN", "wlan_mgt.ft.subelem.igtk.ipn",
16203 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16204 {&hf_ieee80211_tag_ft_subelem_igtk_key_length,
16205 {"Key Length", "wlan_mgt.ft.subelem.igtk.key_length",
16206 FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
16207 {&hf_ieee80211_tag_ft_subelem_igtk_key,
16208 {"Wrapped Key (IGTK)", "wlan_mgt.ft.subelem.igtk.key",
16209 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16212 {&hf_ieee80211_tag_mmie_keyid,
16213 {"KeyID", "wlan_mgt.mmie.keyid",
16214 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
16215 {&hf_ieee80211_tag_mmie_ipn,
16216 {"IPN", "wlan_mgt.mmie.ipn",
16217 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16218 {&hf_ieee80211_tag_mmie_mic,
16219 {"MIC", "wlan_mgt.mmie.mic",
16220 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16222 /* Time Advertisement */
16223 {&hf_ieee80211_tag_time_adv_timing_capab,
16224 {"Timing capabilities", "wlan_mgt.time_adv.timing_capab",
16225 FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals), 0, NULL, HFILL }},
16226 {&hf_ieee80211_tag_time_adv_time_value,
16227 {"Time Value", "wlan_mgt.time_adv.time_value",
16228 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16229 {&hf_ieee80211_tag_time_adv_time_value_year,
16230 {"Time Value: Year", "wlan_mgt.time_adv.time_value.year",
16231 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
16232 {&hf_ieee80211_tag_time_adv_time_value_month,
16233 {"Time Value: Month", "wlan_mgt.time_adv.time_value.month",
16234 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
16235 {&hf_ieee80211_tag_time_adv_time_value_day,
16236 {"Time Value: Day", "wlan_mgt.time_adv.time_value.month",
16237 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
16238 {&hf_ieee80211_tag_time_adv_time_value_hours,
16239 {"Time Value: Hours", "wlan_mgt.time_adv.time_value.hours",
16240 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
16241 {&hf_ieee80211_tag_time_adv_time_value_minutes,
16242 {"Time Value: Minutes", "wlan_mgt.time_adv.time_value.minutes",
16243 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
16244 {&hf_ieee80211_tag_time_adv_time_value_seconds,
16245 {"Time Value: Seconds", "wlan_mgt.time_adv.time_value.seconds",
16246 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
16247 {&hf_ieee80211_tag_time_adv_time_value_milliseconds,
16248 {"Time Value: Milliseconds", "wlan_mgt.time_adv.time_value.milliseconds",
16249 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
16250 {&hf_ieee80211_tag_time_adv_time_value_reserved,
16251 {"Time Value: Reserved", "wlan_mgt.time_adv.time_value.reserved",
16252 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
16253 {&hf_ieee80211_tag_time_adv_time_error,
16254 {"Time Error", "wlan_mgt.time_adv.time_error",
16255 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16256 {&hf_ieee80211_tag_time_adv_time_update_counter,
16257 {"Time Update Counter", "wlan_mgt.time_adv.time_update_counter",
16258 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
16261 {&hf_ieee80211_tag_time_zone,
16262 {"Time Zone", "wlan_mgt.time_zone",
16263 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
16266 {&hf_ieee80211_tag_interworking_access_network_type,
16267 {"Access Network Type", "wlan_mgt.interworking.access_network_type",
16268 FT_UINT8, BASE_DEC, VALS(access_network_type_vals), 0x0f, NULL, HFILL }},
16269 {&hf_ieee80211_tag_interworking_internet,
16270 {"Internet", "wlan_mgt.interworking.internet",
16271 FT_UINT8, BASE_DEC, NULL, 0x10, NULL, HFILL }},
16272 {&hf_ieee80211_tag_interworking_asra,
16273 {"ASRA", "wlan_mgt.interworking.asra",
16274 FT_UINT8, BASE_DEC, NULL, 0x20, "Additional Step Required for Access",
16276 {&hf_ieee80211_tag_interworking_esr,
16277 {"ESR", "wlan_mgt.interworking.esr",
16278 FT_UINT8, BASE_DEC, NULL, 0x40, "Emergency services reachable", HFILL }},
16279 {&hf_ieee80211_tag_interworking_uesa,
16280 {"UESA", "wlan_mgt.interworking.uesa",
16281 FT_UINT8, BASE_DEC, NULL, 0x80,
16282 "Unauthenticated emergency service accessible", HFILL }},
16283 {&hf_ieee80211_tag_interworking_hessid,
16284 {"HESSID", "wlan_mgt.interworking.hessid",
16285 FT_ETHER, BASE_NONE, NULL, 0, "Homogeneous ESS identifier", HFILL }},
16287 /* Advertisement Protocol */
16288 {&hf_ieee80211_tag_adv_proto_resp_len_limit,
16289 {"Query Response Length Limit", "wlan_mgt.adv_proto.resp_len_limit",
16290 FT_UINT8, BASE_DEC, NULL, 0x7f, NULL, HFILL }},
16291 {&hf_ieee80211_tag_adv_proto_pame_bi,
16292 {"PAME-BI", "wlan_mgt.adv_proto.pame_bi",
16293 FT_UINT8, BASE_DEC, NULL, 0x80,
16294 "Pre-Association Message Xchange BSSID Independent (PAME-BI)", HFILL }},
16295 {&hf_ieee80211_tag_adv_proto_id,
16296 {"Advertisement Protocol ID", "wlan_mgt.adv_proto.id",
16297 FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals), 0, NULL, HFILL }},
16299 /* Roaming Consortium */
16300 {&hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
16301 {"Number of ANQP OIs", "wlan_mgt.roaming_consortium.num_anqp_oi",
16302 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
16303 {&hf_ieee80211_tag_roaming_consortium_oi1_len,
16304 {"OI #1 Length", "wlan_mgt.roaming_consortium.oi1_len",
16305 FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL }},
16306 {&hf_ieee80211_tag_roaming_consortium_oi2_len,
16307 {"OI #2 Length", "wlan_mgt.roaming_consortium.oi2_len",
16308 FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
16309 {&hf_ieee80211_tag_roaming_consortium_oi1,
16310 {"OI #1", "wlan_mgt.roaming_consortium.oi1",
16311 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16312 {&hf_ieee80211_tag_roaming_consortium_oi2,
16313 {"OI #2", "wlan_mgt.roaming_consortium.oi2",
16314 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16315 {&hf_ieee80211_tag_roaming_consortium_oi3,
16316 {"OI #3", "wlan_mgt.roaming_consortium.oi3",
16317 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
16319 /* Timeout Interval */
16320 {&hf_ieee80211_tag_timeout_int_type,
16321 {"Timeout Interval Type", "wlan_mgt.timeout_int.type",
16322 FT_UINT8, BASE_DEC, VALS(timeout_int_types), 0, NULL, HFILL }},
16323 {&hf_ieee80211_tag_timeout_int_value,
16324 {"Timeout Interval Value", "wlan_mgt.timeout_int.value",
16325 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
16327 /* Link Identifier */
16328 {&hf_ieee80211_tag_link_id_bssid,
16329 {"BSSID", "wlan_mgt.link_id.bssid",
16330 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
16331 {&hf_ieee80211_tag_link_id_init_sta,
16332 {"TDLS initiator STA Address", "wlan_mgt.link_id.init_sta",
16333 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
16334 {&hf_ieee80211_tag_link_id_resp_sta,
16335 {"TDLS responder STA Address", "wlan_mgt.link_id.resp_sta",
16336 FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL }},
16338 /* Wakeup Schedule */
16339 {&hf_ieee80211_tag_wakeup_schedule_offset,
16340 {"Offset", "wlan_mgt.wakeup_schedule.offset",
16341 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
16342 {&hf_ieee80211_tag_wakeup_schedule_interval,
16343 {"Interval", "wlan_mgt.wakeup_schedule.interval",
16344 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
16345 {&hf_ieee80211_tag_wakeup_schedule_awake_window_slots,
16346 {"Awake Window Slots", "wlan_mgt.wakeup_schedule.awake_window_slots",
16347 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
16348 {&hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
16349 {"Maximum Awake Window Duration",
16350 "wlan_mgt.wakeup_schedule.max_awake_dur",
16351 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
16352 {&hf_ieee80211_tag_wakeup_schedule_idle_count,
16353 {"Idle Count", "wlan_mgt.wakeup_schedule.idle_count",
16354 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
16356 /* Channel Switch Timing */
16357 {&hf_ieee80211_tag_channel_switch_timing_switch_time,
16358 {"Switch Time", "wlan_mgt.channel_switch_timing.switch_time",
16359 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
16360 {&hf_ieee80211_tag_channel_switch_timing_switch_timeout,
16361 {"Switch Timeout", "wlan_mgt.channel_switch_timing.switch_timeout",
16362 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
16365 {&hf_ieee80211_tag_pti_control_tid,
16366 {"TID", "wlan_mgt.pti_control.tid",
16367 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
16368 {&hf_ieee80211_tag_pti_control_sequence_control,
16369 {"Sequence Control", "wlan_mgt.pti_control.sequence_control",
16370 FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL }},
16372 /* PU Buffer Status */
16373 {&hf_ieee80211_tag_pu_buffer_status_ac_bk,
16374 {"AC_BK traffic available", "wlan_mgt.pu_buffer_status.ac_bk",
16375 FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
16376 {&hf_ieee80211_tag_pu_buffer_status_ac_be,
16377 {"AC_BE traffic available", "wlan_mgt.pu_buffer_status.ac_be",
16378 FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
16379 {&hf_ieee80211_tag_pu_buffer_status_ac_vi,
16380 {"AC_VI traffic available", "wlan_mgt.pu_buffer_status.ac_vi",
16381 FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
16382 {&hf_ieee80211_tag_pu_buffer_status_ac_vo,
16383 {"AC_VO traffic available", "wlan_mgt.pu_buffer_status.ac_vo",
16384 FT_UINT8, BASE_DEC, NULL, 0x08, NULL, HFILL }}
16387 static hf_register_info aggregate_fields[] = {
16388 {&hf_ieee80211_amsdu_msdu_header_text,
16389 {"MAC Service Data Unit (MSDU)", "wlan_aggregate.msduheader", FT_UINT16,
16390 BASE_DEC, 0, 0x0000, NULL, HFILL }}
16393 static uat_field_t wep_uat_flds[] = {
16395 UAT_FLD_VS(uat_wep_key_records, key, "Key type", wep_type_vals,
16396 "Decryption key type used"),
16397 UAT_FLD_CSTRING(uat_wep_key_records, string, "Key",
16398 "wep:<wep hexadecimal key>\n"
16399 "wpa-pwd:<passphrase>[:<ssid>]\n"
16400 "wpa-psk:<wpa hexadecimal key>"),
16404 static gint *tree_array[] = {
16411 &ett_block_ack_bitmap,
16413 &ett_fixed_parameters,
16414 &ett_tagged_parameters,
16415 &ett_tag_bmapctl_tree,
16416 &ett_tag_country_fnm_tree,
16417 &ett_tag_country_rcc_tree,
16418 &ett_qos_parameters,
16419 &ett_qos_ps_buf_state,
16420 &ett_qos_info_field_tree,
16421 &ett_wep_parameters,
16423 &ett_hwmp_targ_flags_tree,
16427 &ett_rsn_sub_pcs_tree,
16428 &ett_rsn_akms_tree,
16429 &ett_rsn_sub_akms_tree,
16431 &ett_rsn_pmkid_tree,
16432 &ett_rsn_gmcs_tree,
16435 &ett_wpa_sub_ucs_tree,
16436 &ett_wpa_akms_tree,
16437 &ett_wpa_sub_akms_tree,
16439 &ett_wme_aci_aifsn,
16444 &ett_ff_ba_param_tree,
16446 &ett_ff_sm_pwr_save,
16447 &ett_ff_psmp_param_set,
16448 &ett_ff_mimo_cntrl,
16450 &ett_ff_chan_switch_announce,
16452 &ett_ff_psmp_sta_info,
16453 &ett_ff_delba_param_tree,
16454 &ett_ff_ba_ssc_tree,
16456 &ett_cntrl_wrapper_fc,
16457 &ett_cntrl_wrapper_payload,
16458 &ett_ht_info_delimiter1_tree,
16459 &ett_ht_info_delimiter2_tree,
16460 &ett_ht_info_delimiter3_tree,
16461 &ett_msdu_aggregation_parent_tree,
16462 &ett_msdu_aggregation_subframe_tree,
16463 &ett_tag_measure_request_mode_tree,
16464 &ett_tag_measure_request_type_tree,
16465 &ett_tag_measure_report_mode_tree,
16466 &ett_tag_measure_report_type_tree,
16467 &ett_tag_measure_report_basic_map_tree,
16468 &ett_tag_measure_report_rpi_tree,
16469 &ett_tag_measure_report_frame_tree,
16470 &ett_tag_dfs_map_tree,
16471 &ett_tag_erp_info_tree,
16473 &ett_tag_supported_channels,
16474 &ett_tag_neighbor_report_bssid_info_tree,
16475 &ett_tag_neighbor_report_bssid_info_capability_tree,
16476 &ett_tag_neighbor_report_sub_tag_tree,
16477 &ett_ampduparam_tree,
16480 &ett_htex_cap_tree,
16483 &ett_hta_cap1_tree,
16484 &ett_hta_cap2_tree,
16491 &ett_tag_time_adv_tree,
16493 &ett_adv_proto_tuple,
16495 &ett_gas_resp_fragment,
16496 &ett_gas_resp_fragments,
16499 &ett_nai_realm_eap,
16500 &ett_anqp_vendor_capab
16502 module_t *wlan_module;
16504 memset (&wlan_stats, 0, sizeof wlan_stats);
16506 proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
16507 "IEEE 802.11 Aggregate Data", "wlan_aggregate");
16508 proto_register_field_array(proto_aggregate, aggregate_fields, array_length(aggregate_fields));
16509 proto_wlan = proto_register_protocol ("IEEE 802.11 wireless LAN",
16510 "IEEE 802.11", "wlan");
16511 proto_register_field_array (proto_wlan, hf, array_length (hf));
16512 proto_wlan_mgt = proto_register_protocol ("IEEE 802.11 wireless LAN management frame",
16513 "802.11 MGT", "wlan_mgt");
16514 proto_register_field_array (proto_wlan_mgt, ff, array_length (ff));
16515 proto_register_subtree_array (tree_array, array_length (tree_array));
16517 register_dissector("wlan", dissect_ieee80211, proto_wlan);
16518 register_dissector("wlan_fixed", dissect_ieee80211_fixed, proto_wlan);
16519 register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
16520 register_dissector("wlan_datapad", dissect_ieee80211_datapad, proto_wlan);
16521 register_dissector("wlan_ht", dissect_ieee80211_ht, proto_wlan);
16522 register_init_routine(wlan_defragment_init);
16523 register_init_routine(wlan_retransmit_init);
16524 register_init_routine(ieee80211_gas_reassembly_init);
16526 wlan_tap = register_tap("wlan");
16528 /* Register configuration options */
16529 wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
16530 prefs_register_bool_preference(wlan_module, "defragment",
16531 "Reassemble fragmented 802.11 datagrams",
16532 "Whether fragmented 802.11 datagrams should be reassembled",
16535 prefs_register_bool_preference(wlan_module, "ignore_draft_ht",
16536 "Ignore vendor-specific HT elements",
16537 "Don't dissect 802.11n draft HT elements (which might contain duplicate information).",
16538 &wlan_ignore_draft_ht);
16540 prefs_register_bool_preference(wlan_module, "retransmitted",
16541 "Call subdissector for retransmitted 802.11 frames",
16542 "Whether retransmitted 802.11 frames should be subdissected",
16543 &wlan_subdissector);
16545 prefs_register_bool_preference(wlan_module, "check_fcs",
16546 "Assume packets have FCS",
16547 "Some 802.11 cards include the FCS at the end of a packet, others do not.",
16550 /* Davide Schiera (2006-11-26): changed "WEP bit" in "Protection bit" */
16551 /* (according to the document IEEE Std 802.11i-2004) */
16552 prefs_register_enum_preference(wlan_module, "ignore_wep",
16553 "Ignore the Protection bit",
16554 "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
16555 "and some also leave the IV (initialization vector).",
16556 &wlan_ignore_wep, wlan_ignore_wep_options, TRUE);
16558 prefs_register_obsolete_preference(wlan_module, "wep_keys");
16560 /* Davide Schiera (2006-11-26): added reference to WPA/WPA2 decryption */
16561 prefs_register_bool_preference(wlan_module, "enable_decryption",
16562 "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
16563 &enable_decryption);
16565 prefs_register_static_text_preference(wlan_module, "info_decryption_key",
16566 "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
16567 "010203040506070809101111213 (104/128-bit WEP),\n"
16568 "MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
16569 "0102030405...6061626364 (WPA + 256-bit key). "
16570 "Invalid keys will be ignored.",
16571 "Valid key formats");
16573 wep_uat = uat_new("WEP and WPA Decryption Keys",
16574 sizeof(uat_wep_key_record_t), /* record size */
16575 "80211_keys", /* filename */
16576 TRUE, /* from_profile */
16577 (void*) &uat_wep_key_records, /* data_ptr */
16578 &num_wepkeys_uat, /* numitems_ptr */
16579 UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
16581 uat_wep_key_record_copy_cb, /* copy callback */
16582 uat_wep_key_record_update_cb, /* update callback */
16583 uat_wep_key_record_free_cb, /* free callback */
16584 NULL, /* post update callback */
16585 wep_uat_flds); /* UAT field definitions */
16587 prefs_register_uat_preference(wlan_module,
16590 "WEP and pre-shared WPA keys",
16595 dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
16599 int tagged_parameter_tree_len;
16600 proto_tree *tagged_tree;
16604 type = tvb_get_guint8(tvb, offset);
16605 proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
16606 1, ENC_BIG_ENDIAN);
16610 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
16611 /* TODO: IEEE 802.11r */
16614 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
16615 col_clear(pinfo->cinfo, COL_INFO);
16616 offset += add_fixed_field(tree, tvb, offset, FIELD_ACTION);
16617 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16618 if (tagged_parameter_tree_len > 0) {
16619 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
16620 tagged_parameter_tree_len);
16621 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16622 tagged_parameter_tree_len, -1);
16629 proto_reg_handoff_ieee80211(void)
16631 dissector_handle_t data_encap_handle;
16634 * Get handles for the LLC, IPX and Ethernet dissectors.
16636 llc_handle = find_dissector("llc");
16637 ipx_handle = find_dissector("ipx");
16638 eth_withoutfcs_handle = find_dissector("eth_withoutfcs");
16639 data_handle = find_dissector("data");
16641 ieee80211_handle = find_dissector("wlan");
16642 dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11, ieee80211_handle);
16643 dissector_add_uint("ethertype", ETHERTYPE_CENTRINO_PROMISC, ieee80211_handle);
16645 /* Register handoff to Aruba GRE */
16646 dissector_add_uint("gre.proto", GRE_ARUBA_8200, ieee80211_handle);
16647 dissector_add_uint("gre.proto", GRE_ARUBA_8210, ieee80211_handle);
16648 dissector_add_uint("gre.proto", GRE_ARUBA_8220, ieee80211_handle);
16649 dissector_add_uint("gre.proto", GRE_ARUBA_8230, ieee80211_handle);
16650 dissector_add_uint("gre.proto", GRE_ARUBA_8240, ieee80211_handle);
16651 dissector_add_uint("gre.proto", GRE_ARUBA_8250, ieee80211_handle);
16652 dissector_add_uint("gre.proto", GRE_ARUBA_8260, ieee80211_handle);
16653 dissector_add_uint("gre.proto", GRE_ARUBA_8270, ieee80211_handle);
16654 dissector_add_uint("gre.proto", GRE_ARUBA_8280, ieee80211_handle);
16655 dissector_add_uint("gre.proto", GRE_ARUBA_8290, ieee80211_handle);
16656 dissector_add_uint("gre.proto", GRE_ARUBA_82A0, ieee80211_handle);
16657 dissector_add_uint("gre.proto", GRE_ARUBA_82B0, ieee80211_handle);
16658 dissector_add_uint("gre.proto", GRE_ARUBA_82C0, ieee80211_handle);
16659 dissector_add_uint("gre.proto", GRE_ARUBA_82D0, ieee80211_handle);
16660 dissector_add_uint("gre.proto", GRE_ARUBA_82E0, ieee80211_handle);
16661 dissector_add_uint("gre.proto", GRE_ARUBA_82F0, ieee80211_handle);
16662 dissector_add_uint("gre.proto", GRE_ARUBA_8300, ieee80211_handle);
16663 dissector_add_uint("gre.proto", GRE_ARUBA_8310, ieee80211_handle);
16664 dissector_add_uint("gre.proto", GRE_ARUBA_8320, ieee80211_handle);
16665 dissector_add_uint("gre.proto", GRE_ARUBA_8330, ieee80211_handle);
16666 dissector_add_uint("gre.proto", GRE_ARUBA_8340, ieee80211_handle);
16667 dissector_add_uint("gre.proto", GRE_ARUBA_8350, ieee80211_handle);
16668 dissector_add_uint("gre.proto", GRE_ARUBA_8360, ieee80211_handle);
16669 dissector_add_uint("gre.proto", GRE_ARUBA_8370, ieee80211_handle);
16671 data_encap_handle = create_dissector_handle(dissect_data_encap, proto_wlan);
16672 dissector_add_uint("ethertype", ETHERTYPE_IEEE80211_DATA_ENCAP,
16673 data_encap_handle);
16676 /* Davide Schiera (2006-11-26): this function will try to decrypt with WEP or */
16677 /* WPA and return a tvb to the caller to add a new tab. It returns the */
16678 /* algorithm used for decryption (WEP, TKIP, CCMP) and the header and */
16679 /* trailer lengths. */
16681 try_decrypt(tvbuff_t *tvb, guint offset, guint len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer) {
16682 const guint8 *enc_data;
16683 guint8 *tmp = NULL;
16684 tvbuff_t *decr_tvb = NULL;
16685 guint32 dec_caplen;
16686 guchar dec_data[AIRPDCAP_MAX_CAPLEN];
16687 AIRPDCAP_KEY_ITEM used_key;
16689 if (!enable_decryption)
16692 /* get the entire packet */
16693 enc_data = tvb_get_ptr(tvb, 0, len+offset);
16695 /* process packet with AirPDcap */
16696 if (AirPDcapPacketProcess(&airpdcap_ctx, enc_data, offset, offset+len, dec_data, &dec_caplen, &used_key, FALSE, TRUE)==AIRPDCAP_RET_SUCCESS)
16698 *algorithm=used_key.KeyType;
16699 switch (*algorithm) {
16700 case AIRPDCAP_KEY_TYPE_WEP:
16701 *sec_header=AIRPDCAP_WEP_HEADER;
16702 *sec_trailer=AIRPDCAP_WEP_TRAILER;
16704 case AIRPDCAP_KEY_TYPE_CCMP:
16705 *sec_header=AIRPDCAP_RSNA_HEADER;
16706 *sec_trailer=AIRPDCAP_CCMP_TRAILER;
16708 case AIRPDCAP_KEY_TYPE_TKIP:
16709 *sec_header=AIRPDCAP_RSNA_HEADER;
16710 *sec_trailer=AIRPDCAP_TKIP_TRAILER;
16716 /* allocate buffer for decrypted payload */
16717 tmp = g_memdup(dec_data+offset, dec_caplen-offset);
16719 len=dec_caplen-offset;
16721 /* decrypt successful, let's set up a new data tvb. */
16722 decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
16723 tvb_set_free_cb(decr_tvb, g_free);
16728 /* Davide Schiera ----------------------------------------------------------- */
16731 /* Collect our WEP and WPA keys */
16733 void set_airpdcap_keys(void)
16736 AIRPDCAP_KEY_ITEM key;
16737 PAIRPDCAP_KEYS_COLLECTION keys;
16738 decryption_key_t* dk = NULL;
16739 GByteArray *bytes = NULL;
16742 keys=(PAIRPDCAP_KEYS_COLLECTION)se_alloc(sizeof(AIRPDCAP_KEYS_COLLECTION));
16745 for(i = 0; (uat_wep_key_records != NULL) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS); i++)
16747 dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key);
16751 if(dk->type == AIRPDCAP_KEY_TYPE_WEP)
16753 key.KeyType = AIRPDCAP_KEY_TYPE_WEP;
16755 bytes = g_byte_array_new();
16756 res = hex_str_to_bytes(dk->key->str, bytes, FALSE);
16758 if (dk->key->str && res && bytes->len > 0 && bytes->len <= AIRPDCAP_WEP_KEY_MAXLEN)
16761 * WEP key is correct (well, the can be even or odd, so it is not
16762 * a real check, I think... is a check performed somewhere in the
16763 * AirPDcap function??? )
16765 memcpy(key.KeyData.Wep.WepKey, bytes->data, bytes->len);
16766 key.KeyData.Wep.WepKeyLen = bytes->len;
16767 keys->Keys[keys->nKeys] = key;
16771 else if(dk->type == AIRPDCAP_KEY_TYPE_WPA_PWD)
16773 key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PWD;
16775 /* XXX - This just lops the end if the key off if it's too long.
16776 * Should we handle this more gracefully? */
16777 g_strlcpy(key.UserPwd.Passphrase, dk->key->str, AIRPDCAP_WPA_PASSPHRASE_MAX_LEN+1);
16779 key.UserPwd.SsidLen = 0;
16780 if(dk->ssid != NULL && dk->ssid->len <= AIRPDCAP_WPA_SSID_MAX_LEN)
16782 memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
16783 key.UserPwd.SsidLen = dk->ssid->len;
16786 keys->Keys[keys->nKeys] = key;
16789 else if(dk->type == AIRPDCAP_KEY_TYPE_WPA_PMK)
16791 key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PMK;
16793 bytes = g_byte_array_new();
16794 hex_str_to_bytes(dk->key->str, bytes, FALSE);
16796 /* XXX - Pass the correct array of bytes... */
16797 if (bytes->len <= AIRPDCAP_WPA_PMK_LEN) {
16798 memcpy(key.KeyData.Wpa.Pmk, bytes->data, bytes->len);
16800 keys->Keys[keys->nKeys] = key;
16807 /* Now set the keys */
16808 AirPDcapSetKeys(&airpdcap_ctx,keys->Keys,keys->nKeys);
16810 g_byte_array_free(bytes, TRUE);
16814 static void init_wepkeys(void) {
16817 * XXX - AirPDcap - That God sends it to us beautiful (che dio ce la mandi bona)
16818 * The next lines will add a key to the AirPDcap context. The keystring will be added
16819 * to the old WEP array too, but we don't care, because the packets will come here
16820 * already decrypted... One of these days we will fix this too
16822 set_airpdcap_keys();
16825 * This code had been taken from AirSnort crack.c function classify()
16826 * Permission granted by snax <at> shmoo dot com
16827 * weak_iv - determine which key byte an iv is useful in resolving
16828 * parm - p, pointer to the first byte of an IV
16829 * return - n - this IV is weak for byte n of a WEP key
16830 * -1 - this IV is not weak for any key bytes
16832 * This function tests for IVs that are known to satisfy the criteria
16833 * for a weak IV as specified in FMS section 7.1
16837 weak_iv(guchar *iv)
16841 if (iv[1] == 255 && iv[0] > 2 && iv[0] < 16) {
16845 sum = iv[0] + iv[1];
16847 if (iv[2] <= 0x0a) {
16850 else if (iv[2] == 0xff){
16855 if (sum == k && (iv[2] >= 0xf2 && iv[2] <= 0xfe && iv[2] != 0xfd)){
16865 * c-basic-offset: 2
16867 * indent-tabs-mode: nil
16870 * ex: set shiftwidth=2 tabstop=8 expandtab:
16871 * :indentSize=2:tabSize=8:noTabs=true: