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-2012: Revision of IEEE Std 802.11-2007
68 * include 10 amendments (802.11k,r,y,w,n,p,z,v,u,s) 802.11-2007
69 * include 8 amendments (802.11a,b,d,e,g,h,i,j) 802.11-1999
70 * http://standards.ieee.org/getieee802/download/802.11-2012.pdf
82 #include <epan/packet.h>
83 #include <epan/bitswap.h>
84 #include <epan/addr_resolv.h>
85 #include <epan/strutil.h>
86 #include <epan/prefs.h>
87 #include <epan/reassemble.h>
88 #include "packet-ipx.h"
89 #include "packet-llc.h"
90 #include "packet-ieee80211.h"
91 #include <epan/etypes.h>
92 #include <epan/greproto.h>
94 #include <wsutil/crc32.h>
95 #include <epan/crc32-tvb.h>
97 #include <epan/emem.h>
98 #include <epan/crypt/wep-wpadefs.h>
99 #include <epan/expert.h>
100 #include <epan/uat.h>
102 #include "packet-wps.h"
103 #include "packet-wifi-p2p.h"
105 /* Davide Schiera (2006-11-22): including AirPDcap project */
106 #include <epan/crypt/airpdcap_ws.h>
107 /* Davide Schiera (2006-11-22) ---------------------------------------------- */
109 extern value_string_ext eap_type_vals_ext; /* from packet-eap.c */
112 #define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
115 /* Defragment fragmented 802.11 datagrams */
116 static gboolean wlan_defragment = TRUE;
118 /* call subdissector for retransmitted frames */
119 static gboolean wlan_subdissector = TRUE;
121 /* Check for the presence of the 802.11 FCS */
122 static gboolean wlan_check_fcs = FALSE;
124 /* Ignore vendor-specific HT elements */
125 static gboolean wlan_ignore_draft_ht = FALSE;
127 /* Ignore the WEP bit; assume packet is decrypted */
128 #define WLAN_IGNORE_WEP_NO 0
129 #define WLAN_IGNORE_WEP_WO_IV 1
130 #define WLAN_IGNORE_WEP_W_IV 2
131 static gint wlan_ignore_wep = WLAN_IGNORE_WEP_NO;
133 /* Tables for reassembly of fragments. */
134 static GHashTable *wlan_fragment_table = NULL;
135 static GHashTable *wlan_reassembled_table = NULL;
137 /* Statistical data */
138 static struct _wlan_stats wlan_stats;
140 /*-------------------------------------
141 * UAT for WEP decoder
142 *-------------------------------------
144 /* UAT entry structure. */
148 } uat_wep_key_record_t;
150 static uat_wep_key_record_t *uat_wep_key_records = NULL;
151 static uat_t *wep_uat = NULL;
152 static guint num_wepkeys_uat = 0;
155 uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U_)
157 uat_wep_key_record_t* new_key = (uat_wep_key_record_t *)n;
158 const uat_wep_key_record_t* old_key = (const uat_wep_key_record_t *)o;
160 if (old_key->string) {
161 new_key->string = g_strdup(old_key->string);
163 new_key->string = NULL;
170 uat_wep_key_record_update_cb(void* r, const char** err)
172 uat_wep_key_record_t* rec = (uat_wep_key_record_t *)r;
173 decryption_key_t* dk;
175 if (rec->string == NULL) {
176 *err = ep_strdup_printf("Key can't be blank");
178 g_strstrip(rec->string);
179 dk = parse_key_string(rec->string, rec->key);
183 case AIRPDCAP_KEY_TYPE_WEP:
184 case AIRPDCAP_KEY_TYPE_WEP_40:
185 case AIRPDCAP_KEY_TYPE_WEP_104:
186 if (rec->key != AIRPDCAP_KEY_TYPE_WEP) {
187 *err = ep_strdup_printf("Invalid key format");
190 case AIRPDCAP_KEY_TYPE_WPA_PWD:
191 if (rec->key != AIRPDCAP_KEY_TYPE_WPA_PWD) {
192 *err = ep_strdup_printf("Invalid key format");
195 case AIRPDCAP_KEY_TYPE_WPA_PSK:
196 if (rec->key != AIRPDCAP_KEY_TYPE_WPA_PSK) {
197 *err = ep_strdup_printf("Invalid key format");
201 *err = ep_strdup_printf("Invalid key format");
205 *err = ep_strdup_printf("Invalid key format");
211 uat_wep_key_record_free_cb(void*r)
213 uat_wep_key_record_t* key = (uat_wep_key_record_t *)r;
215 if (key->string) g_free(key->string);
218 UAT_VS_DEF(uat_wep_key_records, key, uat_wep_key_record_t, 0, STRING_KEY_TYPE_WEP)
219 UAT_CSTRING_CB_DEF(uat_wep_key_records, string, uat_wep_key_record_t)
221 /* Stuff for the WEP decoder */
222 static gboolean enable_decryption = FALSE;
224 /* Davide Schiera (2006-11-26): created function to decrypt WEP and WPA/WPA2 */
225 static tvbuff_t *try_decrypt(tvbuff_t *tvb, guint32 offset, guint32 len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer);
227 static int weak_iv(guchar *iv);
228 #define SSWAP(a,b) {guint8 tmp = s[a]; s[a] = s[b]; s[b] = tmp;}
230 typedef struct mimo_control
236 guint8 coefficient_size;
237 guint8 codebook_info;
238 guint8 remaining_matrix_segment;
241 /* ************************************************************************* */
242 /* Miscellaneous Constants */
243 /* ************************************************************************* */
244 #define SHORT_STR 256
246 /* ************************************************************************* */
247 /* Define some very useful macros that are used to analyze frame types etc. */
248 /* ************************************************************************* */
251 * Fetch the frame control field and swap it if needed. "fcf" and "tvb"
252 * must be valid variables.
254 #define FETCH_FCF(off) (wlan_broken_fc ? \
255 BSWAP16(tvb_get_letohs(tvb, off)) : \
256 tvb_get_letohs(tvb, off))
259 * Extract the protocol version from the frame control field
261 #define FCF_PROT_VERSION(x) ((x) & 0x3)
264 * Extract the frame type from the frame control field.
266 #define FCF_FRAME_TYPE(x) (((x) & 0xC) >> 2)
269 * Extract the frame subtype from the frame control field.
271 #define FCF_FRAME_SUBTYPE(x) (((x) & 0xF0) >> 4)
274 * Convert the frame type and subtype from the frame control field into
275 * one of the MGT_, CTRL_, or DATA_ values.
277 #define COMPOSE_FRAME_TYPE(x) (((x & 0x0C)<< 2)+FCF_FRAME_SUBTYPE(x)) /* Create key to (sub)type */
280 * The subtype field of a data frame is, in effect, composed of 4 flag
281 * bits - CF-Ack, CF-Poll, Null (means the frame doesn't actually have
282 * any data), and QoS.
284 #define DATA_FRAME_IS_CF_ACK(x) ((x) & 0x01)
285 #define DATA_FRAME_IS_CF_POLL(x) ((x) & 0x02)
286 #define DATA_FRAME_IS_NULL(x) ((x) & 0x04)
287 #define DATA_FRAME_IS_QOS(x) ((x) & 0x08)
290 * Extract the flags from the frame control field.
292 #define FCF_FLAGS(x) (((x) & 0xFF00) >> 8)
295 * Bits from the flags field.
297 #define FLAG_TO_DS 0x01
298 #define FLAG_FROM_DS 0x02
299 #define FLAG_MORE_FRAGMENTS 0x04
300 #define FLAG_RETRY 0x08
301 #define FLAG_POWER_MGT 0x10
302 #define FLAG_MORE_DATA 0x20
303 #define FLAG_PROTECTED 0x40
304 #define FLAG_ORDER 0x80
307 * Test bits in the flags field.
310 * XXX - Only HAVE_FRAGMENTS, IS_PROTECTED, and IS_STRICTLY_ORDERED
311 * are in use. Should the rest be removed?
313 #define IS_TO_DS(x) ((x) & FLAG_TO_DS)
314 #define IS_FROM_DS(x) ((x) & FLAG_FROM_DS)
315 #define HAVE_FRAGMENTS(x) ((x) & FLAG_MORE_FRAGMENTS)
316 #define IS_RETRY(x) ((x) & FLAG_RETRY)
317 #define POWER_MGT_STATUS(x) ((x) & FLAG_POWER_MGT)
318 #define HAS_MORE_DATA(x) ((x) & FLAG_MORE_DATA)
319 #define IS_PROTECTED(x) ((x) & FLAG_PROTECTED)
320 #define IS_STRICTLY_ORDERED(x) ((x) & FLAG_ORDER)
323 * Extract subfields from the flags field.
325 #define FLAGS_DS_STATUS(x) ((x) & (FLAG_FROM_DS|FLAG_TO_DS))
328 * Extract an indication of the types of addresses in a data frame from
329 * the frame control field.
331 #define FCF_ADDR_SELECTOR(x) ((x) & ((FLAG_TO_DS|FLAG_FROM_DS) << 8))
333 #define DATA_ADDR_T1 0
334 #define DATA_ADDR_T2 (FLAG_FROM_DS << 8)
335 #define DATA_ADDR_T3 (FLAG_TO_DS << 8)
336 #define DATA_ADDR_T4 ((FLAG_TO_DS|FLAG_FROM_DS) << 8)
339 * Extract the fragment number and sequence number from the sequence
342 #define SEQCTL_FRAGMENT_NUMBER(x) ((x) & 0x000F)
343 #define SEQCTL_SEQUENCE_NUMBER(x) (((x) & 0xFFF0) >> 4)
346 * Extract subfields from the QoS control field.
348 #define QOS_TID(x) ((x) & 0x000F)
349 #define QOS_PRIORITY(x) ((x) & 0x0007)
350 #define QOS_EOSP(x) (((x) & 0x0010) >> 4) /* end of service period */
351 #define QOS_ACK_POLICY(x) (((x) & 0x0060) >> 5)
352 #define QOS_AMSDU_PRESENT(x) (((x) & 0x0080) >> 6)
353 #define QOS_FIELD_CONTENT(x) (((x) & 0xFF00) >> 8)
354 #define QOS_MESH_CONTROL_PRESENT(x) (((x) & 0x0100) >> 8)
356 #define QOS_FLAG_EOSP 0x10
359 * Extract subfields from the result of QOS_FIELD_CONTENT().
361 #define QOS_PS_BUF_STATE_INDICATED(x) (((x) & 0x02) >> 1)
362 #define QOS_PS_HIGHEST_PRI_BUF_AC(x) (((x) & 0x0C) >> 2)
363 #define QOS_PS_QAP_BUF_LOAD(x) (((x) & 0xF0) >> 4)
366 * Extract subfields from the HT Control field.
367 * .11n D-1.10 & D-2.0, 7.1.3.5a, 32 bits.
369 #define HTC_LAC(htc) ((htc) & 0xFF)
370 #define HTC_LAC_MAI(htc) (((htc) >> 2) & 0xF)
371 #define HTC_IS_ASELI(htc) (HTC_LAC_MAI(htc) == 0xE)
372 #define HTC_LAC_MAI_MRQ(htc) ((HTC_LAC_MAI(htc)) & 0x1)
373 #define HTC_LAC_MAI_MSI(htc) ((HTC_LAC_MAI(htc) >> 1) & 0x7)
374 #define HTC_LAC_MFSI(htc) (((htc) >> 4) & 0x7)
375 #define HTC_LAC_ASEL_CMD(htc) (((htc) >> 9) & 0x7)
376 #define HTC_LAC_ASEL_DATA(htc) (((htc) >> 12) & 0xF)
377 #define HTC_LAC_MFB(htc) (((htc) >> 9) & 0x7F)
378 #define HTC_CAL_POS(htc) (((htc) >> 16) & 0x3)
379 #define HTC_CAL_SEQ(htc) (((htc) >> 18) & 0x3)
380 #define HTC_CSI_STEERING(htc) (((htc) >> 22) & 0x3)
381 #define HTC_NDP_ANN(htc) (((htc) >> 24) & 0x1)
382 #define HTC_AC_CONSTRAINT(htc) (((htc) >> 30) & 0x1)
383 #define HTC_RDG_MORE_PPDU(htc) (((htc) >> 31) & 0x1)
386 * Extract subfields from the key octet in WEP-encrypted frames.
388 #define KEY_OCTET_WEP_KEY(x) (((x) & 0xC0) >> 6)
390 #define KEY_EXTIV 0x20
394 * Bits from the Mesh Flags field
396 #define MESH_FLAGS_ADDRESS_EXTENSION 0x3
398 /* ************************************************************************* */
399 /* Constants used to identify cooked frame types */
400 /* ************************************************************************* */
401 #define MGT_FRAME 0x00 /* Frame type is management */
402 #define CONTROL_FRAME 0x01 /* Frame type is control */
403 #define DATA_FRAME 0x02 /* Frame type is Data */
405 #define DATA_SHORT_HDR_LEN 24
406 #define DATA_LONG_HDR_LEN 30
407 #define MGT_FRAME_HDR_LEN 24 /* Length of Management frame-headers */
410 * COMPOSE_FRAME_TYPE() values for management frames.
412 #define MGT_ASSOC_REQ 0x00 /* association request */
413 #define MGT_ASSOC_RESP 0x01 /* association response */
414 #define MGT_REASSOC_REQ 0x02 /* reassociation request */
415 #define MGT_REASSOC_RESP 0x03 /* reassociation response */
416 #define MGT_PROBE_REQ 0x04 /* Probe request */
417 #define MGT_PROBE_RESP 0x05 /* Probe response */
418 #define MGT_MEASUREMENT_PILOT 0x06 /* Measurement Pilot */
419 #define MGT_BEACON 0x08 /* Beacon frame */
420 #define MGT_ATIM 0x09 /* ATIM */
421 #define MGT_DISASS 0x0A /* Disassociation */
422 #define MGT_AUTHENTICATION 0x0B /* Authentication */
423 #define MGT_DEAUTHENTICATION 0x0C /* Deauthentication */
424 #define MGT_ACTION 0x0D /* Action */
425 #define MGT_ACTION_NO_ACK 0x0E /* Action No Ack */
426 #define MGT_ARUBA_WLAN 0x0F /* Aruba WLAN Specific */
429 * COMPOSE_FRAME_TYPE() values for control frames.
431 #define CTRL_CONTROL_WRAPPER 0x17 /* Control Wrapper */
432 #define CTRL_BLOCK_ACK_REQ 0x18 /* Block ack Request */
433 #define CTRL_BLOCK_ACK 0x19 /* Block ack */
434 #define CTRL_PS_POLL 0x1A /* power-save poll */
435 #define CTRL_RTS 0x1B /* request to send */
436 #define CTRL_CTS 0x1C /* clear to send */
437 #define CTRL_ACKNOWLEDGEMENT 0x1D /* acknowledgement */
438 #define CTRL_CFP_END 0x1E /* contention-free period end */
439 #define CTRL_CFP_ENDACK 0x1F /* contention-free period end/ack */
442 * COMPOSE_FRAME_TYPE() values for data frames.
444 #define DATA 0x20 /* Data */
445 #define DATA_CF_ACK 0x21 /* Data + CF-Ack */
446 #define DATA_CF_POLL 0x22 /* Data + CF-Poll */
447 #define DATA_CF_ACK_POLL 0x23 /* Data + CF-Ack + CF-Poll */
448 #define DATA_NULL_FUNCTION 0x24 /* Null function (no data) */
449 #define DATA_CF_ACK_NOD 0x25 /* CF-Ack (no data) */
450 #define DATA_CF_POLL_NOD 0x26 /* CF-Poll (No data) */
451 #define DATA_CF_ACK_POLL_NOD 0x27 /* CF-Ack + CF-Poll (no data) */
453 #define DATA_QOS_DATA 0x28 /* QoS Data */
454 #define DATA_QOS_DATA_CF_ACK 0x29 /* QoS Data + CF-Ack */
455 #define DATA_QOS_DATA_CF_POLL 0x2A /* QoS Data + CF-Poll */
456 #define DATA_QOS_DATA_CF_ACK_POLL 0x2B /* QoS Data + CF-Ack + CF-Poll */
457 #define DATA_QOS_NULL 0x2C /* QoS Null */
458 #define DATA_QOS_CF_POLL_NOD 0x2E /* QoS CF-Poll (No Data) */
459 #define DATA_QOS_CF_ACK_POLL_NOD 0x2F /* QoS CF-Ack + CF-Poll (No Data) */
462 /* ************************************************************************* */
463 /* Logical field codes (dissector's encoding of fixed fields) */
464 /* ************************************************************************* */
466 FIELD_TIMESTAMP, /* 64-bit timestamp */
467 FIELD_BEACON_INTERVAL, /* 16-bit beacon interval */
468 FIELD_CAP_INFO, /* Add capability information tree */
469 FIELD_AUTH_ALG, /* Authentication algorithm used */
470 FIELD_AUTH_TRANS_SEQ, /* Authentication sequence number */
471 FIELD_CURRENT_AP_ADDR,
476 FIELD_CATEGORY_CODE, /* Management action category */
477 FIELD_ACTION_CODE, /* Management action code */
478 FIELD_DIALOG_TOKEN, /* Management action dialog token */
479 FIELD_WME_ACTION_CODE, /* Management notification action code */
480 FIELD_WME_DIALOG_TOKEN, /* Management notification dialog token */
481 FIELD_WME_STATUS_CODE, /* Management notification setup response status code */
482 FIELD_QOS_ACTION_CODE,
484 FIELD_DLS_ACTION_CODE,
485 FIELD_DST_MAC_ADDR, /* DLS destination MAC address */
486 FIELD_SRC_MAC_ADDR, /* DLS source MAC address */
487 FIELD_DLS_TIMEOUT, /* DLS timeout value */
488 FIELD_SCHEDULE_INFO, /* Schedule Info field */
489 FIELD_ACTION, /* Action field */
490 FIELD_BLOCK_ACK_ACTION_CODE,
493 FIELD_BLOCK_ACK_PARAM,
494 FIELD_BLOCK_ACK_TIMEOUT,
496 FIELD_DELBA_PARAM_SET,
498 FIELD_MEASUREMENT_PILOT_INT,
502 FIELD_TRANSCEIVER_NOISE_FLOOR,
506 FIELD_PCO_PHASE_CNTRL,
507 FIELD_PSMP_PARAM_SET,
511 FIELD_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT,
512 FIELD_HT_INFORMATION,
513 FIELD_HT_ACTION_CODE,
514 FIELD_PA_ACTION_CODE,
515 FIELD_FT_ACTION_CODE,
517 FIELD_TARGET_AP_ADDRESS,
518 FIELD_GAS_COMEBACK_DELAY,
519 FIELD_GAS_FRAGMENT_ID,
520 FIELD_SA_QUERY_ACTION_CODE,
521 FIELD_TRANSACTION_ID,
522 FIELD_TDLS_ACTION_CODE,
523 FIELD_TARGET_CHANNEL,
524 FIELD_REGULATORY_CLASS,
526 FIELD_MULTIHOP_ACTION,
528 FIELD_SELFPROT_ACTION,
529 FIELD_WNM_ACTION_CODE,
530 /* add any new fixed field value above this line */
534 /* ************************************************************************* */
535 /* Logical field codes (IEEE 802.11 encoding of tags) */
536 /* ************************************************************************* */
538 #define TAG_SUPP_RATES 1
539 #define TAG_FH_PARAMETER 2
540 #define TAG_DS_PARAMETER 3
541 #define TAG_CF_PARAMETER 4
543 #define TAG_IBSS_PARAMETER 6
544 #define TAG_COUNTRY_INFO 7
545 #define TAG_FH_HOPPING_PARAMETER 8
546 #define TAG_FH_HOPPING_TABLE 9
547 #define TAG_REQUEST 10
548 #define TAG_QBSS_LOAD 11
549 #define TAG_EDCA_PARAM_SET 12
552 #define TAG_SCHEDULE 15
553 #define TAG_CHALLENGE_TEXT 16
555 #define TAG_POWER_CONSTRAINT 32
556 #define TAG_POWER_CAPABILITY 33
557 #define TAG_TPC_REQUEST 34
558 #define TAG_TPC_REPORT 35
559 #define TAG_SUPPORTED_CHANNELS 36
560 #define TAG_CHANNEL_SWITCH_ANN 37
561 #define TAG_MEASURE_REQ 38
562 #define TAG_MEASURE_REP 39
564 #define TAG_IBSS_DFS 41
565 #define TAG_ERP_INFO 42
566 #define TAG_TS_DELAY 43
567 #define TAG_TCLAS_PROCESS 44
568 #define TAG_HT_CAPABILITY 45 /* IEEE Stc 802.11n/D2.0 */
569 #define TAG_QOS_CAPABILITY 46
570 #define TAG_ERP_INFO_OLD 47 /* IEEE Std 802.11g/D4.0 */
571 #define TAG_RSN_IE 48
573 #define TAG_EXT_SUPP_RATES 50
574 #define TAG_AP_CHANNEL_REPORT 51
575 #define TAG_NEIGHBOR_REPORT 52
577 #define TAG_MOBILITY_DOMAIN 54 /* IEEE Std 802.11r-2008 */
578 #define TAG_FAST_BSS_TRANSITION 55 /* IEEE Std 802.11r-2008 */
579 #define TAG_TIMEOUT_INTERVAL 56 /* IEEE Std 802.11r-2008 */
580 #define TAG_RIC_DATA 57 /* IEEE Std 802.11r-2008 */
582 #define TAG_SUPPORTED_REGULATORY_CLASSES 59 /* IEEE Std 802.11w-2009 */
583 #define TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT 60 /* IEEE Std 802.11w-2009 */
584 #define TAG_HT_INFO 61 /* IEEE Stc 802.11n/D2.0 */
585 #define TAG_SECONDARY_CHANNEL_OFFSET 62 /* IEEE Stc 802.11n/D1.10/D2.0 */
586 #define TAG_TIME_ADV 69 /* IEEE Std 802.11p-2010 */
587 #define TAG_20_40_BSS_CO_EX 72 /* IEEE P802.11n/D6.0 */
588 #define TAG_20_40_BSS_INTOL_CH_REP 73 /* IEEE P802.11n/D6.0 */
589 #define TAG_OVERLAP_BSS_SCAN_PAR 74 /* IEEE P802.11n/D6.0 */
590 #define TAG_RIC_DESCRIPTOR 75 /* IEEE Std 802.11r-2008 */
591 #define TAG_MMIE 76 /* IEEE Std 802.11w-2009 */
592 #define TAG_TIME_ZONE 98 /* IEEE STd 802.11v-2011 */
593 #define TAG_LINK_IDENTIFIER 101 /* IEEE Std 802.11z-2010 */
594 #define TAG_WAKEUP_SCHEDULE 102 /* IEEE Std 802.11z-2010 */
595 #define TAG_CHANNEL_SWITCH_TIMING 104 /* IEEE Std 802.11z-2010 */
596 #define TAG_PTI_CONTROL 105 /* IEEE Std 802.11z-2010 */
597 #define TAG_PU_BUFFER_STATUS 106 /* IEEE Std 802.11z-2010 */
598 #define TAG_INTERWORKING 107 /* IEEE Std 802.11u-2011 */
599 #define TAG_ADVERTISEMENT_PROTOCOL 108 /* IEEE Std 802.11u-2011 */
600 #define TAG_EXPIDITED_BANDWIDTH_REQ 109 /* IEEE Std 802.11u-2011 */
601 #define TAG_QOS_MAP_SET 110 /* IEEE Std 802.11u-2011 */
602 #define TAG_ROAMING_CONSORTIUM 111 /* IEEE Std 802.11u-2011 */
603 #define TAG_EMERGENCY_ALERT_ID 112 /* IEEE Std 802.11u-2011 */
604 #define TAG_MESH_CONFIGURATION 113 /* IEEE Std 802.11s-2011 */
605 #define TAG_MESH_ID 114 /* IEEE Std 802.11s-2011 */
606 #define TAG_MESH_PEERING_MGMT 117 /* IEEE Std 802.11s-2011 */
607 #define TAG_RANN 126 /* IEEE Std 802.11s-2011 */
608 #define TAG_EXTENDED_CAPABILITIES 127 /* IEEE Stc 802.11n/D1.10/D2.0 */
609 #define TAG_AGERE_PROPRIETARY 128
610 #define TAG_MESH_PREQ 130 /* IEEE Std 802.11s-2011 */
611 #define TAG_MESH_PREP 131 /* IEEE Std 802.11s-2011 */
612 #define TAG_MESH_PERR 132 /* IEEE Std 802.11s-2011 */
613 #define TAG_CISCO_CCX1_CKIP 133 /* Cisco Compatible eXtensions */
614 #define TAG_CISCO_UNKNOWN_88 136 /* Cisco Compatible eXtensions? */
615 #define TAG_CISCO_UNKNOWN_95 149 /* Cisco Compatible eXtensions */
616 #define TAG_CISCO_UNKNOWN_96 150 /* Cisco Compatible eXtensions */
617 #define TAG_SYMBOL_PROPRIETARY 173
618 #define TAG_VHT_CAPABILITY 191 /* IEEE Stc 802.11ac/D3.1 */
619 #define TAG_VHT_OPERATION 192 /* IEEE Stc 802.11ac/D3.1 */
620 #define TAG_VENDOR_SPECIFIC_IE 221
622 static const value_string tag_num_vals[] = {
623 { TAG_SSID, "SSID parameter set" },
624 { TAG_SUPP_RATES, "Supported Rates" },
625 { TAG_FH_PARAMETER, "FH Parameter set" },
626 { TAG_DS_PARAMETER, "DS Parameter set" },
627 { TAG_CF_PARAMETER, "CF Parameter set" },
628 { TAG_TIM, "Traffic Indication Map (TIM)" },
629 { TAG_IBSS_PARAMETER, "IBSS Parameter set" },
630 { TAG_COUNTRY_INFO, "Country Information" },
631 { TAG_FH_HOPPING_PARAMETER, "Hopping Pattern Parameters" },
632 { TAG_FH_HOPPING_TABLE, "Hopping Pattern Table" },
633 { TAG_REQUEST, "Request" },
634 { TAG_QBSS_LOAD, "QBSS Load Element" },
635 { TAG_EDCA_PARAM_SET, "EDCA Parameter Set" },
636 { TAG_TSPEC, "Traffic Specification" },
637 { TAG_TCLAS, "Traffic Classification" },
638 { TAG_SCHEDULE, "Schedule" },
639 { TAG_CHALLENGE_TEXT, "Challenge text" },
640 { TAG_POWER_CONSTRAINT, "Power Constraint" },
641 { TAG_POWER_CAPABILITY, "Power Capability" },
642 { TAG_TPC_REQUEST, "TPC Request" },
643 { TAG_TPC_REPORT, "TPC Report" },
644 { TAG_SUPPORTED_CHANNELS, "Supported Channels" },
645 { TAG_CHANNEL_SWITCH_ANN, "Channel Switch Announcement" },
646 { TAG_MEASURE_REQ, "Measurement Request" },
647 { TAG_MEASURE_REP, "Measurement Report" },
648 { TAG_QUIET, "Quiet" },
649 { TAG_IBSS_DFS, "IBSS DFS" },
650 { TAG_ERP_INFO, "ERP Information" },
651 { TAG_TS_DELAY, "TS Delay" },
652 { TAG_TCLAS_PROCESS, "TCLAS Processing" },
653 { TAG_HT_CAPABILITY, "HT Capabilities (802.11n D1.10)" },
654 { TAG_QOS_CAPABILITY, "QoS Capability" },
655 { TAG_ERP_INFO_OLD, "ERP Information" }, /* Reserved... */
656 { TAG_RSN_IE, "RSN Information" },
657 { TAG_EXT_SUPP_RATES, "Extended Supported Rates" },
658 { TAG_AP_CHANNEL_REPORT, "AP Channel Report" },
659 { TAG_NEIGHBOR_REPORT, "Neighbor Report" },
660 { TAG_RCPI, "RCPI" },
661 { TAG_MOBILITY_DOMAIN, "Mobility Domain" },
662 { TAG_FAST_BSS_TRANSITION, "Fast BSS Transition" },
663 { TAG_TIMEOUT_INTERVAL, "Timeout Interval" },
664 { TAG_RIC_DATA, "RIC Data" },
665 { TAG_SUPPORTED_REGULATORY_CLASSES, "Supported Regulatory Classes" },
666 { TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement" },
667 { TAG_HT_INFO, "HT Information (802.11n D1.10)" },
668 { TAG_SECONDARY_CHANNEL_OFFSET, "Secondary Channel Offset (802.11n D1.10)" },
669 { TAG_TIME_ADV, "Time Advertisement" },
670 { TAG_20_40_BSS_CO_EX, "20/40 BSS Coexistence" },
671 { TAG_20_40_BSS_INTOL_CH_REP, "20/40 BSS Intolerant Channel Report" }, /* IEEE P802.11n/D6.0 */
672 { TAG_OVERLAP_BSS_SCAN_PAR, "Overlapping BSS Scan Parameters" }, /* IEEE P802.11n/D6.0 */
673 { TAG_RIC_DESCRIPTOR, "RIC Descriptor" },
674 { TAG_MMIE, "Management MIC" },
675 { TAG_TIME_ZONE, "Time Zone" },
676 { TAG_LINK_IDENTIFIER, "Link Identifier" },
677 { TAG_WAKEUP_SCHEDULE, "Wakeup Schedule" },
678 { TAG_CHANNEL_SWITCH_TIMING, "Channel Switch Timing" },
679 { TAG_PTI_CONTROL, "PTI Control" },
680 { TAG_PU_BUFFER_STATUS, "PU Buffer Status" },
681 { TAG_INTERWORKING, "Interworking" },
682 { TAG_ADVERTISEMENT_PROTOCOL, "Advertisement Protocol"},
683 { TAG_EXPIDITED_BANDWIDTH_REQ, "Expedited Bandwidth Request" },
684 { TAG_QOS_MAP_SET, "QoS Map Set" },
685 { TAG_ROAMING_CONSORTIUM, "Roaming Consortium" },
686 { TAG_EMERGENCY_ALERT_ID, "Emergency Alert Identifier" },
687 { TAG_MESH_CONFIGURATION, "Mesh Configuration" },
688 { TAG_MESH_ID, "Mesh ID" },
689 { TAG_MESH_PEERING_MGMT, "Mesh Peering Management" },
690 { TAG_RANN, "Root Announcement" },
691 { TAG_EXTENDED_CAPABILITIES, "Extended Capabilities" },
692 { TAG_AGERE_PROPRIETARY, "Agere Proprietary" },
693 { TAG_MESH_PREQ, "Path Request" },
694 { TAG_MESH_PREP, "Path Reply" },
695 { TAG_MESH_PERR, "Path Error" },
696 { TAG_CISCO_CCX1_CKIP, "Cisco CCX1 CKIP + Device Name" },
697 { TAG_CISCO_UNKNOWN_88, "Cisco Unknown 88" },
698 { TAG_CISCO_UNKNOWN_95, "Cisco Unknown 95" },
699 { TAG_CISCO_UNKNOWN_96, "Cisco Unknown 96" },
700 { TAG_SYMBOL_PROPRIETARY, "Symbol Proprietary" },
701 { TAG_VHT_CAPABILITY, "VHT Capabilities (IEEE Stc 802.11ac/D3.1)" },
702 { TAG_VHT_OPERATION, "VHT Operation (IEEE Stc 802.11ac/D3.1)" },
703 { TAG_VENDOR_SPECIFIC_IE, "Vendor Specific" },
706 static value_string_ext tag_num_vals_ext = VALUE_STRING_EXT_INIT(tag_num_vals);
708 #define WPA_OUI (const guint8 *) "\x00\x50\xF2"
709 #define RSN_OUI (const guint8 *) "\x00\x0F\xAC"
710 #define WME_OUI (const guint8 *) "\x00\x50\xF2"
711 #define PRE_11N_OUI (const guint8 *) "\x00\x90\x4c" /* 802.11n pre 1 oui */
712 #define WFA_OUI (const guint8 *) "\x50\x6f\x9a"
714 /* WFA vendor specific subtypes */
715 #define WFA_SUBTYPE_P2P 9
719 /* ************************************************************************* */
720 /* Supported Rates (7.3.2.2) */
721 /* ************************************************************************* */
723 static const value_string ieee80211_supported_rates_vals[] = {
764 { 0xFF, "BSS requires support for mandatory features of HT PHY (IEEE 802.11 - Clause 20)" },
767 static value_string_ext ieee80211_supported_rates_vals_ext = VALUE_STRING_EXT_INIT(ieee80211_supported_rates_vals);
769 /* ************************************************************************* */
770 /* 7.3.1.7 Reason Code field */
771 /* ************************************************************************* */
772 static const value_string ieee80211_reason_code[] = {
773 { 1, "Unspecified reason" },
774 { 2, "Previous authentication no longer valid" },
775 { 3, "Deauthenticated because sending STA is leaving (or has left) IBSS or ESS" },
776 { 4, "Disassociated due to inactivity" },
777 { 5, "Disassociated because AP is unable to handle all currently associated STAs" },
778 { 6, "Class 2 frame received from nonauthenticated STA" },
779 { 7, "Class 3 frame received from nonassociated STA" },
780 { 8, "Disassociated because sending STA is leaving (or has left) BSS" },
781 { 9, "STA requesting (re)association is not authenticated with responding STA" },
782 { 10, "Disassociated because the information in the Power Capability element is unacceptable" },
783 { 11, "Disassociated because the information in the Supported Channels element is unacceptable" },
785 { 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" },
786 { 14, "Message integrity code (MIC) failure" },
787 { 15, "4-Way Handshake timeout" },
788 { 16, "Group Key Handshake timeout" },
789 { 17, "Information element in 4-Way Handshake different from (Re)Association Request/Probe Response/Beacon frame" },
790 { 18, "Invalid group cipher" },
791 { 19, "Invalid pairwise cipher" },
792 { 20, "Invalid AKMP" },
793 { 21, "Unsupported RSN information element version" },
794 { 22, "Invalid RSN information element capabilities" },
795 { 23, "IEEE 802.1X authentication failed" },
796 { 24, "Cipher suite rejected because of the security policy" },
797 { 27, "Disassociated because session terminated by SSP request" },
798 { 28, "Disassociated because of lack of SSP roaming agreement" },
799 { 29, "Requested service rejected because of SSP cipher suite or AKM requirement " },
800 { 30, "Requested service not authorized in this location" },
801 { 31, "TS deleted because QoS AP lacks sufficient bandwidth for this QoS STA due to a change in BSS service characteristics or operational mode" },
802 { 32, "Disassociated for unspecified, QoS-related reason" },
803 { 33, "Disassociated because QoS AP lacks sufficient bandwidth for this QoS STA" },
804 { 34, "Disassociated because excessive number of frames need to be acknowledged, but are not acknowledged due to AP transmissions and/or poor channel conditions" },
805 { 35, "Disassociated because STA is transmitting outside the limits of its TXOPs" },
806 { 36, "Requested from peer STA as the STA is leaving the BSS (or resetting)" },
807 { 37, "Requested from peer STA as it does not want to use the mechanism" },
808 { 38, "Requested from peer STA as the STA received frames using the mechanism for which a setup is required" },
809 { 39, "Requested from peer STA due to timeout" },
810 { 45, "Peer STA does not support the requested cipher suite" },
811 { 46, "Disassociated because authorized access limit reached" },
812 { 47, "Disassociated due to external service requirements" },
813 { 52, "SME cancels the mesh peering instance with the reason other than reaching the maximum number of peer mesh STAs" },
814 { 53, "The mesh STA has reached the supported maximum number of peer mesh STAs" },
815 { 54, "The received information violates the Mesh Configuration policy configured in the mesh STA profile" },
816 { 55, "The mesh STA has received a Mesh Peering Close message requesting to close the mesh peering" },
817 { 56, "The mesh STA has re-sent dot11MeshMaxRetries Mesh Peering Open messages, without receiving a Mesh Peering Confirm message" },
818 { 57, "The confirmTimer for the mesh peering instance times out" },
819 { 58, "The mesh STA fails to unwrap the GTK or the values in the wrapped contents do not match" },
820 { 59, "The mesh STA receives inconsistent information about the mesh parameters between Mesh Peering Management frames" },
821 { 60, "The mesh STA fails the authenticated mesh peering exchange because due to failure in selecting either the pairwise ciphersuite or group ciphersuite" },
822 { 61, "The mesh STA does not have proxy information for this external destination" },
823 { 62, "The mesh STA does not have forwarding information for this destination" },
824 { 63, "The mesh STA determines that the link to the next hop of an active path in its forwarding information is no longer usable" },
825 { 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)" },
826 { 65, "The mesh STA performs channel switch to meet regulatory requirements" },
827 { 66, "The mesh STA performs channel switch with unspecified reason" },
830 static value_string_ext ieee80211_reason_code_ext = VALUE_STRING_EXT_INIT(ieee80211_reason_code);
832 /* ************************************************************************* */
833 /* 7.3.1.9 Status Code field */
834 /* ************************************************************************* */
835 static const value_string ieee80211_status_code[] = {
837 { 1, "Unspecified failure" },
838 { 2, "TDLS wakeup schedule rejected but alternative schedule provided" },
839 { 3, "TDLS wakeup schedule rejected" },
840 { 5, "Security disabled" },
841 { 6, "Unacceptable lifetime" },
842 { 7, "Not in same BSS" },
843 { 10, "Cannot support all requested capabilities in the Capability Information field" },
844 { 11, "Reassociation denied due to inability to confirm that association exists" },
845 { 12, "Association denied due to reason outside the scope of this standard" },
846 { 13, "Responding STA does not support the specified authentication algorithm" },
847 { 14, "Received an Authentication frame with authentication transaction sequence number out of expected sequence" },
848 { 15, "Authentication rejected because of challenge failure" },
849 { 16, "Authentication rejected due to timeout waiting for next frame in sequence" },
850 { 17, "Association denied because AP is unable to handle additional associated STAs" },
851 { 18, "Association denied due to requesting STA not supporting all of the data rates in the BSSBasicRateSet parameter" },
852 { 19, "Association denied due to requesting STA not supporting the short preamble option" },
853 { 20, "Association denied due to requesting STA not supporting the PBCC modulation option" },
854 { 21, "Association denied due to requesting STA not supporting the Channel Agility option" },
855 { 22, "Association request rejected because Spectrum Management capability is required" },
856 { 23, "Association request rejected because the information in the Power Capability element is unacceptable" },
857 { 24, "Association request rejected because the information in the Supported Channels element is unacceptable" },
858 { 25, "Association denied due to requesting STA not supporting the Short Slot Time option" },
859 { 26, "Association denied due to requesting STA not supporting the DSSS-OFDM option" },
860 { 27, "Reserved Association denied because the requesting STA does not support HT features" },
861 { 28, "R0KH unreachable" },
862 { 29, "Association denied because the requesting STA does not support the phased coexistence operation (PCO) transition time required by the AP" },
863 { 30, "Association request rejected temporarily; try again later" },
864 { 31, "Robust Management frame policy violation" },
865 { 32, "Unspecified, QoS-related failure" },
866 { 33, "Association denied because QoS AP has insufficient bandwidth to handle another QoS STA" },
867 { 34, "Association denied due to excessive frame loss rates and/or poor conditions on current operating channel" },
868 { 35, "Association (with QoS BSS) denied because the requesting STA does not support the QoS facility" },
870 { 37, "The request has been declined" },
871 { 38, "The request has not been successful as one or more parameters have invalid values" },
872 { 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" },
873 { 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" },
874 { 41, "Invalid group cipher" },
875 { 42, "Invalid pairwise cipher" },
876 { 43, "Invalid AKMP" },
877 { 44, "Unsupported RSN information element version" },
878 { 45, "Invalid RSN information element capabilities" },
879 { 46, "Cipher suite rejected because of security policy" },
880 { 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" },
881 { 48, "Direct link is not allowed in the BSS by policy" },
882 { 49, "The Destination STA is not present within this BSS" },
883 { 50, "The Destination STA is not a QoS STA" },
884 { 51, "Association denied because the ListenInterval is too large" },
885 { 52, "Invalid FT Action frame count" },
886 { 53, "Invalid pairwise master key identifier (PMKID)" },
887 { 54, "Invalid MDIE" },
888 { 55, "Invalid FTIE" },
889 { 59, "GAS Advertisement Protocol not supported" },
890 { 60, "No outstanding GAS request" },
891 { 61, "GAS Response not received from the Advertisement Server" },
892 { 62, "STA timed out waiting for GAS Query Response" },
893 { 63, "GAS Response is larger than query response length limit" },
894 { 64, "Request refused because home network does not support request" },
895 { 65, "Advertisement Server in the network is not currently reachable" },
896 { 67, "Request refused due to permissions received via SSPN interface" },
897 { 68, "Request refused because AP does not support unauthenticated access" },
898 { 72, "Invalid contents of RSNIE" },
899 { 76, "Authentication is rejected because an Anti-Clogging Token is required" },
900 { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
901 { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
902 { 79, "Transmission failure" },
905 static value_string_ext ieee80211_status_code_ext = VALUE_STRING_EXT_INIT(ieee80211_status_code);
907 /* ************************************************************************* */
908 /* Frame types, and their names */
909 /* ************************************************************************* */
910 static const value_string frame_type_subtype_vals[] = {
911 {MGT_ASSOC_REQ, "Association Request"},
912 {MGT_ASSOC_RESP, "Association Response"},
913 {MGT_REASSOC_REQ, "Reassociation Request"},
914 {MGT_REASSOC_RESP, "Reassociation Response"},
915 {MGT_PROBE_REQ, "Probe Request"},
916 {MGT_PROBE_RESP, "Probe Response"},
917 {MGT_MEASUREMENT_PILOT, "Measurement Pilot"},
918 {MGT_BEACON, "Beacon frame"},
920 {MGT_DISASS, "Disassociate"},
921 {MGT_AUTHENTICATION, "Authentication"},
922 {MGT_DEAUTHENTICATION, "Deauthentication"},
923 {MGT_ACTION, "Action"},
924 {MGT_ACTION_NO_ACK, "Action No Ack"},
925 {MGT_ARUBA_WLAN, "Aruba Management"},
927 {CTRL_CONTROL_WRAPPER, "Control Wrapper"},
928 {CTRL_BLOCK_ACK_REQ, "802.11 Block Ack Req"},
929 {CTRL_BLOCK_ACK, "802.11 Block Ack"},
930 {CTRL_PS_POLL, "Power-Save poll"},
931 {CTRL_RTS, "Request-to-send"},
932 {CTRL_CTS, "Clear-to-send"},
933 {CTRL_ACKNOWLEDGEMENT, "Acknowledgement"},
934 {CTRL_CFP_END, "CF-End (Control-frame)"},
935 {CTRL_CFP_ENDACK, "CF-End + CF-Ack (Control-frame)"},
938 {DATA_CF_ACK, "Data + CF-Ack"},
939 {DATA_CF_POLL, "Data + CF-Poll"},
940 {DATA_CF_ACK_POLL, "Data + CF-Ack + CF-Poll"},
941 {DATA_NULL_FUNCTION, "Null function (No data)"},
942 {DATA_CF_ACK_NOD, "Acknowledgement (No data)"},
943 {DATA_CF_POLL_NOD, "CF-Poll (No data)"},
944 {DATA_CF_ACK_POLL_NOD, "CF-Ack/Poll (No data)"},
945 {DATA_QOS_DATA, "QoS Data"},
946 {DATA_QOS_DATA_CF_ACK, "QoS Data + CF-Acknowledgment"},
947 {DATA_QOS_DATA_CF_POLL, "QoS Data + CF-Poll"},
948 {DATA_QOS_DATA_CF_ACK_POLL, "QoS Data + CF-Ack + CF-Poll"},
949 {DATA_QOS_NULL, "QoS Null function (No data)"},
950 {DATA_QOS_CF_POLL_NOD, "QoS CF-Poll (No Data)"},
951 {DATA_QOS_CF_ACK_POLL_NOD, "QoS CF-Ack + CF-Poll (No data)"},
954 static value_string_ext frame_type_subtype_vals_ext = VALUE_STRING_EXT_INIT(frame_type_subtype_vals);
956 /* ************************************************************************* */
957 /* 802.1D Tag Names */
958 /* ************************************************************************* */
959 static const char *qos_tags[8] = {
970 /* ************************************************************************* */
971 /* WME Access Category Names (by 802.1D Tag) */
972 /* ************************************************************************* */
973 static const char *qos_acs[8] = {
984 /* ************************************************************************* */
985 /* WME Access Category Names (by WME ACI) */
986 /* ************************************************************************* */
987 static const value_string wme_acs[] = {
988 { 0, "Best Effort" },
995 /* ************************************************************************* */
996 /* Aruba Management Type */
997 /* ************************************************************************* */
998 static const value_string aruba_mgt_typevals[] = {
1000 { 0x0002, "Probe" },
1002 { 0x0004, "Ageout" },
1003 { 0x0005, "Heartbeat" },
1004 { 0x0006, "Deauth" },
1005 { 0x0007, "Disassoc" },
1006 { 0x0008, "Probe response" },
1007 { 0x0009, "Tunnel update" },
1008 { 0x000A, "Laser beam active" },
1009 { 0x000B, "Client IP" },
1010 { 0x000C, "Laser beam active v2" },
1011 { 0x000D, "AP statistics" },
1014 static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt_typevals);
1016 /*** Begin: Action Fixed Parameter ***/
1017 #define CAT_SPECTRUM_MGMT 0
1020 #define CAT_BLOCK_ACK 3
1021 #define CAT_PUBLIC 4
1023 #define CAT_RADIO_MEASUREMENT 5
1024 #define CAT_FAST_BSS_TRANSITION 6
1026 #define CAT_SA_QUERY 8
1027 #define CAT_PUBLIC_PROTECTED 9
1029 #define CAT_UNPROTECTED_WNM 11
1032 /* per 11s draft 12.0 */
1034 #define CAT_MULTIHOP 14
1035 #define CAT_SELF_PROTECTED 15
1037 #define CAT_MGMT_NOTIFICATION 17
1038 #define CAT_VENDOR_SPECIFIC_PROTECTED 126
1039 #define CAT_VENDOR_SPECIFIC 127
1041 #define CAT_MESH_LINK_METRIC 31
1042 #define CAT_MESH_PATH_SELECTION 32
1043 #define CAT_MESH_INTERWORKING 33
1044 #define CAT_MESH_RESOURCE_COORDINATION 34
1045 #define CAT_MESH_SECURITY_ARCHITECTURE 35
1047 #define SM_ACTION_MEASUREMENT_REQUEST 0
1048 #define SM_ACTION_MEASUREMENT_REPORT 1
1049 #define SM_ACTION_TPC_REQUEST 2
1050 #define SM_ACTION_TPC_REPORT 3
1051 #define SM_ACTION_CHAN_SWITCH_ANNC 4
1052 #define SM_ACTION_EXT_CHAN_SWITCH_ANNC 5
1054 #define SM_ACTION_ADDTS_REQUEST 0
1055 #define SM_ACTION_ADDTS_RESPONSE 1
1056 #define SM_ACTION_DELTS 2
1057 #define SM_ACTION_QOS_SCHEDULE 3
1059 #define SM_ACTION_DLS_REQUEST 0
1060 #define SM_ACTION_DLS_RESPONSE 1
1061 #define SM_ACTION_DLS_TEARDOWN 2
1063 #define BA_ADD_BLOCK_ACK_REQUEST 0
1064 #define BA_ADD_BLOCK_ACK_RESPONSE 1
1065 #define BA_DELETE_BLOCK_ACK 2
1067 #define PA_DSE_ENABLEMENT 1
1068 #define PA_DSE_DEENABLEMENT 2
1069 #define PA_DSE_REG_LOC_ANNOUNCEMENT 3
1070 #define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4
1071 #define PA_DSE_MEASUREMENT_REQUEST 5
1072 #define PA_DSE_MEASUREMENT_REPORT 6
1073 #define PA_MEASUREMENT_PILOT 7
1074 #define PA_DSE_POWER_CONSTRAINT 8
1075 #define PA_VENDOR_SPECIFIC 9
1076 #define PA_GAS_INITIAL_REQUEST 10
1077 #define PA_GAS_INITIAL_RESPONSE 11
1078 #define PA_GAS_COMEBACK_REQUEST 12
1079 #define PA_GAS_COMEBACK_RESPONSE 13
1080 #define PA_TDLS_DISCOVERY_RESPONSE 14
1082 #define HT_ACTION_NOTIFY_CHAN_WIDTH 0
1083 #define HT_ACTION_SM_PWR_SAVE 1
1084 #define HT_ACTION_PSMP_ACTION 2
1085 #define HT_ACTION_SET_PCO_PHASE 3
1086 #define HT_ACTION_MIMO_CSI 4
1087 #define HT_ACTION_MIMO_BEAMFORMING 5
1088 #define HT_ACTION_MIMO_COMPRESSED_BEAMFORMING 6
1089 #define HT_ACTION_ANT_SEL_FEEDBACK 7
1090 #define HT_ACTION_HT_INFO_EXCHANGE 8
1092 /* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */
1093 #define FT_ACTION_REQUEST 1
1094 #define FT_ACTION_RESPONSE 2
1095 #define FT_ACTION_CONFIRM 3
1096 #define FT_ACTION_ACK 4
1098 /* SA Query Action frame codes (IEEE 802.11w-2009, 7.4.9) */
1099 #define SA_QUERY_REQUEST 0
1100 #define SA_QUERY_RESPONSE 1
1102 /* IEEE Std 802.11z-2010, 7.4.11, Table 7-57v1 */
1103 #define TDLS_SETUP_REQUEST 0
1104 #define TDLS_SETUP_RESPONSE 1
1105 #define TDLS_SETUP_CONFIRM 2
1106 #define TDLS_TEARDOWN 3
1107 #define TDLS_PEER_TRAFFIC_INDICATION 4
1108 #define TDLS_CHANNEL_SWITCH_REQUEST 5
1109 #define TDLS_CHANNEL_SWITCH_RESPONSE 6
1110 #define TDLS_PEER_PSM_REQUEST 7
1111 #define TDLS_PEER_PSM_RESPONSE 8
1112 #define TDLS_PEER_TRAFFIC_RESPONSE 9
1113 #define TDLS_DISCOVERY_REQUEST 10
1115 /* 11s draft 12.0, table 7-57v30 */
1116 #define MESH_ACTION_LINK_METRIC_REPORT 0
1117 #define MESH_ACTION_HWMP 1
1118 #define MESH_ACTION_GATE_ANNOUNCE 2
1119 #define MESH_ACTION_CONGESTION_CTL 3
1120 #define MESH_ACTION_MCCA_SETUP_REQUEST 4
1121 #define MESH_ACTION_MCCA_SETUP_REPLY 5
1122 #define MESH_ACTION_MCCA_ADV_REQUEST 6
1123 #define MESH_ACTION_MCCA_ADV 7
1124 #define MESH_ACTION_MCCA_TEARDOWN 8
1125 #define MESH_ACTION_TBTT_ADJ_REQUEST 9
1126 #define MESH_ACTION_TBTT_ADJ_RESPONSE 10
1128 /* 11s draft 12.0, table 7-57v42: Multihop Action field values */
1129 #define MULTIHOP_ACTION_PROXY_UPDATE 0
1130 #define MULTIHOP_ACTION_PROXY_UPDATE_CONF 1
1132 /* 11s draft 12.0, table 7-57v24: Self-protected Action field values */
1133 #define SELFPROT_ACTION_MESH_PEERING_OPEN 1
1134 #define SELFPROT_ACTION_MESH_PEERING_CONFIRM 2
1135 #define SELFPROT_ACTION_MESH_PEERING_CLOSE 3
1136 #define SELFPROT_ACTION_MESH_GROUP_KEY_INFORM 4
1137 #define SELFPROT_ACTION_MESH_GROUP_KEY_ACK 5
1139 /* 11s draft 12.0, table 7-43bj6: Mesh Peering Protocol Identifier field values */
1140 #define MESH_PEERING_PROTO_MGMT 0
1141 #define MESH_PEERING_PROTO_AMPE 1
1142 #define MESH_PEERING_PROTO_VENDOR 255
1144 /* Vendor actions */
1146 #define MRVL_ACTION_MESH_MANAGEMENT 1
1148 #define MRVL_MESH_MGMT_ACTION_RREQ 0
1149 #define MRVL_MESH_MGMT_ACTION_RREP 1
1150 #define MRVL_MESH_MGMT_ACTION_RERR 2
1151 #define MRVL_MESH_MGMT_ACTION_PLDM 3
1153 #define ANQP_INFO_ANQP_QUERY_LIST 256
1154 #define ANQP_INFO_ANQP_CAPAB_LIST 257
1155 #define ANQP_INFO_VENUE_NAME_INFO 258
1156 #define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO 259
1157 #define ANQP_INFO_NETWORK_AUTH_TYPE_INFO 260
1158 #define ANQP_INFO_ROAMING_CONSORTIUM_LIST 261
1159 #define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO 262
1160 #define ANQP_INFO_NAI_REALM_LIST 263
1161 #define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO 264
1162 #define ANQP_INFO_AP_GEOSPATIAL_LOCATION 265
1163 #define ANQP_INFO_AP_CIVIC_LOCATION 266
1164 #define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI 267
1165 #define ANQP_INFO_DOMAIN_NAME_LIST 268
1166 #define ANQP_INFO_EMERGENCY_ALERT_ID_URI 269
1167 #define ANQP_INFO_TDLS_CAPAB_INFO 270
1168 #define ANQP_INFO_EMERGENCY_NAI 271
1169 #define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST 56797
1171 /* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */
1172 static const value_string anqp_info_id_vals[] = {
1173 {ANQP_INFO_ANQP_QUERY_LIST, "ANQP Query list"},
1174 {ANQP_INFO_ANQP_CAPAB_LIST, "ANQP Capability list"},
1175 {ANQP_INFO_VENUE_NAME_INFO, "Venue Name information"},
1176 {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO, "Emergency Call Number information"},
1177 {ANQP_INFO_NETWORK_AUTH_TYPE_INFO,
1178 "Network Authentication Type information"},
1179 {ANQP_INFO_ROAMING_CONSORTIUM_LIST, "Roaming Consortium list"},
1180 {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO,
1181 "IP Address Type Availability information"},
1182 {ANQP_INFO_NAI_REALM_LIST, "NAI Realm list"},
1183 {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO, "3GPP Cellular Network information"},
1184 {ANQP_INFO_AP_GEOSPATIAL_LOCATION, "AP Geospatial Location"},
1185 {ANQP_INFO_AP_CIVIC_LOCATION, "AP Civic Location"},
1186 {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI, "AP Location Public Identifier URI"},
1187 {ANQP_INFO_DOMAIN_NAME_LIST, "Domain Name list"},
1188 {ANQP_INFO_EMERGENCY_ALERT_ID_URI, "Emergency Alert Identifier URI"},
1189 {ANQP_INFO_TDLS_CAPAB_INFO, "TDLS Capability information"},
1190 {ANQP_INFO_EMERGENCY_NAI, "Emergency NAI"},
1191 {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST, "ANQP vendor-specific list"},
1194 static value_string_ext anqp_info_id_vals_ext = VALUE_STRING_EXT_INIT(anqp_info_id_vals);
1196 /* IEEE 802.11v - WNM Action field values */
1199 WNM_EVENT_REPORT = 1,
1200 WNM_DIAGNOSTIC_REQ = 2,
1201 WNM_DIAGNOSTIC_REPORT = 3,
1202 WNM_LOCATION_CFG_REQ = 4,
1203 WNM_LOCATION_CFG_RESP = 5,
1204 WNM_BSS_TRANS_MGMT_QUERY = 6,
1205 WNM_BSS_TRANS_MGMT_REQ = 7,
1206 WNM_BSS_TRANS_MGMT_RESP = 8,
1209 WNM_COLLOCATED_INTERFERENCE_REQ = 11,
1210 WNM_COLLOCATED_INTERFERENCE_REPORT = 12,
1213 WNM_TFS_NOTIFY = 15,
1214 WNM_SLEEP_MODE_REQ = 16,
1215 WNM_SLEEP_MODE_RESP = 17,
1216 WNM_TIM_BROADCAST_REQ = 18,
1217 WNM_TIM_BROADCAST_RESP = 19,
1218 WNM_QOS_TRAFFIC_CAPAB_UPDATE = 20,
1219 WNM_CHANNEL_USAGE_REQ = 21,
1220 WNM_CHANNEL_USAGE_RESP = 22,
1223 WNM_TIMING_MEASUREMENT_REQ = 25,
1224 WNM_NOTIFICATION_REQ = 26,
1225 WNM_NOTIFICATION_RESP = 27
1228 static const value_string wnm_action_codes[] = {
1229 { WNM_EVENT_REQ, "Event Request" },
1230 { WNM_EVENT_REPORT, "Event Report" },
1231 { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" },
1232 { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" },
1233 { WNM_LOCATION_CFG_REQ, "Location Configuration Request" },
1234 { WNM_LOCATION_CFG_RESP, "Location Configuration Response" },
1235 { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" },
1236 { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" },
1237 { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" },
1238 { WNM_FMS_REQ, "FMS Request" },
1239 { WNM_FMS_RESP, "FMS Response" },
1240 { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" },
1241 { WNM_COLLOCATED_INTERFERENCE_REPORT, "Collocated Interference Report" },
1242 { WNM_TFS_REQ, "TFS Request" },
1243 { WNM_TFS_RESP, "TFS Response" },
1244 { WNM_TFS_NOTIFY, "TFS Notify" },
1245 { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" },
1246 { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" },
1247 { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" },
1248 { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" },
1249 { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" },
1250 { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" },
1251 { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" },
1252 { WNM_DMS_REQ, "DMS Request" },
1253 { WNM_DMS_RESP, "DMS Response" },
1254 { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" },
1255 { WNM_NOTIFICATION_REQ, "WNM-Notification Request" },
1256 { WNM_NOTIFICATION_RESP, "WNM-Notification Response" },
1259 static value_string_ext wnm_action_codes_ext = VALUE_STRING_EXT_INIT(wnm_action_codes);
1261 /*** End: Action Fixed Parameter ***/
1263 static const value_string ieee80211_tag_measure_request_type_flags[] = {
1264 {0x00, "Basic Request"},
1265 {0x01, "Clear Channel Assessment (CCA) Request"},
1266 {0x02, "Receive Power Indication (RPI) Histogram Request"},
1267 {0x03, "Channel Load Request"},
1268 {0x04, "Noise Histogram Request"},
1269 {0x05, "Beacon Request"},
1270 {0x06, "Frame Request"},
1271 {0x07, "STA Statistics Request"},
1272 {0x08, "Location Configuration Indication (LCI) Request"},
1273 {0x09, "Transmit Stream Measurement Request"},
1274 {0x0A, "Measurement Pause Request"},
1277 static value_string_ext ieee80211_tag_measure_request_type_flags_ext =
1278 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_type_flags);
1280 static const value_string ieee80211_tag_measure_report_type_flags[] = {
1281 { 0x00, "Basic Report" },
1282 { 0x01, "Clear Channel Assessment (CCA) Report" },
1283 { 0x02, "Receive Power Indication (RPI) Histogram Report" },
1284 { 0x03, "Channel Load Report" },
1285 { 0x04, "Noise Histogram Report" },
1286 { 0x05, "Beacon Report" },
1287 { 0x06, "Frame Report" },
1288 { 0x07, "STA Statistics Report" },
1289 { 0x08, "Location Configuration Information (LCI) Report" },
1290 { 0x09, "Transmit Stream Measurement Report" },
1293 static value_string_ext ieee80211_tag_measure_report_type_flags_ext =
1294 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_report_type_flags);
1296 static const true_false_string ieee80211_tag_measure_report_frame_info_frame_type_flag = {
1297 "Measurement Pilot Frame",
1298 "Beacon/Probe Response Frame"
1301 static const true_false_string ieee80211_tag_measure_map_field_bss_flag = {
1302 "At least one MPDU was received by another BSS or IBSS in the measurement period.",
1303 "No MPDUs were received from another BSS or IBSS in the measurement period."
1306 static const value_string ieee80211_tag_measure_request_measurement_mode_flags[] = {
1307 { 0x00, "Passive" },
1309 { 0x02, "Beacon Table" },
1313 #define MEASURE_REQ_BEACON_SUB_SSID 0
1314 #define MEASURE_REQ_BEACON_SUB_BRI 1
1315 #define MEASURE_REQ_BEACON_SUB_RD 2
1316 #define MEASURE_REQ_BEACON_SUB_REQUEST 10
1317 #define MEASURE_REQ_BEACON_SUB_APCP 51
1318 #define MEASURE_REQ_BEACON_SUB_VS 221
1320 static const value_string ieee80211_tag_measure_request_beacon_sub_id_flags[] = {
1321 { MEASURE_REQ_BEACON_SUB_SSID, "SSID" },
1322 { MEASURE_REQ_BEACON_SUB_BRI, "Beacon Reporting Information" },
1323 { MEASURE_REQ_BEACON_SUB_RD, "Reporting Detail" },
1324 { MEASURE_REQ_BEACON_SUB_REQUEST, "Request" },
1325 { MEASURE_REQ_BEACON_SUB_APCP, "AP Channel Report" },
1326 { MEASURE_REQ_BEACON_SUB_VS, "Vendor Specific" },
1330 static const value_string ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags[] = {
1331 { 0x00, "Report to be issued after each measurement." },
1332 { 0x01, "The measured RCPI level is greater than an absolute threshold." },
1333 { 0x02, "The measured RCPI level is less than an absolute threshold." },
1334 { 0x03, "The measured RSNI level is greater than an absolute threshold." },
1335 { 0x04, "The measured RSNI level is less than an absolute threshold." },
1336 { 0x05, "The measured RCPI level is greater than a threshold defined by an offset from the serving AP's reference RCPI." },
1337 { 0x06, "The measured RCPI level is less than a threshold defined by an offset from the serving AP's reference RCPI." },
1338 { 0x07, "The measured RSNI level is greater than a threshold defined by an offset from the serving AP's reference RSNI." },
1339 { 0x08, "The measured RSNI level is less than a threshold defined by an offset from the serving AP's reference RSNI." },
1340 { 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." },
1341 { 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." },
1342 { 0xfe, "Report not required to be issued" },
1346 static const value_string ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags[] = {
1347 { 0, "No fixed length fields or elements" },
1348 { 1, "All fixed length fields and any requested elements in the Request information element if present" },
1349 { 2, "All fixed length fields and elements (default, used when Reporting Detail subelement is not included in Beacon Request" },
1353 static const value_string ieee80211_tag_measure_request_group_id_flags[] = {
1354 { 0x00, "STA Counters from dot11CountersTable" },
1355 { 0x01, "STA Counters from dot11MacStatistics group" },
1356 { 0x02, "QoS STA Counters for UP0 from dot11QosCountersTable" },
1357 { 0x03, "QoS STA Counters for UP1 from dot11QosCountersTable" },
1358 { 0x04, "QoS STA Counters for UP2 from dot11QosCountersTable" },
1359 { 0x05, "QoS STA Counters for UP3 from dot11QosCountersTable" },
1360 { 0x06, "QoS STA Counters for UP4 from dot11QosCountersTable" },
1361 { 0x07, "QoS STA Counters for UP5 from dot11QosCountersTable" },
1362 { 0x08, "QoS STA Counters for UP6 from dot11QosCountersTable" },
1363 { 0x09, "QoS STA Counters for UP7 from dot11QosCountersTable" },
1364 { 0x0a, "BSS Average Access Delays" },
1365 { 0x0b, "STA Counters from dot11A-MSDU Group" },
1366 { 0x0c, "STA Counters from dot11A-MPDU Group" },
1367 { 0x0d, "STA Counters from dot11 BAR, Channel Width, PSMP Group" },
1368 { 0x0e, "STA Counters from dot11Protection Group" },
1369 { 0x0f, "STBC Group" },
1372 static value_string_ext ieee80211_tag_measure_request_group_id_flags_ext =
1373 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_group_id_flags);
1375 static const value_string ieee80211_tclas_process_flag[] = {
1376 {0x00, "Incoming MSDU's higher layer parameters have to match to the parameters in all associated TCLAS elements."},
1377 {0x01, "Incoming MSDU's higher layer parameters have to match to at least one of the associated TCLAS elements."},
1378 {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."},
1382 static const value_string frame_type[] = {
1383 {MGT_FRAME, "Management frame"},
1384 {CONTROL_FRAME, "Control frame"},
1385 {DATA_FRAME, "Data frame"},
1389 static const value_string tofrom_ds[] = {
1390 {0, "Not leaving DS or network is operating "
1391 "in AD-HOC mode (To DS: 0 From DS: 0)"},
1392 {FLAG_TO_DS, "Frame from STA to DS via an AP (To DS: 1 "
1394 {FLAG_FROM_DS, "Frame from DS to a STA via AP(To DS: 0 "
1396 {FLAG_TO_DS|FLAG_FROM_DS, "WDS (AP to AP) or Mesh (MP to MP) Frame "
1397 "(To DS: 1 From DS: 1)"},
1401 static const true_false_string tods_flag = {
1402 "Frame is entering DS",
1403 "Frame is not entering DS"
1406 static const true_false_string fromds_flag = {
1407 "Frame is exiting DS",
1408 "Frame is not exiting DS"
1411 static const true_false_string more_fragments = {
1412 "More fragments follow",
1413 "This is the last fragment"
1416 static const true_false_string retry_flags = {
1417 "Frame is being retransmitted",
1418 "Frame is not being retransmitted"
1421 static const true_false_string pm_flags = {
1422 "STA will go to sleep",
1426 static const true_false_string md_flags = {
1427 "Data is buffered for STA at AP",
1431 static const true_false_string protected_flags = {
1432 "Data is protected",
1433 "Data is not protected"
1436 static const true_false_string order_flags = {
1438 "Not strictly ordered"
1441 static const true_false_string cf_ess_flags = {
1442 "Transmitter is an AP",
1443 "Transmitter is a STA"
1447 static const true_false_string cf_privacy_flags = {
1448 "AP/STA can support WEP",
1449 "AP/STA cannot support WEP"
1452 static const true_false_string cf_preamble_flags = {
1453 "Short preamble allowed",
1454 "Short preamble not allowed"
1457 static const true_false_string cf_pbcc_flags = {
1458 "PBCC modulation allowed",
1459 "PBCC modulation not allowed"
1462 static const true_false_string cf_agility_flags = {
1463 "Channel agility in use",
1464 "Channel agility not in use"
1467 static const true_false_string short_slot_time_flags = {
1468 "Short slot time in use",
1469 "Short slot time not in use"
1472 static const true_false_string dsss_ofdm_flags = {
1473 "DSSS-OFDM modulation allowed",
1474 "DSSS-OFDM modulation not allowed"
1477 static const true_false_string cf_spec_man_flags = {
1478 "dot11SpectrumManagementRequired TRUE",
1479 "dot11SpectrumManagementRequired FALSE"
1482 static const true_false_string cf_apsd_flags = {
1484 "apsd not implemented"
1487 static const true_false_string cf_del_blk_ack_flags = {
1488 "delayed block ack implemented",
1489 "delayed block ack not implemented"
1492 static const true_false_string cf_imm_blk_ack_flags = {
1493 "immediate block ack implemented",
1494 "immediate block ack not implemented"
1496 static const true_false_string cf_ibss_flags = {
1497 "Transmitter belongs to an IBSS",
1498 "Transmitter belongs to a BSS"
1501 static const true_false_string eosp_flag = {
1502 "End of service period",
1506 static const true_false_string bit4_flag = {
1507 "Bits 8-15 of QoS Control field are Queue Size",
1508 "Bits 8-15 of QoS Control field are TXOP Duration Requested"
1511 static const true_false_string ieee80211_qos_amsdu_present_flag = {
1516 static const value_string sta_cf_pollable[] = {
1517 {0x00, "Station is not CF-Pollable"},
1518 {0x02, "Station is CF-Pollable, "
1519 "not requesting to be placed on the CF-polling list"},
1520 {0x01, "Station is CF-Pollable, "
1521 "requesting to be placed on the CF-polling list"},
1522 {0x03, "Station is CF-Pollable, requesting never to be polled"},
1523 {0x0200, "QSTA requesting association in QBSS"},
1527 static const value_string ap_cf_pollable[] = {
1528 {0x0000, "No point coordinator at AP"},
1529 {0x0002, "Point coordinator at AP for delivery only (no polling)"},
1530 {0x0001, "Point coordinator at AP for delivery and polling"},
1531 {0x0003, "Reserved"},
1532 {0x0200, "QAP (HC) does not use CFP for delivery of unicast data type frames"},
1533 {0x0202, "QAP (HC) uses CFP for delivery, but does not send CF-Polls to non-QoS STAs"},
1534 {0x0201, "QAP (HC) uses CFP for delivery, and sends CF-Polls to non-QoS STAs"},
1535 {0x0203, "Reserved"},
1540 static const value_string auth_alg[] = {
1541 {0x00, "Open System"},
1542 {0x01, "Shared key"},
1543 {0x02, "Fast BSS Transition"},
1544 {0x80, "Network EAP"}, /* Cisco proprietary? */
1548 static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
1549 "Permitted in QoS Data MPDUs",
1553 static const true_false_string ff_block_ack_params_policy_flag = {
1554 "Immediate Block Ack",
1558 static const value_string ff_channel_width_vals[] = {
1559 {0x00, "20 MHz channel width only"},
1560 {0x01, "Any channel width in the STA's Supported Channel Width Set"},
1564 static const true_false_string ff_qos_info_ap_q_ack_flag = {
1569 static const true_false_string ff_qos_info_ap_queue_req_flag = {
1570 "Can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
1571 "Can NOT process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
1574 static const true_false_string ff_qos_info_ap_txop_request_flag = {
1575 "Can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
1576 "Can NOT process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
1579 static const true_false_string ff_qos_info_sta_ac_flag = {
1580 "Trigger-enabled and Delivery-enabled",
1581 "Neither Trigger-enabled nor Delivery-enabled"
1584 static const true_false_string ff_qos_info_sta_q_ack_flag = {
1589 static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
1590 {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
1591 {0x01, "AP may deliver a maximum of two MSDUs and MMPDUs per SP"},
1592 {0x02, "AP may deliver a maximum of four MSDUs and MMPDUs per SP"},
1593 {0x03, "AP may deliver a maximum of six MSDUs and MMPDUs per SP"},
1597 static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
1598 "Can process ACK frames with the More Data bit in the Frame Control field set to 1",
1599 "Can NOT process ACK frames with the More Data bit in the Frame Control field set to 1"
1602 static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
1603 "Dynamic SM Power Save mode",
1604 "Static SM Power Save mode"
1607 static const true_false_string ff_pco_phase_cntrl_flag = {
1612 static const true_false_string ff_psmp_param_set_more_psmp_flag = {
1613 "More PSMP Sequences Follow",
1614 "No PSMP Sequences Follow"
1617 static const value_string ff_mimo_cntrl_nc_index_flags[] = {
1619 {0x01, "2 Columns"},
1620 {0x02, "3 Columns"},
1621 {0x03, "4 Columns"},
1625 static const value_string ff_mimo_cntrl_nr_index_flags[] = {
1633 static const true_false_string ff_mimo_cntrl_channel_width_flag = {
1638 static const true_false_string ff_ht_info_information_request_flag = {
1639 "Requesting HT Information Exchange management action frame",
1640 "Should not send an HT Information Exchange management action frame"
1643 static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
1644 "Transmitting station is intolerant of 40 MHz operation",
1645 "Transmitting station permits 40 MHz operation"
1648 static const true_false_string ff_ht_info_sta_chan_width_flag = {
1653 static const value_string ff_ht_action_flags[] = {
1654 {HT_ACTION_NOTIFY_CHAN_WIDTH, "Notify Channel Width"},
1655 {HT_ACTION_SM_PWR_SAVE, "Spatial Multiplexing (SM) Power Save"},
1656 {HT_ACTION_PSMP_ACTION, "Power Save Multi-Poll (PSMP) action frame"},
1657 {HT_ACTION_SET_PCO_PHASE, "Set PCO Phase"},
1658 {HT_ACTION_MIMO_CSI, "MIMO CSI Matrices"},
1659 {HT_ACTION_MIMO_BEAMFORMING, "MIMO Non-compressed Beamforming"},
1660 {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING, "MIMO Compressed Beamforming"},
1661 {HT_ACTION_ANT_SEL_FEEDBACK, "Antenna Selection Indices Feedback"},
1662 {HT_ACTION_HT_INFO_EXCHANGE, "HT Information Exchange"},
1666 static const value_string ff_mimo_cntrl_grouping_flags[] = {
1667 {0x00, "No Grouping"},
1668 {0x01, "Carrier Groups of 2"},
1669 {0x02, "Carrier Groups of 4"},
1674 static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
1682 static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
1683 {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
1684 {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
1685 {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
1686 {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
1692 static const value_string ff_pa_action_codes[] = {
1693 {PA_DSE_ENABLEMENT, "DSE enablement"},
1694 {PA_DSE_DEENABLEMENT, "DSE deenablement"},
1695 {PA_DSE_REG_LOC_ANNOUNCEMENT, "DSE Registered Location Announcement"},
1696 {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement"},
1697 {PA_DSE_MEASUREMENT_REQUEST, "DSE measurement request"},
1698 {PA_DSE_MEASUREMENT_REPORT, "DSE measurement report"},
1699 {PA_MEASUREMENT_PILOT, "Measurement Pilot"},
1700 {PA_DSE_POWER_CONSTRAINT, "DSE power constraint"},
1701 {PA_VENDOR_SPECIFIC, "Vendor Specific"},
1702 {PA_GAS_INITIAL_REQUEST, "GAS Initial Request"},
1703 {PA_GAS_INITIAL_RESPONSE, "GAS Initial Response"},
1704 {PA_GAS_COMEBACK_REQUEST, "GAS Comeback Request"},
1705 {PA_GAS_COMEBACK_RESPONSE, "GAS Comeback Response"},
1706 {PA_TDLS_DISCOVERY_RESPONSE, "TDLS Discovery Response"},
1709 static value_string_ext ff_pa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_pa_action_codes);
1711 static const value_string category_codes[] = {
1712 {CAT_SPECTRUM_MGMT, "Spectrum Management (SM)"},
1713 {CAT_QOS, "Quality of Service (QoS)"},
1714 {CAT_DLS, "Direct-Link Setup (DLS)"},
1715 {CAT_BLOCK_ACK, "Block Ack"},
1716 {CAT_PUBLIC, "Public Action"},
1717 {CAT_RADIO_MEASUREMENT, "Radio Measurement"},
1718 {CAT_FAST_BSS_TRANSITION, "Fast BSS Transition"},
1719 {CAT_HT, "High Throughput"},
1720 {CAT_SA_QUERY, "SA Query"},
1721 {CAT_PUBLIC_PROTECTED, "Protected Dual of Public Action"},
1723 {CAT_UNPROTECTED_WNM, "Unprotected WNM"},
1726 {CAT_MULTIHOP, "Multihop"},
1727 {CAT_SELF_PROTECTED, "Self-protected"},
1728 {CAT_MGMT_NOTIFICATION, "Management Notification"},
1729 {CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected"},
1730 {CAT_VENDOR_SPECIFIC, "Vendor Specific"},
1732 {0x80 | CAT_SPECTRUM_MGMT, "Spectrum Management (SM) (error)"},
1733 {0x80 | CAT_QOS, "Quality of Service (QoS (error))"},
1734 {0x80 | CAT_DLS, "Direct-Link Setup (DLS) (error)"},
1735 {0x80 | CAT_BLOCK_ACK, "Block Ack (error)"},
1736 {0x80 | CAT_PUBLIC, "Public Action (error)"},
1737 {0x80 | CAT_RADIO_MEASUREMENT, "Radio Measurement (error)"},
1738 {0x80 | CAT_FAST_BSS_TRANSITION, "Fast BSS Transition (error)"},
1739 {0x80 | CAT_HT, "High Throughput (error)"},
1740 {0x80 | CAT_SA_QUERY, "SA Query (error)"},
1741 {0x80 | CAT_PUBLIC_PROTECTED, "Protected Dual of Public Action (error)"},
1742 {0x80 | CAT_WNM, "WNM (error)"},
1743 {0x80 | CAT_UNPROTECTED_WNM, "Unprotected WNM (error)"},
1744 {0x80 | CAT_TDLS, "TDLS (error)"},
1745 {0x80 | CAT_MESH, "Mesh (error)"},
1746 {0x80 | CAT_MULTIHOP, "Multihop (error)"},
1747 {0x80 | CAT_SELF_PROTECTED, "Self-protected (error)"},
1748 {0x80 | CAT_MGMT_NOTIFICATION, "Management Notification (error)"},
1749 {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected (error)"},
1750 {0x80 | CAT_VENDOR_SPECIFIC, "Vendor Specific (error)"},
1753 static value_string_ext category_codes_ext = VALUE_STRING_EXT_INIT(category_codes);
1755 static const value_string action_codes[] = {
1756 {SM_ACTION_MEASUREMENT_REQUEST, "Measurement Request"},
1757 {SM_ACTION_MEASUREMENT_REPORT, "Measurement Report"},
1758 {SM_ACTION_TPC_REQUEST, "TPC Request"},
1759 {SM_ACTION_TPC_REPORT, "TPC Report"},
1760 {SM_ACTION_CHAN_SWITCH_ANNC, "Channel Switch Announcement"},
1764 static const value_string vendor_action_types_mrvl[] = {
1765 {MRVL_ACTION_MESH_MANAGEMENT, "Mesh Management"},
1769 static const value_string mesh_mgt_action_codes_mrvl[] = {
1770 {MRVL_MESH_MGMT_ACTION_RREQ, "Route Request"},
1771 {MRVL_MESH_MGMT_ACTION_RREP, "Route Response"},
1772 {MRVL_MESH_MGMT_ACTION_RERR, "Route Error"},
1773 {MRVL_MESH_MGMT_ACTION_PLDM, "Peer Link Down"},
1777 static const value_string mesh_path_selection_codes[] = {
1778 {0x0, "Hybrid Wireless Mesh Protocol"},
1782 static const value_string mesh_metric_codes[] = {
1783 {0x0, "Airtime Link Metric"},
1787 static const value_string wme_action_codes[] = {
1788 {0x00, "Setup request"},
1789 {0x01, "Setup response"},
1794 static const value_string wme_status_codes[] = {
1795 {0x00, "Admission accepted"},
1796 {0x01, "Invalid parameters"},
1801 static const value_string mesh_action[] = {
1802 {MESH_ACTION_LINK_METRIC_REPORT, "Mesh Link Metric Report"},
1803 {MESH_ACTION_HWMP, "HWMP Mesh Path Selection"},
1804 {MESH_ACTION_GATE_ANNOUNCE, "Gate Announcement"},
1805 {MESH_ACTION_CONGESTION_CTL, "Congestion Control Notification"},
1806 {MESH_ACTION_MCCA_SETUP_REQUEST, "MCCA Setup Request"},
1807 {MESH_ACTION_MCCA_SETUP_REPLY, "MCCA Setup Reply"},
1808 {MESH_ACTION_MCCA_ADV_REQUEST, "MCCA Advertisement Request"},
1809 {MESH_ACTION_MCCA_ADV, "MCCA Advertisement"},
1810 {MESH_ACTION_MCCA_TEARDOWN, "MCCA Teardown"},
1811 {MESH_ACTION_TBTT_ADJ_REQUEST, "TBTT Adjustment Request"},
1812 {MESH_ACTION_TBTT_ADJ_RESPONSE, "TBTT Adjustment Response"},
1815 static value_string_ext mesh_action_ext = VALUE_STRING_EXT_INIT(mesh_action);
1817 static const value_string multihop_action[] = {
1818 {MULTIHOP_ACTION_PROXY_UPDATE, "Proxy Update"},
1819 {MULTIHOP_ACTION_PROXY_UPDATE_CONF, "Proxy Update Confirmation"},
1823 static const value_string selfprot_action[] = {
1824 {SELFPROT_ACTION_MESH_PEERING_OPEN, "Mesh Peering Open"},
1825 {SELFPROT_ACTION_MESH_PEERING_CONFIRM, "Mesh Peering Confirm"},
1826 {SELFPROT_ACTION_MESH_PEERING_CLOSE, "Mesh Peering Close"},
1827 {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM, "Mesh Group Key Inform"},
1828 {SELFPROT_ACTION_MESH_GROUP_KEY_ACK, "Mesh Group Key Ack"},
1832 static const value_string mesh_peering_proto_ids[] = {
1833 {MESH_PEERING_PROTO_MGMT, "Mesh peering management protocol"},
1834 {MESH_PEERING_PROTO_AMPE, "Authenticated mesh peering exchange protocol"},
1835 {MESH_PEERING_PROTO_VENDOR, "Vendor specific"},
1839 static const true_false_string hwmp_targ_usn_flags = {
1840 "[USN = 1] Target Sequence Number Unknown at Originator",
1841 "[USN = 0] Target Sequence Number Known at Originator"
1844 static const true_false_string hwmp_targ_to_flags = {
1845 "[TO = 1] Only Target Will Respond",
1846 "[TO = 0] Intermediate Nodes May Respond"
1849 static const value_string ack_policy[] = {
1850 {0x00, "Normal Ack"},
1852 {0x02, "No explicit acknowledgment"},
1853 {0x03, "Block Ack"},
1857 static const value_string qos_action_codes[] = {
1858 {SM_ACTION_ADDTS_REQUEST, "ADDTS Request"},
1859 {SM_ACTION_ADDTS_RESPONSE, "ADDTS Response"},
1860 {SM_ACTION_DELTS, "DELTS"},
1861 {SM_ACTION_QOS_SCHEDULE, "Schedule"},
1865 static const value_string ba_action_codes[] = {
1866 {BA_ADD_BLOCK_ACK_REQUEST, "Add Block Ack Request"},
1867 {BA_ADD_BLOCK_ACK_RESPONSE, "Add Block Ack Response"},
1868 {BA_DELETE_BLOCK_ACK, "Delete Block Ack"},
1872 static const value_string dls_action_codes[] = {
1873 {SM_ACTION_DLS_REQUEST, "DLS Request"},
1874 {SM_ACTION_DLS_RESPONSE, "DLS Response"},
1875 {SM_ACTION_DLS_TEARDOWN, "DLS Teardown"},
1879 static const value_string tsinfo_type[] = {
1880 {0x0, "Aperiodic or unspecified Traffic"},
1881 {0x1, "Periodic Traffic"},
1885 static const value_string tsinfo_direction[] = {
1888 {0x02, "Direct link"},
1889 {0x03, "Bidirectional link"},
1893 static const value_string tsinfo_access[] = {
1901 static const value_string qos_up[] = {
1902 {0x00, "Best Effort"},
1903 {0x01, "Background"},
1905 {0x03, "Excellent Effort"},
1906 {0x04, "Controlled Load"},
1909 {0x07, "Network Control"},
1913 static const value_string classifier_type[] = {
1914 {0x00, "Ethernet parameters"},
1915 {0x01, "TCP/UDP IP parameters"},
1916 {0x02, "IEEE 802.1D/Q parameters"},
1920 static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
1921 "Immediate Acknowledgement Required",
1922 "Sender Does Not Require Immediate Acknowledgement"
1925 static const value_string ieee80211_block_ack_request_type_flags[] = {
1926 {0x00, "Basic Block Ack Request"},
1928 {0x02, "Compressed Block Ack Request"},
1929 {0x03, "Multi-TID Block Ack Request"},
1933 static const value_string ieee80211_block_ack_type_flags[] = {
1934 {0x00, "Basic Block Ack"},
1936 {0x02, "Compressed Block"},
1937 {0x03, "Multi-TID Block"},
1941 static const value_string ft_action_codes[] = {
1942 {FT_ACTION_REQUEST, "FT Request"},
1943 {FT_ACTION_RESPONSE, "FT Response"},
1944 {FT_ACTION_CONFIRM, "FT Confirm"},
1945 {FT_ACTION_ACK, "FT Ack"},
1949 static const value_string sa_query_action_codes[] = {
1950 {SA_QUERY_REQUEST, "SA Query Request"},
1951 {SA_QUERY_RESPONSE, "SA Query Response"},
1955 static const value_string ieee80211_data_encap_payload_types[] = {
1956 {1, "Remote Request/Response"},
1961 static const true_false_string qos_info_field_qack_flags = {
1962 "STAs/APs MIB attribute dot11QAckOptionImplemented is true",
1963 "STAs/APs MIB attribute dot11QAckOptionImplemented is false"
1966 static const true_false_string qos_info_field_more_data_ack_flags = {
1967 "STA can process Ack frames with More Data bit and will remain in the awake state.",
1968 "STA cannot process Ack frames with More Data bit in Frame Control field."
1971 static const true_false_string qos_info_field_queue_req_flags = {
1972 "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
1973 "AP cannot process Queue Size subfield in QoS data frames."
1976 /* 7.3.1.17 Table 19b-Settings of the Max SP Length subfield */
1977 static const value_string qos_info_field_max_sp_length_flags[] = {
1978 { 0x0, "QAP may deliver all buffered MSDUs and MMPDUs." },
1979 { 0x2, "QAP may deliver a maximum of two MSDUs and MMPDUs per SP." },
1980 { 0x1, "QAP may deliver a maximum of four MSDUs and MMPDUs per SP." },
1981 { 0x3, "QAP may deliver a maximum of six MSDUs and MMPDUs per SP." },
1985 static const true_false_string rsn_preauth_flags = {
1986 "Transmitter supports pre-authentication",
1987 "Transmitter does not support pre-authentication"
1990 static const true_false_string rsn_no_pairwise_flags = {
1991 "Transmitter cannot support WEP default key 0 simultaneously with "
1993 "Transmitter can support WEP default key 0 simultaneously with "
1997 static const value_string rsn_cap_replay_counter[] = {
1998 {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
1999 {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
2000 {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
2001 {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
2005 static const true_false_string ht_ldpc_coding_flag = {
2006 "Transmitter supports receiving LDPC coded packets",
2007 "Transmitter does not support receiving LDPC coded packets"
2010 static const true_false_string ht_chan_width_flag = {
2011 "Transmitter supports 20MHz and 40MHz operation",
2012 "Transmitter only supports 20MHz operation"
2015 static const value_string ht_sm_pwsave_flag[] = {
2016 {0x00, "Static SM Power Save mode"},
2017 {0x01, "Dynamic SM Power Save mode"},
2019 {0x03, "SM Power Save disabled"},
2023 static const true_false_string ht_green_flag = {
2024 "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
2025 "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
2028 static const value_string ht_rx_stbc_flag[] = {
2029 {0x00, "No Rx STBC support"},
2030 {0x01, "Rx support of one spatial stream"},
2031 {0x02, "Rx support of one and two spatial streams"},
2032 {0x03, "Rx support of one, two, and three spatial streams"},
2036 /* IEEE Stc 802.11ac/D3.1 */
2038 static const value_string vht_max_mpdu_length_flag[] = {
2039 {0x00, "3895 Octets"},
2040 {0x01, "7991 Octets"},
2041 {0x02, "11454 Octets"},
2046 static const value_string vht_supported_chan_width_set_flag[] = {
2047 {0x00, "Neither 160MHz nor 80+80 supported"},
2048 {0x01, "160MHz supported"},
2049 {0x02, "160MHz and 80+80 Supported"},
2054 static const value_string vht_rx_stbc_flag[] = {
2056 {0x01, "1 Spatial Stream Supported"},
2057 {0x02, "1 to 2 Spatial Stream Supported"},
2058 {0x03, "1 to 3 Spatial Stream Supported"},
2059 {0x04, "1 to 4 Spatial Stream Supported"},
2060 {0x02, "160MHz and 80+80 Supported"},
2067 static const value_string num_plus_one_3bit_flag[] = {
2079 static const value_string vht_max_ampdu_flag[] = {
2087 {0x07, "1,048,575"},
2091 static const value_string vht_link_adapt_flag[] = {
2092 {0x00, "No Feedback"},
2093 {0x01, "Reserved (logically only solicited feedback)"},
2094 {0x02, "Unsolicited feedback only"},
2095 {0x03, "Both (can provide unsolicited feedback and respond to VHT MRQ)"},
2099 static const value_string vht_supported_mcs_flag[] = {
2103 {0x03, "Not Supported"},
2107 static const value_string vht_op_channel_width_flag[] = {
2108 {0x00, "20 MHz or 40 MHz"},
2111 {0x03, "80+80 MHz"},
2117 static const true_false_string ht_delayed_block_ack_flag = {
2118 "Transmitter supports HT-Delayed BlockAck",
2119 "Transmitter does not support HT-Delayed BlockAck"
2122 static const true_false_string ht_max_amsdu_flag = {
2127 static const true_false_string ht_dss_cck_40_flag = {
2128 "Will/Can use DSSS/CCK in 40 MHz",
2129 "Won't/Can't use of DSSS/CCK in 40 MHz"
2132 static const true_false_string ht_psmp_flag = {
2133 "Will/Can support PSMP operation",
2134 "Won't/Can't support PSMP operation"
2137 static const true_false_string ht_40_mhz_intolerant_flag = {
2138 "Use of 40 MHz transmissions restricted/disallowed",
2139 "Use of 40 MHz transmissions unrestricted/allowed"
2142 static const value_string ampduparam_mpdu_start_spacing_flags[] = {
2143 {0x00, "no restriction"},
2144 {0x01, "1/4 [usec]"},
2145 {0x02, "1/2 [usec]"},
2150 {0x07, "16 [usec]"},
2154 static const true_false_string mcsset_tx_mcs_set_defined_flag = {
2159 static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
2164 static const value_string mcsset_tx_max_spatial_streams_flags[] = {
2165 {0x00, "1 spatial stream"},
2166 {0x01, "2 spatial streams"},
2167 {0x02, "3 spatial streams"},
2168 {0x03, "4 spatial streams"},
2172 static const value_string htex_transtime_flags[] = {
2173 {0x00, "No Transition"},
2180 static const value_string htex_mcs_flags[] = {
2181 {0x00, "STA does not provide MCS feedback"},
2183 {0x02, "STA provides only unsolicited MCS feedback"},
2184 {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
2188 static const value_string txbf_calib_flag[] = {
2189 {0x00, "incapable"},
2190 {0x01, "Limited involvement, cannot initiate"},
2191 {0x02, "Limited involvement, can initiate"},
2192 {0x03, "Fully capable"},
2196 static const value_string txbf_feedback_flags[] = {
2197 {0x00, "not supported"},
2198 {0x01, "delayed feedback capable"},
2199 {0x02, "immediate feedback capable"},
2200 {0x03, "delayed and immediate feedback capable"},
2204 static const value_string txbf_antenna_flags[] = {
2205 {0x00, "1 TX antenna sounding"},
2206 {0x01, "2 TX antenna sounding"},
2207 {0x02, "3 TX antenna sounding"},
2208 {0x03, "4 TX antenna sounding"},
2212 static const value_string txbf_csi_max_rows_bf_flags[] = {
2213 {0x00, "1 row of CSI"},
2214 {0x01, "2 rows of CSI"},
2215 {0x02, "3 rows of CSI"},
2216 {0x03, "4 rows of CSI"},
2220 static const value_string txbf_chan_est_flags[] = {
2221 {0x00, "1 space time stream"},
2222 {0x01, "2 space time streams"},
2223 {0x02, "3 space time streams"},
2224 {0x03, "4 space time streams"},
2228 static const value_string txbf_min_group_flags[] = {
2229 {0x00, "No grouping supported"},
2230 {0x01, "Groups of 1,2 supported"},
2231 {0x02, "Groups of 1,4 supported"},
2232 {0x03, "Groups of 1,2,4 supported"},
2236 static const value_string hta_ext_chan_offset_flag[] = {
2237 {0x00, "No Extension Channel"},
2238 {0x01, "Extension Channel above control channel"},
2239 {0x02, "Undefined"},
2240 {0x03, "Extension Channel below control channel"},
2244 static const true_false_string hta_rec_tx_width_flag = {
2245 "Any channel width enabled",
2246 "Use 20MHz channel (control)"
2249 static const true_false_string hta_rifs_mode_flag = {
2250 "Use of RIFS permitted",
2251 "Use of RIFS prohibited"
2254 static const true_false_string hta_controlled_access_flag = {
2259 static const value_string hta_service_interval_flag[] = {
2271 static const value_string hta_operating_mode_flag[] = {
2272 {0x00, "Pure HT, no protection"},
2273 {0x01, "There may be non-HT devices (control & ext channel)"},
2274 {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
2275 {0x03, "Mixed: no non-HT is associated, protect on"},
2279 static const true_false_string hta_non_gf_devices_flag = {
2280 "All HT devices associated are GF capable",
2281 "One or More HT devices are not GF capable"
2284 static const true_false_string hta_dual_stbc_protection_flag = {
2285 "Dual CTS protections is used",
2286 "Regular use of RTS/CTS"
2289 static const true_false_string hta_secondary_beacon_flag = {
2294 static const true_false_string hta_lsig_txop_protection_flag = {
2299 static const true_false_string hta_pco_active_flag = {
2300 "PCO is activated in the BSS",
2301 "PCO is not activated in the BSS"
2304 static const true_false_string hta_pco_phase_flag = {
2305 "Switch to 20MHz phase/keep 20MHz",
2306 "Switch to 40MHz phase/keep 40MHz"
2309 static const value_string ht_info_secondary_channel_offset_flags[] = {
2310 {0x00, "No secondary channel"},
2311 {0x01, "Secondary channel is above the primary channel"},
2313 {0x03, "Secondary channel is below the primary channel"},
2317 static const true_false_string ht_info_channel_width_flag = {
2318 "Channel of any width supported",
2319 "20 MHz channel width only"
2322 static const true_false_string ht_info_rifs_mode_flag = {
2327 static const true_false_string ht_info_psmp_stas_only_flag = {
2328 "Association requests are accepted from only PSMP capable STA",
2329 "Association requests are accepted regardless of PSMP capability"
2332 static const value_string ht_info_service_interval_granularity_flags[] = {
2344 static const value_string ht_info_operating_mode_flags[] = {
2345 {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"},
2346 {0x01, "HT non-member protection mode"},
2347 {0x02, "Only HT STAs in the BSS, however, there exists at least one 20 MHz STA"},
2348 {0x03, "HT mixed mode"},
2352 static const true_false_string ht_info_non_greenfield_sta_present_flag = {
2353 "One or more associated STAs are not greenfield capable",
2354 "All associated STAs are greenfield capable"
2357 static const true_false_string ht_info_transmit_burst_limit_flag = {
2358 "2.4 GHz - 6.16 ms | All other bands - 3.08 ms",
2362 static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
2363 "Use of protection for non-HT STAs by overlapping BSSs is needed",
2364 "Use of protection for non-HT STAs by overlapping BSSs is not needed"
2367 static const true_false_string ht_info_dual_beacon_flag = {
2368 "AP transmits a secondary beacon",
2369 "No second beacon is transmitted"
2372 static const true_false_string ht_info_dual_cts_protection_flag = {
2377 static const true_false_string ht_info_secondary_beacon_flag = {
2382 static const true_false_string ht_info_lsig_txop_protection_full_support_flag = {
2383 "All HT STAs in the BSS support L-SIG TXOP protection",
2384 "One or more HT STAs in the BSS do not support L-SIG TXOP protection"
2387 static const true_false_string ht_info_pco_phase_flag = {
2388 "Switch to or continue 40 MHz phase",
2389 "Switch to or continue 20 MHz phase"
2392 static const true_false_string htc_lac_trq_flag = {
2393 "Want sounding PPDU",
2394 "Don't want sounding PPDU"
2397 static const true_false_string htc_lac_mai_mrq_flag = {
2398 "MCS feedback requested",
2399 "No MCS feedback requested"
2402 static const value_string ieee80211_htc_lac_asel_command_flags[] = {
2403 {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
2404 {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
2405 {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
2406 {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
2407 {0x04, "Sounding Label"},
2408 {0x05, "No feedback, ASEL training failure"},
2409 {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
2414 static const value_string ieee80211_htc_cal_pos_flags[] = {
2415 {0x00, "Not a calibration frame"},
2416 {0x01, "Calibration Start"},
2417 {0x02, "Sounding Response"},
2418 {0x03, "Sounding Complete"},
2422 static const true_false_string ieee80211_htc_ndp_announcement_flag = {
2424 "No NDP will follow"
2427 static const value_string ieee80211_htc_csi_steering_flags[] = {
2428 {0x00, "No feedback required"},
2430 {0x02, "Non-compressed Beamforming Feedback Matrix"},
2431 {0x03, "Compressed Beamforming Feedback Matrix"},
2435 static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
2436 {0x00, "No Secondary Channel"},
2437 {0x01, "Above Primary Channel"},
2439 {0x03, "Below Primary Channel"},
2443 static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
2444 {0x00, "Frames may be transmitted before the channel switch has been completed"},
2445 {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
2449 static const value_string service_interval_granularity_vals[] = {
2461 static const value_string wep_type_vals[] = {
2462 { AIRPDCAP_KEY_TYPE_WEP, STRING_KEY_TYPE_WEP },
2463 { AIRPDCAP_KEY_TYPE_WPA_PWD, STRING_KEY_TYPE_WPA_PWD },
2464 { AIRPDCAP_KEY_TYPE_WPA_PSK, STRING_KEY_TYPE_WPA_PSK },
2468 static int proto_wlan = -1;
2469 static int proto_aggregate = -1;
2470 static packet_info * g_pinfo;
2471 static gboolean ieee80211_tvb_invalid = FALSE;
2473 /* ************************************************************************* */
2474 /* Header field info values for FC-field */
2475 /* ************************************************************************* */
2476 static int hf_ieee80211_fc_field = -1;
2477 static int hf_ieee80211_fc_proto_version = -1;
2478 static int hf_ieee80211_fc_frame_type = -1;
2479 static int hf_ieee80211_fc_frame_subtype = -1;
2480 static int hf_ieee80211_fc_frame_type_subtype = -1;
2482 static int hf_ieee80211_fc_flags = -1;
2483 static int hf_ieee80211_fc_to_ds = -1;
2484 static int hf_ieee80211_fc_from_ds = -1;
2485 static int hf_ieee80211_fc_data_ds = -1;
2487 static int hf_ieee80211_fc_more_frag = -1;
2488 static int hf_ieee80211_fc_retry = -1;
2489 static int hf_ieee80211_fc_pwr_mgt = -1;
2490 static int hf_ieee80211_fc_more_data = -1;
2491 static int hf_ieee80211_fc_protected = -1;
2492 static int hf_ieee80211_fc_order = -1;
2494 typedef struct retransmit_key {
2497 guint16 seq_control;
2501 static GHashTable *fc_analyse_retransmit_table = NULL;
2502 static GHashTable *fc_first_frame_table = NULL;
2504 static int hf_ieee80211_fc_analysis_retransmission = -1;
2505 static int hf_ieee80211_fc_analysis_retransmission_frame = -1;
2507 /* ************************************************************************* */
2508 /* Header values for Duration/ID field */
2509 /* ************************************************************************* */
2510 static int hf_ieee80211_did_duration = -1;
2511 static int hf_ieee80211_assoc_id = -1;
2513 /* ************************************************************************* */
2514 /* Header values for different address-fields (all 4 of them) */
2515 /* ************************************************************************* */
2516 static int hf_ieee80211_addr_da = -1; /* Destination address subfield */
2517 static int hf_ieee80211_addr_sa = -1; /* Source address subfield */
2518 static int hf_ieee80211_addr_ra = -1; /* Receiver address subfield */
2519 static int hf_ieee80211_addr_ta = -1; /* Transmitter address subfield */
2520 static int hf_ieee80211_addr_bssid = -1; /* address is bssid */
2522 static int hf_ieee80211_addr = -1; /* Source or destination address subfield */
2525 /* ************************************************************************* */
2526 /* Header values for QoS control field */
2527 /* ************************************************************************* */
2528 static int hf_ieee80211_qos_tid = -1;
2529 static int hf_ieee80211_qos_priority = -1;
2530 static int hf_ieee80211_qos_ack_policy = -1;
2531 static int hf_ieee80211_qos_amsdu_present = -1;
2532 static int hf_ieee80211_qos_eosp = -1;
2533 static int hf_ieee80211_qos_bit4 = -1;
2534 static int hf_ieee80211_qos_txop_limit = -1;
2535 static int hf_ieee80211_qos_buf_state_indicated = -1;
2536 static int hf_ieee80211_qos_highest_pri_buf_ac = -1;
2537 static int hf_ieee80211_qos_qap_buf_load = -1;
2538 static int hf_ieee80211_qos_txop_dur_req = -1;
2539 static int hf_ieee80211_qos_queue_size = -1;
2541 /* ************************************************************************* */
2542 /* Header values for HT control field (+HTC) */
2543 /* ************************************************************************* */
2544 /* 802.11nD-1.10 & 802.11nD-2.0 7.1.3.5a */
2545 static int hf_ieee80211_htc = -1;
2546 static int hf_ieee80211_htc_lac = -1;
2547 static int hf_ieee80211_htc_lac_reserved = -1;
2548 static int hf_ieee80211_htc_lac_trq = -1;
2549 static int hf_ieee80211_htc_lac_mai_aseli = -1;
2550 static int hf_ieee80211_htc_lac_mai_mrq = -1;
2551 static int hf_ieee80211_htc_lac_mai_msi = -1;
2552 static int hf_ieee80211_htc_lac_mai_reserved = -1;
2553 static int hf_ieee80211_htc_lac_mfsi = -1;
2554 static int hf_ieee80211_htc_lac_mfb = -1;
2555 static int hf_ieee80211_htc_lac_asel_command = -1;
2556 static int hf_ieee80211_htc_lac_asel_data = -1;
2557 static int hf_ieee80211_htc_cal_pos = -1;
2558 static int hf_ieee80211_htc_cal_seq = -1;
2559 static int hf_ieee80211_htc_reserved1 = -1;
2560 static int hf_ieee80211_htc_csi_steering = -1;
2561 static int hf_ieee80211_htc_ndp_announcement = -1;
2562 static int hf_ieee80211_htc_reserved2 = -1;
2563 static int hf_ieee80211_htc_ac_constraint = -1;
2564 static int hf_ieee80211_htc_rdg_more_ppdu = -1;
2566 /* ************************************************************************* */
2567 /* Header values for sequence number field */
2568 /* ************************************************************************* */
2569 static int hf_ieee80211_frag_number = -1;
2570 static int hf_ieee80211_seq_number = -1;
2572 /* ************************************************************************* */
2573 /* Header values for Frame Check field */
2574 /* ************************************************************************* */
2575 static int hf_ieee80211_fcs = -1;
2576 static int hf_ieee80211_fcs_good = -1;
2577 static int hf_ieee80211_fcs_bad = -1;
2579 /* ************************************************************************* */
2580 /* Header values for reassembly */
2581 /* ************************************************************************* */
2582 static int hf_ieee80211_fragments = -1;
2583 static int hf_ieee80211_fragment = -1;
2584 static int hf_ieee80211_fragment_overlap = -1;
2585 static int hf_ieee80211_fragment_overlap_conflict = -1;
2586 static int hf_ieee80211_fragment_multiple_tails = -1;
2587 static int hf_ieee80211_fragment_too_long_fragment = -1;
2588 static int hf_ieee80211_fragment_error = -1;
2589 static int hf_ieee80211_fragment_count = -1;
2590 static int hf_ieee80211_reassembled_in = -1;
2591 static int hf_ieee80211_reassembled_length = -1;
2593 static int proto_wlan_mgt = -1;
2595 /* ************************************************************************* */
2596 /* Fixed fields found in mgt frames */
2597 /* ************************************************************************* */
2598 static int hf_ieee80211_fixed_parameters = -1; /* Protocol payload for management frames */
2600 static int hf_ieee80211_ff_auth_alg = -1; /* Authentication algorithm field */
2601 static int hf_ieee80211_ff_auth_seq = -1; /* Authentication transaction sequence */
2602 static int hf_ieee80211_ff_current_ap = -1; /* Current AP MAC address */
2603 static int hf_ieee80211_ff_listen_ival = -1; /* Listen interval fixed field */
2604 static int hf_ieee80211_ff_timestamp = -1; /* 64 bit timestamp */
2605 static int hf_ieee80211_ff_beacon_interval = -1; /* 16 bit Beacon interval */
2606 static int hf_ieee80211_ff_assoc_id = -1; /* 16 bit AID field */
2607 static int hf_ieee80211_ff_reason = -1; /* 16 bit reason code */
2608 static int hf_ieee80211_ff_status_code = -1; /* Status code */
2609 static int hf_ieee80211_ff_category_code = -1; /* 8 bit Category code */
2610 static int hf_ieee80211_ff_action_code = -1; /* 8 bit Action code */
2611 static int hf_ieee80211_ff_dialog_token = -1; /* 8 bit Dialog token */
2612 static int hf_ieee80211_ff_wme_action_code = -1; /* Management notification action code */
2613 static int hf_ieee80211_ff_wme_status_code = -1; /* Management notification setup response status code */
2614 static int hf_ieee80211_ff_qos_action_code = -1;
2615 static int hf_ieee80211_ff_dls_action_code = -1;
2616 static int hf_ieee80211_ff_dst_mac_addr = -1; /* DLS destination MAC addressi */
2617 static int hf_ieee80211_ff_src_mac_addr = -1; /* DLS source MAC addressi */
2618 static int hf_ieee80211_ff_dls_timeout = -1; /* DLS timeout value */
2619 static int hf_ieee80211_ff_ft_action_code = -1; /* 8 bit FT Action code */
2620 static int hf_ieee80211_ff_sta_address = -1;
2621 static int hf_ieee80211_ff_target_ap_address = -1;
2622 static int hf_ieee80211_ff_gas_comeback_delay = -1;
2623 static int hf_ieee80211_ff_gas_fragment_id = -1;
2624 static int hf_ieee80211_ff_more_gas_fragments = -1;
2625 static int hf_ieee80211_ff_query_request_length = -1;
2626 static int hf_ieee80211_ff_query_request = -1;
2627 static int hf_ieee80211_ff_query_response_length = -1;
2628 static int hf_ieee80211_ff_query_response = -1;
2629 static int hf_ieee80211_ff_anqp_info_id = -1;
2630 static int hf_ieee80211_ff_anqp_info_length = -1;
2631 static int hf_ieee80211_ff_anqp_info = -1;
2632 static int hf_ieee80211_ff_anqp_query_id = -1;
2633 static int hf_ieee80211_ff_anqp_capability = -1;
2634 static int hf_ieee80211_ff_anqp_capability_vlen = -1;
2635 static int hf_ieee80211_ff_anqp_capability_vendor = -1;
2636 static int hf_ieee80211_ff_venue_info_group = -1;
2637 static int hf_ieee80211_ff_venue_info_type = -1;
2638 static int hf_ieee80211_ff_anqp_venue_length = -1;
2639 static int hf_ieee80211_ff_anqp_venue_language = -1;
2640 static int hf_ieee80211_ff_anqp_venue_name = -1;
2641 static int hf_ieee80211_ff_anqp_nw_auth_type_indicator = -1;
2642 static int hf_ieee80211_ff_anqp_nw_auth_type_url_len = -1;
2643 static int hf_ieee80211_ff_anqp_nw_auth_type_url = -1;
2644 static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len = -1;
2645 static int hf_ieee80211_ff_anqp_roaming_consortium_oi = -1;
2646 static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6 = -1;
2647 static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4 = -1;
2648 static int hf_ieee80211_ff_anqp_nai_realm_count = -1;
2649 static int hf_ieee80211_ff_anqp_nai_field_len = -1;
2650 static int hf_ieee80211_ff_anqp_nai_realm_encoding = -1;
2651 static int hf_ieee80211_ff_anqp_nai_realm_length = -1;
2652 static int hf_ieee80211_ff_anqp_nai_realm = -1;
2653 static int hf_ieee80211_ff_anqp_nai_realm_eap_count = -1;
2654 static int hf_ieee80211_ff_anqp_nai_realm_eap_len = -1;
2655 static int hf_ieee80211_ff_anqp_nai_realm_eap_method = -1;
2656 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count = -1;
2657 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id = -1;
2658 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len = -1;
2659 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value = -1;
2660 static int hf_ieee80211_3gpp_gc_gud = -1;
2661 static int hf_ieee80211_3gpp_gc_udhl = -1;
2662 static int hf_ieee80211_3gpp_gc_iei = -1;
2663 static int hf_ieee80211_3gpp_gc_plmn_len = -1;
2664 static int hf_ieee80211_3gpp_gc_num_plmns = -1;
2665 static int hf_ieee80211_3gpp_gc_plmn = -1;
2666 static int hf_ieee80211_ff_anqp_domain_name_len = -1;
2667 static int hf_ieee80211_ff_anqp_domain_name = -1;
2668 static int hf_ieee80211_ff_tdls_action_code = -1;
2669 static int hf_ieee80211_ff_target_channel = -1;
2670 static int hf_ieee80211_ff_regulatory_class = -1;
2671 static int hf_ieee80211_ff_wnm_action_code = -1;
2672 static int hf_ieee80211_ff_request_mode_pref_cand = -1;
2673 static int hf_ieee80211_ff_request_mode_abridged = -1;
2674 static int hf_ieee80211_ff_request_mode_disassoc_imminent = -1;
2675 static int hf_ieee80211_ff_request_mode_bss_term_included = -1;
2676 static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent = -1;
2677 static int hf_ieee80211_ff_disassoc_timer = -1;
2678 static int hf_ieee80211_ff_validity_interval = -1;
2679 static int hf_ieee80211_ff_url_len = -1;
2680 static int hf_ieee80211_ff_url = -1;
2682 static int hf_ieee80211_ff_sa_query_action_code = -1;
2683 static int hf_ieee80211_ff_transaction_id = -1;
2685 /* Vendor specific */
2686 static int hf_ieee80211_ff_marvell_action_type = -1;
2687 static int hf_ieee80211_ff_marvell_mesh_mgt_action_code = -1;
2688 static int hf_ieee80211_ff_marvell_mesh_mgt_length = -1; /* Mesh Management length */
2689 static int hf_ieee80211_ff_marvell_mesh_mgt_mode = -1; /* Mesh Management mode */
2690 static int hf_ieee80211_ff_marvell_mesh_mgt_ttl = -1; /* Mesh Management TTL */
2691 static int hf_ieee80211_ff_marvell_mesh_mgt_dstcount = -1; /* Mesh Management dst count */
2692 static int hf_ieee80211_ff_marvell_mesh_mgt_hopcount = -1; /* Mesh Management hop count */
2693 static int hf_ieee80211_ff_marvell_mesh_mgt_rreqid = -1; /* Mesh Management RREQ ID */
2694 static int hf_ieee80211_ff_marvell_mesh_mgt_sa = -1; /* Mesh Management src addr */
2695 static int hf_ieee80211_ff_marvell_mesh_mgt_ssn = -1; /* Mesh Management src sequence number */
2696 static int hf_ieee80211_ff_marvell_mesh_mgt_metric = -1; /* Mesh Management metric */
2697 static int hf_ieee80211_ff_marvell_mesh_mgt_flags = -1; /* Mesh Management RREQ flags */
2698 static int hf_ieee80211_ff_marvell_mesh_mgt_da = -1; /* Mesh Management dst addr */
2699 static int hf_ieee80211_ff_marvell_mesh_mgt_dsn = -1; /* Mesh Management dst sequence number */
2700 static int hf_ieee80211_ff_marvell_mesh_mgt_lifetime = -1; /* Mesh Management lifetime */
2703 static int hf_ieee80211_ff_ba_action = -1;
2705 static int hf_ieee80211_ff_block_ack_params = -1;
2706 static int hf_ieee80211_ff_block_ack_params_amsdu_permitted = -1;
2707 static int hf_ieee80211_ff_block_ack_params_policy = -1;
2708 static int hf_ieee80211_ff_block_ack_params_tid = -1;
2709 static int hf_ieee80211_ff_block_ack_params_buffer_size = -1;
2711 static const int *ieee80211_ff_block_ack_params_fields[] = {
2712 &hf_ieee80211_ff_block_ack_params_amsdu_permitted,
2713 &hf_ieee80211_ff_block_ack_params_policy,
2714 &hf_ieee80211_ff_block_ack_params_tid,
2715 &hf_ieee80211_ff_block_ack_params_buffer_size,
2719 static int hf_ieee80211_ff_block_ack_timeout = -1;
2721 static int hf_ieee80211_ff_block_ack_ssc = -1;
2722 static int hf_ieee80211_ff_block_ack_ssc_fragment = -1;
2723 static int hf_ieee80211_ff_block_ack_ssc_sequence = -1;
2725 static const int *ieee80211_ff_block_ack_ssc_fields[] = {
2726 &hf_ieee80211_ff_block_ack_ssc_fragment,
2727 &hf_ieee80211_ff_block_ack_ssc_sequence,
2731 static int hf_ieee80211_ff_delba_param = -1;
2732 static int hf_ieee80211_ff_delba_param_reserved = -1;
2733 static int hf_ieee80211_ff_delba_param_init = -1;
2734 static int hf_ieee80211_ff_delba_param_tid = -1;
2736 static const int *ieee80211_ff_delba_param_fields[] = {
2737 &hf_ieee80211_ff_delba_param_reserved,
2738 &hf_ieee80211_ff_delba_param_init,
2739 &hf_ieee80211_ff_delba_param_tid,
2743 static int hf_ieee80211_ff_max_reg_pwr = -1;
2744 static int hf_ieee80211_ff_measurement_pilot_int = -1;
2745 static int hf_ieee80211_ff_country_str = -1;
2746 static int hf_ieee80211_ff_max_tx_pwr = -1;
2747 static int hf_ieee80211_ff_tx_pwr_used = -1;
2748 static int hf_ieee80211_ff_transceiver_noise_floor = -1;
2749 static int hf_ieee80211_ff_channel_width = -1;
2751 static int hf_ieee80211_ff_qos_info_ap = -1;
2752 static int hf_ieee80211_ff_qos_info_ap_edca_param_set_counter = -1;
2753 static int hf_ieee80211_ff_qos_info_ap_q_ack = -1;
2754 static int hf_ieee80211_ff_qos_info_ap_queue_req = -1;
2755 static int hf_ieee80211_ff_qos_info_ap_txop_request = -1;
2756 static int hf_ieee80211_ff_qos_info_ap_reserved = -1;
2758 static const int *ieee80211_ff_qos_info_ap_fields[] = {
2759 &hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
2760 &hf_ieee80211_ff_qos_info_ap_q_ack,
2761 &hf_ieee80211_ff_qos_info_ap_queue_req,
2762 &hf_ieee80211_ff_qos_info_ap_txop_request,
2763 &hf_ieee80211_ff_qos_info_ap_reserved,
2767 static int hf_ieee80211_ff_qos_info_sta = -1;
2768 static int hf_ieee80211_ff_qos_info_sta_ac_vo = -1;
2769 static int hf_ieee80211_ff_qos_info_sta_ac_vi = -1;
2770 static int hf_ieee80211_ff_qos_info_sta_ac_bk = -1;
2771 static int hf_ieee80211_ff_qos_info_sta_ac_be = -1;
2772 static int hf_ieee80211_ff_qos_info_sta_q_ack = -1;
2773 static int hf_ieee80211_ff_qos_info_sta_max_sp_len = -1;
2774 static int hf_ieee80211_ff_qos_info_sta_more_data_ack = -1;
2776 static const int *ieee80211_ff_qos_info_sta_fields[] = {
2777 &hf_ieee80211_ff_qos_info_sta_ac_vo,
2778 &hf_ieee80211_ff_qos_info_sta_ac_vi,
2779 &hf_ieee80211_ff_qos_info_sta_ac_bk,
2780 &hf_ieee80211_ff_qos_info_sta_ac_be,
2781 &hf_ieee80211_ff_qos_info_sta_q_ack,
2782 &hf_ieee80211_ff_qos_info_sta_max_sp_len,
2783 &hf_ieee80211_ff_qos_info_sta_more_data_ack,
2787 static int hf_ieee80211_ff_sm_pwr_save = -1;
2788 static int hf_ieee80211_ff_sm_pwr_save_enabled = -1;
2789 static int hf_ieee80211_ff_sm_pwr_save_sm_mode = -1;
2790 static int hf_ieee80211_ff_sm_pwr_save_reserved = -1;
2792 static const int *ieee80211_ff_sw_pwr_save_fields[] = {
2793 &hf_ieee80211_ff_sm_pwr_save_enabled,
2794 &hf_ieee80211_ff_sm_pwr_save_sm_mode,
2795 &hf_ieee80211_ff_sm_pwr_save_reserved,
2799 static int hf_ieee80211_ff_pco_phase_cntrl = -1;
2801 static int hf_ieee80211_ff_psmp_param_set = -1;
2802 static int hf_ieee80211_ff_psmp_param_set_n_sta = -1;
2803 static int hf_ieee80211_ff_psmp_param_set_more_psmp = -1;
2804 static int hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration = -1;
2806 static const int *ieee80211_ff_psmp_param_set_fields[] = {
2807 &hf_ieee80211_ff_psmp_param_set_n_sta,
2808 &hf_ieee80211_ff_psmp_param_set_more_psmp,
2809 &hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
2813 static int hf_ieee80211_ff_mimo_cntrl = -1;
2814 static int hf_ieee80211_ff_mimo_cntrl_nc_index = -1;
2815 static int hf_ieee80211_ff_mimo_cntrl_nr_index = -1;
2816 static int hf_ieee80211_ff_mimo_cntrl_channel_width = -1;
2817 static int hf_ieee80211_ff_mimo_cntrl_grouping = -1;
2818 static int hf_ieee80211_ff_mimo_cntrl_coefficient_size = -1;
2819 static int hf_ieee80211_ff_mimo_cntrl_codebook_info = -1;
2820 static int hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment = -1;
2821 static int hf_ieee80211_ff_mimo_cntrl_reserved = -1;
2822 static int hf_ieee80211_ff_mimo_cntrl_sounding_timestamp = -1;
2824 static int hf_ieee80211_ff_ant_selection = -1;
2825 static int hf_ieee80211_ff_ant_selection_0 = -1;
2826 static int hf_ieee80211_ff_ant_selection_1 = -1;
2827 static int hf_ieee80211_ff_ant_selection_2 = -1;
2828 static int hf_ieee80211_ff_ant_selection_3 = -1;
2829 static int hf_ieee80211_ff_ant_selection_4 = -1;
2830 static int hf_ieee80211_ff_ant_selection_5 = -1;
2831 static int hf_ieee80211_ff_ant_selection_6 = -1;
2832 static int hf_ieee80211_ff_ant_selection_7 = -1;
2834 static const int *ieee80211_ff_ant_selection_fields[] = {
2835 &hf_ieee80211_ff_ant_selection_0,
2836 &hf_ieee80211_ff_ant_selection_1,
2837 &hf_ieee80211_ff_ant_selection_2,
2838 &hf_ieee80211_ff_ant_selection_3,
2839 &hf_ieee80211_ff_ant_selection_4,
2840 &hf_ieee80211_ff_ant_selection_5,
2841 &hf_ieee80211_ff_ant_selection_6,
2842 &hf_ieee80211_ff_ant_selection_7,
2846 static int hf_ieee80211_ff_ext_channel_switch_announcement = -1;
2847 static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode = -1;
2848 static int hf_ieee80211_ff_ext_channel_switch_announcement_new_reg_class = -1;
2849 static int hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number = -1;
2850 static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_count = -1;
2852 static const int *ieee80211_ff_ext_channel_switch_announcement_fields[] = {
2853 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
2854 &hf_ieee80211_ff_ext_channel_switch_announcement_new_reg_class,
2855 &hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
2856 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
2860 static int hf_ieee80211_ff_ht_info = -1;
2861 static int hf_ieee80211_ff_ht_info_information_request = -1;
2862 static int hf_ieee80211_ff_ht_info_40_mhz_intolerant = -1;
2863 static int hf_ieee80211_ff_ht_info_sta_chan_width = -1;
2864 static int hf_ieee80211_ff_ht_info_reserved = -1;
2866 static const int *ieee80211_ff_ht_info_fields[] = {
2867 &hf_ieee80211_ff_ht_info_information_request,
2868 &hf_ieee80211_ff_ht_info_40_mhz_intolerant,
2869 &hf_ieee80211_ff_ht_info_sta_chan_width,
2870 &hf_ieee80211_ff_ht_info_reserved,
2874 static int hf_ieee80211_ff_ht_action = -1;
2876 static int hf_ieee80211_ff_psmp_sta_info = -1;
2877 static int hf_ieee80211_ff_psmp_sta_info_type = -1;
2878 static int hf_ieee80211_ff_psmp_sta_info_dtt_start_offset = -1;
2879 static int hf_ieee80211_ff_psmp_sta_info_dtt_duration = -1;
2880 static int hf_ieee80211_ff_psmp_sta_info_sta_id = -1;
2881 static int hf_ieee80211_ff_psmp_sta_info_utt_start_offset = -1;
2882 static int hf_ieee80211_ff_psmp_sta_info_utt_duration = -1;
2883 static int hf_ieee80211_ff_psmp_sta_info_reserved_small= -1;
2884 static int hf_ieee80211_ff_psmp_sta_info_reserved_large = -1;
2885 static int hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id = -1;
2887 static int hf_ieee80211_ff_mimo_csi_snr = -1;
2889 /*** Begin: 802.11s additions ***/
2890 static int hf_ieee80211_ff_mesh_action = -1;
2891 static int hf_ieee80211_ff_multihop_action = -1;
2892 static int hf_ieee80211_ff_mesh_flags = -1;
2893 static int hf_ieee80211_ff_mesh_ttl = -1;
2894 static int hf_ieee80211_ff_mesh_sequence = -1;
2895 static int hf_ieee80211_ff_mesh_addr4 = -1;
2896 static int hf_ieee80211_ff_mesh_addr5 = -1;
2897 static int hf_ieee80211_ff_mesh_addr6 = -1;
2898 static int hf_ieee80211_ff_selfprot_action = -1;
2900 static int hf_ieee80211_mesh_peering_proto = -1;
2901 static int hf_ieee80211_mesh_peering_local_link_id = -1;
2902 static int hf_ieee80211_mesh_peering_peer_link_id = -1;
2904 static int hf_ieee80211_ff_hwmp_flags = -1;
2905 static int hf_ieee80211_ff_hwmp_hopcount = -1;
2906 static int hf_ieee80211_ff_hwmp_ttl = -1;
2907 static int hf_ieee80211_ff_hwmp_pdid = -1;
2908 static int hf_ieee80211_ff_hwmp_orig_sta = -1;
2909 static int hf_ieee80211_ff_hwmp_orig_sn = -1;
2910 static int hf_ieee80211_ff_hwmp_orig_ext = -1;
2911 static int hf_ieee80211_ff_hwmp_lifetime = -1;
2912 static int hf_ieee80211_ff_hwmp_metric = -1;
2913 static int hf_ieee80211_ff_hwmp_targ_count = -1;
2914 static int hf_ieee80211_ff_hwmp_targ_flags = -1;
2915 static int hf_ieee80211_ff_hwmp_targ_to_flags = -1;
2916 static int hf_ieee80211_ff_hwmp_targ_usn_flags = -1;
2917 static int hf_ieee80211_ff_hwmp_targ_sta = -1;
2918 static int hf_ieee80211_ff_hwmp_targ_sn = -1;
2919 static int hf_ieee80211_ff_hwmp_targ_ext = -1;
2920 static int hf_ieee80211_rann_flags = -1;
2921 static int hf_ieee80211_rann_root_sta = -1;
2922 static int hf_ieee80211_rann_sn = -1;
2923 static int hf_ieee80211_rann_interval = -1;
2925 static int hf_ieee80211_mesh_config_path_sel_protocol = -1;
2926 static int hf_ieee80211_mesh_config_path_sel_metric = -1;
2927 static int hf_ieee80211_mesh_config_congestion_control = -1;
2928 static int hf_ieee80211_mesh_config_sync_method = -1;
2929 static int hf_ieee80211_mesh_config_auth_protocol = -1;
2930 static int hf_ieee80211_mesh_config_formation_info = -1;
2931 static int hf_ieee80211_mesh_config_capability = -1;
2932 static int hf_ieee80211_mesh_id = -1;
2934 static int hf_ieee80211_ff_public_action = -1;
2936 /* ************************************************************************* */
2937 /* Flags found in the capability field (fixed field) */
2938 /* ************************************************************************* */
2939 static int hf_ieee80211_ff_capture = -1;
2940 static int hf_ieee80211_ff_cf_ess = -1;
2941 static int hf_ieee80211_ff_cf_ibss = -1;
2942 static int hf_ieee80211_ff_cf_sta_poll = -1; /* CF pollable status for a STA */
2943 static int hf_ieee80211_ff_cf_ap_poll = -1; /* CF pollable status for an AP */
2944 static int hf_ieee80211_ff_cf_privacy = -1;
2945 static int hf_ieee80211_ff_cf_preamble = -1;
2946 static int hf_ieee80211_ff_cf_pbcc = -1;
2947 static int hf_ieee80211_ff_cf_agility = -1;
2948 static int hf_ieee80211_ff_short_slot_time = -1;
2949 static int hf_ieee80211_ff_dsss_ofdm = -1;
2950 static int hf_ieee80211_ff_cf_spec_man = -1;
2951 static int hf_ieee80211_ff_cf_apsd = -1;
2952 static int hf_ieee80211_ff_cf_del_blk_ack = -1;
2953 static int hf_ieee80211_ff_cf_imm_blk_ack = -1;
2955 /* ************************************************************************* */
2957 /* ************************************************************************* */
2958 static int hf_ieee80211_amsdu_msdu_header_text = -1;
2961 /* ************************************************************************* */
2962 /* Tagged value format fields */
2963 /* ************************************************************************* */
2964 static int hf_ieee80211_tagged_parameters = -1; /* Fixed payload item */
2965 static int hf_ieee80211_tag = -1;
2966 static int hf_ieee80211_tag_number = -1;
2967 static int hf_ieee80211_tag_length = -1;
2968 static int hf_ieee80211_tag_interpretation = -1;
2969 static int hf_ieee80211_tag_oui = -1;
2970 static int hf_ieee80211_tag_ssid = -1;
2971 static int hf_ieee80211_tag_supp_rates = -1;
2972 static int hf_ieee80211_tag_fh_dwell_time = -1;
2973 static int hf_ieee80211_tag_fh_hop_set = -1;
2974 static int hf_ieee80211_tag_fh_hop_pattern = -1;
2975 static int hf_ieee80211_tag_fh_hop_index = -1;
2976 static int hf_ieee80211_tag_ds_param_channel = -1;
2977 static int hf_ieee80211_tag_cfp_count = -1;
2978 static int hf_ieee80211_tag_cfp_period = -1;
2979 static int hf_ieee80211_tag_cfp_max_duration = -1;
2980 static int hf_ieee80211_tag_cfp_dur_remaining = -1;
2981 static int hf_ieee80211_tim_dtim_count = -1;
2982 static int hf_ieee80211_tim_dtim_period = -1;
2983 static int hf_ieee80211_tim_bmapctl = -1;
2984 static int hf_ieee80211_tim_bmapctl_mcast = -1;
2985 static int hf_ieee80211_tim_bmapctl_offset = -1;
2986 static int hf_ieee80211_tim_partial_virtual_bitmap = -1;
2987 static int hf_ieee80211_tag_ibss_atim_window = -1;
2988 static int hf_ieee80211_tag_country_info_code = -1;
2989 static int hf_ieee80211_tag_country_info_env = -1;
2990 static int hf_ieee80211_tag_country_info_pad = -1;
2991 static int hf_ieee80211_tag_country_info_fnm = -1;
2992 static int hf_ieee80211_tag_country_info_fnm_fcn = -1;
2993 static int hf_ieee80211_tag_country_info_fnm_nc = -1;
2994 static int hf_ieee80211_tag_country_info_fnm_mtpl = -1;
2995 static int hf_ieee80211_tag_country_info_rrc = -1;
2996 static int hf_ieee80211_tag_country_info_rrc_rei = -1;
2997 static int hf_ieee80211_tag_country_info_rrc_rc = -1;
2998 static int hf_ieee80211_tag_country_info_rrc_cc = -1;
2999 static int hf_ieee80211_tag_fh_hopping_parameter_prime_radix = -1;
3000 static int hf_ieee80211_tag_fh_hopping_parameter_nb_channels = -1;
3001 static int hf_ieee80211_tag_fh_hopping_table_flag = -1;
3002 static int hf_ieee80211_tag_fh_hopping_table_number_of_sets = -1;
3003 static int hf_ieee80211_tag_fh_hopping_table_modulus = -1;
3004 static int hf_ieee80211_tag_fh_hopping_table_offset = -1;
3005 static int hf_ieee80211_tag_fh_hopping_random_table = -1;
3006 static int hf_ieee80211_tag_request = -1;
3007 static int hf_ieee80211_tag_challenge_text = -1;
3009 static int hf_ieee80211_wep_iv = -1;
3010 static int hf_ieee80211_wep_iv_weak = -1;
3011 static int hf_ieee80211_tkip_extiv = -1;
3012 static int hf_ieee80211_ccmp_extiv = -1;
3013 static int hf_ieee80211_wep_key = -1;
3014 static int hf_ieee80211_wep_icv = -1;
3016 static int hf_ieee80211_block_ack_request_control = -1;
3017 static int hf_ieee80211_block_ack_control = -1;
3018 static int hf_ieee80211_block_ack_control_ack_policy = -1;
3019 static int hf_ieee80211_block_ack_control_multi_tid = -1;
3020 static int hf_ieee80211_block_ack_control_compressed_bitmap = -1;
3021 static int hf_ieee80211_block_ack_control_reserved = -1;
3023 static int hf_ieee80211_block_ack_control_basic_tid_info = -1;
3024 static int hf_ieee80211_block_ack_control_compressed_tid_info = -1;
3025 static int hf_ieee80211_block_ack_control_multi_tid_info = -1;
3027 static int hf_ieee80211_block_ack_multi_tid_info = -1;
3028 static int hf_ieee80211_block_ack_request_type = -1;
3029 static int hf_ieee80211_block_ack_multi_tid_reserved = -1;
3030 static int hf_ieee80211_block_ack_multi_tid_value = -1;
3031 static int hf_ieee80211_block_ack_type = -1;
3032 static int hf_ieee80211_block_ack_bitmap = -1;
3033 static int hf_ieee80211_block_ack_bitmap_missing_frame = -1;
3035 static int hf_ieee80211_tag_measure_request_measurement_mode = -1;
3036 static int hf_ieee80211_tag_measure_request_bssid = -1;
3038 static int hf_ieee80211_tag_measure_request_subelement_length = -1;
3039 static int hf_ieee80211_tag_measure_request_beacon_sub_id = -1;
3040 static int hf_ieee80211_tag_measure_request_beacon_sub_ssid = -1;
3041 static int hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition = -1;
3042 static int hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset = -1;
3043 static int hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail = -1;
3044 static int hf_ieee80211_tag_measure_request_beacon_sub_request = -1;
3045 static int hf_ieee80211_tag_measure_request_beacon_unknown = -1;
3047 static int hf_ieee80211_tag_measure_request_frame_request_type = -1;
3048 static int hf_ieee80211_tag_measure_request_mac_address = -1;
3049 static int hf_ieee80211_tag_measure_request_peer_mac_address = -1;
3050 static int hf_ieee80211_tag_measure_request_group_id = -1;
3052 static int hf_ieee80211_ht_cap = -1;
3053 static int hf_ieee80211_ht_vs_cap = -1;
3054 static int hf_ieee80211_ht_ldpc_coding = -1;
3055 static int hf_ieee80211_ht_chan_width = -1;
3056 static int hf_ieee80211_ht_sm_pwsave = -1;
3057 static int hf_ieee80211_ht_green = -1;
3058 static int hf_ieee80211_ht_short20 = -1;
3059 static int hf_ieee80211_ht_short40 = -1;
3060 static int hf_ieee80211_ht_tx_stbc = -1;
3061 static int hf_ieee80211_ht_rx_stbc = -1;
3062 static int hf_ieee80211_ht_delayed_block_ack = -1;
3063 static int hf_ieee80211_ht_max_amsdu = -1;
3064 static int hf_ieee80211_ht_dss_cck_40 = -1;
3065 static int hf_ieee80211_ht_psmp = -1;
3066 static int hf_ieee80211_ht_40_mhz_intolerant = -1;
3067 static int hf_ieee80211_ht_l_sig = -1;
3069 static int hf_ieee80211_ampduparam = -1;
3070 static int hf_ieee80211_ampduparam_vs = -1;
3071 static int hf_ieee80211_ampduparam_mpdu = -1;
3072 static int hf_ieee80211_ampduparam_mpdu_start_spacing = -1;
3073 static int hf_ieee80211_ampduparam_reserved = -1;
3075 static int hf_ieee80211_mcsset = -1;
3076 static int hf_ieee80211_mcsset_vs = -1;
3077 static int hf_ieee80211_mcsset_rx_bitmask = -1;
3078 static int hf_ieee80211_mcsset_rx_bitmask_0to7 = -1;
3079 static int hf_ieee80211_mcsset_rx_bitmask_8to15 = -1;
3080 static int hf_ieee80211_mcsset_rx_bitmask_16to23 = -1;
3081 static int hf_ieee80211_mcsset_rx_bitmask_24to31 = -1;
3082 static int hf_ieee80211_mcsset_rx_bitmask_32 = -1;
3083 static int hf_ieee80211_mcsset_rx_bitmask_33to38 = -1;
3084 static int hf_ieee80211_mcsset_rx_bitmask_39to52 = -1;
3085 static int hf_ieee80211_mcsset_rx_bitmask_53to76 = -1;
3086 static int hf_ieee80211_mcsset_highest_data_rate = -1;
3087 static int hf_ieee80211_mcsset_tx_mcs_set_defined = -1;
3088 static int hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal = -1;
3089 static int hf_ieee80211_mcsset_tx_max_spatial_streams = -1;
3090 static int hf_ieee80211_mcsset_tx_unequal_modulation = -1;
3092 static int hf_ieee80211_htex_cap = -1;
3093 static int hf_ieee80211_htex_vs_cap = -1;
3094 static int hf_ieee80211_htex_pco = -1;
3095 static int hf_ieee80211_htex_transtime = -1;
3096 static int hf_ieee80211_htex_mcs = -1;
3097 static int hf_ieee80211_htex_htc_support = -1;
3098 static int hf_ieee80211_htex_rd_responder = -1;
3100 static int hf_ieee80211_txbf = -1;
3101 static int hf_ieee80211_txbf_vs = -1;
3102 static int hf_ieee80211_txbf_cap = -1;
3103 static int hf_ieee80211_txbf_rcv_ssc = -1;
3104 static int hf_ieee80211_txbf_tx_ssc = -1;
3105 static int hf_ieee80211_txbf_rcv_ndp = -1;
3106 static int hf_ieee80211_txbf_tx_ndp = -1;
3107 static int hf_ieee80211_txbf_impl_txbf = -1;
3108 static int hf_ieee80211_txbf_calib = -1;
3109 static int hf_ieee80211_txbf_expl_csi = -1;
3110 static int hf_ieee80211_txbf_expl_uncomp_fm = -1;
3111 static int hf_ieee80211_txbf_expl_comp_fm = -1;
3112 static int hf_ieee80211_txbf_expl_bf_csi = -1;
3113 static int hf_ieee80211_txbf_expl_uncomp_fm_feed = -1;
3114 static int hf_ieee80211_txbf_expl_comp_fm_feed = -1;
3115 static int hf_ieee80211_txbf_csi_num_bf_ant = -1;
3116 static int hf_ieee80211_txbf_min_group = -1;
3117 static int hf_ieee80211_txbf_uncomp_sm_bf_ant = -1;
3118 static int hf_ieee80211_txbf_comp_sm_bf_ant = -1;
3119 static int hf_ieee80211_txbf_csi_max_rows_bf = -1;
3120 static int hf_ieee80211_txbf_chan_est = -1;
3121 static int hf_ieee80211_txbf_resrv = -1;
3123 /*** Begin: 802.11n D1.10 - HT Information IE ***/
3124 static int hf_ieee80211_ht_info_primary_channel = -1;
3126 static int hf_ieee80211_ht_info_delimiter1 = -1;
3127 static int hf_ieee80211_ht_info_secondary_channel_offset = -1;
3128 static int hf_ieee80211_ht_info_channel_width = -1;
3129 static int hf_ieee80211_ht_info_rifs_mode = -1;
3130 static int hf_ieee80211_ht_info_psmp_stas_only = -1;
3131 static int hf_ieee80211_ht_info_service_interval_granularity = -1;
3133 static int hf_ieee80211_ht_info_delimiter2 = -1;
3134 static int hf_ieee80211_ht_info_operating_mode = -1;
3135 static int hf_ieee80211_ht_info_non_greenfield_sta_present = -1;
3136 static int hf_ieee80211_ht_info_transmit_burst_limit = -1;
3137 static int hf_ieee80211_ht_info_obss_non_ht_stas_present = -1;
3138 static int hf_ieee80211_ht_info_reserved_1 = -1;
3140 static int hf_ieee80211_ht_info_delimiter3 = -1;
3141 static int hf_ieee80211_ht_info_reserved_2 = -1;
3142 static int hf_ieee80211_ht_info_dual_beacon = -1;
3143 static int hf_ieee80211_ht_info_dual_cts_protection = -1;
3144 static int hf_ieee80211_ht_info_secondary_beacon = -1;
3145 static int hf_ieee80211_ht_info_lsig_txop_protection_full_support = -1;
3146 static int hf_ieee80211_ht_info_pco_active = -1;
3147 static int hf_ieee80211_ht_info_pco_phase = -1;
3148 static int hf_ieee80211_ht_info_reserved_3 = -1;
3149 /*** End: 802.11n D1.10 - HT Information IE ***/
3151 static int hf_ieee80211_tag_ap_channel_report_regulatory_class = -1;
3152 static int hf_ieee80211_tag_ap_channel_report_channel_list = -1;
3154 static int hf_ieee80211_tag_secondary_channel_offset = -1;
3156 static int hf_ieee80211_tag_power_constraint_local = -1;
3158 static int hf_ieee80211_tag_power_capability_min = -1;
3159 static int hf_ieee80211_tag_power_capability_max = -1;
3161 static int hf_ieee80211_tag_tpc_report_trsmt_pow = -1;
3162 static int hf_ieee80211_tag_tpc_report_link_mrg = -1;
3164 static int hf_ieee80211_tag_supported_channels = -1;
3165 static int hf_ieee80211_tag_supported_channels_first = -1;
3166 static int hf_ieee80211_tag_supported_channels_range = -1;
3168 static int hf_ieee80211_csa_channel_switch_mode = -1;
3169 static int hf_ieee80211_csa_new_channel_number = -1;
3170 static int hf_ieee80211_csa_channel_switch_count = -1;
3172 static int hf_ieee80211_tag_measure_request_token = -1;
3173 static int hf_ieee80211_tag_measure_request_mode = -1;
3174 static int hf_ieee80211_tag_measure_request_mode_parallel = -1;
3175 static int hf_ieee80211_tag_measure_request_mode_enable = -1;
3176 static int hf_ieee80211_tag_measure_request_mode_request = -1;
3177 static int hf_ieee80211_tag_measure_request_mode_report = -1;
3178 static int hf_ieee80211_tag_measure_request_mode_duration_mandatory = -1;
3179 static int hf_ieee80211_tag_measure_request_mode_reserved = -1;
3180 static int hf_ieee80211_tag_measure_request_type = -1;
3182 static int hf_ieee80211_tag_measure_request_channel_number = -1;
3183 static int hf_ieee80211_tag_measure_request_start_time = -1;
3184 static int hf_ieee80211_tag_measure_request_duration = -1;
3186 static int hf_ieee80211_tag_measure_request_regulatory_class = -1;
3187 static int hf_ieee80211_tag_measure_request_randomization_interval = -1;
3189 static int hf_ieee80211_tag_measure_report_measurement_token = -1;
3190 static int hf_ieee80211_tag_measure_report_mode = -1;
3191 static int hf_ieee80211_tag_measure_report_mode_late = -1;
3192 static int hf_ieee80211_tag_measure_report_mode_incapable = -1;
3193 static int hf_ieee80211_tag_measure_report_mode_refused = -1;
3194 static int hf_ieee80211_tag_measure_report_mode_reserved = -1;
3195 static int hf_ieee80211_tag_measure_report_type = -1;
3196 static int hf_ieee80211_tag_measure_report_channel_number = -1;
3197 static int hf_ieee80211_tag_measure_report_start_time = -1;
3198 static int hf_ieee80211_tag_measure_report_duration = -1;
3200 static int hf_ieee80211_tag_measure_basic_map_field = -1;
3201 static int hf_ieee80211_tag_measure_map_field_bss = -1;
3202 static int hf_ieee80211_tag_measure_map_field_odfm = -1;
3203 static int hf_ieee80211_tag_measure_map_field_unident_signal = -1;
3204 static int hf_ieee80211_tag_measure_map_field_radar = -1;
3205 static int hf_ieee80211_tag_measure_map_field_unmeasured = -1;
3206 static int hf_ieee80211_tag_measure_map_field_reserved = -1;
3208 static int hf_ieee80211_tag_measure_cca_busy_fraction = -1;
3210 static int hf_ieee80211_tag_measure_rpi_histogram_report = -1;
3211 static int hf_ieee80211_tag_measure_rpi_histogram_report_0 = -1;
3212 static int hf_ieee80211_tag_measure_rpi_histogram_report_1 = -1;
3213 static int hf_ieee80211_tag_measure_rpi_histogram_report_2 = -1;
3214 static int hf_ieee80211_tag_measure_rpi_histogram_report_3 = -1;
3215 static int hf_ieee80211_tag_measure_rpi_histogram_report_4 = -1;
3216 static int hf_ieee80211_tag_measure_rpi_histogram_report_5 = -1;
3217 static int hf_ieee80211_tag_measure_rpi_histogram_report_6 = -1;
3218 static int hf_ieee80211_tag_measure_rpi_histogram_report_7 = -1;
3220 static int hf_ieee80211_tag_measure_report_regulatory_class = -1;
3221 static int hf_ieee80211_tag_measure_report_channel_load = -1;
3222 static int hf_ieee80211_tag_measure_report_frame_info = -1;
3223 static int hf_ieee80211_tag_measure_report_frame_info_phy_type = -1;
3224 static int hf_ieee80211_tag_measure_report_frame_info_frame_type = -1;
3225 static int hf_ieee80211_tag_measure_report_rcpi = -1;
3226 static int hf_ieee80211_tag_measure_report_rsni = -1;
3227 static int hf_ieee80211_tag_measure_report_bssid = -1;
3228 static int hf_ieee80211_tag_measure_report_ant_id = -1;
3229 static int hf_ieee80211_tag_measure_report_anpi = -1;
3230 static int hf_ieee80211_tag_measure_report_ipi_density_0 = -1;
3231 static int hf_ieee80211_tag_measure_report_ipi_density_1 = -1;
3232 static int hf_ieee80211_tag_measure_report_ipi_density_2 = -1;
3233 static int hf_ieee80211_tag_measure_report_ipi_density_3 = -1;
3234 static int hf_ieee80211_tag_measure_report_ipi_density_4 = -1;
3235 static int hf_ieee80211_tag_measure_report_ipi_density_5 = -1;
3236 static int hf_ieee80211_tag_measure_report_ipi_density_6 = -1;
3237 static int hf_ieee80211_tag_measure_report_ipi_density_7 = -1;
3238 static int hf_ieee80211_tag_measure_report_ipi_density_8 = -1;
3239 static int hf_ieee80211_tag_measure_report_ipi_density_9 = -1;
3240 static int hf_ieee80211_tag_measure_report_ipi_density_10 = -1;
3241 static int hf_ieee80211_tag_measure_report_parent_tsf = -1;
3243 static int hf_ieee80211_tag_quiet_count = -1;
3244 static int hf_ieee80211_tag_quiet_period = -1;
3245 static int hf_ieee80211_tag_quiet_duration = -1;
3246 static int hf_ieee80211_tag_quiet_offset = -1;
3248 static int hf_ieee80211_tag_dfs_owner = -1;
3249 static int hf_ieee80211_tag_dfs_recovery_interval = -1;
3250 static int hf_ieee80211_tag_dfs_channel_map = -1;
3251 static int hf_ieee80211_tag_dfs_channel_number = -1;
3252 static int hf_ieee80211_tag_dfs_map = -1;
3254 static int hf_ieee80211_tag_erp_info = -1;
3255 static int hf_ieee80211_tag_erp_info_erp_present = -1;
3256 static int hf_ieee80211_tag_erp_info_use_protection = -1;
3257 static int hf_ieee80211_tag_erp_info_barker_preamble_mode = -1;
3258 static int hf_ieee80211_tag_erp_info_reserved = -1;
3260 static int hf_ieee80211_tag_extended_capabilities = -1;
3261 static int hf_ieee80211_tag_extended_capabilities_b0 = -1;
3262 static int hf_ieee80211_tag_extended_capabilities_b1 = -1;
3263 static int hf_ieee80211_tag_extended_capabilities_b2 = -1;
3264 static int hf_ieee80211_tag_extended_capabilities_b3 = -1;
3265 static int hf_ieee80211_tag_extended_capabilities_b4 = -1;
3266 static int hf_ieee80211_tag_extended_capabilities_b6 = -1;
3267 static int hf_ieee80211_tag_extended_capabilities_b27 = -1;
3268 static int hf_ieee80211_tag_extended_capabilities_b28 = -1;
3269 static int hf_ieee80211_tag_extended_capabilities_b29 = -1;
3270 static int hf_ieee80211_tag_extended_capabilities_b30 = -1;
3271 static int hf_ieee80211_tag_extended_capabilities_b31 = -1;
3272 static int hf_ieee80211_tag_extended_capabilities_b32 = -1;
3273 static int hf_ieee80211_tag_extended_capabilities_b33 = -1;
3274 static int hf_ieee80211_tag_extended_capabilities_b34 = -1;
3275 static int hf_ieee80211_tag_extended_capabilities_b36 = -1;
3276 static int hf_ieee80211_tag_extended_capabilities_b37 = -1;
3277 static int hf_ieee80211_tag_extended_capabilities_b38 = -1;
3278 static int hf_ieee80211_tag_extended_capabilities_b39 = -1;
3279 static int hf_ieee80211_tag_extended_capabilities_b40 = -1;
3280 static int hf_ieee80211_tag_extended_capabilities_serv_int_granularity = -1;
3282 static int hf_ieee80211_tag_cisco_ccx1_unknown = -1;
3283 static int hf_ieee80211_tag_cisco_ccx1_name = -1;
3284 static int hf_ieee80211_tag_cisco_ccx1_clients = -1;
3286 static int hf_ieee80211_vht_cap = -1;
3287 static int hf_ieee80211_vht_max_mpdu_length = -1;
3288 static int hf_ieee80211_vht_supported_chan_width_set = -1;
3289 static int hf_ieee80211_vht_rx_ldpc = -1;
3290 static int hf_ieee80211_vht_short_gi_for_80 = -1;
3291 static int hf_ieee80211_vht_short_gi_for_160 = -1;
3292 static int hf_ieee80211_vht_tx_stbc = -1;
3293 static int hf_ieee80211_vht_rx_stbc = -1;
3294 static int hf_ieee80211_vht_su_beamformer_cap = -1;
3295 static int hf_ieee80211_vht_su_beamformee_cap = -1;
3296 static int hf_ieee80211_vht_beamformer_antennas = -1;
3297 static int hf_ieee80211_vht_sounding_dimensions = -1;
3298 static int hf_ieee80211_vht_mu_beamformer_cap = -1;
3299 static int hf_ieee80211_vht_mu_beamformee_cap = -1;
3300 static int hf_ieee80211_vht_txop_ps = -1;
3301 static int hf_ieee80211_vht_var_htc_field = -1;
3302 static int hf_ieee80211_vht_max_ampdu = -1;
3303 static int hf_ieee80211_vht_link_adaptation_cap = -1;
3304 static int hf_ieee80211_vht_rx_pattern = -1;
3305 static int hf_ieee80211_vht_tx_pattern = -1;
3306 static int hf_ieee80211_vht_reserv = -1;
3308 static int hf_ieee80211_vht_mcsset = -1;
3310 static int hf_ieee80211_vht_mcsset_rx_mcs_map = -1;
3311 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_0_ss = -1;
3312 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss = -1;
3313 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss = -1;
3314 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss = -1;
3315 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss = -1;
3316 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss = -1;
3317 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss = -1;
3318 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss = -1;
3320 static int hf_ieee80211_vht_mcsset_rx_highest_long_gi = -1;
3322 static int hf_ieee80211_vht_mcsset_tx_mcs_map = -1;
3323 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_0_ss = -1;
3324 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss = -1;
3325 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss = -1;
3326 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss = -1;
3327 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss = -1;
3328 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss = -1;
3329 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss = -1;
3330 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss = -1;
3332 static int hf_ieee80211_vht_op = -1;
3333 static int hf_ieee80211_vht_op_channel_width = -1;
3334 static int hf_ieee80211_vht_op_channel_center0 = -1;
3335 static int hf_ieee80211_vht_op_channel_center1 = -1;
3337 static int hf_ieee80211_vht_op_basic_mcs_map = -1;
3338 static int hf_ieee80211_vht_op_max_basic_mcs_for_0_ss = -1;
3339 static int hf_ieee80211_vht_op_max_basic_mcs_for_1_ss = -1;
3340 static int hf_ieee80211_vht_op_max_basic_mcs_for_2_ss = -1;
3341 static int hf_ieee80211_vht_op_max_basic_mcs_for_3_ss = -1;
3342 static int hf_ieee80211_vht_op_max_basic_mcs_for_4_ss = -1;
3343 static int hf_ieee80211_vht_op_max_basic_mcs_for_5_ss = -1;
3344 static int hf_ieee80211_vht_op_max_basic_mcs_for_6_ss = -1;
3345 static int hf_ieee80211_vht_op_max_basic_mcs_for_7_ss = -1;
3347 static int hf_ieee80211_vht_mcsset_tx_highest_long_gi = -1;
3349 static int hf_ieee80211_tag_neighbor_report_bssid = -1;
3350 static int hf_ieee80211_tag_neighbor_report_bssid_info = -1;
3351 static int hf_ieee80211_tag_neighbor_report_bssid_info_reachability = -1;
3352 static int hf_ieee80211_tag_neighbor_report_bssid_info_security = -1;
3353 static int hf_ieee80211_tag_neighbor_report_bssid_info_key_scope = -1;
3354 /*static int hf_ieee80211_tag_neighbor_report_bssid_info_capability = -1; */ /* TODO Make this the parent tree item */
3355 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng = -1;
3356 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos = -1;
3357 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd = -1;
3358 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt = -1;
3359 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback = -1;
3360 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback = -1;
3361 static int hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain = -1;
3362 static int hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput = -1;
3363 static int hf_ieee80211_tag_neighbor_report_bssid_info_reserved = -1;
3364 static int hf_ieee80211_tag_neighbor_report_reg_class = -1;
3365 static int hf_ieee80211_tag_neighbor_report_channel_number = -1;
3366 static int hf_ieee80211_tag_neighbor_report_phy_type = -1;
3368 static int hf_ieee80211_tag_supported_reg_classes_current = -1;
3369 static int hf_ieee80211_tag_supported_reg_classes_alternate = -1;
3371 /* IEEE Std 802.11r-2008 7.3.2.47 */
3372 static int hf_ieee80211_tag_mobility_domain_mdid = -1;
3373 static int hf_ieee80211_tag_mobility_domain_ft_capab = -1;
3374 static int hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds = -1;
3375 static int hf_ieee80211_tag_mobility_domain_ft_capab_resource_req = -1;
3377 /* IEEE Std 802.11r-2008 7.3.2.48 */
3378 static int hf_ieee80211_tag_ft_mic_control = -1;
3379 static int hf_ieee80211_tag_ft_element_count = -1;
3380 static int hf_ieee80211_tag_ft_mic = -1;
3381 static int hf_ieee80211_tag_ft_anonce = -1;
3382 static int hf_ieee80211_tag_ft_snonce = -1;
3383 static int hf_ieee80211_tag_ft_subelem_id = -1;
3384 static int hf_ieee80211_tag_ft_subelem_len = -1;
3385 static int hf_ieee80211_tag_ft_subelem_data = -1;
3386 static int hf_ieee80211_tag_ft_subelem_r1kh_id = -1;
3387 static int hf_ieee80211_tag_ft_subelem_gtk_key_info = -1;
3388 static int hf_ieee80211_tag_ft_subelem_gtk_key_id = -1;
3389 static int hf_ieee80211_tag_ft_subelem_gtk_key_length = -1;
3390 static int hf_ieee80211_tag_ft_subelem_gtk_rsc = -1;
3391 static int hf_ieee80211_tag_ft_subelem_gtk_key = -1;
3392 static int hf_ieee80211_tag_ft_subelem_r0kh_id = -1;
3393 static int hf_ieee80211_tag_ft_subelem_igtk_key_id = -1;
3394 static int hf_ieee80211_tag_ft_subelem_igtk_ipn = -1;
3395 static int hf_ieee80211_tag_ft_subelem_igtk_key_length = -1;
3396 static int hf_ieee80211_tag_ft_subelem_igtk_key = -1;
3398 /* IEEE Std 802.11w-2009 7.3.2.55 */
3399 static int hf_ieee80211_tag_mmie_keyid = -1;
3400 static int hf_ieee80211_tag_mmie_ipn = -1;
3401 static int hf_ieee80211_tag_mmie_mic = -1;
3403 /* IEEE Std 802.11v-2011 7.3.2.61 */
3404 static int hf_ieee80211_tag_time_adv_timing_capab = -1;
3405 static int hf_ieee80211_tag_time_adv_time_value = -1;
3406 static int hf_ieee80211_tag_time_adv_time_value_year = -1;
3407 static int hf_ieee80211_tag_time_adv_time_value_month = -1;
3408 static int hf_ieee80211_tag_time_adv_time_value_day = -1;
3409 static int hf_ieee80211_tag_time_adv_time_value_hours = -1;
3410 static int hf_ieee80211_tag_time_adv_time_value_minutes = -1;
3411 static int hf_ieee80211_tag_time_adv_time_value_seconds = -1;
3412 static int hf_ieee80211_tag_time_adv_time_value_milliseconds = -1;
3413 static int hf_ieee80211_tag_time_adv_time_value_reserved = -1;
3414 static int hf_ieee80211_tag_time_adv_time_error = -1;
3415 static int hf_ieee80211_tag_time_adv_time_update_counter = -1;
3417 /* IEEE Std 802.11v-2011 7.3.2.87 */
3418 static int hf_ieee80211_tag_time_zone = -1;
3420 /* IEEE Std 802.11u-2011 7.3.2.92 */
3421 static int hf_ieee80211_tag_interworking_access_network_type = -1;
3422 static int hf_ieee80211_tag_interworking_internet = -1;
3423 static int hf_ieee80211_tag_interworking_asra = -1;
3424 static int hf_ieee80211_tag_interworking_esr = -1;
3425 static int hf_ieee80211_tag_interworking_uesa = -1;
3426 static int hf_ieee80211_tag_interworking_hessid = -1;
3428 /* IEEE Std 802.11u-2011 7.3.2.93 */
3429 static int hf_ieee80211_tag_adv_proto_resp_len_limit = -1;
3430 static int hf_ieee80211_tag_adv_proto_pame_bi = -1;
3431 static int hf_ieee80211_tag_adv_proto_id = -1;
3433 /* IEEE Std 802.11u-2011 7.3.2.96 */
3434 static int hf_ieee80211_tag_roaming_consortium_num_anqp_oi = -1;
3435 static int hf_ieee80211_tag_roaming_consortium_oi1_len = -1;
3436 static int hf_ieee80211_tag_roaming_consortium_oi2_len = -1;
3437 static int hf_ieee80211_tag_roaming_consortium_oi1 = -1;
3438 static int hf_ieee80211_tag_roaming_consortium_oi2 = -1;
3439 static int hf_ieee80211_tag_roaming_consortium_oi3 = -1;
3441 /* 802.11n 7.3.2.48 */
3442 static int hf_ieee80211_hta_cc = -1;
3443 static int hf_ieee80211_hta_cap = -1;
3444 static int hf_ieee80211_hta_ext_chan_offset = -1;
3445 static int hf_ieee80211_hta_rec_tx_width = -1;
3446 static int hf_ieee80211_hta_rifs_mode = -1;
3447 static int hf_ieee80211_hta_controlled_access = -1;
3448 static int hf_ieee80211_hta_service_interval = -1;
3449 static int hf_ieee80211_hta_operating_mode = -1;
3450 static int hf_ieee80211_hta_non_gf_devices = -1;
3451 static int hf_ieee80211_hta_basic_stbc_mcs = -1;
3452 static int hf_ieee80211_hta_dual_stbc_protection = -1;
3453 static int hf_ieee80211_hta_secondary_beacon = -1;
3454 static int hf_ieee80211_hta_lsig_txop_protection = -1;
3455 static int hf_ieee80211_hta_pco_active = -1;
3456 static int hf_ieee80211_hta_pco_phase = -1;
3458 static int hf_ieee80211_antsel = -1;
3459 static int hf_ieee80211_antsel_vs = -1;
3460 static int hf_ieee80211_antsel_b0 = -1;
3461 static int hf_ieee80211_antsel_b1 = -1;
3462 static int hf_ieee80211_antsel_b2 = -1;
3463 static int hf_ieee80211_antsel_b3 = -1;
3464 static int hf_ieee80211_antsel_b4 = -1;
3465 static int hf_ieee80211_antsel_b5 = -1;
3466 static int hf_ieee80211_antsel_b6 = -1;
3467 static int hf_ieee80211_antsel_b7 = -1;
3469 static int hf_ieee80211_rsn_version = -1;
3470 static int hf_ieee80211_rsn_gcs = -1;
3471 static int hf_ieee80211_rsn_gcs_oui = -1;
3472 static int hf_ieee80211_rsn_gcs_type = -1;
3473 static int hf_ieee80211_rsn_gcs_80211_type = -1;
3474 static int hf_ieee80211_rsn_pcs_count = -1;
3475 static int hf_ieee80211_rsn_pcs_list = -1;
3476 static int hf_ieee80211_rsn_pcs = -1;
3477 static int hf_ieee80211_rsn_pcs_oui = -1;
3478 static int hf_ieee80211_rsn_pcs_80211_type = -1;
3479 static int hf_ieee80211_rsn_pcs_type = -1;
3480 static int hf_ieee80211_rsn_akms_count = -1;
3481 static int hf_ieee80211_rsn_akms_list = -1;
3482 static int hf_ieee80211_rsn_akms = -1;
3483 static int hf_ieee80211_rsn_akms_oui = -1;
3484 static int hf_ieee80211_rsn_akms_80211_type = -1;
3485 static int hf_ieee80211_rsn_akms_type = -1;
3486 static int hf_ieee80211_rsn_cap = -1;
3487 static int hf_ieee80211_rsn_cap_preauth = -1;
3488 static int hf_ieee80211_rsn_cap_no_pairwise = -1;
3489 static int hf_ieee80211_rsn_cap_ptksa_replay_counter = -1;
3490 static int hf_ieee80211_rsn_cap_gtksa_replay_counter = -1;
3491 static int hf_ieee80211_rsn_cap_mfpr = -1;
3492 static int hf_ieee80211_rsn_cap_mfpc = -1;
3493 static int hf_ieee80211_rsn_cap_peerkey = -1;
3494 static int hf_ieee80211_rsn_pmkid_count = -1;
3495 static int hf_ieee80211_rsn_pmkid_list = -1;
3496 static int hf_ieee80211_rsn_pmkid = -1;
3497 static int hf_ieee80211_rsn_gmcs = -1;
3498 static int hf_ieee80211_rsn_gmcs_oui = -1;
3499 static int hf_ieee80211_rsn_gmcs_type = -1;
3500 static int hf_ieee80211_rsn_gmcs_80211_type = -1;
3502 static int hf_ieee80211_wfa_ie_type = -1;
3503 static int hf_ieee80211_wfa_ie_wpa_version = -1;
3504 static int hf_ieee80211_wfa_ie_wpa_mcs = -1;
3505 static int hf_ieee80211_wfa_ie_wpa_mcs_oui = -1;
3506 static int hf_ieee80211_wfa_ie_wpa_mcs_type = -1;
3507 static int hf_ieee80211_wfa_ie_wpa_mcs_wfa_type = -1;
3508 static int hf_ieee80211_wfa_ie_wpa_ucs_count = -1;
3509 static int hf_ieee80211_wfa_ie_wpa_ucs_list = -1;
3510 static int hf_ieee80211_wfa_ie_wpa_ucs = -1;
3511 static int hf_ieee80211_wfa_ie_wpa_ucs_oui = -1;
3512 static int hf_ieee80211_wfa_ie_wpa_ucs_wfa_type = -1;
3513 static int hf_ieee80211_wfa_ie_wpa_ucs_type = -1;
3514 static int hf_ieee80211_wfa_ie_wpa_akms_count = -1;
3515 static int hf_ieee80211_wfa_ie_wpa_akms_list = -1;
3516 static int hf_ieee80211_wfa_ie_wpa_akms = -1;
3517 static int hf_ieee80211_wfa_ie_wpa_akms_oui = -1;
3518 static int hf_ieee80211_wfa_ie_wpa_akms_wfa_type = -1;
3519 static int hf_ieee80211_wfa_ie_wpa_akms_type = -1;
3520 static int hf_ieee80211_wfa_ie_wme_subtype = -1;
3521 static int hf_ieee80211_wfa_ie_wme_version = -1;
3522 static int hf_ieee80211_wfa_ie_wme_qos_info = -1;
3523 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length = -1;
3524 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be = -1;
3525 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk = -1;
3526 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi = -1;
3527 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo = -1;
3528 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved = -1;
3529 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd = -1;
3530 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count = -1;
3531 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved = -1;
3532 static int hf_ieee80211_wfa_ie_wme_reserved = -1;
3533 static int hf_ieee80211_wfa_ie_wme_ac_parameters = -1;
3534 static int hf_ieee80211_wfa_ie_wme_acp_aci_aifsn = -1;
3535 static int hf_ieee80211_wfa_ie_wme_acp_aci = -1;
3536 static int hf_ieee80211_wfa_ie_wme_acp_acm = -1;
3537 static int hf_ieee80211_wfa_ie_wme_acp_aifsn = -1;
3538 static int hf_ieee80211_wfa_ie_wme_acp_reserved = -1;
3539 static int hf_ieee80211_wfa_ie_wme_acp_ecw = -1;
3540 static int hf_ieee80211_wfa_ie_wme_acp_ecw_max = -1;
3541 static int hf_ieee80211_wfa_ie_wme_acp_ecw_min = -1;
3542 static int hf_ieee80211_wfa_ie_wme_acp_txop_limit = -1;
3543 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo = -1;
3544 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid = -1;
3545 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction = -1;
3546 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb = -1;
3547 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up = -1;
3548 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved = -1;
3549 static int hf_ieee80211_wfa_ie_wme_tspec_nor_msdu = -1;
3550 static int hf_ieee80211_wfa_ie_wme_tspec_max_msdu = -1;
3551 static int hf_ieee80211_wfa_ie_wme_tspec_min_srv = -1;
3552 static int hf_ieee80211_wfa_ie_wme_tspec_max_srv = -1;
3553 static int hf_ieee80211_wfa_ie_wme_tspec_inact_int = -1;
3554 static int hf_ieee80211_wfa_ie_wme_tspec_susp_int = -1;
3555 static int hf_ieee80211_wfa_ie_wme_tspec_srv_start = -1;
3556 static int hf_ieee80211_wfa_ie_wme_tspec_min_data = -1;
3557 static int hf_ieee80211_wfa_ie_wme_tspec_mean_data = -1;
3558 static int hf_ieee80211_wfa_ie_wme_tspec_peak_data = -1;
3559 static int hf_ieee80211_wfa_ie_wme_tspec_burst_size = -1;
3560 static int hf_ieee80211_wfa_ie_wme_tspec_delay_bound = -1;
3561 static int hf_ieee80211_wfa_ie_wme_tspec_min_phy = -1;
3562 static int hf_ieee80211_wfa_ie_wme_tspec_surplus = -1;
3563 static int hf_ieee80211_wfa_ie_wme_tspec_medium = -1;
3565 static int hf_ieee80211_aironet_ie_type = -1;
3566 static int hf_ieee80211_aironet_ie_version = -1;
3567 static int hf_ieee80211_aironet_ie_data = -1;
3568 static int hf_ieee80211_aironet_ie_qos_unk1 = -1;
3569 static int hf_ieee80211_aironet_ie_qos_paramset = -1;
3570 static int hf_ieee80211_aironet_ie_qos_val = -1;
3572 static int hf_ieee80211_marvell_ie_type = -1;
3573 static int hf_ieee80211_marvell_ie_mesh_subtype = -1;
3574 static int hf_ieee80211_marvell_ie_mesh_version = -1;
3575 static int hf_ieee80211_marvell_ie_mesh_active_proto_id = -1;
3576 static int hf_ieee80211_marvell_ie_mesh_active_metric_id = -1;
3577 static int hf_ieee80211_marvell_ie_mesh_cap = -1;
3578 static int hf_ieee80211_marvell_ie_data = -1;
3580 static int hf_ieee80211_atheros_ie_type = -1;
3581 static int hf_ieee80211_atheros_ie_subtype = -1;
3582 static int hf_ieee80211_atheros_ie_version = -1;
3583 static int hf_ieee80211_atheros_ie_cap_f_turbop = -1;
3584 static int hf_ieee80211_atheros_ie_cap_f_comp = -1;
3585 static int hf_ieee80211_atheros_ie_cap_f_ff = -1;
3586 static int hf_ieee80211_atheros_ie_cap_f_xr = -1;
3587 static int hf_ieee80211_atheros_ie_cap_f_ar = -1;
3588 static int hf_ieee80211_atheros_ie_cap_f_burst = -1;
3589 static int hf_ieee80211_atheros_ie_cap_f_wme = -1;
3590 static int hf_ieee80211_atheros_ie_cap_f_boost = -1;
3591 static int hf_ieee80211_atheros_ie_advcap_cap = -1;
3592 static int hf_ieee80211_atheros_ie_advcap_defkey = -1;
3593 static int hf_ieee80211_atheros_ie_xr_info = -1;
3594 static int hf_ieee80211_atheros_ie_xr_base_bssid = -1;
3595 static int hf_ieee80211_atheros_ie_xr_xr_bssid = -1;
3596 static int hf_ieee80211_atheros_ie_xr_xr_beacon = -1;
3597 static int hf_ieee80211_atheros_ie_xr_base_cap = -1;
3598 static int hf_ieee80211_atheros_ie_xr_xr_cap = -1;
3599 static int hf_ieee80211_atheros_ie_data = -1;
3601 /*QBSS - Version 1,2,802.11e*/
3603 static int hf_ieee80211_qbss2_cal = -1;
3604 static int hf_ieee80211_qbss2_gl = -1;
3605 static int hf_ieee80211_qbss_cu = -1;
3606 static int hf_ieee80211_qbss2_cu = -1;
3607 static int hf_ieee80211_qbss_scount = -1;
3608 static int hf_ieee80211_qbss2_scount = -1;
3609 static int hf_ieee80211_qbss_version = -1;
3610 static int hf_ieee80211_qbss_adc = -1;
3612 static int hf_ieee80211_tsinfo = -1;
3613 static int hf_ieee80211_tsinfo_type = -1;
3614 static int hf_ieee80211_tsinfo_tsid = -1;
3615 static int hf_ieee80211_tsinfo_dir = -1;
3616 static int hf_ieee80211_tsinfo_access = -1;
3617 static int hf_ieee80211_tsinfo_agg = -1;
3618 static int hf_ieee80211_tsinfo_apsd = -1;
3619 static int hf_ieee80211_tsinfo_up = -1;
3620 static int hf_ieee80211_tsinfo_ack = -1;
3621 static int hf_ieee80211_tsinfo_sched = -1;
3622 static int hf_ieee80211_tsinfo_rsv = -1;
3624 static const int *ieee80211_tsinfo_fields[] = {
3625 &hf_ieee80211_tsinfo_type,
3626 &hf_ieee80211_tsinfo_tsid,
3627 &hf_ieee80211_tsinfo_dir,
3628 &hf_ieee80211_tsinfo_access,
3629 &hf_ieee80211_tsinfo_agg,
3630 &hf_ieee80211_tsinfo_apsd,
3631 &hf_ieee80211_tsinfo_up,
3632 &hf_ieee80211_tsinfo_ack,
3633 &hf_ieee80211_tsinfo_sched,
3634 &hf_ieee80211_tsinfo_rsv,
3638 static int hf_ieee80211_tspec_nor_msdu = -1;
3639 static int hf_ieee80211_tspec_max_msdu = -1;
3640 static int hf_ieee80211_tspec_min_srv = -1;
3641 static int hf_ieee80211_tspec_max_srv = -1;
3642 static int hf_ieee80211_tspec_inact_int = -1;
3643 static int hf_ieee80211_tspec_susp_int = -1;
3644 static int hf_ieee80211_tspec_srv_start = -1;
3645 static int hf_ieee80211_tspec_min_data = -1;
3646 static int hf_ieee80211_tspec_mean_data = -1;
3647 static int hf_ieee80211_tspec_peak_data = -1;
3648 static int hf_ieee80211_tspec_burst_size = -1;
3649 static int hf_ieee80211_tspec_delay_bound = -1;
3650 static int hf_ieee80211_tspec_min_phy = -1;
3651 static int hf_ieee80211_tspec_surplus = -1;
3652 static int hf_ieee80211_tspec_medium = -1;
3653 static int hf_ieee80211_ts_delay = -1;
3654 static int hf_ieee80211_tclas_process = -1;
3655 static int hf_ieee80211_tag_qos_cap_qos_info = -1;
3656 static int hf_ieee80211_qos_info_field_vo_uapsd = -1;
3657 static int hf_ieee80211_qos_info_field_vi_uapsd = -1;
3658 static int hf_ieee80211_qos_info_field_bk_uapsd = -1;
3659 static int hf_ieee80211_qos_info_field_be_uapsd = -1;
3660 static int hf_ieee80211_qos_info_field_qack = -1;
3661 static int hf_ieee80211_qos_info_field_max_sp_length = -1;
3662 static int hf_ieee80211_qos_info_field_more_data_ack = -1;
3663 static int hf_ieee80211_qos_info_field_edca_upd_cnt = -1;
3664 static int hf_ieee80211_qos_info_field_queue_req = -1;
3665 static int hf_ieee80211_qos_info_field_txop_req = -1;
3666 static int hf_ieee80211_qos_info_field_reserved = -1;
3667 static int hf_ieee80211_tag_ext_supp_rates = -1;
3668 static int hf_ieee80211_sched_info = -1;
3669 static int hf_ieee80211_sched_info_agg = -1;
3670 static int hf_ieee80211_sched_info_tsid = -1;
3671 static int hf_ieee80211_sched_info_dir = -1;
3672 static int hf_ieee80211_sched_srv_start = -1;
3673 static int hf_ieee80211_sched_srv_int = -1;
3674 static int hf_ieee80211_sched_spec_int = -1;
3675 static int hf_ieee80211_tclas_up = -1;
3676 static int hf_ieee80211_tclas_class_type = -1;
3677 static int hf_ieee80211_tclas_class_mask = -1;
3678 static int hf_ieee80211_tclas_src_mac_addr = -1;
3679 static int hf_ieee80211_tclas_dst_mac_addr = -1;
3680 static int hf_ieee80211_tclas_ether_type = -1;
3681 static int hf_ieee80211_tclas_version = -1;
3682 static int hf_ieee80211_tclas_ipv4_src = -1;
3683 static int hf_ieee80211_tclas_ipv4_dst = -1;
3684 static int hf_ieee80211_tclas_src_port = -1;
3685 static int hf_ieee80211_tclas_dst_port = -1;
3686 static int hf_ieee80211_tclas_dscp = -1;
3687 static int hf_ieee80211_tclas_protocol = -1;
3688 static int hf_ieee80211_tclas_ipv6_src = -1;
3689 static int hf_ieee80211_tclas_ipv6_dst = -1;
3690 static int hf_ieee80211_tclas_flow = -1;
3691 static int hf_ieee80211_tclas_tag_type = -1;
3693 static int hf_ieee80211_aruba = -1;
3694 static int hf_ieee80211_aruba_hb_seq = -1;
3695 static int hf_ieee80211_aruba_mtu = -1;
3697 static int hf_ieee80211_tag_vendor_oui_type = -1;
3699 /* IEEE Std 802.11z-2010 7.3.2.62 */
3700 static int hf_ieee80211_tag_link_id_bssid = -1;
3701 static int hf_ieee80211_tag_link_id_init_sta = -1;
3702 static int hf_ieee80211_tag_link_id_resp_sta = -1;
3704 /* IEEE Std 802.11z-2010 7.3.2.63 */
3705 static int hf_ieee80211_tag_wakeup_schedule_offset = -1;
3706 static int hf_ieee80211_tag_wakeup_schedule_interval = -1;
3707 static int hf_ieee80211_tag_wakeup_schedule_awake_window_slots = -1;
3708 static int hf_ieee80211_tag_wakeup_schedule_max_awake_dur = -1;
3709 static int hf_ieee80211_tag_wakeup_schedule_idle_count = -1;
3711 /* IEEE Std 802.11z-2010 7.3.2.64 */
3712 static int hf_ieee80211_tag_channel_switch_timing_switch_time = -1;
3713 static int hf_ieee80211_tag_channel_switch_timing_switch_timeout = -1;
3715 /* IEEE Std 802.11z-2010 7.3.2.65 */
3716 static int hf_ieee80211_tag_pti_control_tid = -1;
3717 static int hf_ieee80211_tag_pti_control_sequence_control = -1;
3719 /* IEEE Std 802.11z-2010 7.3.2.66 */
3720 static int hf_ieee80211_tag_pu_buffer_status_ac_bk = -1;
3721 static int hf_ieee80211_tag_pu_buffer_status_ac_be = -1;
3722 static int hf_ieee80211_tag_pu_buffer_status_ac_vi = -1;
3723 static int hf_ieee80211_tag_pu_buffer_status_ac_vo = -1;
3725 /* IEEE Std 802.11r-2008 7.3.2.49 */
3726 static int hf_ieee80211_tag_timeout_int_type = -1;
3727 static int hf_ieee80211_tag_timeout_int_value = -1;
3729 /* Ethertype 89-0d */
3730 static int hf_ieee80211_data_encap_payload_type = -1;
3732 /* ************************************************************************* */
3733 /* Protocol trees */
3734 /* ************************************************************************* */
3735 static gint ett_80211 = -1;
3736 static gint ett_proto_flags = -1;
3737 static gint ett_cap_tree = -1;
3738 static gint ett_fc_tree = -1;
3739 static gint ett_cntrl_wrapper_fc = -1;
3740 static gint ett_cntrl_wrapper_payload = -1;
3741 static gint ett_fragments = -1;
3742 static gint ett_fragment = -1;
3743 static gint ett_block_ack = -1;
3744 static gint ett_block_ack_bitmap = -1;
3745 static gint ett_ath_cap_tree = -1;
3748 static gint ett_80211_mgt = -1;
3749 static gint ett_fixed_parameters = -1;
3750 static gint ett_tagged_parameters = -1;
3751 static gint ett_tag_bmapctl_tree = -1;
3752 static gint ett_tag_country_fnm_tree = -1;
3753 static gint ett_tag_country_rcc_tree = -1;
3754 static gint ett_qos_parameters = -1;
3755 static gint ett_qos_ps_buf_state = -1;
3756 static gint ett_qos_info_field_tree = -1;
3757 static gint ett_wep_parameters = -1;
3758 static gint ett_msh_control = -1;
3759 static gint ett_hwmp_targ_flags_tree = -1;
3761 static gint ett_rsn_gcs_tree = -1;
3762 static gint ett_rsn_pcs_tree = -1;
3763 static gint ett_rsn_sub_pcs_tree = -1;
3764 static gint ett_rsn_akms_tree = -1;
3765 static gint ett_rsn_sub_akms_tree = -1;
3766 static gint ett_rsn_cap_tree = -1;
3767 static gint ett_rsn_pmkid_tree = -1;
3768 static gint ett_rsn_gmcs_tree = -1;
3770 static gint ett_wpa_mcs_tree = -1;
3771 static gint ett_wpa_ucs_tree = -1;
3772 static gint ett_wpa_sub_ucs_tree = -1;
3773 static gint ett_wpa_akms_tree = -1;
3774 static gint ett_wpa_sub_akms_tree = -1;
3775 static gint ett_wme_ac = -1;
3776 static gint ett_wme_aci_aifsn = -1;
3777 static gint ett_wme_ecw = -1;
3778 static gint ett_wme_qos_info = -1;
3780 static gint ett_ht_cap_tree = -1;
3781 static gint ett_ampduparam_tree = -1;
3782 static gint ett_mcsset_tree = -1;
3783 static gint ett_mcsbit_tree = -1;
3784 static gint ett_htex_cap_tree = -1;
3785 static gint ett_txbf_tree = -1;
3786 static gint ett_antsel_tree = -1;
3787 static gint ett_hta_cap_tree = -1;
3788 static gint ett_hta_cap1_tree = -1;
3789 static gint ett_hta_cap2_tree = -1;
3790 static gint ett_htc_tree = -1;
3792 static gint ett_vht_cap_tree = -1;
3793 static gint ett_vht_mcsset_tree = -1;
3794 static gint ett_vht_rx_mcsbit_tree = -1;
3795 static gint ett_vht_tx_mcsbit_tree = -1;
3796 static gint ett_vht_basic_mcsbit_tree = -1;
3798 static gint ett_vht_op_tree = -1;
3800 static gint ett_ht_info_delimiter1_tree = -1;
3801 static gint ett_ht_info_delimiter2_tree = -1;
3802 static gint ett_ht_info_delimiter3_tree = -1;
3804 static gint ett_tag_measure_request_mode_tree = -1;
3805 static gint ett_tag_measure_request_type_tree = -1;
3806 static gint ett_tag_measure_report_mode_tree = -1;
3807 static gint ett_tag_measure_report_type_tree = -1;
3808 static gint ett_tag_measure_report_basic_map_tree = -1;
3809 static gint ett_tag_measure_report_rpi_tree = -1;
3810 static gint ett_tag_measure_report_frame_tree = -1;
3811 static gint ett_tag_dfs_map_tree = -1;
3812 static gint ett_tag_erp_info_tree = -1;
3813 static gint ett_tag_ex_cap = -1;
3815 static gint ett_tag_supported_channels = -1;
3817 static gint ett_tag_neighbor_report_bssid_info_tree = -1;
3818 static gint ett_tag_neighbor_report_bssid_info_capability_tree = -1;
3819 static gint ett_tag_neighbor_report_sub_tag_tree = -1;
3821 static gint ett_tag_time_adv_tree = -1;
3823 static gint ett_ff_ba_param_tree = -1;
3824 static gint ett_ff_ba_ssc_tree = -1;
3825 static gint ett_ff_delba_param_tree = -1;
3826 static gint ett_ff_qos_info = -1;
3827 static gint ett_ff_sm_pwr_save = -1;
3828 static gint ett_ff_psmp_param_set = -1;
3829 static gint ett_ff_mimo_cntrl = -1;
3830 static gint ett_ff_ant_sel = -1;
3831 static gint ett_mimo_report = -1;
3832 static gint ett_ff_chan_switch_announce = -1;
3833 static gint ett_ff_ht_info = -1;
3834 static gint ett_ff_psmp_sta_info = -1;
3836 static gint ett_msdu_aggregation_parent_tree = -1;
3837 static gint ett_msdu_aggregation_subframe_tree = -1;
3839 static gint ett_80211_mgt_ie = -1;
3840 static gint ett_tsinfo_tree = -1;
3841 static gint ett_sched_tree = -1;
3843 static gint ett_fcs = -1;
3845 static gint ett_adv_proto = -1;
3846 static gint ett_adv_proto_tuple = -1;
3847 static gint ett_gas_query = -1;
3848 static gint ett_gas_anqp = -1;
3849 static gint ett_nai_realm = -1;
3850 static gint ett_nai_realm_eap = -1;
3851 static gint ett_anqp_vendor_capab = -1;
3853 static const fragment_items frag_items = {
3856 &hf_ieee80211_fragments,
3857 &hf_ieee80211_fragment,
3858 &hf_ieee80211_fragment_overlap,
3859 &hf_ieee80211_fragment_overlap_conflict,
3860 &hf_ieee80211_fragment_multiple_tails,
3861 &hf_ieee80211_fragment_too_long_fragment,
3862 &hf_ieee80211_fragment_error,
3863 &hf_ieee80211_fragment_count,
3864 &hf_ieee80211_reassembled_in,
3865 &hf_ieee80211_reassembled_length,
3866 /* Reassembled data field */
3871 static const enum_val_t wlan_ignore_wep_options[] = {
3872 { "no", "No", WLAN_IGNORE_WEP_NO },
3873 { "without_iv", "Yes - without IV", WLAN_IGNORE_WEP_WO_IV },
3874 { "with_iv", "Yes - with IV", WLAN_IGNORE_WEP_W_IV },
3878 static dissector_handle_t ieee80211_handle;
3879 static dissector_handle_t llc_handle;
3880 static dissector_handle_t ipx_handle;
3881 static dissector_handle_t eth_withoutfcs_handle;
3882 static dissector_handle_t data_handle;
3884 static int wlan_tap = -1;
3886 static const value_string access_network_type_vals[] = {
3887 { 0, "Private network" },
3888 { 1, "Private network with guest access" },
3889 { 2, "Chargeable public network" },
3890 { 3, "Free public network" },
3891 { 4, "Personal device network" },
3892 { 5, "Emergency services only network" },
3893 { 14, "Test or experimental" },
3898 static const value_string adv_proto_id_vals[] = {
3899 { 0, "Access Network Query Protocol"},
3900 { 1, "MIH Information Service"},
3901 { 2, "MIH Command and Event Services Capability Discovery"},
3902 { 3, "Emergency Alert System (EAS)"},
3903 { 4, "Location-to-Service Translation Protocol"},
3904 {221, "Vendor Specific"},
3908 static const value_string timeout_int_types[] = {
3909 {1, "Reassociation deadline interval (TUs)"},
3910 {2, "Key lifetime interval (seconds)"},
3911 {3, "Association Comeback time (TUs)"},
3915 static const value_string tdls_action_codes[] = {
3916 {TDLS_SETUP_REQUEST, "TDLS Setup Request"},
3917 {TDLS_SETUP_RESPONSE, "TDLS Setup Response"},
3918 {TDLS_SETUP_CONFIRM, "TDLS Setup Confirm"},
3919 {TDLS_TEARDOWN, "TDLS Teardown"},
3920 {TDLS_PEER_TRAFFIC_INDICATION, "TDLS Peer Traffic Indication"},
3921 {TDLS_CHANNEL_SWITCH_REQUEST, "TDLS Channel Switch Request"},
3922 {TDLS_CHANNEL_SWITCH_RESPONSE, "TDLS Channel Switch Response"},
3923 {TDLS_PEER_PSM_REQUEST, "TDLS Peer PSM Request"},
3924 {TDLS_PEER_PSM_RESPONSE, "TDLS Peer PSM Response"},
3925 {TDLS_PEER_TRAFFIC_RESPONSE, "TDLS Peer Traffic Response"},
3926 {TDLS_DISCOVERY_REQUEST, "TDLS Discovery Request"},
3929 static value_string_ext tdls_action_codes_ext = VALUE_STRING_EXT_INIT(tdls_action_codes);
3931 AIRPDCAP_CONTEXT airpdcap_ctx;
3933 #define PSMP_STA_INFO_BROADCAST 0
3934 #define PSMP_STA_INFO_MULTICAST 1
3935 #define PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED 2
3937 #define PSMP_STA_INFO_FLAG_TYPE 0x00000003
3938 #define PSMP_STA_INFO_FLAG_DTT_START 0x00001FFC
3939 #define PSMP_STA_INFO_FLAG_DTT_DURATION 0x001FE000
3941 #define PSMP_STA_INFO_FLAG_STA_ID 0x001FFFE0
3943 #define PSMP_STA_INFO_FLAG_UTT_START 0x0000FFE0
3944 #define PSMP_STA_INFO_FLAG_UTT_DURATION 0x03FF0000
3946 #define PSMP_STA_INFO_FLAG_IA_RESERVED 0xFC000000
3948 static const value_string ff_psmp_sta_info_flags[] = {
3949 { PSMP_STA_INFO_BROADCAST, "Broadcast"},
3950 { PSMP_STA_INFO_MULTICAST, "Multicast"},
3951 { PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED, "Individually Addressed"},
3956 beacon_interval_base_custom(gchar *result, guint32 beacon_interval)
3960 temp_double = (double)beacon_interval;
3961 g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (temp_double * 1024 / 1000000));
3964 /* ************************************************************************* */
3965 /* Return the length of the current header (in bytes) */
3966 /* ************************************************************************* */
3968 find_header_length (guint16 fcf, guint16 ctrl_fcf, gboolean is_ht)
3973 switch (FCF_FRAME_TYPE (fcf)) {
3976 if (is_ht && IS_STRICTLY_ORDERED(FCF_FLAGS(fcf)))
3977 return MGT_FRAME_HDR_LEN + 4;
3979 return MGT_FRAME_HDR_LEN;
3982 if (COMPOSE_FRAME_TYPE(fcf) == CTRL_CONTROL_WRAPPER) {
3989 switch (COMPOSE_FRAME_TYPE (cw_fcf)) {
3992 case CTRL_ACKNOWLEDGEMENT:
3998 case CTRL_CFP_ENDACK:
3999 case CTRL_BLOCK_ACK_REQ:
4000 case CTRL_BLOCK_ACK:
4003 return len + 4; /* XXX */
4006 len = (FCF_ADDR_SELECTOR(fcf) ==
4007 DATA_ADDR_T4) ? DATA_LONG_HDR_LEN : DATA_SHORT_HDR_LEN;
4009 if (DATA_FRAME_IS_QOS(COMPOSE_FRAME_TYPE(fcf))) {
4011 if (is_ht && IS_STRICTLY_ORDERED(FCF_FLAGS(fcf))) {
4023 /* ************************************************************************* */
4024 /* Mesh Control field helper functions
4026 * Per IEEE 802.11s Draft 12.0 section 7.2.2.1:
4028 * The frame body consists of either:
4029 * The MSDU (or a fragment thereof), the Mesh Control field (if and only if the
4030 * frame is transmitted by a mesh STA and the Mesh Control Present subfield of
4031 * the QoS Control field is 1)...
4033 * We need a stateful sniffer for that. For now, use heuristics.
4035 * Notably, only mesh data frames contain the Mesh Control field in the header.
4036 * Other frames that contain mesh control (i.e., multihop action frames) have
4037 * it deeper in the frame body where it can be definitively identified.
4038 * Further, mesh data frames always have to-ds and from-ds either 11 or 01. We
4039 * use these facts to make our heuristics more reliable.
4040 * ************************************************************************* */
4042 has_mesh_control(guint16 fcf, guint16 qos_ctl, guint8 mesh_flags)
4044 /* assume mesh control present if the QOS field's Mesh Control Present bit is
4045 * set, all reserved bits in the mesh_flags field are zero, and the address
4046 * extension mode is not a reserved value.
4048 return (((FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T4) || (FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T2)) &&
4049 (QOS_MESH_CONTROL_PRESENT(qos_ctl)) &&
4050 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION) == 0) &&
4051 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION) != MESH_FLAGS_ADDRESS_EXTENSION));
4055 find_mesh_control_length(guint8 mesh_flags)
4057 return 6 + 6*(mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION);
4060 static mimo_control_t
4061 get_mimo_control (tvbuff_t *tvb, int offset)
4064 mimo_control_t output;
4066 mimo = tvb_get_letohs (tvb, offset);
4068 output.nc = (mimo & 0x0003) + 1;
4069 output.nr = ((mimo & 0x000C) >> 2) + 1;
4070 output.chan_width = (mimo & 0x0010) >> 4;
4071 output.coefficient_size = 4; /* XXX - Is this a good default? */
4073 switch ((mimo & 0x0060) >> 5)
4076 output.grouping = 1;
4080 output.grouping = 2;
4084 output.grouping = 4;
4088 output.grouping = 1;
4092 switch ((mimo & 0x0180) >> 7)
4095 output.coefficient_size = 4;
4099 output.coefficient_size = 5;
4103 output.coefficient_size = 6;
4107 output.coefficient_size = 8;
4111 output.codebook_info = (mimo & 0x0600) >> 9;
4112 output.remaining_matrix_segment = (mimo & 0x3800) >> 11;
4118 get_mimo_na (guint8 nr, guint8 nc)
4120 if ((nr == 2) && (nc == 1)) {
4122 } else if ((nr == 2) && (nc == 2)) {
4124 } else if ((nr == 3) && (nc == 1)) {
4126 } else if ((nr == 3) && (nc == 2)) {
4128 } else if ((nr == 3) && (nc == 3)) {
4130 } else if ((nr == 4) && (nc == 1)) {
4132 } else if ((nr == 4) && (nc == 2)) {
4134 } else if ((nr == 4) && (nc == 3)) {
4136 } else if ((nr == 4) && (nc == 4)) {
4144 get_mimo_ns (gboolean chan_width, guint8 output_grouping)
4150 switch (output_grouping)
4168 switch (output_grouping)
4191 add_mimo_csi_matrices_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
4193 proto_item *snr_item;
4194 proto_tree *snr_tree;
4195 int csi_matrix_size, start_offset;
4198 start_offset = offset;
4199 snr_item = proto_tree_add_text(tree, tvb, offset, mimo_cntrl.nc, "Signal to Noise Ratio");
4200 snr_tree = proto_item_add_subtree (snr_item, ett_mimo_report);
4202 for (i = 1; i <= mimo_cntrl.nr; i++)
4206 snr = tvb_get_guint8(tvb, offset);
4207 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
4208 snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
4212 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
4213 csi_matrix_size = ns*(3+(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size));
4214 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
4215 proto_tree_add_text(tree, tvb, offset, csi_matrix_size, "CSI Matrices");
4216 offset += csi_matrix_size;
4217 return offset - start_offset;
4221 add_mimo_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
4223 proto_item *snr_item;
4224 proto_tree *snr_tree;
4225 int csi_matrix_size, start_offset;
4228 start_offset = offset;
4229 snr_item = proto_tree_add_text(tree, tvb, offset, mimo_cntrl.nc, "Signal to Noise Ratio");
4230 snr_tree = proto_item_add_subtree (snr_item, ett_mimo_report);
4232 for (i = 1; i <= mimo_cntrl.nc; i++)
4236 snr = tvb_get_guint8(tvb, offset);
4237 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
4238 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
4242 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
4243 csi_matrix_size = ns*(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size);
4244 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
4245 proto_tree_add_text(tree, tvb, offset, csi_matrix_size, "Beamforming Feedback Matrices");
4246 offset += csi_matrix_size;
4247 return offset - start_offset;
4251 add_mimo_compressed_beamforming_feedback_report (proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
4253 proto_item *snr_item;
4254 proto_tree *snr_tree;
4255 int csi_matrix_size, start_offset;
4258 start_offset = offset;
4259 snr_item = proto_tree_add_text(tree, tvb, offset, mimo_cntrl.nc, "Signal to Noise Ratio");
4260 snr_tree = proto_item_add_subtree (snr_item, ett_mimo_report);
4262 for (i = 1; i <= mimo_cntrl.nc; i++)
4266 snr = tvb_get_guint8(tvb, offset);
4267 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
4268 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
4272 na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
4273 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
4274 csi_matrix_size = ns*(na*((mimo_cntrl.codebook_info+1)*2 + 2)/2);
4275 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
4276 proto_tree_add_text(tree, tvb, offset, csi_matrix_size, "Compressed Beamforming Feedback Matrices");
4277 offset += csi_matrix_size;
4278 return offset - start_offset;
4281 /* ************************************************************************* */
4282 /* This is the capture function used to update packet counts */
4283 /* ************************************************************************* */
4285 capture_ieee80211_common (const guchar * pd, int offset, int len,
4286 packet_counts * ld, gboolean fixed_length_header,
4287 gboolean datapad, gboolean is_ht)
4289 guint16 fcf, hdr_length;
4291 if (!BYTES_ARE_IN_FRAME(offset, len, 2)) {
4296 fcf = pletohs (&pd[offset]);
4298 if (IS_PROTECTED(FCF_FLAGS(fcf)) && (wlan_ignore_wep == WLAN_IGNORE_WEP_NO)) {
4303 switch (COMPOSE_FRAME_TYPE (fcf)) {
4305 case DATA: /* We got a data frame */
4306 case DATA_CF_ACK: /* Data with ACK */
4308 case DATA_CF_ACK_POLL:
4311 if (fixed_length_header) {
4312 hdr_length = DATA_LONG_HDR_LEN;
4314 hdr_length = find_header_length (fcf, 0, is_ht);
4315 /* adjust the header length depending on the Mesh Control field */
4316 if ((FCF_FRAME_TYPE(fcf) == DATA_FRAME) &&
4317 DATA_FRAME_IS_QOS(COMPOSE_FRAME_TYPE(fcf))) {
4319 guint8 mesh_flags = pd[hdr_length];
4320 guint16 qosoff = hdr_length - 2;
4321 qosoff -= (is_ht ? 4 : 0);
4322 if (has_mesh_control(fcf, pletohs(&pd[qosoff]), mesh_flags)) {
4323 hdr_length += find_mesh_control_length(mesh_flags);
4327 hdr_length = roundup2(hdr_length, 4);
4329 /* I guess some bridges take Netware Ethernet_802_3 frames,
4330 which are 802.3 frames (with a length field rather than
4331 a type field, but with no 802.2 header in the payload),
4332 and just stick the payload into an 802.11 frame. I've seen
4333 captures that show frames of that sort.
4335 We also handle some odd form of encapsulation in which a
4336 complete Ethernet frame is encapsulated within an 802.11
4337 data frame, with no 802.2 header. This has been seen
4340 On top of that, at least at some point it appeared that
4341 the OLPC XO sent out frames with two bytes of 0 between
4342 the "end" of the 802.11 header and the beginning of
4345 So, if the packet doesn't start with 0xaa 0xaa:
4347 we first use the same scheme that linux-wlan-ng does to detect
4348 those encapsulated Ethernet frames, namely looking to see whether
4349 the frame either starts with 6 octets that match the destination
4350 address from the 802.11 header or has 6 octets that match the
4351 source address from the 802.11 header following the first 6 octets,
4352 and, if so, treat it as an encapsulated Ethernet frame;
4354 otherwise, we use the same scheme that we use in the Ethernet
4355 dissector to recognize Netware 802.3 frames, namely checking
4356 whether the packet starts with 0xff 0xff and, if so, treat it
4357 as an encapsulated IPX frame, and then check whether the
4358 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
4360 if (!BYTES_ARE_IN_FRAME(offset+hdr_length, len, 2)) {
4364 if ((pd[offset+hdr_length] != 0xaa) && (pd[offset+hdr_length+1] != 0xaa)) {
4366 /* XXX - this requires us to parse the header to find the source
4367 and destination addresses. */
4368 if (BYTES_ARE_IN_FRAME(offset+hdr_length, len, 12)) {
4369 /* We have two MAC addresses after the header. */
4370 if ((memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0) ||
4371 (memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0)) {
4372 capture_eth (pd, offset + hdr_length, len, ld);
4377 if ((pd[offset+hdr_length] == 0xff) && (pd[offset+hdr_length+1] == 0xff))
4379 else if ((pd[offset+hdr_length] == 0x00) && (pd[offset+hdr_length+1] == 0x00))
4380 capture_llc (pd, offset + hdr_length + 2, len, ld);
4383 capture_llc (pd, offset + hdr_length, len, ld);
4395 * Handle 802.11 with a variable-length link-layer header.
4398 capture_ieee80211 (const guchar * pd, int offset, int len, packet_counts * ld)
4400 capture_ieee80211_common (pd, offset, len, ld, FALSE, FALSE, FALSE);
4404 * Handle 802.11 with a variable-length link-layer header and data padding.
4407 capture_ieee80211_datapad (const guchar * pd, int offset, int len,
4410 capture_ieee80211_common (pd, offset, len, ld, FALSE, TRUE, FALSE);
4414 * Handle 802.11 with a fixed-length link-layer header (padded to the
4418 capture_ieee80211_fixed (const guchar * pd, int offset, int len, packet_counts * ld)
4420 capture_ieee80211_common (pd, offset, len, ld, TRUE, FALSE, FALSE);
4424 * Handle an HT 802.11 with a variable-length link-layer header.
4427 capture_ieee80211_ht (const guchar * pd, int offset, int len, packet_counts * ld)
4429 capture_ieee80211_common (pd, offset, len, ld, FALSE, FALSE, TRUE);
4433 /* ************************************************************************* */
4434 /* Add the subtree used to store the fixed parameters */
4435 /* ************************************************************************* */
4437 get_fixed_parameter_tree (proto_tree * tree, tvbuff_t *tvb, int start, int size)
4439 proto_item *fixed_fields;
4442 proto_tree_add_uint_format (tree, hf_ieee80211_fixed_parameters, tvb, start,
4443 size, size, "Fixed parameters (%d bytes)",
4446 return proto_item_add_subtree (fixed_fields, ett_fixed_parameters);
4450 /* ************************************************************************* */
4451 /* Add the subtree used to store tagged parameters */
4452 /* ************************************************************************* */
4454 get_tagged_parameter_tree (proto_tree * tree, tvbuff_t *tvb, int start, int size)
4456 proto_item *tagged_fields;
4458 tagged_fields = proto_tree_add_uint_format (tree, hf_ieee80211_tagged_parameters,
4463 "Tagged parameters (%d bytes)",
4465 proto_item_set_len(tagged_fields, size);
4467 return proto_item_add_subtree (tagged_fields, ett_tagged_parameters);
4472 dissect_vendor_action_marvell(proto_tree *tree, tvbuff_t *tvb, int offset)
4476 octet = tvb_get_guint8(tvb, offset);
4477 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_action_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4481 case MRVL_ACTION_MESH_MANAGEMENT:
4482 octet = tvb_get_guint8(tvb, offset);
4483 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4487 case MRVL_MESH_MGMT_ACTION_RREQ:
4488 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4490 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4492 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4494 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4496 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_rreqid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4498 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA);
4500 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4502 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4504 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4506 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4508 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4510 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
4512 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4515 case MRVL_MESH_MGMT_ACTION_RREP:
4516 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4518 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4520 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4522 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4524 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
4526 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4528 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4530 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4532 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA);
4534 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4537 case MRVL_MESH_MGMT_ACTION_RERR:
4538 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4540 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4542 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4544 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
4546 proto_tree_add_item (tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4561 dissect_advertisement_protocol(packet_info *pinfo, proto_tree *tree,
4562 tvbuff_t *tvb, int offset, gboolean *anqp)
4564 guint8 tag_no, tag_len, left;
4565 proto_item *item = NULL, *adv_item;
4566 proto_tree *adv_tree, *adv_tuple_tree;
4570 tag_no = tvb_get_guint8(tvb, offset);
4572 item = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4574 tag_len = tvb_get_guint8(tvb, offset + 1);
4575 if (tag_no != TAG_ADVERTISEMENT_PROTOCOL) {
4576 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
4577 "Unexpected IE %d (expected Advertisement "
4578 "Protocol)", tag_no);
4582 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
4585 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
4586 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
4587 "Advertisement Protocol: IE must be at least 2 "
4594 adv_item = proto_tree_add_text(tree, tvb, offset, left,
4595 "Advertisement Protocol element");
4596 adv_tree = proto_item_add_subtree(adv_item, ett_adv_proto);
4601 id = tvb_get_guint8(tvb, offset + 1);
4603 proto_item_append_text(adv_item, ": ANQP");
4604 item = proto_tree_add_text(adv_tree, tvb, offset, 2,
4605 "Advertisement Protocol Tuple: %s",
4606 val_to_str(id, adv_proto_id_vals,
4608 adv_tuple_tree = proto_item_add_subtree(item, ett_adv_proto_tuple);
4610 proto_tree_add_item(adv_tuple_tree,
4611 hf_ieee80211_tag_adv_proto_resp_len_limit, tvb,
4612 offset, 1, ENC_BIG_ENDIAN);
4613 proto_tree_add_item(adv_tuple_tree,
4614 hf_ieee80211_tag_adv_proto_pame_bi, tvb,
4615 offset, 1, ENC_BIG_ENDIAN);
4618 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_id, tvb,
4619 offset, 1, ENC_BIG_ENDIAN);
4623 if ((id == 0) && anqp)
4627 /* Vendor specific */
4628 guint8 len = tvb_get_guint8(tvb, offset);
4632 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
4633 "Vendor specific info length error");
4636 proto_tree_add_text(adv_tuple_tree, tvb, offset, len,
4637 "Vendor Specific Advertisement Protocol info");
4644 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
4645 "Unexpected extra data in the end");
4652 dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
4654 while (offset + 2 <= end) {
4655 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
4656 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4659 if (offset != end) {
4660 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
4661 "Unexpected ANQP Query list format");
4666 dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
4673 while (offset + 2 <= end) {
4674 id = tvb_get_letohs(tvb, offset);
4675 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_capability,
4676 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4678 if (id == ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST) {
4679 vtree = proto_item_add_subtree(item, ett_anqp_vendor_capab);
4680 len = tvb_get_letohs(tvb, offset);
4681 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vlen,
4682 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4684 if ((len < 3) || ((offset + len) > end)) {
4685 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
4686 "Invalid vendor-specific ANQP capability");
4689 oui = tvb_get_ntoh24(tvb, offset);
4690 proto_tree_add_item(vtree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
4696 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
4697 tvb, offset, len, ENC_NA);
4704 if (offset != end) {
4705 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
4706 "Unexpected ANQP Capability list format");
4710 static const value_string venue_group_vals[] = {
4711 { 0, "Unspecified" },
4714 { 3, "Educational" },
4715 { 4, "Factory and Industrial" },
4716 { 5, "Institutional" },
4717 { 6, "Mercantile" },
4718 { 7, "Residential" },
4720 { 9, "Utility and Miscellaneous" },
4721 { 10, "Vehicular" },
4725 static value_string_ext venue_group_vals_ext = VALUE_STRING_EXT_INIT(venue_group_vals);
4728 dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
4730 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_group,
4731 tvb, offset, 1, ENC_BIG_ENDIAN);
4732 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_type,
4733 tvb, offset + 1, 1, ENC_BIG_ENDIAN);
4737 dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
4741 dissect_venue_info(tree, tvb, offset);
4743 while (offset + 4 <= end) {
4744 guint8 vlen = tvb_get_guint8(tvb, offset);
4745 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_length,
4746 tvb, offset, 1, ENC_BIG_ENDIAN);
4748 if ((vlen > (end - offset)) || (vlen < 3)) {
4749 expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
4750 "Invalid Venue Name Duple length");
4753 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_language,
4754 tvb, offset, 3, ENC_ASCII|ENC_NA);
4755 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_name,
4756 tvb, offset + 3, vlen - 3, ENC_ASCII|ENC_NA);
4761 static const value_string nw_auth_type_vals[] = {
4762 { 0, "Acceptance of terms and conditions" },
4763 { 1, "On-line enrollment supported" },
4764 { 2, "http/https redirection" },
4765 { 3, "DNS redirection" },
4770 dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
4772 while (offset + 3 <= end) {
4774 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_indicator,
4775 tvb, offset, 1, ENC_BIG_ENDIAN);
4777 len = tvb_get_letohs(tvb, offset);
4778 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url_len,
4779 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4782 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url,
4783 tvb, offset, len, ENC_ASCII|ENC_NA);
4789 add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
4791 const gchar *manuf_name;
4793 manuf_name = tvb_get_manuf_name_if_known(tvb, offset);
4794 if (manuf_name == NULL)
4796 proto_item_append_text(item, " - %s", manuf_name);
4800 dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, int offset,
4806 while (offset < end) {
4807 len = tvb_get_guint8(tvb, offset);
4808 item = proto_tree_add_item(tree,
4809 hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
4810 tvb, offset, 1, ENC_BIG_ENDIAN);
4812 if ((len > (end - offset)) || (len < 3)) {
4813 expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
4814 "Invalid Roaming Consortium OI");
4817 item = proto_tree_add_item(tree,
4818 hf_ieee80211_ff_anqp_roaming_consortium_oi,
4819 tvb, offset, len, ENC_NA);
4820 add_manuf(item, tvb, offset);
4825 static const value_string ip_addr_avail_ipv6_vals[] = {
4826 { 0, "Address type not available" },
4827 { 1, "Address type available" },
4828 { 2, "Availability of the address type not known" },
4832 static const value_string ip_addr_avail_ipv4_vals[] = {
4833 { 0, "Address type not available" },
4834 { 1, "Public IPv4 address available" },
4835 { 2, "Port-restricted IPv4 address available" },
4836 { 3, "Single NATed private IPv4 address available" },
4837 { 4, "Double NATed private IPv4 address available" },
4838 { 5, "Port-restricted IPv4 address and single NATed IPv4 address available" },
4839 { 6, "Port-restricted IPv4 address and double NATed IPv4 address available" },
4840 { 7, "Availability of the address type is not known" },
4845 dissect_ip_addr_type_availability_info(proto_tree *tree, tvbuff_t *tvb,
4848 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
4849 tvb, offset, 1, ENC_BIG_ENDIAN);
4850 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
4851 tvb, offset, 1, ENC_BIG_ENDIAN);
4854 static const value_string nai_realm_encoding_vals[] = {
4855 { 0, "Formatted in accordance with RFC 4282" },
4856 { 1, "UTF-8 formatted that is not formatted in accordance with RFC 4282" },
4860 static const value_string nai_realm_auth_param_id_vals[] = {
4861 { 1, "Expanded EAP Method" },
4862 { 2, "Non-EAP Inner Authentication Type" },
4863 { 3, "Inner Authentication EAP Method Type" },
4864 { 4, "Expanded Inner EAP Method" },
4865 { 5, "Credential Type" },
4866 { 6, "Tunneled EAP Method Credential Type" },
4867 { 221, "Vendor Specific" },
4872 dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
4875 proto_item *item, *r_item;
4877 guint8 nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
4878 guint8 auth_param_id;
4879 proto_tree *realm_tree, *eap_tree;
4882 count = tvb_get_letohs(tvb, offset);
4883 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nai_realm_count,
4884 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4887 len = tvb_get_letohs(tvb, offset);
4888 r_item = proto_tree_add_text(tree, tvb, offset, 2 + len, "NAI Realm Data");
4889 realm_tree = proto_item_add_subtree(r_item, ett_nai_realm);
4891 item = proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_field_len,
4892 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4894 if (offset + len > end) {
4895 expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
4896 "Invalid NAI Realm List");
4899 f_end = offset + len;
4900 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_encoding,
4901 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4903 nai_len = tvb_get_guint8(tvb, offset);
4904 item = proto_tree_add_item(realm_tree,
4905 hf_ieee80211_ff_anqp_nai_realm_length,
4906 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4908 if (offset + nai_len > f_end) {
4909 expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
4910 "Invalid NAI Realm Data");
4913 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm,
4914 tvb, offset, nai_len, ENC_ASCII|ENC_NA);
4915 realm = tvb_get_ephemeral_string(tvb, offset, nai_len);
4917 proto_item_append_text(r_item, " (%s)", realm);
4920 eap_count = tvb_get_guint8(tvb, offset);
4921 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_eap_count,
4922 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4925 while (eap_count > 0) {
4926 eap_len = tvb_get_guint8(tvb, offset);
4927 eap_end = offset + 1 + eap_len;
4928 item = proto_tree_add_text(realm_tree, tvb, offset, 1 + eap_len,
4930 eap_tree = proto_item_add_subtree(item, ett_nai_realm_eap);
4932 item = proto_tree_add_item(eap_tree,
4933 hf_ieee80211_ff_anqp_nai_realm_eap_len,
4934 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4936 if (offset + eap_len > f_end) {
4937 expert_add_info_format(g_pinfo, item, PI_MALFORMED, PI_ERROR,
4938 "Invalid EAP Method subfield");
4942 proto_item_append_text(eap_tree, ": %s",
4943 val_to_str_ext(tvb_get_guint8(tvb, offset),
4944 &eap_type_vals_ext, "Unknown (%d)"));
4945 proto_tree_add_item(eap_tree, hf_ieee80211_ff_anqp_nai_realm_eap_method,
4946 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4948 auth_param_count = tvb_get_guint8(tvb, offset);
4949 proto_tree_add_item(eap_tree,
4950 hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
4951 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4954 while (auth_param_count > 0) {
4955 auth_param_id = tvb_get_guint8(tvb, offset);
4956 proto_tree_add_item(eap_tree,
4957 hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
4958 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4960 auth_param_len = tvb_get_guint8(tvb, offset);
4961 proto_tree_add_item(eap_tree,
4962 hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
4963 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4965 item = proto_tree_add_item(
4966 eap_tree, hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
4967 tvb, offset, auth_param_len, ENC_NA);
4968 if ((auth_param_id == 3) && (auth_param_len == 1)) {
4969 guint8 inner_method = tvb_get_guint8(tvb, offset);
4971 str = val_to_str_ext(inner_method, &eap_type_vals_ext, "Unknown (%d)");
4973 proto_item_append_text(eap_tree, " / %s", str);
4974 proto_item_append_text(item, " - %s", str);
4976 offset += auth_param_len;
4991 dissect_3gpp_cellular_network_info(proto_tree *tree, tvbuff_t *tvb, int offset)
4996 /* See Annex A of 3GPP TS 24.234 v8.1.0 for description */
4997 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_gud, tvb, offset, 1, ENC_BIG_ENDIAN);
4999 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_udhl, tvb, offset, 1, ENC_BIG_ENDIAN);
5001 iei = tvb_get_guint8(tvb, offset);
5002 item = proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_iei, tvb, offset, 1, ENC_BIG_ENDIAN);
5004 proto_item_append_text(item, " (PLMN List)");
5008 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_plmn_len, tvb, offset, 1, ENC_BIG_ENDIAN);
5010 num = tvb_get_guint8(tvb, offset);
5011 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_num_plmns, tvb, offset, 1, ENC_BIG_ENDIAN);
5015 if (tvb_reported_length_remaining(tvb, offset) < 3)
5018 o1 = tvb_get_guint8(tvb, offset);
5019 o2 = tvb_get_guint8(tvb, offset + 1);
5020 o3 = tvb_get_guint8(tvb, offset + 2);
5021 proto_tree_add_string_format_value(tree, hf_ieee80211_3gpp_gc_plmn, tvb, offset, 3,
5022 "", "MCC %d%d%d MNC %d%d%c",
5023 o1 & 0x0f, (o1 & 0xf0) >> 4, o2 & 0x0f,
5024 o3 & 0x0f, (o3 & 0xf0) >> 4,
5025 ((o2 & 0xf0) == 0xf0) ? ' ' :
5026 ('0' + ((o2 & 0xf0) >> 4)));
5032 dissect_domain_name_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
5036 while (offset < end) {
5037 len = tvb_get_guint8(tvb, offset);
5038 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name_len,
5039 tvb, offset, 1, ENC_BIG_ENDIAN);
5041 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name,
5042 tvb, offset, len, ENC_ASCII|ENC_NA);
5048 dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, int offset,
5049 gboolean request, int idx)
5056 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_id,
5057 tvb, offset, 2, ENC_LITTLE_ENDIAN);
5058 id = tvb_get_letohs(tvb, offset);
5059 if (id != ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST) {
5061 proto_item_append_text(tree, " - %s",
5062 val_to_str_ext(id, &anqp_info_id_vals_ext, "Unknown (%u)"));
5063 col_append_fstr(g_pinfo->cinfo, COL_INFO, " %s",
5064 val_to_str_ext(id, &anqp_info_id_vals_ext, "Unknown (%u)"));
5065 } else if (idx == 1) {
5066 proto_item_append_text(tree, ", ..");
5067 col_append_fstr(g_pinfo->cinfo, COL_INFO, ", ..");
5070 tree = proto_item_add_subtree(item, ett_gas_anqp);
5072 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_length,
5073 tvb, offset, 2, ENC_LITTLE_ENDIAN);
5074 len = tvb_get_letohs(tvb, offset);
5076 if (tvb_reported_length_remaining(tvb, offset) < len) {
5077 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
5078 "Invalid ANQP Info length");
5083 case ANQP_INFO_ANQP_QUERY_LIST:
5084 dissect_anqp_query_list(tree, tvb, offset, offset + len);
5086 case ANQP_INFO_ANQP_CAPAB_LIST:
5087 dissect_anqp_capab_list(tree, tvb, offset, offset + len);
5089 case ANQP_INFO_VENUE_NAME_INFO:
5090 dissect_venue_name_info(tree, tvb, offset, offset + len);
5092 case ANQP_INFO_NETWORK_AUTH_TYPE_INFO:
5093 dissect_network_auth_type(tree, tvb, offset, offset + len);
5095 case ANQP_INFO_ROAMING_CONSORTIUM_LIST:
5096 dissect_roaming_consortium_list(tree, tvb, offset, offset + len);
5098 case ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO:
5099 dissect_ip_addr_type_availability_info(tree, tvb, offset);
5101 case ANQP_INFO_NAI_REALM_LIST:
5102 dissect_nai_realm_list(tree, tvb, offset, offset + len);
5104 case ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO:
5105 dissect_3gpp_cellular_network_info(tree, tvb, offset);
5107 case ANQP_INFO_DOMAIN_NAME_LIST:
5108 dissect_domain_name_list(tree, tvb, offset, offset + len);
5110 case ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST:
5111 oui = tvb_get_ntoh24(tvb, offset);
5112 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
5117 subtype = tvb_get_guint8(tvb, offset);
5118 if (subtype == WFA_SUBTYPE_P2P) {
5119 proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u: P2P ANQP",
5121 dissect_wifi_p2p_anqp(g_pinfo, tree, tvb, offset + 1, request);
5123 proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u", subtype);
5127 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
5128 tvb, offset, len, ENC_NA);
5133 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
5134 tvb, offset, len, ENC_NA);
5142 dissect_anqp(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean request)
5146 proto_item_append_text(tree, ": ANQP ");
5147 proto_item_append_text(tree, request ? "Request" : "Response");
5148 if (tvb_reported_length_remaining(tvb, offset) < 4) {
5149 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
5150 "Not enough room for ANQP header");
5153 col_append_fstr(g_pinfo->cinfo, COL_INFO, ", ANQP %s",
5154 request ? "Req" : "Resp");
5155 while (tvb_reported_length_remaining(tvb, offset) > 0) {
5156 offset += dissect_anqp_info(tree, tvb, offset, request, idx);
5162 dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, int offset,
5170 /* Query Request Length (2 octets) */
5171 req_len = tvb_get_letohs(tvb, offset);
5173 item = proto_tree_add_text(tree, tvb, offset, 2 + req_len, "Query Request");
5174 if (tvb_reported_length_remaining(tvb, offset) < 2 + req_len) {
5175 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
5176 "Invalid Query Request Length");
5177 return tvb_reported_length_remaining(tvb, offset);
5179 query = proto_item_add_subtree(item, ett_gas_query);
5181 proto_tree_add_item(query, hf_ieee80211_ff_query_request_length,
5182 tvb, offset, 2, ENC_LITTLE_ENDIAN);
5185 * Query Request (GAS query; formatted per protocol specified in the
5186 * Advertisement Protocol IE)
5189 dissect_anqp(query, tvb, offset, TRUE);
5191 proto_tree_add_item(query, hf_ieee80211_ff_query_request,
5192 tvb, offset, req_len, ENC_NA);
5195 return offset - start;
5199 dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, int offset,
5207 /* Query Response Length (2 octets) */
5208 resp_len = tvb_get_letohs(tvb, offset);
5210 item = proto_tree_add_text(tree, tvb, offset, 2 + resp_len,
5212 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
5213 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
5214 "Invalid Query Response Length");
5215 return tvb_reported_length_remaining(tvb, offset);
5217 query = proto_item_add_subtree(item, ett_gas_query);
5219 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
5220 tvb, offset, 2, ENC_LITTLE_ENDIAN);
5222 /* Query Response (optional) */
5225 dissect_anqp(query, tvb, offset, FALSE);
5227 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
5228 tvb, offset, resp_len, ENC_NA);
5232 return offset - start;
5235 static GHashTable *gas_fragment_table = NULL;
5236 static GHashTable *gas_reassembled_table = NULL;
5239 ieee80211_gas_reassembly_init(void)
5241 fragment_table_init(&gas_fragment_table);
5242 reassembled_table_init(&gas_reassembled_table);
5245 static gint ett_gas_resp_fragment = -1;
5246 static gint ett_gas_resp_fragments = -1;
5248 static int hf_ieee80211_gas_resp_fragments = -1;
5249 static int hf_ieee80211_gas_resp_fragment = -1;
5250 static int hf_ieee80211_gas_resp_fragment_overlap = -1;
5251 static int hf_ieee80211_gas_resp_fragment_overlap_conflict = -1;
5252 static int hf_ieee80211_gas_resp_fragment_multiple_tails = -1;
5253 static int hf_ieee80211_gas_resp_fragment_too_long_fragment = -1;
5254 static int hf_ieee80211_gas_resp_fragment_error = -1;
5255 static int hf_ieee80211_gas_resp_fragment_count = -1;
5256 static int hf_ieee80211_gas_resp_reassembled_in = -1;
5257 static int hf_ieee80211_gas_resp_reassembled_length = -1;
5259 static const fragment_items gas_resp_frag_items = {
5260 &ett_gas_resp_fragment,
5261 &ett_gas_resp_fragments,
5262 &hf_ieee80211_gas_resp_fragments,
5263 &hf_ieee80211_gas_resp_fragment,
5264 &hf_ieee80211_gas_resp_fragment_overlap,
5265 &hf_ieee80211_gas_resp_fragment_overlap_conflict,
5266 &hf_ieee80211_gas_resp_fragment_multiple_tails,
5267 &hf_ieee80211_gas_resp_fragment_too_long_fragment,
5268 &hf_ieee80211_gas_resp_fragment_error,
5269 &hf_ieee80211_gas_resp_fragment_count,
5270 &hf_ieee80211_gas_resp_reassembled_in,
5271 &hf_ieee80211_gas_resp_reassembled_length,
5272 /* Reassembled data field */
5274 "GAS Response fragments"
5278 dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, int offset,
5279 gboolean anqp, guint8 frag, gboolean more,
5280 guint8 dialog_token)
5287 /* Query Response Length (2 octets) */
5288 resp_len = tvb_get_letohs(tvb, offset);
5290 item = proto_tree_add_text(tree, tvb, offset, 2 + resp_len,
5292 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
5293 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
5294 "Invalid Query Response Length");
5295 return tvb_reported_length_remaining(tvb, offset);
5297 query = proto_item_add_subtree(item, ett_gas_query);
5299 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
5300 tvb, offset, 2, ENC_LITTLE_ENDIAN);
5302 /* Query Response (optional) */
5304 if (anqp && (frag == 0) && !more)
5305 dissect_anqp(query, tvb, offset, FALSE);
5307 fragment_data *frag_msg;
5308 gboolean save_fragmented;
5311 save_fragmented = g_pinfo->fragmented;
5312 g_pinfo->fragmented = TRUE;
5313 frag_msg = fragment_add_seq_check(tvb, offset, g_pinfo, dialog_token,
5315 gas_reassembled_table, frag, resp_len,
5317 new_tvb = process_reassembled_data(tvb, offset, g_pinfo,
5318 "Reassembled GAS Query Response",
5319 frag_msg, &gas_resp_frag_items,
5323 dissect_anqp(query, new_tvb, 0, FALSE);
5325 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
5327 tvb_reported_length_remaining(new_tvb, 0),
5331 /* The old tvb cannot be used anymore */
5332 ieee80211_tvb_invalid = TRUE;
5334 g_pinfo->fragmented = save_fragmented;
5339 return offset - start;
5342 /* ************************************************************************* */
5343 /* Dissect and add fixed mgmt fields to protocol tree */
5344 /* ************************************************************************* */
5347 add_fixed_field(proto_tree *tree, tvbuff_t *tvb, int offset,
5348 enum fixed_field lfcode);
5350 static guint64 last_timestamp;
5353 add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, int offset)
5355 last_timestamp = tvb_get_letoh64(tvb, offset);
5356 proto_tree_add_item(tree, hf_ieee80211_ff_timestamp, tvb, offset, 8,
5362 add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, int offset)
5364 proto_tree_add_item(tree, hf_ieee80211_ff_beacon_interval, tvb, offset, 2,
5366 col_append_fstr(g_pinfo->cinfo, COL_INFO, ", BI=%d",
5367 tvb_get_letohs(tvb, offset));
5372 add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, int offset)
5374 proto_item *cap_item;
5375 proto_tree *cap_tree;
5377 cap_item = proto_tree_add_item(tree, hf_ieee80211_ff_capture, tvb, offset, 2,
5379 cap_tree = proto_item_add_subtree(cap_item, ett_cap_tree);
5381 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ess, tvb, offset, 2,
5383 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ibss, tvb, offset, 2,
5385 if ((tvb_get_letohs(tvb, offset) & 0x0001) != 0) {
5387 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ap_poll, tvb, offset, 2,
5391 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_sta_poll, tvb, offset, 2,
5395 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_privacy, tvb, offset, 2,
5397 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_preamble, tvb, offset, 2,
5399 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_pbcc, tvb, offset, 2,
5401 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_agility, tvb, offset, 2,
5403 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_spec_man, tvb, offset, 2,
5405 proto_tree_add_item(cap_tree, hf_ieee80211_ff_short_slot_time, tvb, offset,
5406 2, ENC_LITTLE_ENDIAN);
5407 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_apsd, tvb, offset, 2,
5409 proto_tree_add_item(cap_tree, hf_ieee80211_ff_dsss_ofdm, tvb, offset, 2,
5411 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_del_blk_ack, tvb, offset, 2,
5413 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_imm_blk_ack, tvb, offset, 2,
5419 add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, int offset)
5421 proto_tree_add_item(tree, hf_ieee80211_ff_auth_alg, tvb, offset, 2,
5427 add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, int offset)
5429 proto_tree_add_item(tree, hf_ieee80211_ff_auth_seq, tvb, offset, 2,
5435 add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
5437 proto_tree_add_item(tree, hf_ieee80211_ff_current_ap, tvb, offset, 6,
5443 add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, int offset)
5445 proto_tree_add_item(tree, hf_ieee80211_ff_listen_ival, tvb, offset, 2,
5451 add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5453 proto_tree_add_item(tree, hf_ieee80211_ff_reason, tvb, offset, 2,
5459 add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, int offset)
5461 proto_tree_add_item(tree, hf_ieee80211_ff_assoc_id, tvb, offset, 2,
5467 add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5469 proto_tree_add_item(tree, hf_ieee80211_ff_status_code, tvb, offset, 2,
5475 add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5477 proto_tree_add_item(tree, hf_ieee80211_ff_category_code, tvb, offset, 1,
5483 add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5485 proto_tree_add_item(tree, hf_ieee80211_ff_action_code, tvb, offset, 1,
5491 add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, int offset)
5493 proto_tree_add_item(tree, hf_ieee80211_ff_dialog_token, tvb, offset, 1,
5499 add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5501 proto_tree_add_item(tree, hf_ieee80211_ff_wme_action_code, tvb, offset, 1,
5507 add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5509 proto_tree_add_item(tree, hf_ieee80211_ff_wme_status_code, tvb, offset, 1,
5515 add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5517 proto_tree_add_item(tree, hf_ieee80211_ff_qos_action_code, tvb, offset, 1,
5523 add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5525 proto_tree_add_item(tree, hf_ieee80211_ff_ba_action, tvb, offset, 1,
5531 add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, int offset)
5533 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_params,
5534 ett_ff_ba_param_tree,
5535 ieee80211_ff_block_ack_params_fields,
5541 add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, int offset)
5543 proto_tree_add_item(tree, hf_ieee80211_ff_block_ack_timeout, tvb, offset, 2,
5549 add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, int offset)
5551 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_ssc,
5552 ett_ff_ba_ssc_tree, ieee80211_ff_block_ack_ssc_fields,
5558 add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, int offset)
5560 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_tsinfo,
5561 ett_tsinfo_tree, ieee80211_tsinfo_fields,
5567 add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, int offset)
5569 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_action, tvb, offset, 1,
5575 add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, int offset)
5577 proto_tree_add_item(tree, hf_ieee80211_ff_multihop_action, tvb, offset, 1,
5583 add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, int offset)
5588 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_flags, tvb, offset, 1,
5590 flags = tvb_get_guint8(tvb, offset);
5592 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_ttl, tvb, offset, 1,
5595 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_sequence, tvb, offset, 4,
5599 switch (flags & 0x03) {
5601 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr4, tvb, offset, 6,
5606 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr5, tvb, offset, 6,
5609 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr6, tvb, offset, 6,
5614 proto_item_append_text(tree, "Unknown Address Extension Mode");
5617 /* no default action */
5621 return offset - start;
5625 add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, int offset)
5627 proto_tree_add_item(tree, hf_ieee80211_ff_selfprot_action, tvb, offset, 1,
5633 add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5635 proto_tree_add_item(tree, hf_ieee80211_ff_dls_action_code, tvb, offset, 1,
5641 add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
5643 proto_tree_add_item(tree, hf_ieee80211_ff_dst_mac_addr, tvb, offset, 6,
5649 add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, int offset)
5651 proto_tree_add_item(tree, hf_ieee80211_ff_src_mac_addr, tvb, offset, 6,
5657 add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, int offset)
5659 proto_tree_add_item(tree, hf_ieee80211_ff_dls_timeout, tvb, offset, 2,
5665 add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, int offset)
5667 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_delba_param,
5668 ett_ff_ba_param_tree, ieee80211_ff_delba_param_fields,
5674 add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, int offset)
5676 proto_tree_add_item(tree, hf_ieee80211_ff_max_reg_pwr, tvb, offset, 2,
5682 add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, int offset)
5684 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
5685 2, ENC_LITTLE_ENDIAN);
5690 add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, int offset)
5692 proto_tree_add_item(tree, hf_ieee80211_ff_country_str, tvb, offset, 3,
5698 add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, int offset)
5700 proto_tree_add_item(tree, hf_ieee80211_ff_max_tx_pwr, tvb, offset, 1,
5706 add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, int offset)
5708 proto_tree_add_item(tree, hf_ieee80211_ff_tx_pwr_used, tvb, offset, 1,
5714 add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, int offset)
5716 proto_tree_add_item(tree, hf_ieee80211_ff_transceiver_noise_floor, tvb,
5717 offset, 1, ENC_LITTLE_ENDIAN);
5722 add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, int offset)
5724 proto_tree_add_item(tree, hf_ieee80211_ff_channel_width, tvb, offset, 1,
5730 add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, int offset)
5732 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
5733 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
5739 add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, int offset)
5741 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_qos_info_sta,
5742 ett_ff_qos_info, ieee80211_ff_qos_info_sta_fields,
5748 add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
5750 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_sm_pwr_save,
5751 ett_ff_sm_pwr_save, ieee80211_ff_sw_pwr_save_fields,
5757 add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
5759 proto_tree_add_item(tree, hf_ieee80211_ff_pco_phase_cntrl, tvb, offset, 1,
5765 add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, int offset)
5767 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_psmp_param_set,
5768 ett_ff_psmp_param_set,
5769 ieee80211_ff_psmp_param_set_fields,
5775 add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, int offset)
5777 proto_item *mimo_item;
5778 proto_tree *mimo_tree;
5780 mimo_item = proto_tree_add_item(tree, hf_ieee80211_ff_mimo_cntrl, tvb,
5782 mimo_tree = proto_item_add_subtree(mimo_item, ett_ff_mimo_cntrl);
5784 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_nc_index, tvb,
5785 offset, 1, ENC_LITTLE_ENDIAN);
5786 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_nr_index, tvb,
5787 offset, 1, ENC_LITTLE_ENDIAN);
5788 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_channel_width, tvb,
5789 offset, 1, ENC_LITTLE_ENDIAN);
5790 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_grouping, tvb,
5791 offset, 1, ENC_LITTLE_ENDIAN);
5792 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_coefficient_size,
5793 tvb, offset, 2, ENC_LITTLE_ENDIAN);
5794 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_codebook_info, tvb,
5795 offset, 1, ENC_LITTLE_ENDIAN);
5796 proto_tree_add_item(mimo_tree,
5797 hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment, tvb,
5798 offset, 1, ENC_LITTLE_ENDIAN);
5799 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_reserved, tvb,
5800 offset, 1, ENC_LITTLE_ENDIAN);
5803 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
5804 tvb, offset, 4, ENC_LITTLE_ENDIAN);
5810 add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, int offset)
5812 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ant_selection,
5813 ett_ff_ant_sel, ieee80211_ff_ant_selection_fields,
5819 add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
5822 proto_tree_add_bitmask(tree, tvb, offset,
5823 hf_ieee80211_ff_ext_channel_switch_announcement,
5824 ett_ff_chan_switch_announce,
5825 ieee80211_ff_ext_channel_switch_announcement_fields,
5831 add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, int offset)
5833 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ht_info,
5834 ett_ff_ht_info, ieee80211_ff_ht_info_fields,
5840 add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5842 proto_tree_add_item(tree, hf_ieee80211_ff_ht_action, tvb, offset, 1,
5848 add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, int offset)
5850 proto_item *psmp_item;
5851 proto_tree *psmp_tree;
5853 psmp_item = proto_tree_add_item(tree, hf_ieee80211_ff_psmp_sta_info, tvb,
5854 offset, 8, ENC_LITTLE_ENDIAN);
5855 psmp_tree = proto_item_add_subtree(psmp_item, ett_ff_psmp_sta_info);
5857 proto_tree_add_item(psmp_item, hf_ieee80211_ff_psmp_sta_info_type, tvb,
5858 offset, 4, ENC_LITTLE_ENDIAN);
5860 switch (tvb_get_letohl(tvb, offset) & PSMP_STA_INFO_FLAG_TYPE) {
5861 case PSMP_STA_INFO_BROADCAST:
5862 proto_tree_add_item(psmp_tree,
5863 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
5864 offset, 4, ENC_LITTLE_ENDIAN);
5865 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
5866 tvb, offset, 4, ENC_LITTLE_ENDIAN);
5867 /* Missing 64 bit bitmask... */
5868 proto_tree_add_uint64(psmp_tree,
5869 hf_ieee80211_ff_psmp_sta_info_reserved_large,
5871 (tvb_get_letoh64(tvb, offset) &
5872 G_GINT64_CONSTANT(0xFFFFFFFFFFE00000)) >> 21);
5874 case PSMP_STA_INFO_MULTICAST:
5875 proto_tree_add_item(psmp_tree,
5876 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
5877 offset, 4, ENC_LITTLE_ENDIAN);
5878 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
5879 tvb, offset, 4, ENC_LITTLE_ENDIAN);
5880 /* Missing 64 bit bitmask... */
5881 proto_tree_add_uint64(psmp_tree,
5882 hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
5884 (tvb_get_letoh64(tvb, offset) &
5885 G_GINT64_CONSTANT(0xFFFFFFFFFFE00000)) >> 21);
5887 case PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED:
5888 proto_tree_add_item(psmp_tree,
5889 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
5890 offset, 4, ENC_LITTLE_ENDIAN);
5891 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
5892 tvb, offset, 4, ENC_LITTLE_ENDIAN);
5894 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_sta_id, tvb,
5895 offset, 4, ENC_LITTLE_ENDIAN);
5898 proto_tree_add_item(psmp_tree,
5899 hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
5900 tvb, offset, 4, ENC_LITTLE_ENDIAN);
5901 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_utt_duration,
5902 tvb, offset, 4, ENC_LITTLE_ENDIAN);
5903 proto_tree_add_item(psmp_tree,
5904 hf_ieee80211_ff_psmp_sta_info_reserved_small, tvb,
5905 offset, 4, ENC_LITTLE_ENDIAN);
5913 add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, int offset)
5915 proto_item *sched_item;
5916 proto_tree *sched_tree;
5918 sched_item = proto_tree_add_item(tree, hf_ieee80211_sched_info, tvb, offset,
5919 2, ENC_LITTLE_ENDIAN);
5920 sched_tree = proto_item_add_subtree(sched_item, ett_sched_tree);
5922 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_agg, tvb, offset, 2,
5924 if (tvb_get_letohs(tvb, offset) & 0x0001) {
5925 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_tsid, tvb, offset,
5926 2, ENC_LITTLE_ENDIAN);
5927 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_dir, tvb, offset,
5928 2, ENC_LITTLE_ENDIAN);
5935 add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
5937 proto_tree_add_item(tree, hf_ieee80211_ff_public_action, tvb, offset, 1,
5943 add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, int offset)
5945 switch (tvb_get_guint8(tvb, offset + 1)) {
5946 case SM_ACTION_MEASUREMENT_REQUEST:
5947 case SM_ACTION_MEASUREMENT_REPORT:
5948 case SM_ACTION_TPC_REQUEST:
5949 case SM_ACTION_TPC_REPORT:
5950 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5951 add_fixed_field(tree, tvb, offset + 1, FIELD_ACTION_CODE);
5952 add_fixed_field(tree, tvb, offset + 2, FIELD_DIALOG_TOKEN);
5954 case SM_ACTION_CHAN_SWITCH_ANNC:
5955 case SM_ACTION_EXT_CHAN_SWITCH_ANNC:
5956 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5957 add_fixed_field(tree, tvb, offset + 1, FIELD_ACTION_CODE);
5960 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5961 add_fixed_field(tree, tvb, offset + 1, FIELD_ACTION_CODE);
5967 add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, int offset)
5969 switch (tvb_get_guint8(tvb, offset + 1)) {
5970 case SM_ACTION_ADDTS_REQUEST:
5971 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5972 add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
5973 add_fixed_field(tree, tvb, offset + 2, FIELD_DIALOG_TOKEN);
5975 case SM_ACTION_ADDTS_RESPONSE:
5976 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5977 add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
5978 add_fixed_field(tree, tvb, offset + 2, FIELD_DIALOG_TOKEN);
5979 add_fixed_field(tree, tvb, offset + 3, FIELD_STATUS_CODE);
5981 case SM_ACTION_DELTS:
5982 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5983 add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
5984 add_fixed_field(tree, tvb, offset + 2, FIELD_QOS_TS_INFO);
5985 add_fixed_field(tree, tvb, offset + 5, FIELD_REASON_CODE);
5987 case SM_ACTION_QOS_SCHEDULE:
5988 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5989 add_fixed_field(tree, tvb, offset + 1, FIELD_QOS_ACTION_CODE);
5992 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
5998 add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, int offset)
6000 switch (tvb_get_guint8(tvb, offset + 1)) {
6001 case SM_ACTION_DLS_REQUEST:
6002 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6003 add_fixed_field(tree, tvb, offset + 1, FIELD_DLS_ACTION_CODE);
6004 add_fixed_field(tree, tvb, offset + 2, FIELD_DST_MAC_ADDR);
6005 add_fixed_field(tree, tvb, offset + 8, FIELD_SRC_MAC_ADDR);
6006 add_fixed_field(tree, tvb, offset + 14, FIELD_CAP_INFO);
6007 add_fixed_field(tree, tvb, offset + 16, FIELD_DLS_TIMEOUT);
6009 case SM_ACTION_DLS_RESPONSE:
6010 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6011 add_fixed_field(tree, tvb, offset + 1, FIELD_DLS_ACTION_CODE);
6012 add_fixed_field(tree, tvb, offset + 2, FIELD_STATUS_CODE);
6013 add_fixed_field(tree, tvb, offset + 4, FIELD_DST_MAC_ADDR);
6014 add_fixed_field(tree, tvb, offset + 10, FIELD_SRC_MAC_ADDR);
6015 if (!hf_ieee80211_ff_status_code) {
6016 add_fixed_field(tree, tvb, offset + 16, FIELD_CAP_INFO);
6019 case SM_ACTION_DLS_TEARDOWN:
6020 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6021 add_fixed_field(tree, tvb, offset + 1, FIELD_DLS_ACTION_CODE);
6022 add_fixed_field(tree, tvb, offset + 2, FIELD_DST_MAC_ADDR);
6023 add_fixed_field(tree, tvb, offset + 8, FIELD_SRC_MAC_ADDR);
6024 add_fixed_field(tree, tvb, offset + 14, FIELD_REASON_CODE);
6027 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6033 add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, int offset)
6035 guint start = offset;
6037 switch (tvb_get_guint8(tvb, offset + 1)) {
6038 case BA_ADD_BLOCK_ACK_REQUEST:
6039 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6040 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
6041 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6042 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_PARAM);
6043 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_TIMEOUT);
6044 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
6046 case BA_ADD_BLOCK_ACK_RESPONSE:
6047 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6048 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
6049 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6050 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
6051 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_PARAM);
6052 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_TIMEOUT);
6054 case BA_DELETE_BLOCK_ACK:
6055 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6056 offset += add_fixed_field(tree, tvb, offset, FIELD_BLOCK_ACK_ACTION_CODE);
6057 offset += add_fixed_field(tree, tvb, offset, FIELD_DELBA_PARAM_SET);
6058 offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
6062 return offset - start; /* Size of fixed fields */
6066 add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, int offset)
6068 guint start = offset;
6073 guint8 dialog_token;
6077 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6078 code = tvb_get_guint8(tvb, offset);
6079 offset += add_fixed_field(tree, tvb, offset, FIELD_PA_ACTION_CODE);
6082 case PA_VENDOR_SPECIFIC:
6083 oui = tvb_get_ntoh24(tvb, offset);
6084 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
6088 subtype = tvb_get_guint8(tvb, offset);
6089 proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u", subtype);
6091 if (subtype == WFA_SUBTYPE_P2P) {
6092 offset = dissect_wifi_p2p_public_action(g_pinfo, tree, tvb, offset);
6096 /* Don't know how to handle this vendor */
6100 case PA_GAS_INITIAL_REQUEST:
6101 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6102 offset += dissect_advertisement_protocol(g_pinfo, tree, tvb, offset,
6104 offset += dissect_gas_initial_request(tree, tvb, offset, anqp);
6106 case PA_GAS_INITIAL_RESPONSE:
6107 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6108 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
6109 offset += add_fixed_field(tree, tvb, offset, FIELD_GAS_COMEBACK_DELAY);
6110 offset += dissect_advertisement_protocol(g_pinfo, tree, tvb, offset,
6112 offset += dissect_gas_initial_response(tree, tvb, offset, anqp);
6114 case PA_GAS_COMEBACK_REQUEST:
6115 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6117 case PA_GAS_COMEBACK_RESPONSE:
6118 dialog_token = tvb_get_guint8(tvb, offset);
6119 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6120 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
6121 frag = tvb_get_guint8(tvb, offset) & 0x7f;
6122 more = (tvb_get_guint8(tvb, offset) & 0x80) != 0;
6123 offset += add_fixed_field(tree, tvb, offset, FIELD_GAS_FRAGMENT_ID);
6124 offset += add_fixed_field(tree, tvb, offset, FIELD_GAS_COMEBACK_DELAY);
6125 offset += dissect_advertisement_protocol(g_pinfo, tree, tvb, offset,
6127 offset += dissect_gas_comeback_response(tree, tvb, offset, anqp, frag,
6128 more, dialog_token);
6130 case PA_TDLS_DISCOVERY_RESPONSE:
6131 col_set_str(g_pinfo->cinfo, COL_PROTOCOL, "TDLS");
6132 col_set_str(g_pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
6133 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6134 offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
6138 return offset - start; /* Size of fixed fields */
6142 add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset)
6144 guint start = offset;
6147 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6148 code = tvb_get_guint8(tvb, offset);
6149 offset += add_fixed_field(tree, tvb, offset, FIELD_FT_ACTION_CODE);
6152 case FT_ACTION_REQUEST:
6153 offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
6154 offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
6155 /* Followed by FT Request frame body (IEs) */
6157 case FT_ACTION_RESPONSE:
6158 offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
6159 offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
6160 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
6161 /* Followed by FT Response frame body (IEs) */
6163 case FT_ACTION_CONFIRM:
6164 offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
6165 offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
6166 /* Followed by FT Confirm frame body (IEs) */
6169 offset += add_fixed_field(tree, tvb, offset, FIELD_STA_ADDRESS);
6170 offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_AP_ADDRESS);
6171 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
6172 /* Followed by FT Ack frame body (IEs) */
6176 return offset - start; /* Size of fixed fields */
6180 add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, int offset)
6182 guint start = offset;
6185 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6186 code = tvb_get_guint8(tvb, offset);
6187 offset += add_fixed_field(tree, tvb, offset, FIELD_SA_QUERY_ACTION_CODE);
6190 case SA_QUERY_REQUEST:
6191 offset += add_fixed_field(tree, tvb, offset, FIELD_TRANSACTION_ID);
6193 case SA_QUERY_RESPONSE:
6194 offset += add_fixed_field(tree, tvb, offset, FIELD_TRANSACTION_ID);
6198 return offset - start; /* Size of fixed fields */
6202 add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, int offset)
6206 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6207 offset += add_fixed_field(tree, tvb, offset, FIELD_MESH_ACTION);
6208 /* The only fixed fields are the category and mesh action. The rest are IEs.
6211 if (tvb_get_guint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE) {
6212 /* ..except for the TBTT Adjustment Response, which has a status code field
6214 length += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
6220 add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, int offset)
6222 guint start = offset;
6224 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6225 offset += add_fixed_field(tree, tvb, offset, FIELD_MULTIHOP_ACTION);
6226 offset += add_fixed_field(tree, tvb, offset, FIELD_MESH_CONTROL);
6227 return offset - start;
6231 add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, int offset)
6233 guint start = offset;
6235 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6236 offset += add_fixed_field(tree, tvb, offset, FIELD_SELFPROT_ACTION);
6238 switch (tvb_get_guint8(tvb, start + 1)) {
6239 case SELFPROT_ACTION_MESH_PEERING_OPEN:
6240 offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
6242 case SELFPROT_ACTION_MESH_PEERING_CONFIRM:
6243 offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
6244 offset += add_fixed_field(tree, tvb, offset, FIELD_ASSOC_ID);
6248 return offset - start;
6252 wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, int offset)
6258 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6260 mode = tvb_get_guint8(tvb, offset);
6261 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_pref_cand,
6262 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6263 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_abridged,
6264 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6265 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_disassoc_imminent,
6266 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6267 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_bss_term_included,
6268 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6269 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
6270 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6273 proto_tree_add_item(tree, hf_ieee80211_ff_disassoc_timer, tvb, offset, 2,
6277 proto_tree_add_item(tree, hf_ieee80211_ff_validity_interval, tvb, offset, 1,
6282 proto_tree_add_text(tree, tvb, offset, 8, "BSS Termination Duration");
6288 url_len = tvb_get_guint8(tvb, offset);
6289 proto_tree_add_item(tree, hf_ieee80211_ff_url_len, tvb, offset, 1,
6292 proto_tree_add_item(tree, hf_ieee80211_ff_url, tvb, offset, url_len,
6297 left = tvb_reported_length_remaining(tvb, offset);
6299 proto_tree_add_text(tree, tvb, offset, left,
6300 "BSS Transition Candidate List Entries");
6304 return offset - start;
6308 add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, int offset)
6311 guint start = offset;
6313 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6314 code = tvb_get_guint8(tvb, offset);
6315 offset += add_fixed_field(tree, tvb, offset, FIELD_WNM_ACTION_CODE);
6317 case WNM_BSS_TRANS_MGMT_REQ:
6318 offset += wnm_bss_trans_mgmt_req(tree, tvb, offset);
6322 return offset - start; /* Size of fixed fields */
6326 add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, int offset)
6330 guint start = offset;
6332 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6333 code = tvb_get_guint8(tvb, offset);
6334 offset += add_fixed_field(tree, tvb, offset, FIELD_TDLS_ACTION_CODE);
6336 case TDLS_SETUP_REQUEST:
6337 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6338 offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
6340 case TDLS_SETUP_RESPONSE:
6341 status = tvb_get_letohs(tvb, offset);
6342 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
6343 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6344 if (tvb_reported_length_remaining(tvb, offset) < 2) {
6346 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
6347 "TDLS Setup Response (success) does not "
6348 "include mandatory fields");
6352 offset += add_fixed_field(tree, tvb, offset, FIELD_CAP_INFO);
6354 case TDLS_SETUP_CONFIRM:
6355 status = tvb_get_letohs(tvb, offset);
6356 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
6357 if (tvb_reported_length_remaining(tvb, offset) < 1) {
6359 expert_add_info_format(g_pinfo, tree, PI_MALFORMED, PI_ERROR,
6360 "TDLS Setup Confirm (success) does not include "
6361 "mandatory fields");
6365 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6368 offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
6370 case TDLS_PEER_TRAFFIC_INDICATION:
6371 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6373 case TDLS_CHANNEL_SWITCH_REQUEST:
6374 offset += add_fixed_field(tree, tvb, offset, FIELD_TARGET_CHANNEL);
6375 offset += add_fixed_field(tree, tvb, offset, FIELD_REGULATORY_CLASS);
6377 case TDLS_CHANNEL_SWITCH_RESPONSE:
6378 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
6380 case TDLS_PEER_PSM_REQUEST:
6381 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6383 case TDLS_PEER_PSM_RESPONSE:
6384 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6385 offset += add_fixed_field(tree, tvb, offset, FIELD_STATUS_CODE);
6387 case TDLS_PEER_TRAFFIC_RESPONSE:
6388 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6390 case TDLS_DISCOVERY_REQUEST:
6391 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6395 return offset - start; /* Size of fixed fields */
6399 add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, int offset)
6401 guint start = offset;
6403 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6404 offset += add_fixed_field(tree, tvb, offset, FIELD_WME_ACTION_CODE);
6405 offset += add_fixed_field(tree, tvb, offset, FIELD_DIALOG_TOKEN);
6406 offset += add_fixed_field(tree, tvb, offset, FIELD_WME_STATUS_CODE);
6408 return offset - start; /* Size of fixed fields */
6412 add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, int offset)
6414 guint start = offset;
6418 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6419 oui = tvb_get_ntoh24(tvb, offset);
6420 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
6424 offset = dissect_vendor_action_marvell(tree, tvb, offset);
6427 subtype = tvb_get_guint8(tvb, offset);
6428 proto_tree_add_text(tree, tvb, offset, 1, "Subtype %u", subtype);
6430 if (subtype == WFA_SUBTYPE_P2P) {
6431 offset = dissect_wifi_p2p_action(tree, tvb, offset);
6435 /* Don't know how to handle this vendor */
6439 return offset - start; /* Size of fixed fields */
6443 add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, int offset)
6445 guint start = offset;
6447 mimo_control_t mimo_cntrl;
6449 offset += add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6450 offset += add_fixed_field(tree, tvb, offset, FIELD_HT_ACTION_CODE);
6452 switch (tvb_get_guint8(tvb, offset - 1)) {
6453 case HT_ACTION_NOTIFY_CHAN_WIDTH:
6454 offset += add_fixed_field(tree, tvb, offset, FIELD_CHANNEL_WIDTH);
6456 case HT_ACTION_SM_PWR_SAVE:
6457 offset += add_fixed_field(tree, tvb, offset, FIELD_SM_PWR_CNTRL);
6459 case HT_ACTION_PSMP_ACTION:
6460 n_sta = tvb_get_guint8(tvb, offset);
6461 offset += add_fixed_field(tree, tvb, offset, FIELD_PSMP_PARAM_SET);
6462 for (i = 0; i < (n_sta & 0x0F); i++) {
6463 offset += add_fixed_field(tree, tvb, offset, FIELD_PSMP_STA_INFO);
6466 case HT_ACTION_SET_PCO_PHASE:
6467 offset += add_fixed_field(tree, tvb, offset, FIELD_PCO_PHASE_CNTRL);
6469 case HT_ACTION_MIMO_CSI:
6470 mimo_cntrl = get_mimo_control(tvb, offset);
6471 offset += add_fixed_field(tree, tvb, offset, FIELD_MIMO_CNTRL);
6472 offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl);
6474 case HT_ACTION_MIMO_BEAMFORMING:
6475 mimo_cntrl = get_mimo_control(tvb, offset);
6476 offset += add_fixed_field(tree, tvb, offset, FIELD_MIMO_CNTRL);
6477 offset += add_mimo_beamforming_feedback_report(tree, tvb, offset,
6480 case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING:
6481 mimo_cntrl = get_mimo_control(tvb, offset);
6482 offset += add_fixed_field(tree, tvb, offset, FIELD_MIMO_CNTRL);
6483 offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb,
6487 case HT_ACTION_ANT_SEL_FEEDBACK:
6488 offset += add_fixed_field(tree, tvb, offset, FIELD_ANT_SELECTION);
6490 case HT_ACTION_HT_INFO_EXCHANGE:
6491 offset += add_fixed_field(tree, tvb, offset, FIELD_HT_INFORMATION);
6495 return offset - start;
6499 add_ff_action(proto_tree *tree, tvbuff_t *tvb, int offset)
6501 switch (tvb_get_guint8(tvb, offset) & 0x7f) {
6502 case CAT_SPECTRUM_MGMT:
6503 return add_ff_action_spectrum_mgmt(tree, tvb, offset);
6505 return add_ff_action_qos(tree, tvb, offset);
6507 return add_ff_action_dls(tree, tvb, offset);
6509 return add_ff_action_block_ack(tree, tvb, offset);
6511 return add_ff_action_public(tree, tvb, offset);
6512 case CAT_FAST_BSS_TRANSITION:
6513 return add_ff_action_fast_bss_transition(tree, tvb, offset);
6515 return add_ff_action_sa_query(tree, tvb, offset);
6517 return add_ff_action_mesh(tree, tvb, offset);
6519 return add_ff_action_multihop(tree, tvb, offset);
6520 case CAT_SELF_PROTECTED:
6521 return add_ff_action_self_protected(tree, tvb, offset);
6523 return add_ff_action_wnm(tree, tvb, offset);
6525 return add_ff_action_tdls(tree, tvb, offset);
6526 case CAT_MGMT_NOTIFICATION: /* Management notification frame */
6527 return add_ff_action_mgmt_notification(tree, tvb, offset);
6528 case CAT_VENDOR_SPECIFIC: /* Vendor Specific Category */
6529 return add_ff_action_vendor_specific(tree, tvb, offset);
6531 return add_ff_action_ht(tree, tvb, offset);
6533 add_fixed_field(tree, tvb, offset, FIELD_CATEGORY_CODE);
6539 add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
6541 proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1,
6547 add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, int offset)
6549 proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6,
6555 add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, int offset)
6557 proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6,
6563 add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, int offset)
6565 proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2,
6571 add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, int offset)
6573 proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1,
6575 proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1,
6581 add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
6583 proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset,
6589 add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, int offset)
6591 proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2,
6597 add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
6600 code = tvb_get_guint8(tvb, offset);
6601 col_set_str(g_pinfo->cinfo, COL_INFO,
6602 val_to_str_ext_const(code, &tdls_action_codes_ext,
6603 "Unknown TDLS Action"));
6604 proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1,
6610 add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, int offset)
6612 proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1,
6618 add_ff_regulatory_class(proto_tree *tree, tvbuff_t *tvb, int offset)
6620 proto_tree_add_item(tree, hf_ieee80211_ff_regulatory_class, tvb, offset, 1,
6626 add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, int offset)
6630 code = tvb_get_guint8(tvb, offset);
6631 col_set_str(g_pinfo->cinfo, COL_INFO,
6632 val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action"));
6633 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_BIG_ENDIAN);
6637 struct ieee80211_fixed_field_dissector {
6638 enum fixed_field lfcode;
6639 guint (*dissector)(proto_tree *tree, tvbuff_t *tvb, int offset);
6642 #define FF_FIELD(f, func) { FIELD_ ## f, add_ff_ ## func }
6644 static const struct ieee80211_fixed_field_dissector ff_dissectors[] = {
6645 FF_FIELD(TIMESTAMP , timestamp),
6646 FF_FIELD(BEACON_INTERVAL , beacon_interval),
6647 FF_FIELD(CAP_INFO , cap_info),
6648 FF_FIELD(AUTH_ALG , auth_alg),
6649 FF_FIELD(AUTH_TRANS_SEQ , auth_trans_seq),
6650 FF_FIELD(CURRENT_AP_ADDR , current_ap_addr),
6651 FF_FIELD(LISTEN_IVAL , listen_ival),
6652 FF_FIELD(REASON_CODE , reason_code),
6653 FF_FIELD(ASSOC_ID , assoc_id),
6654 FF_FIELD(STATUS_CODE , status_code),
6655 FF_FIELD(CATEGORY_CODE , category_code),
6656 FF_FIELD(ACTION_CODE , action_code),
6657 FF_FIELD(DIALOG_TOKEN , dialog_token),
6658 FF_FIELD(WME_ACTION_CODE , wme_action_code),
6659 FF_FIELD(WME_STATUS_CODE , wme_status_code),
6660 FF_FIELD(QOS_ACTION_CODE , qos_action_code),
6661 FF_FIELD(BLOCK_ACK_ACTION_CODE , block_ack_action_code),
6662 FF_FIELD(BLOCK_ACK_PARAM , block_ack_param),
6663 FF_FIELD(BLOCK_ACK_TIMEOUT , block_ack_timeout),
6664 FF_FIELD(BLOCK_ACK_SSC , block_ack_ssc),
6665 FF_FIELD(QOS_TS_INFO , qos_ts_info),
6666 FF_FIELD(MESH_ACTION , mesh_action),
6667 FF_FIELD(MULTIHOP_ACTION , multihop_action),
6668 FF_FIELD(MESH_CONTROL , mesh_control),
6669 FF_FIELD(SELFPROT_ACTION , selfprot_action),
6670 FF_FIELD(DLS_ACTION_CODE , dls_action_code),
6671 FF_FIELD(DST_MAC_ADDR , dst_mac_addr),
6672 FF_FIELD(SRC_MAC_ADDR , src_mac_addr),
6673 FF_FIELD(DLS_TIMEOUT , dls_timeout),
6674 FF_FIELD(DELBA_PARAM_SET , delba_param_set),
6675 FF_FIELD(MAX_REG_PWR , max_reg_pwr),
6676 FF_FIELD(MEASUREMENT_PILOT_INT , measurement_pilot_int),
6677 FF_FIELD(COUNTRY_STR , country_str),
6678 FF_FIELD(MAX_TX_PWR , max_tx_pwr),
6679 FF_FIELD(TX_PWR_USED , tx_pwr_used),
6680 FF_FIELD(TRANSCEIVER_NOISE_FLOOR , transceiver_noise_floor),
6681 FF_FIELD(CHANNEL_WIDTH , channel_width),
6682 FF_FIELD(QOS_INFO_AP , qos_info_ap),
6683 FF_FIELD(QOS_INFO_STA , qos_info_sta),
6684 FF_FIELD(SM_PWR_CNTRL , sm_pwr_cntrl),
6685 FF_FIELD(PCO_PHASE_CNTRL , pco_phase_cntrl),
6686 FF_FIELD(PSMP_PARAM_SET , psmp_param_set),
6687 FF_FIELD(MIMO_CNTRL , mimo_cntrl),
6688 FF_FIELD(ANT_SELECTION , ant_selection),
6689 FF_FIELD(EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT , extended_channel_switch_announcement) ,
6690 FF_FIELD(HT_INFORMATION , ht_information),
6691 FF_FIELD(HT_ACTION_CODE , ht_action_code),
6692 FF_FIELD(PSMP_STA_INFO , psmp_sta_info),
6693 FF_FIELD(SCHEDULE_INFO , schedule_info),
6694 FF_FIELD(PA_ACTION_CODE , pa_action_code),
6695 FF_FIELD(ACTION , action),
6696 FF_FIELD(FT_ACTION_CODE , ft_action_code),
6697 FF_FIELD(STA_ADDRESS , sta_address),
6698 FF_FIELD(TARGET_AP_ADDRESS , target_ap_address),
6699 FF_FIELD(GAS_COMEBACK_DELAY , gas_comeback_delay),
6700 FF_FIELD(GAS_FRAGMENT_ID , gas_fragment_id),
6701 FF_FIELD(SA_QUERY_ACTION_CODE , sa_query_action_code),
6702 FF_FIELD(TRANSACTION_ID , transaction_id),
6703 FF_FIELD(TDLS_ACTION_CODE , tdls_action_code),
6704 FF_FIELD(TARGET_CHANNEL , target_channel),
6705 FF_FIELD(REGULATORY_CLASS , regulatory_class),
6706 FF_FIELD(WNM_ACTION_CODE , wnm_action_code),
6713 add_fixed_field(proto_tree *tree, tvbuff_t *tvb, int offset,
6714 enum fixed_field lfcode)
6717 for (i = 0; ff_dissectors[i].dissector; i++) {
6718 if (ff_dissectors[i].lfcode == lfcode) {
6719 return ff_dissectors[i].dissector(tree, tvb, offset);
6725 static const value_string ieee80211_rsn_cipher_vals[] = {
6727 {1, "WEP (40-bit)"},
6731 {5, "WEP (104-bit)"},
6733 {7, "Group addressed traffic not allowed"},
6737 static const value_string ieee80211_rsn_keymgmt_vals[] = {
6741 {3, "FT over IEEE 802.1X"},
6742 {4, "FT using PSK"},
6743 {5, "WPA (SHA256)"},
6744 {6, "PSK (SHA256)"},
6745 {7, "TDLS / TPK Handshake"},
6750 oui_base_custom(gchar *result, guint32 oui)
6753 const gchar *manuf_name;
6755 p_oui[0] = oui >> 16 & 0xFF;
6756 p_oui[1] = oui >> 8 & 0xFF;
6757 p_oui[2] = oui & 0xFF;
6759 /* Attempt an OUI lookup. */
6760 manuf_name = get_manuf_name_if_known(p_oui);
6761 if (manuf_name == NULL) {
6762 /* Could not find an OUI. */
6763 g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x", p_oui[0], p_oui[1], p_oui[2]);
6766 /* Found an address string. */
6767 g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x (%s)", p_oui[0], p_oui[1], p_oui[2], manuf_name);
6772 rsn_gcs_base_custom(gchar *result, guint32 gcs)
6776 oui_result = ep_alloc(SHORT_STR);
6777 oui_result[0] = '\0';
6778 oui_base_custom(oui_result, gcs >> 8);
6779 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
6780 val_to_str(gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d"));
6784 rsn_pcs_base_custom(gchar *result, guint32 pcs)
6788 oui_result = ep_alloc(SHORT_STR);
6789 oui_result[0] = '\0';
6790 oui_base_custom(oui_result, pcs >> 8);
6791 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
6792 val_to_str(pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d"));
6796 rsn_akms_base_custom(gchar *result, guint32 akms)
6800 oui_result = ep_alloc(SHORT_STR);
6801 oui_result[0] = '\0';
6802 oui_base_custom(oui_result, akms >> 8);
6803 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
6804 val_to_str(akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d"));
6808 rsn_pcs_return(guint32 pcs)
6812 result = ep_alloc(SHORT_STR);
6814 rsn_pcs_base_custom(result, pcs);
6820 rsn_akms_return(guint32 akms)
6824 result = ep_alloc(SHORT_STR);
6826 rsn_akms_base_custom(result, akms);
6832 rsn_gmcs_base_custom(gchar *result, guint32 gmcs)
6836 oui_result = ep_alloc(SHORT_STR);
6837 oui_result[0] = '\0';
6838 oui_base_custom(oui_result, gmcs >> 8);
6839 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
6840 val_to_str(gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d"));
6844 static const value_string ieee802111_wfa_ie_type_vals[] = {
6845 { 1, "WPA Information Element" },
6851 static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] = {
6853 { 1, "WEP (40-bit)" },
6857 { 5, "WEP (104-bit)" },
6859 { 7, "Group addressed traffic not allowed" },
6863 static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] = {
6867 { 3, "FT over IEEE 802.1X" },
6868 { 4, "FT using PSK" },
6869 { 5, "WPA (SHA256)" },
6870 { 6, "PSK (SHA256)" },
6871 { 7, "TDLS / TPK Handshake" },
6875 static const value_string ieee80211_wfa_ie_wme_acs_vals[] = {
6876 { 0, "Best Effort" },
6877 { 1, "Background" },
6883 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals[] = {
6886 { 2, "Direct link" },
6887 { 3, "Bidirectional link" },
6891 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals[] = {
6897 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals[] = {
6898 { 0, "Best Effort" },
6899 { 1, "Background" },
6901 { 3, "Excellent Effort" },
6902 { 4, "Controlled Load" },
6905 { 7, "Network Control" },
6909 static const value_string ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals[] = {
6910 { 0, "WMM AP may deliver all buffered frames (MSDUs and MMPDUs)" },
6911 { 1, "WMM AP may deliver a maximum of 2 buffered frames (MSDUs and MMPDUs) per USP" },
6912 { 2, "WMM AP may deliver a maximum of 4 buffered frames (MSDUs and MMPDUs) per USP" },
6913 { 3, "WMM AP may deliver a maximum of 6 buffered frames (MSDUs and MMPDUs) per USP" },
6916 static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = {
6917 "WMM delivery and trigger enabled",
6922 wpa_mcs_base_custom(gchar *result, guint32 mcs)
6926 oui_result = ep_alloc(SHORT_STR);
6927 oui_result[0] = '\0';
6928 oui_base_custom(oui_result, mcs >> 8);
6929 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
6930 val_to_str(mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d"));
6934 wpa_ucs_base_custom(gchar *result, guint32 ucs)
6938 oui_result = ep_alloc(SHORT_STR);
6939 oui_result[0] = '\0';
6940 oui_base_custom(oui_result, ucs >> 8);
6941 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
6942 val_to_str(ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d"));
6946 wpa_akms_base_custom(gchar *result, guint32 akms)
6950 oui_result = ep_alloc(SHORT_STR);
6951 oui_result[0] = '\0';
6952 oui_base_custom(oui_result, akms >> 8);
6953 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result,
6954 val_to_str(akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d"));
6958 wpa_ucs_return(guint32 ucs)
6962 result = ep_alloc(SHORT_STR);
6964 wpa_ucs_base_custom(result, ucs);
6970 wpa_akms_return(guint32 akms)
6974 result = ep_alloc(SHORT_STR);
6976 wpa_akms_base_custom(result, akms);
6981 static const value_string ieee802111_wfa_ie_wme_type[] = {
6982 { 0, "Information Element" },
6983 { 1, "Parameter Element" },
6984 { 2, "TSPEC Element" },
6988 static const value_string ft_subelem_id_vals[] = {
6990 {1, "PMK-R1 key holder identifier (R1KH-ID)"},
6991 {2, "GTK subelement"},
6992 {3, "PMK-R0 key holder identifier (R0KH-ID)"},
6998 dissect_qos_info(proto_tree *tree, tvbuff_t *tvb, int offset, int ftype)
7000 proto_tree *qos_info_tree;
7001 proto_item *qos_info_item;
7003 qos_info_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_qos_info, tvb, offset, 1, ENC_NA);
7004 qos_info_tree = proto_item_add_subtree(qos_info_item, ett_wme_qos_info);
7009 case MGT_REASSOC_REQ:
7011 /* To AP so decode as per WMM standard Figure 7 QoS Info field when sent from WMM STA*/
7012 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length, tvb, offset, 1, ENC_NA);
7013 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be, tvb, offset, 1, ENC_NA);
7014 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk, tvb, offset, 1, ENC_NA);
7015 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi, tvb, offset, 1, ENC_NA);
7016 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo, tvb, offset, 1, ENC_NA);
7017 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved, tvb, offset, 1, ENC_NA);
7021 case MGT_PROBE_RESP:
7022 case MGT_ASSOC_RESP:
7023 case MGT_REASSOC_RESP:
7025 /* From AP so decode as per WMM standard Figure 6 QoS Info field when sent from WMM AP */
7026 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd, tvb, offset, 1, ENC_NA);
7027 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count, tvb, offset, 1, ENC_NA);
7028 proto_tree_add_item(qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved, tvb, offset, 1, ENC_NA);
7032 expert_add_info_format(g_pinfo, qos_info_item, PI_UNDECODED, PI_WARN, "Could not deduce direction to decode correctly, ftype %u", ftype);
7041 dissect_vendor_ie_wpawme(proto_tree *tree, tvbuff_t *tvb, int offset, guint32 tag_len, int ftype)
7045 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_type, tvb, offset, 1, ENC_NA);
7046 type = tvb_get_guint8(tvb, offset);
7047 proto_item_append_text(tree, ": %s", val_to_str(type, ieee802111_wfa_ie_type_vals, "Unknown %d"));
7051 case 1: /* Wi-Fi Protected Access (WPA) */
7053 proto_item *wpa_mcs_item, *wpa_ucs_item, *wpa_akms_item;
7054 proto_item *wpa_sub_ucs_item, *wpa_sub_akms_item;
7055 proto_tree *wpa_mcs_tree, *wpa_ucs_tree, *wpa_akms_tree;
7056 proto_tree *wpa_sub_ucs_tree, *wpa_sub_akms_tree;
7057 guint16 ucs_count, akms_count;
7060 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7063 /* Multicast Cipher Suite */
7064 wpa_mcs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_mcs, tvb, offset, 4, ENC_BIG_ENDIAN);
7065 wpa_mcs_tree = proto_item_add_subtree(wpa_mcs_item, ett_wpa_mcs_tree);
7066 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
7068 /* Check if OUI is 00:50:F2 (WFA) */
7069 if (tvb_get_ntoh24(tvb, offset) == 0x0050F2)
7071 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_wfa_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
7073 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
7077 /* Unicast Cipher Suites */
7078 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7079 ucs_count = tvb_get_letohs(tvb, offset);
7082 wpa_ucs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_list, tvb, offset, ucs_count * 4, ENC_NA);
7083 wpa_ucs_tree = proto_item_add_subtree(wpa_ucs_item, ett_wpa_ucs_tree);
7084 for (ii = 0; ii < ucs_count; ii++)
7086 wpa_sub_ucs_item = proto_tree_add_item(wpa_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs, tvb, offset, 4, ENC_BIG_ENDIAN);
7087 wpa_sub_ucs_tree = proto_item_add_subtree(wpa_sub_ucs_item, ett_wpa_sub_ucs_tree);
7088 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
7090 /* Check if OUI is 00:50:F2 (WFA) */
7091 if (tvb_get_ntoh24(tvb, offset) == 0x0050F2)
7093 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_wfa_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
7094 proto_item_append_text(wpa_ucs_item, " %s", wpa_ucs_return(tvb_get_ntohl(tvb, offset)));
7096 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
7101 /* Authenticated Key Management Suites */
7102 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7103 akms_count = tvb_get_letohs(tvb, offset);
7106 wpa_akms_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_list, tvb, offset, akms_count * 4, ENC_NA);
7107 wpa_akms_tree = proto_item_add_subtree(wpa_akms_item, ett_wpa_akms_tree);
7108 for (ii = 0; ii < akms_count; ii++)
7110 wpa_sub_akms_item = proto_tree_add_item(wpa_akms_tree, hf_ieee80211_wfa_ie_wpa_akms, tvb, offset, 4, ENC_BIG_ENDIAN);
7111 wpa_sub_akms_tree = proto_item_add_subtree(wpa_sub_akms_item, ett_wpa_sub_akms_tree);
7112 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
7114 /* Check if OUI is 00:50:F2 (WFA) */
7115 if (tvb_get_ntoh24(tvb, offset) == 0x0050F2)
7117 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_wfa_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
7118 proto_item_append_text(wpa_akms_item, " %s", wpa_akms_return(tvb_get_ntohl(tvb, offset)));
7120 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
7126 case 2: /* Wireless Multimedia Enhancements (WME) */
7130 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_subtype, tvb, offset, 1, ENC_NA);
7131 subtype = tvb_get_guint8(tvb, offset);
7132 proto_item_append_text(tree, ": %s", val_to_str(subtype, ieee802111_wfa_ie_wme_type, "Unknown %d"));
7134 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA);
7137 case 0: /* WME Information Element */
7139 /* WME QoS Info Field */
7140 offset = dissect_qos_info(tree, tvb, offset, ftype);
7143 case 1: /* WME Parameter Element */
7146 /* WME QoS Info Field */
7147 offset = dissect_qos_info(tree, tvb, offset, ftype);
7148 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_reserved, tvb, offset, 1, ENC_NA);
7151 for (i = 0; i < 4; i++)
7153 proto_item *ac_item, *aci_aifsn_item, *ecw_item;
7154 proto_tree *ac_tree, *aci_aifsn_tree, *ecw_tree;
7155 guint8 aci_aifsn, ecw;
7157 ac_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_ac_parameters, tvb, offset, 4, ENC_NA);
7158 ac_tree = proto_item_add_subtree(ac_item, ett_wme_ac);
7160 /* ACI/AIFSN Field */
7161 aci_aifsn_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_aci_aifsn, tvb, offset, 1, ENC_NA);
7162 aci_aifsn_tree = proto_item_add_subtree(aci_aifsn_item, ett_wme_aci_aifsn);
7163 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_aci, tvb, offset, 1, ENC_NA);
7164 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_acm, tvb, offset, 1, ENC_NA);
7165 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_aifsn, tvb, offset, 1, ENC_NA);
7166 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_reserved, tvb, offset, 1, ENC_NA);
7167 aci_aifsn = tvb_get_guint8(tvb, offset);
7168 proto_item_append_text(ac_item, " ACI %u (%s), ACM %s, AIFSN %u",
7169 (aci_aifsn & 0x60) >> 5, match_strval((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
7170 (aci_aifsn & 0x10) ? "yes" : "no ", aci_aifsn & 0x0f);
7173 /* ECWmin/ECWmax field */
7174 ecw_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_ecw, tvb, offset, 1, ENC_NA);
7175 ecw_tree = proto_item_add_subtree(ecw_item, ett_wme_ecw);
7176 proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_max, tvb, offset, 1, ENC_NA);
7177 proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_min, tvb, offset, 1, ENC_NA);
7178 ecw = tvb_get_guint8(tvb, offset);
7179 proto_item_append_text(ac_item, ", ECWmin %u ,ECWmax %u", ecw & 0x0f, (ecw & 0xf0) >> 4);
7183 proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_txop_limit, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7184 proto_item_append_text(ac_item, ", TXOP %u", tvb_get_letohs(tvb, offset));
7189 case 2: /* WME TSPEC Element */
7192 proto_item *tsinfo_item;
7193 proto_tree *tsinfo_tree;
7195 tsinfo_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7196 tsinfo_tree = proto_item_add_subtree(tsinfo_item, ett_tsinfo_tree);
7198 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7199 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7200 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7201 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7202 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7205 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7208 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7211 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7214 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7217 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7220 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7223 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7226 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7229 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7232 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7235 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7238 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7241 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7244 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7247 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7253 /* No default Action */
7255 } /* End switch (subtype) */
7258 case 4: /* WPS: Wifi Protected Setup */
7260 dissect_wps_tlvs(tree, tvb, offset, tag_len-4, NULL);
7264 /* No default Action...*/
7266 } /* End switch (type) */
7272 dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
7274 gint tag_len = tvb_length(tag_tvb);
7279 switch (tvb_get_guint8(tag_tvb, 3)) {
7280 case WFA_SUBTYPE_P2P:
7281 dissect_wifi_p2p_ie(pinfo, item, tag_tvb, 4, tag_len - 4);
7282 proto_item_append_text(item, ": P2P");
7288 dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tag_tvb)
7291 guint tag_len = tvb_length(tag_tvb);
7292 guint pmkid_len = tag_len - 4;
7294 char out_buff[SHORT_STR];
7295 char valid_str[SHORT_STR] = "";
7297 if ((tag_len >= 4) && !tvb_memeql(tag_tvb, tag_off, RSN_OUI"\x04", 4)) {
7298 /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
7299 * This is only used within EAPOL-Key frame Key Data. */
7300 if (pmkid_len != PMKID_LEN) {
7301 g_snprintf(valid_str, SHORT_STR,
7302 "(invalid PMKID len=%d, expected 16) ", pmkid_len);
7304 g_snprintf(out_buff, SHORT_STR, "RSN PMKID: %s%s", valid_str,
7305 tvb_bytes_to_str(tag_tvb, 4, pmkid_len));
7306 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tag_tvb, 0,
7309 proto_item_append_text(item, ": RSN");
7314 } marvell_ie_type_t;
7317 dissect_vendor_ie_marvell(proto_item *item _U_, proto_tree *ietree,
7318 tvbuff_t *tvb, int offset, guint32 tag_len)
7322 type = tvb_get_guint8(tvb, offset);
7323 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7327 case MARVELL_IE_MESH:
7328 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_subtype, tvb,
7329 offset++, 1, ENC_LITTLE_ENDIAN);
7330 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_version, tvb,
7331 offset++, 1, ENC_LITTLE_ENDIAN);
7332 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_active_proto_id, tvb,
7333 offset++, 1, ENC_LITTLE_ENDIAN);
7334 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_active_metric_id, tvb,
7335 offset++, 1, ENC_LITTLE_ENDIAN);
7336 proto_tree_add_item (ietree, hf_ieee80211_marvell_ie_mesh_cap, tvb,
7337 offset++, 1, ENC_LITTLE_ENDIAN);
7341 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_data, tvb, offset,
7342 tag_len - 1, ENC_NA);
7348 ATHEROS_IE_ADVCAP = 1,
7350 } atheros_ie_type_t;
7353 ATHEROS_IE_ADVCAP_S = 1
7354 } atheros_ie_advcap_subtype_t;
7358 } atheros_ie_xr_subtype_t;
7361 ATHEROS_IE_CAP_TURBOP = 0x01,
7362 ATHEROS_IE_CAP_COMP = 0x02,
7363 ATHEROS_IE_CAP_FF = 0x04,
7364 ATHEROS_IE_CAP_XR = 0x08,
7365 ATHEROS_IE_CAP_AR = 0x10,
7366 ATHEROS_IE_CAP_BURST = 0x20,
7367 ATHEROS_IE_CAP_WME = 0x40,
7368 ATHEROS_IE_CAP_BOOST = 0x80
7371 static const value_string atheros_ie_type_vals[] = {
7372 { ATHEROS_IE_ADVCAP, "Advanced Capability"},
7373 { ATHEROS_IE_XR, "eXtended Range"},
7378 dissect_vendor_ie_atheros_cap(proto_item *item _U_, tvbuff_t *tvb, int offset)
7380 proto_tree *cap_tree;
7382 cap_tree = proto_item_add_subtree(item, ett_ath_cap_tree);
7384 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_turbop, tvb, offset, 1, ENC_NA);
7385 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_comp, tvb, offset, 1, ENC_NA);
7386 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ff, tvb, offset, 1, ENC_NA);
7387 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_xr, tvb, offset, 1, ENC_NA);
7388 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ar, tvb, offset, 1, ENC_NA);
7389 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_burst, tvb, offset, 1, ENC_NA);
7390 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_wme, tvb, offset, 1, ENC_NA);
7391 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_boost, tvb, offset, 1, ENC_NA);
7396 dissect_vendor_ie_atheros(proto_item *item _U_, proto_tree *ietree,
7397 tvbuff_t *tvb, int offset, guint tag_len,
7398 packet_info *pinfo, proto_item *ti_len)
7403 proto_item *cap_item;
7407 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 */
7410 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_type, tvb, offset, 1, ENC_NA);
7411 type = tvb_get_guint8(tvb, offset);
7412 proto_item_append_text(item, ": %s", val_to_str_const(type, atheros_ie_type_vals, "Unknown"));
7416 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_subtype, tvb, offset, 1, ENC_NA);
7417 subtype = tvb_get_guint8(tvb, offset);
7421 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_version, tvb, offset, 1, ENC_NA);
7422 version = tvb_get_guint8(tvb, offset);
7429 case ATHEROS_IE_ADVCAP:
7432 case ATHEROS_IE_ADVCAP_S:
7434 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_cap, tvb, offset, 1, ENC_NA);
7435 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
7439 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_defkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7445 /* No default Action */
7447 } /* End switch (subtype) */
7453 case ATHEROS_IE_XR_S:
7455 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_info, tvb, offset, 1, ENC_NA);
7459 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_bssid, tvb, offset, 6, ENC_NA);
7463 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_bssid, tvb, offset, 6, ENC_NA);
7467 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7471 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_cap, tvb, offset, 1, ENC_NA);
7472 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
7476 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_cap, tvb, offset, 1, ENC_NA);
7477 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
7483 /* No default Action */
7485 } /* End switch (subtype) */
7488 /* No default Action */
7490 } /* End switch (type) */
7495 ti = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA);
7496 expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_WARN, "Unknown Data (not interpreted)");
7501 AIRONET_IE_VERSION = 3,
7503 AIRONET_IE_QBSS_V2 = 14
7504 } aironet_ie_type_t;
7506 static const value_string aironet_ie_type_vals[] = {
7507 { AIRONET_IE_VERSION, "CCX version"},
7508 { AIRONET_IE_QOS, "Qos"},
7509 { AIRONET_IE_QBSS_V2, "QBSS V2 - CCA"},
7514 dissect_vendor_ie_aironet(proto_item *aironet_item, proto_tree *ietree,
7515 tvbuff_t *tvb, int offset, guint32 tag_len)
7519 gboolean dont_change = FALSE; /* Don't change the IE item text to default */
7521 type = tvb_get_guint8(tvb, offset);
7522 proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7526 case AIRONET_IE_VERSION:
7527 proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_version, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7528 proto_item_append_text(aironet_item, ": Aironet CCX version = %d",
7529 tvb_get_guint8(tvb, offset));
7532 case AIRONET_IE_QOS:
7533 proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_qos_unk1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7535 proto_tree_add_item (ietree, hf_ieee80211_aironet_ie_qos_paramset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7538 /* XXX: just copied over from WME. Maybe "Best Effort" and "Background"
7539 * need to be swapped. Also, the "TXOP" may be TXOP - or not.
7541 for (i = 0; i < 4; i++) {
7542 guint8 byte1, byte2;
7544 byte1 = tvb_get_guint8(tvb, offset);
7545 byte2 = tvb_get_guint8(tvb, offset + 1);
7546 txop = tvb_get_letohs(tvb, offset + 2);
7547 proto_tree_add_bytes_format(ietree, hf_ieee80211_aironet_ie_qos_val, tvb, offset, 4, NULL,
7548 "CCX QoS Parameters??: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
7549 (byte1 & 0x60) >> 5, val_to_str((byte1 & 0x60) >> 5, wme_acs, "(Unknown: %d)"),
7550 (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
7551 byte2 & 0x0f, (byte2 & 0xf0) >> 4,
7556 case AIRONET_IE_QBSS_V2:
7557 /* Extract Values */
7558 proto_tree_add_item (ietree, hf_ieee80211_qbss2_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7559 proto_tree_add_item (ietree, hf_ieee80211_qbss2_cu, tvb, offset + 2, 1, ENC_BIG_ENDIAN);
7560 proto_tree_add_item (ietree, hf_ieee80211_qbss2_cal, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
7561 proto_tree_add_item (ietree, hf_ieee80211_qbss2_gl, tvb, offset + 4, 1, ENC_BIG_ENDIAN);
7564 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_data, tvb, offset,
7565 tag_len - 1, ENC_NA);
7569 proto_item_append_text(aironet_item, ": Aironet %s",
7570 val_to_str_const(type, aironet_ie_type_vals, "Unknown"));
7574 /* 802.11e 7.3.2.33 QoS Capability element */
7576 dissect_qos_capability(proto_tree *tree, tvbuff_t *tvb, int offset, int ftype)
7578 proto_item *cap_info_item;
7579 proto_tree *cap_info_tree;
7581 cap_info_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_cap_qos_info, tvb, offset, 1, ENC_NA);
7582 cap_info_tree = proto_item_add_subtree(cap_info_item, ett_qos_info_field_tree);
7586 case MGT_REASSOC_REQ:
7588 /* To AP so decode as STA: Figure 33h-QoS Info field when set by a non-AP QSTA */
7589 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_vo_uapsd, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7590 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_vi_uapsd, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7591 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_bk_uapsd, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7592 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_be_uapsd, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7593 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_qack, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7594 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_max_sp_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7595 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_more_data_ack, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7599 case MGT_PROBE_RESP:
7600 case MGT_ASSOC_RESP:
7601 case MGT_REASSOC_RESP:
7603 /* From AP so decode as AP: Figure 33g-QoS Info field when sent by a QAP */
7604 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_edca_upd_cnt, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7605 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_qack, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7606 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_queue_req, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7607 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_txop_req, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7608 proto_tree_add_item(cap_info_tree, hf_ieee80211_qos_info_field_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7612 expert_add_info_format(g_pinfo, cap_info_item, PI_UNDECODED, PI_WARN, "Could not deduce direction to decode correctly, ftype %u", ftype);
7619 /* 7.3.2.25 RSN information element */
7621 dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
7622 int offset, guint32 tag_len)
7624 proto_item *rsn_gcs_item, *rsn_pcs_item, *rsn_akms_item, *rsn_cap_item, *rsn_pmkid_item, *rsn_gmcs_item;
7625 proto_item *rsn_sub_pcs_item, *rsn_sub_akms_item;
7626 proto_item *rsn_pcs_count, *rsn_akms_count, *rsn_pmkid_count;
7627 proto_tree *rsn_gcs_tree, *rsn_pcs_tree, *rsn_akms_tree, *rsn_cap_tree, *rsn_pmkid_tree, *rsn_gmcs_tree;
7628 proto_tree *rsn_sub_pcs_tree, *rsn_sub_akms_tree;
7629 guint16 pcs_count, akms_count, pmkid_count;
7631 int tag_end = offset + tag_len;
7633 proto_tree_add_item(tree, hf_ieee80211_rsn_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7636 /* 7.3.2.25.1 Group Cipher suites */
7637 rsn_gcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gcs, tvb, offset, 4, ENC_BIG_ENDIAN);
7638 rsn_gcs_tree = proto_item_add_subtree(rsn_gcs_item, ett_rsn_gcs_tree);
7639 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
7641 /* Check if OUI is 00:0F:AC (ieee80211) */
7642 if (tvb_get_ntoh24(tvb, offset) == 0x000FAC)
7644 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_80211_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
7646 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
7650 /* 7.3.2.25.2 Pairwise Cipher suites */
7651 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7652 pcs_count = tvb_get_letohs(tvb, offset);
7655 if (offset + (pcs_count * 4) > tag_end)
7657 expert_add_info_format(pinfo, rsn_pcs_count, PI_MALFORMED, PI_ERROR,
7658 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
7659 pcs_count = (tag_end - offset) / 4;
7662 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA);
7663 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
7664 for (ii = 0; ii < pcs_count; ii++)
7666 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN);
7667 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
7668 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
7670 /* Check if OUI is 00:0F:AC (ieee80211) */
7671 if (tvb_get_ntoh24(tvb, offset) == 0x000FAC)
7673 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
7674 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(tvb_get_ntohl(tvb, offset)));
7676 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
7681 if (offset >= tag_end)
7686 /* 7.3.2.25.2 AKM suites */
7687 rsn_akms_count = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7688 akms_count = tvb_get_letohs(tvb, offset);
7691 if (offset + (akms_count * 4) > tag_end)
7693 expert_add_info_format(pinfo, rsn_akms_count, PI_MALFORMED, PI_ERROR,
7694 "Auth Key Management (AKM) Suite Count too large, 4*%u > %d", akms_count, tag_end - offset);
7695 akms_count = (tag_end - offset) / 4;
7698 rsn_akms_item = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_list, tvb, offset, akms_count * 4, ENC_NA);
7699 rsn_akms_tree = proto_item_add_subtree(rsn_akms_item, ett_rsn_akms_tree);
7700 for (ii = 0; ii < akms_count; ii++)
7702 rsn_sub_akms_item = proto_tree_add_item(rsn_akms_tree, hf_ieee80211_rsn_akms, tvb, offset, 4, ENC_BIG_ENDIAN);
7703 rsn_sub_akms_tree = proto_item_add_subtree(rsn_sub_akms_item, ett_rsn_sub_akms_tree);
7704 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
7706 /* Check if OUI is 00:0F:AC (ieee80211) */
7707 if (tvb_get_ntoh24(tvb, offset) == 0x000FAC)
7709 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
7710 proto_item_append_text(rsn_akms_item, " %s", rsn_akms_return(tvb_get_ntohl(tvb, offset)));
7712 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_BIG_ENDIAN);
7717 /* 7.3.2.25.3 RSN capabilities */
7718 rsn_cap_item = proto_tree_add_item(tree, hf_ieee80211_rsn_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7719 rsn_cap_tree = proto_item_add_subtree(rsn_cap_item, ett_rsn_cap_tree);
7721 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_preauth, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7722 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_no_pairwise, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7723 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_ptksa_replay_counter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7724 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_gtksa_replay_counter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7725 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_mfpr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7726 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_mfpc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7727 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_peerkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7729 if (offset >= tag_end)
7733 /* 7.3.2.25.4 PMKID */
7734 rsn_pmkid_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7735 pmkid_count = tvb_get_letohs(tvb, offset);
7738 if (offset + (pmkid_count * 16) > tag_end)
7740 expert_add_info_format(pinfo, rsn_pmkid_count, PI_MALFORMED, PI_ERROR,
7741 "PMKID Count too large, 16*%u > %d", pmkid_count, tag_end - offset);
7742 pmkid_count = (tag_end - offset) / 16;
7745 rsn_pmkid_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_list, tvb, offset, pmkid_count * 16, ENC_NA);
7746 rsn_pmkid_tree = proto_item_add_subtree(rsn_pmkid_item, ett_rsn_pmkid_tree);
7747 for (ii = 0; ii < pmkid_count; ii++)
7749 proto_tree_add_item(rsn_pmkid_tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA);
7753 if (offset >= tag_end)
7757 /* Group Management Cipher Suite (802.11w)*/
7758 rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN);
7759 rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
7760 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
7761 /* Check if OUI is 00:0F:AC (ieee80211) */
7762 if (tvb_get_ntoh24(tvb, offset) == 0x000FAC)
7764 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
7766 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
7774 dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset)
7777 proto_tree *mcs_tree, *rx_mcs_tree, *tx_mcs_tree;
7779 /* 8 byte Supported MCS set */
7780 ti = proto_tree_add_item(tree, hf_ieee80211_vht_mcsset, tvb, offset, 8, ENC_NA);
7782 mcs_tree = proto_item_add_subtree(ti, ett_vht_mcsset_tree);
7784 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7785 rx_mcs_tree = proto_item_add_subtree(ti, ett_vht_rx_mcsbit_tree);
7788 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_0_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7789 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7790 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7791 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7792 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7793 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7794 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7795 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7798 /* B16 - B28 13 bits*/
7799 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7801 /* B29 - B31 2 reserved bits*/
7806 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7807 tx_mcs_tree = proto_item_add_subtree(ti, ett_vht_tx_mcsbit_tree);
7808 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_0_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7809 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7810 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7811 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7812 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7813 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7814 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7815 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7818 /* B48 - B60 13 bits */
7819 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7820 /* B61 - B63 2 reserved bits*/
7827 dissect_vht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
7828 guint32 tag_len, proto_item *ti_len)
7830 proto_item *cap_item;
7831 proto_tree *cap_tree;
7833 if (tag_len != 12) {
7834 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7835 "VHT Capabilities IE length %u wrong, must be = 12", tag_len);
7839 /* 4 byte VHT Capabilities Info*/
7840 cap_item = proto_tree_add_item(tree, hf_ieee80211_vht_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7842 cap_tree = proto_item_add_subtree(cap_item, ett_vht_cap_tree);
7844 /* B0 - B1 2 bits */
7845 proto_tree_add_item(cap_tree, hf_ieee80211_vht_max_mpdu_length, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7847 proto_tree_add_item(cap_tree, hf_ieee80211_vht_supported_chan_width_set, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7849 /* B4 - B7 4x 1 bit fields */
7850 proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_ldpc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7851 proto_tree_add_item(cap_tree, hf_ieee80211_vht_short_gi_for_80, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7852 proto_tree_add_item(cap_tree, hf_ieee80211_vht_short_gi_for_160, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7853 proto_tree_add_item(cap_tree, hf_ieee80211_vht_tx_stbc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7855 /* End of first byte */
7857 /* B8 - B10 3 bit field */
7858 proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_stbc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7860 /* B11 - B12 2x 1 bit fields */
7861 proto_tree_add_item(cap_tree, hf_ieee80211_vht_su_beamformer_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7862 proto_tree_add_item(cap_tree, hf_ieee80211_vht_su_beamformee_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7864 /* B13 - B15 3 bit field */
7865 proto_tree_add_item(cap_tree, hf_ieee80211_vht_beamformer_antennas, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7867 /* End of second byte */
7870 proto_tree_add_item(cap_tree, hf_ieee80211_vht_sounding_dimensions, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7872 proto_tree_add_item(cap_tree, hf_ieee80211_vht_mu_beamformer_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7874 /* B20 - B22 2x 1 bit fields */
7875 proto_tree_add_item(cap_tree, hf_ieee80211_vht_mu_beamformee_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7876 proto_tree_add_item(cap_tree, hf_ieee80211_vht_txop_ps, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7877 proto_tree_add_item(cap_tree, hf_ieee80211_vht_var_htc_field, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7879 /* B23 - B25 3 bit field which takes us 2 bits into next byte */
7880 proto_tree_add_item(cap_tree, hf_ieee80211_vht_max_ampdu, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7882 /* B26 - B27 2 bit field */
7883 proto_tree_add_item(cap_tree, hf_ieee80211_vht_link_adaptation_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7885 /* B28 - B29 2x 1 bit fields */
7886 proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_pattern, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7887 proto_tree_add_item(cap_tree, hf_ieee80211_vht_tx_pattern, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7889 /* B30 - B31 Reserved */
7890 proto_tree_add_item(cap_tree, hf_ieee80211_vht_reserv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
7894 /* 8 byte MCS set */
7895 offset = dissect_vht_mcs_set(tree, tvb, offset);
7901 dissect_vht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
7902 guint32 tag_len, proto_item *ti_len)
7904 proto_item *op_item, *ti;
7905 proto_tree *op_tree, *basic_mcs_tree;
7908 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
7909 "VHT Operation IE length %u wrong, must be = 5", tag_len);
7913 /* 3 byte VHT Operation Info*/
7914 op_item = proto_tree_add_item(tree, hf_ieee80211_vht_op, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7915 op_tree = proto_item_add_subtree(op_item, ett_vht_op_tree);
7916 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7917 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center0, tvb, offset+1, 1, ENC_LITTLE_ENDIAN);
7918 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center1, tvb, offset+2, 1, ENC_LITTLE_ENDIAN);
7921 /* VHT Basic MCS Set */
7922 ti = proto_tree_add_item(tree, hf_ieee80211_vht_op_basic_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7923 basic_mcs_tree = proto_item_add_subtree(ti, ett_vht_basic_mcsbit_tree);
7924 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_0_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7925 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7926 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7927 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7928 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7929 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7930 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7931 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7940 dissect_mobility_domain(proto_tree *tree, tvbuff_t *tvb, int offset,
7944 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
7945 "MDIE content length must be at least 3 bytes");
7949 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_mdid,
7950 tvb, offset, 2, ENC_LITTLE_ENDIAN);
7951 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab,
7952 tvb, offset + 2, 1, ENC_BIG_ENDIAN);
7953 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
7954 tvb, offset + 2, 1, ENC_BIG_ENDIAN);
7955 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
7956 tvb, offset + 2, 1, ENC_BIG_ENDIAN);
7960 dissect_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset,
7963 int end = offset + tag_len;
7965 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
7966 "FTIE content length must be at least 82 bytes");
7970 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic_control,
7971 tvb, offset, 2, ENC_LITTLE_ENDIAN);
7972 proto_tree_add_item(tree, hf_ieee80211_tag_ft_element_count,
7973 tvb, offset, 2, ENC_LITTLE_ENDIAN);
7975 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic,
7976 tvb, offset, 16, ENC_NA);
7978 proto_tree_add_item(tree, hf_ieee80211_tag_ft_anonce,
7979 tvb, offset, 32, ENC_NA);
7981 proto_tree_add_item(tree, hf_ieee80211_tag_ft_snonce,
7982 tvb, offset, 32, ENC_NA);
7985 while (offset + 2 <= end) {
7988 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_id,
7989 tvb, offset, 1, ENC_BIG_ENDIAN);
7990 id = tvb_get_guint8(tvb, offset);
7993 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_len,
7994 tvb, offset, 1, ENC_BIG_ENDIAN);
7995 len = tvb_get_guint8(tvb, offset);
7998 if (offset + len > end) {
7999 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset,
8000 end - offset, "Invalid FTIE subelement");
8004 s_end = offset + len;
8007 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_r1kh_id,
8008 tvb, offset, len, ENC_NA);
8011 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_info,
8012 tvb, offset, 2, ENC_LITTLE_ENDIAN);
8013 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_id,
8014 tvb, offset, 2, ENC_LITTLE_ENDIAN);
8018 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_length,
8019 tvb, offset, 1, ENC_BIG_ENDIAN);
8023 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_rsc,
8024 tvb, offset, 8, ENC_NA);
8028 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key,
8029 tvb, offset, s_end - offset, ENC_NA);
8032 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_r0kh_id,
8033 tvb, offset, len, ENC_ASCII|ENC_NA);
8036 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_id,
8037 tvb, offset, 2, ENC_LITTLE_ENDIAN);
8041 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_ipn,
8042 tvb, offset, 6, ENC_NA);
8046 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_length,
8047 tvb, offset, 1, ENC_BIG_ENDIAN);
8051 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key,
8052 tvb, offset, 24, ENC_NA);
8055 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_data,
8056 tvb, offset, len, ENC_NA);
8064 dissect_mmie(proto_tree *tree, tvbuff_t *tvb, int offset, guint32 tag_len)
8067 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
8068 "MMIE content length must be at least 16 bytes");
8072 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_keyid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8073 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_ipn, tvb, offset + 2, 6,
8075 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_mic, tvb, offset + 8, 8,
8080 dissect_link_identifier(proto_tree *tree, tvbuff_t *tvb, int offset,
8084 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
8085 "Link Identifier content length must be at least "
8090 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_bssid, tvb,
8092 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_init_sta, tvb,
8093 offset + 6, 6, ENC_NA);
8094 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_resp_sta, tvb,
8095 offset + 12, 6, ENC_NA);
8099 dissect_wakeup_schedule(proto_tree *tree, tvbuff_t *tvb, int offset,
8103 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
8104 "Wakeup Schedule content length must be at least "
8109 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_offset, tvb,
8110 offset, 4, ENC_LITTLE_ENDIAN);
8113 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_interval, tvb,
8114 offset, 4, ENC_LITTLE_ENDIAN);
8117 proto_tree_add_item(tree,
8118 hf_ieee80211_tag_wakeup_schedule_awake_window_slots, tvb,
8119 offset, 4, ENC_LITTLE_ENDIAN);
8122 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
8123 tvb, offset, 4, ENC_LITTLE_ENDIAN);
8126 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_idle_count, tvb,
8127 offset, 2, ENC_LITTLE_ENDIAN);
8131 dissect_channel_switch_timing(proto_tree *tree, tvbuff_t *tvb, int offset,
8135 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
8136 "Channel Switch Timing content length must be at "
8141 proto_tree_add_item(tree, hf_ieee80211_tag_channel_switch_timing_switch_time,
8142 tvb, offset, 2, ENC_LITTLE_ENDIAN);
8145 proto_tree_add_item(tree,
8146 hf_ieee80211_tag_channel_switch_timing_switch_timeout,
8147 tvb, offset, 2, ENC_LITTLE_ENDIAN);
8151 dissect_pti_control(proto_tree *tree, tvbuff_t *tvb, int offset,
8155 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
8156 "PTI Control content length must be at least "
8161 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_tid, tvb,
8162 offset, 1, ENC_BIG_ENDIAN);
8165 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_sequence_control, tvb,
8166 offset, 2, ENC_LITTLE_ENDIAN);
8170 dissect_pu_buffer_status(proto_tree *tree, tvbuff_t *tvb, int offset,
8174 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
8175 "PU Buffer Status content length must be at least "
8180 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_bk, tvb,
8181 offset, 1, ENC_BIG_ENDIAN);
8182 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_be, tvb,
8183 offset, 1, ENC_BIG_ENDIAN);
8184 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_vi, tvb,
8185 offset, 1, ENC_BIG_ENDIAN);
8186 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_vo, tvb,
8187 offset, 1, ENC_BIG_ENDIAN);
8191 dissect_timeout_interval(proto_tree *tree, tvbuff_t *tvb, int offset,
8196 pi = proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_type, tvb,
8197 offset, 1, ENC_BIG_ENDIAN);
8199 expert_add_info_format(g_pinfo, pi, PI_MALFORMED, PI_ERROR,
8200 "Timeout Interval content length must be at least "
8205 proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_value, tvb,
8206 offset + 1, 4, ENC_LITTLE_ENDIAN);
8210 dissect_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean basic, gboolean vs)
8213 proto_tree *mcs_tree, *bit_tree;
8215 /* 16 byte Supported MCS set */
8218 ti = proto_tree_add_string(tree, hf_ieee80211_mcsset_vs, tvb, offset, 16,
8219 basic ? "Basic MCS Set" : "MCS Set");
8222 ti = proto_tree_add_string(tree, hf_ieee80211_mcsset, tvb, offset, 16,
8223 basic ? "Basic MCS Set" : "MCS Set");
8225 mcs_tree = proto_item_add_subtree(ti, ett_mcsset_tree);
8227 /* Rx MCS Bitmask */
8228 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_rx_bitmask, tvb, offset, 10, ENC_NA);
8229 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
8232 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_0to7, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8233 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_8to15, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8234 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_16to23, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8235 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_24to31, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8239 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_32, tvb, offset , 4, ENC_LITTLE_ENDIAN);
8240 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_33to38, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8241 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_39to52, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8245 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_53to76, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8248 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_highest_data_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8251 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_mcs_set_defined, tvb, offset, 1,
8253 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal, tvb, offset, 1,
8255 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_max_spatial_streams, tvb, offset, 1,
8257 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_unequal_modulation, tvb, offset, 1,
8265 /* 802.11n D1.10 - HT Information IE */
8267 dissect_ht_info_ie_1_1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
8268 guint32 tag_len, proto_item *ti_len)
8270 proto_item *cap_item;
8271 proto_tree *cap_tree;
8276 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
8277 "HT Information IE content length %u wrong, must be at least 22 bytes", tag_len);
8282 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8285 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter1, tvb,
8286 offset, 1, ENC_LITTLE_ENDIAN);
8287 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter1_tree);
8288 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_channel_offset, tvb,
8289 offset, 1, ENC_LITTLE_ENDIAN);
8290 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_channel_width, tvb,
8291 offset, 1, ENC_LITTLE_ENDIAN);
8292 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_rifs_mode, tvb,
8293 offset, 1, ENC_LITTLE_ENDIAN);
8294 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_psmp_stas_only, tvb,
8295 offset, 1, ENC_LITTLE_ENDIAN);
8296 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_service_interval_granularity, tvb,
8297 offset, 1, ENC_LITTLE_ENDIAN);
8300 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter2, tvb,
8301 offset, 2, ENC_LITTLE_ENDIAN);
8302 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter2_tree);
8303 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_operating_mode, tvb,
8304 offset, 1, ENC_LITTLE_ENDIAN);
8305 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_non_greenfield_sta_present, tvb,
8306 offset, 1, ENC_LITTLE_ENDIAN);
8307 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_transmit_burst_limit, tvb,
8308 offset, 1, ENC_LITTLE_ENDIAN);
8309 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_obss_non_ht_stas_present, tvb,
8310 offset, 1, ENC_LITTLE_ENDIAN);
8311 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_1, tvb,
8312 offset, 2, ENC_LITTLE_ENDIAN);
8315 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter3, tvb,
8316 offset, 2, ENC_LITTLE_ENDIAN);
8317 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter3_tree);
8318 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_2, tvb,
8319 offset, 1, ENC_LITTLE_ENDIAN);
8320 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_beacon, tvb,
8321 offset, 1, ENC_LITTLE_ENDIAN);
8322 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_cts_protection, tvb,
8323 offset, 1, ENC_LITTLE_ENDIAN);
8325 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_beacon, tvb,
8326 offset, 1, ENC_LITTLE_ENDIAN);
8327 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_lsig_txop_protection_full_support, tvb,
8328 offset, 1, ENC_LITTLE_ENDIAN);
8329 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_active, tvb,
8330 offset, 1, ENC_LITTLE_ENDIAN);
8331 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_phase, tvb,
8332 offset, 1, ENC_LITTLE_ENDIAN);
8333 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_3, tvb,
8334 offset, 1, ENC_LITTLE_ENDIAN);
8337 offset = dissect_mcs_set(tree, tvb, offset, TRUE, FALSE);
8342 static const value_string time_adv_timing_capab_vals[] = {
8343 { 0, "No standardized external time source" },
8344 { 1, "Timestamp offset based on UTC" },
8345 { 2, "UTC time at which the TSF timer is 0" },
8350 dissect_time_adv(proto_tree *tree, tvbuff_t *tvb, int offset)
8354 proto_tree *subtree;
8358 capab = tvb_get_guint8(tvb, offset);
8359 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_timing_capab,
8360 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8365 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
8366 tvb, offset, 10, ENC_NA);
8369 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
8370 tvb, offset, 5, ENC_NA);
8374 item = proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
8375 tvb, offset, 10, ENC_NA);
8376 subtree = proto_item_add_subtree(item, ett_tag_time_adv_tree);
8377 memset(&tm, 0, sizeof(tm));
8378 tm.tm_year = tvb_get_letohs(tvb, offset) - 1900;
8379 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_year,
8380 tvb, offset, 2, ENC_LITTLE_ENDIAN);
8382 tm.tm_mon = tvb_get_guint8(tvb, offset) - 1;
8383 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_month,
8384 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8386 tm.tm_mday = tvb_get_guint8(tvb, offset);
8387 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_day,
8388 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8390 tm.tm_hour = tvb_get_guint8(tvb, offset);
8391 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_hours,
8392 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8394 tm.tm_min = tvb_get_guint8(tvb, offset);
8395 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_minutes,
8396 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8398 tm.tm_sec = tvb_get_guint8(tvb, offset);
8399 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_seconds,
8400 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8402 proto_tree_add_item(subtree,
8403 hf_ieee80211_tag_time_adv_time_value_milliseconds,
8404 tvb, offset, 2, ENC_LITTLE_ENDIAN);
8406 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
8407 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8413 t += (time_t)(last_timestamp / 1000000);
8414 now = localtime(&t);
8416 proto_item_append_text(item,
8417 ": current time=%u-%02u-%02u %02u:%02u:%02u",
8418 now->tm_year + 1900, now->tm_mon + 1,
8419 now->tm_mday, now->tm_hour, now->tm_min,
8423 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
8424 tvb, offset, 5, ENC_NA);
8427 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
8428 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8437 dissect_time_zone(proto_tree *tree, tvbuff_t *tvb, int offset,
8440 proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
8442 return offset + tag_len;
8446 dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo,
8447 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len,
8448 int tag_end, proto_item *ti)
8451 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
8452 "AP Channel Report length %u wrong, must be > 1", tag_len);
8456 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_regulatory_class, tvb,
8457 offset, 1, ENC_LITTLE_ENDIAN);
8458 proto_item_append_text(ti, ": Regulatory Class %u, Channel List :", tvb_get_guint8(tvb, offset));
8461 while (offset < tag_end)
8463 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA);
8464 proto_item_append_text(ti, " %u,", tvb_get_guint8(tvb, offset));
8470 dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo,
8471 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
8475 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
8476 "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
8480 proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
8481 offset, 1, ENC_LITTLE_ENDIAN);
8489 dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
8490 guint32 tag_len, proto_item *ti_len, gboolean vs)
8492 proto_item *cap_item, *ti;
8493 proto_tree *cap_tree;
8495 if (tag_len != 26) {
8496 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
8497 "HT Capabilities IE length %u wrong, must be = 26", tag_len);
8501 if (wlan_ignore_draft_ht && vs)
8504 /* 2 byte HT Capabilities Info*/
8507 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_vs_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8511 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8513 cap_tree = proto_item_add_subtree(cap_item, ett_ht_cap_tree);
8514 proto_tree_add_item(cap_tree, hf_ieee80211_ht_ldpc_coding, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8515 proto_tree_add_item(cap_tree, hf_ieee80211_ht_chan_width, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8516 proto_tree_add_item(cap_tree, hf_ieee80211_ht_sm_pwsave, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8517 proto_tree_add_item(cap_tree, hf_ieee80211_ht_green, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8518 proto_tree_add_item(cap_tree, hf_ieee80211_ht_short20, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8519 proto_tree_add_item(cap_tree, hf_ieee80211_ht_short40, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8520 proto_tree_add_item(cap_tree, hf_ieee80211_ht_tx_stbc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8522 proto_tree_add_item(cap_tree, hf_ieee80211_ht_rx_stbc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8523 proto_tree_add_item(cap_tree, hf_ieee80211_ht_delayed_block_ack, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8524 proto_tree_add_item(cap_tree, hf_ieee80211_ht_max_amsdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8525 proto_tree_add_item(cap_tree, hf_ieee80211_ht_dss_cck_40, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8526 proto_tree_add_item(cap_tree, hf_ieee80211_ht_psmp, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8527 proto_tree_add_item(cap_tree, hf_ieee80211_ht_40_mhz_intolerant, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8528 proto_tree_add_item(cap_tree, hf_ieee80211_ht_l_sig, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8531 /* 1 byte A-MPDU Parameters */
8534 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8537 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8539 cap_tree = proto_item_add_subtree(cap_item, ett_ampduparam_tree);
8540 ti = proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8541 proto_item_append_text(ti, " (%04.0f[Bytes])",pow(2,13+(tvb_get_guint8(tvb, offset) & 0x3))-1);
8542 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu_start_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8543 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8546 /* 16 byte MCS set */
8547 offset = dissect_mcs_set(tree, tvb, offset, FALSE, vs);
8550 /* 2 byte HT Extended Capabilities */
8553 cap_item = proto_tree_add_item(tree, hf_ieee80211_htex_vs_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8555 cap_item = proto_tree_add_item(tree, hf_ieee80211_htex_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8557 cap_tree = proto_item_add_subtree(cap_item, ett_htex_cap_tree);
8558 proto_tree_add_item(cap_tree, hf_ieee80211_htex_pco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8559 proto_tree_add_item(cap_tree, hf_ieee80211_htex_transtime, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8561 proto_tree_add_item(cap_tree, hf_ieee80211_htex_mcs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8562 proto_tree_add_item(cap_tree, hf_ieee80211_htex_htc_support, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8563 proto_tree_add_item(cap_tree, hf_ieee80211_htex_rd_responder, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8567 /* 4 byte TxBF capabilities */
8570 cap_item = proto_tree_add_item(tree, hf_ieee80211_txbf_vs, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8572 cap_item = proto_tree_add_item(tree, hf_ieee80211_txbf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8574 cap_tree = proto_item_add_subtree(cap_item, ett_txbf_tree);
8575 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_cap, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8576 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_rcv_ssc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8577 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_tx_ssc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8578 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_rcv_ndp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8579 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_tx_ndp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8580 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_impl_txbf, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8581 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_calib, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8584 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_csi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8585 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_uncomp_fm, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8586 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_comp_fm, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8587 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_bf_csi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8588 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_uncomp_fm_feed, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8589 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_comp_fm_feed, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8592 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_min_group, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8593 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_csi_num_bf_ant, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8594 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_uncomp_sm_bf_ant, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8595 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_comp_sm_bf_ant, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8598 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_csi_max_rows_bf, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8599 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_chan_est, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8600 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_resrv, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8603 /* 1 byte Antenna Selection (ASEL) capabilities */
8606 cap_item = proto_tree_add_item(tree, hf_ieee80211_antsel_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8610 cap_item = proto_tree_add_item(tree, hf_ieee80211_antsel, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8612 cap_tree = proto_item_add_subtree(cap_item, ett_antsel_tree);
8613 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b0, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8614 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8615 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8616 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8617 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b4, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8618 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b5, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8619 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b6, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8620 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b7, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8628 dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
8629 guint32 tag_len, proto_item *ti_len)
8631 proto_item *cap_item;
8632 proto_tree *cap_tree;
8634 if (tag_len != 22) {
8635 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
8636 "Tag length %u wrong, must be = 22", tag_len);
8640 if (wlan_ignore_draft_ht)
8643 /* 1 HT Control Channel */
8644 proto_tree_add_item(tree, hf_ieee80211_hta_cc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8647 /* 1 byte HT additional capabilities */
8648 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 1,
8650 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap_tree);
8652 proto_tree_add_item(cap_tree, hf_ieee80211_hta_ext_chan_offset, tvb, offset, 1,
8654 proto_tree_add_item(cap_tree, hf_ieee80211_hta_rec_tx_width, tvb, offset, 1,
8656 proto_tree_add_item(cap_tree, hf_ieee80211_hta_rifs_mode, tvb, offset, 1,
8658 proto_tree_add_item(cap_tree, hf_ieee80211_hta_controlled_access, tvb, offset, 1,
8660 proto_tree_add_item(cap_tree, hf_ieee80211_hta_service_interval, tvb, offset, 1,
8664 /* 2 byte HT additional capabilities */
8665 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 2,
8667 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap1_tree);
8669 proto_tree_add_item(cap_tree, hf_ieee80211_hta_operating_mode, tvb, offset, 2,
8671 proto_tree_add_item(cap_tree, hf_ieee80211_hta_non_gf_devices, tvb, offset, 2,
8676 /* 2 byte HT additional capabilities */
8677 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 2,
8679 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap2_tree);
8681 proto_tree_add_item(cap_tree, hf_ieee80211_hta_basic_stbc_mcs, tvb, offset, 2,
8683 proto_tree_add_item(cap_tree, hf_ieee80211_hta_dual_stbc_protection, tvb, offset, 2,
8685 proto_tree_add_item(cap_tree, hf_ieee80211_hta_secondary_beacon, tvb, offset, 2,
8687 proto_tree_add_item(cap_tree, hf_ieee80211_hta_lsig_txop_protection, tvb, offset, 2,
8689 proto_tree_add_item(cap_tree, hf_ieee80211_hta_pco_active, tvb, offset, 2,
8691 proto_tree_add_item(cap_tree, hf_ieee80211_hta_pco_phase, tvb, offset, 2,
8695 /* 16 byte Supported MCS set */
8696 offset = dissect_mcs_set(tree, tvb, offset, FALSE, TRUE);
8701 /* 802.11n-D1.10 and 802.11n-D2.0, 7.1.3.5a */
8705 * "The Order field is 1 bit in length and is set to 1 in any non-QoS Data
8706 * frame that contains an MSDU, or fragment thereof, which is being
8707 * transferred using the StrictlyOrdered service class. The presence of the
8708 * HT Control field in frames is indicated by setting the Order field to 1
8709 * in any Data type or Management type frame that is transmitted with a
8710 * value of HT_GF or HT_MM for the FORMAT parameter of the TXVECTOR except
8711 * a non-QoS Data frame or a Control Wrapper frame. The Order field is set
8712 * to 0 in all other frames. All non-HT QoS STAs set the Order field to 0."
8714 * ...so does this mean that we can check for the presence of +HTC by
8715 * looking for QoS frames with the Order bit set, or do we need extra
8716 * information from the PHY (which would be monumentally silly)?
8718 * At any rate, it doesn't look like any equipment we have produces
8719 * +HTC frames, so the code is completely untested.
8723 dissect_ht_control(proto_tree *tree, tvbuff_t *tvb, int offset)
8726 proto_tree *htc_tree, *lac_subtree;
8729 htc = tvb_get_letohs(tvb, offset);
8731 ti = proto_tree_add_item(tree, hf_ieee80211_htc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8732 htc_tree = proto_item_add_subtree(ti, ett_htc_tree);
8734 /* Start: Link Adaptation Control */
8735 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_lac, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8736 lac_subtree = proto_item_add_subtree(ti, ett_htc_tree);
8737 proto_tree_add_boolean(lac_subtree, hf_ieee80211_htc_lac_reserved, tvb, offset, 1, htc);
8738 proto_tree_add_boolean(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 1, htc);
8740 if (HTC_IS_ASELI(htc)) {
8741 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 1, htc);
8743 proto_tree_add_boolean(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 1, htc);
8744 if (HTC_LAC_MAI_MRQ(htc)) {
8745 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 1, htc);
8747 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 1, htc);
8751 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, htc);
8754 if (HTC_IS_ASELI(htc)) {
8755 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 1, htc);
8756 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 1, htc);
8758 proto_tree_add_uint(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 1, htc);
8760 /* End: Link Adaptation Control */
8763 htc = tvb_get_letohs(tvb, offset);
8765 proto_tree_add_uint(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 1, htc);
8766 proto_tree_add_uint(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 1, htc);
8767 proto_tree_add_uint(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 1, htc);
8768 proto_tree_add_uint(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 1, htc);
8771 proto_tree_add_boolean(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 1, htc);
8772 proto_tree_add_uint(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 1, htc);
8773 proto_tree_add_boolean(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 1, htc);
8774 proto_tree_add_boolean(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 1, htc);
8778 dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, gboolean wlan_broken_fc,
8781 guint16 fcf, flags, frame_type_subtype;
8782 proto_tree *fc_tree, *flag_tree;
8783 proto_item *fc_item, *flag_item, *hidden_item;
8785 fcf = FETCH_FCF(offset);
8787 flags = FCF_FLAGS(fcf);
8788 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf);
8790 proto_tree_add_uint (tree, hf_ieee80211_fc_frame_type_subtype,
8791 tvb, wlan_broken_fc?offset+1:offset, 1,
8792 frame_type_subtype);
8794 fc_item = proto_tree_add_uint_format (tree, hf_ieee80211_fc_field, tvb,
8795 offset, 2, fcf, "Frame Control: 0x%04X (%s)",
8796 fcf, wlan_broken_fc?"Swapped":"Normal");
8798 fc_tree = proto_item_add_subtree (fc_item, ett_fc_tree);
8800 proto_tree_add_uint (fc_tree, hf_ieee80211_fc_proto_version, tvb, wlan_broken_fc?offset+1:offset, 1,
8801 FCF_PROT_VERSION (fcf));
8803 proto_tree_add_uint (fc_tree, hf_ieee80211_fc_frame_type, tvb, wlan_broken_fc?offset+1:offset, 1,
8804 FCF_FRAME_TYPE (fcf));
8806 proto_tree_add_uint (fc_tree, hf_ieee80211_fc_frame_subtype, tvb, wlan_broken_fc?offset+1:offset, 1,
8807 FCF_FRAME_SUBTYPE (fcf));
8809 flag_item = proto_tree_add_uint_format (fc_tree, hf_ieee80211_fc_flags, tvb,
8810 wlan_broken_fc?offset:offset+1, 1,
8811 flags, "Flags: 0x%X", flags);
8813 flag_tree = proto_item_add_subtree (flag_item, ett_proto_flags);
8814 proto_tree_add_uint (flag_tree, hf_ieee80211_fc_data_ds, tvb, wlan_broken_fc?offset:offset+1, 1,
8815 FLAGS_DS_STATUS (flags));
8816 hidden_item = proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_to_ds, tvb, offset+1, 1, flags);
8817 PROTO_ITEM_SET_HIDDEN(hidden_item);
8818 hidden_item = proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_from_ds, tvb, offset+1, 1, flags);
8819 PROTO_ITEM_SET_HIDDEN(hidden_item);
8820 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_more_frag, tvb, wlan_broken_fc?offset:offset+1, 1,
8822 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_retry, tvb, wlan_broken_fc?offset:offset+1, 1,
8824 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, wlan_broken_fc?offset:offset+1, 1,
8826 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_more_data, tvb, wlan_broken_fc?offset:offset+1, 1,
8828 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_protected, tvb, wlan_broken_fc?offset:offset+1, 1,
8830 proto_tree_add_boolean (flag_tree, hf_ieee80211_fc_order, tvb, wlan_broken_fc?offset:offset+1, 1,
8835 dissect_durid(proto_tree *hdr_tree, tvbuff_t *tvb, guint16 fts, gint offset)
8837 guint16 durid = tvb_get_letohs(tvb, offset);
8839 if (durid < 0x8000) {
8840 proto_tree_add_uint_format_value(hdr_tree, hf_ieee80211_did_duration, tvb,
8841 offset, 2, durid, "%u microseconds", durid);
8842 } else if (((durid & 0xC000) == 0xC000) &&
8843 ((durid & 0x3FFF) > 0) && ((durid & 0x3FFF) <= 2007) &&
8844 (fts == CTRL_PS_POLL)) {
8845 proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, 2, offset,
8847 } else if (durid == 0x8000) {
8848 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
8849 offset, 2, durid, "Duration/ID: %u", durid);
8851 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
8852 offset, 2, durid, "Duration/ID: %u (reserved)", durid & 0x3FFF);
8857 dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
8858 guint offset, proto_item *item, proto_item *ti_len, gint tag_len)
8861 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, 3, "802.11n (Pre) OUI");
8862 /* 802.11n OUI Information Element */
8863 if ((4 <= tag_len) && !tvb_memeql(tvb, offset, PRE_11N_OUI"\x33", 4)) {
8864 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 3, 1,"802.11n (Pre) HT information");
8866 dissect_ht_capability_ie(tvb, pinfo, tree, offset+4, tag_len - 4, ti_len, TRUE);
8867 proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
8870 if ((4 <= tag_len) && !tvb_memeql(tvb, offset, PRE_11N_OUI"\x34", 4)) {
8871 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 3, 1, "HT additional information (802.11n D1.00)");
8873 dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset+4, tag_len - 4, ti_len);
8874 proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
8877 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 3, 1, "Unknown type");
8878 proto_item_append_text(item, ": 802.11n (pre) Unknown type");
8879 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, 4,
8880 tag_len - 4, "Not interpreted");
8886 dissect_interworking(packet_info *pinfo, proto_tree *tree, proto_item *item,
8887 tvbuff_t *tvb, int offset)
8892 len = tvb_get_guint8(tvb, offset);
8895 if ((tvb_reported_length_remaining(tvb, offset) < len) || (len == 0)) {
8896 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
8897 "Truncated Interworking element");
8901 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_access_network_type,
8902 tvb, offset, 1, ENC_BIG_ENDIAN);
8903 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_internet,
8904 tvb, offset, 1, ENC_BIG_ENDIAN);
8905 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_asra,
8906 tvb, offset, 1, ENC_BIG_ENDIAN);
8907 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_esr,
8908 tvb, offset, 1, ENC_BIG_ENDIAN);
8909 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_uesa,
8910 tvb, offset, 1, ENC_BIG_ENDIAN);
8913 if ((len == (1 + 2)) || (len == (1 + 2 + 6))) {
8914 dissect_venue_info(tree, tvb, offset);
8918 if ((len == (1 + 6)) || (len == (1 + 2 + 6))) {
8919 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_hessid,
8920 tvb, offset, 6, ENC_NA);
8924 if ((len != 1) && (len != (1 + 2)) && (len != (1 + 6)) && (len != (1 + 2 + 6))) {
8925 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
8926 "Invalid Interworking element length");
8933 dissect_roaming_consortium(packet_info *pinfo, proto_tree *tree,
8934 proto_item *item, tvbuff_t *tvb, int offset)
8936 guint8 len, oi_lens, oi1_len, oi2_len;
8940 len = tvb_get_guint8(tvb, offset);
8944 if ((tvb_reported_length_remaining(tvb, offset) < len) || (len < 2)) {
8945 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
8946 "Truncated Roaming Consortium element");
8950 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
8951 tvb, offset, 1, ENC_BIG_ENDIAN);
8954 oi_lens = tvb_get_guint8(tvb, offset);
8955 oi1_len = oi_lens & 0x0f;
8956 oi2_len = (oi_lens & 0xf0) >> 4;
8957 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1_len,
8958 tvb, offset, 1, ENC_BIG_ENDIAN);
8959 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2_len,
8960 tvb, offset, 1, ENC_BIG_ENDIAN);
8963 if (offset + oi1_len > end) {
8964 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
8965 "Truncated Roaming Consortium element");
8969 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1,
8970 tvb, offset, oi1_len, ENC_NA);
8971 add_manuf(item, tvb, offset);
8974 if (offset + oi2_len > end) {
8975 expert_add_info_format(pinfo, item, PI_MALFORMED, PI_ERROR,
8976 "Truncated Roaming Consortium element");
8981 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2,
8982 tvb, offset, oi2_len, ENC_NA);
8987 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi3,
8988 tvb, offset, end - offset, ENC_NA);
8995 /* ************************************************************************* */
8996 /* Dissect and add tagged (optional) fields to proto tree */
8997 /* ************************************************************************* */
9000 static int beacon_padding = 0; /* beacon padding bug */
9003 ieee80211_tag_ssid(packet_info *pinfo, proto_tree *tree,
9004 proto_item *ti, proto_item *ti_len,
9005 guint32 tag_len, tvbuff_t *tvb, int offset)
9007 /* 7.3.2.1 SSID element (0) */
9008 guint8 *ssid; /* The SSID may consist of arbitrary bytes */
9010 if (beacon_padding != 0) /* padding bug */
9013 if (tag_len > MAX_SSID_LEN) {
9014 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
9015 "SSID length (%u) greater than maximum (%u)",
9016 tag_len, MAX_SSID_LEN);
9019 ssid = tvb_get_ephemeral_string(tvb, offset + 2, tag_len);
9020 AirPDcapSetLastSSID(&airpdcap_ctx, (CHAR *) ssid, tag_len);
9021 proto_tree_add_item(tree, hf_ieee80211_tag_ssid, tvb, offset + 2, tag_len,
9024 proto_item_append_text(ti, ": %s", ssid);
9026 col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID=%s", ssid);
9029 memcpy(wlan_stats.ssid, ssid, MIN(tag_len, MAX_SSID_LEN));
9030 wlan_stats.ssid_len = tag_len;
9032 proto_item_append_text(ti, ": Broadcast");
9034 col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Broadcast");
9037 beacon_padding += 1; /* padding bug */
9039 return offset + 2 + tag_len;
9043 ieee80211_tag_supp_rates(packet_info *pinfo, proto_tree *tree,
9044 proto_item *ti, proto_item *ti_len,
9045 guint32 tag_len, tvbuff_t *tvb,
9046 int offset, int tag_end)
9048 /* 7.3.2.2 Supported Rates element (1) */
9050 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
9051 "Tag length %u too short, must be greater than 0",
9058 while (offset < tag_end) {
9059 proto_tree_add_item(tree, hf_ieee80211_tag_supp_rates, tvb, offset, 1,
9061 proto_item_append_text(ti, " %s,",
9062 val_to_str_ext_const(tvb_get_guint8(tvb, offset),
9063 &ieee80211_supported_rates_vals_ext,
9068 proto_item_append_text(ti, " [Mbit/sec]");
9074 ieee80211_tag_fh_parameter(packet_info *pinfo, proto_tree *tree,
9075 proto_item *ti_len, guint32 tag_len,
9076 tvbuff_t *tvb, int offset)
9078 /* 7.3.2.3 FH Parameter Set element (2) */
9080 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
9081 "Tag length %u too short, must be >= 5", tag_len);
9087 proto_tree_add_item(tree, hf_ieee80211_tag_fh_dwell_time,
9088 tvb, offset, 2, ENC_LITTLE_ENDIAN);
9091 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_set,
9092 tvb, offset, 1, ENC_LITTLE_ENDIAN);
9095 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_pattern,
9096 tvb, offset, 1, ENC_LITTLE_ENDIAN);
9099 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_index,
9100 tvb, offset, 1, ENC_LITTLE_ENDIAN);
9107 ieee80211_tag_ds_parameter(packet_info *pinfo, proto_tree *tree,
9108 proto_item *ti, proto_item *ti_len,
9109 guint32 tag_len, tvbuff_t *tvb,
9112 /* 7.3.2.4 DS Parameter Set element (3) */
9114 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
9115 "Tag length %u wrong, must be = 1", tag_len);
9121 proto_tree_add_item(tree, hf_ieee80211_tag_ds_param_channel,
9122 tvb, offset, 1, ENC_BIG_ENDIAN);
9124 proto_item_append_text(ti, ": Current Channel: %u",
9125 tvb_get_guint8(tvb, offset));
9127 wlan_stats.channel = tvb_get_guint8(tvb, offset);
9134 ieee80211_tag_cf_parameter(packet_info *pinfo, proto_tree *tree,
9135 proto_item *ti, proto_item *ti_len,
9136 guint32 tag_len, tvbuff_t *tvb,
9139 /* 7.3.2.5 CF Parameter Set element (4) */
9141 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
9142 "Tag length %u wrong, must be = 6", tag_len);
9148 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_count,
9149 tvb, offset, 1, ENC_BIG_ENDIAN);
9150 proto_item_append_text(ti, ": CFP count %u", tvb_get_guint8(tvb, offset));
9153 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_period,
9154 tvb, offset, 1, ENC_BIG_ENDIAN);
9155 proto_item_append_text(ti, ": CFP Period %u", tvb_get_guint8(tvb, offset));
9158 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_max_duration,
9159 tvb, offset, 2, ENC_LITTLE_ENDIAN);
9160 proto_item_append_text(ti, ": CFP Max Duration %u",
9161 tvb_get_letohs(tvb, offset));
9164 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_dur_remaining,
9165 tvb, offset, 2, ENC_LITTLE_ENDIAN);
9166 proto_item_append_text(ti, ": CFP Dur Remaining %u",
9167 tvb_get_letohs(tvb, offset));
9174 ieee80211_tag_tim(packet_info *pinfo, proto_tree *tree,
9175 proto_item *ti, proto_item *ti_len,
9176 guint32 tag_len, tvbuff_t *tvb, int offset)
9178 proto_tree *bmapctl_tree;
9179 proto_item *bmapctl_item;
9181 /* 7.3.2.6 TIM (5) */
9183 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
9184 "Tag length %u too short, must be >= 4", tag_len);
9190 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_count,
9191 tvb, offset, 1, ENC_LITTLE_ENDIAN);
9192 proto_item_append_text(ti, ": DTIM %u of", tvb_get_guint8(tvb, offset));
9195 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_period,
9196 tvb, offset, 1, ENC_LITTLE_ENDIAN);
9197 proto_item_append_text(ti, " %u bitmap", tvb_get_guint8(tvb, offset + 1));
9200 bmapctl_item = proto_tree_add_item(tree, hf_ieee80211_tim_bmapctl,
9201 tvb, offset, 1, ENC_LITTLE_ENDIAN);
9202 bmapctl_tree = proto_item_add_subtree(bmapctl_item, ett_tag_bmapctl_tree);
9203 proto_tree_add_item(bmapctl_tree, hf_ieee80211_tim_bmapctl_mcast,
9204 tvb, offset, 1, ENC_LITTLE_ENDIAN);
9205 proto_tree_add_item(bmapctl_tree, hf_ieee80211_tim_bmapctl_offset,
9206 tvb, offset, 1, ENC_LITTLE_ENDIAN);
9209 proto_tree_add_item(tree, hf_ieee80211_tim_partial_virtual_bitmap,
9210 tvb, offset, tag_len - 3, ENC_NA);
9211 offset += tag_len - 3;
9217 ieee80211_tag_ibss_parameter(packet_info *pinfo, proto_tree *tree,
9218 proto_item *ti, proto_item *ti_len,
9219 guint32 tag_len, tvbuff_t *tvb,
9222 /* 7.3.2.7 IBSS Parameter Set element (6) */
9225 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
9226 "Tag length %u wrong, must be = 2", tag_len);
9232 proto_tree_add_item(tree, hf_ieee80211_tag_ibss_atim_window,
9233 tvb, offset, 2, ENC_LITTLE_ENDIAN);
9234 proto_item_append_text(ti, ": ATIM window 0x%x",
9235 tvb_get_letohs(tvb, offset));
9241 static const value_string environment_vals[] = {
9243 { 0x4f, "Outdoor" },
9249 ieee80211_tag_country_info(packet_info *pinfo, proto_tree *tree,
9250 proto_item *ti, proto_item *ti_len,
9251 guint32 tag_len, tvbuff_t *tvb,
9252 int offset, int tag_end)
9254 /* 7.3.2.9 Country information element (7) */
9255 proto_tree *sub_tree;
9256 proto_item *sub_item;
9259 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
9260 "Tag length %u too short, must be >= 6", tag_len);
9266 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_code,
9267 tvb, offset, 2, ENC_ASCII|ENC_NA);
9268 proto_item_append_text(ti, ": Country Code %s",
9269 tvb_get_ephemeral_string(tvb, offset, 2));
9272 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
9273 tvb, offset, 1, ENC_BIG_ENDIAN);
9274 proto_item_append_text(ti, ", Environment %s",
9275 val_to_str(tvb_get_guint8(tvb, offset),
9276 environment_vals,"Unknown (0x%02x)"));
9279 while (offset < tag_end) {
9281 if ((tag_end - offset) < 3) {
9282 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_pad,
9283 tvb, offset, 1, ENC_NA);
9287 if (tvb_get_guint8(tvb, offset) <= 200) { /* 802.11d */
9288 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_fnm,
9289 tvb, offset, 3, ENC_NA);
9290 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_fnm_tree);
9292 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_fcn,
9293 tvb, offset, 1, ENC_BIG_ENDIAN);
9294 proto_item_append_text(sub_item, ": First Channel Number: %d",
9295 tvb_get_guint8(tvb, offset));
9297 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_nc,
9298 tvb, offset, 1, ENC_BIG_ENDIAN);
9299 proto_item_append_text(sub_item, ", Number of Channels: %d",
9300 tvb_get_guint8(tvb, offset));
9302 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_mtpl,
9303 tvb, offset, 1, ENC_BIG_ENDIAN);
9304 proto_item_append_text(sub_item,
9305 ", Maximum Transmit Power Level: %d dBm",
9306 tvb_get_guint8(tvb, offset));
9308 } else { /* 802.11j */
9309 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_rrc,
9310 tvb, offset, 3, ENC_NA);
9311 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_rcc_tree);
9313 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_rei,
9314 tvb, offset, 1, ENC_BIG_ENDIAN);
9315 proto_item_append_text(sub_item,
9316 ": Regulatory Extension Identifier: %d",
9317 tvb_get_guint8(tvb, offset));
9319 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_rc,
9320 tvb, offset, 1, ENC_BIG_ENDIAN);
9321 proto_item_append_text(sub_item, ", Regulatory Class: %d",
9322 tvb_get_guint8(tvb, offset));
9324 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_cc,
9325 tvb, offset, 1, ENC_BIG_ENDIAN);
9326 proto_item_append_text(sub_item, ", Coverage Class: %d",
9327 tvb_get_guint8(tvb, offset));
9336 ieee80211_tag_fh_hopping_parameter(packet_info *pinfo,
9340 guint32 tag_len, tvbuff_t *tvb,
9343 /* 7.3.2.10 Hopping Pattern Parameters information element (8) */
9345 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
9346 "Tag length %u too short, must be >= 2", tag_len);
9352 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
9353 tvb, offset, 1, ENC_BIG_ENDIAN);
9354 proto_item_append_text(ti, ": Prime Radix: %u", tvb_get_guint8(tvb, offset));
9357 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
9358 tvb, offset, 1, ENC_BIG_ENDIAN);
9359 proto_item_append_text(ti, ", Number of Channels: %u",
9360 tvb_get_guint8(tvb, offset));
9367 ieee80211_tag_fh_hopping_table(packet_info *pinfo, proto_tree *tree,
9369 guint32 tag_len, tvbuff_t *tvb,
9370 int offset, int tag_end)
9372 /* 7.3.2.11 Hopping Pattern Table information element (9) */
9374 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR,
9375 "Tag length %u too short, must be >= 4", tag_len);
9381 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_flag,
9382 tvb, offset, 1, ENC_BIG_ENDIAN);
9385 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_number_of_sets,
9386 tvb, offset, 1, ENC_BIG_ENDIAN);
9389 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_modulus,
9390 tvb, offset, 1, ENC_BIG_ENDIAN);
9393 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_offset,
9394 tvb, offset, 1, ENC_BIG_ENDIAN);
9397 while (offset < tag_end) {
9398 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_random_table,
9399 tvb, offset, 2, ENC_BIG_ENDIAN);
9407 add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype)
9411 const guint8 *tag_data_ptr;
9412 guint32 tag_no, tag_len;
9414 char print_buff[SHORT_STR];
9415 proto_tree *orig_tree = tree;
9416 proto_item *ti = NULL;
9420 tag_no = tvb_get_guint8(tvb, offset);
9421 tag_len = tvb_get_guint8(tvb, offset + 1);
9422 tag_end = offset + 2 + tag_len;
9424 ti = proto_tree_add_item(orig_tree, hf_ieee80211_tag, tvb, offset, 2 + tag_len , ENC_NA);
9425 proto_item_append_text(ti, ": %s", val_to_str_ext(tag_no, &tag_num_vals_ext, "Reserved (%d)"));
9427 tree = proto_item_add_subtree(ti, ett_80211_mgt_ie);
9429 proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_BIG_ENDIAN);
9432 ti_len = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
9436 offset += ieee80211_tag_ssid(pinfo, tree, ti, ti_len, tag_len, tvb,
9439 case TAG_SUPP_RATES:
9440 offset += ieee80211_tag_supp_rates(pinfo, tree, ti, ti_len, tag_len, tvb,
9443 case TAG_FH_PARAMETER:
9444 offset += ieee80211_tag_fh_parameter(pinfo, tree, ti_len, tag_len, tvb,
9447 case TAG_DS_PARAMETER:
9448 offset += ieee80211_tag_ds_parameter(pinfo, tree, ti, ti_len, tag_len, tvb,
9451 case TAG_CF_PARAMETER:
9452 offset += ieee80211_tag_cf_parameter(pinfo, tree, ti, ti_len, tag_len, tvb,
9456 offset += ieee80211_tag_tim(pinfo, tree, ti, ti_len, tag_len, tvb, offset);
9458 case TAG_IBSS_PARAMETER:
9459 offset += ieee80211_tag_ibss_parameter(pinfo, tree, ti, ti_len, tag_len,
9462 case TAG_COUNTRY_INFO:
9463 offset += ieee80211_tag_country_info(pinfo, tree, ti, ti_len, tag_len, tvb,
9466 case TAG_FH_HOPPING_PARAMETER:
9467 offset += ieee80211_tag_fh_hopping_parameter(pinfo, tree, ti, ti_len,
9468 tag_len, tvb, offset);
9470 case TAG_FH_HOPPING_TABLE:
9471 offset += ieee80211_tag_fh_hopping_table(pinfo, tree, ti_len, tag_len,
9472 tvb, offset, tag_end);
9475 case TAG_REQUEST: /* 7.3.2.12 Request information element (10) */
9476 while (offset < tag_end)
9478 proto_tree_add_item(tree, hf_ieee80211_tag_request, tvb, offset, 1, ENC_BIG_ENDIAN);
9483 case TAG_QBSS_LOAD: /* 7.3.2.28 BSS Load element (11) */
9484 if ((tag_len < 4) || (tag_len > 5))
9486 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 4 or 5", tag_len);
9492 /* QBSS Version 1 */
9493 proto_item_append_text(ti, " Cisco QBSS Version 1 - non CCA");
9495 /* Extract Values */
9496 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset + 2, tag_len, 1);
9497 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN);
9498 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 4, 1, ENC_BIG_ENDIAN);
9499 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 5, 1, ENC_BIG_ENDIAN);
9501 else if (tag_len == 5)
9503 /* QBSS Version 2 */
9504 proto_item_append_text(ti, " 802.11e CCA Version");
9506 /* Extract Values */
9507 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset + 2, tag_len, 2);
9508 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN);
9509 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 4, 1, ENC_BIG_ENDIAN);
9510 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 5, 2, ENC_LITTLE_ENDIAN);
9514 case TAG_TSPEC: /* 7.3.2.30 TSPEC element (13) */
9517 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 55", tag_len);
9522 add_fixed_field(tree, tvb, offset, FIELD_QOS_TS_INFO);
9525 proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9528 proto_tree_add_item(tree, hf_ieee80211_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9531 proto_tree_add_item(tree, hf_ieee80211_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9534 proto_tree_add_item(tree, hf_ieee80211_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9537 proto_tree_add_item(tree, hf_ieee80211_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9540 proto_tree_add_item(tree, hf_ieee80211_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9543 proto_tree_add_item(tree, hf_ieee80211_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9546 proto_tree_add_item(tree, hf_ieee80211_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9549 proto_tree_add_item(tree, hf_ieee80211_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9552 proto_tree_add_item(tree, hf_ieee80211_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9555 proto_tree_add_item(tree, hf_ieee80211_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9558 proto_tree_add_item(tree, hf_ieee80211_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9561 proto_tree_add_item(tree, hf_ieee80211_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9564 proto_tree_add_item(tree, hf_ieee80211_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9567 proto_tree_add_item(tree, hf_ieee80211_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9572 case TAG_TCLAS: /* 7.3.2.31 TCLAS element (14) */
9575 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be >= 6", tag_len);
9583 proto_tree_add_item(tree, hf_ieee80211_tclas_up, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9584 type = tvb_get_guint8(tvb, offset);
9587 proto_tree_add_item(tree, hf_ieee80211_tclas_class_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9590 proto_tree_add_item(tree, hf_ieee80211_tclas_class_mask, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9596 proto_tree_add_item(tree, hf_ieee80211_tclas_src_mac_addr, tvb, offset, 6, ENC_NA);
9599 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_mac_addr, tvb, offset, 6, ENC_NA);
9602 proto_tree_add_item(tree, hf_ieee80211_tclas_ether_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9607 version = tvb_get_guint8(tvb, offset + 5);
9608 proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
9612 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN);
9614 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN);
9616 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN);
9618 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN);
9620 proto_tree_add_item(tree, hf_ieee80211_tclas_dscp, tvb, offset, 1, ENC_BIG_ENDIAN);
9622 proto_tree_add_item(tree, hf_ieee80211_tclas_protocol, tvb, offset, 1, ENC_BIG_ENDIAN);
9625 else if (version == 6)
9627 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_src, tvb, offset, 16, ENC_NA);
9629 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_dst, tvb, offset, 16, ENC_NA);
9631 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN);
9633 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN);
9635 proto_tree_add_item(tree, hf_ieee80211_tclas_flow, tvb, offset, 3, ENC_BIG_ENDIAN);
9641 proto_tree_add_item(tree, hf_ieee80211_tclas_tag_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9651 case TAG_SCHEDULE: /* 7.3.2.34 Schedule element (15) */
9654 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 14", tag_len);
9659 add_fixed_field(tree, tvb, offset, FIELD_SCHEDULE_INFO);
9662 proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9665 proto_tree_add_item(tree, hf_ieee80211_sched_srv_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9668 proto_tree_add_item(tree, hf_ieee80211_sched_spec_int, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9672 case TAG_CHALLENGE_TEXT: /* 7.3.2.8 Challenge Text element (16) */
9674 proto_tree_add_item(tree, hf_ieee80211_tag_challenge_text, tvb, offset, tag_len, ENC_NA);
9677 case TAG_POWER_CONSTRAINT: /* 7.3.2.15 Power Constraint element (32) */
9681 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 1", tag_len);
9686 proto_tree_add_item(tree, hf_ieee80211_tag_power_constraint_local, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9687 proto_item_append_text(ti, ": %d", tvb_get_guint8(tvb, offset));
9693 case TAG_POWER_CAPABILITY: /* 7.3.2.16 Power Capability element (33) */
9697 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 2", tag_len);
9702 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_min, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9703 proto_item_append_text(ti, " Min: %d", tvb_get_guint8(tvb, offset));
9706 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_max, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9707 proto_item_append_text(ti, ", Max :%d", tvb_get_guint8(tvb, offset));
9712 case TAG_TPC_REQUEST: /* 7.3.2.18 TPC Request element (34) */
9716 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 0", tag_len);
9725 case TAG_TPC_REPORT: /* 7.3.2.18 TPC Report element (35) */
9729 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 2", tag_len);
9734 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_trsmt_pow, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9735 proto_item_append_text(ti, " Transmit Power :%d", tvb_get_guint8(tvb, offset));
9738 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_link_mrg, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9739 proto_item_append_text(ti, ", Link Margin :%d", tvb_get_guint8(tvb, offset));
9745 case TAG_SUPPORTED_CHANNELS: /* 7.3.2.19 Supported Channels element (36) */
9747 proto_item *chan_item;
9748 proto_tree *chan_tree;
9752 if (tag_len % 2 == 1) {
9753 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u must be even",tag_len);
9756 while (offset < tag_end)
9758 chan_item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_channels, tvb, offset, 2, ENC_NA);
9759 proto_item_append_text(chan_item, " #%d", i);
9762 chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
9764 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_first, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9765 proto_item_append_text(chan_item, " First: %d", tvb_get_guint8(tvb, offset));
9768 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_range, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9769 proto_item_append_text(chan_item, ", Range: %d ", tvb_get_guint8(tvb, offset));
9775 case TAG_CHANNEL_SWITCH_ANN: /* 7.3.2.20 Channel Switch Announcement element (37) */
9779 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 3", tag_len);
9784 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9785 proto_item_append_text(ti, " Mode: %d", tvb_get_guint8(tvb, offset));
9788 proto_tree_add_item(tree, hf_ieee80211_csa_new_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9789 proto_item_append_text(ti, ", Number: %d ", tvb_get_guint8(tvb, offset));
9792 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9793 proto_item_append_text(ti, ", Count: %d ", tvb_get_guint8(tvb, offset));
9799 case TAG_MEASURE_REQ: /* 7.3.2.21 Measurement Request element (38) with update from 802.11k-2008 */
9802 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be >= 3", tag_len);
9806 guint8 request_type;
9807 proto_item *parent_item;
9808 proto_tree *sub_tree;
9812 proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_token, tvb, offset, 1, ENC_NA);
9815 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_mode, tvb, offset, 1, ENC_NA);
9816 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_mode_tree);
9817 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_parallel, tvb, offset, 1, ENC_NA);
9818 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_enable, tvb, offset, 1, ENC_NA);
9819 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_request, tvb, offset, 1, ENC_NA);
9820 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_report, tvb, offset, 1, ENC_NA);
9821 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_duration_mandatory, tvb, offset, 1, ENC_NA);
9822 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_reserved, tvb, offset, 1, ENC_NA);
9826 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_type, tvb, offset, 1, ENC_NA);
9827 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_type_tree);
9828 request_type = tvb_get_guint8 (tvb, offset);
9831 switch (request_type) {
9832 case 0: /* Basic Request */
9833 case 1: /* Clear channel assessment (CCA) request */
9834 case 2: /* Receive power indication (RPI) histogram request */
9837 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
9840 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
9843 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9847 case 3: /* Channel Load Request */
9848 case 4: /* Noise Histogram Request */
9850 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_regulatory_class, tvb, offset, 1, ENC_NA);
9853 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
9856 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9859 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9861 /* TODO Add Optional Subelements */
9864 case 5: /* Beacon Request */
9866 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_regulatory_class, tvb, offset, 1, ENC_NA);
9869 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
9872 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9875 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9878 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_measurement_mode, tvb, offset, 1, ENC_NA);
9881 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_bssid, tvb, offset, 6, ENC_NA);
9884 while (offset < tag_end)
9886 guint8 sub_id, sub_length, sub_tag_end;
9887 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_id, tvb, offset, 1, ENC_NA);
9888 sub_id = tvb_get_guint8(tvb, offset);
9891 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA);
9892 sub_length = tvb_get_guint8(tvb, offset);
9894 sub_tag_end = offset + sub_length;
9897 case MEASURE_REQ_BEACON_SUB_SSID: /* SSID (0) */
9898 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_ssid, tvb, offset, sub_length, ENC_ASCII|ENC_NA);
9899 offset += sub_length;
9901 case MEASURE_REQ_BEACON_SUB_BRI: /* Beacon Reporting Information (1) */
9902 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition, tvb, offset, 1, ENC_BIG_ENDIAN);
9904 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset, tvb, offset, 1, ENC_BIG_ENDIAN);
9907 case MEASURE_REQ_BEACON_SUB_RD: /* Reporting Detail (2) */
9908 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail, tvb, offset, 1, ENC_BIG_ENDIAN);
9911 case MEASURE_REQ_BEACON_SUB_REQUEST: /* Request (10) */
9912 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_request, tvb, offset, 1, ENC_BIG_ENDIAN);
9915 case MEASURE_REQ_BEACON_SUB_APCP: /* Request (51) */
9919 /* no default action */
9922 if (offset < sub_tag_end)
9925 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA);
9926 expert_add_info_format(pinfo, tix, PI_UNDECODED, PI_WARN, " Unknown Data (not interpreted)");
9927 offset = sub_tag_end;
9933 case 6: /* Frame Request */
9935 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_regulatory_class, tvb, offset, 1, ENC_NA);
9938 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
9941 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9944 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9947 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_frame_request_type, tvb, offset, 1, ENC_NA);
9950 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mac_address, tvb, offset, 6, ENC_NA);
9953 /* TODO Add Optional Subelements */
9956 case 7: /* BSTA Statistics Request */
9958 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_peer_mac_address, tvb, offset, 6, ENC_NA);
9961 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9964 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9967 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_group_id, tvb, offset, 1, ENC_NA);
9970 /* TODO Add Optional Subelements */
9973 case 8: /* Location Configuration Indication (LCI) Request */
9975 case 9: /* Transmit Stream Measurement Request */
9977 case 255: /* Measurement Pause Request*/
9979 default: /* unknown */
9985 case TAG_MEASURE_REP: /* 7.3.2.22 Measurement Report element (39) with update from 802.11k-2008 */
9988 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be >= 3", tag_len);
9992 proto_item *parent_item;
9993 proto_tree *sub_tree;
9997 proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_measurement_token, tvb, offset, 1, ENC_NA);
10000 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_mode, tvb, offset, 1, ENC_NA);
10001 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_mode_tree);
10002 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_late, tvb, offset, 1, ENC_NA);
10003 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_incapable, tvb, offset, 1, ENC_NA);
10004 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_refused, tvb, offset, 1, ENC_NA);
10005 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_reserved, tvb, offset, 1, ENC_NA);
10008 report_type = tvb_get_guint8(tvb, offset);
10009 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10010 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_type_tree);
10015 switch (report_type) {
10016 case 0: /* Basic Report */
10018 proto_tree *sub_tree_map_field;
10020 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
10023 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
10026 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10030 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_basic_map_field, tvb, offset, 1, ENC_NA);
10031 sub_tree_map_field = proto_item_add_subtree(parent_item, ett_tag_measure_report_basic_map_tree);
10032 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_bss, tvb, offset, 1, ENC_NA);
10033 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_odfm, tvb, offset, 1, ENC_NA);
10034 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_unident_signal, tvb, offset, 1, ENC_NA);
10035 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_radar, tvb, offset, 1, ENC_NA);
10036 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_unmeasured, tvb, offset, 1, ENC_NA);
10037 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_reserved, tvb, offset, 1, ENC_NA);
10040 case 1: /* Clear channel assessment (CCA) report */
10041 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
10044 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
10047 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10050 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_cca_busy_fraction, tvb, offset, 1, ENC_NA);
10053 case 2: /* Receive power indication (RPI) histogram report */
10054 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
10057 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
10060 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10063 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report, tvb, offset, 8, ENC_NA);
10064 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_rpi_tree);
10066 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_0, tvb, offset, 1, ENC_NA);
10069 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_1, tvb, offset, 1, ENC_NA);
10072 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_2, tvb, offset, 1, ENC_NA);
10075 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_3, tvb, offset, 1, ENC_NA);
10078 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_4, tvb, offset, 1, ENC_NA);
10081 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_5, tvb, offset, 1, ENC_NA);
10084 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_6, tvb, offset, 1, ENC_NA);
10087 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_7, tvb, offset, 1, ENC_NA);
10090 case 3: /* Channel Load Report */
10092 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_regulatory_class, tvb, offset, 1, ENC_NA);
10095 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
10098 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
10101 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10104 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_load, tvb, offset, 1, ENC_NA);
10107 /* TODO Add Optional Subelements */
10110 case 4: /* Noise Histogram Report */
10111 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_regulatory_class, tvb, offset, 1, ENC_NA);
10114 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
10117 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
10120 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10123 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA);
10126 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_anpi, tvb, offset, 1, ENC_NA);
10129 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_0, tvb, offset, 1, ENC_NA);
10132 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_1, tvb, offset, 1, ENC_NA);
10135 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_2, tvb, offset, 1, ENC_NA);
10138 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_3, tvb, offset, 1, ENC_NA);
10141 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_4, tvb, offset, 1, ENC_NA);
10144 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_5, tvb, offset, 1, ENC_NA);
10147 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_6, tvb, offset, 1, ENC_NA);
10150 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_7, tvb, offset, 1, ENC_NA);
10153 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_8, tvb, offset, 1, ENC_NA);
10156 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_9, tvb, offset, 1, ENC_NA);
10159 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_10, tvb, offset, 1, ENC_NA);
10162 /* TODO Add Optional Subelements */
10164 case 5: /* Beacon Report */
10166 proto_tree *sub_tree_frame_info;
10168 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_regulatory_class, tvb, offset, 1, ENC_NA);
10171 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
10174 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
10177 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10180 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_frame_info, tvb, offset, 1, ENC_NA);
10181 sub_tree_frame_info = proto_item_add_subtree(parent_item, ett_tag_measure_report_frame_tree);
10182 proto_tree_add_item(sub_tree_frame_info, hf_ieee80211_tag_measure_report_frame_info_phy_type, tvb, offset, 1, ENC_NA);
10183 proto_tree_add_item(sub_tree_frame_info, hf_ieee80211_tag_measure_report_frame_info_frame_type, tvb, offset, 1, ENC_NA);
10186 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rcpi, tvb, offset, 1, ENC_NA);
10189 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rsni, tvb, offset, 1, ENC_NA);
10192 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_bssid, tvb, offset, 6, ENC_NA);
10195 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA);
10198 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10200 /* TODO Add Optional Subelements */
10203 case 6: /* Frame Report */
10204 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_regulatory_class, tvb, offset, 1, ENC_NA);
10207 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
10210 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
10213 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10216 /* TODO Add Optional Subelements */
10218 case 7: /* BSTA Statistics Report */
10220 case 8: /* Location Configuration Information Report element */
10222 case 9: /* Transmit Stream Measurement Report */
10224 default: /* unknown */
10229 case TAG_QUIET: /* 7.3.2.23 Quiet element (40) */
10232 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 6", tag_len);
10237 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_count, tvb, offset, 1, ENC_NA);
10238 proto_item_append_text(ti, " Count: %d", tvb_get_guint8(tvb, offset));
10241 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_period, tvb, offset, 1, ENC_NA);
10242 proto_item_append_text(ti, " Period: %d", tvb_get_guint8(tvb, offset));
10245 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10246 proto_item_append_text(ti, " Duration: %d", tvb_get_letohs(tvb, offset));
10249 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10250 proto_item_append_text(ti, " Offset: %d", tvb_get_letohs(tvb, offset));
10255 case TAG_IBSS_DFS: /* 7.3.2.24 IBSS DFS element (41) */
10258 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be >= 7", tag_len);
10262 proto_item *ti_sup_map;
10263 proto_tree *sub_map_tree;
10266 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_owner, tvb, offset, 6, ENC_NA);
10267 proto_item_append_text(ti, " Owner: %s", tvb_ether_to_str(tvb, offset));
10270 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_recovery_interval, tvb, offset, 1, ENC_NA);
10273 while (offset < tag_end)
10275 ti_sup_map = proto_tree_add_item(tree, hf_ieee80211_tag_dfs_channel_map, tvb, offset, 2, ENC_NA);
10276 sub_map_tree = proto_item_add_subtree(ti_sup_map, ett_tag_dfs_map_tree);
10277 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_channel_number, tvb, offset, 1, ENC_NA);
10278 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_map, tvb, offset, 1, ENC_NA);
10283 case TAG_ERP_INFO: /* 7.3.2.13 ERP Information element (42) */
10284 case TAG_ERP_INFO_OLD:
10287 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 1", tag_len);
10291 proto_item *ti_erp;
10292 proto_tree *erp_tree;
10296 ti_erp = proto_tree_add_item(tree, hf_ieee80211_tag_erp_info, tvb, offset, 1, ENC_NA);
10297 erp_tree = proto_item_add_subtree(ti_erp, ett_tag_erp_info_tree);
10298 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_erp_present, tvb, offset, 1, ENC_NA);
10299 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_use_protection, tvb, offset, 1, ENC_NA);
10300 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_barker_preamble_mode, tvb, offset, 1, ENC_NA);
10301 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_reserved, tvb, offset, 1, ENC_NA);
10306 case TAG_TS_DELAY: /* 7.3.2.32 TS Delay element (43) */
10309 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 4", tag_len);
10314 proto_tree_add_item(tree, hf_ieee80211_ts_delay, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10315 proto_item_append_text(ti, " : %d", tvb_get_ntohl(tvb, offset));
10319 case TAG_TCLAS_PROCESS: /* 7.3.2.33 TCLAS Processing element (44) */
10322 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 1", tag_len);
10327 proto_tree_add_item(tree, hf_ieee80211_tclas_process, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10328 proto_item_append_text(ti, " : %s", val_to_str(tvb_get_guint8(tvb, offset), ieee80211_tclas_process_flag, "Unknown %d"));
10332 case TAG_QOS_CAPABILITY: /* 7.3.2.35 QoS Capability element (46) */
10335 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be = 1", tag_len);
10339 /* proto_item *ti_cap;
10340 proto_tree *cap_tree; */
10342 offset = dissect_qos_capability(tree, tvb, offset, ftype);
10346 case TAG_RSN_IE: /* 7.3.2.25 RSN information element (48) */
10349 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be >= 18", tag_len);
10354 offset = dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len);
10357 case TAG_EXT_SUPP_RATES: /* 7.3.2.14 Extended Supported Rates element (50) */
10360 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be greater than 0", tag_len);
10365 while (offset < tag_end)
10367 proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA);
10368 proto_item_append_text(ti, " %s,", val_to_str_ext_const(tvb_get_guint8(tvb, offset), &ieee80211_supported_rates_vals_ext, "Unknown Rate"));
10371 proto_item_append_text(ti, " [Mbit/sec]");
10374 case TAG_EXTENDED_CAPABILITIES: /* 7.3.2.27 Extended Capabilities information element (127) */
10376 proto_item *ti_ex_cap;
10377 proto_tree *ex_cap_tree;
10381 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag length %u too short, must be greater than 0", tag_len);
10386 /* Extended Capability octet 0 */
10387 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10388 proto_item_append_text(ti_ex_cap, " (octet 0)");
10389 ex_cap_tree = proto_item_add_subtree (ti_ex_cap, ett_tag_ex_cap);
10390 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b0, tvb, offset, 1, ENC_NA);
10391 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b1, tvb, offset, 1, ENC_NA);
10392 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b2, tvb, offset, 1, ENC_NA);
10393 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b3, tvb, offset, 1, ENC_NA);
10394 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b4, tvb, offset, 1, ENC_NA);
10395 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b6, tvb, offset, 1, ENC_NA);
10398 /* Extended Capability octet 1 */
10399 if (offset >= tag_end) {
10402 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10403 proto_item_append_text(ti_ex_cap, " (octet 1)");
10406 /* Extended Capability octet 2 */
10407 if (offset >= tag_end) {
10410 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10411 proto_item_append_text(ti_ex_cap, " (octet 2)");
10414 /* Extended Capability octet 3 */
10415 if (offset >= tag_end) {
10418 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10419 proto_item_append_text(ti_ex_cap, " (octet 3)");
10420 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap);
10421 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b27, tvb, offset, 1, ENC_NA);
10422 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b28, tvb, offset, 1, ENC_NA);
10423 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b29, tvb, offset, 1, ENC_NA);
10424 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b30, tvb, offset, 1, ENC_NA);
10425 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b31, tvb, offset, 1, ENC_NA);
10428 /* Extended Capability octet 4 */
10429 if (offset >= tag_end) {
10432 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10433 proto_item_append_text(ti_ex_cap, " (octet 4)");
10434 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap);
10435 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b32, tvb, offset, 1, ENC_NA);
10436 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b33, tvb, offset, 1, ENC_NA);
10437 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b34, tvb, offset, 1, ENC_NA);
10438 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b36, tvb, offset, 1, ENC_NA);
10439 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b37, tvb, offset, 1, ENC_NA);
10440 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b38, tvb, offset, 1, ENC_NA);
10441 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b39, tvb, offset, 1, ENC_NA);
10444 /* Extended Capability octet 5 */
10445 if (offset >= tag_end) {
10448 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10449 proto_item_append_text(ti_ex_cap, " (octet 5)");
10450 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap);
10451 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b40, tvb, offset, 1, ENC_NA);
10452 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_serv_int_granularity, tvb, offset, 1, ENC_NA);
10457 case TAG_CISCO_CCX1_CKIP: /* Cisco CCX1 CKIP + Device Name (133) */
10458 /* From WCS manual:
10459 * If Aironet IE support is enabled, the access point sends an Aironet
10460 * IE 0x85 (which contains the access point name, load, number of
10461 * associated clients, and so on) in the beacon and probe responses of
10462 * this WLAN, and the controller sends Aironet IEs 0x85 and 0x95
10463 * (which contains the management IP address of the controller and
10464 * the IP address of the access point) in the reassociation response
10465 * if it receives Aironet IE 0x85 in the reassociation request.
10470 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u too short, must be >= 26", tag_len);
10474 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown, tvb, offset, 10, ENC_NA);
10477 /* The Name of the sending device starts at offset 10 and is up to
10478 15 or 16 bytes in length, \0 padded */
10479 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_name, tvb, offset, 16, ENC_ASCII|ENC_NA);
10482 /* Total number off associated clients and repeater access points */
10483 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_clients, tvb, offset, 1, ENC_NA);
10487 case TAG_VHT_CAPABILITY:
10488 dissect_vht_capability_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len);
10491 case TAG_VHT_OPERATION:
10492 dissect_vht_operation_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len);
10495 case TAG_VENDOR_SPECIFIC_IE: /* 7.3.2.26 Vendor Specific information element (221) */
10498 expert_add_info_format(pinfo, ti_len, PI_MALFORMED, PI_ERROR, "Tag Length %u wrong, must be >= 3", tag_len);
10504 oui = tvb_get_ntoh24(tvb, offset);
10505 tag_tvb = tvb_new_subset(tvb, offset, tag_len, tag_len);
10506 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
10507 proto_item_append_text(ti, ": %s", uint_get_manuf_name(oui));
10510 proto_tree_add_item(ti, hf_ieee80211_tag_vendor_oui_type, tvb, offset + 3, 1, ENC_BIG_ENDIAN);
10514 /* 802.11 specific vendor ids */
10515 # define WPAWME_OUI 0x0050F2
10516 # define RSNOUI_VAL 0x000FAC
10517 # define PRE11N_OUI 0x00904c
10519 offset = dissect_vendor_ie_wpawme(tree, tvb, offset + 3, tag_len, ftype);
10522 dissect_vendor_ie_rsn(ti, tree, tag_tvb);
10525 dissect_vendor_ie_ht(tvb, pinfo, tree, offset, ti, ti_len, tag_len);
10528 dissect_vendor_ie_wfa(pinfo, ti, tag_tvb);
10531 /* Normal IEEE vendor ids (from oui.h) */
10532 case OUI_CISCOWL: /* Cisco Wireless (Aironet) */
10533 dissect_vendor_ie_aironet(ti, tree, tvb, offset + 3, tag_len - 3);
10536 dissect_vendor_ie_marvell(ti, tree, tvb, offset + 3, tag_len - 3);
10539 dissect_vendor_ie_atheros(ti, tree, tvb, offset + 3, tag_len - 3, pinfo, ti_len);
10542 proto_tree_add_string (tree, hf_ieee80211_tag_interpretation, tvb, offset + 3,
10543 tag_len - 3, "Not interpreted");
10550 case TAG_MOBILITY_DOMAIN:
10551 dissect_mobility_domain(tree, tvb, offset + 2, tag_len);
10554 case TAG_FAST_BSS_TRANSITION:
10555 dissect_fast_bss_transition(tree, tvb, offset + 2, tag_len);
10559 dissect_mmie(tree, tvb, offset + 2, tag_len);
10562 case TAG_TIME_ZONE:
10563 dissect_time_zone(tree, tvb, offset + 2, tag_len);
10566 case TAG_TIMEOUT_INTERVAL:
10567 dissect_timeout_interval(tree, tvb, offset + 2, tag_len);
10570 case TAG_LINK_IDENTIFIER:
10571 dissect_link_identifier(tree, tvb, offset + 2, tag_len);
10574 case TAG_WAKEUP_SCHEDULE:
10575 dissect_wakeup_schedule(tree, tvb, offset + 2, tag_len);
10578 case TAG_CHANNEL_SWITCH_TIMING:
10579 dissect_channel_switch_timing(tree, tvb, offset + 2, tag_len);
10582 case TAG_PTI_CONTROL:
10583 dissect_pti_control(tree, tvb, offset + 2, tag_len);
10586 case TAG_PU_BUFFER_STATUS:
10587 dissect_pu_buffer_status(tree, tvb, offset + 2, tag_len);
10590 case TAG_HT_CAPABILITY:
10591 dissect_ht_capability_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len, FALSE);
10595 dissect_ht_info_ie_1_1(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
10598 case TAG_SECONDARY_CHANNEL_OFFSET:
10599 dissect_secondary_channel_offset_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
10603 dissect_time_adv(tree, tvb, offset + 2);
10606 case TAG_MESH_PEERING_MGMT:
10608 guint start = offset + 2;
10610 proto_tree_add_item (tree, hf_ieee80211_mesh_peering_proto, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10612 proto_tree_add_item (tree, hf_ieee80211_mesh_peering_local_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10614 switch (tvb_get_guint8(tvb, 1))
10615 { /* Self-protected action field */
10616 case SELFPROT_ACTION_MESH_PEERING_OPEN:
10619 case SELFPROT_ACTION_MESH_PEERING_CONFIRM:
10620 proto_tree_add_item (tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10624 case SELFPROT_ACTION_MESH_PEERING_CLOSE:
10625 if ((tag_len == 8) || (tag_len == 24))
10627 proto_tree_add_item (tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10630 offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
10633 /* unexpected values */
10635 proto_tree_add_text (tree, tvb, offset, tag_len, "Unexpected Self-protected action");
10639 if (tag_len - (offset - start) == 16)
10641 proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA);
10647 case TAG_MESH_CONFIGURATION:
10650 proto_tree_add_item (tree, hf_ieee80211_mesh_config_path_sel_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10651 proto_tree_add_item (tree, hf_ieee80211_mesh_config_path_sel_metric, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
10652 proto_tree_add_item (tree, hf_ieee80211_mesh_config_congestion_control, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
10653 proto_tree_add_item (tree, hf_ieee80211_mesh_config_sync_method, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
10654 proto_tree_add_item (tree, hf_ieee80211_mesh_config_auth_protocol, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
10655 proto_tree_add_item (tree, hf_ieee80211_mesh_config_formation_info, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
10656 proto_tree_add_item (tree, hf_ieee80211_mesh_config_capability, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
10664 proto_tree_add_item(tree, hf_ieee80211_mesh_id, tvb, offset, tag_len, ENC_ASCII|ENC_NA);
10666 col_append_fstr(pinfo->cinfo, COL_INFO, ", MESHID=%s", tvb_get_ephemeral_string(tvb, offset, tag_len));
10667 proto_item_append_text(ti, ": %s", tvb_get_ephemeral_string(tvb, offset, tag_len));
10673 case TAG_MESH_PREQ:
10675 guint8 flags = tvb_get_guint8(tvb, offset + 2);
10678 proto_tree *subtree;
10681 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10683 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10685 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10687 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_pdid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10689 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA);
10691 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10694 if (flags & (1<<6)) {
10695 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_orig_ext, tvb, offset, 6, ENC_NA);
10698 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10700 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10702 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10703 targs = tvb_get_guint8 (tvb, offset);
10705 for (i = 0; i < targs; i++) {
10706 item = proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10707 subtree = proto_item_add_subtree(item, ett_hwmp_targ_flags_tree);
10708 proto_tree_add_boolean(subtree, hf_ieee80211_ff_hwmp_targ_to_flags, tvb, offset, 1, flags);
10709 proto_tree_add_boolean(subtree, hf_ieee80211_ff_hwmp_targ_usn_flags, tvb, offset, 1, flags);
10711 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
10713 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10719 case TAG_MESH_PREP:
10721 guint8 flags = tvb_get_guint8(tvb, offset + 2);
10723 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10725 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10727 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset , 1, ENC_LITTLE_ENDIAN);
10729 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
10731 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10733 if (flags & (1<<6)) {
10734 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA);
10737 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10739 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10741 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA);
10743 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10748 case TAG_MESH_PERR:
10753 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10755 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_BIG_ENDIAN);
10756 targs = tvb_get_guint8 (tvb, offset);
10758 for (i = 0; i < targs; i++) {
10759 guint8 flags = tvb_get_guint8(tvb, offset);
10761 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10763 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
10765 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10767 if (flags & (1<<6)) {
10768 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA);
10771 offset += add_fixed_field(tree, tvb, offset, FIELD_REASON_CODE);
10779 proto_tree_add_item (tree, hf_ieee80211_rann_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
10781 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_BIG_ENDIAN);
10783 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_BIG_ENDIAN);
10785 proto_tree_add_item (tree, hf_ieee80211_rann_root_sta, tvb, offset, 6, ENC_NA);
10787 proto_tree_add_item (tree, hf_ieee80211_rann_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10789 proto_tree_add_item (tree, hf_ieee80211_rann_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10791 proto_tree_add_item (tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10798 case TAG_INTERWORKING:
10799 dissect_interworking(pinfo, tree, ti, tvb, offset);
10801 case TAG_ADVERTISEMENT_PROTOCOL:
10803 dissect_advertisement_protocol(pinfo, tree, tvb, offset, NULL);
10806 case TAG_ROAMING_CONSORTIUM:
10807 dissect_roaming_consortium(pinfo, tree, ti, tvb, offset);
10809 case TAG_AP_CHANNEL_REPORT: /* 7.3.2.36 AP Channel Report element */
10810 dissect_ap_channel_report(tvb, pinfo, tree, offset + 2, tag_len, ti_len, tag_end, ti);
10812 case TAG_NEIGHBOR_REPORT:
10814 #define SUB_TAG_TSF_INFO 0x01
10815 #define SUB_TAG_MEASUREMENT_PILOT_INFO 0x02
10816 #define SUB_TAG_HT_CAPABILITIES 0x03
10817 #define SUB_TAG_HT_INFO 0x04
10818 #define SUB_TAG_SEC_CHANNEL_OFFSET 0x05
10819 #define SUB_TAG_VENDOR_SPECIFIC 0xDD
10824 guint32 bssid_info, info, sub_tag_length;
10825 proto_item *parent_item;
10826 proto_tree *bssid_info_subtree, *sub_tag_tree;
10827 tvbuff_t *volatile sub_tag_tvb = NULL;
10831 proto_tree_add_text (tree, tvb, offset + 2, tag_len,
10832 "Neighbor Report: Error: Tag length must be at least 13 bytes long");
10836 tag_offset = offset;
10838 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid, tvb, offset, 6, ENC_NA);
10840 /*** Begin: BSSID Information ***/
10842 bssid_info = tvb_get_letohl (tvb, offset);
10843 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);
10844 bssid_info_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_tree);
10846 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reachability, tvb, offset, 1, bssid_info);
10847 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_security, tvb, offset, 1, bssid_info);
10848 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_key_scope, tvb, offset, 1, bssid_info);
10849 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng, tvb, offset, 1, bssid_info);
10850 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos, tvb, offset, 1, bssid_info);
10851 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd, tvb, offset, 1, bssid_info);
10852 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt, tvb, offset, 1, bssid_info);
10853 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback, tvb, offset+1, 1, bssid_info);
10854 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback, tvb, offset+1, 1, bssid_info);
10855 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain, tvb, offset+1, 1, bssid_info);
10856 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput, tvb, offset+1, 1, bssid_info);
10857 proto_tree_add_uint(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reserved, tvb, offset+1, 3, (bssid_info & 0xfffff000) >> 12);
10858 /*** End: BSSID Information ***/
10861 info = tvb_get_guint8 (tvb, offset);
10862 proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_reg_class, tvb, offset, 1, info, "Regulatory Class: 0x%02X", info);
10865 info = tvb_get_guint8 (tvb, offset);
10866 proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_channel_number, tvb, offset, 1, info, "Channel Number: 0x%02X", info);
10869 info = tvb_get_guint8 (tvb, offset);
10870 proto_tree_add_uint_format(tree, hf_ieee80211_tag_neighbor_report_phy_type, tvb, offset, 1, info, "PHY Type: 0x%02X", info);
10873 sub_tag_id = tvb_get_guint8 (tvb, offset);
10875 sub_tag_length = tvb_get_guint8 (tvb, offset);
10878 sub_tag_tvb = tvb_new_subset(tvb, offset, sub_tag_length, -1);
10880 switch (sub_tag_id) {
10881 case SUB_TAG_TSF_INFO:
10884 case SUB_TAG_MEASUREMENT_PILOT_INFO:
10887 case SUB_TAG_HT_CAPABILITIES:
10888 parent_item = proto_tree_add_text (tree, tvb, offset, sub_tag_length, "HT Capabilities");
10889 sub_tag_tree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_sub_tag_tree);
10890 dissect_ht_capability_ie(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len, FALSE);
10892 case SUB_TAG_HT_INFO:
10893 parent_item = proto_tree_add_text (tree, tvb, offset, sub_tag_length, "HT Information");
10894 sub_tag_tree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_sub_tag_tree);
10895 dissect_ht_info_ie_1_1(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len);
10897 case SUB_TAG_SEC_CHANNEL_OFFSET:
10898 parent_item = proto_tree_add_text (tree, tvb, offset, sub_tag_length, "Secondary Channel Offset");
10899 sub_tag_tree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_sub_tag_tree);
10900 dissect_secondary_channel_offset_ie(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len);
10902 case SUB_TAG_VENDOR_SPECIFIC:
10907 offset += sub_tag_length;
10909 if (tag_len > (offset - tag_offset))
10911 proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Unknown Data");
10917 case TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT:
10923 proto_tree_add_text (tree, tvb, offset + 2, tag_len,
10924 "Extended Channel Switch Announcement: Error: Tag length must be exactly 4 bytes long");
10929 tag_offset = offset;
10931 offset += add_fixed_field(tree, tvb, offset, FIELD_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT);
10933 if (tag_len > (offset - tag_offset))
10935 proto_tree_add_text (tree, tvb, offset, tag_len - (offset - tag_offset), "Unknown Data");
10940 case TAG_SUPPORTED_REGULATORY_CLASSES:
10942 guint8 current_field;
10946 proto_tree_add_text (tree, tvb, offset + 2, tag_len,
10947 "Supported Regulatory Classes: Error: Tag length must be at least 2 bytes long");
10949 } else if (tag_len > 32) {
10950 proto_tree_add_text (tree, tvb, offset + 2, tag_len,
10951 "Supported Regulatory Classes: Error: Tag length must be no more than 32 bytes long");
10957 current_field = tvb_get_guint8 (tvb, offset);
10958 proto_tree_add_uint(tree, hf_ieee80211_tag_supported_reg_classes_current, tvb, offset, 1, current_field);
10961 /* Partially taken from the ssid section */
10962 tag_data_ptr = tvb_get_ptr (tvb, offset, tag_len);
10963 for (i = 0, n = 0; (i < tag_len) && (n < SHORT_STR); i++) {
10964 ret = g_snprintf (print_buff + n, SHORT_STR - n, (i == tag_len-1)?"%d":"%d, ", tag_data_ptr[i]);
10965 if (ret >= SHORT_STR - n) {
10966 /* ret >= <buf_size> means buffer truncated */
10971 proto_tree_add_string (tree, hf_ieee80211_tag_supported_reg_classes_alternate, tvb, offset, tag_len, print_buff);
10976 tvb_ensure_bytes_exist (tvb, offset + 2, tag_len);
10977 proto_tree_add_string (tree, hf_ieee80211_tag_interpretation, tvb, offset + 1 + 1,
10978 tag_len, "Not interpreted");
10979 proto_item_append_text(ti, ": Tag %u Len %u", tag_no, tag_len);
10982 if (offset < tag_end) {
10983 /* TODO: add Expert info to indicate there is unknown data ! but all tagged option don't yet return offset.
10984 For the moment, this code only remove Clang Warnings about not used offset... */
10986 return tag_len + 1 + 1;
10990 ieee_80211_add_tagged_parameters (tvbuff_t *tvb, int offset, packet_info *pinfo,
10991 proto_tree *tree, int tagged_parameters_len, int ftype)
10995 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
10996 while (tagged_parameters_len > 0) {
10997 if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype))==0)
10999 if (next_len > tagged_parameters_len) {
11000 /* XXX - flag this as an error? */
11001 next_len = tagged_parameters_len;
11003 offset += next_len;
11004 tagged_parameters_len -= next_len;
11008 /* ************************************************************************* */
11009 /* Dissect 802.11 management frame */
11010 /* ************************************************************************* */
11012 dissect_ieee80211_mgt (guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
11015 proto_tree *mgt_tree;
11016 proto_tree *fixed_tree;
11017 proto_tree *tagged_tree;
11019 int tagged_parameter_tree_len;
11022 ieee80211_tvb_invalid = FALSE;
11024 CHECK_DISPLAY_AS_X(data_handle,proto_wlan_mgt, tvb, pinfo, tree);
11026 ti = proto_tree_add_item (tree, proto_wlan_mgt, tvb, 0, -1, ENC_NA);
11027 mgt_tree = proto_item_add_subtree (ti, ett_80211_mgt);
11029 switch (COMPOSE_FRAME_TYPE(fcf))
11032 case MGT_ASSOC_REQ:
11033 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 4);
11034 add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
11035 add_fixed_field(fixed_tree, tvb, 2, FIELD_LISTEN_IVAL);
11036 offset = 4; /* Size of fixed fields */
11038 tagged_parameter_tree_len =
11039 tvb_reported_length_remaining(tvb, offset);
11040 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
11041 tagged_parameter_tree_len);
11042 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
11043 tagged_parameter_tree_len, MGT_ASSOC_REQ);
11047 case MGT_ASSOC_RESP:
11048 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6);
11049 add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
11050 add_fixed_field(fixed_tree, tvb, 2, FIELD_STATUS_CODE);
11051 add_fixed_field(fixed_tree, tvb, 4, FIELD_ASSOC_ID);
11052 offset = 6; /* Size of fixed fields */
11054 tagged_parameter_tree_len =
11055 tvb_reported_length_remaining(tvb, offset);
11056 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
11057 tagged_parameter_tree_len);
11058 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
11059 tagged_parameter_tree_len, MGT_ASSOC_RESP);
11063 case MGT_REASSOC_REQ:
11064 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 10);
11065 add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
11066 add_fixed_field(fixed_tree, tvb, 2, FIELD_LISTEN_IVAL);
11067 add_fixed_field(fixed_tree, tvb, 4, FIELD_CURRENT_AP_ADDR);
11068 offset = 10; /* Size of fixed fields */
11070 tagged_parameter_tree_len =
11071 tvb_reported_length_remaining(tvb, offset);
11072 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
11073 tagged_parameter_tree_len);
11074 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
11075 tagged_parameter_tree_len, MGT_REASSOC_REQ);
11078 case MGT_REASSOC_RESP:
11079 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6);
11080 add_fixed_field(fixed_tree, tvb, 0, FIELD_CAP_INFO);
11081 add_fixed_field(fixed_tree, tvb, 2, FIELD_STATUS_CODE);
11082 add_fixed_field(fixed_tree, tvb, 4, FIELD_ASSOC_ID);
11083 offset = 6; /* Size of fixed fields */
11085 tagged_parameter_tree_len =
11086 tvb_reported_length_remaining(tvb, offset);
11087 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
11088 tagged_parameter_tree_len);
11089 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
11090 tagged_parameter_tree_len, MGT_REASSOC_RESP);
11094 case MGT_PROBE_REQ:
11096 tagged_parameter_tree_len =
11097 tvb_reported_length_remaining(tvb, offset);
11098 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
11099 tagged_parameter_tree_len);
11100 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
11101 tagged_parameter_tree_len, MGT_PROBE_REQ);
11104 case MGT_PROBE_RESP:
11106 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12);
11107 add_fixed_field(fixed_tree, tvb, 0, FIELD_TIMESTAMP);
11108 add_fixed_field(fixed_tree, tvb, 8, FIELD_BEACON_INTERVAL);
11109 add_fixed_field(fixed_tree, tvb, 10, FIELD_CAP_INFO);
11110 offset = 12; /* Size of fixed fields */
11112 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
11113 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset, tagged_parameter_tree_len);
11114 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_PROBE_RESP);
11117 case MGT_MEASUREMENT_PILOT:
11119 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12);
11120 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_TIMESTAMP);
11121 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_MEASUREMENT_PILOT_INT);
11122 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_BEACON_INTERVAL);
11123 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_CAP_INFO);
11124 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_COUNTRY_STR);
11125 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_MAX_REG_PWR);
11126 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_MAX_TX_PWR);
11127 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_TX_PWR_USED);
11128 offset += add_fixed_field(fixed_tree, tvb, offset, FIELD_TRANSCEIVER_NOISE_FLOOR);
11129 /* TODO DS Parameter Set ??? */
11131 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
11132 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset, tagged_parameter_tree_len);
11133 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_MEASUREMENT_PILOT);
11136 case MGT_BEACON: /* Dissect protocol payload fields */
11137 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 12);
11138 add_fixed_field(fixed_tree, tvb, 0, FIELD_TIMESTAMP);
11139 add_fixed_field(fixed_tree, tvb, 8, FIELD_BEACON_INTERVAL);
11140 add_fixed_field(fixed_tree, tvb, 10, FIELD_CAP_INFO);
11141 offset = 12; /* Size of fixed fields */
11143 tagged_parameter_tree_len =
11144 tvb_reported_length_remaining(tvb, offset);
11145 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
11146 tagged_parameter_tree_len);
11147 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
11148 tagged_parameter_tree_len, MGT_BEACON);
11155 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 2);
11156 add_fixed_field(fixed_tree, tvb, 0, FIELD_REASON_CODE);
11157 offset = 2; /* Size of fixed fields */
11158 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
11159 if (tagged_parameter_tree_len > 0) {
11160 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
11161 tagged_parameter_tree_len);
11162 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
11163 tagged_parameter_tree_len, MGT_DISASS);
11167 case MGT_AUTHENTICATION:
11168 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 6);
11169 add_fixed_field(fixed_tree, tvb, 0, FIELD_AUTH_ALG);
11170 add_fixed_field(fixed_tree, tvb, 2, FIELD_AUTH_TRANS_SEQ);
11171 add_fixed_field(fixed_tree, tvb, 4, FIELD_STATUS_CODE);
11172 offset = 6; /* Size of fixed fields */
11174 tagged_parameter_tree_len =
11175 tvb_reported_length_remaining(tvb, offset);
11176 if (tagged_parameter_tree_len > 0)
11178 tagged_tree = get_tagged_parameter_tree (mgt_tree,
11181 tagged_parameter_tree_len);
11182 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
11183 tagged_parameter_tree_len, MGT_AUTHENTICATION);
11187 case MGT_DEAUTHENTICATION:
11188 fixed_tree = get_fixed_parameter_tree (mgt_tree, tvb, 0, 2);
11189 add_fixed_field(fixed_tree, tvb, 0, FIELD_REASON_CODE);
11190 offset = 2; /* Size of fixed fields */
11191 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
11192 if (tagged_parameter_tree_len > 0) {
11193 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
11194 tagged_parameter_tree_len);
11195 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
11196 tagged_parameter_tree_len, MGT_DEAUTHENTICATION);
11202 proto_item *lcl_fixed_hdr;
11203 proto_tree *lcl_fixed_tree;
11204 lcl_fixed_hdr = proto_tree_add_text(mgt_tree, tvb, 0, 0, "Fixed parameters");
11205 lcl_fixed_tree = proto_item_add_subtree (lcl_fixed_hdr, ett_fixed_parameters);
11207 offset += add_fixed_field(lcl_fixed_tree, tvb, 0, FIELD_ACTION);
11209 proto_item_set_len(lcl_fixed_hdr, offset);
11210 if (ieee80211_tvb_invalid)
11211 break; /* Buffer not available for further processing */
11212 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
11213 if (tagged_parameter_tree_len > 0)
11215 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
11216 tagged_parameter_tree_len);
11217 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
11218 tagged_parameter_tree_len, MGT_ACTION);
11222 case MGT_ACTION_NO_ACK:
11224 proto_item *lcl_fixed_hdr;
11225 proto_tree *lcl_fixed_tree;
11226 lcl_fixed_hdr = proto_tree_add_text(mgt_tree, tvb, 0, 0, "Fixed parameters");
11227 lcl_fixed_tree = proto_item_add_subtree (lcl_fixed_hdr, ett_fixed_parameters);
11229 offset += add_fixed_field(lcl_fixed_tree, tvb, 0, FIELD_ACTION);
11231 proto_item_set_len(lcl_fixed_hdr, offset);
11232 if (ieee80211_tvb_invalid)
11233 break; /* Buffer not available for further processing */
11234 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
11235 if (tagged_parameter_tree_len > 0)
11237 tagged_tree = get_tagged_parameter_tree (mgt_tree, tvb, offset,
11238 tagged_parameter_tree_len);
11239 ieee_80211_add_tagged_parameters (tvb, offset, pinfo, tagged_tree,
11240 tagged_parameter_tree_len, MGT_ACTION_NO_ACK);
11244 case MGT_ARUBA_WLAN:
11246 proto_item *aruba_hdr;
11247 proto_tree *aruba_tree;
11249 type = tvb_get_ntohs(tvb, offset);
11251 aruba_hdr = proto_tree_add_text(mgt_tree, tvb, 0, 0, "Aruba Management");
11252 aruba_tree = proto_item_add_subtree(aruba_hdr, ett_fixed_parameters);
11254 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba, tvb, offset, 2, ENC_BIG_ENDIAN);
11256 /* HeartBeat Sequence */
11257 if (type == 0x0005)
11259 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_hb_seq, tvb, offset, 8, ENC_BIG_ENDIAN);
11262 if (type == 0x0003)
11264 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_mtu, tvb, offset, 2, ENC_BIG_ENDIAN);
11272 set_src_addr_cols(packet_info *pinfo, const guint8 *addr, const char *type)
11274 col_add_fstr(pinfo->cinfo, COL_RES_DL_SRC, "%s (%s)",
11275 get_ether_name(addr), type);
11276 col_add_str(pinfo->cinfo, COL_UNRES_DL_SRC, ether_to_str(addr));
11280 set_dst_addr_cols(packet_info *pinfo, const guint8 *addr, const char *type)
11282 col_add_fstr(pinfo->cinfo, COL_RES_DL_DST, "%s (%s)",
11283 get_ether_name(addr), type);
11284 col_add_str(pinfo->cinfo, COL_UNRES_DL_DST, ether_to_str(addr));
11288 crc32_802_tvb_padded(tvbuff_t *tvb, guint hdr_len, guint hdr_size, guint len)
11292 c_crc = crc32_ccitt_tvb(tvb, hdr_len);
11293 c_crc = crc32_ccitt_seed(tvb_get_ptr(tvb, hdr_size, len), len, ~c_crc);
11295 /* Byte reverse. */
11296 c_crc = ((unsigned char)(c_crc>>0)<<24) |
11297 ((unsigned char)(c_crc>>8)<<16) |
11298 ((unsigned char)(c_crc>>16)<<8) |
11299 ((unsigned char)(c_crc>>24)<<0);
11311 /* ************************************************************************* */
11312 /* Dissect 802.11 frame */
11313 /* ************************************************************************* */
11316 * The 802.11n specification makes some fairly significant changes to the
11317 * layout of the MAC header. The first two bits of the MAC header are the
11318 * protocol version. You'd think that the 802.11 committee would have
11319 * bumped the version to indicate a different MAC layout, but NOOOO -- we
11320 * have to go digging for bits in various locations instead.
11324 dissect_ieee80211_common (tvbuff_t *tvb, packet_info *pinfo,
11325 proto_tree *tree, gboolean fixed_length_header, gint fcs_len,
11326 gboolean wlan_broken_fc, gboolean datapad,
11329 guint16 fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
11330 guint16 seq_control;
11331 guint32 seq_number, frag_number;
11332 gboolean more_frags;
11333 const guint8 *src = NULL;
11334 const guint8 *dst = NULL;
11335 const guint8 *bssid = NULL;
11336 proto_item *ti = NULL;
11337 proto_item *fcs_item = NULL;
11338 proto_item *cw_item = NULL;
11339 proto_item *hidden_item;
11340 proto_tree *fcs_tree = NULL;
11341 proto_tree *cw_tree = NULL;
11342 guint16 hdr_len, ohdr_len;
11343 guint16 htc_len = 0;
11344 gboolean has_fcs, fcs_good, fcs_bad;
11345 gint len, reported_len, ivlen;
11346 gboolean is_amsdu = 0;
11347 gboolean save_fragmented;
11349 guint8 octet1, octet2;
11350 char out_buff[SHORT_STR];
11353 const char *addr1_str = NULL;
11356 const gchar *fts_str;
11357 gchar flag_str[] = "opmPRMFTC";
11359 guint16 qosoff = 0;
11360 guint16 qos_control = 0;
11361 gint meshctl_len = 0;
11363 guint16 meshoff = 0;
11364 static wlan_hdr whdrs[4];
11365 gboolean retransmitted;
11367 volatile encap_t encap_type;
11368 proto_tree *volatile hdr_tree = NULL;
11369 tvbuff_t *volatile next_tvb = NULL;
11370 wlan_hdr *volatile whdr;
11374 col_set_str (pinfo->cinfo, COL_PROTOCOL, "802.11");
11375 col_clear(pinfo->cinfo, COL_INFO);
11377 fcf = FETCH_FCF(0);
11378 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf);
11379 if (frame_type_subtype == CTRL_CONTROL_WRAPPER)
11380 ctrl_fcf = FETCH_FCF(10);
11384 if (fixed_length_header)
11385 hdr_len = DATA_LONG_HDR_LEN;
11387 hdr_len = find_header_length (fcf, ctrl_fcf, is_ht);
11389 fts_str = val_to_str_ext_const(frame_type_subtype, &frame_type_subtype_vals_ext,
11390 "Unrecognized (Reserved frame)");
11391 col_set_str (pinfo->cinfo, COL_INFO, fts_str);
11394 flags = FCF_FLAGS (fcf);
11395 more_frags = HAVE_FRAGMENTS (flags);
11397 for (ii = 0; ii < 8; ii++) {
11398 if (! (flags & 0x80 >> ii)) {
11399 flag_str[ii] = '.';
11403 if (is_ht && IS_STRICTLY_ORDERED(flags) &&
11404 ((FCF_FRAME_TYPE(fcf) == MGT_FRAME) ||
11405 ((FCF_FRAME_TYPE(fcf) == DATA_FRAME) && DATA_FRAME_IS_QOS(frame_type_subtype)))) {
11409 /* adjust the header length depending on the Mesh Control field */
11410 if ((FCF_FRAME_TYPE(fcf) == DATA_FRAME) &&
11411 DATA_FRAME_IS_QOS(frame_type_subtype)) {
11412 qosoff = hdr_len - htc_len - 2;
11413 qos_control = tvb_get_letohs(tvb, qosoff);
11414 if (tvb_length(tvb) > hdr_len) {
11416 mesh_flags = tvb_get_guint8 (tvb, hdr_len);
11417 if (has_mesh_control(fcf, qos_control, mesh_flags)) {
11418 meshctl_len = find_mesh_control_length(mesh_flags);
11419 hdr_len += meshctl_len;
11425 * Some portions of this code calculate offsets relative to the end of the
11426 * header. But when the header has been padded to align the data this must
11427 * be done relative to true header size, not the padded/aligned value. To
11428 * simplify this work we stash the original header size in ohdr_len instead
11429 * of recalculating it every time we need it.
11431 ohdr_len = hdr_len;
11433 hdr_len = roundup2(hdr_len, 4);
11435 /* Add the FC and duration/id to the current tree */
11438 ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, hdr_len,
11439 "IEEE 802.11 %s", fts_str);
11440 hdr_tree = proto_item_add_subtree (ti, ett_80211);
11442 dissect_frame_control(hdr_tree, tvb, wlan_broken_fc, 0);
11443 dissect_durid(hdr_tree, tvb, frame_type_subtype, 2);
11447 * Decode the part of the frame header that isn't the same for all
11454 switch (FCF_FRAME_TYPE (fcf))
11459 * All management frame types have the same header.
11461 TVB_SET_ADDRESS_HF(&pinfo->dl_src, AT_ETHER, tvb, 10, 6, hf_ieee80211_addr_sa);
11462 COPY_ADDRESS_SHALLOW(&pinfo->src, &pinfo->dl_src);
11463 TVB_SET_ADDRESS_HF(&pinfo->dl_dst, AT_ETHER, tvb, 4, 6, hf_ieee80211_addr_da);
11464 COPY_ADDRESS_SHALLOW(&pinfo->dst, &pinfo->dl_dst);
11467 TVB_SET_ADDRESS_HF(&whdr->bssid, AT_ETHER, tvb, 16, 6, hf_ieee80211_addr_bssid);
11468 COPY_ADDRESS_SHALLOW(&whdr->src, &pinfo->dl_src);
11469 COPY_ADDRESS_SHALLOW(&whdr->dst, &pinfo->dl_dst);
11470 whdr->type = frame_type_subtype;
11472 seq_control = tvb_get_letohs(tvb, 22);
11473 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control);
11474 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control);
11476 col_append_fstr(pinfo->cinfo, COL_INFO,
11477 ", SN=%d", seq_number);
11479 col_append_fstr(pinfo->cinfo, COL_INFO,
11480 ", FN=%d",frag_number);
11484 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
11485 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, ENC_NA);
11487 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
11488 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, ENC_NA);
11490 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_bssid, tvb, 16, 6, ENC_NA);
11492 /* add items for wlan.addr filter */
11493 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
11494 PROTO_ITEM_SET_HIDDEN(hidden_item);
11495 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
11496 PROTO_ITEM_SET_HIDDEN(hidden_item);
11498 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
11499 PROTO_ITEM_SET_HIDDEN(hidden_item);
11501 proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, frag_number);
11502 proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, seq_number);
11506 case CONTROL_FRAME:
11509 * Control Wrapper frames insert themselves between address 1
11510 * and address 2 in a normal control frame. Process address 1
11511 * first, then handle the rest of the frame in dissect_control.
11513 if (frame_type_subtype == CTRL_CONTROL_WRAPPER) {
11514 offset = 10; /* FC + D/ID + Address 1 + CFC + HTC */
11515 ctrl_fcf = FETCH_FCF(10);
11516 ctrl_type_subtype = COMPOSE_FRAME_TYPE(ctrl_fcf);
11518 offset = 10; /* FC + D/ID + Address 1 */
11519 ctrl_type_subtype = frame_type_subtype;
11522 switch (ctrl_type_subtype)
11525 addr1_str = "BSSID";
11526 addr1_hf = hf_ieee80211_addr_bssid;
11530 case CTRL_ACKNOWLEDGEMENT:
11532 case CTRL_CFP_ENDACK:
11533 case CTRL_BLOCK_ACK_REQ:
11534 case CTRL_BLOCK_ACK:
11536 addr1_hf = hf_ieee80211_addr_ra;
11542 if (!addr1_str) /* XXX - Should we throw some sort of error? */
11545 /* Add address 1 */
11546 dst = tvb_get_ptr(tvb, 4, 6);
11547 set_dst_addr_cols(pinfo, dst, addr1_str);
11549 proto_tree_add_item(hdr_tree, addr1_hf, tvb, 4, 6, ENC_BIG_ENDIAN);
11550 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
11551 PROTO_ITEM_SET_HIDDEN(hidden_item);
11555 * Start shoving in other fields if needed.
11556 * XXX - Should we look for is_ht as well?
11558 if ((frame_type_subtype == CTRL_CONTROL_WRAPPER) && tree) {
11559 cw_item = proto_tree_add_text(hdr_tree, tvb, offset, 2,
11560 "Contained Frame Control");
11561 cw_tree = proto_item_add_subtree (cw_item, ett_cntrl_wrapper_fc);
11562 dissect_frame_control(cw_tree, tvb, FALSE, offset);
11563 dissect_ht_control(hdr_tree, tvb, offset + 2);
11565 cw_item = proto_tree_add_text(hdr_tree, tvb, offset, 2,
11567 hdr_tree = proto_item_add_subtree (cw_item, ett_cntrl_wrapper_fc);
11570 switch (ctrl_type_subtype)
11574 case CTRL_CFP_ENDACK:
11576 src = tvb_get_ptr (tvb, offset, 6);
11577 set_src_addr_cols(pinfo, src, "BSSID");
11579 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
11580 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
11581 PROTO_ITEM_SET_HIDDEN(hidden_item);
11588 src = tvb_get_ptr (tvb, offset, 6);
11589 set_src_addr_cols(pinfo, src, "TA");
11591 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
11592 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
11593 PROTO_ITEM_SET_HIDDEN(hidden_item);
11598 case CTRL_CONTROL_WRAPPER:
11600 /* XXX - We shouldn't see this. Should we throw an error? */
11604 case CTRL_BLOCK_ACK_REQ:
11606 src = tvb_get_ptr (tvb, offset, 6);
11607 set_src_addr_cols(pinfo, src, "TA");
11611 guint16 bar_control;
11612 guint8 block_ack_type;
11613 proto_item *bar_parent_item;
11614 proto_tree *bar_sub_tree;
11616 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
11617 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
11618 PROTO_ITEM_SET_HIDDEN(hidden_item);
11621 bar_control = tvb_get_letohs(tvb, offset);
11622 block_ack_type = (bar_control & 0x0006) >> 1;
11623 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_request_type, tvb,
11624 offset, 2, ENC_LITTLE_ENDIAN);
11625 bar_parent_item = proto_tree_add_item(hdr_tree,
11626 hf_ieee80211_block_ack_request_control, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11627 bar_sub_tree = proto_item_add_subtree(bar_parent_item,
11629 proto_tree_add_item(bar_sub_tree,
11630 hf_ieee80211_block_ack_control_ack_policy, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11631 proto_tree_add_item(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
11632 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11633 proto_tree_add_item(bar_sub_tree,
11634 hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 2,
11635 ENC_LITTLE_ENDIAN);
11636 proto_tree_add_item(bar_sub_tree, hf_ieee80211_block_ack_control_reserved,
11637 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11639 switch (block_ack_type)
11641 case 0: /*Basic BlockAckReq */
11643 proto_tree_add_item(bar_sub_tree,
11644 hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11647 /*offset +=*/ add_fixed_field(hdr_tree, tvb, offset,
11648 FIELD_BLOCK_ACK_SSC);
11651 case 2: /* Compressed BlockAckReq */
11653 proto_tree_add_item(bar_sub_tree,
11654 hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11657 /*offset +=*/ add_fixed_field(hdr_tree, tvb, offset,
11658 FIELD_BLOCK_ACK_SSC);
11661 case 3: /* Multi-TID BlockAckReq */
11665 proto_tree *bar_mtid_tree, *bar_mtid_sub_tree;
11667 tid_count = ((bar_control & 0xF000) >> 12) + 1;
11668 proto_tree_add_uint(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid_info, tvb, offset, 2, tid_count);
11671 bar_parent_item = proto_tree_add_text (hdr_tree, tvb, offset, tid_count*4, "Per TID Info");
11672 bar_mtid_tree = proto_item_add_subtree(bar_parent_item, ett_block_ack);
11673 for (iii = 0; iii < tid_count; iii++) {
11674 bar_parent_item = proto_tree_add_uint(bar_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, iii);
11675 bar_mtid_sub_tree = proto_item_add_subtree(bar_parent_item, ett_block_ack);
11677 proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11678 proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11681 offset += add_fixed_field(bar_mtid_sub_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
11690 case CTRL_BLOCK_ACK:
11692 src = tvb_get_ptr (tvb, offset, 6);
11693 set_src_addr_cols(pinfo, src, "TA");
11697 guint16 ba_control;
11698 guint8 block_ack_type;
11699 proto_item *ba_parent_item;
11700 proto_tree *ba_sub_tree;
11702 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
11703 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
11704 PROTO_ITEM_SET_HIDDEN(hidden_item);
11707 ba_control = tvb_get_letohs(tvb, offset);
11708 block_ack_type = (ba_control & 0x0006) >> 1;
11709 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11710 ba_parent_item = proto_tree_add_item(hdr_tree,
11711 hf_ieee80211_block_ack_control, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11712 ba_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
11713 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_ack_policy,
11714 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11715 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
11716 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11717 proto_tree_add_item(ba_sub_tree,
11718 hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 2,
11719 ENC_LITTLE_ENDIAN);
11720 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_reserved, tvb,
11721 offset, 2, ENC_LITTLE_ENDIAN);
11723 switch (block_ack_type)
11725 case 0: /*Basic BlockAck */
11727 proto_tree_add_item(ba_sub_tree,
11728 hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11731 offset += add_fixed_field(hdr_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
11732 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 128, ENC_NA);
11736 case 2: /* Compressed BlockAck */
11741 proto_item *ba_bitmap_item;
11742 proto_tree *ba_bitmap_tree;
11744 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11747 ssn = tvb_get_letohs(tvb, offset);
11749 offset += add_fixed_field(hdr_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
11750 bmap = tvb_get_letoh64(tvb, offset);
11751 ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
11752 ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap);
11753 for (f = 0; f < 64; f++) {
11754 if (bmap & (G_GINT64_CONSTANT(1) << f))
11756 proto_tree_add_uint_format_value(ba_bitmap_tree, hf_ieee80211_block_ack_bitmap_missing_frame,
11757 tvb, offset + (f/8), 1, ssn + f, "%u", ssn + f);
11762 case 3: /* Multi-TID BlockAck */
11766 proto_tree *ba_mtid_tree, *ba_mtid_sub_tree;
11768 tid_count = ((ba_control & 0xF000) >> 12) + 1;
11769 proto_tree_add_uint(ba_sub_tree,
11770 hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset, 2, tid_count);
11773 ba_parent_item = proto_tree_add_text (hdr_tree, tvb, offset, tid_count*4, "Per TID Info");
11774 ba_mtid_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
11775 for (iii = 0; iii < tid_count; iii++) {
11776 ba_parent_item = proto_tree_add_uint(ba_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, iii);
11777 ba_mtid_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
11779 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11780 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11783 offset += add_fixed_field(ba_mtid_sub_tree, tvb, offset, FIELD_BLOCK_ACK_SSC);
11784 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
11799 guint32 src_offset, dst_offset, bssid_offset;
11800 addr_type = FCF_ADDR_SELECTOR (fcf);
11802 /* In order to show src/dst address we must always do the following */
11830 /* Should never happen? */
11837 TVB_SET_ADDRESS_HF(&pinfo->dl_src, AT_ETHER, tvb, src_offset, 6, hf_ieee80211_addr_sa);
11838 COPY_ADDRESS_SHALLOW(&pinfo->src, &pinfo->dl_src);
11839 TVB_SET_ADDRESS_HF(&pinfo->dl_dst, AT_ETHER, tvb, dst_offset, 6, hf_ieee80211_addr_da);
11840 COPY_ADDRESS_SHALLOW(&pinfo->dst, &pinfo->dl_dst);
11844 TVB_SET_ADDRESS_HF(&whdr->bssid, AT_ETHER, tvb, bssid_offset, 6, hf_ieee80211_addr_bssid);
11845 COPY_ADDRESS_SHALLOW(&whdr->src, &pinfo->dl_src);
11846 COPY_ADDRESS_SHALLOW(&whdr->dst, &pinfo->dl_dst);
11847 whdr->type = frame_type_subtype;
11849 seq_control = tvb_get_letohs(tvb, 22);
11850 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control);
11851 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control);
11853 col_append_fstr(pinfo->cinfo, COL_INFO,
11854 ", SN=%d, FN=%d", seq_number,frag_number);
11856 /* Now if we have a tree we start adding stuff */
11862 /* XXX - using the offsets set above, could all of these cases be collapsed into one? */
11864 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
11865 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, ENC_NA);
11866 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
11867 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, ENC_NA);
11868 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_bssid, tvb, 16, 6, ENC_NA);
11869 proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, frag_number);
11870 proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, seq_number);
11872 /* add items for wlan.addr filter */
11873 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
11874 PROTO_ITEM_SET_HIDDEN(hidden_item);
11875 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
11876 PROTO_ITEM_SET_HIDDEN(hidden_item);
11877 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
11878 PROTO_ITEM_SET_HIDDEN(hidden_item);
11882 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
11883 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, ENC_NA);
11884 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
11885 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_bssid, tvb, 10, 6, ENC_NA);
11886 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_sa, tvb, 16, 6, ENC_NA);
11887 proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, frag_number);
11888 proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, seq_number);
11890 /* add items for wlan.addr filter */
11891 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
11892 PROTO_ITEM_SET_HIDDEN(hidden_item);
11893 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
11894 PROTO_ITEM_SET_HIDDEN(hidden_item);
11895 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
11896 PROTO_ITEM_SET_HIDDEN(hidden_item);
11900 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
11901 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_bssid, tvb, 4, 6, ENC_NA);
11902 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
11903 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, ENC_NA);
11904 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_da, tvb, 16, 6, ENC_NA);
11905 proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, frag_number);
11906 proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, seq_number);
11908 /* add items for wlan.addr filter */
11909 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
11910 PROTO_ITEM_SET_HIDDEN(hidden_item);
11911 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
11912 PROTO_ITEM_SET_HIDDEN(hidden_item);
11913 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
11914 PROTO_ITEM_SET_HIDDEN(hidden_item);
11918 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
11919 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
11920 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_da, tvb, 16, 6, ENC_NA);
11921 proto_tree_add_uint (hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, frag_number);
11922 proto_tree_add_uint (hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, seq_number);
11923 proto_tree_add_item (hdr_tree, hf_ieee80211_addr_sa, tvb, 24, 6, ENC_NA);
11925 /* add items for wlan.addr filter */
11926 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
11927 PROTO_ITEM_SET_HIDDEN(hidden_item);
11928 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
11929 PROTO_ITEM_SET_HIDDEN(hidden_item);
11930 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
11931 PROTO_ITEM_SET_HIDDEN(hidden_item);
11932 hidden_item = proto_tree_add_item (hdr_tree, hf_ieee80211_addr, tvb, 24, 6, ENC_NA);
11933 PROTO_ITEM_SET_HIDDEN(hidden_item);
11942 len = tvb_length_remaining(tvb, hdr_len);
11943 reported_len = tvb_reported_length_remaining(tvb, hdr_len);
11947 case 0: /* Definitely has no FCS */
11951 case 4: /* Definitely has an FCS */
11955 case -2: /* Data frames have no FCS, other frames have an FCS */
11956 if (FCF_FRAME_TYPE (fcf) == DATA_FRAME)
11962 default: /* Don't know - use "wlan_check_fcs" */
11963 has_fcs = wlan_check_fcs;
11969 * Well, this packet should, in theory, have an FCS.
11970 * Do we have the entire packet, and does it have enough data for
11973 if (reported_len < 4)
11976 * The packet is claimed not to even have enough data for a 4-byte
11978 * Pretend it doesn't have an FCS.
11982 else if (len < reported_len)
11985 * The packet is claimed to have enough data for a 4-byte FCS, but
11986 * we didn't capture all of the packet.
11987 * Slice off the 4-byte FCS from the reported length, and trim the
11988 * captured length so it's no more than the reported length; that
11989 * will slice off what of the FCS, if any, is in the captured
11993 if (len > reported_len)
11994 len = reported_len;
11999 * We have the entire packet, and it includes a 4-byte FCS.
12000 * Slice it off, and put it into the tree.
12006 guint32 sent_fcs = tvb_get_ntohl(tvb, hdr_len + len);
12010 fcs = crc32_802_tvb_padded(tvb, ohdr_len, hdr_len, len);
12012 fcs = crc32_802_tvb(tvb, hdr_len + len);
12013 if (fcs == sent_fcs) {
12022 fcs_item = proto_tree_add_uint_format(hdr_tree, hf_ieee80211_fcs, tvb,
12023 hdr_len + len, 4, sent_fcs,
12024 "Frame check sequence: 0x%08x [correct]", sent_fcs);
12026 fcs_item = proto_tree_add_uint_format(hdr_tree, hf_ieee80211_fcs, tvb,
12027 hdr_len + len, 4, sent_fcs,
12028 "Frame check sequence: 0x%08x [incorrect, should be 0x%08x]",
12033 proto_tree_set_appendix(hdr_tree, tvb, hdr_len + len, 4);
12035 fcs_tree = proto_item_add_subtree(fcs_item, ett_fcs);
12037 fcs_item = proto_tree_add_boolean(fcs_tree,
12038 hf_ieee80211_fcs_good, tvb,
12041 PROTO_ITEM_SET_GENERATED(fcs_item);
12043 fcs_item = proto_tree_add_boolean(fcs_tree,
12044 hf_ieee80211_fcs_bad, tvb,
12047 PROTO_ITEM_SET_GENERATED(fcs_item);
12051 flag_str[8] = '\0';
12054 proto_item_append_text(ti, ", Flags: %s", flag_str);
12055 col_append_fstr (pinfo->cinfo, COL_INFO, ", Flags=%s", flag_str);
12059 * Only management and data frames have a body, so we don't have
12060 * anything more to do for other types of frames.
12062 switch (FCF_FRAME_TYPE (fcf))
12066 if (htc_len == 4) {
12067 dissect_ht_control(hdr_tree, tvb, ohdr_len - 4);
12072 if (tree && DATA_FRAME_IS_QOS(frame_type_subtype))
12074 proto_item *qos_fields;
12075 proto_tree *qos_tree;
12078 guint16 qos_priority;
12079 guint16 qos_ack_policy;
12080 guint16 qos_amsdu_present;
12082 guint16 qos_field_content;
12084 qos_fields = proto_tree_add_text(hdr_tree, tvb, qosoff, 2,
12086 qos_tree = proto_item_add_subtree (qos_fields, ett_qos_parameters);
12088 qos_tid = QOS_TID(qos_control);
12089 qos_priority = QOS_PRIORITY(qos_control);
12090 qos_ack_policy = QOS_ACK_POLICY(qos_control);
12091 qos_amsdu_present = QOS_AMSDU_PRESENT(qos_control);
12092 qos_eosp = QOS_EOSP(qos_control);
12093 qos_field_content = QOS_FIELD_CONTENT(qos_control);
12095 proto_tree_add_uint (qos_tree, hf_ieee80211_qos_tid, tvb,
12096 qosoff, 1, qos_tid);
12098 proto_tree_add_uint_format (qos_tree, hf_ieee80211_qos_priority, tvb,
12099 qosoff, 1, qos_priority,
12100 "Priority: %d (%s) (%s)",
12101 qos_priority, qos_tags[qos_priority], qos_acs[qos_priority]);
12103 if (flags & FLAG_FROM_DS) {
12104 proto_tree_add_boolean (qos_tree, hf_ieee80211_qos_eosp, tvb,
12105 qosoff, 1, qos_control);
12107 proto_tree_add_boolean (qos_tree, hf_ieee80211_qos_bit4, tvb,
12108 qosoff, 1, qos_control);
12111 proto_tree_add_uint (qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 1,
12114 if (flags & FLAG_FROM_DS) {
12115 if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
12116 proto_tree_add_boolean(qos_tree, hf_ieee80211_qos_amsdu_present, tvb,
12117 qosoff, 1, qos_amsdu_present);
12118 is_amsdu = qos_amsdu_present;
12120 if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)) {
12122 if (qos_field_content == 0) {
12123 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_txop_limit, tvb,
12124 qosoff + 1, 1, qos_field_content,
12125 "transmit one frame immediately (0)");
12127 proto_tree_add_uint (qos_tree, hf_ieee80211_qos_txop_limit, tvb,
12128 qosoff + 1, 1, qos_field_content);
12131 /* qap ps buffer state */
12132 proto_item *qos_ps_buf_state_fields;
12133 proto_tree *qos_ps_buf_state_tree;
12134 guint8 qap_buf_load;
12136 qos_ps_buf_state_fields = proto_tree_add_text(qos_tree, tvb, qosoff + 1, 1,
12137 "QAP PS Buffer State: 0x%x", qos_field_content);
12138 qos_ps_buf_state_tree = proto_item_add_subtree (qos_ps_buf_state_fields, ett_qos_ps_buf_state);
12140 proto_tree_add_boolean (qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated,
12141 tvb, qosoff + 1, 1, qos_field_content);
12143 if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)) {
12144 proto_tree_add_uint (qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb,
12145 qosoff + 1, 1, qos_field_content);
12147 qap_buf_load = QOS_PS_QAP_BUF_LOAD(qos_field_content);
12148 switch (qap_buf_load) {
12151 proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb,
12152 qosoff + 1, 1, qos_field_content,
12153 "no buffered traffic (0)");
12157 proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb,
12158 qosoff + 1, 1, qos_field_content,
12159 "%d octets (%d)", qap_buf_load*4096, qap_buf_load);
12163 proto_tree_add_uint_format_value (qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb,
12164 qosoff + 1, 1, qos_field_content,
12165 "greater than 57344 octets (15)");
12171 if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
12172 proto_tree_add_boolean(qos_tree, hf_ieee80211_qos_amsdu_present, tvb,
12173 qosoff, 1, qos_amsdu_present);
12174 is_amsdu = qos_amsdu_present;
12178 switch (qos_field_content) {
12181 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
12182 tvb, qosoff + 1, 1, qos_field_content,
12183 "no buffered traffic in the queue (0)");
12187 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
12188 tvb, qosoff + 1, 1, qos_field_content,
12189 "%u bytes (%u)", qos_field_content*256, qos_field_content);
12193 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
12194 tvb, qosoff + 1, 1, qos_field_content,
12195 "more than 64768 octets (254)");
12199 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_queue_size,
12200 tvb, qosoff + 1, 1, qos_field_content,
12201 "unspecified or unknown (256)");
12205 /* txop duration requested */
12206 if (qos_field_content == 0) {
12207 proto_tree_add_uint_format_value (qos_tree, hf_ieee80211_qos_txop_dur_req,
12208 tvb, qosoff + 1, 1, qos_field_content,
12209 "no TXOP requested (0)");
12211 proto_tree_add_uint (qos_tree, hf_ieee80211_qos_txop_dur_req,
12212 tvb, qosoff + 1, 1, qos_field_content);
12217 /* Do we have +HTC? */
12218 if (htc_len == 4) {
12219 dissect_ht_control(hdr_tree, tvb, ohdr_len - 4);
12222 if (meshctl_len != 0) {
12223 proto_item *msh_fields;
12224 proto_tree *msh_tree;
12226 msh_fields = proto_tree_add_text(hdr_tree, tvb, meshoff, meshctl_len, "Mesh Control field");
12227 msh_tree = proto_item_add_subtree (msh_fields, ett_msh_control);
12228 add_fixed_field(msh_tree, tvb, meshoff, FIELD_MESH_CONTROL);
12231 } /* end of qos control field */
12232 /* Davide Schiera (2006-11-21): process handshake packet with AirPDcap */
12233 /* the processing will take care of 4-way handshake sessions for WPA */
12234 /* and WPA2 decryption */
12235 if (enable_decryption && !pinfo->fd->flags.visited) {
12236 const guint8 *enc_data = tvb_get_ptr(tvb, 0, hdr_len+reported_len);
12237 AirPDcapPacketProcess(&airpdcap_ctx, enc_data, hdr_len, hdr_len+reported_len, NULL, 0, NULL, TRUE, FALSE);
12239 /* Davide Schiera -------------------------------------------------------- */
12242 * No-data frames don't have a body.
12244 if (DATA_FRAME_IS_NULL(frame_type_subtype))
12247 if (!wlan_subdissector) {
12251 * data: last seq_control seen and frame number
12253 retransmitted = FALSE;
12254 if (!pinfo->fd->flags.visited) {
12255 retransmit_key key;
12256 retransmit_key *result;
12258 memcpy(key.bssid, bssid, 6);
12259 memcpy(key.src, src, 6);
12260 key.seq_control = 0;
12261 result = (retransmit_key *)g_hash_table_lookup(fc_analyse_retransmit_table, &key);
12262 if (result && (result->seq_control == seq_control)) {
12263 /* keep a pointer to the first seen frame, could be done with proto data? */
12264 fnum = result->fnum;
12265 g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER(pinfo->fd->num),
12266 GINT_TO_POINTER(fnum));
12267 retransmitted = TRUE;
12269 /* first time or new seq*/
12271 result = se_alloc(sizeof(retransmit_key));
12273 g_hash_table_insert(fc_analyse_retransmit_table, result, result);
12275 result->seq_control = seq_control;
12276 result->fnum = pinfo->fd->num;
12279 else if ((fnum = GPOINTER_TO_UINT(g_hash_table_lookup(fc_first_frame_table, GINT_TO_POINTER(pinfo->fd->num))))) {
12280 retransmitted = TRUE;
12283 if (retransmitted) {
12284 col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
12288 item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0,
12289 "Retransmitted frame");
12290 PROTO_ITEM_SET_GENERATED(item);
12291 item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame,tvb, 0, 0, fnum);
12292 PROTO_ITEM_SET_GENERATED(item);
12294 next_tvb = tvb_new_subset (tvb, hdr_len, len, reported_len);
12295 call_dissector(data_handle, next_tvb, pinfo, tree);
12302 case CONTROL_FRAME:
12309 if (IS_PROTECTED(FCF_FLAGS(fcf))
12310 && !pinfo->pseudo_header->ieee_802_11.decrypted
12311 && (wlan_ignore_wep != WLAN_IGNORE_WEP_WO_IV)) {
12313 * It's a WEP or WPA encrypted frame, and it hasn't already been
12314 * decrypted; dissect the protections parameters and decrypt the data,
12315 * if we have a matching key. Otherwise display it as data.
12318 gboolean can_decrypt = FALSE;
12319 proto_tree *wep_tree = NULL;
12321 guint8 key, keybyte;
12323 /* Davide Schiera (2006-11-27): define algorithms constants and macros */
12324 #define PROTECTION_ALG_WEP AIRPDCAP_KEY_TYPE_WEP
12325 #define PROTECTION_ALG_TKIP AIRPDCAP_KEY_TYPE_TKIP
12326 #define PROTECTION_ALG_CCMP AIRPDCAP_KEY_TYPE_CCMP
12327 #define PROTECTION_ALG_RSNA PROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP
12328 guint8 algorithm=G_MAXUINT8;
12329 /* Davide Schiera (2006-11-27): added macros to check the algorithm */
12330 /* used could be TKIP or CCMP */
12331 #define IS_TKIP(tvb, hdr_len) (tvb_get_guint8(tvb, hdr_len + 1) == \
12332 ((tvb_get_guint8(tvb, hdr_len) | 0x20) & 0x7f))
12333 #define IS_CCMP(tvb, hdr_len) (tvb_get_guint8(tvb, hdr_len + 2) == 0)
12334 /* Davide Schiera ----------------------------------------------------- */
12336 /* Davide Schiera (2006-11-21): recorded original lengths to pass them */
12337 /* to the packets process function */
12338 guint32 sec_header=0;
12339 guint32 sec_trailer=0;
12341 next_tvb = try_decrypt(tvb, hdr_len, reported_len, &algorithm, &sec_header, &sec_trailer);
12342 /* Davide Schiera ----------------------------------------------------- */
12344 keybyte = tvb_get_guint8(tvb, hdr_len + 3);
12345 key = KEY_OCTET_WEP_KEY(keybyte);
12346 if ((keybyte & KEY_EXTIV) && (len >= EXTIV_LEN)) {
12347 /* Extended IV; this frame is likely encrypted with TKIP or CCMP */
12349 proto_item *extiv_fields;
12351 /* Davide Schiera (2006-11-27): differentiated CCMP and TKIP if */
12352 /* it's possible */
12353 if (algorithm==PROTECTION_ALG_TKIP)
12354 extiv_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 8,
12355 "TKIP parameters");
12356 else if (algorithm==PROTECTION_ALG_CCMP)
12357 extiv_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 8,
12358 "CCMP parameters");
12360 /* Davide Schiera -------------------------------------------- */
12361 /* Davide Schiera (2006-11-27): differentiated CCMP and TKIP if*/
12362 /* it's possible */
12363 if (IS_TKIP(tvb, hdr_len)) {
12364 algorithm=PROTECTION_ALG_TKIP;
12365 extiv_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 8,
12366 "TKIP parameters");
12367 } else if (IS_CCMP(tvb, hdr_len)) {
12368 algorithm=PROTECTION_ALG_CCMP;
12369 extiv_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 8,
12370 "CCMP parameters");
12372 extiv_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 8,
12373 "TKIP/CCMP parameters");
12375 proto_item_set_len (ti, hdr_len + 8);
12377 wep_tree = proto_item_add_subtree (extiv_fields, ett_wep_parameters);
12379 if (algorithm==PROTECTION_ALG_TKIP) {
12380 g_snprintf(out_buff, SHORT_STR, "0x%08X%02X%02X",
12381 tvb_get_letohl(tvb, hdr_len + 4),
12382 tvb_get_guint8(tvb, hdr_len),
12383 tvb_get_guint8(tvb, hdr_len + 2));
12384 proto_tree_add_string(wep_tree, hf_ieee80211_tkip_extiv, tvb, hdr_len,
12385 EXTIV_LEN, out_buff);
12386 } else if (algorithm==PROTECTION_ALG_CCMP) {
12387 g_snprintf(out_buff, SHORT_STR, "0x%08X%02X%02X",
12388 tvb_get_letohl(tvb, hdr_len + 4),
12389 tvb_get_guint8(tvb, hdr_len + 1),
12390 tvb_get_guint8(tvb, hdr_len));
12391 proto_tree_add_string(wep_tree, hf_ieee80211_ccmp_extiv, tvb, hdr_len,
12392 EXTIV_LEN, out_buff);
12395 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
12398 /* Subtract out the length of the IV. */
12400 reported_len -= EXTIV_LEN;
12402 /* It is unknown whether this is TKIP or CCMP, so let's not even try to
12403 * parse TKIP Michael MIC+ICV or CCMP MIC. */
12405 /* Davide Schiera (2006-11-21): enable TKIP and CCMP decryption */
12406 /* checking for the trailer */
12407 if (next_tvb!=NULL) {
12408 if (reported_len < (gint) sec_trailer) {
12409 /* There is no space for a trailer, ignore it and don't decrypt */
12411 } else if (len < reported_len) {
12412 /* There is space for a trailer, but we haven't capture all the */
12413 /* packet. Slice off the trailer, but don't try to decrypt */
12414 reported_len -= sec_trailer;
12415 if (len > reported_len)
12416 len = reported_len;
12418 /* Ok, we have a trailer and the whole packet. Decrypt it! */
12419 /* TODO: At the moment we won't add the trailer to the tree, */
12420 /* so don't remove the trailer from the packet */
12421 len -= sec_trailer;
12422 reported_len -= sec_trailer;
12423 can_decrypt = TRUE;
12426 /* Davide Schiera -------------------------------------------------- */
12428 /* No Ext. IV - WEP packet */
12430 * XXX - pass the IV and key to "try_decrypt_wep()", and have it pass
12431 * them to "wep_decrypt()", rather than having "wep_decrypt()" extract
12434 * Also, just pass the data *following* the WEP parameters as the
12435 * buffer to decrypt.
12437 iv = tvb_get_ntoh24(tvb, hdr_len);
12439 proto_item *wep_fields;
12441 wep_fields = proto_tree_add_text(hdr_tree, tvb, hdr_len, 4,
12444 wep_tree = proto_item_add_subtree (wep_fields, ett_wep_parameters);
12445 proto_tree_add_uint (wep_tree, hf_ieee80211_wep_iv, tvb, hdr_len, 3, iv);
12446 tvb_memcpy(tvb, iv_buff, hdr_len, 3);
12447 is_iv_bad = weak_iv(iv_buff);
12448 if (is_iv_bad != -1) {
12449 proto_tree_add_boolean_format (wep_tree, hf_ieee80211_wep_iv_weak,
12451 "Weak IV for key byte %d",
12456 proto_tree_add_uint (wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
12458 /* Subtract out the length of the IV. */
12463 /* Davide Schiera (2006-11-27): Even if the decryption was not */
12464 /* successful, set the algorithm */
12465 algorithm=PROTECTION_ALG_WEP;
12468 * Well, this packet should, in theory, have an ICV.
12469 * Do we have the entire packet, and does it have enough data for
12472 if (reported_len < 4) {
12474 * The packet is claimed not to even have enough data for a
12476 * Pretend it doesn't have an ICV.
12479 } else if (len < reported_len) {
12481 * The packet is claimed to have enough data for a 4-byte ICV,
12482 * but we didn't capture all of the packet.
12483 * Slice off the 4-byte ICV from the reported length, and trim
12484 * the captured length so it's no more than the reported length;
12485 * that will slice off what of the ICV, if any, is in the
12489 if (len > reported_len)
12490 len = reported_len;
12493 * We have the entire packet, and it includes a 4-byte ICV.
12494 * Slice it off, and put it into the tree.
12496 * We only support decrypting if we have the the ICV.
12498 * XXX - the ICV is encrypted; we're putting the encrypted
12499 * value, not the decrypted value, into the tree.
12503 can_decrypt = TRUE;
12507 if (algorithm == PROTECTION_ALG_WEP) {
12508 g_strlcpy (wlan_stats.protection, "WEP", MAX_PROTECT_LEN);
12509 } else if (algorithm == PROTECTION_ALG_TKIP) {
12510 g_strlcpy (wlan_stats.protection, "TKIP", MAX_PROTECT_LEN);
12511 } else if (algorithm == PROTECTION_ALG_CCMP) {
12512 g_strlcpy (wlan_stats.protection, "CCMP", MAX_PROTECT_LEN);
12514 g_strlcpy (wlan_stats.protection, "Unknown", MAX_PROTECT_LEN);
12517 /* Davide Schiera (2006-11-26): decrypted before parsing header and */
12518 /* protection header */
12519 if (!can_decrypt || (next_tvb == NULL)) {
12521 * WEP decode impossible or failed, treat payload as raw data
12522 * and don't attempt fragment reassembly or further dissection.
12524 next_tvb = tvb_new_subset(tvb, hdr_len + ivlen, len, reported_len);
12527 /* Davide Schiera (2006-11-21): added WEP or WPA separation */
12528 if (algorithm == PROTECTION_ALG_WEP) {
12530 proto_tree_add_uint_format (wep_tree, hf_ieee80211_wep_icv, tvb,
12531 hdr_len + ivlen + len, 4,
12532 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
12533 "WEP ICV: 0x%08x (not verified)",
12534 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
12535 } else if (algorithm == PROTECTION_ALG_CCMP) {
12536 } else if (algorithm == PROTECTION_ALG_TKIP) {
12539 /* Davide Schiera (2006-11-21) ---------------------------------- */
12541 if ((pinfo->ethertype != ETHERTYPE_CENTRINO_PROMISC) && (wlan_ignore_wep == WLAN_IGNORE_WEP_NO)) {
12542 /* Some wireless drivers (such as Centrino) WEP payload already decrypted */
12543 call_dissector(data_handle, next_tvb, pinfo, tree);
12547 /* Davide Schiera (2006-11-21): added WEP or WPA separation */
12548 if (algorithm == PROTECTION_ALG_WEP) {
12550 proto_tree_add_uint_format (wep_tree, hf_ieee80211_wep_icv, tvb,
12551 hdr_len + ivlen + len, 4,
12552 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
12553 "WEP ICV: 0x%08x (correct)",
12554 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
12556 add_new_data_source(pinfo, next_tvb, "Decrypted WEP data");
12557 } else if (algorithm==PROTECTION_ALG_CCMP) {
12558 add_new_data_source(pinfo, next_tvb, "Decrypted CCMP data");
12559 } else if (algorithm==PROTECTION_ALG_TKIP) {
12560 add_new_data_source(pinfo, next_tvb, "Decrypted TKIP data");
12562 /* Davide Schiera (2006-11-21) ------------------------------------- */
12563 /* Davide Schiera (2006-11-27): undefine macros and definitions */
12566 #undef PROTECTION_ALG_CCMP
12567 #undef PROTECTION_ALG_TKIP
12568 #undef PROTECTION_ALG_WEP
12569 /* Davide Schiera -------------------------------------------------- */
12573 * WEP decryption successful!
12575 * Use the tvbuff we got back from the decryption; the data starts at
12576 * the beginning. The lengths are already correct for the decoded WEP
12583 * Not a WEP-encrypted frame; just use the data from the tvbuff
12586 * The payload starts at "hdr_len" (i.e., just past the 802.11
12587 * MAC header), the length of data in the tvbuff following the
12588 * 802.11 header is "len", and the length of data in the packet
12589 * following the 802.11 header is "reported_len".
12595 * Do defragmentation if "wlan_defragment" is true, and we have more
12596 * fragments or this isn't the first fragment.
12598 * We have to do some special handling to catch frames that
12599 * have the "More Fragments" indicator not set but that
12600 * don't show up as reassembled and don't have any other
12601 * fragments present. Some networking interfaces appear
12602 * to do reassembly even when you're capturing raw packets
12603 * *and* show the reassembled packet without the "More
12604 * Fragments" indicator set *but* with a non-zero fragment
12607 * "fragment_add_seq_802_11()" handles that; we want to call it
12608 * even if we have a short frame, so that it does those checks - if
12609 * the frame is short, it doesn't do reassembly on it.
12611 * (This could get some false positives if we really *did* only
12612 * capture the last fragment of a fragmented packet, but that's
12615 save_fragmented = pinfo->fragmented;
12616 if (wlan_defragment && (more_frags || (frag_number != 0))) {
12617 fragment_data *fd_head;
12620 * If we've already seen this frame, look it up in the
12621 * table of reassembled packets, otherwise add it to
12622 * whatever reassembly is in progress, if any, and see
12625 if (reported_len < 0)
12626 THROW(ReportedBoundsError);
12627 fd_head = fragment_add_seq_802_11(next_tvb, hdr_len, pinfo, seq_number,
12628 wlan_fragment_table,
12629 wlan_reassembled_table,
12633 next_tvb = process_reassembled_data(tvb, hdr_len, pinfo,
12634 "Reassembled 802.11", fd_head,
12635 &frag_items, NULL, hdr_tree);
12638 * If this is the first fragment, dissect its contents, otherwise
12639 * just show it as a fragment.
12641 if (frag_number != 0) {
12642 /* Not the first fragment - don't dissect it. */
12645 /* First fragment, or not fragmented. Dissect what we have here. */
12647 /* Get a tvbuff for the payload. */
12648 next_tvb = tvb_new_subset (next_tvb, hdr_len, len, reported_len);
12651 * If this is the first fragment, but not the only fragment,
12652 * tell the next protocol that.
12655 pinfo->fragmented = TRUE;
12657 pinfo->fragmented = FALSE;
12661 if (next_tvb == NULL) {
12662 /* Just show this as an incomplete fragment. */
12663 col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
12664 next_tvb = tvb_new_subset (tvb, hdr_len, len, reported_len);
12665 call_dissector(data_handle, next_tvb, pinfo, tree);
12666 pinfo->fragmented = save_fragmented;
12670 switch (FCF_FRAME_TYPE (fcf))
12674 dissect_ieee80211_mgt (fcf, next_tvb, pinfo, tree);
12678 if (is_amsdu && (tvb_reported_length_remaining(next_tvb, 0) > 4)) {
12679 proto_item *parent_item;
12680 proto_tree *mpdu_tree;
12681 guint32 msdu_offset = 0;
12684 parent_item = proto_tree_add_protocol_format(tree, proto_aggregate, next_tvb, 0,
12685 tvb_reported_length_remaining(next_tvb, 0), "IEEE 802.11 Aggregate MSDU");
12686 mpdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_parent_tree);
12689 tvbuff_t *volatile msdu_tvb;
12690 guint16 msdu_length;
12691 proto_tree *subframe_tree;
12693 msdu_length = tvb_get_ntohs (next_tvb, msdu_offset+12);
12695 parent_item = proto_tree_add_uint_format(mpdu_tree, hf_ieee80211_amsdu_msdu_header_text, next_tvb,
12696 msdu_offset, roundup2(msdu_offset+14+msdu_length, 4),
12697 i, "A-MSDU Subframe #%u", i);
12698 subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
12701 proto_tree_add_item(subframe_tree, hf_ieee80211_addr_da, next_tvb, msdu_offset, 6, ENC_NA);
12702 proto_tree_add_item(subframe_tree, hf_ieee80211_addr_sa, next_tvb, msdu_offset+6, 6, ENC_NA);
12703 proto_tree_add_uint_format(subframe_tree, hf_ieee80211_mcsset_highest_data_rate, next_tvb, msdu_offset+12, 2,
12704 msdu_length, "MSDU length: 0x%04X", msdu_length);
12707 msdu_tvb = tvb_new_subset(next_tvb, msdu_offset, msdu_length, -1);
12708 call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
12709 msdu_offset = roundup2(msdu_offset+msdu_length, 4);
12710 } while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
12714 /* I guess some bridges take Netware Ethernet_802_3 frames,
12715 which are 802.3 frames (with a length field rather than
12716 a type field, but with no 802.2 header in the payload),
12717 and just stick the payload into an 802.11 frame. I've seen
12718 captures that show frames of that sort.
12720 We also handle some odd form of encapsulation in which a
12721 complete Ethernet frame is encapsulated within an 802.11
12722 data frame, with no 802.2 header. This has been seen
12723 from some hardware.
12725 On top of that, at least at some point it appeared that
12726 the OLPC XO sent out frames with two bytes of 0 between
12727 the "end" of the 802.11 header and the beginning of
12730 So, if the packet doesn't start with 0xaa 0xaa:
12732 we first use the same scheme that linux-wlan-ng does to detect
12733 those encapsulated Ethernet frames, namely looking to see whether
12734 the frame either starts with 6 octets that match the destination
12735 address from the 802.11 header or has 6 octets that match the
12736 source address from the 802.11 header following the first 6 octets,
12737 and, if so, treat it as an encapsulated Ethernet frame;
12739 otherwise, we use the same scheme that we use in the Ethernet
12740 dissector to recognize Netware 802.3 frames, namely checking
12741 whether the packet starts with 0xff 0xff and, if so, treat it
12742 as an encapsulated IPX frame, and then check whether the
12743 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
12745 encap_type = ENCAP_802_2;
12747 octet1 = tvb_get_guint8(next_tvb, 0);
12748 octet2 = tvb_get_guint8(next_tvb, 1);
12749 if ((octet1 != 0xaa) || (octet2 != 0xaa)) {
12750 if ((tvb_memeql(next_tvb, 6, pinfo->dl_src.data, 6) == 0) ||
12751 (tvb_memeql(next_tvb, 0, pinfo->dl_dst.data, 6) == 0))
12752 encap_type = ENCAP_ETHERNET;
12753 else if ((octet1 == 0xff) && (octet2 == 0xff))
12754 encap_type = ENCAP_IPX;
12755 else if ((octet1 == 0x00) && (octet2 == 0x00)) {
12756 proto_tree_add_text(tree, next_tvb, 0, 2, "Mysterious OLPC stuff");
12757 next_tvb = tvb_new_subset_remaining (next_tvb, 2);
12761 CATCH2(BoundsError, ReportedBoundsError) {
12767 switch (encap_type) {
12770 call_dissector(llc_handle, next_tvb, pinfo, tree);
12773 case ENCAP_ETHERNET:
12774 call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
12778 call_dissector(ipx_handle, next_tvb, pinfo, tree);
12783 pinfo->fragmented = save_fragmented;
12786 whdr->stats = wlan_stats;
12787 tap_queue_packet(wlan_tap, pinfo, whdr);
12788 memset (&wlan_stats, 0, sizeof wlan_stats);
12792 * Dissect 802.11 with a variable-length link-layer header.
12795 dissect_ieee80211 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
12797 dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
12798 pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, FALSE);
12802 * Dissect 802.11 with a variable-length link-layer header and data padding.
12805 dissect_ieee80211_datapad (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
12807 dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
12808 pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, TRUE, FALSE);
12812 * Dissect 802.11 with a variable-length link-layer header and a byte-swapped
12813 * control field (some hardware sends out LWAPP-encapsulated 802.11
12814 * packets with the control field byte swapped).
12817 dissect_ieee80211_bsfc (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
12819 dissect_ieee80211_common (tvb, pinfo, tree, FALSE, 0, TRUE, FALSE, FALSE);
12823 * Dissect 802.11 with a fixed-length link-layer header (padded to the
12827 dissect_ieee80211_fixed (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
12829 dissect_ieee80211_common (tvb, pinfo, tree, TRUE, 0, FALSE, FALSE, FALSE);
12833 * Dissect an HT 802.11 frame with a variable-length link-layer header.
12834 * XXX - Can we tell if a frame is +HTC just by looking at the MAC header?
12835 * If so, we can dispense with this.
12838 dissect_ieee80211_ht (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
12840 dissect_ieee80211_common (tvb, pinfo, tree, FALSE,
12841 pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, FALSE, TRUE);
12845 wlan_defragment_init(void)
12847 fragment_table_init(&wlan_fragment_table);
12848 reassembled_table_init(&wlan_reassembled_table);
12851 /* ------------- */
12853 retransmit_hash(gconstpointer k)
12855 const retransmit_key *key = (const retransmit_key *)k;
12860 for (i = 0; i < 6; i++)
12861 hash_val += key->bssid[i];
12863 for (i = 0; i < 6; i++)
12864 hash_val += key->src[i];
12870 retransmit_equal(gconstpointer k1, gconstpointer k2)
12872 const retransmit_key *key1 = (const retransmit_key *)k1;
12873 const retransmit_key *key2 = (const retransmit_key *)k2;
12875 return ((!memcmp(key1->bssid, key2->bssid, 6) && !memcmp(key1->src, key2->src, 6)) ? TRUE:FALSE);
12879 frame_hash(gconstpointer k)
12881 guint32 frame = GPOINTER_TO_UINT(k);
12887 frame_equal(gconstpointer k1, gconstpointer k2)
12889 guint32 frame1 = GPOINTER_TO_UINT(k1);
12890 guint32 frame2 = GPOINTER_TO_UINT(k2);
12892 return frame1==frame2;
12895 /* Davide Schiera (2006-11-26): this function will try to decrypt with WEP or */
12896 /* WPA and return a tvb to the caller to add a new tab. It returns the */
12897 /* algorithm used for decryption (WEP, TKIP, CCMP) and the header and */
12898 /* trailer lengths. */
12900 try_decrypt(tvbuff_t *tvb, guint offset, guint len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer)
12902 const guint8 *enc_data;
12903 tvbuff_t *decr_tvb = NULL;
12904 guint32 dec_caplen;
12905 guchar dec_data[AIRPDCAP_MAX_CAPLEN];
12906 AIRPDCAP_KEY_ITEM used_key;
12908 if (!enable_decryption)
12911 /* get the entire packet */
12912 enc_data = tvb_get_ptr(tvb, 0, len+offset);
12914 /* process packet with AirPDcap */
12915 if (AirPDcapPacketProcess(&airpdcap_ctx, enc_data, offset, offset+len, dec_data, &dec_caplen,
12916 &used_key, FALSE, TRUE)==AIRPDCAP_RET_SUCCESS)
12919 *algorithm=used_key.KeyType;
12920 switch (*algorithm) {
12921 case AIRPDCAP_KEY_TYPE_WEP:
12922 *sec_header=AIRPDCAP_WEP_HEADER;
12923 *sec_trailer=AIRPDCAP_WEP_TRAILER;
12925 case AIRPDCAP_KEY_TYPE_CCMP:
12926 *sec_header=AIRPDCAP_RSNA_HEADER;
12927 *sec_trailer=AIRPDCAP_CCMP_TRAILER;
12929 case AIRPDCAP_KEY_TYPE_TKIP:
12930 *sec_header=AIRPDCAP_RSNA_HEADER;
12931 *sec_trailer=AIRPDCAP_TKIP_TRAILER;
12937 /* allocate buffer for decrypted payload */
12938 tmp = g_memdup(dec_data+offset, dec_caplen-offset);
12940 len = dec_caplen-offset;
12942 /* decrypt successful, let's set up a new data tvb. */
12943 decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
12944 tvb_set_free_cb(decr_tvb, g_free);
12949 /* Davide Schiera ----------------------------------------------------------- */
12952 /* Collect our WEP and WPA keys */
12954 set_airpdcap_keys(void)
12956 PAIRPDCAP_KEYS_COLLECTION keys;
12957 GByteArray *bytes = NULL;
12960 keys = (PAIRPDCAP_KEYS_COLLECTION)se_alloc(sizeof(AIRPDCAP_KEYS_COLLECTION));
12963 for (i = 0; (uat_wep_key_records != NULL) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS); i++)
12965 decryption_key_t *dk;
12966 dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key);
12970 AIRPDCAP_KEY_ITEM key;
12971 if (dk->type == AIRPDCAP_KEY_TYPE_WEP)
12974 key.KeyType = AIRPDCAP_KEY_TYPE_WEP;
12976 bytes = g_byte_array_new();
12977 res = hex_str_to_bytes(dk->key->str, bytes, FALSE);
12979 if (dk->key->str && res && (bytes->len > 0) && (bytes->len <= AIRPDCAP_WEP_KEY_MAXLEN))
12982 * WEP key is correct (well, the can be even or odd, so it is not
12983 * a real check, I think... is a check performed somewhere in the
12984 * AirPDcap function???)
12986 memcpy(key.KeyData.Wep.WepKey, bytes->data, bytes->len);
12987 key.KeyData.Wep.WepKeyLen = bytes->len;
12988 keys->Keys[keys->nKeys] = key;
12992 else if (dk->type == AIRPDCAP_KEY_TYPE_WPA_PWD)
12994 key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PWD;
12996 /* XXX - This just lops the end if the key off if it's too long.
12997 * Should we handle this more gracefully? */
12998 g_strlcpy(key.UserPwd.Passphrase, dk->key->str, AIRPDCAP_WPA_PASSPHRASE_MAX_LEN+1);
13000 key.UserPwd.SsidLen = 0;
13001 if ((dk->ssid != NULL) && (dk->ssid->len <= AIRPDCAP_WPA_SSID_MAX_LEN))
13003 memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
13004 key.UserPwd.SsidLen = dk->ssid->len;
13007 keys->Keys[keys->nKeys] = key;
13010 else if (dk->type == AIRPDCAP_KEY_TYPE_WPA_PSK)
13012 key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PSK;
13014 bytes = g_byte_array_new();
13015 hex_str_to_bytes(dk->key->str, bytes, FALSE);
13017 /* XXX - Pass the correct array of bytes... */
13018 if (bytes->len <= AIRPDCAP_WPA_PSK_LEN) {
13019 memcpy(key.KeyData.Wpa.Psk, bytes->data, bytes->len);
13021 keys->Keys[keys->nKeys] = key;
13028 /* Now set the keys */
13029 AirPDcapSetKeys(&airpdcap_ctx, keys->Keys, keys->nKeys);
13031 g_byte_array_free(bytes, TRUE);
13040 * XXX - AirPDcap - That God sends it to us beautiful (che dio ce la mandi bona)
13041 * The next lines will add a key to the AirPDcap context. The keystring will be added
13042 * to the old WEP array too, but we don't care, because the packets will come here
13043 * already decrypted... One of these days we will fix this too
13045 set_airpdcap_keys();
13049 * This code had been taken from AirSnort crack.c function classify()
13050 * Permission granted by snax <at> shmoo dot com
13051 * weak_iv - determine which key byte an iv is useful in resolving
13052 * parm - p, pointer to the first byte of an IV
13053 * return - n - this IV is weak for byte n of a WEP key
13054 * -1 - this IV is not weak for any key bytes
13056 * This function tests for IVs that are known to satisfy the criteria
13057 * for a weak IV as specified in FMS section 7.1
13061 weak_iv(guchar *iv)
13065 if ((iv[1] == 255) && (iv[0] > 2) && (iv[0] < 16)) {
13069 sum = iv[0] + iv[1];
13071 if (iv[2] <= 0x0a) {
13074 else if (iv[2] == 0xff) {
13079 if ((sum == k) && ((iv[2] >= 0xf2) && (iv[2] <= 0xfe) && (iv[2] != 0xfd))) {
13086 wlan_retransmit_init(void)
13088 if (fc_analyse_retransmit_table) {
13089 g_hash_table_destroy(fc_analyse_retransmit_table);
13090 fc_analyse_retransmit_table = NULL;
13093 if (fc_first_frame_table) {
13094 g_hash_table_destroy(fc_first_frame_table);
13095 fc_first_frame_table = NULL;
13098 if (wlan_subdissector)
13101 fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
13102 fc_first_frame_table = g_hash_table_new(frame_hash, frame_equal);
13107 dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
13111 int tagged_parameter_tree_len;
13112 proto_tree *tagged_tree;
13116 type = tvb_get_guint8(tvb, offset);
13117 proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
13118 1, ENC_BIG_ENDIAN);
13122 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
13123 /* TODO: IEEE 802.11r */
13126 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
13127 col_clear(pinfo->cinfo, COL_INFO);
13128 offset += add_fixed_field(tree, tvb, offset, FIELD_ACTION);
13129 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
13130 if (tagged_parameter_tree_len > 0) {
13131 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
13132 tagged_parameter_tree_len);
13133 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
13134 tagged_parameter_tree_len, -1);
13141 proto_register_ieee80211 (void)
13144 static hf_register_info hf[] = {
13145 {&hf_ieee80211_fc_field,
13146 {"Frame Control Field", "wlan.fc",
13147 FT_UINT16, BASE_HEX, NULL, 0,
13148 "MAC Frame control", HFILL }},
13150 {&hf_ieee80211_fc_proto_version,
13151 {"Version", "wlan.fc.version",
13152 FT_UINT8, BASE_DEC, NULL, 0,
13153 "MAC Protocol version", HFILL }}, /* 0 */
13155 {&hf_ieee80211_fc_frame_type,
13156 {"Type", "wlan.fc.type",
13157 FT_UINT8, BASE_DEC, VALS(frame_type), 0,
13158 "Frame type", HFILL }},
13160 {&hf_ieee80211_fc_frame_subtype,
13161 {"Subtype", "wlan.fc.subtype",
13162 FT_UINT8, BASE_DEC, NULL, 0,
13163 "Frame subtype", HFILL }}, /* 2 */
13165 {&hf_ieee80211_fc_frame_type_subtype,
13166 {"Type/Subtype", "wlan.fc.type_subtype",
13167 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &frame_type_subtype_vals_ext, 0,
13168 "Type and subtype combined (first byte: type, second byte: subtype)", HFILL }},
13170 {&hf_ieee80211_fc_flags,
13171 {"Protocol Flags", "wlan.flags",
13172 FT_UINT8, BASE_HEX, NULL, 0,
13175 {&hf_ieee80211_fc_data_ds,
13176 {"DS status", "wlan.fc.ds",
13177 FT_UINT8, BASE_HEX, VALS(tofrom_ds), (FLAG_FROM_DS|FLAG_TO_DS),
13178 "Data-frame DS-traversal status", HFILL }}, /* 3 */
13180 {&hf_ieee80211_fc_to_ds,
13181 {"To DS", "wlan.fc.tods",
13182 FT_BOOLEAN, 8, TFS (&tods_flag), FLAG_TO_DS,
13183 "To DS flag", HFILL }}, /* 4 */
13185 {&hf_ieee80211_fc_from_ds,
13186 {"From DS", "wlan.fc.fromds",
13187 FT_BOOLEAN, 8, TFS (&fromds_flag), FLAG_FROM_DS,
13188 "From DS flag", HFILL }}, /* 5 */
13190 {&hf_ieee80211_fc_more_frag,
13191 {"More Fragments", "wlan.fc.frag",
13192 FT_BOOLEAN, 8, TFS (&more_fragments), FLAG_MORE_FRAGMENTS,
13193 "More Fragments flag", HFILL }}, /* 6 */
13195 {&hf_ieee80211_fc_retry,
13196 {"Retry", "wlan.fc.retry",
13197 FT_BOOLEAN, 8, TFS (&retry_flags), FLAG_RETRY,
13198 "Retransmission flag", HFILL }},
13200 { &hf_ieee80211_fc_analysis_retransmission,
13201 {"Retransmission", "wlan.analysis.retransmission",
13202 FT_NONE, BASE_NONE, NULL, 0x0,
13203 "This frame is a suspected wireless retransmission", HFILL }},
13205 { &hf_ieee80211_fc_analysis_retransmission_frame,
13206 {"Retransmission of frame", "wlan.analysis.retransmission_frame",
13207 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
13208 "This is a retransmission of frame #", HFILL }},
13210 {&hf_ieee80211_fc_pwr_mgt,
13211 {"PWR MGT", "wlan.fc.pwrmgt",
13212 FT_BOOLEAN, 8, TFS (&pm_flags), FLAG_POWER_MGT,
13213 "Power management status", HFILL }},
13215 {&hf_ieee80211_fc_more_data,
13216 {"More Data", "wlan.fc.moredata",
13217 FT_BOOLEAN, 8, TFS (&md_flags), FLAG_MORE_DATA,
13218 "More data flag", HFILL }},
13220 {&hf_ieee80211_fc_protected,
13221 {"Protected flag", "wlan.fc.protected",
13222 FT_BOOLEAN, 8, TFS (&protected_flags), FLAG_PROTECTED,
13225 {&hf_ieee80211_fc_order,
13226 {"Order flag", "wlan.fc.order",
13227 FT_BOOLEAN, 8, TFS (&order_flags), FLAG_ORDER,
13228 "Strictly ordered flag", HFILL }},
13230 {&hf_ieee80211_assoc_id,
13231 {"Association ID","wlan.aid"
13232 ,FT_UINT16, BASE_DEC, NULL, 0x3FFF,
13233 "Association-ID field", HFILL }},
13235 {&hf_ieee80211_did_duration,
13236 {"Duration", "wlan.duration",
13237 FT_UINT16, BASE_DEC, NULL, 0x7FFF,
13238 "Duration field", HFILL }},
13240 {&hf_ieee80211_addr_da,
13241 {"Destination address", "wlan.da",
13242 FT_ETHER, BASE_NONE, NULL, 0,
13243 "Destination Hardware Address", HFILL }},
13245 {&hf_ieee80211_addr_sa,
13246 {"Source address", "wlan.sa",
13247 FT_ETHER, BASE_NONE, NULL, 0,
13248 "Source Hardware Address", HFILL }},
13250 { &hf_ieee80211_addr,
13251 {"Hardware address", "wlan.addr",
13252 FT_ETHER, BASE_NONE, NULL, 0,
13253 "SA, DA, BSSID, RA or TA Hardware Address", HFILL }},
13255 {&hf_ieee80211_addr_ra,
13256 {"Receiver address", "wlan.ra",
13257 FT_ETHER, BASE_NONE, NULL, 0,
13258 "Receiving Station Hardware Address", HFILL }},
13260 {&hf_ieee80211_addr_ta,
13261 {"Transmitter address", "wlan.ta",
13262 FT_ETHER, BASE_NONE, NULL, 0,
13263 "Transmitting Station Hardware Address", HFILL }},
13265 {&hf_ieee80211_addr_bssid,
13266 {"BSS Id", "wlan.bssid",
13267 FT_ETHER, BASE_NONE, NULL, 0,
13268 "Basic Service Set ID", HFILL }},
13270 {&hf_ieee80211_frag_number,
13271 {"Fragment number", "wlan.frag",
13272 FT_UINT16, BASE_DEC, NULL, 0,
13275 {&hf_ieee80211_seq_number,
13276 {"Sequence number", "wlan.seq",
13277 FT_UINT16, BASE_DEC, NULL, 0,
13280 {&hf_ieee80211_qos_tid,
13281 {"TID", "wlan.qos.tid",
13282 FT_UINT16, BASE_DEC, NULL, 0,
13285 {&hf_ieee80211_qos_priority,
13286 {"Priority", "wlan.qos.priority",
13287 FT_UINT16, BASE_DEC, NULL, 0,
13288 "802.1D Tag", HFILL }},
13290 {&hf_ieee80211_qos_eosp,
13291 {"EOSP", "wlan.qos.eosp",
13292 FT_BOOLEAN, 8, TFS (&eosp_flag), QOS_FLAG_EOSP,
13293 "EOSP Field", HFILL }},
13295 {&hf_ieee80211_qos_bit4,
13296 {"QoS bit 4", "wlan.qos.bit4",
13297 FT_BOOLEAN, 8, TFS (&bit4_flag), QOS_FLAG_EOSP,
13300 {&hf_ieee80211_qos_ack_policy,
13301 {"Ack Policy", "wlan.qos.ack",
13302 FT_UINT8, BASE_HEX, VALS(ack_policy), 0,
13305 {&hf_ieee80211_qos_amsdu_present,
13306 {"Payload Type", "wlan.qos.amsdupresent",
13307 FT_BOOLEAN, BASE_NONE,
13308 TFS(&ieee80211_qos_amsdu_present_flag), 0x0, NULL, HFILL }},
13310 {&hf_ieee80211_qos_txop_limit,
13311 {"TXOP Limit", "wlan.qos.txop_limit",
13312 FT_UINT16, BASE_DEC, NULL, 0,
13315 {&hf_ieee80211_qos_buf_state_indicated,
13316 {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
13317 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
13320 {&hf_ieee80211_qos_highest_pri_buf_ac,
13321 {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
13322 FT_UINT8, BASE_DEC, VALS(wme_acs), 0x0C,
13325 {&hf_ieee80211_qos_qap_buf_load,
13326 {"QAP Buffered Load", "wlan.qos.qap_buf_load",
13327 FT_UINT8, BASE_DEC, NULL, 0xF0,
13330 {&hf_ieee80211_qos_txop_dur_req,
13331 {"TXOP Duration Requested", "wlan.qos.txop_dur_req",
13332 FT_UINT16, BASE_DEC, NULL, 0,
13335 {&hf_ieee80211_qos_queue_size,
13336 {"Queue Size", "wlan.qos.queue_size",
13337 FT_UINT16, BASE_DEC, NULL, 0,
13340 {&hf_ieee80211_fcs,
13341 {"Frame check sequence", "wlan.fcs",
13342 FT_UINT32, BASE_HEX, NULL, 0,
13343 "Frame Check Sequence (FCS)", HFILL }},
13345 {&hf_ieee80211_fcs_good,
13346 {"Good", "wlan.fcs_good",
13347 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
13348 "True if the FCS is correct", HFILL }},
13350 {&hf_ieee80211_fcs_bad,
13351 {"Bad", "wlan.fcs_bad",
13352 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
13353 "True if the FCS is incorrect", HFILL }},
13355 {&hf_ieee80211_fragment_overlap,
13356 {"Fragment overlap", "wlan.fragment.overlap",
13357 FT_BOOLEAN, BASE_NONE,
13359 "Fragment overlaps with other fragments", HFILL }},
13361 {&hf_ieee80211_fragment_overlap_conflict,
13362 {"Conflicting data in fragment overlap", "wlan.fragment.overlap.conflict",
13363 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
13364 "Overlapping fragments contained conflicting data", HFILL }},
13366 {&hf_ieee80211_fragment_multiple_tails,
13367 {"Multiple tail fragments found", "wlan.fragment.multipletails",
13368 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
13369 "Several tails were found when defragmenting the packet", HFILL }},
13371 {&hf_ieee80211_fragment_too_long_fragment,
13372 {"Fragment too long", "wlan.fragment.toolongfragment",
13373 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
13374 "Fragment contained data past end of packet", HFILL }},
13376 {&hf_ieee80211_fragment_error,
13377 {"Defragmentation error", "wlan.fragment.error",
13378 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
13379 "Defragmentation error due to illegal fragments", HFILL }},
13381 {&hf_ieee80211_fragment_count,
13382 {"Fragment count", "wlan.fragment.count",
13383 FT_UINT32, BASE_DEC, NULL, 0x0,
13386 {&hf_ieee80211_fragment,
13387 {"802.11 Fragment", "wlan.fragment",
13388 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
13391 {&hf_ieee80211_fragments,
13392 {"802.11 Fragments", "wlan.fragments",
13393 FT_NONE, BASE_NONE, NULL, 0x0,
13396 {&hf_ieee80211_reassembled_in,
13397 {"Reassembled 802.11 in frame", "wlan.reassembled_in",
13398 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
13399 "This 802.11 packet is reassembled in this frame", HFILL }},
13401 {&hf_ieee80211_reassembled_length,
13402 {"Reassembled 802.11 length", "wlan.reassembled.length",
13403 FT_UINT32, BASE_DEC, NULL, 0x0,
13404 "The total length of the reassembled payload", HFILL }},
13406 {&hf_ieee80211_wep_iv,
13407 {"Initialization Vector", "wlan.wep.iv",
13408 FT_UINT24, BASE_HEX, NULL, 0,
13411 {&hf_ieee80211_wep_iv_weak,
13412 {"Weak IV", "wlan.wep.weakiv",
13413 FT_BOOLEAN, BASE_NONE, NULL,0x0,
13416 {&hf_ieee80211_tkip_extiv,
13417 {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv",
13418 FT_STRING, BASE_NONE, NULL, 0,
13419 "TKIP Extended Initialization Vector", HFILL }},
13421 {&hf_ieee80211_ccmp_extiv,
13422 {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv",
13423 FT_STRING, BASE_NONE, NULL, 0,
13424 "CCMP Extended Initialization Vector", HFILL }},
13426 {&hf_ieee80211_wep_key,
13427 {"Key Index", "wlan.wep.key",
13428 FT_UINT8, BASE_DEC, NULL, 0,
13431 {&hf_ieee80211_wep_icv,
13432 {"WEP ICV", "wlan.wep.icv",
13433 FT_UINT32, BASE_HEX, NULL, 0,
13436 {&hf_ieee80211_block_ack_request_control,
13437 {"Block Ack Request (BAR) Control", "wlan.bar.control",
13438 FT_UINT16, BASE_HEX, NULL, 0,
13441 {&hf_ieee80211_block_ack_control,
13442 {"Block Ack Request Control", "wlan.ba.control",
13443 FT_UINT16, BASE_HEX, NULL, 0,
13446 {&hf_ieee80211_block_ack_control_ack_policy,
13447 {"BAR Ack Policy", "wlan.ba.control.ackpolicy",
13448 FT_BOOLEAN, 16, TFS (&ieee80211_block_ack_control_ack_policy_flag), 0x01,
13449 "Block Ack Request (BAR) Ack Policy", HFILL }},
13451 {&hf_ieee80211_block_ack_control_multi_tid,
13452 {"Multi-TID", "wlan.ba.control.multitid",
13453 FT_BOOLEAN, 16, 0, 0x02,
13454 "Multi-Traffic Identifier (TID)", HFILL }},
13456 {&hf_ieee80211_block_ack_control_compressed_bitmap,
13457 {"Compressed Bitmap", "wlan.ba.control.cbitmap",
13458 FT_BOOLEAN, 16, 0, 0x04,
13461 {&hf_ieee80211_block_ack_control_reserved,
13462 {"Reserved", "wlan.ba.control.cbitmap",
13463 FT_UINT16, BASE_HEX, NULL, 0x0ff8,
13466 {&hf_ieee80211_block_ack_control_basic_tid_info,
13467 {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
13468 FT_UINT16, BASE_HEX, NULL, 0xf000,
13469 "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL }},
13471 {&hf_ieee80211_block_ack_control_compressed_tid_info,
13472 {"TID for which a BlockAck frame is requested", "wlan.bar.compressed.tidinfo",
13473 FT_UINT16, BASE_HEX, NULL, 0xf000,
13474 "Traffic Identifier (TID) for which a BlockAck frame is requested", HFILL }},
13476 {&hf_ieee80211_block_ack_control_multi_tid_info,
13477 {"Number of TIDs Present", "wlan.ba.mtid.tidinfo",
13478 FT_UINT16, BASE_HEX, NULL, 0xf000,
13479 "Number of Traffic Identifiers (TIDs) Present", HFILL }},
13481 {&hf_ieee80211_block_ack_multi_tid_info,
13482 {"Traffic Identifier (TID) Info", "wlan.ba.mtid.tid",
13483 FT_UINT8, BASE_DEC, 0, 0,
13486 {&hf_ieee80211_block_ack_multi_tid_reserved,
13487 {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
13488 FT_UINT16, BASE_HEX, 0, 0x0fff,
13491 {&hf_ieee80211_block_ack_multi_tid_value,
13492 {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
13493 FT_UINT16, BASE_HEX, 0, 0xf000,
13496 {&hf_ieee80211_block_ack_request_type,
13497 {"Block Ack Request Type", "wlan.bar.type",
13498 FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_request_type_flags), 0x06,
13499 "Block Ack Request (BAR) Type", HFILL }},
13501 {&hf_ieee80211_block_ack_type,
13502 {"Block Ack Type", "wlan.ba.type",
13503 FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_type_flags), 0x06,
13506 {&hf_ieee80211_block_ack_bitmap,
13507 {"Block Ack Bitmap", "wlan.ba.bm",
13508 FT_BYTES, BASE_NONE, NULL, 0,
13511 {&hf_ieee80211_block_ack_bitmap_missing_frame,
13512 {"Missing frame", "wlan.ba.bm.missing_frame",
13513 FT_UINT32, BASE_DEC, NULL, 0,
13516 {&hf_ieee80211_data_encap_payload_type,
13517 {"Payload Type", "wlan.data_encap.payload_type",
13518 FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types), 0,
13521 {&hf_ieee80211_ff_tdls_action_code,
13522 {"Action code", "wlan_mgt.fixed.action_code",
13523 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tdls_action_codes_ext, 0,
13524 "Management action code", HFILL }},
13526 {&hf_ieee80211_ff_target_channel,
13527 {"Target Channel", "wlan_mgt.fixed.target_channel",
13528 FT_UINT8, BASE_DEC, NULL, 0,
13531 {&hf_ieee80211_ff_regulatory_class,
13532 {"Regulatory Class", "wlan_mgt.fixed.regulatory_class",
13533 FT_UINT8, BASE_DEC, NULL, 0,
13536 {&hf_ieee80211_ff_wnm_action_code,
13537 {"Action code", "wlan_mgt.fixed.action_code",
13538 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &wnm_action_codes_ext, 0,
13539 "Management action code", HFILL }},
13541 {&hf_ieee80211_ff_request_mode_pref_cand,
13542 {"Preferred Candidate List Included","wlan_mgt.fixed.request_mode.pref_cand",
13543 FT_UINT8, BASE_DEC, NULL, 0x01,
13546 {&hf_ieee80211_ff_request_mode_abridged,
13547 {"Abridged", "wlan_mgt.fixed.request_mode.abridged",
13548 FT_UINT8, BASE_DEC, NULL, 0x02,
13551 {&hf_ieee80211_ff_request_mode_disassoc_imminent,
13552 {"Disassociation Imminent", "wlan_mgt.fixed.request_mode.disassoc_imminent",
13553 FT_UINT8, BASE_DEC, NULL, 0x04,
13556 {&hf_ieee80211_ff_request_mode_bss_term_included,
13557 {"BSS Termination Included", "wlan_mgt.fixed.request_mode.bss_term_included",
13558 FT_UINT8, BASE_DEC, NULL, 0x08,
13561 {&hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
13562 {"ESS Disassociation Imminent", "wlan_mgt.fixed.request_mode.ess_disassoc_imminent",
13563 FT_UINT8, BASE_DEC, NULL, 0x10,
13566 {&hf_ieee80211_ff_disassoc_timer,
13567 {"Disassociation Timer", "wlan_mgt.fixed.disassoc_timer",
13568 FT_UINT16, BASE_DEC, NULL, 0,
13571 {&hf_ieee80211_ff_validity_interval,
13572 {"Validity Interval", "wlan_mgt.fixed.validity_interval",
13573 FT_UINT8, BASE_DEC, NULL, 0,
13576 {&hf_ieee80211_ff_url_len,
13577 {"Session Information URL Length",
13578 "wlan_mgt.fixed.session_information.url_length",
13579 FT_UINT8, BASE_DEC, NULL, 0,
13582 {&hf_ieee80211_ff_url,
13583 {"Session Information URL", "wlan_mgt.fixed.session_information.url",
13584 FT_STRING, BASE_NONE, NULL, 0,
13588 static hf_register_info ff[] = {
13590 {&hf_ieee80211_ff_timestamp,
13591 {"Timestamp", "wlan_mgt.fixed.timestamp",
13592 FT_UINT64, BASE_HEX, NULL, 0,
13595 {&hf_ieee80211_ff_auth_alg,
13596 {"Authentication Algorithm", "wlan_mgt.fixed.auth.alg",
13597 FT_UINT16, BASE_DEC, VALS(auth_alg), 0,
13600 {&hf_ieee80211_ff_beacon_interval,
13601 {"Beacon Interval", "wlan_mgt.fixed.beacon",
13602 FT_UINT32, BASE_CUSTOM, beacon_interval_base_custom, 0,
13605 {&hf_ieee80211_fixed_parameters,
13606 {"Fixed parameters", "wlan_mgt.fixed.all",
13607 FT_UINT16, BASE_DEC, NULL, 0,
13610 {&hf_ieee80211_tagged_parameters,
13611 {"Tagged parameters", "wlan_mgt.tagged.all",
13612 FT_UINT16, BASE_DEC, NULL, 0,
13615 {&hf_ieee80211_tag_ssid,
13616 {"SSID", "wlan_mgt.ssid",
13617 FT_STRING, BASE_NONE, NULL, 0,
13618 "Indicates the identity of an ESS or IBSS", HFILL }},
13620 {&hf_ieee80211_tag_supp_rates,
13621 {"Supported Rates", "wlan_mgt.supported_rates",
13622 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_supported_rates_vals_ext, 0x0,
13623 "In Mbit/sec, (B) for Basic Rates", HFILL }},
13625 {&hf_ieee80211_tag_fh_dwell_time,
13626 {"Dwell Time", "wlan_mgt.fh.dwell_time",
13627 FT_UINT16, BASE_HEX, NULL, 0x0,
13628 "In Time Unit (TU)", HFILL }},
13630 {&hf_ieee80211_tag_fh_hop_set,
13631 {"Hop Set", "wlan_mgt.fh.hop_set",
13632 FT_UINT8, BASE_DEC, NULL, 0x0,
13635 {&hf_ieee80211_tag_fh_hop_pattern,
13636 {"Hop Pattern", "wlan_mgt.fh.hop_pattern",
13637 FT_UINT8, BASE_DEC, NULL, 0x0,
13640 {&hf_ieee80211_tag_fh_hop_index,
13641 {"Hop Index", "wlan_mgt.fh.hop_index",
13642 FT_UINT8, BASE_DEC, NULL, 0x0,
13645 {&hf_ieee80211_ff_block_ack_params,
13646 {"Block Ack Parameters", "wlan_mgt.fixed.baparams",
13647 FT_UINT16, BASE_HEX, NULL, 0,
13650 {&hf_ieee80211_ff_block_ack_params_amsdu_permitted,
13651 {"A-MSDUs", "wlan_mgt.fixed.baparams.amsdu",
13652 FT_BOOLEAN, 16, TFS (&ff_block_ack_params_amsdu_permitted_flag), 0x0001,
13653 "A-MSDU Permitted in QoS Data MPDUs", HFILL }},
13655 {&hf_ieee80211_ff_block_ack_params_policy,
13656 {"Block Ack Policy", "wlan_mgt.fixed.baparams.policy",
13657 FT_BOOLEAN, 16, TFS (&ff_block_ack_params_policy_flag), 0x0002,
13660 {&hf_ieee80211_ff_block_ack_params_tid,
13661 {"Traffic Identifier", "wlan_mgt.fixed.baparams.tid",
13662 FT_UINT16, BASE_HEX, NULL, 0x003C,
13665 {&hf_ieee80211_ff_block_ack_params_buffer_size,
13666 {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan_mgt.fixed.baparams.buffersize",
13667 FT_UINT16, BASE_DEC, NULL, 0xFFC0,
13668 "Number of Buffers", HFILL }},
13670 {&hf_ieee80211_ff_block_ack_timeout,
13671 {"Block Ack Timeout", "wlan_mgt.fixed.batimeout",
13672 FT_UINT16, BASE_HEX, NULL, 0,
13675 {&hf_ieee80211_ff_block_ack_ssc,
13676 {"Block Ack Starting Sequence Control (SSC)", "wlan_mgt.fixed.ssc",
13677 FT_UINT16, BASE_HEX, 0, 0,
13680 {&hf_ieee80211_ff_block_ack_ssc_fragment,
13681 {"Fragment", "wlan_mgt.fixed.fragment",
13682 FT_UINT16, BASE_DEC, 0, 0x000f,
13685 {&hf_ieee80211_ff_block_ack_ssc_sequence,
13686 {"Starting Sequence Number", "wlan_mgt.fixed.sequence",
13687 FT_UINT16, BASE_DEC, 0, 0xfff0,
13690 {&hf_ieee80211_ff_delba_param,
13691 {"Delete Block Ack (DELBA) Parameter Set", "wlan_mgt.fixed.delba.param",
13692 FT_UINT16, BASE_HEX, 0, 0,
13695 {&hf_ieee80211_ff_delba_param_reserved,
13696 {"Reserved", "wlan_mgt.fixed.delba.param.reserved",
13697 FT_UINT16, BASE_HEX, 0, 0x07ff,
13700 {&hf_ieee80211_ff_delba_param_init,
13701 {"Initiator", "wlan_mgt.fixed.delba.param.initiator",
13702 FT_BOOLEAN, 16, 0, 0x0800,
13705 {&hf_ieee80211_ff_delba_param_tid,
13706 {"TID", "wlan_mgt.fixed.delba.param.tid",
13707 FT_UINT16, BASE_HEX, 0, 0xf000,
13708 "Traffic Identifier (TID)", HFILL }},
13710 {&hf_ieee80211_ff_max_reg_pwr,
13711 {"Maximum Regulation Power", "wlan_mgt.fixed.maxregpwr",
13712 FT_UINT16, BASE_HEX, 0, 0,
13715 {&hf_ieee80211_ff_measurement_pilot_int,
13716 {"Measurement Pilot Interval", "wlan_mgt.fixed.msmtpilotint",
13717 FT_UINT16, BASE_HEX, 0, 0,
13718 "Measurement Pilot Interval Fixed Field", HFILL }},
13720 {&hf_ieee80211_ff_country_str,
13721 {"Country String", "wlan_mgt.fixed.country",
13722 FT_STRING, BASE_NONE, 0, 0,
13725 {&hf_ieee80211_ff_max_tx_pwr,
13726 {"Maximum Transmit Power", "wlan_mgt.fixed.maxtxpwr",
13727 FT_UINT8, BASE_HEX, 0, 0,
13730 {&hf_ieee80211_ff_tx_pwr_used,
13731 {"Transmit Power Used", "wlan_mgt.fixed.txpwr",
13732 FT_UINT8, BASE_HEX, 0, 0,
13735 {&hf_ieee80211_ff_transceiver_noise_floor,
13736 {"Transceiver Noise Floor", "wlan_mgt.fixed.tnoisefloor",
13737 FT_UINT8, BASE_HEX, 0, 0,
13740 {&hf_ieee80211_ff_channel_width,
13741 {"Supported Channel Width", "wlan_mgt.fixed.chanwidth",
13742 FT_UINT8, BASE_HEX, VALS(ff_channel_width_vals), 0,
13745 {&hf_ieee80211_ff_qos_info_ap,
13746 {"QoS Information (AP)", "wlan_mgt.fixed.qosinfo.ap",
13747 FT_UINT8, BASE_HEX, NULL, 0,
13750 {&hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
13751 {"EDCA Parameter Set Update Count", "wlan_mgt.fixed.qosinfo.ap.edcaupdate",
13752 FT_UINT8, BASE_HEX, NULL, 0x0F,
13753 "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL }},
13755 {&hf_ieee80211_ff_qos_info_ap_q_ack,
13756 {"Q-Ack", "wlan_mgt.fixed.qosinfo.ap.qack",
13757 FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_q_ack_flag), 0x10,
13758 "QoS Ack", HFILL }},
13760 {&hf_ieee80211_ff_qos_info_ap_queue_req,
13761 {"Queue Request", "wlan_mgt.fixed.qosinfo.ap",
13762 FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_queue_req_flag), 0x20,
13765 {&hf_ieee80211_ff_qos_info_ap_txop_request,
13766 {"TXOP Request", "wlan_mgt.fixed.qosinfo.ap.txopreq",
13767 FT_BOOLEAN, 8, TFS (&ff_qos_info_ap_txop_request_flag), 0x40,
13768 "Transmit Opportunity (TXOP) Request", HFILL }},
13770 {&hf_ieee80211_ff_qos_info_ap_reserved,
13771 {"Reserved", "wlan_mgt.fixed.qosinfo.ap.reserved",
13772 FT_BOOLEAN, 8, NULL, 0x80,
13775 {&hf_ieee80211_ff_qos_info_sta,
13776 {"QoS Information (STA)", "wlan_mgt.fixed.qosinfo.sta",
13777 FT_UINT8, BASE_HEX, NULL, 0,
13780 {&hf_ieee80211_ff_qos_info_sta_ac_vo,
13781 {"AC_VO", "wlan_mgt.fixed.qosinfo.sta.ac.vo",
13782 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x01,
13785 {&hf_ieee80211_ff_qos_info_sta_ac_vi,
13786 {"AC_VI", "wlan_mgt.fixed.qosinfo.sta.ac.vi",
13787 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x02,
13790 {&hf_ieee80211_ff_qos_info_sta_ac_bk,
13791 {"AC_BK", "wlan_mgt.fixed.qosinfo.sta.ac.bk",
13792 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x04,
13795 {&hf_ieee80211_ff_qos_info_sta_ac_be,
13796 {"AC_BE", "wlan_mgt.fixed.qosinfo.sta.ac.be",
13797 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_ac_flag), 0x08,
13800 {&hf_ieee80211_ff_qos_info_sta_q_ack,
13801 {"Q-Ack", "wlan_mgt.fixed.qosinfo.sta.qack",
13802 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_q_ack_flag), 0x10,
13803 "QoS Ack", HFILL }},
13805 {&hf_ieee80211_ff_qos_info_sta_max_sp_len,
13806 {"Service Period (SP) Length", "wlan_mgt.fixed.qosinfo.sta.splen",
13807 FT_UINT8, BASE_HEX, VALS(ff_qos_info_sta_max_sp_len_flags) , 0x60,
13810 {&hf_ieee80211_ff_qos_info_sta_more_data_ack,
13811 {"More Data Ack", "wlan_mgt.fixed.qosinfo.sta.moredataack",
13812 FT_BOOLEAN, 8, TFS (&ff_qos_info_sta_more_data_ack_flag), 0x80,
13815 {&hf_ieee80211_ff_sm_pwr_save,
13816 {"Spatial Multiplexing (SM) Power Control", "wlan_mgt.fixed.sm.powercontrol",
13817 FT_UINT8, BASE_HEX, NULL, 0,
13820 {&hf_ieee80211_ff_sm_pwr_save_enabled,
13821 {"SM Power Save", "wlan_mgt.fixed.sm.powercontrol.enabled",
13822 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01,
13823 "Spatial Multiplexing (SM) Power Save", HFILL }},
13825 {&hf_ieee80211_ff_sm_pwr_save_sm_mode,
13826 {"SM Mode", "wlan_mgt.fixed.sm.powercontrol.mode",
13827 FT_BOOLEAN, 8, TFS (&ff_sm_pwr_save_sm_mode_flag), 0x02,
13828 "Spatial Multiplexing (SM) Mode", HFILL }},
13830 {&hf_ieee80211_ff_sm_pwr_save_reserved,
13831 {"Reserved", "wlan_mgt.fixed.sm.powercontrol.reserved",
13832 FT_UINT8, BASE_HEX, NULL, 0xFC,
13835 {&hf_ieee80211_ff_pco_phase_cntrl,
13836 {"Phased Coexistence Operation (PCO) Phase Control", "wlan_mgt.fixed.pco.phasecntrl",
13837 FT_BOOLEAN, BASE_NONE, TFS (&ff_pco_phase_cntrl_flag), 0x0,
13840 {&hf_ieee80211_ff_psmp_param_set,
13841 {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan_mgt.fixed.psmp.paramset",
13842 FT_UINT16, BASE_HEX, 0, 0,
13845 {&hf_ieee80211_ff_psmp_param_set_n_sta,
13846 {"Number of STA Info Fields Present", "wlan_mgt.fixed.psmp.paramset.nsta",
13847 FT_UINT16, BASE_HEX, 0, 0x000F,
13850 {&hf_ieee80211_ff_psmp_param_set_more_psmp,
13851 {"More PSMP", "wlan_mgt.fixed.psmp.paramset.more",
13852 FT_BOOLEAN, 16, TFS(&ff_psmp_param_set_more_psmp_flag), 0x0010,
13853 "More Power Save Multi-Poll (PSMP)", HFILL }},
13855 {&hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
13856 {"PSMP Sequence Duration [us]", "wlan_mgt.fixed.psmp.paramset.seqduration",
13857 FT_UINT16, BASE_DEC, 0, 0xFFE0,
13858 "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL }},
13860 {&hf_ieee80211_ff_mimo_cntrl,
13861 {"MIMO Control", "wlan_mgt.fixed.mimo.control.",
13862 FT_BYTES, BASE_NONE, 0, 0x0,
13865 {&hf_ieee80211_ff_mimo_cntrl_nc_index,
13866 {"Nc Index", "wlan_mgt.fixed.mimo.control.ncindex",
13867 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags), 0x0003,
13868 "Number of Columns Less One", HFILL }},
13870 {&hf_ieee80211_ff_mimo_cntrl_nr_index,
13871 {"Nr Index", "wlan_mgt.fixed.mimo.control.nrindex",
13872 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags), 0x000C,
13873 "Number of Rows Less One", HFILL }},
13875 {&hf_ieee80211_ff_mimo_cntrl_channel_width,
13876 {"Channel Width", "wlan_mgt.fixed.mimo.control.chanwidth",
13877 FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag), 0x0010,
13880 {&hf_ieee80211_ff_mimo_cntrl_grouping,
13881 {"Grouping (Ng)", "wlan_mgt.fixed.mimo.control.grouping",
13882 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags), 0x0060,
13885 {&hf_ieee80211_ff_mimo_cntrl_coefficient_size,
13886 {"Coefficient Size (Nb)", "wlan_mgt.fixed.mimo.control.cosize",
13887 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags), 0x0180,
13890 {&hf_ieee80211_ff_mimo_cntrl_codebook_info,
13891 {"Codebook Information", "wlan_mgt.fixed.mimo.control.codebookinfo",
13892 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags), 0x0600,
13895 {&hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
13896 {"Remaining Matrix Segment", "wlan_mgt.fixed.mimo.control.matrixseg",
13897 FT_UINT16, BASE_HEX, 0, 0x3800,
13900 {&hf_ieee80211_ff_mimo_cntrl_reserved,
13901 {"Reserved", "wlan_mgt.fixed.mimo.control.reserved",
13902 FT_UINT16, BASE_HEX, 0, 0xC000,
13905 {&hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
13906 {"Sounding Timestamp", "wlan_mgt.fixed.mimo.control.soundingtime",
13907 FT_UINT32, BASE_HEX, 0, 0,
13910 {&hf_ieee80211_ff_psmp_sta_info,
13911 {"Power Save Multi-Poll (PSMP) Station Information", "wlan_mgt.fixed.psmp.stainfo",
13912 FT_UINT64, BASE_HEX, 0, 0,
13915 {&hf_ieee80211_ff_psmp_sta_info_type,
13916 {"Sta Info Type", "wlan_mgt.fixed.psmp.stainfo.type",
13917 FT_UINT32, BASE_HEX, VALS(ff_psmp_sta_info_flags), PSMP_STA_INFO_FLAG_TYPE,
13920 {&hf_ieee80211_ff_psmp_sta_info_dtt_start_offset,
13921 {"DTT Start Offset", "wlan_mgt.fixed.psmp.stainfo.dttstart",
13922 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_START,
13925 {&hf_ieee80211_ff_psmp_sta_info_dtt_duration,
13926 {"DTT Duration", "wlan_mgt.fixed.psmp.stainfo.dttduration",
13927 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_DURATION,
13930 {&hf_ieee80211_ff_psmp_sta_info_sta_id,
13931 {"Target Station ID", "wlan_mgt.fixed.psmp.stainfo.staid",
13932 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_STA_ID,
13935 {&hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
13936 {"UTT Start Offset", "wlan_mgt.fixed.psmp.stainfo.uttstart",
13937 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_START,
13940 {&hf_ieee80211_ff_psmp_sta_info_utt_duration,
13941 {"UTT Duration", "wlan_mgt.fixed.psmp.stainfo.uttduration",
13942 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_DURATION,
13945 {&hf_ieee80211_ff_psmp_sta_info_reserved_small,
13946 {"Reserved", "wlan_mgt.fixed.psmp.stainfo.reserved",
13947 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_IA_RESERVED,
13950 {&hf_ieee80211_ff_psmp_sta_info_reserved_large,
13951 {"Reserved", "wlan_mgt.fixed.psmp.stainfo.reserved",
13952 FT_UINT64, BASE_HEX, 0, 0,
13955 {&hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
13956 {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan_mgt.fixed.psmp.stainfo.multicastid",
13957 FT_UINT64, BASE_HEX, 0, 0,
13960 {&hf_ieee80211_ff_ant_selection,
13961 {"Antenna Selection", "wlan_mgt.fixed.antsel",
13962 FT_UINT8, BASE_HEX, 0, 0,
13965 {&hf_ieee80211_ff_ant_selection_0,
13966 {"Antenna 0", "wlan_mgt.fixed.antsel.ant0",
13967 FT_UINT8, BASE_HEX, 0, 0x01,
13970 {&hf_ieee80211_ff_ant_selection_1,
13971 {"Antenna 1", "wlan_mgt.fixed.antsel.ant1",
13972 FT_UINT8, BASE_HEX, 0, 0x02,
13975 {&hf_ieee80211_ff_ant_selection_2,
13976 {"Antenna 2", "wlan_mgt.fixed.antsel.ant2",
13977 FT_UINT8, BASE_HEX, 0, 0x04,
13980 {&hf_ieee80211_ff_ant_selection_3,
13981 {"Antenna 3", "wlan_mgt.fixed.antsel.ant3",
13982 FT_UINT8, BASE_HEX, 0, 0x08,
13985 {&hf_ieee80211_ff_ant_selection_4,
13986 {"Antenna 4", "wlan_mgt.fixed.antsel.ant4",
13987 FT_UINT8, BASE_HEX, 0, 0x10,
13990 {&hf_ieee80211_ff_ant_selection_5,
13991 {"Antenna 5", "wlan_mgt.fixed.antsel.ant5",
13992 FT_UINT8, BASE_HEX, 0, 0x20,
13995 {&hf_ieee80211_ff_ant_selection_6,
13996 {"Antenna 6", "wlan_mgt.fixed.antsel.ant6",
13997 FT_UINT8, BASE_HEX, 0, 0x40,
14000 {&hf_ieee80211_ff_ant_selection_7,
14001 {"Antenna 7", "wlan_mgt.fixed.antsel.ant7",
14002 FT_UINT8, BASE_HEX, 0, 0x80,
14005 {&hf_ieee80211_ff_ext_channel_switch_announcement,
14006 {"Extended Channel Switch Announcement", "wlan_mgt.fixed.extchansw",
14007 FT_UINT32, BASE_HEX, 0, 0,
14010 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
14011 {"Channel Switch Mode", "wlan_mgt.fixed.extchansw.switchmode",
14012 FT_UINT32, BASE_HEX, VALS(ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags), 0x000000FF,
14015 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_reg_class,
14016 {"New Regulatory Class", "wlan_mgt.fixed.extchansw.new.regclass",
14017 FT_UINT32, BASE_HEX, NULL, 0x0000FF00,
14020 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
14021 {"New Channel Number", "wlan_mgt.fixed.extchansw.new.channumber",
14022 FT_UINT32, BASE_HEX, NULL, 0x00FF0000,
14025 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
14026 {"Channel Switch Count", "wlan_mgt.extchanswitch.switchcount",
14027 FT_UINT32, BASE_HEX, NULL, 0xFF000000,
14030 {&hf_ieee80211_ff_ht_info,
14031 {"HT Information", "wlan_mgt.fixed.extchansw",
14032 FT_UINT8, BASE_HEX, 0, 0,
14033 "HT Information Fixed Field", HFILL }},
14035 {&hf_ieee80211_ff_ht_info_information_request,
14036 {"Information Request", "wlan_mgt.fixed.mimo.control.chanwidth",
14037 FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag), 0x01,
14040 {&hf_ieee80211_ff_ht_info_40_mhz_intolerant,
14041 {"40 MHz Intolerant", "wlan_mgt.fixed.mimo.control.chanwidth",
14042 FT_BOOLEAN, 8, TFS(&ff_ht_info_40_mhz_intolerant_flag), 0x02,
14045 {&hf_ieee80211_ff_ht_info_sta_chan_width,
14046 {"Station Channel Width", "wlan_mgt.fixed.mimo.control.chanwidth",
14047 FT_BOOLEAN, 8, TFS(&ff_ht_info_sta_chan_width_flag), 0x04,
14050 {&hf_ieee80211_ff_ht_info_reserved,
14051 {"Reserved", "wlan_mgt.fixed.extchansw",
14052 FT_UINT8, BASE_HEX, 0, 0xF8,
14053 "Reserved Field", HFILL }},
14055 {&hf_ieee80211_ff_ht_action,
14056 {"HT Action", "wlan_mgt.fixed.htact",
14057 FT_UINT8, BASE_HEX, VALS(ff_ht_action_flags), 0,
14058 "HT Action Code", HFILL }},
14060 {&hf_ieee80211_ff_mimo_csi_snr,
14061 {"Signal to Noise Ratio (SNR)", "wlan_mgt.mimo.csimatrices.snr",
14062 FT_UINT8, BASE_HEX, NULL, 0,
14065 {&hf_ieee80211_ff_public_action,
14066 {"Public Action", "wlan_mgt.fixed.publicact",
14067 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_pa_action_codes_ext, 0,
14068 "Public Action Code", HFILL }},
14070 {&hf_ieee80211_ff_capture,
14071 {"Capabilities Information", "wlan_mgt.fixed.capabilities",
14072 FT_UINT16, BASE_HEX, NULL, 0,
14073 "Capability information", HFILL }},
14075 {&hf_ieee80211_ff_cf_ess,
14076 {"ESS capabilities", "wlan_mgt.fixed.capabilities.ess",
14077 FT_BOOLEAN, 16, TFS (&cf_ess_flags), 0x0001,
14080 {&hf_ieee80211_ff_cf_ibss,
14081 {"IBSS status", "wlan_mgt.fixed.capabilities.ibss",
14082 FT_BOOLEAN, 16, TFS (&cf_ibss_flags), 0x0002,
14083 "IBSS participation", HFILL }},
14085 {&hf_ieee80211_ff_cf_sta_poll,
14086 {"CFP participation capabilities", "wlan_mgt.fixed.capabilities.cfpoll.sta",
14087 FT_UINT16, BASE_HEX, VALS(sta_cf_pollable), 0x020C,
14088 "CF-Poll capabilities for a STA", HFILL }},
14090 {&hf_ieee80211_ff_cf_ap_poll,
14091 {"CFP participation capabilities", "wlan_mgt.fixed.capabilities.cfpoll.ap",
14092 FT_UINT16, BASE_HEX, VALS(ap_cf_pollable), 0x020C,
14093 "CF-Poll capabilities for an AP", HFILL }},
14095 {&hf_ieee80211_ff_cf_privacy,
14096 {"Privacy", "wlan_mgt.fixed.capabilities.privacy",
14097 FT_BOOLEAN, 16, TFS (&cf_privacy_flags), 0x0010,
14098 "WEP support", HFILL }},
14100 {&hf_ieee80211_ff_cf_preamble,
14101 {"Short Preamble", "wlan_mgt.fixed.capabilities.preamble",
14102 FT_BOOLEAN, 16, TFS (&cf_preamble_flags), 0x0020,
14105 {&hf_ieee80211_ff_cf_pbcc,
14106 {"PBCC", "wlan_mgt.fixed.capabilities.pbcc",
14107 FT_BOOLEAN, 16, TFS (&cf_pbcc_flags), 0x0040,
14108 "PBCC Modulation", HFILL }},
14110 {&hf_ieee80211_ff_cf_agility,
14111 {"Channel Agility", "wlan_mgt.fixed.capabilities.agility",
14112 FT_BOOLEAN, 16, TFS (&cf_agility_flags), 0x0080,
14115 {&hf_ieee80211_ff_cf_spec_man,
14116 {"Spectrum Management", "wlan_mgt.fixed.capabilities.spec_man",
14117 FT_BOOLEAN, 16, TFS (&cf_spec_man_flags), 0x0100,
14120 {&hf_ieee80211_ff_short_slot_time,
14121 {"Short Slot Time", "wlan_mgt.fixed.capabilities.short_slot_time",
14122 FT_BOOLEAN, 16, TFS (&short_slot_time_flags), 0x0400,
14125 {&hf_ieee80211_ff_cf_apsd,
14126 {"Automatic Power Save Delivery", "wlan_mgt.fixed.capabilities.apsd",
14127 FT_BOOLEAN, 16, TFS (&cf_apsd_flags), 0x0800,
14130 {&hf_ieee80211_ff_dsss_ofdm,
14131 {"DSSS-OFDM", "wlan_mgt.fixed.capabilities.dsss_ofdm",
14132 FT_BOOLEAN, 16, TFS (&dsss_ofdm_flags), 0x2000,
14133 "DSSS-OFDM Modulation", HFILL }},
14135 {&hf_ieee80211_ff_cf_del_blk_ack,
14136 {"Delayed Block Ack", "wlan_mgt.fixed.capabilities.del_blk_ack",
14137 FT_BOOLEAN, 16, TFS (&cf_del_blk_ack_flags), 0x4000,
14140 {&hf_ieee80211_ff_cf_imm_blk_ack,
14141 {"Immediate Block Ack", "wlan_mgt.fixed.capabilities.imm_blk_ack",
14142 FT_BOOLEAN, 16, TFS (&cf_imm_blk_ack_flags), 0x8000,
14145 {&hf_ieee80211_ff_auth_seq,
14146 {"Authentication SEQ", "wlan_mgt.fixed.auth_seq",
14147 FT_UINT16, BASE_HEX, NULL, 0,
14148 "Authentication Sequence Number", HFILL }},
14150 {&hf_ieee80211_ff_assoc_id,
14151 {"Association ID", "wlan_mgt.fixed.aid",
14152 FT_UINT16, BASE_HEX, NULL, 0x3FFF,
14155 {&hf_ieee80211_ff_listen_ival,
14156 {"Listen Interval", "wlan_mgt.fixed.listen_ival",
14157 FT_UINT16, BASE_HEX, NULL, 0,
14160 {&hf_ieee80211_ff_current_ap,
14161 {"Current AP", "wlan_mgt.fixed.current_ap",
14162 FT_ETHER, BASE_NONE, NULL, 0,
14163 "MAC address of current AP", HFILL }},
14165 {&hf_ieee80211_ff_reason,
14166 {"Reason code", "wlan_mgt.fixed.reason_code",
14167 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_reason_code_ext, 0,
14168 "Reason for unsolicited notification", HFILL }},
14170 {&hf_ieee80211_ff_status_code,
14171 {"Status code", "wlan_mgt.fixed.status_code",
14172 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_status_code_ext, 0,
14173 "Status of requested event", HFILL }},
14175 {&hf_ieee80211_ff_category_code,
14176 {"Category code", "wlan_mgt.fixed.category_code",
14177 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &category_codes_ext, 0,
14178 "Management action category", HFILL }},
14180 {&hf_ieee80211_ff_action_code,
14181 {"Action code", "wlan_mgt.fixed.action_code",
14182 FT_UINT16, BASE_DEC, VALS(action_codes), 0,
14183 "Management action code", HFILL }},
14185 {&hf_ieee80211_ff_dialog_token,
14186 {"Dialog token", "wlan_mgt.fixed.dialog_token",
14187 FT_UINT8, BASE_HEX, NULL, 0,
14188 "Management action dialog token", HFILL }},
14190 {&hf_ieee80211_ff_marvell_action_type,
14191 {"Marvell Action type", "wlan_mgt.fixed.mrvl_action_type",
14192 FT_UINT8, BASE_DEC, VALS(vendor_action_types_mrvl), 0,
14193 "Vendor Specific Action Type (Marvell)", HFILL }},
14195 {&hf_ieee80211_ff_marvell_mesh_mgt_action_code,
14196 {"Mesh action(Marvell)", "wlan_mgt.fixed.mrvl_mesh_action",
14197 FT_UINT8, BASE_HEX, VALS(mesh_mgt_action_codes_mrvl), 0,
14198 "Mesh action code(Marvell)", HFILL }},
14200 {&hf_ieee80211_ff_marvell_mesh_mgt_length,
14201 {"Message Length", "wlan_mgt.fixed.length",
14202 FT_UINT8, BASE_DEC, NULL, 0,
14205 {&hf_ieee80211_ff_marvell_mesh_mgt_mode,
14206 {"Message Mode", "wlan_mgt.fixed.mode",
14207 FT_UINT8, BASE_HEX, NULL, 0,
14210 {&hf_ieee80211_ff_marvell_mesh_mgt_ttl,
14211 {"Message TTL", "wlan_mgt.fixed.ttl",
14212 FT_UINT8, BASE_DEC, NULL, 0,
14215 {&hf_ieee80211_ff_marvell_mesh_mgt_dstcount,
14216 {"Destination Count", "wlan_mgt.fixed.dstcount",
14217 FT_UINT8, BASE_DEC, NULL, 0,
14220 {&hf_ieee80211_ff_marvell_mesh_mgt_hopcount,
14221 {"Hop Count", "wlan_mgt.fixed.hopcount",
14222 FT_UINT8, BASE_DEC, NULL, 0,
14225 {&hf_ieee80211_ff_marvell_mesh_mgt_rreqid,
14226 {"RREQ ID", "wlan_mgt.fixed.rreqid",
14227 FT_UINT32, BASE_DEC, NULL, 0,
14230 {&hf_ieee80211_ff_marvell_mesh_mgt_sa,
14231 {"Source Address", "wlan_mgt.fixed.sa",
14232 FT_ETHER, BASE_NONE, NULL, 0,
14233 "Source MAC address", HFILL }},
14235 {&hf_ieee80211_ff_marvell_mesh_mgt_ssn,
14236 {"SSN", "wlan_mgt.fixed.ssn",
14237 FT_UINT32, BASE_DEC, NULL, 0,
14238 "Source Sequence Number", HFILL }},
14240 {&hf_ieee80211_ff_marvell_mesh_mgt_metric,
14241 {"Metric", "wlan_mgt.fixed.metric",
14242 FT_UINT32, BASE_DEC, NULL, 0,
14243 "Route Metric", HFILL }},
14245 {&hf_ieee80211_ff_marvell_mesh_mgt_flags,
14246 {"RREQ Flags", "wlan_mgt.fixed.hopcount",
14247 FT_UINT8, BASE_HEX, NULL, 0,
14250 {&hf_ieee80211_ff_marvell_mesh_mgt_da,
14251 {"Destination Address", "wlan_mgt.fixed.da",
14252 FT_ETHER, BASE_NONE, NULL, 0,
14253 "Destination MAC address", HFILL }},
14255 {&hf_ieee80211_ff_marvell_mesh_mgt_dsn,
14256 {"DSN", "wlan_mgt.fixed.dsn",
14257 FT_UINT32, BASE_DEC, NULL, 0,
14258 "Destination Sequence Number", HFILL }},
14260 {&hf_ieee80211_ff_marvell_mesh_mgt_lifetime,
14261 {"Lifetime", "wlan_mgt.fixed.lifetime",
14262 FT_UINT32, BASE_DEC, NULL, 0,
14263 "Route Lifetime", HFILL }},
14265 {&hf_ieee80211_ff_wme_action_code,
14266 {"Action code", "wlan_mgt.fixed.action_code",
14267 FT_UINT16, BASE_HEX, VALS(wme_action_codes), 0,
14268 "Management notification action code", HFILL }},
14270 {&hf_ieee80211_ff_wme_status_code,
14271 {"Status code", "wlan_mgt.fixed.status_code",
14272 FT_UINT16, BASE_HEX, VALS(wme_status_codes), 0,
14273 "Management notification setup response status code", HFILL }},
14275 {&hf_ieee80211_ff_mesh_action,
14276 {"Mesh Action code", "wlan_mgt.fixed.mesh_action",
14277 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &mesh_action_ext, 0,
14280 {&hf_ieee80211_ff_multihop_action,
14281 {"Multihop Action code", "wlan_mgt.fixed.multihop_action",
14282 FT_UINT8, BASE_HEX, VALS(multihop_action), 0,
14285 {&hf_ieee80211_ff_mesh_flags,
14286 {"Mesh Flags", "wlan_mgt.fixed.mesh_flags",
14287 FT_UINT8, BASE_HEX, NULL, 0,
14290 {&hf_ieee80211_ff_mesh_ttl,
14291 {"Mesh TTL", "wlan_mgt.fixed.mesh_ttl",
14292 FT_UINT8, BASE_HEX, NULL, 0,
14295 {&hf_ieee80211_ff_mesh_sequence,
14296 {"Sequence Number", "wlan_mgt.fixed.mesh_sequence",
14297 FT_UINT32, BASE_HEX, NULL, 0,
14300 {&hf_ieee80211_ff_mesh_addr4,
14301 {"Mesh Extended Address 4", "wlan_mgt.fixed.mesh_addr4",
14302 FT_ETHER, BASE_NONE, NULL, 0,
14305 {&hf_ieee80211_ff_mesh_addr5,
14306 {"Mesh Extended Address 5", "wlan_mgt.fixed.mesh_addr5",
14307 FT_ETHER, BASE_NONE, NULL, 0,
14310 {&hf_ieee80211_ff_mesh_addr6,
14311 {"Mesh Extended Address 6", "wlan_mgt.fixed.mesh_addr6",
14312 FT_ETHER, BASE_NONE, NULL, 0,
14315 {&hf_ieee80211_ff_selfprot_action,
14316 {"Self-protected Action code", "wlan_mgt.fixed.selfprot_action",
14317 FT_UINT8, BASE_HEX, VALS(selfprot_action), 0,
14320 {&hf_ieee80211_mesh_peering_proto,
14321 {"Mesh Peering Protocol ID", "wlan.peering.proto",
14322 FT_UINT16, BASE_HEX, VALS(mesh_peering_proto_ids), 0,
14325 {&hf_ieee80211_mesh_peering_local_link_id,
14326 {"Local Link ID", "wlan.peering.local_id",
14327 FT_UINT16, BASE_HEX, NULL, 0,
14328 "Mesh Peering Management Local Link ID", HFILL }},
14330 {&hf_ieee80211_mesh_peering_peer_link_id,
14331 {"Peer Link ID", "wlan.peering.peer_id",
14332 FT_UINT16, BASE_HEX, NULL, 0,
14333 "Mesh Peering Management Peer Link ID", HFILL }},
14335 {&hf_ieee80211_ff_hwmp_flags,
14336 {"HWMP Flags", "wlan.hwmp.flags",
14337 FT_UINT8, BASE_HEX, NULL, 0,
14340 {&hf_ieee80211_ff_hwmp_hopcount,
14341 {"HWMP Hop Count", "wlan.hwmp.hopcount",
14342 FT_UINT8, BASE_DEC, NULL, 0,
14345 {&hf_ieee80211_ff_hwmp_ttl,
14346 {"HWMP TTL", "wlan.hwmp.ttl",
14347 FT_UINT8, BASE_DEC, NULL, 0,
14350 {&hf_ieee80211_ff_hwmp_pdid,
14351 {"HWMP Path Discovery ID", "wlan.hwmp.pdid",
14352 FT_UINT32, BASE_DEC, NULL, 0,
14355 {&hf_ieee80211_ff_hwmp_orig_sta,
14356 {"Originator STA Address", "wlan.hwmp.orig_sta",
14357 FT_ETHER, BASE_NONE, NULL, 0,
14360 {&hf_ieee80211_ff_hwmp_orig_sn,
14361 {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn",
14362 FT_UINT32, BASE_DEC, NULL, 0,
14365 {&hf_ieee80211_ff_hwmp_orig_ext,
14366 {"Originator External Address", "wlan.hwmp.orig_ext",
14367 FT_ETHER, BASE_NONE, NULL, 0,
14370 {&hf_ieee80211_ff_hwmp_lifetime,
14371 {"HWMP Lifetime", "wlan.hwmp.lifetime",
14372 FT_UINT32, BASE_DEC, NULL, 0,
14375 {&hf_ieee80211_ff_hwmp_metric,
14376 {"HWMP Metric", "wlan.hwmp.metric",
14377 FT_UINT32, BASE_DEC, NULL, 0,
14380 {&hf_ieee80211_ff_hwmp_targ_count,
14381 {"HWMP Target Count", "wlan.hwmp.targ_count",
14382 FT_UINT8, BASE_DEC, NULL, 0,
14385 {&hf_ieee80211_ff_hwmp_targ_flags,
14386 {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags",
14387 FT_UINT8, BASE_HEX, NULL, 0,
14390 {&hf_ieee80211_ff_hwmp_targ_to_flags,
14391 {"TO Flag", "wlan.hwmp.to_flag",
14392 FT_BOOLEAN, 8, TFS (&hwmp_targ_to_flags), 0x01,
14393 "Target Only Flag", HFILL }},
14395 {&hf_ieee80211_ff_hwmp_targ_usn_flags,
14396 {"USN Flag", "wlan.hwmp.usn_flag",
14397 FT_BOOLEAN, 8, TFS (&hwmp_targ_usn_flags), 0x04,
14398 "Unknown Target HWMP Sequence Number Flag", HFILL }},
14400 {&hf_ieee80211_ff_hwmp_targ_sta,
14401 {"Target STA Address", "wlan.hwmp.targ_sta",
14402 FT_ETHER, BASE_NONE, NULL, 0,
14405 {&hf_ieee80211_ff_hwmp_targ_ext,
14406 {"Target External Address", "wlan.hwmp.targ_ext",
14407 FT_ETHER, BASE_NONE, NULL, 0,
14410 {&hf_ieee80211_ff_hwmp_targ_sn,
14411 {"Target HWMP Sequence Number", "wlan.hwmp.targ_sn",
14412 FT_UINT32, BASE_DEC, NULL, 0,
14415 {&hf_ieee80211_mesh_config_path_sel_protocol,
14416 {"Path Selection Protocol", "wlan.mesh.config.ps_protocol",
14417 FT_UINT8, BASE_HEX, NULL, 0,
14418 "Mesh Configuration Path Selection Protocol", HFILL }},
14420 {&hf_ieee80211_mesh_config_path_sel_metric,
14421 {"Path Selection Metric", "wlan.mesh.config.ps_metric",
14422 FT_UINT8, BASE_HEX, NULL, 0,
14423 "Mesh Configuration Path Selection Metric", HFILL }},
14425 {&hf_ieee80211_mesh_config_congestion_control,
14426 {"Congestion Control", "wlan.mesh.config.cong_ctl",
14427 FT_UINT8, BASE_HEX, NULL, 0,
14428 "Mesh Configuration Congestion Control", HFILL }},
14430 {&hf_ieee80211_mesh_config_sync_method,
14431 {"Synchronization Method", "wlan.mesh.config.sync_method",
14432 FT_UINT8, BASE_HEX, NULL, 0,
14433 "Mesh Configuration Synchronization Method", HFILL }},
14435 {&hf_ieee80211_mesh_config_auth_protocol,
14436 {"Authentication Protocol", "wlan.mesh.config.auth_protocol",
14437 FT_UINT8, BASE_HEX, NULL, 0,
14438 "Mesh Configuration Authentication Protocol", HFILL }},
14440 {&hf_ieee80211_mesh_config_formation_info,
14441 {"Formation Info", "wlan.mesh.config.formation_info",
14442 FT_UINT8, BASE_HEX, NULL, 0,
14443 "Mesh Configuration Formation Info", HFILL }},
14445 {&hf_ieee80211_mesh_config_capability,
14446 {"Capability", "wlan.mesh.config.cap",
14447 FT_UINT8, BASE_HEX, NULL, 0,
14448 "Mesh Configuration Capability", HFILL }},
14450 {&hf_ieee80211_mesh_id,
14451 {"Mesh ID", "wlan.mesh.id",
14452 FT_STRING, BASE_NONE, NULL, 0,
14455 {&hf_ieee80211_rann_flags,
14456 {"RANN Flags", "wlan.rann.flags",
14457 FT_UINT8, BASE_HEX, NULL, 0,
14458 "Root Announcement Flags", HFILL }},
14460 {&hf_ieee80211_rann_root_sta,
14461 {"Root STA Address", "wlan.rann.root_sta", FT_ETHER, BASE_NONE, NULL, 0,
14462 "Root Mesh STA Address", HFILL }},
14464 {&hf_ieee80211_rann_sn,
14465 {"Root STA Sequence Number", "wlan.rann.rann_sn",
14466 FT_UINT32, BASE_DEC, NULL, 0,
14467 "Root Mesh STA Sequence Number", HFILL }},
14469 {&hf_ieee80211_rann_interval,
14470 {"RANN Interval", "wlan.rann.interval",
14471 FT_UINT32, BASE_DEC, NULL, 0,
14472 "Root Announcement Interval", HFILL }},
14474 {&hf_ieee80211_ff_qos_action_code,
14475 {"Action code", "wlan_mgt.fixed.action_code",
14476 FT_UINT16, BASE_HEX, VALS(qos_action_codes), 0,
14477 "QoS management action code", HFILL }},
14479 {&hf_ieee80211_ff_ba_action,
14480 {"Action code", "wlan_mgt.fixed.action_code",
14481 FT_UINT8, BASE_HEX, VALS(ba_action_codes), 0,
14482 "Block Ack action code", HFILL }},
14484 {&hf_ieee80211_ff_dls_action_code,
14485 {"Action code", "wlan_mgt.fixed.action_code",
14486 FT_UINT16, BASE_HEX, VALS(dls_action_codes), 0,
14487 "DLS management action code", HFILL }},
14489 {&hf_ieee80211_ff_dst_mac_addr,
14490 {"Destination address", "wlan_mgt.fixed.dst_mac_addr",
14491 FT_ETHER, BASE_NONE, NULL, 0,
14492 "Destination MAC address", HFILL }},
14494 {&hf_ieee80211_ff_src_mac_addr,
14495 {"Source address", "wlan_mgt.fixed.src_mac_addr",
14496 FT_ETHER, BASE_NONE, NULL, 0,
14497 "Source MAC address", HFILL }},
14499 {&hf_ieee80211_ff_ft_action_code,
14500 {"Action code", "wlan_mgt.fixed.action_code",
14501 FT_UINT8, BASE_DEC, VALS(ft_action_codes), 0,
14502 "Management action code", HFILL }},
14504 {&hf_ieee80211_ff_sta_address,
14505 {"STA Address", "wlan_mgt.fixed.sta_address",
14506 FT_ETHER, BASE_NONE, NULL, 0,
14509 {&hf_ieee80211_ff_target_ap_address,
14510 {"Target AP Address", "wlan_mgt.fixed.target_ap_address",
14511 FT_ETHER, BASE_NONE, NULL, 0,
14512 "Target AP MAC address", HFILL }},
14514 {&hf_ieee80211_ff_gas_comeback_delay,
14515 {"GAS Comeback Delay", "wlan_mgt.fixed.gas_comeback_delay",
14516 FT_UINT16, BASE_DEC, NULL, 0,
14519 {&hf_ieee80211_ff_gas_fragment_id,
14520 {"GAS Query Response Fragment ID", "wlan_mgt.fixed.gas_fragment_id",
14521 FT_UINT8, BASE_DEC, NULL, 0x7f,
14524 {&hf_ieee80211_ff_more_gas_fragments,
14525 {"More GAS Fragments", "wlan_mgt.fixed.more_gas_fragments",
14526 FT_UINT8, BASE_DEC, NULL, 0x80,
14529 {&hf_ieee80211_ff_query_request_length,
14530 {"Query Request Length", "wlan_mgt.fixed.query_request_length",
14531 FT_UINT16, BASE_DEC, NULL, 0,
14534 {&hf_ieee80211_ff_query_request,
14535 {"Query Request", "wlan_mgt.fixed.query_request",
14536 FT_BYTES, BASE_NONE, NULL, 0,
14539 {&hf_ieee80211_ff_query_response_length,
14540 {"Query Response Length", "wlan_mgt.fixed.query_response_length",
14541 FT_UINT16, BASE_DEC, NULL, 0,
14544 {&hf_ieee80211_ff_query_response,
14545 {"Query Response", "wlan_mgt.fixed.query_response",
14546 FT_BYTES, BASE_NONE, NULL, 0,
14549 {&hf_ieee80211_gas_resp_fragments,
14550 {"GAS Query Response fragments", "wlan_mgt.fixed.fragments",
14551 FT_NONE, BASE_NONE, NULL, 0x00,
14554 {&hf_ieee80211_gas_resp_fragment,
14555 {"GAS Query Response fragment", "wlan_mgt.fixed.fragment",
14556 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
14559 {&hf_ieee80211_gas_resp_fragment_overlap,
14560 {"GAS Query Response fragment overlap", "wlan_mgt.fixed.fragment.overlap",
14561 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
14564 {&hf_ieee80211_gas_resp_fragment_overlap_conflict,
14565 {"GAS Query Response fragment overlapping with conflicting data", "wlan_mgt.fixed.fragment.overlap.conflicts",
14566 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
14569 {&hf_ieee80211_gas_resp_fragment_multiple_tails,
14570 {"GAS Query Response has multiple tail fragments", "wlan_mgt.fixed.fragment.multiple_tails",
14571 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
14574 {&hf_ieee80211_gas_resp_fragment_too_long_fragment,
14575 {"GAS Query Response fragment too long", "wlan_mgt.fixed.fragment.too_long_fragment",
14576 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
14579 {&hf_ieee80211_gas_resp_fragment_error,
14580 {"GAS Query Response reassembly error", "wlan_mgt.fixed.fragment.error",
14581 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
14584 {&hf_ieee80211_gas_resp_fragment_count,
14585 {"GAS Query Response fragment count", "wlan_mgt.fixed.fragment.count",
14586 FT_UINT32, BASE_DEC, NULL, 0x00,
14589 {&hf_ieee80211_gas_resp_reassembled_in,
14590 {"Reassembled in", "wlan_mgt.fixed.reassembled.in",
14591 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
14594 {&hf_ieee80211_gas_resp_reassembled_length,
14595 {"Reassembled length", "wlan_mgt.fixed.reassembled.length",
14596 FT_UINT32, BASE_DEC, NULL, 0x00,
14599 {&hf_ieee80211_ff_anqp_info_id,
14600 {"Info ID", "wlan_mgt.fixed.anqp.info_id",
14601 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
14602 "Access Network Query Protocol Info ID", HFILL }},
14604 {&hf_ieee80211_ff_anqp_info_length,
14605 {"Length", "wlan_mgt.fixed.anqp.info_length",
14606 FT_UINT16, BASE_DEC, NULL, 0,
14607 "Access Network Query Protocol Length", HFILL }},
14609 {&hf_ieee80211_ff_anqp_info,
14610 {"Information", "wlan_mgt.fixed.anqp.info",
14611 FT_BYTES, BASE_NONE, NULL, 0,
14612 "Access Network Query Protocol Information", HFILL }},
14614 {&hf_ieee80211_ff_anqp_query_id,
14615 {"ANQP Query ID", "wlan_mgt.fixed.anqp.query_id",
14616 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
14617 "Access Network Query Protocol Query ID", HFILL }},
14619 {&hf_ieee80211_ff_anqp_capability,
14620 {"ANQP Capability", "wlan_mgt.fixed.anqp.capability",
14621 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
14622 "Access Network Query Protocol Query ID", HFILL }},
14624 {&hf_ieee80211_ff_anqp_capability_vlen,
14625 {"Vendor-specific Capability Length", "wlan_mgt.fixed.anqp.capability_vlen",
14626 FT_UINT16, BASE_DEC, NULL, 0,
14629 {&hf_ieee80211_ff_anqp_capability_vendor,
14630 {"Vendor-specific Capability", "wlan_mgt.fixed.anqp.capability_vendor",
14631 FT_BYTES, BASE_NONE, NULL, 0,
14634 {&hf_ieee80211_ff_venue_info_group,
14635 {"Venue Group", "wlan_mgt.fixed.venue_info.group",
14636 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &venue_group_vals_ext, 0,
14639 {&hf_ieee80211_ff_venue_info_type,
14640 {"Venue Type", "wlan_mgt.fixed.venue_info.type",
14641 FT_UINT8, BASE_DEC, NULL, 0,
14644 {&hf_ieee80211_ff_anqp_venue_length,
14645 {"Venue Name Duple Length", "wlan_mgt.fixed.anqp.venue.length",
14646 FT_UINT8, BASE_DEC, NULL, 0,
14649 {&hf_ieee80211_ff_anqp_venue_language,
14650 {"Language Code", "wlan_mgt.fixed.anqp.venue.language",
14651 FT_STRING, BASE_NONE, NULL, 0,
14652 "Venue Name Language Code", HFILL }},
14654 {&hf_ieee80211_ff_anqp_venue_name,
14655 {"Venue Name", "wlan_mgt.fixed.anqp.venue.name",
14656 FT_STRING, BASE_NONE, NULL, 0,
14659 {&hf_ieee80211_ff_anqp_nw_auth_type_indicator,
14660 {"Network Authentication Type Indicator", "wlan_mgt.fixed.anqp.nw_auth_type.indicator",
14661 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals), 0,
14664 {&hf_ieee80211_ff_anqp_nw_auth_type_url_len,
14665 {"Re-direct URL Length", "wlan_mgt.fixed.anqp.nw_auth_type.url_len",
14666 FT_UINT16, BASE_DEC, NULL, 0,
14669 {&hf_ieee80211_ff_anqp_nw_auth_type_url,
14670 {"Re-direct URL", "wlan_mgt.fixed.anqp.nw_auth_type_url",
14671 FT_STRING, BASE_NONE, NULL, 0,
14674 {&hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
14675 {"OI Length", "wlan_mgt.fixed.anqp.roaming_consortium.oi_len",
14676 FT_UINT8, BASE_DEC, NULL, 0,
14677 "Roaming Consortium OI Length", HFILL }},
14679 {&hf_ieee80211_ff_anqp_roaming_consortium_oi,
14680 {"OI", "wlan_mgt.fixed.anqp.roaming_consortium.oi",
14681 FT_BYTES, BASE_NONE, NULL, 0,
14682 "Roaming Consortium OI", HFILL }},
14684 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
14685 {"IPv6 Address", "wlan_mgt.fixed.anqp.ip_addr_availability.ipv6",
14686 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv6_vals), 0x03,
14687 "IP Address Type Availability information for IPv6", HFILL }},
14689 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
14690 {"IPv4 Address", "wlan_mgt.fixed.anqp.ip_addr_availability.ipv4",
14691 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv4_vals), 0xfc,
14692 "IP Address Type Availability information for IPv4", HFILL }},
14694 {&hf_ieee80211_ff_anqp_nai_realm_count,
14695 {"NAI Realm Count", "wlan_mgt.fixed.anqp.nai_realm_list.count",
14696 FT_UINT16, BASE_DEC, NULL, 0,
14699 {&hf_ieee80211_ff_anqp_nai_field_len,
14700 {"NAI Realm Data Field Length", "wlan_mgt.fixed.anqp.nai_realm_list.field_len",
14701 FT_UINT16, BASE_DEC, NULL, 0,
14704 {&hf_ieee80211_ff_anqp_nai_realm_encoding,
14705 {"NAI Realm Encoding", "wlan_mgt.fixed.naqp_nai_realm_list.encoding",
14706 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals), 0x01,
14709 {&hf_ieee80211_ff_anqp_nai_realm_length,
14710 {"NAI Realm Length", "wlan_mgt.fixed.naqp_nai_realm_list.realm_length",
14711 FT_UINT8, BASE_DEC, NULL, 0,
14714 {&hf_ieee80211_ff_anqp_nai_realm,
14715 {"NAI Realm", "wlan_mgt.fixed.naqp_nai_realm_list.realm",
14716 FT_STRING, BASE_NONE, NULL, 0,
14719 {&hf_ieee80211_ff_anqp_nai_realm_eap_count,
14720 {"EAP Method Count", "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_count",
14721 FT_UINT8, BASE_DEC, NULL, 0,
14724 {&hf_ieee80211_ff_anqp_nai_realm_eap_len,
14725 {"EAP Method subfield Length", "wlan_mgt.fixed.naqp_nai_realm_list.eap_method_len",
14726 FT_UINT8, BASE_DEC, NULL, 0,
14729 {&hf_ieee80211_ff_anqp_nai_realm_eap_method,
14730 {"EAP Method", "wlan_mgt.fixed.naqp_nai_realm_list.eap_method",
14731 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &eap_type_vals_ext, 0,
14734 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
14735 {"Authentication Parameter Count", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_count",
14736 FT_UINT8, BASE_DEC, NULL, 0,
14739 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
14740 {"Authentication Parameter ID", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_id",
14741 FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals), 0,
14744 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
14745 {"Authentication Parameter Length", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_len",
14746 FT_UINT8, BASE_DEC, NULL, 0,
14749 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
14750 {"Authentication Parameter Value", "wlan_mgt.fixed.naqp_nai_realm_list.auth_param_value",
14751 FT_BYTES, BASE_NONE, NULL, 0,
14754 {&hf_ieee80211_3gpp_gc_gud,
14755 {"GUD", "wlan_mgt.fixed.anqp.3gpp_cellular_info.gud",
14756 FT_UINT8, BASE_DEC, NULL, 0,
14757 "Generic container User Data", HFILL }},
14759 {&hf_ieee80211_3gpp_gc_udhl,
14760 {"UDHL", "wlan_mgt.fixed.anqp.3gpp_cellular_info.udhl",
14761 FT_UINT8, BASE_DEC, NULL, 0,
14762 "User Data Header Length", HFILL }},
14764 {&hf_ieee80211_3gpp_gc_iei,
14765 {"IEI", "wlan_mgt.fixed.anqp.3gpp_cellular_info.iei",
14766 FT_UINT8, BASE_DEC, NULL, 0,
14767 "Information Element Identity", HFILL }},
14769 {&hf_ieee80211_3gpp_gc_plmn_len,
14770 {"PLMN Length", "wlan_mgt.fixed.anqp.3gpp_cellular_info.plmn_len",
14771 FT_UINT8, BASE_DEC, NULL, 0,
14772 "Length of PLMN List value contents", HFILL }},
14774 {&hf_ieee80211_3gpp_gc_num_plmns,
14775 {"Number of PLMNs", "wlan_mgt.fixed.anqp.3gpp_cellular_info.num_plmns",
14776 FT_UINT8, BASE_DEC, NULL, 0,
14779 {&hf_ieee80211_3gpp_gc_plmn,
14780 {"PLMN", "wlan_mgt.fixed.anqp.3gpp_cellular_info.plmn",
14781 FT_STRING, BASE_NONE, NULL, 0,
14782 "PLMN information", HFILL }},
14784 {&hf_ieee80211_ff_anqp_domain_name_len,
14785 {"Domain Name Length", "wlan_mgt.fixed.anqp.domain_name_list.len",
14786 FT_UINT8, BASE_DEC, NULL, 0,
14789 {&hf_ieee80211_ff_anqp_domain_name,
14790 {"Domain Name", "wlan_mgt.fixed.anqp.domain_name_list.name",
14791 FT_STRING, BASE_NONE, NULL, 0,
14794 {&hf_ieee80211_ff_dls_timeout,
14795 {"DLS timeout", "wlan_mgt.fixed.dls_timeout",
14796 FT_UINT16, BASE_HEX, NULL, 0,
14797 "DLS timeout value", HFILL }},
14799 {&hf_ieee80211_ff_sa_query_action_code,
14800 {"Action code", "wlan_mgt.fixed.action_code",
14801 FT_UINT8, BASE_DEC, VALS(sa_query_action_codes), 0,
14802 "Management action code", HFILL }},
14804 {&hf_ieee80211_ff_transaction_id,
14805 {"Transaction Id", "wlan_mgt.fixed.transaction_id",
14806 FT_UINT16, BASE_HEX, NULL, 0,
14809 {&hf_ieee80211_tag,
14810 {"Tag", "wlan_mgt.tag",
14811 FT_NONE, BASE_NONE, 0x0, 0,
14814 {&hf_ieee80211_tag_number,
14815 {"Tag Number", "wlan_mgt.tag.number",
14816 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tag_num_vals_ext, 0,
14817 "Element ID", HFILL }},
14819 {&hf_ieee80211_tag_length,
14820 {"Tag length", "wlan_mgt.tag.length",
14821 FT_UINT32, BASE_DEC, NULL, 0,
14822 "Length of tag", HFILL }},
14824 {&hf_ieee80211_tag_interpretation,
14825 {"Tag interpretation", "wlan_mgt.tag.interpretation",
14826 FT_STRING, BASE_NONE, NULL, 0,
14827 "Interpretation of tag", HFILL }},
14829 {&hf_ieee80211_tag_oui,
14830 {"OUI", "wlan_mgt.tag.oui",
14831 FT_UINT24, BASE_CUSTOM, oui_base_custom, 0, "OUI of vendor specific IE", HFILL }},
14833 {&hf_ieee80211_tag_ds_param_channel,
14834 {"Current Channel", "wlan_mgt.ds.current_channel",
14835 FT_UINT8, BASE_DEC, NULL, 0,
14836 "DS Parameter Set - Current Channel", HFILL }},
14838 {&hf_ieee80211_tag_cfp_count,
14839 {"CFP Count", "wlan_mgt.cfp.count",
14840 FT_UINT8, BASE_DEC, NULL, 0,
14841 "Indicates how many delivery traffic indication messages (DTIMs)", HFILL }},
14843 {&hf_ieee80211_tag_cfp_period,
14844 {"CFP Period", "wlan_mgt.cfp.period",
14845 FT_UINT8, BASE_DEC, NULL, 0,
14846 "Indicates the number of DTIM intervals between the start of CFPs", HFILL }},
14848 {&hf_ieee80211_tag_cfp_max_duration,
14849 {"CFP Max Duration", "wlan_mgt.cfp.max_duration",
14850 FT_UINT16, BASE_DEC, NULL, 0,
14851 "Indicates the maximum duration (in TU) of the CFP that may be generated by this PCF", HFILL }},
14853 {&hf_ieee80211_tag_cfp_dur_remaining,
14854 {"CFP Dur Remaining", "wlan_mgt.cfp.dur_remaining",
14855 FT_UINT16, BASE_DEC, NULL, 0,
14856 "Indicates the maximum time (in TU) remaining in the present CFP", HFILL }},
14858 {&hf_ieee80211_tag_vendor_oui_type,
14859 {"Vendor Specific OUI Type", "wlan_mgt.tag.oui.type",
14860 FT_UINT8, BASE_DEC, NULL, 0,
14863 {&hf_ieee80211_tim_dtim_count,
14864 {"DTIM count", "wlan_mgt.tim.dtim_count",
14865 FT_UINT8, BASE_DEC, NULL, 0,
14866 "Indicates how many Beacon frames (including the current frame) appear before the next DTIM", HFILL }},
14868 {&hf_ieee80211_tim_dtim_period,
14869 {"DTIM period", "wlan_mgt.tim.dtim_period",
14870 FT_UINT8, BASE_DEC, NULL, 0,
14871 "Indicates the number of beacon intervals between successive DTIMs", HFILL }},
14873 {&hf_ieee80211_tim_bmapctl,
14874 {"Bitmap control", "wlan_mgt.tim.bmapctl",
14875 FT_UINT8, BASE_HEX, NULL, 0,
14878 {&hf_ieee80211_tim_bmapctl_mcast,
14879 {"Multicast", "wlan_mgt.tim.bmapctl.multicast",
14880 FT_BOOLEAN, 8, NULL, 0x1,
14881 "Contains the Traffic Indicator bit associated with Association ID 0", HFILL }},
14883 {&hf_ieee80211_tim_bmapctl_offset,
14884 {"Bitmap Offset", "wlan_mgt.tim.bmapctl.offset",
14885 FT_UINT8, BASE_HEX, NULL, 0xFE,
14888 {&hf_ieee80211_tim_partial_virtual_bitmap,
14889 {"Partial Virtual Bitmap", "wlan_mgt.tim.partial_virtual_bitmap",
14890 FT_BYTES, BASE_NONE, NULL, 0x0,
14893 {&hf_ieee80211_tag_ibss_atim_window,
14894 {"Atim Windows", "wlan_mgt.ibss.atim_windows",
14895 FT_UINT16, BASE_HEX, NULL, 0x0,
14896 "Contains the ATIM Window length in TU", HFILL }},
14898 {&hf_ieee80211_tag_country_info_code,
14899 {"Code", "wlan_mgt.country_info.code",
14900 FT_STRING, BASE_NONE, NULL, 0x0,
14903 {&hf_ieee80211_tag_country_info_env,
14904 {"Environment", "wlan_mgt.country_info.environment",
14905 FT_UINT8, BASE_HEX, VALS(environment_vals), 0x0,
14908 {&hf_ieee80211_tag_country_info_pad,
14909 {"Padding", "wlan_mgt.country_info.padding",
14910 FT_BYTES, BASE_NONE, NULL, 0x0,
14913 {&hf_ieee80211_tag_country_info_fnm,
14914 {"Country Info", "wlan_mgt.country_info.fnm",
14915 FT_NONE, BASE_NONE, NULL, 0x0,
14918 {&hf_ieee80211_tag_country_info_fnm_fcn,
14919 {"First Channel Number", "wlan_mgt.country_info.fnm.fcn",
14920 FT_UINT8, BASE_DEC, NULL, 0x0,
14923 {&hf_ieee80211_tag_country_info_fnm_nc,
14924 {"Number of Channels", "wlan_mgt.country_info.fnm.nc",
14925 FT_UINT8, BASE_DEC, NULL, 0x0,
14928 {&hf_ieee80211_tag_country_info_fnm_mtpl,
14929 {"Maximum Transmit Power Level (in dBm)", "wlan_mgt.country_info.fnm.mtpl",
14930 FT_UINT8, BASE_DEC, NULL, 0x0,
14933 {&hf_ieee80211_tag_country_info_rrc,
14934 {"Country Info", "wlan_mgt.country_info.rrc",
14935 FT_NONE, BASE_NONE, NULL, 0x0,
14938 {&hf_ieee80211_tag_country_info_rrc_rei,
14939 {"Regulatory Extension Identifier", "wlan_mgt.country_info.rrc.rei",
14940 FT_UINT8, BASE_DEC, NULL, 0x0,
14943 {&hf_ieee80211_tag_country_info_rrc_rc,
14944 {"Regulatory Class", "wlan_mgt.country_info.rrc.rc",
14945 FT_UINT8, BASE_DEC, NULL, 0x0,
14948 {&hf_ieee80211_tag_country_info_rrc_cc,
14949 {"Coverage Class", "wlan_mgt.country_info.rrc.cc",
14950 FT_UINT8, BASE_DEC, NULL, 0x0,
14953 {&hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
14954 {"Prime Radix", "wlan_mgt.fh_hopping.parameter.prime_radix",
14955 FT_UINT8, BASE_DEC, NULL, 0x0,
14958 {&hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
14959 {"Number of Channels", "wlan_mgt.fh_hopping.parameter.nb_channels",
14960 FT_UINT8, BASE_DEC, NULL, 0x0,
14963 {&hf_ieee80211_tag_fh_hopping_table_flag,
14964 {"Flag", "wlan_mgt.fh_hopping.table.flag",
14965 FT_UINT8, BASE_HEX, NULL, 0x0,
14966 "Indicates that a Random Table is present when the value is 1", HFILL }},
14968 {&hf_ieee80211_tag_fh_hopping_table_number_of_sets,
14969 {"Number of Sets", "wlan_mgt.fh_hopping.table.number_of_sets",
14970 FT_UINT8, BASE_DEC, NULL, 0x0,
14971 "Indicates the total number of sets within the hopping patterns", HFILL }},
14973 {&hf_ieee80211_tag_fh_hopping_table_modulus,
14974 {"Modulus", "wlan_mgt.fh_hopping.table.modulus",
14975 FT_UINT8, BASE_HEX, NULL, 0x0,
14976 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL }},
14978 {&hf_ieee80211_tag_fh_hopping_table_offset,
14979 {"Offset", "wlan_mgt.fh_hopping.table.offset",
14980 FT_UINT8, BASE_HEX, NULL, 0x0,
14981 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL }},
14983 {&hf_ieee80211_tag_fh_hopping_random_table,
14984 {"Random Table", "wlan_mgt.fh_hopping.table.random_table",
14985 FT_UINT16, BASE_HEX, NULL, 0x0,
14986 "It is a vector of single octet values that indicate the random sequence to be followed during a hopping sequence", HFILL }},
14988 {&hf_ieee80211_tag_request,
14989 {"Requested Element ID", "wlan_mgt.tag.request",
14990 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tag_num_vals_ext, 0,
14991 "The list of elements that are to be included in the responding STA Probe Response frame", HFILL }},
14993 {&hf_ieee80211_tclas_up,
14994 {"User Priority", "wlan_mgt.tclas.user_priority",
14995 FT_UINT8, BASE_DEC, NULL, 0,
14996 "Contains the value of the UP of the associated MSDUs", HFILL }},
14998 {&hf_ieee80211_tclas_class_type,
14999 {"Classifier Type", "wlan_mgt.tclas.class_type",
15000 FT_UINT8, BASE_DEC, VALS (classifier_type), 0,
15001 "Specifies the type of classifier parameters", HFILL }},
15003 {&hf_ieee80211_tclas_class_mask,
15004 {"Classifier Mask", "wlan_mgt.tclas.class_mask",
15005 FT_UINT8, BASE_HEX, NULL, 0,
15006 "Specifies a bitmap where bits that are set to 1 identify a subset of the classifier parameters", HFILL }},
15008 {&hf_ieee80211_tclas_src_mac_addr,
15009 {"Source address", "wlan_mgt.tclas.type",
15010 FT_ETHER, BASE_NONE, NULL, 0,
15011 "Classifier Parameters Ethernet Type", HFILL }},
15013 {&hf_ieee80211_tclas_dst_mac_addr,
15014 {"Destination address", "wlan_mgt.tclas.type",
15015 FT_ETHER, BASE_NONE, NULL, 0,
15018 {&hf_ieee80211_tclas_ether_type,
15019 {"Ethernet Type", "wlan_mgt.tclas.type",
15020 FT_UINT8, BASE_DEC, NULL, 0,
15023 {&hf_ieee80211_tclas_version,
15024 {"IP Version", "wlan_mgt.tclas.version",
15025 FT_UINT8, BASE_DEC, NULL, 0,
15028 {&hf_ieee80211_tclas_ipv4_src,
15029 {"IPv4 Src Addr", "wlan_mgt.tclas.ipv4_src",
15030 FT_IPv4, BASE_NONE, NULL, 0,
15033 {&hf_ieee80211_tclas_ipv4_dst,
15034 {"IPv4 Dst Addr", "wlan_mgt.tclas.ipv4_dst",
15035 FT_IPv4, BASE_NONE, NULL, 0,
15038 {&hf_ieee80211_tclas_src_port,
15039 {"Source Port", "wlan_mgt.tclas.src_port",
15040 FT_UINT16, BASE_DEC, NULL, 0,
15043 {&hf_ieee80211_tclas_dst_port,
15044 {"Destination Port", "wlan_mgt.tclas.dst_port",
15045 FT_UINT16, BASE_DEC, NULL, 0,
15048 {&hf_ieee80211_tclas_dscp,
15049 {"IPv4 DSCP", "wlan_mgt.tclas.dscp",
15050 FT_UINT8, BASE_HEX, NULL, 0,
15051 "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL }},
15053 {&hf_ieee80211_tclas_protocol,
15054 {"Protocol", "wlan_mgt.tclas.protocol",
15055 FT_UINT8, BASE_HEX, NULL, 0,
15056 "IPv4 Protocol", HFILL }},
15058 {&hf_ieee80211_tclas_ipv6_src,
15059 {"IPv6 Src Addr", "wlan_mgt.tclas.ipv6_src",
15060 FT_IPv6, BASE_NONE, NULL, 0,
15063 {&hf_ieee80211_tclas_ipv6_dst,
15064 {"IPv6 Dst Addr", "wlan_mgt.tclas.ipv6_dst",
15065 FT_IPv6, BASE_NONE, NULL, 0,
15068 {&hf_ieee80211_tclas_flow,
15069 {"Flow Label", "wlan_mgt.tclas.flow",
15070 FT_UINT24, BASE_HEX, NULL, 0,
15071 "IPv6 Flow Label", HFILL }},
15073 {&hf_ieee80211_tclas_tag_type,
15074 {"802.1Q Tag Type", "wlan_mgt.tclas.tag_type",
15075 FT_UINT16, BASE_HEX, NULL, 0,
15078 {&hf_ieee80211_tag_challenge_text,
15079 {"Challenge Text", "wlan_mgt.tag.challenge_text",
15080 FT_BYTES, BASE_NONE, NULL, 0,
15083 {&hf_ieee80211_rsn_version,
15084 {"RSN Version", "wlan_mgt.rsn.version",
15085 FT_UINT16, BASE_DEC, NULL, 0,
15086 "Indicates the version number of the RSNA protocol", HFILL }},
15088 {&hf_ieee80211_rsn_gcs,
15089 {"Group Cipher Suite", "wlan_mgt.rsn.gcs",
15090 FT_UINT32, BASE_CUSTOM, rsn_gcs_base_custom, 0,
15091 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
15093 {&hf_ieee80211_rsn_gcs_oui,
15094 {"Group Cipher Suite OUI", "wlan_mgt.rsn.gcs.oui",
15095 FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
15098 {&hf_ieee80211_rsn_gcs_type,
15099 {"Group Cipher Suite type", "wlan_mgt.rsn.gcs.type",
15100 FT_UINT8, BASE_DEC, NULL, 0,
15103 {&hf_ieee80211_rsn_gcs_80211_type,
15104 {"Group Cipher Suite type", "wlan_mgt.rsn.gcs.type",
15105 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
15108 {&hf_ieee80211_rsn_pcs_count,
15109 {"Pairwise Cipher Suite Count", "wlan_mgt.rsn.pcs.count",
15110 FT_UINT16, BASE_DEC, NULL, 0,
15111 "Indicates the number of pairwise cipher suite selectors that are contained in the Pairwise Cipher Suite List", HFILL }},
15113 {&hf_ieee80211_rsn_pcs_list,
15114 {"Pairwise Cipher Suite List", "wlan_mgt.rsn.pcs.list",
15115 FT_NONE, BASE_NONE, NULL, 0,
15116 "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL }},
15118 {&hf_ieee80211_rsn_pcs,
15119 {"Pairwise Cipher Suite", "wlan_mgt.rsn.pcs",
15120 FT_UINT32, BASE_CUSTOM, rsn_pcs_base_custom, 0,
15123 {&hf_ieee80211_rsn_pcs_oui,
15124 {"Pairwise Cipher Suite OUI", "wlan_mgt.rsn.pcs.oui",
15125 FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
15128 {&hf_ieee80211_rsn_pcs_type,
15129 {"Pairwise Cipher Suite type", "wlan_mgt.rsn.pcs.type",
15130 FT_UINT8, BASE_DEC, NULL, 0,
15133 {&hf_ieee80211_rsn_pcs_80211_type,
15134 {"Pairwise Cipher Suite type", "wlan_mgt.rsn.pcs.type",
15135 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
15138 {&hf_ieee80211_rsn_akms_count,
15139 {"Auth Key Management (AKM) Suite Count", "wlan_mgt.rsn.akms.count",
15140 FT_UINT16, BASE_DEC, NULL, 0,
15141 "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
15143 {&hf_ieee80211_rsn_akms_list,
15144 {"Auth Key Management (AKM) List", "wlan_mgt.rsn.akms.list",
15145 FT_NONE, BASE_NONE, NULL, 0,
15146 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
15148 {&hf_ieee80211_rsn_akms,
15149 {"Auth Key Management (AKM) Suite", "wlan_mgt.rsn.akms",
15150 FT_UINT32, BASE_CUSTOM, rsn_akms_base_custom, 0,
15153 {&hf_ieee80211_rsn_akms_oui,
15154 {"Auth Key Management (AKM) OUI", "wlan_mgt.rsn.akms.oui",
15155 FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
15158 {&hf_ieee80211_rsn_akms_type,
15159 {"Auth Key Management (AKM) type", "wlan_mgt.rsn.akms.type",
15160 FT_UINT8, BASE_DEC, NULL, 0,
15163 {&hf_ieee80211_rsn_akms_80211_type,
15164 {"Auth Key Management (AKM) type", "wlan_mgt.rsn.akms.type",
15165 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_keymgmt_vals), 0,
15168 {&hf_ieee80211_rsn_cap,
15169 {"RSN Capabilities", "wlan_mgt.rsn.capabilities",
15170 FT_UINT16, BASE_HEX, NULL, 0,
15171 "RSN Capability information", HFILL }},
15173 {&hf_ieee80211_rsn_cap_preauth,
15174 {"RSN Pre-Auth capabilities", "wlan_mgt.rsn.capabilities.preauth",
15175 FT_BOOLEAN, 16, TFS(&rsn_preauth_flags), 0x0001,
15178 {&hf_ieee80211_rsn_cap_no_pairwise,
15179 {"RSN No Pairwise capabilities", "wlan_mgt.rsn.capabilities.no_pairwise",
15180 FT_BOOLEAN, 16, TFS(&rsn_no_pairwise_flags), 0x0002,
15183 {&hf_ieee80211_rsn_cap_ptksa_replay_counter,
15184 {"RSN PTKSA Replay Counter capabilities", "wlan_mgt.rsn.capabilities.ptksa_replay_counter",
15185 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter), 0x000C,
15188 {&hf_ieee80211_rsn_cap_gtksa_replay_counter,
15189 {"RSN GTKSA Replay Counter capabilities", "wlan_mgt.rsn.capabilities.gtksa_replay_counter",
15190 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter), 0x0030,
15193 {&hf_ieee80211_rsn_cap_mfpr,
15194 {"Management Frame Protection Required", "wlan_mgt.rsn.capabilities.mfpr",
15195 FT_BOOLEAN, 16, NULL, 0x0040,
15198 {&hf_ieee80211_rsn_cap_mfpc,
15199 {"Management Frame Protection Capable", "wlan_mgt.rsn.capabilities.mfpc",
15200 FT_BOOLEAN, 16, NULL, 0x0080,
15203 {&hf_ieee80211_rsn_cap_peerkey,
15204 {"PeerKey Enabled", "wlan_mgt.rsn.capabilities.peerkey",
15205 FT_BOOLEAN, 16, NULL, 0x0200,
15208 {&hf_ieee80211_rsn_pmkid_count,
15209 {"PMKID Count", "wlan_mgt.rsn.pmkid.count",
15210 FT_UINT16, BASE_DEC, NULL, 0,
15211 "Indicates the number of PMKID selectors that are contained in the PMKID Suite List", HFILL }},
15213 {&hf_ieee80211_rsn_pmkid_list,
15214 {"PMKID List", "wlan_mgt.rsn.pmkid.list",
15215 FT_NONE, BASE_NONE, NULL, 0,
15216 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
15218 {&hf_ieee80211_rsn_pmkid,
15219 {"PMKID", "wlan_mgt.pmkid.akms",
15220 FT_BYTES, BASE_NONE, NULL, 0,
15223 {&hf_ieee80211_rsn_gmcs,
15224 {"Group Management Cipher Suite", "wlan_mgt.rsn.gmcs",
15225 FT_UINT32, BASE_CUSTOM, rsn_gmcs_base_custom, 0,
15226 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
15228 {&hf_ieee80211_rsn_gmcs_oui,
15229 {"Group Management Cipher Suite OUI", "wlan_mgt.rsn.gmcs.oui",
15230 FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
15233 {&hf_ieee80211_rsn_gmcs_type,
15234 {"Group Management Cipher Suite type", "wlan_mgt.rsn.gmcs.type",
15235 FT_UINT8, BASE_DEC, NULL, 0,
15238 {&hf_ieee80211_rsn_gmcs_80211_type,
15239 {"Group Management Cipher Suite type", "wlan_mgt.rsn.gmcs.type",
15240 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
15243 {&hf_ieee80211_ht_cap,
15244 {"HT Capabilities Info", "wlan_mgt.ht.capabilities",
15245 FT_UINT16, BASE_HEX, NULL, 0,
15246 "HT Capabilities information", HFILL }},
15248 {&hf_ieee80211_ht_vs_cap,
15249 {"HT Capabilities Info (VS)", "wlan_mgt.vs.ht.capabilities",
15250 FT_UINT16, BASE_HEX, NULL, 0,
15251 "Vendor Specific HT Capabilities information", HFILL }},
15253 {&hf_ieee80211_ht_ldpc_coding,
15254 {"HT LDPC coding capability", "wlan_mgt.ht.capabilities.ldpccoding",
15255 FT_BOOLEAN, 16, TFS (&ht_ldpc_coding_flag), 0x0001,
15258 {&hf_ieee80211_ht_chan_width,
15259 {"HT Support channel width", "wlan_mgt.ht.capabilities.width",
15260 FT_BOOLEAN, 16, TFS (&ht_chan_width_flag), 0x0002,
15263 {&hf_ieee80211_ht_sm_pwsave,
15264 {"HT SM Power Save", "wlan_mgt.ht.capabilities.sm",
15265 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag), 0x000c,
15268 {&hf_ieee80211_ht_green,
15269 {"HT Green Field", "wlan_mgt.ht.capabilities.green",
15270 FT_BOOLEAN, 16, TFS (&ht_green_flag), 0x0010,
15273 {&hf_ieee80211_ht_short20,
15274 {"HT Short GI for 20MHz", "wlan_mgt.ht.capabilities.short20",
15275 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0020,
15278 {&hf_ieee80211_ht_short40,
15279 {"HT Short GI for 40MHz", "wlan_mgt.ht.capabilities.short40",
15280 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0040,
15283 {&hf_ieee80211_ht_tx_stbc,
15284 {"HT Tx STBC", "wlan_mgt.ht.capabilities.txstbc",
15285 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0080,
15288 {&hf_ieee80211_ht_rx_stbc,
15289 {"HT Rx STBC", "wlan_mgt.ht.capabilities.rxstbc",
15290 FT_UINT16, BASE_HEX, VALS(ht_rx_stbc_flag), 0x0300,
15291 "HT Tx STBC", HFILL }},
15293 {&hf_ieee80211_ht_delayed_block_ack,
15294 {"HT Delayed Block ACK", "wlan_mgt.ht.capabilities.delayedblockack",
15295 FT_BOOLEAN, 16, TFS (&ht_delayed_block_ack_flag), 0x0400,
15298 {&hf_ieee80211_ht_max_amsdu,
15299 {"HT Max A-MSDU length", "wlan_mgt.ht.capabilities.amsdu",
15300 FT_BOOLEAN, 16, TFS (&ht_max_amsdu_flag), 0x0800,
15303 {&hf_ieee80211_ht_dss_cck_40,
15304 {"HT DSSS/CCK mode in 40MHz", "wlan_mgt.ht.capabilities.dsscck",
15305 FT_BOOLEAN, 16, TFS (&ht_dss_cck_40_flag), 0x1000,
15306 "HT DSS/CCK mode in 40MHz", HFILL }},
15308 {&hf_ieee80211_ht_psmp,
15309 {"HT PSMP Support", "wlan_mgt.ht.capabilities.psmp",
15310 FT_BOOLEAN, 16, TFS (&ht_psmp_flag), 0x2000,
15313 {&hf_ieee80211_ht_40_mhz_intolerant,
15314 {"HT Forty MHz Intolerant", "wlan_mgt.ht.capabilities.40mhzintolerant",
15315 FT_BOOLEAN, 16, TFS (&ht_40_mhz_intolerant_flag), 0x4000,
15318 {&hf_ieee80211_ht_l_sig,
15319 {"HT L-SIG TXOP Protection support", "wlan_mgt.ht.capabilities.lsig",
15320 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x8000,
15323 {&hf_ieee80211_ampduparam,
15324 {"A-MPDU Parameters", "wlan_mgt.ht.ampduparam",
15325 FT_UINT8, BASE_HEX, NULL, 0,
15328 {&hf_ieee80211_ampduparam_vs,
15329 {"A-MPDU Parameters (VS)", "wlan_mgt.vs.ht.ampduparam",
15330 FT_UINT8, BASE_HEX, NULL, 0,
15331 "Vendor Specific A-MPDU Parameters", HFILL }},
15333 {&hf_ieee80211_ampduparam_mpdu,
15334 {"Maximum Rx A-MPDU Length", "wlan_mgt.ht.ampduparam.maxlength",
15335 FT_UINT8, BASE_HEX, 0, 0x03,
15338 {&hf_ieee80211_ampduparam_mpdu_start_spacing,
15339 {"MPDU Density", "wlan_mgt.ht.ampduparam.mpdudensity",
15340 FT_UINT8, BASE_HEX, VALS(&duparam_mpdu_start_spacing_flags), 0x1c,
15343 {&hf_ieee80211_ampduparam_reserved,
15344 {"Reserved", "wlan_mgt.ht.ampduparam.reserved",
15345 FT_UINT8, BASE_HEX, NULL, 0xE0,
15348 {&hf_ieee80211_mcsset,
15349 {"Rx Supported Modulation and Coding Scheme Set", "wlan_mgt.ht.mcsset",
15350 FT_STRING, BASE_NONE, NULL, 0,
15353 {&hf_ieee80211_mcsset_vs,
15354 {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan_mgt.vs.ht.mcsset",
15355 FT_STRING, BASE_NONE, NULL, 0,
15356 "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL }},
15358 {&hf_ieee80211_mcsset_rx_bitmask,
15359 {"Rx Modulation and Coding Scheme (One bit per modulation)", "wlan_mgt.ht.mcsset.rxbitmask",
15360 FT_NONE, BASE_NONE, NULL, 0,
15361 "One bit per modulation", HFILL }},
15363 {&hf_ieee80211_mcsset_rx_bitmask_0to7,
15364 {"Rx Bitmask Bits 0-7", "wlan_mgt.ht.mcsset.rxbitmask.0to7",
15365 FT_UINT32, BASE_HEX, 0, 0x000000ff,
15368 {&hf_ieee80211_mcsset_rx_bitmask_8to15,
15369 {"Rx Bitmask Bits 8-15", "wlan_mgt.ht.mcsset.rxbitmask.8to15",
15370 FT_UINT32, BASE_HEX, 0, 0x0000ff00,
15373 {&hf_ieee80211_mcsset_rx_bitmask_16to23,
15374 {"Rx Bitmask Bits 16-23", "wlan_mgt.ht.mcsset.rxbitmask.16to23",
15375 FT_UINT32, BASE_HEX, 0, 0x00ff0000,
15378 {&hf_ieee80211_mcsset_rx_bitmask_24to31,
15379 {"Rx Bitmask Bits 24-31", "wlan_mgt.ht.mcsset.rxbitmask.24to31",
15380 FT_UINT32, BASE_HEX, 0, 0xff000000,
15383 {&hf_ieee80211_mcsset_rx_bitmask_32,
15384 {"Rx Bitmask Bit 32", "wlan_mgt.ht.mcsset.rxbitmask.32",
15385 FT_UINT32, BASE_HEX, 0, 0x000001,
15388 {&hf_ieee80211_mcsset_rx_bitmask_33to38,
15389 {"Rx Bitmask Bits 33-38", "wlan_mgt.ht.mcsset.rxbitmask.33to38",
15390 FT_UINT32, BASE_HEX, 0, 0x00007e,
15393 {&hf_ieee80211_mcsset_rx_bitmask_39to52,
15394 {"Rx Bitmask Bits 39-52", "wlan_mgt.ht.mcsset.rxbitmask.39to52",
15395 FT_UINT32, BASE_HEX, 0, 0x1fff80,
15398 {&hf_ieee80211_mcsset_rx_bitmask_53to76,
15399 {"Rx Bitmask Bits 53-76", "wlan_mgt.ht.mcsset.rxbitmask.53to76",
15400 FT_UINT32, BASE_HEX, 0, 0x1fffffe0,
15403 {&hf_ieee80211_mcsset_highest_data_rate,
15404 {"Highest Supported Data Rate", "wlan_mgt.ht.mcsset.highestdatarate",
15405 FT_UINT16, BASE_HEX, 0, 0x03ff,
15408 {&hf_ieee80211_mcsset_tx_mcs_set_defined,
15409 {"Tx Supported MCS Set", "wlan_mgt.ht.mcsset.txsetdefined",
15410 FT_BOOLEAN, 16, TFS (&mcsset_tx_mcs_set_defined_flag), 0x0001,
15413 {&hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal,
15414 {"Tx and Rx MCS Set", "wlan_mgt.ht.mcsset.txrxmcsnotequal",
15415 FT_BOOLEAN, 16, TFS (&mcsset_tx_rx_mcs_set_not_equal_flag), 0x0002,
15418 {&hf_ieee80211_mcsset_tx_max_spatial_streams,
15419 {"Tx Maximum Number of Spatial Streams Supported", "wlan_mgt.ht.mcsset.txmaxss",
15420 FT_UINT16, BASE_HEX, VALS(mcsset_tx_max_spatial_streams_flags) , 0x000c,
15423 {&hf_ieee80211_mcsset_tx_unequal_modulation,
15424 {"Unequal Modulation", "wlan_mgt.ht.mcsset.txunequalmod",
15425 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0010,
15428 {&hf_ieee80211_htex_cap,
15429 {"HT Extended Capabilities", "wlan_mgt.htex.capabilities",
15430 FT_UINT16, BASE_HEX, NULL, 0,
15431 "HT Extended Capability information", HFILL }},
15433 {&hf_ieee80211_htex_vs_cap,
15434 {"HT Extended Capabilities (VS)", "wlan_mgt.vs.htex.capabilities",
15435 FT_UINT16, BASE_HEX, NULL, 0,
15436 "Vendor Specific HT Extended Capability information", HFILL }},
15438 {&hf_ieee80211_htex_pco,
15439 {"Transmitter supports PCO", "wlan_mgt.htex.capabilities.pco",
15440 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0001,
15443 {&hf_ieee80211_htex_transtime,
15444 {"Time needed to transition between 20MHz and 40MHz", "wlan_mgt.htex.capabilities.transtime",
15445 FT_UINT16, BASE_HEX, VALS(htex_transtime_flags), 0x0006,
15448 {&hf_ieee80211_htex_mcs,
15449 {"MCS Feedback capability", "wlan_mgt.htex.capabilities.mcs",
15450 FT_UINT16, BASE_HEX, VALS(htex_mcs_flags), 0x0300,
15453 {&hf_ieee80211_htex_htc_support,
15454 {"High Throughput", "wlan_mgt.htex.capabilities.htc",
15455 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0400,
15458 {&hf_ieee80211_htex_rd_responder,
15459 {"Reverse Direction Responder", "wlan_mgt.htex.capabilities.rdresponder",
15460 FT_BOOLEAN, 16, TFS (&tfs_supported_not_supported), 0x0800,
15463 {&hf_ieee80211_txbf,
15464 {"Transmit Beam Forming (TxBF) Capabilities", "wlan_mgt.txbf",
15465 FT_UINT16, BASE_HEX, NULL, 0,
15468 {&hf_ieee80211_txbf_vs,
15469 {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan_mgt.vs.txbf",
15470 FT_UINT16, BASE_HEX, NULL, 0,
15471 "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL }},
15473 {&hf_ieee80211_txbf_cap,
15474 {"Transmit Beamforming", "wlan_mgt.txbf.txbf",
15475 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000001,
15478 {&hf_ieee80211_txbf_rcv_ssc,
15479 {"Receive Staggered Sounding", "wlan_mgt.txbf.rxss",
15480 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000002,
15483 {&hf_ieee80211_txbf_tx_ssc,
15484 {"Transmit Staggered Sounding", "wlan_mgt.txbf.txss",
15485 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000004,
15488 {&hf_ieee80211_txbf_rcv_ndp,
15489 {"Receive Null Data packet (NDP)", "wlan_mgt.txbf.rxndp",
15490 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000008,
15493 {&hf_ieee80211_txbf_tx_ndp,
15494 {"Transmit Null Data packet (NDP)", "wlan_mgt.txbf.txndp",
15495 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000010,
15498 {&hf_ieee80211_txbf_impl_txbf,
15499 {"Implicit TxBF capable", "wlan_mgt.txbf.impltxbf",
15500 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000020,
15501 "Implicit Transmit Beamforming (TxBF) capable", HFILL }},
15503 {&hf_ieee80211_txbf_calib,
15504 {"Calibration", "wlan_mgt.txbf.calibration",
15505 FT_UINT32, BASE_HEX, VALS(txbf_calib_flag), 0x000000c0,
15508 {&hf_ieee80211_txbf_expl_csi,
15509 {"STA can apply TxBF using CSI explicit feedback", "wlan_mgt.txbf.csi",
15510 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000100,
15511 "Station can apply TxBF using CSI explicit feedback", HFILL }},
15513 {&hf_ieee80211_txbf_expl_uncomp_fm,
15514 {"STA can apply TxBF using uncompressed beamforming feedback matrix", "wlan_mgt.txbf.fm.uncompressed.tbf",
15515 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000200,
15516 "Station can apply TxBF using uncompressed beamforming feedback matrix", HFILL }},
15518 {&hf_ieee80211_txbf_expl_comp_fm,
15519 {"STA can apply TxBF using compressed beamforming feedback matrix", "wlan_mgt.txbf.fm.compressed.tbf",
15520 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000400,
15521 "Station can apply TxBF using compressed beamforming feedback matrix", HFILL }},
15523 {&hf_ieee80211_txbf_expl_bf_csi,
15524 {"Receiver can return explicit CSI feedback", "wlan_mgt.txbf.rcsi",
15525 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00001800,
15528 {&hf_ieee80211_txbf_expl_uncomp_fm_feed,
15529 {"Receiver can return explicit uncompressed Beamforming Feedback Matrix", "wlan_mgt.txbf.fm.uncompressed.rbf",
15530 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00006000,
15533 {&hf_ieee80211_txbf_expl_comp_fm_feed,
15534 {"STA can compress and use compressed Beamforming Feedback Matrix", "wlan_mgt.txbf.fm.compressed.bf",
15535 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00018000,
15536 "Station can compress and use compressed Beamforming Feedback Matrix", HFILL }},
15538 {&hf_ieee80211_txbf_min_group,
15539 {"Minimal grouping used for explicit feedback reports", "wlan_mgt.txbf.mingroup",
15540 FT_UINT32, BASE_HEX, VALS(txbf_min_group_flags), 0x00060000,
15543 {&hf_ieee80211_vht_cap,
15544 {"VHT Capabilities Info", "wlan_mgt.vht.capabilities",
15545 FT_UINT32, BASE_HEX, NULL, 0,
15546 "VHT Capabilities information", HFILL }},
15548 {&hf_ieee80211_vht_max_mpdu_length,
15549 {"Maximum MPDU Length", "wlan_mgt.vht.capabilities.maxmpdulength",
15550 FT_UINT32, BASE_HEX, VALS(vht_max_mpdu_length_flag), 0x00000003,
15553 {&hf_ieee80211_vht_supported_chan_width_set,
15554 {"Supported Channel Width Set", "wlan_mgt.vht.capabilities.supportedchanwidthset",
15555 FT_UINT32, BASE_HEX, VALS(vht_supported_chan_width_set_flag), 0x0000000c,
15558 {&hf_ieee80211_vht_rx_ldpc,
15559 {"Rx LDPC", "wlan_mgt.vht.capabilities.rxldpc",
15560 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000010,
15563 {&hf_ieee80211_vht_short_gi_for_80,
15564 {"Short GI for 80Mhz", "wlan_mgt.vht.capabilities.short80",
15565 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000020,
15568 {&hf_ieee80211_vht_short_gi_for_160,
15569 {"Short GI for 160Mhz and 80+80MHz", "wlan_mgt.vht.capabilities.short160",
15570 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000040,
15573 {&hf_ieee80211_vht_tx_stbc,
15574 {"Tx STBC", "wlan_mgt.vht.capabilities.txstbc",
15575 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000080,
15578 {&hf_ieee80211_vht_rx_stbc,
15579 {"Rx STBC", "wlan_mgt.vht.capabilities.rxstbc",
15580 FT_UINT32, BASE_HEX, VALS(vht_rx_stbc_flag), 0x00000700,
15583 {&hf_ieee80211_vht_su_beamformer_cap,
15584 {"SU Beam-former Capable", "wlan_mgt.vht.capabilities.subeamformer",
15585 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00000800,
15588 {&hf_ieee80211_vht_su_beamformee_cap,
15589 {"SU Beam-formee Capable", "wlan_mgt.vht.capabilities.subeamformee",
15590 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00001000,
15593 {&hf_ieee80211_vht_beamformer_antennas,
15594 {"Compressed Steering Number of Beamformer Antennas Supported", "wlan_mgt.vht.capabilities.beamformerants",
15595 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag), 0x0000e000,
15598 {&hf_ieee80211_vht_sounding_dimensions,
15599 {"Number of Sounding Dimensions", "wlan_mgt.vht.capabilities.soundingdimensions",
15600 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag), 0x00070000,
15603 {&hf_ieee80211_vht_mu_beamformer_cap,
15604 {"MU Beam-former Capable", "wlan_mgt.vht.capabilities.mubeamformer",
15605 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00080000,
15608 {&hf_ieee80211_vht_mu_beamformee_cap,
15609 {"MU Beam-formee Capable", "wlan_mgt.vht.capabilities.mubeamformee",
15610 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00100000,
15613 {&hf_ieee80211_vht_txop_ps,
15614 {"VHT TXOP PS", "wlan_mgt.vht.capabilities.vhttxopps",
15615 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00200000,
15618 {&hf_ieee80211_vht_var_htc_field,
15619 {"+HTC-VHT Capable (VHT variant HT Control field)", "wlan_mgt.vht.capabilities.vhthtc",
15620 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x00400000,
15623 {&hf_ieee80211_vht_max_ampdu,
15624 {"Max A-MPDU Length", "wlan_mgt.vht.capabilities.maxampdu",
15625 FT_UINT32, BASE_HEX, VALS(vht_max_ampdu_flag), 0x03800000,
15628 {&hf_ieee80211_vht_link_adaptation_cap,
15629 {"VHT Link Adaptation", "wlan_mgt.vht.capabilities.linkadapt",
15630 FT_UINT32, BASE_HEX, VALS(vht_link_adapt_flag), 0x0c000000,
15633 {&hf_ieee80211_vht_rx_pattern,
15634 {"Rx Antenna Pattern Consistency", "wlan_mgt.vht.capabilities.rxpatconsist",
15635 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x10000000,
15638 {&hf_ieee80211_vht_tx_pattern,
15639 {"Tx Antenna Pattern Consistency", "wlan_mgt.vht.capabilities.txpatconsist",
15640 FT_BOOLEAN, 32, TFS (&tfs_supported_not_supported), 0x20000000,
15643 {&hf_ieee80211_vht_reserv,
15644 {"Reserved", "wlan_mgt.vht.reserved",
15645 FT_BOOLEAN, 32, NULL, 0xc0000000,
15648 {&hf_ieee80211_vht_mcsset,
15649 {"VHT Supported MCS Set", "wlan_mgt.vht.mcsset",
15650 FT_NONE, BASE_NONE, NULL, 0,
15653 {&hf_ieee80211_vht_mcsset_rx_mcs_map,
15654 {"Rx MCS Map", "wlan_mgt.vht.mcsset.rxmcsmap",
15655 FT_UINT16, BASE_HEX, NULL, 0,
15658 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_0_ss,
15659 {"Rx SS 0", "wlan_mgt.vht.mcsset.rxmcsmap.ss0",
15660 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
15663 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
15664 {"Rx SS 1", "wlan_mgt.vht.mcsset.rxmcsmap.ss1",
15665 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
15668 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
15669 {"Rx SS 2", "wlan_mgt.vht.mcsset.rxmcsmap.ss2",
15670 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
15673 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
15674 {"Rx SS 3", "wlan_mgt.vht.mcsset.rxmcsmap.ss3",
15675 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
15678 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
15679 {"Rx SS 4", "wlan_mgt.vht.mcsset.rxmcsmap.ss4",
15680 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
15683 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
15684 {"Rx SS 5", "wlan_mgt.vht.mcsset.rxmcsmap.ss5",
15685 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
15688 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
15689 {"Rx SS 6", "wlan_mgt.vht.mcsset.rxmcsmap.ss6",
15690 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
15693 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
15694 {"Rx SS 7", "wlan_mgt.vht.mcsset.rxmcsmap.ss7",
15695 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
15698 {&hf_ieee80211_vht_mcsset_rx_highest_long_gi,
15699 {"Rx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan_mgt.vht.mcsset.rxhighestlonggirate",
15700 FT_UINT16, BASE_HEX, NULL, 0x1fff,
15703 {&hf_ieee80211_vht_mcsset_tx_mcs_map,
15704 {"Tx MCS Map", "wlan_mgt.vht.mcsset.txmcsmap",
15705 FT_UINT16, BASE_HEX, NULL, 0,
15708 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_0_ss,
15709 {"Tx SS 0", "wlan_mgt.vht.mcsset.txmcsmap.ss0",
15710 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
15713 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
15714 {"Tx SS 1", "wlan_mgt.vht.mcsset.txmcsmap.ss1",
15715 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
15718 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
15719 {"Tx SS 2", "wlan_mgt.vht.mcsset.txmcsmap.ss2",
15720 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
15723 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
15724 {"Tx SS 3", "wlan_mgt.vht.mcsset.txmcsmap.ss3",
15725 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
15728 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
15729 {"Tx SS 4", "wlan_mgt.vht.mcsset.txmcsmap.ss4",
15730 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
15733 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
15734 {"Tx SS 5", "wlan_mgt.vht.mcsset.txmcsmap.ss5",
15735 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
15738 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
15739 {"Tx SS 6", "wlan_mgt.vht.mcsset.txmcsmap.ss6",
15740 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
15743 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
15744 {"Tx SS 7", "wlan_mgt.vht.mcsset.txmcsmap.ss7",
15745 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
15748 {&hf_ieee80211_vht_mcsset_tx_highest_long_gi,
15749 {"Tx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan_mgt.vht.mcsset.txhighestlonggirate",
15750 FT_UINT16, BASE_HEX, NULL, 0x1fff,
15753 {&hf_ieee80211_vht_op,
15754 {"VHT Operation Info", "wlan_mgt.vht.op",
15755 FT_NONE, BASE_NONE, NULL, 0,
15758 {&hf_ieee80211_vht_op_channel_width,
15759 {"Channel Width", "wlan_mgt.vht.op.channelwidth",
15760 FT_UINT8, BASE_HEX, VALS(vht_op_channel_width_flag), 0,
15763 {&hf_ieee80211_vht_op_channel_center0,
15764 {"Channel Center Segment 0", "wlan_mgt.vht.op.channelcenter0",
15765 FT_UINT8, BASE_DEC, NULL, 0,
15768 {&hf_ieee80211_vht_op_channel_center1,
15769 {"Channel Center Segment 1", "wlan_mgt.vht.op.channelcenter1",
15770 FT_UINT8, BASE_DEC, NULL, 0,
15773 {&hf_ieee80211_vht_op_basic_mcs_map,
15774 {"Basic MCS Map", "wlan_mgt.vht.op.basicmcsmap",
15775 FT_UINT16, BASE_HEX, NULL, 0,
15778 {&hf_ieee80211_vht_op_max_basic_mcs_for_0_ss,
15779 {"Basic SS 0", "wlan_mgt.vht.op.basicmcsmap.ss0",
15780 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
15783 {&hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
15784 {"Basic SS 1", "wlan_mgt.vht.op.basicmcsmap.ss1",
15785 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
15788 {&hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
15789 {"Basic SS 2", "wlan_mgt.vht.op.basicmcsmap.ss2",
15790 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
15793 {&hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
15794 {"Basic SS 3", "wlan_mgt.vht.op.basicmcsmap.ss3",
15795 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
15798 {&hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
15799 {"Basic SS 4", "wlan_mgt.vht.op.basicmcsmap.ss4",
15800 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
15803 {&hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
15804 {"Basic SS 5", "wlan_mgt.vht.op.basicmcsmap.ss5",
15805 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
15808 {&hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
15809 {"Basic SS 6", "wlan_mgt.vht.op.basicmcsmap.ss6",
15810 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
15813 {&hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
15814 {"Basic SS 7", "wlan_mgt.vht.op.basicmcsmap.ss7",
15815 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
15818 {&hf_ieee80211_txbf_csi_num_bf_ant,
15819 {"Max antennae STA can support when CSI feedback required", "wlan_mgt.txbf.csinumant",
15820 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x00180000,
15821 "Max antennae station can support when CSI feedback required", HFILL }},
15823 {&hf_ieee80211_txbf_uncomp_sm_bf_ant,
15824 {"Max antennae STA can support when uncompressed Beamforming feedback required", "wlan_mgt.txbf.fm.uncompressed.maxant",
15825 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x00600000,
15826 "Max antennae station can support when uncompressed Beamforming feedback required", HFILL }},
15828 {&hf_ieee80211_txbf_comp_sm_bf_ant,
15829 {"Max antennae STA can support when compressed Beamforming feedback required", "wlan_mgt.txbf.fm.compressed.maxant",
15830 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x01800000,
15831 "Max antennae station can support when compressed Beamforming feedback required", HFILL }},
15833 {&hf_ieee80211_txbf_csi_max_rows_bf,
15834 {"Maximum number of rows of CSI explicit feedback", "wlan_mgt.txbf.csi.maxrows",
15835 FT_UINT32, BASE_HEX, VALS(txbf_csi_max_rows_bf_flags), 0x06000000,
15838 {&hf_ieee80211_txbf_chan_est,
15839 {"Maximum number of space time streams for which channel dimensions can be simultaneously estimated", "wlan_mgt.txbf.channelest",
15840 FT_UINT32, BASE_HEX, VALS(txbf_chan_est_flags), 0x18000000,
15843 {&hf_ieee80211_txbf_resrv,
15844 {"Reserved", "wlan_mgt.txbf.reserved",
15845 FT_UINT32, BASE_HEX, NULL, 0xe0000000,
15848 {&hf_ieee80211_hta_cc,
15849 {"HT Control Channel", "wlan_mgt.hta.control_channel",
15850 FT_UINT8, BASE_DEC, NULL, 0,
15853 {&hf_ieee80211_hta_cap,
15854 {"HT Additional Capabilities", "wlan_mgt.hta.capabilities",
15855 FT_UINT16, BASE_HEX, NULL, 0,
15856 "HT Additional Capability information", HFILL }},
15858 {&hf_ieee80211_hta_ext_chan_offset,
15859 {"Extension Channel Offset", "wlan_mgt.hta.capabilities.extchan",
15860 FT_UINT16, BASE_HEX, VALS(hta_ext_chan_offset_flag), 0x0003,
15863 {&hf_ieee80211_hta_rec_tx_width,
15864 {"Recommended Tx Channel Width", "wlan_mgt.hta.capabilities.rectxwidth",
15865 FT_BOOLEAN, 16, TFS (&hta_rec_tx_width_flag), 0x0004,
15866 "Recommended Transmit Channel Width", HFILL }},
15868 {&hf_ieee80211_hta_rifs_mode,
15869 {"Reduced Interframe Spacing (RIFS) Mode", "wlan_mgt.hta.capabilities.rifsmode",
15870 FT_BOOLEAN, 16, TFS (&hta_rifs_mode_flag), 0x0008,
15873 {&hf_ieee80211_hta_controlled_access,
15874 {"Controlled Access Only", "wlan_mgt.hta.capabilities.controlledaccess",
15875 FT_BOOLEAN, 16, TFS (&hta_controlled_access_flag), 0x0010,
15878 {&hf_ieee80211_hta_service_interval,
15879 {"Service Interval Granularity", "wlan_mgt.hta.capabilities.serviceinterval",
15880 FT_UINT16, BASE_HEX, VALS(hta_service_interval_flag), 0x00E0,
15883 {&hf_ieee80211_hta_operating_mode,
15884 {"Operating Mode", "wlan_mgt.hta.capabilities.operatingmode",
15885 FT_UINT16, BASE_HEX, VALS(hta_operating_mode_flag), 0x0003,
15888 {&hf_ieee80211_hta_non_gf_devices,
15889 {"Non Greenfield (GF) devices Present", "wlan_mgt.hta.capabilities.nongfdevices",
15890 FT_BOOLEAN, 16, TFS (&hta_non_gf_devices_flag), 0x0004,
15891 "on Greenfield (GF) devices Present", HFILL }},
15893 {&hf_ieee80211_hta_basic_stbc_mcs,
15894 {"Basic STB Modulation and Coding Scheme (MCS)", "wlan_mgt.hta.capabilities.",
15895 FT_UINT16, BASE_HEX, NULL , 0x007f,
15898 {&hf_ieee80211_hta_dual_stbc_protection,
15899 {"Dual Clear To Send (CTS) Protection", "wlan_mgt.hta.capabilities.",
15900 FT_BOOLEAN, 16, TFS (&hta_dual_stbc_protection_flag), 0x0080,
15903 {&hf_ieee80211_hta_secondary_beacon,
15904 {"Secondary Beacon", "wlan_mgt.hta.capabilities.",
15905 FT_BOOLEAN, 16, TFS (&hta_secondary_beacon_flag), 0x0100,
15908 {&hf_ieee80211_hta_lsig_txop_protection,
15909 {"L-SIG TXOP Protection Support", "wlan_mgt.hta.capabilities.",
15910 FT_BOOLEAN, 16, TFS (&hta_lsig_txop_protection_flag), 0x0200,
15913 {&hf_ieee80211_hta_pco_active,
15914 {"Phased Coexistence Operation (PCO) Active", "wlan_mgt.hta.capabilities.",
15915 FT_BOOLEAN, 16, TFS (&hta_pco_active_flag), 0x0400,
15918 {&hf_ieee80211_hta_pco_phase,
15919 {"Phased Coexistence Operation (PCO) Phase", "wlan_mgt.hta.capabilities.",
15920 FT_BOOLEAN, 16, TFS (&hta_pco_phase_flag), 0x0800,
15923 {&hf_ieee80211_antsel,
15924 {"Antenna Selection (ASEL) Capabilities", "wlan_mgt.asel",
15925 FT_UINT8, BASE_HEX, NULL, 0,
15928 {&hf_ieee80211_antsel_vs,
15929 {"Antenna Selection (ASEL) Capabilities (VS)", "wlan_mgt.vs.asel",
15930 FT_UINT8, BASE_HEX, NULL, 0,
15931 "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL }},
15933 {&hf_ieee80211_antsel_b0,
15934 {"Antenna Selection Capable", "wlan_mgt.asel.capable",
15935 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x01,
15938 {&hf_ieee80211_antsel_b1,
15939 {"Explicit CSI Feedback Based Tx ASEL", "wlan_mgt.asel.txcsi",
15940 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x02,
15943 {&hf_ieee80211_antsel_b2,
15944 {"Antenna Indices Feedback Based Tx ASEL", "wlan_mgt.asel.txif",
15945 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x04,
15948 {&hf_ieee80211_antsel_b3,
15949 {"Explicit CSI Feedback", "wlan_mgt.asel.csi",
15950 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x08,
15953 {&hf_ieee80211_antsel_b4,
15954 {"Antenna Indices Feedback", "wlan_mgt.asel.if",
15955 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x10,
15958 {&hf_ieee80211_antsel_b5,
15959 {"Rx ASEL", "wlan_mgt.asel.rx",
15960 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x20,
15963 {&hf_ieee80211_antsel_b6,
15964 {"Tx Sounding PPDUs", "wlan_mgt.asel.sppdu",
15965 FT_BOOLEAN, 8, TFS (&tfs_supported_not_supported), 0x40,
15968 {&hf_ieee80211_antsel_b7,
15969 {"Reserved", "wlan_mgt.asel.reserved",
15970 FT_UINT8, BASE_HEX, NULL, 0x80,
15973 {&hf_ieee80211_ht_info_delimiter1,
15974 {"HT Information Subset (1 of 3)", "wlan_mgt.ht.info.delim1",
15975 FT_UINT8, BASE_HEX, NULL, 0,
15978 {&hf_ieee80211_ht_info_primary_channel,
15979 {"Primary Channel", "wlan_mgt.ht.info.primarychannel",
15980 FT_UINT8, BASE_DEC, NULL, 0,
15983 {&hf_ieee80211_ht_info_secondary_channel_offset,
15984 {"Secondary channel offset", "wlan_mgt.ht.info.secchanoffset",
15985 FT_UINT8, BASE_HEX, VALS(ht_info_secondary_channel_offset_flags), 0x03,
15988 {&hf_ieee80211_ht_info_channel_width,
15989 {"Supported channel width", "wlan_mgt.ht.info.chanwidth",
15990 FT_BOOLEAN, 8, TFS (&ht_info_channel_width_flag), 0x04,
15993 {&hf_ieee80211_ht_info_rifs_mode,
15994 {"Reduced Interframe Spacing (RIFS)", "wlan_mgt.ht.info.rifs",
15995 FT_BOOLEAN, 8, TFS (&ht_info_rifs_mode_flag), 0x08,
15998 {&hf_ieee80211_ht_info_psmp_stas_only,
15999 {"Power Save Multi-Poll (PSMP) stations only", "wlan_mgt.ht.info.psmponly",
16000 FT_BOOLEAN, 8, TFS (&ht_info_psmp_stas_only_flag), 0x10,
16003 {&hf_ieee80211_ht_info_service_interval_granularity,
16004 {"Shortest service interval", "wlan_mgt.ht.info.",
16005 FT_UINT8, BASE_HEX, VALS(ht_info_service_interval_granularity_flags), 0xe0,
16008 {&hf_ieee80211_ht_info_delimiter2,
16009 {"HT Information Subset (2 of 3)", "wlan_mgt.ht.info.delim2",
16010 FT_UINT16, BASE_HEX, NULL, 0,
16013 {&hf_ieee80211_ht_info_operating_mode,
16014 {"Operating mode of BSS", "wlan_mgt.ht.info.operatingmode",
16015 FT_UINT16, BASE_HEX, VALS(ht_info_operating_mode_flags), 0x0003,
16018 {&hf_ieee80211_ht_info_non_greenfield_sta_present,
16019 {"Non-greenfield STAs present", "wlan_mgt.ht.info.greenfield",
16020 FT_BOOLEAN, 16, TFS (&ht_info_non_greenfield_sta_present_flag), 0x0004,
16023 {&hf_ieee80211_ht_info_transmit_burst_limit,
16024 {"Transmit burst limit", "wlan_mgt.ht.info.burstlim",
16025 FT_BOOLEAN, 16, TFS (&ht_info_transmit_burst_limit_flag), 0x0008,
16028 {&hf_ieee80211_ht_info_obss_non_ht_stas_present,
16029 {"OBSS non-HT STAs present", "wlan_mgt.ht.info.obssnonht",
16030 FT_BOOLEAN, 16, TFS (&ht_info_obss_non_ht_stas_present_flag), 0x0010,
16033 {&hf_ieee80211_ht_info_reserved_1,
16034 {"Reserved", "wlan_mgt.ht.info.reserved1",
16035 FT_UINT16, BASE_HEX, NULL, 0xffe0,
16038 {&hf_ieee80211_ht_info_delimiter3,
16039 {"HT Information Subset (3 of 3)", "wlan_mgt.ht.info.delim3",
16040 FT_UINT16, BASE_HEX, NULL, 0,
16043 {&hf_ieee80211_ht_info_reserved_2,
16044 {"Reserved", "wlan_mgt.ht.info.reserved2",
16045 FT_UINT16, BASE_HEX, NULL, 0x003f,
16048 {&hf_ieee80211_ht_info_dual_beacon,
16049 {"Dual beacon", "wlan_mgt.ht.info.dualbeacon",
16050 FT_BOOLEAN, 16, TFS (&ht_info_dual_beacon_flag), 0x0040,
16053 {&hf_ieee80211_ht_info_dual_cts_protection,
16054 {"Dual Clear To Send (CTS) protection", "wlan_mgt.ht.info.dualcts",
16055 FT_BOOLEAN, 16, TFS (&ht_info_dual_cts_protection_flag), 0x0080,
16058 {&hf_ieee80211_ht_info_secondary_beacon,
16059 {"Beacon ID", "wlan_mgt.ht.info.secondarybeacon",
16060 FT_BOOLEAN, 16, TFS (&ht_info_secondary_beacon_flag), 0x0100,
16063 {&hf_ieee80211_ht_info_lsig_txop_protection_full_support,
16064 {"L-SIG TXOP Protection Full Support", "wlan_mgt.ht.info.lsigprotsupport",
16065 FT_BOOLEAN, 16, TFS (&ht_info_lsig_txop_protection_full_support_flag), 0x0200,
16068 {&hf_ieee80211_ht_info_pco_active,
16069 {"Phased Coexistence Operation (PCO)", "wlan_mgt.ht.info.pco.active",
16070 FT_BOOLEAN, 16, TFS (&tfs_active_inactive), 0x0400,
16073 {&hf_ieee80211_ht_info_pco_phase,
16074 {"Phased Coexistence Operation (PCO) Phase", "wlan_mgt.ht.info.pco.phase",
16075 FT_BOOLEAN, 16, TFS (&ht_info_pco_phase_flag), 0x0800,
16078 {&hf_ieee80211_ht_info_reserved_3,
16079 {"Reserved", "wlan_mgt.ht.info.reserved3",
16080 FT_UINT16, BASE_HEX, NULL, 0xf000,
16083 {&hf_ieee80211_tag_ap_channel_report_regulatory_class,
16084 {"Regulatory Class", "wlan_mgt.ap_channel_report.regulatory_class",
16085 FT_UINT8, BASE_DEC, NULL, 0,
16088 {&hf_ieee80211_tag_ap_channel_report_channel_list,
16089 {"Channel List", "wlan_mgt.ap_channel_report.channel_list",
16090 FT_UINT8, BASE_DEC, NULL, 0,
16093 {&hf_ieee80211_tag_secondary_channel_offset,
16094 {"Secondary Channel Offset", "wlan_mgt.secchanoffset",
16095 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_secondary_channel_offset_flags), 0,
16098 {&hf_ieee80211_tag_power_constraint_local,
16099 {"Local Power Constraint", "wlan_mgt.powercon.local",
16100 FT_UINT8, BASE_DEC, NULL, 0,
16101 "Value that allows the mitigation requirements to be satisfied in the current channel", HFILL }},
16103 {&hf_ieee80211_tag_power_capability_min,
16104 {"Minimum Transmit Power", "wlan_mgt.powercap.min",
16105 FT_UINT8, BASE_HEX, NULL, 0,
16106 "The nominal minimum transmit power with which the STA is capable of transmitting in the current channel", HFILL }},
16108 {&hf_ieee80211_tag_power_capability_max,
16109 {"Maximum Transmit Power", "wlan_mgt.powercap.max",
16110 FT_UINT8, BASE_HEX, NULL, 0,
16111 "The nominal maximum transmit power with which the STA is capable of transmitting in the current channel", HFILL }},
16113 {&hf_ieee80211_tag_tpc_report_trsmt_pow,
16114 {"Transmit Power", "wlan_mgt.tcprep.trsmt_pow",
16115 FT_INT8, BASE_DEC, NULL, 0,
16118 {&hf_ieee80211_tag_tpc_report_link_mrg,
16119 {"Link Margin", "wlan_mgt.tcprep.link_mrg",
16120 FT_INT8, BASE_DEC, NULL, 0,
16123 {&hf_ieee80211_tag_supported_channels,
16124 {"Supported Channels Set", "wlan_mgt.supchan",
16125 FT_NONE, BASE_NONE, NULL, 0,
16128 {&hf_ieee80211_tag_supported_channels_first,
16129 {"First Supported Channel", "wlan_mgt.supchan.first",
16130 FT_UINT8, BASE_DEC, NULL, 0,
16133 {&hf_ieee80211_tag_supported_channels_range,
16134 {"Supported Channel Range", "wlan_mgt.supchan.range",
16135 FT_UINT8, BASE_DEC, NULL, 0,
16138 {&hf_ieee80211_csa_channel_switch_mode,
16139 {"Channel Switch Mode", "wlan_mgt.csa.channel_switch_mode",
16140 FT_UINT8, BASE_HEX, NULL, 0,
16141 "Indicates any restrictions on transmission until a channel switch", HFILL }},
16143 {&hf_ieee80211_csa_new_channel_number,
16144 {"New Channel Number", "wlan_mgt.csa.new_channel_number",
16145 FT_UINT8, BASE_HEX, NULL, 0,
16146 "Set to the number of the channel to which the STA is moving", HFILL }},
16148 {&hf_ieee80211_csa_channel_switch_count,
16149 {"Channel Switch Count", "wlan_mgt.csa.channel_switch_count",
16150 FT_UINT8, BASE_DEC, NULL, 0,
16151 "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 }},
16153 {&hf_ieee80211_tag_measure_request_token,
16154 {"Measurement Token", "wlan_mgt.measure.req.token",
16155 FT_UINT8, BASE_HEX, NULL, 0xff,
16158 {&hf_ieee80211_tag_measure_request_mode,
16159 {"Measurement Request Mode", "wlan_mgt.measure.req.mode",
16160 FT_UINT8, BASE_HEX, NULL, 0xff,
16163 {&hf_ieee80211_tag_measure_request_mode_parallel,
16164 {"Parallel", "wlan_mgt.measure.req.reqmode.parallel",
16165 FT_BOOLEAN, 8, NULL, 0x01,
16168 {&hf_ieee80211_tag_measure_request_mode_enable,
16169 {"Measurement Request Mode Field", "wlan_mgt.measure.req.reqmode.enable",
16170 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x02,
16173 {&hf_ieee80211_tag_measure_request_mode_request,
16174 {"Measurement Reports", "wlan_mgt.measure.req.reqmode.request",
16175 FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x04,
16178 {&hf_ieee80211_tag_measure_request_mode_report,
16179 {"Autonomous Measurement Reports", "wlan_mgt.measure.req.reqmode.report",
16180 FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x08,
16183 {&hf_ieee80211_tag_measure_request_mode_duration_mandatory,
16184 {"Duration Mandatory", "wlan_mgt.measure.req.reqmode.duration_mandatory",
16185 FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x10,
16188 {&hf_ieee80211_tag_measure_request_mode_reserved,
16189 {"Reserved", "wlan_mgt.measure.req.reqmode.reserved",
16190 FT_UINT8, BASE_HEX, NULL, 0xE0,
16193 {&hf_ieee80211_tag_measure_request_type,
16194 {"Measurement Request Type", "wlan_mgt.measure.req.reqtype",
16195 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_request_type_flags_ext, 0x00,
16198 {&hf_ieee80211_tag_measure_request_channel_number,
16199 {"Measurement Channel Number", "wlan_mgt.measure.req.channelnumber",
16200 FT_UINT8, BASE_HEX, NULL, 0,
16203 {&hf_ieee80211_tag_measure_request_start_time,
16204 {"Measurement Start Time", "wlan_mgt.measure.req.starttime",
16205 FT_UINT64, BASE_HEX, NULL, 0,
16208 {&hf_ieee80211_tag_measure_request_duration,
16209 {"Measurement Duration", "wlan_mgt.measure.req.channelnumber",
16210 FT_UINT16, BASE_HEX, NULL, 0,
16211 "in TU (1 TU = 1024 us)", HFILL }},
16213 {&hf_ieee80211_tag_measure_request_regulatory_class,
16214 {"Measurement Channel Number", "wlan_mgt.measure.req.regclass",
16215 FT_UINT8, BASE_HEX, NULL, 0,
16218 {&hf_ieee80211_tag_measure_request_randomization_interval,
16219 {"Randomization Interval", "wlan_mgt.measure.req.randint",
16220 FT_UINT16, BASE_HEX, NULL, 0,
16221 "in TU (1 TU = 1024 us)", HFILL }},
16223 {&hf_ieee80211_tag_measure_request_measurement_mode,
16224 {"Measurement Mode", "wlan_mgt.measure.req.measurementmode",
16225 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_measurement_mode_flags), 0,
16228 {&hf_ieee80211_tag_measure_request_bssid,
16229 {"BSSID", "wlan_mgt.measure.req.bssid",
16230 FT_ETHER, BASE_NONE, NULL, 0,
16233 {&hf_ieee80211_tag_measure_request_subelement_length,
16234 {"Length", "wlan_mgt.measure.req.sub.length",
16235 FT_UINT8, BASE_DEC, NULL, 0,
16238 {&hf_ieee80211_tag_measure_request_beacon_sub_id,
16239 {"SubElement ID", "wlan_mgt.measure.req.beacon.sub.id",
16240 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_beacon_sub_id_flags), 0,
16243 {&hf_ieee80211_tag_measure_request_beacon_sub_ssid,
16244 {"SSID", "wlan_mgt.measure.req.beacon.sub.ssid",
16245 FT_STRING, BASE_NONE, 0, 0,
16248 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition,
16249 {"Reporting Condition", "wlan_mgt.measure.req.beacon.sub.bri.repcond",
16250 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags), 0,
16253 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset,
16254 {"Threshold/Offset", "wlan_mgt.measure.req.beacon.sub.bri.threshold_offset",
16255 FT_UINT8, BASE_HEX, NULL, 0,
16258 {&hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail,
16259 {"Reporting Detail", "wlan_mgt.measure.req.beacon.sub.bri.reporting_detail",
16260 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags), 0,
16263 {&hf_ieee80211_tag_measure_request_beacon_sub_request,
16264 {"Request", "wlan_mgt.measure.req.beacon.sub.request",
16265 FT_UINT8, BASE_DEC, 0, 0,
16268 {&hf_ieee80211_tag_measure_request_beacon_unknown,
16269 {"Unknown Data", "wlan_mgt.measure.req.beacon.unknown",
16270 FT_BYTES, BASE_NONE, NULL, 0,
16271 "(not interpreted)", HFILL }},
16273 {&hf_ieee80211_tag_measure_request_frame_request_type,
16274 {"Frame Request Type", "wlan_mgt.measure.req.frame_request_type",
16275 FT_UINT8, BASE_HEX, NULL, 0,
16278 {&hf_ieee80211_tag_measure_request_mac_address,
16279 {"MAC Address", "wlan_mgt.measure.req.mac_address",
16280 FT_BYTES, BASE_NONE, NULL, 0,
16283 {&hf_ieee80211_tag_measure_request_peer_mac_address,
16284 {"Peer MAC Address", "wlan_mgt.measure.req.peer_mac_address",
16285 FT_BYTES, BASE_NONE, NULL, 0,
16288 {&hf_ieee80211_tag_measure_request_group_id,
16289 {"Group ID", "wlan_mgt.measure.req.groupid",
16290 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_request_group_id_flags_ext, 0,
16293 {&hf_ieee80211_tag_measure_report_measurement_token,
16294 {"Measurement Token", "wlan_mgt.measure.req.token",
16295 FT_UINT8, BASE_HEX, NULL, 0,
16298 {&hf_ieee80211_tag_measure_report_mode,
16299 {"Measurement Report Mode", "wlan_mgt.measure.req.mode",
16300 FT_UINT8, BASE_HEX, NULL, 0,
16303 {&hf_ieee80211_tag_measure_report_mode_late,
16304 {"Measurement Report Mode Field", "wlan_mgt.measure.rep.repmode.late",
16305 FT_BOOLEAN, 8, TFS (&tfs_enabled_disabled), 0x01,
16308 {&hf_ieee80211_tag_measure_report_mode_incapable,
16309 {"Measurement Reports", "wlan_mgt.measure.rep.repmode.incapable",
16310 FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x02,
16313 {&hf_ieee80211_tag_measure_report_mode_refused,
16314 {"Autonomous Measurement Reports", "wlan_mgt.measure.rep.repmode.refused",
16315 FT_BOOLEAN, 8, TFS (&tfs_accepted_not_accepted), 0x04,
16318 {&hf_ieee80211_tag_measure_report_mode_reserved,
16319 {"Reserved", "wlan_mgt.measure.rep.repmode.reserved",
16320 FT_UINT8, BASE_HEX, NULL, 0xf8,
16323 {&hf_ieee80211_tag_measure_report_type,
16324 {"Measurement Report Type", "wlan_mgt.measure.rep.reptype",
16325 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_report_type_flags_ext, 0x00,
16328 {&hf_ieee80211_tag_measure_report_channel_number,
16329 {"Measurement Channel Number", "wlan_mgt.measure.rep.channelnumber",
16330 FT_UINT8, BASE_HEX, NULL, 0,
16333 {&hf_ieee80211_tag_measure_report_start_time,
16334 {"Measurement Start Time", "wlan_mgt.measure.rep.starttime",
16335 FT_UINT64, BASE_HEX, NULL, 0,
16338 {&hf_ieee80211_tag_measure_report_duration,
16339 {"Measurement Duration", "wlan_mgt.measure.rep.channelnumber",
16340 FT_UINT16, BASE_HEX, NULL, 0,
16343 {&hf_ieee80211_tag_measure_cca_busy_fraction,
16344 {"CCA Busy Fraction", "wlan_mgt.measure.rep.ccabusy",
16345 FT_UINT8, BASE_HEX, NULL, 0,
16348 {&hf_ieee80211_tag_measure_basic_map_field,
16349 {"Map Field", "wlan_mgt.measure.rep.mapfield",
16350 FT_UINT8, BASE_HEX, NULL, 0,
16353 {&hf_ieee80211_tag_measure_map_field_bss,
16354 {"BSS", "wlan_mgt.measure.rep.repmode.mapfield.bss",
16355 FT_BOOLEAN, 8, TFS (&ieee80211_tag_measure_map_field_bss_flag), 0x01,
16358 {&hf_ieee80211_tag_measure_map_field_odfm,
16359 {"Orthogonal Frequency Division Multiplexing (ODFM) Preamble", "wlan_mgt.measure.rep.repmode.mapfield.bss",
16360 FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x02,
16363 {&hf_ieee80211_tag_measure_map_field_unident_signal,
16364 {"Unidentified Signal", "wlan_mgt.measure.rep.repmode.mapfield.unidentsig",
16365 FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x04,
16368 {&hf_ieee80211_tag_measure_map_field_radar,
16369 {"Radar", "wlan_mgt.measure.rep.repmode.mapfield.radar",
16370 FT_BOOLEAN, 8, TFS (&tfs_detected_not_detected), 0x08,
16373 {&hf_ieee80211_tag_measure_map_field_unmeasured,
16374 {"Unmeasured", "wlan_mgt.measure.rep.repmode.mapfield.unmeasured",
16375 FT_BOOLEAN, 8, TFS (&tfs_true_false), 0x10,
16378 {&hf_ieee80211_tag_measure_map_field_reserved,
16379 {"Reserved", "wlan_mgt.measure.rep.repmode.mapfield.reserved",
16380 FT_UINT8, BASE_HEX, NULL, 0xe0,
16383 {&hf_ieee80211_tag_measure_rpi_histogram_report,
16384 {"Receive Power Indicator (RPI) Histogram Report", "wlan_mgt.measure.rep.rpi.histogram_report",
16385 FT_BYTES, BASE_NONE, NULL, 0,
16388 {&hf_ieee80211_tag_measure_rpi_histogram_report_0,
16389 {"RPI 0 Density", "wlan_mgt.measure.rep.rpi.rpi0density",
16390 FT_UINT8, BASE_HEX, NULL, 0,
16391 "Receive Power Indicator (RPI) 0 Density", HFILL }},
16393 {&hf_ieee80211_tag_measure_rpi_histogram_report_1,
16394 {"RPI 1 Density", "wlan_mgt.measure.rep.rpi.rpi1density",
16395 FT_UINT8, BASE_HEX, NULL, 0,
16396 "Receive Power Indicator (RPI) 1 Density", HFILL }},
16398 {&hf_ieee80211_tag_measure_rpi_histogram_report_2,
16399 {"RPI 2 Density", "wlan_mgt.measure.rep.rpi.rpi2density",
16400 FT_UINT8, BASE_HEX, NULL, 0,
16401 "Receive Power Indicator (RPI) 2 Density", HFILL }},
16403 {&hf_ieee80211_tag_measure_rpi_histogram_report_3,
16404 {"RPI 3 Density", "wlan_mgt.measure.rep.rpi.rpi3density",
16405 FT_UINT8, BASE_HEX, NULL, 0,
16406 "Receive Power Indicator (RPI) 3 Density", HFILL }},
16408 {&hf_ieee80211_tag_measure_rpi_histogram_report_4,
16409 {"RPI 4 Density", "wlan_mgt.measure.rep.rpi.rpi4density",
16410 FT_UINT8, BASE_HEX, NULL, 0,
16411 "Receive Power Indicator (RPI) 4 Density", HFILL }},
16413 {&hf_ieee80211_tag_measure_rpi_histogram_report_5,
16414 {"RPI 5 Density", "wlan_mgt.measure.rep.rpi.rpi5density",
16415 FT_UINT8, BASE_HEX, NULL, 0,
16416 "Receive Power Indicator (RPI) 5 Density", HFILL }},
16418 {&hf_ieee80211_tag_measure_rpi_histogram_report_6,
16419 {"RPI 6 Density", "wlan_mgt.measure.rep.rpi.rpi6density",
16420 FT_UINT8, BASE_HEX, NULL, 0,
16421 "Receive Power Indicator (RPI) 6 Density", HFILL }},
16423 {&hf_ieee80211_tag_measure_rpi_histogram_report_7,
16424 {"RPI 7 Density", "wlan_mgt.measure.rep.rpi.rpi7density",
16425 FT_UINT8, BASE_HEX, NULL, 0,
16426 "Receive Power Indicator (RPI) 7 Density", HFILL }},
16428 {&hf_ieee80211_tag_measure_report_regulatory_class,
16429 {"Regulatory Class", "wlan_mgt.measure.rep.regclass",
16430 FT_UINT8, BASE_HEX, NULL, 0,
16433 {&hf_ieee80211_tag_measure_report_channel_load,
16434 {"Channel Load", "wlan_mgt.measure.rep.chanload",
16435 FT_UINT8, BASE_HEX, NULL, 0,
16438 {&hf_ieee80211_tag_measure_report_frame_info,
16439 {"Reported Frame Information", "wlan_mgt.measure.rep.frameinfo",
16440 FT_UINT8, BASE_HEX, NULL, 0,
16443 {&hf_ieee80211_tag_measure_report_frame_info_phy_type,
16444 {"Condensed PHY", "wlan_mgt.measure.rep.frameinfo.phytype",
16445 FT_UINT8, BASE_HEX, NULL, 0x7F,
16448 {&hf_ieee80211_tag_measure_report_frame_info_frame_type,
16449 {"Reported Frame Type", "wlan_mgt.measure.rep.frameinfo.frametype",
16450 FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_report_frame_info_frame_type_flag), 0x80,
16453 {&hf_ieee80211_tag_measure_report_rcpi,
16454 {"Received Channel Power Indicator (RCPI)", "wlan_mgt.measure.rep.rcpi",
16455 FT_UINT8, BASE_HEX, NULL, 0,
16456 "in dBm", HFILL }},
16458 {&hf_ieee80211_tag_measure_report_rsni,
16459 {"Received Signal to Noise Indicator (RSNI)", "wlan_mgt.measure.rep.rsni",
16460 FT_UINT8, BASE_HEX, NULL, 0,
16463 {&hf_ieee80211_tag_measure_report_bssid,
16464 {"BSSID Being Reported", "wlan_mgt.measure.rep.bssid",
16465 FT_ETHER, BASE_NONE, NULL, 0,
16468 {&hf_ieee80211_tag_measure_report_ant_id,
16469 {"Antenna ID", "wlan_mgt.measure.rep.antid",
16470 FT_UINT8, BASE_HEX, NULL, 0,
16473 {&hf_ieee80211_tag_measure_report_anpi,
16474 {"ANPI", "wlan_mgt.measure.rep.anpi",
16475 FT_UINT8, BASE_HEX, NULL, 0,
16478 {&hf_ieee80211_tag_measure_report_ipi_density_0,
16479 {"IPI Density 0", "wlan_mgt.measure.rep.ipi_density0",
16480 FT_UINT8, BASE_HEX, NULL, 0,
16483 {&hf_ieee80211_tag_measure_report_ipi_density_1,
16484 {"IPI Density 1", "wlan_mgt.measure.rep.ipi_density1",
16485 FT_UINT8, BASE_HEX, NULL, 0,
16488 {&hf_ieee80211_tag_measure_report_ipi_density_2,
16489 {"IPI Density 2", "wlan_mgt.measure.rep.ipi_density2",
16490 FT_UINT8, BASE_HEX, NULL, 0,
16493 {&hf_ieee80211_tag_measure_report_ipi_density_3,
16494 {"IPI Density 3", "wlan_mgt.measure.rep.ipi_density3",
16495 FT_UINT8, BASE_HEX, NULL, 0,
16498 {&hf_ieee80211_tag_measure_report_ipi_density_4,
16499 {"IPI Density 4", "wlan_mgt.measure.rep.ipi_density4",
16500 FT_UINT8, BASE_HEX, NULL, 0,
16503 {&hf_ieee80211_tag_measure_report_ipi_density_5,
16504 {"IPI Density 5", "wlan_mgt.measure.rep.ipi_density5",
16505 FT_UINT8, BASE_HEX, NULL, 0,
16508 {&hf_ieee80211_tag_measure_report_ipi_density_6,
16509 {"IPI Density 6", "wlan_mgt.measure.rep.ipi_density6",
16510 FT_UINT8, BASE_HEX, NULL, 0,
16513 {&hf_ieee80211_tag_measure_report_ipi_density_7,
16514 {"IPI Density 7", "wlan_mgt.measure.rep.ipi_density7",
16515 FT_UINT8, BASE_HEX, NULL, 0,
16518 {&hf_ieee80211_tag_measure_report_ipi_density_8,
16519 {"IPI Density 8", "wlan_mgt.measure.rep.ipi_density8",
16520 FT_UINT8, BASE_HEX, NULL, 0,
16523 {&hf_ieee80211_tag_measure_report_ipi_density_9,
16524 {"IPI Density 9", "wlan_mgt.measure.rep.ipi_density9",
16525 FT_UINT8, BASE_HEX, NULL, 0,
16528 {&hf_ieee80211_tag_measure_report_ipi_density_10,
16529 {"IPI Density 10", "wlan_mgt.measure.rep.ipi_density10",
16530 FT_UINT8, BASE_HEX, NULL, 0,
16533 {&hf_ieee80211_tag_measure_report_parent_tsf,
16534 {"Parent Timing Synchronization Function (TSF)", "wlan_mgt.measure.rep.parenttsf",
16535 FT_UINT32, BASE_HEX, NULL, 0,
16538 {&hf_ieee80211_tag_quiet_count,
16539 {"Count", "wlan_mgt.quiet.count",
16540 FT_UINT8, BASE_DEC, NULL, 0,
16541 "Set to the number of TBTTs until the beacon interval during which the next quiet interval shall start", HFILL }},
16543 {&hf_ieee80211_tag_quiet_period,
16544 {"Period", "wlan_mgt.quiet.period",
16545 FT_UINT8, BASE_DEC, NULL, 0,
16546 "Set to the number of beacon intervals between the start of regularly scheduled quiet intervals", HFILL }},
16548 {&hf_ieee80211_tag_quiet_duration,
16549 {"Duration", "wlan_mgt.quiet.duration",
16550 FT_UINT16, BASE_DEC, NULL, 0,
16551 "Set to the duration of the quiet interval", HFILL }},
16553 {&hf_ieee80211_tag_quiet_offset,
16554 {"Offset", "wlan_mgt.quiet.offset",
16555 FT_UINT16, BASE_DEC, NULL, 0,
16556 "Set to the offset of the start of the quiet interval from the TBTT", HFILL }},
16558 {&hf_ieee80211_tag_dfs_owner,
16559 {"Owner", "wlan_mgt.dfs.owner",
16560 FT_ETHER, BASE_NONE, NULL, 0,
16561 "Set to the individual IEEE MAC address of the STA that is the currently known DFS Owner in the IBSS", HFILL }},
16563 {&hf_ieee80211_tag_dfs_recovery_interval,
16564 {"Recovery Interval", "wlan_mgt.dfs.recovery_interval",
16565 FT_UINT8, BASE_DEC, NULL, 0,
16566 "Indicates the time interval that shall be used for DFS owner recovery", HFILL }},
16568 {&hf_ieee80211_tag_dfs_channel_map,
16569 {"Channel Map", "wlan_mgt.dfs.channel_map",
16570 FT_UINT16, BASE_HEX, NULL, 0,
16573 {&hf_ieee80211_tag_dfs_channel_number,
16574 {"Channel Number", "wlan_mgt.dfs.channel_number",
16575 FT_UINT8, BASE_DEC, NULL, 0,
16578 {&hf_ieee80211_tag_dfs_map,
16579 {"Map", "wlan_mgt.dfs.map",
16580 FT_UINT8, BASE_HEX, NULL, 0,
16583 {&hf_ieee80211_tag_erp_info,
16584 {"ERP Information", "wlan_mgt.erp_info",
16585 FT_UINT8, BASE_HEX, NULL, 0,
16588 {&hf_ieee80211_tag_erp_info_erp_present,
16589 {"Non ERP Present", "wlan_mgt.erp_info.erp_present",
16590 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x01,
16593 {&hf_ieee80211_tag_erp_info_use_protection,
16594 {"Use Protection", "wlan_mgt.erp_info.use_protection",
16595 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x02,
16598 {&hf_ieee80211_tag_erp_info_barker_preamble_mode,
16599 {"Barker Preamble Mode", "wlan_mgt.erp_info.barker_preamble_mode",
16600 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x04,
16603 {&hf_ieee80211_tag_erp_info_reserved,
16604 {"Reserved", "wlan_mgt.erp_info.reserved",
16605 FT_UINT8, BASE_HEX, NULL, 0xF8,
16608 /* Table 7-35a-Capabilities field */
16609 {&hf_ieee80211_tag_extended_capabilities,
16610 {"Extended Capabilities", "wlan_mgt.extcap",
16611 FT_UINT8, BASE_HEX, NULL, 0,
16614 /* P802.11n/D6.0 */
16615 /* Extended Capability octet 0 */
16616 {&hf_ieee80211_tag_extended_capabilities_b0,
16617 {"20/40 BSS Coexistence Management Support", "wlan_mgt.extcap.infoexchange.b0",
16618 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0001,
16619 "HT Information Exchange Support", HFILL }},
16621 /* P802.11p/D4.0 */
16622 {&hf_ieee80211_tag_extended_capabilities_b1,
16623 {"On-demand beacon", "wlan_mgt.extcap.infoexchange.b1",
16624 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0002,
16627 {&hf_ieee80211_tag_extended_capabilities_b2,
16628 {"Extended Channel Switching", "wlan_mgt.extcap.infoexchange.b2",
16629 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0004,
16632 {&hf_ieee80211_tag_extended_capabilities_b3,
16633 {"WAVE indication", "wlan_mgt.extcap.infoexchange.b3",
16634 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0008,
16636 /*End: P802.11p/D4.0 */
16638 {&hf_ieee80211_tag_extended_capabilities_b4,
16639 {"PSMP Capability", "wlan_mgt.extcap.infoexchange.b4",
16640 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0010,
16643 {&hf_ieee80211_tag_extended_capabilities_b6,
16644 {"S-PSMP Support", "wlan_mgt.extcap.infoexchange.b6",
16645 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0040,
16648 /* Extended Capability octet 3 */
16649 {&hf_ieee80211_tag_extended_capabilities_b27,
16650 {"UTC TSF Offset", "wlan_mgt.extcap.infoexchange.b27",
16651 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0008,
16654 {&hf_ieee80211_tag_extended_capabilities_b28,
16655 {"Peer U-APSD Buffer STA Support", "wlan_mgt.extcap.infoexchange.b28",
16656 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0010,
16659 {&hf_ieee80211_tag_extended_capabilities_b29,
16660 {"TDLS Peer PSM Support", "wlan_mgt.extcap.infoexchange.b29",
16661 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0020,
16664 {&hf_ieee80211_tag_extended_capabilities_b30,
16665 {"TDLS channel switching", "wlan_mgt.extcap.infoexchange.b30",
16666 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0040,
16669 {&hf_ieee80211_tag_extended_capabilities_b31,
16670 {"Interworking", "wlan_mgt.extcap.infoexchange.b31",
16671 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0080,
16674 /* Extended Capability octet 4 */
16675 {&hf_ieee80211_tag_extended_capabilities_b32,
16676 {"QoS Map", "wlan_mgt.extcap.infoexchange.b32",
16677 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0001,
16680 {&hf_ieee80211_tag_extended_capabilities_b33,
16681 {"EBR", "wlan_mgt.extcap.infoexchange.b33",
16682 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0002,
16685 {&hf_ieee80211_tag_extended_capabilities_b34,
16686 {"SSPN Interface", "wlan_mgt.extcap.infoexchange.b34",
16687 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0004,
16690 {&hf_ieee80211_tag_extended_capabilities_b36,
16691 {"MSGCF Capability", "wlan_mgt.extcap.infoexchange.b36",
16692 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0010,
16695 {&hf_ieee80211_tag_extended_capabilities_b37,
16696 {"TDLS support", "wlan_mgt.extcap.infoexchange.b37",
16697 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0020,
16700 {&hf_ieee80211_tag_extended_capabilities_b38,
16701 {"TDLS Prohibited", "wlan_mgt.extcap.infoexchange.b38",
16702 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0040,
16705 {&hf_ieee80211_tag_extended_capabilities_b39,
16706 {"TDLS Channel Switching Prohibited", "wlan_mgt.extcap.infoexchange.b39",
16707 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0080,
16710 /* Extended Capability octet 5 */
16711 {&hf_ieee80211_tag_extended_capabilities_b40,
16712 {"Reject Unadmitted Frame", "wlan_mgt.extcap.infoexchange.b40",
16713 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x0001,
16716 {&hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
16717 {"Service Interval Granularity",
16718 "wlan_mgt.extcap.infoexchange.serv_int_granularity",
16719 FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals), 0x000e,
16722 {&hf_ieee80211_tag_cisco_ccx1_unknown,
16723 {"Unknown", "wlan_mgt.cisco.ccx1.unknown",
16724 FT_BYTES, BASE_NONE, NULL, 0,
16727 {&hf_ieee80211_tag_cisco_ccx1_name,
16728 {"Name", "wlan_mgt.cisco.ccx1.name",
16729 FT_STRING, BASE_NONE, NULL, 0,
16732 {&hf_ieee80211_tag_cisco_ccx1_clients,
16733 {"Clients", "wlan_mgt.cisco.ccx1.clients",
16734 FT_UINT8, BASE_DEC, NULL, 0,
16737 {&hf_ieee80211_tag_neighbor_report_bssid,
16738 {"BSSID", "wlan_mgt.nreport.bssid",
16739 FT_ETHER, BASE_NONE, NULL, 0,
16742 {&hf_ieee80211_tag_neighbor_report_bssid_info,
16743 {"BSSID Information", "wlan_mgt.nreport.bssid.info",
16744 FT_UINT32, BASE_HEX, NULL, 0,
16747 {&hf_ieee80211_tag_neighbor_report_bssid_info_reachability,
16748 {"AP Reachability", "wlan_mgt.nreport.bssid.info.reachability",
16749 FT_UINT16, BASE_HEX, NULL, 0x0003,
16752 {&hf_ieee80211_tag_neighbor_report_bssid_info_security,
16753 {"Security", "wlan_mgt.nreport.bssid.info.security",
16754 FT_UINT16, BASE_HEX, NULL, 0x0004,
16757 {&hf_ieee80211_tag_neighbor_report_bssid_info_key_scope,
16758 {"Key Scope", "wlan_mgt.nreport.bssid.info.keyscope",
16759 FT_UINT16, BASE_HEX, NULL, 0x0008,
16762 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng,
16763 {"Capability: Spectrum Management", "wlan_mgt.nreport.bssid.info.capability.specmngt",
16764 FT_UINT16, BASE_HEX, NULL, 0x0010,
16767 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos,
16768 {"Capability: QoS", "wlan_mgt.nreport.bssid.info.capability.qos",
16769 FT_UINT16, BASE_HEX, NULL, 0x0020,
16772 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd,
16773 {"Capability: APSD", "wlan_mgt.nreport.bssid.info.capability.apsd",
16774 FT_UINT16, BASE_HEX, NULL, 0x0040,
16777 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt,
16778 {"Capability: Radio Measurement", "wlan_mgt.nreport.bssid.info.capability.radiomsnt",
16779 FT_UINT16, BASE_HEX, NULL, 0x0080,
16782 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback,
16783 {"Capability: Delayed Block Ack", "wlan_mgt.nreport.bssid.info.capability.dback",
16784 FT_UINT16, BASE_HEX, NULL, 0x0100,
16787 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback,
16788 {"Capability: Immediate Block Ack", "wlan_mgt.nreport.bssid.info.capability.iback",
16789 FT_UINT16, BASE_HEX, NULL, 0x0200,
16792 {&hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain,
16793 {"Mobility Domain", "wlan_mgt.nreport.bssid.info.mobilitydomain",
16794 FT_UINT16, BASE_HEX, NULL, 0x0400,
16797 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput,
16798 {"High Throughput", "wlan_mgt.nreport.bssid.info.hthoughput",
16799 FT_UINT16, BASE_HEX, NULL, 0x0800,
16802 {&hf_ieee80211_tag_neighbor_report_bssid_info_reserved,
16803 {"Reserved", "wlan_mgt.nreport.bssid.info.reserved",
16804 FT_UINT32, BASE_HEX, NULL, 0,
16807 {&hf_ieee80211_tag_neighbor_report_reg_class,
16808 {"Regulatory Class", "wlan_mgt.nreport.regclass",
16809 FT_UINT8, BASE_HEX, NULL, 0,
16812 {&hf_ieee80211_tag_neighbor_report_channel_number,
16813 {"Channel Number", "wlan_mgt.nreport.channumber",
16814 FT_UINT8, BASE_HEX, NULL, 0,
16817 {&hf_ieee80211_tag_neighbor_report_phy_type,
16818 {"PHY Type", "wlan_mgt.nreport.phytype",
16819 FT_UINT8, BASE_HEX, NULL, 0,
16822 {&hf_ieee80211_tag_supported_reg_classes_current,
16823 {"Current Regulatory Class", "wlan_mgt.supregclass.current",
16824 FT_UINT8, BASE_HEX, NULL, 0,
16827 {&hf_ieee80211_tag_supported_reg_classes_alternate,
16828 {"Alternate Regulatory Classes", "wlan_mgt.supregclass.alt",
16829 FT_STRING, BASE_NONE, NULL, 0,
16832 {&hf_ieee80211_wfa_ie_type,
16833 {"Type", "wlan_mgt.wfa.ie.type",
16834 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals), 0,
16837 {&hf_ieee80211_wfa_ie_wpa_version,
16838 {"WPA Version", "wlan_mgt.wfa.ie.wpa.version",
16839 FT_UINT16, BASE_DEC, NULL, 0,
16842 {&hf_ieee80211_wfa_ie_wpa_mcs,
16843 {"Multicast Cipher Suite", "wlan_mgt.wfa.ie.wpa.mcs",
16844 FT_UINT32, BASE_CUSTOM, wpa_mcs_base_custom, 0,
16845 "Contains the cipher suite selector used by the BSS to protect broadcast/multicasttraffic", HFILL }},
16847 {&hf_ieee80211_wfa_ie_wpa_mcs_oui,
16848 {"Multicast Cipher Suite OUI", "wlan_mgt.wfa.ie.wpa.mcs.oui",
16849 FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
16852 {&hf_ieee80211_wfa_ie_wpa_mcs_type,
16853 {"Multicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.mcs.type",
16854 FT_UINT8, BASE_DEC, NULL, 0,
16857 {&hf_ieee80211_wfa_ie_wpa_mcs_wfa_type,
16858 {"Multicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.mcs.type",
16859 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0,
16862 {&hf_ieee80211_wfa_ie_wpa_ucs_count,
16863 {"Unicast Cipher Suite Count", "wlan_mgt.wfa.ie.wpa.ucs.count",
16864 FT_UINT16, BASE_DEC, NULL, 0,
16865 "Indicates the number of pairwise cipher suite selectors that are contained in the Unicast Cipher Suite List", HFILL }},
16867 {&hf_ieee80211_wfa_ie_wpa_ucs_list,
16868 {"Unicast Cipher Suite List", "wlan_mgt.wfa.ie.wpa.ucs.list",
16869 FT_NONE, BASE_NONE, NULL, 0,
16870 "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL }},
16872 {&hf_ieee80211_wfa_ie_wpa_ucs,
16873 {"Unicast Cipher Suite", "wlan_mgt.wfa.ie.wpa.ucs",
16874 FT_UINT32, BASE_CUSTOM, wpa_ucs_base_custom, 0,
16877 {&hf_ieee80211_wfa_ie_wpa_ucs_oui,
16878 {"Unicast Cipher Suite OUI", "wlan_mgt.wfa.ie.wpau.cs.oui",
16879 FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
16882 {&hf_ieee80211_wfa_ie_wpa_ucs_type,
16883 {"Unicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.ucs.type",
16884 FT_UINT8, BASE_DEC, NULL, 0,
16887 {&hf_ieee80211_wfa_ie_wpa_ucs_wfa_type,
16888 {"Unicast Cipher Suite type", "wlan_mgt.wfa.ie.wpa.ucs.type",
16889 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0,
16892 {&hf_ieee80211_wfa_ie_wpa_akms_count,
16893 {"Auth Key Management (AKM) Suite Count", "wlan_mgt.wfa.ie.wpa.akms.count",
16894 FT_UINT16, BASE_DEC, NULL, 0,
16895 "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
16897 {&hf_ieee80211_wfa_ie_wpa_akms_list,
16898 {"Auth Key Management (AKM) List", "wlan_mgt.wfa.ie.wpa.akms.list",
16899 FT_NONE, BASE_NONE, NULL, 0,
16900 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
16902 {&hf_ieee80211_wfa_ie_wpa_akms,
16903 {"Auth Key Management (AKM) Suite", "wlan_mgt.wfa.ie.wpa.akms",
16904 FT_UINT32, BASE_CUSTOM, wpa_akms_base_custom, 0,
16907 {&hf_ieee80211_wfa_ie_wpa_akms_oui,
16908 {"Auth Key Management (AKM) OUI", "wlan_mgt.wfa.ie.wpa.akms.oui",
16909 FT_UINT24, BASE_CUSTOM, oui_base_custom, 0,
16912 {&hf_ieee80211_wfa_ie_wpa_akms_type,
16913 {"Auth Key Management (AKM) type", "wlan_mgt.wfa.ie.wpa.akms.type",
16914 FT_UINT8, BASE_DEC, NULL, 0,
16917 {&hf_ieee80211_wfa_ie_wpa_akms_wfa_type,
16918 {"Auth Key Management (AKM) type", "wlan_mgt.wfa.ie.wpa.type",
16919 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_keymgmt_vals), 0,
16922 {&hf_ieee80211_wfa_ie_wme_subtype,
16923 {"WME Subtype", "wlan_mgt.wfa.ie.wme.subtype",
16924 FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type), 0,
16927 {&hf_ieee80211_wfa_ie_wme_version,
16928 {"WME Version", "wlan_mgt.wfa.ie.wme.version",
16929 FT_UINT8, BASE_DEC, NULL, 0,
16932 {&hf_ieee80211_wfa_ie_wme_qos_info,
16933 {"WME QoS Info", "wlan_mgt.wfa.ie.wme.qos_info",
16934 FT_UINT8, BASE_HEX, NULL, 0,
16937 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
16938 {"Max SP Length", "wlan_mgt.wfa.ie.wme.qos_info.sta.max_sp_length",
16939 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals), 0x60,
16942 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
16943 {"AC_BE", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_be",
16944 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x08,
16947 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
16948 {"AC_BK", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_bk",
16949 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x04,
16952 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
16953 {"AC_VI", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_vi",
16954 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x02,
16957 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
16958 {"AC_VO", "wlan_mgt.wfa.ie.wme.qos_info.sta.ac_vo",
16959 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x01,
16962 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
16963 {"Reserved", "wlan_mgt.wfa.ie.wme.qos_info.sta.reserved",
16964 FT_UINT8, BASE_HEX, NULL, 0x90,
16965 "Must Be Zero", HFILL }},
16967 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
16968 {"U-APSD", "wlan_mgt.wfa.ie.wme.qos_info.ap.u_apsd",
16969 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
16970 "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL }},
16972 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
16973 {"Parameter Set Count", "wlan_mgt.wfa.ie.wme.qos_info.ap.parameter_set_count",
16974 FT_UINT8, BASE_HEX, NULL, 0x0F,
16977 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
16978 {"Reserved", "wlan_mgt.wfa.ie.wme.qos_info.ap.reserved",
16979 FT_UINT8, BASE_HEX, NULL, 0x70,
16980 "Must Be Zero", HFILL }},
16982 {&hf_ieee80211_wfa_ie_wme_reserved,
16983 {"Reserved", "wlan_mgt.wfa.ie.wme.reserved",
16984 FT_BYTES, BASE_NONE, NULL, 0,
16985 "Must Be Zero", HFILL }},
16987 {&hf_ieee80211_wfa_ie_wme_ac_parameters,
16988 {"Ac Parameters", "wlan_mgt.wfa.ie.wme.acp",
16989 FT_NONE, BASE_NONE, NULL, 0,
16992 {&hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
16993 {"ACI / AIFSN Field", "wlan_mgt.wfa.ie.wme.acp.aci_aifsn",
16994 FT_UINT8, BASE_HEX, NULL, 0,
16997 {&hf_ieee80211_wfa_ie_wme_acp_aci,
16998 {"ACI", "wlan_mgt.wfa.ie.wme.acp.aci",
16999 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals), 0x60,
17002 {&hf_ieee80211_wfa_ie_wme_acp_acm,
17003 {"Admission Control Mandatory", "wlan_mgt.wfa.ie.wme.acp.aci",
17004 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
17007 {&hf_ieee80211_wfa_ie_wme_acp_aifsn,
17008 {"AIFSN", "wlan_mgt.wfa.ie.wme.acp.aifsn",
17009 FT_UINT8, BASE_DEC, NULL, 0x0F,
17012 {&hf_ieee80211_wfa_ie_wme_acp_reserved,
17013 {"Reserved", "wlan_mgt.wfa.ie.wme.acp.reserved",
17014 FT_UINT8, BASE_DEC, NULL, 0x80,
17015 "Must be Zero", HFILL }},
17017 {&hf_ieee80211_wfa_ie_wme_acp_ecw,
17018 {"ECW", "wlan_mgt.wfa.ie.wme.acp.ecw",
17019 FT_UINT8, BASE_HEX, NULL, 0x00,
17022 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max,
17023 {"ECW Max", "wlan_mgt.wfa.ie.wme.acp.ecw.max",
17024 FT_UINT8, BASE_DEC, NULL, 0xF0,
17027 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min,
17028 {"ECW Min", "wlan_mgt.wfa.ie.wme.acp.ecw.min",
17029 FT_UINT8, BASE_DEC, NULL, 0x0F,
17032 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit,
17033 {"TXOP Limit", "wlan_mgt.wfa.ie.wme.acp.txop_limit",
17034 FT_UINT16, BASE_DEC, NULL, 0x00,
17037 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
17038 {"TS Info", "wlan_mgt.wfa.ie.wme.tspec.ts_info",
17039 FT_UINT24, BASE_HEX, NULL, 0,
17040 "Traffic Stream (TS) Info", HFILL }},
17042 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
17043 {"TID", "wlan_mgt.wfa.ie.wme.tspec.ts_info.tid",
17044 FT_UINT24, BASE_DEC, NULL, 0x00001E,
17045 "Traffic Stream Info ID (TID)", HFILL }},
17047 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
17048 {"Direction", "wlan_mgt.wfa.ie.wme.tspec.ts_info.dir",
17049 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals), 0x000060,
17050 "Traffic Stream (TS) Info Direction", HFILL }},
17052 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
17053 {"PSB", "wlan_mgt.wfa.ie.wme.tspec.ts_info.psb",
17054 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals), 0x000400,
17055 "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL }},
17057 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
17058 {"UP", "wlan_mgt.wfa.ie.wme.tspec.ts_info.up",
17059 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals), 0x003800,
17060 "Traffic Stream (TS) Info User Priority (UP)", HFILL }},
17062 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
17063 {"Reserved", "wlan_mgt.wfa.ie.wme.tspec.ts_info.reserved",
17064 FT_UINT24, BASE_HEX, NULL, 0xFFC381,
17065 "Must be Zero", HFILL }},
17067 {&hf_ieee80211_wfa_ie_wme_tspec_nor_msdu,
17068 {"Normal MSDU Size", "wlan_mgt.wfa.ie.wme.tspec.nor_msdu",
17069 FT_UINT16, BASE_DEC, NULL, 0,
17072 {&hf_ieee80211_wfa_ie_wme_tspec_max_msdu,
17073 {"Maximum MSDU Size", "wlan_mgt.wfa.ie.wme.tspec.max_msdu",
17074 FT_UINT16, BASE_DEC, NULL, 0,
17077 {&hf_ieee80211_wfa_ie_wme_tspec_min_srv,
17078 {"Minimum Service Interval", "wlan_mgt.wfa.ie.wme.tspec.min_srv",
17079 FT_UINT32, BASE_DEC, NULL, 0,
17082 {&hf_ieee80211_wfa_ie_wme_tspec_max_srv,
17083 {"Maximum Service Interval", "wlan_mgt.wfa.ie.wme.tspec.max_srv",
17084 FT_UINT32, BASE_DEC, NULL, 0,
17087 {&hf_ieee80211_wfa_ie_wme_tspec_inact_int,
17088 {"Inactivity Interval", "wlan_mgt.wfa.ie.wme.tspec.inact_int",
17089 FT_UINT32, BASE_DEC, NULL, 0,
17092 {&hf_ieee80211_wfa_ie_wme_tspec_susp_int,
17093 {"Suspension Interval", "wlan_mgt.wfa.ie.wme.tspec.susp_int",
17094 FT_UINT32, BASE_DEC, NULL, 0,
17097 {&hf_ieee80211_wfa_ie_wme_tspec_srv_start,
17098 {"Service Start Time", "wlan_mgt.wfa.ie.wme.tspec.srv_start",
17099 FT_UINT32, BASE_DEC, NULL, 0,
17102 {&hf_ieee80211_wfa_ie_wme_tspec_min_data,
17103 {"Minimum Data Rate", "wlan_mgt.wfa.ie.wme.tspec.min_data",
17104 FT_UINT32, BASE_DEC, NULL, 0,
17107 {&hf_ieee80211_wfa_ie_wme_tspec_mean_data,
17108 {"Mean Data Rate", "wlan_mgt.wfa.ie.wme.tspec.mean_data",
17109 FT_UINT32, BASE_DEC, NULL, 0,
17112 {&hf_ieee80211_wfa_ie_wme_tspec_peak_data,
17113 {"Peak Data Rate", "wlan_mgt.wfa.ie.wme.tspec.peak_data",
17114 FT_UINT32, BASE_DEC, NULL, 0,
17117 {&hf_ieee80211_wfa_ie_wme_tspec_burst_size,
17118 {"Burst Size", "wlan_mgt.wfa.ie.wme.tspec.burst_size",
17119 FT_UINT32, BASE_DEC, NULL, 0,
17122 {&hf_ieee80211_wfa_ie_wme_tspec_delay_bound,
17123 {"Delay Bound", "wlan_mgt.wfa.ie.wme.tspec.delay_bound",
17124 FT_UINT32, BASE_DEC, NULL, 0,
17127 {&hf_ieee80211_wfa_ie_wme_tspec_min_phy,
17128 {"Minimum PHY Rate", "wlan_mgt.wfa.ie.wme.tspec.min_phy",
17129 FT_UINT32, BASE_DEC, NULL, 0,
17132 {&hf_ieee80211_wfa_ie_wme_tspec_surplus,
17133 {"Surplus Bandwidth Allowance", "wlan_mgt.wfa.ie.wme.tspec.surplus",
17134 FT_UINT16, BASE_DEC, NULL, 0,
17137 {&hf_ieee80211_wfa_ie_wme_tspec_medium,
17138 {"Medium Time", "wlan_mgt.wfa.ie.wme.tspec.medium",
17139 FT_UINT16, BASE_DEC, NULL, 0,
17142 {&hf_ieee80211_marvell_ie_type,
17143 {"Type", "wlan_mgt.marvell.ie.type",
17144 FT_UINT8, BASE_HEX, NULL, 0,
17147 {&hf_ieee80211_marvell_ie_mesh_subtype,
17148 {"Subtype", "wlan_mgt.marvell.ie.subtype",
17149 FT_UINT8, BASE_HEX, NULL, 0,
17152 {&hf_ieee80211_marvell_ie_mesh_version,
17153 {"Version", "wlan_mgt.marvell.ie.version",
17154 FT_UINT8, BASE_HEX, NULL, 0,
17157 {&hf_ieee80211_marvell_ie_mesh_active_proto_id,
17158 {"Path Selection Protocol", "wlan_mgt.marvell.ie.proto_id",
17159 FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes), 0,
17162 {&hf_ieee80211_marvell_ie_mesh_active_metric_id,
17163 {"Path Selection Metric", "wlan_mgt.marvell.ie.metric_id",
17164 FT_UINT8, BASE_HEX, VALS(mesh_metric_codes), 0,
17167 {&hf_ieee80211_marvell_ie_mesh_cap,
17168 {"Mesh Capabilities", "wlan_mgt.marvell.ie.cap",
17169 FT_UINT8, BASE_HEX, NULL, 0,
17172 {&hf_ieee80211_marvell_ie_data,
17173 { "Marvell IE data", "wlan_mgt.marvell.data",
17174 FT_BYTES, BASE_NONE, NULL, 0x0,
17177 {&hf_ieee80211_atheros_ie_type,
17178 {"Type", "wlan_mgt.atheros.ie.type",
17179 FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals), 0,
17182 {&hf_ieee80211_atheros_ie_subtype,
17183 {"Subtype", "wlan_mgt.atheros.ie.subtype",
17184 FT_UINT8, BASE_HEX, NULL, 0,
17187 {&hf_ieee80211_atheros_ie_version,
17188 {"Version", "wlan_mgt.atheros.ie.version",
17189 FT_UINT8, BASE_HEX, NULL, 0,
17192 {&hf_ieee80211_atheros_ie_cap_f_turbop,
17193 {"Turbo Prime", "wlan_mgt.ie.atheros.capabilities.turbop",
17194 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_TURBOP,
17197 {&hf_ieee80211_atheros_ie_cap_f_comp,
17198 {"Compression", "wlan_mgt.ie.atheros.capabilities.comp",
17199 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_COMP,
17202 {&hf_ieee80211_atheros_ie_cap_f_ff,
17203 {"Fast Frames", "wlan_mgt.ie.atheros.capabilities.ff",
17204 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_FF,
17207 {&hf_ieee80211_atheros_ie_cap_f_xr,
17208 {"eXtended Range", "wlan_mgt.ie.atheros.capabilities.xr",
17209 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_XR,
17212 {&hf_ieee80211_atheros_ie_cap_f_ar,
17213 {"Advanced Radar", "wlan_mgt.ie.atheros.capabilities.ar",
17214 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_AR,
17217 {&hf_ieee80211_atheros_ie_cap_f_burst,
17218 {"Burst", "wlan_mgt.ie.atheros.capabilities.burst",
17219 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BURST,
17222 {&hf_ieee80211_atheros_ie_cap_f_wme,
17223 {"CWMin tuning", "wlan_mgt.ie.atheros.capabilities.wme",
17224 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_WME,
17227 {&hf_ieee80211_atheros_ie_cap_f_boost,
17228 {"Boost", "wlan_mgt.ie.atheros.capabilities.boost",
17229 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BOOST,
17232 {&hf_ieee80211_atheros_ie_advcap_cap,
17233 {"Capabilities", "wlan_mgt.atheros.ie.advcap.cap",
17234 FT_UINT8, BASE_HEX, NULL, 0,
17237 {&hf_ieee80211_atheros_ie_advcap_defkey,
17238 {"Default key index", "wlan_mgt.atheros.ie.advcap.defkey",
17239 FT_UINT16, BASE_HEX, NULL, 0,
17242 {&hf_ieee80211_atheros_ie_xr_info,
17243 {"Info", "wlan_mgt.atheros.ie.xr.info",
17244 FT_UINT8, BASE_HEX, NULL, 0,
17247 {&hf_ieee80211_atheros_ie_xr_base_bssid,
17248 {"Base BSS Id", "wlan_mgt.atheros.ie.xr.base_bssid",
17249 FT_ETHER, BASE_NONE, NULL, 0,
17252 {&hf_ieee80211_atheros_ie_xr_xr_bssid,
17253 {"XR BSS Id", "wlan_mgt.atheros.ie.xr.xr_bssid",
17254 FT_ETHER, BASE_NONE, NULL, 0,
17257 {&hf_ieee80211_atheros_ie_xr_xr_beacon,
17258 {"XR Beacon Interval", "wlan_mgt.atheros.ie.xr.xr_beacon",
17259 FT_UINT32, BASE_CUSTOM, beacon_interval_base_custom, 0,
17262 {&hf_ieee80211_atheros_ie_xr_base_cap,
17263 {"Base capabilities", "wlan_mgt.atheros.ie.xr.base_cap",
17264 FT_UINT8, BASE_HEX, NULL, 0,
17267 {&hf_ieee80211_atheros_ie_xr_xr_cap,
17268 {"XR capabilities", "wlan_mgt.atheros.ie.xr.xr_cap",
17269 FT_UINT8, BASE_HEX, NULL, 0,
17272 {&hf_ieee80211_atheros_ie_data,
17273 {"Atheros IE data", "wlan_mgt.atheros.data",
17274 FT_BYTES, BASE_NONE, NULL, 0,
17277 {&hf_ieee80211_aironet_ie_type,
17278 {"Aironet IE type", "wlan_mgt.aironet.type",
17279 FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals), 0,
17282 {&hf_ieee80211_aironet_ie_version,
17283 {"Aironet IE CCX version?", "wlan_mgt.aironet.version",
17284 FT_UINT8, BASE_DEC, NULL, 0,
17287 {&hf_ieee80211_aironet_ie_data,
17288 { "Aironet IE data", "wlan_mgt.aironet.data",
17289 FT_BYTES, BASE_NONE, NULL, 0x0,
17292 {&hf_ieee80211_qbss_version,
17293 {"QBSS Version", "wlan_mgt.qbss.version",
17294 FT_UINT8, BASE_DEC, NULL, 0,
17297 {&hf_ieee80211_qbss_scount,
17298 {"Station Count", "wlan_mgt.qbss.scount",
17299 FT_UINT16, BASE_DEC, NULL, 0,
17302 {&hf_ieee80211_qbss_cu,
17303 {"Channel Utilization", "wlan_mgt.qbss.cu",
17304 FT_UINT8, BASE_DEC, NULL, 0,
17307 {&hf_ieee80211_qbss_adc,
17308 {"Available Admission Capabilities", "wlan_mgt.qbss.adc",
17309 FT_UINT8, BASE_DEC, NULL, 0,
17312 {&hf_ieee80211_qbss2_cu,
17313 {"Channel Utilization", "wlan_mgt.qbss2.cu",
17314 FT_UINT8, BASE_DEC, NULL, 0,
17317 {&hf_ieee80211_qbss2_gl,
17318 {"G.711 CU Quantum", "wlan_mgt.qbss2.glimit",
17319 FT_UINT8, BASE_DEC, NULL, 0,
17322 {&hf_ieee80211_qbss2_cal,
17323 {"Call Admission Limit", "wlan_mgt.qbss2.cal",
17324 FT_UINT8, BASE_DEC, NULL, 0,
17327 {&hf_ieee80211_qbss2_scount,
17328 {"Station Count", "wlan_mgt.qbss2.scount",
17329 FT_UINT16, BASE_DEC, NULL, 0,
17332 {&hf_ieee80211_aironet_ie_qos_unk1,
17333 {"Aironet IE QoS unknown 1", "wlan_mgt.aironet.qos.unk1",
17334 FT_UINT8, BASE_HEX, NULL, 0,
17337 {&hf_ieee80211_aironet_ie_qos_paramset,
17338 {"Aironet IE QoS paramset", "wlan_mgt.aironet.qos.paramset",
17339 FT_UINT8, BASE_DEC, NULL, 0,
17342 {&hf_ieee80211_aironet_ie_qos_val,
17343 {"Aironet IE QoS valueset", "wlan_mgt.aironet.qos.val",
17344 FT_BYTES, BASE_NONE, NULL, 0,
17347 {&hf_ieee80211_tsinfo,
17348 {"Traffic Stream (TS) Info", "wlan_mgt.ts_info",
17349 FT_UINT24, BASE_HEX, NULL, 0,
17350 "Traffic Stream (TS) Info field", HFILL }},
17352 {&hf_ieee80211_tsinfo_type,
17353 {"Traffic Type", "wlan_mgt.ts_info.type",
17354 FT_UINT24, BASE_DEC, VALS(tsinfo_type), 0x000001,
17355 "Traffic Stream (TS) Info Traffic Type", HFILL }},
17357 {&hf_ieee80211_tsinfo_tsid,
17358 {"Traffic Stream ID (TSID)", "wlan_mgt.ts_info.tsid",
17359 FT_UINT24, BASE_DEC, NULL, 0x00001E,
17360 "Traffic Stream ID (TSID) Info TSID", HFILL }},
17362 {&hf_ieee80211_tsinfo_dir,
17363 {"Direction", "wlan_mgt.ts_info.dir",
17364 FT_UINT24, BASE_DEC, VALS(tsinfo_direction), 0x000060,
17365 "Traffic Stream (TS) Info Direction", HFILL }},
17367 {&hf_ieee80211_tsinfo_access,
17368 {"Access Policy", "wlan_mgt.ts_info.dir",
17369 FT_UINT24, BASE_DEC, VALS(tsinfo_access), 0x000180,
17370 "Traffic Stream (TS) Info Access Policy", HFILL }},
17372 {&hf_ieee80211_tsinfo_agg,
17373 {"Aggregation", "wlan_mgt.ts_info.agg",
17374 FT_UINT24, BASE_DEC, NULL, 0x000200,
17375 "Traffic Stream (TS) Info Access Policy", HFILL }},
17377 {&hf_ieee80211_tsinfo_apsd,
17378 {"Automatic Power-Save Delivery (APSD)", "wlan_mgt.ts_info.apsd",
17379 FT_UINT24, BASE_DEC, NULL, 0x000400,
17380 "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL }},
17382 {&hf_ieee80211_tsinfo_up,
17383 {"User Priority", "wlan_mgt.ts_info.up",
17384 FT_UINT24, BASE_DEC, VALS(qos_up), 0x003800,
17385 "Traffic Stream (TS) Info User Priority", HFILL }},
17387 {&hf_ieee80211_tsinfo_ack,
17388 {"Ack Policy", "wlan_mgt.ts_info.ack",
17389 FT_UINT24, BASE_DEC, VALS(ack_policy), 0x00C000,
17390 "Traffic Stream (TS) Info Ack Policy", HFILL }},
17392 {&hf_ieee80211_tsinfo_sched,
17393 {"Schedule", "wlan_mgt.ts_info.sched",
17394 FT_UINT24, BASE_DEC, NULL, 0x010000,
17395 "Traffic Stream (TS) Info Schedule", HFILL }},
17397 {&hf_ieee80211_tsinfo_rsv,
17398 {"Reserved", "wlan_mgt.ts_info.rsv",
17399 FT_UINT24, BASE_HEX, NULL, 0xFE0000,
17400 "Must be Zero", HFILL }},
17402 {&hf_ieee80211_tspec_nor_msdu,
17403 {"Normal MSDU Size", "wlan_mgt.tspec.nor_msdu",
17404 FT_UINT16, BASE_DEC, NULL, 0,
17407 {&hf_ieee80211_tspec_max_msdu,
17408 {"Maximum MSDU Size", "wlan_mgt.tspec.max_msdu",
17409 FT_UINT16, BASE_DEC, NULL, 0,
17412 {&hf_ieee80211_tspec_min_srv,
17413 {"Minimum Service Interval", "wlan_mgt.tspec.min_srv",
17414 FT_UINT32, BASE_DEC, NULL, 0,
17417 {&hf_ieee80211_tspec_max_srv,
17418 {"Maximum Service Interval", "wlan_mgt.tspec.max_srv",
17419 FT_UINT32, BASE_DEC, NULL, 0,
17422 {&hf_ieee80211_tspec_inact_int,
17423 {"Inactivity Interval", "wlan_mgt.tspec.inact_int",
17424 FT_UINT32, BASE_DEC, NULL, 0,
17427 {&hf_ieee80211_tspec_susp_int,
17428 {"Suspension Interval", "wlan_mgt.tspec.susp_int",
17429 FT_UINT32, BASE_DEC, NULL, 0,
17432 {&hf_ieee80211_tspec_srv_start,
17433 {"Service Start Time", "wlan_mgt.tspec.srv_start",
17434 FT_UINT32, BASE_DEC, NULL, 0,
17437 {&hf_ieee80211_tspec_min_data,
17438 {"Minimum Data Rate", "wlan_mgt.tspec.min_data",
17439 FT_UINT32, BASE_DEC, NULL, 0,
17442 {&hf_ieee80211_tspec_mean_data,
17443 {"Mean Data Rate", "wlan_mgt.tspec.mean_data",
17444 FT_UINT32, BASE_DEC, NULL, 0,
17447 {&hf_ieee80211_tspec_peak_data,
17448 {"Peak Data Rate", "wlan_mgt.tspec.peak_data",
17449 FT_UINT32, BASE_DEC, NULL, 0,
17452 {&hf_ieee80211_tspec_burst_size,
17453 {"Burst Size", "wlan_mgt.tspec.burst_size",
17454 FT_UINT32, BASE_DEC, NULL, 0,
17457 {&hf_ieee80211_tspec_delay_bound,
17458 {"Delay Bound", "wlan_mgt.tspec.delay_bound",
17459 FT_UINT32, BASE_DEC, NULL, 0,
17462 {&hf_ieee80211_tspec_min_phy,
17463 {"Minimum PHY Rate", "wlan_mgt.tspec.min_phy",
17464 FT_UINT32, BASE_DEC, NULL, 0,
17467 {&hf_ieee80211_tspec_surplus,
17468 {"Surplus Bandwidth Allowance", "wlan_mgt.tspec.surplus",
17469 FT_UINT16, BASE_DEC, NULL, 0,
17472 {&hf_ieee80211_tspec_medium,
17473 {"Medium Time", "wlan_mgt.tspec.medium",
17474 FT_UINT16, BASE_DEC, NULL, 0,
17477 {&hf_ieee80211_ts_delay,
17478 {"Traffic Stream (TS) Delay", "wlan_mgt.ts_delay",
17479 FT_UINT32, BASE_DEC, NULL, 0,
17482 {&hf_ieee80211_tclas_process,
17483 {"Processing", "wlan_mgt.tclas_proc.processing",
17484 FT_UINT8, BASE_DEC, VALS(ieee80211_tclas_process_flag), 0,
17485 "TCLAS Processing", HFILL }},
17487 {&hf_ieee80211_tag_qos_cap_qos_info,
17488 {"QoS Info", "wlan_mgt.tag.qos_cap.qos_info",
17489 FT_UINT8, BASE_HEX, NULL, 0,
17490 "TCLAS Processing", HFILL }},
17492 {&hf_ieee80211_qos_info_field_vo_uapsd,
17493 {"AC_VO U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.vo_uapsd",
17494 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
17497 {&hf_ieee80211_qos_info_field_vi_uapsd,
17498 {"AC_VI U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.vi_uapsd",
17499 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
17502 {&hf_ieee80211_qos_info_field_bk_uapsd,
17503 {"AC_BK U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.bk_uapsd",
17504 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04,
17507 {&hf_ieee80211_qos_info_field_be_uapsd,
17508 {"AC_BE U-APSD Flag", "wlan_mgt.tag.qos_cap.qos_info.be_uapsd",
17509 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
17512 {&hf_ieee80211_qos_info_field_qack,
17513 {"Q-ACK", "wlan_mgt.tag.qos_cap.qos_info.qack",
17514 FT_BOOLEAN, 8, TFS(&qos_info_field_qack_flags), 0x10,
17517 {&hf_ieee80211_qos_info_field_max_sp_length,
17518 {"Max SP-Length", "wlan_mgt.tag.qos_cap.qos_info.max_sp_length",
17519 FT_UINT8, BASE_HEX, VALS(qos_info_field_max_sp_length_flags), 0x60,
17522 {&hf_ieee80211_qos_info_field_more_data_ack,
17523 {"More Data Ack", "wlan_mgt.tag.qos_cap.qos_info.more_data_ack",
17524 FT_BOOLEAN, 8, TFS(&qos_info_field_more_data_ack_flags) , 0x80,
17527 {&hf_ieee80211_qos_info_field_edca_upd_cnt,
17528 {"EDCA Parameter Set Update Count", "wlan_mgt.tag.qos_cap.qos_info.edca_upd_cnt",
17529 FT_UINT8, BASE_DEC, NULL, 0x07,
17532 {&hf_ieee80211_qos_info_field_queue_req,
17533 {"Queue Request", "wlan_mgt.tag.qos_cap.qos_info.queue_req",
17534 FT_BOOLEAN, 8, TFS(&qos_info_field_queue_req_flags), 0x07,
17537 {&hf_ieee80211_qos_info_field_txop_req,
17538 {"TXOP Request", "wlan_mgt.tag.qos_cap.qos_info.txop_req",
17539 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x40,
17542 {&hf_ieee80211_qos_info_field_reserved,
17543 {"Reserved", "wlan_mgt.tag.qos_cap.qos_info.reserved",
17544 FT_BOOLEAN, 8, NULL, 0x80,
17547 {&hf_ieee80211_tag_ext_supp_rates,
17548 {"Extended Supported Rates", "wlan_mgt.extended_supported_rates",
17549 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_supported_rates_vals_ext, 0x0,
17550 "In Mbit/sec, (B) for Basic Rates", HFILL }},
17552 {&hf_ieee80211_sched_info,
17553 {"Schedule Info", "wlan_mgt.sched.sched_info",
17554 FT_UINT16, BASE_HEX, NULL, 0,
17555 "Schedule Info field", HFILL }},
17557 {&hf_ieee80211_sched_info_agg,
17558 {"Schedule Aggregation", "wlan_mgt.sched_info.agg",
17559 FT_UINT16, BASE_DEC, NULL, 0x0001,
17560 "Traffic Stream (TS) Info Access Policy", HFILL }},
17562 {&hf_ieee80211_sched_info_tsid,
17563 {"Schedule Traffic Stream ID (TSID)", "wlan_mgt.sched_info.tsid",
17564 FT_UINT16, BASE_DEC, NULL, 0x001E,
17565 "Traffic Stream ID (TSID) Info TSID", HFILL }},
17567 {&hf_ieee80211_sched_info_dir,
17568 {"Schedule Direction", "wlan_mgt.sched_info.dir",
17569 FT_UINT16, BASE_DEC, VALS(tsinfo_direction), 0x0060,
17570 "Traffic Stream (TS) Info Direction", HFILL }},
17572 {&hf_ieee80211_sched_srv_start,
17573 {"Service Start Time", "wlan_mgt.sched.srv_start",
17574 FT_UINT32, BASE_HEX, NULL, 0,
17577 {&hf_ieee80211_sched_srv_int,
17578 {"Service Interval", "wlan_mgt.sched.srv_int",
17579 FT_UINT32, BASE_HEX, NULL, 0,
17582 {&hf_ieee80211_sched_spec_int,
17583 {"Specification Interval", "wlan_mgt.sched.spec_int",
17584 FT_UINT16, BASE_HEX, NULL, 0,
17587 {&hf_ieee80211_aruba,
17588 {"Aruba Type", "wlan_mgt.aruba.type",
17589 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &aruba_mgt_typevals_ext, 0,
17590 "Aruba Management", HFILL }},
17592 {&hf_ieee80211_aruba_hb_seq,
17593 {"Aruba Heartbeat Sequence", "wlan_mgt.aruba.heartbeat_sequence",
17594 FT_UINT64, BASE_DEC, NULL, 0,
17597 {&hf_ieee80211_aruba_mtu,
17598 {"Aruba MTU Size", "wlan_mgt.aruba.mtu_size",
17599 FT_UINT16, BASE_DEC, NULL, 0,
17602 /* Start: HT Control (+HTC) */
17603 {&hf_ieee80211_htc,
17604 {"HT Control (+HTC)", "wlan_mgt.htc",
17605 FT_UINT32, BASE_HEX, NULL, 0,
17606 "High Throughput Control (+HTC)", HFILL }},
17608 {&hf_ieee80211_htc_lac,
17609 {"Link Adaptation Control (LAC)", "wlan_mgt.htc.lac",
17610 FT_UINT16, BASE_HEX, NULL, 0,
17611 "High Throughput Control Link Adaptation Control (LAC)", HFILL }},
17613 {&hf_ieee80211_htc_lac_reserved,
17614 {"Reserved", "wlan_mgt.htc.lac.reserved",
17615 FT_BOOLEAN, 16, NULL, 0x0001,
17616 "High Throughput Control Link Adaptation Control Reserved", HFILL }},
17618 {&hf_ieee80211_htc_lac_trq,
17619 {"Training Request (TRQ)", "wlan_mgt.htc.lac.trq",
17620 FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag), 0x0002,
17621 "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL }},
17623 {&hf_ieee80211_htc_lac_mai_aseli,
17624 {"Antenna Selection Indication (ASELI)", "wlan_mgt.htc.lac.mai.aseli",
17625 FT_UINT16, BASE_HEX, NULL, 0x003C,
17626 "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL }},
17628 {&hf_ieee80211_htc_lac_mai_mrq,
17629 {"MCS Request (MRQ)", "wlan_mgt.htc.lac.mai.mrq",
17630 FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag), 0x0004,
17631 "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL }},
17633 {&hf_ieee80211_htc_lac_mai_msi,
17634 {"MCS Request Sequence Identifier (MSI)", "wlan_mgt.htc.lac.mai.msi",
17635 FT_UINT16, BASE_HEX, NULL, 0x0038,
17636 "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL }},
17638 {&hf_ieee80211_htc_lac_mai_reserved,
17639 {"Reserved", "wlan_mgt.htc.lac.mai.reserved",
17640 FT_UINT16, BASE_HEX, NULL, 0x0038,
17641 "High Throughput Control Link Adaptation Control MAI Reserved", HFILL }},
17643 {&hf_ieee80211_htc_lac_mfsi,
17644 {"MCS Feedback Sequence Identifier (MFSI)", "wlan_mgt.htc.lac.mfsi",
17645 FT_UINT16, BASE_DEC, NULL, 0x01C0,
17646 "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL }},
17648 {&hf_ieee80211_htc_lac_asel_command,
17649 {"Antenna Selection (ASEL) Command", "wlan_mgt.htc.lac.asel.command",
17650 FT_UINT16, BASE_HEX, VALS(ieee80211_htc_lac_asel_command_flags), 0x0E00,
17651 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL }},
17653 {&hf_ieee80211_htc_lac_asel_data,
17654 {"Antenna Selection (ASEL) Data", "wlan_mgt.htc.lac.asel.data",
17655 FT_UINT16, BASE_HEX, NULL, 0xF000,
17656 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL }},
17658 {&hf_ieee80211_htc_lac_mfb,
17659 {"MCS Feedback (MFB)", "wlan_mgt.htc.lac.mfb",
17660 FT_UINT16, BASE_HEX, NULL, 0xFE00,
17661 "High Throughput Control Link Adaptation Control MCS Feedback", HFILL }},
17663 {&hf_ieee80211_htc_cal_pos,
17664 {"Calibration Position", "wlan_mgt.htc.cal.pos",
17665 FT_UINT16, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags), 0x0003,
17666 "High Throughput Control Calibration Position", HFILL }},
17668 {&hf_ieee80211_htc_cal_seq,
17669 {"Calibration Sequence Identifier", "wlan_mgt.htc.cal.seq",
17670 FT_UINT16, BASE_DEC, NULL, 0x000C,
17671 "High Throughput Control Calibration Sequence Identifier", HFILL }},
17673 {&hf_ieee80211_htc_reserved1,
17674 {"Reserved", "wlan_mgt.htc.reserved1",
17675 FT_UINT16, BASE_DEC, NULL, 0x0030,
17676 "High Throughput Control Reserved", HFILL }},
17678 {&hf_ieee80211_htc_csi_steering,
17679 {"CSI/Steering", "wlan_mgt.htc.csi_steering",
17680 FT_UINT16, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags), 0x00C0,
17681 "High Throughput Control CSI/Steering", HFILL }},
17683 {&hf_ieee80211_htc_ndp_announcement,
17684 {"NDP Announcement", "wlan_mgt.htc.ndp_announcement",
17685 FT_BOOLEAN, 16, TFS(&ieee80211_htc_ndp_announcement_flag), 0x0100,
17686 "High Throughput Control NDP Announcement", HFILL }},
17688 {&hf_ieee80211_htc_reserved2,
17689 {"Reserved", "wlan_mgt.htc.reserved2",
17690 FT_UINT16, BASE_HEX, NULL, 0x3E00,
17691 "High Throughput Control Reserved", HFILL }},
17693 {&hf_ieee80211_htc_ac_constraint,
17694 {"AC Constraint", "wlan_mgt.htc.ac_constraint",
17695 FT_BOOLEAN, 16, NULL, 0x4000,
17696 "High Throughput Control AC Constraint", HFILL }},
17698 {&hf_ieee80211_htc_rdg_more_ppdu,
17699 {"RDG/More PPDU", "wlan_mgt.htc.rdg_more_ppdu",
17700 FT_BOOLEAN, 16, NULL, 0x8000,
17701 "High Throughput Control RDG/More PPDU", HFILL }},
17702 /* End: HT Control (+HTC) */
17705 {&hf_ieee80211_tag_mobility_domain_mdid,
17706 {"Mobility Domain Identifier", "wlan_mgt.mobility_domain.mdid",
17707 FT_UINT16, BASE_HEX, NULL, 0,
17710 {&hf_ieee80211_tag_mobility_domain_ft_capab,
17711 {"FT Capability and Policy", "wlan_mgt.mobility_domain.ft_capab",
17712 FT_UINT8, BASE_HEX, NULL, 0,
17715 {&hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
17716 {"Fast BSS Transition over DS",
17717 "wlan_mgt.mobility_domain.ft_capab.ft_over_ds",
17718 FT_UINT8, BASE_HEX, NULL, 0x01,
17721 {&hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
17722 {"Resource Request Protocol Capability",
17723 "wlan_mgt.mobility_domain.ft_capab.resource_req",
17724 FT_UINT8, BASE_HEX, NULL, 0x02,
17728 {&hf_ieee80211_tag_ft_mic_control,
17729 {"MIC Control", "wlan_mgt.ft.mic_control",
17730 FT_UINT16, BASE_HEX, NULL, 0,
17733 {&hf_ieee80211_tag_ft_element_count,
17734 {"Element Count", "wlan_mgt.ft.element_count",
17735 FT_UINT16, BASE_DEC, NULL, 0xff00,
17738 {&hf_ieee80211_tag_ft_mic,
17739 {"MIC", "wlan_mgt.ft.mic",
17740 FT_BYTES, BASE_NONE, NULL, 0,
17743 {&hf_ieee80211_tag_ft_anonce,
17744 {"ANonce", "wlan_mgt.ft.anonce",
17745 FT_BYTES, BASE_NONE, NULL, 0,
17748 {&hf_ieee80211_tag_ft_snonce,
17749 {"SNonce", "wlan_mgt.ft.snonce",
17750 FT_BYTES, BASE_NONE, NULL, 0,
17753 {&hf_ieee80211_tag_ft_subelem_id,
17754 {"Subelement ID", "wlan_mgt.ft.subelem.id",
17755 FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals), 0,
17758 {&hf_ieee80211_tag_ft_subelem_len,
17759 {"Length", "wlan_mgt.ft.subelem.len",
17760 FT_UINT8, BASE_DEC, NULL, 0,
17763 {&hf_ieee80211_tag_ft_subelem_data,
17764 {"Data", "wlan_mgt.ft.subelem.data",
17765 FT_BYTES, BASE_NONE, NULL, 0,
17768 {&hf_ieee80211_tag_ft_subelem_r1kh_id,
17769 {"PMK-R1 key holder identifier (R1KH-ID)", "wlan_mgt.ft.subelem.r1kh_id",
17770 FT_BYTES, BASE_NONE, NULL, 0,
17773 {&hf_ieee80211_tag_ft_subelem_gtk_key_info,
17774 {"Key Info", "wlan_mgt.ft.subelem.gtk.key_info",
17775 FT_UINT16, BASE_HEX, NULL, 0,
17778 {&hf_ieee80211_tag_ft_subelem_gtk_key_id,
17779 {"Key ID", "wlan_mgt.ft.subelem.gtk.key_id",
17780 FT_UINT16, BASE_DEC, NULL, 0x0003,
17783 {&hf_ieee80211_tag_ft_subelem_gtk_key_length,
17784 {"Key Length", "wlan_mgt.ft.subelem.gtk.key_length",
17785 FT_UINT8, BASE_HEX, NULL, 0,
17788 {&hf_ieee80211_tag_ft_subelem_gtk_rsc,
17789 {"RSC", "wlan_mgt.ft.subelem.gtk.rsc",
17790 FT_BYTES, BASE_NONE, NULL, 0,
17793 {&hf_ieee80211_tag_ft_subelem_gtk_key,
17794 {"GTK", "wlan_mgt.ft.subelem.gtk.key",
17795 FT_BYTES, BASE_NONE, NULL, 0,
17798 {&hf_ieee80211_tag_ft_subelem_r0kh_id,
17799 {"PMK-R0 key holder identifier (R0KH-ID)", "wlan_mgt.ft.subelem.r0kh_id",
17800 FT_STRING, BASE_NONE, NULL, 0,
17803 {&hf_ieee80211_tag_ft_subelem_igtk_key_id,
17804 {"Key ID", "wlan_mgt.ft.subelem.igtk.key_id",
17805 FT_UINT16, BASE_DEC, NULL, 0,
17808 {&hf_ieee80211_tag_ft_subelem_igtk_ipn,
17809 {"IPN", "wlan_mgt.ft.subelem.igtk.ipn",
17810 FT_BYTES, BASE_NONE, NULL, 0,
17813 {&hf_ieee80211_tag_ft_subelem_igtk_key_length,
17814 {"Key Length", "wlan_mgt.ft.subelem.igtk.key_length",
17815 FT_UINT8, BASE_HEX, NULL, 0,
17818 {&hf_ieee80211_tag_ft_subelem_igtk_key,
17819 {"Wrapped Key (IGTK)", "wlan_mgt.ft.subelem.igtk.key",
17820 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
17823 {&hf_ieee80211_tag_mmie_keyid,
17824 {"KeyID", "wlan_mgt.mmie.keyid",
17825 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
17827 {&hf_ieee80211_tag_mmie_ipn,
17828 {"IPN", "wlan_mgt.mmie.ipn",
17829 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
17831 {&hf_ieee80211_tag_mmie_mic,
17832 {"MIC", "wlan_mgt.mmie.mic",
17833 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
17835 /* Time Advertisement */
17836 {&hf_ieee80211_tag_time_adv_timing_capab,
17837 {"Timing capabilities", "wlan_mgt.time_adv.timing_capab",
17838 FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals), 0,
17841 {&hf_ieee80211_tag_time_adv_time_value,
17842 {"Time Value", "wlan_mgt.time_adv.time_value",
17843 FT_BYTES, BASE_NONE, NULL, 0,
17846 {&hf_ieee80211_tag_time_adv_time_value_year,
17847 {"Time Value: Year", "wlan_mgt.time_adv.time_value.year",
17848 FT_UINT16, BASE_DEC, NULL, 0,
17851 {&hf_ieee80211_tag_time_adv_time_value_month,
17852 {"Time Value: Month", "wlan_mgt.time_adv.time_value.month",
17853 FT_UINT8, BASE_DEC, NULL, 0,
17856 {&hf_ieee80211_tag_time_adv_time_value_day,
17857 {"Time Value: Day", "wlan_mgt.time_adv.time_value.month",
17858 FT_UINT8, BASE_DEC, NULL, 0,
17861 {&hf_ieee80211_tag_time_adv_time_value_hours,
17862 {"Time Value: Hours", "wlan_mgt.time_adv.time_value.hours",
17863 FT_UINT8, BASE_DEC, NULL, 0,
17866 {&hf_ieee80211_tag_time_adv_time_value_minutes,
17867 {"Time Value: Minutes", "wlan_mgt.time_adv.time_value.minutes",
17868 FT_UINT8, BASE_DEC, NULL, 0,
17871 {&hf_ieee80211_tag_time_adv_time_value_seconds,
17872 {"Time Value: Seconds", "wlan_mgt.time_adv.time_value.seconds",
17873 FT_UINT8, BASE_DEC, NULL, 0,
17876 {&hf_ieee80211_tag_time_adv_time_value_milliseconds,
17877 {"Time Value: Milliseconds", "wlan_mgt.time_adv.time_value.milliseconds",
17878 FT_UINT16, BASE_DEC, NULL, 0,
17881 {&hf_ieee80211_tag_time_adv_time_value_reserved,
17882 {"Time Value: Reserved", "wlan_mgt.time_adv.time_value.reserved",
17883 FT_UINT8, BASE_DEC, NULL, 0,
17886 {&hf_ieee80211_tag_time_adv_time_error,
17887 {"Time Error", "wlan_mgt.time_adv.time_error",
17888 FT_BYTES, BASE_NONE, NULL, 0,
17891 {&hf_ieee80211_tag_time_adv_time_update_counter,
17892 {"Time Update Counter", "wlan_mgt.time_adv.time_update_counter",
17893 FT_UINT8, BASE_DEC, NULL, 0,
17897 {&hf_ieee80211_tag_time_zone,
17898 {"Time Zone", "wlan_mgt.time_zone",
17899 FT_STRING, BASE_NONE, NULL, 0,
17903 {&hf_ieee80211_tag_interworking_access_network_type,
17904 {"Access Network Type", "wlan_mgt.interworking.access_network_type",
17905 FT_UINT8, BASE_DEC, VALS(access_network_type_vals), 0x0f,
17908 {&hf_ieee80211_tag_interworking_internet,
17909 {"Internet", "wlan_mgt.interworking.internet",
17910 FT_UINT8, BASE_DEC, NULL, 0x10,
17913 {&hf_ieee80211_tag_interworking_asra,
17914 {"ASRA", "wlan_mgt.interworking.asra",
17915 FT_UINT8, BASE_DEC, NULL, 0x20,
17916 "Additional Step Required for Access", HFILL }},
17918 {&hf_ieee80211_tag_interworking_esr,
17919 {"ESR", "wlan_mgt.interworking.esr",
17920 FT_UINT8, BASE_DEC, NULL, 0x40,
17921 "Emergency services reachable", HFILL }},
17923 {&hf_ieee80211_tag_interworking_uesa,
17924 {"UESA", "wlan_mgt.interworking.uesa",
17925 FT_UINT8, BASE_DEC, NULL, 0x80,
17926 "Unauthenticated emergency service accessible", HFILL }},
17928 {&hf_ieee80211_tag_interworking_hessid,
17929 {"HESSID", "wlan_mgt.interworking.hessid",
17930 FT_ETHER, BASE_NONE, NULL, 0,
17931 "Homogeneous ESS identifier", HFILL }},
17933 /* Advertisement Protocol */
17934 {&hf_ieee80211_tag_adv_proto_resp_len_limit,
17935 {"Query Response Length Limit", "wlan_mgt.adv_proto.resp_len_limit",
17936 FT_UINT8, BASE_DEC, NULL, 0x7f,
17939 {&hf_ieee80211_tag_adv_proto_pame_bi,
17940 {"PAME-BI", "wlan_mgt.adv_proto.pame_bi",
17941 FT_UINT8, BASE_DEC, NULL, 0x80,
17942 "Pre-Association Message Xchange BSSID Independent (PAME-BI)", HFILL }},
17944 {&hf_ieee80211_tag_adv_proto_id,
17945 {"Advertisement Protocol ID", "wlan_mgt.adv_proto.id",
17946 FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals), 0,
17949 /* Roaming Consortium */
17950 {&hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
17951 {"Number of ANQP OIs", "wlan_mgt.roaming_consortium.num_anqp_oi",
17952 FT_UINT8, BASE_DEC, NULL, 0,
17955 {&hf_ieee80211_tag_roaming_consortium_oi1_len,
17956 {"OI #1 Length", "wlan_mgt.roaming_consortium.oi1_len",
17957 FT_UINT8, BASE_DEC, NULL, 0x0f,
17960 {&hf_ieee80211_tag_roaming_consortium_oi2_len,
17961 {"OI #2 Length", "wlan_mgt.roaming_consortium.oi2_len",
17962 FT_UINT8, BASE_DEC, NULL, 0xf0,
17965 {&hf_ieee80211_tag_roaming_consortium_oi1,
17966 {"OI #1", "wlan_mgt.roaming_consortium.oi1",
17967 FT_BYTES, BASE_NONE, NULL, 0,
17970 {&hf_ieee80211_tag_roaming_consortium_oi2,
17971 {"OI #2", "wlan_mgt.roaming_consortium.oi2",
17972 FT_BYTES, BASE_NONE, NULL, 0,
17975 {&hf_ieee80211_tag_roaming_consortium_oi3,
17976 {"OI #3", "wlan_mgt.roaming_consortium.oi3",
17977 FT_BYTES, BASE_NONE, NULL, 0,
17980 /* Timeout Interval */
17981 {&hf_ieee80211_tag_timeout_int_type,
17982 {"Timeout Interval Type", "wlan_mgt.timeout_int.type",
17983 FT_UINT8, BASE_DEC, VALS(timeout_int_types), 0,
17986 {&hf_ieee80211_tag_timeout_int_value,
17987 {"Timeout Interval Value", "wlan_mgt.timeout_int.value",
17988 FT_UINT32, BASE_DEC, NULL, 0,
17991 /* Link Identifier */
17992 {&hf_ieee80211_tag_link_id_bssid,
17993 {"BSSID", "wlan_mgt.link_id.bssid",
17994 FT_ETHER, BASE_NONE, NULL, 0,
17997 {&hf_ieee80211_tag_link_id_init_sta,
17998 {"TDLS initiator STA Address", "wlan_mgt.link_id.init_sta",
17999 FT_ETHER, BASE_NONE, NULL, 0,
18002 {&hf_ieee80211_tag_link_id_resp_sta,
18003 {"TDLS responder STA Address", "wlan_mgt.link_id.resp_sta",
18004 FT_ETHER, BASE_NONE, NULL, 0,
18007 /* Wakeup Schedule */
18008 {&hf_ieee80211_tag_wakeup_schedule_offset,
18009 {"Offset", "wlan_mgt.wakeup_schedule.offset",
18010 FT_UINT32, BASE_DEC, NULL, 0,
18013 {&hf_ieee80211_tag_wakeup_schedule_interval,
18014 {"Interval", "wlan_mgt.wakeup_schedule.interval",
18015 FT_UINT32, BASE_DEC, NULL, 0,
18018 {&hf_ieee80211_tag_wakeup_schedule_awake_window_slots,
18019 {"Awake Window Slots", "wlan_mgt.wakeup_schedule.awake_window_slots",
18020 FT_UINT32, BASE_DEC, NULL, 0,
18023 {&hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
18024 {"Maximum Awake Window Duration", "wlan_mgt.wakeup_schedule.max_awake_dur",
18025 FT_UINT32, BASE_DEC, NULL, 0,
18028 {&hf_ieee80211_tag_wakeup_schedule_idle_count,
18029 {"Idle Count", "wlan_mgt.wakeup_schedule.idle_count",
18030 FT_UINT16, BASE_DEC, NULL, 0,
18033 /* Channel Switch Timing */
18034 {&hf_ieee80211_tag_channel_switch_timing_switch_time,
18035 {"Switch Time", "wlan_mgt.channel_switch_timing.switch_time",
18036 FT_UINT16, BASE_DEC, NULL, 0,
18039 {&hf_ieee80211_tag_channel_switch_timing_switch_timeout,
18040 {"Switch Timeout", "wlan_mgt.channel_switch_timing.switch_timeout",
18041 FT_UINT16, BASE_DEC, NULL, 0,
18045 {&hf_ieee80211_tag_pti_control_tid,
18046 {"TID", "wlan_mgt.pti_control.tid",
18047 FT_UINT8, BASE_DEC, NULL, 0,
18050 {&hf_ieee80211_tag_pti_control_sequence_control,
18051 {"Sequence Control", "wlan_mgt.pti_control.sequence_control",
18052 FT_UINT16, BASE_HEX, NULL, 0,
18055 /* PU Buffer Status */
18056 {&hf_ieee80211_tag_pu_buffer_status_ac_bk,
18057 {"AC_BK traffic available", "wlan_mgt.pu_buffer_status.ac_bk",
18058 FT_UINT8, BASE_DEC, NULL, 0x01,
18061 {&hf_ieee80211_tag_pu_buffer_status_ac_be,
18062 {"AC_BE traffic available", "wlan_mgt.pu_buffer_status.ac_be",
18063 FT_UINT8, BASE_DEC, NULL, 0x02,
18066 {&hf_ieee80211_tag_pu_buffer_status_ac_vi,
18067 {"AC_VI traffic available", "wlan_mgt.pu_buffer_status.ac_vi",
18068 FT_UINT8, BASE_DEC, NULL, 0x04,
18071 {&hf_ieee80211_tag_pu_buffer_status_ac_vo,
18072 {"AC_VO traffic available", "wlan_mgt.pu_buffer_status.ac_vo",
18073 FT_UINT8, BASE_DEC, NULL, 0x08,
18077 static hf_register_info aggregate_fields[] = {
18078 {&hf_ieee80211_amsdu_msdu_header_text,
18079 {"MAC Service Data Unit (MSDU)", "wlan_aggregate.msduheader",
18080 FT_UINT16, BASE_DEC, 0, 0x0000,
18084 static uat_field_t wep_uat_flds[] = {
18086 UAT_FLD_VS(uat_wep_key_records, key, "Key type", wep_type_vals,
18087 "Decryption key type used"),
18088 UAT_FLD_CSTRING(uat_wep_key_records, string, "Key",
18089 "wep:<wep hexadecimal key>\n"
18090 "wpa-pwd:<passphrase>[:<ssid>]\n"
18091 "wpa-psk:<wpa hexadecimal key>"),
18095 static gint *tree_array[] = {
18102 &ett_block_ack_bitmap,
18104 &ett_fixed_parameters,
18105 &ett_tagged_parameters,
18106 &ett_tag_bmapctl_tree,
18107 &ett_tag_country_fnm_tree,
18108 &ett_tag_country_rcc_tree,
18109 &ett_qos_parameters,
18110 &ett_qos_ps_buf_state,
18111 &ett_qos_info_field_tree,
18112 &ett_wep_parameters,
18114 &ett_hwmp_targ_flags_tree,
18118 &ett_rsn_sub_pcs_tree,
18119 &ett_rsn_akms_tree,
18120 &ett_rsn_sub_akms_tree,
18122 &ett_rsn_pmkid_tree,
18123 &ett_rsn_gmcs_tree,
18126 &ett_wpa_sub_ucs_tree,
18127 &ett_wpa_akms_tree,
18128 &ett_wpa_sub_akms_tree,
18130 &ett_wme_aci_aifsn,
18135 &ett_ff_ba_param_tree,
18137 &ett_ff_sm_pwr_save,
18138 &ett_ff_psmp_param_set,
18139 &ett_ff_mimo_cntrl,
18141 &ett_ff_chan_switch_announce,
18143 &ett_ff_psmp_sta_info,
18144 &ett_ff_delba_param_tree,
18145 &ett_ff_ba_ssc_tree,
18147 &ett_cntrl_wrapper_fc,
18148 &ett_cntrl_wrapper_payload,
18150 &ett_vht_mcsset_tree,
18151 &ett_vht_rx_mcsbit_tree,
18152 &ett_vht_tx_mcsbit_tree,
18153 &ett_vht_basic_mcsbit_tree,
18155 &ett_ht_info_delimiter1_tree,
18156 &ett_ht_info_delimiter2_tree,
18157 &ett_ht_info_delimiter3_tree,
18158 &ett_msdu_aggregation_parent_tree,
18159 &ett_msdu_aggregation_subframe_tree,
18160 &ett_tag_measure_request_mode_tree,
18161 &ett_tag_measure_request_type_tree,
18162 &ett_tag_measure_report_mode_tree,
18163 &ett_tag_measure_report_type_tree,
18164 &ett_tag_measure_report_basic_map_tree,
18165 &ett_tag_measure_report_rpi_tree,
18166 &ett_tag_measure_report_frame_tree,
18167 &ett_tag_dfs_map_tree,
18168 &ett_tag_erp_info_tree,
18170 &ett_tag_supported_channels,
18171 &ett_tag_neighbor_report_bssid_info_tree,
18172 &ett_tag_neighbor_report_bssid_info_capability_tree,
18173 &ett_tag_neighbor_report_sub_tag_tree,
18174 &ett_ampduparam_tree,
18177 &ett_htex_cap_tree,
18180 &ett_hta_cap1_tree,
18181 &ett_hta_cap2_tree,
18188 &ett_tag_time_adv_tree,
18190 &ett_adv_proto_tuple,
18192 &ett_gas_resp_fragment,
18193 &ett_gas_resp_fragments,
18196 &ett_nai_realm_eap,
18197 &ett_anqp_vendor_capab
18199 module_t *wlan_module;
18201 memset (&wlan_stats, 0, sizeof wlan_stats);
18203 proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
18204 "IEEE 802.11 Aggregate Data", "wlan_aggregate");
18205 proto_register_field_array(proto_aggregate, aggregate_fields, array_length(aggregate_fields));
18207 proto_wlan = proto_register_protocol ("IEEE 802.11 wireless LAN",
18208 "IEEE 802.11", "wlan");
18209 proto_register_field_array (proto_wlan, hf, array_length (hf));
18211 proto_wlan_mgt = proto_register_protocol ("IEEE 802.11 wireless LAN management frame",
18212 "802.11 MGT", "wlan_mgt");
18213 proto_register_field_array (proto_wlan_mgt, ff, array_length (ff));
18215 proto_register_subtree_array (tree_array, array_length (tree_array));
18217 register_dissector("wlan", dissect_ieee80211, proto_wlan);
18218 register_dissector("wlan_fixed", dissect_ieee80211_fixed, proto_wlan);
18219 register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
18220 register_dissector("wlan_datapad", dissect_ieee80211_datapad, proto_wlan);
18221 register_dissector("wlan_ht", dissect_ieee80211_ht, proto_wlan);
18223 register_init_routine(wlan_defragment_init);
18224 register_init_routine(wlan_retransmit_init);
18225 register_init_routine(ieee80211_gas_reassembly_init);
18227 wlan_tap = register_tap("wlan");
18229 /* Register configuration options */
18230 wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
18231 prefs_register_bool_preference(wlan_module, "defragment",
18232 "Reassemble fragmented 802.11 datagrams",
18233 "Whether fragmented 802.11 datagrams should be reassembled",
18236 prefs_register_bool_preference(wlan_module, "ignore_draft_ht",
18237 "Ignore vendor-specific HT elements",
18238 "Don't dissect 802.11n draft HT elements (which might contain duplicate information).",
18239 &wlan_ignore_draft_ht);
18241 prefs_register_bool_preference(wlan_module, "retransmitted",
18242 "Call subdissector for retransmitted 802.11 frames",
18243 "Whether retransmitted 802.11 frames should be subdissected",
18244 &wlan_subdissector);
18246 prefs_register_bool_preference(wlan_module, "check_fcs",
18247 "Assume packets have FCS",
18248 "Some 802.11 cards include the FCS at the end of a packet, others do not.",
18251 /* Davide Schiera (2006-11-26): changed "WEP bit" in "Protection bit" */
18252 /* (according to the document IEEE Std 802.11i-2004) */
18253 prefs_register_enum_preference(wlan_module, "ignore_wep",
18254 "Ignore the Protection bit",
18255 "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
18256 "and some also leave the IV (initialization vector).",
18257 &wlan_ignore_wep, wlan_ignore_wep_options, TRUE);
18259 prefs_register_obsolete_preference(wlan_module, "wep_keys");
18261 /* Davide Schiera (2006-11-26): added reference to WPA/WPA2 decryption */
18262 prefs_register_bool_preference(wlan_module, "enable_decryption",
18263 "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
18264 &enable_decryption);
18266 prefs_register_static_text_preference(wlan_module, "info_decryption_key",
18267 "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
18268 "010203040506070809101111213 (104/128-bit WEP),\n"
18269 "MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
18270 "0102030405...6061626364 (WPA + 256-bit key). "
18271 "Invalid keys will be ignored.",
18272 "Valid key formats");
18274 wep_uat = uat_new("WEP and WPA Decryption Keys",
18275 sizeof(uat_wep_key_record_t), /* record size */
18276 "80211_keys", /* filename */
18277 TRUE, /* from_profile */
18278 (void*) &uat_wep_key_records, /* data_ptr */
18279 &num_wepkeys_uat, /* numitems_ptr */
18280 UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
18282 uat_wep_key_record_copy_cb, /* copy callback */
18283 uat_wep_key_record_update_cb, /* update callback */
18284 uat_wep_key_record_free_cb, /* free callback */
18285 init_wepkeys, /* post update callback - update the WEP/WPA keys */
18286 wep_uat_flds); /* UAT field definitions */
18288 prefs_register_uat_preference(wlan_module,
18291 "WEP and pre-shared WPA keys",
18296 proto_reg_handoff_ieee80211(void)
18298 dissector_handle_t data_encap_handle;
18301 * Get handles for the LLC, IPX and Ethernet dissectors.
18303 llc_handle = find_dissector("llc");
18304 ipx_handle = find_dissector("ipx");
18305 eth_withoutfcs_handle = find_dissector("eth_withoutfcs");
18306 data_handle = find_dissector("data");
18308 ieee80211_handle = find_dissector("wlan");
18309 dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11, ieee80211_handle);
18310 dissector_add_uint("ethertype", ETHERTYPE_CENTRINO_PROMISC, ieee80211_handle);
18312 /* Register handoff to Aruba GRE */
18313 dissector_add_uint("gre.proto", GRE_ARUBA_8200, ieee80211_handle);
18314 dissector_add_uint("gre.proto", GRE_ARUBA_8210, ieee80211_handle);
18315 dissector_add_uint("gre.proto", GRE_ARUBA_8220, ieee80211_handle);
18316 dissector_add_uint("gre.proto", GRE_ARUBA_8230, ieee80211_handle);
18317 dissector_add_uint("gre.proto", GRE_ARUBA_8240, ieee80211_handle);
18318 dissector_add_uint("gre.proto", GRE_ARUBA_8250, ieee80211_handle);
18319 dissector_add_uint("gre.proto", GRE_ARUBA_8260, ieee80211_handle);
18320 dissector_add_uint("gre.proto", GRE_ARUBA_8270, ieee80211_handle);
18321 dissector_add_uint("gre.proto", GRE_ARUBA_8280, ieee80211_handle);
18322 dissector_add_uint("gre.proto", GRE_ARUBA_8290, ieee80211_handle);
18323 dissector_add_uint("gre.proto", GRE_ARUBA_82A0, ieee80211_handle);
18324 dissector_add_uint("gre.proto", GRE_ARUBA_82B0, ieee80211_handle);
18325 dissector_add_uint("gre.proto", GRE_ARUBA_82C0, ieee80211_handle);
18326 dissector_add_uint("gre.proto", GRE_ARUBA_82D0, ieee80211_handle);
18327 dissector_add_uint("gre.proto", GRE_ARUBA_82E0, ieee80211_handle);
18328 dissector_add_uint("gre.proto", GRE_ARUBA_82F0, ieee80211_handle);
18329 dissector_add_uint("gre.proto", GRE_ARUBA_8300, ieee80211_handle);
18330 dissector_add_uint("gre.proto", GRE_ARUBA_8310, ieee80211_handle);
18331 dissector_add_uint("gre.proto", GRE_ARUBA_8320, ieee80211_handle);
18332 dissector_add_uint("gre.proto", GRE_ARUBA_8330, ieee80211_handle);
18333 dissector_add_uint("gre.proto", GRE_ARUBA_8340, ieee80211_handle);
18334 dissector_add_uint("gre.proto", GRE_ARUBA_8350, ieee80211_handle);
18335 dissector_add_uint("gre.proto", GRE_ARUBA_8360, ieee80211_handle);
18336 dissector_add_uint("gre.proto", GRE_ARUBA_8370, ieee80211_handle);
18338 data_encap_handle = create_dissector_handle(dissect_data_encap, proto_wlan);
18339 dissector_add_uint("ethertype", ETHERTYPE_IEEE80211_DATA_ENCAP,
18340 data_encap_handle);
18347 * c-basic-offset: 2
18349 * indent-tabs-mode: nil
18352 * ex: set shiftwidth=2 tabstop=8 expandtab:
18353 * :indentSize=2:tabSize=8:noTabs=true: