2 * Routines for Wireless LAN (IEEE 802.11) dissection
3 * Copyright 2000, Axis Communications AB
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 * The following people helped me by pointing out bugs etc. Thank you!
29 * Magnus Hultman-Persson
33 * 10/24/2005 - Add dissection for 802.11e
34 * Zhu Yi <yi.zhu@intel.com>
36 * 04/21/2008 - Added dissection for 802.11p
37 * Arada Systems <http://www.aradasystems.com>
39 * 04/20/2013 - Added dissection of 802.11ad according to the 9th draft of the standard.
40 * Extended as a project in the Laboratory of Computer Communication & Networking (LCCN), Computer Science Department, Technion, Israel.
41 * Majd Omari <majd.omari@outlook.com>
42 * Jalil Moraney <moraney.jalil@outlook.com>
47 * The 802.11 standard is "free", 6 month after the publication.
49 * IEEE Std 802.11-2012: Revision of IEEE Std 802.11-2007
50 * include 10 amendments (802.11k,r,y,w,n,p,z,v,u,s) 802.11-2007
51 * include 8 amendments (802.11a,b,d,e,g,h,i,j) 802.11-1999
52 * http://standards.ieee.org/getieee802/download/802.11-2012.pdf
55 * http://isotc.iso.org/livelink/livelink/fetch/-8913189/8913214/8913250/8913253/JTC001-N-9880.pdf?nodeid=8500308&vernum=-2
62 #include <epan/packet.h>
63 #include <epan/capture_dissectors.h>
64 #include <epan/exceptions.h>
65 #include <wsutil/pint.h>
66 #include <wsutil/str_util.h>
67 #include <epan/addr_resolv.h>
68 #include <epan/address_types.h>
69 #include <epan/strutil.h>
70 #include <epan/prefs.h>
71 #include <epan/reassemble.h>
72 #include "packet-ipx.h"
73 #include "packet-llc.h"
74 #include "packet-ieee80211.h"
75 #include <epan/etypes.h>
77 #include <epan/crc32-tvb.h>
78 #include <epan/crypt/wep-wpadefs.h>
79 #include <epan/expert.h>
80 #include <epan/conversation_table.h>
82 #include <epan/eapol_keydes_types.h>
83 #include <epan/to_str.h>
84 #include <epan/proto_data.h>
86 #include "packet-wps.h"
87 #include "packet-e212.h"
88 #include "packet-sflow.h"
89 #include "packet-gre.h"
91 #include <epan/crypt/airpdcap_ws.h>
93 void proto_register_ieee80211(void);
94 void proto_reg_handoff_ieee80211(void);
95 void proto_register_wlan_rsna_eapol(void);
97 extern value_string_ext eap_type_vals_ext; /* from packet-eap.c */
100 #define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
103 /* bitmask for bits [l..h]
104 * taken from kernel's include/linux/bitops.h
106 #define GENMASK(h, l) (((1U << ((h) - (l) + 1)) - 1) << (l))
108 /* Defragment fragmented 802.11 datagrams */
109 static gboolean wlan_defragment = TRUE;
111 /* call subdissector for retransmitted frames */
112 static gboolean wlan_subdissector = TRUE;
114 /* Check for the presence of the 802.11 FCS */
115 static gboolean wlan_check_fcs = FALSE;
117 /* Check the FCS checksum */
118 static gboolean wlan_check_checksum = TRUE;
120 /* Ignore vendor-specific HT elements */
121 static gboolean wlan_ignore_draft_ht = FALSE;
123 /* Ignore the Protection bit; assume packet is decrypted */
124 #define WLAN_IGNORE_PROT_NO 0
125 #define WLAN_IGNORE_PROT_WO_IV 1
126 #define WLAN_IGNORE_PROT_W_IV 2
127 static gint wlan_ignore_prot = WLAN_IGNORE_PROT_NO;
129 /* Table for reassembly of fragments. */
130 static reassembly_table wlan_reassembly_table;
132 /* Statistical data */
133 static struct _wlan_stats wlan_stats;
135 /*-------------------------------------
136 * UAT for WEP decoder
137 *-------------------------------------
139 static uat_wep_key_record_t *uat_wep_key_records = NULL;
140 static uat_t *wep_uat = NULL;
141 static guint num_wepkeys_uat = 0;
144 uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U_)
146 uat_wep_key_record_t* new_key = (uat_wep_key_record_t *)n;
147 const uat_wep_key_record_t* old_key = (const uat_wep_key_record_t *)o;
149 if (old_key->string) {
150 new_key->string = g_strdup(old_key->string);
152 new_key->string = NULL;
159 uat_wep_key_record_update_cb(void* r, char** err)
161 uat_wep_key_record_t* rec = (uat_wep_key_record_t *)r;
162 decryption_key_t* dk;
165 if (rec->string == NULL) {
166 *err = g_strdup("Key can't be blank");
170 g_strstrip(rec->string);
171 dk = parse_key_string(rec->string, rec->key);
177 case AIRPDCAP_KEY_TYPE_WEP:
178 case AIRPDCAP_KEY_TYPE_WEP_40:
179 case AIRPDCAP_KEY_TYPE_WEP_104:
180 if (rec->key != AIRPDCAP_KEY_TYPE_WEP) {
181 *err = g_strdup("Invalid key format");
185 case AIRPDCAP_KEY_TYPE_WPA_PWD:
186 if (rec->key != AIRPDCAP_KEY_TYPE_WPA_PWD) {
187 *err = g_strdup("Invalid key format");
191 case AIRPDCAP_KEY_TYPE_WPA_PSK:
192 if (rec->key != AIRPDCAP_KEY_TYPE_WPA_PSK) {
193 *err = g_strdup("Invalid key format");
198 *err = g_strdup("Invalid key format");
203 *err = g_strdup("Invalid key format");
210 uat_wep_key_record_free_cb(void*r)
212 uat_wep_key_record_t* key = (uat_wep_key_record_t *)r;
214 if (key->string) g_free(key->string);
217 UAT_VS_DEF(uat_wep_key_records, key, uat_wep_key_record_t, guint8, 0, STRING_KEY_TYPE_WEP)
218 UAT_CSTRING_CB_DEF(uat_wep_key_records, string, uat_wep_key_record_t)
220 /* Stuff for the WEP/WPA/WPA2 decoder */
221 static gboolean enable_decryption = TRUE;
224 ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
225 proto_tree *tree, int tagged_parameters_len, int ftype,
226 association_sanity_check_t *association_sanity_check);
228 static tvbuff_t *try_decrypt(tvbuff_t *tvb, packet_info *pinfo, guint32 offset, guint32 len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer, PAIRPDCAP_KEY_ITEM used_key);
230 static int weak_iv(guchar *iv);
232 typedef struct mimo_control
238 guint8 coefficient_size;
239 guint8 codebook_info;
240 guint8 remaining_matrix_segment;
243 /* ************************************************************************* */
244 /* Miscellaneous Constants */
245 /* ************************************************************************* */
246 #define SHORT_STR 256
248 #define IS_CTRL_GRANT_OR_GRANT_ACK_KEY 2
249 /* ************************************************************************* */
250 /* Define some very useful macros that are used to analyze frame types etc. */
251 /* ************************************************************************* */
254 * Fetch the frame control field and swap it if needed. "fcf" and "tvb"
255 * must be valid variables.
257 #define FETCH_FCF(off) ((option_flags & IEEE80211_COMMON_OPT_BROKEN_FC) ? \
258 GUINT16_SWAP_LE_BE(tvb_get_letohs(tvb, off)) : \
259 tvb_get_letohs(tvb, off))
262 * Extract the fragment number and sequence number from the sequence
265 #define SEQCTL_FRAGMENT_NUMBER(x) ((x) & 0x000F)
266 #define SEQCTL_SEQUENCE_NUMBER(x) (((x) & 0xFFF0) >> 4)
269 * Extract subfields from the QoS control field.
271 #define QOS_TID(x) ((x) & 0x000F)
272 #define QOS_PRIORITY(x) ((x) & 0x0007)
273 #define QOS_EOSP(x) (((x) & 0x0010) >> 4) /* end of service period */
274 #define QOS_ACK_POLICY(x) (((x) & 0x0060) >> 5)
275 #define QOS_AMSDU_PRESENT(x) (((x) & 0x0080) >> 6)
276 #define QOS_FIELD_CONTENT(x) (((x) & 0xFF00) >> 8)
277 #define QOS_MESH_CONTROL_PRESENT(x) (((x) & 0x0100) >> 8)
279 #define QOS_FLAG_EOSP 0x0010
282 * Extract subfields from the result of QOS_FIELD_CONTENT().
284 #define QOS_PS_BUF_STATE_INDICATED(x) (((x) & 0x02) >> 1)
285 #define QOS_PS_HIGHEST_PRI_BUF_AC(x) (((x) & 0x0C) >> 2)
286 #define QOS_PS_QAP_BUF_LOAD(x) (((x) & 0xF0) >> 4)
289 * Bits from the HT Control field.
290 * 802.11-2012 and 802.11ac-2013 8.2.4.6, 32 bits.
292 #define HTC_VHT 0x00000001
293 #define HTC_MRQ 0x00000004
294 #define HTC_UNSOLICITED_MFB 0x20000000
297 * Extract subfields from the HT Control field.
299 #define HTC_LAC(htc) ((htc) & 0xFE)
300 #define HTC_LAC_MAI(htc) (((htc) >> 2) & 0xF)
301 #define HTC_IS_ASELI(htc) (HTC_LAC_MAI(htc) == 0xE)
302 #define HTC_LAC_MAI_MRQ(htc) ((HTC_LAC_MAI(htc)) & 0x1)
303 #define HTC_LAC_MAI_MSI(htc) ((HTC_LAC_MAI(htc) >> 1) & 0x7)
304 #define HTC_LAC_MFSI(htc) (((htc) >> 4) & 0x7)
305 #define HTC_LAC_ASEL_CMD(htc) (((htc) >> 9) & 0x7)
306 #define HTC_LAC_ASEL_DATA(htc) (((htc) >> 12) & 0xF)
307 #define HTC_LAC_MFB(htc) (((htc) >> 9) & 0x7F)
308 #define HTC_CAL_POS(htc) (((htc) >> 16) & 0x3)
309 #define HTC_CAL_SEQ(htc) (((htc) >> 18) & 0x3)
310 #define HTC_CSI_STEERING(htc) (((htc) >> 22) & 0x3)
311 #define HTC_NDP_ANN(htc) (((htc) >> 24) & 0x1)
312 #define HTC_AC_CONSTRAINT(htc) (((htc) >> 30) & 0x1)
313 #define HTC_RDG_MORE_PPDU(htc) (((htc) >> 31) & 0x1)
315 #define HTC_MFB(htc) (((htc) >> 9) & 0x7FFF)
317 /* VHT-MCS = 15, NUM_STS = 7 */
318 #define HTC_NO_FEEDBACK_PRESENT(mfb) (((mfb) & 0x7F) == 0x7F)
321 * Extract subfields from the key octet in WEP-encrypted frames.
323 #define KEY_OCTET_WEP_KEY(x) (((x) & 0xC0) >> 6)
325 #define KEY_EXTIV 0x20
329 * Bits from the Mesh Flags field
331 #define MESH_FLAGS_ADDRESS_EXTENSION 0x3
333 /* ************************************************************************* */
334 /* Constants used to identify cooked frame types */
335 /* ************************************************************************* */
336 #define MGT_FRAME 0x00 /* Frame type is management */
337 #define CONTROL_FRAME 0x01 /* Frame type is control */
338 #define DATA_FRAME 0x02 /* Frame type is Data */
339 #define EXTENSION_FRAME 0x03 /* Frame type is Extension */
341 #define DATA_SHORT_HDR_LEN 24
342 #define DATA_LONG_HDR_LEN 30
343 #define MGT_FRAME_HDR_LEN 24 /* Length of Management frame-headers */
345 /* ************************************************************************* */
346 /* Logical field codes (IEEE 802.11 encoding of tags) */
347 /* ************************************************************************* */
349 #define TAG_SUPP_RATES 1
350 #define TAG_FH_PARAMETER 2
351 #define TAG_DS_PARAMETER 3
352 #define TAG_CF_PARAMETER 4
354 #define TAG_IBSS_PARAMETER 6
355 #define TAG_COUNTRY_INFO 7
356 #define TAG_FH_HOPPING_PARAMETER 8
357 #define TAG_FH_HOPPING_TABLE 9
358 #define TAG_REQUEST 10
359 #define TAG_QBSS_LOAD 11
360 #define TAG_EDCA_PARAM_SET 12
363 #define TAG_SCHEDULE 15
364 #define TAG_CHALLENGE_TEXT 16
366 #define TAG_POWER_CONSTRAINT 32
367 #define TAG_POWER_CAPABILITY 33
368 #define TAG_TPC_REQUEST 34
369 #define TAG_TPC_REPORT 35
370 #define TAG_SUPPORTED_CHANNELS 36
371 #define TAG_CHANNEL_SWITCH_ANN 37
372 #define TAG_MEASURE_REQ 38
373 #define TAG_MEASURE_REP 39
375 #define TAG_IBSS_DFS 41
376 #define TAG_ERP_INFO 42
377 #define TAG_TS_DELAY 43
378 #define TAG_TCLAS_PROCESS 44
379 #define TAG_HT_CAPABILITY 45 /* IEEE Stc 802.11n/D2.0 */
380 #define TAG_QOS_CAPABILITY 46
381 #define TAG_ERP_INFO_OLD 47 /* IEEE Std 802.11g/D4.0 */
382 #define TAG_RSN_IE 48
384 #define TAG_EXT_SUPP_RATES 50
385 #define TAG_AP_CHANNEL_REPORT 51
386 #define TAG_NEIGHBOR_REPORT 52
388 #define TAG_MOBILITY_DOMAIN 54 /* IEEE Std 802.11r-2008 */
389 #define TAG_FAST_BSS_TRANSITION 55 /* IEEE Std 802.11r-2008 */
390 #define TAG_TIMEOUT_INTERVAL 56 /* IEEE Std 802.11r-2008 */
391 #define TAG_RIC_DATA 57 /* IEEE Std 802.11r-2008 */
392 #define TAG_DSE_REG_LOCATION 58
393 #define TAG_SUPPORTED_OPERATING_CLASSES 59 /* IEEE Std 802.11w-2009 */
394 #define TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT 60 /* IEEE Std 802.11w-2009 */
395 #define TAG_HT_INFO 61 /* IEEE Stc 802.11n/D2.0 */
396 #define TAG_SECONDARY_CHANNEL_OFFSET 62 /* IEEE Stc 802.11n/D1.10/D2.0 */
397 #define TAG_BSS_AVG_ACCESS_DELAY 63
398 #define TAG_ANTENNA 64
400 #define TAG_MEASURE_PILOT_TRANS 66
401 #define TAG_BSS_AVB_ADM_CAPACITY 67
402 #define TAG_IE_68_CONFLICT 68 /* Conflict: WAPI Vs. IEEE */
403 #define TAG_WAPI_PARAM_SET 68
404 #define TAG_BSS_AC_ACCESS_DELAY 68
405 #define TAG_TIME_ADV 69 /* IEEE Std 802.11p-2010 */
406 #define TAG_RM_ENABLED_CAPABILITY 70
407 #define TAG_MULTIPLE_BSSID 71
408 #define TAG_20_40_BSS_CO_EX 72 /* IEEE P802.11n/D6.0 */
409 #define TAG_20_40_BSS_INTOL_CH_REP 73 /* IEEE P802.11n/D6.0 */
410 #define TAG_OVERLAP_BSS_SCAN_PAR 74 /* IEEE P802.11n/D6.0 */
411 #define TAG_RIC_DESCRIPTOR 75 /* IEEE Std 802.11r-2008 */
412 #define TAG_MMIE 76 /* IEEE Std 802.11w-2009 */
413 #define TAG_EVENT_REQUEST 78
414 #define TAG_EVENT_REPORT 79
415 #define TAG_DIAGNOSTIC_REQUEST 80
416 #define TAG_DIAGNOSTIC_REPORT 81
417 #define TAG_LOCATION_PARAMETERS 82
418 #define TAG_NO_BSSID_CAPABILITY 83
419 #define TAG_SSID_LIST 84
420 #define TAG_MULTIPLE_BSSID_INDEX 85
421 #define TAG_FMS_DESCRIPTOR 86
422 #define TAG_FMS_REQUEST 87
423 #define TAG_FMS_RESPONSE 88
424 #define TAG_QOS_TRAFFIC_CAPABILITY 89
425 #define TAG_BSS_MAX_IDLE_PERIOD 90
426 #define TAG_TFS_REQUEST 91
427 #define TAG_TFS_RESPONSE 92
428 #define TAG_WNM_SLEEP_MODE 93
429 #define TAG_TIM_BROADCAST_REQUEST 94
430 #define TAG_TIM_BROADCAST_RESPONSE 95
431 #define TAG_COLLOCATED_INTER_REPORT 96
432 #define TAG_CHANNEL_USAGE 97
433 #define TAG_TIME_ZONE 98 /* IEEE Std 802.11v-2011 */
434 #define TAG_DMS_REQUEST 99
435 #define TAG_DMS_RESPONSE 100
436 #define TAG_LINK_IDENTIFIER 101 /* IEEE Std 802.11z-2010 */
437 #define TAG_WAKEUP_SCHEDULE 102 /* IEEE Std 802.11z-2010 */
438 #define TAG_CHANNEL_SWITCH_TIMING 104 /* IEEE Std 802.11z-2010 */
439 #define TAG_PTI_CONTROL 105 /* IEEE Std 802.11z-2010 */
440 #define TAG_PU_BUFFER_STATUS 106 /* IEEE Std 802.11z-2010 */
441 #define TAG_INTERWORKING 107 /* IEEE Std 802.11u-2011 */
442 #define TAG_ADVERTISEMENT_PROTOCOL 108 /* IEEE Std 802.11u-2011 */
443 #define TAG_EXPIDITED_BANDWIDTH_REQ 109 /* IEEE Std 802.11u-2011 */
444 #define TAG_QOS_MAP_SET 110 /* IEEE Std 802.11u-2011 */
445 #define TAG_ROAMING_CONSORTIUM 111 /* IEEE Std 802.11u-2011 */
446 #define TAG_EMERGENCY_ALERT_ID 112 /* IEEE Std 802.11u-2011 */
447 #define TAG_MESH_CONFIGURATION 113 /* IEEE Std 802.11s-2011 */
448 #define TAG_MESH_ID 114 /* IEEE Std 802.11s-2011 */
449 #define TAG_MESH_LINK_METRIC_REPORT 115
450 #define TAG_CONGESTION_NOTIFICATION 116
451 #define TAG_MESH_PEERING_MGMT 117 /* IEEE Std 802.11s-2011 */
452 #define TAG_MESH_CHANNEL_SWITCH 118
453 #define TAG_MESH_AWAKE_WINDOW 119
454 #define TAG_BEACON_TIMING 120
455 #define TAG_MCCAOP_SETUP_REQUEST 121
456 #define TAG_MCCAOP_SETUP_REPLY 122
457 #define TAG_MCCAOP_ADVERTISEMENT 123
458 #define TAG_MCCAOP_TEARDOWN 124
460 #define TAG_RANN 126 /* IEEE Std 802.11s-2011 */
461 #define TAG_EXTENDED_CAPABILITIES 127 /* IEEE Stc 802.11n/D1.10/D2.0 */
462 #define TAG_AGERE_PROPRIETARY 128
463 #define TAG_MESH_PREQ 130 /* IEEE Std 802.11s-2011 */
464 #define TAG_MESH_PREP 131 /* IEEE Std 802.11s-2011 */
465 #define TAG_MESH_PERR 132 /* IEEE Std 802.11s-2011 */
466 #define TAG_CISCO_CCX1_CKIP 133 /* Cisco Compatible eXtensions v1 */
467 #define TAG_CISCO_CCX2 136 /* Cisco Compatible eXtensions v2 */
470 #define TAG_AUTH_MESH_PEERING_EXCH 139
472 #define TAG_DESTINATION_URI 141
473 #define TAG_U_APSD_COEX 142
474 #define TAG_WAKEUP_SCHEDULE_AD 143 /* IEEE Std 802.11ad */
475 #define TAG_EXTENDED_SCHEDULE 144 /* IEEE Std 802.11ad */
476 #define TAG_STA_AVAILABILITY 145 /* IEEE Std 802.11ad */
477 #define TAG_DMG_TSPEC 146 /* IEEE Std 802.11ad */
478 #define TAG_NEXT_DMG_ATI 147 /* IEEE Std 802.11ad */
479 #define TAG_DMG_CAPABILITIES 148 /* IEEE Std 802.11ad */
480 #define TAG_CISCO_CCX3 149 /* Cisco Compatible eXtensions v3 */
481 #define TAG_CISCO_VENDOR_SPECIFIC 150 /* Cisco Compatible eXtensions */
482 #define TAG_DMG_OPERATION 151 /* IEEE Std 802.11ad */
483 #define TAG_DMG_BSS_PRAMTER_CHANGE 152 /* IEEE Std 802.11ad */
484 #define TAG_DMG_BEAM_REFINEMENT 153 /* IEEE Std 802.11ad */
485 #define TAG_CHANNEL_MEASURMENT_FB 154 /* IEEE Std 802.11ad */
486 #define TAG_AWAKE_WINDOW 157 /* IEEE Std 802.11ad */
487 #define TAG_MULTI_BAND 158 /* IEEE Std 802.11ad */
488 #define TAG_ADDBA_EXT 159 /* IEEE Std 802.11ad */
489 #define TAG_NEXTPCP_LIST 160 /* IEEE Std 802.11ad */
490 #define TAG_PCP_HANDOVER 161 /* IEEE Std 802.11ad */
491 #define TAG_DMG_LINK_MARGIN 162 /* IEEE Std 802.11ad */
492 #define TAG_SWITCHING_STREAM 163 /* IEEE Std 802.11ad */
493 #define TAG_SESSION_TRANSMISSION 164 /* IEEE Std 802.11ad */
494 #define TAG_DYN_TONE_PAIR_REP 165 /* IEEE Std 802.11ad */
495 #define TAG_CLUSTER_REP 166 /* IEEE Std 802.11ad */
496 #define TAG_RELAY_CAPABILITIES 167 /* IEEE Std 802.11ad */
497 #define TAG_RELAY_TRANSFER_PARAM 168 /* IEEE Std 802.11ad */
498 #define TAG_BEAMLINK_MAINTAINCE 169 /* IEEE Std 802.11ad */
499 #define TAG_MULTIPLE_MAC_SUBLAYERS 170 /* IEEE Std 802.11ad */
500 #define TAG_U_PID 171 /* IEEE Std 802.11ad */
501 #define TAG_DMG_LINK_ADAPTION_ACK 172 /* IEEE Std 802.11ad */
502 #define TAG_SYMBOL_PROPRIETARY 173
503 #define TAG_MCCAOP_ADVERTISEMENT_OV 174
504 #define TAG_QUIET_PERIOD_REQ 175 /* IEEE Std 802.11ad */
505 #define TAG_QUIET_PERIOD_RES 177 /* IEEE Std 802.11ad */
506 #define TAG_ECPAC_POLICY 182 /* IEEE Std 802.11ad */
507 #define TAG_CLUSTER_TIME_OFFSET 183 /* IEEE Std 802.11ad */
508 #define TAG_ANTENNA_SECTOR_ID 190 /* IEEE Std 802.11ad */
509 #define TAG_VHT_CAPABILITY 191 /* IEEE Std 802.11ac/D3.1 */
510 #define TAG_VHT_OPERATION 192 /* IEEE Std 802.11ac/D3.1 */
511 #define TAG_EXT_BSS_LOAD 193 /* IEEE Std 802.11ac */
512 #define TAG_WIDE_BW_CHANNEL_SWITCH 194 /* IEEE Std 802.11ac */
513 #define TAG_VHT_TX_PWR_ENVELOPE 195 /* IEEE Std 802.11ac/D5.0 */
514 #define TAG_CHANNEL_SWITCH_WRAPPER 196 /* IEEE Std 802.11ac */
515 #define TAG_OPERATING_MODE_NOTIFICATION 199 /* IEEE Std 802.11ac */
516 #define TAG_VENDOR_SPECIFIC_IE 221
518 static const value_string tag_num_vals[] = {
519 { TAG_SSID, "SSID parameter set" },
520 { TAG_SUPP_RATES, "Supported Rates" },
521 { TAG_FH_PARAMETER, "FH Parameter set" },
522 { TAG_DS_PARAMETER, "DS Parameter set" },
523 { TAG_CF_PARAMETER, "CF Parameter set" },
524 { TAG_TIM, "Traffic Indication Map (TIM)" },
525 { TAG_IBSS_PARAMETER, "IBSS Parameter set" },
526 { TAG_COUNTRY_INFO, "Country Information" },
527 { TAG_FH_HOPPING_PARAMETER, "Hopping Pattern Parameters" },
528 { TAG_FH_HOPPING_TABLE, "Hopping Pattern Table" },
529 { TAG_REQUEST, "Request" },
530 { TAG_QBSS_LOAD, "QBSS Load Element" },
531 { TAG_EDCA_PARAM_SET, "EDCA Parameter Set" },
532 { TAG_TSPEC, "Traffic Specification" },
533 { TAG_TCLAS, "Traffic Classification" },
534 { TAG_SCHEDULE, "Schedule" },
535 { TAG_CHALLENGE_TEXT, "Challenge text" },
536 { TAG_POWER_CONSTRAINT, "Power Constraint" },
537 { TAG_POWER_CAPABILITY, "Power Capability" },
538 { TAG_TPC_REQUEST, "TPC Request" },
539 { TAG_TPC_REPORT, "TPC Report" },
540 { TAG_SUPPORTED_CHANNELS, "Supported Channels" },
541 { TAG_CHANNEL_SWITCH_ANN, "Channel Switch Announcement" },
542 { TAG_MEASURE_REQ, "Measurement Request" },
543 { TAG_MEASURE_REP, "Measurement Report" },
544 { TAG_QUIET, "Quiet" },
545 { TAG_IBSS_DFS, "IBSS DFS" },
546 { TAG_ERP_INFO, "ERP Information" },
547 { TAG_TS_DELAY, "TS Delay" },
548 { TAG_TCLAS_PROCESS, "TCLAS Processing" },
549 { TAG_HT_CAPABILITY, "HT Capabilities (802.11n D1.10)" },
550 { TAG_QOS_CAPABILITY, "QoS Capability" },
551 { TAG_ERP_INFO_OLD, "ERP Information" }, /* Reserved... */
552 { TAG_RSN_IE, "RSN Information" },
553 { TAG_EXT_SUPP_RATES, "Extended Supported Rates" },
554 { TAG_AP_CHANNEL_REPORT, "AP Channel Report" },
555 { TAG_NEIGHBOR_REPORT, "Neighbor Report" },
556 { TAG_RCPI, "RCPI" },
557 { TAG_MOBILITY_DOMAIN, "Mobility Domain" },
558 { TAG_FAST_BSS_TRANSITION, "Fast BSS Transition" },
559 { TAG_TIMEOUT_INTERVAL, "Timeout Interval" },
560 { TAG_RIC_DATA, "RIC Data" },
561 { TAG_DSE_REG_LOCATION, "DSE Registered Location" },
562 { TAG_SUPPORTED_OPERATING_CLASSES, "Supported Operating Classes" },
563 { TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement" },
564 { TAG_HT_INFO, "HT Information (802.11n D1.10)" },
565 { TAG_SECONDARY_CHANNEL_OFFSET, "Secondary Channel Offset (802.11n D1.10)" },
566 { TAG_BSS_AVG_ACCESS_DELAY, "BSS Average Access Delay" },
567 { TAG_ANTENNA, "Antenna" },
568 { TAG_RSNI, "RSNI" },
569 { TAG_MEASURE_PILOT_TRANS, "Measurement Pilot Transmission" },
570 { TAG_BSS_AVB_ADM_CAPACITY, "BSS Available Admission Capacity" },
571 { TAG_IE_68_CONFLICT, "BSS AC Access Delay/WAPI Parameter Set" },
572 { TAG_TIME_ADV, "Time Advertisement" },
573 { TAG_RM_ENABLED_CAPABILITY, "RM Enabled Capabilities" },
574 { TAG_MULTIPLE_BSSID, "Multiple BSSID" },
575 { TAG_20_40_BSS_CO_EX, "20/40 BSS Coexistence" },
576 { TAG_20_40_BSS_INTOL_CH_REP, "20/40 BSS Intolerant Channel Report" }, /* IEEE P802.11n/D6.0 */
577 { TAG_OVERLAP_BSS_SCAN_PAR, "Overlapping BSS Scan Parameters" }, /* IEEE P802.11n/D6.0 */
578 { TAG_RIC_DESCRIPTOR, "RIC Descriptor" },
579 { TAG_MMIE, "Management MIC" },
580 { TAG_EVENT_REQUEST, "Event Request" },
581 { TAG_EVENT_REPORT, "Event Report" },
582 { TAG_DIAGNOSTIC_REQUEST, "Diagnostic Request" },
583 { TAG_DIAGNOSTIC_REPORT, "Diagnostic Report" },
584 { TAG_LOCATION_PARAMETERS, "Location Parameters" },
585 { TAG_NO_BSSID_CAPABILITY, "Non Transmitted BSSID Capability" },
586 { TAG_SSID_LIST, "SSID List" },
587 { TAG_MULTIPLE_BSSID_INDEX, "Multiple BSSID Index" },
588 { TAG_FMS_DESCRIPTOR, "FMS Descriptor" },
589 { TAG_FMS_REQUEST, "FMS Request" },
590 { TAG_FMS_RESPONSE, "FMS Response" },
591 { TAG_QOS_TRAFFIC_CAPABILITY, "QoS Traffic Capability" },
592 { TAG_BSS_MAX_IDLE_PERIOD, "BSS Max Idle Period" },
593 { TAG_TFS_REQUEST, "TFS Request" },
594 { TAG_TFS_RESPONSE, "TFS Response" },
595 { TAG_WNM_SLEEP_MODE, "WNM-Sleep Mode" },
596 { TAG_TIM_BROADCAST_REQUEST, "TIM Broadcast Request" },
597 { TAG_TIM_BROADCAST_RESPONSE, "TIM Broadcast Response" },
598 { TAG_COLLOCATED_INTER_REPORT, "Collocated Interference Report" },
599 { TAG_CHANNEL_USAGE, "Channel Usage" },
600 { TAG_TIME_ZONE, "Time Zone" },
601 { TAG_DMS_REQUEST, "DMS Request" },
602 { TAG_DMS_RESPONSE, "DMS Response" },
603 { TAG_LINK_IDENTIFIER, "Link Identifier" },
604 { TAG_WAKEUP_SCHEDULE, "Wakeup Schedule" },
605 { TAG_CHANNEL_SWITCH_TIMING, "Channel Switch Timing" },
606 { TAG_PTI_CONTROL, "PTI Control" },
607 { TAG_PU_BUFFER_STATUS, "PU Buffer Status" },
608 { TAG_INTERWORKING, "Interworking" },
609 { TAG_ADVERTISEMENT_PROTOCOL, "Advertisement Protocol"},
610 { TAG_EXPIDITED_BANDWIDTH_REQ, "Expedited Bandwidth Request" },
611 { TAG_QOS_MAP_SET, "QoS Map Set" },
612 { TAG_ROAMING_CONSORTIUM, "Roaming Consortium" },
613 { TAG_EMERGENCY_ALERT_ID, "Emergency Alert Identifier" },
614 { TAG_MESH_CONFIGURATION, "Mesh Configuration" },
615 { TAG_MESH_ID, "Mesh ID" },
616 { TAG_MESH_LINK_METRIC_REPORT, "Mesh Link Metric Report" },
617 { TAG_CONGESTION_NOTIFICATION, "Congestion Notification" },
618 { TAG_MESH_PEERING_MGMT, "Mesh Peering Management" },
619 { TAG_MESH_CHANNEL_SWITCH, "Mesh Channel Switch Parameters" },
620 { TAG_MESH_AWAKE_WINDOW, "Mesh Awake Windows" },
621 { TAG_BEACON_TIMING, "Beacon Timing" },
622 { TAG_MCCAOP_SETUP_REQUEST, "MCCAOP Setup Request" },
623 { TAG_MCCAOP_SETUP_REPLY, "MCCAOP SETUP Reply" },
624 { TAG_MCCAOP_ADVERTISEMENT, "MCCAOP Advertisement" },
625 { TAG_MCCAOP_TEARDOWN, "MCCAOP Teardown" },
626 { TAG_GANN, "Gate Announcement" },
627 { TAG_RANN, "Root Announcement" },
628 { TAG_EXTENDED_CAPABILITIES, "Extended Capabilities" },
629 { TAG_AGERE_PROPRIETARY, "Agere Proprietary" },
630 { TAG_MESH_PREQ, "Path Request" },
631 { TAG_MESH_PREP, "Path Reply" },
632 { TAG_MESH_PERR, "Path Error" },
633 { TAG_CISCO_CCX1_CKIP, "Cisco CCX1 CKIP + Device Name" },
634 { TAG_CISCO_CCX2, "Cisco CCX2" },
635 { TAG_PXU, "Proxy Update" },
636 { TAG_PXUC, "Proxy Update Confirmation"},
637 { TAG_AUTH_MESH_PEERING_EXCH, "Auhenticated Mesh Perring Exchange" },
638 { TAG_MIC, "MIC (Message Integrity Code)" },
639 { TAG_DESTINATION_URI, "Destination URI" },
640 { TAG_U_APSD_COEX, "U-APSD Coexistence" },
641 { TAG_WAKEUP_SCHEDULE_AD, "Wakeup Schedule 802.11ad" },
642 { TAG_EXTENDED_SCHEDULE, "Extended Schedule" },
643 { TAG_STA_AVAILABILITY, "STA Availability" },
644 { TAG_DMG_TSPEC, "DMG TSPEC" },
645 { TAG_NEXT_DMG_ATI, "Next DMG ATI" },
646 { TAG_DMG_CAPABILITIES, "DMG Capabilities" },
647 { TAG_CISCO_CCX3, "Cisco Unknown 95" },
648 { TAG_CISCO_VENDOR_SPECIFIC, "Vendor Specific" },
649 { TAG_DMG_OPERATION, "DMG Operating" },
650 { TAG_DMG_BSS_PRAMTER_CHANGE, "DMG BSS Parameter Change" },
651 { TAG_DMG_BEAM_REFINEMENT, "DMG Beam Refinement" },
652 { TAG_CHANNEL_MEASURMENT_FB, "Channel Measurement Feedback" },
653 { TAG_AWAKE_WINDOW, "Awake Window" },
654 { TAG_MULTI_BAND, "Multi Band" },
655 { TAG_ADDBA_EXT, "ADDBA Extension" },
656 { TAG_NEXTPCP_LIST, "NEXTPCP List" },
657 { TAG_PCP_HANDOVER, "PCP Handover" },
658 { TAG_DMG_LINK_MARGIN, "DMG Link Margin" },
659 { TAG_SWITCHING_STREAM, "Switching Stream" },
660 { TAG_SESSION_TRANSMISSION, "Session Transmission" },
661 { TAG_DYN_TONE_PAIR_REP, "Dynamic Tone Pairing Report" },
662 { TAG_CLUSTER_REP, "Cluster Report" },
663 { TAG_RELAY_CAPABILITIES, "Relay Capabilities" },
664 { TAG_RELAY_TRANSFER_PARAM, "Relay Transfer Parameter" },
665 { TAG_BEAMLINK_MAINTAINCE, "Beamlink Maintenance" },
666 { TAG_MULTIPLE_MAC_SUBLAYERS, "Multiple MAC Sublayers" },
667 { TAG_U_PID, "U-PID" },
668 { TAG_DMG_LINK_ADAPTION_ACK, "DMG Link Adaption Acknowledgment" },
669 { TAG_SYMBOL_PROPRIETARY, "Symbol Proprietary" },
670 { TAG_MCCAOP_ADVERTISEMENT_OV, "MCCAOP Advertisement Overview" },
671 { TAG_QUIET_PERIOD_REQ, "Quiet Period Request" },
672 { TAG_QUIET_PERIOD_RES, "Quiet Period Response" },
673 { TAG_ECPAC_POLICY, "ECPAC Policy" },
674 { TAG_CLUSTER_TIME_OFFSET, "Cluster Time Offset" },
675 { TAG_ANTENNA_SECTOR_ID, "Antenna Sector ID" },
676 { TAG_VHT_CAPABILITY, "VHT Capabilities (IEEE Std 802.11ac/D3.1)" },
677 { TAG_VHT_OPERATION, "VHT Operation (IEEE Std 802.11ac/D3.1)" },
678 { TAG_EXT_BSS_LOAD, "Extended BSS Load" },
679 { TAG_WIDE_BW_CHANNEL_SWITCH, "Wide Bandwidth Channel Switch" },
680 { TAG_VHT_TX_PWR_ENVELOPE, "VHT Tx Power Envelope (IEEE Std 802.11ac/D5.0)" },
681 { TAG_CHANNEL_SWITCH_WRAPPER, "Channel Switch Wrapper" },
682 { TAG_OPERATING_MODE_NOTIFICATION, "Operating Mode Notification" },
683 { TAG_VENDOR_SPECIFIC_IE, "Vendor Specific" },
686 static value_string_ext tag_num_vals_ext = VALUE_STRING_EXT_INIT(tag_num_vals);
688 /* WFA vendor specific subtypes */
689 #define WFA_SUBTYPE_P2P 9
690 #define WFA_SUBTYPE_WIFI_DISPLAY 10
691 #define WFA_SUBTYPE_HS20_INDICATION 16
692 #define WFA_SUBTYPE_HS20_ANQP 17
694 static const value_string wfa_subtype_vals[] = {
695 { WFA_SUBTYPE_P2P, "P2P" },
696 { WFA_SUBTYPE_HS20_INDICATION, "Hotspot 2.0 Indication" },
697 { WFA_SUBTYPE_HS20_ANQP, "Hotspot 2.0 ANQP" },
701 /* ************************************************************************* */
702 /* Supported Rates (7.3.2.2) */
703 /* ************************************************************************* */
705 static const value_string ieee80211_supported_rates_vals[] = {
746 { 0xFF, "BSS requires support for mandatory features of HT PHY (IEEE 802.11 - Clause 20)" },
749 value_string_ext ieee80211_supported_rates_vals_ext = VALUE_STRING_EXT_INIT(ieee80211_supported_rates_vals);
751 /* ************************************************************************* */
752 /* 8.4.1.7 Reason Code field */
753 /* ************************************************************************* */
754 static const value_string ieee80211_reason_code[] = {
755 { 1, "Unspecified reason" },
756 { 2, "Previous authentication no longer valid" },
757 { 3, "Deauthenticated because sending STA is leaving (or has left) IBSS or ESS" },
758 { 4, "Disassociated due to inactivity" },
759 { 5, "Disassociated because AP is unable to handle all currently associated STAs" },
760 { 6, "Class 2 frame received from nonauthenticated STA" },
761 { 7, "Class 3 frame received from nonassociated STA" },
762 { 8, "Disassociated because sending STA is leaving (or has left) BSS" },
763 { 9, "STA requesting (re)association is not authenticated with responding STA" },
764 { 10, "Disassociated because the information in the Power Capability element is unacceptable" },
765 { 11, "Disassociated because the information in the Supported Channels element is unacceptable" },
767 { 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" },
768 { 14, "Message integrity code (MIC) failure" },
769 { 15, "4-Way Handshake timeout" },
770 { 16, "Group Key Handshake timeout" },
771 { 17, "Information element in 4-Way Handshake different from (Re)Association Request/Probe Response/Beacon frame" },
772 { 18, "Invalid group cipher" },
773 { 19, "Invalid pairwise cipher" },
774 { 20, "Invalid AKMP" },
775 { 21, "Unsupported RSN information element version" },
776 { 22, "Invalid RSN information element capabilities" },
777 { 23, "IEEE 802.1X authentication failed" },
778 { 24, "Cipher suite rejected because of the security policy" },
779 { 25, "TDLS direct-link teardown due to TDLS peer STA unreachable via the TDLS direct link" },
780 { 26, "TDLS direct-link teardown for unspecified reason" },
781 { 27, "Disassociated because session terminated by SSP request" },
782 { 28, "Disassociated because of lack of SSP roaming agreement" },
783 { 29, "Requested service rejected because of SSP cipher suite or AKM requirement " },
784 { 30, "Requested service not authorized in this location" },
785 { 31, "TS deleted because QoS AP lacks sufficient bandwidth for this QoS STA due to a change in BSS service characteristics or operational mode" },
786 { 32, "Disassociated for unspecified, QoS-related reason" },
787 { 33, "Disassociated because QoS AP lacks sufficient bandwidth for this QoS STA" },
788 { 34, "Disassociated because excessive number of frames need to be acknowledged, but are not acknowledged due to AP transmissions and/or poor channel conditions" },
789 { 35, "Disassociated because STA is transmitting outside the limits of its TXOPs" },
790 { 36, "Requested from peer STA as the STA is leaving the BSS (or resetting)" },
791 { 37, "Requested from peer STA as it does not want to use the mechanism" },
792 { 38, "Requested from peer STA as the STA received frames using the mechanism for which a setup is required" },
793 { 39, "Requested from peer STA due to timeout" },
794 { 45, "Peer STA does not support the requested cipher suite" },
795 { 46, "Disassociated because authorized access limit reached" },
796 { 47, "Disassociated due to external service requirements" },
797 { 48, "Invalid FT Action frame count" },
798 { 49, "Invalid pairwise master key identifier (PMKI)" },
799 { 50, "Invalid MDE" },
800 { 51, "Invalid FTE" },
801 { 52, "SME cancels the mesh peering instance with the reason other than reaching the maximum number of peer mesh STAs" },
802 { 53, "The mesh STA has reached the supported maximum number of peer mesh STAs" },
803 { 54, "The received information violates the Mesh Configuration policy configured in the mesh STA profile" },
804 { 55, "The mesh STA has received a Mesh Peering Close message requesting to close the mesh peering" },
805 { 56, "The mesh STA has re-sent dot11MeshMaxRetries Mesh Peering Open messages, without receiving a Mesh Peering Confirm message" },
806 { 57, "The confirmTimer for the mesh peering instance times out" },
807 { 58, "The mesh STA fails to unwrap the GTK or the values in the wrapped contents do not match" },
808 { 59, "The mesh STA receives inconsistent information about the mesh parameters between Mesh Peering Management frames" },
809 { 60, "The mesh STA fails the authenticated mesh peering exchange because due to failure in selecting either the pairwise ciphersuite or group ciphersuite" },
810 { 61, "The mesh STA does not have proxy information for this external destination" },
811 { 62, "The mesh STA does not have forwarding information for this destination" },
812 { 63, "The mesh STA determines that the link to the next hop of an active path in its forwarding information is no longer usable" },
813 { 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)" },
814 { 65, "The mesh STA performs channel switch to meet regulatory requirements" },
815 { 66, "The mesh STA performs channel switch with unspecified reason" },
818 static value_string_ext ieee80211_reason_code_ext = VALUE_STRING_EXT_INIT(ieee80211_reason_code);
820 /* ************************************************************************* */
821 /* 8.4.1.9 Status Code field */
822 /* ************************************************************************* */
823 static const value_string ieee80211_status_code[] = {
825 { 1, "Unspecified failure" },
826 { 2, "TDLS wakeup schedule rejected but alternative schedule provided" },
827 { 3, "TDLS wakeup schedule rejected" },
829 { 5, "Security disabled" },
830 { 6, "Unacceptable lifetime" },
831 { 7, "Not in same BSS" },
834 { 10, "Cannot support all requested capabilities in the Capability Information field" },
835 { 11, "Reassociation denied due to inability to confirm that association exists" },
836 { 12, "Association denied due to reason outside the scope of this standard" },
837 { 13, "Responding STA does not support the specified authentication algorithm" },
838 { 14, "Received an Authentication frame with authentication transaction sequence number out of expected sequence" },
839 { 15, "Authentication rejected because of challenge failure" },
840 { 16, "Authentication rejected due to timeout waiting for next frame in sequence" },
841 { 17, "Association denied because AP is unable to handle additional associated STAs" },
842 { 18, "Association denied due to requesting STA not supporting all of the data rates in the BSSBasicRateSet parameter" },
843 { 19, "Association denied due to requesting STA not supporting the short preamble option" },
844 { 20, "Association denied due to requesting STA not supporting the PBCC modulation option" },
845 { 21, "Association denied due to requesting STA not supporting the Channel Agility option" },
846 { 22, "Association request rejected because Spectrum Management capability is required" },
847 { 23, "Association request rejected because the information in the Power Capability element is unacceptable" },
848 { 24, "Association request rejected because the information in the Supported Channels element is unacceptable" },
849 { 25, "Association denied due to requesting STA not supporting the Short Slot Time option" },
850 { 26, "Association denied due to requesting STA not supporting the DSSS-OFDM option" },
851 { 27, "Reserved Association denied because the requesting STA does not support HT features" },
852 { 28, "R0KH unreachable" },
853 { 29, "Association denied because the requesting STA does not support the phased coexistence operation (PCO) transition time required by the AP" },
854 { 30, "Association request rejected temporarily; try again later" },
855 { 31, "Robust Management frame policy violation" },
856 { 32, "Unspecified, QoS-related failure" },
857 { 33, "Association denied because QoS AP or PCP has insufficient bandwidth to handle another QoS STA" },
858 { 34, "Association denied due to excessive frame loss rates and/or poor conditions on current operating channel" },
859 { 35, "Association (with QoS BSS) denied because the requesting STA does not support the QoS facility" },
861 { 37, "The request has been declined" },
862 { 38, "The request has not been successful as one or more parameters have invalid values" },
863 { 39, "The allocation or TS has not been created because the request cannot be honored; however, a suggested TSPEC/DMG TSPEC is provided so that the initiating STA may attempt to set another allocation or TS with the suggested changes to the TSPEC/DMG TSPEC" },
864 { 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" },
865 { 41, "Invalid group cipher" },
866 { 42, "Invalid pairwise cipher" },
867 { 43, "Invalid AKMP" },
868 { 44, "Unsupported RSN information element version" },
869 { 45, "Invalid RSN information element capabilities" },
870 { 46, "Cipher suite rejected because of security policy" },
871 { 47, "The TS per allocation has not been created; however, the PCP/HC may be capable of creating a TS or allocation, in response to a request, after the time indicated in the TS Delay element" },
872 { 48, "Direct link is not allowed in the BSS by policy" },
873 { 49, "The Destination STA is not present within this BSS" },
874 { 50, "The Destination STA is not a QoS STA" },
875 { 51, "Association denied because the ListenInterval is too large" },
876 { 52, "Invalid FT Action frame count" },
877 { 53, "Invalid pairwise master key identifier (PMKID)" },
878 { 54, "Invalid MDIE" },
879 { 55, "Invalid FTIE" },
880 { 56, "Requested TCLAS processing is not supported by the PCP/AP" },
881 { 57, "The PCP/AP has insufficient TCLAS processing resources to satisfy the request" },
882 { 58, "The TS has not been created because the request cannot be honored; however, the PCP/HC suggests the STA to transition to other BSSs to setup the TS" },
883 { 59, "GAS Advertisement Protocol not supported" },
884 { 60, "No outstanding GAS request" },
885 { 61, "GAS Response not received from the Advertisement Server" },
886 { 62, "STA timed out waiting for GAS Query Response" },
887 { 63, "GAS Response is larger than query response length limit" },
888 { 64, "Request refused because home network does not support request" },
889 { 65, "Advertisement Server in the network is not currently reachable" },
891 { 67, "Request refused due to permissions received via SSPN interface" },
892 { 68, "Request refused because PCP/AP does not support unauthenticated access" },
896 { 72, "Invalid contents of RSNIE" },
897 { 73, "U-APSD Coexistence is not supported" },
898 { 74, "Requested U-APSD Coexistence mode is not supported" },
899 { 75, "Requested Interval/Duration value cannot be supported with U-APSD Coexistence" },
900 { 76, "Authentication is rejected because an Anti-Clogging Token is required" },
901 { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
902 { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
903 { 79, "Transmission failure" },
904 { 80, "Requested TCLAS Not Supported" },
905 { 81, "TCLAS Resources Exhausted" },
906 { 82, "Rejected with Suggested BSS Transition" },
907 { 83, "Reject with recommended schedule" },
908 { 84, "Reject because no wakeup schedule specified" },
909 { 85, "Success, the destination STA is in power save mode" },
910 { 86, "FST pending, in process of admitting FST session" },
911 { 87, "performing FST now" },
912 { 88, "FST pending, gap(s) in Block Ack window" },
913 { 89, "Reject because of U-PID setting" },
914 { 92, "(Re)association refused for some external reason" },
915 { 93, "(Re)association refused because of memory limits at the AP" },
916 { 94, "(Re)association refused because emergency services are not supported at the AP" },
917 { 95, "GAS query response not yet received" },
918 { 96, "Reject since the request is for transition to a frequency band subject to DSE procedures and FST initiator is a dependent STA" },
921 { 99, "The association has been denied; however, one or more Multi-band elements are included that can be used by the receiving STA to join the BSS" },
922 { 100, "The request failed due to a reservation conflict" },
923 { 101, "The request failed due to exceeded MAF limit" },
924 { 102, "The request failed due to exceeded MCCA track limit" },
925 { 103, "Association denied because the information in the Spectrum Management field is unacceptable" },
928 static value_string_ext ieee80211_status_code_ext = VALUE_STRING_EXT_INIT(ieee80211_status_code);
930 /* ************************************************************************* */
931 /* Frame types, and their names */
932 /* ************************************************************************* */
933 static const value_string frame_type_subtype_vals[] = {
934 {MGT_ASSOC_REQ, "Association Request"},
935 {MGT_ASSOC_RESP, "Association Response"},
936 {MGT_REASSOC_REQ, "Reassociation Request"},
937 {MGT_REASSOC_RESP, "Reassociation Response"},
938 {MGT_PROBE_REQ, "Probe Request"},
939 {MGT_PROBE_RESP, "Probe Response"},
940 {MGT_MEASUREMENT_PILOT, "Measurement Pilot"},
941 {MGT_BEACON, "Beacon frame"},
943 {MGT_DISASS, "Disassociate"},
944 {MGT_AUTHENTICATION, "Authentication"},
945 {MGT_DEAUTHENTICATION, "Deauthentication"},
946 {MGT_ACTION, "Action"},
947 {MGT_ACTION_NO_ACK, "Action No Ack"},
948 {MGT_ARUBA_WLAN, "Aruba Management"},
950 {CTRL_BEAMFORM_RPT_POLL, "Beamforming Report Poll"},
951 {CTRL_VHT_NDP_ANNC, "VHT NDP Announcement"},
952 {CTRL_CONTROL_WRAPPER, "Control Wrapper"},
953 {CTRL_BLOCK_ACK_REQ, "802.11 Block Ack Req"},
954 {CTRL_BLOCK_ACK, "802.11 Block Ack"},
955 {CTRL_PS_POLL, "Power-Save poll"},
956 {CTRL_RTS, "Request-to-send"},
957 {CTRL_CTS, "Clear-to-send"},
958 {CTRL_ACKNOWLEDGEMENT, "Acknowledgement"},
959 {CTRL_CFP_END, "CF-End (Control-frame)"},
960 {CTRL_CFP_ENDACK, "CF-End + CF-Ack (Control-frame)"},
963 {DATA_CF_ACK, "Data + CF-Ack"},
964 {DATA_CF_POLL, "Data + CF-Poll"},
965 {DATA_CF_ACK_POLL, "Data + CF-Ack + CF-Poll"},
966 {DATA_NULL_FUNCTION, "Null function (No data)"},
967 {DATA_CF_ACK_NOD, "Acknowledgement (No data)"},
968 {DATA_CF_POLL_NOD, "CF-Poll (No data)"},
969 {DATA_CF_ACK_POLL_NOD, "CF-Ack/Poll (No data)"},
970 {DATA_QOS_DATA, "QoS Data"},
971 {DATA_QOS_DATA_CF_ACK, "QoS Data + CF-Acknowledgment"},
972 {DATA_QOS_DATA_CF_POLL, "QoS Data + CF-Poll"},
973 {DATA_QOS_DATA_CF_ACK_POLL, "QoS Data + CF-Ack + CF-Poll"},
974 {DATA_QOS_NULL, "QoS Null function (No data)"},
975 {DATA_QOS_CF_POLL_NOD, "QoS CF-Poll (No Data)"},
976 {DATA_QOS_CF_ACK_POLL_NOD, "QoS CF-Ack + CF-Poll (No data)"},
978 {EXTENSION_DMG_BEACON, "DMG Beacon"},
981 {CTRL_SPR, "Service Period Request"},
982 {CTRL_GRANT, "Grant"},
983 {CTRL_DMG_CTS, "DMG Clear-to-send"},
984 {CTRL_DMG_DTS, "DMG Denial-to-send"},
985 {CTRL_GRANT_ACK, "Grant Acknowledgment"},
986 {CTRL_SSW, "Sector Sweep"},
987 {CTRL_SSW_FEEDBACK, "Sector Sweep Feedback"},
988 {CTRL_SSW_ACK, "Sector Sweep Acknowledgment"},
992 static value_string_ext frame_type_subtype_vals_ext = VALUE_STRING_EXT_INIT(frame_type_subtype_vals);
994 /* ************************************************************************* */
995 /* 802.1D Tag Name (by WME Access Category Names) */
996 /* ************************************************************************* */
997 static const value_string ieee80211_qos_tags_acs[] = {
998 { 0, "Best Effort (Best Effort)" },
999 { 1, "Background (Background)" },
1000 { 2, "Spare (Background)" },
1001 { 3, "Excellent Effort (Best Effort)" },
1002 { 4, "Controlled Load (Video)" },
1003 { 5, "Video (Video)" },
1004 { 6, "Voice (Voice)" },
1005 { 7, "Network Control (Voice)" },
1009 /* ************************************************************************* */
1010 /* WME Access Category Names (by WME ACI) */
1011 /* ************************************************************************* */
1012 static const value_string wme_acs[] = {
1013 { 0, "Best Effort" },
1014 { 1, "Background" },
1020 /* ************************************************************************* */
1021 /* Aruba Management Type */
1022 /* ************************************************************************* */
1023 static const value_string aruba_mgt_typevals[] = {
1024 { 0x0001, "Hello" },
1025 { 0x0002, "Probe" },
1027 { 0x0004, "Ageout" },
1028 { 0x0005, "Heartbeat" },
1029 { 0x0006, "Deauth" },
1030 { 0x0007, "Disassoc" },
1031 { 0x0008, "Probe response" },
1032 { 0x0009, "Tunnel update" },
1033 { 0x000A, "Laser beam active" },
1034 { 0x000B, "Client IP" },
1035 { 0x000C, "Laser beam active v2" },
1036 { 0x000D, "AP statistics" },
1039 static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt_typevals);
1041 /*** Begin: Action Fixed Parameter ***/
1042 #define CAT_SPECTRUM_MGMT 0
1045 #define CAT_BLOCK_ACK 3
1046 #define CAT_PUBLIC 4
1047 #define CAT_RADIO_MEASUREMENT 5
1048 #define CAT_FAST_BSS_TRANSITION 6
1050 #define CAT_SA_QUERY 8
1051 #define CAT_PUBLIC_PROTECTED 9
1053 #define CAT_UNPROTECTED_WNM 11
1056 #define CAT_MULTIHOP 14
1057 #define CAT_SELF_PROTECTED 15
1059 #define CAT_MGMT_NOTIFICATION 17
1060 #define CAT_FAST_SESSION_TRANSFER 18
1061 #define CAT_ROBUST_AV_STREAMING 19
1062 #define CAT_UNPROTECTED_DMG 20
1064 #define CAT_VENDOR_SPECIFIC_PROTECTED 126
1065 #define CAT_VENDOR_SPECIFIC 127
1067 #define CAT_MESH_LINK_METRIC 31
1068 #define CAT_MESH_PATH_SELECTION 32
1069 #define CAT_MESH_INTERWORKING 33
1070 #define CAT_MESH_RESOURCE_COORDINATION 34
1071 #define CAT_MESH_SECURITY_ARCHITECTURE 35
1073 #define SM_ACTION_MEASUREMENT_REQUEST 0
1074 #define SM_ACTION_MEASUREMENT_REPORT 1
1075 #define SM_ACTION_TPC_REQUEST 2
1076 #define SM_ACTION_TPC_REPORT 3
1077 #define SM_ACTION_CHAN_SWITCH_ANNC 4
1078 #define SM_ACTION_EXT_CHAN_SWITCH_ANNC 5
1080 #define QOS_ACTION_ADDTS_REQUEST 0
1081 #define QOS_ACTION_ADDTS_RESPONSE 1
1082 #define QOS_ACTION_DELTS 2
1083 #define QOS_ACTION_SCHEDULE 3
1084 #define QOS_ACTION_MAP_CONFIGURE 4
1086 #define DLS_ACTION_REQUEST 0
1087 #define DLS_ACTION_RESPONSE 1
1088 #define DLS_ACTION_TEARDOWN 2
1090 #define BA_ADD_BLOCK_ACK_REQUEST 0
1091 #define BA_ADD_BLOCK_ACK_RESPONSE 1
1092 #define BA_DELETE_BLOCK_ACK 2
1094 /* Keep in sync with PPA_* defines */
1095 #define PA_20_40_BSS_COEXISTENCE_MANAGEMENT 0
1096 #define PA_DSE_ENABLEMENT 1
1097 #define PA_DSE_DEENABLEMENT 2
1098 #define PA_DSE_REG_LOC_ANNOUNCEMENT 3
1099 #define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4
1100 #define PA_DSE_MEASUREMENT_REQUEST 5
1101 #define PA_DSE_MEASUREMENT_REPORT 6
1102 #define PA_MEASUREMENT_PILOT 7
1103 #define PA_DSE_POWER_CONSTRAINT 8
1104 #define PA_VENDOR_SPECIFIC 9
1105 #define PA_GAS_INITIAL_REQUEST 10
1106 #define PA_GAS_INITIAL_RESPONSE 11
1107 #define PA_GAS_COMEBACK_REQUEST 12
1108 #define PA_GAS_COMEBACK_RESPONSE 13
1109 #define PA_TDLS_DISCOVERY_RESPONSE 14
1110 #define PA_LOCATION_TRACK_NOTIFICATION 15
1111 #define PA_QAB_REQUEST 16
1112 #define PA_QAB_RESPONSE 17
1114 /* Keep in sync with PA_* defines */
1115 #define PPA_DSE_ENABLEMENT 1
1116 #define PPA_DSE_DEENABLEMENT 2
1117 #define PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4
1118 #define PPA_DSE_MEASUREMENT_REQUEST 5
1119 #define PPA_DSE_MEASUREMENT_REPORT 6
1120 #define PPA_DSE_POWER_CONSTRAINT 8
1121 #define PPA_VENDOR_SPECIFIC 9
1122 #define PPA_GAS_INITIAL_REQUEST 10
1123 #define PPA_GAS_INITIAL_RESPONSE 11
1124 #define PPA_GAS_COMEBACK_REQUEST 12
1125 #define PPA_GAS_COMEBACK_RESPONSE 13
1126 #define PPA_QAB_REQUEST 16
1127 #define PPA_QAB_RESPONSE 17
1129 #define HT_ACTION_NOTIFY_CHAN_WIDTH 0
1130 #define HT_ACTION_SM_PWR_SAVE 1
1131 #define HT_ACTION_PSMP_ACTION 2
1132 #define HT_ACTION_SET_PCO_PHASE 3
1133 #define HT_ACTION_MIMO_CSI 4
1134 #define HT_ACTION_MIMO_BEAMFORMING 5
1135 #define HT_ACTION_MIMO_COMPRESSED_BEAMFORMING 6
1136 #define HT_ACTION_ANT_SEL_FEEDBACK 7
1137 #define HT_ACTION_HT_INFO_EXCHANGE 8
1139 #define DMG_ACTION_PWR_SAVE_CONFIG_REQ 0
1140 #define DMG_ACTION_PWR_SAVE_CONFIG_RES 1
1141 #define DMG_ACTION_INFO_REQ 2
1142 #define DMG_ACTION_INFO_RES 3
1143 #define DMG_ACTION_HANDOVER_REQ 4
1144 #define DMG_ACTION_HANDOVER_RES 5
1145 #define DMG_ACTION_DTP_REQ 6
1146 #define DMG_ACTION_DTP_RES 7
1147 #define DMG_ACTION_RELAY_SEARCH_REQ 8
1148 #define DMG_ACTION_RELAY_SEARCH_RES 9
1149 #define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ 10
1150 #define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES 11
1151 #define DMG_ACTION_RLS_REQ 12
1152 #define DMG_ACTION_RLS_RES 13
1153 #define DMG_ACTION_RLS_ANNOUNCE 14
1154 #define DMG_ACTION_RLS_TEARDOWN 15
1155 #define DMG_ACTION_RELAY_ACK_REQ 16
1156 #define DMG_ACTION_RELAY_ACK_RES 17
1157 #define DMG_ACTION_TPA_REQ 18
1158 #define DMG_ACTION_TPA_RES 19
1159 #define DMG_ACTION_TPA_REP 20
1160 #define DMG_ACTION_ROC_REQ 21
1161 #define DMG_ACTION_ROC_RES 22
1163 #define UNPROTECTED_DMG_ANNOUNCE 0
1164 #define UNPROTECTED_DMG_BRP 1
1166 #define FST_SETUP_REQUEST 0
1167 #define FST_SETUP_RESPONSE 1
1168 #define FST_TEAR_DOWN 2
1169 #define FST_ACK_REQUEST 3
1170 #define FST_ACK_RESPONSE 4
1171 #define FST_ON_CHANNEL_TUNNEL_REQUEST 5
1173 /* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */
1174 #define FT_ACTION_REQUEST 1
1175 #define FT_ACTION_RESPONSE 2
1176 #define FT_ACTION_CONFIRM 3
1177 #define FT_ACTION_ACK 4
1179 /* SA Query Action frame codes (IEEE 802.11w-2009, 7.4.9) */
1180 #define SA_QUERY_REQUEST 0
1181 #define SA_QUERY_RESPONSE 1
1183 /* IEEE Std 802.11z-2010, 7.4.11, Table 7-57v1 */
1184 #define TDLS_SETUP_REQUEST 0
1185 #define TDLS_SETUP_RESPONSE 1
1186 #define TDLS_SETUP_CONFIRM 2
1187 #define TDLS_TEARDOWN 3
1188 #define TDLS_PEER_TRAFFIC_INDICATION 4
1189 #define TDLS_CHANNEL_SWITCH_REQUEST 5
1190 #define TDLS_CHANNEL_SWITCH_RESPONSE 6
1191 #define TDLS_PEER_PSM_REQUEST 7
1192 #define TDLS_PEER_PSM_RESPONSE 8
1193 #define TDLS_PEER_TRAFFIC_RESPONSE 9
1194 #define TDLS_DISCOVERY_REQUEST 10
1196 /* IEEE Std 802.11-2012, 8.5.7.1, Table 8-206 */
1197 #define RM_ACTION_RADIO_MEASUREMENT_REQUEST 0
1198 #define RM_ACTION_RADIO_MEASUREMENT_REPORT 1
1199 #define RM_ACTION_LINK_MEASUREMENT_REQUEST 2
1200 #define RM_ACTION_LINK_MEASUREMENT_REPORT 3
1201 #define RM_ACTION_NEIGHBOR_REPORT_REQUEST 4
1202 #define RM_ACTION_NEIGHBOR_REPORT_RESPONSE 5
1204 /* 11s draft 12.0, table 7-57v30 */
1205 #define MESH_ACTION_LINK_METRIC_REPORT 0
1206 #define MESH_ACTION_HWMP 1
1207 #define MESH_ACTION_GATE_ANNOUNCE 2
1208 #define MESH_ACTION_CONGESTION_CTL 3
1209 #define MESH_ACTION_MCCA_SETUP_REQUEST 4
1210 #define MESH_ACTION_MCCA_SETUP_REPLY 5
1211 #define MESH_ACTION_MCCA_ADV_REQUEST 6
1212 #define MESH_ACTION_MCCA_ADV 7
1213 #define MESH_ACTION_MCCA_TEARDOWN 8
1214 #define MESH_ACTION_TBTT_ADJ_REQUEST 9
1215 #define MESH_ACTION_TBTT_ADJ_RESPONSE 10
1217 /* 11s draft 12.0, table 7-57v42: Multihop Action field values */
1218 #define MULTIHOP_ACTION_PROXY_UPDATE 0
1219 #define MULTIHOP_ACTION_PROXY_UPDATE_CONF 1
1221 /* 11s draft 12.0, table 7-57v24: Self-protected Action field values */
1222 #define SELFPROT_ACTION_MESH_PEERING_OPEN 1
1223 #define SELFPROT_ACTION_MESH_PEERING_CONFIRM 2
1224 #define SELFPROT_ACTION_MESH_PEERING_CLOSE 3
1225 #define SELFPROT_ACTION_MESH_GROUP_KEY_INFORM 4
1226 #define SELFPROT_ACTION_MESH_GROUP_KEY_ACK 5
1228 /* 11s draft 12.0, table 7-43bj6: Mesh Peering Protocol Identifier field values */
1229 #define MESH_PEERING_PROTO_MGMT 0
1230 #define MESH_PEERING_PROTO_AMPE 1
1231 #define MESH_PEERING_PROTO_VENDOR 255
1233 /* Vendor actions */
1235 #define MRVL_ACTION_MESH_MANAGEMENT 1
1237 #define MRVL_MESH_MGMT_ACTION_RREQ 0
1238 #define MRVL_MESH_MGMT_ACTION_RREP 1
1239 #define MRVL_MESH_MGMT_ACTION_RERR 2
1240 #define MRVL_MESH_MGMT_ACTION_PLDM 3
1242 #define ANQP_INFO_ANQP_QUERY_LIST 256
1243 #define ANQP_INFO_ANQP_CAPAB_LIST 257
1244 #define ANQP_INFO_VENUE_NAME_INFO 258
1245 #define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO 259
1246 #define ANQP_INFO_NETWORK_AUTH_TYPE_INFO 260
1247 #define ANQP_INFO_ROAMING_CONSORTIUM_LIST 261
1248 #define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO 262
1249 #define ANQP_INFO_NAI_REALM_LIST 263
1250 #define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO 264
1251 #define ANQP_INFO_AP_GEOSPATIAL_LOCATION 265
1252 #define ANQP_INFO_AP_CIVIC_LOCATION 266
1253 #define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI 267
1254 #define ANQP_INFO_DOMAIN_NAME_LIST 268
1255 #define ANQP_INFO_EMERGENCY_ALERT_ID_URI 269
1256 #define ANQP_INFO_TDLS_CAPAB_INFO 270
1257 #define ANQP_INFO_EMERGENCY_NAI 271
1258 #define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST 56797
1260 /* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */
1261 static const value_string anqp_info_id_vals[] = {
1262 {ANQP_INFO_ANQP_QUERY_LIST, "ANQP Query list"},
1263 {ANQP_INFO_ANQP_CAPAB_LIST, "ANQP Capability list"},
1264 {ANQP_INFO_VENUE_NAME_INFO, "Venue Name information"},
1265 {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO, "Emergency Call Number information"},
1266 {ANQP_INFO_NETWORK_AUTH_TYPE_INFO,
1267 "Network Authentication Type information"},
1268 {ANQP_INFO_ROAMING_CONSORTIUM_LIST, "Roaming Consortium list"},
1269 {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO,
1270 "IP Address Type Availability information"},
1271 {ANQP_INFO_NAI_REALM_LIST, "NAI Realm list"},
1272 {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO, "3GPP Cellular Network information"},
1273 {ANQP_INFO_AP_GEOSPATIAL_LOCATION, "AP Geospatial Location"},
1274 {ANQP_INFO_AP_CIVIC_LOCATION, "AP Civic Location"},
1275 {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI, "AP Location Public Identifier URI"},
1276 {ANQP_INFO_DOMAIN_NAME_LIST, "Domain Name list"},
1277 {ANQP_INFO_EMERGENCY_ALERT_ID_URI, "Emergency Alert Identifier URI"},
1278 {ANQP_INFO_TDLS_CAPAB_INFO, "TDLS Capability information"},
1279 {ANQP_INFO_EMERGENCY_NAI, "Emergency NAI"},
1280 {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST, "ANQP vendor-specific list"},
1283 static value_string_ext anqp_info_id_vals_ext = VALUE_STRING_EXT_INIT(anqp_info_id_vals);
1285 /* IEEE 802.11v - WNM Action field values */
1288 WNM_EVENT_REPORT = 1,
1289 WNM_DIAGNOSTIC_REQ = 2,
1290 WNM_DIAGNOSTIC_REPORT = 3,
1291 WNM_LOCATION_CFG_REQ = 4,
1292 WNM_LOCATION_CFG_RESP = 5,
1293 WNM_BSS_TRANS_MGMT_QUERY = 6,
1294 WNM_BSS_TRANS_MGMT_REQ = 7,
1295 WNM_BSS_TRANS_MGMT_RESP = 8,
1298 WNM_COLLOCATED_INTERFERENCE_REQ = 11,
1299 WNM_COLLOCATED_INTERFERENCE_REPORT = 12,
1302 WNM_TFS_NOTIFY = 15,
1303 WNM_SLEEP_MODE_REQ = 16,
1304 WNM_SLEEP_MODE_RESP = 17,
1305 WNM_TIM_BROADCAST_REQ = 18,
1306 WNM_TIM_BROADCAST_RESP = 19,
1307 WNM_QOS_TRAFFIC_CAPAB_UPDATE = 20,
1308 WNM_CHANNEL_USAGE_REQ = 21,
1309 WNM_CHANNEL_USAGE_RESP = 22,
1312 WNM_TIMING_MEASUREMENT_REQ = 25,
1313 WNM_NOTIFICATION_REQ = 26,
1314 WNM_NOTIFICATION_RESP = 27
1317 static const value_string wnm_action_codes[] = {
1318 { WNM_EVENT_REQ, "Event Request" },
1319 { WNM_EVENT_REPORT, "Event Report" },
1320 { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" },
1321 { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" },
1322 { WNM_LOCATION_CFG_REQ, "Location Configuration Request" },
1323 { WNM_LOCATION_CFG_RESP, "Location Configuration Response" },
1324 { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" },
1325 { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" },
1326 { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" },
1327 { WNM_FMS_REQ, "FMS Request" },
1328 { WNM_FMS_RESP, "FMS Response" },
1329 { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" },
1330 { WNM_COLLOCATED_INTERFERENCE_REPORT, "Collocated Interference Report" },
1331 { WNM_TFS_REQ, "TFS Request" },
1332 { WNM_TFS_RESP, "TFS Response" },
1333 { WNM_TFS_NOTIFY, "TFS Notify" },
1334 { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" },
1335 { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" },
1336 { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" },
1337 { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" },
1338 { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" },
1339 { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" },
1340 { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" },
1341 { WNM_DMS_REQ, "DMS Request" },
1342 { WNM_DMS_RESP, "DMS Response" },
1343 { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" },
1344 { WNM_NOTIFICATION_REQ, "WNM-Notification Request" },
1345 { WNM_NOTIFICATION_RESP, "WNM-Notification Response" },
1348 static value_string_ext wnm_action_codes_ext = VALUE_STRING_EXT_INIT(wnm_action_codes);
1350 enum unprotected_wnm_action {
1351 UNPROTECTED_WNM_TIM = 0,
1352 UNPROTECTED_WNM_TIMING_MEASUREMENT = 1
1355 static const value_string unprotected_wnm_action_codes[] = {
1356 { UNPROTECTED_WNM_TIM, "TIM" },
1357 { UNPROTECTED_WNM_TIMING_MEASUREMENT, "Timing Measurement" },
1360 static value_string_ext unprotected_wnm_action_codes_ext = VALUE_STRING_EXT_INIT(unprotected_wnm_action_codes);
1362 static const value_string wnm_notification_types[] = {
1363 { 0, "Firmware Update Notification" },
1364 { 1, "Reserved for use by WFA" },
1365 { 221, "Vendor Specific" },
1369 static value_string_ext wnm_notification_types_ext =
1370 VALUE_STRING_EXT_INIT(wnm_notification_types);
1372 /*** End: Action Fixed Parameter ***/
1374 static const value_string ieee80211_tag_measure_request_type_flags[] = {
1375 {0x00, "Basic Request"},
1376 {0x01, "Clear Channel Assessment (CCA) Request"},
1377 {0x02, "Receive Power Indication (RPI) Histogram Request"},
1378 {0x03, "Channel Load Request"},
1379 {0x04, "Noise Histogram Request"},
1380 {0x05, "Beacon Request"},
1381 {0x06, "Frame Request"},
1382 {0x07, "STA Statistics Request"},
1383 {0x08, "Location Configuration Indication (LCI) Request"},
1384 {0x09, "Transmit Stream Measurement Request"},
1385 {0x0A, "Measurement Pause Request"},
1388 static value_string_ext ieee80211_tag_measure_request_type_flags_ext =
1389 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_type_flags);
1391 static const value_string ieee80211_tag_measure_report_type_flags[] = {
1392 { 0x00, "Basic Report" },
1393 { 0x01, "Clear Channel Assessment (CCA) Report" },
1394 { 0x02, "Receive Power Indication (RPI) Histogram Report" },
1395 { 0x03, "Channel Load Report" },
1396 { 0x04, "Noise Histogram Report" },
1397 { 0x05, "Beacon Report" },
1398 { 0x06, "Frame Report" },
1399 { 0x07, "STA Statistics Report" },
1400 { 0x08, "Location Configuration Information (LCI) Report" },
1401 { 0x09, "Transmit Stream Measurement Report" },
1404 static value_string_ext ieee80211_tag_measure_report_type_flags_ext =
1405 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_report_type_flags);
1407 static const true_false_string ieee80211_tag_measure_report_frame_info_frame_type_flag = {
1408 "Measurement Pilot Frame",
1409 "Beacon/Probe Response Frame"
1412 static const true_false_string ieee80211_tag_measure_map_field_bss_flag = {
1413 "At least one MPDU was received by another BSS or IBSS in the measurement period.",
1414 "No MPDUs were received from another BSS or IBSS in the measurement period."
1417 static const value_string ieee80211_tag_measure_request_measurement_mode_flags[] = {
1418 { 0x00, "Passive" },
1420 { 0x02, "Beacon Table" },
1424 #define MEASURE_REQ_BEACON_SUB_SSID 0
1425 #define MEASURE_REQ_BEACON_SUB_BRI 1
1426 #define MEASURE_REQ_BEACON_SUB_RD 2
1427 #define MEASURE_REQ_BEACON_SUB_REQUEST 10
1428 #define MEASURE_REQ_BEACON_SUB_APCP 51
1429 #define MEASURE_REQ_BEACON_SUB_VS 221
1431 static const value_string ieee80211_tag_measure_request_beacon_sub_id_flags[] = {
1432 { MEASURE_REQ_BEACON_SUB_SSID, "SSID" },
1433 { MEASURE_REQ_BEACON_SUB_BRI, "Beacon Reporting Information" },
1434 { MEASURE_REQ_BEACON_SUB_RD, "Reporting Detail" },
1435 { MEASURE_REQ_BEACON_SUB_REQUEST, "Request" },
1436 { MEASURE_REQ_BEACON_SUB_APCP, "AP Channel Report" },
1437 { MEASURE_REQ_BEACON_SUB_VS, "Vendor Specific" },
1441 static const value_string ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags[] = {
1442 { 0x00, "Report to be issued after each measurement." },
1443 { 0x01, "The measured RCPI level is greater than an absolute threshold." },
1444 { 0x02, "The measured RCPI level is less than an absolute threshold." },
1445 { 0x03, "The measured RSNI level is greater than an absolute threshold." },
1446 { 0x04, "The measured RSNI level is less than an absolute threshold." },
1447 { 0x05, "The measured RCPI level is greater than a threshold defined by an offset from the serving AP's reference RCPI." },
1448 { 0x06, "The measured RCPI level is less than a threshold defined by an offset from the serving AP's reference RCPI." },
1449 { 0x07, "The measured RSNI level is greater than a threshold defined by an offset from the serving AP's reference RSNI." },
1450 { 0x08, "The measured RSNI level is less than a threshold defined by an offset from the serving AP's reference RSNI." },
1451 { 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." },
1452 { 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." },
1453 { 0xfe, "Report not required to be issued" },
1457 static const value_string ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags[] = {
1458 { 0, "No fixed length fields or elements" },
1459 { 1, "All fixed length fields and any requested elements in the Request information element if present" },
1460 { 2, "All fixed length fields and elements (default, used when Reporting Detail subelement is not included in Beacon Request" },
1464 static const value_string ieee80211_tag_measure_request_group_id_flags[] = {
1465 { 0x00, "STA Counters from dot11CountersTable" },
1466 { 0x01, "STA Counters from dot11MacStatistics group" },
1467 { 0x02, "QoS STA Counters for UP0 from dot11QosCountersTable" },
1468 { 0x03, "QoS STA Counters for UP1 from dot11QosCountersTable" },
1469 { 0x04, "QoS STA Counters for UP2 from dot11QosCountersTable" },
1470 { 0x05, "QoS STA Counters for UP3 from dot11QosCountersTable" },
1471 { 0x06, "QoS STA Counters for UP4 from dot11QosCountersTable" },
1472 { 0x07, "QoS STA Counters for UP5 from dot11QosCountersTable" },
1473 { 0x08, "QoS STA Counters for UP6 from dot11QosCountersTable" },
1474 { 0x09, "QoS STA Counters for UP7 from dot11QosCountersTable" },
1475 { 0x0a, "BSS Average Access Delays" },
1476 { 0x0b, "STA Counters from dot11A-MSDU Group" },
1477 { 0x0c, "STA Counters from dot11A-MPDU Group" },
1478 { 0x0d, "STA Counters from dot11 BAR, Channel Width, PSMP Group" },
1479 { 0x0e, "STA Counters from dot11Protection Group" },
1480 { 0x0f, "STBC Group" },
1483 static value_string_ext ieee80211_tag_measure_request_group_id_flags_ext =
1484 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_group_id_flags);
1486 static const value_string ieee80211_tclas_process_flag[] = {
1487 {0x00, "Incoming MSDU's higher layer parameters have to match to the parameters in all associated TCLAS elements."},
1488 {0x01, "Incoming MSDU's higher layer parameters have to match to at least one of the associated TCLAS elements."},
1489 {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."},
1494 #define MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO 1
1496 static const value_string ieee80211_tag_measure_request_channel_load_sub_id_vals[] = {
1497 { MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO, "Channel Load Reporting Information" },
1498 { 221, "Vendor Specific" },
1502 static const value_string ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals[] = {
1503 { 0x00, "Report to be issued after each measurement (default, used when Channel Load Reporting Information subelement is not included in Channel Load Request)." },
1504 { 0x01, "Report to be issued when measured Channel Load is equal to or greater than the reference value." },
1505 { 0x02, "Report to be issued when measured Channel Load is equal to or less than the reference value." },
1509 #define MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO 1
1511 static const value_string ieee80211_tag_measure_request_noise_histogram_sub_id_vals[] = {
1512 { MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO, "Noise Histogram Reporting Information" },
1513 { 221, "Vendor Specific" },
1517 static const value_string ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals[] = {
1518 { 0x00, "Report to be issued after each measurement (default, used when Noise Histogram Reporting Information subelement is not included in Noise Histogram Request)." },
1519 { 0x01, "Noise Histogram Report to be issued when measured ANPI is equal to or greater than the reference value." },
1520 { 0x02, "Noise Histogram Report to be issued when measured ANPI is equal to or less than the reference value." },
1524 #define MEASURE_REP_REPORTED_FRAME_BODY 1
1526 static const value_string ieee80211_tag_measure_report_beacon_sub_id_vals[] = {
1527 { MEASURE_REP_REPORTED_FRAME_BODY, "Reported Frame Body" },
1528 { 221, "Vendor Specific" },
1532 static const value_string frame_type[] = {
1533 {MGT_FRAME, "Management frame"},
1534 {CONTROL_FRAME, "Control frame"},
1535 {DATA_FRAME, "Data frame"},
1536 {EXTENSION_FRAME, "Extension frame"},
1540 static const value_string tofrom_ds[] = {
1541 {0, "Not leaving DS or network is operating "
1542 "in AD-HOC mode (To DS: 0 From DS: 0)"},
1543 {FLAG_TO_DS, "Frame from STA to DS via an AP (To DS: 1 "
1545 {FLAG_FROM_DS, "Frame from DS to a STA via AP(To DS: 0 "
1547 {FLAG_TO_DS|FLAG_FROM_DS, "WDS (AP to AP) or Mesh (MP to MP) Frame "
1548 "(To DS: 1 From DS: 1)"},
1552 static const true_false_string tods_flag = {
1553 "Frame is entering DS",
1554 "Frame is not entering DS"
1557 static const true_false_string fromds_flag = {
1558 "Frame is exiting DS",
1559 "Frame is not exiting DS"
1562 static const true_false_string more_fragments = {
1563 "More fragments follow",
1564 "This is the last fragment"
1567 static const true_false_string retry_flags = {
1568 "Frame is being retransmitted",
1569 "Frame is not being retransmitted"
1572 static const true_false_string pm_flags = {
1573 "STA will go to sleep",
1577 static const true_false_string md_flags = {
1578 "Data is buffered for STA at AP",
1582 static const true_false_string protected_flags = {
1583 "Data is protected",
1584 "Data is not protected"
1587 static const true_false_string order_flags = {
1589 "Not strictly ordered"
1592 static const true_false_string cf_ess_flags = {
1593 "Transmitter is an AP",
1594 "Transmitter is a STA"
1598 static const true_false_string cf_privacy_flags = {
1599 "AP/STA can support WEP",
1600 "AP/STA cannot support WEP"
1603 static const true_false_string cf_ibss_flags = {
1604 "Transmitter belongs to an IBSS",
1605 "Transmitter belongs to a BSS"
1608 static const true_false_string eosp_flag = {
1609 "End of service period",
1613 static const true_false_string bit4_flag = {
1614 "Bits 8-15 of QoS Control field are Queue Size",
1615 "Bits 8-15 of QoS Control field are TXOP Duration Requested"
1618 static const true_false_string ieee80211_qos_amsdu_present_flag = {
1623 static const true_false_string csa_txrestrict_flags = {
1628 static const true_false_string csa_initiator_flags = {
1633 static const true_false_string mesh_config_cap_power_save_level_flags = {
1634 "One of the peer-specific mesh power modes is deep sleep mode",
1635 "No one is in deep sleep mode"
1638 static const value_string sta_cf_pollable[] = {
1639 {0x00, "Station is not CF-Pollable"},
1640 {0x02, "Station is CF-Pollable, not requesting to be placed on the CF-polling list"},
1641 {0x01, "Station is CF-Pollable, requesting to be placed on the CF-polling list"},
1642 {0x03, "Station is CF-Pollable, requesting never to be polled"},
1643 {0x80, "QSTA requesting association in QBSS"},
1650 static const value_string ap_cf_pollable[] = {
1651 {0x00, "No point coordinator at AP"},
1652 {0x02, "Point coordinator at AP for delivery only (no polling)"},
1653 {0x01, "Point coordinator at AP for delivery and polling"},
1655 {0x80, "QAP (HC) does not use CFP for delivery of unicast data type frames"},
1656 {0x82, "QAP (HC) uses CFP for delivery, but does not send CF-Polls to non-QoS STAs"},
1657 {0x81, "QAP (HC) uses CFP for delivery, and sends CF-Polls to non-QoS STAs"},
1663 static const value_string auth_alg[] = {
1664 {0x00, "Open System"},
1665 {0x01, "Shared key"},
1666 {0x02, "Fast BSS Transition"},
1667 {0x03, "Simultaneous Authentication of Equals (SAE)"},
1668 {0x80, "Network EAP"}, /* Cisco proprietary? */
1672 static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
1673 "Permitted in QoS Data MPDUs",
1677 static const true_false_string ff_block_ack_params_policy_flag = {
1678 "Immediate Block Ack",
1682 static const value_string ff_channel_width_vals[] = {
1683 {0x00, "20 MHz channel width only"},
1684 {0x01, "Any channel width in the STA's Supported Channel Width Set"},
1688 static const true_false_string ff_qos_info_ap_q_ack_flag = {
1689 "APs MIB attribute dot11QAckOptionImplemented is true",
1690 "APs MIB attribute dot11QAckOptionImplemented is false"
1693 static const true_false_string ff_qos_info_ap_queue_req_flag = {
1694 "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
1695 "AP cannot process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
1698 static const true_false_string ff_qos_info_ap_txop_request_flag = {
1699 "AP can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
1700 "AP cannot process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
1703 static const true_false_string ff_qos_info_sta_ac_flag = {
1704 "Trigger-enabled and Delivery-enabled",
1705 "Neither Trigger-enabled nor Delivery-enabled"
1708 static const true_false_string ff_qos_info_sta_q_ack_flag = {
1709 "STAs MIB attribute dot11QAckOptionImplemented is true",
1710 "STAs MIB attribute dot11QAckOptionImplemented is false"
1713 static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
1714 {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
1715 {0x01, "AP may deliver a maximum of two MSDUs, A-MSDUs and MMPDUs per SP"},
1716 {0x02, "AP may deliver a maximum of four MSDUs, A-MSDUs and MMPDUs per SP"},
1717 {0x03, "AP may deliver a maximum of six MSDUs, A-MSDUs and MMPDUs per SP"},
1721 static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
1722 "STA can process ACK frames with the More Data bit in the Frame Control field set to 1 and will remain in the wake state",
1723 "STA cannot process ACK frames with the More Data bit in the Frame Control field set to 1"
1726 static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
1727 "Dynamic SM Power Save mode",
1728 "Static SM Power Save mode"
1731 static const true_false_string ff_pco_phase_cntrl_flag = {
1736 static const true_false_string ff_psmp_param_set_more_psmp_flag = {
1737 "More PSMP Sequences Follow",
1738 "No PSMP Sequences Follow"
1741 static const value_string ff_mimo_cntrl_nc_index_flags[] = {
1743 {0x01, "2 Columns"},
1744 {0x02, "3 Columns"},
1745 {0x03, "4 Columns"},
1749 static const value_string ff_mimo_cntrl_nr_index_flags[] = {
1757 static const true_false_string ff_mimo_cntrl_channel_width_flag = {
1762 static const true_false_string ff_ht_info_information_request_flag = {
1763 "Requesting HT Information Exchange management action frame",
1764 "Should not send an HT Information Exchange management action frame"
1767 static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
1768 "Transmitting station is intolerant of 40 MHz operation",
1769 "Transmitting station permits 40 MHz operation"
1772 static const true_false_string ff_ht_info_sta_chan_width_flag = {
1777 static const value_string ff_ht_action_flags[] = {
1778 {HT_ACTION_NOTIFY_CHAN_WIDTH, "Notify Channel Width"},
1779 {HT_ACTION_SM_PWR_SAVE, "Spatial Multiplexing (SM) Power Save"},
1780 {HT_ACTION_PSMP_ACTION, "Power Save Multi-Poll (PSMP) action frame"},
1781 {HT_ACTION_SET_PCO_PHASE, "Set PCO Phase"},
1782 {HT_ACTION_MIMO_CSI, "MIMO CSI Matrices"},
1783 {HT_ACTION_MIMO_BEAMFORMING, "MIMO Non-compressed Beamforming"},
1784 {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING, "MIMO Compressed Beamforming"},
1785 {HT_ACTION_ANT_SEL_FEEDBACK, "Antenna Selection Indices Feedback"},
1786 {HT_ACTION_HT_INFO_EXCHANGE, "HT Information Exchange"},
1790 static const value_string ff_fst_action_flags[] = {
1791 {FST_SETUP_REQUEST, "FST Setup Request"},
1792 {FST_SETUP_RESPONSE, "FST Setup Response"},
1793 {FST_TEAR_DOWN, "FST Tear Down"},
1794 {FST_ACK_REQUEST, "FST Ack Request"},
1795 {FST_ACK_RESPONSE, "FST Ack Response"},
1796 {FST_ON_CHANNEL_TUNNEL_REQUEST, "FST On-channel Tunnel Request"},
1800 static const value_string ff_dmg_action_flags[] = {
1801 {DMG_ACTION_PWR_SAVE_CONFIG_REQ, "Power Save Configuration Request"},
1802 {DMG_ACTION_PWR_SAVE_CONFIG_RES, "Power Save Configuration Response"},
1803 {DMG_ACTION_INFO_REQ, "Information Request"},
1804 {DMG_ACTION_INFO_RES, "Information Response"},
1805 {DMG_ACTION_HANDOVER_REQ, "Handover Request"},
1806 {DMG_ACTION_HANDOVER_RES, "Handover Response"},
1807 {DMG_ACTION_DTP_REQ, "DTP Request"},
1808 {DMG_ACTION_DTP_RES, "DTP Response"},
1809 {DMG_ACTION_RELAY_SEARCH_REQ, "Relay Search Request"},
1810 {DMG_ACTION_RELAY_SEARCH_RES, "Relay Search Response"},
1811 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ, "Multi Relay Channel Measurement Request"},
1812 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES, "Multi Relay Channel Measurement Response"},
1813 {DMG_ACTION_RLS_REQ, "RLS Request"},
1814 {DMG_ACTION_RLS_RES, "RLS Response"},
1815 {DMG_ACTION_RLS_ANNOUNCE, "RLS Announcement"},
1816 {DMG_ACTION_RLS_TEARDOWN, "RLS Teardown"},
1817 {DMG_ACTION_RELAY_ACK_REQ, "Relay ACK Request"},
1818 {DMG_ACTION_RELAY_ACK_RES, "Relay ACK Response"},
1819 {DMG_ACTION_TPA_REQ, "TPA Request"},
1820 {DMG_ACTION_TPA_RES, "TPA Response"},
1821 {DMG_ACTION_TPA_REP, "TPA Report"},
1822 {DMG_ACTION_ROC_REQ, "ROC Request"},
1823 {DMG_ACTION_ROC_RES, "ROC Response"},
1827 static const value_string ff_unprotected_dmg_action_flags[] = {
1828 {UNPROTECTED_DMG_ANNOUNCE, "Announce"},
1829 {UNPROTECTED_DMG_BRP, "BRP"},
1832 static const value_string ff_mimo_cntrl_grouping_flags[] = {
1833 {0x00, "No Grouping"},
1834 {0x01, "Carrier Groups of 2"},
1835 {0x02, "Carrier Groups of 4"},
1840 static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
1848 static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
1849 {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
1850 {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
1851 {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
1852 {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
1856 static const value_string ff_ppa_action_codes[] = {
1857 {PPA_DSE_ENABLEMENT, "Protected DSE enablement"},
1858 {PPA_DSE_DEENABLEMENT, "Protected DSE deenablement"},
1859 {PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT, "Protected Extended Channel Switch Announcement"},
1860 {PPA_DSE_MEASUREMENT_REQUEST, "Protected DSE measurement request"},
1861 {PPA_DSE_MEASUREMENT_REPORT, "Protected DSE measurement report"},
1862 {PPA_DSE_POWER_CONSTRAINT, "Protected DSE power constraint"},
1863 {PPA_VENDOR_SPECIFIC, "Protected Vendor Specific"},
1864 {PPA_GAS_INITIAL_REQUEST, "Protected GAS Initial Request"},
1865 {PPA_GAS_INITIAL_RESPONSE, "Protected GAS Initial Response"},
1866 {PPA_GAS_COMEBACK_REQUEST, "Protected GAS Comeback Request"},
1867 {PPA_GAS_COMEBACK_RESPONSE, "Protected GAS Comeback Response"},
1868 {PPA_QAB_REQUEST, "Protected QAB Request"},
1869 {PPA_QAB_RESPONSE, "Protected QAB Response"},
1872 static value_string_ext ff_ppa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_ppa_action_codes);
1874 static const value_string ff_pa_action_codes[] = {
1875 {PA_20_40_BSS_COEXISTENCE_MANAGEMENT, "20/40 BSS Coexistence Management"},
1876 {PA_DSE_ENABLEMENT, "DSE enablement"},
1877 {PA_DSE_DEENABLEMENT, "DSE deenablement"},
1878 {PA_DSE_REG_LOC_ANNOUNCEMENT, "DSE Registered Location Announcement"},
1879 {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement"},
1880 {PA_DSE_MEASUREMENT_REQUEST, "DSE measurement request"},
1881 {PA_DSE_MEASUREMENT_REPORT, "DSE measurement report"},
1882 {PA_MEASUREMENT_PILOT, "Measurement Pilot"},
1883 {PA_DSE_POWER_CONSTRAINT, "DSE power constraint"},
1884 {PA_VENDOR_SPECIFIC, "Vendor Specific"},
1885 {PA_GAS_INITIAL_REQUEST, "GAS Initial Request"},
1886 {PA_GAS_INITIAL_RESPONSE, "GAS Initial Response"},
1887 {PA_GAS_COMEBACK_REQUEST, "GAS Comeback Request"},
1888 {PA_GAS_COMEBACK_RESPONSE, "GAS Comeback Response"},
1889 {PA_TDLS_DISCOVERY_RESPONSE, "TDLS Discovery Response"},
1890 {PA_LOCATION_TRACK_NOTIFICATION, "Location Track Notification"},
1891 {PA_QAB_REQUEST, "QAB Request"},
1892 {PA_QAB_RESPONSE, "QAB Response"},
1895 static value_string_ext ff_pa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_pa_action_codes);
1897 static const value_string category_codes[] = {
1898 {CAT_SPECTRUM_MGMT, "Spectrum Management (SM)"},
1899 {CAT_QOS, "Quality of Service (QoS)"},
1900 {CAT_DLS, "Direct-Link Setup (DLS)"},
1901 {CAT_BLOCK_ACK, "Block Ack"},
1902 {CAT_PUBLIC, "Public Action"},
1903 {CAT_RADIO_MEASUREMENT, "Radio Measurement"},
1904 {CAT_FAST_BSS_TRANSITION, "Fast BSS Transition"},
1905 {CAT_HT, "High Throughput"},
1906 {CAT_SA_QUERY, "SA Query"},
1907 {CAT_PUBLIC_PROTECTED, "Protected Dual of Public Action"},
1909 {CAT_UNPROTECTED_WNM, "Unprotected WNM"},
1912 {CAT_MULTIHOP, "Multihop"},
1913 {CAT_SELF_PROTECTED, "Self-protected"},
1915 {CAT_MGMT_NOTIFICATION, "Management Notification"},
1916 {CAT_FAST_SESSION_TRANSFER, "Fast Session Transfer"},
1917 {CAT_ROBUST_AV_STREAMING, "Robust AV Streaming"},
1918 {CAT_UNPROTECTED_DMG, "Unprotected DMG"},
1920 {CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected"},
1921 {CAT_VENDOR_SPECIFIC, "Vendor Specific"},
1923 {0x80 | CAT_SPECTRUM_MGMT, "Spectrum Management (SM) (error)"},
1924 {0x80 | CAT_QOS, "Quality of Service (QoS (error))"},
1925 {0x80 | CAT_DLS, "Direct-Link Setup (DLS) (error)"},
1926 {0x80 | CAT_BLOCK_ACK, "Block Ack (error)"},
1927 {0x80 | CAT_PUBLIC, "Public Action (error)"},
1928 {0x80 | CAT_RADIO_MEASUREMENT, "Radio Measurement (error)"},
1929 {0x80 | CAT_FAST_BSS_TRANSITION, "Fast BSS Transition (error)"},
1930 {0x80 | CAT_HT, "High Throughput (error)"},
1931 {0x80 | CAT_SA_QUERY, "SA Query (error)"},
1932 {0x80 | CAT_PUBLIC_PROTECTED, "Protected Dual of Public Action (error)"},
1933 {0x80 | CAT_WNM, "WNM (error)"},
1934 {0x80 | CAT_UNPROTECTED_WNM, "Unprotected WNM (error)"},
1935 {0x80 | CAT_TDLS, "TDLS (error)"},
1936 {0x80 | CAT_MESH, "Mesh (error)"},
1937 {0x80 | CAT_MULTIHOP, "Multihop (error)"},
1938 {0x80 | CAT_SELF_PROTECTED, "Self-protected (error)"},
1939 {0x80 | CAT_DMG, "DMG (error)"},
1940 {0x80 | CAT_MGMT_NOTIFICATION, "Management Notification (error)"},
1941 {0x80 | CAT_FAST_SESSION_TRANSFER, "Fast Session Transfer (error)"},
1942 {0x80 | CAT_ROBUST_AV_STREAMING, "Robust AV Streaming (error)"},
1943 {0x80 | CAT_UNPROTECTED_DMG, "Unprotected DMG (error)"},
1944 {0x80 | CAT_VHT, "VHT"},
1945 {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected (error)"},
1946 {0x80 | CAT_VENDOR_SPECIFIC, "Vendor Specific (error)"},
1949 static value_string_ext category_codes_ext = VALUE_STRING_EXT_INIT(category_codes);
1951 #define NR_SUB_ID_TSF_INFO 1
1952 #define NR_SUB_ID_CON_COU_STR 2
1953 #define NR_SUB_ID_BSS_TRN_CAN_PREF 3
1954 #define NR_SUB_ID_BSS_TER_DUR 4
1955 #define NR_SUB_ID_BEARING 5
1957 #define NR_SUB_ID_HT_CAPABILITIES 45
1958 #define NR_SUB_ID_HT_OPERATION 61
1959 #define NR_SUB_ID_SEC_CHANNEL_OFFSET 62
1960 #define NR_SUB_ID_MEASUREMENT_PILOT_INFO 66
1961 #define NR_SUB_ID_RM_ENABLE_CAP 70
1962 #define NR_SUB_ID_HT_MULTIPLE_BSSID 71
1964 #define NR_SUB_ID_VENDOR_SPECIFIC 221
1966 static const value_string ieee80211_neighbor_report_subelement_id_vals[] = {
1967 {NR_SUB_ID_TSF_INFO, "TSF Information"},
1968 {NR_SUB_ID_CON_COU_STR, "Condensed Country String"},
1969 {NR_SUB_ID_BSS_TRN_CAN_PREF, "BSS Transition Candidate Preference"},
1970 {NR_SUB_ID_BSS_TER_DUR, "BSS Termination Duration"},
1971 {NR_SUB_ID_BEARING, "Bearing"},
1972 {NR_SUB_ID_HT_CAPABILITIES, "HT Capabilities"},
1973 {NR_SUB_ID_HT_OPERATION, "HT Operation"},
1974 {NR_SUB_ID_SEC_CHANNEL_OFFSET, "Secondary Channel Offset"},
1975 {NR_SUB_ID_MEASUREMENT_PILOT_INFO, "Measurement Pilot Transmission"},
1976 {NR_SUB_ID_RM_ENABLE_CAP, "RM Enabled Capabilities"},
1977 {NR_SUB_ID_HT_MULTIPLE_BSSID, "Multiple BSSID"},
1978 {NR_SUB_ID_VENDOR_SPECIFIC, "Vendor Specific"},
1982 static const value_string ieee80211_neighbor_report_bssid_info_reachability_vals[] = {
1984 {1, "Not Reachable"},
1990 static const value_string action_codes[] = {
1991 {SM_ACTION_MEASUREMENT_REQUEST, "Measurement Request"},
1992 {SM_ACTION_MEASUREMENT_REPORT, "Measurement Report"},
1993 {SM_ACTION_TPC_REQUEST, "TPC Request"},
1994 {SM_ACTION_TPC_REPORT, "TPC Report"},
1995 {SM_ACTION_CHAN_SWITCH_ANNC, "Channel Switch Announcement"},
1999 static const value_string vendor_action_types_mrvl[] = {
2000 {MRVL_ACTION_MESH_MANAGEMENT, "Mesh Management"},
2004 static const value_string mesh_mgt_action_codes_mrvl[] = {
2005 {MRVL_MESH_MGMT_ACTION_RREQ, "Route Request"},
2006 {MRVL_MESH_MGMT_ACTION_RREP, "Route Response"},
2007 {MRVL_MESH_MGMT_ACTION_RERR, "Route Error"},
2008 {MRVL_MESH_MGMT_ACTION_PLDM, "Peer Link Down"},
2012 static const value_string mesh_path_selection_codes[] = {
2013 {0x0, "Hybrid Wireless Mesh Protocol"},
2017 static const value_string mesh_metric_codes[] = {
2018 {0x0, "Airtime Link Metric"},
2022 static const value_string wme_action_codes[] = {
2023 {0x00, "Setup request"},
2024 {0x01, "Setup response"},
2029 static const value_string wme_status_codes[] = {
2030 {0x00, "Admission accepted"},
2031 {0x01, "Invalid parameters"},
2036 static const value_string mesh_action[] = {
2037 {MESH_ACTION_LINK_METRIC_REPORT, "Mesh Link Metric Report"},
2038 {MESH_ACTION_HWMP, "HWMP Mesh Path Selection"},
2039 {MESH_ACTION_GATE_ANNOUNCE, "Gate Announcement"},
2040 {MESH_ACTION_CONGESTION_CTL, "Congestion Control Notification"},
2041 {MESH_ACTION_MCCA_SETUP_REQUEST, "MCCA Setup Request"},
2042 {MESH_ACTION_MCCA_SETUP_REPLY, "MCCA Setup Reply"},
2043 {MESH_ACTION_MCCA_ADV_REQUEST, "MCCA Advertisement Request"},
2044 {MESH_ACTION_MCCA_ADV, "MCCA Advertisement"},
2045 {MESH_ACTION_MCCA_TEARDOWN, "MCCA Teardown"},
2046 {MESH_ACTION_TBTT_ADJ_REQUEST, "TBTT Adjustment Request"},
2047 {MESH_ACTION_TBTT_ADJ_RESPONSE, "TBTT Adjustment Response"},
2050 static value_string_ext mesh_action_ext = VALUE_STRING_EXT_INIT(mesh_action);
2052 static const value_string multihop_action[] = {
2053 {MULTIHOP_ACTION_PROXY_UPDATE, "Proxy Update"},
2054 {MULTIHOP_ACTION_PROXY_UPDATE_CONF, "Proxy Update Confirmation"},
2058 static const value_string selfprot_action[] = {
2059 {SELFPROT_ACTION_MESH_PEERING_OPEN, "Mesh Peering Open"},
2060 {SELFPROT_ACTION_MESH_PEERING_CONFIRM, "Mesh Peering Confirm"},
2061 {SELFPROT_ACTION_MESH_PEERING_CLOSE, "Mesh Peering Close"},
2062 {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM, "Mesh Group Key Inform"},
2063 {SELFPROT_ACTION_MESH_GROUP_KEY_ACK, "Mesh Group Key Ack"},
2067 static const value_string mesh_peering_proto_ids[] = {
2068 {MESH_PEERING_PROTO_MGMT, "Mesh peering management protocol"},
2069 {MESH_PEERING_PROTO_AMPE, "Authenticated mesh peering exchange protocol"},
2070 {MESH_PEERING_PROTO_VENDOR, "Vendor specific"},
2074 static const true_false_string hwmp_targ_usn_flags = {
2075 "[USN = 1] Target Sequence Number Unknown at Originator",
2076 "[USN = 0] Target Sequence Number Known at Originator"
2079 static const true_false_string hwmp_targ_to_flags = {
2080 "[TO = 1] Only Target Will Respond",
2081 "[TO = 0] Intermediate Nodes May Respond"
2084 static const value_string ack_policy[] = {
2085 {0x00, "Normal Ack"},
2087 {0x02, "No explicit acknowledgment"},
2088 {0x03, "Block Ack"},
2092 static const value_string qos_action_codes[] = {
2093 {QOS_ACTION_ADDTS_REQUEST, "ADDTS Request"},
2094 {QOS_ACTION_ADDTS_RESPONSE, "ADDTS Response"},
2095 {QOS_ACTION_DELTS, "DELTS"},
2096 {QOS_ACTION_SCHEDULE, "Schedule"},
2097 {QOS_ACTION_MAP_CONFIGURE, "QoS Map Configure"},
2101 static const value_string ba_action_codes[] = {
2102 {BA_ADD_BLOCK_ACK_REQUEST, "Add Block Ack Request"},
2103 {BA_ADD_BLOCK_ACK_RESPONSE, "Add Block Ack Response"},
2104 {BA_DELETE_BLOCK_ACK, "Delete Block Ack"},
2108 static const value_string dls_action_codes[] = {
2109 {DLS_ACTION_REQUEST, "DLS Request"},
2110 {DLS_ACTION_RESPONSE, "DLS Response"},
2111 {DLS_ACTION_TEARDOWN, "DLS Teardown"},
2115 static const value_string tsinfo_type[] = {
2116 {0x0, "Aperiodic or unspecified Traffic"},
2117 {0x1, "Periodic Traffic"},
2121 static const value_string tsinfo_direction[] = {
2124 {0x02, "Direct link"},
2125 {0x03, "Bidirectional link"},
2129 static const value_string tsinfo_access[] = {
2137 static const value_string qos_up[] = {
2138 {0x00, "Best Effort"},
2139 {0x01, "Background"},
2141 {0x03, "Excellent Effort"},
2142 {0x04, "Controlled Load"},
2145 {0x07, "Network Control"},
2149 static const value_string classifier_type[] = {
2150 {0x00, "Ethernet parameters"},
2151 {0x01, "TCP/UDP IP parameters"},
2152 {0x02, "IEEE 802.1D/Q parameters"},
2156 static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
2157 "Sender Does Not Require Immediate Acknowledgement",
2158 "Immediate Acknowledgement Required"
2161 static const value_string ieee80211_block_ack_request_type_flags[] = {
2162 {0x00, "Basic Block Ack Request"},
2164 {0x02, "Compressed Block Ack Request"},
2165 {0x03, "Multi-TID Block Ack Request"},
2169 static const value_string ieee80211_block_ack_type_flags[] = {
2170 {0x00, "Basic Block Ack"},
2172 {0x02, "Compressed Block"},
2173 {0x03, "Multi-TID Block"},
2177 static const value_string ft_action_codes[] = {
2178 {FT_ACTION_REQUEST, "FT Request"},
2179 {FT_ACTION_RESPONSE, "FT Response"},
2180 {FT_ACTION_CONFIRM, "FT Confirm"},
2181 {FT_ACTION_ACK, "FT Ack"},
2185 static const value_string sa_query_action_codes[] = {
2186 {SA_QUERY_REQUEST, "SA Query Request"},
2187 {SA_QUERY_RESPONSE, "SA Query Response"},
2191 static const value_string ieee80211_data_encap_payload_types[] = {
2192 {1, "Remote Request/Response"},
2197 static const true_false_string rsn_preauth_flags = {
2198 "Transmitter supports pre-authentication",
2199 "Transmitter does not support pre-authentication"
2202 static const true_false_string rsn_no_pairwise_flags = {
2203 "Transmitter cannot support WEP default key 0 simultaneously with "
2205 "Transmitter can support WEP default key 0 simultaneously with "
2209 static const value_string rsn_cap_replay_counter[] = {
2210 {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
2211 {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
2212 {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
2213 {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
2217 static const true_false_string ht_ldpc_coding_flag = {
2218 "Transmitter supports receiving LDPC coded packets",
2219 "Transmitter does not support receiving LDPC coded packets"
2222 static const true_false_string ht_chan_width_flag = {
2223 "Transmitter supports 20MHz and 40MHz operation",
2224 "Transmitter only supports 20MHz operation"
2227 static const value_string ht_sm_pwsave_flag[] = {
2228 {0x00, "Static SM Power Save mode"},
2229 {0x01, "Dynamic SM Power Save mode"},
2231 {0x03, "SM Power Save disabled"},
2235 static const true_false_string ht_green_flag = {
2236 "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
2237 "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
2240 static const value_string ht_rx_stbc_flag[] = {
2241 {0x00, "No Rx STBC support"},
2242 {0x01, "Rx support of one spatial stream"},
2243 {0x02, "Rx support of one and two spatial streams"},
2244 {0x03, "Rx support of one, two, and three spatial streams"},
2248 /* IEEE Stc 802.11ac-2013 8.4.2.29 Extended Capabilities element*/
2249 static const value_string vht_max_mpdu_in_amsdu[] = {
2257 /* IEEE Stc 802.11ac/D3.1 */
2259 static const value_string vht_max_mpdu_length_flag[] = {
2267 static const value_string vht_supported_chan_width_set_flag[] = {
2268 {0x00, "Neither 160MHz nor 80+80 supported"},
2269 {0x01, "160MHz supported"},
2270 {0x02, "160MHz and 80+80 Supported"},
2275 static const value_string vht_rx_stbc_flag[] = {
2277 {0x01, "1 Spatial Stream Supported"},
2278 {0x02, "1 to 2 Spatial Stream Supported"},
2279 {0x03, "1 to 3 Spatial Stream Supported"},
2280 {0x04, "1 to 4 Spatial Stream Supported"},
2281 {0x02, "160MHz and 80+80 Supported"},
2288 static const value_string num_plus_one_3bit_flag[] = {
2300 static const value_string vht_max_ampdu_flag[] = {
2308 {0x07, "1 048 575"},
2312 static const value_string vht_link_adapt_flag[] = {
2313 {0x00, "No Feedback"},
2314 {0x01, "Reserved (logically only solicited feedback)"},
2315 {0x02, "Unsolicited feedback only"},
2316 {0x03, "Both (can provide unsolicited feedback and respond to VHT MRQ)"},
2320 static const value_string vht_supported_mcs_flag[] = {
2324 {0x03, "Not Supported"},
2328 static const value_string vht_op_channel_width_flag[] = {
2329 {0x00, "20 MHz or 40 MHz"},
2332 {0x03, "80+80 MHz"},
2336 static const value_string vht_tpe_pwr_units[] = {
2341 static const true_false_string vht_ndp_annc_sta_info_feedback_type = {
2342 "MU feedback requested",
2343 "SU feedback requested"
2346 static const true_false_string ht_delayed_block_ack_flag = {
2347 "Transmitter supports HT-Delayed BlockAck",
2348 "Transmitter does not support HT-Delayed BlockAck"
2351 static const true_false_string ht_max_amsdu_flag = {
2356 static const true_false_string ht_dss_cck_40_flag = {
2357 "Will/Can use DSSS/CCK in 40 MHz",
2358 "Won't/Can't use of DSSS/CCK in 40 MHz"
2361 static const true_false_string ht_psmp_flag = {
2362 "Will/Can support PSMP operation",
2363 "Won't/Can't support PSMP operation"
2366 static const true_false_string ht_40_mhz_intolerant_flag = {
2367 "Use of 40 MHz transmissions restricted/disallowed",
2368 "Use of 40 MHz transmissions unrestricted/allowed"
2371 static const value_string ampduparam_mpdu_start_spacing_flags[] = {
2372 {0x00, "no restriction"},
2373 {0x01, "1/4 [usec]"},
2374 {0x02, "1/2 [usec]"},
2379 {0x07, "16 [usec]"},
2383 static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
2388 static const value_string mcsset_tx_max_spatial_streams_flags[] = {
2389 {0x00, "1 spatial stream"},
2390 {0x01, "2 spatial streams"},
2391 {0x02, "3 spatial streams"},
2392 {0x03, "4 spatial streams"},
2393 {0x04, "TX MCS Set Not Defined"},
2397 static const value_string htex_transtime_flags[] = {
2398 {0x00, "No Transition"},
2405 static const value_string htex_mcs_flags[] = {
2406 {0x00, "STA does not provide MCS feedback"},
2408 {0x02, "STA provides only unsolicited MCS feedback"},
2409 {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
2413 static const value_string txbf_calib_flag[] = {
2414 {0x00, "incapable"},
2415 {0x01, "Limited involvement, cannot initiate"},
2416 {0x02, "Limited involvement, can initiate"},
2417 {0x03, "Fully capable"},
2421 static const value_string txbf_feedback_flags[] = {
2422 {0x00, "not supported"},
2423 {0x01, "delayed feedback capable"},
2424 {0x02, "immediate feedback capable"},
2425 {0x03, "delayed and immediate feedback capable"},
2429 static const value_string txbf_antenna_flags[] = {
2430 {0x00, "1 TX antenna sounding"},
2431 {0x01, "2 TX antenna sounding"},
2432 {0x02, "3 TX antenna sounding"},
2433 {0x03, "4 TX antenna sounding"},
2437 static const value_string txbf_csi_max_rows_bf_flags[] = {
2438 {0x00, "1 row of CSI"},
2439 {0x01, "2 rows of CSI"},
2440 {0x02, "3 rows of CSI"},
2441 {0x03, "4 rows of CSI"},
2445 static const value_string txbf_chan_est_flags[] = {
2446 {0x00, "1 space time stream"},
2447 {0x01, "2 space time streams"},
2448 {0x02, "3 space time streams"},
2449 {0x03, "4 space time streams"},
2453 static const value_string txbf_min_group_flags[] = {
2454 {0x00, "No grouping supported"},
2455 {0x01, "Groups of 1, 2 supported"},
2456 {0x02, "Groups of 1, 4 supported"},
2457 {0x03, "Groups of 1, 2, 4 supported"},
2461 static const value_string hta_ext_chan_offset_flag[] = {
2462 {0x00, "No Extension Channel"},
2463 {0x01, "Extension Channel above control channel"},
2464 {0x02, "Undefined"},
2465 {0x03, "Extension Channel below control channel"},
2469 static const true_false_string hta_rec_tx_width_flag = {
2470 "Any channel width enabled",
2471 "Use 20MHz channel (control)"
2474 static const true_false_string hta_rifs_mode_flag = {
2475 "Use of RIFS permitted",
2476 "Use of RIFS prohibited"
2479 static const true_false_string hta_controlled_access_flag = {
2484 static const value_string hta_service_interval_flag[] = {
2496 static const value_string hta_operating_mode_flag[] = {
2497 {0x00, "Pure HT, no protection"},
2498 {0x01, "There may be non-HT devices (control & ext channel)"},
2499 {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
2500 {0x03, "Mixed: no non-HT is associated, protect on"},
2504 static const true_false_string hta_non_gf_devices_flag = {
2505 "All HT devices associated are GF capable",
2506 "One or More HT devices are not GF capable"
2509 static const true_false_string hta_dual_stbc_protection_flag = {
2510 "Dual CTS protections is used",
2511 "Regular use of RTS/CTS"
2514 static const true_false_string hta_secondary_beacon_flag = {
2519 static const true_false_string hta_lsig_txop_protection_flag = {
2524 static const true_false_string hta_pco_active_flag = {
2525 "PCO is activated in the BSS",
2526 "PCO is not activated in the BSS"
2529 static const true_false_string hta_pco_phase_flag = {
2530 "Switch to 20MHz phase/keep 20MHz",
2531 "Switch to 40MHz phase/keep 40MHz"
2534 static const value_string ht_info_secondary_channel_offset_flags[] = {
2535 {0x00, "No secondary channel"},
2536 {0x01, "Secondary channel is above the primary channel"},
2538 {0x03, "Secondary channel is below the primary channel"},
2542 static const true_false_string ht_info_channel_width_flag = {
2543 "Channel of any width supported",
2544 "20 MHz channel width only"
2547 static const true_false_string ht_info_rifs_mode_flag = {
2552 static const true_false_string ht_info_psmp_stas_only_flag = {
2553 "Association requests are accepted from only PSMP capable STA",
2554 "Association requests are accepted regardless of PSMP capability"
2557 static const value_string ht_info_service_interval_granularity_flags[] = {
2569 static const value_string ht_info_operating_mode_flags[] = {
2570 {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"},
2571 {0x01, "HT non-member protection mode"},
2572 {0x02, "Only HT STAs in the BSS, however, there exists at least one 20 MHz STA"},
2573 {0x03, "HT mixed mode"},
2577 static const true_false_string ht_info_non_greenfield_sta_present_flag = {
2578 "One or more associated STAs are not greenfield capable",
2579 "All associated STAs are greenfield capable"
2582 static const true_false_string ht_info_transmit_burst_limit_flag = {
2583 "2.4 GHz - 6.16 ms | All other bands - 3.08 ms",
2587 static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
2588 "Use of protection for non-HT STAs by overlapping BSSs is needed",
2589 "Use of protection for non-HT STAs by overlapping BSSs is not needed"
2592 static const true_false_string ht_info_dual_beacon_flag = {
2593 "AP transmits a secondary beacon",
2594 "No second beacon is transmitted"
2597 static const true_false_string ht_info_dual_cts_protection_flag = {
2602 static const true_false_string ht_info_secondary_beacon_flag = {
2607 static const true_false_string ht_info_lsig_txop_protection_full_support_flag = {
2608 "All HT STAs in the BSS support L-SIG TXOP protection",
2609 "One or more HT STAs in the BSS do not support L-SIG TXOP protection"
2612 static const true_false_string ht_info_pco_phase_flag = {
2613 "Switch to or continue 40 MHz phase",
2614 "Switch to or continue 20 MHz phase"
2617 static const true_false_string htc_lac_trq_flag = {
2618 "Want sounding PPDU",
2619 "Don't want sounding PPDU"
2622 static const true_false_string htc_lac_mai_mrq_flag = {
2623 "MCS feedback requested",
2624 "No MCS feedback requested"
2627 static const value_string ieee80211_htc_lac_asel_command_flags[] = {
2628 {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
2629 {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
2630 {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
2631 {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
2632 {0x04, "Sounding Label"},
2633 {0x05, "No feedback, ASEL training failure"},
2634 {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
2639 static const value_string ieee80211_htc_cal_pos_flags[] = {
2640 {0x00, "Not a calibration frame"},
2641 {0x01, "Calibration Start"},
2642 {0x02, "Sounding Response"},
2643 {0x03, "Sounding Complete"},
2647 static const value_string ieee80211_htc_csi_steering_flags[] = {
2648 {0x00, "No feedback required"},
2650 {0x02, "Non-compressed Beamforming Feedback Matrix"},
2651 {0x03, "Compressed Beamforming Feedback Matrix"},
2655 static const true_false_string ieee80211_htc_ndp_announcement_flag = {
2657 "No NDP will follow"
2660 static const value_string ieee80211_htc_bw_recommended_vht_mcs_vals[] = {
2664 {3, "160 MHz and 80+80 MHz"},
2668 static const value_string ieee80211_htc_coding_type_vals[] = {
2674 static const value_string ieee80211_htc_fb_tx_type_vals[] = {
2675 {0, "Not beamformed"},
2680 static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
2681 {0x00, "No Secondary Channel"},
2682 {0x01, "Above Primary Channel"},
2684 {0x03, "Below Primary Channel"},
2688 #define BSS_BITMASK_UP0 0x0001
2689 #define BSS_BITMASK_UP1 0x0002
2690 #define BSS_BITMASK_UP2 0x0004
2691 #define BSS_BITMASK_UP3 0x0008
2692 #define BSS_BITMASK_UP4 0x0010
2693 #define BSS_BITMASK_UP5 0x0020
2694 #define BSS_BITMASK_UP6 0x0040
2695 #define BSS_BITMASK_UP7 0x0080
2696 #define BSS_BITMASK_AC0 0x0100
2697 #define BSS_BITMASK_AC1 0x0200
2698 #define BSS_BITMASK_AC2 0x0400
2699 #define BSS_BITMASK_AC3 0x0800
2700 #define BSS_BITMASK_RSV 0xF000
2702 static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
2703 {0x00, "Frames may be transmitted before the channel switch has been completed"},
2704 {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
2708 static const value_string service_interval_granularity_vals[] = {
2720 static const value_string wep_type_vals[] = {
2721 { AIRPDCAP_KEY_TYPE_WEP, STRING_KEY_TYPE_WEP },
2722 { AIRPDCAP_KEY_TYPE_WPA_PWD, STRING_KEY_TYPE_WPA_PWD },
2723 { AIRPDCAP_KEY_TYPE_WPA_PSK, STRING_KEY_TYPE_WPA_PSK },
2727 static const value_string ieee80211_ht_pren_type_vals[] = {
2728 { 51, "HT Capabilities (802.11n D1.10)" },
2729 { 52, "HT Additional Capabilities (802.11n D1.00)" },
2733 static const true_false_string ieee80211_cf_ssw_direction = {
2734 "Transmitted by the beamforming responder",
2735 "Transmitted by the beamforming initiator"
2738 static const value_string bss_type[] = {
2742 {0x3, "Infrastructure BSS"},
2746 static const value_string band_id[] = {
2747 {0x0, "TV white spaces"},
2748 {0x1, "Sub-1 GHZ (excluding TV white spaces)"},
2751 {0x4, "4.9 and 5 GHZ"},
2756 static const value_string allocation_type[] = {
2757 {0x0, "SP Allocation"},
2758 {0x4, "CBAP allocation"},
2762 static const value_string vht_operation_info_channel_width[] = {
2763 {0x00, "20MHz or 40MHz"},
2766 {0x11, "80MHz+80MHz"},
2769 static const value_string operating_mode_field_channel_width[] = {
2773 {0x03, "160MHz or 80MHz+80MHz"},
2777 static const value_string operat_mode_field_rxnss[] = {
2789 #define VHT_ACT_VHT_COMPRESSED_BEAMFORMING 0
2790 #define VHT_ACT_GROUP_ID_MANAGEMENT 1
2791 #define VHT_ACT_OPERATION_MODE_NOTIFICATION 2
2793 static const value_string vht_action_vals[] = {
2794 {VHT_ACT_VHT_COMPRESSED_BEAMFORMING, "VHT Compressed Beamforming"},
2795 {VHT_ACT_GROUP_ID_MANAGEMENT, "Group ID Management"},
2796 {VHT_ACT_OPERATION_MODE_NOTIFICATION, "Operating Mode Notification"},
2800 static const value_string ff_vht_mimo_cntrl_nc_index_vals[] = {
2802 {0x01, "2 Columns"},
2803 {0x02, "3 Columns"},
2804 {0x03, "4 Columns"},
2805 {0x04, "5 Columns"},
2806 {0x05, "6 Columns"},
2807 {0x06, "7 Columns"},
2808 {0x07, "8 Columns"},
2812 static const value_string ff_vht_mimo_cntrl_nr_index_vals[] = {
2824 static const value_string ff_vht_mimo_cntrl_channel_width_vals[] = {
2828 {0x03, "160 MHz / 80+80 Mhz"},
2832 static const value_string ff_vht_mimo_cntrl_grouping_vals[] = {
2833 {0x00, "1 (No Grouping)"},
2840 static const value_string ff_vht_mimo_cntrl_feedback_vals[] = {
2847 static int proto_wlan = -1;
2848 static int proto_centrino = -1;
2849 static int proto_aggregate = -1;
2850 static gboolean ieee80211_tvb_invalid = FALSE;
2852 /* ************************************************************************* */
2853 /* Header field info values for FC-field */
2854 /* ************************************************************************* */
2855 static int hf_ieee80211_fc_field = -1;
2856 static int hf_ieee80211_fc_proto_version = -1;
2857 static int hf_ieee80211_fc_frame_type = -1;
2858 static int hf_ieee80211_fc_frame_subtype = -1;
2859 static int hf_ieee80211_fc_frame_extension = -1;
2860 static int hf_ieee80211_fc_frame_type_subtype = -1;
2862 static int hf_ieee80211_fc_flags = -1;
2863 static int hf_ieee80211_fc_to_ds = -1;
2864 static int hf_ieee80211_fc_from_ds = -1;
2865 static int hf_ieee80211_fc_data_ds = -1;
2867 static int hf_ieee80211_fc_more_frag = -1;
2868 static int hf_ieee80211_fc_retry = -1;
2869 static int hf_ieee80211_fc_pwr_mgt = -1;
2870 static int hf_ieee80211_fc_more_data = -1;
2871 static int hf_ieee80211_fc_protected = -1;
2872 static int hf_ieee80211_fc_order = -1;
2874 typedef struct retransmit_key {
2877 guint16 seq_control;
2881 static GHashTable *fc_analyse_retransmit_table = NULL;
2882 static GHashTable *fc_first_frame_table = NULL;
2884 static int hf_ieee80211_fc_analysis_retransmission = -1;
2885 static int hf_ieee80211_fc_analysis_retransmission_frame = -1;
2887 /* ************************************************************************* */
2888 /* Header values for Duration/ID field */
2889 /* ************************************************************************* */
2890 static int hf_ieee80211_did_duration = -1;
2891 static int hf_ieee80211_assoc_id = -1;
2893 /* ************************************************************************* */
2894 /* Header values for different address-fields (all 4 of them) */
2895 /* ************************************************************************* */
2896 static int hf_ieee80211_addr_da = -1; /* Destination address subfield */
2897 static int hf_ieee80211_addr_da_resolved = -1; /* Dst addr subfield resolved*/
2898 static int hf_ieee80211_addr_sa = -1; /* Source address subfield */
2899 static int hf_ieee80211_addr_sa_resolved = -1; /* Src addr subfield resolved*/
2900 static int hf_ieee80211_addr_ra = -1; /* Receiver address subfield */
2901 static int hf_ieee80211_addr_ra_resolved = -1; /* Rcv addr subfield resolved*/
2902 static int hf_ieee80211_addr_ta = -1; /* Transmitter address subfield */
2903 static int hf_ieee80211_addr_ta_resolved = -1; /* Txm addr subfield resolved*/
2904 static int hf_ieee80211_addr_bssid = -1; /* address is bssid */
2905 static int hf_ieee80211_addr_bssid_resolved = -1; /* bssid resolved*/
2906 static int hf_ieee80211_addr_staa = -1; /* address is station address */
2907 static int hf_ieee80211_addr_staa_resolved = -1; /* station address resolved*/
2909 static int hf_ieee80211_addr = -1; /* Source or destination address subfield */
2910 static int hf_ieee80211_addr_resolved = -1;/*Src/dst address subfield resolved*/
2912 /* ************************************************************************* */
2913 /* Header values for QoS control field */
2914 /* ************************************************************************* */
2915 static int hf_ieee80211_qos = -1;
2916 static int hf_ieee80211_qos_tid = -1;
2917 static int hf_ieee80211_qos_priority = -1;
2918 static int hf_ieee80211_qos_ack_policy = -1;
2919 static int hf_ieee80211_qos_amsdu_present = -1;
2920 static int hf_ieee80211_qos_eosp = -1;
2921 static int hf_ieee80211_qos_bit4 = -1;
2922 static int hf_ieee80211_qos_txop_limit = -1;
2923 static int hf_ieee80211_qos_ps_buf_state = -1;
2924 static int hf_ieee80211_qos_buf_state_indicated = -1;
2925 static int hf_ieee80211_qos_highest_pri_buf_ac = -1;
2926 static int hf_ieee80211_qos_qap_buf_load = -1;
2927 static int hf_ieee80211_qos_txop_dur_req = -1;
2928 static int hf_ieee80211_qos_queue_size = -1;
2930 /* ************************************************************************* */
2931 /* Header values for HT control field (+HTC) */
2932 /* ************************************************************************* */
2933 /* 802.11-2012 and 802.11ac-2013 8.2.4.6 */
2934 static int hf_ieee80211_htc = -1;
2935 static int hf_ieee80211_htc_vht = -1;
2936 static int hf_ieee80211_htc_lac = -1;
2937 static int hf_ieee80211_htc_lac_trq = -1;
2938 static int hf_ieee80211_htc_lac_mai_aseli = -1;
2939 static int hf_ieee80211_htc_lac_mai_mrq = -1;
2940 static int hf_ieee80211_htc_lac_mai_msi = -1;
2941 static int hf_ieee80211_htc_lac_mai_reserved = -1;
2942 static int hf_ieee80211_htc_lac_mfsi = -1;
2943 static int hf_ieee80211_htc_lac_mfb = -1;
2944 static int hf_ieee80211_htc_lac_asel_command = -1;
2945 static int hf_ieee80211_htc_lac_asel_data = -1;
2946 static int hf_ieee80211_htc_cal_pos = -1;
2947 static int hf_ieee80211_htc_cal_seq = -1;
2948 static int hf_ieee80211_htc_reserved1 = -1;
2949 static int hf_ieee80211_htc_csi_steering = -1;
2950 static int hf_ieee80211_htc_ndp_announcement = -1;
2951 static int hf_ieee80211_htc_reserved2 = -1;
2952 static int hf_ieee80211_htc_mrq = -1;
2953 static int hf_ieee80211_htc_msi = -1;
2954 static int hf_ieee80211_htc_msi_stbc_reserved = -1;
2955 static int hf_ieee80211_htc_compressed_msi = -1;
2956 static int hf_ieee80211_htc_ppdu_stbc_encoded = -1;
2957 static int hf_ieee80211_htc_mfsi = -1;
2958 static int hf_ieee80211_htc_gid_l = -1;
2959 static int hf_ieee80211_htc_mfb = -1;
2960 static int hf_ieee80211_htc_num_sts = -1;
2961 static int hf_ieee80211_htc_vht_mcs = -1;
2962 static int hf_ieee80211_htc_bw = -1;
2963 static int hf_ieee80211_htc_snr = -1;
2964 static int hf_ieee80211_htc_reserved3 = -1;
2965 static int hf_ieee80211_htc_gid_h = -1;
2966 static int hf_ieee80211_htc_coding_type = -1;
2967 static int hf_ieee80211_htc_fb_tx_type = -1;
2968 static int hf_ieee80211_htc_unsolicited_mfb = -1;
2969 static int hf_ieee80211_htc_ac_constraint = -1;
2970 static int hf_ieee80211_htc_rdg_more_ppdu = -1;
2972 /* ************************************************************************* */
2973 /* Header values for sequence number field */
2974 /* ************************************************************************* */
2975 static int hf_ieee80211_frag_number = -1;
2976 static int hf_ieee80211_seq_number = -1;
2978 /* ************************************************************************* */
2979 /* Header values for Frame Check field */
2980 /* ************************************************************************* */
2981 static int hf_ieee80211_fcs = -1;
2982 static int hf_ieee80211_fcs_status = -1;
2984 /* ************************************************************************* */
2985 /* Header values for reassembly */
2986 /* ************************************************************************* */
2987 static int hf_ieee80211_fragments = -1;
2988 static int hf_ieee80211_fragment = -1;
2989 static int hf_ieee80211_fragment_overlap = -1;
2990 static int hf_ieee80211_fragment_overlap_conflict = -1;
2991 static int hf_ieee80211_fragment_multiple_tails = -1;
2992 static int hf_ieee80211_fragment_too_long_fragment = -1;
2993 static int hf_ieee80211_fragment_error = -1;
2994 static int hf_ieee80211_fragment_count = -1;
2995 static int hf_ieee80211_reassembled_in = -1;
2996 static int hf_ieee80211_reassembled_length = -1;
2998 static int proto_wlan_ext = -1;
3000 /* ************************************************************************* */
3001 /* Fixed fields found in mgt frames */
3002 /* ************************************************************************* */
3003 static int hf_ieee80211_fixed_parameters = -1; /* Protocol payload for management frames */
3005 static int hf_ieee80211_ff_auth_alg = -1; /* Authentication algorithm field */
3006 static int hf_ieee80211_ff_auth_seq = -1; /* Authentication transaction sequence */
3007 static int hf_ieee80211_ff_current_ap = -1; /* Current AP MAC address */
3008 static int hf_ieee80211_ff_listen_ival = -1; /* Listen interval fixed field */
3009 static int hf_ieee80211_ff_timestamp = -1; /* 64 bit timestamp */
3010 static int hf_ieee80211_ff_beacon_interval = -1; /* 16 bit Beacon interval */
3011 static int hf_ieee80211_ff_assoc_id = -1; /* 16 bit AID field */
3012 static int hf_ieee80211_ff_reason = -1; /* 16 bit reason code */
3013 static int hf_ieee80211_ff_status_code = -1; /* Status code */
3014 static int hf_ieee80211_ff_category_code = -1; /* 8 bit Category code */
3015 static int hf_ieee80211_ff_action_code = -1; /* 8 bit Action code */
3016 static int hf_ieee80211_ff_dialog_token = -1; /* 8 bit Dialog token */
3017 static int hf_ieee80211_ff_followup_dialog_token = -1;
3018 static int hf_ieee80211_ff_wme_action_code = -1; /* Management notification action code */
3019 static int hf_ieee80211_ff_wme_status_code = -1; /* Management notification setup response status code */
3020 static int hf_ieee80211_ff_qos_action_code = -1;
3021 static int hf_ieee80211_ff_dls_action_code = -1;
3022 static int hf_ieee80211_ff_dst_mac_addr = -1; /* DLS destination MAC addressi */
3023 static int hf_ieee80211_ff_src_mac_addr = -1; /* DLS source MAC addressi */
3024 static int hf_ieee80211_ff_req_ap_addr = -1;
3025 static int hf_ieee80211_ff_res_ap_addr = -1;
3026 static int hf_ieee80211_ff_check_beacon = -1;
3027 static int hf_ieee80211_ff_dls_timeout = -1; /* DLS timeout value */
3028 static int hf_ieee80211_ff_ft_action_code = -1; /* 8 bit FT Action code */
3029 static int hf_ieee80211_ff_sta_address = -1;
3030 static int hf_ieee80211_ff_target_ap_address = -1;
3031 static int hf_ieee80211_ff_gas_comeback_delay = -1;
3032 static int hf_ieee80211_ff_gas_fragment_id = -1;
3033 static int hf_ieee80211_ff_more_gas_fragments = -1;
3034 static int hf_ieee80211_ff_query_request_length = -1;
3035 static int hf_ieee80211_ff_query_request = -1;
3036 static int hf_ieee80211_ff_query_response_length = -1;
3037 static int hf_ieee80211_ff_query_response = -1;
3038 static int hf_ieee80211_ff_anqp_info_id = -1;
3039 static int hf_ieee80211_ff_anqp_info_length = -1;
3040 static int hf_ieee80211_ff_anqp_info = -1;
3041 static int hf_ieee80211_ff_anqp_query_id = -1;
3042 static int hf_ieee80211_ff_anqp_capability = -1;
3043 static int hf_ieee80211_ff_anqp_capability_vlen = -1;
3044 static int hf_ieee80211_ff_anqp_capability_vendor = -1;
3045 static int hf_ieee80211_ff_venue_info_group = -1;
3046 static int hf_ieee80211_ff_venue_info_type = -1;
3047 static int hf_ieee80211_ff_anqp_venue_length = -1;
3048 static int hf_ieee80211_ff_anqp_venue_language = -1;
3049 static int hf_ieee80211_ff_anqp_venue_name = -1;
3050 static int hf_ieee80211_ff_anqp_nw_auth_type_indicator = -1;
3051 static int hf_ieee80211_ff_anqp_nw_auth_type_url_len = -1;
3052 static int hf_ieee80211_ff_anqp_nw_auth_type_url = -1;
3053 static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len = -1;
3054 static int hf_ieee80211_ff_anqp_roaming_consortium_oi = -1;
3055 static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6 = -1;
3056 static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4 = -1;
3057 static int hf_ieee80211_ff_anqp_nai_realm_count = -1;
3058 static int hf_ieee80211_ff_anqp_nai_field_len = -1;
3059 static int hf_ieee80211_ff_anqp_nai_realm_encoding = -1;
3060 static int hf_ieee80211_ff_anqp_nai_realm_length = -1;
3061 static int hf_ieee80211_ff_anqp_nai_realm = -1;
3062 static int hf_ieee80211_ff_anqp_nai_realm_eap_count = -1;
3063 static int hf_ieee80211_ff_anqp_nai_realm_eap_len = -1;
3064 static int hf_ieee80211_ff_anqp_nai_realm_eap_method = -1;
3065 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count = -1;
3066 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id = -1;
3067 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len = -1;
3068 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value = -1;
3069 static int hf_ieee80211_3gpp_gc_gud = -1;
3070 static int hf_ieee80211_3gpp_gc_udhl = -1;
3071 static int hf_ieee80211_3gpp_gc_iei = -1;
3072 static int hf_ieee80211_3gpp_gc_num_plmns = -1;
3073 static int hf_ieee80211_3gpp_gc_plmn_len = -1;
3074 static int hf_ieee80211_ff_anqp_domain_name_len = -1;
3075 static int hf_ieee80211_ff_anqp_domain_name = -1;
3076 static int hf_ieee80211_ff_tdls_action_code = -1;
3077 static int hf_ieee80211_ff_target_channel = -1;
3078 static int hf_ieee80211_ff_operating_class = -1;
3079 static int hf_ieee80211_ff_wnm_action_code = -1;
3080 static int hf_ieee80211_ff_unprotected_wnm_action_code = -1;
3081 static int hf_ieee80211_ff_key_data_length = -1;
3082 static int hf_ieee80211_ff_key_data = -1;
3083 static int hf_ieee80211_ff_wnm_notification_type = -1;
3084 static int hf_ieee80211_ff_rm_action_code = -1;
3085 static int hf_ieee80211_ff_rm_dialog_token = -1;
3086 static int hf_ieee80211_ff_rm_repetitions = -1;
3087 static int hf_ieee80211_ff_rm_tx_power = -1;
3088 static int hf_ieee80211_ff_rm_max_tx_power = -1;
3089 static int hf_ieee80211_ff_tpc = -1;
3090 static int hf_ieee80211_ff_tpc_element_id = -1;
3091 static int hf_ieee80211_ff_tpc_length = -1;
3092 static int hf_ieee80211_ff_tpc_tx_power = -1;
3093 static int hf_ieee80211_ff_tpc_link_margin = -1;
3094 static int hf_ieee80211_ff_rm_rx_antenna_id = -1;
3095 static int hf_ieee80211_ff_rm_tx_antenna_id = -1;
3096 static int hf_ieee80211_ff_rm_rcpi = -1;
3097 static int hf_ieee80211_ff_rm_rsni = -1;
3098 static int hf_ieee80211_ff_request_mode_pref_cand = -1;
3099 static int hf_ieee80211_ff_request_mode_abridged = -1;
3100 static int hf_ieee80211_ff_request_mode_disassoc_imminent = -1;
3101 static int hf_ieee80211_ff_request_mode_bss_term_included = -1;
3102 static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent = -1;
3103 static int hf_ieee80211_ff_disassoc_timer = -1;
3104 static int hf_ieee80211_ff_validity_interval = -1;
3105 static int hf_ieee80211_ff_bss_termination_duration = -1;
3106 static int hf_ieee80211_ff_url_len = -1;
3107 static int hf_ieee80211_ff_url = -1;
3108 static int hf_ieee80211_ff_target_bss = -1;
3109 static int hf_ieee80211_ff_bss_transition_status_code = -1;
3110 static int hf_ieee80211_ff_bss_termination_delay = -1;
3111 static int hf_ieee80211_ff_bss_transition_candidate_list_entries = -1;
3113 static int hf_ieee80211_ff_sa_query_action_code = -1;
3114 static int hf_ieee80211_ff_transaction_id = -1;
3116 /* Vendor specific */
3117 static int hf_ieee80211_ff_marvell_action_type = -1;
3118 static int hf_ieee80211_ff_marvell_mesh_mgt_action_code = -1;
3119 static int hf_ieee80211_ff_marvell_mesh_mgt_length = -1; /* Mesh Management length */
3120 static int hf_ieee80211_ff_marvell_mesh_mgt_mode = -1; /* Mesh Management mode */
3121 static int hf_ieee80211_ff_marvell_mesh_mgt_ttl = -1; /* Mesh Management TTL */
3122 static int hf_ieee80211_ff_marvell_mesh_mgt_dstcount = -1; /* Mesh Management dst count */
3123 static int hf_ieee80211_ff_marvell_mesh_mgt_hopcount = -1; /* Mesh Management hop count */
3124 static int hf_ieee80211_ff_marvell_mesh_mgt_rreqid = -1; /* Mesh Management RREQ ID */
3125 static int hf_ieee80211_ff_marvell_mesh_mgt_sa = -1; /* Mesh Management src addr */
3126 static int hf_ieee80211_ff_marvell_mesh_mgt_ssn = -1; /* Mesh Management src sequence number */
3127 static int hf_ieee80211_ff_marvell_mesh_mgt_metric = -1; /* Mesh Management metric */
3128 static int hf_ieee80211_ff_marvell_mesh_mgt_flags = -1; /* Mesh Management RREQ flags */
3129 static int hf_ieee80211_ff_marvell_mesh_mgt_da = -1; /* Mesh Management dst addr */
3130 static int hf_ieee80211_ff_marvell_mesh_mgt_dsn = -1; /* Mesh Management dst sequence number */
3131 static int hf_ieee80211_ff_marvell_mesh_mgt_lifetime = -1; /* Mesh Management lifetime */
3134 static int hf_ieee80211_ff_ba_action = -1;
3136 static int hf_ieee80211_ff_block_ack_params = -1;
3137 static int hf_ieee80211_ff_block_ack_params_amsdu_permitted = -1;
3138 static int hf_ieee80211_ff_block_ack_params_policy = -1;
3139 static int hf_ieee80211_ff_block_ack_params_tid = -1;
3140 static int hf_ieee80211_ff_block_ack_params_buffer_size = -1;
3142 static const int *ieee80211_ff_block_ack_params_fields[] = {
3143 &hf_ieee80211_ff_block_ack_params_amsdu_permitted,
3144 &hf_ieee80211_ff_block_ack_params_policy,
3145 &hf_ieee80211_ff_block_ack_params_tid,
3146 &hf_ieee80211_ff_block_ack_params_buffer_size,
3150 static int hf_ieee80211_ff_block_ack_timeout = -1;
3152 static int hf_ieee80211_ff_block_ack_ssc = -1;
3153 static int hf_ieee80211_ff_block_ack_ssc_fragment = -1;
3154 static int hf_ieee80211_ff_block_ack_ssc_sequence = -1;
3156 static const int *ieee80211_ff_block_ack_ssc_fields[] = {
3157 &hf_ieee80211_ff_block_ack_ssc_fragment,
3158 &hf_ieee80211_ff_block_ack_ssc_sequence,
3162 static int hf_ieee80211_ff_delba_param = -1;
3163 static int hf_ieee80211_ff_delba_param_reserved = -1;
3164 static int hf_ieee80211_ff_delba_param_init = -1;
3165 static int hf_ieee80211_ff_delba_param_tid = -1;
3167 static const int *ieee80211_ff_delba_param_fields[] = {
3168 &hf_ieee80211_ff_delba_param_reserved,
3169 &hf_ieee80211_ff_delba_param_init,
3170 &hf_ieee80211_ff_delba_param_tid,
3174 static int hf_ieee80211_ff_max_reg_pwr = -1;
3175 static int hf_ieee80211_ff_measurement_pilot_int = -1;
3176 static int hf_ieee80211_ff_country_str = -1;
3177 static int hf_ieee80211_ff_max_tx_pwr = -1;
3178 static int hf_ieee80211_ff_tx_pwr_used = -1;
3179 static int hf_ieee80211_ff_transceiver_noise_floor = -1;
3180 static int hf_ieee80211_ff_channel_width = -1;
3182 static int hf_ieee80211_ff_qos_info_ap = -1;
3183 static int hf_ieee80211_ff_qos_info_ap_edca_param_set_counter = -1;
3184 static int hf_ieee80211_ff_qos_info_ap_q_ack = -1;
3185 static int hf_ieee80211_ff_qos_info_ap_queue_req = -1;
3186 static int hf_ieee80211_ff_qos_info_ap_txop_request = -1;
3187 static int hf_ieee80211_ff_qos_info_ap_reserved = -1;
3189 static const int *ieee80211_ff_qos_info_ap_fields[] = {
3190 &hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
3191 &hf_ieee80211_ff_qos_info_ap_q_ack,
3192 &hf_ieee80211_ff_qos_info_ap_queue_req,
3193 &hf_ieee80211_ff_qos_info_ap_txop_request,
3194 &hf_ieee80211_ff_qos_info_ap_reserved,
3198 static int hf_ieee80211_ff_qos_info_sta = -1;
3199 static int hf_ieee80211_ff_qos_info_sta_ac_vo = -1;
3200 static int hf_ieee80211_ff_qos_info_sta_ac_vi = -1;
3201 static int hf_ieee80211_ff_qos_info_sta_ac_bk = -1;
3202 static int hf_ieee80211_ff_qos_info_sta_ac_be = -1;
3203 static int hf_ieee80211_ff_qos_info_sta_q_ack = -1;
3204 static int hf_ieee80211_ff_qos_info_sta_max_sp_length = -1;
3205 static int hf_ieee80211_ff_qos_info_sta_more_data_ack = -1;
3207 static const int *ieee80211_ff_qos_info_sta_fields[] = {
3208 &hf_ieee80211_ff_qos_info_sta_ac_vo,
3209 &hf_ieee80211_ff_qos_info_sta_ac_vi,
3210 &hf_ieee80211_ff_qos_info_sta_ac_bk,
3211 &hf_ieee80211_ff_qos_info_sta_ac_be,
3212 &hf_ieee80211_ff_qos_info_sta_q_ack,
3213 &hf_ieee80211_ff_qos_info_sta_max_sp_length,
3214 &hf_ieee80211_ff_qos_info_sta_more_data_ack,
3218 static int hf_ieee80211_ff_sm_pwr_save = -1;
3219 static int hf_ieee80211_ff_sm_pwr_save_enabled = -1;
3220 static int hf_ieee80211_ff_sm_pwr_save_sm_mode = -1;
3221 static int hf_ieee80211_ff_sm_pwr_save_reserved = -1;
3223 static const int *ieee80211_ff_sw_pwr_save_fields[] = {
3224 &hf_ieee80211_ff_sm_pwr_save_enabled,
3225 &hf_ieee80211_ff_sm_pwr_save_sm_mode,
3226 &hf_ieee80211_ff_sm_pwr_save_reserved,
3230 static int hf_ieee80211_ff_pco_phase_cntrl = -1;
3232 static int hf_ieee80211_ff_psmp_param_set = -1;
3233 static int hf_ieee80211_ff_psmp_param_set_n_sta = -1;
3234 static int hf_ieee80211_ff_psmp_param_set_more_psmp = -1;
3235 static int hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration = -1;
3237 static const int *ieee80211_ff_psmp_param_set_fields[] = {
3238 &hf_ieee80211_ff_psmp_param_set_n_sta,
3239 &hf_ieee80211_ff_psmp_param_set_more_psmp,
3240 &hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
3244 static int hf_ieee80211_ff_mimo_cntrl = -1;
3245 static int hf_ieee80211_ff_mimo_cntrl_nc_index = -1;
3246 static int hf_ieee80211_ff_mimo_cntrl_nr_index = -1;
3247 static int hf_ieee80211_ff_mimo_cntrl_channel_width = -1;
3248 static int hf_ieee80211_ff_mimo_cntrl_grouping = -1;
3249 static int hf_ieee80211_ff_mimo_cntrl_coefficient_size = -1;
3250 static int hf_ieee80211_ff_mimo_cntrl_codebook_info = -1;
3251 static int hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment = -1;
3252 static int hf_ieee80211_ff_mimo_cntrl_reserved = -1;
3253 static int hf_ieee80211_ff_mimo_cntrl_sounding_timestamp = -1;
3255 static int hf_ieee80211_ff_ant_selection = -1;
3256 static int hf_ieee80211_ff_ant_selection_0 = -1;
3257 static int hf_ieee80211_ff_ant_selection_1 = -1;
3258 static int hf_ieee80211_ff_ant_selection_2 = -1;
3259 static int hf_ieee80211_ff_ant_selection_3 = -1;
3260 static int hf_ieee80211_ff_ant_selection_4 = -1;
3261 static int hf_ieee80211_ff_ant_selection_5 = -1;
3262 static int hf_ieee80211_ff_ant_selection_6 = -1;
3263 static int hf_ieee80211_ff_ant_selection_7 = -1;
3265 static const int *ieee80211_ff_ant_selection_fields[] = {
3266 &hf_ieee80211_ff_ant_selection_0,
3267 &hf_ieee80211_ff_ant_selection_1,
3268 &hf_ieee80211_ff_ant_selection_2,
3269 &hf_ieee80211_ff_ant_selection_3,
3270 &hf_ieee80211_ff_ant_selection_4,
3271 &hf_ieee80211_ff_ant_selection_5,
3272 &hf_ieee80211_ff_ant_selection_6,
3273 &hf_ieee80211_ff_ant_selection_7,
3277 static int hf_ieee80211_ff_ext_channel_switch_announcement = -1;
3278 static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode = -1;
3279 static int hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class = -1;
3280 static int hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number = -1;
3281 static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_count = -1;
3283 static const int *ieee80211_ff_ext_channel_switch_announcement_fields[] = {
3284 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
3285 &hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
3286 &hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
3287 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
3291 static int hf_ieee80211_ff_ht_info = -1;
3292 static int hf_ieee80211_ff_ht_info_information_request = -1;
3293 static int hf_ieee80211_ff_ht_info_40_mhz_intolerant = -1;
3294 static int hf_ieee80211_ff_ht_info_sta_chan_width = -1;
3295 static int hf_ieee80211_ff_ht_info_reserved = -1;
3297 static const int *ieee80211_ff_ht_info_fields[] = {
3298 &hf_ieee80211_ff_ht_info_information_request,
3299 &hf_ieee80211_ff_ht_info_40_mhz_intolerant,
3300 &hf_ieee80211_ff_ht_info_sta_chan_width,
3301 &hf_ieee80211_ff_ht_info_reserved,
3305 static int hf_ieee80211_ff_ht_action = -1;
3307 static int hf_ieee80211_ff_psmp_sta_info = -1;
3308 static int hf_ieee80211_ff_psmp_sta_info_type = -1;
3309 static int hf_ieee80211_ff_psmp_sta_info_dtt_start_offset = -1;
3310 static int hf_ieee80211_ff_psmp_sta_info_dtt_duration = -1;
3311 static int hf_ieee80211_ff_psmp_sta_info_sta_id = -1;
3312 static int hf_ieee80211_ff_psmp_sta_info_utt_start_offset = -1;
3313 static int hf_ieee80211_ff_psmp_sta_info_utt_duration = -1;
3314 static int hf_ieee80211_ff_psmp_sta_info_reserved_small= -1;
3315 static int hf_ieee80211_ff_psmp_sta_info_reserved_large = -1;
3316 static int hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id = -1;
3318 static int hf_ieee80211_ff_mimo_csi_snr = -1;
3319 static int hf_ieee80211_ff_mimo_csi_matrices = -1;
3320 static int hf_ieee80211_ff_mimo_csi_bf_matrices = -1;
3321 static int hf_ieee80211_ff_mimo_csi_cbf_matrices = -1;
3323 /*** Begin: 802.11s additions ***/
3324 static int hf_ieee80211_mesh_control_field = -1;
3326 static int hf_ieee80211_ff_mesh_action = -1;
3327 static int hf_ieee80211_ff_multihop_action = -1;
3328 static int hf_ieee80211_ff_mesh_flags = -1;
3329 static int hf_ieee80211_ff_mesh_ttl = -1;
3330 static int hf_ieee80211_ff_mesh_sequence = -1;
3331 static int hf_ieee80211_ff_mesh_addr4 = -1;
3332 static int hf_ieee80211_ff_mesh_addr5 = -1;
3333 static int hf_ieee80211_ff_mesh_addr6 = -1;
3334 static int hf_ieee80211_ff_selfprot_action = -1;
3336 static int hf_ieee80211_mesh_peering_proto = -1;
3337 static int hf_ieee80211_mesh_peering_local_link_id = -1;
3338 static int hf_ieee80211_mesh_peering_peer_link_id = -1;
3340 static int hf_ieee80211_ff_hwmp_flags = -1;
3341 static int hf_ieee80211_ff_hwmp_hopcount = -1;
3342 static int hf_ieee80211_ff_hwmp_ttl = -1;
3343 static int hf_ieee80211_ff_hwmp_pdid = -1;
3344 static int hf_ieee80211_ff_hwmp_orig_sta = -1;
3345 static int hf_ieee80211_ff_hwmp_orig_sn = -1;
3346 static int hf_ieee80211_ff_hwmp_orig_ext = -1;
3347 static int hf_ieee80211_ff_hwmp_lifetime = -1;
3348 static int hf_ieee80211_ff_hwmp_metric = -1;
3349 static int hf_ieee80211_ff_hwmp_targ_count = -1;
3350 static int hf_ieee80211_ff_hwmp_targ_flags = -1;
3351 static int hf_ieee80211_ff_hwmp_targ_to_flags = -1;
3352 static int hf_ieee80211_ff_hwmp_targ_usn_flags = -1;
3353 static int hf_ieee80211_ff_hwmp_targ_sta = -1;
3354 static int hf_ieee80211_ff_hwmp_targ_sn = -1;
3355 static int hf_ieee80211_ff_hwmp_targ_ext = -1;
3356 static int hf_ieee80211_rann_flags = -1;
3357 static int hf_ieee80211_rann_root_sta = -1;
3358 static int hf_ieee80211_rann_sn = -1;
3359 static int hf_ieee80211_rann_interval = -1;
3361 static int hf_ieee80211_mesh_channel_switch_ttl = -1;
3362 static int hf_ieee80211_mesh_channel_switch_flag = -1;
3363 static int hf_ieee80211_mesh_channel_switch_reason_code = -1;
3364 static int hf_ieee80211_mesh_channel_switch_precedence_value = -1;
3365 static int hf_ieee80211_mesh_chswitch_flag_txrestrict = -1;
3366 static int hf_ieee80211_mesh_chswitch_flag_initiator = -1;
3368 static int hf_ieee80211_mesh_config_path_sel_protocol = -1;
3369 static int hf_ieee80211_mesh_config_path_sel_metric = -1;
3370 static int hf_ieee80211_mesh_config_congestion_control = -1;
3371 static int hf_ieee80211_mesh_config_sync_method = -1;
3372 static int hf_ieee80211_mesh_config_auth_protocol = -1;
3373 static int hf_ieee80211_mesh_config_formation_info = -1;
3374 static int hf_ieee80211_mesh_config_capability = -1;
3375 static int hf_ieee80211_mesh_id = -1;
3376 static int hf_ieee80211_mesh_config_cap_accepting = -1;
3377 static int hf_ieee80211_mesh_config_cap_mcca_support = -1;
3378 static int hf_ieee80211_mesh_config_cap_mcca_enabled = -1;
3379 static int hf_ieee80211_mesh_config_cap_forwarding = -1;
3380 static int hf_ieee80211_mesh_config_cap_mbca_enabled = -1;
3381 static int hf_ieee80211_mesh_config_cap_tbtt_adjusting = -1;
3382 static int hf_ieee80211_mesh_config_cap_power_save_level = -1;
3383 static int hf_ieee80211_mesh_form_info_num_of_peerings = -1;
3385 static int hf_ieee80211_ff_public_action = -1;
3386 static int hf_ieee80211_ff_protected_public_action = -1;
3387 static int hf_ieee80211_ff_tod = -1;
3388 static int hf_ieee80211_ff_toa = -1;
3389 static int hf_ieee80211_ff_max_tod_err = -1;
3390 static int hf_ieee80211_ff_max_toa_err = -1;
3392 /* ************************************************************************* */
3393 /* Flags found in the capability field (fixed field) */
3394 /* ************************************************************************* */
3395 static int hf_ieee80211_ff_capture = -1;
3396 static int hf_ieee80211_ff_cf_ess = -1;
3397 static int hf_ieee80211_ff_cf_ibss = -1;
3398 static int hf_ieee80211_ff_cf_sta_poll = -1; /* CF pollable status for a STA */
3399 static int hf_ieee80211_ff_cf_ap_poll = -1; /* CF pollable status for an AP */
3400 static int hf_ieee80211_ff_cf_privacy = -1;
3401 static int hf_ieee80211_ff_cf_preamble = -1;
3402 static int hf_ieee80211_ff_cf_pbcc = -1;
3403 static int hf_ieee80211_ff_cf_agility = -1;
3404 static int hf_ieee80211_ff_short_slot_time = -1;
3405 static int hf_ieee80211_ff_dsss_ofdm = -1;
3406 static int hf_ieee80211_ff_cf_spec_man = -1;
3407 static int hf_ieee80211_ff_cf_apsd = -1;
3408 static int hf_ieee80211_ff_radio_measurement = -1;
3409 static int hf_ieee80211_ff_cf_del_blk_ack = -1;
3410 static int hf_ieee80211_ff_cf_imm_blk_ack = -1;
3412 /* ************************************************************************* */
3414 /* ************************************************************************* */
3415 static int hf_ieee80211_amsdu_subframe = -1;
3416 static int hf_ieee80211_amsdu_length = -1;
3418 /* ************************************************************************* */
3419 /* Tagged value format fields */
3420 /* ************************************************************************* */
3421 static int hf_ieee80211_tagged_parameters = -1; /* Tagged payload item */
3422 static int hf_ieee80211_tag = -1;
3423 static int hf_ieee80211_tag_number = -1;
3424 static int hf_ieee80211_tag_length = -1;
3425 static int hf_ieee80211_tag_interpretation = -1;
3426 static int hf_ieee80211_tag_data = -1;
3427 static int hf_ieee80211_tag_oui = -1;
3428 static int hf_ieee80211_tag_oui_wfa_subtype = -1;
3429 static int hf_ieee80211_tag_ssid = -1;
3430 static int hf_ieee80211_tag_supp_rates = -1;
3431 static int hf_ieee80211_tag_fh_dwell_time = -1;
3432 static int hf_ieee80211_tag_fh_hop_set = -1;
3433 static int hf_ieee80211_tag_fh_hop_pattern = -1;
3434 static int hf_ieee80211_tag_fh_hop_index = -1;
3435 static int hf_ieee80211_tag_ds_param_channel = -1;
3436 static int hf_ieee80211_tag_cfp_count = -1;
3437 static int hf_ieee80211_tag_cfp_period = -1;
3438 static int hf_ieee80211_tag_cfp_max_duration = -1;
3439 static int hf_ieee80211_tag_cfp_dur_remaining = -1;
3440 static int hf_ieee80211_tim_dtim_count = -1;
3441 static int hf_ieee80211_tim_dtim_period = -1;
3442 static int hf_ieee80211_tim_bmapctl = -1;
3443 static int hf_ieee80211_tim_bmapctl_mcast = -1;
3444 static int hf_ieee80211_tim_bmapctl_offset = -1;
3445 static int hf_ieee80211_tim_partial_virtual_bitmap = -1;
3446 static int hf_ieee80211_tim_aid = -1;
3447 static int hf_ieee80211_tag_ibss_atim_window = -1;
3448 static int hf_ieee80211_tag_country_info_code = -1;
3449 static int hf_ieee80211_tag_country_info_env = -1;
3450 static int hf_ieee80211_tag_country_info_pad = -1;
3451 static int hf_ieee80211_tag_country_info_fnm = -1;
3452 static int hf_ieee80211_tag_country_info_fnm_fcn = -1;
3453 static int hf_ieee80211_tag_country_info_fnm_nc = -1;
3454 static int hf_ieee80211_tag_country_info_fnm_mtpl = -1;
3455 static int hf_ieee80211_tag_country_info_rrc = -1;
3456 static int hf_ieee80211_tag_country_info_rrc_oei = -1;
3457 static int hf_ieee80211_tag_country_info_rrc_oc = -1;
3458 static int hf_ieee80211_tag_country_info_rrc_cc = -1;
3459 static int hf_ieee80211_tag_fh_hopping_parameter_prime_radix = -1;
3460 static int hf_ieee80211_tag_fh_hopping_parameter_nb_channels = -1;
3461 static int hf_ieee80211_tag_fh_hopping_table_flag = -1;
3462 static int hf_ieee80211_tag_fh_hopping_table_number_of_sets = -1;
3463 static int hf_ieee80211_tag_fh_hopping_table_modulus = -1;
3464 static int hf_ieee80211_tag_fh_hopping_table_offset = -1;
3465 static int hf_ieee80211_tag_fh_hopping_random_table = -1;
3466 static int hf_ieee80211_tag_request = -1;
3467 static int hf_ieee80211_tag_challenge_text = -1;
3469 static int hf_ieee80211_wep_iv = -1;
3470 static int hf_ieee80211_wep_iv_weak = -1;
3471 static int hf_ieee80211_tkip_extiv = -1;
3472 static int hf_ieee80211_ccmp_extiv = -1;
3473 static int hf_ieee80211_wep_key = -1;
3474 static int hf_ieee80211_wep_icv = -1;
3475 static int hf_ieee80211_fc_analysis_pmk = -1;
3476 static int hf_ieee80211_fc_analysis_tk = -1;
3477 static int hf_ieee80211_fc_analysis_gtk = -1;
3479 static int hf_ieee80211_block_ack_request_control = -1;
3480 static int hf_ieee80211_block_ack_control = -1;
3481 static int hf_ieee80211_block_ack_control_ack_policy = -1;
3482 static int hf_ieee80211_block_ack_control_multi_tid = -1;
3483 static int hf_ieee80211_block_ack_control_compressed_bitmap = -1;
3484 static int hf_ieee80211_block_ack_control_reserved = -1;
3486 static int hf_ieee80211_block_ack_control_basic_tid_info = -1;
3487 static int hf_ieee80211_block_ack_control_compressed_tid_info = -1;
3488 static int hf_ieee80211_block_ack_control_multi_tid_info = -1;
3490 static int hf_ieee80211_block_ack_multi_tid_info = -1;
3491 static int hf_ieee80211_block_ack_request_type = -1;
3492 static int hf_ieee80211_block_ack_multi_tid_reserved = -1;
3493 static int hf_ieee80211_block_ack_multi_tid_value = -1;
3494 static int hf_ieee80211_block_ack_type = -1;
3495 static int hf_ieee80211_block_ack_bitmap = -1;
3496 static int hf_ieee80211_block_ack_bitmap_missing_frame = -1;
3498 static int hf_ieee80211_tag_measure_request_measurement_mode = -1;
3499 static int hf_ieee80211_tag_measure_request_bssid = -1;
3501 static int hf_ieee80211_tag_measure_request_subelement_length = -1;
3502 static int hf_ieee80211_tag_measure_request_beacon_sub_id = -1;
3503 static int hf_ieee80211_tag_measure_request_beacon_sub_ssid = -1;
3504 static int hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition = -1;
3505 static int hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset = -1;
3506 static int hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail = -1;
3507 static int hf_ieee80211_tag_measure_request_beacon_sub_request = -1;
3508 static int hf_ieee80211_tag_measure_request_beacon_unknown = -1;
3510 static int hf_ieee80211_tag_measure_request_channel_load_sub_id = -1;
3511 static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition = -1;
3512 static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref = -1;
3514 static int hf_ieee80211_tag_measure_request_noise_histogram_sub_id = -1;
3515 static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition = -1;
3516 static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref = -1;
3518 static int hf_ieee80211_tag_measure_request_frame_request_type = -1;
3519 static int hf_ieee80211_tag_measure_request_mac_address = -1;
3520 static int hf_ieee80211_tag_measure_request_peer_mac_address = -1;
3521 static int hf_ieee80211_tag_measure_request_group_id = -1;
3523 static int hf_ieee80211_tag_measure_request_unknown = -1;
3525 static int hf_ieee80211_ht_pren_type = -1;
3526 static int hf_ieee80211_ht_pren_unknown = -1;
3528 static int hf_ieee80211_ht_cap = -1;
3529 static int hf_ieee80211_ht_vs_cap = -1;
3530 static int hf_ieee80211_ht_ldpc_coding = -1;
3531 static int hf_ieee80211_ht_chan_width = -1;
3532 static int hf_ieee80211_ht_sm_pwsave = -1;
3533 static int hf_ieee80211_ht_green = -1;
3534 static int hf_ieee80211_ht_short20 = -1;
3535 static int hf_ieee80211_ht_short40 = -1;
3536 static int hf_ieee80211_ht_tx_stbc = -1;
3537 static int hf_ieee80211_ht_rx_stbc = -1;
3538 static int hf_ieee80211_ht_delayed_block_ack = -1;
3539 static int hf_ieee80211_ht_max_amsdu = -1;
3540 static int hf_ieee80211_ht_dss_cck_40 = -1;
3541 static int hf_ieee80211_ht_psmp = -1;
3542 static int hf_ieee80211_ht_40_mhz_intolerant = -1;
3543 static int hf_ieee80211_ht_l_sig = -1;
3545 static int hf_ieee80211_ext_bss_mu_mimo_capable_sta_count = -1;
3546 static int hf_ieee80211_ext_bss_ss_underutilization = -1;
3547 static int hf_ieee80211_ext_bss_observable_sec_20mhz_utilization = -1;
3548 static int hf_ieee80211_ext_bss_observable_sec_40mhz_utilization = -1;
3549 static int hf_ieee80211_ext_bss_observable_sec_80mhz_utilization = -1;
3550 static int hf_ieee80211_wide_bw_new_channel_width = -1;
3551 static int hf_ieee80211_wide_bw_new_channel_center_freq_segment0 = -1;
3552 static int hf_ieee80211_wide_bw_new_channel_center_freq_segment1 = -1;
3554 static int hf_ieee80211_operat_notification_mode = -1;
3555 static int hf_ieee80211_operat_mode_field_channel_width = -1;
3556 static int hf_ieee80211_operat_mode_field_reserved = -1;
3557 static int hf_ieee80211_operat_mode_field_rxnss = -1;
3558 static int hf_ieee80211_operat_mode_field_rxnsstype= -1;
3559 static int hf_ieee80211_ampduparam = -1;
3560 static int hf_ieee80211_ampduparam_vs = -1;
3561 static int hf_ieee80211_ampduparam_mpdu = -1;
3562 static int hf_ieee80211_ampduparam_mpdu_start_spacing = -1;
3563 static int hf_ieee80211_ampduparam_reserved = -1;
3565 static int hf_ieee80211_mcsset = -1;
3566 static int hf_ieee80211_mcsset_vs = -1;
3567 static int hf_ieee80211_mcsset_rx_bitmask = -1;
3568 static int hf_ieee80211_mcsset_rx_bitmask_0to7 = -1;
3569 static int hf_ieee80211_mcsset_rx_bitmask_8to15 = -1;
3570 static int hf_ieee80211_mcsset_rx_bitmask_16to23 = -1;
3571 static int hf_ieee80211_mcsset_rx_bitmask_24to31 = -1;
3572 static int hf_ieee80211_mcsset_rx_bitmask_32 = -1;
3573 static int hf_ieee80211_mcsset_rx_bitmask_33to38 = -1;
3574 static int hf_ieee80211_mcsset_rx_bitmask_39to52 = -1;
3575 static int hf_ieee80211_mcsset_rx_bitmask_53to76 = -1;
3576 static int hf_ieee80211_mcsset_highest_data_rate = -1;
3577 static int hf_ieee80211_mcsset_tx_mcs_set_defined = -1;
3578 static int hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal = -1;
3579 static int hf_ieee80211_mcsset_tx_max_spatial_streams = -1;
3580 static int hf_ieee80211_mcsset_tx_unequal_modulation = -1;
3582 static int hf_ieee80211_htex_cap = -1;
3583 static int hf_ieee80211_htex_vs_cap = -1;
3584 static int hf_ieee80211_htex_pco = -1;
3585 static int hf_ieee80211_htex_transtime = -1;
3586 static int hf_ieee80211_htex_mcs = -1;
3587 static int hf_ieee80211_htex_htc_support = -1;
3588 static int hf_ieee80211_htex_rd_responder = -1;
3590 static int hf_ieee80211_txbf = -1;
3591 static int hf_ieee80211_txbf_vs = -1;
3592 static int hf_ieee80211_txbf_cap = -1;
3593 static int hf_ieee80211_txbf_rcv_ssc = -1;
3594 static int hf_ieee80211_txbf_tx_ssc = -1;
3595 static int hf_ieee80211_txbf_rcv_ndp = -1;
3596 static int hf_ieee80211_txbf_tx_ndp = -1;
3597 static int hf_ieee80211_txbf_impl_txbf = -1;
3598 static int hf_ieee80211_txbf_calib = -1;
3599 static int hf_ieee80211_txbf_expl_csi = -1;
3600 static int hf_ieee80211_txbf_expl_uncomp_fm = -1;
3601 static int hf_ieee80211_txbf_expl_comp_fm = -1;
3602 static int hf_ieee80211_txbf_expl_bf_csi = -1;
3603 static int hf_ieee80211_txbf_expl_uncomp_fm_feed = -1;
3604 static int hf_ieee80211_txbf_expl_comp_fm_feed = -1;
3605 static int hf_ieee80211_txbf_csi_num_bf_ant = -1;
3606 static int hf_ieee80211_txbf_min_group = -1;
3607 static int hf_ieee80211_txbf_uncomp_sm_bf_ant = -1;
3608 static int hf_ieee80211_txbf_comp_sm_bf_ant = -1;
3609 static int hf_ieee80211_txbf_csi_max_rows_bf = -1;
3610 static int hf_ieee80211_txbf_chan_est = -1;
3611 static int hf_ieee80211_txbf_resrv = -1;
3613 /*** Begin: 802.11n D1.10 - HT Information IE ***/
3614 static int hf_ieee80211_ht_info_primary_channel = -1;
3616 static int hf_ieee80211_ht_info_delimiter1 = -1;
3617 static int hf_ieee80211_ht_info_secondary_channel_offset = -1;
3618 static int hf_ieee80211_ht_info_channel_width = -1;
3619 static int hf_ieee80211_ht_info_rifs_mode = -1;
3620 static int hf_ieee80211_ht_info_psmp_stas_only = -1;
3621 static int hf_ieee80211_ht_info_service_interval_granularity = -1;
3623 static int hf_ieee80211_ht_info_delimiter2 = -1;
3624 static int hf_ieee80211_ht_info_operating_mode = -1;
3625 static int hf_ieee80211_ht_info_non_greenfield_sta_present = -1;
3626 static int hf_ieee80211_ht_info_transmit_burst_limit = -1;
3627 static int hf_ieee80211_ht_info_obss_non_ht_stas_present = -1;
3628 static int hf_ieee80211_ht_info_reserved_1 = -1;
3630 static int hf_ieee80211_ht_info_delimiter3 = -1;
3631 static int hf_ieee80211_ht_info_reserved_2 = -1;
3632 static int hf_ieee80211_ht_info_dual_beacon = -1;
3633 static int hf_ieee80211_ht_info_dual_cts_protection = -1;
3634 static int hf_ieee80211_ht_info_secondary_beacon = -1;
3635 static int hf_ieee80211_ht_info_lsig_txop_protection_full_support = -1;
3636 static int hf_ieee80211_ht_info_pco_active = -1;
3637 static int hf_ieee80211_ht_info_pco_phase = -1;
3638 static int hf_ieee80211_ht_info_reserved_3 = -1;
3639 /*** End: 802.11n D1.10 - HT Information IE ***/
3641 static int hf_ieee80211_tag_ap_channel_report_operating_class = -1;
3642 static int hf_ieee80211_tag_ap_channel_report_channel_list = -1;
3644 static int hf_ieee80211_tag_secondary_channel_offset = -1;
3646 static int hf_ieee80211_tag_bss_ap_avg_access_delay = -1;
3648 static int hf_ieee80211_tag_antenna_id = -1;
3650 static int hf_ieee80211_tag_rsni = -1;
3652 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask = -1;
3653 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0 = -1;
3654 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1 = -1;
3655 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2 = -1;
3656 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3 = -1;
3657 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4 = -1;
3658 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5 = -1;
3659 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6 = -1;
3660 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7 = -1;
3661 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0 = -1;
3662 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1 = -1;
3663 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2 = -1;
3664 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3 = -1;
3665 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv = -1;
3666 static int hf_ieee80211_tag_bss_avb_adm_cap_up0 = -1;
3667 static int hf_ieee80211_tag_bss_avb_adm_cap_up1 = -1;
3668 static int hf_ieee80211_tag_bss_avb_adm_cap_up2 = -1;
3669 static int hf_ieee80211_tag_bss_avb_adm_cap_up3 = -1;
3670 static int hf_ieee80211_tag_bss_avb_adm_cap_up4 = -1;
3671 static int hf_ieee80211_tag_bss_avb_adm_cap_up5 = -1;
3672 static int hf_ieee80211_tag_bss_avb_adm_cap_up6 = -1;
3673 static int hf_ieee80211_tag_bss_avb_adm_cap_up7 = -1;
3674 static int hf_ieee80211_tag_bss_avb_adm_cap_ac0 = -1;
3675 static int hf_ieee80211_tag_bss_avb_adm_cap_ac1 = -1;
3676 static int hf_ieee80211_tag_bss_avb_adm_cap_ac2 = -1;
3677 static int hf_ieee80211_tag_bss_avb_adm_cap_ac3 = -1;
3679 static int hf_ieee80211_tag_bss_avg_ac_access_delay_be = -1;
3680 static int hf_ieee80211_tag_bss_avg_ac_access_delay_bk = -1;
3681 static int hf_ieee80211_tag_bss_avg_ac_access_delay_vi = -1;
3682 static int hf_ieee80211_tag_bss_avg_ac_access_delay_vo = -1;
3684 static int hf_ieee80211_tag_rm_enabled_capabilities = -1;
3685 static int hf_ieee80211_tag_rm_enabled_capabilities_b0 = -1;
3686 static int hf_ieee80211_tag_rm_enabled_capabilities_b1 = -1;
3687 static int hf_ieee80211_tag_rm_enabled_capabilities_b2 = -1;
3688 static int hf_ieee80211_tag_rm_enabled_capabilities_b3 = -1;
3689 static int hf_ieee80211_tag_rm_enabled_capabilities_b4 = -1;
3690 static int hf_ieee80211_tag_rm_enabled_capabilities_b5 = -1;
3691 static int hf_ieee80211_tag_rm_enabled_capabilities_b6 = -1;
3692 static int hf_ieee80211_tag_rm_enabled_capabilities_b7 = -1;
3693 static int hf_ieee80211_tag_rm_enabled_capabilities_b8 = -1;
3694 static int hf_ieee80211_tag_rm_enabled_capabilities_b9 = -1;
3695 static int hf_ieee80211_tag_rm_enabled_capabilities_b10 = -1;
3696 static int hf_ieee80211_tag_rm_enabled_capabilities_b11 = -1;
3697 static int hf_ieee80211_tag_rm_enabled_capabilities_b12 = -1;
3698 static int hf_ieee80211_tag_rm_enabled_capabilities_b13 = -1;
3699 static int hf_ieee80211_tag_rm_enabled_capabilities_b14 = -1;
3700 static int hf_ieee80211_tag_rm_enabled_capabilities_b15 = -1;
3701 static int hf_ieee80211_tag_rm_enabled_capabilities_b16 = -1;
3702 static int hf_ieee80211_tag_rm_enabled_capabilities_b17 = -1;
3703 static int hf_ieee80211_tag_rm_enabled_capabilities_b18to20 = -1;
3704 static int hf_ieee80211_tag_rm_enabled_capabilities_b21to23 = -1;
3705 static int hf_ieee80211_tag_rm_enabled_capabilities_b24to26 = -1;
3706 static int hf_ieee80211_tag_rm_enabled_capabilities_b27 = -1;
3707 static int hf_ieee80211_tag_rm_enabled_capabilities_b28 = -1;
3708 static int hf_ieee80211_tag_rm_enabled_capabilities_b29 = -1;
3709 static int hf_ieee80211_tag_rm_enabled_capabilities_b30 = -1;
3710 static int hf_ieee80211_tag_rm_enabled_capabilities_b31 = -1;
3711 static int hf_ieee80211_tag_rm_enabled_capabilities_b32 = -1;
3712 static int hf_ieee80211_tag_rm_enabled_capabilities_b33 = -1;
3713 static int hf_ieee80211_tag_rm_enabled_capabilities_o5 = -1;
3715 static int hf_ieee80211_tag_20_40_bc = -1;
3716 static int hf_ieee80211_tag_20_40_bc_information_request = -1;
3717 static int hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant = -1;
3718 static int hf_ieee80211_tag_20_40_bc_20_mhz_bss_witdh_request = -1;
3719 static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request = -1;
3720 static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant = -1;
3721 static int hf_ieee80211_tag_20_40_bc_reserved = -1;
3723 static int hf_ieee80211_tag_power_constraint_local = -1;
3725 static int hf_ieee80211_tag_power_capability_min = -1;
3726 static int hf_ieee80211_tag_power_capability_max = -1;
3728 static int hf_ieee80211_tag_tpc_report_trsmt_pow = -1;
3729 static int hf_ieee80211_tag_tpc_report_link_mrg = -1;
3731 static int hf_ieee80211_tag_supported_channels = -1;
3732 static int hf_ieee80211_tag_supported_channels_first = -1;
3733 static int hf_ieee80211_tag_supported_channels_range = -1;
3735 static int hf_ieee80211_csa_channel_switch_mode = -1;
3736 static int hf_ieee80211_csa_new_channel_number = -1;
3737 static int hf_ieee80211_csa_channel_switch_count = -1;
3739 static int hf_ieee80211_tag_measure_request_token = -1;
3740 static int hf_ieee80211_tag_measure_request_mode = -1;
3741 static int hf_ieee80211_tag_measure_request_mode_parallel = -1;
3742 static int hf_ieee80211_tag_measure_request_mode_enable = -1;
3743 static int hf_ieee80211_tag_measure_request_mode_request = -1;
3744 static int hf_ieee80211_tag_measure_request_mode_report = -1;
3745 static int hf_ieee80211_tag_measure_request_mode_duration_mandatory = -1;
3746 static int hf_ieee80211_tag_measure_request_mode_reserved = -1;
3747 static int hf_ieee80211_tag_measure_request_type = -1;
3749 static int hf_ieee80211_tag_measure_request_channel_number = -1;
3750 static int hf_ieee80211_tag_measure_request_start_time = -1;
3751 static int hf_ieee80211_tag_measure_request_duration = -1;
3753 static int hf_ieee80211_tag_measure_request_operating_class = -1;
3754 static int hf_ieee80211_tag_measure_request_randomization_interval = -1;
3756 static int hf_ieee80211_tag_measure_report_measurement_token = -1;
3757 static int hf_ieee80211_tag_measure_report_mode = -1;
3758 static int hf_ieee80211_tag_measure_report_mode_late = -1;
3759 static int hf_ieee80211_tag_measure_report_mode_incapable = -1;
3760 static int hf_ieee80211_tag_measure_report_mode_refused = -1;
3761 static int hf_ieee80211_tag_measure_report_mode_reserved = -1;
3762 static int hf_ieee80211_tag_measure_report_type = -1;
3763 static int hf_ieee80211_tag_measure_report_channel_number = -1;
3764 static int hf_ieee80211_tag_measure_report_start_time = -1;
3765 static int hf_ieee80211_tag_measure_report_duration = -1;
3767 static int hf_ieee80211_tag_measure_basic_map_field = -1;
3768 static int hf_ieee80211_tag_measure_map_field_bss = -1;
3769 static int hf_ieee80211_tag_measure_map_field_odfm = -1;
3770 static int hf_ieee80211_tag_measure_map_field_unident_signal = -1;
3771 static int hf_ieee80211_tag_measure_map_field_radar = -1;
3772 static int hf_ieee80211_tag_measure_map_field_unmeasured = -1;
3773 static int hf_ieee80211_tag_measure_map_field_reserved = -1;
3775 static int hf_ieee80211_tag_measure_cca_busy_fraction = -1;
3777 static int hf_ieee80211_tag_measure_rpi_histogram_report = -1;
3778 static int hf_ieee80211_tag_measure_rpi_histogram_report_0 = -1;
3779 static int hf_ieee80211_tag_measure_rpi_histogram_report_1 = -1;
3780 static int hf_ieee80211_tag_measure_rpi_histogram_report_2 = -1;
3781 static int hf_ieee80211_tag_measure_rpi_histogram_report_3 = -1;
3782 static int hf_ieee80211_tag_measure_rpi_histogram_report_4 = -1;
3783 static int hf_ieee80211_tag_measure_rpi_histogram_report_5 = -1;
3784 static int hf_ieee80211_tag_measure_rpi_histogram_report_6 = -1;
3785 static int hf_ieee80211_tag_measure_rpi_histogram_report_7 = -1;
3787 static int hf_ieee80211_tag_measure_report_operating_class = -1;
3788 static int hf_ieee80211_tag_measure_report_channel_load = -1;
3789 static int hf_ieee80211_tag_measure_report_frame_info = -1;
3790 static int hf_ieee80211_tag_measure_report_frame_info_phy_type = -1;
3791 static int hf_ieee80211_tag_measure_report_frame_info_frame_type = -1;
3792 static int hf_ieee80211_tag_measure_report_rcpi = -1;
3793 static int hf_ieee80211_tag_measure_report_rsni = -1;
3794 static int hf_ieee80211_tag_measure_report_bssid = -1;
3795 static int hf_ieee80211_tag_measure_report_ant_id = -1;
3796 static int hf_ieee80211_tag_measure_report_anpi = -1;
3797 static int hf_ieee80211_tag_measure_report_ipi_density_0 = -1;
3798 static int hf_ieee80211_tag_measure_report_ipi_density_1 = -1;
3799 static int hf_ieee80211_tag_measure_report_ipi_density_2 = -1;
3800 static int hf_ieee80211_tag_measure_report_ipi_density_3 = -1;
3801 static int hf_ieee80211_tag_measure_report_ipi_density_4 = -1;
3802 static int hf_ieee80211_tag_measure_report_ipi_density_5 = -1;
3803 static int hf_ieee80211_tag_measure_report_ipi_density_6 = -1;
3804 static int hf_ieee80211_tag_measure_report_ipi_density_7 = -1;
3805 static int hf_ieee80211_tag_measure_report_ipi_density_8 = -1;
3806 static int hf_ieee80211_tag_measure_report_ipi_density_9 = -1;
3807 static int hf_ieee80211_tag_measure_report_ipi_density_10 = -1;
3808 static int hf_ieee80211_tag_measure_report_parent_tsf = -1;
3810 static int hf_ieee80211_tag_measure_report_subelement_length = -1;
3811 static int hf_ieee80211_tag_measure_report_beacon_sub_id = -1;
3813 static int hf_ieee80211_tag_measure_report_unknown = -1;
3815 static int hf_ieee80211_tag_quiet_count = -1;
3816 static int hf_ieee80211_tag_quiet_period = -1;
3817 static int hf_ieee80211_tag_quiet_duration = -1;
3818 static int hf_ieee80211_tag_quiet_offset = -1;
3820 static int hf_ieee80211_tag_dfs_owner = -1;
3821 static int hf_ieee80211_tag_dfs_recovery_interval = -1;
3822 static int hf_ieee80211_tag_dfs_channel_map = -1;
3823 static int hf_ieee80211_tag_dfs_channel_number = -1;
3824 static int hf_ieee80211_tag_dfs_map = -1;
3826 static int hf_ieee80211_tag_erp_info = -1;
3827 static int hf_ieee80211_tag_erp_info_erp_present = -1;
3828 static int hf_ieee80211_tag_erp_info_use_protection = -1;
3829 static int hf_ieee80211_tag_erp_info_barker_preamble_mode = -1;
3830 static int hf_ieee80211_tag_erp_info_reserved = -1;
3832 static int hf_ieee80211_tag_extended_capabilities = -1;
3833 static int hf_ieee80211_tag_extended_capabilities_b0 = -1;
3834 static int hf_ieee80211_tag_extended_capabilities_b1 = -1;
3835 static int hf_ieee80211_tag_extended_capabilities_b2 = -1;
3836 static int hf_ieee80211_tag_extended_capabilities_b3 = -1;
3837 static int hf_ieee80211_tag_extended_capabilities_b4 = -1;
3838 static int hf_ieee80211_tag_extended_capabilities_b5 = -1;
3839 static int hf_ieee80211_tag_extended_capabilities_b6 = -1;
3840 static int hf_ieee80211_tag_extended_capabilities_b7 = -1;
3841 static int hf_ieee80211_tag_extended_capabilities_b8 = -1;
3842 static int hf_ieee80211_tag_extended_capabilities_b9 = -1;
3843 static int hf_ieee80211_tag_extended_capabilities_b10 = -1;
3844 static int hf_ieee80211_tag_extended_capabilities_b11 = -1;
3845 static int hf_ieee80211_tag_extended_capabilities_b12 = -1;
3846 static int hf_ieee80211_tag_extended_capabilities_b13 = -1;
3847 static int hf_ieee80211_tag_extended_capabilities_b14 = -1;
3848 static int hf_ieee80211_tag_extended_capabilities_b15 = -1;
3849 static int hf_ieee80211_tag_extended_capabilities_b16 = -1;
3850 static int hf_ieee80211_tag_extended_capabilities_b17 = -1;
3851 static int hf_ieee80211_tag_extended_capabilities_b18 = -1;
3852 static int hf_ieee80211_tag_extended_capabilities_b19 = -1;
3853 static int hf_ieee80211_tag_extended_capabilities_b20 = -1;
3854 static int hf_ieee80211_tag_extended_capabilities_b21 = -1;
3855 static int hf_ieee80211_tag_extended_capabilities_b22 = -1;
3856 static int hf_ieee80211_tag_extended_capabilities_b23 = -1;
3857 static int hf_ieee80211_tag_extended_capabilities_b24 = -1;
3858 static int hf_ieee80211_tag_extended_capabilities_b25 = -1;
3859 static int hf_ieee80211_tag_extended_capabilities_b26 = -1;
3860 static int hf_ieee80211_tag_extended_capabilities_b27 = -1;
3861 static int hf_ieee80211_tag_extended_capabilities_b28 = -1;
3862 static int hf_ieee80211_tag_extended_capabilities_b29 = -1;
3863 static int hf_ieee80211_tag_extended_capabilities_b30 = -1;
3864 static int hf_ieee80211_tag_extended_capabilities_b31 = -1;
3865 static int hf_ieee80211_tag_extended_capabilities_b32 = -1;
3866 static int hf_ieee80211_tag_extended_capabilities_b33 = -1;
3867 static int hf_ieee80211_tag_extended_capabilities_b34 = -1;
3868 static int hf_ieee80211_tag_extended_capabilities_b35 = -1;
3869 static int hf_ieee80211_tag_extended_capabilities_b36 = -1;
3870 static int hf_ieee80211_tag_extended_capabilities_b37 = -1;
3871 static int hf_ieee80211_tag_extended_capabilities_b38 = -1;
3872 static int hf_ieee80211_tag_extended_capabilities_b39 = -1;
3873 static int hf_ieee80211_tag_extended_capabilities_b40 = -1;
3874 static int hf_ieee80211_tag_extended_capabilities_serv_int_granularity = -1;
3875 static int hf_ieee80211_tag_extended_capabilities_b44 = -1;
3876 static int hf_ieee80211_tag_extended_capabilities_b45 = -1;
3877 static int hf_ieee80211_tag_extended_capabilities_b46 = -1;
3878 static int hf_ieee80211_tag_extended_capabilities_b47 = -1;
3879 static int hf_ieee80211_tag_extended_capabilities_b48 = -1;
3880 static int hf_ieee80211_tag_extended_capabilities_b61 = -1;
3881 static int hf_ieee80211_tag_extended_capabilities_b62 = -1;
3882 static int hf_ieee80211_tag_extended_capabilities_b63 = -1;
3883 static int hf_ieee80211_tag_extended_capabilities_b64 = -1;
3884 static int hf_ieee80211_tag_extended_capabilities_o7 = -1;
3885 static int hf_ieee80211_tag_extended_capabilities_o8 = -1;
3886 static int hf_ieee80211_tag_extended_capabilities_o9 = -1;
3888 static int hf_ieee80211_tag_cisco_ccx1_unknown = -1;
3889 static int hf_ieee80211_tag_cisco_ccx1_name = -1;
3890 static int hf_ieee80211_tag_cisco_ccx1_clients = -1;
3891 static int hf_ieee80211_tag_cisco_ccx1_unknown2 = -1;
3893 static int hf_ieee80211_vht_cap = -1;
3894 static int hf_ieee80211_vht_max_mpdu_length = -1;
3895 static int hf_ieee80211_vht_supported_chan_width_set = -1;
3896 static int hf_ieee80211_vht_rx_ldpc = -1;
3897 static int hf_ieee80211_vht_short_gi_for_80 = -1;
3898 static int hf_ieee80211_vht_short_gi_for_160 = -1;
3899 static int hf_ieee80211_vht_tx_stbc = -1;
3900 static int hf_ieee80211_vht_rx_stbc = -1;
3901 static int hf_ieee80211_vht_su_beamformer_cap = -1;
3902 static int hf_ieee80211_vht_su_beamformee_cap = -1;
3903 static int hf_ieee80211_vht_beamformer_antennas = -1;
3904 static int hf_ieee80211_vht_sounding_dimensions = -1;
3905 static int hf_ieee80211_vht_mu_beamformer_cap = -1;
3906 static int hf_ieee80211_vht_mu_beamformee_cap = -1;
3907 static int hf_ieee80211_vht_txop_ps = -1;
3908 static int hf_ieee80211_vht_var_htc_field = -1;
3909 static int hf_ieee80211_vht_max_ampdu = -1;
3910 static int hf_ieee80211_vht_link_adaptation_cap = -1;
3911 static int hf_ieee80211_vht_rx_pattern = -1;
3912 static int hf_ieee80211_vht_tx_pattern = -1;
3913 static int hf_ieee80211_vht_reserv = -1;
3915 static int hf_ieee80211_vht_mcsset = -1;
3917 static int hf_ieee80211_vht_mcsset_rx_mcs_map = -1;
3918 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss = -1;
3919 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss = -1;
3920 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss = -1;
3921 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss = -1;
3922 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss = -1;
3923 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss = -1;
3924 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss = -1;
3925 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss = -1;
3927 static int hf_ieee80211_vht_mcsset_rx_highest_long_gi = -1;
3929 static int hf_ieee80211_vht_mcsset_tx_mcs_map = -1;
3930 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss = -1;
3931 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss = -1;
3932 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss = -1;
3933 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss = -1;
3934 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss = -1;
3935 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss = -1;
3936 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss = -1;
3937 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss = -1;
3939 static int hf_ieee80211_vht_op = -1;
3940 static int hf_ieee80211_vht_op_channel_width = -1;
3941 static int hf_ieee80211_vht_op_channel_center0 = -1;
3942 static int hf_ieee80211_vht_op_channel_center1 = -1;
3944 static int hf_ieee80211_vht_op_basic_mcs_map = -1;
3945 static int hf_ieee80211_vht_op_max_basic_mcs_for_1_ss = -1;
3946 static int hf_ieee80211_vht_op_max_basic_mcs_for_2_ss = -1;
3947 static int hf_ieee80211_vht_op_max_basic_mcs_for_3_ss = -1;
3948 static int hf_ieee80211_vht_op_max_basic_mcs_for_4_ss = -1;
3949 static int hf_ieee80211_vht_op_max_basic_mcs_for_5_ss = -1;
3950 static int hf_ieee80211_vht_op_max_basic_mcs_for_6_ss = -1;
3951 static int hf_ieee80211_vht_op_max_basic_mcs_for_7_ss = -1;
3952 static int hf_ieee80211_vht_op_max_basic_mcs_for_8_ss = -1;
3953 static int hf_ieee80211_vht_mcsset_tx_highest_long_gi = -1;
3955 static int hf_ieee80211_vht_tpe_pwr_info = -1;
3956 static int hf_ieee80211_vht_tpe_pwr_info_count = -1;
3957 static int hf_ieee80211_vht_tpe_pwr_info_unit = -1;
3958 static int hf_ieee80211_vht_tpe_pwr_info_reserved = -1;
3959 static int hf_ieee80211_vht_tpe_pwr_constr_20 = -1;
3960 static int hf_ieee80211_vht_tpe_pwr_constr_40 = -1;
3961 static int hf_ieee80211_vht_tpe_pwr_constr_80 = -1;
3962 static int hf_ieee80211_vht_tpe_pwr_constr_160 = -1;
3964 static int hf_ieee80211_beamform_feedback_seg_retrans_bitmap = -1;
3966 static int hf_ieee80211_vht_ndp_annc_token = -1;
3967 static int hf_ieee80211_vht_ndp_annc_token_number = -1;
3968 static int hf_ieee80211_vht_ndp_annc_token_reserved = -1;
3969 static int hf_ieee80211_vht_ndp_annc_sta_info = -1;
3970 static int hf_ieee80211_vht_ndp_annc_sta_info_aid12 = -1;
3971 static int hf_ieee80211_vht_ndp_annc_sta_info_feedback_type = -1;
3972 static int hf_ieee80211_vht_ndp_annc_sta_info_nc_index = -1;
3973 static int hf_ieee80211_vht_ndp_annc_sta_info_reserved = -1;
3976 static int hf_ieee80211_ff_vht_action = -1;
3977 static int hf_ieee80211_ff_vht_mimo_cntrl = -1;
3978 static int hf_ieee80211_ff_vht_mimo_cntrl_nc_index = -1;
3979 static int hf_ieee80211_ff_vht_mimo_cntrl_nr_index = -1;
3980 static int hf_ieee80211_ff_vht_mimo_cntrl_channel_width = -1;
3981 static int hf_ieee80211_ff_vht_mimo_cntrl_grouping = -1;
3982 static int hf_ieee80211_ff_vht_mimo_cntrl_codebook_info = -1;
3983 static int hf_ieee80211_ff_vht_mimo_cntrl_feedback_type = -1;
3984 static int hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg = -1;
3985 static int hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg = -1;
3986 static int hf_ieee80211_ff_vht_mimo_cntrl_reserved = -1;
3987 static int hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number = -1;
3989 static const int *hf_ieee80211_ff_vht_mimo_cntrl_fields[] = {
3990 &hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
3991 &hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
3992 &hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
3993 &hf_ieee80211_ff_vht_mimo_cntrl_grouping,
3994 &hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
3995 &hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
3996 &hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
3997 &hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
3998 &hf_ieee80211_ff_vht_mimo_cntrl_reserved,
3999 &hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
4003 static int hf_ieee80211_vht_compressed_beamforming_report = -1;
4004 static int hf_ieee80211_vht_compressed_beamforming_report_snr = -1;
4005 static int hf_ieee80211_vht_compressed_beamforming_feedback_matrix = -1;
4006 static int hf_ieee80211_vht_group_id_management = -1;
4007 static int hf_ieee80211_vht_membership_status_array = -1;
4008 static int hf_ieee80211_vht_user_position_array = -1;
4009 static int hf_ieee80211_vht_operation_mode_notification = -1;
4010 static int hf_ieee80211_vht_membership_status_field = -1;
4011 static int hf_ieee80211_vht_user_position_field = -1;
4013 static int hf_ieee80211_tag_neighbor_report_bssid = -1;
4014 static int hf_ieee80211_tag_neighbor_report_bssid_info = -1;
4015 static int hf_ieee80211_tag_neighbor_report_bssid_info_reachability = -1;
4016 static int hf_ieee80211_tag_neighbor_report_bssid_info_security = -1;
4017 static int hf_ieee80211_tag_neighbor_report_bssid_info_key_scope = -1;
4018 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability = -1;
4019 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng = -1;
4020 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos = -1;
4021 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd = -1;
4022 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt = -1;
4023 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback = -1;
4024 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback = -1;
4025 static int hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain = -1;
4026 static int hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput = -1;
4027 static int hf_ieee80211_tag_neighbor_report_bssid_info_reserved = -1;
4028 static int hf_ieee80211_tag_neighbor_report_ope_class = -1;
4029 static int hf_ieee80211_tag_neighbor_report_channel_number = -1;
4030 static int hf_ieee80211_tag_neighbor_report_phy_type = -1;
4031 static int hf_ieee80211_tag_neighbor_report_subelement_id = -1;
4032 static int hf_ieee80211_tag_neighbor_report_subelement_length = -1;
4034 static int hf_ieee80211_tag_supported_ope_classes_current = -1;
4035 static int hf_ieee80211_tag_supported_ope_classes_alternate = -1;
4037 /* IEEE Std 802.11r-2008 7.3.2.47 */
4038 static int hf_ieee80211_tag_mobility_domain_mdid = -1;
4039 static int hf_ieee80211_tag_mobility_domain_ft_capab = -1;
4040 static int hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds = -1;
4041 static int hf_ieee80211_tag_mobility_domain_ft_capab_resource_req = -1;
4043 /* IEEE Std 802.11r-2008 7.3.2.48 */
4044 static int hf_ieee80211_tag_ft_mic_control = -1;
4045 static int hf_ieee80211_tag_ft_element_count = -1;
4046 static int hf_ieee80211_tag_ft_mic = -1;
4047 static int hf_ieee80211_tag_ft_anonce = -1;
4048 static int hf_ieee80211_tag_ft_snonce = -1;
4049 static int hf_ieee80211_tag_ft_subelem_id = -1;
4050 static int hf_ieee80211_tag_ft_subelem_len = -1;
4051 static int hf_ieee80211_tag_ft_subelem_data = -1;
4052 static int hf_ieee80211_tag_ft_subelem_r1kh_id = -1;
4053 static int hf_ieee80211_tag_ft_subelem_gtk_key_info = -1;
4054 static int hf_ieee80211_tag_ft_subelem_gtk_key_id = -1;
4055 static int hf_ieee80211_tag_ft_subelem_gtk_key_length = -1;
4056 static int hf_ieee80211_tag_ft_subelem_gtk_rsc = -1;
4057 static int hf_ieee80211_tag_ft_subelem_gtk_key = -1;
4058 static int hf_ieee80211_tag_ft_subelem_r0kh_id = -1;
4059 static int hf_ieee80211_tag_ft_subelem_igtk_key_id = -1;
4060 static int hf_ieee80211_tag_ft_subelem_igtk_ipn = -1;
4061 static int hf_ieee80211_tag_ft_subelem_igtk_key_length = -1;
4062 static int hf_ieee80211_tag_ft_subelem_igtk_key = -1;
4064 /* IEEE Std 802.11-2012: 11r 8.4.2.52 */
4065 static int hf_ieee80211_tag_ric_data_id = -1;
4066 static int hf_ieee80211_tag_ric_data_desc_cnt = -1;
4067 static int hf_ieee80211_tag_ric_data_status_code = -1;
4069 /* IEEE Std 802.11-2012: 11r 8.4.2.53 */
4070 static int hf_ieee80211_tag_ric_desc_rsrc_type = -1;
4071 static int hf_ieee80211_tag_ric_desc_var_params = -1;
4073 /* IEEE Std 802.11w-2009 7.3.2.55 */
4074 static int hf_ieee80211_tag_mmie_keyid = -1;
4075 static int hf_ieee80211_tag_mmie_ipn = -1;
4076 static int hf_ieee80211_tag_mmie_mic = -1;
4078 /* IEEE Std 802.11-2012: 8.4.2.61 */
4079 static int hf_ieee80211_tag_obss_spd = -1;
4080 static int hf_ieee80211_tag_obss_sad = -1;
4081 static int hf_ieee80211_tag_obss_cwtsi = -1;
4082 static int hf_ieee80211_tag_obss_sptpc = -1;
4083 static int hf_ieee80211_tag_obss_satpc = -1;
4084 static int hf_ieee80211_tag_obss_wctdf = -1;
4085 static int hf_ieee80211_tag_obss_sat = -1;
4088 /*WAPI-Specification 7.3.2.25 : WAPI Parameter Set*/
4089 static int hf_ieee80211_tag_wapi_param_set_version = -1;
4091 static int hf_ieee80211_tag_wapi_param_set_akm_suite_count = -1;
4092 static int hf_ieee80211_tag_wapi_param_set_akm_suite_oui = -1;
4093 static int hf_ieee80211_tag_wapi_param_set_akm_suite_type = -1;
4095 static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count = -1;
4096 static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui = -1;
4097 static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type = -1;
4099 static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui = -1;
4100 static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type = -1;
4102 static int hf_ieee80211_tag_wapi_param_set_capab = -1;
4103 static int hf_ieee80211_tag_wapi_param_set_capab_preauth = -1;
4104 static int hf_ieee80211_tag_wapi_param_set_capab_rsvd = -1;
4105 static int hf_ieee80211_tag_wapi_param_set_bkid_count = -1;
4106 static int hf_ieee80211_tag_wapi_param_set_bkid_list = -1;
4108 /* IEEE Std 802.11v-2011 7.3.2.61 */
4109 static int hf_ieee80211_tag_time_adv_timing_capab = -1;
4110 static int hf_ieee80211_tag_time_adv_time_value = -1;
4111 static int hf_ieee80211_tag_time_adv_time_value_year = -1;
4112 static int hf_ieee80211_tag_time_adv_time_value_month = -1;
4113 static int hf_ieee80211_tag_time_adv_time_value_day = -1;
4114 static int hf_ieee80211_tag_time_adv_time_value_hours = -1;
4115 static int hf_ieee80211_tag_time_adv_time_value_minutes = -1;
4116 static int hf_ieee80211_tag_time_adv_time_value_seconds = -1;
4117 static int hf_ieee80211_tag_time_adv_time_value_milliseconds = -1;
4118 static int hf_ieee80211_tag_time_adv_time_value_reserved = -1;
4119 static int hf_ieee80211_tag_time_adv_time_error = -1;
4120 static int hf_ieee80211_tag_time_adv_time_update_counter = -1;
4122 /* IEEE Std 802.11-2012 8.4.2.81 */
4123 static int hf_ieee80211_tag_bss_max_idle_period = -1;
4124 static int hf_ieee80211_tag_bss_max_idle_options_protected = -1;
4126 /* IEEE Std 802.11-2012 8.4.2.82 */
4127 static int hf_ieee80211_tag_tfs_request_id = -1;
4128 static int hf_ieee80211_tag_tfs_request_ac_delete_after_match = -1;
4129 static int hf_ieee80211_tag_tfs_request_ac_notify = -1;
4130 static int hf_ieee80211_tag_tfs_request_subelem_id = -1;
4131 static int hf_ieee80211_tag_tfs_request_subelem_len = -1;
4132 static int hf_ieee80211_tag_tfs_request_subelem = -1;
4134 /* IEEE Std 802.11-2012 8.4.2.83 */
4135 static int hf_ieee80211_tag_tfs_response_subelem_id = -1;
4136 static int hf_ieee80211_tag_tfs_response_subelem_len = -1;
4137 static int hf_ieee80211_tag_tfs_response_subelem = -1;
4138 static int hf_ieee80211_tag_tfs_response_status = -1;
4139 static int hf_ieee80211_tag_tfs_response_id = -1;
4141 /* IEEE Std 802.11-2012 8.4.2.84 */
4142 static int hf_ieee80211_tag_wnm_sleep_mode_action_type = -1;
4143 static int hf_ieee80211_tag_wnm_sleep_mode_response_status = -1;
4144 static int hf_ieee80211_tag_wnm_sleep_mode_interval = -1;
4146 /* IEEE Std 802.11v-2011 7.3.2.87 */
4147 static int hf_ieee80211_tag_time_zone = -1;
4149 /* IEEE Std 802.11u-2011 7.3.2.92 */
4150 static int hf_ieee80211_tag_interworking_access_network_type = -1;
4151 static int hf_ieee80211_tag_interworking_internet = -1;
4152 static int hf_ieee80211_tag_interworking_asra = -1;
4153 static int hf_ieee80211_tag_interworking_esr = -1;
4154 static int hf_ieee80211_tag_interworking_uesa = -1;
4155 static int hf_ieee80211_tag_interworking_hessid = -1;
4157 /* IEEE Std 802.11-2012, 8.4.2.97 */
4158 static int hf_ieee80211_tag_qos_map_set_dscp_exc = -1;
4159 static int hf_ieee80211_tag_qos_map_set_dscp_exc_val = -1;
4160 static int hf_ieee80211_tag_qos_map_set_dscp_exc_up = -1;
4161 static int hf_ieee80211_tag_qos_map_set_range = -1;
4162 static int hf_ieee80211_tag_qos_map_set_low = -1;
4163 static int hf_ieee80211_tag_qos_map_set_high = -1;
4165 /* IEEE Std 802.11u-2011 7.3.2.93 */
4166 static int hf_ieee80211_tag_adv_proto_resp_len_limit = -1;
4167 static int hf_ieee80211_tag_adv_proto_pame_bi = -1;
4168 static int hf_ieee80211_tag_adv_proto_id = -1;
4169 static int hf_ieee80211_tag_adv_proto_vs_info = -1;
4171 /* IEEE Std 802.11u-2011 7.3.2.96 */
4172 static int hf_ieee80211_tag_roaming_consortium_num_anqp_oi = -1;
4173 static int hf_ieee80211_tag_roaming_consortium_oi1_len = -1;
4174 static int hf_ieee80211_tag_roaming_consortium_oi2_len = -1;
4175 static int hf_ieee80211_tag_roaming_consortium_oi1 = -1;
4176 static int hf_ieee80211_tag_roaming_consortium_oi2 = -1;
4177 static int hf_ieee80211_tag_roaming_consortium_oi3 = -1;
4179 /* 802.11n 7.3.2.48 */
4180 static int hf_ieee80211_hta_cc = -1;
4181 static int hf_ieee80211_hta_cap = -1;
4182 static int hf_ieee80211_hta_ext_chan_offset = -1;
4183 static int hf_ieee80211_hta_rec_tx_width = -1;
4184 static int hf_ieee80211_hta_rifs_mode = -1;
4185 static int hf_ieee80211_hta_controlled_access = -1;
4186 static int hf_ieee80211_hta_service_interval = -1;
4187 static int hf_ieee80211_hta_operating_mode = -1;
4188 static int hf_ieee80211_hta_non_gf_devices = -1;
4189 static int hf_ieee80211_hta_basic_stbc_mcs = -1;
4190 static int hf_ieee80211_hta_dual_stbc_protection = -1;
4191 static int hf_ieee80211_hta_secondary_beacon = -1;
4192 static int hf_ieee80211_hta_lsig_txop_protection = -1;
4193 static int hf_ieee80211_hta_pco_active = -1;
4194 static int hf_ieee80211_hta_pco_phase = -1;
4196 static int hf_ieee80211_antsel = -1;
4197 static int hf_ieee80211_antsel_vs = -1;
4198 static int hf_ieee80211_antsel_b0 = -1;
4199 static int hf_ieee80211_antsel_b1 = -1;
4200 static int hf_ieee80211_antsel_b2 = -1;
4201 static int hf_ieee80211_antsel_b3 = -1;
4202 static int hf_ieee80211_antsel_b4 = -1;
4203 static int hf_ieee80211_antsel_b5 = -1;
4204 static int hf_ieee80211_antsel_b6 = -1;
4205 static int hf_ieee80211_antsel_b7 = -1;
4207 static int hf_ieee80211_rsn_version = -1;
4208 static int hf_ieee80211_rsn_gcs = -1;
4209 static int hf_ieee80211_rsn_gcs_oui = -1;
4210 static int hf_ieee80211_rsn_gcs_type = -1;
4211 static int hf_ieee80211_rsn_gcs_80211_type = -1;
4212 static int hf_ieee80211_rsn_pcs_count = -1;
4213 static int hf_ieee80211_rsn_pcs_list = -1;
4214 static int hf_ieee80211_rsn_pcs = -1;
4215 static int hf_ieee80211_rsn_pcs_oui = -1;
4216 static int hf_ieee80211_rsn_pcs_80211_type = -1;
4217 static int hf_ieee80211_rsn_pcs_type = -1;
4218 static int hf_ieee80211_rsn_akms_count = -1;
4219 static int hf_ieee80211_rsn_akms_list = -1;
4220 static int hf_ieee80211_rsn_akms = -1;
4221 static int hf_ieee80211_rsn_akms_oui = -1;
4222 static int hf_ieee80211_rsn_akms_80211_type = -1;
4223 static int hf_ieee80211_rsn_akms_type = -1;
4224 static int hf_ieee80211_rsn_cap = -1;
4225 static int hf_ieee80211_rsn_cap_preauth = -1;
4226 static int hf_ieee80211_rsn_cap_no_pairwise = -1;
4227 static int hf_ieee80211_rsn_cap_ptksa_replay_counter = -1;
4228 static int hf_ieee80211_rsn_cap_gtksa_replay_counter = -1;
4229 static int hf_ieee80211_rsn_cap_mfpr = -1;
4230 static int hf_ieee80211_rsn_cap_mfpc = -1;
4231 static int hf_ieee80211_rsn_cap_jmr = -1;
4232 static int hf_ieee80211_rsn_cap_peerkey = -1;
4233 static int hf_ieee80211_rsn_pmkid_count = -1;
4234 static int hf_ieee80211_rsn_pmkid_list = -1;
4235 static int hf_ieee80211_rsn_pmkid = -1;
4236 static int hf_ieee80211_rsn_gmcs = -1;
4237 static int hf_ieee80211_rsn_gmcs_oui = -1;
4238 static int hf_ieee80211_rsn_gmcs_type = -1;
4239 static int hf_ieee80211_rsn_gmcs_80211_type = -1;
4241 static int hf_ieee80211_wfa_ie_type = -1;
4242 static int hf_ieee80211_wfa_ie_wpa_version = -1;
4243 static int hf_ieee80211_wfa_ie_wpa_mcs = -1;
4244 static int hf_ieee80211_wfa_ie_wpa_mcs_oui = -1;
4245 static int hf_ieee80211_wfa_ie_wpa_mcs_type = -1;
4246 static int hf_ieee80211_wfa_ie_wpa_mcs_wfa_type = -1;
4247 static int hf_ieee80211_wfa_ie_wpa_ucs_count = -1;
4248 static int hf_ieee80211_wfa_ie_wpa_ucs_list = -1;
4249 static int hf_ieee80211_wfa_ie_wpa_ucs = -1;
4250 static int hf_ieee80211_wfa_ie_wpa_ucs_oui = -1;
4251 static int hf_ieee80211_wfa_ie_wpa_ucs_wfa_type = -1;
4252 static int hf_ieee80211_wfa_ie_wpa_ucs_type = -1;
4253 static int hf_ieee80211_wfa_ie_wpa_akms_count = -1;
4254 static int hf_ieee80211_wfa_ie_wpa_akms_list = -1;
4255 static int hf_ieee80211_wfa_ie_wpa_akms = -1;
4256 static int hf_ieee80211_wfa_ie_wpa_akms_oui = -1;
4257 static int hf_ieee80211_wfa_ie_wpa_akms_wfa_type = -1;
4258 static int hf_ieee80211_wfa_ie_wpa_akms_type = -1;
4259 static int hf_ieee80211_wfa_ie_wme_subtype = -1;
4260 static int hf_ieee80211_wfa_ie_wme_version = -1;
4261 static int hf_ieee80211_wfa_ie_wme_qos_info = -1;
4262 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length = -1;
4263 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be = -1;
4264 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk = -1;
4265 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi = -1;
4266 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo = -1;
4267 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved = -1;
4268 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd = -1;
4269 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count = -1;
4270 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved = -1;
4271 static int hf_ieee80211_wfa_ie_wme_reserved = -1;
4272 static int hf_ieee80211_wfa_ie_wme_ac_parameters = -1;
4273 static int hf_ieee80211_wfa_ie_wme_acp_aci_aifsn = -1;
4274 static int hf_ieee80211_wfa_ie_wme_acp_aci = -1;
4275 static int hf_ieee80211_wfa_ie_wme_acp_acm = -1;
4276 static int hf_ieee80211_wfa_ie_wme_acp_aifsn = -1;
4277 static int hf_ieee80211_wfa_ie_wme_acp_reserved = -1;
4278 static int hf_ieee80211_wfa_ie_wme_acp_ecw = -1;
4279 static int hf_ieee80211_wfa_ie_wme_acp_ecw_max = -1;
4280 static int hf_ieee80211_wfa_ie_wme_acp_ecw_min = -1;
4281 static int hf_ieee80211_wfa_ie_wme_acp_cw_max = -1;
4282 static int hf_ieee80211_wfa_ie_wme_acp_cw_min = -1;
4283 static int hf_ieee80211_wfa_ie_wme_acp_txop_limit = -1;
4284 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo = -1;
4285 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid = -1;
4286 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction = -1;
4287 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb = -1;
4288 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up = -1;
4289 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved = -1;
4290 static int hf_ieee80211_wfa_ie_wme_tspec_nor_msdu = -1;
4291 static int hf_ieee80211_wfa_ie_wme_tspec_max_msdu = -1;
4292 static int hf_ieee80211_wfa_ie_wme_tspec_min_srv = -1;
4293 static int hf_ieee80211_wfa_ie_wme_tspec_max_srv = -1;
4294 static int hf_ieee80211_wfa_ie_wme_tspec_inact_int = -1;
4295 static int hf_ieee80211_wfa_ie_wme_tspec_susp_int = -1;
4296 static int hf_ieee80211_wfa_ie_wme_tspec_srv_start = -1;
4297 static int hf_ieee80211_wfa_ie_wme_tspec_min_data = -1;
4298 static int hf_ieee80211_wfa_ie_wme_tspec_mean_data = -1;
4299 static int hf_ieee80211_wfa_ie_wme_tspec_peak_data = -1;
4300 static int hf_ieee80211_wfa_ie_wme_tspec_burst_size = -1;
4301 static int hf_ieee80211_wfa_ie_wme_tspec_delay_bound = -1;
4302 static int hf_ieee80211_wfa_ie_wme_tspec_min_phy = -1;
4303 static int hf_ieee80211_wfa_ie_wme_tspec_surplus = -1;
4304 static int hf_ieee80211_wfa_ie_wme_tspec_medium = -1;
4306 static int hf_ieee80211_aironet_ie_type = -1;
4307 static int hf_ieee80211_aironet_ie_dtpc = -1;
4308 static int hf_ieee80211_aironet_ie_version = -1;
4309 static int hf_ieee80211_aironet_ie_data = -1;
4310 static int hf_ieee80211_aironet_ie_qos_reserved = -1;
4311 static int hf_ieee80211_aironet_ie_qos_paramset = -1;
4312 static int hf_ieee80211_aironet_ie_qos_val = -1;
4313 static int hf_ieee80211_aironet_ie_clientmfp = -1;
4315 static int hf_ieee80211_vs_nintendo_type = -1;
4316 static int hf_ieee80211_vs_nintendo_length = -1;
4317 static int hf_ieee80211_vs_nintendo_servicelist = -1;
4318 static int hf_ieee80211_vs_nintendo_service = -1;
4319 static int hf_ieee80211_vs_nintendo_consoleid = -1;
4320 static int hf_ieee80211_vs_nintendo_unknown = -1;
4322 static int hf_ieee80211_vs_aruba_subtype = -1;
4323 static int hf_ieee80211_vs_aruba_apname = -1;
4324 static int hf_ieee80211_vs_aruba_data = -1;
4326 static int hf_ieee80211_vs_mikrotik_unknown = -1;
4327 static int hf_ieee80211_vs_mikrotik_subitem = -1;
4328 static int hf_ieee80211_vs_mikrotik_subtype = -1;
4329 static int hf_ieee80211_vs_mikrotik_sublength = -1;
4330 static int hf_ieee80211_vs_mikrotik_subdata = -1;
4332 static int hf_ieee80211_vs_meru_subitem = -1;
4333 static int hf_ieee80211_vs_meru_subtype = -1;
4334 static int hf_ieee80211_vs_meru_sublength = -1;
4335 static int hf_ieee80211_vs_meru_subdata = -1;
4337 static int hf_ieee80211_vs_extreme_subtype = -1;
4338 static int hf_ieee80211_vs_extreme_subdata = -1;
4339 static int hf_ieee80211_vs_extreme_unknown = -1;
4340 static int hf_ieee80211_vs_extreme_ap_length = -1;
4341 static int hf_ieee80211_vs_extreme_ap_name = -1;
4343 static int hf_ieee80211_rsn_ie_pmkid = -1;
4344 static int hf_ieee80211_rsn_ie_unknown = -1;
4346 static int hf_ieee80211_marvell_ie_type = -1;
4347 static int hf_ieee80211_marvell_ie_mesh_subtype = -1;
4348 static int hf_ieee80211_marvell_ie_mesh_version = -1;
4349 static int hf_ieee80211_marvell_ie_mesh_active_proto_id = -1;
4350 static int hf_ieee80211_marvell_ie_mesh_active_metric_id = -1;
4351 static int hf_ieee80211_marvell_ie_mesh_cap = -1;
4352 static int hf_ieee80211_marvell_ie_data = -1;
4354 static int hf_ieee80211_atheros_ie_type = -1;
4355 static int hf_ieee80211_atheros_ie_subtype = -1;
4356 static int hf_ieee80211_atheros_ie_version = -1;
4357 static int hf_ieee80211_atheros_ie_cap_f_turbop = -1;
4358 static int hf_ieee80211_atheros_ie_cap_f_comp = -1;
4359 static int hf_ieee80211_atheros_ie_cap_f_ff = -1;
4360 static int hf_ieee80211_atheros_ie_cap_f_xr = -1;
4361 static int hf_ieee80211_atheros_ie_cap_f_ar = -1;
4362 static int hf_ieee80211_atheros_ie_cap_f_burst = -1;
4363 static int hf_ieee80211_atheros_ie_cap_f_wme = -1;
4364 static int hf_ieee80211_atheros_ie_cap_f_boost = -1;
4365 static int hf_ieee80211_atheros_ie_advcap_cap = -1;
4366 static int hf_ieee80211_atheros_ie_advcap_defkey = -1;
4367 static int hf_ieee80211_atheros_ie_xr_info = -1;
4368 static int hf_ieee80211_atheros_ie_xr_base_bssid = -1;
4369 static int hf_ieee80211_atheros_ie_xr_xr_bssid = -1;
4370 static int hf_ieee80211_atheros_ie_xr_xr_beacon = -1;
4371 static int hf_ieee80211_atheros_ie_xr_base_cap = -1;
4372 static int hf_ieee80211_atheros_ie_xr_xr_cap = -1;
4373 static int hf_ieee80211_atheros_ie_data = -1;
4375 /*QBSS - Version 1,2,802.11e*/
4377 static int hf_ieee80211_qbss2_cal = -1;
4378 static int hf_ieee80211_qbss2_gl = -1;
4379 static int hf_ieee80211_qbss_cu = -1;
4380 static int hf_ieee80211_qbss2_cu = -1;
4381 static int hf_ieee80211_qbss_scount = -1;
4382 static int hf_ieee80211_qbss2_scount = -1;
4383 static int hf_ieee80211_qbss_version = -1;
4384 static int hf_ieee80211_qbss_adc = -1;
4386 static int hf_ieee80211_tsinfo = -1;
4387 static int hf_ieee80211_tsinfo_type = -1;
4388 static int hf_ieee80211_tsinfo_tsid = -1;
4389 static int hf_ieee80211_tsinfo_dir = -1;
4390 static int hf_ieee80211_tsinfo_access = -1;
4391 static int hf_ieee80211_tsinfo_agg = -1;
4392 static int hf_ieee80211_tsinfo_apsd = -1;
4393 static int hf_ieee80211_tsinfo_up = -1;
4394 static int hf_ieee80211_tsinfo_ack = -1;
4395 static int hf_ieee80211_tsinfo_sched = -1;
4396 static int hf_ieee80211_tsinfo_rsv = -1;
4398 static const int *ieee80211_tsinfo_fields[] = {
4399 &hf_ieee80211_tsinfo_type,
4400 &hf_ieee80211_tsinfo_tsid,
4401 &hf_ieee80211_tsinfo_dir,
4402 &hf_ieee80211_tsinfo_access,
4403 &hf_ieee80211_tsinfo_agg,
4404 &hf_ieee80211_tsinfo_apsd,
4405 &hf_ieee80211_tsinfo_up,
4406 &hf_ieee80211_tsinfo_ack,
4407 &hf_ieee80211_tsinfo_sched,
4408 &hf_ieee80211_tsinfo_rsv,
4412 static int hf_ieee80211_tspec_nor_msdu = -1;
4413 static int hf_ieee80211_tspec_max_msdu = -1;
4414 static int hf_ieee80211_tspec_min_srv = -1;
4415 static int hf_ieee80211_tspec_max_srv = -1;
4416 static int hf_ieee80211_tspec_inact_int = -1;
4417 static int hf_ieee80211_tspec_susp_int = -1;
4418 static int hf_ieee80211_tspec_srv_start = -1;
4419 static int hf_ieee80211_tspec_min_data = -1;
4420 static int hf_ieee80211_tspec_mean_data = -1;
4421 static int hf_ieee80211_tspec_peak_data = -1;
4422 static int hf_ieee80211_tspec_burst_size = -1;
4423 static int hf_ieee80211_tspec_delay_bound = -1;
4424 static int hf_ieee80211_tspec_min_phy = -1;
4425 static int hf_ieee80211_tspec_surplus = -1;
4426 static int hf_ieee80211_tspec_medium = -1;
4427 static int hf_ieee80211_tspec_dmg = -1;
4428 static int hf_ieee80211_ts_delay = -1;
4429 static int hf_ieee80211_tclas_process = -1;
4430 static int hf_ieee80211_tag_ext_supp_rates = -1;
4431 static int hf_ieee80211_sched_info = -1;
4432 static int hf_ieee80211_sched_info_agg = -1;
4433 static int hf_ieee80211_sched_info_tsid = -1;
4434 static int hf_ieee80211_sched_info_dir = -1;
4435 static int hf_ieee80211_sched_srv_start = -1;
4436 static int hf_ieee80211_sched_srv_int = -1;
4437 static int hf_ieee80211_sched_spec_int = -1;
4438 static int hf_ieee80211_tclas_up = -1;
4439 static int hf_ieee80211_tclas_class_type = -1;
4440 static int hf_ieee80211_tclas_class_mask = -1;
4441 static int hf_ieee80211_tclas_class_mask0_src_addr = -1;
4442 static int hf_ieee80211_tclas_class_mask0_dst_addr = -1;
4443 static int hf_ieee80211_tclas_class_mask0_type = -1;
4444 static int hf_ieee80211_tclas_class_mask1_ver = -1;
4445 static int hf_ieee80211_tclas_class_mask1_src_ip = -1;
4446 static int hf_ieee80211_tclas_class_mask1_dst_ip = -1;
4447 static int hf_ieee80211_tclas_class_mask1_src_port = -1;
4448 static int hf_ieee80211_tclas_class_mask1_dst_port = -1;
4449 static int hf_ieee80211_tclas_class_mask1_ipv4_dscp = -1;
4450 static int hf_ieee80211_tclas_class_mask1_ipv4_proto = -1;
4451 static int hf_ieee80211_tclas_class_mask1_ipv6_flow = -1;
4452 static int hf_ieee80211_tclas_class_mask2_tci = -1;
4453 static int hf_ieee80211_tclas_src_mac_addr = -1;
4454 static int hf_ieee80211_tclas_dst_mac_addr = -1;
4455 static int hf_ieee80211_tclas_ether_type = -1;
4456 static int hf_ieee80211_tclas_version = -1;
4457 static int hf_ieee80211_tclas_ipv4_src = -1;
4458 static int hf_ieee80211_tclas_ipv4_dst = -1;
4459 static int hf_ieee80211_tclas_src_port = -1;
4460 static int hf_ieee80211_tclas_dst_port = -1;
4461 static int hf_ieee80211_tclas_dscp = -1;
4462 static int hf_ieee80211_tclas_protocol = -1;
4463 static int hf_ieee80211_tclas_ipv6_src = -1;
4464 static int hf_ieee80211_tclas_ipv6_dst = -1;
4465 static int hf_ieee80211_tclas_flow = -1;
4466 static int hf_ieee80211_tclas_tag_type = -1;
4468 static int hf_ieee80211_aruba = -1;
4469 static int hf_ieee80211_aruba_hb_seq = -1;
4470 static int hf_ieee80211_aruba_mtu = -1;
4472 static int hf_ieee80211_tag_vendor_oui_type = -1;
4473 static int hf_ieee80211_tag_vendor_data = -1;
4475 /* IEEE Std 802.11z-2010 7.3.2.62 */
4476 static int hf_ieee80211_tag_link_id_bssid = -1;
4477 static int hf_ieee80211_tag_link_id_init_sta = -1;
4478 static int hf_ieee80211_tag_link_id_resp_sta = -1;
4480 /* IEEE Std 802.11z-2010 7.3.2.63 */
4481 static int hf_ieee80211_tag_wakeup_schedule_offset = -1;
4482 static int hf_ieee80211_tag_wakeup_schedule_interval = -1;
4483 static int hf_ieee80211_tag_wakeup_schedule_awake_window_slots = -1;
4484 static int hf_ieee80211_tag_wakeup_schedule_max_awake_dur = -1;
4485 static int hf_ieee80211_tag_wakeup_schedule_idle_count = -1;
4487 /* IEEE Std 802.11z-2010 7.3.2.64 */
4488 static int hf_ieee80211_tag_channel_switch_timing_switch_time = -1;
4489 static int hf_ieee80211_tag_channel_switch_timing_switch_timeout = -1;
4491 /* IEEE Std 802.11z-2010 7.3.2.65 */
4492 static int hf_ieee80211_tag_pti_control_tid = -1;
4493 static int hf_ieee80211_tag_pti_control_sequence_control = -1;
4495 /* IEEE Std 802.11z-2010 7.3.2.66 */
4496 static int hf_ieee80211_tag_pu_buffer_status_ac_bk = -1;
4497 static int hf_ieee80211_tag_pu_buffer_status_ac_be = -1;
4498 static int hf_ieee80211_tag_pu_buffer_status_ac_vi = -1;
4499 static int hf_ieee80211_tag_pu_buffer_status_ac_vo = -1;
4501 /* IEEE Std 802.11r-2008 7.3.2.49 */
4502 static int hf_ieee80211_tag_timeout_int_type = -1;
4503 static int hf_ieee80211_tag_timeout_int_value = -1;
4505 /* Ethertype 89-0d */
4506 static int hf_ieee80211_data_encap_payload_type = -1;
4508 static int hf_ieee80211_anqp_wfa_subtype = -1;
4511 static int hf_hs20_indication_dgaf_disabled = -1;
4512 static int hf_hs20_indication_pps_mo_id_present = -1;
4513 static int hf_hs20_indication_anqp_domain_id_present = -1;
4514 static int hf_hs20_indication_release_number = -1;
4516 static int hf_hs20_anqp_subtype = -1;
4517 static int hf_hs20_anqp_reserved = -1;
4518 static int hf_hs20_anqp_payload = -1;
4519 static int hf_hs20_anqp_hs_query_list = -1;
4520 static int hf_hs20_anqp_hs_capability_list = -1;
4521 static int hf_hs20_anqp_ofn_length = -1;
4522 static int hf_hs20_anqp_ofn_language = -1;
4523 static int hf_hs20_anqp_ofn_name = -1;
4524 static int hf_hs20_anqp_wan_metrics_link_status = -1;
4525 static int hf_hs20_anqp_wan_metrics_symmetric_link = -1;
4526 static int hf_hs20_anqp_wan_metrics_at_capacity = -1;
4527 static int hf_hs20_anqp_wan_metrics_reserved = -1;
4528 static int hf_hs20_anqp_wan_metrics_downlink_speed = -1;
4529 static int hf_hs20_anqp_wan_metrics_uplink_speed = -1;
4530 static int hf_hs20_anqp_wan_metrics_downlink_load = -1;
4531 static int hf_hs20_anqp_wan_metrics_uplink_load = -1;
4532 static int hf_hs20_anqp_wan_metrics_lmd = -1;
4533 static int hf_hs20_anqp_cc_proto_ip_proto = -1;
4534 static int hf_hs20_anqp_cc_proto_port_num = -1;
4535 static int hf_hs20_anqp_cc_proto_status = -1;
4536 static int hf_hs20_anqp_nai_hrq_count = -1;
4537 static int hf_hs20_anqp_nai_hrq_encoding_type = -1;
4538 static int hf_hs20_anqp_nai_hrq_length = -1;
4539 static int hf_hs20_anqp_nai_hrq_realm_name = -1;
4540 static int hf_hs20_anqp_oper_class_indic = -1;
4542 /* IEEE Std 802.11ad */
4543 static int hf_ieee80211_block_ack_RBUFCAP = -1;
4544 static int hf_ieee80211_cf_response_offset = -1;
4545 static int hf_ieee80211_grant_ack_reserved = -1;
4546 static int hf_ieee80211_ff_dynamic_allocation = -1;
4547 static int hf_ieee80211_ff_TID = -1;
4548 static int hf_ieee80211_ff_alloc_type = -1;
4549 static int hf_ieee80211_ff_src_aid = -1;
4550 static int hf_ieee80211_ff_dest_aid = -1;
4551 static int hf_ieee80211_ff_alloc_duration = -1;
4552 static int hf_ieee80211_ff_b39 = -1;
4553 static int hf_ieee80211_ff_ssw = -1;
4554 static int hf_ieee80211_ff_ssw_direction = -1;
4555 static int hf_ieee80211_ff_ssw_cdown = -1;
4556 static int hf_ieee80211_ff_ssw_sector_id = -1;
4557 static int hf_ieee80211_ff_ssw_dmg_ant_id = -1;
4558 static int hf_ieee80211_ff_ssw_rxss_len = -1;
4559 static int hf_ieee80211_ff_bf = -1;
4560 static int hf_ieee80211_ff_bf_train = -1;
4561 static int hf_ieee80211_ff_bf_is_init = -1;
4562 static int hf_ieee80211_ff_bf_is_resp = -1;
4563 static int hf_ieee80211_ff_bf_num_sectors = -1;
4564 static int hf_ieee80211_ff_bf_num_rx_dmg_ants = -1;
4565 static int hf_ieee80211_ff_bf_b12b15 = -1;
4566 static int hf_ieee80211_ff_bf_rxss_len = -1;
4567 static int hf_ieee80211_ff_bf_rxss_rate = -1;
4568 static int hf_ieee80211_ff_bf_b10b15 = -1;
4569 static int hf_ieee80211_addr_nav_da = -1;
4570 static int hf_ieee80211_addr_nav_sa = -1;
4571 static int hf_ieee80211_ff_sswf = -1;
4572 static int hf_ieee80211_ff_sswf_num_rx_dmg_ants = -1;
4573 static int hf_ieee80211_ff_sswf_poll_required = -1;
4574 static int hf_ieee80211_ff_sswf_total_sectors = -1;
4575 static int hf_ieee80211_ff_sswf_reserved1 = -1;
4576 static int hf_ieee80211_ff_sswf_reserved2 = -1;
4577 static int hf_ieee80211_ff_sswf_sector_select = -1;
4578 static int hf_ieee80211_ff_sswf_dmg_antenna_select = -1;
4579 static int hf_ieee80211_ff_sswf_snr_report = -1;
4580 static int hf_ieee80211_ff_brp = -1;
4581 static int hf_ieee80211_ff_brp_L_RX = -1;
4582 static int hf_ieee80211_ff_brp_TX_TRN_REQ = -1;
4583 static int hf_ieee80211_ff_brp_MID_REQ = -1;
4584 static int hf_ieee80211_ff_brp_BC_REQ = -1;
4585 static int hf_ieee80211_ff_brp_MID_GRANT = -1;
4586 static int hf_ieee80211_ff_brp_BC_GRANT = -1;
4587 static int hf_ieee80211_ff_brp_chan_FBCK_CAP = -1;
4588 static int hf_ieee80211_ff_brp_tx_sector = -1;
4589 static int hf_ieee80211_ff_brp_other_aid = -1;
4590 static int hf_ieee80211_ff_brp_tx_antenna = -1;
4591 static int hf_ieee80211_ff_brp_reserved = -1;
4592 static int hf_ieee80211_ff_blm = -1;
4593 static int hf_ieee80211_ff_blm_unit_index = -1;
4594 static int hf_ieee80211_ff_blm_maint_value = -1;
4595 static int hf_ieee80211_ff_blm_is_master = -1;
4596 static int hf_ieee80211_ff_bic = -1;
4597 static int hf_ieee80211_ff_bic_cc_present = -1;
4598 static int hf_ieee80211_ff_bic_discovery_mode = -1;
4599 static int hf_ieee80211_ff_bic_next_beacon = -1;
4600 static int hf_ieee80211_ff_bic_ati_present = -1;
4601 static int hf_ieee80211_ff_bic_abft_len = -1;
4602 static int hf_ieee80211_ff_bic_fss = -1;
4603 static int hf_ieee80211_ff_bic_is_resp = -1;
4604 static int hf_ieee80211_ff_bic_next_abft = -1;
4605 static int hf_ieee80211_ff_bic_frag_txss = -1;
4606 static int hf_ieee80211_ff_bic_txss_span = -1;
4607 static int hf_ieee80211_ff_bic_NBI_abft = -1;
4608 static int hf_ieee80211_ff_bic_abft_count = -1;
4609 static int hf_ieee80211_ff_bic_nabft = -1;
4610 static int hf_ieee80211_ff_bic_pcp = -1;
4611 static int hf_ieee80211_ff_bic_reserved = -1;
4612 static int hf_ieee80211_ff_dmg_params = -1;
4613 static int hf_ieee80211_ff_dmg_params_bss = -1;
4614 static int hf_ieee80211_ff_dmg_params_cbap_only = -1;
4615 static int hf_ieee80211_ff_dmg_params_cbap_src = -1;
4616 static int hf_ieee80211_ff_dmg_params_privacy = -1;
4617 static int hf_ieee80211_ff_dmg_params_policy = -1;
4618 static int hf_ieee80211_ff_cc = -1;
4619 static int hf_ieee80211_ff_cc_abft_resp_addr = -1;
4620 static int hf_ieee80211_ff_cc_sp_duration = -1;
4621 static int hf_ieee80211_ff_cc_cluster_id = -1;
4622 static int hf_ieee80211_ff_cc_role = -1;
4623 static int hf_ieee80211_ff_cc_max_mem = -1;
4624 static int hf_ieee80211_ff_dmg_action_code = -1;
4625 static int hf_ieee80211_ff_dmg_pwr_mgmt = -1;
4626 static int hf_ieee80211_ff_subject_address = -1;
4627 static int hf_ieee80211_ff_handover_reason = -1;
4628 static int hf_ieee80211_ff_handover_remaining_bi = -1;
4629 static int hf_ieee80211_ff_handover_result = -1;
4630 static int hf_ieee80211_ff_handover_reject_reason = -1;
4631 static int hf_ieee80211_ff_destination_reds_aid = -1;
4632 static int hf_ieee80211_ff_destination_aid = -1;
4633 static int hf_ieee80211_ff_realy_aid = -1;
4634 static int hf_ieee80211_ff_source_aid = -1;
4635 static int hf_ieee80211_ff_timing_offset = -1;
4636 static int hf_ieee80211_ff_sampling_frequency_offset = -1;
4637 static int hf_ieee80211_ff_relay_operation_type = -1;
4638 static int hf_ieee80211_ff_peer_sta_aid = -1;
4639 static int hf_ieee80211_ff_snr = -1;
4640 static int hf_ieee80211_ff_internal_angle = -1;
4641 static int hf_ieee80211_ff_recommend = -1;
4642 static int hf_ieee80211_ff_unprotected_dmg_action_code = -1;
4643 static int hf_ieee80211_ff_fst_action_code = -1;
4644 static int hf_ieee80211_ff_llt = -1;
4645 static int hf_ieee80211_ff_fsts_id = -1;
4646 static int hf_ieee80211_ff_mmpdu_len = -1;
4647 static int hf_ieee80211_ff_mmpdu_ctrl = -1;
4648 static int hf_ieee80211_ff_oct_mmpdu = -1;
4650 static int hf_ieee80211_ff_rcsi = -1;
4651 static int hf_ieee80211_ff_rcsi_aid = -1;
4653 static int hf_ieee80211_ff_band_id = -1;
4654 static int hf_ieee80211_tag_relay_support = -1;
4655 static int hf_ieee80211_tag_relay_use = -1;
4656 static int hf_ieee80211_tag_relay_permission = -1;
4657 static int hf_ieee80211_tag_AC_power = -1;
4658 static int hf_ieee80211_tag_relay_prefer = -1;
4659 static int hf_ieee80211_tag_duplex = -1;
4660 static int hf_ieee80211_tag_cooperation = -1;
4661 static int hf_ieee80211_tag_move = -1;
4662 static int hf_ieee80211_tag_size = -1;
4663 static int hf_ieee80211_tag_tbtt_offset = -1;
4664 static int hf_ieee80211_tag_bi_duration = -1;
4665 static int hf_ieee80211_tag_dmg_capa_sta_addr = -1;
4666 static int hf_ieee80211_tag_dmg_capa_aid = -1;
4667 static int hf_ieee80211_tag_reverse_direction = -1;
4668 static int hf_ieee80211_tag_hlts = -1;
4669 static int hf_ieee80211_tag_tpc = -1;
4670 static int hf_ieee80211_tag_spsh = -1;
4671 static int hf_ieee80211_tag_rx_antenna = -1;
4672 static int hf_ieee80211_tag_fast_link = -1;
4673 static int hf_ieee80211_tag_num_sectors = -1;
4674 static int hf_ieee80211_tag_rxss_length = -1;
4675 static int hf_ieee80211_tag_reciprocity = -1;
4676 static int hf_ieee80211_tag_max_ampdu_exp = -1;
4677 static int hf_ieee80211_tag_min_mpdu_sapcing = -1;
4678 static int hf_ieee80211_tag_ba_flow_control = -1;
4679 static int hf_ieee80211_tag_max_sc_rx_mcs = -1;
4680 static int hf_ieee80211_tag_max_ofdm_rx_mcs = -1;
4681 static int hf_ieee80211_tag_max_sc_tx_mcs = -1;
4682 static int hf_ieee80211_tag_max_ofdm_tx_mcs = -1;
4683 static int hf_ieee80211_tag_low_power_supported = -1;
4684 static int hf_ieee80211_tag_code_rate = -1;
4685 static int hf_ieee80211_tag_dtp = -1;
4686 static int hf_ieee80211_tag_appdu_supp = -1;
4687 static int hf_ieee80211_tag_heartbeat = -1;
4688 static int hf_ieee80211_tag_other_aid = -1;
4689 static int hf_ieee80211_tag_pattern_recip = -1;
4690 static int hf_ieee80211_tag_heartbeat_elapsed = -1;
4691 static int hf_ieee80211_tag_grant_ack_supp = -1;
4692 static int hf_ieee80211_tag_RXSSTxRate_supp = -1;
4693 static int hf_ieee80211_tag_pcp_tddti = -1;
4694 static int hf_ieee80211_tag_pcp_PSA = -1;
4695 static int hf_ieee80211_tag_pcp_handover = -1;
4696 static int hf_ieee80211_tag_pcp_max_assoc = -1;
4697 static int hf_ieee80211_tag_pcp_power_src = -1;
4698 static int hf_ieee80211_tag_pcp_decenter = -1;
4699 static int hf_ieee80211_tag_pcp_forwarding = -1;
4700 static int hf_ieee80211_tag_pcp_center = -1;
4701 static int hf_ieee80211_tag_PSRSI = -1;
4702 static int hf_ieee80211_tag_min_BHI_duration = -1;
4703 static int hf_ieee80211_tag_brdct_sta_info_dur = -1;
4704 static int hf_ieee80211_tag_assoc_resp_confirm_time = -1;
4705 static int hf_ieee80211_tag_min_pp_duration = -1;
4706 static int hf_ieee80211_tag_SP_idle_timeout = -1;
4707 static int hf_ieee80211_tag_max_lost_beacons = -1;
4708 static int hf_ieee80211_tag_type = -1;
4709 static int hf_ieee80211_tag_tap1 = -1;
4710 static int hf_ieee80211_tag_state1 = -1;
4711 static int hf_ieee80211_tag_tap2 = -1;
4712 static int hf_ieee80211_tag_state2 = -1;
4713 static int hf_ieee80211_tag_allocation_id = -1;
4714 static int hf_ieee80211_tag_allocation_type = -1;
4715 static int hf_ieee80211_tag_pseudo_static = -1;
4716 static int hf_ieee80211_tag_truncatable = -1;
4717 static int hf_ieee80211_tag_extendable = -1;
4718 static int hf_ieee80211_tag_pcp_active = -1;
4719 static int hf_ieee80211_tag_lp_sc_used = -1;
4720 static int hf_ieee80211_tag_src_aid = -1;
4721 static int hf_ieee80211_tag_dest_aid = -1;
4722 static int hf_ieee80211_tag_alloc_start = -1;
4723 static int hf_ieee80211_tag_alloc_block_duration = -1;
4724 static int hf_ieee80211_tag_num_blocks = -1;
4725 static int hf_ieee80211_tag_alloc_block_period = -1;
4726 static int hf_ieee80211_tag_aid = -1;
4727 static int hf_ieee80211_tag_cbap = -1;
4728 static int hf_ieee80211_tag_pp_avail = -1;
4729 static int hf_ieee80211_tag_next_ati_start_time = -1;
4730 static int hf_ieee80211_tag_next_ati_duration = -1;
4731 static int hf_ieee80211_tag_old_bssid = -1;
4732 static int hf_ieee80211_tag_new_pcp_addr = -1;
4733 static int hf_ieee80211_tag_bssid = -1;
4734 static int hf_ieee80211_tag_duplex_relay = -1;
4735 static int hf_ieee80211_tag_cooperation_relay = -1;
4736 static int hf_ieee80211_tag_tx_mode = -1;
4737 static int hf_ieee80211_tag_link_change_interval = -1;
4738 static int hf_ieee80211_tag_data_sensing_time = -1;
4739 static int hf_ieee80211_tag_first_period = -1;
4740 static int hf_ieee80211_tag_second_period = -1;
4741 static int hf_ieee80211_tag_initiator = -1;
4742 static int hf_ieee80211_tag_tx_train_res = -1;
4743 static int hf_ieee80211_tag_rx_train_res = -1;
4744 static int hf_ieee80211_tag_tx_trn_ok = -1;
4745 static int hf_ieee80211_tag_txss_fbck_req = -1;
4746 static int hf_ieee80211_tag_bs_fbck = -1;
4747 static int hf_ieee80211_tag_bs_fbck_antenna_id = -1;
4748 static int hf_ieee80211_tag_snr_requested = -1;
4749 static int hf_ieee80211_tag_channel_measurement_requested = -1;
4750 static int hf_ieee80211_tag_number_of_taps_requested = -1;
4751 static int hf_ieee80211_tag_sector_id_order_req = -1;
4752 static int hf_ieee80211_tag_snr_present = -1;
4753 static int hf_ieee80211_tag_channel_measurement_present = -1;
4754 static int hf_ieee80211_tag_tap_delay_present = -1;
4755 static int hf_ieee80211_tag_number_of_taps_present = -1;
4756 static int hf_ieee80211_tag_number_of_measurement = -1;
4757 static int hf_ieee80211_tag_sector_id_order_present = -1;
4758 static int hf_ieee80211_tag_number_of_beams = -1;
4759 static int hf_ieee80211_tag_mid_extension = -1;
4760 static int hf_ieee80211_tag_capability_request = -1;
4761 static int hf_ieee80211_tag_beam_refine_reserved = -1;
4762 static int hf_ieee80211_tag_nextpcp_list = -1;
4763 static int hf_ieee80211_tag_nextpcp_token = -1;
4764 static int hf_ieee80211_tag_reamaining_BI = -1;
4765 static int hf_ieee80211_tag_request_token = -1;
4766 static int hf_ieee80211_tag_bi_start_time = -1;
4767 static int hf_ieee80211_tag_sleep_cycle = -1;
4768 static int hf_ieee80211_tag_num_awake_bis = -1;
4769 static int hf_ieee80211_tag_tspec_allocation_id = -1;
4770 static int hf_ieee80211_tag_tspec_allocation_type = -1;
4771 static int hf_ieee80211_tag_tspec_allocation_format = -1;
4772 static int hf_ieee80211_tag_tspec_pseudo_static = -1;
4773 static int hf_ieee80211_tag_tspec_truncatable = -1;
4774 static int hf_ieee80211_tag_tspec_extendable = -1;
4775 static int hf_ieee80211_tag_tspec_lp_sc_used = -1;
4776 static int hf_ieee80211_tag_tspec_up = -1;
4777 static int hf_ieee80211_tag_tspec_dest_aid = -1;
4778 static int hf_ieee80211_tag_tspec_allocation_period = -1;
4779 static int hf_ieee80211_tag_tspec_min_allocation = -1;
4780 static int hf_ieee80211_tag_tspec_max_allocation = -1;
4781 static int hf_ieee80211_tag_tspec_min_duration = -1;
4782 static int hf_ieee80211_tag_tspec_num_of_constraints = -1;
4783 static int hf_ieee80211_tag_tspec_tsconst_start_time = -1;
4784 static int hf_ieee80211_tag_tspec_tsconst_duration = -1;
4785 static int hf_ieee80211_tag_tspec_tsconst_period = -1;
4786 static int hf_ieee80211_tag_tspec_tsconst_interferer_mac = -1;
4787 static int hf_ieee80211_tag_channel_measurement_feedback_realtive_I = -1;
4788 static int hf_ieee80211_tag_channel_measurement_feedback_realtive_Q = -1;
4789 static int hf_ieee80211_tag_channel_measurement_feedback_tap_delay = -1;
4790 static int hf_ieee80211_tag_channel_measurement_feedback_sector_id = -1;
4791 static int hf_ieee80211_tag_channel_measurement_feedback_antenna_id = -1;
4792 static int hf_ieee80211_tag_awake_window = -1;
4793 static int hf_ieee80211_tag_addba_ext_no_frag = -1;
4794 static int hf_ieee80211_tag_multi_band_ctrl_sta_role = -1;
4795 static int hf_ieee80211_tag_multi_band_ctrl_addr_present = -1;
4796 static int hf_ieee80211_tag_multi_band_ctrl_cipher_present = -1;
4797 static int hf_ieee80211_tag_multi_band_oper_class = -1;
4798 static int hf_ieee80211_tag_multi_band_channel_number = -1;
4799 static int hf_ieee80211_tag_multi_band_tsf_offset = -1;
4800 static int hf_ieee80211_tag_multi_band_conn_ap = -1;
4801 static int hf_ieee80211_tag_multi_band_conn_pcp = -1;
4802 static int hf_ieee80211_tag_multi_band_conn_dls = -1;
4803 static int hf_ieee80211_tag_multi_band_conn_tdls = -1;
4804 static int hf_ieee80211_tag_multi_band_conn_ibss = -1;
4805 static int hf_ieee80211_tag_multi_band_fst_timeout = -1;
4806 static int hf_ieee80211_tag_multi_band_sta_mac = -1;
4807 static int hf_ieee80211_tag_activity = -1;
4808 static int hf_ieee80211_tag_dmg_link_adapt_mcs = -1;
4809 static int hf_ieee80211_tag_dmg_link_adapt_link_margin = -1;
4810 static int hf_ieee80211_tag_ref_timestamp = -1;
4811 static int hf_ieee80211_tag_switching_stream_non_qos = -1;
4812 static int hf_ieee80211_tag_switching_stream_param_num = -1;
4813 static int hf_ieee80211_tag_switching_stream_old_tid = -1;
4814 static int hf_ieee80211_tag_switching_stream_old_direction = -1;
4815 static int hf_ieee80211_tag_switching_stream_new_tid = -1;
4816 static int hf_ieee80211_tag_switching_stream_new_direction = -1;
4817 static int hf_ieee80211_tag_switching_stream_new_valid_id = -1;
4818 static int hf_ieee80211_tag_switching_stream_llt_type = -1;
4820 static int hf_ieee80211_mysterious_olpc_stuff = -1;
4822 /* ************************************************************************* */
4823 /* Protocol trees */
4824 /* ************************************************************************* */
4825 static gint ett_80211 = -1;
4826 static gint ett_proto_flags = -1;
4827 static gint ett_cap_tree = -1;
4828 static gint ett_fc_tree = -1;
4829 static gint ett_cntrl_wrapper_fc = -1;
4830 static gint ett_cntrl_wrapper_payload = -1;
4831 static gint ett_fragments = -1;
4832 static gint ett_fragment = -1;
4833 static gint ett_block_ack = -1;
4834 static gint ett_block_ack_bitmap = -1;
4835 static gint ett_ath_cap_tree = -1;
4837 static gint ett_80211_mgt = -1;
4838 static gint ett_fixed_parameters = -1;
4839 static gint ett_tagged_parameters = -1;
4840 static gint ett_tag_bmapctl_tree = -1;
4841 static gint ett_tag_country_fnm_tree = -1;
4842 static gint ett_tag_country_rcc_tree = -1;
4843 static gint ett_qos_parameters = -1;
4844 static gint ett_qos_ps_buf_state = -1;
4845 static gint ett_wep_parameters = -1;
4846 static gint ett_msh_control = -1;
4847 static gint ett_hwmp_targ_flags_tree = -1;
4848 static gint ett_mesh_chswitch_flag_tree = -1;
4849 static gint ett_mesh_config_cap_tree = -1;
4850 static gint ett_mesh_formation_info_tree = -1;
4852 static gint ett_rsn_gcs_tree = -1;
4853 static gint ett_rsn_pcs_tree = -1;
4854 static gint ett_rsn_sub_pcs_tree = -1;
4855 static gint ett_rsn_akms_tree = -1;
4856 static gint ett_rsn_sub_akms_tree = -1;
4857 static gint ett_rsn_cap_tree = -1;
4858 static gint ett_rsn_pmkid_tree = -1;
4859 static gint ett_rsn_gmcs_tree = -1;
4861 static gint ett_wpa_mcs_tree = -1;
4862 static gint ett_wpa_ucs_tree = -1;
4863 static gint ett_wpa_sub_ucs_tree = -1;
4864 static gint ett_wpa_akms_tree = -1;
4865 static gint ett_wpa_sub_akms_tree = -1;
4866 static gint ett_wme_ac = -1;
4867 static gint ett_wme_aci_aifsn = -1;
4868 static gint ett_wme_ecw = -1;
4869 static gint ett_wme_qos_info = -1;
4871 static gint ett_ht_cap_tree = -1;
4872 static gint ett_ampduparam_tree = -1;
4873 static gint ett_mcsset_tree = -1;
4874 static gint ett_mcsbit_tree = -1;
4875 static gint ett_htex_cap_tree = -1;
4876 static gint ett_txbf_tree = -1;
4877 static gint ett_antsel_tree = -1;
4878 static gint ett_hta_cap_tree = -1;
4879 static gint ett_hta_cap1_tree = -1;
4880 static gint ett_hta_cap2_tree = -1;
4882 static gint ett_htc_tree = -1;
4883 static gint ett_mfb_subtree = -1;
4884 static gint ett_lac_subtree = -1;
4886 static gint ett_vht_cap_tree = -1;
4887 static gint ett_vht_mcsset_tree = -1;
4888 static gint ett_vht_rx_mcsbit_tree = -1;
4889 static gint ett_vht_tx_mcsbit_tree = -1;
4890 static gint ett_vht_basic_mcsbit_tree = -1;
4891 static gint ett_vht_op_tree = -1;
4892 static gint ett_vht_tpe_info_tree = -1;
4894 static gint ett_vht_ndp_annc_token_tree = -1;
4895 static gint ett_vht_ndp_annc_sta_info_tree = -1;
4897 static gint ett_ff_vhtmimo_cntrl = -1;
4898 static gint ett_ff_vhtmimo_beamforming_report = -1;
4899 static gint ett_ff_vhtmimo_beamforming_report_snr = -1;
4900 static gint ett_ff_vhtmimo_beamforming_report_feedback_matrices = -1;
4902 static gint ett_vht_grpidmgmt = -1;
4903 static gint ett_vht_msa = -1;
4904 static gint ett_vht_upa = -1;
4906 static gint ett_ht_info_delimiter1_tree = -1;
4907 static gint ett_ht_info_delimiter2_tree = -1;
4908 static gint ett_ht_info_delimiter3_tree = -1;
4910 static gint ett_tag_measure_request_mode_tree = -1;
4911 static gint ett_tag_measure_request_type_tree = -1;
4912 static gint ett_tag_measure_report_mode_tree = -1;
4913 static gint ett_tag_measure_report_type_tree = -1;
4914 static gint ett_tag_measure_report_basic_map_tree = -1;
4915 static gint ett_tag_measure_report_rpi_tree = -1;
4916 static gint ett_tag_measure_report_frame_tree = -1;
4917 static gint ett_tag_measure_reported_frame_tree = -1;
4918 static gint ett_tag_bss_bitmask_tree = -1;
4919 static gint ett_tag_dfs_map_tree = -1;
4920 static gint ett_tag_erp_info_tree = -1;
4921 static gint ett_tag_ex_cap1 = -1;
4922 static gint ett_tag_ex_cap2 = -1;
4923 static gint ett_tag_ex_cap3 = -1;
4924 static gint ett_tag_ex_cap4 = -1;
4925 static gint ett_tag_ex_cap5 = -1;
4926 static gint ett_tag_ex_cap6 = -1;
4927 static gint ett_tag_ex_cap7 = -1;
4928 static gint ett_tag_ex_cap8 = -1;
4929 static gint ett_tag_ex_cap9 = -1;
4931 static gint ett_tag_rm_cap1 = -1;
4932 static gint ett_tag_rm_cap2 = -1;
4933 static gint ett_tag_rm_cap3 = -1;
4934 static gint ett_tag_rm_cap4 = -1;
4935 static gint ett_tag_rm_cap5 = -1;
4937 static gint ett_tag_20_40_bc = -1;
4939 static gint ett_tag_tclas_mask_tree = -1;
4941 static gint ett_tag_supported_channels = -1;
4943 static gint ett_tag_neighbor_report_bssid_info_tree = -1;
4944 static gint ett_tag_neighbor_report_bssid_info_capability_tree = -1;
4945 static gint ett_tag_neighbor_report_sub_tag_tree = -1;
4947 static gint ett_tag_wapi_param_set_akm_tree = -1;
4948 static gint ett_tag_wapi_param_set_ucast_tree = -1;
4949 static gint ett_tag_wapi_param_set_mcast_tree = -1;
4950 static gint ett_tag_wapi_param_set_preauth_tree = -1;
4952 static gint ett_tag_time_adv_tree = -1;
4954 static gint ett_ff_ba_param_tree = -1;
4955 static gint ett_ff_ba_ssc_tree = -1;
4956 static gint ett_ff_delba_param_tree = -1;
4957 static gint ett_ff_qos_info = -1;
4958 static gint ett_ff_sm_pwr_save = -1;
4959 static gint ett_ff_psmp_param_set = -1;
4960 static gint ett_ff_mimo_cntrl = -1;
4961 static gint ett_ff_ant_sel = -1;
4962 static gint ett_mimo_report = -1;
4963 static gint ett_ff_chan_switch_announce = -1;
4964 static gint ett_ff_ht_info = -1;
4965 static gint ett_ff_psmp_sta_info = -1;
4967 static gint ett_tpc = -1;
4969 static gint ett_msdu_aggregation_parent_tree = -1;
4970 static gint ett_msdu_aggregation_subframe_tree = -1;
4972 static gint ett_80211_mgt_ie = -1;
4973 static gint ett_tsinfo_tree = -1;
4974 static gint ett_sched_tree = -1;
4976 static gint ett_fcs = -1;
4978 static gint ett_adv_proto = -1;
4979 static gint ett_adv_proto_tuple = -1;
4980 static gint ett_gas_query = -1;
4981 static gint ett_gas_anqp = -1;
4982 static gint ett_nai_realm = -1;
4983 static gint ett_nai_realm_eap = -1;
4984 static gint ett_tag_ric_data_desc_ie = -1;
4985 static gint ett_anqp_vendor_capab = -1;
4987 static gint ett_hs20_cc_proto_port_tuple = -1;
4989 static gint ett_ssid_list = -1;
4991 static gint ett_nintendo = -1;
4993 static gint ett_mikrotik = -1;
4995 static gint ett_meru = -1;
4997 static gint ett_qos_map_set_exception = -1;
4998 static gint ett_qos_map_set_range = -1;
5000 static expert_field ei_ieee80211_bad_length = EI_INIT;
5001 static expert_field ei_ieee80211_inv_val = EI_INIT;
5002 static expert_field ei_ieee80211_vht_tpe_pwr_info_count = EI_INIT;
5003 static expert_field ei_ieee80211_ff_query_response_length = EI_INIT;
5004 static expert_field ei_ieee80211_ff_anqp_nai_realm_eap_len = EI_INIT;
5005 static expert_field ei_hs20_anqp_nai_hrq_length = EI_INIT;
5006 static expert_field ei_ieee80211_extra_data = EI_INIT;
5007 static expert_field ei_ieee80211_tag_data = EI_INIT;
5008 static expert_field ei_ieee80211_tdls_setup_confirm_malformed = EI_INIT;
5009 static expert_field ei_ieee80211_ff_anqp_nai_field_len = EI_INIT;
5010 static expert_field ei_ieee80211_rsn_pcs_count = EI_INIT;
5011 static expert_field ei_ieee80211_tag_measure_request_unknown = EI_INIT;
5012 static expert_field ei_ieee80211_tag_measure_request_beacon_unknown = EI_INIT;
5013 static expert_field ei_ieee80211_tag_measure_report_unknown = EI_INIT;
5014 static expert_field ei_ieee80211_tag_number = EI_INIT;
5015 static expert_field ei_ieee80211_ff_anqp_info_length = EI_INIT;
5016 static expert_field ei_hs20_anqp_ofn_length = EI_INIT;
5017 static expert_field ei_ieee80211_tdls_setup_response_malformed = EI_INIT;
5018 static expert_field ei_ieee80211_ff_anqp_capability = EI_INIT;
5019 static expert_field ei_ieee80211_not_enough_room_for_anqp_header = EI_INIT;
5020 static expert_field ei_ieee80211_ff_query_request_length = EI_INIT;
5021 static expert_field ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype = EI_INIT;
5022 static expert_field ei_ieee80211_qos_info_bad_ftype = EI_INIT;
5023 static expert_field ei_ieee80211_qos_bad_aifsn = EI_INIT;
5024 static expert_field ei_ieee80211_pmkid_count_too_large = EI_INIT;
5025 static expert_field ei_ieee80211_ff_anqp_venue_length = EI_INIT;
5026 static expert_field ei_ieee80211_ff_anqp_roaming_consortium_oi_len = EI_INIT;
5027 static expert_field ei_ieee80211_tag_length = EI_INIT;
5028 static expert_field ei_ieee80211_missing_data = EI_INIT;
5029 static expert_field ei_ieee80211_rsn_pmkid_count = EI_INIT;
5030 static expert_field ei_ieee80211_fc_retry = EI_INIT;
5031 static expert_field ei_ieee80211_tag_wnm_sleep_mode_no_key_data = EI_INIT;
5032 static expert_field ei_ieee80211_dmg_subtype = EI_INIT;
5033 static expert_field ei_ieee80211_vht_action = EI_INIT;
5034 static expert_field ei_ieee80211_mesh_peering_unexpected = EI_INIT;
5035 static expert_field ei_ieee80211_fcs = EI_INIT;
5036 static expert_field ei_ieee80211_mismatched_akm_suite = EI_INIT;
5038 /* 802.11ad trees */
5039 static gint ett_dynamic_alloc_tree = -1;
5040 static gint ett_ssw_tree = -1;
5041 static gint ett_bf_tree = -1;
5042 static gint ett_sswf_tree = -1;
5043 static gint ett_brp_tree = -1;
5044 static gint ett_blm_tree = -1;
5045 static gint ett_bic_tree = -1;
5046 static gint ett_dmg_params_tree = -1;
5047 static gint ett_cc_tree = -1;
5048 static gint ett_rcsi_tree = -1;
5049 static gint ett_80211_ext = -1;
5050 static gint ett_allocation_tree = -1;
5051 static gint ett_sta_info = -1;
5053 static const fragment_items frag_items = {
5056 &hf_ieee80211_fragments,
5057 &hf_ieee80211_fragment,
5058 &hf_ieee80211_fragment_overlap,
5059 &hf_ieee80211_fragment_overlap_conflict,
5060 &hf_ieee80211_fragment_multiple_tails,
5061 &hf_ieee80211_fragment_too_long_fragment,
5062 &hf_ieee80211_fragment_error,
5063 &hf_ieee80211_fragment_count,
5064 &hf_ieee80211_reassembled_in,
5065 &hf_ieee80211_reassembled_length,
5066 /* Reassembled data field */
5071 static const enum_val_t wlan_ignore_prot_options[] = {
5072 { "no", "No", WLAN_IGNORE_PROT_NO },
5073 { "without_iv", "Yes - without IV", WLAN_IGNORE_PROT_WO_IV },
5074 { "with_iv", "Yes - with IV", WLAN_IGNORE_PROT_W_IV },
5078 static int wlan_address_type = -1;
5079 static int wlan_bssid_address_type = -1;
5081 static address bssid_broadcast;
5083 is_broadcast_bssid(const address *bssid) {
5084 return addresses_equal(&bssid_broadcast, bssid);
5087 static dissector_handle_t ieee80211_handle;
5088 static dissector_handle_t wlan_withoutfcs_handle;
5089 static dissector_handle_t llc_handle;
5090 static dissector_handle_t ipx_handle;
5091 static dissector_handle_t eth_withoutfcs_handle;
5093 static capture_dissector_handle_t llc_cap_handle;
5094 static capture_dissector_handle_t ipx_cap_handle;
5096 static int wlan_tap = -1;
5098 static const value_string access_network_type_vals[] = {
5099 { 0, "Private network" },
5100 { 1, "Private network with guest access" },
5101 { 2, "Chargeable public network" },
5102 { 3, "Free public network" },
5103 { 4, "Personal device network" },
5104 { 5, "Emergency services only network" },
5105 { 14, "Test or experimental" },
5110 static const value_string adv_proto_id_vals[] = {
5111 { 0, "Access Network Query Protocol"},
5112 { 1, "MIH Information Service"},
5113 { 2, "MIH Command and Event Services Capability Discovery"},
5114 { 3, "Emergency Alert System (EAS)"},
5115 { 4, "Location-to-Service Translation Protocol"},
5116 {221, "Vendor Specific"},
5120 static const value_string timeout_int_types[] = {
5121 {1, "Reassociation deadline interval (TUs)"},
5122 {2, "Key lifetime interval (seconds)"},
5123 {3, "Association Comeback time (TUs)"},
5124 {4, "Time to start (TUs)"},
5128 static const value_string tdls_action_codes[] = {
5129 {TDLS_SETUP_REQUEST, "TDLS Setup Request"},
5130 {TDLS_SETUP_RESPONSE, "TDLS Setup Response"},
5131 {TDLS_SETUP_CONFIRM, "TDLS Setup Confirm"},
5132 {TDLS_TEARDOWN, "TDLS Teardown"},
5133 {TDLS_PEER_TRAFFIC_INDICATION, "TDLS Peer Traffic Indication"},
5134 {TDLS_CHANNEL_SWITCH_REQUEST, "TDLS Channel Switch Request"},
5135 {TDLS_CHANNEL_SWITCH_RESPONSE, "TDLS Channel Switch Response"},
5136 {TDLS_PEER_PSM_REQUEST, "TDLS Peer PSM Request"},
5137 {TDLS_PEER_PSM_RESPONSE, "TDLS Peer PSM Response"},
5138 {TDLS_PEER_TRAFFIC_RESPONSE, "TDLS Peer Traffic Response"},
5139 {TDLS_DISCOVERY_REQUEST, "TDLS Discovery Request"},
5142 static value_string_ext tdls_action_codes_ext = VALUE_STRING_EXT_INIT(tdls_action_codes);
5144 static const value_string rm_action_codes[] = {
5145 {RM_ACTION_RADIO_MEASUREMENT_REQUEST, "Radio Measurement Request"},
5146 {RM_ACTION_RADIO_MEASUREMENT_REPORT, "Radio Measurement Report"},
5147 {RM_ACTION_LINK_MEASUREMENT_REQUEST, "Link Measurement Request"},
5148 {RM_ACTION_LINK_MEASUREMENT_REPORT, "Link Measurement Report"},
5149 {RM_ACTION_NEIGHBOR_REPORT_REQUEST, "Neighbor Report Request"},
5150 {RM_ACTION_NEIGHBOR_REPORT_RESPONSE, "Neighbor Report Response"},
5153 static value_string_ext rm_action_codes_ext = VALUE_STRING_EXT_INIT(rm_action_codes);
5155 static const val64_string number_of_taps_values[] = {
5163 AIRPDCAP_CONTEXT airpdcap_ctx;
5165 #define PSMP_STA_INFO_BROADCAST 0
5166 #define PSMP_STA_INFO_MULTICAST 1
5167 #define PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED 2
5169 #define PSMP_STA_INFO_FLAG_TYPE 0x00000003
5170 #define PSMP_STA_INFO_FLAG_DTT_START 0x00001FFC
5171 #define PSMP_STA_INFO_FLAG_DTT_DURATION 0x001FE000
5173 #define PSMP_STA_INFO_FLAG_STA_ID 0x001FFFE0
5175 #define PSMP_STA_INFO_FLAG_UTT_START 0x0000FFE0
5176 #define PSMP_STA_INFO_FLAG_UTT_DURATION 0x03FF0000
5178 #define PSMP_STA_INFO_FLAG_IA_RESERVED 0xFC000000
5180 static const value_string ff_psmp_sta_info_flags[] = {
5181 { PSMP_STA_INFO_BROADCAST, "Broadcast"},
5182 { PSMP_STA_INFO_MULTICAST, "Multicast"},
5183 { PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED, "Individually Addressed"},
5188 wlan_conv_get_filter_type(conv_item_t* conv, conv_filter_type_e filter)
5190 if ((filter == CONV_FT_SRC_ADDRESS) && ((conv->src_address.type == AT_ETHER) || (conv->src_address.type == wlan_address_type)))
5193 if ((filter == CONV_FT_DST_ADDRESS) && ((conv->dst_address.type == AT_ETHER) || (conv->dst_address.type == wlan_address_type)))
5196 if ((filter == CONV_FT_ANY_ADDRESS) && ((conv->src_address.type == AT_ETHER) || (conv->src_address.type == wlan_address_type)))
5199 return CONV_FILTER_INVALID;
5202 static ct_dissector_info_t wlan_ct_dissector_info = {&wlan_conv_get_filter_type};
5205 wlan_conversation_packet(void *pct, packet_info *pinfo, epan_dissect_t *edt _U_, const void *vip)
5207 conv_hash_t *hash = (conv_hash_t*) pct;
5208 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
5210 add_conversation_table_data(hash, &whdr->src, &whdr->dst, 0, 0, 1, pinfo->fd->pkt_len, &pinfo->rel_ts, &pinfo->abs_ts, &wlan_ct_dissector_info, PT_NONE);
5216 wlan_host_get_filter_type(hostlist_talker_t* host, conv_filter_type_e filter)
5218 if ((filter == CONV_FT_ANY_ADDRESS) && (host->myaddress.type == AT_ETHER))
5221 return CONV_FILTER_INVALID;
5224 static hostlist_dissector_info_t wlan_host_dissector_info = {&wlan_host_get_filter_type};
5227 wlan_hostlist_packet(void *pit, packet_info *pinfo, epan_dissect_t *edt _U_, const void *vip)
5229 conv_hash_t *hash = (conv_hash_t*) pit;
5230 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
5232 /* Take two "add" passes per packet, adding for each direction, ensures that all
5233 packets are counted properly (even if address is sending to itself)
5234 XXX - this could probably be done more efficiently inside hostlist_table */
5235 add_hostlist_table_data(hash, &whdr->src, 0, TRUE, 1, pinfo->fd->pkt_len, &wlan_host_dissector_info, PT_NONE);
5236 add_hostlist_table_data(hash, &whdr->dst, 0, FALSE, 1, pinfo->fd->pkt_len, &wlan_host_dissector_info, PT_NONE);
5242 wlan_col_filter_str(const address* addr _U_, gboolean is_src)
5251 wlan_bssid_col_filter_str(const address* addr _U_, gboolean is_src _U_)
5253 return "wlan.bssid";
5258 beacon_interval_base_custom(gchar *result, guint32 beacon_interval)
5262 temp_double = (double)beacon_interval;
5263 g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (temp_double * 1024 / 1000000));
5267 allocation_duration_base_custom(gchar *result, guint32 allocation_duration)
5271 temp_double = (double)allocation_duration;
5272 g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (temp_double / 1000000));
5276 extra_one_base_custom(gchar *result, guint32 value)
5278 g_snprintf(result, ITEM_LABEL_LENGTH, "%d", value+1);
5282 extra_one_mul_two_base_custom(gchar *result, guint32 value)
5284 g_snprintf(result, ITEM_LABEL_LENGTH, "%d", (value+1)*2);
5287 /* ************************************************************************* */
5288 /* Mesh Control field helper functions
5290 * Per IEEE 802.11s Draft 12.0 section 7.2.2.1:
5292 * The frame body consists of either:
5293 * The MSDU (or a fragment thereof), the Mesh Control field (if and only if the
5294 * frame is transmitted by a mesh STA and the Mesh Control Present subfield of
5295 * the QoS Control field is 1)...
5297 * 8.2.4.5.1 "QoS Control field structure", table 8-4, in 802.11-2012,
5298 * seems to indicate that the bit that means "Mesh Control Present" in
5299 * frames sent by mesh STAs in a mesh BSS is part of the TXOP Limit field,
5300 * the AP PS Buffer State field, the TXOP Duration Requested field, or the
5301 * Queue Size field in some data frames in non-mesh BSSes.
5303 * We need a statefull sniffer for that. For now, use heuristics.
5305 * Notably, only mesh data frames contain the Mesh Control field in the header.
5306 * Other frames that contain mesh control (i.e., multihop action frames) have
5307 * it deeper in the frame body where it can be definitively identified.
5308 * Further, mesh data frames always have to-ds and from-ds either 11 or 01. We
5309 * use these facts to make our heuristics more reliable.
5310 * ************************************************************************* */
5312 has_mesh_control(guint16 fcf, guint16 qos_ctl, guint8 mesh_flags)
5314 /* assume mesh control present if the QOS field's Mesh Control Present bit is
5315 * set, all reserved bits in the mesh_flags field are zero, and the address
5316 * extension mode is not a reserved value.
5318 return (((FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T4) || (FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T2)) &&
5319 (QOS_MESH_CONTROL_PRESENT(qos_ctl)) &&
5320 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION) == 0) &&
5321 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION) != MESH_FLAGS_ADDRESS_EXTENSION));
5325 find_mesh_control_length(guint8 mesh_flags)
5327 return 6 + 6*(mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION);
5330 static mimo_control_t
5331 get_mimo_control(tvbuff_t *tvb, int offset)
5334 mimo_control_t output;
5336 mimo = tvb_get_letohs(tvb, offset);
5338 output.nc = (mimo & 0x0003) + 1;
5339 output.nr = ((mimo & 0x000C) >> 2) + 1;
5340 output.chan_width = (mimo & 0x0010) >> 4;
5341 output.coefficient_size = 4; /* XXX - Is this a good default? */
5343 switch ((mimo & 0x0060) >> 5)
5346 output.grouping = 1;
5350 output.grouping = 2;
5354 output.grouping = 4;
5358 output.grouping = 1;
5362 switch ((mimo & 0x0180) >> 7)
5365 output.coefficient_size = 4;
5369 output.coefficient_size = 5;
5373 output.coefficient_size = 6;
5377 output.coefficient_size = 8;
5381 output.codebook_info = (mimo & 0x0600) >> 9;
5382 output.remaining_matrix_segment = (mimo & 0x3800) >> 11;
5388 get_mimo_na(guint8 nr, guint8 nc)
5390 if ((nr == 2) && (nc == 1)) {
5392 } else if ((nr == 2) && (nc == 2)) {
5394 } else if ((nr == 3) && (nc == 1)) {
5396 } else if ((nr == 3) && (nc == 2)) {
5398 } else if ((nr == 3) && (nc == 3)) {
5400 } else if ((nr == 4) && (nc == 1)) {
5402 } else if ((nr == 4) && (nc == 2)) {
5404 } else if ((nr == 4) && (nc == 3)) {
5406 } else if ((nr == 4) && (nc == 4)) {
5414 get_mimo_ns(gboolean chan_width, guint8 output_grouping)
5420 switch (output_grouping)
5438 switch (output_grouping)
5461 add_mimo_csi_matrices_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
5463 proto_tree *snr_tree;
5464 int csi_matrix_size, start_offset;
5467 start_offset = offset;
5468 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
5469 ett_mimo_report, NULL, "Signal to Noise Ratio");
5471 for (i = 1; i <= mimo_cntrl.nr; i++)
5475 snr = tvb_get_guint8(tvb, offset);
5476 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
5477 snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
5481 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
5482 csi_matrix_size = ns*(3+(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size));
5483 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
5484 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_matrices, tvb, offset, csi_matrix_size, ENC_NA);
5485 offset += csi_matrix_size;
5486 return offset - start_offset;
5490 add_mimo_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
5492 proto_tree *snr_tree;
5493 int csi_matrix_size, start_offset;
5496 start_offset = offset;
5497 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc, ett_mimo_report, NULL, "Signal to Noise Ratio");
5499 for (i = 1; i <= mimo_cntrl.nc; i++)
5503 snr = tvb_get_guint8(tvb, offset);
5504 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
5505 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
5509 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
5510 csi_matrix_size = ns*(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size);
5511 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
5512 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_bf_matrices, tvb, offset, csi_matrix_size, ENC_NA);
5513 offset += csi_matrix_size;
5514 return offset - start_offset;
5518 add_mimo_compressed_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
5520 proto_tree *snr_tree;
5521 int csi_matrix_size, start_offset;
5524 start_offset = offset;
5525 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
5526 ett_mimo_report, NULL, "Signal to Noise Ratio");
5528 for (i = 1; i <= mimo_cntrl.nc; i++)
5532 snr = tvb_get_guint8(tvb, offset);
5533 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
5534 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
5538 na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
5539 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
5540 csi_matrix_size = ns*(na*((mimo_cntrl.codebook_info+1)*2 + 2)/2);
5541 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
5542 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_cbf_matrices, tvb, offset, csi_matrix_size, ENC_NA);
5543 offset += csi_matrix_size;
5544 return offset - start_offset;
5547 /* ************************************************************************* */
5548 /* This is the capture function used to update packet counts */
5549 /* ************************************************************************* */
5551 capture_ieee80211_common(const guchar * pd, int offset, int len,
5552 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U_, gboolean datapad)
5554 guint16 fcf, hdr_length;
5556 if (!BYTES_ARE_IN_FRAME(offset, len, 2))
5559 fcf = pletoh16(&pd[offset]);
5561 if (IS_PROTECTED(FCF_FLAGS(fcf)) && (wlan_ignore_prot == WLAN_IGNORE_PROT_NO))
5564 switch (COMPOSE_FRAME_TYPE (fcf)) {
5569 case DATA_CF_ACK_POLL:
5571 case DATA_QOS_DATA_CF_ACK:
5572 case DATA_QOS_DATA_CF_POLL:
5573 case DATA_QOS_DATA_CF_ACK_POLL:
5575 /* These are data frames that actually contain *data*. */
5576 hdr_length = (FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T4) ? DATA_LONG_HDR_LEN : DATA_SHORT_HDR_LEN;
5578 if (DATA_FRAME_IS_QOS(COMPOSE_FRAME_TYPE(fcf))) {
5579 /* QoS frame, so the header includes a QoS field */
5580 guint16 qosoff; /* Offset of the 2-byte QoS field */
5583 qosoff = hdr_length;
5584 hdr_length += 2; /* Include the QoS field in the header length */
5586 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))) {
5587 /* Frame has a 4-byte HT Control field */
5592 * Does it look as if we have a mesh header?
5593 * Look at the Mesh Control subfield of the QoS field and at the
5594 * purported mesh flag fields.
5596 if (!BYTES_ARE_IN_FRAME(offset, hdr_length, 1))
5599 mesh_flags = pd[hdr_length];
5600 if (has_mesh_control(fcf, pletoh16(&pd[qosoff]), mesh_flags)) {
5601 /* Yes, add the length of that in as well. */
5602 hdr_length += find_mesh_control_length(mesh_flags);
5607 * Include the padding between the 802.11 header and the body,
5608 * as "helpfully" provided by some Atheros adapters.
5610 * XXX - would the mesh header be part of the header or the body
5611 * from the point of view of the Atheros adapters that insert
5612 * the padding, assuming they even recognize a mesh header?
5614 hdr_length = roundup2(hdr_length, 4);
5617 /* I guess some bridges take Netware Ethernet_802_3 frames,
5618 which are 802.3 frames (with a length field rather than
5619 a type field, but with no 802.2 header in the payload),
5620 and just stick the payload into an 802.11 frame. I've seen
5621 captures that show frames of that sort.
5623 We also handle some odd form of encapsulation in which a
5624 complete Ethernet frame is encapsulated within an 802.11
5625 data frame, with no 802.2 header. This has been seen
5628 On top of that, at least at some point it appeared that
5629 the OLPC XO sent out frames with two bytes of 0 between
5630 the "end" of the 802.11 header and the beginning of
5633 So, if the packet doesn't start with 0xaa 0xaa:
5635 we first use the same scheme that linux-wlan-ng does to detect
5636 those encapsulated Ethernet frames, namely looking to see whether
5637 the frame either starts with 6 octets that match the destination
5638 address from the 802.11 header or has 6 octets that match the
5639 source address from the 802.11 header following the first 6 octets,
5640 and, if so, treat it as an encapsulated Ethernet frame;
5642 otherwise, we use the same scheme that we use in the Ethernet
5643 dissector to recognize Netware 802.3 frames, namely checking
5644 whether the packet starts with 0xff 0xff and, if so, treat it
5645 as an encapsulated IPX frame, and then check whether the
5646 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
5648 if (!BYTES_ARE_IN_FRAME(offset+hdr_length, len, 2))
5651 if ((pd[offset+hdr_length] != 0xaa) && (pd[offset+hdr_length+1] != 0xaa)) {
5653 /* XXX - this requires us to parse the header to find the source
5654 and destination addresses. */
5655 if (BYTES_ARE_IN_FRAME(offset+hdr_length, len, 12)) {
5656 /* We have two MAC addresses after the header. */
5657 if ((memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0) ||
5658 (memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0)) {
5659 return capture_eth (pd, offset + hdr_length, len, cpinfo, pseudo_header);
5663 if ((pd[offset+hdr_length] == 0xff) && (pd[offset+hdr_length+1] == 0xff))
5664 return call_capture_dissector (ipx_cap_handle, pd, offset+hdr_length, len, cpinfo, pseudo_header);
5665 else if ((pd[offset+hdr_length] == 0x00) && (pd[offset+hdr_length+1] == 0x00))
5666 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length + 2, len, cpinfo, pseudo_header);
5669 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length, len, cpinfo, pseudo_header);
5679 * Handle 802.11 with a variable-length link-layer header.
5682 capture_ieee80211(const guchar * pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U_)
5684 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, FALSE);
5688 * Handle 802.11 with a variable-length link-layer header and data padding.
5691 capture_ieee80211_datapad(const guchar * pd, int offset, int len,
5692 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U_)
5694 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, TRUE);
5698 /* ************************************************************************* */
5699 /* Add the subtree used to store the fixed parameters */
5700 /* ************************************************************************* */
5702 get_fixed_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size)
5704 proto_item *fixed_fields;
5706 fixed_fields = proto_tree_add_item(tree, hf_ieee80211_fixed_parameters, tvb, start, size, ENC_NA);
5707 proto_item_append_text(fixed_fields, " (%d bytes)", size);
5709 return proto_item_add_subtree(fixed_fields, ett_fixed_parameters);
5713 /* ************************************************************************* */
5714 /* Add the subtree used to store tagged parameters */
5715 /* ************************************************************************* */
5717 get_tagged_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size)
5719 proto_item *tagged_fields;
5721 tagged_fields = proto_tree_add_item(tree, hf_ieee80211_tagged_parameters, tvb, start, -1, ENC_NA);
5722 proto_item_append_text(tagged_fields, " (%d bytes)", size);
5724 return proto_item_add_subtree(tagged_fields, ett_tagged_parameters);
5729 dissect_vendor_action_marvell(proto_tree *tree, tvbuff_t *tvb, int offset)
5733 octet = tvb_get_guint8(tvb, offset);
5734 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_action_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5738 case MRVL_ACTION_MESH_MANAGEMENT:
5739 octet = tvb_get_guint8(tvb, offset);
5740 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5744 case MRVL_MESH_MGMT_ACTION_RREQ:
5745 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5747 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5749 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5751 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5753 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_rreqid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5755 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA);
5757 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5759 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5761 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5763 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5765 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5767 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
5769 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5772 case MRVL_MESH_MGMT_ACTION_RREP:
5773 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5775 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5777 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5779 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5781 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
5783 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5785 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5787 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5789 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA);
5791 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5794 case MRVL_MESH_MGMT_ACTION_RERR:
5795 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5797 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5799 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5801 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
5803 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5818 dissect_advertisement_protocol(packet_info *pinfo, proto_tree *tree,
5819 tvbuff_t *tvb, int offset, gboolean *anqp)
5821 guint8 tag_no, tag_len, left;
5822 proto_item *item = NULL, *adv_item;
5823 proto_tree *adv_tree, *adv_tuple_tree;
5827 tag_no = tvb_get_guint8(tvb, offset);
5829 item = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5831 tag_len = tvb_get_guint8(tvb, offset + 1);
5832 if (tag_no != TAG_ADVERTISEMENT_PROTOCOL) {
5833 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_number,
5834 "Unexpected IE %d (expected Advertisement "
5835 "Protocol)", tag_no);
5839 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
5842 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
5843 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
5844 "Advertisement Protocol: IE must be at least 2 "
5851 adv_tree = proto_tree_add_subtree(tree, tvb, offset, left,
5852 ett_adv_proto, &adv_item, "Advertisement Protocol element");
5857 id = tvb_get_guint8(tvb, offset + 1);
5859 proto_item_append_text(adv_item, ": ANQP");
5860 adv_tuple_tree = proto_tree_add_subtree_format(adv_tree, tvb, offset, 2, ett_adv_proto_tuple, &item,
5861 "Advertisement Protocol Tuple: %s",
5862 val_to_str(id, adv_proto_id_vals,
5865 proto_tree_add_item(adv_tuple_tree,
5866 hf_ieee80211_tag_adv_proto_resp_len_limit, tvb,
5867 offset, 1, ENC_LITTLE_ENDIAN);
5868 proto_tree_add_item(adv_tuple_tree,
5869 hf_ieee80211_tag_adv_proto_pame_bi, tvb,
5870 offset, 1, ENC_LITTLE_ENDIAN);
5873 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_id, tvb,
5874 offset, 1, ENC_LITTLE_ENDIAN);
5878 if ((id == 0) && anqp)
5882 /* Vendor specific */
5883 guint8 len = tvb_get_guint8(tvb, offset);
5887 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
5888 "Vendor specific info length error");
5891 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_vs_info, tvb,
5892 offset, len, ENC_NA);
5899 expert_add_info_format(pinfo, item, &ei_ieee80211_extra_data,
5900 "Unexpected extra data in the end");
5907 dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
5909 while (offset + 2 <= end) {
5910 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
5911 tvb, offset, 2, ENC_LITTLE_ENDIAN);
5914 if (offset != end) {
5915 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
5916 "Unexpected ANQP Query list format");
5921 dissect_hs20_anqp_hs_capability_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
5923 while (offset < end) {
5924 proto_tree_add_item(tree, hf_hs20_anqp_hs_capability_list,
5925 tvb, offset, 1, ENC_LITTLE_ENDIAN);
5931 dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
5939 while (offset + 2 <= end) {
5940 id = tvb_get_letohs(tvb, offset);
5941 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_capability,
5942 tvb, offset, 2, ENC_LITTLE_ENDIAN);
5944 if (id == ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST) {
5945 vtree = proto_item_add_subtree(item, ett_anqp_vendor_capab);
5946 len = tvb_get_letohs(tvb, offset);
5947 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vlen,
5948 tvb, offset, 2, ENC_LITTLE_ENDIAN);
5950 if ((len < 3) || ((offset + len) > end)) {
5951 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_capability);
5954 oui = tvb_get_ntoh24(tvb, offset);
5955 proto_tree_add_item(vtree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
5963 subtype = tvb_get_guint8(tvb, offset);
5964 proto_item_append_text(vtree, " - WFA - %s",
5965 val_to_str(subtype, wfa_subtype_vals,
5967 proto_tree_add_item(vtree, hf_ieee80211_anqp_wfa_subtype,
5968 tvb, offset, 1, ENC_NA);
5972 case WFA_SUBTYPE_HS20_ANQP:
5973 dissect_hs20_anqp_hs_capability_list(vtree, tvb, offset, end);
5976 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
5977 tvb, offset, len, ENC_NA);
5982 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
5983 tvb, offset, len, ENC_NA);
5990 if (offset != end) {
5991 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
5992 "Unexpected ANQP Capability list format");
5996 static const value_string venue_group_vals[] = {
5997 { 0, "Unspecified" },
6000 { 3, "Educational" },
6001 { 4, "Factory and Industrial" },
6002 { 5, "Institutional" },
6003 { 6, "Mercantile" },
6004 { 7, "Residential" },
6006 { 9, "Utility and Miscellaneous" },
6007 { 10, "Vehicular" },
6011 static value_string_ext venue_group_vals_ext = VALUE_STRING_EXT_INIT(venue_group_vals);
6014 dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
6016 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_group,
6017 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6018 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_type,
6019 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
6023 dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
6027 dissect_venue_info(tree, tvb, offset);
6029 while (offset + 4 <= end) {
6030 guint8 vlen = tvb_get_guint8(tvb, offset);
6031 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_length,
6032 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6034 if ((vlen > (end - offset)) || (vlen < 3)) {
6035 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_venue_length);
6038 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_language,
6039 tvb, offset, 3, ENC_ASCII|ENC_NA);
6040 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_name,
6041 tvb, offset + 3, vlen - 3, ENC_UTF_8|ENC_NA);
6046 static const value_string nw_auth_type_vals[] = {
6047 { 0, "Acceptance of terms and conditions" },
6048 { 1, "On-line enrollment supported" },
6049 { 2, "http/https redirection" },
6050 { 3, "DNS redirection" },
6055 dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6057 while (offset + 3 <= end) {
6059 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_indicator,
6060 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6062 len = tvb_get_letohs(tvb, offset);
6063 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url_len,
6064 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6067 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url,
6068 tvb, offset, len, ENC_ASCII|ENC_NA);
6074 add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
6076 const gchar *manuf_name;
6078 manuf_name = tvb_get_manuf_name_if_known(tvb, offset);
6079 if (manuf_name == NULL)
6081 proto_item_append_text(item, " - %s", manuf_name);
6085 dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6091 while (offset < end) {
6092 len = tvb_get_guint8(tvb, offset);
6093 item = proto_tree_add_item(tree,
6094 hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
6095 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6097 if ((len > (end - offset)) || (len < 3)) {
6098 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_roaming_consortium_oi_len);
6101 item = proto_tree_add_item(tree,
6102 hf_ieee80211_ff_anqp_roaming_consortium_oi,
6103 tvb, offset, len, ENC_NA);
6104 add_manuf(item, tvb, offset);
6109 static const value_string ip_addr_avail_ipv6_vals[] = {
6110 { 0, "Address type not available" },
6111 { 1, "Address type available" },
6112 { 2, "Availability of the address type not known" },
6116 static const value_string ip_addr_avail_ipv4_vals[] = {
6117 { 0, "Address type not available" },
6118 { 1, "Public IPv4 address available" },
6119 { 2, "Port-restricted IPv4 address available" },
6120 { 3, "Single NATed private IPv4 address available" },
6121 { 4, "Double NATed private IPv4 address available" },
6122 { 5, "Port-restricted IPv4 address and single NATed IPv4 address available" },
6123 { 6, "Port-restricted IPv4 address and double NATed IPv4 address available" },
6124 { 7, "Availability of the address type is not known" },
6129 dissect_ip_addr_type_availability_info(proto_tree *tree, tvbuff_t *tvb,
6132 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
6133 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6134 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
6135 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6138 static const value_string nai_realm_encoding_vals[] = {
6139 { 0, "Formatted in accordance with RFC 4282" },
6140 { 1, "UTF-8 formatted that is not formatted in accordance with RFC 4282" },
6144 static const value_string nai_realm_auth_param_id_vals[] = {
6145 { 1, "Expanded EAP Method" },
6146 { 2, "Non-EAP Inner Authentication Type" },
6147 { 3, "Inner Authentication EAP Method Type" },
6148 { 4, "Expanded Inner EAP Method" },
6149 { 5, "Credential Type" },
6150 { 6, "Tunneled EAP Method Credential Type" },
6151 { 221, "Vendor Specific" },
6156 dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
6159 proto_item *item, *r_item;
6161 guint8 nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
6162 guint8 auth_param_id;
6163 proto_tree *realm_tree, *eap_tree;
6164 const guint8 *realm;
6166 count = tvb_get_letohs(tvb, offset);
6167 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nai_realm_count,
6168 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6171 len = tvb_get_letohs(tvb, offset);
6172 realm_tree = proto_tree_add_subtree(tree, tvb, offset, 2 + len, ett_nai_realm, &r_item, "NAI Realm Data");
6174 item = proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_field_len,
6175 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6177 if (offset + len > end) {
6178 expert_add_info_format(pinfo, item, &ei_ieee80211_ff_anqp_nai_field_len,
6179 "Invalid NAI Realm List");
6182 f_end = offset + len;
6183 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_encoding,
6184 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6186 nai_len = tvb_get_guint8(tvb, offset);
6187 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_length,
6188 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6190 if (offset + nai_len > f_end) {
6191 expert_add_info_format(pinfo, r_item, &ei_ieee80211_ff_anqp_nai_field_len,
6192 "Invalid NAI Realm Data");
6195 proto_tree_add_item_ret_string(realm_tree, hf_ieee80211_ff_anqp_nai_realm,
6196 tvb, offset, nai_len, ENC_ASCII|ENC_NA, wmem_packet_scope(), &realm);
6198 proto_item_append_text(r_item, " (%s)", realm);
6201 eap_count = tvb_get_guint8(tvb, offset);
6202 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_eap_count,
6203 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6206 while (eap_count > 0) {
6207 eap_len = tvb_get_guint8(tvb, offset);
6208 eap_end = offset + 1 + eap_len;
6209 eap_tree = proto_tree_add_subtree(realm_tree, tvb, offset, 1 + eap_len,
6210 ett_nai_realm_eap, NULL, "EAP Method");
6212 item = proto_tree_add_item(eap_tree,
6213 hf_ieee80211_ff_anqp_nai_realm_eap_len,
6214 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6216 if (offset + eap_len > f_end) {
6217 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_nai_realm_eap_len);
6221 proto_item_append_text(eap_tree, ": %s",
6222 val_to_str_ext(tvb_get_guint8(tvb, offset),
6223 &eap_type_vals_ext, "Unknown (%d)"));
6224 proto_tree_add_item(eap_tree, hf_ieee80211_ff_anqp_nai_realm_eap_method,
6225 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6227 auth_param_count = tvb_get_guint8(tvb, offset);
6228 proto_tree_add_item(eap_tree,
6229 hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
6230 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6233 while (auth_param_count > 0) {
6234 auth_param_id = tvb_get_guint8(tvb, offset);
6235 proto_tree_add_item(eap_tree,
6236 hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
6237 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6239 auth_param_len = tvb_get_guint8(tvb, offset);
6240 proto_tree_add_item(eap_tree,
6241 hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
6242 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6244 item = proto_tree_add_item(
6245 eap_tree, hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
6246 tvb, offset, auth_param_len, ENC_NA);
6247 if ((auth_param_id == 3) && (auth_param_len == 1)) {
6248 guint8 inner_method = tvb_get_guint8(tvb, offset);
6250 str = val_to_str_ext(inner_method, &eap_type_vals_ext, "Unknown (%d)");
6252 proto_item_append_text(eap_tree, " / %s", str);
6253 proto_item_append_text(item, " - %s", str);
6255 offset += auth_param_len;
6270 dissect_3gpp_cellular_network_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
6275 /* See Annex A of 3GPP TS 24.234 v8.1.0 for description */
6276 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_gud, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6278 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_udhl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6280 iei = tvb_get_guint8(tvb, offset);
6281 item = proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_iei, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6283 proto_item_append_text(item, " (PLMN List)");
6287 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_plmn_len, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6289 num = tvb_get_guint8(tvb, offset);
6290 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_num_plmns, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6293 if (tvb_reported_length_remaining(tvb, offset) < 3)
6295 dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, offset, E212_NONE, TRUE);
6302 dissect_domain_name_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6306 while (offset < end) {
6307 len = tvb_get_guint8(tvb, offset);
6308 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name_len,
6309 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6311 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name,
6312 tvb, offset, len, ENC_ASCII|ENC_NA);
6317 #define HS20_ANQP_HS_QUERY_LIST 1
6318 #define HS20_ANQP_HS_CAPABILITY_LIST 2
6319 #define HS20_ANQP_OPERATOR_FRIENDLY_NAME 3
6320 #define HS20_ANQP_WAN_METRICS 4
6321 #define HS20_ANQP_CONNECTION_CAPABILITY 5
6322 #define HS20_ANQP_NAI_HOME_REALM_QUERY 6
6323 #define HS20_ANQP_OPERATING_CLASS_INDICATION 7
6325 static const value_string hs20_anqp_subtype_vals[] = {
6326 { HS20_ANQP_HS_QUERY_LIST, "HS Query list" },
6327 { HS20_ANQP_HS_CAPABILITY_LIST, "HS Capability List" },
6328 { HS20_ANQP_OPERATOR_FRIENDLY_NAME, "Operator Friendly Name" },
6329 { HS20_ANQP_WAN_METRICS, "WAN Metrics" },
6330 { HS20_ANQP_CONNECTION_CAPABILITY, "Connection Capability" },
6331 { HS20_ANQP_NAI_HOME_REALM_QUERY, "NAI Home Realm Query" },
6332 { HS20_ANQP_OPERATING_CLASS_INDICATION, "Operating Class Indication" },
6337 dissect_hs20_anqp_hs_query_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6339 while (offset < end) {
6340 proto_tree_add_item(tree, hf_hs20_anqp_hs_query_list,
6341 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6347 dissect_hs20_anqp_operator_friendly_name(proto_tree *tree, tvbuff_t *tvb,
6348 packet_info *pinfo, int offset, int end)
6350 while (offset + 4 <= end) {
6351 guint8 vlen = tvb_get_guint8(tvb, offset);
6352 proto_item *item = proto_tree_add_item(tree, hf_hs20_anqp_ofn_length,
6353 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6355 if (vlen > end - offset || vlen < 3) {
6356 expert_add_info(pinfo, item, &ei_hs20_anqp_ofn_length);
6359 proto_tree_add_item(tree, hf_hs20_anqp_ofn_language,
6360 tvb, offset, 3, ENC_ASCII|ENC_NA);
6361 proto_tree_add_item(tree, hf_hs20_anqp_ofn_name,
6362 tvb, offset + 3, vlen - 3, ENC_UTF_8|ENC_NA);
6367 static const value_string hs20_wm_link_status_vals[] = {
6371 { 3, "Link in test state" },
6376 dissect_hs20_anqp_wan_metrics(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean request)
6381 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_link_status,
6382 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6383 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_symmetric_link,
6384 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6385 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_at_capacity,
6386 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6387 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_reserved,
6388 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6391 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_downlink_speed,
6392 tvb, offset, 4, ENC_LITTLE_ENDIAN);
6395 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_uplink_speed,
6396 tvb, offset, 4, ENC_LITTLE_ENDIAN);
6399 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_downlink_load,
6400 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6403 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_uplink_load,
6404 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6407 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_lmd,
6408 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6411 static const value_string hs20_cc_status_vals[] = {
6419 dissect_hs20_anqp_connection_capability(proto_tree *tree, tvbuff_t *tvb,
6420 int offset, int end)
6423 while (offset + 4 <= end) {
6424 guint8 ip_proto, status;
6427 ip_proto = tvb_get_guint8(tvb, offset);
6428 port_num = tvb_get_letohs(tvb, offset + 1);
6429 status = tvb_get_guint8(tvb, offset + 3);
6431 tuple = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_hs20_cc_proto_port_tuple, NULL,
6432 "ProtoPort Tuple - ip_proto=%u port_num=%u status=%s",
6434 val_to_str(status, hs20_cc_status_vals,
6436 proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_ip_proto,
6437 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6439 proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_port_num,
6440 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6442 proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_status,
6443 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6449 dissect_hs20_anqp_nai_home_realm_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
6450 int offset, int end)
6455 proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_count,
6456 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6459 while (offset + 2 <= end) {
6460 proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_encoding_type,
6461 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6463 len = tvb_get_guint8(tvb, offset);
6464 item = proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_length,
6465 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6467 if (offset + len > end) {
6468 expert_add_info(pinfo, item, &ei_hs20_anqp_nai_hrq_length);
6471 proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_realm_name,
6472 tvb, offset, len, ENC_ASCII|ENC_NA);
6478 dissect_hs20_anqp_oper_class_indic(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6480 while (offset < end) {
6481 proto_tree_add_item(tree, hf_hs20_anqp_oper_class_indic,
6482 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6488 dissect_hs20_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6489 int end, gboolean request, int idx)
6493 subtype = tvb_get_guint8(tvb, offset);
6494 proto_item_append_text(tree, " - HS 2.0 %s",
6495 val_to_str(subtype, hs20_anqp_subtype_vals,
6498 col_append_fstr(pinfo->cinfo, COL_INFO, " HS 2.0 %s",
6499 val_to_str(subtype, hs20_anqp_subtype_vals,
6501 } else if (idx == 1) {
6502 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
6504 proto_tree_add_item(tree, hf_hs20_anqp_subtype, tvb, offset, 1,
6508 proto_tree_add_item(tree, hf_hs20_anqp_reserved, tvb, offset, 1,
6513 case HS20_ANQP_HS_QUERY_LIST:
6514 dissect_hs20_anqp_hs_query_list(tree, tvb, offset, end);
6516 case HS20_ANQP_HS_CAPABILITY_LIST:
6517 dissect_hs20_anqp_hs_capability_list(tree, tvb, offset, end);
6519 case HS20_ANQP_OPERATOR_FRIENDLY_NAME:
6520 dissect_hs20_anqp_operator_friendly_name(tree, tvb, pinfo, offset, end);
6522 case HS20_ANQP_WAN_METRICS:
6523 dissect_hs20_anqp_wan_metrics(tree, tvb, offset, request);
6525 case HS20_ANQP_CONNECTION_CAPABILITY:
6526 dissect_hs20_anqp_connection_capability(tree, tvb, offset, end);
6528 case HS20_ANQP_NAI_HOME_REALM_QUERY:
6529 dissect_hs20_anqp_nai_home_realm_query(tree, tvb, pinfo, offset, end);
6531 case HS20_ANQP_OPERATING_CLASS_INDICATION:
6532 dissect_hs20_anqp_oper_class_indic(tree, tvb, offset, end);
6537 proto_tree_add_item(tree, hf_hs20_anqp_payload, tvb, offset,
6538 end - offset, ENC_NA);
6544 dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6545 gboolean request, int idx)
6551 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_id,
6552 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6553 id = tvb_get_letohs(tvb, offset);
6554 if (id != ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST) {
6556 proto_item_append_text(tree, " - %s",
6557 val_to_str_ext(id, &anqp_info_id_vals_ext, "Unknown (%u)"));
6558 col_append_fstr(pinfo->cinfo, COL_INFO, " %s",
6559 val_to_str_ext(id, &anqp_info_id_vals_ext, "Unknown (%u)"));
6560 } else if (idx == 1) {
6561 proto_item_append_text(tree, ", ..");
6562 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
6565 tree = proto_item_add_subtree(item, ett_gas_anqp);
6567 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_length,
6568 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6569 len = tvb_get_letohs(tvb, offset);
6571 if (tvb_reported_length_remaining(tvb, offset) < len) {
6572 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_info_length);
6577 case ANQP_INFO_ANQP_QUERY_LIST:
6578 dissect_anqp_query_list(tree, tvb, pinfo, offset, offset + len);
6580 case ANQP_INFO_ANQP_CAPAB_LIST:
6581 dissect_anqp_capab_list(tree, tvb, pinfo, offset, offset + len);
6583 case ANQP_INFO_VENUE_NAME_INFO:
6584 dissect_venue_name_info(tree, tvb, pinfo, offset, offset + len);
6586 case ANQP_INFO_NETWORK_AUTH_TYPE_INFO:
6587 dissect_network_auth_type(tree, tvb, offset, offset + len);
6589 case ANQP_INFO_ROAMING_CONSORTIUM_LIST:
6590 dissect_roaming_consortium_list(tree, tvb, pinfo, offset, offset + len);
6592 case ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO:
6593 dissect_ip_addr_type_availability_info(tree, tvb, offset);
6595 case ANQP_INFO_NAI_REALM_LIST:
6596 dissect_nai_realm_list(tree, tvb, pinfo, offset, offset + len);
6598 case ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO:
6599 dissect_3gpp_cellular_network_info(tree, tvb, pinfo, offset);
6601 case ANQP_INFO_DOMAIN_NAME_LIST:
6602 dissect_domain_name_list(tree, tvb, offset, offset + len);
6604 case ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST:
6605 oui = tvb_get_ntoh24(tvb, offset);
6606 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
6611 proto_tree_add_item(tree, hf_ieee80211_anqp_wfa_subtype, tvb, offset, 1,
6613 switch (tvb_get_guint8(tvb, offset)) {
6614 case WFA_SUBTYPE_P2P:
6615 dissect_wifi_p2p_anqp(pinfo, tree, tvb, offset + 1, request);
6617 case WFA_SUBTYPE_HS20_ANQP:
6618 dissect_hs20_anqp(tree, tvb, pinfo, offset + 1, offset + len - 3, request,
6624 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
6625 tvb, offset, len, ENC_NA);
6630 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
6631 tvb, offset, len, ENC_NA);
6639 dissect_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, gboolean request)
6643 proto_item_append_text(tree, ": ANQP ");
6644 proto_item_append_text(tree, request ? "Request" : "Response");
6645 if (tvb_reported_length_remaining(tvb, offset) < 4) {
6646 expert_add_info_format(pinfo, tree, &ei_ieee80211_not_enough_room_for_anqp_header,
6647 "Not enough room for ANQP header");
6650 col_append_fstr(pinfo->cinfo, COL_INFO, ", ANQP %s",
6651 request ? "Req" : "Resp");
6652 while (tvb_reported_length_remaining(tvb, offset) > 0) {
6653 offset += dissect_anqp_info(tree, tvb, pinfo, offset, request, idx);
6659 dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6667 /* Query Request Length (2 octets) */
6668 req_len = tvb_get_letohs(tvb, offset);
6670 query = proto_tree_add_subtree(tree, tvb, offset, 2 + req_len, ett_gas_query, &item, "Query Request");
6671 if (tvb_reported_length_remaining(tvb, offset) < 2 + req_len) {
6672 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_request_length);
6673 return tvb_reported_length_remaining(tvb, offset);
6676 proto_tree_add_item(query, hf_ieee80211_ff_query_request_length,
6677 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6680 * Query Request (GAS query; formatted per protocol specified in the
6681 * Advertisement Protocol IE)
6684 dissect_anqp(query, tvb, pinfo, offset, TRUE);
6686 proto_tree_add_item(query, hf_ieee80211_ff_query_request,
6687 tvb, offset, req_len, ENC_NA);
6690 return offset - start;
6694 dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6702 /* Query Response Length (2 octets) */
6703 resp_len = tvb_get_letohs(tvb, offset);
6705 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
6706 ett_gas_query, &item, "Query Response");
6707 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
6708 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
6709 return tvb_reported_length_remaining(tvb, offset);
6712 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
6713 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6715 /* Query Response (optional) */
6718 dissect_anqp(query, tvb, pinfo, offset, FALSE);
6720 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
6721 tvb, offset, resp_len, ENC_NA);
6725 return offset - start;
6728 static reassembly_table gas_reassembly_table;
6731 ieee80211_gas_reassembly_init(void)
6733 reassembly_table_init(&gas_reassembly_table,
6734 &addresses_reassembly_table_functions);
6737 static gint ett_gas_resp_fragment = -1;
6738 static gint ett_gas_resp_fragments = -1;
6740 static int hf_ieee80211_gas_resp_fragments = -1;
6741 static int hf_ieee80211_gas_resp_fragment = -1;
6742 static int hf_ieee80211_gas_resp_fragment_overlap = -1;
6743 static int hf_ieee80211_gas_resp_fragment_overlap_conflict = -1;
6744 static int hf_ieee80211_gas_resp_fragment_multiple_tails = -1;
6745 static int hf_ieee80211_gas_resp_fragment_too_long_fragment = -1;
6746 static int hf_ieee80211_gas_resp_fragment_error = -1;
6747 static int hf_ieee80211_gas_resp_fragment_count = -1;
6748 static int hf_ieee80211_gas_resp_reassembled_in = -1;
6749 static int hf_ieee80211_gas_resp_reassembled_length = -1;
6751 static const fragment_items gas_resp_frag_items = {
6752 &ett_gas_resp_fragment,
6753 &ett_gas_resp_fragments,
6754 &hf_ieee80211_gas_resp_fragments,
6755 &hf_ieee80211_gas_resp_fragment,
6756 &hf_ieee80211_gas_resp_fragment_overlap,
6757 &hf_ieee80211_gas_resp_fragment_overlap_conflict,
6758 &hf_ieee80211_gas_resp_fragment_multiple_tails,
6759 &hf_ieee80211_gas_resp_fragment_too_long_fragment,
6760 &hf_ieee80211_gas_resp_fragment_error,
6761 &hf_ieee80211_gas_resp_fragment_count,
6762 &hf_ieee80211_gas_resp_reassembled_in,
6763 &hf_ieee80211_gas_resp_reassembled_length,
6764 /* Reassembled data field */
6766 "GAS Response fragments"
6770 dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6771 gboolean anqp, guint8 frag, gboolean more,
6772 guint8 dialog_token)
6779 /* Query Response Length (2 octets) */
6780 resp_len = tvb_get_letohs(tvb, offset);
6782 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
6783 ett_gas_query, &item, "Query Response");
6784 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
6785 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
6786 return tvb_reported_length_remaining(tvb, offset);
6789 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
6790 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6792 /* Query Response (optional) */
6794 if (anqp && (frag == 0) && !more)
6795 dissect_anqp(query, tvb, pinfo, offset, FALSE);
6797 fragment_head *frag_msg;
6798 gboolean save_fragmented;
6801 save_fragmented = pinfo->fragmented;
6802 pinfo->fragmented = TRUE;
6803 frag_msg = fragment_add_seq_check(&gas_reassembly_table, tvb, offset,
6804 pinfo, dialog_token, NULL,
6805 frag, resp_len, more);
6806 new_tvb = process_reassembled_data(tvb, offset, pinfo,
6807 "Reassembled GAS Query Response",
6808 frag_msg, &gas_resp_frag_items,
6812 dissect_anqp(query, new_tvb, pinfo, 0, FALSE);
6814 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
6816 tvb_reported_length_remaining(new_tvb, 0),
6820 /* The old tvb cannot be used anymore */
6821 ieee80211_tvb_invalid = TRUE;
6823 pinfo->fragmented = save_fragmented;
6828 return offset - start;
6831 /* ************************************************************************* */
6832 /* Dissect and add fixed mgmt fields to protocol tree */
6833 /* ************************************************************************* */
6835 static guint64 last_timestamp;
6838 add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6840 last_timestamp = tvb_get_letoh64(tvb, offset);
6841 proto_tree_add_item(tree, hf_ieee80211_ff_timestamp, tvb, offset, 8,
6847 add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
6849 proto_tree_add_item(tree, hf_ieee80211_ff_beacon_interval, tvb, offset, 2,
6851 col_append_fstr(pinfo->cinfo, COL_INFO, ", BI=%d",
6852 tvb_get_letohs(tvb, offset));
6857 add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6859 proto_item *cap_item;
6860 proto_tree *cap_tree;
6862 cap_item = proto_tree_add_item(tree, hf_ieee80211_ff_capture, tvb, offset, 2,
6864 cap_tree = proto_item_add_subtree(cap_item, ett_cap_tree);
6866 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ess, tvb, offset, 2,
6868 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ibss, tvb, offset, 2,
6870 if ((tvb_get_letohs(tvb, offset) & 0x0001) != 0) {
6872 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_ap_poll, tvb, offset, 2,
6876 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_sta_poll, tvb, offset, 2,
6880 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_privacy, tvb, offset, 2,
6882 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_preamble, tvb, offset, 2,
6884 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_pbcc, tvb, offset, 2,
6886 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_agility, tvb, offset, 2,
6888 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_spec_man, tvb, offset, 2,
6890 proto_tree_add_item(cap_tree, hf_ieee80211_ff_short_slot_time, tvb, offset,
6891 2, ENC_LITTLE_ENDIAN);
6892 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_apsd, tvb, offset, 2,
6894 proto_tree_add_item(cap_tree, hf_ieee80211_ff_radio_measurement, tvb, offset, 2,
6896 proto_tree_add_item(cap_tree, hf_ieee80211_ff_dsss_ofdm, tvb, offset, 2,
6898 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_del_blk_ack, tvb, offset, 2,
6900 proto_tree_add_item(cap_tree, hf_ieee80211_ff_cf_imm_blk_ack, tvb, offset, 2,
6906 add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6908 proto_tree_add_item(tree, hf_ieee80211_ff_auth_alg, tvb, offset, 2,
6914 add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6916 proto_tree_add_item(tree, hf_ieee80211_ff_auth_seq, tvb, offset, 2,
6922 add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6924 proto_tree_add_item(tree, hf_ieee80211_ff_current_ap, tvb, offset, 6,
6930 add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6932 proto_tree_add_item(tree, hf_ieee80211_ff_listen_ival, tvb, offset, 2,
6938 add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6940 proto_tree_add_item(tree, hf_ieee80211_ff_reason, tvb, offset, 2,
6946 add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6948 proto_tree_add_item(tree, hf_ieee80211_ff_assoc_id, tvb, offset, 2,
6954 add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6956 proto_tree_add_item(tree, hf_ieee80211_ff_status_code, tvb, offset, 2,
6962 add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6964 proto_tree_add_item(tree, hf_ieee80211_ff_category_code, tvb, offset, 1,
6970 add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6972 proto_tree_add_item(tree, hf_ieee80211_ff_action_code, tvb, offset, 1,
6978 add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6980 proto_tree_add_item(tree, hf_ieee80211_ff_dialog_token, tvb, offset, 1,
6986 add_ff_followup_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6988 proto_tree_add_item(tree, hf_ieee80211_ff_followup_dialog_token, tvb, offset, 1,
6994 add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6996 proto_tree_add_item(tree, hf_ieee80211_ff_wme_action_code, tvb, offset, 1,
7002 add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7004 proto_tree_add_item(tree, hf_ieee80211_ff_wme_status_code, tvb, offset, 1,
7010 add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7012 proto_tree_add_item(tree, hf_ieee80211_ff_qos_action_code, tvb, offset, 1,
7018 add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7020 proto_tree_add_item(tree, hf_ieee80211_ff_ba_action, tvb, offset, 1,
7026 add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7028 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_params,
7029 ett_ff_ba_param_tree,
7030 ieee80211_ff_block_ack_params_fields,
7036 add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7038 proto_tree_add_item(tree, hf_ieee80211_ff_block_ack_timeout, tvb, offset, 2,
7044 add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7046 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_ssc,
7047 ett_ff_ba_ssc_tree, ieee80211_ff_block_ack_ssc_fields,
7053 add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7055 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_tsinfo,
7056 ett_tsinfo_tree, ieee80211_tsinfo_fields,
7062 add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7064 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_action, tvb, offset, 1,
7070 add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7072 proto_tree_add_item(tree, hf_ieee80211_ff_multihop_action, tvb, offset, 1,
7078 add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7083 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_flags, tvb, offset, 1,
7085 flags = tvb_get_guint8(tvb, offset);
7087 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_ttl, tvb, offset, 1,
7090 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_sequence, tvb, offset, 4,
7094 switch (flags & 0x03) {
7096 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr4, tvb, offset, 6,
7101 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr5, tvb, offset, 6,
7104 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr6, tvb, offset, 6,
7109 proto_item_append_text(tree, " Unknown Address Extension Mode");
7112 /* no default action */
7116 return offset - start;
7120 add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7122 proto_tree_add_item(tree, hf_ieee80211_ff_selfprot_action, tvb, offset, 1,
7128 add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7130 proto_tree_add_item(tree, hf_ieee80211_ff_dls_action_code, tvb, offset, 1,
7136 add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7138 proto_tree_add_item(tree, hf_ieee80211_ff_dst_mac_addr, tvb, offset, 6,
7144 add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7146 proto_tree_add_item(tree, hf_ieee80211_ff_src_mac_addr, tvb, offset, 6,
7152 add_ff_req_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7154 proto_tree_add_item(tree, hf_ieee80211_ff_req_ap_addr, tvb, offset, 6,
7160 add_ff_res_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7162 proto_tree_add_item(tree, hf_ieee80211_ff_res_ap_addr, tvb, offset, 6,
7168 add_ff_check_beacon(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7170 proto_tree_add_item(tree, hf_ieee80211_ff_check_beacon, tvb, offset, 1,
7176 add_ff_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7178 proto_tree_add_item(tree, hf_ieee80211_ff_tod, tvb, offset, 4,
7184 add_ff_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7186 proto_tree_add_item(tree, hf_ieee80211_ff_toa, tvb, offset, 4,
7192 add_ff_max_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7194 proto_tree_add_item(tree, hf_ieee80211_ff_max_tod_err, tvb, offset, 1,
7200 add_ff_max_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7202 proto_tree_add_item(tree, hf_ieee80211_ff_max_toa_err, tvb, offset, 1,
7208 add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7210 proto_tree_add_item(tree, hf_ieee80211_ff_dls_timeout, tvb, offset, 2,
7216 add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7218 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_delba_param,
7219 ett_ff_ba_param_tree, ieee80211_ff_delba_param_fields,
7225 add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7227 proto_tree_add_item(tree, hf_ieee80211_ff_max_reg_pwr, tvb, offset, 2,
7233 add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7235 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
7236 2, ENC_LITTLE_ENDIAN);
7241 add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7243 proto_tree_add_item(tree, hf_ieee80211_ff_country_str, tvb, offset, 3,
7249 add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7251 proto_tree_add_item(tree, hf_ieee80211_ff_max_tx_pwr, tvb, offset, 1,
7257 add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7259 proto_tree_add_item(tree, hf_ieee80211_ff_tx_pwr_used, tvb, offset, 1,
7265 add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7267 proto_tree_add_item(tree, hf_ieee80211_ff_transceiver_noise_floor, tvb,
7268 offset, 1, ENC_LITTLE_ENDIAN);
7273 add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7275 proto_tree_add_item(tree, hf_ieee80211_ff_channel_width, tvb, offset, 1,
7280 /* QoS Info: 802.11-2012 8.4.1.17 */
7282 add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7284 /* From AP so decode as AP: Figure 8-51-QoS Info field when sent by a AP */
7285 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
7286 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
7287 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
7292 /* QoS Info: 802.11-2012 8.4.1.17 */
7294 add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7296 /* To AP so decode as STA: Figure 8-52-QoS Info field when set by a non-AP STA */
7297 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_sta,
7298 ett_ff_qos_info, ieee80211_ff_qos_info_sta_fields,
7299 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
7304 add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7306 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_sm_pwr_save,
7307 ett_ff_sm_pwr_save, ieee80211_ff_sw_pwr_save_fields,
7313 add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7315 proto_tree_add_item(tree, hf_ieee80211_ff_pco_phase_cntrl, tvb, offset, 1,
7321 add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7323 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_psmp_param_set,
7324 ett_ff_psmp_param_set,
7325 ieee80211_ff_psmp_param_set_fields,
7331 add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7333 proto_item *mimo_item;
7334 proto_tree *mimo_tree;
7336 mimo_item = proto_tree_add_item(tree, hf_ieee80211_ff_mimo_cntrl, tvb,
7338 mimo_tree = proto_item_add_subtree(mimo_item, ett_ff_mimo_cntrl);
7340 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_nc_index, tvb,
7341 offset, 1, ENC_LITTLE_ENDIAN);
7342 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_nr_index, tvb,
7343 offset, 1, ENC_LITTLE_ENDIAN);
7344 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_channel_width, tvb,
7345 offset, 1, ENC_LITTLE_ENDIAN);
7346 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_grouping, tvb,
7347 offset, 1, ENC_LITTLE_ENDIAN);
7348 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_coefficient_size,
7349 tvb, offset, 2, ENC_LITTLE_ENDIAN);
7350 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_codebook_info, tvb,
7351 offset, 1, ENC_LITTLE_ENDIAN);
7352 proto_tree_add_item(mimo_tree,
7353 hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment, tvb,
7354 offset, 1, ENC_LITTLE_ENDIAN);
7355 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_reserved, tvb,
7356 offset, 1, ENC_LITTLE_ENDIAN);
7359 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
7360 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7366 add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7368 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ant_selection,
7369 ett_ff_ant_sel, ieee80211_ff_ant_selection_fields,
7375 add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
7376 packet_info *pinfo _U_, int offset)
7378 proto_tree_add_bitmask(tree, tvb, offset,
7379 hf_ieee80211_ff_ext_channel_switch_announcement,
7380 ett_ff_chan_switch_announce,
7381 ieee80211_ff_ext_channel_switch_announcement_fields,
7387 add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7389 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ht_info,
7390 ett_ff_ht_info, ieee80211_ff_ht_info_fields,
7396 add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7398 proto_tree_add_item(tree, hf_ieee80211_ff_ht_action, tvb, offset, 1,
7404 add_ff_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7406 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_action_code, tvb, offset, 1,
7412 add_ff_dmg_pwr_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7414 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_pwr_mgmt, tvb, offset, 1,
7420 add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7422 proto_item *psmp_item;
7423 proto_tree *psmp_tree;
7425 psmp_item = proto_tree_add_item(tree, hf_ieee80211_ff_psmp_sta_info, tvb,
7426 offset, 8, ENC_LITTLE_ENDIAN);
7427 psmp_tree = proto_item_add_subtree(psmp_item, ett_ff_psmp_sta_info);
7429 proto_tree_add_item(psmp_item, hf_ieee80211_ff_psmp_sta_info_type, tvb,
7430 offset, 4, ENC_LITTLE_ENDIAN);
7432 switch (tvb_get_letohl(tvb, offset) & PSMP_STA_INFO_FLAG_TYPE) {
7433 case PSMP_STA_INFO_BROADCAST:
7434 proto_tree_add_item(psmp_tree,
7435 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
7436 offset, 4, ENC_LITTLE_ENDIAN);
7437 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
7438 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7439 /* Missing 64 bit bitmask... */
7440 proto_tree_add_uint64(psmp_tree,
7441 hf_ieee80211_ff_psmp_sta_info_reserved_large,
7443 (tvb_get_letoh64(tvb, offset) &
7444 G_GUINT64_CONSTANT(0xFFFFFFFFFFE00000)) >> 21);
7446 case PSMP_STA_INFO_MULTICAST:
7447 proto_tree_add_item(psmp_tree,
7448 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
7449 offset, 4, ENC_LITTLE_ENDIAN);
7450 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
7451 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7452 /* Missing 64 bit bitmask... */
7453 proto_tree_add_uint64(psmp_tree,
7454 hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
7456 (tvb_get_letoh64(tvb, offset) &
7457 G_GUINT64_CONSTANT(0xFFFFFFFFFFE00000)) >> 21);
7459 case PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED:
7460 proto_tree_add_item(psmp_tree,
7461 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
7462 offset, 4, ENC_LITTLE_ENDIAN);
7463 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
7464 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7466 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_sta_id, tvb,
7467 offset, 4, ENC_LITTLE_ENDIAN);
7470 proto_tree_add_item(psmp_tree,
7471 hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
7472 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7473 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_utt_duration,
7474 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7475 proto_tree_add_item(psmp_tree,
7476 hf_ieee80211_ff_psmp_sta_info_reserved_small, tvb,
7477 offset, 4, ENC_LITTLE_ENDIAN);
7485 add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7487 proto_item *sched_item;
7488 proto_tree *sched_tree;
7490 sched_item = proto_tree_add_item(tree, hf_ieee80211_sched_info, tvb, offset,
7491 2, ENC_LITTLE_ENDIAN);
7492 sched_tree = proto_item_add_subtree(sched_item, ett_sched_tree);
7494 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_agg, tvb, offset, 2,
7496 if (tvb_get_letohs(tvb, offset) & 0x0001) {
7497 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_tsid, tvb, offset,
7498 2, ENC_LITTLE_ENDIAN);
7499 proto_tree_add_item(sched_tree, hf_ieee80211_sched_info_dir, tvb, offset,
7500 2, ENC_LITTLE_ENDIAN);
7507 add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7509 proto_tree_add_item(tree, hf_ieee80211_ff_public_action, tvb, offset, 1,
7515 add_ff_ppa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7517 proto_tree_add_item(tree, hf_ieee80211_ff_protected_public_action, tvb, offset, 1,
7523 add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7525 proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1,
7531 add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7533 proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6,
7539 add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7541 proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6,
7547 add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7549 proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2,
7555 add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7557 proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1,
7559 proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1,
7565 add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7567 proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset,
7568 1, ENC_LITTLE_ENDIAN);
7573 add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7575 proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2,
7581 add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7584 code = tvb_get_guint8(tvb, offset);
7585 col_set_str(pinfo->cinfo, COL_INFO,
7586 val_to_str_ext_const(code, &tdls_action_codes_ext,
7587 "Unknown TDLS Action"));
7588 proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1,
7594 add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7596 proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1,
7602 add_ff_operating_class(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7604 proto_tree_add_item(tree, hf_ieee80211_ff_operating_class, tvb, offset, 1,
7610 add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7614 code = tvb_get_guint8(tvb, offset);
7615 col_set_str(pinfo->cinfo, COL_INFO,
7616 val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action"));
7617 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7622 add_ff_unprotected_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7626 code = tvb_get_guint8(tvb, offset);
7627 col_set_str(pinfo->cinfo, COL_INFO,
7628 val_to_str_ext_const(code, &unprotected_wnm_action_codes_ext, "Unknown Unprotected WNM Action"));
7629 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7634 add_ff_unprotected_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7636 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_dmg_action_code, tvb, offset, 1, ENC_NA);
7641 add_ff_key_data_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7643 proto_tree_add_item(tree, hf_ieee80211_ff_key_data_length, tvb, offset, 2,
7649 add_ff_wnm_notification_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7651 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_type,
7652 tvb, offset, 1, ENC_NA);
7656 /* Action frame: Radio Measurement actions */
7658 add_ff_rm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7660 proto_tree_add_item(tree, hf_ieee80211_ff_rm_action_code, tvb, offset, 1, ENC_NA);
7665 add_ff_rm_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7667 proto_tree_add_item(tree, hf_ieee80211_ff_rm_dialog_token, tvb, offset, 1, ENC_NA);
7671 /* Radio Measurement Request frame, Action fields */
7673 add_ff_rm_repetitions(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7675 /* Note: 65535 means repeated until cancelled or superseded */
7676 proto_tree_add_item(tree, hf_ieee80211_ff_rm_repetitions, tvb, offset, 2,
7681 /* Link Measurement Request frame, Action fields*/
7683 add_ff_rm_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7685 /* In dBm, see 8.4.1.20 */
7686 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_power, tvb, offset, 1, ENC_NA);
7691 add_ff_rm_max_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7693 /* In dBm, see 8.4.1.19 */
7694 proto_tree_add_item(tree, hf_ieee80211_ff_rm_max_tx_power, tvb, offset, 1, ENC_NA);
7698 /* Link Measurement Report frame, Action fields */
7700 add_ff_rm_tpc_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7702 proto_tree *tpc_tree;
7703 proto_item *tpc_item;
7705 /* 8.4.2.19 TPC Report element */
7706 tpc_item = proto_tree_add_item(tree, hf_ieee80211_ff_tpc, tvb, offset, 4, ENC_NA);
7707 tpc_tree = proto_item_add_subtree(tpc_item, ett_tpc);
7708 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_element_id, tvb, offset, 1, ENC_NA);
7709 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_length, tvb, offset + 1, 1, ENC_NA);
7710 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_tx_power, tvb, offset + 2, 1, ENC_NA);
7711 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_link_margin, tvb, offset + 3, 1, ENC_NA);
7716 add_ff_rm_rx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7718 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
7719 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rx_antenna_id, tvb, offset, 1, ENC_NA);
7724 add_ff_rm_tx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7726 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
7727 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_antenna_id, tvb, offset, 1, ENC_NA);
7732 add_ff_rm_rcpi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7734 /* 8.4.2.40: RCPI as specified for certain PHYs */
7735 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rcpi, tvb, offset, 1, ENC_NA);
7740 add_ff_rm_rsni(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7742 /* 8.4.2.43: RSNI in steps of 0.5 dB, calculated as:
7743 * RSNI = (10 * log10((RCPI_{power} - ANPI_{power}) / ANPI_{power}) + 20)*2 */
7744 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rsni, tvb, offset, 1, ENC_NA);
7749 add_ff_bss_transition_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7751 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_status_code, tvb, offset, 1,
7757 add_ff_bss_termination_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7759 proto_tree_add_item(tree, hf_ieee80211_ff_bss_termination_delay, tvb, offset, 1,
7765 add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7767 switch (tvb_get_guint8(tvb, offset + 1)) {
7768 case SM_ACTION_MEASUREMENT_REQUEST:
7769 case SM_ACTION_MEASUREMENT_REPORT:
7770 case SM_ACTION_TPC_REQUEST:
7771 case SM_ACTION_TPC_REPORT:
7772 add_ff_category_code(tree, tvb, pinfo, offset);
7773 add_ff_action_code(tree, tvb, pinfo, offset + 1);
7774 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
7776 case SM_ACTION_CHAN_SWITCH_ANNC:
7777 case SM_ACTION_EXT_CHAN_SWITCH_ANNC:
7778 add_ff_category_code(tree, tvb, pinfo, offset);
7779 add_ff_action_code(tree, tvb, pinfo, offset + 1);
7782 add_ff_category_code(tree, tvb, pinfo, offset);
7783 add_ff_action_code(tree, tvb, pinfo, offset + 1);
7789 add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7791 switch (tvb_get_guint8(tvb, offset + 1)) {
7792 case QOS_ACTION_ADDTS_REQUEST:
7793 add_ff_category_code(tree, tvb, pinfo, offset);
7794 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7795 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
7797 case QOS_ACTION_ADDTS_RESPONSE:
7798 add_ff_category_code(tree, tvb, pinfo, offset);
7799 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7800 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
7801 add_ff_status_code(tree, tvb, pinfo, offset + 3);
7803 case QOS_ACTION_DELTS:
7804 add_ff_category_code(tree, tvb, pinfo, offset);
7805 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7806 add_ff_qos_ts_info(tree, tvb, pinfo, offset + 2);
7807 add_ff_reason_code(tree, tvb, pinfo, offset + 5);
7809 case QOS_ACTION_SCHEDULE:
7810 add_ff_category_code(tree, tvb, pinfo, offset);
7811 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7813 case QOS_ACTION_MAP_CONFIGURE:
7814 add_ff_category_code(tree, tvb, pinfo, offset);
7815 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7818 add_ff_category_code(tree, tvb, pinfo, offset);
7824 add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7826 switch (tvb_get_guint8(tvb, offset + 1)) {
7827 case DLS_ACTION_REQUEST:
7828 add_ff_category_code(tree, tvb, pinfo, offset);
7829 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
7830 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
7831 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
7832 add_ff_cap_info(tree, tvb, pinfo, offset + 14);
7833 add_ff_dls_timeout(tree, tvb, pinfo, offset + 16);
7835 case DLS_ACTION_RESPONSE:
7836 add_ff_category_code(tree, tvb, pinfo, offset);
7837 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
7838 add_ff_status_code(tree, tvb, pinfo, offset + 2);
7839 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 4);
7840 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 10);
7841 if (!hf_ieee80211_ff_status_code) {
7842 add_ff_cap_info(tree, tvb, pinfo, offset + 16);
7845 case DLS_ACTION_TEARDOWN:
7846 add_ff_category_code(tree, tvb, pinfo, offset);
7847 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
7848 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
7849 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
7850 add_ff_reason_code(tree, tvb, pinfo, offset + 14);
7853 add_ff_category_code(tree, tvb, pinfo, offset);
7859 add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7861 guint start = offset;
7863 switch (tvb_get_guint8(tvb, offset + 1)) {
7864 case BA_ADD_BLOCK_ACK_REQUEST:
7865 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7866 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
7867 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7868 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
7869 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
7870 offset += add_ff_block_ack_ssc(tree, tvb, pinfo, offset);
7872 case BA_ADD_BLOCK_ACK_RESPONSE:
7873 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7874 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
7875 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7876 offset += add_ff_status_code(tree, tvb, pinfo, offset);
7877 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
7878 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
7880 case BA_DELETE_BLOCK_ACK:
7881 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7882 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
7883 offset += add_ff_delba_param_set(tree, tvb, pinfo, offset);
7884 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
7888 return offset - start; /* Size of fixed fields */
7892 add_ff_action_public_fields(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, guint8 code)
7897 guint8 dialog_token;
7901 guint start = offset;
7904 case PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT:
7905 offset += add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
7907 case PA_VENDOR_SPECIFIC:
7908 oui = tvb_get_ntoh24(tvb, offset);
7909 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
7913 subtype = tvb_get_guint8(tvb, offset);
7914 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_subtype, tvb, offset, 1, ENC_NA);
7916 if (subtype == WFA_SUBTYPE_P2P) {
7917 offset = dissect_wifi_p2p_public_action(pinfo, tree, tvb, offset);
7921 /* Don't know how to handle this vendor */
7925 case PA_GAS_INITIAL_REQUEST:
7926 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7927 offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset,
7929 offset += dissect_gas_initial_request(tree, tvb, pinfo, offset, anqp);
7931 case PA_GAS_INITIAL_RESPONSE:
7932 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7933 offset += add_ff_status_code(tree, tvb, pinfo, offset);
7934 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
7935 offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset,
7937 offset += dissect_gas_initial_response(tree, tvb, pinfo, offset, anqp);
7939 case PA_GAS_COMEBACK_REQUEST:
7940 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7942 case PA_GAS_COMEBACK_RESPONSE:
7943 dialog_token = tvb_get_guint8(tvb, offset);
7944 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7945 offset += add_ff_status_code(tree, tvb, pinfo, offset);
7946 frag = tvb_get_guint8(tvb, offset) & 0x7f;
7947 more = (tvb_get_guint8(tvb, offset) & 0x80) != 0;
7948 offset += add_ff_gas_fragment_id(tree, tvb, pinfo, offset);
7949 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
7950 offset += dissect_advertisement_protocol(pinfo, tree, tvb, offset,
7952 offset += dissect_gas_comeback_response(tree, tvb, pinfo, offset, anqp, frag,
7953 more, dialog_token);
7955 case PA_TDLS_DISCOVERY_RESPONSE:
7956 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
7957 col_set_str(pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
7958 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7959 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
7961 case PA_QAB_REQUEST:
7962 case PA_QAB_RESPONSE:
7963 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
7964 offset += add_ff_req_ap_addr(tree, tvb, pinfo, offset);
7965 offset += add_ff_res_ap_addr(tree, tvb, pinfo, offset);
7969 return offset - start; /* Size of fixed fields */
7973 add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7976 guint start = offset;
7977 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7978 code = tvb_get_guint8(tvb, offset);
7979 offset += add_ff_pa_action_code(tree, tvb, pinfo, offset);
7980 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
7981 return offset - start;
7985 add_ff_action_protected_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7988 guint start = offset;
7989 offset += add_ff_category_code(tree, tvb, pinfo, offset);
7990 code = tvb_get_guint8(tvb, offset);
7991 offset += add_ff_ppa_action_code(tree, tvb, pinfo, offset);
7992 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
7993 return offset - start;
7997 add_ff_action_radio_measurement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7999 guint start = offset;
8002 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8003 code = tvb_get_guint8(tvb, offset);
8004 offset += add_ff_rm_action_code(tree, tvb, pinfo, offset);
8007 case RM_ACTION_RADIO_MEASUREMENT_REQUEST:
8008 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8009 offset += add_ff_rm_repetitions(tree, tvb, pinfo, offset);
8010 /* Followed by Measurement Request Elements */
8012 case RM_ACTION_RADIO_MEASUREMENT_REPORT:
8013 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8014 /* Followed by Measurement Report Elements */
8016 case RM_ACTION_LINK_MEASUREMENT_REQUEST:
8017 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8018 offset += add_ff_rm_tx_power(tree, tvb, pinfo, offset);
8019 offset += add_ff_rm_max_tx_power(tree, tvb, pinfo, offset);
8020 /* Followed by Optional Subelements */
8022 case RM_ACTION_LINK_MEASUREMENT_REPORT:
8023 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8024 offset += add_ff_rm_tpc_report(tree, tvb, pinfo, offset);
8025 offset += add_ff_rm_rx_antenna_id(tree, tvb, pinfo, offset);
8026 offset += add_ff_rm_tx_antenna_id(tree, tvb, pinfo, offset);
8027 offset += add_ff_rm_rcpi(tree, tvb, pinfo, offset);
8028 offset += add_ff_rm_rsni(tree, tvb, pinfo, offset);
8029 /* Followed by Optional Subelements */
8031 case RM_ACTION_NEIGHBOR_REPORT_REQUEST:
8032 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8033 /* Followed by Optional Subelements */
8035 case RM_ACTION_NEIGHBOR_REPORT_RESPONSE:
8036 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8037 /* Followed by Neighbor Report Elements */
8041 return offset - start; /* Size of fixed fields */
8045 add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8047 guint start = offset;
8050 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8051 code = tvb_get_guint8(tvb, offset);
8052 offset += add_ff_ft_action_code(tree, tvb, pinfo, offset);
8055 case FT_ACTION_REQUEST:
8056 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8057 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8058 /* Followed by FT Request frame body (IEs) */
8060 case FT_ACTION_RESPONSE:
8061 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8062 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8063 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8064 /* Followed by FT Response frame body (IEs) */
8066 case FT_ACTION_CONFIRM:
8067 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8068 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8069 /* Followed by FT Confirm frame body (IEs) */
8072 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8073 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8074 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8075 /* Followed by FT Ack frame body (IEs) */
8079 return offset - start; /* Size of fixed fields */
8083 add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8085 guint start = offset;
8088 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8089 code = tvb_get_guint8(tvb, offset);
8090 offset += add_ff_sa_query_action_code(tree, tvb, pinfo, offset);
8093 case SA_QUERY_REQUEST:
8094 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
8096 case SA_QUERY_RESPONSE:
8097 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
8101 return offset - start; /* Size of fixed fields */
8105 add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8109 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8110 offset += add_ff_mesh_action(tree, tvb, pinfo, offset);
8111 /* The only fixed fields are the category and mesh action. The rest are IEs.
8114 if (tvb_get_guint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE) {
8115 /* ..except for the TBTT Adjustment Response, which has a status code field
8117 length += add_ff_status_code(tree, tvb, pinfo, offset);
8123 add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8125 guint start = offset;
8127 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8128 offset += add_ff_multihop_action(tree, tvb, pinfo, offset);
8129 offset += add_ff_mesh_control(tree, tvb, pinfo, offset);
8130 return offset - start;
8134 add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8136 guint start = offset;
8138 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8139 offset += add_ff_selfprot_action(tree, tvb, pinfo, offset);
8141 switch (tvb_get_guint8(tvb, start + 1)) {
8142 case SELFPROT_ACTION_MESH_PEERING_OPEN:
8143 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8145 case SELFPROT_ACTION_MESH_PEERING_CONFIRM:
8146 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8147 offset += add_ff_assoc_id(tree, tvb, pinfo, offset);
8151 return offset - start;
8155 add_ff_vht_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8157 proto_tree_add_item(tree, hf_ieee80211_ff_vht_action, tvb, offset, 1,
8164 wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8170 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8172 mode = tvb_get_guint8(tvb, offset);
8173 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_pref_cand,
8174 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8175 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_abridged,
8176 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8177 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_disassoc_imminent,
8178 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8179 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_bss_term_included,
8180 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8181 proto_tree_add_item(tree, hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
8182 tvb, offset, 1, ENC_LITTLE_ENDIAN);
8185 proto_tree_add_item(tree, hf_ieee80211_ff_disassoc_timer, tvb, offset, 2,
8189 proto_tree_add_item(tree, hf_ieee80211_ff_validity_interval, tvb, offset, 1,
8194 proto_tree_add_item(tree, hf_ieee80211_ff_bss_termination_duration,
8195 tvb, offset, 8, ENC_NA);
8201 url_len = tvb_get_guint8(tvb, offset);
8202 proto_tree_add_item(tree, hf_ieee80211_ff_url_len, tvb, offset, 1,
8205 proto_tree_add_item(tree, hf_ieee80211_ff_url, tvb, offset, url_len,
8210 left = tvb_reported_length_remaining(tvb, offset);
8212 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
8213 tvb, offset, left, ENC_NA);
8217 return offset - start;
8222 wnm_bss_trans_mgmt_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8228 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8229 code = tvb_get_guint8(tvb, offset);
8230 offset += add_ff_bss_transition_status_code(tree, tvb, pinfo, offset);
8231 offset += add_ff_bss_termination_delay(tree, tvb, pinfo, offset);
8233 proto_tree_add_item(tree, hf_ieee80211_ff_target_bss,
8234 tvb, offset, 6, ENC_NA);
8237 left = tvb_reported_length_remaining(tvb, offset);
8239 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
8240 tvb, offset, left, ENC_NA);
8244 return offset - start;
8248 wnm_sleep_mode_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8251 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8252 return offset - start;
8256 wnm_sleep_mode_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8259 guint16 key_data_len;
8262 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8263 key_data_len = tvb_get_letohs(tvb, offset);
8264 offset += add_ff_key_data_length(tree, tvb, pinfo, offset);
8265 left = tvb_reported_length_remaining(tvb, offset);
8266 if (left < key_data_len) {
8267 expert_add_info(pinfo, tree, &ei_ieee80211_tag_wnm_sleep_mode_no_key_data);
8268 return offset - start;
8270 proto_tree_add_item(tree, hf_ieee80211_ff_key_data, tvb, offset,
8271 key_data_len, ENC_NA);
8272 offset += key_data_len;
8273 return offset - start;
8277 wnm_tfs_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8280 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8281 return offset - start;
8285 wnm_tfs_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8288 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8289 return offset - start;
8293 wnm_notification_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8296 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8297 offset += add_ff_wnm_notification_type(tree, tvb, pinfo, offset);
8298 return offset - start;
8302 add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8305 guint start = offset;
8307 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8308 code = tvb_get_guint8(tvb, offset);
8309 offset += add_ff_wnm_action_code(tree, tvb, pinfo, offset);
8311 case WNM_BSS_TRANS_MGMT_REQ:
8312 offset += wnm_bss_trans_mgmt_req(tree, tvb, pinfo, offset);
8314 case WNM_BSS_TRANS_MGMT_RESP:
8315 offset += wnm_bss_trans_mgmt_resp(tree, tvb, pinfo, offset);
8318 offset += wnm_tfs_req(tree, tvb, pinfo, offset);
8321 offset += wnm_tfs_resp(tree, tvb, pinfo, offset);
8323 case WNM_SLEEP_MODE_REQ:
8324 offset += wnm_sleep_mode_req(tree, tvb, pinfo, offset);
8326 case WNM_SLEEP_MODE_RESP:
8327 offset += wnm_sleep_mode_resp(tree, tvb, pinfo, offset);
8329 case WNM_NOTIFICATION_REQ:
8330 offset += wnm_notification_req(tree, tvb, pinfo, offset);
8334 return offset - start; /* Size of fixed fields */
8338 add_ff_action_unprotected_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8341 guint start = offset;
8343 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8344 code = tvb_get_guint8(tvb, offset);
8345 offset += add_ff_unprotected_wnm_action_code(tree, tvb, pinfo, offset);
8348 case UNPROTECTED_WNM_TIM:
8349 offset += add_ff_check_beacon(tree, tvb, pinfo, offset);
8350 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
8351 offset += add_ff_tod(tree, tvb, pinfo, offset);
8352 offset += add_ff_toa(tree, tvb, pinfo, offset);
8353 offset += add_ff_max_tod_err(tree, tvb, pinfo, offset);
8354 offset += add_ff_max_toa_err(tree, tvb, pinfo, offset);
8356 case UNPROTECTED_WNM_TIMING_MEASUREMENT:
8357 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8358 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
8362 return offset - start; /* Size of fixed fields */
8366 add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8370 guint start = offset;
8372 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8373 code = tvb_get_guint8(tvb, offset);
8374 offset += add_ff_tdls_action_code(tree, tvb, pinfo, offset);
8376 case TDLS_SETUP_REQUEST:
8377 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8378 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8380 case TDLS_SETUP_RESPONSE:
8381 status = tvb_get_letohs(tvb, offset);
8382 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8383 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8384 if (tvb_reported_length_remaining(tvb, offset) < 2) {
8386 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_response_malformed);
8390 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8392 case TDLS_SETUP_CONFIRM:
8393 status = tvb_get_letohs(tvb, offset);
8394 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8395 if (tvb_reported_length_remaining(tvb, offset) < 1) {
8397 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_confirm_malformed);
8401 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8404 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
8406 case TDLS_PEER_TRAFFIC_INDICATION:
8407 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8409 case TDLS_CHANNEL_SWITCH_REQUEST:
8410 offset += add_ff_target_channel(tree, tvb, pinfo, offset);
8411 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
8413 case TDLS_CHANNEL_SWITCH_RESPONSE:
8414 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8416 case TDLS_PEER_PSM_REQUEST:
8417 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8419 case TDLS_PEER_PSM_RESPONSE:
8420 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8421 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8423 case TDLS_PEER_TRAFFIC_RESPONSE:
8424 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8426 case TDLS_DISCOVERY_REQUEST:
8427 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8431 return offset - start; /* Size of fixed fields */
8435 add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8437 guint start = offset;
8439 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8440 offset += add_ff_wme_action_code(tree, tvb, pinfo, offset);
8441 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8442 offset += add_ff_wme_status_code(tree, tvb, pinfo, offset);
8444 return offset - start; /* Size of fixed fields */
8448 add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8450 guint start = offset;
8454 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8455 oui = tvb_get_ntoh24(tvb, offset);
8456 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
8460 offset = dissect_vendor_action_marvell(tree, tvb, offset);
8463 subtype = tvb_get_guint8(tvb, offset);
8464 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_subtype, tvb, offset, 1, ENC_NA);
8466 if (subtype == WFA_SUBTYPE_P2P) {
8467 offset = dissect_wifi_p2p_action(tree, tvb, offset);
8471 /* Don't know how to handle this vendor */
8475 return offset - start; /* Size of fixed fields */
8479 add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8481 guint start = offset;
8483 mimo_control_t mimo_cntrl;
8485 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8486 offset += add_ff_ht_action_code(tree, tvb, pinfo, offset);
8488 switch (tvb_get_guint8(tvb, offset - 1)) {
8489 case HT_ACTION_NOTIFY_CHAN_WIDTH:
8490 offset += add_ff_channel_width(tree, tvb, pinfo, offset);
8492 case HT_ACTION_SM_PWR_SAVE:
8493 offset += add_ff_sm_pwr_cntrl(tree, tvb, pinfo, offset);
8495 case HT_ACTION_PSMP_ACTION:
8496 n_sta = tvb_get_guint8(tvb, offset);
8497 offset += add_ff_psmp_param_set(tree, tvb, pinfo, offset);
8498 for (i = 0; i < (n_sta & 0x0F); i++) {
8499 offset += add_ff_psmp_sta_info(tree, tvb, pinfo, offset);
8502 case HT_ACTION_SET_PCO_PHASE:
8503 offset += add_ff_pco_phase_cntrl(tree, tvb, pinfo, offset);
8505 case HT_ACTION_MIMO_CSI:
8506 mimo_cntrl = get_mimo_control(tvb, offset);
8507 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
8508 offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl);
8510 case HT_ACTION_MIMO_BEAMFORMING:
8511 mimo_cntrl = get_mimo_control(tvb, offset);
8512 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
8513 offset += add_mimo_beamforming_feedback_report(tree, tvb, offset,
8516 case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING:
8517 mimo_cntrl = get_mimo_control(tvb, offset);
8518 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
8519 offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb,
8523 case HT_ACTION_ANT_SEL_FEEDBACK:
8524 offset += add_ff_ant_selection(tree, tvb, pinfo, offset);
8526 case HT_ACTION_HT_INFO_EXCHANGE:
8527 offset += add_ff_ht_information(tree, tvb, pinfo, offset);
8531 return offset - start;
8535 add_ff_beacon_interval_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8537 proto_item *bic_item = proto_tree_add_item(tree, hf_ieee80211_ff_bic, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8538 proto_tree *bic_tree = proto_item_add_subtree(bic_item, ett_bic_tree);
8540 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_cc_present, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8541 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_discovery_mode, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8542 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_next_beacon, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8543 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_ati_present, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8544 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_abft_len, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8545 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_fss, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8546 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_is_resp, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8547 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_next_abft, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8548 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_frag_txss, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8549 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_txss_span, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8550 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_NBI_abft, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8551 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_abft_count, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8552 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_nabft, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8553 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_pcp, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8554 proto_tree_add_item(bic_tree, hf_ieee80211_ff_bic_reserved, tvb, offset, 6, ENC_LITTLE_ENDIAN);
8559 add_ff_beamforming_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset, gboolean isGrant)
8561 proto_item *bf_item = proto_tree_add_item(tree, hf_ieee80211_ff_bf, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8562 proto_tree *bf_tree = proto_item_add_subtree(bf_item, ett_bf_tree);
8563 guint16 bf_field = tvb_get_letohs(tvb, offset);
8564 gboolean isInit = (bf_field & 0x2) >> 1;
8565 gboolean isResp = (bf_field & 0x4) >> 2;
8566 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_train, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8567 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_is_init, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8568 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_is_resp, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8569 if((isInit==TRUE) && (isResp==TRUE) && isGrant) {
8570 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_num_sectors, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8571 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_num_rx_dmg_ants, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8572 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_b12b15, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8574 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_rxss_len, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8575 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_rxss_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8576 proto_tree_add_item(bf_tree, hf_ieee80211_ff_bf_b10b15, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8582 add_ff_dynamic_allocation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8584 proto_item *dynamic_alloc_item = proto_tree_add_item(tree, hf_ieee80211_ff_dynamic_allocation, tvb, offset, 5, ENC_LITTLE_ENDIAN);
8585 proto_tree *dynamic_alloc_tree = proto_item_add_subtree(dynamic_alloc_item, ett_dynamic_alloc_tree);
8586 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_TID, tvb, offset, 5, ENC_LITTLE_ENDIAN);
8587 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_alloc_type, tvb, offset, 5, ENC_LITTLE_ENDIAN);
8588 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_src_aid, tvb, offset, 5, ENC_LITTLE_ENDIAN);
8589 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_dest_aid, tvb, offset, 5, ENC_LITTLE_ENDIAN);
8590 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_alloc_duration, tvb, offset, 5, ENC_LITTLE_ENDIAN);
8591 proto_tree_add_item(dynamic_alloc_tree, hf_ieee80211_ff_b39, tvb, offset, 5, ENC_LITTLE_ENDIAN);
8596 add_ff_beamformed_link(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8598 proto_item *blm_item = proto_tree_add_item(tree, hf_ieee80211_ff_blm, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8599 proto_tree *blm_tree = proto_item_add_subtree(blm_item, ett_blm_tree);
8600 proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_unit_index, tvb, offset, 1, ENC_NA);
8601 proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_maint_value, tvb, offset, 1, ENC_NA);
8602 proto_tree_add_item(blm_tree, hf_ieee80211_ff_blm_is_master, tvb, offset, 1, ENC_NA);
8607 add_ff_BRP_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8609 proto_item *brp_req_item = proto_tree_add_item(tree, hf_ieee80211_ff_brp, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8610 proto_tree *brp_req_tree = proto_item_add_subtree(brp_req_item, ett_brp_tree);
8612 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_L_RX, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8613 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_TX_TRN_REQ, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8614 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_MID_REQ, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8615 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_BC_REQ, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8616 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_MID_GRANT, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8617 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_BC_GRANT, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8618 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_chan_FBCK_CAP, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8619 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_tx_sector, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8620 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_other_aid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8621 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_tx_antenna, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8622 proto_tree_add_item(brp_req_tree, hf_ieee80211_ff_brp_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8627 add_ff_sector_sweep_feedback_from_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8629 proto_item *sswf_item = proto_tree_add_item(tree, hf_ieee80211_ff_sswf, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8630 proto_tree *sswf_tree = proto_item_add_subtree(sswf_item, ett_sswf_tree);
8632 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_total_sectors, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8633 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_num_rx_dmg_ants, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8634 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_reserved1, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8635 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_poll_required, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8636 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_reserved2, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8642 add_ff_sector_sweep_feedback_to_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8644 proto_item *sswf_item = proto_tree_add_item(tree, hf_ieee80211_ff_sswf, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8645 proto_tree *sswf_tree = proto_item_add_subtree(sswf_item, ett_sswf_tree);
8647 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_sector_select, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8648 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_dmg_antenna_select, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8649 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_snr_report, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8650 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_poll_required, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8651 proto_tree_add_item(sswf_tree, hf_ieee80211_ff_sswf_reserved2, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8656 add_ff_sector_sweep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8658 proto_item *ssw_item = proto_tree_add_item(tree, hf_ieee80211_ff_ssw, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8659 proto_tree *ssw_tree = proto_item_add_subtree(ssw_item, ett_ssw_tree);
8661 proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_direction, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8662 proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_cdown, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8663 proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_sector_id, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8664 proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_dmg_ant_id, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8665 proto_tree_add_item(ssw_tree, hf_ieee80211_ff_ssw_rxss_len, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8670 add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8672 proto_item *dmg_params_item = proto_tree_add_item(tree, hf_ieee80211_ff_dmg_params, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8673 proto_tree *dmg_params_tree = proto_item_add_subtree(dmg_params_item, ett_dmg_params_tree);
8675 proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_bss, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8676 proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_cbap_only, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8677 proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_cbap_src, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8678 proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_privacy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8679 proto_tree_add_item(dmg_params_tree, hf_ieee80211_ff_dmg_params_policy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8684 add_ff_cc_field(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean dis)
8686 proto_item *cc_item = proto_tree_add_item(tree, hf_ieee80211_ff_cc, tvb, offset, 8, ENC_LITTLE_ENDIAN);
8687 proto_tree *cc_tree = proto_item_add_subtree(cc_item, ett_cc_tree);
8690 proto_tree_add_item(cc_tree, hf_ieee80211_ff_cc_abft_resp_addr, tvb, offset, 6, ENC_NA);
8692 cc_field = tvb_get_letoh64(tvb, offset);
8693 /*TODO : Add support of bitmask for FT_(U)INT64 */
8694 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_sp_duration, tvb, offset, 1, (guint32)(cc_field & 0xff));
8695 proto_tree_add_uint64(cc_tree, hf_ieee80211_ff_cc_cluster_id, tvb, offset+1, 6, (guint64)((cc_field & G_GUINT64_CONSTANT(0x00ffffffffffff00)) >> 8));
8696 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_role, tvb, offset+7, 1, (guint32)((cc_field & G_GUINT64_CONSTANT(0x0300000000000000)) >> 56));
8697 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_max_mem, tvb, offset+7, 1, (guint32)((cc_field & G_GUINT64_CONSTANT(0x7c00000000000000)) >> 58));
8704 add_ff_band_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8706 proto_tree_add_item(tree, hf_ieee80211_ff_band_id, tvb, offset, 1, ENC_NA);
8711 add_ff_subject_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8713 proto_tree_add_item(tree, hf_ieee80211_ff_subject_address, tvb, offset, 6, ENC_NA);
8718 add_ff_handover_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8720 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reason, tvb, offset, 1, ENC_NA);
8725 add_ff_handover_remaining_bi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8727 proto_tree_add_item(tree, hf_ieee80211_ff_handover_remaining_bi, tvb, offset, 1, ENC_NA);
8732 add_ff_handover_result(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8734 proto_tree_add_item(tree, hf_ieee80211_ff_handover_result, tvb, offset, 1, ENC_NA);
8739 add_ff_handover_reject_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8741 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reject_reason, tvb, offset, 1, ENC_NA);
8746 add_ff_destination_reds_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8748 proto_tree_add_item(tree, hf_ieee80211_ff_destination_reds_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8753 add_ff_destination_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8755 proto_tree_add_item(tree, hf_ieee80211_ff_destination_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8760 add_ff_realy_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8762 proto_tree_add_item(tree, hf_ieee80211_ff_realy_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8767 add_ff_source_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8769 proto_tree_add_item(tree, hf_ieee80211_ff_source_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8774 add_ff_timing_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8776 proto_tree_add_item(tree, hf_ieee80211_ff_timing_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8781 add_ff_sampling_frequency_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8783 proto_tree_add_item(tree, hf_ieee80211_ff_sampling_frequency_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8788 add_ff_relay_operation_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8790 proto_tree_add_item(tree, hf_ieee80211_ff_relay_operation_type, tvb, offset, 1, ENC_NA);
8795 add_ff_fst_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8797 proto_tree_add_item(tree, hf_ieee80211_ff_fst_action_code, tvb, offset, 1, ENC_NA);
8802 add_ff_llt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8804 proto_tree_add_item(tree, hf_ieee80211_ff_llt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8809 add_ff_fsts_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8811 proto_tree_add_item(tree, hf_ieee80211_ff_fsts_id, tvb, offset, 4, ENC_LITTLE_ENDIAN);
8816 add_ff_oct_mmpdu(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8818 guint start = offset;
8819 guint len = tvb_get_letohs(tvb, offset);
8820 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_len, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8822 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_ctrl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8824 proto_tree_add_item(tree, hf_ieee80211_ff_oct_mmpdu, tvb, offset, len, ENC_NA);
8826 return offset - start;
8830 add_tag_relay_capabilities(packet_info *pinfo, proto_item *item, gint32 tag_len, proto_tree *tree, tvbuff_t *tvb, gint32 *offset) {
8833 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length, "Tag length must be 2");
8839 proto_tree_add_item(tree, hf_ieee80211_tag_relay_support, tvb, *offset, 1, ENC_NA);
8840 proto_tree_add_item(tree, hf_ieee80211_tag_relay_use, tvb, *offset, 1, ENC_NA);
8841 proto_tree_add_item(tree, hf_ieee80211_tag_relay_permission, tvb, *offset, 1, ENC_NA);
8842 proto_tree_add_item(tree, hf_ieee80211_tag_AC_power, tvb, *offset, 1, ENC_NA);
8843 proto_tree_add_item(tree, hf_ieee80211_tag_relay_prefer, tvb, *offset, 1, ENC_NA);
8844 proto_tree_add_item(tree, hf_ieee80211_tag_duplex, tvb, *offset, 1, ENC_NA);
8845 proto_tree_add_item(tree, hf_ieee80211_tag_cooperation, tvb, *offset, 1, ENC_NA);
8852 add_ff_relay_capable_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8854 proto_item *rcsi_item = proto_tree_add_item(tree, hf_ieee80211_ff_rcsi, tvb, offset, 3, ENC_LITTLE_ENDIAN);
8855 proto_tree *rcsi_tree = proto_item_add_subtree(rcsi_item, ett_rcsi_tree);
8856 proto_tree_add_item(rcsi_tree, hf_ieee80211_ff_rcsi_aid, tvb, offset, 1, ENC_NA);
8858 add_tag_relay_capabilities(pinfo, rcsi_item, 2, rcsi_tree, tvb, &offset);
8864 dissect_ieee80211_extension(guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
8867 proto_tree *ext_tree;
8868 proto_tree *fixed_tree;
8869 proto_tree *tagged_tree;
8872 int tagged_parameter_tree_len;
8874 ti = proto_tree_add_item(tree, proto_wlan_ext, tvb, offset, -1, ENC_NA);
8875 ext_tree = proto_item_add_subtree(ti, ett_80211_ext);
8877 switch (COMPOSE_FRAME_TYPE(fcf))
8879 case EXTENSION_DMG_BEACON:
8883 fixed_tree = get_fixed_parameter_tree(ext_tree, tvb, offset, 20);
8884 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
8885 offset += add_ff_sector_sweep(fixed_tree, tvb, pinfo, offset);
8886 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
8887 bic_field = tvb_get_letohs(tvb, offset);
8888 cc = (bic_field & 0x1);
8889 dis = (bic_field & 0x2) >> 1;
8890 offset += add_ff_beacon_interval_ctrl(fixed_tree, tvb, pinfo, offset);
8891 offset += add_ff_dmg_params(fixed_tree, tvb, pinfo, offset);
8893 offset += add_ff_cc_field(fixed_tree, tvb, offset, dis);
8895 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
8898 * The tagged params are optional here. See Table 8.33a of the 2012
8899 * version of the standard.
8901 if (tagged_parameter_tree_len) {
8902 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
8903 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_DMG_BEACON, NULL);
8911 add_ff_action_unprotected_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8914 guint start = offset;
8916 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8917 code = tvb_get_guint8(tvb, offset);
8918 offset += add_ff_unprotected_dmg_action_code(tree, tvb, pinfo, offset);
8920 case UNPROTECTED_DMG_ANNOUNCE:
8921 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
8922 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
8924 case UNPROTECTED_DMG_BRP:
8925 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8926 offset += add_ff_BRP_request(tree, tvb, pinfo, offset);
8929 return offset - start;
8932 /* There is no easy way to skip all these subcarrier indices that must not
8933 * be displayed when showing compressed beamforming feedback matrices
8934 * Table 8-53g IEEE Std 802.11ac-2013 amendment.
8936 * The irregular use of case statements in this function is to improve
8937 * readability in what is otherwise a large funtion that does very little.
8940 vht_compressed_skip_scidx(guint8 nchan_width, guint8 ng, int scidx)
8942 switch(nchan_width) {
8948 /* Pilot subcarriers */
8949 case -21: case -7: case 7: case 21:
8962 /* Pilot subcarriers */
8963 case -53: case -25: case -11: case 11: case 25: case 53:
8966 /* DC subcarriers */
8967 case -1: case 0: case 1:
8978 /* Pilot subcarriers */
8979 case -103: case -75: case -39: case -11: case 11: case 39: case 75: case 103:
8982 /* DC subcarriers, skip -1, 0, 1 */
8989 /* 160 MHz / 80+80 Mhz
8990 * Skip values here assume 160 MHz, as vht_mimo_control does not let us differentiate
8991 * between 160 MHz & 80-80MHz */
8996 /* DC subcarriers, skip -5 to 5*/
9002 /* Pilot subcarriers */
9003 case -231: case -203: case -167: case -139: case -117: case -89: case -53: case -25:
9004 case 25: case 53: case 89: case 117: case 139: case 167: case 203: case 231:
9007 /* Other subcarriers, skip -129 to -127, 127 to 129 */
9021 /* DC subcarriers */
9022 case -128: case -4: case -2: case 0: case 2: case 4: case 128:
9030 if (scidx == -2 || scidx == 2)
9043 add_ff_vht_compressed_beamforming_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
9050 gboolean codebook_info;
9051 gboolean feedback_type;
9052 proto_item *vht_beam_item;
9053 proto_tree *vht_beam_tree, *subtree;
9054 int i, matrix_size, len, pos, ns, scidx = 0;
9055 guint8 phi, psi, carry;
9056 /* Table 8-53d Order of angles in the Compressed Beamforming Feedback
9057 * Matrix subfield, IEEE Std 802.11ac-2013 amendment */
9058 static const guint8 na_arr[8][8] = { { 0, 0, 0, 0, 0, 0, 0, 0 },
9059 { 2, 2, 0, 0, 0, 0, 0, 0 },
9060 { 4, 6, 6, 0, 0, 0, 0, 0 },
9061 { 6, 10, 12, 12, 0, 0, 0, 0 },
9062 { 8, 14, 18, 20, 20, 0, 0, 0 },
9063 { 10, 18, 24, 28, 30, 30, 0, 0 },
9064 { 12, 22, 30, 36, 40, 42, 42, 0 },
9065 { 14, 26, 36, 44, 50, 54, 56, 56 }
9067 /* Table 8-53g Subcarriers for which a Compressed Beamforming Feedback Matrix
9068 * subfield is sent back. IEEE Std 802.11ac-2013 amendment */
9069 static const int ns_arr[4][3] = { { 52, 30, 16 },
9075 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_vht_mimo_cntrl,
9076 ett_ff_vhtmimo_cntrl, hf_ieee80211_ff_vht_mimo_cntrl_fields, ENC_LITTLE_ENDIAN);
9078 /* Extract values for beamforming use */
9079 vht_mimo = tvb_get_letoh24(tvb, offset);
9082 /* Extract values for beamforming use */
9083 nc = (vht_mimo & 0x7) + 1;
9084 nr = ((vht_mimo & 0x38) >> 3) + 1;
9085 chan_width = (vht_mimo & 0xC0) >> 6;
9086 grouping = ((vht_mimo & 0x300) >> 8);
9087 codebook_info = (vht_mimo & 0x400) >> 10;
9088 feedback_type = (vht_mimo & 0x800) >> 11;
9090 vht_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_compressed_beamforming_report, tvb,
9091 offset, -1, ENC_NA);
9092 vht_beam_tree = proto_item_add_subtree(vht_beam_item, ett_ff_vhtmimo_beamforming_report);
9094 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, nc,
9095 ett_ff_vhtmimo_beamforming_report_snr, NULL, "Average Signal to Noise Ratio");
9097 for (i = 1; i <= nc; i++)
9101 snr = tvb_get_guint8(tvb, offset);
9102 proto_tree_add_uint_format(subtree, hf_ieee80211_vht_compressed_beamforming_report_snr, tvb, offset, 1,
9103 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
9107 /* Table 8-53c Subfields of the VHT MIMO Control field (802.11ac-2013)
9108 * reserves value 3 of the Grouping subfield. */
9109 if (grouping == 3) {
9110 expert_add_info_format(pinfo, vht_beam_item, &ei_ieee80211_inv_val,
9111 "Grouping subfield value 3 is reserved");
9115 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, -1,
9116 ett_ff_vhtmimo_beamforming_report_feedback_matrices, NULL, "Beamforming Feedback Matrics");
9117 if (feedback_type) {
9118 if (codebook_info) {
9124 if (codebook_info) {
9131 ns = ns_arr[chan_width][grouping];
9132 switch(chan_width) {
9143 /* This is -122 for 80+80MHz Channel Width but vht_mimo_control does not allow us
9144 * to differentiate between 160MHz and 80+80Mhz */
9149 matrix_size = na_arr[nr - 1][nc -1] * (psi + phi)/2;
9151 for (i = 0; i < ns; i++) {
9156 len = roundup2((pos + matrix_size), 8)/8 - roundup2(pos, 8)/8;
9157 scidx = vht_compressed_skip_scidx(chan_width, grouping, scidx);
9159 /* TODO : For certain values from na_arr, there is always going be a carry over or overflow from the previous or
9160 into the next octet. The largest of possible unaligned values can be 41 bytes long, and masking and shifting
9161 whole buffers to show correct values with padding and overflow bits is hence skipped, we only mark the bytes
9162 of interest instead */
9163 proto_tree_add_none_format(subtree, hf_ieee80211_vht_compressed_beamforming_feedback_matrix, tvb,
9164 offset - carry, len + carry, "Compressed Beamforming Feedback Matrix for subcarrier %d", scidx++);
9173 add_ff_action_vht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9175 guint start = offset;
9176 guint8 vht_action, field_val;
9178 guint64 upa_value, temp_val;
9181 proto_tree *ti_tree;
9182 proto_item *msa, *upa;
9183 proto_tree *msa_tree, *upa_tree;
9185 offset += add_ff_category_code(tree, tvb, pinfo, offset);
9187 vht_action = tvb_get_guint8(tvb, offset);
9188 offset += add_ff_vht_action(tree, tvb, pinfo, offset);
9191 case VHT_ACT_VHT_COMPRESSED_BEAMFORMING:{
9192 offset = add_ff_vht_compressed_beamforming_report(tree, tvb, pinfo, offset);
9193 offset += tvb_reported_length_remaining(tvb, offset);
9196 case VHT_ACT_GROUP_ID_MANAGEMENT:{
9197 ti = proto_tree_add_item(tree, hf_ieee80211_vht_group_id_management, tvb,
9198 offset, -1, ENC_NA);
9199 ti_tree = proto_item_add_subtree(ti, ett_vht_grpidmgmt);
9201 msa_value = tvb_get_letoh64(tvb, offset);
9202 msa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_membership_status_array, tvb,
9204 msa_tree = proto_item_add_subtree(msa, ett_vht_msa);
9205 for (m = 0; m < 64; m++) {
9206 if (msa_value & (G_GINT64_CONSTANT(1) << m))
9207 proto_tree_add_uint_format(msa_tree, hf_ieee80211_vht_membership_status_field,
9208 tvb, offset + (m/8), 1, 1, "Membership Status in Group ID %d: 1", m);
9212 upa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_user_position_array, tvb,
9213 offset, 16, ENC_NA);
9214 upa_tree = proto_item_add_subtree(upa, ett_vht_upa);
9216 upa_value = tvb_get_letoh64(tvb, offset);
9217 for (m = 0; m < 32; m++) {
9218 if (msa_value & (G_GINT64_CONSTANT(1) << m)) {
9219 temp_val = ((guint64) pow(4,m))*3;
9220 field_val = (guint8) ((upa_value & temp_val) >> m*2);
9221 proto_tree_add_uint_format(upa_tree, hf_ieee80211_vht_user_position_field,
9222 tvb, offset + (m/4), 1, field_val, "User Position in Group ID %d: %u", m, field_val);
9225 upa_value = tvb_get_letoh64(tvb, offset+8);
9226 for (m = 0; m < 32; m++) {
9227 if (msa_value & (G_GINT64_CONSTANT(1) << (32+m))) {
9228 temp_val = ((guint64) pow(4,m))*3;
9229 field_val = (guint8) ((upa_value & temp_val) >> m*2);
9230 proto_tree_add_uint_format(upa_tree, hf_ieee80211_vht_user_position_field,
9231 tvb, (offset + 8) + (m/4), 1, field_val, "User Position in Group ID %d: %u", m, field_val);
9234 offset += tvb_reported_length_remaining(tvb, offset);
9237 case VHT_ACT_OPERATION_MODE_NOTIFICATION:{
9238 ti = proto_tree_add_item(tree, hf_ieee80211_vht_operation_mode_notification, tvb,
9239 offset, -1, ENC_NA);
9240 expert_add_info(pinfo, ti, &ei_ieee80211_vht_action);
9241 offset += tvb_reported_length_remaining(tvb, offset);
9249 return offset - start;
9253 add_ff_action_fst(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9256 guint start = offset;
9258 offset += add_ff_category_code(tree, tvb, pinfo, offset);
9259 code = tvb_get_guint8(tvb, offset);
9260 offset += add_ff_fst_action_code(tree, tvb, pinfo, offset);
9262 case FST_SETUP_REQUEST:
9263 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9264 offset += add_ff_llt(tree, tvb, pinfo, offset);
9266 case FST_SETUP_RESPONSE:
9267 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9268 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9271 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
9273 case FST_ACK_REQUEST:
9274 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9275 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
9277 case FST_ACK_RESPONSE:
9278 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9279 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
9281 case FST_ON_CHANNEL_TUNNEL_REQUEST:
9282 offset += add_ff_oct_mmpdu(tree, tvb, pinfo, offset);
9285 return offset - start;
9289 add_ff_action_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9292 guint start = offset;
9295 offset += add_ff_category_code(tree, tvb, pinfo, offset);
9296 code = tvb_get_guint8(tvb, offset);
9297 offset += add_ff_dmg_action_code(tree, tvb, pinfo, offset);
9299 case DMG_ACTION_PWR_SAVE_CONFIG_REQ:
9300 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9301 offset += add_ff_dmg_pwr_mgmt(tree, tvb, pinfo, offset);
9303 case DMG_ACTION_PWR_SAVE_CONFIG_RES:
9304 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9305 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9307 case DMG_ACTION_INFO_REQ:
9308 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
9310 case DMG_ACTION_INFO_RES:
9311 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
9313 case DMG_ACTION_HANDOVER_REQ:
9314 offset += add_ff_handover_reason(tree, tvb, pinfo, offset);
9315 offset += add_ff_handover_remaining_bi(tree, tvb, pinfo, offset);
9317 case DMG_ACTION_HANDOVER_RES:
9318 offset += add_ff_handover_result(tree, tvb, pinfo, offset);
9319 offset += add_ff_handover_reject_reason(tree, tvb, pinfo, offset);
9321 case DMG_ACTION_DTP_REQ:
9322 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9324 case DMG_ACTION_DTP_RES:
9325 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9327 case DMG_ACTION_RELAY_SEARCH_REQ:
9328 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9329 offset += add_ff_destination_reds_aid(tree, tvb, pinfo, offset);
9331 case DMG_ACTION_RELAY_SEARCH_RES:
9332 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9333 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9335 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ:
9336 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9338 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES:
9339 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9341 tvb_reported_length_remaining(tvb, offset);
9342 while(left_offset > 0) {
9343 proto_tree_add_item(tree, hf_ieee80211_ff_peer_sta_aid, tvb, offset, 1, ENC_NA);
9344 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset+1, 1, ENC_NA);
9345 proto_tree_add_item(tree, hf_ieee80211_ff_internal_angle, tvb, offset+2, 1, ENC_NA);
9346 proto_tree_add_item(tree, hf_ieee80211_ff_recommend, tvb, offset+2, 1, ENC_NA);
9347 /* another reserved byte */
9352 case DMG_ACTION_RLS_REQ:
9353 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9354 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
9355 offset += add_ff_realy_aid(tree, tvb, pinfo, offset);
9356 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
9358 case DMG_ACTION_RLS_RES:
9359 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9361 case DMG_ACTION_RLS_ANNOUNCE:
9362 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9363 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9364 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
9365 offset += add_ff_realy_aid(tree, tvb, pinfo, offset);
9366 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
9368 case DMG_ACTION_RLS_TEARDOWN:
9369 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
9370 offset += add_ff_realy_aid(tree, tvb, pinfo, offset);
9371 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
9373 case DMG_ACTION_RELAY_ACK_REQ:
9374 case DMG_ACTION_RELAY_ACK_RES:
9376 case DMG_ACTION_TPA_REQ:
9377 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9378 offset += add_ff_timing_offset(tree, tvb, pinfo, offset);
9379 offset += add_ff_sampling_frequency_offset(tree, tvb, pinfo, offset);
9381 case DMG_ACTION_TPA_RES:
9382 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9384 case DMG_ACTION_TPA_REP:
9385 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9387 case DMG_ACTION_ROC_REQ:
9388 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9389 offset += add_ff_relay_operation_type(tree, tvb, pinfo, offset);
9391 case DMG_ACTION_ROC_RES:
9392 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9393 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9396 return offset - start;
9400 add_ff_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9402 switch (tvb_get_guint8(tvb, offset) & 0x7f) {
9403 case CAT_SPECTRUM_MGMT: /* 0 */
9404 return add_ff_action_spectrum_mgmt(tree, tvb, pinfo, offset);
9405 case CAT_QOS: /* 1 */
9406 return add_ff_action_qos(tree, tvb, pinfo, offset);
9407 case CAT_DLS: /* 2 */
9408 return add_ff_action_dls(tree, tvb, pinfo, offset);
9409 case CAT_BLOCK_ACK: /* 3 */
9410 return add_ff_action_block_ack(tree, tvb, pinfo, offset);
9411 case CAT_PUBLIC: /* 4 */
9412 return add_ff_action_public(tree, tvb, pinfo, offset);
9413 case CAT_RADIO_MEASUREMENT: /* 5 */
9414 return add_ff_action_radio_measurement(tree, tvb, pinfo, offset);
9415 case CAT_FAST_BSS_TRANSITION: /* 6 */
9416 return add_ff_action_fast_bss_transition(tree, tvb, pinfo, offset);
9417 case CAT_HT: /* 7 */
9418 return add_ff_action_ht(tree, tvb, pinfo, offset);
9419 case CAT_SA_QUERY: /* 8 */
9420 return add_ff_action_sa_query(tree, tvb, pinfo, offset);
9421 case CAT_PUBLIC_PROTECTED: /* 9 */
9422 return add_ff_action_protected_public(tree, tvb, pinfo, offset);
9423 case CAT_WNM: /* 10 */
9424 return add_ff_action_wnm(tree, tvb, pinfo, offset);
9425 case CAT_UNPROTECTED_WNM: /* 11 */
9426 return add_ff_action_unprotected_wnm(tree, tvb, pinfo, offset);
9427 case CAT_TDLS: /* 12 */
9428 return add_ff_action_tdls(tree, tvb, pinfo, offset);
9429 case CAT_MESH: /* 13 */
9430 return add_ff_action_mesh(tree, tvb, pinfo, offset);
9431 case CAT_MULTIHOP: /* 14 */
9432 return add_ff_action_multihop(tree, tvb, pinfo, offset);
9433 case CAT_SELF_PROTECTED: /* 15 */
9434 return add_ff_action_self_protected(tree, tvb, pinfo, offset);
9435 case CAT_DMG: /* 16 */
9436 return add_ff_action_dmg(tree, tvb, pinfo, offset);
9437 case CAT_MGMT_NOTIFICATION: /* Management notification frame - 17 */
9438 return add_ff_action_mgmt_notification(tree, tvb, pinfo, offset);
9439 case CAT_FAST_SESSION_TRANSFER: /* 18 */
9440 return add_ff_action_fst(tree, tvb, pinfo, offset);
9441 /* case CAT_ROBUST_AV_STREAMING: 19 */
9442 /* return add_ff_action_robust_av_streaming(tree, tvb, pinfo, offset); */
9443 case CAT_UNPROTECTED_DMG: /* 20 */
9444 return add_ff_action_unprotected_dmg(tree, tvb, pinfo, offset);
9445 case CAT_VHT: /* 21 */
9446 return add_ff_action_vht(tree, tvb, pinfo, offset);
9447 /* case CAT_VENDOR_SPECIFIC_PROTECTED: Vendor Specific Protected Category - 126 */
9448 /* return add_ff_action_vendor_specific_protected(tree, tvb, pinfo, offset);*/
9449 case CAT_VENDOR_SPECIFIC: /* Vendor Specific Protected Category - 127 */
9450 return add_ff_action_vendor_specific(tree, tvb, pinfo, offset);
9452 add_ff_category_code(tree, tvb, pinfo, offset);
9457 static const value_string ieee80211_rsn_cipher_vals[] = {
9459 {1, "WEP (40-bit)"},
9463 {5, "WEP (104-bit)"},
9465 {7, "Group addressed traffic not allowed"},
9470 static const value_string ieee80211_rsn_keymgmt_vals[] = {
9474 {3, "FT over IEEE 802.1X"},
9475 {4, "FT using PSK"},
9476 {5, "WPA (SHA256)"},
9477 {6, "PSK (SHA256)"},
9478 {7, "TDLS / TPK Handshake"},
9483 oui_base_custom(gchar *result, guint32 oui)
9486 const gchar *manuf_name;
9488 p_oui[0] = oui >> 16 & 0xFF;
9489 p_oui[1] = oui >> 8 & 0xFF;
9490 p_oui[2] = oui & 0xFF;
9492 /* Attempt an OUI lookup. */
9493 manuf_name = get_manuf_name_if_known(p_oui);
9494 if (manuf_name == NULL) {
9495 /* Could not find an OUI. */
9496 g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x", p_oui[0], p_oui[1], p_oui[2]);
9499 /* Found an address string. */
9500 g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x (%s)", p_oui[0], p_oui[1], p_oui[2], manuf_name);
9505 rsn_gcs_base_custom(gchar *result, guint32 gcs)
9507 gchar oui_result[SHORT_STR];
9510 oui_result[0] = '\0';
9511 oui_base_custom(oui_result, gcs >> 8);
9512 tmp_str = val_to_str_wmem(NULL, gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
9513 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9514 wmem_free(NULL, tmp_str);
9518 rsn_pcs_base_custom(gchar *result, guint32 pcs)
9520 gchar oui_result[SHORT_STR];
9523 oui_result[0] = '\0';
9524 oui_base_custom(oui_result, pcs >> 8);
9525 tmp_str = val_to_str_wmem(NULL, pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
9526 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9527 wmem_free(NULL, tmp_str);
9531 rsn_akms_base_custom(gchar *result, guint32 akms)
9533 gchar oui_result[SHORT_STR];
9536 oui_result[0] = '\0';
9537 oui_base_custom(oui_result, akms >> 8);
9538 tmp_str = val_to_str_wmem(NULL, akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d");
9539 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9540 wmem_free(NULL, tmp_str);
9544 rsn_pcs_return(guint32 pcs)
9548 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR);
9550 rsn_pcs_base_custom(result, pcs);
9556 rsn_akms_return(guint32 akms)
9560 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR);
9562 rsn_akms_base_custom(result, akms);
9568 rsn_gmcs_base_custom(gchar *result, guint32 gmcs)
9570 gchar oui_result[SHORT_STR];
9573 oui_result[0] = '\0';
9574 oui_base_custom(oui_result, gmcs >> 8);
9575 tmp_str = val_to_str_wmem(NULL, gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
9576 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9577 wmem_free(NULL, tmp_str);
9581 rsni_base_custom(gchar *result, guint32 rsni)
9585 temp_double = (double)rsni;
9586 g_snprintf(result, ITEM_LABEL_LENGTH, "%f dB", (temp_double / 2));
9590 vht_tpe_custom(gchar *result, guint8 txpwr)
9594 txpwr_db = (gint8)(txpwr);
9595 g_snprintf(result, ITEM_LABEL_LENGTH, "%3.1f dBm", (txpwr_db/2.0));
9599 channel_number_custom(gchar *result, guint8 channel_number)
9601 switch(channel_number){
9603 g_snprintf(result, ITEM_LABEL_LENGTH, "%u (iterative measurements on all supported channels in the specified Operating Class)", channel_number);
9606 g_snprintf(result, ITEM_LABEL_LENGTH, "%u (iterative measurements on all supported channels listed in the AP Channel Report)", channel_number);
9609 g_snprintf(result, ITEM_LABEL_LENGTH, "%u (iterative measurements on that Channel Number)", channel_number);
9615 static const value_string ieee802111_wfa_ie_type_vals[] = {
9616 { 1, "WPA Information Element" },
9622 static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] = {
9624 { 1, "WEP (40-bit)" },
9628 { 5, "WEP (104-bit)" },
9630 { 7, "Group addressed traffic not allowed" },
9634 static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] = {
9638 { 3, "FT over IEEE 802.1X" },
9639 { 4, "FT using PSK" },
9640 { 5, "WPA (SHA256)" },
9641 { 6, "PSK (SHA256)" },
9642 { 7, "TDLS / TPK Handshake" },
9646 static const value_string ieee80211_wfa_ie_wme_acs_vals[] = {
9647 { 0, "Best Effort" },
9648 { 1, "Background" },
9654 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals[] = {
9657 { 2, "Direct link" },
9658 { 3, "Bidirectional link" },
9662 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals[] = {
9668 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals[] = {
9669 { 0, "Best Effort" },
9670 { 1, "Background" },
9672 { 3, "Excellent Effort" },
9673 { 4, "Controlled Load" },
9676 { 7, "Network Control" },
9680 static const value_string ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals[] = {
9681 { 0, "WMM AP may deliver all buffered frames (MSDUs and MMPDUs)" },
9682 { 1, "WMM AP may deliver a maximum of 2 buffered frames (MSDUs and MMPDUs) per USP" },
9683 { 2, "WMM AP may deliver a maximum of 4 buffered frames (MSDUs and MMPDUs) per USP" },
9684 { 3, "WMM AP may deliver a maximum of 6 buffered frames (MSDUs and MMPDUs) per USP" },
9687 static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = {
9688 "WMM delivery and trigger enabled",
9693 wpa_mcs_base_custom(gchar *result, guint32 mcs)
9695 gchar oui_result[SHORT_STR];
9698 oui_result[0] = '\0';
9699 oui_base_custom(oui_result, mcs >> 8);
9700 tmp_str = val_to_str_wmem(NULL, mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
9701 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9702 wmem_free(NULL, tmp_str);
9706 wpa_ucs_base_custom(gchar *result, guint32 ucs)
9708 gchar oui_result[SHORT_STR];
9711 oui_result[0] = '\0';
9712 oui_base_custom(oui_result, ucs >> 8);
9713 tmp_str = val_to_str_wmem(NULL, ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
9714 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9715 wmem_free(NULL, tmp_str);
9718 wpa_akms_base_custom(gchar *result, guint32 akms)
9720 gchar oui_result[SHORT_STR];
9723 oui_result[0] = '\0';
9724 oui_base_custom(oui_result, akms >> 8);
9725 tmp_str = val_to_str_wmem(NULL, akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d");
9726 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9727 wmem_free(NULL, tmp_str);
9731 wpa_ucs_return(guint32 ucs)
9735 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR);
9737 wpa_ucs_base_custom(result, ucs);
9743 wpa_akms_return(guint32 akms)
9747 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR);
9749 wpa_akms_base_custom(result, akms);
9754 /* For each Field */
9755 static const value_string ieee80211_wapi_suite_type[] = {
9757 {1, "WAI Certificate Authentication and Key Management"},
9758 {2, "WAI Preshared Key Authentication and Key Management"},
9761 /* For Summary Tag Information */
9762 static const value_string ieee80211_wapi_suite_type_short[] = {
9769 static const value_string ieee80211_wapi_cipher_type[] = {
9775 static const value_string ieee802111_wfa_ie_wme_type[] = {
9776 { 0, "Information Element" },
9777 { 1, "Parameter Element" },
9778 { 2, "TSPEC Element" },
9782 static const value_string ft_subelem_id_vals[] = {
9784 {1, "PMK-R1 key holder identifier (R1KH-ID)"},
9785 {2, "GTK subelement"},
9786 {3, "PMK-R0 key holder identifier (R0KH-ID)"},
9792 dissect_wme_qos_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
9794 proto_tree *wme_qos_info_tree;
9795 proto_item *wme_qos_info_item;
9797 wme_qos_info_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_qos_info, tvb, offset, 1, ENC_NA);
9798 wme_qos_info_tree = proto_item_add_subtree(wme_qos_info_item, ett_wme_qos_info);
9803 case MGT_REASSOC_REQ:
9805 /* To AP so decode as per WMM standard Figure 7 QoS Info field when sent from WMM STA*/
9806 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length, tvb, offset, 1, ENC_NA);
9807 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be, tvb, offset, 1, ENC_NA);
9808 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk, tvb, offset, 1, ENC_NA);
9809 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi, tvb, offset, 1, ENC_NA);
9810 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo, tvb, offset, 1, ENC_NA);
9811 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved, tvb, offset, 1, ENC_NA);
9815 case MGT_PROBE_RESP:
9816 case MGT_ASSOC_RESP:
9817 case MGT_REASSOC_RESP:
9819 /* From AP so decode as per WMM standard Figure 6 QoS Info field when sent from WMM AP */
9820 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd, tvb, offset, 1, ENC_NA);
9821 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count, tvb, offset, 1, ENC_NA);
9822 proto_tree_add_item(wme_qos_info_tree, hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved, tvb, offset, 1, ENC_NA);
9826 expert_add_info_format(pinfo, wme_qos_info_item, &ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype, "Could not deduce direction to decode correctly, ftype %u", ftype);
9835 dissect_vendor_ie_wpawme(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, guint32 tag_len, int ftype)
9839 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_type, tvb, offset, 1, ENC_NA);
9840 type = tvb_get_guint8(tvb, offset);
9841 proto_item_append_text(tree, ": %s", val_to_str(type, ieee802111_wfa_ie_type_vals, "Unknown %d"));
9845 case 1: /* Wi-Fi Protected Access (WPA) */
9847 proto_item *wpa_mcs_item, *wpa_ucs_item, *wpa_akms_item;
9848 proto_item *wpa_sub_ucs_item, *wpa_sub_akms_item;
9849 proto_tree *wpa_mcs_tree, *wpa_ucs_tree, *wpa_akms_tree;
9850 proto_tree *wpa_sub_ucs_tree, *wpa_sub_akms_tree;
9851 guint16 ucs_count, akms_count;
9854 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9857 /* Multicast Cipher Suite */
9858 wpa_mcs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_mcs, tvb, offset, 4, ENC_BIG_ENDIAN);
9859 wpa_mcs_tree = proto_item_add_subtree(wpa_mcs_item, ett_wpa_mcs_tree);
9860 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
9862 /* Check if OUI is 00:50:F2 (WFA) */
9863 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME)
9865 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_wfa_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
9867 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
9871 /* Unicast Cipher Suites */
9872 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9873 ucs_count = tvb_get_letohs(tvb, offset);
9876 wpa_ucs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_list, tvb, offset, ucs_count * 4, ENC_NA);
9877 wpa_ucs_tree = proto_item_add_subtree(wpa_ucs_item, ett_wpa_ucs_tree);
9878 for (ii = 0; ii < ucs_count; ii++)
9880 wpa_sub_ucs_item = proto_tree_add_item(wpa_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs, tvb, offset, 4, ENC_BIG_ENDIAN);
9881 wpa_sub_ucs_tree = proto_item_add_subtree(wpa_sub_ucs_item, ett_wpa_sub_ucs_tree);
9882 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
9884 /* Check if OUI is 00:50:F2 (WFA) */
9885 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME)
9887 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
9888 proto_item_append_text(wpa_ucs_item, " %s", wpa_ucs_return(tvb_get_ntohl(tvb, offset)));
9890 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
9895 /* Authenticated Key Management Suites */
9896 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9897 akms_count = tvb_get_letohs(tvb, offset);
9900 wpa_akms_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_list, tvb, offset, akms_count * 4, ENC_NA);
9901 wpa_akms_tree = proto_item_add_subtree(wpa_akms_item, ett_wpa_akms_tree);
9902 for (ii = 0; ii < akms_count; ii++)
9904 wpa_sub_akms_item = proto_tree_add_item(wpa_akms_tree, hf_ieee80211_wfa_ie_wpa_akms, tvb, offset, 4, ENC_BIG_ENDIAN);
9905 wpa_sub_akms_tree = proto_item_add_subtree(wpa_sub_akms_item, ett_wpa_sub_akms_tree);
9906 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
9908 /* Check if OUI is 00:50:F2 (WFA) */
9909 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME)
9911 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
9912 proto_item_append_text(wpa_akms_item, " %s", wpa_akms_return(tvb_get_ntohl(tvb, offset)));
9914 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
9920 case 2: /* Wireless Multimedia Enhancements (WME) */
9924 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_subtype, tvb, offset, 1, ENC_NA);
9925 subtype = tvb_get_guint8(tvb, offset);
9926 proto_item_append_text(tree, ": %s", val_to_str(subtype, ieee802111_wfa_ie_wme_type, "Unknown %d"));
9928 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA);
9931 case 0: /* WME Information Element */
9933 /* WME QoS Info Field */
9934 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
9937 case 1: /* WME Parameter Element */
9940 /* WME QoS Info Field */
9941 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
9942 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_reserved, tvb, offset, 1, ENC_NA);
9945 for (i = 0; i < 4; i++)
9947 proto_item *ac_item, *aci_aifsn_item, *ecw_item;
9948 proto_tree *ac_tree, *aci_aifsn_tree, *ecw_tree;
9949 guint8 aci_aifsn, ecw, ecwmin, ecwmax;
9950 guint16 cwmin, cwmax;
9952 ac_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_ac_parameters, tvb, offset, 4, ENC_NA);
9953 ac_tree = proto_item_add_subtree(ac_item, ett_wme_ac);
9955 /* ACI/AIFSN Field */
9956 aci_aifsn_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_aci_aifsn, tvb, offset, 1, ENC_NA);
9957 aci_aifsn_tree = proto_item_add_subtree(aci_aifsn_item, ett_wme_aci_aifsn);
9958 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_aci, tvb, offset, 1, ENC_NA);
9959 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_acm, tvb, offset, 1, ENC_NA);
9960 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_aifsn, tvb, offset, 1, ENC_NA);
9961 proto_tree_add_item(aci_aifsn_tree, hf_ieee80211_wfa_ie_wme_acp_reserved, tvb, offset, 1, ENC_NA);
9962 aci_aifsn = tvb_get_guint8(tvb, offset);
9963 /* 802.11-2012, 8.4.2.31 EDCA Parameter Set element */
9964 if (aci_aifsn < 2) {
9965 expert_add_info_format(pinfo, aci_aifsn_tree, &ei_ieee80211_qos_bad_aifsn,
9966 "The minimum value for the AIFSN subfield is 2 (found %u).", aci_aifsn);
9968 proto_item_append_text(ac_item, " ACI %u (%s), ACM %s, AIFSN %u",
9969 (aci_aifsn & 0x60) >> 5, try_val_to_str((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
9970 (aci_aifsn & 0x10) ? "yes" : "no", aci_aifsn & 0x0f);
9973 /* ECWmin/ECWmax field */
9974 ecw_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_ecw, tvb, offset, 1, ENC_NA);
9975 ecw_tree = proto_item_add_subtree(ecw_item, ett_wme_ecw);
9976 ecw = tvb_get_guint8(tvb, offset);
9977 ecwmin = ecw & 0x0f;
9978 ecwmax = (ecw & 0xf0) >> 4;
9979 cwmin= (1 << ecwmin) - 1;
9980 cwmax= (1 << ecwmax) - 1;
9981 proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_max, tvb, offset, 1, ENC_NA);
9982 proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_min, tvb, offset, 1, ENC_NA);
9983 proto_tree_add_uint(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_cw_max, tvb, offset, 1, cwmax);
9984 proto_tree_add_uint(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_cw_min, tvb, offset, 1, cwmin);
9985 proto_item_append_text(ac_item, ", ECWmin/max %u/%u (CWmin/max %u/%u)", ecwmin, ecwmax, cwmin, cwmax);
9989 proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_txop_limit, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9990 proto_item_append_text(ac_item, ", TXOP %u", tvb_get_letohs(tvb, offset));
9995 case 2: /* WME TSPEC Element */
9998 proto_item *tsinfo_item;
9999 proto_tree *tsinfo_tree;
10001 tsinfo_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo, tvb, offset, 3, ENC_LITTLE_ENDIAN);
10002 tsinfo_tree = proto_item_add_subtree(tsinfo_item, ett_tsinfo_tree);
10004 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid, tvb, offset, 3, ENC_LITTLE_ENDIAN);
10005 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction, tvb, offset, 3, ENC_LITTLE_ENDIAN);
10006 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb, tvb, offset, 3, ENC_LITTLE_ENDIAN);
10007 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up, tvb, offset, 3, ENC_LITTLE_ENDIAN);
10008 proto_tree_add_item(tsinfo_tree, hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved, tvb, offset, 3, ENC_LITTLE_ENDIAN);
10011 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10014 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10017 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10020 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10023 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10026 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10029 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10032 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10035 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10038 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10041 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10044 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10047 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10050 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10053 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10059 /* No default Action */
10061 } /* End switch (subtype) */
10064 case 4: /* WPS: Wifi Protected Setup */
10066 dissect_wps_tlvs(tree, tvb, offset, tag_len-1, NULL);
10070 /* No default Action...*/
10072 } /* End switch (type) */
10077 static const value_string hs20_indication_release_number_vals[] = {
10078 { 0, "Release 1" },
10079 { 1, "Release 2" },
10084 dissect_hs20_indication(proto_tree *tree, tvbuff_t *tvb, int offset)
10086 proto_tree_add_item(tree, hf_hs20_indication_dgaf_disabled, tvb, offset, 1,
10087 ENC_LITTLE_ENDIAN);
10088 proto_tree_add_item(tree, hf_hs20_indication_pps_mo_id_present, tvb, offset, 1,
10089 ENC_LITTLE_ENDIAN);
10090 proto_tree_add_item(tree, hf_hs20_indication_anqp_domain_id_present, tvb, offset, 1,
10091 ENC_LITTLE_ENDIAN);
10092 proto_tree_add_item(tree, hf_hs20_indication_release_number, tvb, offset, 1,
10093 ENC_LITTLE_ENDIAN);
10097 dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
10099 gint tag_len = tvb_reported_length(tag_tvb);
10104 switch (tvb_get_guint8(tag_tvb, 3)) {
10105 case WFA_SUBTYPE_P2P:
10106 dissect_wifi_p2p_ie(pinfo, item, tag_tvb, 4, tag_len - 4);
10107 proto_item_append_text(item, ": P2P");
10109 case WFA_SUBTYPE_WIFI_DISPLAY:
10110 dissect_wifi_display_ie(pinfo, item, tag_tvb, 4, tag_len - 4);
10111 proto_item_append_text(item, ": Wi-Fi Display");
10113 case WFA_SUBTYPE_HS20_INDICATION:
10114 dissect_hs20_indication(item, tag_tvb, 4);
10115 proto_item_append_text(item, ": Hotspot 2.0 Indication");
10121 dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tvb, int offset, guint32 tag_len)
10124 switch(tvb_get_guint8(tvb, offset)){
10127 /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
10128 * This is only used within EAPOL-Key frame Key Data. */
10130 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_pmkid, tvb, offset, 16, ENC_NA);
10134 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_unknown, tvb, offset, tag_len, ENC_NA);
10138 proto_item_append_text(item, ": RSN");
10143 MARVELL_IE_MESH = 4
10144 } marvell_ie_type_t;
10147 dissect_vendor_ie_marvell(proto_item *item _U_, proto_tree *ietree,
10148 tvbuff_t *tvb, int offset, guint32 tag_len)
10152 type = tvb_get_guint8(tvb, offset);
10153 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10157 case MARVELL_IE_MESH:
10158 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_subtype, tvb,
10159 offset++, 1, ENC_LITTLE_ENDIAN);
10160 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_version, tvb,
10161 offset++, 1, ENC_LITTLE_ENDIAN);
10162 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_proto_id, tvb,
10163 offset++, 1, ENC_LITTLE_ENDIAN);
10164 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_metric_id, tvb,
10165 offset++, 1, ENC_LITTLE_ENDIAN);
10166 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_cap, tvb,
10167 offset++, 1, ENC_LITTLE_ENDIAN);
10171 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_data, tvb, offset,
10172 tag_len - 1, ENC_NA);
10178 ATHEROS_IE_ADVCAP = 1,
10180 } atheros_ie_type_t;
10183 ATHEROS_IE_ADVCAP_S = 1
10184 } atheros_ie_advcap_subtype_t;
10187 ATHEROS_IE_XR_S = 1
10188 } atheros_ie_xr_subtype_t;
10191 ATHEROS_IE_CAP_TURBOP = 0x01,
10192 ATHEROS_IE_CAP_COMP = 0x02,
10193 ATHEROS_IE_CAP_FF = 0x04,
10194 ATHEROS_IE_CAP_XR = 0x08,
10195 ATHEROS_IE_CAP_AR = 0x10,
10196 ATHEROS_IE_CAP_BURST = 0x20,
10197 ATHEROS_IE_CAP_WME = 0x40,
10198 ATHEROS_IE_CAP_BOOST = 0x80
10199 } atheros_ie_cap_t;
10201 static const value_string atheros_ie_type_vals[] = {
10202 { ATHEROS_IE_ADVCAP, "Advanced Capability"},
10203 { ATHEROS_IE_XR, "eXtended Range"},
10208 dissect_vendor_ie_atheros_cap(proto_item *item _U_, tvbuff_t *tvb, int offset)
10210 proto_tree *cap_tree;
10212 cap_tree = proto_item_add_subtree(item, ett_ath_cap_tree);
10214 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_turbop, tvb, offset, 1, ENC_NA);
10215 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_comp, tvb, offset, 1, ENC_NA);
10216 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ff, tvb, offset, 1, ENC_NA);
10217 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_xr, tvb, offset, 1, ENC_NA);
10218 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_ar, tvb, offset, 1, ENC_NA);
10219 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_burst, tvb, offset, 1, ENC_NA);
10220 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_wme, tvb, offset, 1, ENC_NA);
10221 proto_tree_add_item(cap_tree, hf_ieee80211_atheros_ie_cap_f_boost, tvb, offset, 1, ENC_NA);
10226 dissect_vendor_ie_atheros(proto_item *item _U_, proto_tree *ietree,
10227 tvbuff_t *tvb, int offset, guint tag_len,
10228 packet_info *pinfo, proto_item *ti_len)
10233 proto_item *cap_item;
10235 if (tag_len <= 3) {
10236 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 6", tag_len+3); /* Add length of OUI to tag_length */
10239 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_type, tvb, offset, 1, ENC_NA);
10240 type = tvb_get_guint8(tvb, offset);
10241 proto_item_append_text(item, ": %s", val_to_str_const(type, atheros_ie_type_vals, "Unknown"));
10245 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_subtype, tvb, offset, 1, ENC_NA);
10246 subtype = tvb_get_guint8(tvb, offset);
10250 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_version, tvb, offset, 1, ENC_NA);
10251 version = tvb_get_guint8(tvb, offset);
10258 case ATHEROS_IE_ADVCAP:
10261 case ATHEROS_IE_ADVCAP_S:
10263 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_cap, tvb, offset, 1, ENC_NA);
10264 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
10268 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_defkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10274 /* No default Action */
10276 } /* End switch (subtype) */
10279 case ATHEROS_IE_XR:
10282 case ATHEROS_IE_XR_S:
10284 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_info, tvb, offset, 1, ENC_NA);
10288 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_bssid, tvb, offset, 6, ENC_NA);
10292 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_bssid, tvb, offset, 6, ENC_NA);
10296 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10300 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_cap, tvb, offset, 1, ENC_NA);
10301 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
10305 cap_item = proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_cap, tvb, offset, 1, ENC_NA);
10306 dissect_vendor_ie_atheros_cap(cap_item, tvb, offset);
10312 /* No default Action */
10314 } /* End switch (subtype) */
10317 /* No default Action */
10319 } /* End switch (type) */
10324 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA);
10329 AIRONET_IE_DTPC = 0,
10330 AIRONET_IE_UNKNOWN1 = 1,
10331 AIRONET_IE_VERSION = 3,
10333 AIRONET_IE_UNKNOWN11 = 11,
10334 AIRONET_IE_QBSS_V2 = 14,
10335 AIRONET_IE_CLIENT_MFP = 20
10336 } aironet_ie_type_t;
10338 static const value_string aironet_ie_type_vals[] = {
10339 { AIRONET_IE_DTPC, "DTPC"},
10340 { AIRONET_IE_UNKNOWN1, "Unknown (1)"},
10341 { AIRONET_IE_VERSION, "CCX version"},
10342 { AIRONET_IE_QOS, "Qos"},
10343 { AIRONET_IE_UNKNOWN11, "Unknown (11)"},
10344 { AIRONET_IE_QBSS_V2, "QBSS V2 - CCA"},
10345 { AIRONET_IE_CLIENT_MFP, "Client MFP"},
10349 static const value_string aironet_mfp_vals[] = {
10356 dissect_vendor_ie_aironet(proto_item *aironet_item, proto_tree *ietree,
10357 tvbuff_t *tvb, int offset, guint32 tag_len)
10361 gboolean dont_change = FALSE; /* Don't change the IE item text to default */
10363 type = tvb_get_guint8(tvb, offset);
10364 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10368 case AIRONET_IE_DTPC:
10369 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc, tvb, offset, 2, ENC_NA);
10370 proto_item_append_text(aironet_item, ": Aironet DTPC Powerlevel 0x%02X", tvb_get_guint8(tvb, offset));
10371 dont_change = TRUE;
10373 case AIRONET_IE_VERSION:
10374 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_version, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10375 proto_item_append_text(aironet_item, ": Aironet CCX version = %d", tvb_get_guint8(tvb, offset));
10376 dont_change = TRUE;
10378 case AIRONET_IE_QOS:
10379 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10381 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_paramset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10384 /* XXX: just copied over from WME. Maybe "Best Effort" and "Background"
10385 * need to be swapped. Also, the "TXOP" may be TXOP - or not.
10387 for (i = 0; i < 4; i++) {
10388 guint8 byte1, byte2;
10390 byte1 = tvb_get_guint8(tvb, offset);
10391 byte2 = tvb_get_guint8(tvb, offset + 1);
10392 txop = tvb_get_letohs(tvb, offset + 2);
10393 proto_tree_add_bytes_format(ietree, hf_ieee80211_aironet_ie_qos_val, tvb, offset, 4, NULL,
10394 "CCX QoS Parameters: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
10395 (byte1 & 0x60) >> 5, val_to_str((byte1 & 0x60) >> 5, wme_acs, "(Unknown: %d)"),
10396 (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
10397 byte2 & 0x0f, (byte2 & 0xf0) >> 4,
10402 case AIRONET_IE_QBSS_V2:
10403 /* Extract Values */
10404 proto_tree_add_item(ietree, hf_ieee80211_qbss2_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10405 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
10406 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cal, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
10407 proto_tree_add_item(ietree, hf_ieee80211_qbss2_gl, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
10409 case AIRONET_IE_CLIENT_MFP:
10410 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_clientmfp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10411 proto_item_append_text(aironet_item, ": Aironet Client MFP %s",
10412 val_to_str_const(1 & tvb_get_guint8(tvb, offset), aironet_mfp_vals, "Unknown"));
10413 dont_change = TRUE;
10416 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_data, tvb, offset,
10417 tag_len - 1, ENC_NA);
10420 if (!dont_change) {
10421 proto_item_append_text(aironet_item, ": Aironet %s (%d)",
10422 val_to_str_const(type, aironet_ie_type_vals, "Unknown"), type);
10426 #define ARUBA_APNAME 3
10427 static const value_string ieee80211_vs_aruba_subtype_vals[] = {
10428 { ARUBA_APNAME, "AP Name"},
10432 dissect_vendor_ie_aruba(proto_item *item, proto_tree *ietree,
10433 tvbuff_t *tvb, int offset, guint32 tag_len)
10436 const guint8* name;
10438 offset += 1; /* VS OUI Type */
10441 type = tvb_get_guint8(tvb, offset);
10442 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_subtype, tvb, offset, 1, ENC_NA);
10443 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aruba_subtype_vals, "Unknown"));
10452 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aruba_apname, tvb,
10453 offset, tag_len, ENC_ASCII|ENC_NA, wmem_packet_scope(), &name);
10454 proto_item_append_text(item, " (%s)", name);
10458 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_data, tvb, offset,
10460 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(wmem_packet_scope(), tvb, offset, tag_len));
10466 dissect_vendor_ie_mikrotik(proto_item *item _U_, proto_tree *ietree,
10467 tvbuff_t *tvb, int offset, guint32 tag_len)
10469 guint8 type, length;
10470 proto_item *subitem;
10471 proto_tree *subtree;
10473 offset += 1; /* VS OUI Type */
10475 /* FIXME: Make sure we have at least 2 bytes left */
10476 proto_tree_add_item(ietree, hf_ieee80211_vs_mikrotik_unknown, tvb, offset, 2, ENC_NA);
10481 while (tag_len >= 2) {
10482 type = tvb_get_guint8(tvb, offset);
10483 length = tvb_get_guint8(tvb, offset+1);
10484 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_mikrotik_subitem, tvb, offset, length+2, ENC_NA);
10485 subtree = proto_item_add_subtree(subitem, ett_mikrotik);
10486 proto_item_set_text(subitem, "Sub IE (T/L: %d/%d)", type, length);
10488 proto_tree_add_item(subtree, hf_ieee80211_vs_mikrotik_subtype, tvb, offset, 1, ENC_NA);
10492 proto_tree_add_item(subtree, hf_ieee80211_vs_mikrotik_sublength, tvb, offset, 1, ENC_NA);
10496 if (tag_len < length)
10497 /* FIXME: warn about this */
10503 proto_tree_add_item(subtree, hf_ieee80211_vs_mikrotik_subdata, tvb, offset, length, ENC_NA);
10509 enum vs_nintendo_type {
10510 NINTENDO_SERVICES = 0x11,
10511 NINTENDO_CONSOLEID = 0xF0
10514 static const value_string ieee80211_vs_nintendo_type_vals[] = {
10515 { NINTENDO_SERVICES, "Services"},
10516 { NINTENDO_CONSOLEID, "ConsoleID"},
10521 dissect_vendor_ie_nintendo_tlv(const int hfindex, proto_tree *ietree,
10522 tvbuff_t *tvb, int offset, guint32 sublen)
10524 proto_item *nintendo_item;
10525 proto_tree *nintendo_tree;
10527 nintendo_item = proto_tree_add_item(ietree, hfindex, tvb, offset, sublen, ENC_NA);
10528 nintendo_tree = proto_item_add_subtree(nintendo_item, ett_nintendo);
10530 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_type, tvb, offset, 1, ENC_NA);
10531 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_length, tvb, offset + 1, 1, ENC_NA);
10533 return nintendo_tree;
10537 dissect_vendor_ie_nintendo(proto_item *item _U_, proto_tree *ietree,
10538 tvbuff_t *tvb, int offset, guint32 tag_len)
10540 proto_tree *nintendo_tree;
10544 guint32 length = tag_len;
10546 /* Skip OUI type for now - the code is for type 1 (StreetPass) only */
10547 /* http://3dbrew.org/wiki/StreetPass */
10551 while(length > 0 && length < 256) { /* otherwise we are < 0 but on unsigned */
10552 subtype = tvb_get_guint8(tvb, offset);
10553 sublength = tvb_get_guint8(tvb, offset + 1);
10556 case NINTENDO_SERVICES:
10557 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_servicelist, ietree, tvb, offset, sublength + 2);
10561 while (sublength > 4) {
10563 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_service, tvb, offset, 5, ENC_NA);
10569 case NINTENDO_CONSOLEID:
10570 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_consoleid, ietree, tvb, offset, sublength + 2);
10574 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_consoleid, tvb, offset, sublength, ENC_NA);
10575 offset += sublength;
10576 length -= sublength;
10579 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_unknown, ietree, tvb, offset, sublength + 2);
10583 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_unknown, tvb, offset, sublength, ENC_NA);
10584 offset += sublength;
10585 length -= sublength;
10592 dissect_vendor_ie_meru(proto_item *item _U_, proto_tree *ietree,
10593 tvbuff_t *tvb, int offset, guint32 tag_len,
10594 packet_info *pinfo)
10596 guint32 type, length;
10597 proto_item *subitem, *ti_len;
10598 proto_tree *subtree;
10600 while (tag_len >= 2) {
10601 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_meru_subitem, tvb, offset, 2, ENC_NA);
10602 subtree = proto_item_add_subtree(subitem, ett_meru);
10604 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_subtype, tvb, offset, 1, ENC_NA, &type);
10608 ti_len = proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_sublength, tvb, offset, 1, ENC_NA, &length);
10612 if (tag_len < length) {
10613 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < Sub Length");
10617 proto_item_append_text(subitem, " (t=%d, l=%d)", type, length);
10618 proto_item_set_len(subitem, 2+length);
10620 proto_tree_add_item(subtree, hf_ieee80211_vs_meru_subdata, tvb, offset, length, ENC_NA);
10627 static const value_string ieee80211_vs_extreme_subtype_vals[] = {
10633 dissect_vendor_ie_extreme(proto_item *item _U_, proto_tree *ietree,
10634 tvbuff_t *tvb, int offset, guint32 tag_len,
10635 packet_info *pinfo)
10637 guint32 type, length;
10638 proto_item *ti_len;
10640 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_subtype, tvb, offset, 1, ENC_NA, &type);
10644 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_subdata, tvb, offset, tag_len, ENC_NA);
10647 case 1: /* Unknown (7 bytes) + AP Name Length (1 byte) + AP Name */
10649 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_unknown, tvb, offset, 7, ENC_NA);
10653 ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_ap_length, tvb, offset, 1, ENC_NA, &length);
10657 if (tag_len < length) {
10658 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < AP Length");
10662 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_ap_name, tvb, offset, length, ENC_ASCII|ENC_NA);
10666 /* Expert info ? */
10671 /* 802.11-2012 8.4.2.37 QoS Capability element */
10673 dissect_qos_capability(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
10676 case MGT_ASSOC_REQ:
10677 case MGT_PROBE_REQ:
10678 case MGT_REASSOC_REQ:
10680 /* To AP so decode Qos Info as STA */
10681 offset += add_ff_qos_info_sta(tree, tvb, pinfo, offset);
10686 case MGT_PROBE_RESP:
10687 case MGT_ASSOC_RESP:
10688 case MGT_REASSOC_RESP:
10690 /* From AP so decode QoS Info as AP */
10691 offset += add_ff_qos_info_ap(tree, tvb, pinfo, offset);
10696 expert_add_info_format(pinfo, proto_tree_get_parent(tree), &ei_ieee80211_qos_info_bad_ftype,
10697 "Could not deduce direction to decode correctly, ftype %u", ftype);
10704 /* 7.3.2.25 RSN information element */
10706 dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
10707 int offset, guint32 tag_len, association_sanity_check_t *association_sanity_check)
10709 proto_item *rsn_gcs_item, *rsn_pcs_item, *rsn_akms_item, *rsn_cap_item, *rsn_pmkid_item, *rsn_gmcs_item;
10710 proto_item *rsn_sub_pcs_item, *rsn_sub_akms_item;
10711 proto_item *rsn_pcs_count, *rsn_akms_count, *rsn_pmkid_count;
10712 proto_tree *rsn_gcs_tree, *rsn_pcs_tree, *rsn_akms_tree, *rsn_cap_tree, *rsn_pmkid_tree, *rsn_gmcs_tree;
10713 proto_tree *rsn_sub_pcs_tree, *rsn_sub_akms_tree;
10714 guint16 pcs_count, akms_count, pmkid_count;
10716 int tag_end = offset + tag_len;
10718 proto_tree_add_item(tree, hf_ieee80211_rsn_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10721 /* 7.3.2.25.1 Group Cipher suites */
10722 rsn_gcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gcs, tvb, offset, 4, ENC_BIG_ENDIAN);
10723 rsn_gcs_tree = proto_item_add_subtree(rsn_gcs_item, ett_rsn_gcs_tree);
10724 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
10726 /* Check if OUI is 00:0F:AC (ieee80211) */
10727 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
10729 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
10731 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
10735 /* 7.3.2.25.2 Pairwise Cipher suites */
10736 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10737 pcs_count = tvb_get_letohs(tvb, offset);
10740 if (offset + (pcs_count * 4) > tag_end)
10742 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
10743 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
10744 pcs_count = (tag_end - offset) / 4;
10747 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA);
10748 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
10749 for (ii = 0; ii < pcs_count; ii++)
10751 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN);
10752 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
10753 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
10755 /* Check if OUI is 00:0F:AC (ieee80211) */
10756 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
10758 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
10759 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(tvb_get_ntohl(tvb, offset)));
10761 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
10766 if (offset >= tag_end)
10771 /* 7.3.2.25.2 AKM suites */
10772 rsn_akms_count = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10773 akms_count = tvb_get_letohs(tvb, offset);
10776 if (offset + (akms_count * 4) > tag_end)
10778 expert_add_info_format(pinfo, rsn_akms_count, &ei_ieee80211_rsn_pmkid_count,
10779 "Auth Key Management (AKM) Suite Count too large, 4*%u > %d", akms_count, tag_end - offset);
10780 akms_count = (tag_end - offset) / 4;
10783 rsn_akms_item = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_list, tvb, offset, akms_count * 4, ENC_NA);
10784 rsn_akms_tree = proto_item_add_subtree(rsn_akms_item, ett_rsn_akms_tree);
10785 for (ii = 0; ii < akms_count; ii++)
10787 rsn_sub_akms_item = proto_tree_add_item(rsn_akms_tree, hf_ieee80211_rsn_akms, tvb, offset, 4, ENC_BIG_ENDIAN);
10788 rsn_sub_akms_tree = proto_item_add_subtree(rsn_sub_akms_item, ett_rsn_sub_akms_tree);
10789 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
10791 /* Check if OUI is 00:0F:AC (ieee80211) */
10792 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
10794 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
10795 proto_item_append_text(rsn_akms_item, " %s", rsn_akms_return(tvb_get_ntohl(tvb, offset)));
10797 if (association_sanity_check) {
10798 guint32 akm_suite = tvb_get_ntohl(tvb, offset);
10799 if (akm_suite == 0x000FAC03 || akm_suite == 0x000FAC04 || akm_suite == 0x000FAC09) {
10800 /* This is an FT AKM suite */
10801 association_sanity_check->has_ft_akm_suite = TRUE;
10802 if (association_sanity_check->rsn_first_ft_akm_suite == NULL && rsn_sub_akms_tree != NULL) {
10803 association_sanity_check->rsn_first_ft_akm_suite = rsn_sub_akms_tree->last_child;
10806 /* This is a non-FT AKM suite */
10807 association_sanity_check->has_non_ft_akm_suite = TRUE;
10808 if (association_sanity_check->rsn_first_non_ft_akm_suite == NULL && rsn_sub_akms_tree != NULL) {
10809 association_sanity_check->rsn_first_non_ft_akm_suite = rsn_sub_akms_tree->last_child;
10814 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
10819 /* 7.3.2.25.3 RSN capabilities */
10820 rsn_cap_item = proto_tree_add_item(tree, hf_ieee80211_rsn_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10821 rsn_cap_tree = proto_item_add_subtree(rsn_cap_item, ett_rsn_cap_tree);
10823 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_preauth, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10824 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_no_pairwise, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10825 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_ptksa_replay_counter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10826 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_gtksa_replay_counter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10827 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_mfpr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10828 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_mfpc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10829 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_jmr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10830 proto_tree_add_item(rsn_cap_tree, hf_ieee80211_rsn_cap_peerkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10832 if (offset >= tag_end)
10836 /* 7.3.2.25.4 PMKID */
10837 rsn_pmkid_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10838 pmkid_count = tvb_get_letohs(tvb, offset);
10841 if (offset + (pmkid_count * 16) > tag_end)
10843 expert_add_info_format(pinfo, rsn_pmkid_count, &ei_ieee80211_pmkid_count_too_large,
10844 "PMKID Count too large, 16*%u > %d", pmkid_count, tag_end - offset);
10845 pmkid_count = (tag_end - offset) / 16;
10848 rsn_pmkid_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_list, tvb, offset, pmkid_count * 16, ENC_NA);
10849 rsn_pmkid_tree = proto_item_add_subtree(rsn_pmkid_item, ett_rsn_pmkid_tree);
10850 for (ii = 0; ii < pmkid_count; ii++)
10852 proto_tree_add_item(rsn_pmkid_tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA);
10856 if (offset >= tag_end)
10860 /* Group Management Cipher Suite (802.11w)*/
10861 rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN);
10862 rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
10863 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
10864 /* Check if OUI is 00:0F:AC (ieee80211) */
10865 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
10867 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
10869 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
10876 dissect_extended_capabilities_ie(packet_info *pinfo, proto_tree *tree,
10877 proto_item *ti, proto_item *ti_len,
10878 guint32 tag_len, tvbuff_t *tvb,
10879 int offset, int tag_end)
10881 proto_item *ti_ex_cap;
10882 proto_tree *ex_cap_tree;
10886 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be greater than 0", tag_len);
10889 proto_item_append_text(ti, " (%u octet%s)", tag_len, plurality(tag_len, "", "s"));
10891 /* Extended Capability octet 1 */
10892 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10893 proto_item_append_text(ti_ex_cap, " (octet 1)");
10894 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap1);
10895 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b0, tvb, offset, 1, ENC_NA);
10896 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b1, tvb, offset, 1, ENC_NA);
10897 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b2, tvb, offset, 1, ENC_NA);
10898 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b3, tvb, offset, 1, ENC_NA);
10899 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b4, tvb, offset, 1, ENC_NA);
10900 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b5, tvb, offset, 1, ENC_NA);
10901 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b6, tvb, offset, 1, ENC_NA);
10902 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b7, tvb, offset, 1, ENC_NA);
10905 /* Extended Capability octet 2 */
10906 if (offset >= tag_end) {
10909 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10910 proto_item_append_text(ti_ex_cap, " (octet 2)");
10911 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap2);
10912 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b8, tvb, offset, 1, ENC_NA);
10913 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b9, tvb, offset, 1, ENC_NA);
10914 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b10, tvb, offset, 1, ENC_NA);
10915 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b11, tvb, offset, 1, ENC_NA);
10916 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b12, tvb, offset, 1, ENC_NA);
10917 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b13, tvb, offset, 1, ENC_NA);
10918 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b14, tvb, offset, 1, ENC_NA);
10919 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b15, tvb, offset, 1, ENC_NA);
10922 /* Extended Capability octet 3 */
10923 if (offset >= tag_end) {
10926 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10927 proto_item_append_text(ti_ex_cap, " (octet 3)");
10928 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap3);
10929 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b16, tvb, offset, 1, ENC_NA);
10930 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b17, tvb, offset, 1, ENC_NA);
10931 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b18, tvb, offset, 1, ENC_NA);
10932 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b19, tvb, offset, 1, ENC_NA);
10933 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b20, tvb, offset, 1, ENC_NA);
10934 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b21, tvb, offset, 1, ENC_NA);
10935 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b22, tvb, offset, 1, ENC_NA);
10936 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b23, tvb, offset, 1, ENC_NA);
10939 /* Extended Capability octet 4 */
10940 if (offset >= tag_end) {
10943 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10944 proto_item_append_text(ti_ex_cap, " (octet 4)");
10945 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap4);
10946 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b24, tvb, offset, 1, ENC_NA);
10947 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b25, tvb, offset, 1, ENC_NA);
10948 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b26, tvb, offset, 1, ENC_NA);
10949 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b27, tvb, offset, 1, ENC_NA);
10950 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b28, tvb, offset, 1, ENC_NA);
10951 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b29, tvb, offset, 1, ENC_NA);
10952 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b30, tvb, offset, 1, ENC_NA);
10953 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b31, tvb, offset, 1, ENC_NA);
10956 /* Extended Capability octet 5 */
10957 if (offset >= tag_end) {
10960 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10961 proto_item_append_text(ti_ex_cap, " (octet 5)");
10962 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap5);
10963 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b32, tvb, offset, 1, ENC_NA);
10964 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b33, tvb, offset, 1, ENC_NA);
10965 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b34, tvb, offset, 1, ENC_NA);
10966 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b35, tvb, offset, 1, ENC_NA);
10967 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b36, tvb, offset, 1, ENC_NA);
10968 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b37, tvb, offset, 1, ENC_NA);
10969 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b38, tvb, offset, 1, ENC_NA);
10970 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b39, tvb, offset, 1, ENC_NA);
10973 /* Extended Capability octet 6 */
10974 if (offset >= tag_end) {
10977 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10978 proto_item_append_text(ti_ex_cap, " (octet 6)");
10979 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap6);
10980 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b40, tvb, offset, 1, ENC_NA);
10981 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_serv_int_granularity, tvb, offset, 1, ENC_NA);
10982 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b44, tvb, offset, 1, ENC_NA);
10983 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b45, tvb, offset, 1, ENC_NA);
10984 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b46, tvb, offset, 1, ENC_NA);
10985 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b47, tvb, offset, 1, ENC_NA);
10989 /* Extended Capability octet 7 */
10990 if (offset >= tag_end) {
10993 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
10994 proto_item_append_text(ti_ex_cap, " (octet 7)");
10995 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap7);
10996 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b48, tvb, offset, 1, ENC_NA);
10997 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_o7, tvb, offset, 1, ENC_NA);
11000 /* Extended Capability octet 8 */
11001 if (offset >= tag_end) {
11004 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
11005 proto_item_append_text(ti_ex_cap, " (octet 8)");
11006 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap8);
11007 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b61, tvb, offset, 1, ENC_NA);
11008 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b62, tvb, offset, 1, ENC_NA);
11010 /* Std802.11ac-2013, b63-64 indicate the Max Number of MSDUs in AMSDU. */
11011 ti_ex_cap = proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b63, tvb, offset, 1, ENC_NA);
11012 if (offset+1 < tag_end) {
11014 proto_item_append_text(ti_ex_cap, " (b63-64 Max Number of MSDUs in AMSDU: %s)",
11015 val_to_str((tvb_get_guint8(tvb, offset) & 0x80) + ((tvb_get_guint8(tvb, offset+1) & 0x1) << 1),
11016 vht_max_mpdu_in_amsdu, "Unknown:%d"));
11019 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_o8, tvb, offset, 1, ENC_NA);
11022 /* Extended Capability octet 9 */
11023 if (offset >= tag_end) {
11026 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
11027 proto_item_append_text(ti_ex_cap, " (octet 9)");
11028 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap9);
11029 ti_ex_cap = proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b64, tvb, offset, 1, ENC_NA);
11030 proto_item_append_text(ti_ex_cap, " (b63-64 Max Number of MSDUs in AMSDU)");
11031 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_o9, tvb, offset, 1, ENC_NA);
11037 dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset)
11040 proto_tree *mcs_tree, *rx_mcs_tree, *tx_mcs_tree;
11042 /* 8 byte Supported MCS set */
11043 ti = proto_tree_add_item(tree, hf_ieee80211_vht_mcsset, tvb, offset, 8, ENC_NA);
11045 mcs_tree = proto_item_add_subtree(ti, ett_vht_mcsset_tree);
11047 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11048 rx_mcs_tree = proto_item_add_subtree(ti, ett_vht_rx_mcsbit_tree);
11051 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11052 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11053 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11054 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11055 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11056 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11057 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11058 proto_tree_add_item(rx_mcs_tree, hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11061 /* B16 - B28 13 bits*/
11062 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11064 /* B29 - B31 2 reserved bits*/
11069 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11070 tx_mcs_tree = proto_item_add_subtree(ti, ett_vht_tx_mcsbit_tree);
11071 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11072 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11073 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11074 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11075 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11076 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11077 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11078 proto_tree_add_item(tx_mcs_tree, hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11081 /* B48 - B60 13 bits */
11082 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11083 /* B61 - B63 2 reserved bits*/
11090 dissect_vht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
11091 guint32 tag_len, proto_item *ti_len)
11093 proto_item *cap_item;
11094 proto_tree *cap_tree;
11096 if (tag_len != 12) {
11097 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11098 "VHT Capabilities IE length %u wrong, must be = 12", tag_len);
11102 /* 4 byte VHT Capabilities Info*/
11103 cap_item = proto_tree_add_item(tree, hf_ieee80211_vht_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11105 cap_tree = proto_item_add_subtree(cap_item, ett_vht_cap_tree);
11107 /* B0 - B1 2 bits */
11108 proto_tree_add_item(cap_tree, hf_ieee80211_vht_max_mpdu_length, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11109 /* B2 - B3 2 bits*/
11110 proto_tree_add_item(cap_tree, hf_ieee80211_vht_supported_chan_width_set, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11112 /* B4 - B7 4x 1 bit fields */
11113 proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_ldpc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11114 proto_tree_add_item(cap_tree, hf_ieee80211_vht_short_gi_for_80, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11115 proto_tree_add_item(cap_tree, hf_ieee80211_vht_short_gi_for_160, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11116 proto_tree_add_item(cap_tree, hf_ieee80211_vht_tx_stbc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11118 /* End of first byte */
11120 /* B8 - B10 3 bit field */
11121 proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_stbc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11123 /* B11 - B12 2x 1 bit fields */
11124 proto_tree_add_item(cap_tree, hf_ieee80211_vht_su_beamformer_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11125 proto_tree_add_item(cap_tree, hf_ieee80211_vht_su_beamformee_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11127 /* B13 - B15 3 bit field */
11128 proto_tree_add_item(cap_tree, hf_ieee80211_vht_beamformer_antennas, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11130 /* End of second byte */
11133 proto_tree_add_item(cap_tree, hf_ieee80211_vht_sounding_dimensions, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11135 proto_tree_add_item(cap_tree, hf_ieee80211_vht_mu_beamformer_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11137 /* B20 - B22 2x 1 bit fields */
11138 proto_tree_add_item(cap_tree, hf_ieee80211_vht_mu_beamformee_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11139 proto_tree_add_item(cap_tree, hf_ieee80211_vht_txop_ps, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11140 proto_tree_add_item(cap_tree, hf_ieee80211_vht_var_htc_field, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11142 /* B23 - B25 3 bit field which takes us 2 bits into next byte */
11143 proto_tree_add_item(cap_tree, hf_ieee80211_vht_max_ampdu, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11145 /* B26 - B27 2 bit field */
11146 proto_tree_add_item(cap_tree, hf_ieee80211_vht_link_adaptation_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11148 /* B28 - B29 2x 1 bit fields */
11149 proto_tree_add_item(cap_tree, hf_ieee80211_vht_rx_pattern, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11150 proto_tree_add_item(cap_tree, hf_ieee80211_vht_tx_pattern, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11152 /* B30 - B31 Reserved */
11153 proto_tree_add_item(cap_tree, hf_ieee80211_vht_reserv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11157 /* 8 byte MCS set */
11158 offset = dissect_vht_mcs_set(tree, tvb, offset);
11164 dissect_vht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
11165 guint32 tag_len, proto_item *ti_len)
11167 proto_item *op_item, *ti;
11168 proto_tree *op_tree, *basic_mcs_tree;
11170 if (tag_len != 5) {
11171 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11172 "VHT Operation IE length %u wrong, must be = 5", tag_len);
11176 /* 3 byte VHT Operation Info*/
11177 op_item = proto_tree_add_item(tree, hf_ieee80211_vht_op, tvb, offset, 3, ENC_NA);
11178 op_tree = proto_item_add_subtree(op_item, ett_vht_op_tree);
11179 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11180 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center0, tvb, offset+1, 1, ENC_LITTLE_ENDIAN);
11181 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center1, tvb, offset+2, 1, ENC_LITTLE_ENDIAN);
11184 /* VHT Basic MCS Set */
11185 ti = proto_tree_add_item(tree, hf_ieee80211_vht_op_basic_mcs_map, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11186 basic_mcs_tree = proto_item_add_subtree(ti, ett_vht_basic_mcsbit_tree);
11187 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_1_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11188 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_2_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11189 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_3_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11190 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_4_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11191 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_5_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11192 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_6_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11193 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_7_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11194 proto_tree_add_item(basic_mcs_tree, hf_ieee80211_vht_op_max_basic_mcs_for_8_ss, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11202 dissect_vht_tx_pwr_envelope(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
11203 guint32 tag_len, proto_item *ti_len)
11205 proto_item *tx_pwr_item, *ti;
11206 proto_tree *tx_pwr_info_tree;
11207 guint8 opt_ie_cnt=0;
11210 if (tag_len < 2 || tag_len > 5) {
11211 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11212 "VHT TX PWR Envelope IE length %u wrong, must be >= 2 and <= 5", tag_len);
11216 tx_pwr_item = proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_info, tvb, offset, 1, ENC_NA);
11217 tx_pwr_info_tree = proto_item_add_subtree(tx_pwr_item, ett_vht_tpe_info_tree);
11219 ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11220 proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_unit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11221 proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11223 opt_ie_cnt = tvb_get_guint8(tvb, offset) & 0x07;
11227 /* Power Constraint info is mandatory only for 20MHz, others are optional*/
11228 /* Power is expressed in terms of 0.5dBm from -64 to 63 and is encoded
11229 * as 8-bit 2's compliment */
11230 for (i = 0; i <= opt_ie_cnt; i++) {
11233 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_20, tvb, offset, 1, ENC_NA);
11237 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_40, tvb, offset, 1, ENC_NA);
11241 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_80, tvb, offset, 1, ENC_NA);
11245 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_160, tvb, offset, 1, ENC_NA);
11249 expert_add_info(pinfo, ti, &ei_ieee80211_vht_tpe_pwr_info_count);
11259 dissect_mobility_domain(proto_tree *tree, tvbuff_t *tvb, int offset,
11260 guint32 tag_len, association_sanity_check_t *association_sanity_check)
11262 if (association_sanity_check != NULL) {
11263 association_sanity_check->association_has_mobility_domain_element = TRUE;
11267 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11268 "MDIE content length must be at least 3 bytes");
11272 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_mdid,
11273 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11274 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab,
11275 tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
11276 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
11277 tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
11278 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
11279 tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
11283 dissect_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, int offset,
11286 int end = offset + tag_len;
11287 if (tag_len < 82) {
11288 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11289 "FTIE content length must be at least 82 bytes");
11293 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic_control,
11294 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11295 proto_tree_add_item(tree, hf_ieee80211_tag_ft_element_count,
11296 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11298 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic,
11299 tvb, offset, 16, ENC_NA);
11301 proto_tree_add_item(tree, hf_ieee80211_tag_ft_anonce,
11302 tvb, offset, 32, ENC_NA);
11304 proto_tree_add_item(tree, hf_ieee80211_tag_ft_snonce,
11305 tvb, offset, 32, ENC_NA);
11308 while (offset + 2 <= end) {
11311 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_id,
11312 tvb, offset, 1, ENC_LITTLE_ENDIAN);
11313 id = tvb_get_guint8(tvb, offset);
11316 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_len,
11317 tvb, offset, 1, ENC_LITTLE_ENDIAN);
11318 len = tvb_get_guint8(tvb, offset);
11321 if (offset + len > end) {
11322 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset,
11323 end - offset, "Invalid FTIE subelement");
11327 s_end = offset + len;
11330 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_r1kh_id,
11331 tvb, offset, len, ENC_NA);
11334 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_info,
11335 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11336 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_id,
11337 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11339 if (offset > s_end)
11341 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_length,
11342 tvb, offset, 1, ENC_LITTLE_ENDIAN);
11344 if (offset > s_end)
11346 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_rsc,
11347 tvb, offset, 8, ENC_NA);
11349 if (offset > s_end)
11351 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key,
11352 tvb, offset, s_end - offset, ENC_NA);
11355 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_r0kh_id,
11356 tvb, offset, len, ENC_ASCII|ENC_NA);
11359 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_id,
11360 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11362 if (offset > s_end)
11364 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_ipn,
11365 tvb, offset, 6, ENC_NA);
11367 if (offset > s_end)
11369 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_length,
11370 tvb, offset, 1, ENC_LITTLE_ENDIAN);
11372 if (offset > s_end)
11374 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key,
11375 tvb, offset, 24, ENC_NA);
11378 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_data,
11379 tvb, offset, len, ENC_NA);
11387 dissect_mmie(proto_tree *tree, tvbuff_t *tvb, int offset, guint32 tag_len)
11389 if (tag_len < 16) {
11390 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11391 "MMIE content length must be at least 16 bytes");
11395 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_keyid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11396 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_ipn, tvb, offset + 2, 6,
11398 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_mic, tvb, offset + 8, 8,
11403 dissect_ssid_list(proto_tree *tree, tvbuff_t *tvb, int offset, guint32 tag_len)
11405 int end = offset + tag_len;
11407 gboolean first = TRUE;
11409 while (offset + 1 <= end) {
11410 guint8 len = tvb_get_guint8(tvb, offset + 1);
11413 if (offset + 2 + len > end)
11416 str = format_text(tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 2, len, ENC_ASCII), len);
11417 proto_item_append_text(tree, "%c %s", (first ? ':' : ','), str);
11419 entry = proto_tree_add_subtree_format(tree, tvb, offset, 2 + len, ett_ssid_list, NULL, "SSID: %s", str);
11420 proto_tree_add_item(entry, hf_ieee80211_tag_number, tvb, offset, 1,
11421 ENC_LITTLE_ENDIAN);
11423 proto_tree_add_uint(entry, hf_ieee80211_tag_length, tvb, offset, 1, len);
11425 proto_tree_add_item(entry, hf_ieee80211_tag_ssid, tvb, offset, len,
11432 dissect_link_identifier(proto_tree *tree, tvbuff_t *tvb, int offset,
11435 if (tag_len < 18) {
11436 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11437 "Link Identifier content length must be at least "
11442 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_bssid, tvb,
11443 offset, 6, ENC_NA);
11444 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_init_sta, tvb,
11445 offset + 6, 6, ENC_NA);
11446 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_resp_sta, tvb,
11447 offset + 12, 6, ENC_NA);
11451 dissect_wakeup_schedule(proto_tree *tree, tvbuff_t *tvb, int offset,
11454 if (tag_len < 18) {
11455 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11456 "Wakeup Schedule content length must be at least "
11461 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_offset, tvb,
11462 offset, 4, ENC_LITTLE_ENDIAN);
11465 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_interval, tvb,
11466 offset, 4, ENC_LITTLE_ENDIAN);
11469 proto_tree_add_item(tree,
11470 hf_ieee80211_tag_wakeup_schedule_awake_window_slots, tvb,
11471 offset, 4, ENC_LITTLE_ENDIAN);
11474 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
11475 tvb, offset, 4, ENC_LITTLE_ENDIAN);
11478 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_idle_count, tvb,
11479 offset, 2, ENC_LITTLE_ENDIAN);
11483 dissect_channel_switch_timing(proto_tree *tree, tvbuff_t *tvb, int offset,
11487 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11488 "Channel Switch Timing content length must be at "
11493 proto_tree_add_item(tree, hf_ieee80211_tag_channel_switch_timing_switch_time,
11494 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11497 proto_tree_add_item(tree,
11498 hf_ieee80211_tag_channel_switch_timing_switch_timeout,
11499 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11503 dissect_pti_control(proto_tree *tree, tvbuff_t *tvb, int offset,
11507 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11508 "PTI Control content length must be at least "
11513 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_tid, tvb,
11514 offset, 1, ENC_LITTLE_ENDIAN);
11517 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_sequence_control, tvb,
11518 offset, 2, ENC_LITTLE_ENDIAN);
11522 dissect_pu_buffer_status(proto_tree *tree, tvbuff_t *tvb, int offset,
11526 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset, tag_len,
11527 "PU Buffer Status content length must be at least "
11532 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_bk, tvb,
11533 offset, 1, ENC_LITTLE_ENDIAN);
11534 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_be, tvb,
11535 offset, 1, ENC_LITTLE_ENDIAN);
11536 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_vi, tvb,
11537 offset, 1, ENC_LITTLE_ENDIAN);
11538 proto_tree_add_item(tree, hf_ieee80211_tag_pu_buffer_status_ac_vo, tvb,
11539 offset, 1, ENC_LITTLE_ENDIAN);
11543 dissect_timeout_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11548 pi = proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_type, tvb,
11549 offset, 1, ENC_LITTLE_ENDIAN);
11551 expert_add_info_format(pinfo, pi, &ei_ieee80211_tag_length,
11552 "Timeout Interval content length must be at least "
11557 proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_value, tvb,
11558 offset + 1, 4, ENC_LITTLE_ENDIAN);
11562 dissect_ric_data(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
11563 guint32 tag_len, proto_item *ti, proto_item *ti_len, int ftype)
11566 proto_tree *sub_tree;
11567 guint8 desc_cnt = 0;
11570 const guint8 ids[] = { TAG_RIC_DESCRIPTOR };
11572 if (tag_len != 4) {
11573 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11574 "RIC Data Length must be 4 bytes");
11578 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_id, tvb,
11579 offset, 1, ENC_LITTLE_ENDIAN);
11582 desc_cnt = tvb_get_guint8(tvb, offset);
11583 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_desc_cnt, tvb,
11584 offset, 1, ENC_LITTLE_ENDIAN);
11587 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_status_code, tvb,
11588 offset, 2, ENC_LITTLE_ENDIAN);
11591 /* Our Design is such that all the Resource request IE's part of the RIC
11592 * must be in the sub tree of RIC for better readability
11593 * Even omnipeek does the same way.
11595 sub_tree = proto_item_add_subtree(tree, ett_tag_ric_data_desc_ie);
11597 proto_item_append_text(ti, " :Resource Descriptor List");
11598 if (desc_cnt == 0) {
11599 proto_item_append_text(ti, " :0 (Weird?)");
11602 while ( desc_cnt !=0 ) {
11604 next_ie = tvb_get_guint8(tvb, offset);
11605 proto_item_append_text(ti, " :(%d:%s)", desc_cnt, val_to_str_ext(next_ie, &tag_num_vals_ext, "Reserved (%d)"));
11606 /* Recursive call to avoid duplication of code*/
11607 offset_r = add_tagged_field(pinfo, sub_tree, tvb, offset, ftype, ids, G_N_ELEMENTS(ids), NULL);
11608 if (offset_r == 0 )/* should never happen, returns a min of 2*/
11610 /* This will ensure that the IE after RIC is processed
11611 * only once. This gives us a good looking RIC IE :-)
11613 tag_len += offset_r;
11621 dissect_overlap_bss_scan_par(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
11622 guint32 tag_len, proto_item *ti _U_, proto_item *ti_len)
11625 if (tag_len != 14) {
11626 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11627 "OBSS Length must be 14 bytes");
11631 proto_tree_add_item(tree, hf_ieee80211_tag_obss_spd, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11634 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sad, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11637 proto_tree_add_item(tree, hf_ieee80211_tag_obss_cwtsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11640 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sptpc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11643 proto_tree_add_item(tree, hf_ieee80211_tag_obss_satpc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11646 proto_tree_add_item(tree, hf_ieee80211_tag_obss_wctdf, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11649 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sat, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11656 dissect_ric_descriptor(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
11657 guint32 tag_len, proto_item *ti, proto_item *ti_len)
11660 guint8 rsrc_type = 0;
11663 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11664 "RIC Data Length must be at least 1 byte");
11668 rsrc_type = tvb_get_guint8(tvb, offset);
11669 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_rsrc_type, tvb,
11670 offset, 1, ENC_LITTLE_ENDIAN);
11673 if (rsrc_type == 1) {
11674 /* Block ACK params
11675 * 802.11-2012: 8.4.2.53 RIC Descriptor element
11676 * Block Ack parameter set as defined in 8.4.1.14,
11677 * Block Ack timeout value as defined in 8.4.1.15, and
11678 * Block Ack starting sequence control as defined in 8.3.1.8
11680 /* TODO: Still figuring out how to parse these ones,
11681 * need a sample capture with at least HEX Dump
11683 proto_item_append_text(ti, " : Block ACK Params");
11684 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_var_params, tvb,
11685 offset, tag_len-1, ENC_NA);
11686 offset += tag_len -1;
11688 /* 0, 2-255 are reserved*/
11689 proto_item_append_text(ti, " :Reserved (type != 1)");
11696 dissect_ext_bss_load(proto_tree *tree, tvbuff_t *tvb, int offset)
11698 proto_tree_add_item(tree, hf_ieee80211_ext_bss_mu_mimo_capable_sta_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11700 proto_tree_add_item(tree, hf_ieee80211_ext_bss_ss_underutilization, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11702 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_20mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11704 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_40mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11706 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_80mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11714 dissect_wide_bw_channel_switch(proto_tree *tree, tvbuff_t *tvb, int offset)
11717 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11719 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment0, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11721 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11727 dissect_channel_switch_wrapper(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
11731 const guint8 ids[] = { TAG_COUNTRY_INFO, TAG_WIDE_BW_CHANNEL_SWITCH,
11732 TAG_VHT_TX_PWR_ENVELOPE };
11735 Decode three subelement in IE-196(Channel Switch Wrapper element):
11736 (1) New Country subelement
11737 (2) Wide Bandwidth Channel Switch subelement
11738 (3) New VHT Transmit Power Envelope subelement
11740 while (tag_len > 0){
11741 tmp_sublen = tvb_get_guint8(tvb, offset + 1);
11742 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids), NULL) == 0){
11745 tag_len -= (tmp_sublen + 2);
11746 offset += (tmp_sublen + 2);
11752 dissect_operating_mode_notification(proto_tree *tree, tvbuff_t *tvb, int offset)
11755 proto_tree *bit_tree;
11757 /* Operating Mode field */
11758 ti = proto_tree_add_item(tree, hf_ieee80211_operat_notification_mode, tvb, offset, 1, ENC_NA);
11759 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
11760 proto_tree_add_item(bit_tree, hf_ieee80211_operat_mode_field_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11761 proto_tree_add_item(bit_tree, hf_ieee80211_operat_mode_field_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11762 proto_tree_add_item(bit_tree, hf_ieee80211_operat_mode_field_rxnss, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11763 proto_tree_add_item(bit_tree, hf_ieee80211_operat_mode_field_rxnsstype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11771 dissect_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean basic, gboolean vendorspecific)
11774 proto_tree *mcs_tree, *bit_tree;
11775 guint8 rx_nss, tx_nss; /* 0-4 for HT and 0-8 for VHT*/
11776 guint32 value_mcs_0_31, value_mcs_32_52, value_mcs_53_76;
11777 guint16 tx_mcs_set;
11778 rx_nss = tx_nss = 8;
11779 /* 16 byte Supported MCS set */
11780 if (vendorspecific)
11782 ti = proto_tree_add_string(tree, hf_ieee80211_mcsset_vs, tvb, offset, 16,
11783 basic ? "Basic MCS Set" : "MCS Set");
11786 ti = proto_tree_add_string(tree, hf_ieee80211_mcsset, tvb, offset, 16,
11787 basic ? "Basic MCS Set" : "MCS Set");
11789 mcs_tree = proto_item_add_subtree(ti, ett_mcsset_tree);
11791 /* Rx MCS Bitmask */
11792 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_rx_bitmask, tvb, offset, 10, ENC_NA);
11793 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
11796 value_mcs_0_31 = tvb_get_letohl(tvb, offset);
11798 /* Handle all zeroes/ff's case..*/
11799 if (value_mcs_0_31 != 0x0)
11801 if (!(value_mcs_0_31 & (0xffffff00))) {
11803 * At least one MCS from 0-7 is supported, but no MCS from 8-31 are
11804 * supported, so only 1 spatial stream is supported.
11807 } else if (!(value_mcs_0_31 & (0xffff0000))) {
11809 * At least one MCS from 8-15 is supported, but no MCS from 16-31 are
11810 * supported, so only 2 spatial streams are supported.
11813 } else if (!(value_mcs_0_31 & (0xff000000))) {
11815 * At least one MCS from 16-23 is supported, but no MCS from 24-31 are
11816 * supported, so only 3 spatial streams are supported.
11821 * At least one MCS from 24-31 is supported, so 4 spatial streams
11828 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_0to7, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11829 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_8to15, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11830 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_16to23, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11831 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_24to31, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11834 /* Should be we check UEQM Supported?*/
11836 value_mcs_32_52 = tvb_get_letohl(tvb, offset);
11837 if (!(value_mcs_32_52 & (0x1ffffe))) {
11839 * MCS 33-52 aren't supported, so the number of spatial streams we get
11840 * from whichever MCSes from 0-31 that we support is the total number
11841 * of spatial streams we support.
11844 } else if (!(value_mcs_32_52 & (0x1fff80))) {
11846 * At least one MCS from 33-38 is supported, but no MCS from 39-52 is
11847 * supported, so we have at least 2 spatial streams, but none of the
11848 * MCSs in that range give us any more.
11850 rx_nss = MAX(1, rx_nss);
11853 * At least one MCS from 39-52 is supported, so we have at least 3
11856 rx_nss = MAX(2, rx_nss);
11859 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11860 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_33to38, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11861 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_39to52, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11865 value_mcs_53_76 = tvb_get_letohl(tvb, offset);
11866 if ((value_mcs_53_76 & (0x1fffffe0))) {
11868 * At least one MCS from 53-76 is supported, so we have at least 4
11871 rx_nss = MAX(3, rx_nss);
11874 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_53to76, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11877 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_highest_data_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11880 /* Follow table 8-126 from 802.11-2012 */
11881 tx_mcs_set = tvb_get_letohs(tvb, offset);
11883 if (!(tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
11885 /* TX MCS Set is not defined
11886 * so there is no interpretation for Max Tx Spatial Streams
11888 tx_nss = 4; /* Not Defined*/
11891 if ((tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
11893 /* TX MCS Set is defined to be equal to Rx MCS Set
11894 * So, get the Max Spatial Streams from Rx
11899 proto_item_append_text(ti, ": %s", val_to_str(rx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
11901 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_mcs_set_defined, tvb, offset, 1,
11902 ENC_LITTLE_ENDIAN);
11903 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal, tvb, offset, 1,
11904 ENC_LITTLE_ENDIAN);
11905 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_max_spatial_streams, tvb, offset, 1,
11906 ENC_LITTLE_ENDIAN);
11907 proto_item_append_text(ti, ", %s", val_to_str(tx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
11908 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_unequal_modulation, tvb, offset, 1,
11909 ENC_LITTLE_ENDIAN);
11916 /* 802.11n D1.10 - HT Information IE */
11918 dissect_ht_info_ie_1_1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
11919 guint32 tag_len, proto_item *ti_len)
11921 proto_item *cap_item;
11922 proto_tree *cap_tree;
11926 if (tag_len < 22) {
11927 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
11928 "HT Information IE content length %u wrong, must be at least 22 bytes", tag_len);
11933 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11936 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter1, tvb,
11937 offset, 1, ENC_LITTLE_ENDIAN);
11938 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter1_tree);
11939 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_channel_offset, tvb,
11940 offset, 1, ENC_LITTLE_ENDIAN);
11941 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_channel_width, tvb,
11942 offset, 1, ENC_LITTLE_ENDIAN);
11943 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_rifs_mode, tvb,
11944 offset, 1, ENC_LITTLE_ENDIAN);
11945 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_psmp_stas_only, tvb,
11946 offset, 1, ENC_LITTLE_ENDIAN);
11947 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_service_interval_granularity, tvb,
11948 offset, 1, ENC_LITTLE_ENDIAN);
11951 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter2, tvb,
11952 offset, 2, ENC_LITTLE_ENDIAN);
11953 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter2_tree);
11954 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_operating_mode, tvb,
11955 offset, 1, ENC_LITTLE_ENDIAN);
11956 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_non_greenfield_sta_present, tvb,
11957 offset, 1, ENC_LITTLE_ENDIAN);
11958 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_transmit_burst_limit, tvb,
11959 offset, 1, ENC_LITTLE_ENDIAN);
11960 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_obss_non_ht_stas_present, tvb,
11961 offset, 1, ENC_LITTLE_ENDIAN);
11962 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_1, tvb,
11963 offset, 2, ENC_LITTLE_ENDIAN);
11966 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_info_delimiter3, tvb,
11967 offset, 2, ENC_LITTLE_ENDIAN);
11968 cap_tree = proto_item_add_subtree(cap_item, ett_ht_info_delimiter3_tree);
11969 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_2, tvb,
11970 offset, 1, ENC_LITTLE_ENDIAN);
11971 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_beacon, tvb,
11972 offset, 1, ENC_LITTLE_ENDIAN);
11973 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_dual_cts_protection, tvb,
11974 offset, 1, ENC_LITTLE_ENDIAN);
11976 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_secondary_beacon, tvb,
11977 offset, 1, ENC_LITTLE_ENDIAN);
11978 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_lsig_txop_protection_full_support, tvb,
11979 offset, 1, ENC_LITTLE_ENDIAN);
11980 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_active, tvb,
11981 offset, 1, ENC_LITTLE_ENDIAN);
11982 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_pco_phase, tvb,
11983 offset, 1, ENC_LITTLE_ENDIAN);
11984 proto_tree_add_item(cap_tree, hf_ieee80211_ht_info_reserved_3, tvb,
11985 offset, 1, ENC_LITTLE_ENDIAN);
11988 offset = dissect_mcs_set(tree, tvb, offset, TRUE, FALSE);
11995 dissect_wapi_param_set(tvbuff_t *tvb, packet_info *pinfo,
11996 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len,
11997 proto_item *ti, int ftype)
11999 /* Parse the WAPI Parameter Set IE Here*/
12001 proto_tree *subtree;
12002 guint16 loop_cnt, version, akm_cnt = 1, ucast_cnt = 1, bkid_cnt = 1;
12003 guint8 akm_suite_type = 0, ucast_cipher_type = 0, mcast_cipher_type = 0;
12005 version = tvb_get_letohs(tvb, offset);
12006 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12009 /*MIN: 2 + (2+4)+ (2+4) + 4 + 2 + 0 (BKID CNT and LIST) =20*/
12010 if (tag_len < 20) {
12011 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12012 "tag_len is %d, it's neither WAPI not BSS-AC-Access-Delay", tag_len);
12016 if (version != 1) {
12017 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12018 "Version of WAPI protocol is %d, must be = 1", version);
12022 /* AKM Suites: list can't be 0*/
12023 akm_cnt = tvb_get_letohs(tvb, offset);
12024 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_akm_suite_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12026 if (akm_cnt != 0) {
12027 proto_item_append_text(ti, " : AKM Suite List:");
12028 for (loop_cnt = 0; loop_cnt < akm_cnt; loop_cnt++) {
12029 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_akm_tree);
12030 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_oui, tvb, offset, 3, ENC_NA);
12032 akm_suite_type = tvb_get_guint8(tvb, offset);
12033 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12035 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(akm_suite_type,
12036 ieee80211_wapi_suite_type_short, "Reserved: %d"));
12038 proto_item_append_text(ti, " /");
12040 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of AKM suites is 0, must be min 1");
12044 /* Unicast Cipher Suites: list can't be 0*/
12045 ucast_cnt = tvb_get_letohs(tvb, offset);
12046 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
12047 tvb, offset, 2, ENC_LITTLE_ENDIAN);
12049 if (ucast_cnt != 0) {
12050 proto_item_append_text(ti, " Unicast Cipher List:");
12051 for (loop_cnt = 0; loop_cnt < ucast_cnt; loop_cnt++) {
12052 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_ucast_tree);
12053 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui, tvb, offset, 3, ENC_NA);
12055 ucast_cipher_type = tvb_get_guint8(tvb, offset);
12056 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12058 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(ucast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
12060 proto_item_append_text(ti, " /");
12062 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of Unicast Cipher suites is 0, must be min 1");
12067 /* Multicast Cipher Suites*/
12068 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui, tvb, offset, 3, ENC_NA);
12070 mcast_cipher_type = tvb_get_guint8(tvb, offset);
12071 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12073 proto_item_append_text(ti, " Multicast Cipher: %s", val_to_str(mcast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
12075 /* WAPI capability*/
12076 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_capab, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12077 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_preauth_tree);
12078 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_capab_preauth, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12079 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_capab_rsvd, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12082 /* BKID List: The list can be 0
12083 * Applicable only for assoc/re-assoc
12085 if (ftype == MGT_ASSOC_REQ || ftype == MGT_REASSOC_REQ ) {
12086 bkid_cnt = tvb_get_letohs(tvb, offset);
12087 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12089 if (bkid_cnt != 0) {
12090 for (loop_cnt = 0; loop_cnt < bkid_cnt; loop_cnt++) {
12091 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_list, tvb, offset, 16, ENC_NA);
12100 dissect_bss_max_idle_period(proto_tree *tree, tvbuff_t *tvb, int offset)
12102 proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_period,
12103 tvb, offset, 2, ENC_LITTLE_ENDIAN);
12105 proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_options_protected,
12106 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12111 enum tfs_request_subelem_id {
12112 TFS_REQ_SUBELEM_TFS = 1,
12113 TFS_REQ_SUBELEM_VENDOR_SPECIFIC = 221
12116 static const value_string tfs_request_subelem_ids[] = {
12117 { TFS_REQ_SUBELEM_TFS, "TFS subelement" },
12118 { TFS_REQ_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
12123 dissect_tfs_request(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset,
12124 guint32 tag_len, int ftype)
12126 int end = offset + tag_len;
12127 const guint8 ids[] = {
12128 1, /* TFS Subelement */
12129 TAG_VENDOR_SPECIFIC_IE
12132 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_id,
12133 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12135 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_delete_after_match,
12136 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12137 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_notify,
12138 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12140 if (offset + 1 >= end) {
12141 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
12142 "No TFS Request subelements in TFS Request");
12146 while (offset + 1 < end) {
12148 int s_offset, s_end;
12150 id = tvb_get_guint8(tvb, offset);
12151 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_id,
12152 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12154 len = tvb_get_guint8(tvb, offset);
12155 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_len,
12156 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12158 if (offset + len > end) {
12159 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
12160 "Not enough data for TFS Request subelement");
12164 case TFS_REQ_SUBELEM_TFS:
12166 s_end = offset + len;
12167 while (s_offset < s_end) {
12168 /* TODO 1 is interpreted as TAG_SUPP_RATES, fix this! */
12169 int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, ftype, ids, G_N_ELEMENTS(ids), NULL);
12176 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem,
12177 tvb, offset, len, ENC_NA);
12183 if (offset < end) {
12184 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
12185 tvb, offset, end - offset, "Extra data after TFS Subelements");
12191 enum tfs_response_subelem_id {
12192 TFS_RESP_SUBELEM_TFS_STATUS = 1,
12193 TFS_RESP_SUBELEM_TFS = 2,
12194 TFS_RESP_SUBELEM_VENDOR_SPECIFIC = 221
12197 static const value_string tfs_response_subelem_ids[] = {
12198 { TFS_RESP_SUBELEM_TFS_STATUS, "TFS Status subelement" },
12199 { TFS_RESP_SUBELEM_TFS, "TFS subelement" },
12200 { TFS_RESP_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
12205 dissect_tfs_response(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
12206 int offset, guint32 tag_len, int ftype)
12208 int end = offset + tag_len;
12209 const guint8 ids[] = {
12210 1, /* TFS Status subelement*/
12211 2, /* TFS subelement */
12212 TAG_VENDOR_SPECIFIC_IE
12215 while (offset + 3 <= end) {
12217 int s_offset, s_end;
12219 id = tvb_get_guint8(tvb, offset);
12220 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_id,
12221 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12223 len = tvb_get_guint8(tvb, offset);
12224 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_len,
12225 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12227 if (offset + len > end) {
12228 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
12229 "Not enough data for TFS Request subelement");
12233 case TFS_RESP_SUBELEM_TFS_STATUS:
12234 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_status,
12235 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12236 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_id,
12237 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
12239 case TFS_RESP_SUBELEM_TFS:
12241 s_end = offset + len;
12242 while (s_offset < s_end) {
12243 /* TODO Element IDs 1 and 2 are misinterpreted! */
12244 int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, ftype, ids, G_N_ELEMENTS(ids), NULL);
12251 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem,
12252 tvb, offset, len, ENC_NA);
12259 if (offset < end) {
12260 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
12261 tvb, offset, end - offset, "Extra data after TFS Subelements");
12267 static const value_string wnm_sleep_mode_action_types[] = {
12268 { 0, "Enter WNM-Sleep Mode" },
12269 { 1, "Exit WNM-Sleep Mode" },
12273 static const value_string wnm_sleep_mode_response_status_vals[] = {
12274 { 0, "Enter/Exit WNM-Sleep Mode Accept" },
12275 { 1, "Exit WNM-Sleep Mode Accept, GTK/IGTK update required" },
12276 { 2, "Denied. The AP is unable to perform the requested action." },
12277 { 3, "Denied temporarily. The AP is unable to perform the requested action "
12278 "at the current time. The request can be submitted again at a later time."
12280 { 4, "Denied. Due to the pending key expiration." },
12281 { 5, "Denied. The requested action was not granted due to other WNM services "
12282 "in use by the requesting STA." },
12287 dissect_wnm_sleep_mode(proto_tree *tree, tvbuff_t *tvb, int offset)
12289 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_action_type,
12290 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12292 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_response_status,
12293 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12295 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_interval,
12296 tvb, offset, 2, ENC_LITTLE_ENDIAN);
12301 static const value_string time_adv_timing_capab_vals[] = {
12302 { 0, "No standardized external time source" },
12303 { 1, "Timestamp offset based on UTC" },
12304 { 2, "UTC time at which the TSF timer is 0" },
12309 dissect_time_adv(proto_tree *tree, tvbuff_t *tvb, int offset)
12313 proto_tree *subtree;
12314 struct tm tm, *now;
12317 capab = tvb_get_guint8(tvb, offset);
12318 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_timing_capab,
12319 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12324 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
12325 tvb, offset, 10, ENC_NA);
12328 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
12329 tvb, offset, 5, ENC_NA);
12333 item = proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
12334 tvb, offset, 10, ENC_NA);
12335 subtree = proto_item_add_subtree(item, ett_tag_time_adv_tree);
12336 memset(&tm, 0, sizeof(tm));
12337 tm.tm_year = tvb_get_letohs(tvb, offset) - 1900;
12338 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_year,
12339 tvb, offset, 2, ENC_LITTLE_ENDIAN);
12341 tm.tm_mon = tvb_get_guint8(tvb, offset) - 1;
12342 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_month,
12343 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12345 tm.tm_mday = tvb_get_guint8(tvb, offset);
12346 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_day,
12347 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12349 tm.tm_hour = tvb_get_guint8(tvb, offset);
12350 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_hours,
12351 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12353 tm.tm_min = tvb_get_guint8(tvb, offset);
12354 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_minutes,
12355 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12357 tm.tm_sec = tvb_get_guint8(tvb, offset);
12358 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_seconds,
12359 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12361 proto_tree_add_item(subtree,
12362 hf_ieee80211_tag_time_adv_time_value_milliseconds,
12363 tvb, offset, 2, ENC_LITTLE_ENDIAN);
12365 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
12366 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12372 t += (time_t)(last_timestamp / 1000000);
12373 now = localtime(&t);
12375 proto_item_append_text(item,
12376 ": current time=%u-%02u-%02u %02u:%02u:%02u",
12377 now->tm_year + 1900, now->tm_mon + 1,
12378 now->tm_mday, now->tm_hour, now->tm_min,
12382 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
12383 tvb, offset, 5, ENC_NA);
12386 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
12387 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12396 dissect_time_zone(proto_tree *tree, tvbuff_t *tvb, int offset,
12399 proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
12401 return offset + tag_len;
12405 dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo,
12406 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len,
12407 int tag_end, proto_item *ti)
12410 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12411 "AP Channel Report length %u wrong, must be > 1", tag_len);
12415 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_operating_class, tvb,
12416 offset, 1, ENC_LITTLE_ENDIAN);
12417 proto_item_append_text(ti, ": Operating Class %u, Channel List :", tvb_get_guint8(tvb, offset));
12420 while (offset < tag_end)
12422 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA);
12423 proto_item_append_text(ti, " %u,", tvb_get_guint8(tvb, offset));
12431 dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo,
12432 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12435 if (tag_len != 1) {
12436 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12437 "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
12441 proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
12442 offset, 1, ENC_LITTLE_ENDIAN);
12450 dissect_bss_avg_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
12451 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12454 if (tag_len != 1) {
12455 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12456 "BSS Average Access Delay length %u wrong, must be = 1", tag_len);
12460 proto_tree_add_item(tree, hf_ieee80211_tag_bss_ap_avg_access_delay, tvb,
12461 offset, 1, ENC_LITTLE_ENDIAN);
12469 dissect_antenna_ie(tvbuff_t *tvb, packet_info *pinfo,
12470 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12473 if (tag_len != 1) {
12474 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12475 "Antenna length %u wrong, must be = 1", tag_len);
12479 proto_tree_add_item(tree, hf_ieee80211_tag_antenna_id, tvb,
12480 offset, 1, ENC_LITTLE_ENDIAN);
12488 dissect_rsni_ie(tvbuff_t *tvb, packet_info *pinfo,
12489 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12492 if (tag_len != 1) {
12493 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12494 "RSNI length %u wrong, must be = 1", tag_len);
12498 proto_tree_add_item(tree, hf_ieee80211_tag_rsni, tvb,
12499 offset, 1, ENC_LITTLE_ENDIAN);
12507 dissect_bss_available_admission_capacity_ie(tvbuff_t *tvb, packet_info *pinfo,
12508 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12514 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12515 "BSS Available Admission Capacity length %u wrong, must > = 2", tag_len);
12519 ti = proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask, tvb,
12520 offset, 2, ENC_LITTLE_ENDIAN);
12521 btree = proto_item_add_subtree(ti, ett_tag_bss_bitmask_tree);
12522 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12523 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12524 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12525 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12526 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12527 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12528 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12529 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12530 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12531 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12532 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12533 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12534 proto_tree_add_item(btree, hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12535 bitmask = tvb_get_letohs(tvb, offset);
12538 if(bitmask & BSS_BITMASK_UP0)
12540 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12543 if(bitmask & BSS_BITMASK_UP1)
12545 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12548 if(bitmask & BSS_BITMASK_UP2)
12550 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12553 if(bitmask & BSS_BITMASK_UP3)
12555 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12558 if(bitmask & BSS_BITMASK_UP4)
12560 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12563 if(bitmask & BSS_BITMASK_UP5)
12565 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12568 if(bitmask & BSS_BITMASK_UP6)
12570 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12573 if(bitmask & BSS_BITMASK_UP7)
12575 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12578 if(bitmask & BSS_BITMASK_AC0)
12580 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12583 if(bitmask & BSS_BITMASK_AC1)
12585 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12588 if(bitmask & BSS_BITMASK_AC2)
12590 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12593 if(bitmask & BSS_BITMASK_AC3)
12595 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12602 dissect_bss_ac_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
12603 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
12606 if (tag_len != 4) {
12607 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12608 "BSS AC Access Delay length %u wrong, must = 4", tag_len);
12612 /* TODO: Display the scaled representation of the average
12613 medium access delay (a big (precalculed) value_string ?)
12614 See 8.4.2.46 BSS AC Access Delay element ... */
12616 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_be, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12618 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_bk, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12620 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12622 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vo, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12629 dissect_rm_enabled_capabilities_ie(packet_info *pinfo, proto_tree *tree,
12630 proto_item *ti, proto_item *ti_len,
12631 guint32 tag_len, tvbuff_t *tvb,
12632 int offset, int tag_end _U_)
12634 proto_item *ti_ex_cap;
12635 proto_tree *ex_cap_tree;
12639 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "RM Enabled Capabilities length %u wrong, must = 5", tag_len);
12642 proto_item_append_text(ti, " (%d octets)", tag_len);
12644 /* RM Enabled Capability octet 1 */
12645 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA);
12646 proto_item_append_text(ti_ex_cap, " (octet 1)");
12647 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_rm_cap1);
12648 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b0, tvb, offset, 1, ENC_NA);
12649 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b1, tvb, offset, 1, ENC_NA);
12650 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b2, tvb, offset, 1, ENC_NA);
12651 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b3, tvb, offset, 1, ENC_NA);
12652 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b4, tvb, offset, 1, ENC_NA);
12653 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b5, tvb, offset, 1, ENC_NA);
12654 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b6, tvb, offset, 1, ENC_NA);
12655 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b7, tvb, offset, 1, ENC_NA);
12658 /* RM Enabled Capability octet 2 */
12659 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA);
12660 proto_item_append_text(ti_ex_cap, " (octet 2)");
12661 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_rm_cap2);
12662 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b8, tvb, offset, 1, ENC_NA);
12663 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b9, tvb, offset, 1, ENC_NA);
12664 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b10, tvb, offset, 1, ENC_NA);
12665 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b11, tvb, offset, 1, ENC_NA);
12666 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b12, tvb, offset, 1, ENC_NA);
12667 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b13, tvb, offset, 1, ENC_NA);
12668 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b14, tvb, offset, 1, ENC_NA);
12669 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b15, tvb, offset, 1, ENC_NA);
12672 /* RM Enabled Capability octet 3 */
12673 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA);
12674 proto_item_append_text(ti_ex_cap, " (octet 3)");
12675 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_rm_cap3);
12676 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b16, tvb, offset, 1, ENC_NA);
12677 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b17, tvb, offset, 1, ENC_NA);
12678 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b18to20, tvb, offset, 1, ENC_NA);
12679 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b21to23, tvb, offset, 1, ENC_NA);
12682 /* RM Enabled Capability octet 4 */
12683 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA);
12684 proto_item_append_text(ti_ex_cap, " (octet 4)");
12685 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_rm_cap4);
12686 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b24to26, tvb, offset, 1, ENC_NA);
12687 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b27, tvb, offset, 1, ENC_NA);
12688 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b28, tvb, offset, 1, ENC_NA);
12689 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b29, tvb, offset, 1, ENC_NA);
12690 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b30, tvb, offset, 1, ENC_NA);
12691 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b31, tvb, offset, 1, ENC_NA);
12694 /* RM Enabled Capability octet 5 */
12695 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_rm_enabled_capabilities, tvb, offset, 1, ENC_NA);
12696 proto_item_append_text(ti_ex_cap, " (octet 5)");
12697 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_rm_cap5);
12698 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b32, tvb, offset, 1, ENC_NA);
12699 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_b33, tvb, offset, 1, ENC_NA);
12700 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_rm_enabled_capabilities_o5, tvb, offset, 1, ENC_NA);
12707 dissect_20_40_bss_coexistence(packet_info *pinfo, proto_tree *tree,
12708 proto_item *ti_len, guint32 tag_len,
12709 tvbuff_t *tvb, int offset)
12712 static const int *ieee80211_20_40_bss_coexistence_fields[] = {
12713 &hf_ieee80211_tag_20_40_bc_information_request,
12714 &hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
12715 &hf_ieee80211_tag_20_40_bc_20_mhz_bss_witdh_request,
12716 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
12717 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
12718 &hf_ieee80211_tag_20_40_bc_reserved,
12725 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "20/40 BSS Coexistence length %u wrong, must = 1", tag_len);
12729 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_20_40_bc,
12730 ett_tag_20_40_bc, ieee80211_20_40_bss_coexistence_fields,
12731 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
12739 dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
12740 guint32 tag_len, proto_item *ti_len, gboolean vendorspecific)
12742 proto_item *cap_item, *ti;
12743 proto_tree *cap_tree;
12745 if (tag_len != 26) {
12746 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12747 "HT Capabilities IE length %u wrong, must be = 26", tag_len);
12751 if (wlan_ignore_draft_ht && vendorspecific)
12754 /* 2 byte HT Capabilities Info*/
12755 if (vendorspecific)
12757 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_vs_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12761 cap_item = proto_tree_add_item(tree, hf_ieee80211_ht_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12763 cap_tree = proto_item_add_subtree(cap_item, ett_ht_cap_tree);
12764 proto_tree_add_item(cap_tree, hf_ieee80211_ht_ldpc_coding, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12765 proto_tree_add_item(cap_tree, hf_ieee80211_ht_chan_width, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12766 proto_tree_add_item(cap_tree, hf_ieee80211_ht_sm_pwsave, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12767 proto_tree_add_item(cap_tree, hf_ieee80211_ht_green, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12768 proto_tree_add_item(cap_tree, hf_ieee80211_ht_short20, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12769 proto_tree_add_item(cap_tree, hf_ieee80211_ht_short40, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12770 proto_tree_add_item(cap_tree, hf_ieee80211_ht_tx_stbc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12772 proto_tree_add_item(cap_tree, hf_ieee80211_ht_rx_stbc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12773 proto_tree_add_item(cap_tree, hf_ieee80211_ht_delayed_block_ack, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12774 proto_tree_add_item(cap_tree, hf_ieee80211_ht_max_amsdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12775 proto_tree_add_item(cap_tree, hf_ieee80211_ht_dss_cck_40, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12776 proto_tree_add_item(cap_tree, hf_ieee80211_ht_psmp, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12777 proto_tree_add_item(cap_tree, hf_ieee80211_ht_40_mhz_intolerant, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12778 proto_tree_add_item(cap_tree, hf_ieee80211_ht_l_sig, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12781 /* 1 byte A-MPDU Parameters */
12782 if (vendorspecific)
12784 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12787 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12789 cap_tree = proto_item_add_subtree(cap_item, ett_ampduparam_tree);
12790 ti = proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12791 proto_item_append_text(ti, " (%04.0f[Bytes])", pow(2, 13+(tvb_get_guint8(tvb, offset) & 0x3))-1);
12792 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu_start_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12793 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12796 /* 16 byte MCS set */
12797 offset = dissect_mcs_set(tree, tvb, offset, FALSE, vendorspecific);
12800 /* 2 byte HT Extended Capabilities */
12801 if (vendorspecific)
12803 cap_item = proto_tree_add_item(tree, hf_ieee80211_htex_vs_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12805 cap_item = proto_tree_add_item(tree, hf_ieee80211_htex_cap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12807 cap_tree = proto_item_add_subtree(cap_item, ett_htex_cap_tree);
12808 proto_tree_add_item(cap_tree, hf_ieee80211_htex_pco, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12809 proto_tree_add_item(cap_tree, hf_ieee80211_htex_transtime, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12811 proto_tree_add_item(cap_tree, hf_ieee80211_htex_mcs, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12812 proto_tree_add_item(cap_tree, hf_ieee80211_htex_htc_support, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12813 proto_tree_add_item(cap_tree, hf_ieee80211_htex_rd_responder, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12817 /* 4 byte TxBF capabilities */
12818 if (vendorspecific)
12820 cap_item = proto_tree_add_item(tree, hf_ieee80211_txbf_vs, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12822 cap_item = proto_tree_add_item(tree, hf_ieee80211_txbf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12824 cap_tree = proto_item_add_subtree(cap_item, ett_txbf_tree);
12825 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_cap, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12826 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_rcv_ssc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12827 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_tx_ssc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12828 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_rcv_ndp, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12829 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_tx_ndp, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12830 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_impl_txbf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12831 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_calib, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12833 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_csi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12834 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_uncomp_fm, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12835 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_comp_fm, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12836 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_bf_csi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12837 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_uncomp_fm_feed, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12838 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_expl_comp_fm_feed, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12840 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_min_group, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12841 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_csi_num_bf_ant, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12842 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_uncomp_sm_bf_ant, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12843 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_comp_sm_bf_ant, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12845 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_csi_max_rows_bf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12846 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_chan_est, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12847 proto_tree_add_item(cap_tree, hf_ieee80211_txbf_resrv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12850 /* 1 byte Antenna Selection (ASEL) capabilities */
12851 if (vendorspecific)
12853 cap_item = proto_tree_add_item(tree, hf_ieee80211_antsel_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12857 cap_item = proto_tree_add_item(tree, hf_ieee80211_antsel, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12859 cap_tree = proto_item_add_subtree(cap_item, ett_antsel_tree);
12860 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b0, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12861 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12862 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12863 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12864 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b4, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12865 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b5, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12866 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b6, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12867 proto_tree_add_item(cap_tree, hf_ieee80211_antsel_b7, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12875 dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
12876 guint32 tag_len, proto_item *ti_len)
12878 proto_item *cap_item;
12879 proto_tree *cap_tree;
12881 if (tag_len != 22) {
12882 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12883 "Tag length %u wrong, must be = 22", tag_len);
12887 if (wlan_ignore_draft_ht)
12890 /* 1 HT Control Channel */
12891 proto_tree_add_item(tree, hf_ieee80211_hta_cc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12894 /* 1 byte HT additional capabilities */
12895 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 1,
12896 ENC_LITTLE_ENDIAN);
12897 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap_tree);
12899 proto_tree_add_item(cap_tree, hf_ieee80211_hta_ext_chan_offset, tvb, offset, 1,
12900 ENC_LITTLE_ENDIAN);
12901 proto_tree_add_item(cap_tree, hf_ieee80211_hta_rec_tx_width, tvb, offset, 1,
12902 ENC_LITTLE_ENDIAN);
12903 proto_tree_add_item(cap_tree, hf_ieee80211_hta_rifs_mode, tvb, offset, 1,
12904 ENC_LITTLE_ENDIAN);
12905 proto_tree_add_item(cap_tree, hf_ieee80211_hta_controlled_access, tvb, offset, 1,
12906 ENC_LITTLE_ENDIAN);
12907 proto_tree_add_item(cap_tree, hf_ieee80211_hta_service_interval, tvb, offset, 1,
12908 ENC_LITTLE_ENDIAN);
12911 /* 2 byte HT additional capabilities */
12912 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 2,
12913 ENC_LITTLE_ENDIAN);
12914 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap1_tree);
12916 proto_tree_add_item(cap_tree, hf_ieee80211_hta_operating_mode, tvb, offset, 2,
12917 ENC_LITTLE_ENDIAN);
12918 proto_tree_add_item(cap_tree, hf_ieee80211_hta_non_gf_devices, tvb, offset, 2,
12919 ENC_LITTLE_ENDIAN);
12923 /* 2 byte HT additional capabilities */
12924 cap_item = proto_tree_add_item(tree, hf_ieee80211_hta_cap, tvb, offset, 2,
12925 ENC_LITTLE_ENDIAN);
12926 cap_tree = proto_item_add_subtree(cap_item, ett_hta_cap2_tree);
12928 proto_tree_add_item(cap_tree, hf_ieee80211_hta_basic_stbc_mcs, tvb, offset, 2,
12929 ENC_LITTLE_ENDIAN);
12930 proto_tree_add_item(cap_tree, hf_ieee80211_hta_dual_stbc_protection, tvb, offset, 2,
12931 ENC_LITTLE_ENDIAN);
12932 proto_tree_add_item(cap_tree, hf_ieee80211_hta_secondary_beacon, tvb, offset, 2,
12933 ENC_LITTLE_ENDIAN);
12934 proto_tree_add_item(cap_tree, hf_ieee80211_hta_lsig_txop_protection, tvb, offset, 2,
12935 ENC_LITTLE_ENDIAN);
12936 proto_tree_add_item(cap_tree, hf_ieee80211_hta_pco_active, tvb, offset, 2,
12937 ENC_LITTLE_ENDIAN);
12938 proto_tree_add_item(cap_tree, hf_ieee80211_hta_pco_phase, tvb, offset, 2,
12939 ENC_LITTLE_ENDIAN);
12942 /* 16 byte Supported MCS set */
12943 offset = dissect_mcs_set(tree, tvb, offset, FALSE, TRUE);
12948 /* 802.11n-D1.10 and 802.11n-D2.0, 7.1.3.5a */
12951 * 8.2.4.1.10 "Order field" says:
12953 * The Order field is 1 bit in length. It is used for two purposes:
12955 * -- It is set to 1 in a non-QoS data frame transmitted by a non-QoS
12956 * STA to indicate that the frame contains an MSDU, or fragment
12957 * thereof, that is being transferred using the StrictlyOrdered
12960 * -- It is set to 1 in a QoS data or management frame transmitted
12961 * with a value of HT_GF or HT_MF for the FORMAT parameter of the
12962 * TXVECTOR to indicate that the frame contains an HT Control field.
12964 * 802.11ac changes the second of those clauses to say "HT_GF, HT_MF,
12965 * or VHT", indicates that bit B0 of the field is 0 for HT and 1 for
12966 * VHT (stealing a reserved bit from the Link Adaptation Control field),
12967 * and that everything except for "AC Constraint" and "RDG/More Cowbell^W
12968 * PPDU" is different for the VHT version.
12970 * I read the second clause of 8.2.4.1.10 "Order field", as modified by
12971 * 802.11ac, as meaning that, for QoS data and management frames, the
12972 * Order field will *only* be set to 1 for HT or VHT frames, and therefore
12973 * that we do *not* have to determine, from radio metadata, whether the
12974 * frame was transmitted as an HT or VHT frame.
12976 * (See bug 11351, in which a frame with an HT Control field, with a
12977 * radiotap header, lacks the MCS or VHT fields in the radiotap header,
12978 * so Wireshark has no clue that it's an HT or VHT field, and misdissected
12979 * the packet. Omnipeek, which also appeared to have no clue that it was
12980 * an HT or VHT field - it called it an 802.11b frame - *did* dissect the
12981 * HT Control field.)
12985 dissect_ht_control(proto_tree *tree, tvbuff_t *tvb, int offset)
12988 proto_tree *htc_tree, *lac_subtree, *mfb_subtree;
12991 htc = tvb_get_letohl(tvb, offset);
12993 ti = proto_tree_add_item(tree, hf_ieee80211_htc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12994 htc_tree = proto_item_add_subtree(ti, ett_htc_tree);
12996 /* Check the HT vs. VHT bit. */
12997 proto_tree_add_item(htc_tree, hf_ieee80211_htc_vht, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12998 if (htc & HTC_VHT) {
13000 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mrq, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13001 if (!(htc & HTC_UNSOLICITED_MFB)) {
13002 if (htc & HTC_MRQ) {
13003 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13005 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13007 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfsi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13009 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))) {
13010 proto_tree_add_item(htc_tree, hf_ieee80211_htc_compressed_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13011 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ppdu_stbc_encoded, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13013 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13015 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_l, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13017 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13018 mfb_subtree = proto_item_add_subtree(ti, ett_mfb_subtree);
13019 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13020 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13021 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13022 /* This should be converted to dB by adding 22 */
13023 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_snr, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13024 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))) {
13025 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_h, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13026 proto_tree_add_item(htc_tree, hf_ieee80211_htc_coding_type, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13027 proto_tree_add_item(htc_tree, hf_ieee80211_htc_fb_tx_type, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13029 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved3, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13031 proto_tree_add_item(htc_tree, hf_ieee80211_htc_unsolicited_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13033 /* Start: Link Adaptation Control */
13034 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_lac, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13035 lac_subtree = proto_item_add_subtree(ti, ett_lac_subtree);
13036 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13038 if (HTC_IS_ASELI(htc)) {
13039 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13041 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13042 if (HTC_LAC_MAI_MRQ(htc)) {
13043 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13045 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13049 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13051 if (HTC_IS_ASELI(htc)) {
13052 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13053 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13055 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13057 /* End: Link Adaptation Control */
13059 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13060 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13061 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13062 proto_tree_add_item(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13064 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13065 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13067 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13068 proto_tree_add_item(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13073 #define IEEE80211_COMMON_OPT_BROKEN_FC 0x00000001
13074 #define IEEE80211_COMMON_OPT_IS_CENTRINO 0x00000002
13075 #define IEEE80211_COMMON_OPT_NORMAL_QOS 0x00000004
13078 dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, guint32 option_flags,
13079 guint32 offset, packet_info *pinfo)
13081 guint16 fcf, flags, frame_type_subtype;
13082 proto_tree *fc_tree, *flag_tree;
13083 proto_item *fc_item, *flag_item, *hidden_item, *ti;
13085 fcf = FETCH_FCF(offset);
13087 flags = FCF_FLAGS(fcf);
13088 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf);
13090 /* Swap offset... */
13091 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC)
13096 proto_tree_add_uint(tree, hf_ieee80211_fc_frame_type_subtype, tvb, offset, 1, frame_type_subtype);
13098 fc_item = proto_tree_add_item(tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_BIG_ENDIAN);
13100 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
13102 proto_tree_add_item(fc_tree, hf_ieee80211_fc_proto_version, tvb, offset, 1, ENC_NA);
13103 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_type, tvb, offset, 1, ENC_NA);
13104 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_subtype, tvb, offset, 1, ENC_NA);
13105 /* Changing control frame extension for extension frames */
13106 if(IS_FRAME_EXTENSION(fcf) == 1) {
13107 proto_tree_add_uint(fc_tree, hf_ieee80211_fc_frame_extension, tvb, offset, 1, FCF_FRAME_EXTENSION(fcf));
13111 /* Reswap offset...*/
13112 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC)
13115 proto_item_append_text(fc_item, "(Swapped)");
13119 flag_item = proto_tree_add_item(fc_tree, hf_ieee80211_fc_flags, tvb, offset, 1, ENC_NA);
13120 flag_tree = proto_item_add_subtree(flag_item, ett_proto_flags);
13121 /* Changing control frame flags for extension frames */
13122 if(IS_FRAME_EXTENSION(fcf) == 0) {
13123 proto_tree_add_item(flag_tree, hf_ieee80211_fc_data_ds, tvb, offset, 1, ENC_NA);
13124 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_to_ds, tvb, offset, 1, ENC_NA);
13125 PROTO_ITEM_SET_HIDDEN(hidden_item);
13126 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_from_ds, tvb, offset, 1, ENC_NA);
13127 PROTO_ITEM_SET_HIDDEN(hidden_item);
13128 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_frag, tvb, offset, 1, ENC_NA);
13129 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_retry, tvb, offset, 1, ENC_NA);
13130 if( IS_RETRY(flags) )
13132 expert_add_info(pinfo, ti, &ei_ieee80211_fc_retry);
13133 wlan_stats.fc_retry = 1;
13136 proto_tree_add_item(flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, offset, 1, ENC_NA);
13137 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_data, tvb, offset, 1, ENC_NA);
13138 /* Changing control frame flags for extension frames */
13139 if(IS_FRAME_EXTENSION(fcf) == 0) {
13140 proto_tree_add_item(flag_tree, hf_ieee80211_fc_protected, tvb, offset, 1, ENC_NA);
13142 proto_tree_add_item(flag_tree, hf_ieee80211_fc_order, tvb, offset, 1, ENC_NA);
13146 dissect_durid(proto_tree *hdr_tree, tvbuff_t *tvb, guint16 fts, gint offset)
13148 guint16 durid = tvb_get_letohs(tvb, offset);
13150 if (durid < 0x8000) {
13151 proto_tree_add_uint_format_value(hdr_tree, hf_ieee80211_did_duration, tvb,
13152 offset, 2, durid, "%u microseconds", durid);
13153 } else if (((durid & 0xC000) == 0xC000) &&
13154 ((durid & 0x3FFF) > 0) && ((durid & 0x3FFF) <= 2007) &&
13155 (fts == CTRL_PS_POLL)) {
13156 proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, offset, 2,
13157 ENC_LITTLE_ENDIAN);
13158 } else if (durid == 0x8000) {
13159 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
13160 offset, 2, durid, "Duration/ID: %u", durid);
13162 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
13163 offset, 2, durid, "Duration/ID: %u (reserved)", durid & 0x3FFF);
13169 dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
13170 guint offset, proto_item *item, proto_item *ti_len, gint tag_len)
13175 proto_tree_add_item(tree, hf_ieee80211_ht_pren_type, tvb, offset, 1, ENC_NA);
13176 type = tvb_get_guint8(tvb, offset);
13183 dissect_ht_capability_ie(tvb, pinfo, tree, offset, tag_len, ti_len, TRUE);
13184 proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
13188 dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset, tag_len, ti_len);
13189 proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
13193 proto_tree_add_item(tree, hf_ieee80211_ht_pren_unknown, tvb, offset, tag_len, ENC_NA);
13200 dissect_interworking(packet_info *pinfo, proto_tree *tree, proto_item *item,
13201 tvbuff_t *tvb, int offset)
13206 len = tvb_get_guint8(tvb, offset);
13209 if ((tvb_reported_length_remaining(tvb, offset) < len) || (len == 0)) {
13210 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
13211 "Truncated Interworking element");
13215 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_access_network_type,
13216 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13217 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_internet,
13218 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13219 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_asra,
13220 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13221 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_esr,
13222 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13223 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_uesa,
13224 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13227 if ((len == (1 + 2)) || (len == (1 + 2 + 6))) {
13228 dissect_venue_info(tree, tvb, offset);
13232 if ((len == (1 + 6)) || (len == (1 + 2 + 6))) {
13233 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_hessid,
13234 tvb, offset, 6, ENC_NA);
13238 if ((len != 1) && (len != (1 + 2)) && (len != (1 + 6)) && (len != (1 + 2 + 6))) {
13239 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
13240 "Invalid Interworking element length");
13247 dissect_qos_map_set(packet_info *pinfo, proto_tree *tree, proto_item *item,
13248 tvbuff_t *tvb, int offset)
13253 proto_item *dscp_item;
13254 proto_tree *dscp_tree;
13257 len = tvb_get_guint8(tvb, offset);
13260 if (tvb_reported_length_remaining(tvb, offset) < len || len < 16 || len & 1) {
13261 expert_add_info_format(pinfo, item, &ei_ieee80211_bad_length,
13262 "Truncated QoS Map Set element");
13267 while (left >= 2) {
13268 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_dscp_exc,
13269 tvb, offset, 2, ENC_NA);
13270 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
13272 item = proto_tree_add_item(dscp_tree,
13273 hf_ieee80211_tag_qos_map_set_dscp_exc_val,
13274 tvb, offset, 1, ENC_NA);
13275 val = tvb_get_guint8(tvb, offset);
13276 if (val > 63 && val != 255) {
13277 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13278 "Invalid DSCP Value");
13282 item = proto_tree_add_item(dscp_tree,
13283 hf_ieee80211_tag_qos_map_set_dscp_exc_up,
13284 tvb, offset, 1, ENC_NA);
13285 val2 = tvb_get_guint8(tvb, offset);
13287 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13288 "Invalid User Priority");
13292 proto_item_append_text(dscp_item, " (0x%02x: UP %u)", val, val2);
13297 for (i = 0; i < 8; i++) {
13298 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_range,
13299 tvb, offset, 2, ENC_NA);
13300 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
13302 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_low,
13303 tvb, offset, 1, ENC_NA);
13304 val = tvb_get_guint8(tvb, offset);
13305 if (val > 63 && val != 255) {
13306 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13307 "Invalid DSCP Value");
13311 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_high,
13312 tvb, offset, 1, ENC_NA);
13313 val2 = tvb_get_guint8(tvb, offset);
13314 if ((val2 > 63 && val2 != 255) || val2 < val ||
13315 (val == 255 && val2 != 255) || (val != 255 && val2 == 255)) {
13316 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13317 "Invalid DSCP Value");
13321 if (val == 255 && val2 == 255) {
13322 proto_item_append_text(dscp_item, " (UP %u not in use)", i);
13324 proto_item_append_text(dscp_item, " (0x%02x-0x%02x: UP %u)",
13333 dissect_roaming_consortium(packet_info *pinfo, proto_tree *tree,
13334 proto_item *item, tvbuff_t *tvb, int offset)
13336 guint8 len, oi_lens, oi1_len, oi2_len;
13340 len = tvb_get_guint8(tvb, offset);
13342 end = offset + len;
13344 if ((tvb_reported_length_remaining(tvb, offset) < len) || (len < 2)) {
13345 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
13346 "Truncated Roaming Consortium element");
13350 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
13351 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13354 oi_lens = tvb_get_guint8(tvb, offset);
13355 oi1_len = oi_lens & 0x0f;
13356 oi2_len = (oi_lens & 0xf0) >> 4;
13357 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1_len,
13358 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13359 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2_len,
13360 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13363 if (offset + oi1_len > end) {
13364 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
13365 "Truncated Roaming Consortium element");
13369 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1,
13370 tvb, offset, oi1_len, ENC_NA);
13371 add_manuf(item, tvb, offset);
13374 if (offset + oi2_len > end) {
13375 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
13376 "Truncated Roaming Consortium element");
13381 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2,
13382 tvb, offset, oi2_len, ENC_NA);
13386 if (end > offset) {
13387 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi3,
13388 tvb, offset, end - offset, ENC_NA);
13395 /* ************************************************************************* */
13396 /* Dissect and add tagged (optional) fields to proto tree */
13397 /* ************************************************************************* */
13399 static int beacon_padding = 0; /* beacon padding bug */
13402 ieee80211_tag_ssid(packet_info *pinfo, proto_tree *tree,
13403 proto_item *ti, proto_item *ti_len,
13404 guint32 tag_len, tvbuff_t *tvb, int offset)
13406 /* 7.3.2.1 SSID element (0) */
13407 gchar *ssid; /* The SSID may consist of arbitrary bytes */
13408 gint ssid_len = tag_len;
13410 if (beacon_padding != 0) /* padding bug */
13413 if (ssid_len > MAX_SSID_LEN) {
13414 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13415 "SSID length (%u) greater than maximum (%u)",
13416 ssid_len, MAX_SSID_LEN);
13417 ssid_len = MAX_SSID_LEN;
13421 * XXX - the 802.11 specs aren't particularly clear on how the SSID
13422 * is to be interpreted.
13424 * IEEE Std 802.11-1999, section 7.3.2.2 "Service Set Identity (SSID)
13425 * element" says just
13427 * The length of the SSID information field is between 0 and 32
13428 * octets. A 0 length information field indicates the broadcast SSID.
13430 * with no indication that those octets encode a string.
13432 * IEEE Std 802.11-2012, section 8.4.2.2 "SSID element", says that *but*
13435 * When the UTF-8 SSID subfield of the Extended Capabilities element
13436 * is equal to 1 in the frame that includes the SSID element, the
13437 * SSID is interpreted using UTF-8 encoding.
13439 * NOTE -- This is true for Beacon and Probe Response frames when the
13440 * MLME-START.request primitive was issued with the SSIDEncoding
13441 * parameter equal to UTF-8.
13443 * and the SSIDEncoding parameter can either be UNSPECIFIED or UTF-8.
13445 * So I *guess* that means that, if the UTF-8 SSID subfield isn't
13446 * equal to 1, the SSID is, in theory, just a bunch of octets, but
13447 * in practice, *probably* ASCII as that's the typical convention,
13448 * and, if it is equal to 1, it's a UTF-8 string. (Of course, a
13449 * host can put anything there it wants to, so we shouldn't just
13450 * assume that it's *valid* ASCII or *valid* UTF-8.)
13452 * So we really should extract it as an array of ssid_len bytes,
13453 * pass those bytes to AirPDcapSetLastSSID(), and:
13455 * If the UTF-8 SSID subfield isn't set to 1, put the SSID in
13456 * as an ENC_ASCII string;
13458 * If the UTF-8 SSID subfield is set to 1, put it in as an
13459 * ENC_UTF_8 string;
13461 * and rely on the libwireshark core code to somehow deal with
13462 * non-ASCII characters or invalid UTF-8 sequences or valid-but-
13463 * not-all-printable ASCII or UTF-8 strings in the protocol tree
13464 * display. I'm not sure we can currently rely on it to handle
13465 * invalid UTF-8 or non-printable characters in UTF-8 strings,
13466 * however, so we just treat it as ASCII for now.
13468 * We also need a better way of getting the display format of a
13469 * string value, so we can do something other than run it through
13470 * format_text(), which won't handle UTF-8.
13472 ssid = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 2, ssid_len, ENC_ASCII);
13473 if (ssid_len == (gint)tag_len) {
13474 AirPDcapSetLastSSID(&airpdcap_ctx, (CHAR *) ssid, ssid_len);
13476 proto_tree_add_item(tree, hf_ieee80211_tag_ssid, tvb, offset + 2, tag_len,
13479 if (ssid_len > 0) {
13480 proto_item_append_text(ti, ": %s", format_text(ssid, ssid_len));
13482 col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID=%s", format_text(ssid, ssid_len));
13485 memcpy(wlan_stats.ssid, ssid, MIN(ssid_len, MAX_SSID_LEN));
13486 wlan_stats.ssid_len = ssid_len;
13488 proto_item_append_text(ti, ": Broadcast");
13490 col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Broadcast");
13493 beacon_padding += 1; /* padding bug */
13495 return offset + 2 + tag_len;
13499 dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo,
13500 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len,
13501 int tag_end, proto_item *ti _U_)
13505 guint32 sub_tag_length;
13506 proto_item *parent_item;
13507 proto_tree *bssid_info_subtree, *bssid_info_cap_subtree, *sub_tag_tree;
13508 tvbuff_t *sub_tag_tvb = NULL;
13510 if (tag_len < 13) {
13511 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13512 "Neighbor Report length %u wrong, must be > 13", tag_len);
13516 /* tag_offset = offset; */
13518 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid, tvb, offset, 6, ENC_NA);
13521 /*** Begin: BSSID Information ***/
13523 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid_info, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13524 bssid_info_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_tree);
13526 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reachability, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13527 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_security, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13528 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_key_scope, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13529 parent_item = proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13530 bssid_info_cap_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_capability_tree);
13531 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13532 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13533 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13534 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13535 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13536 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13537 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13538 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13539 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13542 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_ope_class, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13545 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13548 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_phy_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13551 /* The Optional Subelements field format contains zero or more subelements */
13552 if (tag_len == 13){ /* tag_len == 13 => no Subelements */
13556 while (offset < tag_end)
13559 sub_tag_id = tvb_get_guint8(tvb, offset);
13560 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_subelement_id, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13563 sub_tag_length = tvb_get_guint8(tvb, offset);
13564 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_subelement_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13566 sub_tag_tvb = tvb_new_subset_length(tvb, offset, sub_tag_length);
13568 switch (sub_tag_id) {
13569 case NR_SUB_ID_TSF_INFO:
13572 case NR_SUB_ID_MEASUREMENT_PILOT_INFO:
13575 case NR_SUB_ID_HT_CAPABILITIES:
13576 sub_tag_tree = proto_tree_add_subtree(tree, tvb, offset, sub_tag_length,
13577 ett_tag_neighbor_report_sub_tag_tree, NULL, "HT Capabilities");
13578 dissect_ht_capability_ie(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len, FALSE);
13580 case NR_SUB_ID_HT_OPERATION:
13581 sub_tag_tree = proto_tree_add_subtree(tree, tvb, offset, sub_tag_length,
13582 ett_tag_neighbor_report_sub_tag_tree, NULL, "HT Information");
13583 dissect_ht_info_ie_1_1(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len);
13585 case NR_SUB_ID_SEC_CHANNEL_OFFSET:
13586 sub_tag_tree = proto_tree_add_subtree(tree, tvb, offset, sub_tag_length,
13587 ett_tag_neighbor_report_sub_tag_tree, NULL, "Secondary Channel Offset");
13588 dissect_secondary_channel_offset_ie(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, ti_len);
13590 case NR_SUB_ID_VENDOR_SPECIFIC:
13595 offset += sub_tag_length;
13602 ieee80211_tag_supp_rates(packet_info *pinfo, proto_tree *tree,
13603 proto_item *ti, proto_item *ti_len,
13604 guint32 tag_len, tvbuff_t *tvb,
13605 int offset, int tag_end)
13607 /* 7.3.2.2 Supported Rates element (1) */
13609 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13610 "Tag length %u too short, must be greater than 0",
13617 while (offset < tag_end) {
13618 proto_tree_add_item(tree, hf_ieee80211_tag_supp_rates, tvb, offset, 1,
13619 ENC_LITTLE_ENDIAN);
13620 proto_item_append_text(ti, " %s,",
13621 val_to_str_ext_const(tvb_get_guint8(tvb, offset),
13622 &ieee80211_supported_rates_vals_ext,
13627 proto_item_append_text(ti, " [Mbit/sec]");
13633 ieee80211_tag_fh_parameter(packet_info *pinfo, proto_tree *tree,
13634 proto_item *ti_len, guint32 tag_len,
13635 tvbuff_t *tvb, int offset)
13637 /* 7.3.2.3 FH Parameter Set element (2) */
13639 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13640 "Tag length %u too short, must be >= 5", tag_len);
13646 proto_tree_add_item(tree, hf_ieee80211_tag_fh_dwell_time,
13647 tvb, offset, 2, ENC_LITTLE_ENDIAN);
13650 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_set,
13651 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13654 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_pattern,
13655 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13658 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_index,
13659 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13666 ieee80211_tag_ds_parameter(packet_info *pinfo, proto_tree *tree,
13667 proto_item *ti, proto_item *ti_len,
13668 guint32 tag_len, tvbuff_t *tvb,
13671 /* 7.3.2.4 DS Parameter Set element (3) */
13672 if (tag_len != 1) {
13673 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13674 "Tag length %u wrong, must be = 1", tag_len);
13680 proto_tree_add_item(tree, hf_ieee80211_tag_ds_param_channel,
13681 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13683 proto_item_append_text(ti, ": Current Channel: %u",
13684 tvb_get_guint8(tvb, offset));
13686 wlan_stats.channel = tvb_get_guint8(tvb, offset);
13693 ieee80211_tag_cf_parameter(packet_info *pinfo, proto_tree *tree,
13694 proto_item *ti, proto_item *ti_len,
13695 guint32 tag_len, tvbuff_t *tvb,
13698 /* 7.3.2.5 CF Parameter Set element (4) */
13699 if (tag_len != 6) {
13700 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13701 "Tag length %u wrong, must be = 6", tag_len);
13707 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_count,
13708 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13709 proto_item_append_text(ti, ": CFP count %u", tvb_get_guint8(tvb, offset));
13712 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_period,
13713 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13714 proto_item_append_text(ti, ": CFP Period %u", tvb_get_guint8(tvb, offset));
13717 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_max_duration,
13718 tvb, offset, 2, ENC_LITTLE_ENDIAN);
13719 proto_item_append_text(ti, ": CFP Max Duration %u",
13720 tvb_get_letohs(tvb, offset));
13723 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_dur_remaining,
13724 tvb, offset, 2, ENC_LITTLE_ENDIAN);
13725 proto_item_append_text(ti, ": CFP Dur Remaining %u",
13726 tvb_get_letohs(tvb, offset));
13733 ieee80211_tag_tim(packet_info *pinfo, proto_tree *tree,
13734 proto_item *ti, proto_item *ti_len,
13735 guint32 tag_len, tvbuff_t *tvb, int offset)
13737 proto_tree *bmapctl_tree;
13738 proto_item *bmapctl_item;
13739 guint aid, pvb_len, n1, i, j, byte;
13741 /* 802.11-2012: 8.4.2.7 TIM element (5) */
13743 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13744 "Tag length %u too short, must be >= 4", tag_len);
13750 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_count,
13751 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13752 proto_item_append_text(ti, ": DTIM %u of", tvb_get_guint8(tvb, offset));
13755 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_period,
13756 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13757 proto_item_append_text(ti, " %u bitmap", tvb_get_guint8(tvb, offset + 1));
13760 bmapctl_item = proto_tree_add_item(tree, hf_ieee80211_tim_bmapctl,
13761 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13762 bmapctl_tree = proto_item_add_subtree(bmapctl_item, ett_tag_bmapctl_tree);
13763 proto_tree_add_item(bmapctl_tree, hf_ieee80211_tim_bmapctl_mcast,
13764 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13765 proto_tree_add_item(bmapctl_tree, hf_ieee80211_tim_bmapctl_offset,
13766 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13767 pvb_len = tag_len - 3;
13768 n1 = tvb_get_guint8(tvb, offset) & 0xFE;
13771 proto_tree_add_item(tree, hf_ieee80211_tim_partial_virtual_bitmap,
13772 tvb, offset, pvb_len, ENC_NA);
13773 /* FIXME: Handles dot11MgmtOptionMultiBSSIDActivated = false only */
13774 for (i = 0; i < pvb_len; i++) {
13775 byte = tvb_get_guint8(tvb, offset + i);
13776 for (j = 0; j < 8; j++) {
13777 if (byte & (1 << j)) {
13778 aid = 8*n1 + 8*i + j;
13779 proto_tree_add_uint(tree, hf_ieee80211_tim_aid, tvb, offset + i, 1, aid);
13789 ieee80211_tag_ibss_parameter(packet_info *pinfo, proto_tree *tree,
13790 proto_item *ti, proto_item *ti_len,
13791 guint32 tag_len, tvbuff_t *tvb,
13794 /* 7.3.2.7 IBSS Parameter Set element (6) */
13796 if (tag_len != 2) {
13797 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13798 "Tag length %u wrong, must be = 2", tag_len);
13804 proto_tree_add_item(tree, hf_ieee80211_tag_ibss_atim_window,
13805 tvb, offset, 2, ENC_LITTLE_ENDIAN);
13806 proto_item_append_text(ti, ": ATIM window 0x%x",
13807 tvb_get_letohs(tvb, offset));
13813 static const value_string environment_vals[] = {
13815 { 0x4f, "Outdoor" },
13816 { 0x49, "Indoor" },
13821 ieee80211_tag_country_info(packet_info *pinfo, proto_tree *tree,
13822 proto_item *ti, proto_item *ti_len,
13823 guint32 tag_len, tvbuff_t *tvb,
13824 int offset, int tag_end)
13826 /* 7.3.2.9 Country information element (7) */
13827 proto_tree *sub_tree;
13828 proto_item *sub_item;
13829 const guint8* country_code;
13832 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13833 "Tag length %u too short, must be >= 6", tag_len);
13839 proto_tree_add_item_ret_string(tree, hf_ieee80211_tag_country_info_code,
13840 tvb, offset, 2, ENC_ASCII|ENC_NA, wmem_packet_scope(), &country_code);
13841 proto_item_append_text(ti, ": Country Code %s", country_code);
13844 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
13845 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13846 proto_item_append_text(ti, ", Environment %s",
13847 val_to_str(tvb_get_guint8(tvb, offset),
13848 environment_vals, "Unknown (0x%02x)"));
13851 while (offset < tag_end) {
13853 if ((tag_end - offset) < 3) {
13854 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_pad,
13855 tvb, offset, 1, ENC_NA);
13859 if (tvb_get_guint8(tvb, offset) <= 200) { /* 802.11d */
13860 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_fnm,
13861 tvb, offset, 3, ENC_NA);
13862 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_fnm_tree);
13864 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_fcn,
13865 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13866 proto_item_append_text(sub_item, ": First Channel Number: %d",
13867 tvb_get_guint8(tvb, offset));
13869 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_nc,
13870 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13871 proto_item_append_text(sub_item, ", Number of Channels: %d",
13872 tvb_get_guint8(tvb, offset));
13874 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_mtpl,
13875 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13876 proto_item_append_text(sub_item,
13877 ", Maximum Transmit Power Level: %d dBm",
13878 tvb_get_guint8(tvb, offset));
13880 } else { /* 802.11j */
13881 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_rrc,
13882 tvb, offset, 3, ENC_NA);
13883 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_rcc_tree);
13885 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oei,
13886 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13887 proto_item_append_text(sub_item,
13888 ": Operating Extension Identifier: %d",
13889 tvb_get_guint8(tvb, offset));
13891 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oc,
13892 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13893 proto_item_append_text(sub_item, ", Operating Class: %d",
13894 tvb_get_guint8(tvb, offset));
13896 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_cc,
13897 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13898 proto_item_append_text(sub_item, ", Coverage Class: %d",
13899 tvb_get_guint8(tvb, offset));
13908 ieee80211_tag_fh_hopping_parameter(packet_info *pinfo,
13911 proto_item *ti_len,
13912 guint32 tag_len, tvbuff_t *tvb,
13915 /* 7.3.2.10 Hopping Pattern Parameters information element (8) */
13917 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13918 "Tag length %u too short, must be >= 2", tag_len);
13924 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
13925 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13926 proto_item_append_text(ti, ": Prime Radix: %u", tvb_get_guint8(tvb, offset));
13929 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
13930 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13931 proto_item_append_text(ti, ", Number of Channels: %u",
13932 tvb_get_guint8(tvb, offset));
13939 ieee80211_tag_fh_hopping_table(packet_info *pinfo, proto_tree *tree,
13940 proto_item *ti_len,
13941 guint32 tag_len, tvbuff_t *tvb,
13942 int offset, int tag_end)
13944 /* 7.3.2.11 Hopping Pattern Table information element (9) */
13946 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13947 "Tag length %u too short, must be >= 4", tag_len);
13953 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_flag,
13954 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13957 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_number_of_sets,
13958 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13961 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_modulus,
13962 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13965 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_offset,
13966 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13969 while (offset < tag_end) {
13970 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_random_table,
13971 tvb, offset, 2, ENC_BIG_ENDIAN);
13979 add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
13980 const guint8 *valid_element_ids, guint valid_element_ids_count,
13981 association_sanity_check_t *association_sanity_check)
13985 const guint8 *tag_data_ptr;
13986 guint32 tag_no, tag_len;
13988 char print_buff[SHORT_STR];
13989 proto_tree *orig_tree = tree;
13990 proto_item *ti = NULL;
13991 proto_item *ti_len, *ti_tag;
13995 gboolean *p_isDMG = ((gboolean*)(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY)));
13997 isDMG = p_isDMG ? *p_isDMG : FALSE;
13998 tag_no = tvb_get_guint8(tvb, offset);
13999 tag_len = tvb_get_guint8(tvb, offset + 1);
14000 tag_end = offset + 2 + tag_len;
14003 ti = proto_tree_add_item(orig_tree, hf_ieee80211_tag, tvb, offset, 2 + tag_len , ENC_NA);
14004 proto_item_append_text(ti, ": %s", val_to_str_ext(tag_no, &tag_num_vals_ext, "Reserved (%d)"));
14006 tree = proto_item_add_subtree(ti, ett_80211_mgt_ie);
14010 ti_tag = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14011 ti_len = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
14012 if (tag_len > (guint)tvb_reported_length_remaining(tvb, offset)) {
14013 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
14014 "Tag Length is longer than remaining payload");
14017 /* If the list of valid elements is restricted, require an Element ID to be
14018 * present in that list. Otherwise stop decoding the value to prevent possible
14019 * infinite recursions due to unexpected elements. */
14020 if (valid_element_ids_count) {
14021 gboolean valid_tag_no;
14024 for (i = 0; i < valid_element_ids_count; i++) {
14025 valid_tag_no = valid_element_ids[i] == tag_no;
14029 if (!valid_tag_no) {
14030 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
14031 "Unexpected Element ID %d", tag_no);
14038 offset += ieee80211_tag_ssid(pinfo, tree, ti, ti_len, tag_len, tvb,
14041 case TAG_SUPP_RATES:
14042 offset += ieee80211_tag_supp_rates(pinfo, tree, ti, ti_len, tag_len, tvb,
14045 case TAG_FH_PARAMETER:
14046 offset += ieee80211_tag_fh_parameter(pinfo, tree, ti_len, tag_len, tvb,
14049 case TAG_DS_PARAMETER:
14050 offset += ieee80211_tag_ds_parameter(pinfo, tree, ti, ti_len, tag_len, tvb,
14053 case TAG_CF_PARAMETER:
14054 offset += ieee80211_tag_cf_parameter(pinfo, tree, ti, ti_len, tag_len, tvb,
14058 offset += ieee80211_tag_tim(pinfo, tree, ti, ti_len, tag_len, tvb, offset);
14060 case TAG_IBSS_PARAMETER:
14061 offset += ieee80211_tag_ibss_parameter(pinfo, tree, ti, ti_len, tag_len,
14064 case TAG_COUNTRY_INFO:
14065 offset += ieee80211_tag_country_info(pinfo, tree, ti, ti_len, tag_len, tvb,
14068 case TAG_FH_HOPPING_PARAMETER:
14069 offset += ieee80211_tag_fh_hopping_parameter(pinfo, tree, ti, ti_len,
14070 tag_len, tvb, offset);
14072 case TAG_FH_HOPPING_TABLE:
14073 offset += ieee80211_tag_fh_hopping_table(pinfo, tree, ti_len, tag_len,
14074 tvb, offset, tag_end);
14077 case TAG_REQUEST: /* 7.3.2.12 Request information element (10) */
14078 while (offset < tag_end)
14080 proto_tree_add_item(tree, hf_ieee80211_tag_request, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14085 case TAG_QBSS_LOAD: /* 7.3.2.28 BSS Load element (11) */
14086 /* 8.4.2.30 in 802.11-2012 */
14087 if ((tag_len < 4) || (tag_len > 5))
14089 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4 or 5", tag_len);
14095 /* QBSS Version 1 */
14096 proto_item_append_text(ti, " Cisco QBSS Version 1 - non CCA");
14098 /* Extract Values */
14099 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset + 2, tag_len, 1);
14100 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN);
14101 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
14102 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
14104 else if (tag_len == 5)
14107 proto_item *base_item;
14109 /* QBSS Version 2 */
14110 proto_item_append_text(ti, " 802.11e CCA Version");
14112 /* Extract Values */
14113 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset + 2, tag_len, 2);
14114 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN);
14115 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
14116 proto_item_append_text(base_item, " (%d%%)", 100*tvb_get_guint8(tvb, offset + 4)/255);
14117 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 5, 2, ENC_LITTLE_ENDIAN);
14118 proto_item_append_text(base_item, " (%d us/s)", tvb_get_letohs(tvb, offset + 5)*32);
14123 case TAG_EDCA_PARAM_SET: /* 8.4.2.31 in 802-11-2012 */
14124 offset += add_ff_qos_info_ap(tree, tvb, pinfo, offset);
14125 offset += 1; /* reserved */
14126 offset += 4; /* AC_BE */
14127 offset += 4; /* AC_BK */
14128 offset += 4; /* AC_VI */
14129 offset += 4; /* AC_VO */
14133 case TAG_TSPEC: /* TSPEC element (13) */
14134 if (isDMG == FALSE && tag_len != 55)
14136 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 55", tag_len);
14139 if (isDMG == TRUE && tag_len != 57)
14141 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 57", tag_len);
14146 add_ff_qos_ts_info(tree, tvb, pinfo, offset);
14149 proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14152 proto_tree_add_item(tree, hf_ieee80211_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14155 proto_tree_add_item(tree, hf_ieee80211_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14158 proto_tree_add_item(tree, hf_ieee80211_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14161 proto_tree_add_item(tree, hf_ieee80211_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14164 proto_tree_add_item(tree, hf_ieee80211_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14167 proto_tree_add_item(tree, hf_ieee80211_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14170 proto_tree_add_item(tree, hf_ieee80211_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14173 proto_tree_add_item(tree, hf_ieee80211_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14176 proto_tree_add_item(tree, hf_ieee80211_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14179 proto_tree_add_item(tree, hf_ieee80211_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14182 proto_tree_add_item(tree, hf_ieee80211_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14185 proto_tree_add_item(tree, hf_ieee80211_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14188 proto_tree_add_item(tree, hf_ieee80211_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14191 proto_tree_add_item(tree, hf_ieee80211_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14194 if(isDMG == TRUE) {
14195 proto_tree_add_item(tree, hf_ieee80211_tspec_dmg, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14201 case TAG_TCLAS: /* 7.3.2.31 TCLAS element (14) */
14204 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 6", tag_len);
14210 proto_item *class_mask;
14211 proto_tree *mask_tree;
14214 proto_tree_add_item(tree, hf_ieee80211_tclas_up, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14217 type = tvb_get_guint8(tvb, offset);
14218 proto_tree_add_item(tree, hf_ieee80211_tclas_class_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14221 class_mask = proto_tree_add_item(tree, hf_ieee80211_tclas_class_mask,
14222 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14229 mask_tree = proto_item_add_subtree(class_mask,
14230 ett_tag_tclas_mask_tree);
14231 proto_tree_add_item(mask_tree,
14232 hf_ieee80211_tclas_class_mask0_src_addr,
14233 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14234 proto_tree_add_item(mask_tree,
14235 hf_ieee80211_tclas_class_mask0_dst_addr,
14236 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14237 proto_tree_add_item(mask_tree,
14238 hf_ieee80211_tclas_class_mask0_type,
14239 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14242 proto_tree_add_item(tree, hf_ieee80211_tclas_src_mac_addr, tvb, offset, 6, ENC_NA);
14245 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_mac_addr, tvb, offset, 6, ENC_NA);
14248 proto_tree_add_item(tree, hf_ieee80211_tclas_ether_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14253 version = tvb_get_guint8(tvb, offset);
14256 mask_tree = proto_item_add_subtree(class_mask,
14257 ett_tag_tclas_mask_tree);
14258 proto_tree_add_item(mask_tree,
14259 hf_ieee80211_tclas_class_mask1_ver,
14260 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14261 proto_tree_add_item(mask_tree,
14262 hf_ieee80211_tclas_class_mask1_src_ip,
14263 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14264 proto_tree_add_item(mask_tree,
14265 hf_ieee80211_tclas_class_mask1_dst_ip,
14266 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14267 proto_tree_add_item(mask_tree,
14268 hf_ieee80211_tclas_class_mask1_src_port,
14269 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14270 proto_tree_add_item(mask_tree,
14271 hf_ieee80211_tclas_class_mask1_dst_port,
14272 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14273 if (version == 4) {
14274 proto_tree_add_item(mask_tree,
14275 hf_ieee80211_tclas_class_mask1_ipv4_dscp,
14276 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14277 proto_tree_add_item(mask_tree,
14278 hf_ieee80211_tclas_class_mask1_ipv4_proto,
14279 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14281 proto_tree_add_item(mask_tree,
14282 hf_ieee80211_tclas_class_mask1_ipv6_flow,
14283 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14287 proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14291 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN);
14293 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN);
14295 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN);
14297 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN);
14299 proto_tree_add_item(tree, hf_ieee80211_tclas_dscp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14301 proto_tree_add_item(tree, hf_ieee80211_tclas_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14304 else if (version == 6)
14306 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_src, tvb, offset, 16, ENC_NA);
14308 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_dst, tvb, offset, 16, ENC_NA);
14310 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN);
14312 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN);
14314 proto_tree_add_item(tree, hf_ieee80211_tclas_flow, tvb, offset, 3, ENC_BIG_ENDIAN);
14321 mask_tree = proto_item_add_subtree(class_mask,
14322 ett_tag_tclas_mask_tree);
14323 proto_tree_add_item(mask_tree,
14324 hf_ieee80211_tclas_class_mask2_tci,
14325 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14328 proto_tree_add_item(tree, hf_ieee80211_tclas_tag_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14338 case TAG_SCHEDULE: /* 7.3.2.34 Schedule element (15) */
14341 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 14", tag_len);
14346 add_ff_schedule_info(tree, tvb, pinfo, offset);
14349 proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14352 proto_tree_add_item(tree, hf_ieee80211_sched_srv_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14355 proto_tree_add_item(tree, hf_ieee80211_sched_spec_int, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14359 case TAG_CHALLENGE_TEXT: /* 7.3.2.8 Challenge Text element (16) */
14361 proto_tree_add_item(tree, hf_ieee80211_tag_challenge_text, tvb, offset, tag_len, ENC_NA);
14364 case TAG_POWER_CONSTRAINT: /* 7.3.2.15 Power Constraint element (32) */
14368 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
14373 proto_tree_add_item(tree, hf_ieee80211_tag_power_constraint_local, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14374 proto_item_append_text(ti, ": %d", tvb_get_guint8(tvb, offset));
14380 case TAG_POWER_CAPABILITY: /* 7.3.2.16 Power Capability element (33) */
14384 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
14389 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_min, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14390 proto_item_append_text(ti, " Min: %d", tvb_get_guint8(tvb, offset));
14393 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_max, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14394 proto_item_append_text(ti, ", Max :%d", tvb_get_guint8(tvb, offset));
14399 case TAG_TPC_REQUEST: /* 7.3.2.18 TPC Request element (34) */
14403 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 0", tag_len);
14412 case TAG_TPC_REPORT: /* 7.3.2.18 TPC Report element (35) */
14416 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
14421 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_trsmt_pow, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14422 proto_item_append_text(ti, " Transmit Power: %d", tvb_get_guint8(tvb, offset));
14425 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_link_mrg, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14426 proto_item_append_text(ti, ", Link Margin: %d", tvb_get_guint8(tvb, offset));
14432 case TAG_SUPPORTED_CHANNELS: /* 7.3.2.19 Supported Channels element (36) */
14434 proto_item *chan_item;
14435 proto_tree *chan_tree;
14439 if (tag_len % 2 == 1) {
14440 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u must be even", tag_len);
14443 while (offset < tag_end)
14445 chan_item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_channels, tvb, offset, 2, ENC_NA);
14446 proto_item_append_text(chan_item, " #%d", i);
14449 chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
14451 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_first, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14452 proto_item_append_text(chan_item, " First: %d", tvb_get_guint8(tvb, offset));
14455 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_range, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14456 proto_item_append_text(chan_item, ", Range: %d ", tvb_get_guint8(tvb, offset));
14462 case TAG_CHANNEL_SWITCH_ANN: /* 7.3.2.20 Channel Switch Announcement element (37) */
14466 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 3", tag_len);
14471 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14472 proto_item_append_text(ti, " Mode: %d", tvb_get_guint8(tvb, offset));
14475 proto_tree_add_item(tree, hf_ieee80211_csa_new_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14476 proto_item_append_text(ti, ", Number: %d ", tvb_get_guint8(tvb, offset));
14479 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14480 proto_item_append_text(ti, ", Count: %d ", tvb_get_guint8(tvb, offset));
14486 case TAG_MEASURE_REQ: /* 7.3.2.21 Measurement Request element (38) with update from 802.11k-2008 */
14489 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
14493 guint8 request_type;
14494 proto_item *parent_item;
14495 proto_tree *sub_tree;
14499 proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_token, tvb, offset, 1, ENC_NA);
14502 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_mode, tvb, offset, 1, ENC_NA);
14503 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_mode_tree);
14504 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_parallel, tvb, offset, 1, ENC_NA);
14505 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_enable, tvb, offset, 1, ENC_NA);
14506 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_request, tvb, offset, 1, ENC_NA);
14507 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_report, tvb, offset, 1, ENC_NA);
14508 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_duration_mandatory, tvb, offset, 1, ENC_NA);
14509 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mode_reserved, tvb, offset, 1, ENC_NA);
14513 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_type, tvb, offset, 1, ENC_NA);
14514 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_type_tree);
14515 request_type = tvb_get_guint8(tvb, offset);
14518 switch (request_type) {
14519 case 0: /* Basic Request */
14520 case 1: /* Clear channel assessment (CCA) request */
14521 case 2: /* Receive power indication (RPI) histogram request */
14524 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
14527 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
14530 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14534 case 3: /* Channel Load Request */
14536 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA);
14539 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
14542 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14545 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14548 while (offset < tag_end)
14551 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_id, tvb, offset, 1, ENC_NA);
14552 sub_id = tvb_get_guint8(tvb, offset);
14555 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA);
14559 case MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO: /* Channel Load Reporting Information (1) */
14560 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition, tvb, offset, 1, ENC_NA);
14562 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref, tvb, offset, 1, ENC_NA);
14566 /* no default action */
14572 case 4: /* Noise Histogram Request */
14574 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA);
14577 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
14580 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14583 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14586 while (offset < tag_end)
14589 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_id, tvb, offset, 1, ENC_NA);
14590 sub_id = tvb_get_guint8(tvb, offset);
14593 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA);
14597 case MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO: /* Noise Histogram Reporting Information (1) */
14598 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition, tvb, offset, 1, ENC_NA);
14600 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref, tvb, offset, 1, ENC_NA);
14604 /* no default action */
14610 case 5: /* Beacon Request */
14612 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA);
14615 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
14618 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14621 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14624 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_measurement_mode, tvb, offset, 1, ENC_NA);
14627 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_bssid, tvb, offset, 6, ENC_NA);
14630 while (offset < tag_end)
14632 guint8 sub_id, sub_length, sub_tag_end;
14633 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_id, tvb, offset, 1, ENC_NA);
14634 sub_id = tvb_get_guint8(tvb, offset);
14637 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA);
14638 sub_length = tvb_get_guint8(tvb, offset);
14640 sub_tag_end = offset + sub_length;
14643 case MEASURE_REQ_BEACON_SUB_SSID: /* SSID (0) */
14644 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_ssid, tvb, offset, sub_length, ENC_ASCII|ENC_NA);
14645 offset += sub_length;
14647 case MEASURE_REQ_BEACON_SUB_BRI: /* Beacon Reporting Information (1) */
14648 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14650 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14653 case MEASURE_REQ_BEACON_SUB_RD: /* Reporting Detail (2) */
14654 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14657 case MEASURE_REQ_BEACON_SUB_REQUEST: /* Request (10) */
14658 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_request, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14661 case MEASURE_REQ_BEACON_SUB_APCP: /* AP Channel Report (51) */
14665 /* no default action */
14668 if (offset < sub_tag_end)
14671 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA);
14672 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_beacon_unknown);
14673 offset = sub_tag_end;
14679 case 6: /* Frame Request */
14681 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA);
14684 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
14687 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14690 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14693 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_frame_request_type, tvb, offset, 1, ENC_NA);
14696 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mac_address, tvb, offset, 6, ENC_NA);
14699 /* TODO Add Optional Subelements */
14702 case 7: /* BSTA Statistics Request */
14704 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_peer_mac_address, tvb, offset, 6, ENC_NA);
14707 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14710 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14713 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_group_id, tvb, offset, 1, ENC_NA);
14716 /* TODO Add Optional Subelements */
14719 case 8: /* Location Configuration Indication (LCI) Request */
14721 case 9: /* Transmit Stream Measurement Request */
14723 case 10: /* Multicast diagnostics request */
14725 case 11: /* Location Civic request */
14727 case 12: /* Location Identifier request */
14729 case 13: /* Directional channel quality request */
14731 case 14: /* Directional measurement request */
14733 case 15: /* Directional statistics request */
14735 case 255: /* Measurement Pause Request*/
14737 default: /* unknown */
14740 if (offset < tag_end)
14743 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_unknown, tvb, offset, tag_end - offset, ENC_NA);
14744 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_unknown);
14749 case TAG_MEASURE_REP: /* 7.3.2.22 Measurement Report element (39) with update from 802.11k-2008 */
14752 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
14756 proto_item *parent_item;
14757 proto_tree *sub_tree;
14758 guint8 report_type;
14761 proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_measurement_token, tvb, offset, 1, ENC_NA);
14764 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_mode, tvb, offset, 1, ENC_NA);
14765 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_mode_tree);
14766 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_late, tvb, offset, 1, ENC_NA);
14767 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_incapable, tvb, offset, 1, ENC_NA);
14768 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_refused, tvb, offset, 1, ENC_NA);
14769 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_mode_reserved, tvb, offset, 1, ENC_NA);
14772 report_type = tvb_get_guint8(tvb, offset);
14773 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14774 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_type_tree);
14779 switch (report_type) {
14780 case 0: /* Basic Report */
14782 proto_tree *sub_tree_map_field;
14784 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
14787 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
14790 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14794 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_basic_map_field, tvb, offset, 1, ENC_NA);
14795 sub_tree_map_field = proto_item_add_subtree(parent_item, ett_tag_measure_report_basic_map_tree);
14796 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_bss, tvb, offset, 1, ENC_NA);
14797 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_odfm, tvb, offset, 1, ENC_NA);
14798 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_unident_signal, tvb, offset, 1, ENC_NA);
14799 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_radar, tvb, offset, 1, ENC_NA);
14800 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_unmeasured, tvb, offset, 1, ENC_NA);
14801 proto_tree_add_item(sub_tree_map_field, hf_ieee80211_tag_measure_map_field_reserved, tvb, offset, 1, ENC_NA);
14804 case 1: /* Clear channel assessment (CCA) report */
14805 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
14808 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
14811 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14814 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_cca_busy_fraction, tvb, offset, 1, ENC_NA);
14817 case 2: /* Receive power indication (RPI) histogram report */
14818 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
14821 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
14824 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14827 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report, tvb, offset, 8, ENC_NA);
14828 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_rpi_tree);
14830 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_0, tvb, offset, 1, ENC_NA);
14833 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_1, tvb, offset, 1, ENC_NA);
14836 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_2, tvb, offset, 1, ENC_NA);
14839 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_3, tvb, offset, 1, ENC_NA);
14842 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_4, tvb, offset, 1, ENC_NA);
14845 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_5, tvb, offset, 1, ENC_NA);
14848 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_6, tvb, offset, 1, ENC_NA);
14851 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_7, tvb, offset, 1, ENC_NA);
14854 case 3: /* Channel Load Report */
14856 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA);
14859 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
14862 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
14865 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14868 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_load, tvb, offset, 1, ENC_NA);
14871 /* TODO Add Optional Subelements */
14874 case 4: /* Noise Histogram Report */
14875 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA);
14878 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
14881 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
14884 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14887 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA);
14890 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_anpi, tvb, offset, 1, ENC_NA);
14893 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_0, tvb, offset, 1, ENC_NA);
14896 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_1, tvb, offset, 1, ENC_NA);
14899 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_2, tvb, offset, 1, ENC_NA);
14902 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_3, tvb, offset, 1, ENC_NA);
14905 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_4, tvb, offset, 1, ENC_NA);
14908 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_5, tvb, offset, 1, ENC_NA);
14911 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_6, tvb, offset, 1, ENC_NA);
14914 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_7, tvb, offset, 1, ENC_NA);
14917 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_8, tvb, offset, 1, ENC_NA);
14920 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_9, tvb, offset, 1, ENC_NA);
14923 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_10, tvb, offset, 1, ENC_NA);
14926 /* TODO Add Optional Subelements */
14928 case 5: /* Beacon Report */
14930 proto_tree *sub_tree_frame_info;
14932 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA);
14935 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
14938 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
14941 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14944 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_frame_info, tvb, offset, 1, ENC_NA);
14945 sub_tree_frame_info = proto_item_add_subtree(parent_item, ett_tag_measure_report_frame_tree);
14946 proto_tree_add_item(sub_tree_frame_info, hf_ieee80211_tag_measure_report_frame_info_phy_type, tvb, offset, 1, ENC_NA);
14947 proto_tree_add_item(sub_tree_frame_info, hf_ieee80211_tag_measure_report_frame_info_frame_type, tvb, offset, 1, ENC_NA);
14950 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rcpi, tvb, offset, 1, ENC_NA);
14953 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rsni, tvb, offset, 1, ENC_NA);
14956 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_bssid, tvb, offset, 6, ENC_NA);
14959 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA);
14962 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14965 while (offset < tag_end)
14967 guint8 sub_id, sub_length;
14968 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_beacon_sub_id, tvb, offset, 1, ENC_NA);
14969 sub_id = tvb_get_guint8(tvb, offset);
14972 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_subelement_length, tvb, offset, 1, ENC_NA);
14973 sub_length = tvb_get_guint8(tvb, offset);
14977 case MEASURE_REP_REPORTED_FRAME_BODY: /* Reported Frame Body (1) */
14979 proto_tree *rep_tree;
14981 rep_tree = proto_tree_add_subtree(sub_tree, tvb, offset, sub_length, ett_tag_measure_reported_frame_tree, NULL, "Reported Frame Body");
14983 add_ff_timestamp(rep_tree, tvb, pinfo, 0);
14984 add_ff_beacon_interval(rep_tree, tvb, pinfo, 8);
14985 add_ff_cap_info(rep_tree, tvb, pinfo, 10);
14988 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, rep_tree, sub_length - 12, MGT_PROBE_RESP, NULL);
14989 offset += (sub_length - 12);
14993 /* no default action */
14999 case 6: /* Frame Report */
15000 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA);
15003 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
15006 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
15009 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15012 /* TODO Add Optional Subelements */
15014 case 7: /* BSTA Statistics Report */
15016 case 8: /* Location Configuration Information Report element */
15018 case 9: /* Transmit Stream Measurement Report */
15020 case 10: /* Multicast diagnostics Report */
15022 case 11: /* Location Civic Report */
15024 case 12: /* Location Identifier Report */
15026 case 13: /* Directional channel quality Report */
15028 case 14: /* Directional measurement Report */
15030 case 15: /* Directional statistics Report */
15032 default: /* unknown */
15035 if (offset < tag_end)
15038 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_unknown, tvb, offset, tag_end - offset, ENC_NA);
15039 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_unknown);
15044 case TAG_QUIET: /* 7.3.2.23 Quiet element (40) */
15047 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
15052 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_count, tvb, offset, 1, ENC_NA);
15053 proto_item_append_text(ti, " Count: %d", tvb_get_guint8(tvb, offset));
15056 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_period, tvb, offset, 1, ENC_NA);
15057 proto_item_append_text(ti, " Period: %d", tvb_get_guint8(tvb, offset));
15060 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15061 proto_item_append_text(ti, " Duration: %d", tvb_get_letohs(tvb, offset));
15064 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15065 proto_item_append_text(ti, " Offset: %d", tvb_get_letohs(tvb, offset));
15070 case TAG_IBSS_DFS: /* 7.3.2.24 IBSS DFS element (41) */
15073 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 7", tag_len);
15077 proto_item *ti_sup_map;
15078 proto_tree *sub_map_tree;
15081 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_owner, tvb, offset, 6, ENC_NA);
15082 proto_item_append_text(ti, " Owner: %s", tvb_ether_to_str(tvb, offset));
15085 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_recovery_interval, tvb, offset, 1, ENC_NA);
15088 while (offset < tag_end)
15090 ti_sup_map = proto_tree_add_item(tree, hf_ieee80211_tag_dfs_channel_map, tvb, offset, 2, ENC_NA);
15091 sub_map_tree = proto_item_add_subtree(ti_sup_map, ett_tag_dfs_map_tree);
15092 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_channel_number, tvb, offset, 1, ENC_NA);
15093 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_map, tvb, offset, 1, ENC_NA);
15098 case TAG_ERP_INFO: /* 7.3.2.13 ERP Information element (42) */
15099 case TAG_ERP_INFO_OLD:
15102 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
15106 proto_item *ti_erp;
15107 proto_tree *erp_tree;
15111 ti_erp = proto_tree_add_item(tree, hf_ieee80211_tag_erp_info, tvb, offset, 1, ENC_NA);
15112 erp_tree = proto_item_add_subtree(ti_erp, ett_tag_erp_info_tree);
15113 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_erp_present, tvb, offset, 1, ENC_NA);
15114 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_use_protection, tvb, offset, 1, ENC_NA);
15115 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_barker_preamble_mode, tvb, offset, 1, ENC_NA);
15116 proto_tree_add_item(erp_tree, hf_ieee80211_tag_erp_info_reserved, tvb, offset, 1, ENC_NA);
15121 case TAG_TS_DELAY: /* 7.3.2.32 TS Delay element (43) */
15124 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
15129 proto_tree_add_item(tree, hf_ieee80211_ts_delay, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15130 proto_item_append_text(ti, " : %d", tvb_get_ntohl(tvb, offset));
15134 case TAG_TCLAS_PROCESS: /* 7.3.2.33 TCLAS Processing element (44) */
15137 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
15142 proto_tree_add_item(tree, hf_ieee80211_tclas_process, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15143 proto_item_append_text(ti, " : %s", val_to_str(tvb_get_guint8(tvb, offset), ieee80211_tclas_process_flag, "Unknown %d"));
15147 case TAG_QOS_CAPABILITY: /* 802.11-2012 8.4.2.37 QoS Capability element (46) */
15150 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
15155 offset = dissect_qos_capability(tree, tvb, pinfo, offset, ftype);
15159 case TAG_RSN_IE: /* 7.3.2.25 RSN information element (48) */
15162 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 18", tag_len);
15167 offset = dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len, association_sanity_check);
15170 case TAG_EXT_SUPP_RATES: /* 7.3.2.14 Extended Supported Rates element (50) */
15173 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be greater than 0", tag_len);
15178 while (offset < tag_end)
15180 proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA);
15181 proto_item_append_text(ti, " %s,", val_to_str_ext_const(tvb_get_guint8(tvb, offset), &ieee80211_supported_rates_vals_ext, "Unknown Rate"));
15184 proto_item_append_text(ti, " [Mbit/sec]");
15187 case TAG_EXTENDED_CAPABILITIES: /* 7.3.2.27 Extended Capabilities information element (127) */
15188 dissect_extended_capabilities_ie(pinfo, tree, ti, ti_len, tag_len, tvb, offset+2, tag_end);
15191 case TAG_CISCO_CCX1_CKIP: /* Cisco CCX1 CKIP + Device Name (133) */
15192 /* From WCS manual:
15193 * If Aironet IE support is enabled, the access point sends an Aironet
15194 * IE 0x85 (which contains the access point name, load, number of
15195 * associated clients, and so on) in the beacon and probe responses of
15196 * this WLAN, and the controller sends Aironet IEs 0x85 and 0x95
15197 * (which contains the management IP address of the controller and
15198 * the IP address of the access point) in the reassociation response
15199 * if it receives Aironet IE 0x85 in the reassociation request.
15204 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u too short, must be >= 26", tag_len);
15208 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown, tvb, offset, 10, ENC_NA);
15211 /* The Name of the sending device starts at offset 10 and is up to
15212 15 or 16 bytes in length, \0 padded */
15213 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_name, tvb, offset, 16, ENC_ASCII|ENC_NA);
15216 /* Total number off associated clients and repeater access points */
15217 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_clients, tvb, offset, 1, ENC_NA);
15219 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown2, tvb, offset, 3, ENC_NA);
15223 case TAG_VHT_CAPABILITY:
15224 dissect_vht_capability_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len);
15227 case TAG_VHT_OPERATION:
15228 dissect_vht_operation_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len);
15231 case TAG_EXT_BSS_LOAD:
15232 dissect_ext_bss_load(tree, tvb, offset+2);
15235 case TAG_WIDE_BW_CHANNEL_SWITCH:
15236 dissect_wide_bw_channel_switch(tree, tvb, offset+2);
15239 case TAG_VHT_TX_PWR_ENVELOPE:
15240 dissect_vht_tx_pwr_envelope(tvb, pinfo, tree, offset+2, tag_len, ti_len);
15243 case TAG_CHANNEL_SWITCH_WRAPPER:
15244 dissect_channel_switch_wrapper(pinfo, tree, tvb, offset + 2, tag_len);
15247 case TAG_OPERATING_MODE_NOTIFICATION:
15248 dissect_operating_mode_notification(tree, tvb, offset + 2);
15251 case TAG_VENDOR_SPECIFIC_IE: /* 7.3.2.26 Vendor Specific information element (221) */
15252 case TAG_CISCO_VENDOR_SPECIFIC: /* This Cisco proprietary IE seems to mimic 221 */
15253 case TAG_SYMBOL_PROPRIETARY: /* This Symbol proprietary IE seems to mimic 221 */
15256 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
15260 guint32 tag_vs_len = tag_len;
15263 oui = tvb_get_ntoh24(tvb, offset);
15264 tag_tvb = tvb_new_subset_length(tvb, offset, tag_len);
15265 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
15266 proto_item_append_text(ti, ": %s", uint_get_manuf_name(oui));
15271 proto_tree_add_item(ti, hf_ieee80211_tag_vendor_oui_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15275 /* 802.11 specific vendor ids */
15277 offset = dissect_vendor_ie_wpawme(tree, tvb, pinfo, offset, tag_vs_len, ftype);
15280 dissect_vendor_ie_rsn(ti, tree, tvb, offset, tag_vs_len);
15283 dissect_vendor_ie_ht(tvb, pinfo, tree, offset, ti, ti_len, tag_vs_len);
15286 dissect_vendor_ie_wfa(pinfo, ti, tag_tvb);
15289 /* Normal IEEE vendor ids (from oui.h) */
15290 case OUI_CISCOWL: /* Cisco Wireless (Aironet) */
15291 dissect_vendor_ie_aironet(ti, tree, tvb, offset, tag_vs_len);
15294 dissect_vendor_ie_marvell(ti, tree, tvb, offset, tag_vs_len);
15297 dissect_vendor_ie_atheros(ti, tree, tvb, offset, tag_vs_len, pinfo, ti_len);
15300 dissect_vendor_ie_aruba(ti, tree, tvb, offset, tag_vs_len);
15303 dissect_vendor_ie_nintendo(ti, tree, tvb, offset, tag_vs_len);
15306 dissect_vendor_ie_mikrotik(ti, tree, tvb, offset, tag_vs_len);
15309 dissect_vendor_ie_meru(ti, tree, tvb, offset, tag_vs_len, pinfo);
15311 case OUI_ZEBRA_EXTREME:
15312 dissect_vendor_ie_extreme(ti, tree, tvb, offset, tag_vs_len, pinfo);
15315 proto_tree_add_item(tree, hf_ieee80211_tag_vendor_data, tvb, offset, tag_vs_len, ENC_NA);
15322 case TAG_MOBILITY_DOMAIN:
15323 dissect_mobility_domain(tree, tvb, offset + 2, tag_len, association_sanity_check);
15326 case TAG_FAST_BSS_TRANSITION:
15327 dissect_fast_bss_transition(tree, tvb, offset + 2, tag_len);
15331 dissect_mmie(tree, tvb, offset + 2, tag_len);
15334 case TAG_SSID_LIST:
15335 dissect_ssid_list(tree, tvb, offset + 2, tag_len);
15338 case TAG_TIME_ZONE:
15339 dissect_time_zone(tree, tvb, offset + 2, tag_len);
15342 case TAG_TIMEOUT_INTERVAL:
15343 dissect_timeout_interval(tree, tvb, pinfo, offset + 2, tag_len);
15346 case TAG_RIC_DATA: /* RIC Data (RDE) (57) */
15347 /* Assigning the return value will ensure that the IE after RIC is processed
15348 * only once. This gives us a good looking RIC IE :-)
15350 tag_len = dissect_ric_data(pinfo, tree, tvb, offset + 2, tag_len, ti, ti_len, ftype);
15353 case TAG_LINK_IDENTIFIER:
15354 dissect_link_identifier(tree, tvb, offset + 2, tag_len);
15357 case TAG_WAKEUP_SCHEDULE:
15358 dissect_wakeup_schedule(tree, tvb, offset + 2, tag_len);
15361 case TAG_CHANNEL_SWITCH_TIMING:
15362 dissect_channel_switch_timing(tree, tvb, offset + 2, tag_len);
15365 case TAG_PTI_CONTROL:
15366 dissect_pti_control(tree, tvb, offset + 2, tag_len);
15369 case TAG_PU_BUFFER_STATUS:
15370 dissect_pu_buffer_status(tree, tvb, offset + 2, tag_len);
15373 case TAG_HT_CAPABILITY:
15374 dissect_ht_capability_ie(tvb, pinfo, tree, offset+2, tag_len, ti_len, FALSE);
15378 dissect_ht_info_ie_1_1(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15381 case TAG_SECONDARY_CHANNEL_OFFSET:
15382 dissect_secondary_channel_offset_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15385 case TAG_BSS_AVG_ACCESS_DELAY: /* BSS Average Access Delay element (63) */
15386 dissect_bss_avg_access_delay_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15389 case TAG_ANTENNA: /* Antenna element (64) */
15390 dissect_antenna_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15393 case TAG_RSNI: /* RSNI element (65) */
15394 dissect_rsni_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15397 case TAG_BSS_AVB_ADM_CAPACITY:
15398 dissect_bss_available_admission_capacity_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15401 case TAG_IE_68_CONFLICT: /* Conflict: WAPI Vs. IEEE */
15402 if (tag_len >= 20) { /* It Might be WAPI*/
15403 dissect_wapi_param_set(tvb, pinfo, tree, offset + 2, tag_len, ti_len, ti, ftype);
15405 else { /* BSS AC Access Delay (68) */
15406 dissect_bss_ac_access_delay_ie(tvb, pinfo, tree, offset + 2, tag_len, ti_len);
15410 case TAG_BSS_MAX_IDLE_PERIOD:
15411 dissect_bss_max_idle_period(tree, tvb, offset + 2);
15414 case TAG_TFS_REQUEST:
15415 dissect_tfs_request(pinfo, tree, tvb, offset + 2, tag_len, ftype);
15418 case TAG_TFS_RESPONSE:
15419 dissect_tfs_response(pinfo, tree, tvb, offset + 2, tag_len, ftype);
15422 case TAG_WNM_SLEEP_MODE:
15423 dissect_wnm_sleep_mode(tree, tvb, offset + 2);
15427 dissect_time_adv(tree, tvb, offset + 2);
15430 case TAG_RM_ENABLED_CAPABILITY: /* RM Enabled Capabilities (70) */
15431 dissect_rm_enabled_capabilities_ie(pinfo, tree, ti, ti_len, tag_len, tvb, offset+2, tag_end);
15434 case TAG_20_40_BSS_CO_EX: /* 20/40 BSS Coexistence (72) */
15435 dissect_20_40_bss_coexistence(pinfo, tree, ti_len, tag_len, tvb, offset+2);
15438 case TAG_OVERLAP_BSS_SCAN_PAR: /* Overlapping BSS Scan Parameters (74) */
15439 dissect_overlap_bss_scan_par(pinfo, tree, tvb, offset + 2, tag_len, ti, ti_len);
15442 case TAG_RIC_DESCRIPTOR: /* RIC Descriptor (75) */
15443 dissect_ric_descriptor(pinfo, tree, tvb, offset + 2, tag_len, ti, ti_len);
15446 case TAG_MESH_PEERING_MGMT:
15448 guint start = offset + 2;
15450 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_proto, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15452 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_local_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15454 switch (tvb_get_guint8(tvb, 1))
15455 { /* Self-protected action field */
15456 case SELFPROT_ACTION_MESH_PEERING_OPEN:
15459 case SELFPROT_ACTION_MESH_PEERING_CONFIRM:
15460 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15464 case SELFPROT_ACTION_MESH_PEERING_CLOSE:
15465 if ((tag_len == 8) || (tag_len == 24))
15467 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15470 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
15473 /* unexpected values */
15475 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_mesh_peering_unexpected , tvb, offset, tag_len);
15479 if (tag_len - (offset - start) == 16)
15481 proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA);
15487 case TAG_MESH_CONFIGURATION:
15490 proto_tree *subtree;
15492 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15493 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_metric, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
15494 proto_tree_add_item(tree, hf_ieee80211_mesh_config_congestion_control, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
15495 proto_tree_add_item(tree, hf_ieee80211_mesh_config_sync_method, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
15496 proto_tree_add_item(tree, hf_ieee80211_mesh_config_auth_protocol, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
15497 item = proto_tree_add_item(tree, hf_ieee80211_mesh_config_formation_info, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
15498 subtree = proto_item_add_subtree(item, ett_mesh_formation_info_tree);
15499 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_num_of_peerings, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
15500 item = proto_tree_add_item(tree, hf_ieee80211_mesh_config_capability, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
15501 subtree = proto_item_add_subtree(item, ett_mesh_config_cap_tree);
15502 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_accepting, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
15503 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_mcca_support, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
15504 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_mcca_enabled, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
15505 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_forwarding, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
15506 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_mbca_enabled, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
15507 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_tbtt_adjusting, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
15508 proto_tree_add_item(subtree, hf_ieee80211_mesh_config_cap_power_save_level, tvb, offset + 6, 1, ENC_LITTLE_ENDIAN);
15514 const guint8* mesh_id;
15517 proto_tree_add_item_ret_string(tree, hf_ieee80211_mesh_id, tvb, offset, tag_len, ENC_ASCII|ENC_NA, wmem_packet_scope(), &mesh_id);
15519 col_append_fstr(pinfo->cinfo, COL_INFO, ", MESHID=%s", format_text(mesh_id, tag_len));
15520 proto_item_append_text(ti, ": %s", format_text(mesh_id, tag_len));
15526 case TAG_MESH_PREQ:
15528 guint8 flags = tvb_get_guint8(tvb, offset + 2);
15532 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15534 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15536 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15538 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_pdid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15540 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA);
15542 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15545 if (flags & (1<<6)) {
15546 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_ext, tvb, offset, 6, ENC_NA);
15549 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15551 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15553 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15554 targs = tvb_get_guint8(tvb, offset);
15556 for (i = 0; i < targs; i++) {
15557 const int * targ_flags[] = {
15558 &hf_ieee80211_ff_hwmp_targ_to_flags,
15559 &hf_ieee80211_ff_hwmp_targ_usn_flags,
15563 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_hwmp_targ_flags,
15564 ett_hwmp_targ_flags_tree, targ_flags, ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
15567 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
15569 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15575 case TAG_MESH_PREP:
15577 guint8 flags = tvb_get_guint8(tvb, offset + 2);
15579 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15581 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15583 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset , 1, ENC_LITTLE_ENDIAN);
15585 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
15587 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15589 if (flags & (1<<6)) {
15590 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA);
15593 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15595 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15597 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA);
15599 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15604 case TAG_MESH_PERR:
15609 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15611 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15612 targs = tvb_get_guint8(tvb, offset);
15614 for (i = 0; i < targs; i++) {
15615 guint8 flags = tvb_get_guint8(tvb, offset);
15617 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15619 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
15621 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15623 if (flags & (1<<6)) {
15624 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA);
15627 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
15635 proto_tree_add_item(tree, hf_ieee80211_rann_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15637 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15639 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15641 proto_tree_add_item(tree, hf_ieee80211_rann_root_sta, tvb, offset, 6, ENC_NA);
15643 proto_tree_add_item(tree, hf_ieee80211_rann_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15645 proto_tree_add_item(tree, hf_ieee80211_rann_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15647 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15652 case TAG_MESH_CHANNEL_SWITCH: /* Mesh Channel Switch Parameters (118) */
15655 proto_tree *subtree;
15658 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
15663 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15664 proto_item_append_text(ti, " TTL: %d", tvb_get_guint8(tvb, offset));
15667 item = proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15668 subtree = proto_item_add_subtree(item, ett_mesh_chswitch_flag_tree);
15669 proto_tree_add_item(subtree, hf_ieee80211_mesh_chswitch_flag_initiator, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15670 proto_tree_add_item(subtree, hf_ieee80211_mesh_chswitch_flag_txrestrict, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15673 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_reason_code, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15676 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_precedence_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15681 case TAG_INTERWORKING:
15682 dissect_interworking(pinfo, tree, ti, tvb, offset);
15684 case TAG_ADVERTISEMENT_PROTOCOL:
15686 dissect_advertisement_protocol(pinfo, tree, tvb, offset, NULL);
15689 case TAG_QOS_MAP_SET:
15690 dissect_qos_map_set(pinfo, tree, ti, tvb, offset);
15692 case TAG_ROAMING_CONSORTIUM:
15693 dissect_roaming_consortium(pinfo, tree, ti, tvb, offset);
15695 case TAG_AP_CHANNEL_REPORT: /* 7.3.2.36 AP Channel Report element */
15696 dissect_ap_channel_report(tvb, pinfo, tree, offset + 2, tag_len, ti_len, tag_end, ti);
15698 case TAG_NEIGHBOR_REPORT:
15699 dissect_neighbor_report(tvb, pinfo, tree, offset + 2, tag_len, ti_len, tag_end, ti);
15702 case TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT:
15706 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
15712 offset += add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
15716 case TAG_SUPPORTED_OPERATING_CLASSES:
15721 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
15723 } else if (tag_len > 32) {
15724 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be < 32", tag_len);
15730 proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_current, tvb, offset, 1, ENC_NA);
15733 /* Partially taken from the ssid section */
15734 tag_data_ptr = tvb_get_ptr(tvb, offset, tag_len);
15735 for (i = 0, n = 0; (i < tag_len) && (n < SHORT_STR); i++) {
15736 ret = g_snprintf(print_buff + n, SHORT_STR - n, (i == tag_len-1)?"%d":"%d, ", tag_data_ptr[i]);
15737 if (ret >= SHORT_STR - n) {
15738 /* ret >= <buf_size> means buffer truncated */
15743 proto_tree_add_string(tree, hf_ieee80211_tag_supported_ope_classes_alternate, tvb, offset, tag_len, print_buff);
15747 case TAG_RELAY_CAPABILITIES:
15749 add_tag_relay_capabilities(pinfo, ti_len, tag_len, tree, tvb, &offset);
15752 case TAG_DMG_BSS_PRAMTER_CHANGE:
15757 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
15761 size = (tvb_get_guint8(tvb, offset) & 0x02) >> 1;
15762 proto_tree_add_item(tree, hf_ieee80211_tag_move, tvb, offset, 1, ENC_NA);
15763 proto_tree_add_item(tree, hf_ieee80211_tag_size, tvb, offset, 1, ENC_NA);
15765 proto_tree_add_item(tree, hf_ieee80211_tag_tbtt_offset, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15767 if(size == TRUE) { /* if size bit is 0, the field is reserved. */
15768 proto_tree_add_item(tree, hf_ieee80211_tag_bi_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15773 case TAG_DMG_CAPABILITIES:
15777 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 17", tag_len);
15781 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_sta_addr, tvb, offset, 6, ENC_NA);
15783 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_aid, tvb, offset, 1, ENC_NA);
15785 proto_tree_add_item(tree, hf_ieee80211_tag_reverse_direction, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15786 proto_tree_add_item(tree, hf_ieee80211_tag_hlts, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15787 proto_tree_add_item(tree, hf_ieee80211_tag_tpc, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15788 proto_tree_add_item(tree, hf_ieee80211_tag_spsh, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15789 proto_tree_add_item(tree, hf_ieee80211_tag_rx_antenna, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15790 proto_tree_add_item(tree, hf_ieee80211_tag_fast_link, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15791 proto_tree_add_item(tree, hf_ieee80211_tag_num_sectors, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15792 proto_tree_add_item(tree, hf_ieee80211_tag_rxss_length, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15793 proto_tree_add_item(tree, hf_ieee80211_tag_reciprocity, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15794 proto_tree_add_item(tree, hf_ieee80211_tag_max_ampdu_exp, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15796 proto_tree_add_item(tree, hf_ieee80211_tag_min_mpdu_sapcing, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15797 proto_tree_add_item(tree, hf_ieee80211_tag_ba_flow_control, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15798 proto_tree_add_item(tree, hf_ieee80211_tag_max_sc_rx_mcs, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15799 proto_tree_add_item(tree, hf_ieee80211_tag_max_ofdm_rx_mcs, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15800 proto_tree_add_item(tree, hf_ieee80211_tag_max_sc_tx_mcs, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15801 proto_tree_add_item(tree, hf_ieee80211_tag_max_ofdm_tx_mcs, tvb, offset, 3, ENC_LITTLE_ENDIAN);
15803 proto_tree_add_item(tree, hf_ieee80211_tag_low_power_supported, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15804 proto_tree_add_item(tree, hf_ieee80211_tag_code_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15805 proto_tree_add_item(tree, hf_ieee80211_tag_dtp, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15806 proto_tree_add_item(tree, hf_ieee80211_tag_appdu_supp, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15807 proto_tree_add_item(tree, hf_ieee80211_tag_heartbeat, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15808 proto_tree_add_item(tree, hf_ieee80211_tag_other_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15809 proto_tree_add_item(tree, hf_ieee80211_tag_pattern_recip, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15810 proto_tree_add_item(tree, hf_ieee80211_tag_heartbeat_elapsed, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15811 proto_tree_add_item(tree, hf_ieee80211_tag_grant_ack_supp, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15812 proto_tree_add_item(tree, hf_ieee80211_tag_RXSSTxRate_supp, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15814 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_tddti, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15815 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_PSA, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15816 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_handover, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15817 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_max_assoc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15818 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_power_src, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15819 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_decenter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15820 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_forwarding, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15821 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_center, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15825 case TAG_DMG_OPERATION:
15829 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 10", tag_len);
15833 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_tddti, tvb, offset, 1, ENC_NA);
15834 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_PSA, tvb, offset, 1, ENC_NA);
15835 proto_tree_add_item(tree, hf_ieee80211_tag_pcp_handover, tvb, offset, 1, ENC_NA);
15837 proto_tree_add_item(tree, hf_ieee80211_tag_PSRSI, tvb, offset, 1, ENC_NA);
15839 proto_tree_add_item(tree, hf_ieee80211_tag_min_BHI_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15841 proto_tree_add_item(tree, hf_ieee80211_tag_brdct_sta_info_dur, tvb, offset, 1, ENC_NA);
15843 proto_tree_add_item(tree, hf_ieee80211_tag_assoc_resp_confirm_time, tvb, offset, 1, ENC_NA);
15845 proto_tree_add_item(tree, hf_ieee80211_tag_min_pp_duration, tvb, offset, 1, ENC_NA);
15847 proto_tree_add_item(tree, hf_ieee80211_tag_SP_idle_timeout, tvb, offset, 1, ENC_NA);
15849 proto_tree_add_item(tree, hf_ieee80211_tag_max_lost_beacons, tvb, offset, 1, ENC_NA);
15853 case TAG_ANTENNA_SECTOR_ID:
15857 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
15861 proto_tree_add_item(tree, hf_ieee80211_tag_type, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15862 proto_tree_add_item(tree, hf_ieee80211_tag_tap1, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15863 proto_tree_add_item(tree, hf_ieee80211_tag_state1, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15864 proto_tree_add_item(tree, hf_ieee80211_tag_tap2, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15865 proto_tree_add_item(tree, hf_ieee80211_tag_state2, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15869 case TAG_EXTENDED_SCHEDULE:
15873 proto_tree * alloc_tree;
15874 if ((tag_len%15) != 0)
15876 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be N*15 where 0<=N<=17", tag_len);
15880 isGrant = ((ftype==CTRL_GRANT)||(ftype==CTRL_GRANT_ACK));
15881 for(i=0; i < tag_len; i+=15) {
15882 alloc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 15, ett_allocation_tree, NULL, "Allocation %d", i/15);
15883 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15884 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15885 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pseudo_static, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15886 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_truncatable, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15887 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_extendable, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15888 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pcp_active, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15889 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_lp_sc_used, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15891 offset += add_ff_beamforming_ctrl(alloc_tree, tvb, pinfo, offset, isGrant);
15892 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_src_aid, tvb, offset, 1, ENC_NA);
15894 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_dest_aid, tvb, offset, 1, ENC_NA);
15896 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15898 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15900 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_num_blocks, tvb, offset, 1, ENC_NA);
15902 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_period, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15907 case TAG_STA_AVAILABILITY:
15910 proto_tree * sta_info_tree;
15911 if ((tag_len%2) != 0)
15913 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be N*2 where N>=0", tag_len);
15917 for(i=0; i < tag_len; i+=2) {
15918 sta_info_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2, ett_sta_info, NULL, "STA Info %d", i/2);
15919 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15920 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_cbap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15921 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_pp_avail, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15926 case TAG_NEXT_DMG_ATI:
15930 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
15934 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15936 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15940 case TAG_NEXTPCP_LIST:
15945 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 1", tag_len);
15949 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_token, tvb, offset, 1, ENC_NA);
15951 for(i=0; i < tag_len-1; i+=1) {
15952 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_list, tvb, offset, 1, ENC_NA);
15957 case TAG_PCP_HANDOVER:
15961 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 13", tag_len);
15965 proto_tree_add_item(tree, hf_ieee80211_tag_old_bssid, tvb, offset, 6, ENC_NA);
15967 proto_tree_add_item(tree, hf_ieee80211_tag_new_pcp_addr, tvb, offset, 6, ENC_NA);
15969 proto_tree_add_item(tree, hf_ieee80211_tag_reamaining_BI, tvb, offset, 1, ENC_NA);
15973 case TAG_BEAMLINK_MAINTAINCE:
15977 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
15981 offset += add_ff_beamformed_link(tree, tvb, pinfo, offset);
15984 case TAG_QUIET_PERIOD_RES:
15988 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 10", tag_len);
15992 proto_tree_add_item(tree, hf_ieee80211_tag_request_token, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15994 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA);
15996 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
15999 case TAG_RELAY_TRANSFER_PARAM:
16003 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
16007 proto_tree_add_item(tree, hf_ieee80211_tag_duplex_relay, tvb, offset, 1, ENC_NA);
16008 proto_tree_add_item(tree, hf_ieee80211_tag_cooperation_relay, tvb, offset, 1, ENC_NA);
16009 proto_tree_add_item(tree, hf_ieee80211_tag_tx_mode, tvb, offset, 1, ENC_NA);
16010 proto_tree_add_item(tree, hf_ieee80211_tag_link_change_interval, tvb, offset+1, 1, ENC_NA);
16011 proto_tree_add_item(tree, hf_ieee80211_tag_data_sensing_time, tvb, offset+2, 1, ENC_NA);
16012 proto_tree_add_item(tree, hf_ieee80211_tag_first_period, tvb, offset+3, 2, ENC_LITTLE_ENDIAN);
16013 proto_tree_add_item(tree, hf_ieee80211_tag_second_period, tvb, offset+5, 2, ENC_LITTLE_ENDIAN);
16017 case TAG_DMG_BEAM_REFINEMENT:
16021 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
16025 proto_tree_add_item(tree, hf_ieee80211_tag_initiator, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16026 proto_tree_add_item(tree, hf_ieee80211_tag_tx_train_res, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16027 proto_tree_add_item(tree, hf_ieee80211_tag_rx_train_res, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16028 proto_tree_add_item(tree, hf_ieee80211_tag_tx_trn_ok, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16029 proto_tree_add_item(tree, hf_ieee80211_tag_txss_fbck_req, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16030 proto_tree_add_item(tree, hf_ieee80211_tag_bs_fbck, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16031 proto_tree_add_item(tree, hf_ieee80211_tag_bs_fbck_antenna_id, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16032 proto_tree_add_item(tree, hf_ieee80211_tag_snr_requested, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16033 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_requested, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16034 proto_tree_add_item(tree, hf_ieee80211_tag_number_of_taps_requested, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16035 proto_tree_add_item(tree, hf_ieee80211_tag_sector_id_order_req, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16036 proto_tree_add_item(tree, hf_ieee80211_tag_snr_present, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16037 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_present, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16038 proto_tree_add_item(tree, hf_ieee80211_tag_tap_delay_present, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16039 proto_tree_add_item(tree, hf_ieee80211_tag_number_of_taps_present, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16040 proto_tree_add_item(tree, hf_ieee80211_tag_number_of_measurement, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16041 proto_tree_add_item(tree, hf_ieee80211_tag_sector_id_order_present, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16042 proto_tree_add_item(tree, hf_ieee80211_tag_number_of_beams, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16043 proto_tree_add_item(tree, hf_ieee80211_tag_mid_extension, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16044 proto_tree_add_item(tree, hf_ieee80211_tag_capability_request, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16045 proto_tree_add_item(tree, hf_ieee80211_tag_beam_refine_reserved, tvb, offset, 5, ENC_LITTLE_ENDIAN);
16049 case TAG_WAKEUP_SCHEDULE_AD:
16053 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
16057 proto_tree_add_item(tree, hf_ieee80211_tag_bi_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16059 proto_tree_add_item(tree, hf_ieee80211_tag_sleep_cycle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16061 proto_tree_add_item(tree, hf_ieee80211_tag_num_awake_bis, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16065 case TAG_DMG_TSPEC:
16068 int num_constraints;
16071 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 14", tag_len);
16075 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_id, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16076 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_type, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16077 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_format, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16078 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_pseudo_static, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16079 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_truncatable, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16080 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_extendable, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16081 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_lp_sc_used, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16082 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_up, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16083 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_dest_aid, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16085 isGrant = ((ftype==CTRL_GRANT)||(ftype==CTRL_GRANT_ACK));
16086 offset += add_ff_beamforming_ctrl(tree, tvb, pinfo, 2, isGrant);
16087 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_period, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16089 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16091 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_max_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16093 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16095 num_constraints = tvb_get_guint8(tvb, offset);
16096 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_num_of_constraints, tvb, offset, 1, ENC_NA);
16098 while(num_constraints > 0) {
16099 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16101 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16103 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_period, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16105 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_interferer_mac, tvb, offset, 2, ENC_NA);
16111 case TAG_CHANNEL_MEASURMENT_FB:
16113 int num_measurement;
16114 if (tag_len%5 != 0)
16116 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be multiple of 5", tag_len);
16119 num_measurement = tvb_get_guint8(tvb, offset+1);
16121 while(num_measurement > 0) {
16122 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA);
16124 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_realtive_I, tvb, offset, 1, ENC_NA);
16126 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_realtive_Q, tvb, offset, 1, ENC_NA);
16128 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_tap_delay, tvb, offset, 1, ENC_NA);
16130 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_sector_id, tvb, offset, 1, ENC_NA);
16131 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_antenna_id, tvb, offset, 1, ENC_NA);
16137 case TAG_AWAKE_WINDOW:
16141 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 2", tag_len);
16145 proto_tree_add_item(tree, hf_ieee80211_tag_awake_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16149 case TAG_ADDBA_EXT:
16153 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
16157 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_no_frag, tvb, offset, 1, ENC_NA);
16161 case TAG_MULTI_BAND:
16163 gboolean chiper_present, addr_present;
16166 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 22", tag_len);
16170 chiper_present = (tvb_get_letohs(tvb, offset) & 0x08) >> 3;
16171 addr_present = (tvb_get_letohs(tvb, offset) & 0x10) >> 4;
16172 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_sta_role, tvb, offset, 1, ENC_NA);
16173 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_addr_present, tvb, offset, 1, ENC_NA);
16174 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_ctrl_cipher_present, tvb, offset, 1, ENC_NA);
16176 offset += add_ff_band_id(tree, tvb, pinfo, 1);
16177 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_oper_class, tvb, offset, 1, ENC_NA);
16179 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_channel_number, tvb, offset, 1, ENC_NA);
16181 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA);
16183 offset += add_ff_beacon_interval(tree, tvb, pinfo, 2);
16184 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_tsf_offset, tvb, offset, 8, ENC_LITTLE_ENDIAN);
16186 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_ap, tvb, offset, 1, ENC_NA);
16187 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_pcp, tvb, offset, 1, ENC_NA);
16188 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_dls, tvb, offset, 1, ENC_NA);
16189 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_tdls, tvb, offset, 1, ENC_NA);
16190 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_conn_ibss, tvb, offset, 1, ENC_NA);
16192 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_fst_timeout, tvb, offset, 1, ENC_NA);
16196 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_sta_mac, tvb, offset, 6, ENC_NA);
16201 proto_item *rsn_pcs_count, *rsn_pcs_item, *rsn_sub_pcs_item;
16202 proto_tree *rsn_pcs_tree, *rsn_sub_pcs_tree;
16205 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16206 pcs_count = tvb_get_letohs(tvb, offset);
16209 if (offset + (pcs_count * 4) > tag_end)
16211 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
16212 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
16213 pcs_count = (tag_end - offset) / 4;
16216 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA);
16217 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
16218 for (ii = 0; ii < pcs_count; ii++)
16220 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN);
16221 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
16222 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
16224 /* Check if OUI is 00:0F:AC (ieee80211) */
16225 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
16227 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
16228 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(tvb_get_ntohl(tvb, offset)));
16230 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
16237 case TAG_DMG_LINK_MARGIN:
16241 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
16245 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA);
16247 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_mcs, tvb, offset, 1, ENC_NA);
16249 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_link_margin, tvb, offset, 1, ENC_NA);
16251 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA);
16253 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16257 case TAG_DMG_LINK_ADAPTION_ACK:
16261 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
16265 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA);
16267 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16271 case TAG_SWITCHING_STREAM:
16276 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 4", tag_len);
16280 offset += add_ff_band_id(tree, tvb, pinfo, 1);
16281 offset += add_ff_band_id(tree, tvb, pinfo, 1);
16282 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_non_qos, tvb, offset, 1, ENC_NA);
16284 param_num = tvb_get_letohs(tvb, offset);
16285 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_param_num, tvb, offset, 1, ENC_NA);
16287 while(param_num > 0)
16289 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_old_tid, tvb, offset, 1, ENC_NA);
16290 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_old_direction, tvb, offset, 1, ENC_NA);
16291 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_new_tid, tvb, offset, 1, ENC_NA);
16292 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_new_direction, tvb, offset, 1, ENC_NA);
16293 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_new_valid_id, tvb, offset, 1, ENC_NA);
16294 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_llt_type, tvb, offset, 1, ENC_NA);
16301 proto_tree_add_item(tree, hf_ieee80211_tag_data, tvb, offset + 1 + 1, tag_len, ENC_NA);
16302 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_data,
16303 "Dissector for 802.11 IE Tag"
16304 " (%s) code not implemented, Contact"
16305 " Wireshark developers if you want this supported", val_to_str_ext(tag_no,
16306 &tag_num_vals_ext, "(%d)"));
16307 proto_item_append_text(ti, ": Undecoded");
16310 if (offset < tag_end) {
16311 /* TODO: add Expert info to indicate there is unknown data ! but all tagged option don't yet return offset.
16312 For the moment, this code only remove Clang Warnings about not used offset... */
16315 return tag_len + 1 + 1;
16319 ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
16320 proto_tree *tree, int tagged_parameters_len, int ftype,
16321 association_sanity_check_t *association_sanity_check)
16324 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
16325 while (tagged_parameters_len > 0) {
16326 /* TODO make callers optionally specify the list of valid IE IDs? */
16327 if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype, NULL, 0, association_sanity_check)) == 0)
16329 if (next_len > tagged_parameters_len) {
16330 /* XXX - flag this as an error? */
16331 next_len = tagged_parameters_len;
16333 offset += next_len;
16334 tagged_parameters_len -= next_len;
16339 ieee_80211_do_association_sanity_check(packet_info *pinfo, association_sanity_check_t *sanity_check)
16341 /* Given a [re-]association request frame, consider it in its totality and
16342 add expert information as appropriate */
16344 if (sanity_check->association_has_mobility_domain_element) {
16345 /* This is an FT association, warn about any non-FT AKM suites */
16346 if (sanity_check->has_non_ft_akm_suite) {
16347 expert_add_info_format(pinfo, sanity_check->rsn_first_non_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
16348 "Non-FT AKM suite is prohibited for FT association request");
16351 /* This is a non-FT association, warn about any FT AKM suites */
16352 if (sanity_check->has_ft_akm_suite) {
16353 expert_add_info_format(pinfo, sanity_check->rsn_first_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
16354 "FT AKM suite is prohibited for non-FT association request");
16359 /* ************************************************************************* */
16360 /* Dissect 802.11 management frame */
16361 /* ************************************************************************* */
16363 dissect_ieee80211_mgt(guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
16366 proto_tree *mgt_tree;
16367 proto_tree *fixed_tree;
16368 proto_tree *tagged_tree;
16370 int tagged_parameter_tree_len;
16372 association_sanity_check_t association_sanity_check;
16373 memset(&association_sanity_check, 0, sizeof(association_sanity_check));
16375 ieee80211_tvb_invalid = FALSE;
16377 ti = proto_tree_add_item(tree, proto_wlan, tvb, 0, -1, ENC_NA);
16378 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
16380 switch (COMPOSE_FRAME_TYPE(fcf))
16383 case MGT_ASSOC_REQ:
16384 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 4);
16385 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
16386 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
16387 offset = 4; /* Size of fixed fields */
16389 tagged_parameter_tree_len =
16390 tvb_reported_length_remaining(tvb, offset);
16391 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16392 tagged_parameter_tree_len);
16393 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16394 tagged_parameter_tree_len, MGT_ASSOC_REQ, &association_sanity_check);
16395 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
16399 case MGT_ASSOC_RESP:
16400 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6);
16401 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
16402 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
16403 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
16404 offset = 6; /* Size of fixed fields */
16406 tagged_parameter_tree_len =
16407 tvb_reported_length_remaining(tvb, offset);
16408 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16409 tagged_parameter_tree_len);
16410 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16411 tagged_parameter_tree_len, MGT_ASSOC_RESP, NULL);
16415 case MGT_REASSOC_REQ:
16416 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 10);
16417 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
16418 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
16419 add_ff_current_ap_addr(fixed_tree, tvb, pinfo, 4);
16420 offset = 10; /* Size of fixed fields */
16422 tagged_parameter_tree_len =
16423 tvb_reported_length_remaining(tvb, offset);
16424 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16425 tagged_parameter_tree_len);
16426 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16427 tagged_parameter_tree_len, MGT_REASSOC_REQ, &association_sanity_check);
16428 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
16431 case MGT_REASSOC_RESP:
16432 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6);
16433 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
16434 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
16435 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
16436 offset = 6; /* Size of fixed fields */
16438 tagged_parameter_tree_len =
16439 tvb_reported_length_remaining(tvb, offset);
16440 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16441 tagged_parameter_tree_len);
16442 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16443 tagged_parameter_tree_len, MGT_REASSOC_RESP, NULL);
16447 case MGT_PROBE_REQ:
16449 tagged_parameter_tree_len =
16450 tvb_reported_length_remaining(tvb, offset);
16451 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16452 tagged_parameter_tree_len);
16453 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16454 tagged_parameter_tree_len, MGT_PROBE_REQ, NULL);
16457 case MGT_PROBE_RESP:
16459 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12);
16460 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
16461 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
16462 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
16463 offset = 12; /* Size of fixed fields */
16465 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16466 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
16467 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_PROBE_RESP, NULL);
16470 case MGT_MEASUREMENT_PILOT:
16472 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12);
16473 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
16474 offset += add_ff_measurement_pilot_int(fixed_tree, tvb, pinfo, offset);
16475 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
16476 offset += add_ff_cap_info(fixed_tree, tvb, pinfo, offset);
16477 offset += add_ff_country_str(fixed_tree, tvb, pinfo, offset);
16478 offset += add_ff_max_reg_pwr(fixed_tree, tvb, pinfo, offset);
16479 offset += add_ff_max_tx_pwr(fixed_tree, tvb, pinfo, offset);
16480 offset += add_ff_tx_pwr_used(fixed_tree, tvb, pinfo, offset);
16481 offset += add_ff_transceiver_noise_floor(fixed_tree, tvb, pinfo, offset);
16482 /* TODO DS Parameter Set ??? */
16484 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16485 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
16486 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_MEASUREMENT_PILOT, NULL);
16489 case MGT_BEACON: /* Dissect protocol payload fields */
16490 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12);
16491 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
16492 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
16493 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
16494 offset = 12; /* Size of fixed fields */
16496 tagged_parameter_tree_len =
16497 tvb_reported_length_remaining(tvb, offset);
16498 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16499 tagged_parameter_tree_len);
16500 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16501 tagged_parameter_tree_len, MGT_BEACON, NULL);
16508 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2);
16509 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
16510 offset = 2; /* Size of fixed fields */
16511 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16512 if (tagged_parameter_tree_len > 0) {
16513 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16514 tagged_parameter_tree_len);
16515 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16516 tagged_parameter_tree_len, MGT_DISASS, NULL);
16520 case MGT_AUTHENTICATION:
16521 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6);
16522 add_ff_auth_alg(fixed_tree, tvb, pinfo, 0);
16523 add_ff_auth_trans_seq(fixed_tree, tvb, pinfo, 2);
16524 add_ff_status_code(fixed_tree, tvb, pinfo, 4);
16525 offset = 6; /* Size of fixed fields */
16527 tagged_parameter_tree_len =
16528 tvb_reported_length_remaining(tvb, offset);
16529 if (tagged_parameter_tree_len > 0)
16531 tagged_tree = get_tagged_parameter_tree(mgt_tree,
16534 tagged_parameter_tree_len);
16535 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16536 tagged_parameter_tree_len, MGT_AUTHENTICATION, NULL);
16540 case MGT_DEAUTHENTICATION:
16541 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2);
16542 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
16543 offset = 2; /* Size of fixed fields */
16544 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16545 if (tagged_parameter_tree_len > 0) {
16546 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16547 tagged_parameter_tree_len);
16548 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16549 tagged_parameter_tree_len, MGT_DEAUTHENTICATION, NULL);
16555 proto_item *lcl_fixed_hdr;
16556 proto_tree *lcl_fixed_tree;
16557 lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
16558 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0);
16560 proto_item_set_len(lcl_fixed_hdr, offset);
16561 if (ieee80211_tvb_invalid)
16562 break; /* Buffer not available for further processing */
16563 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16564 if (tagged_parameter_tree_len > 0)
16566 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16567 tagged_parameter_tree_len);
16568 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16569 tagged_parameter_tree_len, MGT_ACTION, NULL);
16573 case MGT_ACTION_NO_ACK:
16575 proto_item *lcl_fixed_hdr;
16576 proto_tree *lcl_fixed_tree;
16577 lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
16579 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0);
16581 proto_item_set_len(lcl_fixed_hdr, offset);
16582 if (ieee80211_tvb_invalid)
16583 break; /* Buffer not available for further processing */
16584 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
16585 if (tagged_parameter_tree_len > 0)
16587 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
16588 tagged_parameter_tree_len);
16589 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
16590 tagged_parameter_tree_len, MGT_ACTION_NO_ACK, NULL);
16594 case MGT_ARUBA_WLAN:
16596 proto_tree *aruba_tree;
16598 type = tvb_get_ntohs(tvb, offset);
16600 aruba_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, NULL, "Aruba Management");
16602 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba, tvb, offset, 2, ENC_BIG_ENDIAN);
16605 case 0x0003: /* MTU Size */
16606 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_mtu, tvb, offset, 2, ENC_BIG_ENDIAN);
16608 case 0x0005: /* HeartBeat Sequence */
16609 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_hb_seq, tvb, offset, 8, ENC_BIG_ENDIAN);
16618 set_src_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, const char *type)
16620 address ether_addr;
16622 set_address_tvb(ðer_addr, AT_ETHER, 6, tvb, offset);
16624 col_add_fstr(pinfo->cinfo, COL_RES_DL_SRC, "%s (%s)",
16625 address_with_resolution_to_str(wmem_packet_scope(), ðer_addr), type);
16629 set_dst_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, const char *type)
16631 address ether_addr;
16633 set_address_tvb(ðer_addr, AT_ETHER, 6, tvb, offset);
16635 col_add_fstr(pinfo->cinfo, COL_RES_DL_DST, "%s (%s)",
16636 address_with_resolution_to_str(wmem_packet_scope(), ðer_addr), type);
16640 crc32_802_tvb_padded(tvbuff_t *tvb, guint hdr_len, guint hdr_size, guint len)
16644 c_crc = crc32_ccitt_tvb(tvb, hdr_len);
16645 c_crc = crc32_ccitt_tvb_offset_seed(tvb, hdr_size, len, ~c_crc);
16656 /* ************************************************************************* */
16657 /* Dissect 802.11 frame */
16658 /* ************************************************************************* */
16660 * The 802.11n specification makes some fairly significant changes to the
16661 * layout of the MAC header. The first two bits of the MAC header are the
16662 * protocol version. You'd think that the 802.11 committee would have
16663 * bumped the version to indicate a different MAC layout, but NOOOO -- we
16664 * have to go digging for bits in various locations instead.
16667 dissect_ieee80211_common(tvbuff_t *tvb, packet_info *pinfo,
16668 proto_tree *tree, guint32 option_flags,
16669 struct ieee_802_11_phdr *phdr)
16671 guint16 fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
16673 guint16 seq_control;
16674 guint32 seq_number, frag_number;
16675 gboolean more_frags;
16676 proto_item *ti = NULL;
16677 proto_item *cw_item = NULL;
16678 proto_item *hidden_item;
16679 proto_tree *cw_tree = NULL;
16680 guint16 hdr_len, ohdr_len;
16681 guint16 htc_len = 0;
16683 gint len, reported_len, ivlen;
16684 gint sta_addr_offset = 0;
16685 const gchar *station_name;
16686 gboolean is_amsdu = 0;
16687 gboolean save_fragmented;
16689 guint8 octet1, octet2;
16690 char out_buff[SHORT_STR];
16693 const char *addr1_str = NULL;
16694 int addr1_hf = -1, addr1_hf_resolved = -1;
16696 const gchar *fts_str;
16697 gchar flag_str[] = "opmPRMFTC";
16699 guint16 qosoff = 0;
16700 guint16 qos_control = 0;
16701 gint meshctl_len = 0;
16703 guint16 meshoff = 0;
16704 static wlan_hdr_t whdrs[4];
16705 gboolean retransmitted;
16706 gboolean isDMG = (phdr->has_frequency ?
16707 IS_80211AD(phdr->frequency) :
16710 encap_t encap_type;
16711 proto_tree *hdr_tree = NULL;
16712 tvbuff_t *next_tvb = NULL;
16715 AIRPDCAP_KEY_ITEM used_key;
16717 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY, &isDMG);
16721 col_set_str(pinfo->cinfo, COL_PROTOCOL, "802.11");
16722 col_clear(pinfo->cinfo, COL_INFO);
16724 fcf = FETCH_FCF(0);
16725 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf);
16726 whdr->type = frame_type_subtype;
16727 if (frame_type_subtype == CTRL_CONTROL_WRAPPER)
16728 ctrl_fcf = FETCH_FCF(10);
16732 fts_str = val_to_str_ext_const(frame_type_subtype, &frame_type_subtype_vals_ext,
16733 "Unrecognized (Reserved frame)");
16734 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
16737 # define FROM_TO_DS 3
16738 flags = FCF_FLAGS(fcf);
16739 more_frags = HAVE_FRAGMENTS(flags);
16741 for (ii = 0; ii < 8; ii++) {
16742 if (! (flags & 0x80 >> ii)) {
16743 flag_str[ii] = '.';
16747 switch (FCF_FRAME_TYPE (fcf)) {
16750 hdr_len = MGT_FRAME_HDR_LEN;
16751 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))) {
16753 * Management frames with the Order bit set have an HT Control field;
16754 * see 8.2.4.1.10 "Order field". If they're not HT frames, they should
16755 * never have the Order bit set.
16762 case CONTROL_FRAME:
16763 if (frame_type_subtype == CTRL_CONTROL_WRAPPER) {
16770 switch (COMPOSE_FRAME_TYPE (cw_fcf)) {
16772 case CTRL_BEAMFORM_RPT_POLL:
16776 case CTRL_VHT_NDP_ANNC:
16778 /* TODO: for now we only consider a single STA, add support for more */
16783 case CTRL_ACKNOWLEDGEMENT:
16793 case CTRL_GRANT_ACK:
16806 case CTRL_SSW_FEEDBACK:
16814 case CTRL_CFP_ENDACK:
16815 case CTRL_BLOCK_ACK_REQ:
16816 case CTRL_BLOCK_ACK:
16821 hdr_len += 4; /* XXX */
16827 hdr_len = (FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T4) ? DATA_LONG_HDR_LEN : DATA_SHORT_HDR_LEN;
16829 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS) && DATA_FRAME_IS_QOS(frame_type_subtype)) {
16832 hdr_len += 2; /* Include the QoS field in the header length */
16834 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))) {
16836 * QoS data frames with the Order bit set have an HT Control field;
16837 * see 8.2.4.1.10 "Order field". If they're not HT frames, they
16838 * should never have the Order bit set.
16845 * Does it look as if we have a mesh header?
16846 * Look at the Mesh Control subfield of the QoS field and at the
16847 * purported mesh flag fields.
16849 qos_control = tvb_get_letohs(tvb, qosoff);
16850 if (tvb_bytes_exist(tvb, hdr_len, 1)) {
16852 mesh_flags = tvb_get_guint8(tvb, meshoff);
16853 if (has_mesh_control(fcf, qos_control, mesh_flags)) {
16854 /* Yes, add the length of that in as well. */
16855 meshctl_len = find_mesh_control_length(mesh_flags);
16856 hdr_len += meshctl_len;
16862 case EXTENSION_FRAME:
16867 hdr_len = 4; /* XXX */
16872 * Some portions of this code calculate offsets relative to the end of the
16873 * header. But when the header has been padded to align the data this must
16874 * be done relative to true header size, not the padded/aligned value. To
16875 * simplify this work we stash the original header size in ohdr_len instead
16876 * of recalculating it every time we need it.
16878 ohdr_len = hdr_len;
16879 if (phdr->datapad) {
16881 * Add in Atheros padding between the 802.11 header and body.
16883 * XXX - would the mesh header be part of the header or the body
16884 * from the point of view of the Atheros adapters that insert
16885 * the padding, assuming they even recognize a mesh header?
16887 hdr_len = roundup2(hdr_len, 4);
16890 /* Add the FC and duration/id to the current tree */
16891 ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, hdr_len,
16892 "IEEE 802.11 %s", fts_str);
16893 hdr_tree = proto_item_add_subtree(ti, ett_80211);
16895 dissect_frame_control(hdr_tree, tvb, option_flags, 0, pinfo);
16896 dissect_durid(hdr_tree, tvb, frame_type_subtype, 2);
16898 switch (phdr->fcs_len)
16900 case 0: /* Definitely has no FCS */
16904 case 4: /* Definitely has an FCS */
16908 case -2: /* Data frames have no FCS, other frames may have an FCS */
16909 /* XXX: -2 currently used only in wiretap/netmon.c */
16910 if (FCF_FRAME_TYPE (fcf) == DATA_FRAME)
16912 else /* Management, Control, Extension */
16913 has_fcs = wlan_check_fcs;
16916 default: /* Don't know - use "wlan_check_fcs" */
16917 has_fcs = wlan_check_fcs;
16922 * Decode the part of the frame header that isn't the same for all
16929 switch (FCF_FRAME_TYPE (fcf))
16934 * All management frame types have the same header.
16936 set_address_tvb(&pinfo->dl_src, wlan_address_type, 6, tvb, 10);
16937 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
16938 set_address_tvb(&pinfo->dl_dst, wlan_address_type, 6, tvb, 4);
16939 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
16942 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, 16);
16943 copy_address_shallow(&whdr->src, &pinfo->dl_src);
16944 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
16946 seq_control = tvb_get_letohs(tvb, 22);
16947 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control);
16948 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control);
16950 col_append_fstr(pinfo->cinfo, COL_INFO,
16951 ", SN=%d", seq_number);
16953 col_append_fstr(pinfo->cinfo, COL_INFO,
16954 ", FN=%d", frag_number);
16958 const gchar *ra_da_name, *ta_sa_name, *bssid_name;
16960 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
16961 ra_da_name = tvb_get_ether_name(tvb, 4);
16962 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ra_resolved, tvb, 4, 6, ra_da_name);
16963 PROTO_ITEM_SET_HIDDEN(hidden_item);
16964 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, ENC_NA);
16965 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_da_resolved, tvb, 4, 6, ra_da_name);
16966 PROTO_ITEM_SET_HIDDEN(hidden_item);
16967 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
16968 ta_sa_name = tvb_get_ether_name(tvb, 10);
16969 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, 10, 6, ta_sa_name);
16970 PROTO_ITEM_SET_HIDDEN(hidden_item);
16971 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, ENC_NA);
16972 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_sa_resolved, tvb, 10, 6, ta_sa_name);
16973 PROTO_ITEM_SET_HIDDEN(hidden_item);
16974 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, 16, 6, ENC_NA);
16975 bssid_name = tvb_get_ether_name(tvb, 16);
16976 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_bssid_resolved, tvb, 16, 6, bssid_name);
16977 PROTO_ITEM_SET_HIDDEN(hidden_item);
16979 /* FIXME: With mgmt frames FROM_TO_DS is always 0, perhaps compare address to bssid instead? */
16980 if ((flags & FROM_TO_DS) == FLAG_FROM_DS) { /* Receiver address */
16981 sta_addr_offset = 4;
16982 } else if ((flags & FROM_TO_DS) == FLAG_TO_DS) { /* Transmitter address */
16983 sta_addr_offset = 10;
16985 if (sta_addr_offset > 0) {
16986 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_staa, tvb, sta_addr_offset, 6, ENC_NA);
16987 station_name = tvb_get_ether_name(tvb, sta_addr_offset);
16988 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_staa_resolved, tvb, sta_addr_offset, 6, station_name);
16989 PROTO_ITEM_SET_HIDDEN(hidden_item);
16991 /* add items for wlan.addr filter */
16992 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
16993 PROTO_ITEM_SET_HIDDEN(hidden_item);
16994 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 4, 6, ra_da_name);
16995 PROTO_ITEM_SET_HIDDEN(hidden_item);
16996 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
16997 PROTO_ITEM_SET_HIDDEN(hidden_item);
16998 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 10, 6, ta_sa_name);
16999 PROTO_ITEM_SET_HIDDEN(hidden_item);
17000 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
17001 PROTO_ITEM_SET_HIDDEN(hidden_item);
17002 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 16, 6, bssid_name);
17003 PROTO_ITEM_SET_HIDDEN(hidden_item);
17004 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN);
17005 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN);
17009 case CONTROL_FRAME:
17012 * Control Wrapper frames insert themselves between address 1
17013 * and address 2 in a normal control frame. Process address 1
17014 * first, then handle the rest of the frame in dissect_control.
17016 if (frame_type_subtype == CTRL_CONTROL_WRAPPER) {
17017 offset = 10; /* FC + D/ID + Address 1 + CFC + HTC */
17018 ctrl_fcf = FETCH_FCF(10);
17019 ctrl_type_subtype = COMPOSE_FRAME_TYPE(ctrl_fcf);
17021 offset = 10; /* FC + D/ID + Address 1 */
17022 ctrl_type_subtype = frame_type_subtype;
17024 /* Added to disallow DMG STA to transfer packets of certain forbidden types. */
17025 switch (ctrl_type_subtype)
17029 case CTRL_CFP_ENDACK:
17030 if(isDMG == TRUE) {
17031 expert_add_info_format(pinfo, hdr_tree, &ei_ieee80211_dmg_subtype,
17032 "DMG STA shouldn't transmit control frame of type contention-free period end+ack");
17039 switch (ctrl_type_subtype)
17042 addr1_str = "BSSID";
17043 addr1_hf = hf_ieee80211_addr_bssid;
17044 addr1_hf_resolved = hf_ieee80211_addr_bssid_resolved;
17047 case CTRL_BEAMFORM_RPT_POLL:
17048 case CTRL_VHT_NDP_ANNC:
17055 case CTRL_GRANT_ACK:
17057 case CTRL_SSW_FEEDBACK:
17060 case CTRL_ACKNOWLEDGEMENT:
17062 case CTRL_CFP_ENDACK:
17063 case CTRL_BLOCK_ACK_REQ:
17064 case CTRL_BLOCK_ACK:
17066 addr1_hf = hf_ieee80211_addr_ra;
17067 addr1_hf_resolved = hf_ieee80211_addr_ra_resolved;
17073 if (!addr1_str) /* XXX - Should we throw some sort of error? */
17076 /* Add address 1 */
17077 set_dst_addr_cols(pinfo, tvb, 4, addr1_str);
17079 const gchar *ether_name = tvb_get_ether_name(tvb, 4);
17080 proto_tree_add_item(hdr_tree, addr1_hf, tvb, 4, 6, ENC_NA);
17081 hidden_item = proto_tree_add_string(hdr_tree, addr1_hf_resolved, tvb, 4, 6, ether_name);
17082 PROTO_ITEM_SET_HIDDEN(hidden_item);
17083 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
17084 PROTO_ITEM_SET_HIDDEN(hidden_item);
17085 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 4, 6, ether_name);
17086 PROTO_ITEM_SET_HIDDEN(hidden_item);
17090 * Start shoving in other fields if needed.
17092 if (frame_type_subtype == CTRL_CONTROL_WRAPPER) {
17095 cw_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
17096 ett_cntrl_wrapper_fc, NULL, "Contained Frame Control");
17097 dissect_frame_control(cw_tree, tvb, 0, offset, pinfo);
17098 dissect_ht_control(hdr_tree, tvb, offset + 2);
17100 hdr_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
17101 ett_cntrl_wrapper_fc, &cw_item, "Carried Frame");
17103 expert_add_info_format(pinfo, cw_item, &ei_ieee80211_dmg_subtype,
17104 "DMG STA shouldn't transmit Control Wrapper frame");
17109 switch (ctrl_type_subtype)
17112 case CTRL_CFP_ENDACK:
17114 set_src_addr_cols(pinfo, tvb, offset, "BSSID");
17117 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17118 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17119 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17120 PROTO_ITEM_SET_HIDDEN(hidden_item);
17121 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17122 PROTO_ITEM_SET_HIDDEN(hidden_item);
17123 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17124 PROTO_ITEM_SET_HIDDEN(hidden_item);
17133 set_src_addr_cols(pinfo, tvb, offset, "TA");
17135 set_src_addr_cols(pinfo, tvb, offset, "BSSID");
17138 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17140 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17141 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17142 PROTO_ITEM_SET_HIDDEN(hidden_item);
17144 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, offset, 6, ENC_NA);
17145 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_bssid_resolved, tvb, offset, 6, ether_name);
17146 PROTO_ITEM_SET_HIDDEN(hidden_item);
17148 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17149 PROTO_ITEM_SET_HIDDEN(hidden_item);
17150 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17151 PROTO_ITEM_SET_HIDDEN(hidden_item);
17157 case CTRL_BEAMFORM_RPT_POLL:
17159 set_src_addr_cols(pinfo, tvb, offset, "TA");
17162 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17164 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17165 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17166 PROTO_ITEM_SET_HIDDEN(hidden_item);
17167 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17168 PROTO_ITEM_SET_HIDDEN(hidden_item);
17169 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17170 PROTO_ITEM_SET_HIDDEN(hidden_item);
17173 proto_tree_add_item(hdr_tree, hf_ieee80211_beamform_feedback_seg_retrans_bitmap, tvb, offset, 1, ENC_NA);
17178 case CTRL_VHT_NDP_ANNC:
17180 set_src_addr_cols(pinfo, tvb, offset, "TA");
17184 guint8 len_fcs = 0;
17185 proto_tree *dialog_token_tree;
17186 proto_item *dialog_token_item;
17187 proto_tree *sta_info_tree;
17188 proto_item *sta_info_item;
17189 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17191 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17192 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17193 PROTO_ITEM_SET_HIDDEN(hidden_item);
17194 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17195 PROTO_ITEM_SET_HIDDEN(hidden_item);
17196 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17197 PROTO_ITEM_SET_HIDDEN(hidden_item);
17200 dialog_token_item = proto_tree_add_item(hdr_tree, hf_ieee80211_vht_ndp_annc_token,
17201 tvb, offset, 1, ENC_NA);
17202 dialog_token_tree = proto_item_add_subtree(dialog_token_item, ett_vht_ndp_annc_token_tree);
17203 proto_tree_add_item(dialog_token_tree, hf_ieee80211_vht_ndp_annc_token_number,
17204 tvb, offset, 1, ENC_NA);
17205 proto_tree_add_item(dialog_token_tree, hf_ieee80211_vht_ndp_annc_token_reserved,
17206 tvb, offset, 1, ENC_NA);
17209 /* Check if there is FCS in the packet */
17213 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
17214 sta_info_item = proto_tree_add_item(hdr_tree, hf_ieee80211_vht_ndp_annc_sta_info,
17215 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17216 sta_info_tree = proto_item_add_subtree(sta_info_item, ett_vht_ndp_annc_sta_info_tree);
17217 proto_tree_add_item(sta_info_tree, hf_ieee80211_vht_ndp_annc_sta_info_aid12,
17218 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17219 proto_tree_add_item(sta_info_tree, hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
17220 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17222 sta_info = tvb_get_letohs(tvb, offset);
17224 if (sta_info & 0x1000)
17225 proto_tree_add_uint(sta_info_tree,
17226 hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
17227 tvb, offset, 2, sta_info);
17229 proto_tree_add_item(sta_info_tree, hf_ieee80211_vht_ndp_annc_sta_info_reserved,
17230 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17237 case CTRL_GRANT_ACK:
17239 case CTRL_SSW_FEEDBACK:
17247 set_src_addr_cols(pinfo, tvb, offset, "TA");
17250 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17251 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17252 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17253 PROTO_ITEM_SET_HIDDEN(hidden_item);
17254 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17255 PROTO_ITEM_SET_HIDDEN(hidden_item);
17256 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17257 PROTO_ITEM_SET_HIDDEN(hidden_item);
17263 case CTRL_CONTROL_WRAPPER:
17265 /* XXX - We shouldn't see this. Should we throw an error? */
17269 case CTRL_BLOCK_ACK_REQ:
17271 set_src_addr_cols(pinfo, tvb, offset, "TA");
17275 guint16 bar_control;
17276 guint8 block_ack_type;
17277 proto_item *bar_parent_item;
17278 proto_tree *bar_sub_tree;
17279 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17281 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17282 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17283 PROTO_ITEM_SET_HIDDEN(hidden_item);
17284 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17285 PROTO_ITEM_SET_HIDDEN(hidden_item);
17286 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17287 PROTO_ITEM_SET_HIDDEN(hidden_item);
17290 bar_control = tvb_get_letohs(tvb, offset);
17291 /* According to the 802.11ad standard (28/12/12) there is need to find the
17292 * GCR subfield which isn't described, thus the black_ack_type calculations
17293 * should be changed.
17295 block_ack_type = (bar_control & 0x0006) >> 1;
17296 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_request_type, tvb,
17297 offset, 2, ENC_LITTLE_ENDIAN);
17298 bar_parent_item = proto_tree_add_item(hdr_tree,
17299 hf_ieee80211_block_ack_request_control, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17300 bar_sub_tree = proto_item_add_subtree(bar_parent_item,
17302 proto_tree_add_item(bar_sub_tree,
17303 hf_ieee80211_block_ack_control_ack_policy, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17304 proto_tree_add_item(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
17305 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17306 proto_tree_add_item(bar_sub_tree,
17307 hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 2,
17308 ENC_LITTLE_ENDIAN);
17309 proto_tree_add_item(bar_sub_tree, hf_ieee80211_block_ack_control_reserved,
17310 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17312 switch (block_ack_type)
17314 case 0: /*Basic BlockAckReq */
17316 if(isDMG == TRUE) {
17317 expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
17318 "DMG STA shouldn't transmit BlockAckReq frame with Basic BlockAckReq");
17321 proto_tree_add_item(bar_sub_tree,
17322 hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17325 /*offset +=*/ add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17328 case 1: /* Extended Compressesd BlockAckReq */
17329 if(isDMG == FALSE) {
17330 expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
17331 "Non-DMG STA shouldn't transmit BlockAckReq frame with Extended Compressed BlockAckReq");
17334 case 2: /* Compressed BlockAckReq */
17336 proto_tree_add_item(bar_sub_tree,
17337 hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17340 /*offset +=*/ add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17343 case 3: /* Multi-TID BlockAckReq */
17347 proto_tree *bar_mtid_tree, *bar_mtid_sub_tree;
17349 if(isDMG == TRUE) {
17350 expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
17351 "DMG STA shouldn't transmit BlockAckReq frame with Basic BlockAckReq");
17355 tid_count = ((bar_control & 0xF000) >> 12) + 1;
17356 proto_tree_add_uint(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid_info, tvb, offset, 2, tid_count);
17359 bar_mtid_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, tid_count*4, ett_block_ack, NULL, "Per TID Info");
17360 for (iii = 0; iii < tid_count; iii++) {
17361 bar_parent_item = proto_tree_add_uint(bar_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, iii);
17362 bar_mtid_sub_tree = proto_item_add_subtree(bar_parent_item, ett_block_ack);
17364 proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17365 proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17368 offset += add_ff_block_ack_ssc(bar_mtid_sub_tree, tvb, pinfo, offset);
17377 case CTRL_BLOCK_ACK:
17379 set_src_addr_cols(pinfo, tvb, offset, "TA");
17383 guint16 ba_control;
17384 guint8 block_ack_type;
17385 proto_item *ba_parent_item;
17386 proto_tree *ba_sub_tree;
17387 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17389 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17390 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17391 PROTO_ITEM_SET_HIDDEN(hidden_item);
17392 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17393 PROTO_ITEM_SET_HIDDEN(hidden_item);
17394 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17395 PROTO_ITEM_SET_HIDDEN(hidden_item);
17398 ba_control = tvb_get_letohs(tvb, offset);
17399 block_ack_type = (ba_control & 0x0006) >> 1;
17400 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17401 ba_parent_item = proto_tree_add_item(hdr_tree,
17402 hf_ieee80211_block_ack_control, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17403 ba_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
17404 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_ack_policy,
17405 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17406 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
17407 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17408 proto_tree_add_item(ba_sub_tree,
17409 hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 2,
17410 ENC_LITTLE_ENDIAN);
17411 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_reserved, tvb,
17412 offset, 2, ENC_LITTLE_ENDIAN);
17414 switch (block_ack_type)
17416 case 0: /*Basic BlockAck */
17418 proto_tree_add_item(ba_sub_tree,
17419 hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17422 offset += add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17423 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 128, ENC_NA);
17427 /* Added to support Extended Compressed BlockAck RBUFCAP subfield.*/
17428 case 1: /* Extended Compressed BlockAck */
17433 proto_item *ba_bitmap_item;
17434 proto_tree *ba_bitmap_tree;
17435 if(isDMG == FALSE) {
17436 expert_add_info_format(pinfo, ba_sub_tree, &ei_ieee80211_dmg_subtype,
17437 "Non-DMG STA shouldn't transmit BlockAck frame with Extended Compressed BlockAck");
17440 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17443 ssn = tvb_get_letohs(tvb, offset);
17445 offset += add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17446 bmap = tvb_get_letoh64(tvb, offset);
17447 ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
17448 ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap);
17449 for (f = 0; f < 64; f++) {
17450 if (bmap & (G_GUINT64_CONSTANT(1) << f))
17452 proto_tree_add_uint(ba_bitmap_tree, hf_ieee80211_block_ack_bitmap_missing_frame,
17453 tvb, offset + (f/8), 1, ssn + f);
17456 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_RBUFCAP, tvb, offset, 1, ENC_LITTLE_ENDIAN);
17460 case 2: /* Compressed BlockAck */
17465 proto_item *ba_bitmap_item;
17466 proto_tree *ba_bitmap_tree;
17468 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17471 ssn = tvb_get_letohs(tvb, offset);
17473 offset += add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17474 bmap = tvb_get_letoh64(tvb, offset);
17475 ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
17476 ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap);
17477 for (f = 0; f < 64; f++) {
17478 if (bmap & (G_GUINT64_CONSTANT(1) << f))
17480 proto_tree_add_uint_format_value(ba_bitmap_tree, hf_ieee80211_block_ack_bitmap_missing_frame,
17481 tvb, offset + (f/8), 1, ssn + f, "%u", (ssn + f) & 0x0fff);
17486 case 3: /* Multi-TID BlockAck */
17490 proto_tree *ba_mtid_tree, *ba_mtid_sub_tree;
17492 tid_count = ((ba_control & 0xF000) >> 12) + 1;
17493 proto_tree_add_uint(ba_sub_tree,
17494 hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset, 2, tid_count);
17497 ba_mtid_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, tid_count*4, ett_block_ack, NULL, "Per TID Info");
17498 for (iii = 0; iii < tid_count; iii++) {
17499 ba_parent_item = proto_tree_add_uint(ba_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, iii);
17500 ba_mtid_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
17502 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17503 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17506 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
17507 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
17518 * 802.11ad : Used for extension types.
17520 switch (ctrl_type_subtype) {
17522 proto_tree_add_item(hdr_tree, hf_ieee80211_cf_response_offset,
17523 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17528 case CTRL_GRANT_ACK:
17531 if(ctrl_type_subtype != CTRL_GRANT_ACK) {
17532 offset += add_ff_dynamic_allocation(hdr_tree, tvb, pinfo, offset);
17533 } else { /* CTRL_GRANT_ACK have 5 octets that are reserved*/
17534 proto_tree_add_item(hdr_tree, hf_ieee80211_grant_ack_reserved, tvb, offset, 5, ENC_NA);
17537 isGrant = ((ctrl_type_subtype==CTRL_GRANT)||(ctrl_type_subtype==CTRL_GRANT_ACK));
17538 add_ff_beamforming_ctrl(hdr_tree, tvb, pinfo, offset, isGrant);
17543 guint32 sector_sweep;
17545 sector_sweep = tvb_get_letoh24(tvb, offset);
17546 offset += add_ff_sector_sweep(hdr_tree, tvb, pinfo, offset);
17547 /* if Sector Sweep Direction = Responder, use SW Feedback field format when not transmitted as part of an ISS */
17548 if(sector_sweep & 0x00001) {
17549 add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
17551 add_ff_sector_sweep_feedback_from_iss(hdr_tree, tvb, pinfo, offset);
17557 case CTRL_SSW_FEEDBACK: {
17558 offset += add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
17559 offset += add_ff_BRP_request(hdr_tree, tvb, pinfo, offset);
17560 add_ff_beamformed_link(hdr_tree, tvb, pinfo, offset);
17564 case CTRL_DMG_DTS: {
17565 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_sa, tvb, offset, 6, ENC_NA);
17567 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_da, tvb, offset, 6, ENC_NA);
17579 guint32 ra_offset, da_offset, sa_offset, ta_offset, bssid_offset;
17580 addr_type = FCF_ADDR_SELECTOR(fcf);
17582 /* In order to show src/dst address we must always do the following */
17619 /* Should never happen? */
17630 set_address_tvb(&pinfo->dl_src, wlan_address_type, 6, tvb, sa_offset);
17631 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
17632 set_address_tvb(&pinfo->dl_dst, wlan_address_type, 6, tvb, da_offset);
17633 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
17636 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, bssid_offset);
17638 copy_address_shallow(&whdr->src, &pinfo->dl_src);
17639 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
17641 seq_control = tvb_get_letohs(tvb, 22);
17642 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control);
17643 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control);
17645 col_append_fstr(pinfo->cinfo, COL_INFO,
17646 ", SN=%d, FN=%d", seq_number, frag_number);
17648 /* Now if we have a tree we start adding stuff */
17651 const gchar *ra_name, *ta_name, *sa_name, *da_name, *bssid_name = NULL;
17659 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ra, tvb, ra_offset, 6, ENC_NA);
17660 ra_name = tvb_get_ether_name(tvb, ra_offset);
17661 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ra_resolved, tvb, ra_offset, 6, ra_name);
17662 PROTO_ITEM_SET_HIDDEN(hidden_item);
17664 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_da, tvb, da_offset, 6, ENC_NA);
17665 da_name = tvb_get_ether_name(tvb, da_offset);
17666 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_da_resolved, tvb, da_offset, 6, da_name);
17667 PROTO_ITEM_SET_HIDDEN(hidden_item);
17669 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, ta_offset, 6, ENC_NA);
17670 ta_name = tvb_get_ether_name(tvb, ta_offset);
17671 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, ta_offset, 6, ta_name);
17672 PROTO_ITEM_SET_HIDDEN(hidden_item);
17674 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_sa, tvb, sa_offset, 6, ENC_NA);
17675 sa_name = tvb_get_ether_name(tvb, sa_offset);
17676 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_sa_resolved, tvb, sa_offset, 6, sa_name);
17677 PROTO_ITEM_SET_HIDDEN(hidden_item);
17679 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, bssid_offset, 6, ENC_NA);
17680 bssid_name = tvb_get_ether_name(tvb, bssid_offset);
17681 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_bssid_resolved, tvb, bssid_offset, 6, bssid_name);
17682 PROTO_ITEM_SET_HIDDEN(hidden_item);
17684 if ((flags & FROM_TO_DS) == FLAG_FROM_DS) { /* Receiver address */
17685 sta_addr_offset = ra_offset;
17686 } else if ((flags & FROM_TO_DS) == FLAG_TO_DS) { /* Transmitter address */
17687 sta_addr_offset = ta_offset;
17689 if (sta_addr_offset > 0) {
17690 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_staa, tvb, sta_addr_offset, 6, ENC_NA);
17691 station_name = tvb_get_ether_name(tvb, sta_addr_offset);
17692 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_staa_resolved, tvb, sta_addr_offset, 6, station_name);
17693 PROTO_ITEM_SET_HIDDEN(hidden_item);
17695 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN);
17696 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN);
17698 /* add items for wlan.addr filter */
17699 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, ra_offset, 6, ENC_NA);
17700 PROTO_ITEM_SET_HIDDEN(hidden_item);
17701 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, ra_offset, 6, ra_name);
17702 PROTO_ITEM_SET_HIDDEN(hidden_item);
17703 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, ta_offset, 6, ENC_NA);
17704 PROTO_ITEM_SET_HIDDEN(hidden_item);
17705 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, ta_offset, 6, ta_name);
17706 PROTO_ITEM_SET_HIDDEN(hidden_item);
17707 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, sa_offset, 6, ENC_NA);
17708 PROTO_ITEM_SET_HIDDEN(hidden_item);
17709 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, sa_offset, 6, sa_name);
17710 PROTO_ITEM_SET_HIDDEN(hidden_item);
17711 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, da_offset, 6, ENC_NA);
17712 PROTO_ITEM_SET_HIDDEN(hidden_item);
17713 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, da_offset, 6, da_name);
17714 PROTO_ITEM_SET_HIDDEN(hidden_item);
17715 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, bssid_offset, 6, ENC_NA);
17716 PROTO_ITEM_SET_HIDDEN(hidden_item);
17717 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, bssid_offset, 6, bssid_name);
17718 PROTO_ITEM_SET_HIDDEN(hidden_item);
17725 case EXTENSION_FRAME: {
17726 switch (frame_type_subtype) {
17727 case EXTENSION_DMG_BEACON: {
17728 set_dst_addr_cols(pinfo, tvb, 4, "BSSID");
17730 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, 4, 6, ENC_NA);
17731 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
17732 PROTO_ITEM_SET_HIDDEN(hidden_item);
17740 len = tvb_captured_length_remaining(tvb, hdr_len);
17741 reported_len = tvb_reported_length_remaining(tvb, hdr_len);
17746 * Well, this packet should, in theory, have an FCS.
17747 * Do we have the entire packet, and does it have enough data for
17750 if (reported_len < 4)
17753 * The packet is claimed not to even have enough data for a 4-byte
17755 * Pretend it doesn't have an FCS.
17759 else if (len < reported_len)
17762 * The packet is claimed to have enough data for a 4-byte FCS, but
17763 * we didn't capture all of the packet.
17764 * Slice off the 4-byte FCS from the reported length, and trim the
17765 * captured length so it's no more than the reported length; that
17766 * will slice off what of the FCS, if any, is in the captured
17770 if (len > reported_len)
17771 len = reported_len;
17776 * We have the entire packet, and it includes a 4-byte FCS.
17777 * Slice it off, and put it into the tree.
17781 if (wlan_check_checksum)
17783 guint32 sent_fcs = tvb_get_letohl(tvb, hdr_len + len);
17787 fcs = crc32_802_tvb_padded(tvb, ohdr_len, hdr_len, len);
17789 fcs = crc32_ccitt_tvb(tvb, hdr_len + len);
17790 if (fcs != sent_fcs) {
17794 proto_tree_add_checksum(hdr_tree, tvb, hdr_len + len, hf_ieee80211_fcs, hf_ieee80211_fcs_status, &ei_ieee80211_fcs, pinfo, fcs, ENC_LITTLE_ENDIAN, PROTO_CHECKSUM_VERIFY);
17796 proto_tree_add_checksum(hdr_tree, tvb, hdr_len + len, hf_ieee80211_fcs, hf_ieee80211_fcs_status, &ei_ieee80211_fcs, pinfo, 0, ENC_LITTLE_ENDIAN, PROTO_CHECKSUM_NO_FLAGS);
17802 flag_str[8] = '\0';
17805 proto_item_append_text(ti, ", Flags: %s", flag_str);
17806 col_append_fstr(pinfo->cinfo, COL_INFO, ", Flags=%s", flag_str);
17810 * Only management and data frames have a body, so we don't have
17811 * anything more to do for other types of frames.
17813 switch (FCF_FRAME_TYPE (fcf))
17817 if (htc_len == 4) {
17818 dissect_ht_control(hdr_tree, tvb, ohdr_len - 4);
17823 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS) && tree && DATA_FRAME_IS_QOS(frame_type_subtype))
17825 proto_item *qos_fields, *qos_ti;
17826 proto_tree *qos_tree;
17829 guint16 qos_field_content;
17831 qos_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_qos, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17832 qos_tree = proto_item_add_subtree(qos_fields, ett_qos_parameters);
17834 qos_eosp = QOS_EOSP(qos_control);
17835 qos_field_content = QOS_FIELD_CONTENT(qos_control);
17837 proto_tree_add_item(qos_tree, hf_ieee80211_qos_tid, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17839 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_priority, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17840 PROTO_ITEM_SET_GENERATED(qos_ti);
17842 if (FLAGS_DS_STATUS(flags) == (FLAG_FROM_DS|FLAG_TO_DS)) {
17844 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17846 if (flags & FLAG_TO_DS) {
17847 proto_tree_add_item(qos_tree, hf_ieee80211_qos_bit4, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17849 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17853 proto_tree_add_item(qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17855 if (flags & FLAG_FROM_DS) {
17856 if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
17857 proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17858 is_amsdu = QOS_AMSDU_PRESENT(qos_control);
17860 if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)) {
17862 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_limit, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17863 if (qos_field_content == 0) {
17864 proto_item_append_text(qos_ti, " (transmit one frame immediately)");
17867 /* qap ps buffer state */
17868 proto_item *qos_ps_buf_state_fields;
17869 proto_tree *qos_ps_buf_state_tree;
17871 qos_ps_buf_state_fields = proto_tree_add_item(qos_tree, hf_ieee80211_qos_ps_buf_state, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17872 qos_ps_buf_state_tree = proto_item_add_subtree(qos_ps_buf_state_fields, ett_qos_ps_buf_state);
17874 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17876 if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)) {
17877 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17878 qos_ti = proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17879 switch (QOS_PS_QAP_BUF_LOAD(qos_field_content)) {
17882 proto_item_append_text(qos_ti, " (no buffered traffic)");
17886 proto_item_append_text(qos_ti, " (%d octets)", QOS_PS_QAP_BUF_LOAD(qos_field_content)*4096);
17890 proto_item_append_text(qos_ti, " (greater than 57344 octets)");
17897 if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
17898 proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17899 is_amsdu = QOS_AMSDU_PRESENT(qos_control);
17903 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_queue_size, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17904 switch (qos_field_content) {
17906 proto_item_append_text(qos_ti, " (no buffered traffic in the queue)");
17910 proto_item_append_text(qos_ti, " (%u bytes)", qos_field_content*256);
17914 proto_item_append_text(qos_ti, " (more than 64768 octets)");
17918 proto_item_append_text(qos_ti, " (unspecified or unknown)");
17922 /* txop duration requested */
17923 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_dur_req,
17924 tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
17925 if (qos_field_content == 0) {
17926 proto_item_append_text(qos_ti, " (no TXOP requested)");
17931 /* Do we have +HTC? */
17932 if (htc_len == 4) {
17933 dissect_ht_control(hdr_tree, tvb, ohdr_len - 4);
17936 if (meshctl_len != 0) {
17937 proto_item *msh_fields;
17938 proto_tree *msh_tree;
17940 msh_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_mesh_control_field, tvb, meshoff, meshctl_len, ENC_NA);
17941 msh_tree = proto_item_add_subtree(msh_fields, ett_msh_control);
17942 add_ff_mesh_control(msh_tree, tvb, pinfo, meshoff);
17945 } /* end of qos control field */
17946 if (enable_decryption && !pinfo->fd->flags.visited) {
17947 const guint8 *enc_data = tvb_get_ptr(tvb, 0, hdr_len+reported_len);
17948 /* The processing will take care of 4-way handshake sessions for WPA and WPA2 decryption */
17949 AirPDcapPacketProcess(&airpdcap_ctx, enc_data, hdr_len, hdr_len+reported_len, NULL, 0, NULL, TRUE);
17953 * No-data frames don't have a body.
17955 if (DATA_FRAME_IS_NULL(frame_type_subtype))
17958 if (!wlan_subdissector) {
17962 * data: last seq_control seen and frame number
17964 retransmitted = FALSE;
17965 if (!pinfo->fd->flags.visited) {
17966 retransmit_key key;
17967 retransmit_key *result;
17969 memcpy(key.bssid, whdr->bssid.data, 6);
17970 memcpy(key.src, whdr->src.data, 6);
17971 key.seq_control = 0;
17972 result = (retransmit_key *)g_hash_table_lookup(fc_analyse_retransmit_table, &key);
17973 if (result && (result->seq_control == seq_control)) {
17974 /* keep a pointer to the first seen frame, could be done with proto data? */
17975 fnum = result->fnum;
17976 g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER(pinfo->num),
17977 GINT_TO_POINTER(fnum));
17978 retransmitted = TRUE;
17980 /* first time or new seq*/
17982 result = wmem_new(wmem_file_scope(), retransmit_key);
17984 g_hash_table_insert(fc_analyse_retransmit_table, result, result);
17986 result->seq_control = seq_control;
17987 result->fnum = pinfo->num;
17990 else if ((fnum = GPOINTER_TO_UINT(g_hash_table_lookup(fc_first_frame_table, GINT_TO_POINTER(pinfo->num))))) {
17991 retransmitted = TRUE;
17994 if (retransmitted) {
17995 col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
17999 item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0,
18000 "Retransmitted frame");
18001 PROTO_ITEM_SET_GENERATED(item);
18002 item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame, tvb, 0, 0, fnum);
18003 PROTO_ITEM_SET_GENERATED(item);
18005 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
18006 call_data_dissector(next_tvb, pinfo, tree);
18013 case CONTROL_FRAME:
18016 case EXTENSION_FRAME:
18023 if (IS_PROTECTED(FCF_FLAGS(fcf))
18024 && !phdr->decrypted
18025 && (wlan_ignore_prot != WLAN_IGNORE_PROT_WO_IV)) {
18027 * It's a WEP or WPA encrypted frame, and it hasn't already been
18028 * decrypted; dissect the protections parameters and decrypt the data,
18029 * if we have a matching key. Otherwise display it as data.
18031 gboolean can_decrypt = FALSE;
18032 proto_tree *wep_tree = NULL;
18034 guint8 key, keybyte;
18036 #define PROTECTION_ALG_WEP AIRPDCAP_KEY_TYPE_WEP
18037 #define PROTECTION_ALG_TKIP AIRPDCAP_KEY_TYPE_TKIP
18038 #define PROTECTION_ALG_CCMP AIRPDCAP_KEY_TYPE_CCMP
18039 #define PROTECTION_ALG_RSNA PROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP
18040 guint8 algorithm=G_MAXUINT8;
18041 #define IS_TKIP(tvb, hdr_len) (tvb_get_guint8(tvb, hdr_len + 1) == \
18042 ((tvb_get_guint8(tvb, hdr_len) | 0x20) & 0x7f))
18043 #define IS_CCMP(tvb, hdr_len) (tvb_get_guint8(tvb, hdr_len + 2) == 0)
18044 guint32 sec_header=0;
18045 guint32 sec_trailer=0;
18047 next_tvb = try_decrypt(tvb, pinfo, hdr_len, reported_len, &algorithm, &sec_header, &sec_trailer, &used_key);
18049 keybyte = tvb_get_guint8(tvb, hdr_len + 3);
18050 key = KEY_OCTET_WEP_KEY(keybyte);
18051 if ((keybyte & KEY_EXTIV) && (len >= EXTIV_LEN)) {
18052 /* Extended IV; this frame is likely encrypted with TKIP or CCMP */
18054 if (algorithm==PROTECTION_ALG_TKIP)
18055 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
18056 ett_wep_parameters, NULL, "TKIP parameters");
18057 else if (algorithm==PROTECTION_ALG_CCMP)
18058 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
18059 ett_wep_parameters, NULL, "CCMP parameters");
18061 if (IS_TKIP(tvb, hdr_len)) {
18062 algorithm=PROTECTION_ALG_TKIP;
18063 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
18064 ett_wep_parameters, NULL, "TKIP parameters");
18065 } else if (IS_CCMP(tvb, hdr_len)) {
18066 algorithm=PROTECTION_ALG_CCMP;
18067 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
18068 ett_wep_parameters, NULL, "CCMP parameters");
18070 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
18071 ett_wep_parameters, NULL, "TKIP/CCMP parameters");
18073 proto_item_set_len(ti, hdr_len + 8);
18075 if (algorithm==PROTECTION_ALG_TKIP) {
18076 g_snprintf(out_buff, SHORT_STR, "0x%08X%02X%02X",
18077 tvb_get_letohl(tvb, hdr_len + 4),
18078 tvb_get_guint8(tvb, hdr_len),
18079 tvb_get_guint8(tvb, hdr_len + 2));
18080 proto_tree_add_string(wep_tree, hf_ieee80211_tkip_extiv, tvb, hdr_len,
18081 EXTIV_LEN, out_buff);
18082 } else if (algorithm==PROTECTION_ALG_CCMP) {
18083 g_snprintf(out_buff, SHORT_STR, "0x%08X%02X%02X",
18084 tvb_get_letohl(tvb, hdr_len + 4),
18085 tvb_get_guint8(tvb, hdr_len + 1),
18086 tvb_get_guint8(tvb, hdr_len));
18087 proto_tree_add_string(wep_tree, hf_ieee80211_ccmp_extiv, tvb, hdr_len,
18088 EXTIV_LEN, out_buff);
18091 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
18094 /* Subtract out the length of the IV. */
18096 reported_len -= EXTIV_LEN;
18098 /* It is unknown whether this is TKIP or CCMP, so let's not even try to
18099 * parse TKIP Michael MIC+ICV or CCMP MIC. */
18101 /* checking for the trailer */
18102 if (next_tvb!=NULL) {
18103 if (reported_len < (gint) sec_trailer) {
18104 /* There is no space for a trailer, ignore it and don't decrypt */
18106 } else if (len < reported_len) {
18107 /* There is space for a trailer, but we haven't capture all the */
18108 /* packet. Slice off the trailer, but don't try to decrypt */
18109 reported_len -= sec_trailer;
18110 if (len > reported_len)
18111 len = reported_len;
18113 /* Ok, we have a trailer and the whole packet. Decrypt it! */
18114 /* TODO: At the moment we won't add the trailer to the tree, */
18115 /* so don't remove the trailer from the packet */
18116 len -= sec_trailer;
18117 reported_len -= sec_trailer;
18118 can_decrypt = TRUE;
18120 /* Add Key information to packet */
18121 bytes_to_hexstr(out_buff, used_key.KeyData.Wpa.Ptk+32, AIRPDCAP_TK_LEN); /* TK is stored in PTK at offset 32 bytes and 16 bytes long */
18122 out_buff[2*AIRPDCAP_TK_LEN] = '\0';
18124 if (key == 0) { /* encrypted with pairwise key */
18125 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_tk, tvb, 0, 0, out_buff);
18126 PROTO_ITEM_SET_GENERATED(ti);
18128 /* Also add the PMK used to to decrypt the packet. (PMK==PSK) */
18129 bytes_to_hexstr(out_buff, used_key.KeyData.Wpa.Psk, AIRPDCAP_WPA_PSK_LEN); /* 32 bytes */
18130 out_buff[2*AIRPDCAP_WPA_PSK_LEN] = '\0';
18131 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_pmk, tvb, 0, 0, out_buff);
18132 PROTO_ITEM_SET_GENERATED(ti);
18134 } else { /* Encrypted with Group Key */
18135 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_gtk, tvb, 0, 0, out_buff); /* GTK is stored in PTK at offset 32 bytes and 16 bytes long */
18136 PROTO_ITEM_SET_GENERATED(ti);
18141 /* No Ext. IV - WEP packet */
18143 * XXX - pass the IV and key to "try_decrypt_wep()", and have it pass
18144 * them to "wep_decrypt()", rather than having "wep_decrypt()" extract
18147 * Also, just pass the data *following* the WEP parameters as the
18148 * buffer to decrypt.
18150 iv = tvb_get_ntoh24(tvb, hdr_len);
18152 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 4,
18153 ett_wep_parameters, NULL, "WEP parameters");
18155 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_iv, tvb, hdr_len, 3, iv);
18156 tvb_memcpy(tvb, iv_buff, hdr_len, 3);
18157 is_iv_bad = weak_iv(iv_buff);
18158 if (is_iv_bad != -1) {
18159 proto_tree_add_boolean_format (wep_tree, hf_ieee80211_wep_iv_weak,
18161 "Weak IV for key byte %d",
18166 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
18168 /* Subtract out the length of the IV. */
18173 /* Even if the decryption was not successful, set the algorithm */
18174 algorithm=PROTECTION_ALG_WEP;
18177 * Well, this packet should, in theory, have an ICV.
18178 * Do we have the entire packet, and does it have enough data for
18181 if (reported_len < 4) {
18183 * The packet is claimed not to even have enough data for a
18185 * Pretend it doesn't have an ICV.
18188 } else if (len < reported_len) {
18190 * The packet is claimed to have enough data for a 4-byte ICV,
18191 * but we didn't capture all of the packet.
18192 * Slice off the 4-byte ICV from the reported length, and trim
18193 * the captured length so it's no more than the reported length;
18194 * that will slice off what of the ICV, if any, is in the
18198 if (len > reported_len)
18199 len = reported_len;
18202 * We have the entire packet, and it includes a 4-byte ICV.
18203 * Slice it off, and put it into the tree.
18205 * We only support decrypting if we have the the ICV.
18207 * XXX - the ICV is encrypted; we're putting the encrypted
18208 * value, not the decrypted value, into the tree.
18212 can_decrypt = TRUE;
18216 if (algorithm == PROTECTION_ALG_WEP) {
18217 g_strlcpy(wlan_stats.protection, "WEP", MAX_PROTECT_LEN);
18218 } else if (algorithm == PROTECTION_ALG_TKIP) {
18219 g_strlcpy(wlan_stats.protection, "TKIP", MAX_PROTECT_LEN);
18220 } else if (algorithm == PROTECTION_ALG_CCMP) {
18221 g_strlcpy(wlan_stats.protection, "CCMP", MAX_PROTECT_LEN);
18223 g_strlcpy(wlan_stats.protection, "Unknown", MAX_PROTECT_LEN);
18226 /* protection header */
18227 if (!can_decrypt || (next_tvb == NULL)) {
18229 * WEP decode impossible or failed, treat payload as raw data
18230 * and don't attempt fragment reassembly or further dissection.
18232 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len + ivlen, len, reported_len);
18235 if (algorithm == PROTECTION_ALG_WEP) {
18237 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
18238 hdr_len + ivlen + len, 4,
18239 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
18240 "0x%08x (not verified)",
18241 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
18242 } else if (algorithm == PROTECTION_ALG_CCMP) {
18243 } else if (algorithm == PROTECTION_ALG_TKIP) {
18247 if ((!(option_flags & IEEE80211_COMMON_OPT_IS_CENTRINO)) && (wlan_ignore_prot == WLAN_IGNORE_PROT_NO)) {
18248 /* Some wireless drivers (such as Centrino) WEP payload already decrypted */
18249 call_data_dissector(next_tvb, pinfo, tree);
18253 if (algorithm == PROTECTION_ALG_WEP) {
18255 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
18256 hdr_len + ivlen + len, 4,
18257 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
18258 "0x%08x (correct)",
18259 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
18261 add_new_data_source(pinfo, next_tvb, "Decrypted WEP data");
18262 } else if (algorithm==PROTECTION_ALG_CCMP) {
18263 add_new_data_source(pinfo, next_tvb, "Decrypted CCMP data");
18264 } else if (algorithm==PROTECTION_ALG_TKIP) {
18265 add_new_data_source(pinfo, next_tvb, "Decrypted TKIP data");
18269 #undef PROTECTION_ALG_CCMP
18270 #undef PROTECTION_ALG_TKIP
18271 #undef PROTECTION_ALG_WEP
18275 * WEP decryption successful!
18277 * Use the tvbuff we got back from the decryption; the data starts at
18278 * the beginning. The lengths are already correct for the decoded WEP
18285 * Not a WEP-encrypted frame; just use the data from the tvbuff
18288 * The payload starts at "hdr_len" (i.e., just past the 802.11
18289 * MAC header), the length of data in the tvbuff following the
18290 * 802.11 header is "len", and the length of data in the packet
18291 * following the 802.11 header is "reported_len".
18297 * Do defragmentation if "wlan_defragment" is true, and we have more
18298 * fragments or this isn't the first fragment.
18300 * We have to do some special handling to catch frames that
18301 * have the "More Fragments" indicator not set but that
18302 * don't show up as reassembled and don't have any other
18303 * fragments present. Some networking interfaces appear
18304 * to do reassembly even when you're capturing raw packets
18305 * *and* show the reassembled packet without the "More
18306 * Fragments" indicator set *but* with a non-zero fragment
18309 * "fragment_add_seq_802_11()" handles that; we want to call it
18310 * even if we have a short frame, so that it does those checks - if
18311 * the frame is short, it doesn't do reassembly on it.
18313 * (This could get some false positives if we really *did* only
18314 * capture the last fragment of a fragmented packet, but that's
18317 save_fragmented = pinfo->fragmented;
18318 if (wlan_defragment && (more_frags || (frag_number != 0))) {
18319 fragment_head *fd_head;
18322 * If we've already seen this frame, look it up in the
18323 * table of reassembled packets, otherwise add it to
18324 * whatever reassembly is in progress, if any, and see
18327 if (reported_len < 0)
18328 THROW(ReportedBoundsError);
18329 fd_head = fragment_add_seq_802_11(&wlan_reassembly_table,
18330 next_tvb, hdr_len, pinfo, seq_number, NULL,
18334 next_tvb = process_reassembled_data(tvb, hdr_len, pinfo,
18335 "Reassembled 802.11", fd_head,
18336 &frag_items, NULL, hdr_tree);
18339 * If this is the first fragment, dissect its contents, otherwise
18340 * just show it as a fragment.
18342 if (frag_number != 0) {
18343 /* Not the first fragment - don't dissect it. */
18346 /* First fragment, or not fragmented. Dissect what we have here. */
18348 /* Get a tvbuff for the payload. */
18349 next_tvb = tvb_new_subset_length_caplen(next_tvb, hdr_len, len, reported_len);
18352 * If this is the first fragment, but not the only fragment,
18353 * tell the next protocol that.
18356 pinfo->fragmented = TRUE;
18358 pinfo->fragmented = FALSE;
18362 if (next_tvb == NULL) {
18363 /* Just show this as an incomplete fragment. */
18364 col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
18365 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
18366 call_data_dissector(next_tvb, pinfo, tree);
18367 pinfo->fragmented = save_fragmented;
18371 switch (FCF_FRAME_TYPE (fcf))
18375 dissect_ieee80211_mgt(fcf, next_tvb, pinfo, tree);
18379 if (is_amsdu && (tvb_reported_length_remaining(next_tvb, 0) > 4)) {
18380 proto_item *parent_item;
18381 proto_tree *mpdu_tree;
18382 guint32 msdu_offset = 0;
18385 parent_item = proto_tree_add_protocol_format(tree, proto_aggregate, next_tvb, 0,
18386 tvb_reported_length_remaining(next_tvb, 0), "IEEE 802.11 Aggregate MSDU");
18387 mpdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_parent_tree);
18390 tvbuff_t *volatile msdu_tvb;
18391 guint16 msdu_length;
18392 proto_tree *subframe_tree;
18395 * IEEE Std 802.11-2012 says, in section 8.3.2.2 "A-MSDU format":
18397 * The A-MSDU subframe header contains three fields: DA, SA, and
18398 * Length. The order of these fields and the bits within these
18399 * fields are the same as the IEEE 802.3 frame format.
18401 * which means that the length field is big-endian, not
18404 msdu_length = tvb_get_ntohs(next_tvb, msdu_offset+12);
18406 parent_item = proto_tree_add_item(mpdu_tree, hf_ieee80211_amsdu_subframe, next_tvb,
18407 msdu_offset, roundup2(msdu_offset+14+msdu_length, 4), ENC_NA);
18408 proto_item_append_text(parent_item, " #%u", i);
18409 subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
18412 proto_tree_add_item(subframe_tree, hf_ieee80211_addr_da, next_tvb, msdu_offset, 6, ENC_NA);
18413 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_da_resolved, tvb, msdu_offset, 6,
18414 tvb_get_ether_name(tvb, msdu_offset));
18415 PROTO_ITEM_SET_HIDDEN(hidden_item);
18416 proto_tree_add_item(subframe_tree, hf_ieee80211_addr_sa, next_tvb, msdu_offset+6, 6, ENC_NA);
18417 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_sa_resolved, tvb, msdu_offset+6, 6,
18418 tvb_get_ether_name(tvb, msdu_offset+6));
18419 PROTO_ITEM_SET_HIDDEN(hidden_item);
18420 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_length, next_tvb, msdu_offset+12, 2, ENC_BIG_ENDIAN);
18423 msdu_tvb = tvb_new_subset_length(next_tvb, msdu_offset, msdu_length);
18424 call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
18425 msdu_offset = roundup2(msdu_offset+msdu_length, 4);
18426 } while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
18430 /* I guess some bridges take Netware Ethernet_802_3 frames,
18431 which are 802.3 frames (with a length field rather than
18432 a type field, but with no 802.2 header in the payload),
18433 and just stick the payload into an 802.11 frame. I've seen
18434 captures that show frames of that sort.
18436 We also handle some odd form of encapsulation in which a
18437 complete Ethernet frame is encapsulated within an 802.11
18438 data frame, with no 802.2 header. This has been seen
18439 from some hardware.
18441 On top of that, at least at some point it appeared that
18442 the OLPC XO sent out frames with two bytes of 0 between
18443 the "end" of the 802.11 header and the beginning of
18446 So, if the packet doesn't start with 0xaa 0xaa:
18448 we first use the same scheme that linux-wlan-ng does to detect
18449 those encapsulated Ethernet frames, namely looking to see whether
18450 the frame either starts with 6 octets that match the destination
18451 address from the 802.11 header or has 6 octets that match the
18452 source address from the 802.11 header following the first 6 octets,
18453 and, if so, treat it as an encapsulated Ethernet frame;
18455 otherwise, we use the same scheme that we use in the Ethernet
18456 dissector to recognize Netware 802.3 frames, namely checking
18457 whether the packet starts with 0xff 0xff and, if so, treat it
18458 as an encapsulated IPX frame, and then check whether the
18459 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
18461 encap_type = ENCAP_802_2;
18462 if (tvb_bytes_exist(next_tvb, 0, 2)) {
18463 octet1 = tvb_get_guint8(next_tvb, 0);
18464 octet2 = tvb_get_guint8(next_tvb, 1);
18465 if ((octet1 != 0xaa) || (octet2 != 0xaa)) {
18466 if ((tvb_memeql(next_tvb, 6, (const guint8 *)pinfo->dl_src.data, 6) == 0) ||
18467 (tvb_memeql(next_tvb, 0, (const guint8 *)pinfo->dl_dst.data, 6) == 0))
18468 encap_type = ENCAP_ETHERNET;
18469 else if ((octet1 == 0xff) && (octet2 == 0xff))
18470 encap_type = ENCAP_IPX;
18471 else if ((octet1 == 0x00) && (octet2 == 0x00)) {
18472 proto_tree_add_item(tree, hf_ieee80211_mysterious_olpc_stuff, next_tvb, 0, 2, ENC_NA);
18473 next_tvb = tvb_new_subset_remaining(next_tvb, 2);
18478 switch (encap_type) {
18481 call_dissector(llc_handle, next_tvb, pinfo, tree);
18484 case ENCAP_ETHERNET:
18485 call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
18489 call_dissector(ipx_handle, next_tvb, pinfo, tree);
18494 case EXTENSION_FRAME:
18496 dissect_ieee80211_extension(fcf, next_tvb, pinfo, tree);
18500 pinfo->fragmented = save_fragmented;
18503 whdr->stats = wlan_stats;
18504 tap_queue_packet(wlan_tap, pinfo, whdr);
18505 memset(&wlan_stats, 0, sizeof wlan_stats);
18507 return tvb_captured_length(tvb);
18511 * Dissect 802.11 with a variable-length link-layer header and with the FCS
18512 * presence or absence indicated by the pseudo-header, if there is one.
18515 dissect_ieee80211(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
18517 struct ieee_802_11_phdr *phdr = (struct ieee_802_11_phdr *)data;
18518 struct ieee_802_11_phdr ourphdr;
18520 if (phdr == NULL) {
18522 * Fake a pseudo-header.
18523 * XXX - what are we supposed to do if the FCS length is unknown?
18525 memset(&ourphdr, 0, sizeof(ourphdr));
18526 ourphdr.fcs_len = -1;
18527 ourphdr.decrypted = FALSE;
18528 ourphdr.datapad = FALSE;
18529 ourphdr.phy = PHDR_802_11_PHY_UNKNOWN;
18532 return dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS, phdr);
18536 * Dissect 802.11 with a variable-length link-layer header and with an
18537 * FCS, but no pseudo-header.
18540 dissect_ieee80211_withfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
18542 struct ieee_802_11_phdr phdr;
18544 /* Construct a pseudo-header to hand to the common code. */
18545 memset(&phdr, 0, sizeof(phdr));
18547 phdr.decrypted = FALSE;
18548 phdr.datapad = FALSE;
18549 phdr.phy = PHDR_802_11_PHY_UNKNOWN;
18550 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS, &phdr);
18551 return tvb_captured_length(tvb);
18555 * Dissect 802.11 with a variable-length link-layer header and without an
18556 * FCS, but no pseudo-header.
18559 dissect_ieee80211_withoutfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
18561 struct ieee_802_11_phdr phdr;
18563 /* Construct a pseudo-header to hand to the common code. */
18564 memset(&phdr, 0, sizeof(phdr));
18565 phdr.decrypted = FALSE;
18566 phdr.datapad = FALSE;
18567 phdr.phy = PHDR_802_11_PHY_UNKNOWN;
18568 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS, &phdr);
18569 return tvb_captured_length(tvb);
18573 * Dissect 802.11 from an Intel 2200BG adapter in a Centrino laptop
18574 * running Windows XP.
18578 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00184.html
18582 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00393.html:
18584 * I tried capturing from a Centrino laptop with the Intel 2200BG 802.11g
18585 * chipset. I saw a lot of "Ethernet II" frames with 0x2452 as ethertype.
18589 * This behaviour has been observed on Windows XP. In my opinion it is
18590 * a "proprietary" behaviour of either the Centrino driver or the Centrino
18591 * hardware. Currently I have no Linux distro installed on the machine to
18592 * verify whether it is also the case.
18594 * These packets are seen only in a promiscuous capture:
18595 * - Packets normally received by the Centrino computer have the normal
18596 * structure (no 802.11/LLC header but directly IP header).
18597 * - Packets that are supposed to be received by another computer have
18598 * the 802.11/LLC headers. ... Also I noticed that when WEP is enabled,
18599 * the 802.11 header has the flag "WEP" set to true, but the packet
18600 * is already decrypted. I added a test in the code to accomodate this.
18601 * For TKIP it seems to stay encrypted.
18604 dissect_ieee80211_centrino(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
18606 struct ieee_802_11_phdr phdr;
18608 /* Construct a pseudo-header to hand to the common code. */
18609 memset(&phdr, 0, sizeof(phdr));
18610 phdr.decrypted = FALSE;
18611 phdr.datapad = FALSE;
18612 phdr.phy = PHDR_802_11_PHY_UNKNOWN;
18613 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_IS_CENTRINO|IEEE80211_COMMON_OPT_NORMAL_QOS, &phdr);
18614 return tvb_captured_length(tvb);
18618 * Dissect 802.11 with a variable-length link-layer header and a byte-swapped
18619 * control field and with no FCS (some hardware sends out LWAPP-encapsulated
18620 * 802.11 packets with the control field byte swapped).
18623 dissect_ieee80211_bsfc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
18625 struct ieee_802_11_phdr phdr;
18627 /* Construct a pseudo-header to hand to the common code. */
18628 memset(&phdr, 0, sizeof(phdr));
18629 phdr.decrypted = FALSE;
18630 phdr.datapad = FALSE;
18631 phdr.phy = PHDR_802_11_PHY_UNKNOWN;
18632 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_BROKEN_FC|IEEE80211_COMMON_OPT_NORMAL_QOS, &phdr);
18633 return tvb_captured_length(tvb);
18637 * Dissect 802.11 with a variable-length link-layer header without qos elements
18638 * in data+qos frames and with no FCS (sent as WIDS frames by Cisco standalone
18642 dissect_ieee80211_noqos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
18644 struct ieee_802_11_phdr phdr;
18646 /* Construct a pseudo-header to hand to the common code. */
18647 memset(&phdr, 0, sizeof(phdr));
18648 phdr.decrypted = FALSE;
18649 phdr.datapad = FALSE;
18650 phdr.phy = PHDR_802_11_PHY_UNKNOWN;
18651 dissect_ieee80211_common(tvb, pinfo, tree, 0, &phdr);
18652 return tvb_captured_length(tvb);
18657 wlan_defragment_init(void)
18659 reassembly_table_init(&wlan_reassembly_table,
18660 &addresses_reassembly_table_functions);
18664 wlan_defragment_cleanup(void)
18666 reassembly_table_destroy(&wlan_reassembly_table);
18669 /* ------------- */
18671 retransmit_hash(gconstpointer k)
18673 const retransmit_key *key = (const retransmit_key *)k;
18678 for (i = 0; i < 6; i++)
18679 hash_val += key->bssid[i];
18681 for (i = 0; i < 6; i++)
18682 hash_val += key->src[i];
18688 retransmit_equal(gconstpointer k1, gconstpointer k2)
18690 const retransmit_key *key1 = (const retransmit_key *)k1;
18691 const retransmit_key *key2 = (const retransmit_key *)k2;
18693 return ((!memcmp(key1->bssid, key2->bssid, 6) && !memcmp(key1->src, key2->src, 6)) ? TRUE:FALSE);
18697 frame_hash(gconstpointer k)
18699 guint32 frame = GPOINTER_TO_UINT(k);
18705 frame_equal(gconstpointer k1, gconstpointer k2)
18707 guint32 frame1 = GPOINTER_TO_UINT(k1);
18708 guint32 frame2 = GPOINTER_TO_UINT(k2);
18710 return frame1==frame2;
18714 * EAPOL key description dissectors.
18716 #define KEY_INFO_KEYDES_VERSION_MASK 0x0007
18717 #define KEY_INFO_KEY_TYPE_MASK 0x0008
18718 #define KEY_INFO_KEY_INDEX_MASK 0x0030
18719 #define KEY_INFO_INSTALL_MASK 0x0040
18720 #define KEY_INFO_KEY_ACK_MASK 0x0080
18721 #define KEY_INFO_KEY_MIC_MASK 0x0100
18722 #define KEY_INFO_SECURE_MASK 0x0200
18723 #define KEY_INFO_ERROR_MASK 0x0400
18724 #define KEY_INFO_REQUEST_MASK 0x0800
18725 #define KEY_INFO_ENCRYPTED_KEY_DATA_MASK 0x1000
18726 #define KEY_INFO_SMK_MESSAGE_MASK 0x2000
18728 #define KEYDES_VER_TYPE1 0x01
18729 #define KEYDES_VER_TYPE2 0x02
18730 #define KEYDES_VER_TYPE3 0x03
18732 static const value_string keydes_version_vals[] = {
18733 { KEYDES_VER_TYPE1, "RC4 Cipher, HMAC-MD5 MIC" },
18734 { KEYDES_VER_TYPE2, "AES Cipher, HMAC-SHA1 MIC" },
18735 { KEYDES_VER_TYPE3, "AES Cipher, AES-128-CMAC MIC" },
18739 static int proto_wlan_rsna_eapol = -1;
18741 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo = -1;
18742 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version = -1;
18743 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type = -1;
18744 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index = -1;
18745 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install = -1;
18746 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack = -1;
18747 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic = -1;
18748 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure = -1;
18749 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error = -1;
18750 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request = -1;
18751 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data = -1;
18752 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message = -1;
18753 static int hf_wlan_rsna_eapol_keydes_key_len = -1;
18754 static int hf_wlan_rsna_eapol_keydes_replay_counter = -1;
18755 static int hf_wlan_rsna_eapol_keydes_key_iv = -1;
18756 static int hf_wlan_rsna_eapol_wpa_keydes_nonce = -1;
18757 static int hf_wlan_rsna_eapol_wpa_keydes_rsc = -1;
18758 static int hf_wlan_rsna_eapol_wpa_keydes_id = -1;
18759 static int hf_wlan_rsna_eapol_wpa_keydes_mic = -1;
18760 static int hf_wlan_rsna_eapol_wpa_keydes_data_len = -1;
18761 static int hf_wlan_rsna_eapol_wpa_keydes_data = -1;
18763 static gint ett_keyinfo = -1;
18764 static gint ett_wlan_rsna_eapol_keydes_data = -1;
18766 static const true_false_string keyinfo_key_type_tfs = { "Pairwise Key", "Group Key" };
18769 dissect_wlan_rsna_eapol_wpa_or_rsn_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
18773 guint16 eapol_data_len;
18774 proto_tree *keyinfo_item = NULL;
18775 proto_tree *keyinfo_tree = NULL;
18776 proto_tree *keydes_tree;
18777 proto_tree *ti = NULL;
18780 * RSNA key descriptors.
18782 eapol_data_len = tvb_get_ntohs(tvb, offset+92);
18783 keyinfo = tvb_get_ntohs(tvb, offset);
18784 if (keyinfo & KEY_INFO_REQUEST_MASK) {
18785 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request)");
18786 if (keyinfo & KEY_INFO_ERROR_MASK)
18787 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request, Error)");
18788 } else if (keyinfo & KEY_INFO_KEY_TYPE_MASK) {
18790 /* Windows is setting the Secure Bit on message 2 when rekeying, so we'll ignore it */
18792 (KEY_INFO_INSTALL_MASK | KEY_INFO_KEY_ACK_MASK | KEY_INFO_KEY_MIC_MASK);
18795 case KEY_INFO_KEY_ACK_MASK:
18796 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 1 of 4)");
18799 case KEY_INFO_KEY_MIC_MASK:
18800 /* We check the key length to differentiate between message 2 and 4 and just hope that
18801 there are no strange implementations with key data and non-zero key length in message 4.
18802 According to the IEEE specification, sections 11.6.6.3 and 11.6.6.5 we should
18803 use the Secure Bit and/or the Nonce, but there are implementations ignoring the spec.
18804 The Secure Bit is incorrectly set on rekeys for Windows clients for Message 2 and the Nonce is non-zero
18805 in Message 4 in Bug 11994 (Apple?) */
18806 if (eapol_data_len)
18807 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 2 of 4)");
18809 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 4 of 4)");
18812 case (KEY_INFO_INSTALL_MASK | KEY_INFO_KEY_ACK_MASK | KEY_INFO_KEY_MIC_MASK):
18813 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 3 of 4)");
18817 if (keyinfo & KEY_INFO_KEY_ACK_MASK)
18818 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 1 of 2)");
18820 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 2 of 2)");
18823 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo, tvb,
18824 offset, 2, ENC_BIG_ENDIAN);
18826 keyinfo_tree = proto_item_add_subtree(keyinfo_item, ett_keyinfo);
18827 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version, tvb, offset, 2, ENC_BIG_ENDIAN);
18828 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type, tvb, offset, 2, ENC_BIG_ENDIAN);
18829 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index, tvb, offset, 2, ENC_BIG_ENDIAN);
18830 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install, tvb, offset, 2, ENC_BIG_ENDIAN);
18831 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack, tvb, offset, 2, ENC_BIG_ENDIAN);
18832 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic, tvb, offset, 2, ENC_BIG_ENDIAN);
18833 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure, tvb, offset, 2, ENC_BIG_ENDIAN);
18834 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error, tvb, offset, 2, ENC_BIG_ENDIAN);
18835 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request, tvb, offset, 2, ENC_BIG_ENDIAN);
18836 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data, tvb, offset, 2, ENC_BIG_ENDIAN);
18837 proto_tree_add_item(keyinfo_tree, hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message, tvb, offset, 2, ENC_BIG_ENDIAN);
18840 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_len, tvb, offset,
18841 2, ENC_BIG_ENDIAN);
18843 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_replay_counter, tvb,
18844 offset, 8, ENC_BIG_ENDIAN);
18846 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_nonce, tvb, offset,
18849 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_iv, tvb,
18850 offset, 16, ENC_NA);
18852 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_rsc, tvb, offset,
18855 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_id, tvb, offset, 8,
18858 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_mic, tvb, offset,
18861 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data_len, tvb,
18862 offset, 2, ENC_BIG_ENDIAN);
18864 if (eapol_data_len != 0) {
18865 ti = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data,
18866 tvb, offset, eapol_data_len, ENC_NA);
18867 if ((keyinfo & KEY_INFO_ENCRYPTED_KEY_DATA_MASK) ||
18868 !(keyinfo & KEY_INFO_KEY_TYPE_MASK)) {
18869 /* RSN: EAPOL-Key Key Data is encrypted.
18870 * WPA: Group Keys use encrypted Key Data.
18871 * Cannot parse this without knowing the key.
18872 * IEEE 802.11i-2004 8.5.2.
18875 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
18876 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, keydes_tree,
18877 tvb_reported_length_remaining(tvb, offset),
18881 return tvb_captured_length(tvb);
18884 /* It returns the algorithm used for decryption and the header and trailer lengths. */
18886 try_decrypt(tvbuff_t *tvb, packet_info *pinfo, guint offset, guint len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer, PAIRPDCAP_KEY_ITEM used_key)
18888 const guint8 *enc_data;
18889 tvbuff_t *decr_tvb = NULL;
18890 guint32 dec_caplen;
18891 guchar dec_data[AIRPDCAP_MAX_CAPLEN];
18893 if (!enable_decryption)
18896 /* get the entire packet */
18897 enc_data = tvb_get_ptr(tvb, 0, len+offset);
18899 /* process packet with AirPDcap */
18900 if (AirPDcapPacketProcess(&airpdcap_ctx, enc_data, offset, offset+len, dec_data, &dec_caplen,
18901 used_key, FALSE)==AIRPDCAP_RET_SUCCESS)
18904 *algorithm=used_key->KeyType;
18905 switch (*algorithm) {
18906 case AIRPDCAP_KEY_TYPE_WEP:
18907 *sec_header=AIRPDCAP_WEP_HEADER;
18908 *sec_trailer=AIRPDCAP_WEP_TRAILER;
18910 case AIRPDCAP_KEY_TYPE_CCMP:
18911 *sec_header=AIRPDCAP_RSNA_HEADER;
18912 *sec_trailer=AIRPDCAP_CCMP_TRAILER;
18914 case AIRPDCAP_KEY_TYPE_TKIP:
18915 *sec_header=AIRPDCAP_RSNA_HEADER;
18916 *sec_trailer=AIRPDCAP_TKIP_TRAILER;
18922 /* allocate buffer for decrypted payload */
18923 tmp = (guint8 *)wmem_memdup(pinfo->pool, dec_data+offset, dec_caplen-offset);
18925 len = dec_caplen-offset;
18927 /* decrypt successful, let's set up a new data tvb. */
18928 decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
18934 /* Collect our WEP and WPA keys */
18936 set_airpdcap_keys(void)
18938 AIRPDCAP_KEYS_COLLECTION keys;
18939 GByteArray *bytes = NULL;
18944 for (i = 0; (uat_wep_key_records != NULL) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS); i++)
18946 decryption_key_t *dk;
18947 dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key);
18951 AIRPDCAP_KEY_ITEM key;
18952 if (dk->type == AIRPDCAP_KEY_TYPE_WEP)
18955 key.KeyType = AIRPDCAP_KEY_TYPE_WEP;
18957 bytes = g_byte_array_new();
18958 res = hex_str_to_bytes(dk->key->str, bytes, FALSE);
18960 if (dk->key->str && res && (bytes->len > 0) && (bytes->len <= AIRPDCAP_WEP_KEY_MAXLEN))
18963 * WEP key is correct (well, the can be even or odd, so it is not
18964 * a real check, I think... is a check performed somewhere in the
18965 * AirPDcap function???)
18967 memcpy(key.KeyData.Wep.WepKey, bytes->data, bytes->len);
18968 key.KeyData.Wep.WepKeyLen = bytes->len;
18969 keys.Keys[keys.nKeys] = key;
18973 else if (dk->type == AIRPDCAP_KEY_TYPE_WPA_PWD)
18975 key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PWD;
18977 /* XXX - This just lops the end if the key off if it's too long.
18978 * Should we handle this more gracefully? */
18979 g_strlcpy(key.UserPwd.Passphrase, dk->key->str, AIRPDCAP_WPA_PASSPHRASE_MAX_LEN+1);
18981 key.UserPwd.SsidLen = 0;
18982 if ((dk->ssid != NULL) && (dk->ssid->len <= AIRPDCAP_WPA_SSID_MAX_LEN))
18984 memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
18985 key.UserPwd.SsidLen = dk->ssid->len;
18988 keys.Keys[keys.nKeys] = key;
18991 else if (dk->type == AIRPDCAP_KEY_TYPE_WPA_PSK)
18993 key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PSK;
18995 bytes = g_byte_array_new();
18996 hex_str_to_bytes(dk->key->str, bytes, FALSE);
18998 /* XXX - Pass the correct array of bytes... */
18999 if (bytes->len <= AIRPDCAP_WPA_PSK_LEN) {
19000 memcpy(key.KeyData.Wpa.Psk, bytes->data, bytes->len);
19002 keys.Keys[keys.nKeys] = key;
19006 free_key_string(dk);
19008 g_byte_array_free(bytes, TRUE);
19014 /* Now set the keys */
19015 AirPDcapSetKeys(&airpdcap_ctx, keys.Keys, keys.nKeys);
19024 * XXX - AirPDcap - That God sends it to us beautiful (che dio ce la mandi bona)
19025 * The next lines will add a key to the AirPDcap context. The keystring will be added
19026 * to the old WEP array too, but we don't care, because the packets will come here
19027 * already decrypted... One of these days we will fix this too
19029 set_airpdcap_keys();
19033 * This code had been taken from AirSnort crack.c function classify()
19034 * Permission granted by snax <at> shmoo dot com
19035 * weak_iv - determine which key byte an iv is useful in resolving
19036 * parm - p, pointer to the first byte of an IV
19037 * return - n - this IV is weak for byte n of a WEP key
19038 * -1 - this IV is not weak for any key bytes
19040 * This function tests for IVs that are known to satisfy the criteria
19041 * for a weak IV as specified in FMS section 7.1
19045 weak_iv(guchar *iv)
19049 if ((iv[1] == 255) && (iv[0] > 2) && (iv[0] < 16)) {
19053 sum = iv[0] + iv[1];
19055 if (iv[2] <= 0x0a) {
19058 else if (iv[2] == 0xff) {
19063 if ((sum == k) && ((iv[2] >= 0xf2) && (iv[2] <= 0xfe) && (iv[2] != 0xfd))) {
19070 wlan_retransmit_init(void)
19072 if (fc_analyse_retransmit_table) {
19073 g_hash_table_destroy(fc_analyse_retransmit_table);
19074 fc_analyse_retransmit_table = NULL;
19077 if (fc_first_frame_table) {
19078 g_hash_table_destroy(fc_first_frame_table);
19079 fc_first_frame_table = NULL;
19082 if (wlan_subdissector)
19085 fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
19086 fc_first_frame_table = g_hash_table_new(frame_hash, frame_equal);
19091 dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
19095 int tagged_parameter_tree_len;
19096 proto_tree *tagged_tree;
19098 type = tvb_get_guint8(tvb, offset);
19099 proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
19100 1, ENC_LITTLE_ENDIAN);
19104 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
19105 /* TODO: IEEE 802.11r */
19108 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
19109 col_clear(pinfo->cinfo, COL_INFO);
19110 offset += add_ff_action(tree, tvb, pinfo, offset);
19111 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
19112 if (tagged_parameter_tree_len > 0) {
19113 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
19114 tagged_parameter_tree_len);
19115 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
19116 tagged_parameter_tree_len, -1, NULL);
19120 return tvb_captured_length(tvb);
19124 proto_register_ieee80211(void)
19127 static hf_register_info hf[] = {
19128 {&hf_ieee80211_fc_field,
19129 {"Frame Control Field", "wlan.fc",
19130 FT_UINT16, BASE_HEX, NULL, 0,
19131 "MAC Frame control", HFILL }},
19133 {&hf_ieee80211_fc_proto_version,
19134 {"Version", "wlan.fc.version",
19135 FT_UINT8, BASE_DEC, NULL, 0x03,
19136 "MAC Protocol version", HFILL }}, /* 0 */
19138 {&hf_ieee80211_fc_frame_type,
19139 {"Type", "wlan.fc.type",
19140 FT_UINT8, BASE_DEC, VALS(frame_type), 0x0C,
19141 "Frame type", HFILL }},
19143 {&hf_ieee80211_fc_frame_subtype,
19144 {"Subtype", "wlan.fc.subtype",
19145 FT_UINT8, BASE_DEC, NULL, 0xF0,
19146 "Frame subtype", HFILL }}, /* 2 */
19148 {&hf_ieee80211_fc_frame_type_subtype,
19149 {"Type/Subtype", "wlan.fc.type_subtype",
19150 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &frame_type_subtype_vals_ext, 0x0,
19151 "Type and subtype combined (first byte: type, second byte: subtype)", HFILL }},
19153 {&hf_ieee80211_fc_frame_extension,
19154 {"Control Frame Extension", "wlan.fc.extension",
19155 FT_UINT8, BASE_DEC, NULL, 0,
19158 {&hf_ieee80211_fc_flags,
19159 {"Flags", "wlan.flags",
19160 FT_UINT8, BASE_HEX, NULL, 0,
19163 {&hf_ieee80211_fc_data_ds,
19164 {"DS status", "wlan.fc.ds",
19165 FT_UINT8, BASE_HEX, VALS(tofrom_ds), (FLAG_FROM_DS|FLAG_TO_DS),
19166 "Data-frame DS-traversal status", HFILL }}, /* 3 */
19168 {&hf_ieee80211_fc_to_ds,
19169 {"To DS", "wlan.fc.tods",
19170 FT_BOOLEAN, 8, TFS(&tods_flag), FLAG_TO_DS,
19171 "To DS flag", HFILL }}, /* 4 */
19173 {&hf_ieee80211_fc_from_ds,
19174 {"From DS", "wlan.fc.fromds",
19175 FT_BOOLEAN, 8, TFS(&fromds_flag), FLAG_FROM_DS,
19176 "From DS flag", HFILL }}, /* 5 */
19178 {&hf_ieee80211_fc_more_frag,
19179 {"More Fragments", "wlan.fc.frag",
19180 FT_BOOLEAN, 8, TFS(&more_fragments), FLAG_MORE_FRAGMENTS,
19181 "More Fragments flag", HFILL }}, /* 6 */
19183 {&hf_ieee80211_fc_retry,
19184 {"Retry", "wlan.fc.retry",
19185 FT_BOOLEAN, 8, TFS(&retry_flags), FLAG_RETRY,
19186 "Retransmission flag", HFILL }},
19188 { &hf_ieee80211_fc_analysis_retransmission,
19189 {"Retransmission", "wlan.analysis.retransmission",
19190 FT_NONE, BASE_NONE, NULL, 0x0,
19191 "This frame is a suspected wireless retransmission", HFILL }},
19193 { &hf_ieee80211_fc_analysis_retransmission_frame,
19194 {"Retransmission of frame", "wlan.analysis.retransmission_frame",
19195 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
19196 "This is a retransmission of frame #", HFILL }},
19198 {&hf_ieee80211_fc_pwr_mgt,
19199 {"PWR MGT", "wlan.fc.pwrmgt",
19200 FT_BOOLEAN, 8, TFS(&pm_flags), FLAG_POWER_MGT,
19201 "Power management status", HFILL }},
19203 {&hf_ieee80211_fc_more_data,
19204 {"More Data", "wlan.fc.moredata",
19205 FT_BOOLEAN, 8, TFS(&md_flags), FLAG_MORE_DATA,
19206 "More data flag", HFILL }},
19208 {&hf_ieee80211_fc_protected,
19209 {"Protected flag", "wlan.fc.protected",
19210 FT_BOOLEAN, 8, TFS(&protected_flags), FLAG_PROTECTED,
19213 {&hf_ieee80211_fc_order,
19214 {"Order flag", "wlan.fc.order",
19215 FT_BOOLEAN, 8, TFS(&order_flags), FLAG_ORDER,
19216 "Strictly ordered flag", HFILL }},
19218 {&hf_ieee80211_assoc_id,
19219 {"Association ID", "wlan.aid",
19220 FT_UINT16, BASE_DEC, NULL, 0x3FFF,
19223 {&hf_ieee80211_did_duration,
19224 {"Duration", "wlan.duration",
19225 FT_UINT16, BASE_DEC, NULL, 0x7FFF,
19228 {&hf_ieee80211_addr_da,
19229 {"Destination address", "wlan.da",
19230 FT_ETHER, BASE_NONE, NULL, 0,
19231 "Destination Hardware Address", HFILL }},
19233 { &hf_ieee80211_addr_da_resolved,
19234 {"Destination address (resolved)", "wlan.da_resolved", FT_STRING,
19235 BASE_NONE, NULL, 0x0,
19236 "Destination Hardware Address (resolved)", HFILL }},
19238 {&hf_ieee80211_addr_sa,
19239 {"Source address", "wlan.sa",
19240 FT_ETHER, BASE_NONE, NULL, 0,
19241 "Source Hardware Address", HFILL }},
19243 { &hf_ieee80211_addr_sa_resolved,
19244 {"Source address (resolved)", "wlan.sa_resolved", FT_STRING,
19245 BASE_NONE, NULL, 0x0,
19246 "Source Hardware Address (resolved)", HFILL }},
19248 { &hf_ieee80211_addr,
19249 {"Hardware address", "wlan.addr",
19250 FT_ETHER, BASE_NONE, NULL, 0,
19251 "SA, DA, BSSID, RA or TA Hardware Address", HFILL }},
19253 { &hf_ieee80211_addr_resolved,
19254 { "Hardware address (resolved)", "wlan.addr_resolved", FT_STRING,
19255 BASE_NONE, NULL, 0x0,
19256 "SA, DA, BSSID, RA or TA Hardware Address (resolved)", HFILL }},
19258 {&hf_ieee80211_addr_ra,
19259 {"Receiver address", "wlan.ra",
19260 FT_ETHER, BASE_NONE, NULL, 0,
19261 "Receiving Station Hardware Address", HFILL }},
19263 { &hf_ieee80211_addr_ra_resolved,
19264 {"Receiver address (resolved)", "wlan.ra_resolved", FT_STRING, BASE_NONE,
19265 NULL, 0x0, "Receiving Station Hardware Address (resolved)", HFILL }},
19267 {&hf_ieee80211_addr_ta,
19268 {"Transmitter address", "wlan.ta",
19269 FT_ETHER, BASE_NONE, NULL, 0,
19270 "Transmitting Station Hardware Address", HFILL }},
19272 { &hf_ieee80211_addr_ta_resolved,
19273 {"Transmitter address (resolved)", "wlan.ta_resolved", FT_STRING,
19274 BASE_NONE, NULL, 0x0,
19275 "Transmitting Station Hardware Address (resolved)", HFILL }},
19277 {&hf_ieee80211_addr_bssid,
19278 {"BSS Id", "wlan.bssid",
19279 FT_ETHER, BASE_NONE, NULL, 0,
19280 "Basic Service Set ID", HFILL }},
19282 { &hf_ieee80211_addr_bssid_resolved,
19283 {"BSS Id (resolved)", "wlan.bssid_resolved", FT_STRING, BASE_NONE, NULL,
19284 0x0, "Basic Service Set ID (resolved)", HFILL }},
19286 {&hf_ieee80211_addr_staa,
19287 {"STA address", "wlan.staa",
19288 FT_ETHER, BASE_NONE, NULL, 0,
19289 "Station Hardware Address", HFILL }},
19291 { &hf_ieee80211_addr_staa_resolved,
19292 {"STA address (resolved)", "wlan.staa_resolved", FT_STRING, BASE_NONE, NULL,
19293 0x0, "Station Hardware Address (resolved)", HFILL }},
19295 {&hf_ieee80211_frag_number,
19296 {"Fragment number", "wlan.frag",
19297 FT_UINT16, BASE_DEC, NULL, 0x000F,
19300 {&hf_ieee80211_seq_number,
19301 {"Sequence number", "wlan.seq",
19302 FT_UINT16, BASE_DEC, NULL, 0xFFF0,
19305 {&hf_ieee80211_mesh_control_field,
19306 {"Mesh Control Field", "wlan.mesh.control_field",
19307 FT_NONE, BASE_NONE, NULL, 0,
19310 {&hf_ieee80211_qos,
19311 {"Qos Control", "wlan.qos",
19312 FT_UINT16, BASE_HEX, NULL, 0,
19315 {&hf_ieee80211_qos_tid,
19316 {"TID", "wlan.qos.tid",
19317 FT_UINT16, BASE_DEC, NULL, 0x000F,
19320 {&hf_ieee80211_qos_priority,
19321 {"Priority", "wlan.qos.priority",
19322 FT_UINT16, BASE_DEC, VALS(ieee80211_qos_tags_acs), 0x0007,
19323 "802.1D Tag", HFILL }},
19325 {&hf_ieee80211_qos_eosp,
19326 {"EOSP", "wlan.qos.eosp",
19327 FT_BOOLEAN, 16, TFS(&eosp_flag), QOS_FLAG_EOSP,
19328 "EOSP Field", HFILL }},
19330 {&hf_ieee80211_qos_bit4,
19331 {"QoS bit 4", "wlan.qos.bit4",
19332 FT_BOOLEAN, 16, TFS(&bit4_flag), QOS_FLAG_EOSP,
19335 {&hf_ieee80211_qos_ack_policy,
19336 {"Ack Policy", "wlan.qos.ack",
19337 FT_UINT16, BASE_HEX, VALS(ack_policy), 0x0060,
19340 {&hf_ieee80211_qos_amsdu_present,
19341 {"Payload Type", "wlan.qos.amsdupresent",
19342 FT_BOOLEAN, 16, TFS(&ieee80211_qos_amsdu_present_flag), 0x0080,
19345 {&hf_ieee80211_qos_txop_limit,
19346 {"TXOP Limit", "wlan.qos.txop_limit",
19347 FT_UINT16, BASE_DEC, NULL, 0xFF00,
19350 {&hf_ieee80211_qos_ps_buf_state,
19351 {"QAP PS Buffer State", "wlan.qos.ps_buf_state",
19352 FT_UINT16, BASE_HEX, NULL, 0xFF00,
19355 {&hf_ieee80211_qos_buf_state_indicated,
19356 {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
19357 FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0200,
19360 {&hf_ieee80211_qos_highest_pri_buf_ac,
19361 {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
19362 FT_UINT16, BASE_DEC, VALS(wme_acs), 0x0C00,
19365 {&hf_ieee80211_qos_qap_buf_load,
19366 {"QAP Buffered Load", "wlan.qos.qap_buf_load",
19367 FT_UINT16, BASE_DEC, NULL, 0xF000,
19370 {&hf_ieee80211_qos_txop_dur_req,
19371 {"TXOP Duration Requested", "wlan.qos.txop_dur_req",
19372 FT_UINT16, BASE_DEC, NULL, 0xFF00,
19375 {&hf_ieee80211_qos_queue_size,
19376 {"Queue Size", "wlan.qos.queue_size",
19377 FT_UINT16, BASE_DEC, NULL, 0xFF00,
19380 {&hf_ieee80211_fcs,
19381 {"Frame check sequence", "wlan.fcs",
19382 FT_UINT32, BASE_HEX, NULL, 0,
19383 "Frame Check Sequence (FCS)", HFILL }},
19385 {&hf_ieee80211_fcs_status,
19386 {"FCS Status", "wlan.fcs.status",
19387 FT_UINT8, BASE_NONE, VALS(proto_checksum_vals), 0x0,
19390 {&hf_ieee80211_fragment_overlap,
19391 {"Fragment overlap", "wlan.fragment.overlap",
19392 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
19393 "Fragment overlaps with other fragments", HFILL }},
19395 {&hf_ieee80211_fragment_overlap_conflict,
19396 {"Conflicting data in fragment overlap", "wlan.fragment.overlap.conflict",
19397 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
19398 "Overlapping fragments contained conflicting data", HFILL }},
19400 {&hf_ieee80211_fragment_multiple_tails,
19401 {"Multiple tail fragments found", "wlan.fragment.multipletails",
19402 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
19403 "Several tails were found when defragmenting the packet", HFILL }},
19405 {&hf_ieee80211_fragment_too_long_fragment,
19406 {"Fragment too long", "wlan.fragment.toolongfragment",
19407 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
19408 "Fragment contained data past end of packet", HFILL }},
19410 {&hf_ieee80211_fragment_error,
19411 {"Defragmentation error", "wlan.fragment.error",
19412 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
19413 "Defragmentation error due to illegal fragments", HFILL }},
19415 {&hf_ieee80211_fragment_count,
19416 {"Fragment count", "wlan.fragment.count",
19417 FT_UINT32, BASE_DEC, NULL, 0x0,
19420 {&hf_ieee80211_fragment,
19421 {"802.11 Fragment", "wlan.fragment",
19422 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
19425 {&hf_ieee80211_fragments,
19426 {"802.11 Fragments", "wlan.fragments",
19427 FT_NONE, BASE_NONE, NULL, 0x0,
19430 {&hf_ieee80211_reassembled_in,
19431 {"Reassembled 802.11 in frame", "wlan.reassembled_in",
19432 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
19433 "This 802.11 packet is reassembled in this frame", HFILL }},
19435 {&hf_ieee80211_reassembled_length,
19436 {"Reassembled 802.11 length", "wlan.reassembled.length",
19437 FT_UINT32, BASE_DEC, NULL, 0x0,
19438 "The total length of the reassembled payload", HFILL }},
19440 {&hf_ieee80211_wep_iv,
19441 {"Initialization Vector", "wlan.wep.iv",
19442 FT_UINT24, BASE_HEX, NULL, 0,
19445 {&hf_ieee80211_wep_iv_weak,
19446 {"Weak IV", "wlan.wep.weakiv",
19447 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
19450 {&hf_ieee80211_tkip_extiv,
19451 {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv",
19452 FT_STRING, BASE_NONE, NULL, 0,
19453 "TKIP Extended Initialization Vector", HFILL }},
19455 {&hf_ieee80211_ccmp_extiv,
19456 {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv",
19457 FT_STRING, BASE_NONE, NULL, 0,
19458 "CCMP Extended Initialization Vector", HFILL }},
19460 {&hf_ieee80211_wep_key,
19461 {"Key Index", "wlan.wep.key",
19462 FT_UINT8, BASE_DEC, NULL, 0,
19465 {&hf_ieee80211_wep_icv,
19466 {"WEP ICV", "wlan.wep.icv",
19467 FT_UINT32, BASE_HEX, NULL, 0,
19470 {&hf_ieee80211_fc_analysis_pmk,
19471 {"PMK", "wlan.analysis.pmk",
19472 FT_STRING, BASE_NONE, NULL, 0x0,
19475 {&hf_ieee80211_fc_analysis_tk,
19476 {"TK", "wlan.analysis.tk",
19477 FT_STRING, BASE_NONE, NULL, 0x0,
19480 {&hf_ieee80211_fc_analysis_gtk,
19481 {"GTK", "wlan.analysis.gtk",
19482 FT_STRING, BASE_NONE, NULL, 0x0,
19485 {&hf_ieee80211_block_ack_request_control,
19486 {"Block Ack Request (BAR) Control", "wlan.bar.control",
19487 FT_UINT16, BASE_HEX, NULL, 0,
19490 {&hf_ieee80211_block_ack_control,
19491 {"Block Ack Request Control", "wlan.ba.control",
19492 FT_UINT16, BASE_HEX, NULL, 0,
19495 {&hf_ieee80211_block_ack_control_ack_policy,
19496 {"BAR Ack Policy", "wlan.ba.control.ackpolicy",
19497 FT_BOOLEAN, 16, TFS(&ieee80211_block_ack_control_ack_policy_flag), 0x01,
19498 "Block Ack Request (BAR) Ack Policy", HFILL }},
19500 {&hf_ieee80211_block_ack_control_multi_tid,
19501 {"Multi-TID", "wlan.ba.control.multitid",
19502 FT_BOOLEAN, 16, 0, 0x02,
19503 "Multi-Traffic Identifier (TID)", HFILL }},
19505 {&hf_ieee80211_block_ack_control_compressed_bitmap,
19506 {"Compressed Bitmap", "wlan.ba.control.cbitmap",
19507 FT_BOOLEAN, 16, 0, 0x04,
19510 {&hf_ieee80211_block_ack_control_reserved,
19511 {"Reserved", "wlan.ba.control.reserved",
19512 FT_UINT16, BASE_HEX, NULL, 0x0ff8,
19515 {&hf_ieee80211_block_ack_control_basic_tid_info,
19516 {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
19517 FT_UINT16, BASE_HEX, NULL, 0xf000,
19518 "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL }},
19520 {&hf_ieee80211_block_ack_control_compressed_tid_info,
19521 {"TID for which a BlockAck frame is requested", "wlan.bar.compressed.tidinfo",
19522 FT_UINT16, BASE_HEX, NULL, 0xf000,
19523 "Traffic Identifier (TID) for which a BlockAck frame is requested", HFILL }},
19525 {&hf_ieee80211_block_ack_control_multi_tid_info,
19526 {"Number of TIDs Present", "wlan.ba.mtid.tidinfo",
19527 FT_UINT16, BASE_HEX, NULL, 0xf000,
19528 "Number of Traffic Identifiers (TIDs) Present", HFILL }},
19530 {&hf_ieee80211_block_ack_multi_tid_info,
19531 {"Traffic Identifier (TID) Info", "wlan.ba.mtid.tid",
19532 FT_UINT8, BASE_DEC, 0, 0,
19535 {&hf_ieee80211_block_ack_multi_tid_reserved,
19536 {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
19537 FT_UINT16, BASE_HEX, 0, 0x0fff,
19540 {&hf_ieee80211_block_ack_multi_tid_value,
19541 {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
19542 FT_UINT16, BASE_HEX, 0, 0xf000,
19545 {&hf_ieee80211_block_ack_request_type,
19546 {"Block Ack Request Type", "wlan.bar.type",
19547 FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_request_type_flags), 0x06,
19548 "Block Ack Request (BAR) Type", HFILL }},
19550 {&hf_ieee80211_block_ack_type,
19551 {"Block Ack Type", "wlan.ba.type",
19552 FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_type_flags), 0x06,
19555 {&hf_ieee80211_block_ack_bitmap,
19556 {"Block Ack Bitmap", "wlan.ba.bm",
19557 FT_BYTES, BASE_NONE, NULL, 0,
19560 /* Used for Extended compressed BlockAck */
19561 {&hf_ieee80211_block_ack_RBUFCAP,
19562 {"Block Ack RBUFCAP", "wlan.ba.RBUFCAP",
19563 FT_BOOLEAN, BASE_DEC, NULL, 0,
19566 {&hf_ieee80211_block_ack_bitmap_missing_frame,
19567 {"Missing frame", "wlan.ba.bm.missing_frame",
19568 FT_UINT32, BASE_DEC, NULL, 0,
19571 {&hf_ieee80211_beamform_feedback_seg_retrans_bitmap,
19572 {"Feedback segment Retansmission Bitmap", "wlan.beamform.feedback_seg_retrans_bitmap",
19573 FT_UINT8, BASE_HEX, NULL, 0,
19576 {&hf_ieee80211_vht_ndp_annc_token,
19577 {"Sounding Dialog Token", "wlan.vht_ndp.token",
19578 FT_UINT8, BASE_HEX, NULL, 0,
19581 {&hf_ieee80211_vht_ndp_annc_token_number,
19582 {"Sounding Dialog Token Number", "wlan.vht_ndp.token.number",
19583 FT_UINT8, BASE_DEC, NULL, 0xFC,
19586 {&hf_ieee80211_vht_ndp_annc_token_reserved,
19587 {"Reserved", "wlan.vht_ndp.token.reserved",
19588 FT_UINT8, BASE_HEX, NULL, 0x03,
19591 {&hf_ieee80211_vht_ndp_annc_sta_info,
19592 {"STA Info", "wlan.vht_ndp.sta_info",
19593 FT_UINT16, BASE_HEX, NULL, 0,
19596 {&hf_ieee80211_vht_ndp_annc_sta_info_aid12,
19597 {"AID12", "wlan.vht_ndp.sta_info.aid12",
19598 FT_UINT16, BASE_HEX, NULL, 0x0FFF,
19599 "12 least significant bits of the AID of the target STA", HFILL }},
19601 {&hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
19602 {"Feedback Type", "wlan.vht_ndp.sta_info.feedback_type",
19603 FT_BOOLEAN, 16, TFS(&vht_ndp_annc_sta_info_feedback_type), 0x1000,
19606 {&hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
19607 {"Nc Index", "wlan.vht_ndp.sta_info.nc_index",
19608 FT_UINT16, BASE_DEC, VALS(num_plus_one_3bit_flag), 0xE000,
19611 {&hf_ieee80211_vht_ndp_annc_sta_info_reserved,
19612 {"Reserved", "wlan.vht_ndp.sta_info.reserved",
19613 FT_UINT16, BASE_HEX, NULL, 0xE000,
19616 {&hf_ieee80211_data_encap_payload_type,
19617 {"Payload Type", "wlan.data_encap.payload_type",
19618 FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types), 0,
19621 {&hf_ieee80211_ff_tdls_action_code,
19622 {"Action code", "wlan.fixed.action_code",
19623 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tdls_action_codes_ext, 0,
19624 "Management action code", HFILL }},
19626 {&hf_ieee80211_ff_target_channel,
19627 {"Target Channel", "wlan.fixed.target_channel",
19628 FT_UINT8, BASE_DEC, NULL, 0,
19631 {&hf_ieee80211_ff_operating_class,
19632 {"Operating Class", "wlan.fixed.operating_class",
19633 FT_UINT8, BASE_DEC, NULL, 0,
19636 {&hf_ieee80211_ff_wnm_action_code,
19637 {"Action code", "wlan.fixed.action_code",
19638 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &wnm_action_codes_ext, 0,
19639 "Management action code", HFILL }},
19641 {&hf_ieee80211_ff_unprotected_wnm_action_code,
19642 {"Action code", "wlan.fixed.action_code",
19643 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &unprotected_wnm_action_codes_ext, 0,
19644 "Management action code", HFILL }},
19646 {&hf_ieee80211_ff_key_data,
19647 {"Key Data", "wlan.fixed.key_data",
19648 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
19650 {&hf_ieee80211_ff_key_data_length,
19651 {"Key Data Length", "wlan.fixed.key_data_length",
19652 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
19654 {&hf_ieee80211_ff_wnm_notification_type,
19655 {"WNM-Notification type", "wlan.fixed.wnm_notification_type",
19656 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &wnm_notification_types_ext, 0,
19659 {&hf_ieee80211_ff_rm_action_code,
19660 {"Action code", "wlan.rm.action_code",
19661 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &rm_action_codes_ext, 0,
19662 "Radio Measurement Action", HFILL }},
19664 {&hf_ieee80211_ff_rm_dialog_token,
19665 {"Dialog token", "wlan.rm.dialog_token",
19666 FT_UINT8, BASE_DEC, NULL, 0,
19667 "Non-zero Dialog Token identifies request/report transaction", HFILL }},
19669 {&hf_ieee80211_ff_rm_repetitions,
19670 {"Repetitions", "wlan.rm.repetitions",
19671 FT_UINT16, BASE_DEC, NULL, 0,
19672 "Numer of Repetitions, 65535 indicates repeat until cancellation", HFILL }},
19674 {&hf_ieee80211_ff_rm_tx_power,
19675 {"Transmit Power Used", "wlan.rm.tx_power",
19676 FT_INT8, BASE_DEC, NULL, 0,
19679 {&hf_ieee80211_ff_rm_max_tx_power,
19680 {"Max Transmit Power", "wlan.rm.max_tx_power",
19681 FT_INT8, BASE_DEC, NULL, 0,
19684 {&hf_ieee80211_ff_tpc,
19685 {"TPC Report", "wlan.rm.tpc",
19686 FT_NONE, BASE_NONE, NULL, 0,
19689 {&hf_ieee80211_ff_tpc_element_id,
19690 {"TPC Element ID", "wlan.rm.tpc.element_id",
19691 FT_UINT8, BASE_DEC, NULL, 0,
19694 {&hf_ieee80211_ff_tpc_length,
19695 {"TPC Length", "wlan.rm.tpc.length",
19696 FT_UINT8, BASE_DEC, NULL, 0,
19697 "Length of TPC Report element (always 2)", HFILL }},
19699 {&hf_ieee80211_ff_tpc_tx_power,
19700 {"TPC Transmit Power", "wlan.rm.tpc.tx_power",
19701 FT_INT8, BASE_DEC, NULL, 0,
19704 {&hf_ieee80211_ff_tpc_link_margin,
19705 {"TPC Link Margin", "wlan.rm.tpc.link_margin",
19706 FT_INT8, BASE_DEC, NULL, 0,
19709 {&hf_ieee80211_ff_rm_rx_antenna_id,
19710 {"Receive Antenna ID", "wlan.rm.rx_antenna_id",
19711 FT_UINT8, BASE_DEC, NULL, 0,
19714 {&hf_ieee80211_ff_rm_tx_antenna_id,
19715 {"Transmit Antenna ID", "wlan.rm.tx_antenna_id",
19716 FT_UINT8, BASE_DEC, NULL, 0,
19719 {&hf_ieee80211_ff_rm_rcpi,
19720 {"Received Channel Power", "wlan.rm.rcpi",
19721 FT_UINT8, BASE_DEC, NULL, 0,
19724 {&hf_ieee80211_ff_rm_rsni,
19725 {"Received Signal to noise indication", "wlan.rm.rsni",
19726 FT_UINT8, BASE_DEC, NULL, 0,
19729 {&hf_ieee80211_ff_request_mode_pref_cand,
19730 {"Preferred Candidate List Included", "wlan.fixed.request_mode.pref_cand",
19731 FT_UINT8, BASE_DEC, NULL, 0x01,
19734 {&hf_ieee80211_ff_request_mode_abridged,
19735 {"Abridged", "wlan.fixed.request_mode.abridged",
19736 FT_UINT8, BASE_DEC, NULL, 0x02,
19739 {&hf_ieee80211_ff_request_mode_disassoc_imminent,
19740 {"Disassociation Imminent", "wlan.fixed.request_mode.disassoc_imminent",
19741 FT_UINT8, BASE_DEC, NULL, 0x04,
19744 {&hf_ieee80211_ff_request_mode_bss_term_included,
19745 {"BSS Termination Included", "wlan.fixed.request_mode.bss_term_included",
19746 FT_UINT8, BASE_DEC, NULL, 0x08,
19749 {&hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
19750 {"ESS Disassociation Imminent", "wlan.fixed.request_mode.ess_disassoc_imminent",
19751 FT_UINT8, BASE_DEC, NULL, 0x10,
19754 {&hf_ieee80211_ff_disassoc_timer,
19755 {"Disassociation Timer", "wlan.fixed.disassoc_timer",
19756 FT_UINT16, BASE_DEC, NULL, 0,
19759 {&hf_ieee80211_ff_bss_termination_delay,
19760 {"BSS Termination Delay", "wlan.fixed.bss_termination_delay",
19761 FT_UINT8, BASE_DEC, NULL, 0,
19764 {&hf_ieee80211_ff_bss_transition_status_code,
19765 {"BSS Transition Status Code", "wlan.fixed.bss_transition_status_code",
19766 FT_UINT8, BASE_DEC, NULL, 0,
19769 {&hf_ieee80211_ff_validity_interval,
19770 {"Validity Interval", "wlan.fixed.validity_interval",
19771 FT_UINT8, BASE_DEC, NULL, 0,
19774 {&hf_ieee80211_ff_bss_termination_duration,
19775 {"BSS Termination Duration", "wlan.fixed.bss_termination_duration",
19776 FT_BYTES, BASE_NONE, NULL, 0,
19779 {&hf_ieee80211_ff_url_len,
19780 {"Session Information URL Length",
19781 "wlan.fixed.session_information.url_length",
19782 FT_UINT8, BASE_DEC, NULL, 0,
19785 {&hf_ieee80211_ff_url,
19786 {"Session Information URL", "wlan.fixed.session_information.url",
19787 FT_STRING, BASE_NONE, NULL, 0,
19790 {&hf_ieee80211_ff_target_bss,
19791 {"BSS Transition Target BSS", "wlan.fixed.bss_transition_target_bss",
19792 FT_ETHER, BASE_NONE, NULL, 0,
19795 {&hf_ieee80211_ff_bss_transition_candidate_list_entries,
19796 {"BSS Transition Candidate List Entries", "wlan.fixed.bss_transition_candidate_list_entries",
19797 FT_BYTES, BASE_NONE, NULL, 0,
19801 {&hf_ieee80211_cf_response_offset,
19802 {"Response Offset", "wlan.res_offset",
19803 FT_UINT16, BASE_DEC, NULL, 0,
19806 {&hf_ieee80211_grant_ack_reserved,
19807 {"Reserved", "wlan.grant_ack.reserved",
19808 FT_BYTES, BASE_NONE, NULL, 0,
19811 {&hf_ieee80211_ff_dynamic_allocation,
19812 {"Dynamic Allocation", "wlan.dynamic_allocation",
19813 FT_UINT40, BASE_HEX, NULL, 0,
19816 {&hf_ieee80211_ff_TID,
19817 {"TID", "wlan.dynamic_allocation.tid",
19818 FT_UINT40, BASE_DEC, NULL, 0x000000000F,
19821 {&hf_ieee80211_ff_alloc_type,
19822 {"Allocation Type", "wlan.dynamic_allocation.alloc_type",
19823 FT_UINT40, BASE_DEC, NULL, 0x000000070,
19826 {&hf_ieee80211_ff_src_aid,
19827 {"Source AID", "wlan.dynamic_allocation.src_aid",
19828 FT_UINT40, BASE_DEC, NULL, 0x0000007F80,
19831 {&hf_ieee80211_ff_dest_aid,
19832 {"Destination AID", "wlan.dynamic_allocation.dest_aid",
19833 FT_UINT40, BASE_DEC, NULL, 0x00007f8000,
19836 {&hf_ieee80211_ff_alloc_duration,
19837 {"Allocation Duration", "wlan.dynamic_allocation.alloc_duration",
19838 FT_UINT40, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom), 0x7FFF800000,
19841 {&hf_ieee80211_ff_b39,
19842 {"Reserved (b39)", "wlan.dynamic_allocation.b39",
19843 FT_UINT40, BASE_HEX, NULL, 0x8000000000,
19846 {&hf_ieee80211_ff_ssw,
19847 {"Sector Sweep", "wlan.ssw",
19848 FT_UINT24, BASE_HEX, NULL, 0,
19851 {&hf_ieee80211_ff_ssw_direction,
19852 {"Sector Sweep Direction", "wlan.ssw.direction",
19853 FT_BOOLEAN, 24, TFS(&ieee80211_cf_ssw_direction), 0x000001,
19856 {&hf_ieee80211_ff_ssw_cdown,
19857 {"Sector Sweep CDOWN", "wlan.ssw.cdown",
19858 FT_UINT24, BASE_DEC, NULL, 0x0003fe,
19861 {&hf_ieee80211_ff_ssw_sector_id,
19862 {"Sector Sweep Sector ID", "wlan.ssw.sector_id",
19863 FT_UINT24, BASE_DEC, NULL, 0x00fc00,
19866 {&hf_ieee80211_ff_ssw_dmg_ant_id,
19867 {"Sector Sweep DMG Antenna ID", "wlan.ssw.dmg_ant_id",
19868 FT_UINT24, BASE_DEC, NULL, 0x030000,
19871 {&hf_ieee80211_ff_ssw_rxss_len,
19872 {"Sector Sweep RXSS Length", "wlan.ssw.rxss_len",
19873 FT_UINT24, BASE_DEC, NULL, 0xfc0000,
19876 {&hf_ieee80211_ff_bf,
19877 {"Beam Forming", "wlan.bf",
19878 FT_UINT16, BASE_HEX, NULL, 0,
19881 {&hf_ieee80211_ff_bf_train,
19882 {"Beam Forming Training", "wlan.bf.train",
19883 FT_BOOLEAN, 16, NULL, 0x0001,
19886 {&hf_ieee80211_ff_bf_is_init,
19887 {"Beam Forming Is InitiatorTXSS", "wlan.bf.isInit",
19888 FT_BOOLEAN, 16, NULL, 0x0002,
19891 {&hf_ieee80211_ff_bf_is_resp,
19892 {"Beam Forming Is ResponderTXSS", "wlan.bf.isResp",
19893 FT_BOOLEAN, 16, NULL, 0x0004,
19896 {&hf_ieee80211_ff_bf_rxss_len,
19897 {"Beam Forming RXSS Length", "wlan.bf.rxss_len",
19898 FT_UINT16, BASE_DEC, NULL, 0x01f8,
19901 {&hf_ieee80211_ff_bf_rxss_rate,
19902 {"Beam Forming RXSS Rate", "wlan.bf.rxss_rate",
19903 FT_BOOLEAN, 16, NULL, 0x0200,
19906 {&hf_ieee80211_ff_bf_b10b15,
19907 {"Reserved (B10-B15)", "wlan.bf.reserved",
19908 FT_UINT16, BASE_DEC, NULL, 0xFC00,
19911 {&hf_ieee80211_ff_bf_num_sectors,
19912 {"Beam Forming Total Number of Sectors", "wlan.bf.num_sectors",
19913 FT_UINT16, BASE_DEC, NULL, 0x03f8,
19916 {&hf_ieee80211_ff_bf_num_rx_dmg_ants,
19917 {"Beam Forming Number of DMG Antennas", "wlan.bf.num_dmg_ants",
19918 FT_UINT16, BASE_DEC, NULL, 0x0c00,
19921 {&hf_ieee80211_ff_bf_b12b15,
19922 {"Reserved (B12-B15)", "wlan.bf.reserved",
19923 FT_UINT16, BASE_DEC, NULL, 0xF000,
19926 {&hf_ieee80211_addr_nav_da,
19927 {"Destination address of STA that caused NAV update", "wlan.nav_da",
19928 FT_ETHER, BASE_NONE, NULL, 0,
19929 "DMG Destination Hardware Address", HFILL }},
19931 {&hf_ieee80211_addr_nav_sa,
19932 {"Source address of STA that caused NAV update", "wlan.nav_sa",
19933 FT_ETHER, BASE_NONE, NULL, 0,
19934 "DMG Source Hardware Address", HFILL }},
19936 {&hf_ieee80211_ff_sswf,
19937 {"Sector Sweep Feedback", "wlan.sswf",
19938 FT_UINT24, BASE_HEX, NULL, 0,
19941 {&hf_ieee80211_ff_sswf_total_sectors,
19942 {"Sector Sweep Feedback total number of sectors", "wlan.sswf.num_sectors",
19943 FT_UINT24, BASE_DEC, NULL, 0x0001ff,
19946 {&hf_ieee80211_ff_sswf_num_rx_dmg_ants,
19947 {"Sector Sweep Feedback Number of receive DMG Antennas", "wlan.sswf.num_dmg_ants",
19948 FT_UINT24, BASE_DEC, NULL, 0x000600,
19951 {&hf_ieee80211_ff_sswf_poll_required,
19952 {"Sector Sweep Feedback Poll required", "wlan.sswf.poll",
19953 FT_BOOLEAN, 24, NULL, 0x010000,
19956 {&hf_ieee80211_ff_sswf_reserved1,
19957 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
19958 FT_UINT24, BASE_HEX, NULL, 0x00F800,
19961 {&hf_ieee80211_ff_sswf_reserved2,
19962 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
19963 FT_UINT24, BASE_HEX, NULL, 0xFE0000,
19966 {&hf_ieee80211_ff_sswf_sector_select,
19967 {"Sector Sweep Feedback Sector Select", "wlan.sswf.sector_select",
19968 FT_UINT24, BASE_DEC, NULL, 0x00003F,
19971 {&hf_ieee80211_ff_sswf_dmg_antenna_select,
19972 {"Sector Sweep Feedback DMG Antenna Select", "wlan.sswf.dmg_antenna_select",
19973 FT_UINT24, BASE_DEC, NULL, 0x0001C0,
19976 {&hf_ieee80211_ff_sswf_snr_report,
19977 {"Sector Sweep Feedback SNR Report", "wlan.sswf.snr_report",
19978 FT_UINT24, BASE_DEC, NULL, 0x00FE00,
19982 {&hf_ieee80211_ff_brp,
19983 {"BRP Request", "wlan.brp",
19984 FT_UINT32, BASE_HEX, NULL, 0,
19987 {&hf_ieee80211_ff_brp_L_RX,
19988 {"BRP Request L-RX", "wlan.brp.l_rx",
19989 FT_UINT32, BASE_DEC, NULL, 0x0000001f,
19992 {&hf_ieee80211_ff_brp_TX_TRN_REQ,
19993 {"BRP Request TX-TRN-REQ", "wlan.brp.tx_trn_req",
19994 FT_BOOLEAN, 32, NULL, 0x00000020,
19997 {&hf_ieee80211_ff_brp_MID_REQ,
19998 {"BRP Request MID-REQ", "wlan.brp.mid_req",
19999 FT_BOOLEAN, 32, NULL, 0x00000040,
20002 {&hf_ieee80211_ff_brp_BC_REQ,
20003 {"BRP Request BC-REQ", "wlan.brp.bc_req",
20004 FT_BOOLEAN, 32, NULL, 0x00000080,
20007 {&hf_ieee80211_ff_brp_MID_GRANT,
20008 {"BRP Request MID-GRANT", "wlan.brp.mid_grant",
20009 FT_BOOLEAN, 32, NULL, 0x00000100,
20012 {&hf_ieee80211_ff_brp_BC_GRANT,
20013 {"BRP Request BC-GRANT", "wlan.brp.bc_grant",
20014 FT_BOOLEAN, 32, NULL, 0x00000200,
20017 {&hf_ieee80211_ff_brp_chan_FBCK_CAP,
20018 {"BRP Request Chan FBCK-CAP", "wlan.brp.chan_fbck_cap",
20019 FT_BOOLEAN, 32, NULL, 0x00000400,
20022 {&hf_ieee80211_ff_brp_tx_sector,
20023 {"BRP Request TX Sector ID", "wlan.brp.tx_sector_id",
20024 FT_UINT32, BASE_DEC, NULL, 0x0001f800,
20027 {&hf_ieee80211_ff_brp_other_aid,
20028 {"BRP Request Other AID", "wlan.brp.other_aid",
20029 FT_UINT32, BASE_DEC, NULL, 0x01fe0000,
20032 {&hf_ieee80211_ff_brp_tx_antenna,
20033 {"BRP Request TX Antenna ID", "wlan.brp.tx_antenna_id",
20034 FT_UINT32, BASE_DEC, NULL, 0x06000000,
20037 {&hf_ieee80211_ff_brp_reserved,
20038 {"BRP Request Reserved", "wlan.brp.reserved",
20039 FT_UINT32, BASE_HEX, NULL, 0xF8000000,
20042 {&hf_ieee80211_ff_blm,
20043 {"Beamformed Link Maintenance", "wlan.blm",
20044 FT_UINT8, BASE_HEX, NULL, 0,
20047 {&hf_ieee80211_ff_blm_unit_index,
20048 {"BeamLink Maintenance Uint Index", "wlan.blm.uint_index",
20049 FT_BOOLEAN, 8, NULL, 0x01,
20052 {&hf_ieee80211_ff_blm_maint_value,
20053 {"BeamLink Maintenance Value", "wlan.blm.value",
20054 FT_UINT8, BASE_DEC, NULL, 0x7e,
20057 {&hf_ieee80211_ff_blm_is_master,
20058 {"BeamLink Is Master", "wlan.blm.is_master",
20059 FT_BOOLEAN, 8, NULL, 0x80,
20062 {&hf_ieee80211_ff_bic,
20063 {"Beacon Interval Control", "wlan.bic",
20064 FT_UINT48, BASE_HEX, NULL, 0,
20067 {&hf_ieee80211_ff_bic_cc_present,
20068 {"Clustering Control Present", "wlan.bic.cc",
20069 FT_BOOLEAN, 48, NULL, 0x000000000001,
20072 {&hf_ieee80211_ff_bic_discovery_mode,
20073 {"Discovery Mode", "wlan.bic.discovery_mode",
20074 FT_BOOLEAN, 48, NULL, 0x000000000002,
20077 {&hf_ieee80211_ff_bic_next_beacon,
20078 {"Next Beacon", "wlan.bic.next_beacon",
20079 FT_UINT48, BASE_DEC, NULL, 0x00000000003c,
20083 {&hf_ieee80211_ff_bic_ati_present,
20084 {"ATI Present", "wlan.bic.ati",
20085 FT_BOOLEAN, 48, NULL, 0x000000000040,
20088 {&hf_ieee80211_ff_bic_abft_len,
20089 {"A-BFT length", "wlan.bic.abft_len",
20090 FT_UINT48, BASE_DEC, NULL, 0x000000000380,
20093 {&hf_ieee80211_ff_bic_fss,
20094 {"FSS", "wlan.bic.fss",
20095 FT_UINT48, BASE_DEC, NULL, 0x000000003c00,
20098 {&hf_ieee80211_ff_bic_is_resp,
20099 {"Is TXSS Responder", "wlan.bic.is_responder",
20100 FT_BOOLEAN, 48, NULL, 0x000000004000,
20103 {&hf_ieee80211_ff_bic_next_abft,
20104 {"Next A-BFT", "wlan.bic.next_abft",
20105 FT_UINT48, BASE_DEC, NULL, 0x000000078000,
20108 {&hf_ieee80211_ff_bic_frag_txss,
20109 {"Fragmented TXSS", "wlan.bic.frag_txss",
20110 FT_BOOLEAN, 48, NULL, 0x000000080000,
20113 {&hf_ieee80211_ff_bic_txss_span,
20114 {"TXSS span", "wlan.bic.txss_span",
20115 FT_UINT48, BASE_DEC, NULL, 0x000007f00000,
20118 {&hf_ieee80211_ff_bic_NBI_abft,
20119 {"Number of Beacon Intervals that are needed to allocate A-BFT", "wlan.bic.NBI_abft",
20120 FT_UINT48, BASE_DEC, NULL, 0x00078000000,
20123 {&hf_ieee80211_ff_bic_abft_count,
20124 {"A-BFT Count", "wlan.bic.abft_count",
20125 FT_UINT48, BASE_DEC, NULL, 0x001f80000000,
20128 {&hf_ieee80211_ff_bic_nabft,
20129 {"Number of A-BFT's received from each Antenna", "wlan.bic.nabft",
20130 FT_UINT48, BASE_DEC, NULL, 0x07e000000000,
20133 {&hf_ieee80211_ff_bic_pcp,
20134 {"PCP Association Ready", "wlan.bic.pcp",
20135 FT_BOOLEAN, 48, NULL, 0x080000000000,
20138 {&hf_ieee80211_ff_bic_reserved,
20139 {"Reserved", "wlan.bic.reserved",
20140 FT_UINT48, BASE_HEX, NULL, 0xF00000000000,
20143 {&hf_ieee80211_ff_dmg_params,
20144 {"DMG Parameters", "wlan.dmg_params",
20145 FT_UINT8, BASE_HEX , NULL, 0,
20148 {&hf_ieee80211_ff_dmg_params_bss,
20149 {"BSS Type", "wlan.dmg_params.bss",
20150 FT_UINT8, BASE_DEC, VALS(bss_type), 0x03,
20153 {&hf_ieee80211_ff_dmg_params_cbap_only,
20154 {"CBAP Only", "wlan.dmp_params.cbap_only",
20155 FT_BOOLEAN, 8, NULL, 0x04,
20158 {&hf_ieee80211_ff_dmg_params_cbap_src,
20159 {"CBAP Source", "wlan.dmp_params.cbap_src",
20160 FT_BOOLEAN, 8, NULL, 0x08,
20163 {&hf_ieee80211_ff_dmg_params_privacy,
20164 {"DMG Privacy", "wlan.dmp_params.privacy",
20165 FT_BOOLEAN, 8, NULL, 0x10,
20168 {&hf_ieee80211_ff_dmg_params_policy,
20169 {"ECPAC Policy Enforced", "wlan.dmp_params.policy",
20170 FT_BOOLEAN, 8, NULL, 0x20,
20173 {&hf_ieee80211_ff_cc,
20174 {"Clustering Control", "wlan.cc",
20175 FT_UINT64, BASE_HEX , NULL, 0,
20178 {&hf_ieee80211_ff_cc_abft_resp_addr,
20179 {"A-BFT Responder Address", "wlan.cc.abft_resp_addr",
20180 FT_ETHER, BASE_NONE , NULL, 0,
20183 {&hf_ieee80211_ff_cc_sp_duration,
20184 {"Beacon SP Duration", "wlan.cc.sp_duration",
20185 FT_UINT8, BASE_DEC , NULL, 0,
20188 {&hf_ieee80211_ff_cc_cluster_id,
20189 {"Cluster ID", "wlan.cc.cluster_id",
20190 FT_UINT64, BASE_DEC , NULL, 0,
20193 {&hf_ieee80211_ff_cc_role,
20194 {"Cluster Member Role", "wlan.cc.rold",
20195 FT_UINT8, BASE_DEC , NULL, 0,
20198 {&hf_ieee80211_ff_cc_max_mem,
20199 {"Cluster MaxMem", "wlan.cc.max_mem",
20200 FT_UINT8, BASE_DEC , NULL, 0,
20203 {&hf_ieee80211_tag_relay_support,
20204 {"Relay Supportability", "wlan.relay_capabilities.relay_support",
20205 FT_BOOLEAN, 8, NULL, 0x01,
20208 {&hf_ieee80211_tag_relay_use,
20209 {"Relay Usability", "wlan.relay_capabilities.relay_use",
20210 FT_BOOLEAN, 8, NULL, 0x02,
20213 {&hf_ieee80211_tag_relay_permission,
20214 {"Relay Permission", "wlan.relay_capabilities.relay_permission",
20215 FT_BOOLEAN, 8, NULL, 0x04,
20218 {&hf_ieee80211_tag_AC_power,
20219 {"A/C Power", "wlan.relay_capabilities.AC_power",
20220 FT_BOOLEAN, 8, NULL, 0x08,
20223 {&hf_ieee80211_tag_relay_prefer,
20224 {"Relay Preference", "wlan.relay_capabilities.relay_prefer",
20225 FT_BOOLEAN, 8, NULL, 0x10,
20228 {&hf_ieee80211_tag_duplex,
20229 {"Duplex", "wlan.relay_capabilities.duplex",
20230 FT_UINT8, BASE_DEC, NULL, 0x60,
20233 {&hf_ieee80211_tag_cooperation,
20234 {"Cooperation", "wlan.relay_capabilities.cooperation",
20235 FT_BOOLEAN, 8, NULL, 0x80,
20239 {&hf_ieee80211_ff_rcsi,
20240 {"Relay Capable STA Info", "wlan.rcsi",
20241 FT_UINT24, BASE_HEX, NULL, 0,
20244 {&hf_ieee80211_ff_rcsi_aid,
20245 {"AID", "wlan.rcsi.aid",
20246 FT_UINT8, BASE_DEC, NULL, 0xff,
20250 {&hf_ieee80211_ff_band_id,
20251 {"Band ID", "wlan.band_id",
20252 FT_UINT8, BASE_DEC, VALS(band_id), 0xff,
20255 {&hf_ieee80211_tag_move,
20256 {"Move", "wlan.dmg_bss_param_change.move",
20257 FT_BOOLEAN, 8, NULL, 0x01,
20260 {&hf_ieee80211_tag_size,
20261 {"Size", "wlan.dmg_bss_param_change.size",
20262 FT_BOOLEAN, 8, NULL, 0x02,
20265 {&hf_ieee80211_tag_tbtt_offset,
20266 {"TBTT Offset", "wlan.dmg_bss_param_change.tbtt_offset",
20267 FT_UINT32, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom), 0xffffffff,
20270 {&hf_ieee80211_tag_bi_duration,
20271 {"BI Duration", "wlan.dmg_bss_param_change.bi_duration",
20272 FT_UINT16, BASE_DEC, NULL, 0xffff,
20275 {&hf_ieee80211_tag_dmg_capa_sta_addr,
20276 {"STA Address", "wlan.dmg_capa.sta_addr",
20277 FT_ETHER, BASE_NONE, NULL, 0,
20278 "STA_Address", HFILL }},
20280 {&hf_ieee80211_tag_dmg_capa_aid,
20281 {"AID", "wlan.dmg_capa.aid",
20282 FT_UINT16, BASE_DEC, NULL, 0,
20284 /* 8.4.2.127.2 DMG STA Capability Information field */
20285 {&hf_ieee80211_tag_reverse_direction, /* DMG STA capa, bits [0] */
20286 {"Reverse Direction", "wlan.dmg_capa.reverse_direction",
20287 FT_BOOLEAN, 24, NULL, GENMASK(0, 0),
20290 {&hf_ieee80211_tag_hlts, /* DMG STA capa, bits [1] */
20291 {"Higher Layer Timer Synchronization", "wlan.dmg_capa.htls",
20292 FT_BOOLEAN, 24, NULL, GENMASK(1, 1),
20295 {&hf_ieee80211_tag_tpc, /* DMG STA capa, bits [2] */
20296 {"TPC", "wlan.dmg_capa.tpc",
20297 FT_BOOLEAN, 24, NULL, GENMASK(2, 2),
20300 {&hf_ieee80211_tag_spsh, /* DMG STA capa, bits [3] */
20301 {"SPSH and Interference Mitigation", "wlan.dmg_capa.spsh",
20302 FT_BOOLEAN, 24, NULL, GENMASK(3, 3),
20305 {&hf_ieee80211_tag_rx_antenna, /* DMG STA capa, bits [4..5] */
20306 {"Number of RX DMG Antennas", "wlan.dmg_capa.num_rx",
20307 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_base_custom), GENMASK(5, 4),
20310 {&hf_ieee80211_tag_fast_link, /* DMG STA capa, bits [6] */
20311 {"Fast Link Adaptation", "wlan.dmg_capa.fast_link",
20312 FT_BOOLEAN, 24, NULL, GENMASK(6, 6),
20315 {&hf_ieee80211_tag_num_sectors, /* DMG STA capa, bits [7..13] */
20316 {"Total Number of Sectors", "wlan.dmg_capa.num_sectors",
20317 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_base_custom), GENMASK(13, 7),
20320 {&hf_ieee80211_tag_rxss_length, /* DMG STA capa, bits [14..19] */
20321 {"RXSS Length", "wlan.dmg_capa.rxss_len",
20322 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_mul_two_base_custom), GENMASK(19, 14),
20325 {&hf_ieee80211_tag_reciprocity, /* DMG STA capa, bits [20] */
20326 {"DMG Antenna Reciprocity", "wlan.dmg_capa.reciprocity",
20327 FT_BOOLEAN, 24, NULL, GENMASK(20, 20),
20329 /* DMG STA capa, A-MPDU params, bits [21..26] */
20330 {&hf_ieee80211_tag_max_ampdu_exp, /* DMG STA capa, bits [21..23] */
20331 {"Maximum A-MPDU Length Exponent", "wlan.dmg_capa.max_ampdu_exp",
20332 FT_UINT24, BASE_DEC, NULL, GENMASK(23, 21),
20335 {&hf_ieee80211_tag_min_mpdu_sapcing, /* DMG STA capa, bits [24..26] */
20336 {"Minimum MPDU Start Spacing", "wlan.dmg_capa.min_mpdu_spacing",
20337 FT_UINT24, BASE_DEC, NULL, GENMASK(26-24, 24-24),
20340 {&hf_ieee80211_tag_ba_flow_control , /* DMG STA capa, bits [27] */
20341 {"BA with Flow Control", "wlan.dmg_capa.bs_flow_ctrl",
20342 FT_BOOLEAN, 24, NULL, GENMASK(27-24, 27-24),
20344 /* DMG STA capa, supported MCS set, bits [28..51] */
20345 {&hf_ieee80211_tag_max_sc_rx_mcs, /* DMG STA capa, bits [28..32] */
20346 {"Maximum SC Rx MCS", "wlan.dmg_capa.max_sc_rx_mcs",
20347 FT_UINT24, BASE_DEC, NULL, GENMASK(32-24, 28-24),
20350 {&hf_ieee80211_tag_max_ofdm_rx_mcs, /* DMG STA capa, bits [33..37] */
20351 {"Maximum OFDM Rx MCS", "wlan.dmg_capa.max_ofdm_rx_mcs",
20352 FT_UINT24, BASE_DEC, NULL, GENMASK(37-24, 33-24),
20355 {&hf_ieee80211_tag_max_sc_tx_mcs, /* DMG STA capa, bits [38..42] */
20356 {"Maximum SC Tx MCS", "wlan.dmg_capa.max_sc_tx_mcs",
20357 FT_UINT24, BASE_DEC, NULL, GENMASK(42-24, 38-24),
20360 {&hf_ieee80211_tag_max_ofdm_tx_mcs, /* DMG STA capa, bits [43..47] */
20361 {"Maximum OFDM Tx MCS", "wlan.dmg_capa.max_ofdm_tx_mcs",
20362 FT_UINT24, BASE_DEC, NULL, GENMASK(47-24, 43-24),
20365 {&hf_ieee80211_tag_low_power_supported, /* DMG STA capa, bits [48] */
20366 {"Low Power SC PHY Supported", "wlan.dmg_capa.low_power_suuported",
20367 FT_BOOLEAN, 16, NULL, GENMASK(48-48, 48-48),
20370 {&hf_ieee80211_tag_code_rate, /* DMG STA capa, bits [49] */
20371 {"Code Rate 13/16", "wlan.dmg_capa.code_rate",
20372 FT_BOOLEAN, 16, NULL, GENMASK(49-48, 49-48),
20375 {&hf_ieee80211_tag_dtp, /* DMG STA capa, bits [52] */
20376 {"DTP Supported", "wlan.dmg_capa.dtp",
20377 FT_BOOLEAN, 16, NULL, GENMASK(52-48, 52-48),
20380 {&hf_ieee80211_tag_appdu_supp, /* DMG STA capa, bits [53] */
20381 {"A-PPDU Supported", "wlan.dmg_capa.appdu_supp",
20382 FT_BOOLEAN, 16, NULL, GENMASK(53-48, 53-48),
20385 {&hf_ieee80211_tag_heartbeat, /* DMG STA capa, bits [54] */
20386 {"HeartBeat", "wlan.dmg_capa.heartbeat",
20387 FT_BOOLEAN, 16, NULL, GENMASK(54-48, 54-48),
20390 {&hf_ieee80211_tag_other_aid, /* DMG STA capa, bits [55] */
20391 {"Supports Other_AID", "wlan.dmg_capa.other_aid",
20392 FT_BOOLEAN, 16, NULL, GENMASK(55-48, 55-48),
20395 {&hf_ieee80211_tag_pattern_recip, /* DMG STA capa, bits [56] */
20396 {"Antenna Pattern Reciprocity", "wlan.dmg_capa.pattern_recip",
20397 FT_BOOLEAN, 16, NULL, GENMASK(56-48, 56-48),
20400 {&hf_ieee80211_tag_heartbeat_elapsed, /* DMG STA capa, bits [57..59] */
20401 {"Heartbeat Elapsed Indication", "wlan.dmg_capa.heartbeat_elapsed",
20402 FT_UINT16, BASE_DEC, NULL, GENMASK(59-48, 57-48),
20405 {&hf_ieee80211_tag_grant_ack_supp, /* DMG STA capa, bits [60] */
20406 {"Grant ACK Supported", "wlan.dmg_capa.grant_ack_supp",
20407 FT_BOOLEAN, 16, NULL, GENMASK(60-48, 60-48),
20410 {&hf_ieee80211_tag_RXSSTxRate_supp, /* DMG STA capa, bits [61] */
20411 {"RXSSTxRate Supported", "wlan.dmg_capa.RXSSTxRate",
20412 FT_BOOLEAN, 16, NULL, GENMASK(61-48, 61-48),
20414 /* 8.4.2.127.3 DMG PCP/AP Capability Information field */
20415 {&hf_ieee80211_tag_pcp_tddti, /* DMG PCP/AP capa, bits [0] */
20416 {"TDDTI", "wlan.dmg_capa.pcp_tdtti",
20417 FT_BOOLEAN, 16, NULL, GENMASK(0, 0),
20420 {&hf_ieee80211_tag_pcp_PSA, /* DMG PCP/AP capa, bits [1] */
20421 {"Pseudo-static Allocations", "wlan.dmg_capa.pcp_psa",
20422 FT_BOOLEAN, 16, NULL, GENMASK(1, 1),
20425 {&hf_ieee80211_tag_pcp_handover, /* DMG PCP/AP capa, bits [2] */
20426 {"PDP Handover", "wlan.dmg_capa.pcp_handover",
20427 FT_BOOLEAN, 16, NULL, GENMASK(2, 2),
20430 {&hf_ieee80211_tag_pcp_max_assoc, /* DMG PCP/AP capa, bits [3..10] */
20431 {"Max Associated STA Number", "wlan.dmg_capa.pcp_max_assoc",
20432 FT_UINT16, BASE_DEC, NULL, GENMASK(10, 3),
20435 {&hf_ieee80211_tag_pcp_power_src, /* DMG PCP/AP capa, bits [11] */
20436 {"Power Source", "wlan.dmg_capa.pcp_power_src",
20437 FT_BOOLEAN, 16, NULL, GENMASK(11, 11),
20440 {&hf_ieee80211_tag_pcp_decenter, /* DMG PCP/AP capa, bits [12] */
20441 {"Decentralized PCP/AP Clustering", "wlan.dmg_capa.pcp_decenter",
20442 FT_BOOLEAN, 16, NULL, GENMASK(12, 12),
20445 {&hf_ieee80211_tag_pcp_forwarding, /* DMG PCP/AP capa, bits [13] */
20446 {"PCP Forwarding", "wlan.dmg_capa.pcp_forwarding",
20447 FT_BOOLEAN, 16, NULL, GENMASK(13, 13),
20450 {&hf_ieee80211_tag_pcp_center, /* DMG PCP/AP capa, bits [14] */
20451 {"Centralized PCP/AP Clustering", "wlan.dmg_capa.pcp_center",
20452 FT_BOOLEAN, 16, NULL, GENMASK(14, 14),
20455 {&hf_ieee80211_tag_PSRSI,
20456 {"PS Request Suspension Interval", "wlan.dmg_oper.psrsi",
20457 FT_UINT8, BASE_DEC, NULL, 0,
20460 {&hf_ieee80211_tag_min_BHI_duration,
20461 {"Min BHI Duration", "wlan.dmg_oper.min_BHI_duration",
20462 FT_UINT16, BASE_DEC, NULL, 0,
20465 {&hf_ieee80211_tag_brdct_sta_info_dur,
20466 {"Broadcast STA Info Duration", "wlan.dmg_oper.brdcst_sta_info_dur",
20467 FT_UINT8, BASE_DEC, NULL, 0,
20470 {&hf_ieee80211_tag_assoc_resp_confirm_time,
20471 {"Associated Response Confirm Time", "wlan.dmg_oper.assoc_resp_confirm_time",
20472 FT_UINT8, BASE_DEC, NULL, 0,
20475 {&hf_ieee80211_tag_min_pp_duration,
20476 {"Min PP Duration", "wlan.dmg_oper.min_pp_duration",
20477 FT_UINT8, BASE_DEC, NULL, 0,
20480 {&hf_ieee80211_tag_SP_idle_timeout,
20481 {"SP Idle Timeout", "wlan.dmg_oper.SP_idle_timeout",
20482 FT_UINT8, BASE_DEC, NULL, 0,
20485 {&hf_ieee80211_tag_max_lost_beacons,
20486 {"Max Lost Beacons", "wlan.dmg_oper.max_lost_beacons",
20487 FT_UINT8, BASE_DEC, NULL, 0,
20490 {&hf_ieee80211_tag_type,
20491 {"Type", "wlan.sctor_id.type",
20492 FT_UINT32, BASE_HEX, NULL, 0x0000000f,
20495 {&hf_ieee80211_tag_tap1,
20496 {"Tap 1", "wlan.sctor_id.tap1",
20497 FT_UINT32, BASE_HEX, NULL, 0x000003f0,
20500 {&hf_ieee80211_tag_state1,
20501 {"State 1", "wlan.sctor_id.state1",
20502 FT_UINT32, BASE_HEX, NULL, 0x0000fc00,
20505 {&hf_ieee80211_tag_tap2,
20506 {"Tap 2", "wlan.sctor_id.tap2",
20507 FT_UINT32, BASE_HEX, NULL, 0x00ff0000,
20510 {&hf_ieee80211_tag_state2,
20511 {"State 2", "wlan.sctor_id.state2",
20512 FT_UINT32, BASE_HEX, NULL, 0xff000000,
20515 {&hf_ieee80211_tag_allocation_id,
20516 {"Allocation ID", "wlan.ext_sched.alloc_id",
20517 FT_UINT16, BASE_DEC, NULL, 0x000f,
20520 {&hf_ieee80211_tag_allocation_type,
20521 {"Allocation Type", "wlan.ext_sched.alloc_type",
20522 FT_UINT16, BASE_DEC, VALS(allocation_type), 0x0070,
20525 {&hf_ieee80211_tag_pseudo_static,
20526 {"Pseudo-static", "wlan.ext_sched.p_static",
20527 FT_BOOLEAN, 16, NULL, 0x0080,
20530 {&hf_ieee80211_tag_truncatable,
20531 {"Truncatable", "wlan.ext_sched.truncatable",
20532 FT_BOOLEAN, 16, NULL, 0x0100,
20535 {&hf_ieee80211_tag_extendable,
20536 {"Extenedable", "wlan.ext_sched.extendable",
20537 FT_BOOLEAN, 16, NULL, 0x0200,
20540 {&hf_ieee80211_tag_pcp_active,
20541 {"PCP Active", "wlan.ext_sched.pcp_active",
20542 FT_BOOLEAN, 16, NULL, 0x0400,
20545 {&hf_ieee80211_tag_lp_sc_used,
20546 {"LP SC Used", "wlan.ext_sched.lp_sc_used",
20547 FT_BOOLEAN, 16, NULL, 0x0800,
20550 {&hf_ieee80211_tag_src_aid,
20551 {"Source AID", "wlan.ext_sched.src_id",
20552 FT_UINT8, BASE_DEC, NULL, 0xff,
20555 {&hf_ieee80211_tag_dest_aid,
20556 {"Destination AID", "wlan.ext_sched.dest_id",
20557 FT_UINT8, BASE_DEC, NULL, 0xff,
20560 {&hf_ieee80211_tag_alloc_start,
20561 {"Allocation Start", "wlan.ext_sched.alloc_start",
20562 FT_UINT32, BASE_DEC, NULL, 0,
20565 {&hf_ieee80211_tag_alloc_block_duration,
20566 {"Allocation Block Duration", "wlan.ext_sched.block_duration",
20567 FT_UINT16, BASE_DEC, NULL, 0xffff,
20570 {&hf_ieee80211_tag_num_blocks,
20571 {"Number of Blocks", "wlan.ext_sched.num_blocks",
20572 FT_UINT8, BASE_DEC, NULL, 0xff,
20575 {&hf_ieee80211_tag_alloc_block_period,
20576 {"Allocation Block Period", "wlan.ext_sched.alloc_block_period",
20577 FT_UINT16, BASE_DEC, NULL, 0xffff,
20580 {&hf_ieee80211_tag_aid,
20581 {"AID", "wlan.sta_avail.aid",
20582 FT_UINT16, BASE_DEC, NULL, 0x00ff,
20585 {&hf_ieee80211_tag_cbap,
20586 {"CBAP", "wlan.sta_avail.cbap",
20587 FT_BOOLEAN, 16, NULL, 0x0100,
20590 {&hf_ieee80211_tag_pp_avail,
20591 {"PP Available", "wlan.sta_avail.pp_avail",
20592 FT_BOOLEAN, 16, NULL, 0x0200,
20595 {&hf_ieee80211_tag_next_ati_start_time,
20596 {"Start Time", "wlan.next_ati.start_time",
20597 FT_UINT32, BASE_DEC, NULL, 0,
20600 {&hf_ieee80211_tag_next_ati_duration,
20601 {"ATI Duration", "wlan.next_ati.duration",
20602 FT_UINT16, BASE_DEC, NULL, 0xffff,
20605 {&hf_ieee80211_tag_old_bssid,
20606 {"Old BSSID", "wlan.pcp_handover.old_bssid",
20607 FT_ETHER, BASE_NONE, NULL, 0,
20608 "OLD_BSSID", HFILL }},
20610 {&hf_ieee80211_tag_new_pcp_addr,
20611 {"New PCP Address", "wlan.pcp_handover.new_pcp_addr",
20612 FT_ETHER, BASE_NONE, NULL, 0,
20613 "New_PCP_Address", HFILL }},
20615 {&hf_ieee80211_tag_bssid,
20616 {"BSSID", "wlan.quiet_res.bssid",
20617 FT_ETHER, BASE_NONE, NULL, 0,
20618 "BSS-ID", HFILL }},
20620 {&hf_ieee80211_tag_duplex_relay,
20621 {"Duplex", "wlan.relay_capabilities.duplex",
20622 FT_UINT8, BASE_DEC, NULL, 0x01,
20625 {&hf_ieee80211_tag_cooperation_relay,
20626 {"Cooperation", "wlan.relay_capabilities.cooperation",
20627 FT_BOOLEAN, 8, NULL, 0x02,
20630 {&hf_ieee80211_tag_tx_mode,
20631 {"TX-Mode", "wlan.realy_trans_param.tx_mode",
20632 FT_BOOLEAN, 8, NULL, 0x04,
20635 {&hf_ieee80211_tag_link_change_interval,
20636 {"Link Change Interval", "wlan.realy_trans_param.link_change_interval",
20637 FT_UINT8, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom), 0xff,
20640 {&hf_ieee80211_tag_data_sensing_time,
20641 {"Data Sensing Time", "wlan.realy_trans_param.data_sensing_time",
20642 FT_UINT8, BASE_DEC, NULL, 0xff,
20645 {&hf_ieee80211_tag_first_period,
20646 {"First Period", "wlan.realy_trans_param.first_period",
20647 FT_UINT16, BASE_DEC, NULL, 0xffff,
20650 {&hf_ieee80211_tag_second_period,
20651 {"Second Period", "wlan.realy_trans_param.second_period",
20652 FT_UINT16, BASE_DEC, NULL, 0xffff,
20655 {&hf_ieee80211_tag_initiator,
20656 {"Initiator", "wlan.beam_refine.initiator",
20657 FT_BOOLEAN, 40, NULL, 0x0000000001,
20660 {&hf_ieee80211_tag_tx_train_res,
20661 {"TX-train-response", "wlan.beam_refine.tx_train_res",
20662 FT_BOOLEAN, 40, NULL, 0x0000000002,
20665 {&hf_ieee80211_tag_rx_train_res,
20666 {"RX-train-response", "wlan.beam_refine.rx_train_res",
20667 FT_BOOLEAN, 40, NULL, 0x0000000004,
20670 {&hf_ieee80211_tag_tx_trn_ok,
20671 {"TX-TRN-OK", "wlan.beam_refine.tx_trn_ok",
20672 FT_BOOLEAN, 40, NULL, 0x0000000008,
20675 {&hf_ieee80211_tag_txss_fbck_req,
20676 {"TXSS-FBCK-REQ", "wlan.beam_refine.txss_fbck_req",
20677 FT_BOOLEAN, 40, NULL, 0x0000000010,
20680 {&hf_ieee80211_tag_bs_fbck,
20681 {"BS-FBCK", "wlan.beam_refine.bs_fbck",
20682 FT_UINT40, BASE_DEC, NULL, 0x00000007e0,
20685 {&hf_ieee80211_tag_bs_fbck_antenna_id,
20686 {"BS-FBCK Anetenna ID", "wlan.beam_refine.bs_fbck_antenna_id",
20687 FT_UINT40, BASE_DEC, NULL, 0x0000001800,
20690 {&hf_ieee80211_tag_snr_requested,
20691 {"SNR Requested", "wlan.beam_refine.snr_req",
20692 FT_BOOLEAN, 40, NULL, 0x0000002000,
20695 {&hf_ieee80211_tag_channel_measurement_requested,
20696 {"Channel Measurement Requested", "wlan.beam_refine.ch_measure_req",
20697 FT_BOOLEAN, 40, NULL, 0x0000004000,
20700 {&hf_ieee80211_tag_number_of_taps_requested,
20701 {"Number of Taps Requested", "wlan.beam_refine.taps_req",
20702 FT_UINT40, BASE_DEC | BASE_VAL64_STRING, VALS64(number_of_taps_values), 0x0000018000,
20705 {&hf_ieee80211_tag_sector_id_order_req,
20706 {"Sector ID Order Requested", "wlan.beam_refine.sector_id_req",
20707 FT_BOOLEAN, 40, NULL, 0x0000020000,
20710 {&hf_ieee80211_tag_snr_present,
20711 {"SNR Present", "wlan.beam_refine.snr_present",
20712 FT_BOOLEAN, 40, NULL, 0x0000040000,
20715 {&hf_ieee80211_tag_channel_measurement_present,
20716 {"Channel Measurement Present", "wlan.beam_refine.ch_measure_present",
20717 FT_BOOLEAN, 40, NULL, 0x0000080000,
20720 {&hf_ieee80211_tag_tap_delay_present,
20721 {"Tap Delay Present", "wlan.beam_refine.tap_delay_present",
20722 FT_BOOLEAN, 40, NULL, 0x0000100000,
20725 {&hf_ieee80211_tag_number_of_taps_present,
20726 {"Number of Taps Present", "wlan.beam_refine.taps_present",
20727 FT_UINT40, BASE_DEC | BASE_VAL64_STRING, VALS64(number_of_taps_values), 0x0000600000,
20730 {&hf_ieee80211_tag_number_of_measurement,
20731 {"Number of Measurements", "wlan.beam_refine.num_measurement",
20732 FT_UINT40, BASE_DEC, NULL, 0x003f800000,
20735 {&hf_ieee80211_tag_sector_id_order_present,
20736 {"Sector ID Order Present", "wlan.beam_refine.sector_id_present",
20737 FT_BOOLEAN, 40, NULL, 0x0040000000,
20740 {&hf_ieee80211_tag_number_of_beams,
20741 {"Number of Beams", "wlan.beam_refine.num_beams",
20742 FT_UINT40, BASE_DEC, NULL, 0x0f80000000,
20745 {&hf_ieee80211_tag_mid_extension,
20746 {"MID Extension", "wlan.beam_refine.mid_ext",
20747 FT_BOOLEAN, 40, NULL, 0x1000000000,
20750 {&hf_ieee80211_tag_capability_request,
20751 {"Capability Request", "wlan.beam_refine.cap_req",
20752 FT_BOOLEAN, 40, NULL, 0x2000000000,
20755 {&hf_ieee80211_tag_beam_refine_reserved,
20756 {"Reserved", "wlan.beam_refine.reserved",
20757 FT_UINT40, BASE_DEC, NULL, 0xc000000000,
20760 {&hf_ieee80211_tag_nextpcp_list,
20761 {"AID of NextPCP", "wlan.next_pcp.list",
20762 FT_UINT8, BASE_DEC, NULL, 0,
20765 {&hf_ieee80211_tag_nextpcp_token,
20766 {"NextPCP List Token", "wlan.next_pcp.token",
20767 FT_UINT8, BASE_DEC, NULL, 0,
20770 {&hf_ieee80211_tag_reamaining_BI,
20771 {"Remaining BI's", "wlan.pcp_handover.remaining_BIs",
20772 FT_UINT8, BASE_DEC, NULL, 0,
20775 {&hf_ieee80211_tag_request_token,
20776 {"Request Token", "wlan.request_token",
20777 FT_UINT16, BASE_DEC, NULL, 0,
20780 {&hf_ieee80211_tag_bi_start_time,
20781 {"BI Start Time", "wlan.bi_start_time",
20782 FT_UINT32, BASE_DEC, NULL, 0,
20785 {&hf_ieee80211_tag_sleep_cycle,
20786 {"Sleep Cycle", "wlan.sleep_cycle",
20787 FT_UINT16, BASE_DEC, NULL, 0,
20790 {&hf_ieee80211_tag_num_awake_bis,
20791 {"Number of Awake/Doze BIs", "wlan.num_awake_bis",
20792 FT_UINT16, BASE_DEC, NULL, 0,
20795 {&hf_ieee80211_ff_dmg_action_code,
20796 {"DMG Action", "wlan.fixed.dmg_act",
20797 FT_UINT8, BASE_HEX, VALS(ff_dmg_action_flags), 0,
20798 "Action Code", HFILL }},
20800 {&hf_ieee80211_ff_unprotected_dmg_action_code,
20801 {"Unprotected DMG Action", "wlan.fixed.unprotected_dmg_act",
20802 FT_UINT8, BASE_HEX, VALS(ff_unprotected_dmg_action_flags), 0,
20803 "Action Code", HFILL }},
20805 {&hf_ieee80211_ff_dmg_pwr_mgmt,
20806 {"DMG Power Management", "wlan.dmg.pwr_mgmt",
20807 FT_BOOLEAN, 8, NULL, 0x01,
20810 {&hf_ieee80211_ff_subject_address,
20811 {"Subject Address", "wlan.dmg.subject_addr",
20812 FT_ETHER, BASE_NONE, NULL, 0,
20813 "MAC address of requested STA", HFILL }},
20815 {&hf_ieee80211_ff_handover_reason,
20816 {"Handover Reason", "wlan.dmg.handover_reason",
20817 FT_UINT8, BASE_DEC, NULL, 0x03,
20820 {&hf_ieee80211_ff_handover_remaining_bi,
20821 {"Handover Remaining BI", "wlan.dmg.handover_remaining_bi",
20822 FT_UINT8, BASE_DEC, NULL, 0x01,
20825 {&hf_ieee80211_ff_handover_result,
20826 {"Handover Result", "wlan.dmg.handover_result",
20827 FT_UINT8, BASE_DEC, NULL, 0x01,
20830 {&hf_ieee80211_ff_handover_reject_reason,
20831 {"Handover Reject Reason", "wlan.dmg.handover_reject_reason",
20832 FT_UINT8, BASE_DEC, NULL, 0x03,
20835 {&hf_ieee80211_ff_destination_reds_aid,
20836 {"Destination REDS AID", "wlan.dmg.destination_reds_aid",
20837 FT_UINT16, BASE_DEC, NULL, 0,
20840 {&hf_ieee80211_ff_destination_aid,
20841 {"Destination AID", "wlan.dmg.destination_aid",
20842 FT_UINT16, BASE_DEC, NULL, 0,
20845 {&hf_ieee80211_ff_realy_aid,
20846 {"Relay AID", "wlan.dmg.realy_aid",
20847 FT_UINT16, BASE_DEC, NULL, 0,
20850 {&hf_ieee80211_ff_source_aid,
20851 {"Source AID", "wlan.dmg.source_aid",
20852 FT_UINT16, BASE_DEC, NULL, 0,
20855 {&hf_ieee80211_ff_timing_offset,
20856 {"Timing Offset", "wlan.dmg.timing_offset",
20857 FT_UINT16, BASE_DEC, NULL, 0,
20860 {&hf_ieee80211_ff_sampling_frequency_offset,
20861 {"Sampling Frequency Offset", "wlan.dmg.sampling_frequency_offset",
20862 FT_UINT16, BASE_DEC, NULL, 0,
20865 {&hf_ieee80211_ff_relay_operation_type,
20866 {"Relay Operation Type", "wlan.dmg.relay_operation_type",
20867 FT_UINT8, BASE_DEC, NULL, 0x03,
20870 {&hf_ieee80211_ff_peer_sta_aid,
20871 {"Peer STA AID", "wlan.dmg.peer_sta_aid",
20872 FT_UINT8, BASE_DEC, NULL, 0,
20875 {&hf_ieee80211_ff_snr,
20876 {"SNR", "wlan.dmg.snr",
20877 FT_UINT8, BASE_DEC, NULL, 0,
20880 {&hf_ieee80211_ff_internal_angle,
20881 {"Internal Angle", "wlan.dmg.internal_angle",
20882 FT_UINT8, BASE_DEC, NULL, 0xfe,
20885 {&hf_ieee80211_ff_recommend,
20886 {"Recommend", "wlan.dmg.recommend",
20887 FT_UINT8, BASE_DEC, NULL, 0x01,
20890 {&hf_ieee80211_ff_fst_action_code,
20891 {"FST Action Code", "wlan.fst.action_code",
20892 FT_UINT8, BASE_HEX, VALS(ff_fst_action_flags), 0,
20893 "Action Code", HFILL }},
20895 {&hf_ieee80211_ff_llt,
20896 {"Link Loss Timeout", "wlan.fst.llt",
20897 FT_UINT32, BASE_DEC, NULL, 0,
20900 {&hf_ieee80211_ff_fsts_id,
20901 {"FSTS ID", "wlan.session_trans.fsts_id",
20902 FT_UINT32, BASE_DEC, NULL, 0,
20905 {&hf_ieee80211_ff_mmpdu_len,
20906 {"MMPDU Length", "wlan.fst.mmpdu_length",
20907 FT_UINT16, BASE_DEC, NULL, 0,
20910 {&hf_ieee80211_ff_mmpdu_ctrl,
20911 {"MMPDU Control", "wlan.fst.mmpdu_ctrl",
20912 FT_UINT16, BASE_HEX, NULL, 0,
20915 {&hf_ieee80211_ff_oct_mmpdu,
20916 {"OCT MMPDU", "wlan.fst.oct_mmpdu",
20917 FT_BYTES, BASE_NONE, NULL, 0,
20920 {&hf_ieee80211_ff_vht_mimo_cntrl,
20921 {"VHT MIMO Control", "wlan.vht.mimo_control.control",
20922 FT_UINT24, BASE_HEX, NULL, 0x0,
20925 {&hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
20926 {"Nc Index", "wlan.vht.mimo_control.ncindex",
20927 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_nc_index_vals), 0x000007,
20928 "Number of Columns Less One", HFILL }},
20930 {&hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
20931 {"Nr Index", "wlan.vht.mimo_control.nrindex",
20932 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_nr_index_vals), 0x000038,
20933 "Number of Rows Less One", HFILL }},
20935 {&hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
20936 {"Channel Width", "wlan.vht.mimo_control.chanwidth",
20937 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_channel_width_vals), 0x0000C0,
20940 {&hf_ieee80211_ff_vht_mimo_cntrl_grouping,
20941 {"Grouping (Ng)", "wlan.vht.mimo_control.grouping",
20942 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_grouping_vals), 0x000300,
20945 {&hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
20946 {"Codebook Information", "wlan.vht.mimo_control.codebookinfo",
20947 FT_UINT24, BASE_HEX, NULL, 0x000400,
20950 {&hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
20951 {"Feedback Type", "wlan.vht.mimo_control.feedbacktype",
20952 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_feedback_vals), 0x000800,
20955 {&hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
20956 {"Remaining Feedback Segments", "wlan.vht.mimo_control.remainingfeedbackseg",
20957 FT_UINT24, BASE_HEX, NULL, 0x007000,
20960 {&hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
20961 {"First Feedback Segments", "wlan.vht.mimo_control.firstfeedbackseg",
20962 FT_UINT24, BASE_HEX, NULL, 0x008000,
20965 {&hf_ieee80211_ff_vht_mimo_cntrl_reserved,
20966 {"Reserved", "wlan.vht.mimo_control.reserved",
20967 FT_UINT24, BASE_HEX, NULL, 0x030000,
20970 {&hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
20971 {"Sounding Dialog Toker Number", "wlan.vht.mimo_control.soundingdialogtocketnbr",
20972 FT_UINT24, BASE_HEX, NULL, 0xFC0000,
20975 {&hf_ieee80211_ff_vht_action,
20976 {"VHT Action", "wlan.vht.action",
20977 FT_UINT8, BASE_DEC, VALS(vht_action_vals), 0,
20980 {&hf_ieee80211_vht_compressed_beamforming_report,
20981 {"VHT Compressed Beamforming Report", "wlan.vht.compressed_beamforming_report",
20982 FT_BYTES, BASE_NONE, NULL, 0,
20985 {&hf_ieee80211_vht_compressed_beamforming_report_snr,
20986 {"Signal to Noise Ratio (SNR)", "wlan.vht.compressed_beamforming_report.snr",
20987 FT_UINT8, BASE_HEX, NULL, 0,
20990 {&hf_ieee80211_vht_compressed_beamforming_feedback_matrix,
20991 {"Compressed Beamforming Feedback Matrix", "wlan.vht.compressed_beamforming_report.feedback_matrix",
20992 FT_NONE, BASE_NONE, NULL, 0,
20995 {&hf_ieee80211_vht_group_id_management,
20996 {"Group ID Management", "wlan.vht.group_id_management",
20997 FT_BYTES, BASE_NONE, NULL, 0,
21000 {&hf_ieee80211_vht_membership_status_array,
21001 {"Membership Status Array", "wlan.vht.membership_status_array",
21002 FT_BYTES, BASE_NONE, NULL, 0,
21005 {&hf_ieee80211_vht_user_position_array,
21006 {"User Position Array", "wlan.vht.user_position_array",
21007 FT_BYTES, BASE_NONE, NULL, 0,
21010 {&hf_ieee80211_vht_membership_status_field,
21011 {"Membership Status Field", "wlan.vht.membership_status_array.field",
21012 FT_UINT8, BASE_DEC, NULL, 0,
21015 {&hf_ieee80211_vht_user_position_field,
21016 {"User Position Field", "wlan.vht.user_position_array.field",
21017 FT_UINT8, BASE_DEC, NULL, 0,
21020 {&hf_ieee80211_vht_operation_mode_notification,
21021 {"Operation Mode Notification", "wlan.vht.operation_mode_notification",
21022 FT_BYTES, BASE_NONE, NULL, 0,
21025 {&hf_ieee80211_tag_tspec_allocation_id,
21026 {"Allocation ID", "wlan.dmg_tspec.allocation_id",
21027 FT_UINT24, BASE_DEC, NULL, 0x00000f,
21030 {&hf_ieee80211_tag_tspec_allocation_type,
21031 {"Allocation Type", "wlan.dmg_tspec.allocation_type",
21032 FT_UINT24, BASE_DEC, NULL, 0x000070,
21035 {&hf_ieee80211_tag_tspec_allocation_format,
21036 {"Allocation Format", "wlan.dmg_tspec.allocation_format",
21037 FT_BOOLEAN, 24, NULL, 0x000080,
21040 {&hf_ieee80211_tag_tspec_pseudo_static,
21041 {"Pseudo Static", "wlan.dmg_tspec.pseudo_static",
21042 FT_BOOLEAN, 24, NULL, 0x000100,
21045 {&hf_ieee80211_tag_tspec_truncatable,
21046 {"Truncatable", "wlan.dmg_tspec.truncatable",
21047 FT_BOOLEAN, 24, NULL, 0x000200,
21050 {&hf_ieee80211_tag_tspec_extendable,
21051 {"Extendable", "wlan.dmg_tspec.extendable",
21052 FT_BOOLEAN, 24, NULL, 0x000400,
21055 {&hf_ieee80211_tag_tspec_lp_sc_used,
21056 {"LP SC Usec", "wlan.dmg_tspec.lp_sc_used",
21057 FT_BOOLEAN, 24, NULL, 0x000800,
21060 {&hf_ieee80211_tag_tspec_up,
21061 {"UP", "wlan.dmg_tspec.up",
21062 FT_UINT24, BASE_HEX, NULL, 0x007000,
21065 {&hf_ieee80211_tag_tspec_dest_aid,
21066 {"Destination AID", "wlan.dmg_tspec.dest_aid",
21067 FT_UINT24, BASE_HEX, NULL, 0x7f8000,
21070 {&hf_ieee80211_tag_tspec_allocation_period,
21071 {"Allocation Period", "wlan.dmg_tspec.allocation_period",
21072 FT_UINT16, BASE_DEC, NULL, 0,
21075 {&hf_ieee80211_tag_tspec_min_allocation,
21076 {"Minimal Allocation", "wlan.dmg_tspec.min_allocation",
21077 FT_UINT16, BASE_DEC, NULL, 0,
21080 {&hf_ieee80211_tag_tspec_max_allocation,
21081 {"Maximal Allocation", "wlan.dmg_tspec.max_allocation",
21082 FT_UINT16, BASE_DEC, NULL, 0,
21085 {&hf_ieee80211_tag_tspec_min_duration,
21086 {"Minimal Duration", "wlan.dmg_tspec.min_duration",
21087 FT_UINT16, BASE_DEC, NULL, 0,
21090 {&hf_ieee80211_tag_tspec_num_of_constraints,
21091 {"Number Of Constraints", "wlan.dmg_tspec.num_of_constraints",
21092 FT_UINT8, BASE_DEC, NULL, 0,
21095 {&hf_ieee80211_tag_tspec_tsconst_start_time,
21096 {"TS Constraint Start Time", "wlan.dmg_tspec.tsconst.start_time",
21097 FT_UINT32, BASE_DEC, NULL, 0,
21100 {&hf_ieee80211_tag_tspec_tsconst_duration,
21101 {"TS Constraint Duration", "wlan.dmg_tspec.tsconst.duration",
21102 FT_UINT16, BASE_DEC, NULL, 0,
21105 {&hf_ieee80211_tag_tspec_tsconst_period,
21106 {"TS Constraint Period", "wlan.dmg_tspec.tsconst.period",
21107 FT_UINT16, BASE_DEC, NULL, 0,
21110 {&hf_ieee80211_tag_tspec_tsconst_interferer_mac,
21111 {"TS Constraint Interferer MAC Address", "wlan.dmg_tspec.tsconst.interferer_mac",
21112 FT_ETHER, BASE_NONE, NULL, 0,
21115 {&hf_ieee80211_tag_channel_measurement_feedback_realtive_I,
21116 {"Channel Measurement Feedback Relative I", "wlan.ch_meas_fb.realtive_I",
21117 FT_UINT8, BASE_DEC, NULL, 0,
21120 {&hf_ieee80211_tag_channel_measurement_feedback_realtive_Q,
21121 {"Channel Measurement Feedback Relative Q", "wlan.ch_meas_fb.realtive_Q",
21122 FT_UINT8, BASE_DEC, NULL, 0,
21125 {&hf_ieee80211_tag_channel_measurement_feedback_tap_delay,
21126 {"Channel Measurement Feedback Tap Delay", "wlan.ch_meas_fb.tap_delay",
21127 FT_UINT8, BASE_DEC, NULL, 0,
21130 {&hf_ieee80211_tag_channel_measurement_feedback_sector_id,
21131 {"Channel Measurement Feedback Secotr ID", "wlan.ch_meas_fb.sector_id",
21132 FT_UINT8, BASE_DEC, NULL, 0xfc,
21135 {&hf_ieee80211_tag_channel_measurement_feedback_antenna_id,
21136 {"Channel Measurement Feedback Antenna ID", "wlan.ch_meas_fb.antenna_id",
21137 FT_UINT8, BASE_DEC, NULL, 0x03,
21140 {&hf_ieee80211_tag_awake_window,
21141 {"Awake Window", "wlan.awake_window",
21142 FT_UINT16, BASE_DEC, NULL, 0,
21145 {&hf_ieee80211_tag_addba_ext_no_frag,
21146 {"ADDBA No Fragmentation", "wlan.addba.no_frag",
21147 FT_BOOLEAN, 8, NULL, 0x80,
21150 {&hf_ieee80211_tag_multi_band_ctrl_sta_role,
21151 {"STA Rold", "wlan.multi_band.ctrl_sta_role",
21152 FT_UINT8, BASE_DEC, NULL, 0xe0,
21155 {&hf_ieee80211_tag_multi_band_ctrl_addr_present,
21156 {"STA MAC Address Present", "wlan.multi_band.ctrl_addr_present",
21157 FT_BOOLEAN, 8, NULL, 0x10,
21160 {&hf_ieee80211_tag_multi_band_ctrl_cipher_present,
21161 {"PCS Present", "wlan.multi_band.ctrl_cipher_present",
21162 FT_BOOLEAN, 8, NULL, 0x08,
21165 {&hf_ieee80211_tag_multi_band_oper_class,
21166 {"Operating Class", "wlan.multi_band.oper_class",
21167 FT_UINT8, BASE_DEC, NULL, 0,
21170 {&hf_ieee80211_tag_multi_band_channel_number,
21171 {"Channel Number", "wlan.multi_band.channel_number",
21172 FT_UINT8, BASE_DEC, NULL, 0,
21175 {&hf_ieee80211_tag_multi_band_tsf_offset,
21176 {"TSF Offset", "wlan.multi_band.tsf_offset",
21177 FT_UINT64, BASE_DEC, NULL, 0,
21180 {&hf_ieee80211_tag_multi_band_conn_ap,
21181 {"Connection Capability AP", "wlan.multi_band.conn_ap",
21182 FT_BOOLEAN, 8, NULL, 0x80,
21185 {&hf_ieee80211_tag_multi_band_conn_pcp,
21186 {"Connection Capability PCP", "wlan.multi_band.conn_pcp",
21187 FT_BOOLEAN, 8, NULL, 0x40,
21190 {&hf_ieee80211_tag_multi_band_conn_dls,
21191 {"Connection Capability DLS", "wlan.multi_band.conn_dls",
21192 FT_BOOLEAN, 8, NULL, 0x20,
21195 {&hf_ieee80211_tag_multi_band_conn_tdls,
21196 {"Connection Capability TDLS", "wlan.multi_band.conn_tdls",
21197 FT_BOOLEAN, 8, NULL, 0x10,
21200 {&hf_ieee80211_tag_multi_band_conn_ibss,
21201 {"Connection Capability IBSS", "wlan.multi_band.conn_ibss",
21202 FT_BOOLEAN, 8, NULL, 0x08,
21205 {&hf_ieee80211_tag_multi_band_fst_timeout,
21206 {"FST Session Timeout", "wlan.multi_band.fst_timeout",
21207 FT_UINT8, BASE_DEC, NULL, 0,
21210 {&hf_ieee80211_tag_multi_band_sta_mac,
21211 {"Transmitting STA MAC Address", "wlan.multi_band.sta_mac",
21212 FT_ETHER, BASE_NONE, NULL, 0,
21215 {&hf_ieee80211_tag_activity,
21216 {"Activity", "wlan.activity",
21217 FT_UINT8, BASE_DEC, NULL, 0,
21220 {&hf_ieee80211_tag_dmg_link_adapt_mcs,
21221 {"MCS", "wlan.dmg_link_adapt.mcs",
21222 FT_UINT8, BASE_DEC, NULL, 0,
21225 {&hf_ieee80211_tag_dmg_link_adapt_link_margin,
21226 {"Link Margin", "wlan.dmg_link_adapt.link_margin",
21227 FT_UINT8, BASE_DEC, NULL, 0,
21230 {&hf_ieee80211_tag_ref_timestamp,
21231 {"Reference Timestamp", "wlan.ref_timestamp",
21232 FT_UINT32, BASE_DEC, NULL, 0,
21235 {&hf_ieee80211_tag_switching_stream_non_qos,
21236 {"Non-Qos Data Frames", "wlan.switching_stream.non_qos",
21237 FT_BOOLEAN, 8, NULL, 0,
21240 {&hf_ieee80211_tag_switching_stream_param_num,
21241 {"Number Of Switching Stream Elements", "wlan.switching_stream.param_num",
21242 FT_UINT8, BASE_DEC, NULL, 0,
21245 {&hf_ieee80211_tag_switching_stream_old_tid,
21246 {"Old Band TID", "wlan.switching_stream.old_tid",
21247 FT_UINT16, BASE_DEC, NULL, 0xf000,
21250 {&hf_ieee80211_tag_switching_stream_old_direction,
21251 {"Old Band Direction", "wlan.switching_stream.old_direction",
21252 FT_BOOLEAN, 16, NULL, 0x0800,
21255 {&hf_ieee80211_tag_switching_stream_new_tid,
21256 {"New Band TID", "wlan.switching_stream.new_tid",
21257 FT_UINT16, BASE_DEC, NULL, 0x0780,
21260 {&hf_ieee80211_tag_switching_stream_new_direction,
21261 {"New Band Direction", "wlan.switching_stream.new_direction",
21262 FT_BOOLEAN, 16, NULL, 0x0040,
21265 {&hf_ieee80211_tag_switching_stream_new_valid_id,
21266 {"Stream ID in New Band Valid", "wlan.switching_stream.new_valid_id",
21267 FT_BOOLEAN, 16, NULL, 0x0020,
21270 {&hf_ieee80211_tag_switching_stream_llt_type,
21271 {"LLT Type", "wlan.switching_stream.llt_type",
21272 FT_BOOLEAN, 16, NULL, 0x0010,
21275 {&hf_ieee80211_ff_timestamp,
21276 {"Timestamp", "wlan.fixed.timestamp",
21277 FT_UINT64, BASE_HEX, NULL, 0,
21280 {&hf_ieee80211_ff_auth_alg,
21281 {"Authentication Algorithm", "wlan.fixed.auth.alg",
21282 FT_UINT16, BASE_DEC, VALS(auth_alg), 0,
21285 {&hf_ieee80211_ff_beacon_interval,
21286 {"Beacon Interval", "wlan.fixed.beacon",
21287 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom), 0,
21290 {&hf_ieee80211_fixed_parameters,
21291 {"Fixed parameters", "wlan.fixed.all",
21292 FT_NONE, BASE_NONE, NULL, 0,
21295 {&hf_ieee80211_tagged_parameters,
21296 {"Tagged parameters", "wlan.tagged.all",
21297 FT_NONE, BASE_NONE, NULL, 0,
21300 {&hf_ieee80211_tag_ssid,
21301 {"SSID", "wlan.ssid",
21302 FT_STRING, BASE_NONE, NULL, 0,
21303 "Indicates the identity of an ESS or IBSS", HFILL }},
21305 {&hf_ieee80211_tag_supp_rates,
21306 {"Supported Rates", "wlan.supported_rates",
21307 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_supported_rates_vals_ext, 0x0,
21308 "In Mbit/sec, (B) for Basic Rates", HFILL }},
21310 {&hf_ieee80211_tag_fh_dwell_time,
21311 {"Dwell Time", "wlan.fh.dwell_time",
21312 FT_UINT16, BASE_HEX, NULL, 0x0,
21313 "In Time Unit (TU)", HFILL }},
21315 {&hf_ieee80211_tag_fh_hop_set,
21316 {"Hop Set", "wlan.fh.hop_set",
21317 FT_UINT8, BASE_DEC, NULL, 0x0,
21320 {&hf_ieee80211_tag_fh_hop_pattern,
21321 {"Hop Pattern", "wlan.fh.hop_pattern",
21322 FT_UINT8, BASE_DEC, NULL, 0x0,
21325 {&hf_ieee80211_tag_fh_hop_index,
21326 {"Hop Index", "wlan.fh.hop_index",
21327 FT_UINT8, BASE_DEC, NULL, 0x0,
21330 {&hf_ieee80211_ff_block_ack_params,
21331 {"Block Ack Parameters", "wlan.fixed.baparams",
21332 FT_UINT16, BASE_HEX, NULL, 0,
21335 {&hf_ieee80211_ff_block_ack_params_amsdu_permitted,
21336 {"A-MSDUs", "wlan.fixed.baparams.amsdu",
21337 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_amsdu_permitted_flag), 0x0001,
21338 "A-MSDU Permitted in QoS Data MPDUs", HFILL }},
21340 {&hf_ieee80211_ff_block_ack_params_policy,
21341 {"Block Ack Policy", "wlan.fixed.baparams.policy",
21342 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_policy_flag), 0x0002,
21345 {&hf_ieee80211_ff_block_ack_params_tid,
21346 {"Traffic Identifier", "wlan.fixed.baparams.tid",
21347 FT_UINT16, BASE_HEX, NULL, 0x003C,
21350 {&hf_ieee80211_ff_block_ack_params_buffer_size,
21351 {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan.fixed.baparams.buffersize",
21352 FT_UINT16, BASE_DEC, NULL, 0xFFC0,
21353 "Number of Buffers", HFILL }},
21355 {&hf_ieee80211_ff_block_ack_timeout,
21356 {"Block Ack Timeout", "wlan.fixed.batimeout",
21357 FT_UINT16, BASE_HEX, NULL, 0,
21360 {&hf_ieee80211_ff_block_ack_ssc,
21361 {"Block Ack Starting Sequence Control (SSC)", "wlan.fixed.ssc",
21362 FT_UINT16, BASE_HEX, 0, 0,
21365 {&hf_ieee80211_ff_block_ack_ssc_fragment,
21366 {"Fragment", "wlan.fixed.ssc.fragment",
21367 FT_UINT16, BASE_DEC, 0, 0x000f,
21370 {&hf_ieee80211_ff_block_ack_ssc_sequence,
21371 {"Starting Sequence Number", "wlan.fixed.ssc.sequence",
21372 FT_UINT16, BASE_DEC, 0, 0xfff0,
21375 {&hf_ieee80211_ff_delba_param,
21376 {"Delete Block Ack (DELBA) Parameter Set", "wlan.fixed.delba.param",
21377 FT_UINT16, BASE_HEX, 0, 0,
21380 {&hf_ieee80211_ff_delba_param_reserved,
21381 {"Reserved", "wlan.fixed.delba.param.reserved",
21382 FT_UINT16, BASE_HEX, 0, 0x07ff,
21385 {&hf_ieee80211_ff_delba_param_init,
21386 {"Initiator", "wlan.fixed.delba.param.initiator",
21387 FT_BOOLEAN, 16, 0, 0x0800,
21390 {&hf_ieee80211_ff_delba_param_tid,
21391 {"TID", "wlan.fixed.delba.param.tid",
21392 FT_UINT16, BASE_HEX, 0, 0xf000,
21393 "Traffic Identifier (TID)", HFILL }},
21395 {&hf_ieee80211_ff_max_reg_pwr,
21396 {"Maximum Regulation Power", "wlan.fixed.maxregpwr",
21397 FT_UINT16, BASE_HEX, 0, 0,
21400 {&hf_ieee80211_ff_measurement_pilot_int,
21401 {"Measurement Pilot Interval", "wlan.fixed.msmtpilotint",
21402 FT_UINT16, BASE_HEX, 0, 0,
21403 "Measurement Pilot Interval Fixed Field", HFILL }},
21405 {&hf_ieee80211_ff_country_str,
21406 {"Country String", "wlan.fixed.country",
21407 FT_STRING, BASE_NONE, 0, 0,
21410 {&hf_ieee80211_ff_max_tx_pwr,
21411 {"Maximum Transmit Power", "wlan.fixed.maxtxpwr",
21412 FT_UINT8, BASE_HEX, 0, 0,
21415 {&hf_ieee80211_ff_tx_pwr_used,
21416 {"Transmit Power Used", "wlan.fixed.txpwr",
21417 FT_UINT8, BASE_HEX, 0, 0,
21420 {&hf_ieee80211_ff_transceiver_noise_floor,
21421 {"Transceiver Noise Floor", "wlan.fixed.tnoisefloor",
21422 FT_UINT8, BASE_HEX, 0, 0,
21425 {&hf_ieee80211_ff_channel_width,
21426 {"Supported Channel Width", "wlan.fixed.chanwidth",
21427 FT_UINT8, BASE_HEX, VALS(ff_channel_width_vals), 0,
21430 {&hf_ieee80211_ff_qos_info_ap,
21431 {"QoS Information (AP)", "wlan.fixed.qosinfo.ap",
21432 FT_UINT8, BASE_HEX, NULL, 0,
21435 {&hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
21436 {"EDCA Parameter Set Update Count", "wlan.fixed.qosinfo.ap.edcaupdate",
21437 FT_UINT8, BASE_HEX, NULL, 0x0F,
21438 "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL }},
21440 {&hf_ieee80211_ff_qos_info_ap_q_ack,
21441 {"Q-Ack", "wlan.fixed.qosinfo.ap.qack",
21442 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_q_ack_flag), 0x10,
21443 "QoS Ack", HFILL }},
21445 {&hf_ieee80211_ff_qos_info_ap_queue_req,
21446 {"Queue Request", "wlan.fixed.qosinfo.ap.queue_req",
21447 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_queue_req_flag), 0x20,
21450 {&hf_ieee80211_ff_qos_info_ap_txop_request,
21451 {"TXOP Request", "wlan.fixed.qosinfo.ap.txopreq",
21452 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_txop_request_flag), 0x40,
21453 "Transmit Opportunity (TXOP) Request", HFILL }},
21455 {&hf_ieee80211_ff_qos_info_ap_reserved,
21456 {"Reserved", "wlan.fixed.qosinfo.ap.reserved",
21457 FT_BOOLEAN, 8, NULL, 0x80,
21460 {&hf_ieee80211_ff_qos_info_sta,
21461 {"QoS Information (STA)", "wlan.fixed.qosinfo.sta",
21462 FT_UINT8, BASE_HEX, NULL, 0,
21463 "TCLAS Processing", HFILL }},
21465 {&hf_ieee80211_ff_qos_info_sta_ac_vo,
21466 {"AC_VO U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vo",
21467 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag), 0x01,
21470 {&hf_ieee80211_ff_qos_info_sta_ac_vi,
21471 {"AC_VI U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vi",
21472 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag), 0x02,
21475 {&hf_ieee80211_ff_qos_info_sta_ac_bk,
21476 {"AC_BK U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_bk",
21477 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag), 0x04,
21480 {&hf_ieee80211_ff_qos_info_sta_ac_be,
21481 {"AC_BE U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_be",
21482 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag), 0x08,
21485 {&hf_ieee80211_ff_qos_info_sta_q_ack,
21486 {"Q-Ack", "wlan.fixed.qosinfo.sta.qack",
21487 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_q_ack_flag), 0x10,
21488 "QoS Ack", HFILL }},
21490 {&hf_ieee80211_ff_qos_info_sta_max_sp_length,
21491 {"Max SP Length", "wlan.fixed.qosinfo.sta.max_sp_length",
21492 FT_UINT8, BASE_HEX, VALS(ff_qos_info_sta_max_sp_len_flags) , 0x60,
21495 {&hf_ieee80211_ff_qos_info_sta_more_data_ack,
21496 {"More Data Ack", "wlan.fixed.qosinfo.sta.more_data_ack",
21497 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_more_data_ack_flag), 0x80,
21500 {&hf_ieee80211_ff_sm_pwr_save,
21501 {"Spatial Multiplexing (SM) Power Control", "wlan.fixed.sm.powercontrol",
21502 FT_UINT8, BASE_HEX, NULL, 0,
21505 {&hf_ieee80211_ff_sm_pwr_save_enabled,
21506 {"SM Power Save", "wlan.fixed.sm.powercontrol.enabled",
21507 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
21508 "Spatial Multiplexing (SM) Power Save", HFILL }},
21510 {&hf_ieee80211_ff_sm_pwr_save_sm_mode,
21511 {"SM Mode", "wlan.fixed.sm.powercontrol.mode",
21512 FT_BOOLEAN, 8, TFS(&ff_sm_pwr_save_sm_mode_flag), 0x02,
21513 "Spatial Multiplexing (SM) Mode", HFILL }},
21515 {&hf_ieee80211_ff_sm_pwr_save_reserved,
21516 {"Reserved", "wlan.fixed.sm.powercontrol.reserved",
21517 FT_UINT8, BASE_HEX, NULL, 0xFC,
21520 {&hf_ieee80211_ff_pco_phase_cntrl,
21521 {"Phased Coexistence Operation (PCO) Phase Control", "wlan.fixed.pco.phasecntrl",
21522 FT_BOOLEAN, BASE_NONE, TFS(&ff_pco_phase_cntrl_flag), 0x0,
21525 {&hf_ieee80211_ff_psmp_param_set,
21526 {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan.fixed.psmp.paramset",
21527 FT_UINT16, BASE_HEX, 0, 0,
21530 {&hf_ieee80211_ff_psmp_param_set_n_sta,
21531 {"Number of STA Info Fields Present", "wlan.fixed.psmp.paramset.nsta",
21532 FT_UINT16, BASE_HEX, 0, 0x000F,
21535 {&hf_ieee80211_ff_psmp_param_set_more_psmp,
21536 {"More PSMP", "wlan.fixed.psmp.paramset.more",
21537 FT_BOOLEAN, 16, TFS(&ff_psmp_param_set_more_psmp_flag), 0x0010,
21538 "More Power Save Multi-Poll (PSMP)", HFILL }},
21540 {&hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
21541 {"PSMP Sequence Duration [us]", "wlan.fixed.psmp.paramset.seqduration",
21542 FT_UINT16, BASE_DEC, 0, 0xFFE0,
21543 "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL }},
21545 {&hf_ieee80211_ff_mimo_cntrl,
21546 {"MIMO Control", "wlan.fixed.mimo.control",
21547 FT_BYTES, BASE_NONE, 0, 0x0,
21550 {&hf_ieee80211_ff_mimo_cntrl_nc_index,
21551 {"Nc Index", "wlan.fixed.mimo.control.ncindex",
21552 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags), 0x0003,
21553 "Number of Columns Less One", HFILL }},
21555 {&hf_ieee80211_ff_mimo_cntrl_nr_index,
21556 {"Nr Index", "wlan.fixed.mimo.control.nrindex",
21557 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags), 0x000C,
21558 "Number of Rows Less One", HFILL }},
21560 {&hf_ieee80211_ff_mimo_cntrl_channel_width,
21561 {"Channel Width", "wlan.fixed.mimo.control.chanwidth",
21562 FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag), 0x0010,
21565 {&hf_ieee80211_ff_mimo_cntrl_grouping,
21566 {"Grouping (Ng)", "wlan.fixed.mimo.control.grouping",
21567 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags), 0x0060,
21570 {&hf_ieee80211_ff_mimo_cntrl_coefficient_size,
21571 {"Coefficient Size (Nb)", "wlan.fixed.mimo.control.cosize",
21572 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags), 0x0180,
21575 {&hf_ieee80211_ff_mimo_cntrl_codebook_info,
21576 {"Codebook Information", "wlan.fixed.mimo.control.codebookinfo",
21577 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags), 0x0600,
21580 {&hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
21581 {"Remaining Matrix Segment", "wlan.fixed.mimo.control.matrixseg",
21582 FT_UINT16, BASE_HEX, 0, 0x3800,
21585 {&hf_ieee80211_ff_mimo_cntrl_reserved,
21586 {"Reserved", "wlan.fixed.mimo.control.reserved",
21587 FT_UINT16, BASE_HEX, 0, 0xC000,
21590 {&hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
21591 {"Sounding Timestamp", "wlan.fixed.mimo.control.soundingtime",
21592 FT_UINT32, BASE_HEX, 0, 0,
21595 {&hf_ieee80211_ff_psmp_sta_info,
21596 {"Power Save Multi-Poll (PSMP) Station Information", "wlan.fixed.psmp.stainfo",
21597 FT_UINT64, BASE_HEX, 0, 0,
21600 {&hf_ieee80211_ff_psmp_sta_info_type,
21601 {"Sta Info Type", "wlan.fixed.psmp.stainfo.type",
21602 FT_UINT32, BASE_HEX, VALS(ff_psmp_sta_info_flags), PSMP_STA_INFO_FLAG_TYPE,
21605 {&hf_ieee80211_ff_psmp_sta_info_dtt_start_offset,
21606 {"DTT Start Offset", "wlan.fixed.psmp.stainfo.dttstart",
21607 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_START,
21610 {&hf_ieee80211_ff_psmp_sta_info_dtt_duration,
21611 {"DTT Duration", "wlan.fixed.psmp.stainfo.dttduration",
21612 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_DURATION,
21615 {&hf_ieee80211_ff_psmp_sta_info_sta_id,
21616 {"Target Station ID", "wlan.fixed.psmp.stainfo.staid",
21617 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_STA_ID,
21620 {&hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
21621 {"UTT Start Offset", "wlan.fixed.psmp.stainfo.uttstart",
21622 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_START,
21625 {&hf_ieee80211_ff_psmp_sta_info_utt_duration,
21626 {"UTT Duration", "wlan.fixed.psmp.stainfo.uttduration",
21627 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_DURATION,
21630 {&hf_ieee80211_ff_psmp_sta_info_reserved_small,
21631 {"Reserved", "wlan.fixed.psmp.stainfo.reserved",
21632 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_IA_RESERVED,
21635 {&hf_ieee80211_ff_psmp_sta_info_reserved_large,
21636 {"Reserved", "wlan.fixed.psmp.stainfo.reserved64",
21637 FT_UINT64, BASE_HEX, 0, 0,
21640 {&hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
21641 {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan.fixed.psmp.stainfo.multicastid",
21642 FT_UINT64, BASE_HEX, 0, 0,
21645 {&hf_ieee80211_ff_ant_selection,
21646 {"Antenna Selection", "wlan.fixed.antsel",
21647 FT_UINT8, BASE_HEX, 0, 0,
21650 {&hf_ieee80211_ff_ant_selection_0,
21651 {"Antenna 0", "wlan.fixed.antsel.ant0",
21652 FT_UINT8, BASE_HEX, 0, 0x01,
21655 {&hf_ieee80211_ff_ant_selection_1,
21656 {"Antenna 1", "wlan.fixed.antsel.ant1",
21657 FT_UINT8, BASE_HEX, 0, 0x02,
21660 {&hf_ieee80211_ff_ant_selection_2,
21661 {"Antenna 2", "wlan.fixed.antsel.ant2",
21662 FT_UINT8, BASE_HEX, 0, 0x04,
21665 {&hf_ieee80211_ff_ant_selection_3,
21666 {"Antenna 3", "wlan.fixed.antsel.ant3",
21667 FT_UINT8, BASE_HEX, 0, 0x08,
21670 {&hf_ieee80211_ff_ant_selection_4,
21671 {"Antenna 4", "wlan.fixed.antsel.ant4",
21672 FT_UINT8, BASE_HEX, 0, 0x10,
21675 {&hf_ieee80211_ff_ant_selection_5,
21676 {"Antenna 5", "wlan.fixed.antsel.ant5",
21677 FT_UINT8, BASE_HEX, 0, 0x20,
21680 {&hf_ieee80211_ff_ant_selection_6,
21681 {"Antenna 6", "wlan.fixed.antsel.ant6",
21682 FT_UINT8, BASE_HEX, 0, 0x40,
21685 {&hf_ieee80211_ff_ant_selection_7,
21686 {"Antenna 7", "wlan.fixed.antsel.ant7",
21687 FT_UINT8, BASE_HEX, 0, 0x80,
21690 {&hf_ieee80211_ff_ext_channel_switch_announcement,
21691 {"Extended Channel Switch Announcement", "wlan.fixed.extchansw",
21692 FT_UINT32, BASE_HEX, 0, 0,
21695 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
21696 {"Channel Switch Mode", "wlan.fixed.extchansw.switchmode",
21697 FT_UINT32, BASE_HEX, VALS(ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags), 0x000000FF,
21700 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
21701 {"New Operating Class", "wlan.fixed.extchansw.new.opeclass",
21702 FT_UINT32, BASE_HEX, NULL, 0x0000FF00,
21705 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
21706 {"New Channel Number", "wlan.fixed.extchansw.new.channumber",
21707 FT_UINT32, BASE_HEX, NULL, 0x00FF0000,
21710 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
21711 {"Channel Switch Count", "wlan.extchanswitch.switchcount",
21712 FT_UINT32, BASE_HEX, NULL, 0xFF000000,
21715 {&hf_ieee80211_ff_ht_info,
21716 {"HT Information", "wlan.fixed.extchansw",
21717 FT_UINT8, BASE_HEX, 0, 0,
21718 "HT Information Fixed Field", HFILL }},
21720 {&hf_ieee80211_ff_ht_info_information_request,
21721 {"Information Request", "wlan.fixed.mimo.control.chanwidth",
21722 FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag), 0x01,
21725 {&hf_ieee80211_ff_ht_info_40_mhz_intolerant,
21726 {"40 MHz Intolerant", "wlan.fixed.mimo.control.chanwidth",
21727 FT_BOOLEAN, 8, TFS(&ff_ht_info_40_mhz_intolerant_flag), 0x02,
21730 {&hf_ieee80211_ff_ht_info_sta_chan_width,
21731 {"Station Channel Width", "wlan.fixed.mimo.control.chanwidth",
21732 FT_BOOLEAN, 8, TFS(&ff_ht_info_sta_chan_width_flag), 0x04,
21735 {&hf_ieee80211_ff_ht_info_reserved,
21736 {"Reserved", "wlan.fixed.extchansw",
21737 FT_UINT8, BASE_HEX, 0, 0xF8,
21738 "Reserved Field", HFILL }},
21740 {&hf_ieee80211_ff_ht_action,
21741 {"HT Action", "wlan.fixed.htact",
21742 FT_UINT8, BASE_HEX, VALS(ff_ht_action_flags), 0,
21743 "HT Action Code", HFILL }},
21745 {&hf_ieee80211_ff_mimo_csi_snr,
21746 {"Signal to Noise Ratio (SNR)", "wlan.mimo.csimatrices.snr",
21747 FT_UINT8, BASE_HEX, NULL, 0,
21750 {&hf_ieee80211_ff_mimo_csi_matrices,
21751 {"CSI Matrices", "wlan.mimo.csimatrices",
21752 FT_NONE, BASE_NONE, NULL, 0,
21755 {&hf_ieee80211_ff_mimo_csi_bf_matrices,
21756 {"Beamforming Feedback Matrices", "wlan.mimo.csimatrices.bf",
21757 FT_NONE, BASE_NONE, NULL, 0,
21760 {&hf_ieee80211_ff_mimo_csi_cbf_matrices,
21761 {"Compressed Beamforming Feedback Matrices", "wlan.mimo.csimatrices.cbf",
21762 FT_NONE, BASE_NONE, NULL, 0,
21764 {&hf_ieee80211_ff_public_action,
21765 {"Public Action", "wlan.fixed.publicact",
21766 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_pa_action_codes_ext, 0,
21767 "Public Action Code", HFILL }},
21769 {&hf_ieee80211_ff_protected_public_action,
21770 {"Protected Public Action", "wlan.fixed.publicact",
21771 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_ppa_action_codes_ext, 0,
21772 "Protected Public Action Code", HFILL }},
21774 {&hf_ieee80211_ff_capture,
21775 {"Capabilities Information", "wlan.fixed.capabilities",
21776 FT_UINT16, BASE_HEX, NULL, 0,
21777 "Capability information", HFILL }},
21779 {&hf_ieee80211_ff_cf_ess,
21780 {"ESS capabilities", "wlan.fixed.capabilities.ess",
21781 FT_BOOLEAN, 16, TFS(&cf_ess_flags), 0x0001,
21784 {&hf_ieee80211_ff_cf_ibss,
21785 {"IBSS status", "wlan.fixed.capabilities.ibss",
21786 FT_BOOLEAN, 16, TFS(&cf_ibss_flags), 0x0002,
21787 "IBSS participation", HFILL }},
21789 {&hf_ieee80211_ff_cf_sta_poll,
21790 {"CFP participation capabilities", "wlan.fixed.capabilities.cfpoll.sta",
21791 FT_UINT16, BASE_HEX, VALS(sta_cf_pollable), 0x020C,
21792 "CF-Poll capabilities for a STA", HFILL }},
21794 {&hf_ieee80211_ff_cf_ap_poll,
21795 {"CFP participation capabilities", "wlan.fixed.capabilities.cfpoll.ap",
21796 FT_UINT16, BASE_HEX, VALS(ap_cf_pollable), 0x020C,
21797 "CF-Poll capabilities for an AP", HFILL }},
21799 {&hf_ieee80211_ff_cf_privacy,
21800 {"Privacy", "wlan.fixed.capabilities.privacy",
21801 FT_BOOLEAN, 16, TFS(&cf_privacy_flags), 0x0010,
21802 "WEP support", HFILL }},
21804 {&hf_ieee80211_ff_cf_preamble,
21805 {"Short Preamble", "wlan.fixed.capabilities.preamble",
21806 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed), 0x0020,
21809 {&hf_ieee80211_ff_cf_pbcc,
21810 {"PBCC", "wlan.fixed.capabilities.pbcc",
21811 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed), 0x0040,
21812 "PBCC Modulation", HFILL }},
21814 {&hf_ieee80211_ff_cf_agility,
21815 {"Channel Agility", "wlan.fixed.capabilities.agility",
21816 FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse), 0x0080,
21819 {&hf_ieee80211_ff_cf_spec_man,
21820 {"Spectrum Management", "wlan.fixed.capabilities.spec_man",
21821 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x0100,
21824 {&hf_ieee80211_ff_short_slot_time,
21825 {"Short Slot Time", "wlan.fixed.capabilities.short_slot_time",
21826 FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse), 0x0400,
21829 {&hf_ieee80211_ff_cf_apsd,
21830 {"Automatic Power Save Delivery", "wlan.fixed.capabilities.apsd",
21831 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x0800,
21834 {&hf_ieee80211_ff_radio_measurement,
21835 {"Radio Measurement", "wlan.fixed.capabilities.radio_measurement",
21836 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x1000,
21839 {&hf_ieee80211_ff_dsss_ofdm,
21840 {"DSSS-OFDM", "wlan.fixed.capabilities.dsss_ofdm",
21841 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed), 0x2000,
21842 "DSSS-OFDM Modulation", HFILL }},
21844 {&hf_ieee80211_ff_cf_del_blk_ack,
21845 {"Delayed Block Ack", "wlan.fixed.capabilities.del_blk_ack",
21846 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x4000,
21849 {&hf_ieee80211_ff_cf_imm_blk_ack,
21850 {"Immediate Block Ack", "wlan.fixed.capabilities.imm_blk_ack",
21851 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x8000,
21854 {&hf_ieee80211_ff_auth_seq,
21855 {"Authentication SEQ", "wlan.fixed.auth_seq",
21856 FT_UINT16, BASE_HEX, NULL, 0,
21857 "Authentication Sequence Number", HFILL }},
21859 {&hf_ieee80211_ff_assoc_id,
21860 {"Association ID", "wlan.fixed.aid",
21861 FT_UINT16, BASE_HEX, NULL, 0x3FFF,
21864 {&hf_ieee80211_ff_listen_ival,
21865 {"Listen Interval", "wlan.fixed.listen_ival",
21866 FT_UINT16, BASE_HEX, NULL, 0,
21869 {&hf_ieee80211_ff_current_ap,
21870 {"Current AP", "wlan.fixed.current_ap",
21871 FT_ETHER, BASE_NONE, NULL, 0,
21872 "MAC address of current AP", HFILL }},
21874 {&hf_ieee80211_ff_reason,
21875 {"Reason code", "wlan.fixed.reason_code",
21876 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_reason_code_ext, 0,
21877 "Reason for unsolicited notification", HFILL }},
21879 {&hf_ieee80211_ff_status_code,
21880 {"Status code", "wlan.fixed.status_code",
21881 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_status_code_ext, 0,
21882 "Status of requested event", HFILL }},
21884 {&hf_ieee80211_ff_category_code,
21885 {"Category code", "wlan.fixed.category_code",
21886 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &category_codes_ext, 0,
21887 "Management action category", HFILL }},
21889 {&hf_ieee80211_ff_action_code,
21890 {"Action code", "wlan.fixed.action_code",
21891 FT_UINT16, BASE_DEC, VALS(action_codes), 0,
21892 "Management action code", HFILL }},
21894 {&hf_ieee80211_ff_dialog_token,
21895 {"Dialog token", "wlan.fixed.dialog_token",
21896 FT_UINT8, BASE_HEX, NULL, 0,
21897 "Management action dialog token", HFILL }},
21899 {&hf_ieee80211_ff_followup_dialog_token,
21900 {"Followup Dialog token", "wlan.fixed.followup_dialog_token",
21901 FT_UINT8, BASE_HEX, NULL, 0,
21902 "Management action followup dialog token", HFILL }},
21904 {&hf_ieee80211_ff_marvell_action_type,
21905 {"Marvell Action type", "wlan.fixed.mrvl_action_type",
21906 FT_UINT8, BASE_DEC, VALS(vendor_action_types_mrvl), 0,
21907 "Vendor Specific Action Type (Marvell)", HFILL }},
21909 {&hf_ieee80211_ff_marvell_mesh_mgt_action_code,
21910 {"Mesh action(Marvell)", "wlan.fixed.mrvl_mesh_action",
21911 FT_UINT8, BASE_HEX, VALS(mesh_mgt_action_codes_mrvl), 0,
21912 "Mesh action code(Marvell)", HFILL }},
21914 {&hf_ieee80211_ff_marvell_mesh_mgt_length,
21915 {"Message Length", "wlan.fixed.length",
21916 FT_UINT8, BASE_DEC, NULL, 0,
21919 {&hf_ieee80211_ff_marvell_mesh_mgt_mode,
21920 {"Message Mode", "wlan.fixed.mode",
21921 FT_UINT8, BASE_HEX, NULL, 0,
21924 {&hf_ieee80211_ff_marvell_mesh_mgt_ttl,
21925 {"Message TTL", "wlan.fixed.ttl",
21926 FT_UINT8, BASE_DEC, NULL, 0,
21929 {&hf_ieee80211_ff_marvell_mesh_mgt_dstcount,
21930 {"Destination Count", "wlan.fixed.dstcount",
21931 FT_UINT8, BASE_DEC, NULL, 0,
21934 {&hf_ieee80211_ff_marvell_mesh_mgt_hopcount,
21935 {"Hop Count", "wlan.fixed.hopcount",
21936 FT_UINT8, BASE_DEC, NULL, 0,
21939 {&hf_ieee80211_ff_marvell_mesh_mgt_rreqid,
21940 {"RREQ ID", "wlan.fixed.rreqid",
21941 FT_UINT32, BASE_DEC, NULL, 0,
21944 {&hf_ieee80211_ff_marvell_mesh_mgt_sa,
21945 {"Source Address", "wlan.fixed.sa",
21946 FT_ETHER, BASE_NONE, NULL, 0,
21947 "Source MAC address", HFILL }},
21949 {&hf_ieee80211_ff_marvell_mesh_mgt_ssn,
21950 {"SSN", "wlan.fixed.ssn",
21951 FT_UINT32, BASE_DEC, NULL, 0,
21952 "Source Sequence Number", HFILL }},
21954 {&hf_ieee80211_ff_marvell_mesh_mgt_metric,
21955 {"Metric", "wlan.fixed.metric",
21956 FT_UINT32, BASE_DEC, NULL, 0,
21957 "Route Metric", HFILL }},
21959 {&hf_ieee80211_ff_marvell_mesh_mgt_flags,
21960 {"RREQ Flags", "wlan.fixed.hopcount",
21961 FT_UINT8, BASE_HEX, NULL, 0,
21964 {&hf_ieee80211_ff_marvell_mesh_mgt_da,
21965 {"Destination Address", "wlan.fixed.da",
21966 FT_ETHER, BASE_NONE, NULL, 0,
21967 "Destination MAC address", HFILL }},
21969 {&hf_ieee80211_ff_marvell_mesh_mgt_dsn,
21970 {"DSN", "wlan.fixed.dsn",
21971 FT_UINT32, BASE_DEC, NULL, 0,
21972 "Destination Sequence Number", HFILL }},
21974 {&hf_ieee80211_ff_marvell_mesh_mgt_lifetime,
21975 {"Lifetime", "wlan.fixed.lifetime",
21976 FT_UINT32, BASE_DEC, NULL, 0,
21977 "Route Lifetime", HFILL }},
21979 {&hf_ieee80211_ff_wme_action_code,
21980 {"Action code", "wlan.fixed.action_code",
21981 FT_UINT16, BASE_HEX, VALS(wme_action_codes), 0,
21982 "Management notification action code", HFILL }},
21984 {&hf_ieee80211_ff_wme_status_code,
21985 {"Status code", "wlan.fixed.status_code",
21986 FT_UINT16, BASE_HEX, VALS(wme_status_codes), 0,
21987 "Management notification setup response status code", HFILL }},
21989 {&hf_ieee80211_ff_mesh_action,
21990 {"Mesh Action code", "wlan.fixed.mesh_action",
21991 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &mesh_action_ext, 0,
21994 {&hf_ieee80211_ff_multihop_action,
21995 {"Multihop Action code", "wlan.fixed.multihop_action",
21996 FT_UINT8, BASE_HEX, VALS(multihop_action), 0,
21999 {&hf_ieee80211_ff_mesh_flags,
22000 {"Mesh Flags", "wlan.fixed.mesh_flags",
22001 FT_UINT8, BASE_HEX, NULL, 0,
22004 {&hf_ieee80211_ff_mesh_ttl,
22005 {"Mesh TTL", "wlan.fixed.mesh_ttl",
22006 FT_UINT8, BASE_HEX, NULL, 0,
22009 {&hf_ieee80211_ff_mesh_sequence,
22010 {"Sequence Number", "wlan.fixed.mesh_sequence",
22011 FT_UINT32, BASE_HEX, NULL, 0,
22014 {&hf_ieee80211_ff_mesh_addr4,
22015 {"Mesh Extended Address 4", "wlan.fixed.mesh_addr4",
22016 FT_ETHER, BASE_NONE, NULL, 0,
22019 {&hf_ieee80211_ff_mesh_addr5,
22020 {"Mesh Extended Address 5", "wlan.fixed.mesh_addr5",
22021 FT_ETHER, BASE_NONE, NULL, 0,
22024 {&hf_ieee80211_ff_mesh_addr6,
22025 {"Mesh Extended Address 6", "wlan.fixed.mesh_addr6",
22026 FT_ETHER, BASE_NONE, NULL, 0,
22029 {&hf_ieee80211_ff_selfprot_action,
22030 {"Self-protected Action code", "wlan.fixed.selfprot_action",
22031 FT_UINT8, BASE_HEX, VALS(selfprot_action), 0,
22034 {&hf_ieee80211_mesh_peering_proto,
22035 {"Mesh Peering Protocol ID", "wlan.peering.proto",
22036 FT_UINT16, BASE_HEX, VALS(mesh_peering_proto_ids), 0,
22039 {&hf_ieee80211_mesh_peering_local_link_id,
22040 {"Local Link ID", "wlan.peering.local_id",
22041 FT_UINT16, BASE_HEX, NULL, 0,
22042 "Mesh Peering Management Local Link ID", HFILL }},
22044 {&hf_ieee80211_mesh_peering_peer_link_id,
22045 {"Peer Link ID", "wlan.peering.peer_id",
22046 FT_UINT16, BASE_HEX, NULL, 0,
22047 "Mesh Peering Management Peer Link ID", HFILL }},
22049 {&hf_ieee80211_ff_hwmp_flags,
22050 {"HWMP Flags", "wlan.hwmp.flags",
22051 FT_UINT8, BASE_HEX, NULL, 0,
22054 {&hf_ieee80211_ff_hwmp_hopcount,
22055 {"HWMP Hop Count", "wlan.hwmp.hopcount",
22056 FT_UINT8, BASE_DEC, NULL, 0,
22059 {&hf_ieee80211_ff_hwmp_ttl,
22060 {"HWMP TTL", "wlan.hwmp.ttl",
22061 FT_UINT8, BASE_DEC, NULL, 0,
22064 {&hf_ieee80211_ff_hwmp_pdid,
22065 {"HWMP Path Discovery ID", "wlan.hwmp.pdid",
22066 FT_UINT32, BASE_DEC, NULL, 0,
22069 {&hf_ieee80211_ff_hwmp_orig_sta,
22070 {"Originator STA Address", "wlan.hwmp.orig_sta",
22071 FT_ETHER, BASE_NONE, NULL, 0,
22074 {&hf_ieee80211_ff_hwmp_orig_sn,
22075 {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn",
22076 FT_UINT32, BASE_DEC, NULL, 0,
22079 {&hf_ieee80211_ff_hwmp_orig_ext,
22080 {"Originator External Address", "wlan.hwmp.orig_ext",
22081 FT_ETHER, BASE_NONE, NULL, 0,
22084 {&hf_ieee80211_ff_hwmp_lifetime,
22085 {"HWMP Lifetime", "wlan.hwmp.lifetime",
22086 FT_UINT32, BASE_DEC, NULL, 0,
22089 {&hf_ieee80211_ff_hwmp_metric,
22090 {"HWMP Metric", "wlan.hwmp.metric",
22091 FT_UINT32, BASE_DEC, NULL, 0,
22094 {&hf_ieee80211_ff_hwmp_targ_count,
22095 {"HWMP Target Count", "wlan.hwmp.targ_count",
22096 FT_UINT8, BASE_DEC, NULL, 0,
22099 {&hf_ieee80211_ff_hwmp_targ_flags,
22100 {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags",
22101 FT_UINT8, BASE_HEX, NULL, 0,
22104 {&hf_ieee80211_ff_hwmp_targ_to_flags,
22105 {"TO Flag", "wlan.hwmp.to_flag",
22106 FT_BOOLEAN, 8, TFS(&hwmp_targ_to_flags), 0x01,
22107 "Target Only Flag", HFILL }},
22109 {&hf_ieee80211_ff_hwmp_targ_usn_flags,
22110 {"USN Flag", "wlan.hwmp.usn_flag",
22111 FT_BOOLEAN, 8, TFS(&hwmp_targ_usn_flags), 0x04,
22112 "Unknown Target HWMP Sequence Number Flag", HFILL }},
22114 {&hf_ieee80211_ff_hwmp_targ_sta,
22115 {"Target STA Address", "wlan.hwmp.targ_sta",
22116 FT_ETHER, BASE_NONE, NULL, 0,
22119 {&hf_ieee80211_ff_hwmp_targ_ext,
22120 {"Target External Address", "wlan.hwmp.targ_ext",
22121 FT_ETHER, BASE_NONE, NULL, 0,
22124 {&hf_ieee80211_ff_hwmp_targ_sn,
22125 {"Target HWMP Sequence Number", "wlan.hwmp.targ_sn",
22126 FT_UINT32, BASE_DEC, NULL, 0,
22129 {&hf_ieee80211_mesh_config_path_sel_protocol,
22130 {"Path Selection Protocol", "wlan.mesh.config.ps_protocol",
22131 FT_UINT8, BASE_HEX, NULL, 0,
22132 "Mesh Configuration Path Selection Protocol", HFILL }},
22134 {&hf_ieee80211_mesh_config_path_sel_metric,
22135 {"Path Selection Metric", "wlan.mesh.config.ps_metric",
22136 FT_UINT8, BASE_HEX, NULL, 0,
22137 "Mesh Configuration Path Selection Metric", HFILL }},
22139 {&hf_ieee80211_mesh_config_congestion_control,
22140 {"Congestion Control", "wlan.mesh.config.cong_ctl",
22141 FT_UINT8, BASE_HEX, NULL, 0,
22142 "Mesh Configuration Congestion Control", HFILL }},
22144 {&hf_ieee80211_mesh_config_sync_method,
22145 {"Synchronization Method", "wlan.mesh.config.sync_method",
22146 FT_UINT8, BASE_HEX, NULL, 0,
22147 "Mesh Configuration Synchronization Method", HFILL }},
22149 {&hf_ieee80211_mesh_config_auth_protocol,
22150 {"Authentication Protocol", "wlan.mesh.config.auth_protocol",
22151 FT_UINT8, BASE_HEX, NULL, 0,
22152 "Mesh Configuration Authentication Protocol", HFILL }},
22154 {&hf_ieee80211_mesh_config_formation_info,
22155 {"Formation Info", "wlan.mesh.config.formation_info",
22156 FT_UINT8, BASE_HEX, NULL, 0,
22157 "Mesh Configuration Formation Info", HFILL }},
22159 {&hf_ieee80211_mesh_form_info_num_of_peerings,
22160 {"Number of Peerings", "wlan.mesh.config.formation_info.num_peers",
22161 FT_UINT8, BASE_DEC, NULL, 0x7E,
22164 {&hf_ieee80211_mesh_config_capability,
22165 {"Capability", "wlan.mesh.config.cap",
22166 FT_UINT8, BASE_HEX, NULL, 0,
22167 "Mesh Configuration Capability", HFILL }},
22169 {&hf_ieee80211_mesh_config_cap_accepting,
22170 {"Accepting Additional Mesh Peerings", "wlan.mesh.config.cap.accept",
22171 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
22174 {&hf_ieee80211_mesh_config_cap_mcca_support,
22175 {"MCCA Support", "wlan.mesh.config.cap.mcca_support",
22176 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
22179 {&hf_ieee80211_mesh_config_cap_mcca_enabled,
22180 {"MCCA Enabled", "wlan.mesh.config.cap.mcca_enabled",
22181 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
22184 {&hf_ieee80211_mesh_config_cap_forwarding,
22185 {"Mesh Forwarding", "wlan.mesh.config.cap.forwarding",
22186 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
22189 {&hf_ieee80211_mesh_config_cap_mbca_enabled,
22190 {"MBCA Enabled", "wlan.mesh.config.cap.mbca_enabled",
22191 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
22194 {&hf_ieee80211_mesh_config_cap_tbtt_adjusting,
22195 {"TBTT Adjustment", "wlan.mesh.config.cap.tbtt_adjusting",
22196 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
22199 {&hf_ieee80211_mesh_config_cap_power_save_level,
22200 {"Power Save", "wlan.mesh.config.cap.power_save_level",
22201 FT_BOOLEAN, 8, TFS(&mesh_config_cap_power_save_level_flags), 0x40,
22204 {&hf_ieee80211_mesh_id,
22205 {"Mesh ID", "wlan.mesh.id",
22206 FT_STRING, BASE_NONE, NULL, 0,
22209 {&hf_ieee80211_rann_flags,
22210 {"RANN Flags", "wlan.rann.flags",
22211 FT_UINT8, BASE_HEX, NULL, 0,
22212 "Root Announcement Flags", HFILL }},
22214 {&hf_ieee80211_rann_root_sta,
22215 {"Root STA Address", "wlan.rann.root_sta", FT_ETHER, BASE_NONE, NULL, 0,
22216 "Root Mesh STA Address", HFILL }},
22218 {&hf_ieee80211_rann_sn,
22219 {"Root STA Sequence Number", "wlan.rann.rann_sn",
22220 FT_UINT32, BASE_DEC, NULL, 0,
22221 "Root Mesh STA Sequence Number", HFILL }},
22223 {&hf_ieee80211_rann_interval,
22224 {"RANN Interval", "wlan.rann.interval",
22225 FT_UINT32, BASE_DEC, NULL, 0,
22226 "Root Announcement Interval", HFILL }},
22228 {&hf_ieee80211_ff_qos_action_code,
22229 {"Action code", "wlan.fixed.action_code",
22230 FT_UINT16, BASE_HEX, VALS(qos_action_codes), 0,
22231 "QoS management action code", HFILL }},
22233 {&hf_ieee80211_ff_ba_action,
22234 {"Action code", "wlan.fixed.action_code",
22235 FT_UINT8, BASE_HEX, VALS(ba_action_codes), 0,
22236 "Block Ack action code", HFILL }},
22238 {&hf_ieee80211_ff_check_beacon,
22239 {"Check Beacon", "wlan.fixed.check_beacon",
22240 FT_UINT8, BASE_DEC, NULL, 0,
22241 "Unprotected WNM Check Beacon", HFILL }},
22243 {&hf_ieee80211_ff_tod,
22244 {"TOD", "wlan.fixed.tod",
22245 FT_UINT32, BASE_DEC, NULL, 0,
22246 "Previous TS of transmit antenna port", HFILL }},
22248 {&hf_ieee80211_ff_toa,
22249 {"TOA", "wlan.fixed.toa",
22250 FT_UINT32, BASE_DEC, NULL, 0,
22251 "Previous TS of receive antenna port", HFILL }},
22253 {&hf_ieee80211_ff_max_tod_err,
22254 {"MAX TOD ERROR", "wlan.fixed.max_tod_err",
22255 FT_UINT8, BASE_DEC, NULL, 0,
22256 "Maximal Error at Previous TS of transmit antenna port", HFILL }},
22258 {&hf_ieee80211_ff_max_toa_err,
22259 {"MAX TOA ERROR", "wlan.fixed.max_toa_err",
22260 FT_UINT8, BASE_DEC, NULL, 0,
22261 "Maximal Error at Previous TS of receive antenna port", HFILL }},
22263 {&hf_ieee80211_ff_dls_action_code,
22264 {"Action code", "wlan.fixed.action_code",
22265 FT_UINT16, BASE_HEX, VALS(dls_action_codes), 0,
22266 "DLS management action code", HFILL }},
22268 {&hf_ieee80211_ff_dst_mac_addr,
22269 {"Destination address", "wlan.fixed.dst_mac_addr",
22270 FT_ETHER, BASE_NONE, NULL, 0,
22271 "Destination MAC address", HFILL }},
22273 {&hf_ieee80211_ff_src_mac_addr,
22274 {"Source address", "wlan.fixed.src_mac_addr",
22275 FT_ETHER, BASE_NONE, NULL, 0,
22276 "Source MAC address", HFILL }},
22278 {&hf_ieee80211_ff_req_ap_addr,
22279 {"RequesterAP address", "wlan.fixed.req_ap_addr",
22280 FT_ETHER, BASE_NONE, NULL, 0,
22283 {&hf_ieee80211_ff_res_ap_addr,
22284 {"ResponderAP address", "wlan.fixed.res_ap_addr",
22285 FT_ETHER, BASE_NONE, NULL, 0,
22288 {&hf_ieee80211_ff_ft_action_code,
22289 {"Action code", "wlan.fixed.action_code",
22290 FT_UINT8, BASE_DEC, VALS(ft_action_codes), 0,
22291 "Management action code", HFILL }},
22293 {&hf_ieee80211_ff_sta_address,
22294 {"STA Address", "wlan.fixed.sta_address",
22295 FT_ETHER, BASE_NONE, NULL, 0,
22298 {&hf_ieee80211_ff_target_ap_address,
22299 {"Target AP Address", "wlan.fixed.target_ap_address",
22300 FT_ETHER, BASE_NONE, NULL, 0,
22301 "Target AP MAC address", HFILL }},
22303 {&hf_ieee80211_ff_gas_comeback_delay,
22304 {"GAS Comeback Delay", "wlan.fixed.gas_comeback_delay",
22305 FT_UINT16, BASE_DEC, NULL, 0,
22308 {&hf_ieee80211_ff_gas_fragment_id,
22309 {"GAS Query Response Fragment ID", "wlan.fixed.gas_fragment_id",
22310 FT_UINT8, BASE_DEC, NULL, 0x7f,
22313 {&hf_ieee80211_ff_more_gas_fragments,
22314 {"More GAS Fragments", "wlan.fixed.more_gas_fragments",
22315 FT_UINT8, BASE_DEC, NULL, 0x80,
22318 {&hf_ieee80211_ff_query_request_length,
22319 {"Query Request Length", "wlan.fixed.query_request_length",
22320 FT_UINT16, BASE_DEC, NULL, 0,
22323 {&hf_ieee80211_ff_query_request,
22324 {"Query Request", "wlan.fixed.query_request",
22325 FT_BYTES, BASE_NONE, NULL, 0,
22328 {&hf_ieee80211_ff_query_response_length,
22329 {"Query Response Length", "wlan.fixed.query_response_length",
22330 FT_UINT16, BASE_DEC, NULL, 0,
22333 {&hf_ieee80211_ff_query_response,
22334 {"Query Response", "wlan.fixed.query_response",
22335 FT_BYTES, BASE_NONE, NULL, 0,
22338 {&hf_ieee80211_gas_resp_fragments,
22339 {"GAS Query Response fragments", "wlan.fixed.fragments",
22340 FT_NONE, BASE_NONE, NULL, 0x00,
22343 {&hf_ieee80211_gas_resp_fragment,
22344 {"GAS Query Response fragment", "wlan.fixed.fragment",
22345 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
22348 {&hf_ieee80211_gas_resp_fragment_overlap,
22349 {"GAS Query Response fragment overlap", "wlan.fixed.fragment.overlap",
22350 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
22353 {&hf_ieee80211_gas_resp_fragment_overlap_conflict,
22354 {"GAS Query Response fragment overlapping with conflicting data", "wlan.fixed.fragment.overlap.conflicts",
22355 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
22358 {&hf_ieee80211_gas_resp_fragment_multiple_tails,
22359 {"GAS Query Response has multiple tail fragments", "wlan.fixed.fragment.multiple_tails",
22360 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
22363 {&hf_ieee80211_gas_resp_fragment_too_long_fragment,
22364 {"GAS Query Response fragment too long", "wlan.fixed.fragment.too_long_fragment",
22365 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
22368 {&hf_ieee80211_gas_resp_fragment_error,
22369 {"GAS Query Response reassembly error", "wlan.fixed.fragment.error",
22370 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
22373 {&hf_ieee80211_gas_resp_fragment_count,
22374 {"GAS Query Response fragment count", "wlan.fixed.fragment.count",
22375 FT_UINT32, BASE_DEC, NULL, 0x00,
22378 {&hf_ieee80211_gas_resp_reassembled_in,
22379 {"Reassembled in", "wlan.fixed.reassembled.in",
22380 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
22383 {&hf_ieee80211_gas_resp_reassembled_length,
22384 {"Reassembled length", "wlan.fixed.reassembled.length",
22385 FT_UINT32, BASE_DEC, NULL, 0x00,
22388 {&hf_ieee80211_ff_anqp_info_id,
22389 {"Info ID", "wlan.fixed.anqp.info_id",
22390 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
22391 "Access Network Query Protocol Info ID", HFILL }},
22393 {&hf_ieee80211_ff_anqp_info_length,
22394 {"Length", "wlan.fixed.anqp.info_length",
22395 FT_UINT16, BASE_DEC, NULL, 0,
22396 "Access Network Query Protocol Length", HFILL }},
22398 {&hf_ieee80211_ff_anqp_info,
22399 {"Information", "wlan.fixed.anqp.info",
22400 FT_BYTES, BASE_NONE, NULL, 0,
22401 "Access Network Query Protocol Information", HFILL }},
22403 {&hf_ieee80211_ff_anqp_query_id,
22404 {"ANQP Query ID", "wlan.fixed.anqp.query_id",
22405 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
22406 "Access Network Query Protocol Query ID", HFILL }},
22408 {&hf_ieee80211_ff_anqp_capability,
22409 {"ANQP Capability", "wlan.fixed.anqp.capability",
22410 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
22411 "Access Network Query Protocol Query ID", HFILL }},
22413 {&hf_ieee80211_ff_anqp_capability_vlen,
22414 {"Vendor-specific Capability Length", "wlan.fixed.anqp.capability_vlen",
22415 FT_UINT16, BASE_DEC, NULL, 0,
22418 {&hf_ieee80211_ff_anqp_capability_vendor,
22419 {"Vendor-specific Capability", "wlan.fixed.anqp.capability_vendor",
22420 FT_BYTES, BASE_NONE, NULL, 0,
22423 {&hf_ieee80211_ff_venue_info_group,
22424 {"Venue Group", "wlan.fixed.venue_info.group",
22425 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &venue_group_vals_ext, 0,
22428 {&hf_ieee80211_ff_venue_info_type,
22429 {"Venue Type", "wlan.fixed.venue_info.type",
22430 FT_UINT8, BASE_DEC, NULL, 0,
22433 {&hf_ieee80211_ff_anqp_venue_length,
22434 {"Venue Name Duple Length", "wlan.fixed.anqp.venue.length",
22435 FT_UINT8, BASE_DEC, NULL, 0,
22438 {&hf_ieee80211_ff_anqp_venue_language,
22439 {"Language Code", "wlan.fixed.anqp.venue.language",
22440 FT_STRING, BASE_NONE, NULL, 0,
22441 "Venue Name Language Code", HFILL }},
22443 {&hf_ieee80211_ff_anqp_venue_name,
22444 {"Venue Name", "wlan.fixed.anqp.venue.name",
22445 FT_STRING, BASE_NONE, NULL, 0,
22448 {&hf_ieee80211_ff_anqp_nw_auth_type_indicator,
22449 {"Network Authentication Type Indicator", "wlan.fixed.anqp.nw_auth_type.indicator",
22450 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals), 0,
22453 {&hf_ieee80211_ff_anqp_nw_auth_type_url_len,
22454 {"Re-direct URL Length", "wlan.fixed.anqp.nw_auth_type.url_len",
22455 FT_UINT16, BASE_DEC, NULL, 0,
22458 {&hf_ieee80211_ff_anqp_nw_auth_type_url,
22459 {"Re-direct URL", "wlan.fixed.anqp.nw_auth_type_url",
22460 FT_STRING, BASE_NONE, NULL, 0,
22463 {&hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
22464 {"OI Length", "wlan.fixed.anqp.roaming_consortium.oi_len",
22465 FT_UINT8, BASE_DEC, NULL, 0,
22466 "Roaming Consortium OI Length", HFILL }},
22468 {&hf_ieee80211_ff_anqp_roaming_consortium_oi,
22469 {"OI", "wlan.fixed.anqp.roaming_consortium.oi",
22470 FT_BYTES, BASE_NONE, NULL, 0,
22471 "Roaming Consortium OI", HFILL }},
22473 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
22474 {"IPv6 Address", "wlan.fixed.anqp.ip_addr_availability.ipv6",
22475 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv6_vals), 0x03,
22476 "IP Address Type Availability information for IPv6", HFILL }},
22478 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
22479 {"IPv4 Address", "wlan.fixed.anqp.ip_addr_availability.ipv4",
22480 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv4_vals), 0xfc,
22481 "IP Address Type Availability information for IPv4", HFILL }},
22483 {&hf_ieee80211_ff_anqp_nai_realm_count,
22484 {"NAI Realm Count", "wlan.fixed.anqp.nai_realm_list.count",
22485 FT_UINT16, BASE_DEC, NULL, 0,
22488 {&hf_ieee80211_ff_anqp_nai_field_len,
22489 {"NAI Realm Data Field Length", "wlan.fixed.anqp.nai_realm_list.field_len",
22490 FT_UINT16, BASE_DEC, NULL, 0,
22493 {&hf_ieee80211_ff_anqp_nai_realm_encoding,
22494 {"NAI Realm Encoding", "wlan.fixed.naqp_nai_realm_list.encoding",
22495 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals), 0x01,
22498 {&hf_ieee80211_ff_anqp_nai_realm_length,
22499 {"NAI Realm Length", "wlan.fixed.naqp_nai_realm_list.realm_length",
22500 FT_UINT8, BASE_DEC, NULL, 0,
22503 {&hf_ieee80211_ff_anqp_nai_realm,
22504 {"NAI Realm", "wlan.fixed.naqp_nai_realm_list.realm",
22505 FT_STRING, BASE_NONE, NULL, 0,
22508 {&hf_ieee80211_ff_anqp_nai_realm_eap_count,
22509 {"EAP Method Count", "wlan.fixed.naqp_nai_realm_list.eap_method_count",
22510 FT_UINT8, BASE_DEC, NULL, 0,
22513 {&hf_ieee80211_ff_anqp_nai_realm_eap_len,
22514 {"EAP Method subfield Length", "wlan.fixed.naqp_nai_realm_list.eap_method_len",
22515 FT_UINT8, BASE_DEC, NULL, 0,
22518 {&hf_ieee80211_ff_anqp_nai_realm_eap_method,
22519 {"EAP Method", "wlan.fixed.naqp_nai_realm_list.eap_method",
22520 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &eap_type_vals_ext, 0,
22523 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
22524 {"Authentication Parameter Count", "wlan.fixed.naqp_nai_realm_list.auth_param_count",
22525 FT_UINT8, BASE_DEC, NULL, 0,
22528 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
22529 {"Authentication Parameter ID", "wlan.fixed.naqp_nai_realm_list.auth_param_id",
22530 FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals), 0,
22533 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
22534 {"Authentication Parameter Length", "wlan.fixed.naqp_nai_realm_list.auth_param_len",
22535 FT_UINT8, BASE_DEC, NULL, 0,
22538 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
22539 {"Authentication Parameter Value", "wlan.fixed.naqp_nai_realm_list.auth_param_value",
22540 FT_BYTES, BASE_NONE, NULL, 0,
22543 {&hf_ieee80211_3gpp_gc_gud,
22544 {"GUD", "wlan.fixed.anqp.3gpp_cellular_info.gud",
22545 FT_UINT8, BASE_DEC, NULL, 0,
22546 "Generic container User Data", HFILL }},
22548 {&hf_ieee80211_3gpp_gc_udhl,
22549 {"UDHL", "wlan.fixed.anqp.3gpp_cellular_info.udhl",
22550 FT_UINT8, BASE_DEC, NULL, 0,
22551 "User Data Header Length", HFILL }},
22553 {&hf_ieee80211_3gpp_gc_iei,
22554 {"IEI", "wlan.fixed.anqp.3gpp_cellular_info.iei",
22555 FT_UINT8, BASE_DEC, NULL, 0,
22556 "Information Element Identity", HFILL }},
22558 {&hf_ieee80211_3gpp_gc_plmn_len,
22559 {"PLMN Length", "wlan.fixed.anqp.3gpp_cellular_info.plmn_len",
22560 FT_UINT8, BASE_DEC, NULL, 0,
22561 "Length of PLMN List value contents", HFILL }},
22563 {&hf_ieee80211_3gpp_gc_num_plmns,
22564 {"Number of PLMNs", "wlan.fixed.anqp.3gpp_cellular_info.num_plmns",
22565 FT_UINT8, BASE_DEC, NULL, 0,
22568 {&hf_ieee80211_ff_anqp_domain_name_len,
22569 {"Domain Name Length", "wlan.fixed.anqp.domain_name_list.len",
22570 FT_UINT8, BASE_DEC, NULL, 0,
22573 {&hf_ieee80211_ff_anqp_domain_name,
22574 {"Domain Name", "wlan.fixed.anqp.domain_name_list.name",
22575 FT_STRING, BASE_NONE, NULL, 0,
22578 {&hf_ieee80211_ff_dls_timeout,
22579 {"DLS timeout", "wlan.fixed.dls_timeout",
22580 FT_UINT16, BASE_HEX, NULL, 0,
22581 "DLS timeout value", HFILL }},
22583 {&hf_ieee80211_ff_sa_query_action_code,
22584 {"Action code", "wlan.fixed.action_code",
22585 FT_UINT8, BASE_DEC, VALS(sa_query_action_codes), 0,
22586 "Management action code", HFILL }},
22588 {&hf_ieee80211_ff_transaction_id,
22589 {"Transaction Id", "wlan.fixed.transaction_id",
22590 FT_UINT16, BASE_HEX, NULL, 0,
22593 {&hf_ieee80211_anqp_wfa_subtype,
22594 {"ANQP WFA Subtype", "wlan.anqp.wfa.subtype",
22595 FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals), 0, NULL, HFILL }},
22597 {&hf_hs20_indication_dgaf_disabled,
22598 {"DGAF Disabled", "wlan.hs20.indication.dgaf_disabled",
22599 FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
22601 {&hf_hs20_indication_pps_mo_id_present,
22602 {"PPS MO ID Present", "wlan.hs20.indication.pps_mo_id_present",
22603 FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
22605 {&hf_hs20_indication_anqp_domain_id_present,
22606 {"ANQP Domain ID Present", "wlan.hs20.indication.anqp_domain_id_present",
22607 FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
22609 {&hf_hs20_indication_release_number,
22610 {"Release Number", "wlan.hs20.indication.release_number",
22611 FT_UINT8, BASE_DEC, VALS(hs20_indication_release_number_vals), 0xF0, NULL, HFILL }},
22613 {&hf_hs20_anqp_subtype,
22614 {"Subtype", "wlan.hs20.anqp.subtype",
22615 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals), 0,
22616 "Hotspot 2.0 ANQP Subtype", HFILL }},
22618 {&hf_hs20_anqp_reserved,
22619 {"Reserved", "wlan.hs20.anqp.reserved",
22620 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
22622 {&hf_hs20_anqp_payload,
22623 {"Payload", "wlan.hs20.anqp.payload",
22624 FT_BYTES, BASE_NONE, NULL, 0,
22625 "Hotspot 2.0 ANQP Payload", HFILL }},
22627 {&hf_hs20_anqp_hs_query_list,
22628 {"Queried Subtype", "wlan.hs20.anqp.hs_query_list",
22629 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals), 0,
22630 "Queried HS 2.0 Element Subtype", HFILL }},
22632 {&hf_hs20_anqp_hs_capability_list,
22633 {"Capability", "wlan.hs20.anqp.hs_capability_list",
22634 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals), 0,
22635 "Hotspot 2.0 ANQP Subtype Capability", HFILL }},
22637 {&hf_hs20_anqp_ofn_length,
22638 {"Length", "wlan.hs20.anqp.ofn.length",
22639 FT_UINT8, BASE_DEC, NULL, 0,
22640 "Operator Friendly Name Length", HFILL }},
22642 {&hf_hs20_anqp_ofn_language,
22643 {"Language Code", "wlan.hs20.anqp.ofn.language",
22644 FT_STRING, BASE_NONE, NULL, 0,
22645 "Operator Friendly Name Language Code", HFILL }},
22647 {&hf_hs20_anqp_ofn_name,
22648 {"Operator Friendly Name", "wlan.hs20.anqp.ofn.name",
22649 FT_STRING, BASE_NONE, NULL, 0,
22652 {&hf_hs20_anqp_wan_metrics_link_status,
22653 {"Link Status", "wlan.hs20.anqp.wan_metrics.link_status",
22654 FT_UINT8, BASE_DEC, VALS(hs20_wm_link_status_vals), 0x03, NULL, HFILL }},
22656 {&hf_hs20_anqp_wan_metrics_symmetric_link,
22657 {"Symmetric Link", "wlan.hs20.anqp.wan_metrics.symmetric_link",
22658 FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
22660 {&hf_hs20_anqp_wan_metrics_at_capacity,
22661 {"At Capacity", "wlan.hs20.anqp.wan_metrics.at_capacity",
22662 FT_UINT8, BASE_DEC, NULL, 0x08, NULL, HFILL }},
22664 {&hf_hs20_anqp_wan_metrics_reserved,
22665 {"Reserved", "wlan.hs20.anqp.wan_metrics.reserved",
22666 FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
22668 {&hf_hs20_anqp_wan_metrics_downlink_speed,
22669 {"Downlink Speed", "wlan.hs20.anqp.wan_metrics.downlink_speed",
22670 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
22672 {&hf_hs20_anqp_wan_metrics_uplink_speed,
22673 {"Uplink Speed", "wlan.hs20.anqp.wan_metrics.uplink_speed",
22674 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
22676 {&hf_hs20_anqp_wan_metrics_downlink_load,
22677 {"Downlink Load", "wlan.hs20.anqp.wan_metrics.downlink_load",
22678 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
22680 {&hf_hs20_anqp_wan_metrics_uplink_load,
22681 {"Uplink Load", "wlan.hs20.anqp.wan_metrics.uplink_load",
22682 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
22684 {&hf_hs20_anqp_wan_metrics_lmd,
22685 {"LMD", "wlan.hs20.anqp.wan_metrics.lmd",
22686 FT_UINT16, BASE_DEC, NULL, 0, "Load Measurement Duration", HFILL }},
22688 {&hf_hs20_anqp_cc_proto_ip_proto,
22689 {"IP Protocol", "wlan.hs20.anqp.cc.ip_proto",
22690 FT_UINT8, BASE_DEC, NULL, 0,
22691 "ProtoPort Tuple - IP Protocol", HFILL }},
22693 {&hf_hs20_anqp_cc_proto_port_num,
22694 {"Port Number", "wlan.hs20.anqp.cc.port_num",
22695 FT_UINT16, BASE_DEC, NULL, 0,
22696 "ProtoPort Tuple - Port Number", HFILL }},
22698 {&hf_hs20_anqp_cc_proto_status,
22699 {"Status", "wlan.hs20.anqp.cc.status",
22700 FT_UINT8, BASE_DEC, VALS(hs20_cc_status_vals), 0,
22701 "ProtoPort Tuple - Status", HFILL }},
22703 {&hf_hs20_anqp_nai_hrq_count,
22704 {"NAI Home Realm Count", "wlan.hs20.anqp.nai_hrq.count",
22705 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
22707 {&hf_hs20_anqp_nai_hrq_encoding_type,
22708 {"NAI Home Realm Encoding Type",
22709 "wlan.hs20.anqp.nai_hrq.encoding_type",
22710 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals),
22711 0x01, NULL, HFILL }},
22713 {&hf_hs20_anqp_nai_hrq_length,
22714 {"NAI Home Realm Name Length", "wlan.hs20.anqp.nai_hrq.length",
22715 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
22717 {&hf_hs20_anqp_nai_hrq_realm_name,
22718 {"NAI Home Realm Name", "wlan.hs20.anqp.nai_hrq.name",
22719 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
22721 {&hf_hs20_anqp_oper_class_indic,
22722 {"Operating Class", "wlan.hs20.anqp.oper_class_indic.oper_class",
22723 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
22725 {&hf_ieee80211_tag,
22726 {"Tag", "wlan.tag",
22727 FT_NONE, BASE_NONE, 0x0, 0,
22730 {&hf_ieee80211_tag_number,
22731 {"Tag Number", "wlan.tag.number",
22732 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tag_num_vals_ext, 0,
22733 "Element ID", HFILL }},
22735 {&hf_ieee80211_tag_length,
22736 {"Tag length", "wlan.tag.length",
22737 FT_UINT32, BASE_DEC, NULL, 0,
22738 "Length of tag", HFILL }},
22740 {&hf_ieee80211_tag_interpretation,
22741 {"Tag interpretation", "wlan.tag.interpretation",
22742 FT_STRING, BASE_NONE, NULL, 0,
22743 "Interpretation of tag", HFILL }},
22745 {&hf_ieee80211_tag_data,
22746 {"Tag Data", "wlan.tag.data",
22747 FT_BYTES, BASE_NONE, NULL, 0,
22748 "Data Interpretation of tag", HFILL }},
22750 {&hf_ieee80211_tag_oui,
22751 {"OUI", "wlan.tag.oui",
22752 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
22753 "OUI of vendor specific IE", HFILL }},
22755 {&hf_ieee80211_tag_oui_wfa_subtype,
22756 {"WFA Subtype", "wlan.tag.oui.wfa_subtype",
22757 FT_UINT8, BASE_DEC, NULL, 0,
22760 {&hf_ieee80211_tag_ds_param_channel,
22761 {"Current Channel", "wlan.ds.current_channel",
22762 FT_UINT8, BASE_DEC, NULL, 0,
22763 "DS Parameter Set - Current Channel", HFILL }},
22765 {&hf_ieee80211_tag_cfp_count,
22766 {"CFP Count", "wlan.cfp.count",
22767 FT_UINT8, BASE_DEC, NULL, 0,
22768 "Indicates how many delivery traffic indication messages (DTIMs)", HFILL }},
22770 {&hf_ieee80211_tag_cfp_period,
22771 {"CFP Period", "wlan.cfp.period",
22772 FT_UINT8, BASE_DEC, NULL, 0,
22773 "Indicates the number of DTIM intervals between the start of CFPs", HFILL }},
22775 {&hf_ieee80211_tag_cfp_max_duration,
22776 {"CFP Max Duration", "wlan.cfp.max_duration",
22777 FT_UINT16, BASE_DEC, NULL, 0,
22778 "Indicates the maximum duration (in TU) of the CFP that may be generated by this PCF", HFILL }},
22780 {&hf_ieee80211_tag_cfp_dur_remaining,
22781 {"CFP Dur Remaining", "wlan.cfp.dur_remaining",
22782 FT_UINT16, BASE_DEC, NULL, 0,
22783 "Indicates the maximum time (in TU) remaining in the present CFP", HFILL }},
22785 {&hf_ieee80211_tag_vendor_oui_type,
22786 {"Vendor Specific OUI Type", "wlan.tag.vendor.oui.type",
22787 FT_UINT8, BASE_DEC, NULL, 0,
22790 {&hf_ieee80211_tag_vendor_data,
22791 {"Vendor Specific Data", "wlan.tag.vendor.data",
22792 FT_BYTES, BASE_NONE, NULL, 0,
22793 "Unknown/undecoded Vendor Specific Data", HFILL }},
22795 {&hf_ieee80211_tim_dtim_count,
22796 {"DTIM count", "wlan.tim.dtim_count",
22797 FT_UINT8, BASE_DEC, NULL, 0,
22798 "Indicates how many Beacon frames (including the current frame) appear before the next DTIM", HFILL }},
22800 {&hf_ieee80211_tim_dtim_period,
22801 {"DTIM period", "wlan.tim.dtim_period",
22802 FT_UINT8, BASE_DEC, NULL, 0,
22803 "Indicates the number of beacon intervals between successive DTIMs", HFILL }},
22805 {&hf_ieee80211_tim_bmapctl,
22806 {"Bitmap control", "wlan.tim.bmapctl",
22807 FT_UINT8, BASE_HEX, NULL, 0,
22810 {&hf_ieee80211_tim_bmapctl_mcast,
22811 {"Multicast", "wlan.tim.bmapctl.multicast",
22812 FT_BOOLEAN, 8, NULL, 0x1,
22813 "Contains the Traffic Indicator bit associated with Association ID 0", HFILL }},
22815 {&hf_ieee80211_tim_bmapctl_offset,
22816 {"Bitmap Offset", "wlan.tim.bmapctl.offset",
22817 FT_UINT8, BASE_HEX, NULL, 0xFE,
22820 {&hf_ieee80211_tim_partial_virtual_bitmap,
22821 {"Partial Virtual Bitmap", "wlan.tim.partial_virtual_bitmap",
22822 FT_BYTES, BASE_NONE, NULL, 0x0,
22825 {&hf_ieee80211_tim_aid,
22826 {"Association ID", "wlan.tim.aid",
22827 FT_UINT8, BASE_HEX, NULL, 0x0,
22830 {&hf_ieee80211_tag_ibss_atim_window,
22831 {"Atim Windows", "wlan.ibss.atim_windows",
22832 FT_UINT16, BASE_HEX, NULL, 0x0,
22833 "Contains the ATIM Window length in TU", HFILL }},
22835 {&hf_ieee80211_tag_country_info_code,
22836 {"Code", "wlan.country_info.code",
22837 FT_STRING, BASE_NONE, NULL, 0x0,
22840 {&hf_ieee80211_tag_country_info_env,
22841 {"Environment", "wlan.country_info.environment",
22842 FT_UINT8, BASE_HEX, VALS(environment_vals), 0x0,
22845 {&hf_ieee80211_tag_country_info_pad,
22846 {"Padding", "wlan.country_info.padding",
22847 FT_BYTES, BASE_NONE, NULL, 0x0,
22850 {&hf_ieee80211_tag_country_info_fnm,
22851 {"Country Info", "wlan.country_info.fnm",
22852 FT_NONE, BASE_NONE, NULL, 0x0,
22855 {&hf_ieee80211_tag_country_info_fnm_fcn,
22856 {"First Channel Number", "wlan.country_info.fnm.fcn",
22857 FT_UINT8, BASE_DEC, NULL, 0x0,
22860 {&hf_ieee80211_tag_country_info_fnm_nc,
22861 {"Number of Channels", "wlan.country_info.fnm.nc",
22862 FT_UINT8, BASE_DEC, NULL, 0x0,
22865 {&hf_ieee80211_tag_country_info_fnm_mtpl,
22866 {"Maximum Transmit Power Level (in dBm)", "wlan.country_info.fnm.mtpl",
22867 FT_UINT8, BASE_DEC, NULL, 0x0,
22870 {&hf_ieee80211_tag_country_info_rrc,
22871 {"Country Info", "wlan.country_info.rrc",
22872 FT_NONE, BASE_NONE, NULL, 0x0,
22875 {&hf_ieee80211_tag_country_info_rrc_oei,
22876 {"Operating Extension Identifier", "wlan.country_info.rrc.oei",
22877 FT_UINT8, BASE_DEC, NULL, 0x0,
22880 {&hf_ieee80211_tag_country_info_rrc_oc,
22881 {"Operating Class", "wlan.country_info.rrc.oc",
22882 FT_UINT8, BASE_DEC, NULL, 0x0,
22885 {&hf_ieee80211_tag_country_info_rrc_cc,
22886 {"Coverage Class", "wlan.country_info.rrc.cc",
22887 FT_UINT8, BASE_DEC, NULL, 0x0,
22890 {&hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
22891 {"Prime Radix", "wlan.fh_hopping.parameter.prime_radix",
22892 FT_UINT8, BASE_DEC, NULL, 0x0,
22895 {&hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
22896 {"Number of Channels", "wlan.fh_hopping.parameter.nb_channels",
22897 FT_UINT8, BASE_DEC, NULL, 0x0,
22900 {&hf_ieee80211_tag_fh_hopping_table_flag,
22901 {"Flag", "wlan.fh_hopping.table.flag",
22902 FT_UINT8, BASE_HEX, NULL, 0x0,
22903 "Indicates that a Random Table is present when the value is 1", HFILL }},
22905 {&hf_ieee80211_tag_fh_hopping_table_number_of_sets,
22906 {"Number of Sets", "wlan.fh_hopping.table.number_of_sets",
22907 FT_UINT8, BASE_DEC, NULL, 0x0,
22908 "Indicates the total number of sets within the hopping patterns", HFILL }},
22910 {&hf_ieee80211_tag_fh_hopping_table_modulus,
22911 {"Modulus", "wlan.fh_hopping.table.modulus",
22912 FT_UINT8, BASE_HEX, NULL, 0x0,
22913 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL }},
22915 {&hf_ieee80211_tag_fh_hopping_table_offset,
22916 {"Offset", "wlan.fh_hopping.table.offset",
22917 FT_UINT8, BASE_HEX, NULL, 0x0,
22918 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL }},
22920 {&hf_ieee80211_tag_fh_hopping_random_table,
22921 {"Random Table", "wlan.fh_hopping.table.random_table",
22922 FT_UINT16, BASE_HEX, NULL, 0x0,
22923 "It is a vector of single octet values that indicate the random sequence to be followed during a hopping sequence", HFILL }},
22925 {&hf_ieee80211_tag_request,
22926 {"Requested Element ID", "wlan.tag.request",
22927 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tag_num_vals_ext, 0,
22928 "The list of elements that are to be included in the responding STA Probe Response frame", HFILL }},
22930 {&hf_ieee80211_tclas_up,
22931 {"User Priority", "wlan.tclas.user_priority",
22932 FT_UINT8, BASE_DEC, NULL, 0,
22933 "Contains the value of the UP of the associated MSDUs", HFILL }},
22935 {&hf_ieee80211_tclas_class_type,
22936 {"Classifier Type", "wlan.tclas.class_type",
22937 FT_UINT8, BASE_DEC, VALS(classifier_type), 0,
22938 "Specifies the type of classifier parameters", HFILL }},
22940 {&hf_ieee80211_tclas_class_mask,
22941 {"Classifier Mask", "wlan.tclas.class_mask",
22942 FT_UINT8, BASE_HEX, NULL, 0,
22943 "Specifies a bitmap where bits that are set to 1 identify a subset of the classifier parameters", HFILL }},
22945 {&hf_ieee80211_tclas_class_mask0_src_addr,
22946 {"Source Address", "wlan.tclas.class_mask.src_addr",
22947 FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
22949 {&hf_ieee80211_tclas_class_mask0_dst_addr,
22950 {"Destination Address", "wlan.tclas.class_mask.dst_addr",
22951 FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
22953 {&hf_ieee80211_tclas_class_mask0_type,
22954 {"Type", "wlan.tclas.class_mask.type",
22955 FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL }},
22957 {&hf_ieee80211_tclas_class_mask1_ver,
22958 {"Version", "wlan.tclas.class_mask.version",
22959 FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
22961 {&hf_ieee80211_tclas_class_mask1_src_ip,
22962 {"Source IP Address", "wlan.tclas.class_mask.src_ip",
22963 FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
22965 {&hf_ieee80211_tclas_class_mask1_dst_ip,
22966 {"Destination IP Address", "wlan.tclas.class_mask.dst_ip",
22967 FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL }},
22969 {&hf_ieee80211_tclas_class_mask1_src_port,
22970 {"Source Port", "wlan.tclas.class_mask.src_port",
22971 FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL }},
22973 {&hf_ieee80211_tclas_class_mask1_dst_port,
22974 {"Destination Port", "wlan.tclas.class_mask.dst_port",
22975 FT_UINT8, BASE_HEX, NULL, 0x10, NULL, HFILL }},
22977 {&hf_ieee80211_tclas_class_mask1_ipv4_dscp,
22978 {"DSCP", "wlan.tclas.class_mask.dscp",
22979 FT_UINT8, BASE_HEX, NULL, 0x20, NULL, HFILL }},
22981 {&hf_ieee80211_tclas_class_mask1_ipv4_proto,
22982 {"Protocol", "wlan.tclas.class_mask.proto",
22983 FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL }},
22985 {&hf_ieee80211_tclas_class_mask1_ipv6_flow,
22986 {"Flow Label", "wlan.tclas.class_mask.flow_label",
22987 FT_UINT8, BASE_HEX, NULL, 0x20, NULL, HFILL }},
22989 {&hf_ieee80211_tclas_class_mask2_tci,
22990 {"802.1Q CLAN TCI", "wlan.tclas.class_mask.tci",
22991 FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
22993 {&hf_ieee80211_tclas_src_mac_addr,
22994 {"Source address", "wlan.tclas.src_mac_addr",
22995 FT_ETHER, BASE_NONE, NULL, 0,
22996 "Classifier Parameters Ethernet Type", HFILL }},
22998 {&hf_ieee80211_tclas_dst_mac_addr,
22999 {"Destination address", "wlan.tclas.dat_mac_addr",
23000 FT_ETHER, BASE_NONE, NULL, 0,
23003 {&hf_ieee80211_tclas_ether_type,
23004 {"Ethernet Type", "wlan.tclas.ether_type",
23005 FT_UINT8, BASE_DEC, NULL, 0,
23008 {&hf_ieee80211_tclas_version,
23009 {"IP Version", "wlan.tclas.version",
23010 FT_UINT8, BASE_DEC, NULL, 0,
23013 {&hf_ieee80211_tclas_ipv4_src,
23014 {"IPv4 Src Addr", "wlan.tclas.ipv4_src",
23015 FT_IPv4, BASE_NONE, NULL, 0,
23018 {&hf_ieee80211_tclas_ipv4_dst,
23019 {"IPv4 Dst Addr", "wlan.tclas.ipv4_dst",
23020 FT_IPv4, BASE_NONE, NULL, 0,
23023 {&hf_ieee80211_tclas_src_port,
23024 {"Source Port", "wlan.tclas.src_port",
23025 FT_UINT16, BASE_DEC, NULL, 0,
23028 {&hf_ieee80211_tclas_dst_port,
23029 {"Destination Port", "wlan.tclas.dst_port",
23030 FT_UINT16, BASE_DEC, NULL, 0,
23033 {&hf_ieee80211_tclas_dscp,
23034 {"IPv4 DSCP", "wlan.tclas.dscp",
23035 FT_UINT8, BASE_HEX, NULL, 0,
23036 "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL }},
23038 {&hf_ieee80211_tclas_protocol,
23039 {"Protocol", "wlan.tclas.protocol",
23040 FT_UINT8, BASE_HEX, NULL, 0,
23041 "IPv4 Protocol", HFILL }},
23043 {&hf_ieee80211_tclas_ipv6_src,
23044 {"IPv6 Src Addr", "wlan.tclas.ipv6_src",
23045 FT_IPv6, BASE_NONE, NULL, 0,
23048 {&hf_ieee80211_tclas_ipv6_dst,
23049 {"IPv6 Dst Addr", "wlan.tclas.ipv6_dst",
23050 FT_IPv6, BASE_NONE, NULL, 0,
23053 {&hf_ieee80211_tclas_flow,
23054 {"Flow Label", "wlan.tclas.flow",
23055 FT_UINT24, BASE_HEX, NULL, 0,
23056 "IPv6 Flow Label", HFILL }},
23058 {&hf_ieee80211_tclas_tag_type,
23059 {"802.1Q Tag Type", "wlan.tclas.tag_type",
23060 FT_UINT16, BASE_HEX, NULL, 0,
23063 {&hf_ieee80211_tag_challenge_text,
23064 {"Challenge Text", "wlan.tag.challenge_text",
23065 FT_BYTES, BASE_NONE, NULL, 0,
23068 {&hf_ieee80211_rsn_version,
23069 {"RSN Version", "wlan.rsn.version",
23070 FT_UINT16, BASE_DEC, NULL, 0,
23071 "Indicates the version number of the RSNA protocol", HFILL }},
23073 {&hf_ieee80211_rsn_gcs,
23074 {"Group Cipher Suite", "wlan.rsn.gcs",
23075 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gcs_base_custom), 0,
23076 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
23078 {&hf_ieee80211_rsn_gcs_oui,
23079 {"Group Cipher Suite OUI", "wlan.rsn.gcs.oui",
23080 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
23083 {&hf_ieee80211_rsn_gcs_type,
23084 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
23085 FT_UINT8, BASE_DEC, NULL, 0,
23088 {&hf_ieee80211_rsn_gcs_80211_type,
23089 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
23090 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
23093 {&hf_ieee80211_rsn_pcs_count,
23094 {"Pairwise Cipher Suite Count", "wlan.rsn.pcs.count",
23095 FT_UINT16, BASE_DEC, NULL, 0,
23096 "Indicates the number of pairwise cipher suite selectors that are contained in the Pairwise Cipher Suite List", HFILL }},
23098 {&hf_ieee80211_rsn_pcs_list,
23099 {"Pairwise Cipher Suite List", "wlan.rsn.pcs.list",
23100 FT_NONE, BASE_NONE, NULL, 0,
23101 "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL }},
23103 {&hf_ieee80211_rsn_pcs,
23104 {"Pairwise Cipher Suite", "wlan.rsn.pcs",
23105 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_pcs_base_custom), 0,
23108 {&hf_ieee80211_rsn_pcs_oui,
23109 {"Pairwise Cipher Suite OUI", "wlan.rsn.pcs.oui",
23110 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
23113 {&hf_ieee80211_rsn_pcs_type,
23114 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
23115 FT_UINT8, BASE_DEC, NULL, 0,
23118 {&hf_ieee80211_rsn_pcs_80211_type,
23119 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
23120 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
23123 {&hf_ieee80211_rsn_akms_count,
23124 {"Auth Key Management (AKM) Suite Count", "wlan.rsn.akms.count",
23125 FT_UINT16, BASE_DEC, NULL, 0,
23126 "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
23128 {&hf_ieee80211_rsn_akms_list,
23129 {"Auth Key Management (AKM) List", "wlan.rsn.akms.list",
23130 FT_NONE, BASE_NONE, NULL, 0,
23131 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
23133 {&hf_ieee80211_rsn_akms,
23134 {"Auth Key Management (AKM) Suite", "wlan.rsn.akms",
23135 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_akms_base_custom), 0,
23138 {&hf_ieee80211_rsn_akms_oui,
23139 {"Auth Key Management (AKM) OUI", "wlan.rsn.akms.oui",
23140 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
23143 {&hf_ieee80211_rsn_akms_type,
23144 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
23145 FT_UINT8, BASE_DEC, NULL, 0,
23148 {&hf_ieee80211_rsn_akms_80211_type,
23149 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
23150 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_keymgmt_vals), 0,
23153 {&hf_ieee80211_rsn_cap,
23154 {"RSN Capabilities", "wlan.rsn.capabilities",
23155 FT_UINT16, BASE_HEX, NULL, 0,
23156 "RSN Capability information", HFILL }},
23158 {&hf_ieee80211_rsn_cap_preauth,
23159 {"RSN Pre-Auth capabilities", "wlan.rsn.capabilities.preauth",
23160 FT_BOOLEAN, 16, TFS(&rsn_preauth_flags), 0x0001,
23163 {&hf_ieee80211_rsn_cap_no_pairwise,
23164 {"RSN No Pairwise capabilities", "wlan.rsn.capabilities.no_pairwise",
23165 FT_BOOLEAN, 16, TFS(&rsn_no_pairwise_flags), 0x0002,
23168 {&hf_ieee80211_rsn_cap_ptksa_replay_counter,
23169 {"RSN PTKSA Replay Counter capabilities", "wlan.rsn.capabilities.ptksa_replay_counter",
23170 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter), 0x000C,
23173 {&hf_ieee80211_rsn_cap_gtksa_replay_counter,
23174 {"RSN GTKSA Replay Counter capabilities", "wlan.rsn.capabilities.gtksa_replay_counter",
23175 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter), 0x0030,
23178 {&hf_ieee80211_rsn_cap_mfpr,
23179 {"Management Frame Protection Required", "wlan.rsn.capabilities.mfpr",
23180 FT_BOOLEAN, 16, NULL, 0x0040,
23183 {&hf_ieee80211_rsn_cap_mfpc,
23184 {"Management Frame Protection Capable", "wlan.rsn.capabilities.mfpc",
23185 FT_BOOLEAN, 16, NULL, 0x0080,
23188 {&hf_ieee80211_rsn_cap_jmr,
23189 {"Joint Multi-band RSNA", "wlan.rsn.capabilities.jmr",
23190 FT_BOOLEAN, 16, NULL, 0x0100,
23193 {&hf_ieee80211_rsn_cap_peerkey,
23194 {"PeerKey Enabled", "wlan.rsn.capabilities.peerkey",
23195 FT_BOOLEAN, 16, NULL, 0x0200,
23198 {&hf_ieee80211_rsn_pmkid_count,
23199 {"PMKID Count", "wlan.rsn.pmkid.count",
23200 FT_UINT16, BASE_DEC, NULL, 0,
23201 "Indicates the number of PMKID selectors that are contained in the PMKID Suite List", HFILL }},
23203 {&hf_ieee80211_rsn_pmkid_list,
23204 {"PMKID List", "wlan.rsn.pmkid.list",
23205 FT_NONE, BASE_NONE, NULL, 0,
23206 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
23208 {&hf_ieee80211_rsn_pmkid,
23209 {"PMKID", "wlan.pmkid.akms",
23210 FT_BYTES, BASE_NONE, NULL, 0,
23213 {&hf_ieee80211_rsn_gmcs,
23214 {"Group Management Cipher Suite", "wlan.rsn.gmcs",
23215 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gmcs_base_custom), 0,
23216 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
23218 {&hf_ieee80211_rsn_gmcs_oui,
23219 {"Group Management Cipher Suite OUI", "wlan.rsn.gmcs.oui",
23220 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
23223 {&hf_ieee80211_rsn_gmcs_type,
23224 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
23225 FT_UINT8, BASE_DEC, NULL, 0,
23228 {&hf_ieee80211_rsn_gmcs_80211_type,
23229 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
23230 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
23233 {&hf_ieee80211_ht_pren_type,
23234 {"802.11n (Pre) Type", "wlan.vs.pren.type",
23235 FT_UINT8, BASE_DEC, VALS(ieee80211_ht_pren_type_vals), 0,
23236 "Vendor Specific HT Type", HFILL }},
23237 {&hf_ieee80211_ht_pren_unknown,
23238 {"802.11n (Pre) Unknown Data", "wlan.vs.pren.unknown_data",
23239 FT_BYTES, BASE_NONE, NULL, 0,
23242 {&hf_ieee80211_ht_cap,
23243 {"HT Capabilities Info", "wlan.ht.capabilities",
23244 FT_UINT16, BASE_HEX, NULL, 0,
23245 "HT Capabilities information", HFILL }},
23247 {&hf_ieee80211_ht_vs_cap,
23248 {"HT Capabilities Info (VS)", "wlan.vs.ht.capabilities",
23249 FT_UINT16, BASE_HEX, NULL, 0,
23250 "Vendor Specific HT Capabilities information", HFILL }},
23252 {&hf_ieee80211_ht_ldpc_coding,
23253 {"HT LDPC coding capability", "wlan.ht.capabilities.ldpccoding",
23254 FT_BOOLEAN, 16, TFS(&ht_ldpc_coding_flag), 0x0001,
23257 {&hf_ieee80211_ht_chan_width,
23258 {"HT Support channel width", "wlan.ht.capabilities.width",
23259 FT_BOOLEAN, 16, TFS(&ht_chan_width_flag), 0x0002,
23262 {&hf_ieee80211_ht_sm_pwsave,
23263 {"HT SM Power Save", "wlan.ht.capabilities.sm",
23264 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag), 0x000c,
23267 {&hf_ieee80211_ht_green,
23268 {"HT Green Field", "wlan.ht.capabilities.green",
23269 FT_BOOLEAN, 16, TFS(&ht_green_flag), 0x0010,
23272 {&hf_ieee80211_ht_short20,
23273 {"HT Short GI for 20MHz", "wlan.ht.capabilities.short20",
23274 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0020,
23277 {&hf_ieee80211_ht_short40,
23278 {"HT Short GI for 40MHz", "wlan.ht.capabilities.short40",
23279 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0040,
23282 {&hf_ieee80211_ht_tx_stbc,
23283 {"HT Tx STBC", "wlan.ht.capabilities.txstbc",
23284 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0080,
23287 {&hf_ieee80211_ht_rx_stbc,
23288 {"HT Rx STBC", "wlan.ht.capabilities.rxstbc",
23289 FT_UINT16, BASE_HEX, VALS(ht_rx_stbc_flag), 0x0300,
23290 "HT Tx STBC", HFILL }},
23292 {&hf_ieee80211_ht_delayed_block_ack,
23293 {"HT Delayed Block ACK", "wlan.ht.capabilities.delayedblockack",
23294 FT_BOOLEAN, 16, TFS(&ht_delayed_block_ack_flag), 0x0400,
23297 {&hf_ieee80211_ht_max_amsdu,
23298 {"HT Max A-MSDU length", "wlan.ht.capabilities.amsdu",
23299 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag), 0x0800,
23302 {&hf_ieee80211_ht_dss_cck_40,
23303 {"HT DSSS/CCK mode in 40MHz", "wlan.ht.capabilities.dsscck",
23304 FT_BOOLEAN, 16, TFS(&ht_dss_cck_40_flag), 0x1000,
23305 "HT DSS/CCK mode in 40MHz", HFILL }},
23307 {&hf_ieee80211_ht_psmp,
23308 {"HT PSMP Support", "wlan.ht.capabilities.psmp",
23309 FT_BOOLEAN, 16, TFS(&ht_psmp_flag), 0x2000,
23312 {&hf_ieee80211_ht_40_mhz_intolerant,
23313 {"HT Forty MHz Intolerant", "wlan.ht.capabilities.40mhzintolerant",
23314 FT_BOOLEAN, 16, TFS(&ht_40_mhz_intolerant_flag), 0x4000,
23317 {&hf_ieee80211_ht_l_sig,
23318 {"HT L-SIG TXOP Protection support", "wlan.ht.capabilities.lsig",
23319 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x8000,
23322 {&hf_ieee80211_ext_bss_mu_mimo_capable_sta_count,
23323 {"MU-MIMO Capable STA Count", "wlan.ext_bss.mu_mimo_capable_sta_count",
23324 FT_UINT16, BASE_DEC, NULL, 0,
23327 {&hf_ieee80211_ext_bss_ss_underutilization,
23328 {"Spatial Stream Underutilization", "wlan.ext_bss.ss_underutilization",
23329 FT_UINT8, BASE_HEX, NULL, 0,
23332 {&hf_ieee80211_ext_bss_observable_sec_20mhz_utilization,
23333 {"Observable Secondary 20MHz Utilization", "wlan.ext_bss.observable_sec_20mhz_utilization",
23334 FT_UINT8, BASE_HEX, NULL, 0,
23337 {&hf_ieee80211_ext_bss_observable_sec_40mhz_utilization,
23338 {"Observable Secondary 40MHz Utilization", "wlan.ext_bss.observable_sec_40mhz_utilization",
23339 FT_UINT8, BASE_HEX, NULL, 0,
23342 {&hf_ieee80211_ext_bss_observable_sec_80mhz_utilization,
23343 {"Observable Secondary 80MHz Utilization", "wlan.ext_bss.observable_sec_80mhz_utilization",
23344 FT_UINT8, BASE_HEX, NULL, 0,
23347 {&hf_ieee80211_wide_bw_new_channel_width,
23348 {"New Channel Width", "wlan.wide_bw.new_channel_width",
23349 FT_UINT8, BASE_HEX, VALS(vht_operation_info_channel_width), 0x0,
23352 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment0,
23353 {"New Channel Center Frequency Segment 0", "wlan.wide_bw.new_channel_center_freq_segment0",
23354 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
23357 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment1,
23358 {"New Channel Center Frequency Segment 1", "wlan.wide_bw.new_channel_center_freq_segment1",
23359 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
23362 {&hf_ieee80211_operat_notification_mode,
23363 {"Operating Mode Notification", "wlan.operat_notification_mode",
23364 FT_UINT8, BASE_HEX, NULL, 0x0,
23367 {&hf_ieee80211_operat_mode_field_channel_width,
23368 {"Channel Width", "wlan.operat_mode_field.channelwidth",
23369 FT_UINT8, BASE_HEX, VALS(operating_mode_field_channel_width), 0x03,
23372 {&hf_ieee80211_operat_mode_field_reserved,
23373 {"Reserved", "wlan.operat_mode_field.reserved",
23374 FT_UINT8, BASE_HEX, NULL, 0x0C,
23377 {&hf_ieee80211_operat_mode_field_rxnss,
23378 {"Rx NSS", "wlan.operat_mode_field.rxnss",
23379 FT_UINT8, BASE_HEX, VALS(operat_mode_field_rxnss), 0x70,
23382 {&hf_ieee80211_operat_mode_field_rxnsstype,
23383 {"Rx NSS Type", "wlan.operat_mode_field.rxnsstype",
23384 FT_UINT8, BASE_HEX, NULL, 0x80,
23385 "Indicate that the Rx NSS subfield carries the maximum number of spatial streams that the STA can receive", HFILL }},
23387 {&hf_ieee80211_ampduparam,
23388 {"A-MPDU Parameters", "wlan.ht.ampduparam",
23389 FT_UINT8, BASE_HEX, NULL, 0,
23392 {&hf_ieee80211_ampduparam_vs,
23393 {"A-MPDU Parameters (VS)", "wlan.vs.ht.ampduparam",
23394 FT_UINT8, BASE_HEX, NULL, 0,
23395 "Vendor Specific A-MPDU Parameters", HFILL }},
23397 {&hf_ieee80211_ampduparam_mpdu,
23398 {"Maximum Rx A-MPDU Length", "wlan.ht.ampduparam.maxlength",
23399 FT_UINT8, BASE_HEX, 0, 0x03,
23402 {&hf_ieee80211_ampduparam_mpdu_start_spacing,
23403 {"MPDU Density", "wlan.ht.ampduparam.mpdudensity",
23404 FT_UINT8, BASE_HEX, VALS(ampduparam_mpdu_start_spacing_flags), 0x1c,
23407 {&hf_ieee80211_ampduparam_reserved,
23408 {"Reserved", "wlan.ht.ampduparam.reserved",
23409 FT_UINT8, BASE_HEX, NULL, 0xE0,
23412 {&hf_ieee80211_mcsset,
23413 {"Rx Supported Modulation and Coding Scheme Set", "wlan.ht.mcsset",
23414 FT_STRING, BASE_NONE, NULL, 0,
23417 {&hf_ieee80211_mcsset_vs,
23418 {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan.vs.ht.mcsset",
23419 FT_STRING, BASE_NONE, NULL, 0,
23420 "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL }},
23422 {&hf_ieee80211_mcsset_rx_bitmask,
23423 {"Rx Modulation and Coding Scheme (One bit per modulation)", "wlan.ht.mcsset.rxbitmask",
23424 FT_NONE, BASE_NONE, NULL, 0,
23425 "One bit per modulation", HFILL }},
23427 {&hf_ieee80211_mcsset_rx_bitmask_0to7,
23428 {"Rx Bitmask Bits 0-7", "wlan.ht.mcsset.rxbitmask.0to7",
23429 FT_UINT32, BASE_HEX, 0, 0x000000ff,
23432 {&hf_ieee80211_mcsset_rx_bitmask_8to15,
23433 {"Rx Bitmask Bits 8-15", "wlan.ht.mcsset.rxbitmask.8to15",
23434 FT_UINT32, BASE_HEX, 0, 0x0000ff00,
23437 {&hf_ieee80211_mcsset_rx_bitmask_16to23,
23438 {"Rx Bitmask Bits 16-23", "wlan.ht.mcsset.rxbitmask.16to23",
23439 FT_UINT32, BASE_HEX, 0, 0x00ff0000,
23442 {&hf_ieee80211_mcsset_rx_bitmask_24to31,
23443 {"Rx Bitmask Bits 24-31", "wlan.ht.mcsset.rxbitmask.24to31",
23444 FT_UINT32, BASE_HEX, 0, 0xff000000,
23447 {&hf_ieee80211_mcsset_rx_bitmask_32,
23448 {"Rx Bitmask Bit 32", "wlan.ht.mcsset.rxbitmask.32",
23449 FT_UINT32, BASE_HEX, 0, 0x000001,
23452 {&hf_ieee80211_mcsset_rx_bitmask_33to38,
23453 {"Rx Bitmask Bits 33-38", "wlan.ht.mcsset.rxbitmask.33to38",
23454 FT_UINT32, BASE_HEX, 0, 0x00007e,
23457 {&hf_ieee80211_mcsset_rx_bitmask_39to52,
23458 {"Rx Bitmask Bits 39-52", "wlan.ht.mcsset.rxbitmask.39to52",
23459 FT_UINT32, BASE_HEX, 0, 0x1fff80,
23462 {&hf_ieee80211_mcsset_rx_bitmask_53to76,
23463 {"Rx Bitmask Bits 53-76", "wlan.ht.mcsset.rxbitmask.53to76",
23464 FT_UINT32, BASE_HEX, 0, 0x1fffffe0,
23467 {&hf_ieee80211_mcsset_highest_data_rate,
23468 {"Highest Supported Data Rate", "wlan.ht.mcsset.highestdatarate",
23469 FT_UINT16, BASE_HEX, 0, 0x03ff,
23472 {&hf_ieee80211_mcsset_tx_mcs_set_defined,
23473 {"Tx Supported MCS Set", "wlan.ht.mcsset.txsetdefined",
23474 FT_BOOLEAN, 16, TFS(&tfs_defined_not_defined), 0x0001,
23477 {&hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal,
23478 {"Tx and Rx MCS Set", "wlan.ht.mcsset.txrxmcsnotequal",
23479 FT_BOOLEAN, 16, TFS(&mcsset_tx_rx_mcs_set_not_equal_flag), 0x0002,
23482 {&hf_ieee80211_mcsset_tx_max_spatial_streams,
23483 {"Maximum Number of Tx Spatial Streams Supported", "wlan.ht.mcsset.txmaxss",
23484 FT_UINT16, BASE_HEX, 0 , 0x000c,
23487 {&hf_ieee80211_mcsset_tx_unequal_modulation,
23488 {"Unequal Modulation", "wlan.ht.mcsset.txunequalmod",
23489 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0010,
23492 {&hf_ieee80211_htex_cap,
23493 {"HT Extended Capabilities", "wlan.htex.capabilities",
23494 FT_UINT16, BASE_HEX, NULL, 0,
23495 "HT Extended Capability information", HFILL }},
23497 {&hf_ieee80211_htex_vs_cap,
23498 {"HT Extended Capabilities (VS)", "wlan.vs.htex.capabilities",
23499 FT_UINT16, BASE_HEX, NULL, 0,
23500 "Vendor Specific HT Extended Capability information", HFILL }},
23502 {&hf_ieee80211_htex_pco,
23503 {"Transmitter supports PCO", "wlan.htex.capabilities.pco",
23504 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0001,
23507 {&hf_ieee80211_htex_transtime,
23508 {"Time needed to transition between 20MHz and 40MHz", "wlan.htex.capabilities.transtime",
23509 FT_UINT16, BASE_HEX, VALS(htex_transtime_flags), 0x0006,
23512 {&hf_ieee80211_htex_mcs,
23513 {"MCS Feedback capability", "wlan.htex.capabilities.mcs",
23514 FT_UINT16, BASE_HEX, VALS(htex_mcs_flags), 0x0300,
23517 {&hf_ieee80211_htex_htc_support,
23518 {"High Throughput", "wlan.htex.capabilities.htc",
23519 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0400,
23522 {&hf_ieee80211_htex_rd_responder,
23523 {"Reverse Direction Responder", "wlan.htex.capabilities.rdresponder",
23524 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0800,
23527 {&hf_ieee80211_txbf,
23528 {"Transmit Beam Forming (TxBF) Capabilities", "wlan.txbf",
23529 FT_UINT32, BASE_HEX, NULL, 0,
23532 {&hf_ieee80211_txbf_vs,
23533 {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan.vs.txbf",
23534 FT_UINT32, BASE_HEX, NULL, 0,
23535 "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL }},
23537 {&hf_ieee80211_txbf_cap,
23538 {"Transmit Beamforming", "wlan.txbf.txbf",
23539 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000001,
23542 {&hf_ieee80211_txbf_rcv_ssc,
23543 {"Receive Staggered Sounding", "wlan.txbf.rxss",
23544 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000002,
23547 {&hf_ieee80211_txbf_tx_ssc,
23548 {"Transmit Staggered Sounding", "wlan.txbf.txss",
23549 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000004,
23552 {&hf_ieee80211_txbf_rcv_ndp,
23553 {"Receive Null Data packet (NDP)", "wlan.txbf.rxndp",
23554 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000008,
23557 {&hf_ieee80211_txbf_tx_ndp,
23558 {"Transmit Null Data packet (NDP)", "wlan.txbf.txndp",
23559 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000010,
23562 {&hf_ieee80211_txbf_impl_txbf,
23563 {"Implicit TxBF capable", "wlan.txbf.impltxbf",
23564 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000020,
23565 "Implicit Transmit Beamforming (TxBF) capable", HFILL }},
23567 {&hf_ieee80211_txbf_calib,
23568 {"Calibration", "wlan.txbf.calibration",
23569 FT_UINT32, BASE_HEX, VALS(txbf_calib_flag), 0x000000c0,
23572 {&hf_ieee80211_txbf_expl_csi,
23573 {"STA can apply TxBF using CSI explicit feedback", "wlan.txbf.csi",
23574 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000100,
23575 "Station can apply TxBF using CSI explicit feedback", HFILL }},
23577 {&hf_ieee80211_txbf_expl_uncomp_fm,
23578 {"STA can apply TxBF using uncompressed beamforming feedback matrix", "wlan.txbf.fm.uncompressed.tbf",
23579 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000200,
23580 "Station can apply TxBF using uncompressed beamforming feedback matrix", HFILL }},
23582 {&hf_ieee80211_txbf_expl_comp_fm,
23583 {"STA can apply TxBF using compressed beamforming feedback matrix", "wlan.txbf.fm.compressed.tbf",
23584 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000400,
23585 "Station can apply TxBF using compressed beamforming feedback matrix", HFILL }},
23587 {&hf_ieee80211_txbf_expl_bf_csi,
23588 {"Receiver can return explicit CSI feedback", "wlan.txbf.rcsi",
23589 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00001800,
23592 {&hf_ieee80211_txbf_expl_uncomp_fm_feed,
23593 {"Receiver can return explicit uncompressed Beamforming Feedback Matrix", "wlan.txbf.fm.uncompressed.rbf",
23594 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00006000,
23597 {&hf_ieee80211_txbf_expl_comp_fm_feed,
23598 {"STA can compress and use compressed Beamforming Feedback Matrix", "wlan.txbf.fm.compressed.bf",
23599 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00018000,
23600 "Station can compress and use compressed Beamforming Feedback Matrix", HFILL }},
23602 {&hf_ieee80211_txbf_min_group,
23603 {"Minimal grouping used for explicit feedback reports", "wlan.txbf.mingroup",
23604 FT_UINT32, BASE_HEX, VALS(txbf_min_group_flags), 0x00060000,
23607 {&hf_ieee80211_vht_cap,
23608 {"VHT Capabilities Info", "wlan.vht.capabilities",
23609 FT_UINT32, BASE_HEX, NULL, 0,
23610 "VHT Capabilities information", HFILL }},
23612 {&hf_ieee80211_vht_max_mpdu_length,
23613 {"Maximum MPDU Length", "wlan.vht.capabilities.maxmpdulength",
23614 FT_UINT32, BASE_HEX, VALS(vht_max_mpdu_length_flag), 0x00000003,
23615 "In Octets unit", HFILL }},
23617 {&hf_ieee80211_vht_supported_chan_width_set,
23618 {"Supported Channel Width Set", "wlan.vht.capabilities.supportedchanwidthset",
23619 FT_UINT32, BASE_HEX, VALS(vht_supported_chan_width_set_flag), 0x0000000c,
23622 {&hf_ieee80211_vht_rx_ldpc,
23623 {"Rx LDPC", "wlan.vht.capabilities.rxldpc",
23624 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000010,
23627 {&hf_ieee80211_vht_short_gi_for_80,
23628 {"Short GI for 80MHz", "wlan.vht.capabilities.short80",
23629 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000020,
23632 {&hf_ieee80211_vht_short_gi_for_160,
23633 {"Short GI for 160MHz and 80+80MHz", "wlan.vht.capabilities.short160",
23634 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000040,
23637 {&hf_ieee80211_vht_tx_stbc,
23638 {"Tx STBC", "wlan.vht.capabilities.txstbc",
23639 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000080,
23642 {&hf_ieee80211_vht_rx_stbc,
23643 {"Rx STBC", "wlan.vht.capabilities.rxstbc",
23644 FT_UINT32, BASE_HEX, VALS(vht_rx_stbc_flag), 0x00000700,
23647 {&hf_ieee80211_vht_su_beamformer_cap,
23648 {"SU Beam-former Capable", "wlan.vht.capabilities.subeamformer",
23649 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000800,
23652 {&hf_ieee80211_vht_su_beamformee_cap,
23653 {"SU Beam-formee Capable", "wlan.vht.capabilities.subeamformee",
23654 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00001000,
23657 {&hf_ieee80211_vht_beamformer_antennas,
23658 {"Compressed Steering Number of Beamformer Antennas Supported", "wlan.vht.capabilities.beamformerants",
23659 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag), 0x0000e000,
23662 {&hf_ieee80211_vht_sounding_dimensions,
23663 {"Number of Sounding Dimensions", "wlan.vht.capabilities.soundingdimensions",
23664 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag), 0x00070000,
23667 {&hf_ieee80211_vht_mu_beamformer_cap,
23668 {"MU Beam-former Capable", "wlan.vht.capabilities.mubeamformer",
23669 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00080000,
23672 {&hf_ieee80211_vht_mu_beamformee_cap,
23673 {"MU Beam-formee Capable", "wlan.vht.capabilities.mubeamformee",
23674 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00100000,
23677 {&hf_ieee80211_vht_txop_ps,
23678 {"VHT TXOP PS", "wlan.vht.capabilities.vhttxopps",
23679 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00200000,
23682 {&hf_ieee80211_vht_var_htc_field,
23683 {"+HTC-VHT Capable (VHT variant HT Control field)", "wlan.vht.capabilities.vhthtc",
23684 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00400000,
23687 {&hf_ieee80211_vht_max_ampdu,
23688 {"Max A-MPDU Length", "wlan.vht.capabilities.maxampdu",
23689 FT_UINT32, BASE_HEX, VALS(vht_max_ampdu_flag), 0x03800000,
23690 "In Octets unit", HFILL }},
23692 {&hf_ieee80211_vht_link_adaptation_cap,
23693 {"VHT Link Adaptation", "wlan.vht.capabilities.linkadapt",
23694 FT_UINT32, BASE_HEX, VALS(vht_link_adapt_flag), 0x0c000000,
23697 {&hf_ieee80211_vht_rx_pattern,
23698 {"Rx Antenna Pattern Consistency", "wlan.vht.capabilities.rxpatconsist",
23699 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x10000000,
23702 {&hf_ieee80211_vht_tx_pattern,
23703 {"Tx Antenna Pattern Consistency", "wlan.vht.capabilities.txpatconsist",
23704 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x20000000,
23707 {&hf_ieee80211_vht_reserv,
23708 {"Reserved", "wlan.vht.reserved",
23709 FT_BOOLEAN, 32, NULL, 0xc0000000,
23712 {&hf_ieee80211_vht_mcsset,
23713 {"VHT Supported MCS Set", "wlan.vht.mcsset",
23714 FT_NONE, BASE_NONE, NULL, 0,
23717 {&hf_ieee80211_vht_mcsset_rx_mcs_map,
23718 {"Rx MCS Map", "wlan.vht.mcsset.rxmcsmap",
23719 FT_UINT16, BASE_HEX, NULL, 0,
23722 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
23723 {"Rx 1 SS", "wlan.vht.mcsset.rxmcsmap.ss1",
23724 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
23727 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
23728 {"Rx 2 SS", "wlan.vht.mcsset.rxmcsmap.ss2",
23729 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
23732 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
23733 {"Rx 3 SS", "wlan.vht.mcsset.rxmcsmap.ss3",
23734 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
23737 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
23738 {"Rx 4 SS", "wlan.vht.mcsset.rxmcsmap.ss4",
23739 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
23742 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
23743 {"Rx 5 SS", "wlan.vht.mcsset.rxmcsmap.ss5",
23744 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
23747 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
23748 {"Rx 6 SS", "wlan.vht.mcsset.rxmcsmap.ss6",
23749 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
23752 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
23753 {"Rx 7 SS", "wlan.vht.mcsset.rxmcsmap.ss7",
23754 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
23757 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
23758 {"Rx 8 SS", "wlan.vht.mcsset.rxmcsmap.ss8",
23759 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
23762 {&hf_ieee80211_vht_mcsset_rx_highest_long_gi,
23763 {"Rx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.rxhighestlonggirate",
23764 FT_UINT16, BASE_HEX, NULL, 0x1fff,
23767 {&hf_ieee80211_vht_mcsset_tx_mcs_map,
23768 {"Tx MCS Map", "wlan.vht.mcsset.txmcsmap",
23769 FT_UINT16, BASE_HEX, NULL, 0,
23772 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
23773 {"Tx 1 SS", "wlan.vht.mcsset.txmcsmap.ss1",
23774 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
23777 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
23778 {"Tx 2 SS", "wlan.vht.mcsset.txmcsmap.ss2",
23779 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
23782 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
23783 {"Tx 3 SS", "wlan.vht.mcsset.txmcsmap.ss3",
23784 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
23787 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
23788 {"Tx 4 SS", "wlan.vht.mcsset.txmcsmap.ss4",
23789 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
23792 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
23793 {"Tx 5 SS", "wlan.vht.mcsset.txmcsmap.ss5",
23794 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
23797 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
23798 {"Tx 6 SS", "wlan.vht.mcsset.txmcsmap.ss6",
23799 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
23802 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
23803 {"Tx 7 SS", "wlan.vht.mcsset.txmcsmap.ss7",
23804 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
23807 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
23808 {"Tx 8 SS", "wlan.vht.mcsset.txmcsmap.ss8",
23809 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
23812 {&hf_ieee80211_vht_mcsset_tx_highest_long_gi,
23813 {"Tx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.txhighestlonggirate",
23814 FT_UINT16, BASE_HEX, NULL, 0x1fff,
23817 {&hf_ieee80211_vht_op,
23818 {"VHT Operation Info", "wlan.vht.op",
23819 FT_NONE, BASE_NONE, NULL, 0,
23822 {&hf_ieee80211_vht_op_channel_width,
23823 {"Channel Width", "wlan.vht.op.channelwidth",
23824 FT_UINT8, BASE_HEX, VALS(vht_op_channel_width_flag), 0,
23827 {&hf_ieee80211_vht_op_channel_center0,
23828 {"Channel Center Segment 0", "wlan.vht.op.channelcenter0",
23829 FT_UINT8, BASE_DEC, NULL, 0,
23832 {&hf_ieee80211_vht_op_channel_center1,
23833 {"Channel Center Segment 1", "wlan.vht.op.channelcenter1",
23834 FT_UINT8, BASE_DEC, NULL, 0,
23837 {&hf_ieee80211_vht_op_basic_mcs_map,
23838 {"Basic MCS Map", "wlan.vht.op.basicmcsmap",
23839 FT_UINT16, BASE_HEX, NULL, 0,
23842 {&hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
23843 {"Basic 1 SS", "wlan.vht.op.basicmcsmap.ss1",
23844 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
23847 {&hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
23848 {"Basic 2 SS", "wlan.vht.op.basicmcsmap.ss2",
23849 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
23852 {&hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
23853 {"Basic 3 SS", "wlan.vht.op.basicmcsmap.ss3",
23854 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
23857 {&hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
23858 {"Basic 4 SS", "wlan.vht.op.basicmcsmap.ss4",
23859 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
23862 {&hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
23863 {"Basic 5 SS", "wlan.vht.op.basicmcsmap.ss5",
23864 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
23867 {&hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
23868 {"Basic 6 SS", "wlan.vht.op.basicmcsmap.ss6",
23869 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
23872 {&hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
23873 {"Basic 7 SS", "wlan.vht.op.basicmcsmap.ss7",
23874 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
23877 {&hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
23878 {"Basic 8 SS", "wlan.vht.op.basicmcsmap.ss8",
23879 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
23882 {&hf_ieee80211_vht_tpe_pwr_info,
23883 {"Tx Pwr Info", "wlan.vht.tpe.pwr_info",
23884 FT_UINT8, BASE_HEX, NULL, 0,
23887 {&hf_ieee80211_vht_tpe_pwr_info_count,
23888 {"Max Tx Pwr Count", "wlan.vht.tpe.pwr_info.count",
23889 FT_UINT8, BASE_DEC, NULL , 0x07,
23892 {&hf_ieee80211_vht_tpe_pwr_info_unit,
23893 {"Max Tx Pwr Unit Interpretation", "wlan.vht.tpe.pwr_info.unit",
23894 FT_UINT8, BASE_DEC, VALS(vht_tpe_pwr_units) , 0x38,
23897 {&hf_ieee80211_vht_tpe_pwr_info_reserved,
23898 {"Reserved", "wlan.vht.tpe.pwr_info.reserved",
23899 FT_UINT8, BASE_DEC, NULL , 0xC0,
23902 {&hf_ieee80211_vht_tpe_pwr_constr_20,
23903 {"Local Max Tx Pwr Constraint 20MHz", "wlan.vht.tpe.pwr_constr_20",
23904 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom), 0,
23907 {&hf_ieee80211_vht_tpe_pwr_constr_40,
23908 {"Local Max Tx Pwr Constraint 40MHz", "wlan.vht.tpe.pwr_constr_40",
23909 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom), 0,
23912 {&hf_ieee80211_vht_tpe_pwr_constr_80,
23913 {"Local Max Tx Pwr Constraint 80MHz", "wlan.vht.tpe.pwr_constr_80",
23914 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom), 0,
23917 {&hf_ieee80211_vht_tpe_pwr_constr_160,
23918 {"Local Max Tx Pwr Constraint 160MHz/80+80 MHz", "wlan.vht.tpe.pwr_constr_160",
23919 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom), 0,
23922 {&hf_ieee80211_txbf_csi_num_bf_ant,
23923 {"Max antennae STA can support when CSI feedback required", "wlan.txbf.csinumant",
23924 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x00180000,
23925 "Max antennae station can support when CSI feedback required", HFILL }},
23927 {&hf_ieee80211_txbf_uncomp_sm_bf_ant,
23928 {"Max antennae STA can support when uncompressed Beamforming feedback required", "wlan.txbf.fm.uncompressed.maxant",
23929 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x00600000,
23930 "Max antennae station can support when uncompressed Beamforming feedback required", HFILL }},
23932 {&hf_ieee80211_txbf_comp_sm_bf_ant,
23933 {"Max antennae STA can support when compressed Beamforming feedback required", "wlan.txbf.fm.compressed.maxant",
23934 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x01800000,
23935 "Max antennae station can support when compressed Beamforming feedback required", HFILL }},
23937 {&hf_ieee80211_txbf_csi_max_rows_bf,
23938 {"Maximum number of rows of CSI explicit feedback", "wlan.txbf.csi.maxrows",
23939 FT_UINT32, BASE_HEX, VALS(txbf_csi_max_rows_bf_flags), 0x06000000,
23942 {&hf_ieee80211_txbf_chan_est,
23943 {"Maximum number of space time streams for which channel dimensions can be simultaneously estimated", "wlan.txbf.channelest",
23944 FT_UINT32, BASE_HEX, VALS(txbf_chan_est_flags), 0x18000000,
23947 {&hf_ieee80211_txbf_resrv,
23948 {"Reserved", "wlan.txbf.reserved",
23949 FT_UINT32, BASE_HEX, NULL, 0xe0000000,
23952 {&hf_ieee80211_hta_cc,
23953 {"HT Control Channel", "wlan.hta.control_channel",
23954 FT_UINT8, BASE_DEC, NULL, 0,
23957 {&hf_ieee80211_hta_cap,
23958 {"HT Additional Capabilities", "wlan.hta.capabilities",
23959 FT_UINT16, BASE_HEX, NULL, 0,
23960 "HT Additional Capability information", HFILL }},
23962 {&hf_ieee80211_hta_ext_chan_offset,
23963 {"Extension Channel Offset", "wlan.hta.capabilities.ext_chan_offset",
23964 FT_UINT16, BASE_HEX, VALS(hta_ext_chan_offset_flag), 0x0003,
23967 {&hf_ieee80211_hta_rec_tx_width,
23968 {"Recommended Tx Channel Width", "wlan.hta.capabilities.rec_tx_width",
23969 FT_BOOLEAN, 16, TFS(&hta_rec_tx_width_flag), 0x0004,
23970 "Recommended Transmit Channel Width", HFILL }},
23972 {&hf_ieee80211_hta_rifs_mode,
23973 {"Reduced Interframe Spacing (RIFS) Mode", "wlan.hta.capabilities.rifs_mode",
23974 FT_BOOLEAN, 16, TFS(&hta_rifs_mode_flag), 0x0008,
23977 {&hf_ieee80211_hta_controlled_access,
23978 {"Controlled Access Only", "wlan.hta.capabilities.controlled_access",
23979 FT_BOOLEAN, 16, TFS(&hta_controlled_access_flag), 0x0010,
23982 {&hf_ieee80211_hta_service_interval,
23983 {"Service Interval Granularity", "wlan.hta.capabilities.service_interval",
23984 FT_UINT16, BASE_HEX, VALS(hta_service_interval_flag), 0x00E0,
23987 {&hf_ieee80211_hta_operating_mode,
23988 {"Operating Mode", "wlan.hta.capabilities.operating_mode",
23989 FT_UINT16, BASE_HEX, VALS(hta_operating_mode_flag), 0x0003,
23992 {&hf_ieee80211_hta_non_gf_devices,
23993 {"Non Greenfield (GF) devices Present", "wlan.hta.capabilities.non_gf_devices",
23994 FT_BOOLEAN, 16, TFS(&hta_non_gf_devices_flag), 0x0004,
23995 "on Greenfield (GF) devices Present", HFILL }},
23997 {&hf_ieee80211_hta_basic_stbc_mcs,
23998 {"Basic STB Modulation and Coding Scheme (MCS)", "wlan.hta.capabilities.basic_stbc_mcs",
23999 FT_UINT16, BASE_HEX, NULL , 0x007f,
24002 {&hf_ieee80211_hta_dual_stbc_protection,
24003 {"Dual Clear To Send (CTS) Protection", "wlan.hta.capabilities.dual_stbc_protection",
24004 FT_BOOLEAN, 16, TFS(&hta_dual_stbc_protection_flag), 0x0080,
24007 {&hf_ieee80211_hta_secondary_beacon,
24008 {"Secondary Beacon", "wlan.hta.capabilities.secondary_beacon",
24009 FT_BOOLEAN, 16, TFS(&hta_secondary_beacon_flag), 0x0100,
24012 {&hf_ieee80211_hta_lsig_txop_protection,
24013 {"L-SIG TXOP Protection Support", "wlan.hta.capabilities.lsig_txop_protection",
24014 FT_BOOLEAN, 16, TFS(&hta_lsig_txop_protection_flag), 0x0200,
24017 {&hf_ieee80211_hta_pco_active,
24018 {"Phased Coexistence Operation (PCO) Active", "wlan.hta.capabilities.pco_active",
24019 FT_BOOLEAN, 16, TFS(&hta_pco_active_flag), 0x0400,
24022 {&hf_ieee80211_hta_pco_phase,
24023 {"Phased Coexistence Operation (PCO) Phase", "wlan.hta.capabilities.pco_phase",
24024 FT_BOOLEAN, 16, TFS(&hta_pco_phase_flag), 0x0800,
24027 {&hf_ieee80211_antsel,
24028 {"Antenna Selection (ASEL) Capabilities", "wlan.asel",
24029 FT_UINT8, BASE_HEX, NULL, 0,
24032 {&hf_ieee80211_antsel_vs,
24033 {"Antenna Selection (ASEL) Capabilities (VS)", "wlan.vs.asel",
24034 FT_UINT8, BASE_HEX, NULL, 0,
24035 "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL }},
24037 {&hf_ieee80211_antsel_b0,
24038 {"Antenna Selection Capable", "wlan.asel.capable",
24039 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
24042 {&hf_ieee80211_antsel_b1,
24043 {"Explicit CSI Feedback Based Tx ASEL", "wlan.asel.txcsi",
24044 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
24047 {&hf_ieee80211_antsel_b2,
24048 {"Antenna Indices Feedback Based Tx ASEL", "wlan.asel.txif",
24049 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
24052 {&hf_ieee80211_antsel_b3,
24053 {"Explicit CSI Feedback", "wlan.asel.csi",
24054 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
24057 {&hf_ieee80211_antsel_b4,
24058 {"Antenna Indices Feedback", "wlan.asel.if",
24059 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
24062 {&hf_ieee80211_antsel_b5,
24063 {"Rx ASEL", "wlan.asel.rx",
24064 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
24067 {&hf_ieee80211_antsel_b6,
24068 {"Tx Sounding PPDUs", "wlan.asel.sppdu",
24069 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
24072 {&hf_ieee80211_antsel_b7,
24073 {"Reserved", "wlan.asel.reserved",
24074 FT_UINT8, BASE_HEX, NULL, 0x80,
24077 {&hf_ieee80211_ht_info_delimiter1,
24078 {"HT Information Subset (1 of 3)", "wlan.ht.info.delim1",
24079 FT_UINT8, BASE_HEX, NULL, 0,
24082 {&hf_ieee80211_ht_info_primary_channel,
24083 {"Primary Channel", "wlan.ht.info.primarychannel",
24084 FT_UINT8, BASE_DEC, NULL, 0,
24087 {&hf_ieee80211_ht_info_secondary_channel_offset,
24088 {"Secondary channel offset", "wlan.ht.info.secchanoffset",
24089 FT_UINT8, BASE_HEX, VALS(ht_info_secondary_channel_offset_flags), 0x03,
24092 {&hf_ieee80211_ht_info_channel_width,
24093 {"Supported channel width", "wlan.ht.info.chanwidth",
24094 FT_BOOLEAN, 8, TFS(&ht_info_channel_width_flag), 0x04,
24097 {&hf_ieee80211_ht_info_rifs_mode,
24098 {"Reduced Interframe Spacing (RIFS)", "wlan.ht.info.rifs",
24099 FT_BOOLEAN, 8, TFS(&ht_info_rifs_mode_flag), 0x08,
24102 {&hf_ieee80211_ht_info_psmp_stas_only,
24103 {"Power Save Multi-Poll (PSMP) stations only", "wlan.ht.info.psmponly",
24104 FT_BOOLEAN, 8, TFS(&ht_info_psmp_stas_only_flag), 0x10,
24107 {&hf_ieee80211_ht_info_service_interval_granularity,
24108 {"Shortest service interval", "wlan.ht.info",
24109 FT_UINT8, BASE_HEX, VALS(ht_info_service_interval_granularity_flags), 0xe0,
24112 {&hf_ieee80211_ht_info_delimiter2,
24113 {"HT Information Subset (2 of 3)", "wlan.ht.info.delim2",
24114 FT_UINT16, BASE_HEX, NULL, 0,
24117 {&hf_ieee80211_ht_info_operating_mode,
24118 {"Operating mode of BSS", "wlan.ht.info.operatingmode",
24119 FT_UINT16, BASE_HEX, VALS(ht_info_operating_mode_flags), 0x0003,
24122 {&hf_ieee80211_ht_info_non_greenfield_sta_present,
24123 {"Non-greenfield STAs present", "wlan.ht.info.greenfield",
24124 FT_BOOLEAN, 16, TFS(&ht_info_non_greenfield_sta_present_flag), 0x0004,
24127 {&hf_ieee80211_ht_info_transmit_burst_limit,
24128 {"Transmit burst limit", "wlan.ht.info.burstlim",
24129 FT_BOOLEAN, 16, TFS(&ht_info_transmit_burst_limit_flag), 0x0008,
24132 {&hf_ieee80211_ht_info_obss_non_ht_stas_present,
24133 {"OBSS non-HT STAs present", "wlan.ht.info.obssnonht",
24134 FT_BOOLEAN, 16, TFS(&ht_info_obss_non_ht_stas_present_flag), 0x0010,
24137 {&hf_ieee80211_ht_info_reserved_1,
24138 {"Reserved", "wlan.ht.info.reserved1",
24139 FT_UINT16, BASE_HEX, NULL, 0xffe0,
24142 {&hf_ieee80211_ht_info_delimiter3,
24143 {"HT Information Subset (3 of 3)", "wlan.ht.info.delim3",
24144 FT_UINT16, BASE_HEX, NULL, 0,
24147 {&hf_ieee80211_ht_info_reserved_2,
24148 {"Reserved", "wlan.ht.info.reserved2",
24149 FT_UINT16, BASE_HEX, NULL, 0x003f,
24152 {&hf_ieee80211_ht_info_dual_beacon,
24153 {"Dual beacon", "wlan.ht.info.dualbeacon",
24154 FT_BOOLEAN, 16, TFS(&ht_info_dual_beacon_flag), 0x0040,
24157 {&hf_ieee80211_ht_info_dual_cts_protection,
24158 {"Dual Clear To Send (CTS) protection", "wlan.ht.info.dualcts",
24159 FT_BOOLEAN, 16, TFS(&ht_info_dual_cts_protection_flag), 0x0080,
24162 {&hf_ieee80211_ht_info_secondary_beacon,
24163 {"Beacon ID", "wlan.ht.info.secondarybeacon",
24164 FT_BOOLEAN, 16, TFS(&ht_info_secondary_beacon_flag), 0x0100,
24167 {&hf_ieee80211_ht_info_lsig_txop_protection_full_support,
24168 {"L-SIG TXOP Protection Full Support", "wlan.ht.info.lsigprotsupport",
24169 FT_BOOLEAN, 16, TFS(&ht_info_lsig_txop_protection_full_support_flag), 0x0200,
24172 {&hf_ieee80211_ht_info_pco_active,
24173 {"Phased Coexistence Operation (PCO)", "wlan.ht.info.pco.active",
24174 FT_BOOLEAN, 16, TFS(&tfs_active_inactive), 0x0400,
24177 {&hf_ieee80211_ht_info_pco_phase,
24178 {"Phased Coexistence Operation (PCO) Phase", "wlan.ht.info.pco.phase",
24179 FT_BOOLEAN, 16, TFS(&ht_info_pco_phase_flag), 0x0800,
24182 {&hf_ieee80211_ht_info_reserved_3,
24183 {"Reserved", "wlan.ht.info.reserved3",
24184 FT_UINT16, BASE_HEX, NULL, 0xf000,
24187 {&hf_ieee80211_tag_ap_channel_report_operating_class,
24188 {"Operating Class", "wlan.ap_channel_report.operating_class",
24189 FT_UINT8, BASE_DEC, NULL, 0,
24192 {&hf_ieee80211_tag_ap_channel_report_channel_list,
24193 {"Channel List", "wlan.ap_channel_report.channel_list",
24194 FT_UINT8, BASE_DEC, NULL, 0,
24197 {&hf_ieee80211_tag_secondary_channel_offset,
24198 {"Secondary Channel Offset", "wlan.secchanoffset",
24199 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_secondary_channel_offset_flags), 0,
24202 {&hf_ieee80211_tag_bss_ap_avg_access_delay,
24203 {"AP Average Access Delay", "wlan.bss_ap_avg_access_delay",
24204 FT_UINT8, BASE_DEC, NULL, 0x0,
24207 {&hf_ieee80211_tag_antenna_id,
24208 {"Antenna ID", "wlan.antenna.id",
24209 FT_UINT8, BASE_DEC, NULL, 0x0,
24212 {&hf_ieee80211_tag_rsni,
24213 {"RSNI", "wlan.rsni",
24214 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom), 0x0,
24217 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
24218 {"Available Admission Capacity Bitmask", "wlan.bss_avb_adm_cap.bitmask",
24219 FT_UINT16, BASE_HEX, NULL, 0,
24221 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
24222 {"UP0 (bit0)", "wlan.bss_avb_adm_cap.bitmask.up0",
24223 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP0,
24225 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
24226 {"UP1 (bit1)", "wlan.bss_avb_adm_cap.bitmask.up1",
24227 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP1,
24229 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
24230 {"UP2 (bit2)", "wlan.bss_avb_adm_cap.bitmask.up2",
24231 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP2,
24233 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
24234 {"UP3 (bit3)", "wlan.bss_avb_adm_cap.bitmask.up3",
24235 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP3,
24237 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
24238 {"UP4 (bit4)", "wlan.bss_avb_adm_cap.bitmask.up4",
24239 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP4,
24241 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
24242 {"UP5 (bit5)", "wlan.bss_avb_adm_cap.bitmask.up5",
24243 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP5,
24245 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
24246 {"UP0 (bit6)", "wlan.bss_avb_adm_cap.bitmask.up6",
24247 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP6,
24249 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
24250 {"UP7 (bit7)", "wlan.bss_avb_adm_cap.bitmask.up7",
24251 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP7,
24253 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
24254 {"AC0 (bit8)", "wlan.bss_avb_adm_cap.bitmask.ac0",
24255 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC0,
24257 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
24258 {"AC1 (bit9)", "wlan.bss_avb_adm_cap.bitmask.AC1",
24259 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC1,
24261 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
24262 {"AC2 (bit10)", "wlan.bss_avb_adm_cap.bitmask.ac2",
24263 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC2,
24265 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
24266 {"AC3 (bit11)", "wlan.bss_avb_adm_cap.bitmask.ac3",
24267 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC3,
24269 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
24270 {"Reserved", "wlan.bss_avb_adm_cap.bitmask.rsv",
24271 FT_UINT16, BASE_HEX, NULL, BSS_BITMASK_RSV,
24273 {&hf_ieee80211_tag_bss_avb_adm_cap_up0,
24274 {"UP0", "wlan.bss_avb_adm_cap.up0",
24275 FT_UINT16, BASE_DEC, NULL, 0x0,
24277 {&hf_ieee80211_tag_bss_avb_adm_cap_up1,
24278 {"UP1", "wlan.bss_avb_adm_cap.up1",
24279 FT_UINT16, BASE_DEC, NULL, 0x0,
24281 {&hf_ieee80211_tag_bss_avb_adm_cap_up2,
24282 {"UP2", "wlan.bss_avb_adm_cap.up2",
24283 FT_UINT16, BASE_DEC, NULL, 0x0,
24285 {&hf_ieee80211_tag_bss_avb_adm_cap_up3,
24286 {"UP3", "wlan.bss_avb_adm_cap.up3",
24287 FT_UINT16, BASE_DEC, NULL, 0x0,
24289 {&hf_ieee80211_tag_bss_avb_adm_cap_up4,
24290 {"UP4", "wlan.bss_avb_adm_cap.up4",
24291 FT_UINT16, BASE_DEC, NULL, 0x0,
24293 {&hf_ieee80211_tag_bss_avb_adm_cap_up5,
24294 {"UP5", "wlan.bss_avb_adm_cap.up5",
24295 FT_UINT16, BASE_DEC, NULL, 0x0,
24297 {&hf_ieee80211_tag_bss_avb_adm_cap_up6,
24298 {"UP6", "wlan.bss_avb_adm_cap.up6",
24299 FT_UINT16, BASE_DEC, NULL, 0x0,
24301 {&hf_ieee80211_tag_bss_avb_adm_cap_up7,
24302 {"UP7", "wlan.bss_avb_adm_cap.up7",
24303 FT_UINT16, BASE_DEC, NULL, 0x0,
24305 {&hf_ieee80211_tag_bss_avb_adm_cap_ac0,
24306 {"AC0", "wlan.bss_avb_adm_cap.ac0",
24307 FT_UINT16, BASE_DEC, NULL, 0x0,
24309 {&hf_ieee80211_tag_bss_avb_adm_cap_ac1,
24310 {"AC1", "wlan.bss_avb_adm_cap.ac1",
24311 FT_UINT16, BASE_DEC, NULL, 0x0,
24313 {&hf_ieee80211_tag_bss_avb_adm_cap_ac2,
24314 {"AC2", "wlan.bss_avb_adm_cap.ac2",
24315 FT_UINT16, BASE_DEC, NULL, 0x0,
24317 {&hf_ieee80211_tag_bss_avb_adm_cap_ac3,
24318 {"AC3", "wlan.bss_avb_adm_cap.ac3",
24319 FT_UINT16, BASE_DEC, NULL, 0x0,
24322 {&hf_ieee80211_tag_bss_avg_ac_access_delay_be,
24323 {"AC Average Access Delay for Best Effort", "wlan.bss_avg_ac_access_delay.be",
24324 FT_UINT8, BASE_DEC, NULL, 0x0,
24326 {&hf_ieee80211_tag_bss_avg_ac_access_delay_bk,
24327 {"AC Average Access Delay for Best Background", "wlan.bss_avg_ac_access_delay.bk",
24328 FT_UINT8, BASE_DEC, NULL, 0x0,
24330 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vi,
24331 {"AC Average Access Delay for Video", "wlan.bss_avg_ac_access_delay_vi",
24332 FT_UINT8, BASE_DEC, NULL, 0x0,
24334 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vo,
24335 {"AC Average Access Delay for Voice", "wlan.bss_avg_ac_access_delay_vo",
24336 FT_UINT8, BASE_DEC, NULL, 0x0,
24340 /* 802.11-2012 Table 8-119-RM Enabled Capabilities definition */
24341 {&hf_ieee80211_tag_rm_enabled_capabilities,
24342 {"RM Capabilities", "wlan.rmcap",
24343 FT_UINT8, BASE_HEX, NULL, 0,
24344 "Signals support for radio measurements in a device", HFILL }},
24346 /* RM Enabled Capability octet 1 */
24347 {&hf_ieee80211_tag_rm_enabled_capabilities_b0,
24348 {"Link Measurement", "wlan.rmcap.b0",
24349 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
24351 {&hf_ieee80211_tag_rm_enabled_capabilities_b1,
24352 {"Neighbor Report", "wlan.rmcap.b1",
24353 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
24355 {&hf_ieee80211_tag_rm_enabled_capabilities_b2,
24356 {"Parallel Measurements", "wlan.rmcap.b2",
24357 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04,
24359 {&hf_ieee80211_tag_rm_enabled_capabilities_b3,
24360 {"Repeated Measurements", "wlan.rmcap.b3",
24361 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
24363 {&hf_ieee80211_tag_rm_enabled_capabilities_b4,
24364 {"Beacon Passive Measurement", "wlan.rmcap.b4",
24365 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10,
24367 {&hf_ieee80211_tag_rm_enabled_capabilities_b5,
24368 {"Beacon Active Measurement", "wlan.rmcap.b5",
24369 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20,
24371 {&hf_ieee80211_tag_rm_enabled_capabilities_b6,
24372 {"Beacon Table Measurement", "wlan.rmcap.b6",
24373 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
24375 {&hf_ieee80211_tag_rm_enabled_capabilities_b7,
24376 {"Beacon Measurement Reporting Conditions", "wlan.rmcap.b7",
24377 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
24380 /* RM Enabled Capability octet 2 */
24381 {&hf_ieee80211_tag_rm_enabled_capabilities_b8,
24382 {"Frame Measurement", "wlan.rmcap.b8",
24383 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
24385 {&hf_ieee80211_tag_rm_enabled_capabilities_b9,
24386 {"Channel Load Measurement", "wlan.rmcap.b9",
24387 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
24389 {&hf_ieee80211_tag_rm_enabled_capabilities_b10,
24390 {"Noise Histogram Measurement", "wlan.rmcap.b10",
24391 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04,
24393 {&hf_ieee80211_tag_rm_enabled_capabilities_b11,
24394 {"Statistics Measurement", "wlan.rmcap.b11",
24395 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
24397 {&hf_ieee80211_tag_rm_enabled_capabilities_b12,
24398 {"LCI Measurement", "wlan.rmcap.b12",
24399 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10,
24401 {&hf_ieee80211_tag_rm_enabled_capabilities_b13,
24402 {"LCI Azimuth capability", "wlan.rmcap.b13",
24403 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20,
24405 {&hf_ieee80211_tag_rm_enabled_capabilities_b14,
24406 {"Transmit Stream/Category Measurement", "wlan.rmcap.b14",
24407 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
24409 {&hf_ieee80211_tag_rm_enabled_capabilities_b15,
24410 {"Triggered Transmit Stream/Category Measurement", "wlan.rmcap.b15",
24411 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
24414 /* RM Enabled Capability octet 3 */
24415 {&hf_ieee80211_tag_rm_enabled_capabilities_b16,
24416 {"AP Channel Report capability", "wlan.rmcap.b16",
24417 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
24419 {&hf_ieee80211_tag_rm_enabled_capabilities_b17,
24420 {"RM MIB capability", "wlan.rmcap.b17",
24421 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
24423 {&hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
24424 {"Operating Channel Max Measurement Duration", "wlan.rmcap.b18to20",
24425 FT_UINT8, BASE_DEC, NULL, 0x1C,
24427 {&hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
24428 {"Nonoperating Channel Max Measurement Duration", "wlan.rmcap.b21to23",
24429 FT_UINT8, BASE_DEC, NULL, 0xE0,
24432 /* RM Enabled Capability octet 4 */
24433 {&hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
24434 {"Measurement Pilotcapability", "wlan.rmcap.b24to26",
24435 FT_UINT8, BASE_DEC, NULL, 0x07,
24437 {&hf_ieee80211_tag_rm_enabled_capabilities_b27,
24438 {"Measurement Pilot Transmission Information", "wlan.rmcap.b27",
24439 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
24441 {&hf_ieee80211_tag_rm_enabled_capabilities_b28,
24442 {"Neighbor Report TSF Offset", "wlan.rmcap.b28",
24443 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10,
24445 {&hf_ieee80211_tag_rm_enabled_capabilities_b29,
24446 {"RCPI Measurement capability", "wlan.rmcap.b29",
24447 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20,
24449 {&hf_ieee80211_tag_rm_enabled_capabilities_b30,
24450 {"RSNI Measurement capability", "wlan.rmcap.b30",
24451 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
24453 {&hf_ieee80211_tag_rm_enabled_capabilities_b31,
24454 {"BSS Average Access Delay capability", "wlan.rmcap.b31",
24455 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
24458 /* RM Enabled Capability octet 5 */
24459 {&hf_ieee80211_tag_rm_enabled_capabilities_b32,
24460 {"BSS Available Admission Capacity capability", "wlan.rmcap.b32",
24461 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
24463 {&hf_ieee80211_tag_rm_enabled_capabilities_b33,
24464 {"Antenna capability", "wlan.rmcap.b33",
24465 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
24467 {&hf_ieee80211_tag_rm_enabled_capabilities_o5,
24468 {"Reserved", "wlan.rmcap.o5",
24469 FT_UINT8, BASE_HEX, NULL, 0xFC,
24470 "Must be zero", HFILL }},
24472 /* 20/40 BSS Coexistence */
24473 {&hf_ieee80211_tag_20_40_bc,
24474 {"20/40 BSS Coexistence Flags", "wlan.20_40_bc",
24475 FT_UINT8, BASE_HEX, NULL, 0x0,
24477 {&hf_ieee80211_tag_20_40_bc_information_request,
24478 {"Information Request", "wlan.20_40_bc.information_request",
24479 FT_BOOLEAN, 8, NULL, 0x01,
24481 {&hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
24482 {"Forty MHz Intolerant", "wlan.20_40_bc.forty_mhz_intolerant",
24483 FT_BOOLEAN, 8, NULL, 0x02,
24485 {&hf_ieee80211_tag_20_40_bc_20_mhz_bss_witdh_request,
24486 {"20 MHz BSS Witdh Request", "wlan.20_40_bc.20_mhz_bss_witdh_request",
24487 FT_BOOLEAN, 8, NULL, 0x04,
24489 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
24490 {"OBSS Scanning Exemption Request", "wlan.20_40_bc.obss_scanning_exemption_request",
24491 FT_BOOLEAN, 8, NULL, 0x08,
24493 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
24494 {"OBSS Scanning Exemption Grant", "wlan.20_40_bc.obss_scanning_exemption_grant",
24495 FT_BOOLEAN, 8, NULL, 0x10,
24497 {&hf_ieee80211_tag_20_40_bc_reserved,
24498 {"Reserved", "wlan.20_40_bc.reserved",
24499 FT_UINT8, BASE_HEX, NULL, 0xE0,
24500 "Must be zero", HFILL }},
24503 {&hf_ieee80211_tag_power_constraint_local,
24504 {"Local Power Constraint", "wlan.powercon.local",
24505 FT_UINT8, BASE_DEC, NULL, 0,
24506 "Value that allows the mitigation requirements to be satisfied in the current channel", HFILL }},
24508 {&hf_ieee80211_tag_power_capability_min,
24509 {"Minimum Transmit Power", "wlan.powercap.min",
24510 FT_UINT8, BASE_DEC_HEX, NULL, 0,
24511 "The nominal minimum transmit power with which the STA is capable of transmitting in the current channel", HFILL }},
24513 {&hf_ieee80211_tag_power_capability_max,
24514 {"Maximum Transmit Power", "wlan.powercap.max",
24515 FT_UINT8, BASE_DEC_HEX, NULL, 0,
24516 "The nominal maximum transmit power with which the STA is capable of transmitting in the current channel", HFILL }},
24518 {&hf_ieee80211_tag_tpc_report_trsmt_pow,
24519 {"Transmit Power", "wlan.tcprep.trsmt_pow",
24520 FT_INT8, BASE_DEC, NULL, 0,
24523 {&hf_ieee80211_tag_tpc_report_link_mrg,
24524 {"Link Margin", "wlan.tcprep.link_mrg",
24525 FT_INT8, BASE_DEC, NULL, 0,
24528 {&hf_ieee80211_tag_supported_channels,
24529 {"Supported Channels Set", "wlan.supchan",
24530 FT_NONE, BASE_NONE, NULL, 0,
24533 {&hf_ieee80211_tag_supported_channels_first,
24534 {"First Supported Channel", "wlan.supchan.first",
24535 FT_UINT8, BASE_DEC, NULL, 0,
24538 {&hf_ieee80211_tag_supported_channels_range,
24539 {"Supported Channel Range", "wlan.supchan.range",
24540 FT_UINT8, BASE_DEC, NULL, 0,
24543 {&hf_ieee80211_csa_channel_switch_mode,
24544 {"Channel Switch Mode", "wlan.csa.channel_switch_mode",
24545 FT_UINT8, BASE_HEX, NULL, 0,
24546 "Indicates any restrictions on transmission until a channel switch", HFILL }},
24548 {&hf_ieee80211_csa_new_channel_number,
24549 {"New Channel Number", "wlan.csa.new_channel_number",
24550 FT_UINT8, BASE_HEX, NULL, 0,
24551 "Set to the number of the channel to which the STA is moving", HFILL }},
24553 {&hf_ieee80211_csa_channel_switch_count,
24554 {"Channel Switch Count", "wlan.csa.channel_switch.count",
24555 FT_UINT8, BASE_DEC, NULL, 0,
24556 "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 }},
24558 {&hf_ieee80211_mesh_channel_switch_ttl,
24559 {"Mesh Channel Switch TTL", "wlan.csa.mesh_channel_switch.ttl",
24560 FT_UINT8, BASE_DEC, NULL, 0,
24563 {&hf_ieee80211_mesh_channel_switch_flag,
24564 {"Mesh Channel Switch Flag", "wlan.csa.mesh_channel_switch.flag",
24565 FT_UINT8, BASE_HEX, NULL, 0,
24568 {&hf_ieee80211_mesh_chswitch_flag_txrestrict,
24569 {"CSA Tx Restrict", "wlan.csa.mesh_channel_switch.flag.txrestrict",
24570 FT_BOOLEAN, 16, TFS(&csa_txrestrict_flags), 0x0001,
24573 {&hf_ieee80211_mesh_chswitch_flag_initiator,
24574 {"CSA Initiator", "wlan.csa.mesh_channel_switch.flag.initiator",
24575 FT_BOOLEAN, 16, TFS(&csa_initiator_flags), 0x0002,
24578 {&hf_ieee80211_mesh_channel_switch_reason_code,
24579 {"Mesh Channel Switch Reason Code", "wlan.csa.mesh_channel_switch.reason_code",
24580 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_reason_code_ext, 0,
24583 {&hf_ieee80211_mesh_channel_switch_precedence_value,
24584 {"Mesh Channel Switch Precedence Value", "wlan.csa.mesh_channel_switch.pre_value",
24585 FT_UINT16, BASE_DEC, NULL, 0,
24588 {&hf_ieee80211_tag_measure_request_token,
24589 {"Measurement Token", "wlan.measure.req.token",
24590 FT_UINT8, BASE_HEX, NULL, 0xff,
24593 {&hf_ieee80211_tag_measure_request_mode,
24594 {"Measurement Request Mode", "wlan.measure.req.mode",
24595 FT_UINT8, BASE_HEX, NULL, 0xff,
24598 {&hf_ieee80211_tag_measure_request_mode_parallel,
24599 {"Parallel", "wlan.measure.req.reqmode.parallel",
24600 FT_BOOLEAN, 8, NULL, 0x01,
24603 {&hf_ieee80211_tag_measure_request_mode_enable,
24604 {"Measurement Request Mode Field", "wlan.measure.req.reqmode.enable",
24605 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
24608 {&hf_ieee80211_tag_measure_request_mode_request,
24609 {"Measurement Reports", "wlan.measure.req.reqmode.request",
24610 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted), 0x04,
24613 {&hf_ieee80211_tag_measure_request_mode_report,
24614 {"Autonomous Measurement Reports", "wlan.measure.req.reqmode.report",
24615 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted), 0x08,
24618 {&hf_ieee80211_tag_measure_request_mode_duration_mandatory,
24619 {"Duration Mandatory", "wlan.measure.req.reqmode.duration_mandatory",
24620 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted), 0x10,
24623 {&hf_ieee80211_tag_measure_request_mode_reserved,
24624 {"Reserved", "wlan.measure.req.reqmode.reserved",
24625 FT_UINT8, BASE_HEX, NULL, 0xE0,
24628 {&hf_ieee80211_tag_measure_request_type,
24629 {"Measurement Request Type", "wlan.measure.req.reqtype",
24630 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_request_type_flags_ext, 0x00,
24633 {&hf_ieee80211_tag_measure_request_channel_number,
24634 {"Measurement Channel Number", "wlan.measure.req.channelnumber",
24635 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom), 0,
24638 {&hf_ieee80211_tag_measure_request_start_time,
24639 {"Measurement Start Time", "wlan.measure.req.starttime",
24640 FT_UINT64, BASE_HEX, NULL, 0,
24643 {&hf_ieee80211_tag_measure_request_duration,
24644 {"Measurement Duration", "wlan.measure.req.channelnumber",
24645 FT_UINT16, BASE_HEX, NULL, 0,
24646 "in TU (1 TU = 1024 us)", HFILL }},
24648 {&hf_ieee80211_tag_measure_request_operating_class,
24649 {"Operating Class", "wlan.measure.req.operatingclass",
24650 FT_UINT8, BASE_DEC, NULL, 0,
24653 {&hf_ieee80211_tag_measure_request_randomization_interval,
24654 {"Randomization Interval", "wlan.measure.req.randint",
24655 FT_UINT16, BASE_HEX, NULL, 0,
24656 "in TU (1 TU = 1024 us)", HFILL }},
24658 {&hf_ieee80211_tag_measure_request_measurement_mode,
24659 {"Measurement Mode", "wlan.measure.req.measurementmode",
24660 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_measurement_mode_flags), 0,
24663 {&hf_ieee80211_tag_measure_request_bssid,
24664 {"BSSID", "wlan.measure.req.bssid",
24665 FT_ETHER, BASE_NONE, NULL, 0,
24668 {&hf_ieee80211_tag_measure_request_subelement_length,
24669 {"Length", "wlan.measure.req.sub.length",
24670 FT_UINT8, BASE_DEC, NULL, 0,
24673 {&hf_ieee80211_tag_measure_request_beacon_sub_id,
24674 {"SubElement ID", "wlan.measure.req.beacon.sub.id",
24675 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_beacon_sub_id_flags), 0,
24678 {&hf_ieee80211_tag_measure_request_beacon_sub_ssid,
24679 {"SSID", "wlan.measure.req.beacon.sub.ssid",
24680 FT_STRING, BASE_NONE, 0, 0,
24683 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition,
24684 {"Reporting Condition", "wlan.measure.req.beacon.sub.bri.repcond",
24685 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags), 0,
24688 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset,
24689 {"Threshold/Offset", "wlan.measure.req.beacon.sub.bri.threshold_offset",
24690 FT_UINT8, BASE_HEX, NULL, 0,
24693 {&hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail,
24694 {"Reporting Detail", "wlan.measure.req.beacon.sub.bri.reporting_detail",
24695 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags), 0,
24698 {&hf_ieee80211_tag_measure_request_beacon_sub_request,
24699 {"Request", "wlan.measure.req.beacon.sub.request",
24700 FT_UINT8, BASE_DEC, 0, 0,
24703 {&hf_ieee80211_tag_measure_request_beacon_unknown,
24704 {"Unknown Data", "wlan.measure.req.beacon.unknown",
24705 FT_BYTES, BASE_NONE, NULL, 0,
24706 "(not interpreted)", HFILL }},
24708 {&hf_ieee80211_tag_measure_request_channel_load_sub_id,
24709 {"SubElement ID", "wlan.measure.req.channel_load.sub.id",
24710 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_channel_load_sub_id_vals), 0,
24713 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition,
24714 {"Reporting Condition", "wlan.measure.req.channel_load.sub.repcond",
24715 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals), 0,
24718 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref,
24719 {"Reference Value", "wlan.measure.req.channel_load.sub.ref",
24720 FT_UINT8, BASE_HEX, NULL, 0,
24724 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_id,
24725 {"SubElement ID", "wlan.measure.req.noise_histogram.sub.id",
24726 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_noise_histogram_sub_id_vals), 0,
24729 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition,
24730 {"Reporting Condition", "wlan.measure.reqnoise_histogram.sub.repcond",
24731 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals), 0,
24734 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref,
24735 {"ANPI Reference Value", "wlan.measure.req.noise_histogram.sub.anpiref",
24736 FT_UINT8, BASE_HEX, NULL, 0,
24740 {&hf_ieee80211_tag_measure_request_frame_request_type,
24741 {"Frame Request Type", "wlan.measure.req.frame_request_type",
24742 FT_UINT8, BASE_HEX, NULL, 0,
24745 {&hf_ieee80211_tag_measure_request_mac_address,
24746 {"MAC Address", "wlan.measure.req.mac_address",
24747 FT_BYTES, BASE_NONE, NULL, 0,
24750 {&hf_ieee80211_tag_measure_request_peer_mac_address,
24751 {"Peer MAC Address", "wlan.measure.req.peer_mac_address",
24752 FT_BYTES, BASE_NONE, NULL, 0,
24755 {&hf_ieee80211_tag_measure_request_group_id,
24756 {"Group ID", "wlan.measure.req.groupid",
24757 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_request_group_id_flags_ext, 0,
24760 {&hf_ieee80211_tag_measure_request_unknown,
24761 {"Unknown Data", "wlan.measure.req.unknown",
24762 FT_BYTES, BASE_NONE, NULL, 0,
24763 "(not interpreted)", HFILL }},
24765 {&hf_ieee80211_tag_measure_report_measurement_token,
24766 {"Measurement Token", "wlan.measure.req.token",
24767 FT_UINT8, BASE_HEX, NULL, 0,
24770 {&hf_ieee80211_tag_measure_report_mode,
24771 {"Measurement Report Mode", "wlan.measure.req.mode",
24772 FT_UINT8, BASE_HEX, NULL, 0,
24775 {&hf_ieee80211_tag_measure_report_mode_late,
24776 {"Measurement Report Mode Field", "wlan.measure.rep.repmode.late",
24777 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
24780 {&hf_ieee80211_tag_measure_report_mode_incapable,
24781 {"Measurement Reports", "wlan.measure.rep.repmode.incapable",
24782 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted), 0x02,
24785 {&hf_ieee80211_tag_measure_report_mode_refused,
24786 {"Autonomous Measurement Reports", "wlan.measure.rep.repmode.refused",
24787 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted), 0x04,
24790 {&hf_ieee80211_tag_measure_report_mode_reserved,
24791 {"Reserved", "wlan.measure.rep.repmode.reserved",
24792 FT_UINT8, BASE_HEX, NULL, 0xf8,
24795 {&hf_ieee80211_tag_measure_report_type,
24796 {"Measurement Report Type", "wlan.measure.rep.reptype",
24797 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_report_type_flags_ext, 0x00,
24800 {&hf_ieee80211_tag_measure_report_channel_number,
24801 {"Measurement Channel Number", "wlan.measure.rep.channelnumber",
24802 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom), 0,
24805 {&hf_ieee80211_tag_measure_report_start_time,
24806 {"Measurement Start Time", "wlan.measure.rep.starttime",
24807 FT_UINT64, BASE_HEX, NULL, 0,
24810 {&hf_ieee80211_tag_measure_report_duration,
24811 {"Measurement Duration", "wlan.measure.rep.channelnumber",
24812 FT_UINT16, BASE_HEX, NULL, 0,
24815 {&hf_ieee80211_tag_measure_cca_busy_fraction,
24816 {"CCA Busy Fraction", "wlan.measure.rep.ccabusy",
24817 FT_UINT8, BASE_HEX, NULL, 0,
24820 {&hf_ieee80211_tag_measure_basic_map_field,
24821 {"Map Field", "wlan.measure.rep.mapfield",
24822 FT_UINT8, BASE_HEX, NULL, 0,
24825 {&hf_ieee80211_tag_measure_map_field_bss,
24826 {"BSS", "wlan.measure.rep.repmode.mapfield.bss",
24827 FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_map_field_bss_flag), 0x01,
24830 {&hf_ieee80211_tag_measure_map_field_odfm,
24831 {"Orthogonal Frequency Division Multiplexing (ODFM) Preamble", "wlan.measure.rep.repmode.mapfield.bss",
24832 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x02,
24835 {&hf_ieee80211_tag_measure_map_field_unident_signal,
24836 {"Unidentified Signal", "wlan.measure.rep.repmode.mapfield.unidentsig",
24837 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x04,
24840 {&hf_ieee80211_tag_measure_map_field_radar,
24841 {"Radar", "wlan.measure.rep.repmode.mapfield.radar",
24842 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x08,
24845 {&hf_ieee80211_tag_measure_map_field_unmeasured,
24846 {"Unmeasured", "wlan.measure.rep.repmode.mapfield.unmeasured",
24847 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x10,
24850 {&hf_ieee80211_tag_measure_map_field_reserved,
24851 {"Reserved", "wlan.measure.rep.repmode.mapfield.reserved",
24852 FT_UINT8, BASE_HEX, NULL, 0xe0,
24855 {&hf_ieee80211_tag_measure_rpi_histogram_report,
24856 {"Receive Power Indicator (RPI) Histogram Report", "wlan.measure.rep.rpi.histogram_report",
24857 FT_BYTES, BASE_NONE, NULL, 0,
24860 {&hf_ieee80211_tag_measure_rpi_histogram_report_0,
24861 {"RPI 0 Density", "wlan.measure.rep.rpi.rpi0density",
24862 FT_UINT8, BASE_HEX, NULL, 0,
24863 "Receive Power Indicator (RPI) 0 Density", HFILL }},
24865 {&hf_ieee80211_tag_measure_rpi_histogram_report_1,
24866 {"RPI 1 Density", "wlan.measure.rep.rpi.rpi1density",
24867 FT_UINT8, BASE_HEX, NULL, 0,
24868 "Receive Power Indicator (RPI) 1 Density", HFILL }},
24870 {&hf_ieee80211_tag_measure_rpi_histogram_report_2,
24871 {"RPI 2 Density", "wlan.measure.rep.rpi.rpi2density",
24872 FT_UINT8, BASE_HEX, NULL, 0,
24873 "Receive Power Indicator (RPI) 2 Density", HFILL }},
24875 {&hf_ieee80211_tag_measure_rpi_histogram_report_3,
24876 {"RPI 3 Density", "wlan.measure.rep.rpi.rpi3density",
24877 FT_UINT8, BASE_HEX, NULL, 0,
24878 "Receive Power Indicator (RPI) 3 Density", HFILL }},
24880 {&hf_ieee80211_tag_measure_rpi_histogram_report_4,
24881 {"RPI 4 Density", "wlan.measure.rep.rpi.rpi4density",
24882 FT_UINT8, BASE_HEX, NULL, 0,
24883 "Receive Power Indicator (RPI) 4 Density", HFILL }},
24885 {&hf_ieee80211_tag_measure_rpi_histogram_report_5,
24886 {"RPI 5 Density", "wlan.measure.rep.rpi.rpi5density",
24887 FT_UINT8, BASE_HEX, NULL, 0,
24888 "Receive Power Indicator (RPI) 5 Density", HFILL }},
24890 {&hf_ieee80211_tag_measure_rpi_histogram_report_6,
24891 {"RPI 6 Density", "wlan.measure.rep.rpi.rpi6density",
24892 FT_UINT8, BASE_HEX, NULL, 0,
24893 "Receive Power Indicator (RPI) 6 Density", HFILL }},
24895 {&hf_ieee80211_tag_measure_rpi_histogram_report_7,
24896 {"RPI 7 Density", "wlan.measure.rep.rpi.rpi7density",
24897 FT_UINT8, BASE_HEX, NULL, 0,
24898 "Receive Power Indicator (RPI) 7 Density", HFILL }},
24900 {&hf_ieee80211_tag_measure_report_operating_class,
24901 {"Operating Class", "wlan.measure.rep.operatingclass",
24902 FT_UINT8, BASE_DEC, NULL, 0,
24905 {&hf_ieee80211_tag_measure_report_channel_load,
24906 {"Channel Load", "wlan.measure.rep.chanload",
24907 FT_UINT8, BASE_HEX, NULL, 0,
24910 {&hf_ieee80211_tag_measure_report_frame_info,
24911 {"Reported Frame Information", "wlan.measure.rep.frameinfo",
24912 FT_UINT8, BASE_HEX, NULL, 0,
24915 {&hf_ieee80211_tag_measure_report_frame_info_phy_type,
24916 {"Condensed PHY", "wlan.measure.rep.frameinfo.phytype",
24917 FT_UINT8, BASE_HEX, NULL, 0x7F,
24920 {&hf_ieee80211_tag_measure_report_frame_info_frame_type,
24921 {"Reported Frame Type", "wlan.measure.rep.frameinfo.frametype",
24922 FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_report_frame_info_frame_type_flag), 0x80,
24925 {&hf_ieee80211_tag_measure_report_rcpi,
24926 {"Received Channel Power Indicator (RCPI)", "wlan.measure.rep.rcpi",
24927 FT_UINT8, BASE_HEX, NULL, 0,
24928 "in dBm", HFILL }},
24930 {&hf_ieee80211_tag_measure_report_rsni,
24931 {"Received Signal to Noise Indicator (RSNI)", "wlan.measure.rep.rsni",
24932 FT_UINT8, BASE_HEX, NULL, 0,
24935 {&hf_ieee80211_tag_measure_report_bssid,
24936 {"BSSID Being Reported", "wlan.measure.rep.bssid",
24937 FT_ETHER, BASE_NONE, NULL, 0,
24940 {&hf_ieee80211_tag_measure_report_ant_id,
24941 {"Antenna ID", "wlan.measure.rep.antid",
24942 FT_UINT8, BASE_HEX, NULL, 0,
24945 {&hf_ieee80211_tag_measure_report_anpi,
24946 {"ANPI", "wlan.measure.rep.anpi",
24947 FT_UINT8, BASE_HEX, NULL, 0,
24950 {&hf_ieee80211_tag_measure_report_ipi_density_0,
24951 {"IPI Density 0", "wlan.measure.rep.ipi_density0",
24952 FT_UINT8, BASE_HEX, NULL, 0,
24955 {&hf_ieee80211_tag_measure_report_ipi_density_1,
24956 {"IPI Density 1", "wlan.measure.rep.ipi_density1",
24957 FT_UINT8, BASE_HEX, NULL, 0,
24960 {&hf_ieee80211_tag_measure_report_ipi_density_2,
24961 {"IPI Density 2", "wlan.measure.rep.ipi_density2",
24962 FT_UINT8, BASE_HEX, NULL, 0,
24965 {&hf_ieee80211_tag_measure_report_ipi_density_3,
24966 {"IPI Density 3", "wlan.measure.rep.ipi_density3",
24967 FT_UINT8, BASE_HEX, NULL, 0,
24970 {&hf_ieee80211_tag_measure_report_ipi_density_4,
24971 {"IPI Density 4", "wlan.measure.rep.ipi_density4",
24972 FT_UINT8, BASE_HEX, NULL, 0,
24975 {&hf_ieee80211_tag_measure_report_ipi_density_5,
24976 {"IPI Density 5", "wlan.measure.rep.ipi_density5",
24977 FT_UINT8, BASE_HEX, NULL, 0,
24980 {&hf_ieee80211_tag_measure_report_ipi_density_6,
24981 {"IPI Density 6", "wlan.measure.rep.ipi_density6",
24982 FT_UINT8, BASE_HEX, NULL, 0,
24985 {&hf_ieee80211_tag_measure_report_ipi_density_7,
24986 {"IPI Density 7", "wlan.measure.rep.ipi_density7",
24987 FT_UINT8, BASE_HEX, NULL, 0,
24990 {&hf_ieee80211_tag_measure_report_ipi_density_8,
24991 {"IPI Density 8", "wlan.measure.rep.ipi_density8",
24992 FT_UINT8, BASE_HEX, NULL, 0,
24995 {&hf_ieee80211_tag_measure_report_ipi_density_9,
24996 {"IPI Density 9", "wlan.measure.rep.ipi_density9",
24997 FT_UINT8, BASE_HEX, NULL, 0,
25000 {&hf_ieee80211_tag_measure_report_ipi_density_10,
25001 {"IPI Density 10", "wlan.measure.rep.ipi_density10",
25002 FT_UINT8, BASE_HEX, NULL, 0,
25005 {&hf_ieee80211_tag_measure_report_parent_tsf,
25006 {"Parent Timing Synchronization Function (TSF)", "wlan.measure.rep.parenttsf",
25007 FT_UINT32, BASE_HEX, NULL, 0,
25010 {&hf_ieee80211_tag_measure_report_subelement_length,
25011 {"Length", "wlan.measure.req.sub.length",
25012 FT_UINT8, BASE_DEC, NULL, 0,
25015 {&hf_ieee80211_tag_measure_report_beacon_sub_id,
25016 {"SubElement ID", "wlan.measure.req.beacon.sub.id",
25017 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_report_beacon_sub_id_vals), 0,
25020 {&hf_ieee80211_tag_measure_report_unknown,
25021 {"Unknown Data", "wlan.measure.rep.unknown",
25022 FT_BYTES, BASE_NONE, NULL, 0,
25023 "(not interpreted)", HFILL }},
25025 {&hf_ieee80211_tag_quiet_count,
25026 {"Count", "wlan.quiet.count",
25027 FT_UINT8, BASE_DEC, NULL, 0,
25028 "Set to the number of TBTTs until the beacon interval during which the next quiet interval shall start", HFILL }},
25030 {&hf_ieee80211_tag_quiet_period,
25031 {"Period", "wlan.quiet.period",
25032 FT_UINT8, BASE_DEC, NULL, 0,
25033 "Set to the number of beacon intervals between the start of regularly scheduled quiet intervals", HFILL }},
25035 {&hf_ieee80211_tag_quiet_duration,
25036 {"Duration", "wlan.quiet.duration",
25037 FT_UINT16, BASE_DEC, NULL, 0,
25038 "Set to the duration of the quiet interval", HFILL }},
25040 {&hf_ieee80211_tag_quiet_offset,
25041 {"Offset", "wlan.quiet.offset",
25042 FT_UINT16, BASE_DEC, NULL, 0,
25043 "Set to the offset of the start of the quiet interval from the TBTT", HFILL }},
25045 {&hf_ieee80211_tag_dfs_owner,
25046 {"Owner", "wlan.dfs.owner",
25047 FT_ETHER, BASE_NONE, NULL, 0,
25048 "Set to the individual IEEE MAC address of the STA that is the currently known DFS Owner in the IBSS", HFILL }},
25050 {&hf_ieee80211_tag_dfs_recovery_interval,
25051 {"Recovery Interval", "wlan.dfs.recovery_interval",
25052 FT_UINT8, BASE_DEC, NULL, 0,
25053 "Indicates the time interval that shall be used for DFS owner recovery", HFILL }},
25055 {&hf_ieee80211_tag_dfs_channel_map,
25056 {"Channel Map", "wlan.dfs.channel_map",
25057 FT_NONE, BASE_NONE, NULL, 0,
25060 {&hf_ieee80211_tag_dfs_channel_number,
25061 {"Channel Number", "wlan.dfs.channel_number",
25062 FT_UINT8, BASE_DEC, NULL, 0,
25065 {&hf_ieee80211_tag_dfs_map,
25066 {"Map", "wlan.dfs.map",
25067 FT_UINT8, BASE_HEX, NULL, 0,
25070 {&hf_ieee80211_tag_erp_info,
25071 {"ERP Information", "wlan.erp_info",
25072 FT_UINT8, BASE_HEX, NULL, 0,
25075 {&hf_ieee80211_tag_erp_info_erp_present,
25076 {"Non ERP Present", "wlan.erp_info.erp_present",
25077 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x01,
25080 {&hf_ieee80211_tag_erp_info_use_protection,
25081 {"Use Protection", "wlan.erp_info.use_protection",
25082 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x02,
25085 {&hf_ieee80211_tag_erp_info_barker_preamble_mode,
25086 {"Barker Preamble Mode", "wlan.erp_info.barker_preamble_mode",
25087 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x04,
25090 {&hf_ieee80211_tag_erp_info_reserved,
25091 {"Reserved", "wlan.erp_info.reserved",
25092 FT_UINT8, BASE_HEX, NULL, 0xF8,
25095 /* Table 8-103-Capabilities field */
25096 {&hf_ieee80211_tag_extended_capabilities,
25097 {"Extended Capabilities", "wlan.extcap",
25098 FT_UINT8, BASE_HEX, NULL, 0,
25101 /* P802.11n/D6.0 */
25102 /* Extended Capability octet 1 */
25103 {&hf_ieee80211_tag_extended_capabilities_b0,
25104 {"20/40 BSS Coexistence Management Support", "wlan.extcap.b0",
25105 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25106 "HT Information Exchange Support", HFILL }},
25108 /* P802.11p/D4.0 */
25109 {&hf_ieee80211_tag_extended_capabilities_b1,
25110 {"On-demand beacon", "wlan.extcap.b1",
25111 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
25114 {&hf_ieee80211_tag_extended_capabilities_b2,
25115 {"Extended Channel Switching", "wlan.extcap.b2",
25116 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
25119 {&hf_ieee80211_tag_extended_capabilities_b3,
25120 {"WAVE indication", "wlan.extcap.b3",
25121 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
25123 /*End: P802.11p/D4.0 */
25125 {&hf_ieee80211_tag_extended_capabilities_b4,
25126 {"PSMP Capability", "wlan.extcap.b4",
25127 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25130 {&hf_ieee80211_tag_extended_capabilities_b5,
25131 {"Reserved", "wlan.extcap.b5",
25132 FT_UINT8, BASE_HEX, NULL, 0x20,
25133 "Must be zero", HFILL }},
25135 {&hf_ieee80211_tag_extended_capabilities_b6,
25136 {"S-PSMP Support", "wlan.extcap.b6",
25137 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25140 {&hf_ieee80211_tag_extended_capabilities_b7,
25141 {"Event", "wlan.extcap.b7",
25142 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
25146 /* Extended Capability octet 2 */
25147 {&hf_ieee80211_tag_extended_capabilities_b8,
25148 {"Diagnostics", "wlan.extcap.b8",
25149 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25152 {&hf_ieee80211_tag_extended_capabilities_b9,
25153 {"Multicast Diagnostics", "wlan.extcap.b9",
25154 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
25157 {&hf_ieee80211_tag_extended_capabilities_b10,
25158 {"Location Tracking", "wlan.extcap.b10",
25159 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
25162 {&hf_ieee80211_tag_extended_capabilities_b11,
25163 {"FMS", "wlan.extcap.b11",
25164 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
25167 {&hf_ieee80211_tag_extended_capabilities_b12,
25168 {"Proxy ARP Service", "wlan.extcap.b12",
25169 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25172 {&hf_ieee80211_tag_extended_capabilities_b13,
25173 {"Collocated Interference Reporting", "wlan.extcap.b13",
25174 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
25177 {&hf_ieee80211_tag_extended_capabilities_b14,
25178 {"Civic Location", "wlan.extcap.b14",
25179 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25182 {&hf_ieee80211_tag_extended_capabilities_b15,
25183 {"Geospatial Location", "wlan.extcap.b15",
25184 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
25188 /* Extended Capability octet 3 */
25189 {&hf_ieee80211_tag_extended_capabilities_b16,
25190 {"TFS", "wlan.extcap.b16",
25191 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25194 {&hf_ieee80211_tag_extended_capabilities_b17,
25195 {"WNM-Sleep Mode", "wlan.extcap.b17",
25196 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
25199 {&hf_ieee80211_tag_extended_capabilities_b18,
25200 {"TIM Broadcast", "wlan.extcap.b18",
25201 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
25204 {&hf_ieee80211_tag_extended_capabilities_b19,
25205 {"BSS Transition", "wlan.extcap.b19",
25206 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
25209 {&hf_ieee80211_tag_extended_capabilities_b20,
25210 {"QoS Traffic Capability", "wlan.extcap.b20",
25211 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25214 {&hf_ieee80211_tag_extended_capabilities_b21,
25215 {"AC Station Count", "wlan.extcap.b21",
25216 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
25219 {&hf_ieee80211_tag_extended_capabilities_b22,
25220 {"Multiple BSSID", "wlan.extcap.b22",
25221 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25224 {&hf_ieee80211_tag_extended_capabilities_b23,
25225 {"Timing Measurement", "wlan.extcap.b23",
25226 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
25230 /* Extended Capability octet 4 */
25231 {&hf_ieee80211_tag_extended_capabilities_b24,
25232 {"Channel Usage", "wlan.extcap.b24",
25233 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25236 {&hf_ieee80211_tag_extended_capabilities_b25,
25237 {"SSID List", "wlan.extcap.b25",
25238 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
25241 {&hf_ieee80211_tag_extended_capabilities_b26,
25242 {"DMS", "wlan.extcap.b26",
25243 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
25246 {&hf_ieee80211_tag_extended_capabilities_b27,
25247 {"UTC TSF Offset", "wlan.extcap.b27",
25248 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
25251 {&hf_ieee80211_tag_extended_capabilities_b28,
25252 {"Peer U-APSD Buffer STA Support", "wlan.extcap.b28",
25253 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25256 {&hf_ieee80211_tag_extended_capabilities_b29,
25257 {"TDLS Peer PSM Support", "wlan.extcap.b29",
25258 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
25261 {&hf_ieee80211_tag_extended_capabilities_b30,
25262 {"TDLS channel switching", "wlan.extcap.b30",
25263 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25266 {&hf_ieee80211_tag_extended_capabilities_b31,
25267 {"Interworking", "wlan.extcap.b31",
25268 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
25272 /* Extended Capability octet 5 */
25273 {&hf_ieee80211_tag_extended_capabilities_b32,
25274 {"QoS Map", "wlan.extcap.b32",
25275 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25278 {&hf_ieee80211_tag_extended_capabilities_b33,
25279 {"EBR", "wlan.extcap.b33",
25280 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
25283 {&hf_ieee80211_tag_extended_capabilities_b34,
25284 {"SSPN Interface", "wlan.extcap.b34",
25285 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
25288 {&hf_ieee80211_tag_extended_capabilities_b35,
25289 {"Reserved", "wlan.extcap.b35",
25290 FT_UINT8, BASE_HEX, NULL, 0x08,
25291 "Must be zero", HFILL }},
25293 {&hf_ieee80211_tag_extended_capabilities_b36,
25294 {"MSGCF Capability", "wlan.extcap.b36",
25295 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25298 {&hf_ieee80211_tag_extended_capabilities_b37,
25299 {"TDLS support", "wlan.extcap.b37",
25300 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
25303 {&hf_ieee80211_tag_extended_capabilities_b38,
25304 {"TDLS Prohibited", "wlan.extcap.b38",
25305 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25308 {&hf_ieee80211_tag_extended_capabilities_b39,
25309 {"TDLS Channel Switching Prohibited", "wlan.extcap.b39",
25310 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
25313 /* Extended Capability octet 6 */
25314 {&hf_ieee80211_tag_extended_capabilities_b40,
25315 {"Reject Unadmitted Frame", "wlan.extcap.b40",
25316 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25319 {&hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
25320 {"Service Interval Granularity",
25321 "wlan.extcap.serv_int_granularity",
25322 FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals), 0x0e,
25325 {&hf_ieee80211_tag_extended_capabilities_b44,
25326 {"Identifier Location", "wlan.extcap.b44",
25327 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25330 {&hf_ieee80211_tag_extended_capabilities_b45,
25331 {"U-APSD Coexistence", "wlan.extcap.b45",
25332 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
25335 {&hf_ieee80211_tag_extended_capabilities_b46,
25336 {"WNM-Notification", "wlan.extcap.b46",
25337 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25340 {&hf_ieee80211_tag_extended_capabilities_b47,
25341 {"QAB Capability", "wlan.extcap.b47",
25342 FT_UINT8, BASE_HEX, NULL, 0x80,
25343 "AP supports QAB", HFILL }},
25345 /* Extended Capability octet 7 */
25346 {&hf_ieee80211_tag_extended_capabilities_b48,
25347 {"UTF-8 SSID", "wlan.extcap.b48",
25348 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25349 "The SSID in this BSS is interpreted using UTF-8 encoding", HFILL }},
25351 {&hf_ieee80211_tag_extended_capabilities_o7,
25352 {"Reserved", "wlan.extcap.o7",
25353 FT_UINT8, BASE_HEX, NULL, 0xfe,
25354 "Must be zero", HFILL }},
25356 /* Extended Capability octet 8 */
25357 {&hf_ieee80211_tag_extended_capabilities_b61,
25358 {"TDLS Wider Bandwidth", "wlan.extcap.b61",
25359 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
25362 {&hf_ieee80211_tag_extended_capabilities_b62,
25363 {"Operating Mode Notification", "wlan.extcap.b62",
25364 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25367 {&hf_ieee80211_tag_extended_capabilities_b63,
25368 {"Max Number Of MSDUs In A-MSDU", "wlan.extcap.b63",
25369 FT_UINT8, BASE_DEC, NULL, 0x80,
25370 "Part 1 (bit63)", HFILL }},
25372 {&hf_ieee80211_tag_extended_capabilities_o8,
25373 {"Reserved", "wlan.extcap.o8",
25374 FT_UINT8, BASE_HEX, NULL, 0x1f,
25375 "Must be zero", HFILL }},
25377 /* Extended Capability octet 9 */
25378 {&hf_ieee80211_tag_extended_capabilities_b64,
25379 {"Max Number Of MSDUs In A-MSDU64", "wlan.extcap.b64",
25380 FT_UINT8, BASE_DEC, NULL, 0x01,
25381 "Part 2 (bit64)", HFILL }},
25383 {&hf_ieee80211_tag_extended_capabilities_o9,
25384 {"Reserved", "wlan.extcap.o9",
25385 FT_UINT8, BASE_HEX, NULL, 0xfe,
25386 "Must be zero", HFILL }},
25388 {&hf_ieee80211_tag_cisco_ccx1_unknown,
25389 {"Unknown", "wlan.cisco.ccx1.unknown",
25390 FT_BYTES, BASE_NONE, NULL, 0,
25393 {&hf_ieee80211_tag_cisco_ccx1_name,
25394 {"Name", "wlan.cisco.ccx1.name",
25395 FT_STRING, BASE_NONE, NULL, 0,
25398 {&hf_ieee80211_tag_cisco_ccx1_clients,
25399 {"Clients", "wlan.cisco.ccx1.clients",
25400 FT_UINT8, BASE_DEC, NULL, 0,
25403 {&hf_ieee80211_tag_cisco_ccx1_unknown2,
25404 {"Unknown2", "wlan.cisco.ccx1.unknown2",
25405 FT_BYTES, BASE_NONE, NULL, 0,
25408 {&hf_ieee80211_tag_neighbor_report_bssid,
25409 {"BSSID", "wlan.nreport.bssid",
25410 FT_ETHER, BASE_NONE, NULL, 0,
25413 {&hf_ieee80211_tag_neighbor_report_bssid_info,
25414 {"BSSID Information", "wlan.nreport.bssid.info",
25415 FT_UINT32, BASE_HEX, NULL, 0,
25418 {&hf_ieee80211_tag_neighbor_report_bssid_info_reachability,
25419 {"AP Reachability", "wlan.nreport.bssid.info.reachability",
25420 FT_UINT32, BASE_HEX, VALS(ieee80211_neighbor_report_bssid_info_reachability_vals), 0x00000003,
25421 "Indicates whether the AP identified by this BSSID is reachable by the STA that requested the neighbor report", HFILL }},
25423 {&hf_ieee80211_tag_neighbor_report_bssid_info_security,
25424 {"Security", "wlan.nreport.bssid.info.security",
25425 FT_BOOLEAN, 32, NULL, 0x00000004,
25426 "Indicates that the AP identified by this BSSID supports the same security provisioning as used by the STA in its current association", HFILL }},
25428 {&hf_ieee80211_tag_neighbor_report_bssid_info_key_scope,
25429 {"Key Scope", "wlan.nreport.bssid.info.keyscope",
25430 FT_BOOLEAN, 32, NULL, 0x00000008,
25431 "indicates the AP indicated by this BSSID has the same authenticator as the AP sending the report", HFILL }},
25433 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability,
25434 {"Capability", "wlan.nreport.bssid.info.capability",
25435 FT_UINT32, BASE_HEX, NULL, 0x000003F0,
25436 "Contains selected capability information for the AP indicated by this BSSID", HFILL }},
25438 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng,
25439 {"Spectrum Management", "wlan.nreport.bssid.info.capability.specmngt",
25440 FT_BOOLEAN, 32, NULL, 0x00000010,
25443 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos,
25444 {"QoS", "wlan.nreport.bssid.info.capability.qos",
25445 FT_BOOLEAN, 32, NULL, 0x00000020,
25448 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd,
25449 {"APSD", "wlan.nreport.bssid.info.capability.apsd",
25450 FT_BOOLEAN, 32, NULL, 0x00000040,
25453 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt,
25454 {"Radio Measurement", "wlan.nreport.bssid.info.capability.radiomsnt",
25455 FT_BOOLEAN, 32, NULL, 0x00000080,
25458 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback,
25459 {"Delayed Block Ack", "wlan.nreport.bssid.info.capability.dback",
25460 FT_BOOLEAN, 32, NULL, 0x000000100,
25463 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback,
25464 {"Immediate Block Ack", "wlan.nreport.bssid.info.capability.iback",
25465 FT_BOOLEAN, 32, NULL, 0x00000200,
25468 {&hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain,
25469 {"Mobility Domain", "wlan.nreport.bssid.info.mobilitydomain",
25470 FT_BOOLEAN, 32, NULL, 0x00000400,
25473 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput,
25474 {"High Throughput Control (+HTC)", "wlan.nreport.bssid.info.hthoughput",
25475 FT_BOOLEAN, 32, NULL, 0x00000800,
25478 {&hf_ieee80211_tag_neighbor_report_bssid_info_reserved,
25479 {"Reserved", "wlan.nreport.bssid.info.reserved",
25480 FT_UINT32, BASE_HEX, NULL, 0xFFFFF000,
25481 "Must be zero", HFILL }},
25483 {&hf_ieee80211_tag_neighbor_report_ope_class,
25484 {"Operating Class", "wlan.nreport.opeclass",
25485 FT_UINT8, BASE_DEC, NULL, 0,
25488 {&hf_ieee80211_tag_neighbor_report_channel_number,
25489 {"Channel Number", "wlan.nreport.channumber",
25490 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom), 0,
25493 {&hf_ieee80211_tag_neighbor_report_phy_type,
25494 {"PHY Type", "wlan.nreport.phytype",
25495 FT_UINT8, BASE_HEX, NULL, 0,
25498 {&hf_ieee80211_tag_neighbor_report_subelement_id,
25499 {"Subelement ID", "wlan.nreport.subelement_id",
25500 FT_UINT8, BASE_HEX, VALS(ieee80211_neighbor_report_subelement_id_vals), 0,
25503 {&hf_ieee80211_tag_neighbor_report_subelement_length,
25504 {"Length", "wlan.nreport.phytype.subelement_length",
25505 FT_UINT8, BASE_HEX, NULL, 0,
25508 {&hf_ieee80211_tag_supported_ope_classes_current,
25509 {"Current Operating Class", "wlan.supopeclass.current",
25510 FT_UINT8, BASE_HEX, NULL, 0,
25513 {&hf_ieee80211_tag_supported_ope_classes_alternate,
25514 {"Alternate Operating Classes", "wlan.supopeclass.alt",
25515 FT_STRING, BASE_NONE, NULL, 0,
25518 {&hf_ieee80211_wfa_ie_type,
25519 {"Type", "wlan.wfa.ie.type",
25520 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals), 0,
25523 {&hf_ieee80211_wfa_ie_wpa_version,
25524 {"WPA Version", "wlan.wfa.ie.wpa.version",
25525 FT_UINT16, BASE_DEC, NULL, 0,
25528 {&hf_ieee80211_wfa_ie_wpa_mcs,
25529 {"Multicast Cipher Suite", "wlan.wfa.ie.wpa.mcs",
25530 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_mcs_base_custom), 0,
25531 "Contains the cipher suite selector used by the BSS to protect broadcast/multicasttraffic", HFILL }},
25533 {&hf_ieee80211_wfa_ie_wpa_mcs_oui,
25534 {"Multicast Cipher Suite OUI", "wlan.wfa.ie.wpa.mcs.oui",
25535 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
25538 {&hf_ieee80211_wfa_ie_wpa_mcs_type,
25539 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
25540 FT_UINT8, BASE_DEC, NULL, 0,
25543 {&hf_ieee80211_wfa_ie_wpa_mcs_wfa_type,
25544 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
25545 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0,
25548 {&hf_ieee80211_wfa_ie_wpa_ucs_count,
25549 {"Unicast Cipher Suite Count", "wlan.wfa.ie.wpa.ucs.count",
25550 FT_UINT16, BASE_DEC, NULL, 0,
25551 "Indicates the number of pairwise cipher suite selectors that are contained in the Unicast Cipher Suite List", HFILL }},
25553 {&hf_ieee80211_wfa_ie_wpa_ucs_list,
25554 {"Unicast Cipher Suite List", "wlan.wfa.ie.wpa.ucs.list",
25555 FT_NONE, BASE_NONE, NULL, 0,
25556 "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL }},
25558 {&hf_ieee80211_wfa_ie_wpa_ucs,
25559 {"Unicast Cipher Suite", "wlan.wfa.ie.wpa.ucs",
25560 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_ucs_base_custom), 0,
25563 {&hf_ieee80211_wfa_ie_wpa_ucs_oui,
25564 {"Unicast Cipher Suite OUI", "wlan.wfa.ie.wpau.cs.oui",
25565 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
25568 {&hf_ieee80211_wfa_ie_wpa_ucs_type,
25569 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
25570 FT_UINT8, BASE_DEC, NULL, 0,
25573 {&hf_ieee80211_wfa_ie_wpa_ucs_wfa_type,
25574 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
25575 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0,
25578 {&hf_ieee80211_wfa_ie_wpa_akms_count,
25579 {"Auth Key Management (AKM) Suite Count", "wlan.wfa.ie.wpa.akms.count",
25580 FT_UINT16, BASE_DEC, NULL, 0,
25581 "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
25583 {&hf_ieee80211_wfa_ie_wpa_akms_list,
25584 {"Auth Key Management (AKM) List", "wlan.wfa.ie.wpa.akms.list",
25585 FT_NONE, BASE_NONE, NULL, 0,
25586 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
25588 {&hf_ieee80211_wfa_ie_wpa_akms,
25589 {"Auth Key Management (AKM) Suite", "wlan.wfa.ie.wpa.akms",
25590 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_akms_base_custom), 0,
25593 {&hf_ieee80211_wfa_ie_wpa_akms_oui,
25594 {"Auth Key Management (AKM) OUI", "wlan.wfa.ie.wpa.akms.oui",
25595 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
25598 {&hf_ieee80211_wfa_ie_wpa_akms_type,
25599 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.akms.type",
25600 FT_UINT8, BASE_DEC, NULL, 0,
25603 {&hf_ieee80211_wfa_ie_wpa_akms_wfa_type,
25604 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.type",
25605 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_keymgmt_vals), 0,
25608 {&hf_ieee80211_wfa_ie_wme_subtype,
25609 {"WME Subtype", "wlan.wfa.ie.wme.subtype",
25610 FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type), 0,
25613 {&hf_ieee80211_wfa_ie_wme_version,
25614 {"WME Version", "wlan.wfa.ie.wme.version",
25615 FT_UINT8, BASE_DEC, NULL, 0,
25618 {&hf_ieee80211_wfa_ie_wme_qos_info,
25619 {"WME QoS Info", "wlan.wfa.ie.wme.qos_info",
25620 FT_UINT8, BASE_HEX, NULL, 0,
25623 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
25624 {"Max SP Length", "wlan.wfa.ie.wme.qos_info.sta.max_sp_length",
25625 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals), 0x60,
25628 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
25629 {"AC_BE", "wlan.wfa.ie.wme.qos_info.sta.ac_be",
25630 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x08,
25633 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
25634 {"AC_BK", "wlan.wfa.ie.wme.qos_info.sta.ac_bk",
25635 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x04,
25638 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
25639 {"AC_VI", "wlan.wfa.ie.wme.qos_info.sta.ac_vi",
25640 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x02,
25643 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
25644 {"AC_VO", "wlan.wfa.ie.wme.qos_info.sta.ac_vo",
25645 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x01,
25648 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
25649 {"Reserved", "wlan.wfa.ie.wme.qos_info.sta.reserved",
25650 FT_UINT8, BASE_HEX, NULL, 0x90,
25651 "Must Be Zero", HFILL }},
25653 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
25654 {"U-APSD", "wlan.wfa.ie.wme.qos_info.ap.u_apsd",
25655 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
25656 "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL }},
25658 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
25659 {"Parameter Set Count", "wlan.wfa.ie.wme.qos_info.ap.parameter_set_count",
25660 FT_UINT8, BASE_HEX, NULL, 0x0F,
25663 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
25664 {"Reserved", "wlan.wfa.ie.wme.qos_info.ap.reserved",
25665 FT_UINT8, BASE_HEX, NULL, 0x70,
25666 "Must Be Zero", HFILL }},
25668 {&hf_ieee80211_wfa_ie_wme_reserved,
25669 {"Reserved", "wlan.wfa.ie.wme.reserved",
25670 FT_BYTES, BASE_NONE, NULL, 0,
25671 "Must Be Zero", HFILL }},
25673 {&hf_ieee80211_wfa_ie_wme_ac_parameters,
25674 {"Ac Parameters", "wlan.wfa.ie.wme.acp",
25675 FT_NONE, BASE_NONE, NULL, 0,
25678 {&hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
25679 {"ACI / AIFSN Field", "wlan.wfa.ie.wme.acp.aci_aifsn",
25680 FT_UINT8, BASE_HEX, NULL, 0,
25683 {&hf_ieee80211_wfa_ie_wme_acp_aci,
25684 {"ACI", "wlan.wfa.ie.wme.acp.aci",
25685 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals), 0x60,
25688 {&hf_ieee80211_wfa_ie_wme_acp_acm,
25689 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm",
25690 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
25693 {&hf_ieee80211_wfa_ie_wme_acp_aifsn,
25694 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn",
25695 FT_UINT8, BASE_DEC, NULL, 0x0F,
25698 {&hf_ieee80211_wfa_ie_wme_acp_reserved,
25699 {"Reserved", "wlan.wfa.ie.wme.acp.reserved",
25700 FT_UINT8, BASE_DEC, NULL, 0x80,
25701 "Must be Zero", HFILL }},
25703 {&hf_ieee80211_wfa_ie_wme_acp_ecw,
25704 {"ECW", "wlan.wfa.ie.wme.acp.ecw",
25705 FT_UINT8, BASE_HEX, NULL, 0x00,
25708 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max,
25709 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max",
25710 FT_UINT8, BASE_DEC, NULL, 0xF0,
25713 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min,
25714 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min",
25715 FT_UINT8, BASE_DEC, NULL, 0x0F,
25718 {&hf_ieee80211_wfa_ie_wme_acp_cw_max,
25719 {"CW Max", "wlan.wfa.ie.wme.acp.cw.max",
25720 FT_UINT8, BASE_DEC, NULL, 0,
25723 {&hf_ieee80211_wfa_ie_wme_acp_cw_min,
25724 {"CW Min", "wlan.wfa.ie.wme.acp.cw.min",
25725 FT_UINT8, BASE_DEC, NULL, 0,
25728 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit,
25729 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit",
25730 FT_UINT16, BASE_DEC, NULL, 0x00,
25733 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
25734 {"TS Info", "wlan.wfa.ie.wme.tspec.ts_info",
25735 FT_UINT24, BASE_HEX, NULL, 0,
25736 "Traffic Stream (TS) Info", HFILL }},
25738 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
25739 {"TID", "wlan.wfa.ie.wme.tspec.ts_info.tid",
25740 FT_UINT24, BASE_DEC, NULL, 0x00001E,
25741 "Traffic Stream Info ID (TID)", HFILL }},
25743 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
25744 {"Direction", "wlan.wfa.ie.wme.tspec.ts_info.dir",
25745 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals), 0x000060,
25746 "Traffic Stream (TS) Info Direction", HFILL }},
25748 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
25749 {"PSB", "wlan.wfa.ie.wme.tspec.ts_info.psb",
25750 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals), 0x000400,
25751 "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL }},
25753 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
25754 {"UP", "wlan.wfa.ie.wme.tspec.ts_info.up",
25755 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals), 0x003800,
25756 "Traffic Stream (TS) Info User Priority (UP)", HFILL }},
25758 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
25759 {"Reserved", "wlan.wfa.ie.wme.tspec.ts_info.reserved",
25760 FT_UINT24, BASE_HEX, NULL, 0xFFC381,
25761 "Must be Zero", HFILL }},
25763 {&hf_ieee80211_wfa_ie_wme_tspec_nor_msdu,
25764 {"Normal MSDU Size", "wlan.wfa.ie.wme.tspec.nor_msdu",
25765 FT_UINT16, BASE_DEC, NULL, 0,
25768 {&hf_ieee80211_wfa_ie_wme_tspec_max_msdu,
25769 {"Maximum MSDU Size", "wlan.wfa.ie.wme.tspec.max_msdu",
25770 FT_UINT16, BASE_DEC, NULL, 0,
25773 {&hf_ieee80211_wfa_ie_wme_tspec_min_srv,
25774 {"Minimum Service Interval", "wlan.wfa.ie.wme.tspec.min_srv",
25775 FT_UINT32, BASE_DEC, NULL, 0,
25778 {&hf_ieee80211_wfa_ie_wme_tspec_max_srv,
25779 {"Maximum Service Interval", "wlan.wfa.ie.wme.tspec.max_srv",
25780 FT_UINT32, BASE_DEC, NULL, 0,
25783 {&hf_ieee80211_wfa_ie_wme_tspec_inact_int,
25784 {"Inactivity Interval", "wlan.wfa.ie.wme.tspec.inact_int",
25785 FT_UINT32, BASE_DEC, NULL, 0,
25788 {&hf_ieee80211_wfa_ie_wme_tspec_susp_int,
25789 {"Suspension Interval", "wlan.wfa.ie.wme.tspec.susp_int",
25790 FT_UINT32, BASE_DEC, NULL, 0,
25793 {&hf_ieee80211_wfa_ie_wme_tspec_srv_start,
25794 {"Service Start Time", "wlan.wfa.ie.wme.tspec.srv_start",
25795 FT_UINT32, BASE_DEC, NULL, 0,
25798 {&hf_ieee80211_wfa_ie_wme_tspec_min_data,
25799 {"Minimum Data Rate", "wlan.wfa.ie.wme.tspec.min_data",
25800 FT_UINT32, BASE_DEC, NULL, 0,
25803 {&hf_ieee80211_wfa_ie_wme_tspec_mean_data,
25804 {"Mean Data Rate", "wlan.wfa.ie.wme.tspec.mean_data",
25805 FT_UINT32, BASE_DEC, NULL, 0,
25808 {&hf_ieee80211_wfa_ie_wme_tspec_peak_data,
25809 {"Peak Data Rate", "wlan.wfa.ie.wme.tspec.peak_data",
25810 FT_UINT32, BASE_DEC, NULL, 0,
25813 {&hf_ieee80211_wfa_ie_wme_tspec_burst_size,
25814 {"Burst Size", "wlan.wfa.ie.wme.tspec.burst_size",
25815 FT_UINT32, BASE_DEC, NULL, 0,
25818 {&hf_ieee80211_wfa_ie_wme_tspec_delay_bound,
25819 {"Delay Bound", "wlan.wfa.ie.wme.tspec.delay_bound",
25820 FT_UINT32, BASE_DEC, NULL, 0,
25823 {&hf_ieee80211_wfa_ie_wme_tspec_min_phy,
25824 {"Minimum PHY Rate", "wlan.wfa.ie.wme.tspec.min_phy",
25825 FT_UINT32, BASE_DEC, NULL, 0,
25828 {&hf_ieee80211_wfa_ie_wme_tspec_surplus,
25829 {"Surplus Bandwidth Allowance", "wlan.wfa.ie.wme.tspec.surplus",
25830 FT_UINT16, BASE_DEC, NULL, 0,
25833 {&hf_ieee80211_wfa_ie_wme_tspec_medium,
25834 {"Medium Time", "wlan.wfa.ie.wme.tspec.medium",
25835 FT_UINT16, BASE_DEC, NULL, 0,
25838 {&hf_ieee80211_rsn_ie_pmkid,
25839 {"RSN PMKID", "wlan.rsn.ie.pmkid",
25840 FT_BYTES, BASE_NONE, NULL, 0,
25843 {&hf_ieee80211_rsn_ie_unknown,
25844 {"RSN Unknown", "wlan.rsn.ie.unknown",
25845 FT_BYTES, BASE_NONE, NULL, 0,
25848 {&hf_ieee80211_marvell_ie_type,
25849 {"Type", "wlan.marvell.ie.type",
25850 FT_UINT8, BASE_HEX, NULL, 0,
25853 {&hf_ieee80211_marvell_ie_mesh_subtype,
25854 {"Subtype", "wlan.marvell.ie.subtype",
25855 FT_UINT8, BASE_HEX, NULL, 0,
25858 {&hf_ieee80211_marvell_ie_mesh_version,
25859 {"Version", "wlan.marvell.ie.version",
25860 FT_UINT8, BASE_HEX, NULL, 0,
25863 {&hf_ieee80211_marvell_ie_mesh_active_proto_id,
25864 {"Path Selection Protocol", "wlan.marvell.ie.proto_id",
25865 FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes), 0,
25868 {&hf_ieee80211_marvell_ie_mesh_active_metric_id,
25869 {"Path Selection Metric", "wlan.marvell.ie.metric_id",
25870 FT_UINT8, BASE_HEX, VALS(mesh_metric_codes), 0,
25873 {&hf_ieee80211_marvell_ie_mesh_cap,
25874 {"Mesh Capabilities", "wlan.marvell.ie.cap",
25875 FT_UINT8, BASE_HEX, NULL, 0,
25878 {&hf_ieee80211_marvell_ie_data,
25879 { "Marvell IE data", "wlan.marvell.data",
25880 FT_BYTES, BASE_NONE, NULL, 0x0,
25883 {&hf_ieee80211_atheros_ie_type,
25884 {"Type", "wlan.atheros.ie.type",
25885 FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals), 0,
25888 {&hf_ieee80211_atheros_ie_subtype,
25889 {"Subtype", "wlan.atheros.ie.subtype",
25890 FT_UINT8, BASE_HEX, NULL, 0,
25893 {&hf_ieee80211_atheros_ie_version,
25894 {"Version", "wlan.atheros.ie.version",
25895 FT_UINT8, BASE_HEX, NULL, 0,
25898 {&hf_ieee80211_atheros_ie_cap_f_turbop,
25899 {"Turbo Prime", "wlan.ie.atheros.capabilities.turbop",
25900 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_TURBOP,
25903 {&hf_ieee80211_atheros_ie_cap_f_comp,
25904 {"Compression", "wlan.ie.atheros.capabilities.comp",
25905 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_COMP,
25908 {&hf_ieee80211_atheros_ie_cap_f_ff,
25909 {"Fast Frames", "wlan.ie.atheros.capabilities.ff",
25910 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_FF,
25913 {&hf_ieee80211_atheros_ie_cap_f_xr,
25914 {"eXtended Range", "wlan.ie.atheros.capabilities.xr",
25915 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_XR,
25918 {&hf_ieee80211_atheros_ie_cap_f_ar,
25919 {"Advanced Radar", "wlan.ie.atheros.capabilities.ar",
25920 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_AR,
25923 {&hf_ieee80211_atheros_ie_cap_f_burst,
25924 {"Burst", "wlan.ie.atheros.capabilities.burst",
25925 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BURST,
25928 {&hf_ieee80211_atheros_ie_cap_f_wme,
25929 {"CWMin tuning", "wlan.ie.atheros.capabilities.wme",
25930 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_WME,
25933 {&hf_ieee80211_atheros_ie_cap_f_boost,
25934 {"Boost", "wlan.ie.atheros.capabilities.boost",
25935 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BOOST,
25938 {&hf_ieee80211_atheros_ie_advcap_cap,
25939 {"Capabilities", "wlan.atheros.ie.advcap.cap",
25940 FT_UINT8, BASE_HEX, NULL, 0,
25943 {&hf_ieee80211_atheros_ie_advcap_defkey,
25944 {"Default key index", "wlan.atheros.ie.advcap.defkey",
25945 FT_UINT16, BASE_HEX, NULL, 0,
25948 {&hf_ieee80211_atheros_ie_xr_info,
25949 {"Info", "wlan.atheros.ie.xr.info",
25950 FT_UINT8, BASE_HEX, NULL, 0,
25953 {&hf_ieee80211_atheros_ie_xr_base_bssid,
25954 {"Base BSS Id", "wlan.atheros.ie.xr.base_bssid",
25955 FT_ETHER, BASE_NONE, NULL, 0,
25958 {&hf_ieee80211_atheros_ie_xr_xr_bssid,
25959 {"XR BSS Id", "wlan.atheros.ie.xr.xr_bssid",
25960 FT_ETHER, BASE_NONE, NULL, 0,
25963 {&hf_ieee80211_atheros_ie_xr_xr_beacon,
25964 {"XR Beacon Interval", "wlan.atheros.ie.xr.xr_beacon",
25965 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom), 0,
25968 {&hf_ieee80211_atheros_ie_xr_base_cap,
25969 {"Base capabilities", "wlan.atheros.ie.xr.base_cap",
25970 FT_UINT8, BASE_HEX, NULL, 0,
25973 {&hf_ieee80211_atheros_ie_xr_xr_cap,
25974 {"XR capabilities", "wlan.atheros.ie.xr.xr_cap",
25975 FT_UINT8, BASE_HEX, NULL, 0,
25978 {&hf_ieee80211_atheros_ie_data,
25979 {"Atheros IE data", "wlan.atheros.data",
25980 FT_BYTES, BASE_NONE, NULL, 0,
25983 {&hf_ieee80211_aironet_ie_type,
25984 {"Aironet IE type", "wlan.aironet.type",
25985 FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals), 0,
25988 {&hf_ieee80211_aironet_ie_dtpc,
25989 {"Aironet IE CCX DTCP", "wlan.aironet.dtpc",
25990 FT_BYTES, BASE_NONE, NULL, 0,
25993 {&hf_ieee80211_aironet_ie_version,
25994 {"Aironet IE CCX version", "wlan.aironet.version",
25995 FT_UINT8, BASE_DEC, NULL, 0,
25998 {&hf_ieee80211_aironet_ie_data,
25999 { "Aironet IE data", "wlan.aironet.data",
26000 FT_BYTES, BASE_NONE, NULL, 0x0,
26003 {&hf_ieee80211_qbss_version,
26004 {"QBSS Version", "wlan.qbss.version",
26005 FT_UINT8, BASE_DEC, NULL, 0,
26008 {&hf_ieee80211_qbss_scount,
26009 {"Station Count", "wlan.qbss.scount",
26010 FT_UINT16, BASE_DEC, NULL, 0,
26013 {&hf_ieee80211_qbss_cu,
26014 {"Channel Utilization", "wlan.qbss.cu",
26015 FT_UINT8, BASE_DEC, NULL, 0,
26018 {&hf_ieee80211_qbss_adc,
26019 {"Available Admission Capacity", "wlan.qbss.adc",
26020 FT_UINT8, BASE_DEC, NULL, 0,
26023 {&hf_ieee80211_qbss2_cu,
26024 {"Channel Utilization", "wlan.qbss2.cu",
26025 FT_UINT8, BASE_DEC, NULL, 0,
26028 {&hf_ieee80211_qbss2_gl,
26029 {"G.711 CU Quantum", "wlan.qbss2.glimit",
26030 FT_UINT8, BASE_DEC, NULL, 0,
26033 {&hf_ieee80211_qbss2_cal,
26034 {"Call Admission Limit", "wlan.qbss2.cal",
26035 FT_UINT8, BASE_DEC, NULL, 0,
26038 {&hf_ieee80211_qbss2_scount,
26039 {"Station Count", "wlan.qbss2.scount",
26040 FT_UINT16, BASE_DEC, NULL, 0,
26043 {&hf_ieee80211_aironet_ie_qos_reserved,
26044 {"Aironet IE QoS reserved", "wlan.aironet.qos.reserved",
26045 FT_UINT8, BASE_HEX, NULL, 0,
26048 {&hf_ieee80211_aironet_ie_qos_paramset,
26049 {"Aironet IE QoS paramset", "wlan.aironet.qos.paramset",
26050 FT_UINT8, BASE_DEC, NULL, 0,
26053 {&hf_ieee80211_aironet_ie_qos_val,
26054 {"Aironet IE QoS valueset", "wlan.aironet.qos.val",
26055 FT_BYTES, BASE_NONE, NULL, 0,
26058 {&hf_ieee80211_aironet_ie_clientmfp,
26059 {"Aironet IE Client MFP", "wlan.aironet.clientmfp",
26060 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
26063 /* Vendor Specific : Nintendo */
26064 {&hf_ieee80211_vs_nintendo_type,
26065 {"Type", "wlan.vs.nintendo.type",
26066 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_nintendo_type_vals), 0,
26069 {&hf_ieee80211_vs_nintendo_length,
26070 {"Length", "wlan.vs.nintendo.length",
26071 FT_UINT8, BASE_DEC, NULL, 0,
26074 {&hf_ieee80211_vs_nintendo_servicelist,
26075 {"Servicelist", "wlan.vs.nintendo.servicelist",
26076 FT_BYTES, BASE_NONE, NULL, 0,
26079 {&hf_ieee80211_vs_nintendo_service,
26080 {"Service", "wlan.vs.nintendo.service",
26081 FT_BYTES, BASE_NONE, NULL, 0,
26084 {&hf_ieee80211_vs_nintendo_consoleid,
26085 {"Console ID", "wlan.vs.nintendo.consoleid",
26086 FT_BYTES, BASE_NONE, NULL, 0,
26089 {&hf_ieee80211_vs_nintendo_unknown,
26090 {"Unknown", "wlan.vs.nintendo.unknown",
26091 FT_BYTES, BASE_NONE, NULL, 0,
26094 /* Vendor Specific : Aruba Networks */
26095 {&hf_ieee80211_vs_aruba_subtype,
26096 {"Subtype", "wlan.vs.aruba.subtype",
26097 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_aruba_subtype_vals), 0,
26100 {&hf_ieee80211_vs_aruba_apname,
26101 {"AP Name", "wlan.vs.aruba.ap_name",
26102 FT_STRINGZ, BASE_NONE, NULL, 0,
26105 {&hf_ieee80211_vs_aruba_data,
26106 {"Data", "wlan.vs.aruba.data",
26107 FT_BYTES, BASE_NONE, NULL, 0,
26110 {&hf_ieee80211_vs_mikrotik_unknown,
26111 {"Unknown", "wlan.vs.mikrotik.unknown",
26112 FT_BYTES, BASE_NONE, NULL, 0,
26115 {&hf_ieee80211_vs_mikrotik_subitem,
26116 {"Sub IE", "wlan.vs.mikrotik.unknown",
26117 FT_BYTES, BASE_NONE, NULL, 0,
26120 {&hf_ieee80211_vs_mikrotik_subtype,
26121 {"Subtype", "wlan.vs.mikrotik.subtype",
26122 FT_UINT8, BASE_DEC, NULL, 0,
26125 {&hf_ieee80211_vs_mikrotik_sublength,
26126 {"Sublength", "wlan.vs.mikrotik.sublength",
26127 FT_UINT8, BASE_DEC, NULL, 0,
26130 {&hf_ieee80211_vs_mikrotik_subdata,
26131 {"Subdata", "wlan.vs.mikrotik.subdata",
26132 FT_BYTES, BASE_NONE, NULL, 0,
26135 /* Vendor Specific : Meru (Fortinet) */
26136 {&hf_ieee80211_vs_meru_subitem,
26137 {"Sub IE", "wlan.vs.meru.unknown",
26138 FT_NONE, BASE_NONE, NULL, 0,
26141 {&hf_ieee80211_vs_meru_subtype,
26142 {"Subtype", "wlan.vs.meru.subtype",
26143 FT_UINT8, BASE_DEC, NULL, 0,
26146 {&hf_ieee80211_vs_meru_sublength,
26147 {"Sublength", "wlan.vs.meru.sublength",
26148 FT_UINT8, BASE_DEC, NULL, 0,
26151 {&hf_ieee80211_vs_meru_subdata,
26152 {"Subdata", "wlan.vs.meru.subdata",
26153 FT_BYTES, BASE_NONE, NULL, 0,
26156 /* Vendor Specific : Extreme (Zebra) */
26157 {&hf_ieee80211_vs_extreme_subtype,
26158 {"Subtype", "wlan.vs.extreme.subtype",
26159 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_extreme_subtype_vals), 0,
26162 {&hf_ieee80211_vs_extreme_subdata,
26163 {"Subdata", "wlan.vs.extreme.subdata",
26164 FT_BYTES, BASE_NONE, NULL, 0,
26167 {&hf_ieee80211_vs_extreme_unknown,
26168 {"Unknown", "wlan.vs.extreme.unknown",
26169 FT_BYTES, BASE_NONE, NULL, 0,
26172 {&hf_ieee80211_vs_extreme_ap_length,
26173 {"AP Length", "wlan.vs.extreme.ap_length",
26174 FT_UINT8, BASE_DEC, NULL, 0,
26177 {&hf_ieee80211_vs_extreme_ap_name,
26178 {"AP Name", "wlan.vs.extreme.ap_name",
26179 FT_STRING, BASE_NONE, NULL, 0,
26182 {&hf_ieee80211_tsinfo,
26183 {"Traffic Stream (TS) Info", "wlan.ts_info",
26184 FT_UINT24, BASE_HEX, NULL, 0,
26185 "Traffic Stream (TS) Info field", HFILL }},
26187 {&hf_ieee80211_tsinfo_type,
26188 {"Traffic Type", "wlan.ts_info.type",
26189 FT_UINT24, BASE_DEC, VALS(tsinfo_type), 0x000001,
26190 "Traffic Stream (TS) Info Traffic Type", HFILL }},
26192 {&hf_ieee80211_tsinfo_tsid,
26193 {"Traffic Stream ID (TSID)", "wlan.ts_info.tsid",
26194 FT_UINT24, BASE_DEC, NULL, 0x00001E,
26195 "Traffic Stream ID (TSID) Info TSID", HFILL }},
26197 {&hf_ieee80211_tsinfo_dir,
26198 {"Direction", "wlan.ts_info.dir",
26199 FT_UINT24, BASE_DEC, VALS(tsinfo_direction), 0x000060,
26200 "Traffic Stream (TS) Info Direction", HFILL }},
26202 {&hf_ieee80211_tsinfo_access,
26203 {"Access Policy", "wlan.ts_info.dir",
26204 FT_UINT24, BASE_DEC, VALS(tsinfo_access), 0x000180,
26205 "Traffic Stream (TS) Info Access Policy", HFILL }},
26207 {&hf_ieee80211_tsinfo_agg,
26208 {"Aggregation", "wlan.ts_info.agg",
26209 FT_UINT24, BASE_DEC, NULL, 0x000200,
26210 "Traffic Stream (TS) Info Access Policy", HFILL }},
26212 {&hf_ieee80211_tsinfo_apsd,
26213 {"Automatic Power-Save Delivery (APSD)", "wlan.ts_info.apsd",
26214 FT_UINT24, BASE_DEC, NULL, 0x000400,
26215 "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL }},
26217 {&hf_ieee80211_tsinfo_up,
26218 {"User Priority", "wlan.ts_info.up",
26219 FT_UINT24, BASE_DEC, VALS(qos_up), 0x003800,
26220 "Traffic Stream (TS) Info User Priority", HFILL }},
26222 {&hf_ieee80211_tsinfo_ack,
26223 {"Ack Policy", "wlan.ts_info.ack",
26224 FT_UINT24, BASE_DEC, VALS(ack_policy), 0x00C000,
26225 "Traffic Stream (TS) Info Ack Policy", HFILL }},
26227 {&hf_ieee80211_tsinfo_sched,
26228 {"Schedule", "wlan.ts_info.sched",
26229 FT_UINT24, BASE_DEC, NULL, 0x010000,
26230 "Traffic Stream (TS) Info Schedule", HFILL }},
26232 {&hf_ieee80211_tsinfo_rsv,
26233 {"Reserved", "wlan.ts_info.rsv",
26234 FT_UINT24, BASE_HEX, NULL, 0xFE0000,
26235 "Must be Zero", HFILL }},
26237 {&hf_ieee80211_tspec_nor_msdu,
26238 {"Normal MSDU Size", "wlan.tspec.nor_msdu",
26239 FT_UINT16, BASE_DEC, NULL, 0,
26242 {&hf_ieee80211_tspec_max_msdu,
26243 {"Maximum MSDU Size", "wlan.tspec.max_msdu",
26244 FT_UINT16, BASE_DEC, NULL, 0,
26247 {&hf_ieee80211_tspec_min_srv,
26248 {"Minimum Service Interval", "wlan.tspec.min_srv",
26249 FT_UINT32, BASE_DEC, NULL, 0,
26252 {&hf_ieee80211_tspec_max_srv,
26253 {"Maximum Service Interval", "wlan.tspec.max_srv",
26254 FT_UINT32, BASE_DEC, NULL, 0,
26257 {&hf_ieee80211_tspec_inact_int,
26258 {"Inactivity Interval", "wlan.tspec.inact_int",
26259 FT_UINT32, BASE_DEC, NULL, 0,
26262 {&hf_ieee80211_tspec_susp_int,
26263 {"Suspension Interval", "wlan.tspec.susp_int",
26264 FT_UINT32, BASE_DEC, NULL, 0,
26267 {&hf_ieee80211_tspec_srv_start,
26268 {"Service Start Time", "wlan.tspec.srv_start",
26269 FT_UINT32, BASE_DEC, NULL, 0,
26272 {&hf_ieee80211_tspec_min_data,
26273 {"Minimum Data Rate", "wlan.tspec.min_data",
26274 FT_UINT32, BASE_DEC, NULL, 0,
26277 {&hf_ieee80211_tspec_mean_data,
26278 {"Mean Data Rate", "wlan.tspec.mean_data",
26279 FT_UINT32, BASE_DEC, NULL, 0,
26282 {&hf_ieee80211_tspec_peak_data,
26283 {"Peak Data Rate", "wlan.tspec.peak_data",
26284 FT_UINT32, BASE_DEC, NULL, 0,
26287 {&hf_ieee80211_tspec_burst_size,
26288 {"Burst Size", "wlan.tspec.burst_size",
26289 FT_UINT32, BASE_DEC, NULL, 0,
26292 {&hf_ieee80211_tspec_delay_bound,
26293 {"Delay Bound", "wlan.tspec.delay_bound",
26294 FT_UINT32, BASE_DEC, NULL, 0,
26297 {&hf_ieee80211_tspec_min_phy,
26298 {"Minimum PHY Rate", "wlan.tspec.min_phy",
26299 FT_UINT32, BASE_DEC, NULL, 0,
26302 {&hf_ieee80211_tspec_surplus,
26303 {"Surplus Bandwidth Allowance", "wlan.tspec.surplus",
26304 FT_UINT16, BASE_DEC, NULL, 0,
26307 {&hf_ieee80211_tspec_medium,
26308 {"Medium Time", "wlan.tspec.medium",
26309 FT_UINT16, BASE_DEC, NULL, 0,
26312 {&hf_ieee80211_tspec_dmg,
26313 {"DMG attributes", "wlan.tspec.dmg",
26314 FT_UINT16, BASE_DEC, NULL, 0,
26317 {&hf_ieee80211_ts_delay,
26318 {"Traffic Stream (TS) Delay", "wlan.ts_delay",
26319 FT_UINT32, BASE_DEC, NULL, 0,
26322 {&hf_ieee80211_tclas_process,
26323 {"Processing", "wlan.tclas_proc.processing",
26324 FT_UINT8, BASE_DEC, VALS(ieee80211_tclas_process_flag), 0,
26327 {&hf_ieee80211_tag_ext_supp_rates,
26328 {"Extended Supported Rates", "wlan.extended_supported_rates",
26329 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_supported_rates_vals_ext, 0x0,
26330 "In Mbit/sec, (B) for Basic Rates", HFILL }},
26332 {&hf_ieee80211_sched_info,
26333 {"Schedule Info", "wlan.sched.sched_info",
26334 FT_UINT16, BASE_HEX, NULL, 0,
26335 "Schedule Info field", HFILL }},
26337 {&hf_ieee80211_sched_info_agg,
26338 {"Schedule Aggregation", "wlan.sched_info.agg",
26339 FT_UINT16, BASE_DEC, NULL, 0x0001,
26340 "Traffic Stream (TS) Info Access Policy", HFILL }},
26342 {&hf_ieee80211_sched_info_tsid,
26343 {"Schedule Traffic Stream ID (TSID)", "wlan.sched_info.tsid",
26344 FT_UINT16, BASE_DEC, NULL, 0x001E,
26345 "Traffic Stream ID (TSID) Info TSID", HFILL }},
26347 {&hf_ieee80211_sched_info_dir,
26348 {"Schedule Direction", "wlan.sched_info.dir",
26349 FT_UINT16, BASE_DEC, VALS(tsinfo_direction), 0x0060,
26350 "Traffic Stream (TS) Info Direction", HFILL }},
26352 {&hf_ieee80211_sched_srv_start,
26353 {"Service Start Time", "wlan.sched.srv_start",
26354 FT_UINT32, BASE_HEX, NULL, 0,
26357 {&hf_ieee80211_sched_srv_int,
26358 {"Service Interval", "wlan.sched.srv_int",
26359 FT_UINT32, BASE_HEX, NULL, 0,
26362 {&hf_ieee80211_sched_spec_int,
26363 {"Specification Interval", "wlan.sched.spec_int",
26364 FT_UINT16, BASE_HEX, NULL, 0,
26367 {&hf_ieee80211_aruba,
26368 {"Aruba Type", "wlan.aruba.type",
26369 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &aruba_mgt_typevals_ext, 0,
26370 "Aruba Management", HFILL }},
26372 {&hf_ieee80211_aruba_hb_seq,
26373 {"Aruba Heartbeat Sequence", "wlan.aruba.heartbeat_sequence",
26374 FT_UINT64, BASE_DEC, NULL, 0,
26377 {&hf_ieee80211_aruba_mtu,
26378 {"Aruba MTU Size", "wlan.aruba.mtu_size",
26379 FT_UINT16, BASE_DEC, NULL, 0,
26382 /* Start: HT Control (+HTC) */
26383 {&hf_ieee80211_htc,
26384 {"HT Control (+HTC)", "wlan.htc",
26385 FT_UINT32, BASE_HEX, NULL, 0,
26386 "High Throughput Control (+HTC)", HFILL }},
26388 {&hf_ieee80211_htc_vht,
26389 {"VHT", "wlan.htc.lac.vht",
26390 FT_BOOLEAN, 32, NULL, HTC_VHT,
26391 "High Throughput Control HT/VHT flag", HFILL }},
26393 {&hf_ieee80211_htc_lac,
26394 {"Link Adaptation Control (LAC)", "wlan.htc.lac",
26395 FT_UINT32, BASE_HEX, NULL, 0x0000FFFE,
26396 "High Throughput Control Link Adaptation Control (LAC)", HFILL }},
26398 {&hf_ieee80211_htc_lac_trq,
26399 {"Training Request (TRQ)", "wlan.htc.lac.trq",
26400 FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag), 0x0002,
26401 "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL }},
26403 {&hf_ieee80211_htc_lac_mai_aseli,
26404 {"Antenna Selection Indication (ASELI)", "wlan.htc.lac.mai.aseli",
26405 FT_UINT16, BASE_HEX, NULL, 0x003C,
26406 "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL }},
26408 {&hf_ieee80211_htc_lac_mai_mrq,
26409 {"MCS Request (MRQ)", "wlan.htc.lac.mai.mrq",
26410 FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag), 0x0004,
26411 "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL }},
26413 {&hf_ieee80211_htc_lac_mai_msi,
26414 {"MCS Request Sequence Identifier (MSI)", "wlan.htc.lac.mai.msi",
26415 FT_UINT16, BASE_HEX, NULL, 0x0038,
26416 "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL }},
26418 {&hf_ieee80211_htc_lac_mai_reserved,
26419 {"Reserved", "wlan.htc.lac.mai.reserved",
26420 FT_UINT16, BASE_HEX, NULL, 0x0038,
26421 "High Throughput Control Link Adaptation Control MAI Reserved", HFILL }},
26423 {&hf_ieee80211_htc_lac_mfsi,
26424 {"MCS Feedback Sequence Identifier (MFSI)", "wlan.htc.lac.mfsi",
26425 FT_UINT16, BASE_DEC, NULL, 0x01C0,
26426 "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL }},
26428 {&hf_ieee80211_htc_lac_asel_command,
26429 {"Antenna Selection (ASEL) Command", "wlan.htc.lac.asel.command",
26430 FT_UINT16, BASE_HEX, VALS(ieee80211_htc_lac_asel_command_flags), 0x0E00,
26431 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL }},
26433 {&hf_ieee80211_htc_lac_asel_data,
26434 {"Antenna Selection (ASEL) Data", "wlan.htc.lac.asel.data",
26435 FT_UINT16, BASE_HEX, NULL, 0xF000,
26436 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL }},
26438 {&hf_ieee80211_htc_lac_mfb,
26439 {"MCS Feedback (MFB)", "wlan.htc.lac.mfb",
26440 FT_UINT16, BASE_HEX, NULL, 0xFE00,
26441 "High Throughput Control Link Adaptation Control MCS Feedback", HFILL }},
26443 {&hf_ieee80211_htc_cal_pos,
26444 {"Calibration Position", "wlan.htc.cal.pos",
26445 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags), 0x00030000,
26446 "High Throughput Control Calibration Position", HFILL }},
26448 {&hf_ieee80211_htc_cal_seq,
26449 {"Calibration Sequence Identifier", "wlan.htc.cal.seq",
26450 FT_UINT32, BASE_DEC, NULL, 0x000C0000,
26451 "High Throughput Control Calibration Sequence Identifier", HFILL }},
26453 {&hf_ieee80211_htc_reserved1,
26454 {"Reserved", "wlan.htc.reserved1",
26455 FT_UINT32, BASE_HEX, NULL, 0x00300000,
26456 "High Throughput Control Reserved", HFILL }},
26458 {&hf_ieee80211_htc_csi_steering,
26459 {"CSI/Steering", "wlan.htc.csi_steering",
26460 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags), 0x00C00000,
26461 "High Throughput Control CSI/Steering", HFILL }},
26463 {&hf_ieee80211_htc_ndp_announcement,
26464 {"NDP Announcement", "wlan.htc.ndp_announcement",
26465 FT_BOOLEAN, 32, TFS(&ieee80211_htc_ndp_announcement_flag), 0x01000000,
26466 "High Throughput Control NDP Announcement", HFILL }},
26468 {&hf_ieee80211_htc_reserved2,
26469 {"Reserved", "wlan.htc.reserved2",
26470 FT_UINT32, BASE_HEX, NULL, 0x3E000000,
26471 "High Throughput Control Reserved", HFILL }},
26473 {&hf_ieee80211_htc_mrq,
26474 {"MRQ", "wlan.htc.mrq",
26475 FT_BOOLEAN, 32, NULL, HTC_MRQ,
26476 "VHT-MCS feedback request", HFILL }},
26478 {&hf_ieee80211_htc_msi,
26479 {"MSI", "wlan.htc.msi",
26480 FT_UINT32, BASE_DEC, NULL, 0x00000038,
26481 "MRQ sequence number", HFILL }},
26483 {&hf_ieee80211_htc_msi_stbc_reserved,
26484 {"Reserved", "wlan.htc.msi_stbc_reserved",
26485 FT_UINT32, BASE_HEX, NULL, 0x00000038,
26488 {&hf_ieee80211_htc_compressed_msi,
26489 {"Compressed MSI", "wlan.htc.compressed_msi",
26490 FT_UINT32, BASE_DEC, NULL, 0x00000018,
26493 {&hf_ieee80211_htc_ppdu_stbc_encoded,
26494 {"PPDU was STBC encoded", "wlan.htc.ppdu_stbc_encoded",
26495 FT_BOOLEAN, 32, NULL, 0x00000020,
26498 {&hf_ieee80211_htc_mfsi,
26499 {"MFSI", "wlan.htc.mfsi",
26500 FT_BOOLEAN, 32, NULL, 0x000001C0,
26501 "MFB sequence identifier", HFILL }},
26503 {&hf_ieee80211_htc_gid_l,
26504 {"GID-L", "wlan.htc.gid_l",
26505 FT_BOOLEAN, 32, NULL, 0x000001C0,
26506 "LSBs of group ID", HFILL }},
26508 {&hf_ieee80211_htc_mfb,
26509 {"MFB", "wlan.htc.mfb",
26510 FT_UINT32, BASE_HEX, NULL, 0x00FFFE00,
26511 "Recommended MFB", HFILL }},
26513 {&hf_ieee80211_htc_num_sts,
26514 {"NUM_STS", "wlan.htc.num_sts",
26515 FT_UINT32, BASE_DEC, NULL, 0x00000E00,
26516 "Recommended NUM_STS", HFILL }},
26518 {&hf_ieee80211_htc_vht_mcs,
26519 {"VHT-MCS", "wlan.htc.vht_mcs",
26520 FT_UINT32, BASE_DEC, NULL, 0x0000F000,
26521 "Recommended VHT-MCS", HFILL }},
26523 {&hf_ieee80211_htc_bw,
26524 {"BW", "wlan.htc.bw",
26525 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_bw_recommended_vht_mcs_vals), 0x00030000,
26526 "Bandwidth for recommended VHT-MCS", HFILL }},
26528 {&hf_ieee80211_htc_snr,
26529 {"SNR", "wlan.htc.snr",
26530 FT_INT32, BASE_DEC, NULL, 0x00FC0000,
26531 "Average SNR + 22", HFILL }},
26533 {&hf_ieee80211_htc_reserved3,
26534 {"Reserved", "wlan.htc.reserved3",
26535 FT_UINT32, BASE_HEX, NULL, 0x1F000000,
26538 {&hf_ieee80211_htc_gid_h,
26539 {"GID-H", "wlan.htc.gid_h",
26540 FT_UINT32, BASE_DEC, NULL, 0x07000000,
26543 {&hf_ieee80211_htc_coding_type,
26544 {"Coding type", "wlan.htc.coding_type",
26545 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_coding_type_vals), 0x08000000,
26548 {&hf_ieee80211_htc_fb_tx_type,
26549 {"FB Tx type", "wlan.htc.fb_tx_type",
26550 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_fb_tx_type_vals), 0x10000000,
26553 {&hf_ieee80211_htc_unsolicited_mfb,
26554 {"Unsolicited MFB", "wlan.htc.unsolicited_mfb",
26555 FT_BOOLEAN, 32, NULL, HTC_UNSOLICITED_MFB,
26556 "High Throughput Control Unsolicited MFB", HFILL }},
26558 {&hf_ieee80211_htc_ac_constraint,
26559 {"AC Constraint", "wlan.htc.ac_constraint",
26560 FT_BOOLEAN, 32, NULL, 0x40000000,
26561 "High Throughput Control AC Constraint", HFILL }},
26563 {&hf_ieee80211_htc_rdg_more_ppdu,
26564 {"RDG/More PPDU", "wlan.htc.rdg_more_ppdu",
26565 FT_BOOLEAN, 32, NULL, 0x80000000,
26566 "High Throughput Control RDG/More PPDU", HFILL }},
26567 /* End: HT Control (+HTC) */
26570 {&hf_ieee80211_tag_mobility_domain_mdid,
26571 {"Mobility Domain Identifier", "wlan.mobility_domain.mdid",
26572 FT_UINT16, BASE_HEX, NULL, 0,
26575 {&hf_ieee80211_tag_mobility_domain_ft_capab,
26576 {"FT Capability and Policy", "wlan.mobility_domain.ft_capab",
26577 FT_UINT8, BASE_HEX, NULL, 0,
26580 {&hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
26581 {"Fast BSS Transition over DS",
26582 "wlan.mobility_domain.ft_capab.ft_over_ds",
26583 FT_UINT8, BASE_HEX, NULL, 0x01,
26586 {&hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
26587 {"Resource Request Protocol Capability",
26588 "wlan.mobility_domain.ft_capab.resource_req",
26589 FT_UINT8, BASE_HEX, NULL, 0x02,
26593 {&hf_ieee80211_tag_ft_mic_control,
26594 {"MIC Control", "wlan.ft.mic_control",
26595 FT_UINT16, BASE_HEX, NULL, 0,
26598 {&hf_ieee80211_tag_ft_element_count,
26599 {"Element Count", "wlan.ft.element_count",
26600 FT_UINT16, BASE_DEC, NULL, 0xff00,
26603 {&hf_ieee80211_tag_ft_mic,
26604 {"MIC", "wlan.ft.mic",
26605 FT_BYTES, BASE_NONE, NULL, 0,
26608 {&hf_ieee80211_tag_ft_anonce,
26609 {"ANonce", "wlan.ft.anonce",
26610 FT_BYTES, BASE_NONE, NULL, 0,
26613 {&hf_ieee80211_tag_ft_snonce,
26614 {"SNonce", "wlan.ft.snonce",
26615 FT_BYTES, BASE_NONE, NULL, 0,
26618 {&hf_ieee80211_tag_ft_subelem_id,
26619 {"Subelement ID", "wlan.ft.subelem.id",
26620 FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals), 0,
26623 {&hf_ieee80211_tag_ft_subelem_len,
26624 {"Length", "wlan.ft.subelem.len",
26625 FT_UINT8, BASE_DEC, NULL, 0,
26628 {&hf_ieee80211_tag_ft_subelem_data,
26629 {"Data", "wlan.ft.subelem.data",
26630 FT_BYTES, BASE_NONE, NULL, 0,
26633 {&hf_ieee80211_tag_ft_subelem_r1kh_id,
26634 {"PMK-R1 key holder identifier (R1KH-ID)", "wlan.ft.subelem.r1kh_id",
26635 FT_BYTES, BASE_NONE, NULL, 0,
26638 {&hf_ieee80211_tag_ft_subelem_gtk_key_info,
26639 {"Key Info", "wlan.ft.subelem.gtk.key_info",
26640 FT_UINT16, BASE_HEX, NULL, 0,
26643 {&hf_ieee80211_tag_ft_subelem_gtk_key_id,
26644 {"Key ID", "wlan.ft.subelem.gtk.key_id",
26645 FT_UINT16, BASE_DEC, NULL, 0x0003,
26648 {&hf_ieee80211_tag_ft_subelem_gtk_key_length,
26649 {"Key Length", "wlan.ft.subelem.gtk.key_length",
26650 FT_UINT8, BASE_HEX, NULL, 0,
26653 {&hf_ieee80211_tag_ft_subelem_gtk_rsc,
26654 {"RSC", "wlan.ft.subelem.gtk.rsc",
26655 FT_BYTES, BASE_NONE, NULL, 0,
26658 {&hf_ieee80211_tag_ft_subelem_gtk_key,
26659 {"GTK", "wlan.ft.subelem.gtk.key",
26660 FT_BYTES, BASE_NONE, NULL, 0,
26663 {&hf_ieee80211_tag_ft_subelem_r0kh_id,
26664 {"PMK-R0 key holder identifier (R0KH-ID)", "wlan.ft.subelem.r0kh_id",
26665 FT_STRING, BASE_NONE, NULL, 0,
26668 {&hf_ieee80211_tag_ft_subelem_igtk_key_id,
26669 {"Key ID", "wlan.ft.subelem.igtk.key_id",
26670 FT_UINT16, BASE_DEC, NULL, 0,
26673 {&hf_ieee80211_tag_ft_subelem_igtk_ipn,
26674 {"IPN", "wlan.ft.subelem.igtk.ipn",
26675 FT_BYTES, BASE_NONE, NULL, 0,
26678 {&hf_ieee80211_tag_ft_subelem_igtk_key_length,
26679 {"Key Length", "wlan.ft.subelem.igtk.key_length",
26680 FT_UINT8, BASE_HEX, NULL, 0,
26683 {&hf_ieee80211_tag_ft_subelem_igtk_key,
26684 {"Wrapped Key (IGTK)", "wlan.ft.subelem.igtk.key",
26685 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
26687 /* RIC Data IE: 802.11-2012: 8.4.2.52 */
26688 {&hf_ieee80211_tag_ric_data_id,
26689 {"Resource Handshake Identifier", "wlan.ric_data.id",
26690 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
26692 {&hf_ieee80211_tag_ric_data_desc_cnt,
26693 {"Resource Descriptor Count", "wlan.ric_data.desc_cnt",
26694 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
26696 {&hf_ieee80211_tag_ric_data_status_code,
26697 {"Status Code", "wlan.ric_data.status_code",
26698 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_status_code_ext, 0,
26699 "Status of requested Resource", HFILL }},
26701 /* OBSS IE: 802.11-2012: 8.4.2.61 */
26702 {&hf_ieee80211_tag_obss_spd,
26703 {"Scan Passive Dwell", "wlan.obss.spd",
26704 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
26706 {&hf_ieee80211_tag_obss_sad,
26707 {"Scan Active Dwell", "wlan.obss.sad",
26708 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
26710 {&hf_ieee80211_tag_obss_cwtsi,
26711 {"Channel Width Trigger Scan Interval", "wlan.obss.cwtsi",
26712 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
26714 {&hf_ieee80211_tag_obss_sptpc,
26715 {"Scan Passive Total Per Channel", "wlan.obss.sptpc",
26716 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
26718 {&hf_ieee80211_tag_obss_satpc,
26719 {"Scan Active Total Per Channel", "wlan.obss.satpc",
26720 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
26722 {&hf_ieee80211_tag_obss_wctdf,
26723 {"Width Channel Transition Delay Factor", "wlan.obss.wctdf",
26724 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
26726 {&hf_ieee80211_tag_obss_sat,
26727 {"Scan Activity Threshold", "wlan.obss.sat",
26728 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
26730 /* RIC Descriptor IE: 802.11-2012: 8.4.2.53 */
26731 {&hf_ieee80211_tag_ric_desc_rsrc_type,
26732 {"Resource Type", "wlan.ric_desc.rsrc_type",
26733 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
26735 {&hf_ieee80211_tag_ric_desc_var_params,
26736 {"Variable Params", "wlan.ric_desc.var_params",
26737 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
26740 {&hf_ieee80211_tag_mmie_keyid,
26741 {"KeyID", "wlan.mmie.keyid",
26742 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
26744 {&hf_ieee80211_tag_mmie_ipn,
26745 {"IPN", "wlan.mmie.ipn",
26746 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
26748 {&hf_ieee80211_tag_mmie_mic,
26749 {"MIC", "wlan.mmie.mic",
26750 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
26752 /* WAPI Parameter Set*/
26753 {&hf_ieee80211_tag_wapi_param_set_version,
26754 {"Version", "wlan.wapi.version",
26755 FT_UINT16, BASE_DEC, NULL, 0,
26758 {&hf_ieee80211_tag_wapi_param_set_akm_suite_count,
26759 {"AKM Suite Count", "wlan.wapi.akm_suite.count",
26760 FT_UINT16, BASE_DEC, NULL, 0,
26763 {&hf_ieee80211_tag_wapi_param_set_akm_suite_oui,
26764 {"AKM Suite OUI", "wlan.wapi.akm_suite.oui",
26765 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
26768 {&hf_ieee80211_tag_wapi_param_set_akm_suite_type,
26769 {"AKM Suite Type", "wlan.wapi.akm_suite.type",
26770 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_suite_type) , 0,
26773 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
26774 {"Unicast Cipher Suite Count", "wlan.wapi.unicast_cipher.suite.count",
26775 FT_UINT16, BASE_DEC, NULL, 0,
26778 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui,
26779 {"Unicast Cipher Suite OUI", "wlan.wapi.unicast_cipher.suite.oui",
26780 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
26783 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type,
26784 {"Unicast Cipher Suite Type", "wlan.wapi.unicast_cipher.suite.type",
26785 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type) , 0,
26788 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui,
26789 {"Multicast Cipher Suite OUI", "wlan.wapi.multicast_cipher.suite.oui",
26790 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
26793 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type,
26794 {"Multicast Cipher Suite Type", "wlan.wapi.multicast_cipher.suite.type",
26795 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type) , 0,
26798 {&hf_ieee80211_tag_wapi_param_set_capab,
26799 {"WAPI Capability Info", "wlan.wapi.capab",
26800 FT_UINT16, BASE_HEX, NULL, 0,
26803 {&hf_ieee80211_tag_wapi_param_set_capab_preauth,
26804 {"Supports Preauthentication?", "wlan.wapi.capab.preauth",
26805 FT_BOOLEAN, 16 , NULL, 0x0001,
26808 {&hf_ieee80211_tag_wapi_param_set_capab_rsvd,
26809 {"Reserved", "wlan.wapi.capab.rsvd",
26810 FT_UINT16, BASE_DEC , NULL, 0xFFFE,
26813 {&hf_ieee80211_tag_wapi_param_set_bkid_count,
26814 {"No of BKID's", "wlan.wapi.bkid.count",
26815 FT_UINT16, BASE_DEC, NULL, 0,
26818 {&hf_ieee80211_tag_wapi_param_set_bkid_list,
26819 {"BKID", "wlan.wapi.bkid",
26820 FT_BYTES, BASE_NONE, NULL, 0,
26823 /* BSS Max Idle Period */
26824 {&hf_ieee80211_tag_bss_max_idle_period,
26825 {"BSS Max Idle Period (1000 TUs)", "wlan.bss_max_idle.period",
26826 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
26828 {&hf_ieee80211_tag_bss_max_idle_options_protected,
26829 {"BSS Max Idle Period Options: Protected Keep-Alive Required",
26830 "wlan.bss_max_idle.options.protected",
26831 FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
26834 {&hf_ieee80211_tag_tfs_request_id,
26835 {"TFS ID", "wlan.tfs_request.id",
26836 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
26838 {&hf_ieee80211_tag_tfs_request_ac_delete_after_match,
26839 {"TFS Action Code - Delete after match",
26840 "wlan.tfs_request.action_code.delete_after_match",
26841 FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
26843 {&hf_ieee80211_tag_tfs_request_ac_notify,
26844 {"TFS Action Code - Notify",
26845 "wlan.tfs_request.action_code.notify",
26846 FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
26848 {&hf_ieee80211_tag_tfs_request_subelem_id,
26849 {"Subelement ID", "wlan.tfs_request.subelem.id",
26850 FT_UINT8, BASE_DEC, VALS(tfs_request_subelem_ids), 0,
26851 "TFS Request Subelement ID", HFILL }},
26853 {&hf_ieee80211_tag_tfs_request_subelem_len,
26854 {"Length", "wlan.tfs_request.subelem.len",
26855 FT_UINT8, BASE_DEC, NULL, 0,
26856 "TFS Request Subelement Length", HFILL }},
26858 {&hf_ieee80211_tag_tfs_request_subelem,
26859 {"Subelement Data", "wlan.tfs_request.subelem",
26860 FT_BYTES, BASE_NONE, NULL, 0,
26861 "TFS Request Subelement Data", HFILL }},
26864 {&hf_ieee80211_tag_tfs_response_subelem_id,
26865 {"Subelement ID", "wlan.tfs_response.subelem.id",
26866 FT_UINT8, BASE_DEC, VALS(tfs_response_subelem_ids), 0,
26867 "TFS Response Subelement ID", HFILL }},
26869 {&hf_ieee80211_tag_tfs_response_subelem_len,
26870 {"Length", "wlan.tfs_response.subelem.len",
26871 FT_UINT8, BASE_DEC, NULL, 0,
26872 "TFS Response Subelement Length", HFILL }},
26874 {&hf_ieee80211_tag_tfs_response_subelem,
26875 {"Subelement Data", "wlan.tfs_response.subelem",
26876 FT_BYTES, BASE_NONE, NULL, 0,
26877 "TFS Response Subelement Data", HFILL }},
26879 {&hf_ieee80211_tag_tfs_response_status,
26880 {"TFS Response Status", "wlan.tfs_response.status",
26881 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
26883 {&hf_ieee80211_tag_tfs_response_id,
26884 {"TFS ID", "wlan.tfs_response.tfs_id",
26885 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
26887 /* WNM-Sleep Mode */
26888 {&hf_ieee80211_tag_wnm_sleep_mode_action_type,
26889 {"Action Type", "wlan.wnm_sleep_mode.action_type",
26890 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_action_types), 0,
26891 "WNM-Sleep Mode Action Type", HFILL }},
26893 {&hf_ieee80211_tag_wnm_sleep_mode_response_status,
26894 {"WNM-Sleep Mode Response Status",
26895 "wlan.wnm_sleep_mode.response_status",
26896 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_response_status_vals), 0, NULL,
26899 {&hf_ieee80211_tag_wnm_sleep_mode_interval,
26900 {"WNM-Sleep Interval", "wlan.wnm_sleep_mode.interval",
26901 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
26903 /* Time Advertisement */
26904 {&hf_ieee80211_tag_time_adv_timing_capab,
26905 {"Timing capabilities", "wlan.time_adv.timing_capab",
26906 FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals), 0,
26909 {&hf_ieee80211_tag_time_adv_time_value,
26910 {"Time Value", "wlan.time_adv.time_value",
26911 FT_BYTES, BASE_NONE, NULL, 0,
26914 {&hf_ieee80211_tag_time_adv_time_value_year,
26915 {"Time Value: Year", "wlan.time_adv.time_value.year",
26916 FT_UINT16, BASE_DEC, NULL, 0,
26919 {&hf_ieee80211_tag_time_adv_time_value_month,
26920 {"Time Value: Month", "wlan.time_adv.time_value.month",
26921 FT_UINT8, BASE_DEC, NULL, 0,
26924 {&hf_ieee80211_tag_time_adv_time_value_day,
26925 {"Time Value: Day", "wlan.time_adv.time_value.month",
26926 FT_UINT8, BASE_DEC, NULL, 0,
26929 {&hf_ieee80211_tag_time_adv_time_value_hours,
26930 {"Time Value: Hours", "wlan.time_adv.time_value.hours",
26931 FT_UINT8, BASE_DEC, NULL, 0,
26934 {&hf_ieee80211_tag_time_adv_time_value_minutes,
26935 {"Time Value: Minutes", "wlan.time_adv.time_value.minutes",
26936 FT_UINT8, BASE_DEC, NULL, 0,
26939 {&hf_ieee80211_tag_time_adv_time_value_seconds,
26940 {"Time Value: Seconds", "wlan.time_adv.time_value.seconds",
26941 FT_UINT8, BASE_DEC, NULL, 0,
26944 {&hf_ieee80211_tag_time_adv_time_value_milliseconds,
26945 {"Time Value: Milliseconds", "wlan.time_adv.time_value.milliseconds",
26946 FT_UINT16, BASE_DEC, NULL, 0,
26949 {&hf_ieee80211_tag_time_adv_time_value_reserved,
26950 {"Time Value: Reserved", "wlan.time_adv.time_value.reserved",
26951 FT_UINT8, BASE_DEC, NULL, 0,
26954 {&hf_ieee80211_tag_time_adv_time_error,
26955 {"Time Error", "wlan.time_adv.time_error",
26956 FT_BYTES, BASE_NONE, NULL, 0,
26959 {&hf_ieee80211_tag_time_adv_time_update_counter,
26960 {"Time Update Counter", "wlan.time_adv.time_update_counter",
26961 FT_UINT8, BASE_DEC, NULL, 0,
26965 {&hf_ieee80211_tag_time_zone,
26966 {"Time Zone", "wlan.time_zone",
26967 FT_STRING, BASE_NONE, NULL, 0,
26971 {&hf_ieee80211_tag_interworking_access_network_type,
26972 {"Access Network Type", "wlan.interworking.access_network_type",
26973 FT_UINT8, BASE_DEC, VALS(access_network_type_vals), 0x0f,
26976 {&hf_ieee80211_tag_interworking_internet,
26977 {"Internet", "wlan.interworking.internet",
26978 FT_UINT8, BASE_DEC, NULL, 0x10,
26981 {&hf_ieee80211_tag_interworking_asra,
26982 {"ASRA", "wlan.interworking.asra",
26983 FT_UINT8, BASE_DEC, NULL, 0x20,
26984 "Additional Step Required for Access", HFILL }},
26986 {&hf_ieee80211_tag_interworking_esr,
26987 {"ESR", "wlan.interworking.esr",
26988 FT_UINT8, BASE_DEC, NULL, 0x40,
26989 "Emergency services reachable", HFILL }},
26991 {&hf_ieee80211_tag_interworking_uesa,
26992 {"UESA", "wlan.interworking.uesa",
26993 FT_UINT8, BASE_DEC, NULL, 0x80,
26994 "Unauthenticated emergency service accessible", HFILL }},
26996 {&hf_ieee80211_tag_interworking_hessid,
26997 {"HESSID", "wlan.interworking.hessid",
26998 FT_ETHER, BASE_NONE, NULL, 0,
26999 "Homogeneous ESS identifier", HFILL }},
27001 /* QoS Map Set element */
27002 {&hf_ieee80211_tag_qos_map_set_dscp_exc,
27003 {"DSCP Exception", "wlan.qos_map_set.dscp_exception",
27004 FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
27006 {&hf_ieee80211_tag_qos_map_set_dscp_exc_val,
27007 {"DSCP Value", "wlan.qos_map_set.dscp_value",
27008 FT_UINT8, BASE_DEC, NULL, 0,
27009 "DSCP Exception - DSCP Value", HFILL }},
27011 {&hf_ieee80211_tag_qos_map_set_dscp_exc_up,
27012 {"User Priority", "wlan.qos_map_set.up",
27013 FT_UINT8, BASE_DEC, NULL, 0,
27014 "DSCP Exception - User Priority", HFILL }},
27016 {&hf_ieee80211_tag_qos_map_set_range,
27017 {"DSCP Range description", "wlan.qos_map_set.range",
27018 FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
27020 {&hf_ieee80211_tag_qos_map_set_low,
27021 {"DSCP Low Value", "wlan.qos_map_set.dscp_low_value",
27022 FT_UINT8, BASE_DEC, NULL, 0,
27023 "DSCP Range description - DSCP Low Value", HFILL }},
27025 {&hf_ieee80211_tag_qos_map_set_high,
27026 {"DSCP High Value", "wlan.qos_map_set.dscp_high_value",
27027 FT_UINT8, BASE_DEC, NULL, 0,
27028 "DSCP Range description - DSCP High Value", HFILL }},
27030 /* Advertisement Protocol */
27031 {&hf_ieee80211_tag_adv_proto_resp_len_limit,
27032 {"Query Response Length Limit", "wlan.adv_proto.resp_len_limit",
27033 FT_UINT8, BASE_DEC, NULL, 0x7f,
27036 {&hf_ieee80211_tag_adv_proto_pame_bi,
27037 {"PAME-BI", "wlan.adv_proto.pame_bi",
27038 FT_UINT8, BASE_DEC, NULL, 0x80,
27039 "Pre-Association Message Xchange BSSID Independent (PAME-BI)", HFILL }},
27041 {&hf_ieee80211_tag_adv_proto_id,
27042 {"Advertisement Protocol ID", "wlan.adv_proto.id",
27043 FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals), 0,
27046 {&hf_ieee80211_tag_adv_proto_vs_info,
27047 {"Advertisement Protocol Vendor Specific info", "wlan.adv_proto.vs_info",
27048 FT_NONE, BASE_NONE, NULL, 0,
27051 /* Roaming Consortium */
27052 {&hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
27053 {"Number of ANQP OIs", "wlan.roaming_consortium.num_anqp_oi",
27054 FT_UINT8, BASE_DEC, NULL, 0,
27057 {&hf_ieee80211_tag_roaming_consortium_oi1_len,
27058 {"OI #1 Length", "wlan.roaming_consortium.oi1_len",
27059 FT_UINT8, BASE_DEC, NULL, 0x0f,
27062 {&hf_ieee80211_tag_roaming_consortium_oi2_len,
27063 {"OI #2 Length", "wlan.roaming_consortium.oi2_len",
27064 FT_UINT8, BASE_DEC, NULL, 0xf0,
27067 {&hf_ieee80211_tag_roaming_consortium_oi1,
27068 {"OI #1", "wlan.roaming_consortium.oi1",
27069 FT_BYTES, BASE_NONE, NULL, 0,
27072 {&hf_ieee80211_tag_roaming_consortium_oi2,
27073 {"OI #2", "wlan.roaming_consortium.oi2",
27074 FT_BYTES, BASE_NONE, NULL, 0,
27077 {&hf_ieee80211_tag_roaming_consortium_oi3,
27078 {"OI #3", "wlan.roaming_consortium.oi3",
27079 FT_BYTES, BASE_NONE, NULL, 0,
27082 /* Timeout Interval */
27083 {&hf_ieee80211_tag_timeout_int_type,
27084 {"Timeout Interval Type", "wlan.timeout_int.type",
27085 FT_UINT8, BASE_DEC, VALS(timeout_int_types), 0,
27088 {&hf_ieee80211_tag_timeout_int_value,
27089 {"Timeout Interval Value", "wlan.timeout_int.value",
27090 FT_UINT32, BASE_DEC, NULL, 0,
27093 /* Link Identifier */
27094 {&hf_ieee80211_tag_link_id_bssid,
27095 {"BSSID", "wlan.link_id.bssid",
27096 FT_ETHER, BASE_NONE, NULL, 0,
27099 {&hf_ieee80211_tag_link_id_init_sta,
27100 {"TDLS initiator STA Address", "wlan.link_id.init_sta",
27101 FT_ETHER, BASE_NONE, NULL, 0,
27104 {&hf_ieee80211_tag_link_id_resp_sta,
27105 {"TDLS responder STA Address", "wlan.link_id.resp_sta",
27106 FT_ETHER, BASE_NONE, NULL, 0,
27109 /* Wakeup Schedule */
27110 {&hf_ieee80211_tag_wakeup_schedule_offset,
27111 {"Offset", "wlan.wakeup_schedule.offset",
27112 FT_UINT32, BASE_DEC, NULL, 0,
27115 {&hf_ieee80211_tag_wakeup_schedule_interval,
27116 {"Interval", "wlan.wakeup_schedule.interval",
27117 FT_UINT32, BASE_DEC, NULL, 0,
27120 {&hf_ieee80211_tag_wakeup_schedule_awake_window_slots,
27121 {"Awake Window Slots", "wlan.wakeup_schedule.awake_window_slots",
27122 FT_UINT32, BASE_DEC, NULL, 0,
27125 {&hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
27126 {"Maximum Awake Window Duration", "wlan.wakeup_schedule.max_awake_dur",
27127 FT_UINT32, BASE_DEC, NULL, 0,
27130 {&hf_ieee80211_tag_wakeup_schedule_idle_count,
27131 {"Idle Count", "wlan.wakeup_schedule.idle_count",
27132 FT_UINT16, BASE_DEC, NULL, 0,
27135 /* Channel Switch Timing */
27136 {&hf_ieee80211_tag_channel_switch_timing_switch_time,
27137 {"Switch Time", "wlan.channel_switch_timing.switch_time",
27138 FT_UINT16, BASE_DEC, NULL, 0,
27141 {&hf_ieee80211_tag_channel_switch_timing_switch_timeout,
27142 {"Switch Timeout", "wlan.channel_switch_timing.switch_timeout",
27143 FT_UINT16, BASE_DEC, NULL, 0,
27147 {&hf_ieee80211_tag_pti_control_tid,
27148 {"TID", "wlan.pti_control.tid",
27149 FT_UINT8, BASE_DEC, NULL, 0,
27152 {&hf_ieee80211_tag_pti_control_sequence_control,
27153 {"Sequence Control", "wlan.pti_control.sequence_control",
27154 FT_UINT16, BASE_HEX, NULL, 0,
27157 /* PU Buffer Status */
27158 {&hf_ieee80211_tag_pu_buffer_status_ac_bk,
27159 {"AC_BK traffic available", "wlan.pu_buffer_status.ac_bk",
27160 FT_UINT8, BASE_DEC, NULL, 0x01,
27163 {&hf_ieee80211_tag_pu_buffer_status_ac_be,
27164 {"AC_BE traffic available", "wlan.pu_buffer_status.ac_be",
27165 FT_UINT8, BASE_DEC, NULL, 0x02,
27168 {&hf_ieee80211_tag_pu_buffer_status_ac_vi,
27169 {"AC_VI traffic available", "wlan.pu_buffer_status.ac_vi",
27170 FT_UINT8, BASE_DEC, NULL, 0x04,
27173 {&hf_ieee80211_tag_pu_buffer_status_ac_vo,
27174 {"AC_VO traffic available", "wlan.pu_buffer_status.ac_vo",
27175 FT_UINT8, BASE_DEC, NULL, 0x08,
27178 {&hf_ieee80211_mysterious_olpc_stuff,
27179 {"Mysterious OLPC stuff", "wlan.mysterious_olpc_stuff",
27180 FT_NONE, BASE_NONE, NULL, 0x0,
27185 static hf_register_info aggregate_fields[] = {
27186 {&hf_ieee80211_amsdu_subframe,
27187 {"A-MSDU Subframe", "wlan_aggregate.a_mdsu.subframe",
27188 FT_NONE, BASE_NONE, NULL, 0x0,
27189 "Aggregate MAC Service Data Unit (MSDU) Subframe", HFILL }},
27191 {&hf_ieee80211_amsdu_length,
27192 {"A-MSDU Length", "wlan_aggregate.a_mdsu.length",
27193 FT_UINT16, BASE_DEC, NULL, 0x0,
27197 static uat_field_t wep_uat_flds[] = {
27199 UAT_FLD_VS(uat_wep_key_records, key, "Key type", wep_type_vals,
27200 "Decryption key type used"),
27201 UAT_FLD_CSTRING(uat_wep_key_records, string, "Key",
27202 "wep:<wep hexadecimal key>\n"
27203 "wpa-pwd:<passphrase>[:<ssid>]\n"
27204 "wpa-psk:<wpa hexadecimal key>"),
27208 static gint *tree_array[] = {
27213 &ett_cntrl_wrapper_fc,
27214 &ett_cntrl_wrapper_payload,
27218 &ett_block_ack_bitmap,
27222 &ett_fixed_parameters,
27223 &ett_tagged_parameters,
27224 &ett_tag_bmapctl_tree,
27225 &ett_tag_country_fnm_tree,
27226 &ett_tag_country_rcc_tree,
27227 &ett_qos_parameters,
27228 &ett_qos_ps_buf_state,
27229 &ett_wep_parameters,
27231 &ett_hwmp_targ_flags_tree,
27232 &ett_mesh_chswitch_flag_tree,
27233 &ett_mesh_config_cap_tree,
27234 &ett_mesh_formation_info_tree,
27238 &ett_rsn_sub_pcs_tree,
27239 &ett_rsn_akms_tree,
27240 &ett_rsn_sub_akms_tree,
27242 &ett_rsn_pmkid_tree,
27243 &ett_rsn_gmcs_tree,
27247 &ett_wpa_sub_ucs_tree,
27248 &ett_wpa_akms_tree,
27249 &ett_wpa_sub_akms_tree,
27251 &ett_wme_aci_aifsn,
27256 &ett_ampduparam_tree,
27259 &ett_htex_cap_tree,
27263 &ett_hta_cap1_tree,
27264 &ett_hta_cap2_tree,
27271 &ett_vht_mcsset_tree,
27272 &ett_vht_rx_mcsbit_tree,
27273 &ett_vht_tx_mcsbit_tree,
27274 &ett_vht_basic_mcsbit_tree,
27276 &ett_vht_tpe_info_tree,
27278 &ett_vht_ndp_annc_token_tree,
27279 &ett_vht_ndp_annc_sta_info_tree,
27281 &ett_ff_vhtmimo_cntrl,
27282 &ett_ff_vhtmimo_beamforming_report,
27283 &ett_ff_vhtmimo_beamforming_report_snr,
27284 &ett_ff_vhtmimo_beamforming_report_feedback_matrices,
27286 &ett_vht_grpidmgmt,
27290 &ett_ht_info_delimiter1_tree,
27291 &ett_ht_info_delimiter2_tree,
27292 &ett_ht_info_delimiter3_tree,
27294 &ett_tag_measure_request_mode_tree,
27295 &ett_tag_measure_request_type_tree,
27296 &ett_tag_measure_report_mode_tree,
27297 &ett_tag_measure_report_type_tree,
27298 &ett_tag_measure_report_basic_map_tree,
27299 &ett_tag_measure_report_rpi_tree,
27300 &ett_tag_measure_report_frame_tree,
27301 &ett_tag_measure_reported_frame_tree,
27302 &ett_tag_bss_bitmask_tree,
27303 &ett_tag_dfs_map_tree,
27304 &ett_tag_erp_info_tree,
27323 &ett_tag_tclas_mask_tree,
27325 &ett_tag_supported_channels,
27327 &ett_tag_neighbor_report_bssid_info_tree,
27328 &ett_tag_neighbor_report_bssid_info_capability_tree,
27329 &ett_tag_neighbor_report_sub_tag_tree,
27331 &ett_tag_wapi_param_set_akm_tree,
27332 &ett_tag_wapi_param_set_ucast_tree,
27333 &ett_tag_wapi_param_set_mcast_tree,
27334 &ett_tag_wapi_param_set_preauth_tree,
27336 &ett_tag_time_adv_tree,
27338 &ett_ff_ba_param_tree,
27339 &ett_ff_ba_ssc_tree,
27340 &ett_ff_delba_param_tree,
27342 &ett_ff_psmp_param_set,
27343 &ett_ff_mimo_cntrl,
27346 &ett_ff_sm_pwr_save,
27347 &ett_ff_chan_switch_announce,
27349 &ett_ff_psmp_sta_info,
27353 &ett_msdu_aggregation_parent_tree,
27354 &ett_msdu_aggregation_subframe_tree,
27363 &ett_adv_proto_tuple,
27367 &ett_nai_realm_eap,
27368 &ett_tag_ric_data_desc_ie,
27369 &ett_anqp_vendor_capab,
27371 &ett_hs20_cc_proto_port_tuple,
27381 &ett_qos_map_set_exception,
27382 &ett_qos_map_set_range,
27384 /* 802.11ad trees */
27385 &ett_dynamic_alloc_tree,
27392 &ett_dmg_params_tree,
27396 &ett_allocation_tree,
27399 &ett_gas_resp_fragment,
27400 &ett_gas_resp_fragments
27403 static ei_register_info ei[] = {
27404 { &ei_ieee80211_bad_length,
27405 { "ieee80211.bad_length", PI_MALFORMED, PI_ERROR,
27406 "Wrong length indicated", EXPFILL }},
27408 { &ei_ieee80211_inv_val,
27409 { "ieee80211.invalid_value", PI_MALFORMED, PI_WARN,
27410 "Invalid value", EXPFILL }},
27412 { &ei_ieee80211_tag_number,
27413 { "wlan.tag.number.unexpected_ie", PI_MALFORMED, PI_ERROR,
27414 "Unexpected Information Element ID", EXPFILL }},
27416 { &ei_ieee80211_tag_length,
27417 { "wlan.tag.length.bad", PI_MALFORMED, PI_ERROR,
27418 "Bad tag length", EXPFILL }},
27420 { &ei_ieee80211_extra_data,
27421 { "ieee80211.extra_data", PI_MALFORMED, PI_WARN,
27422 "Unexpected extra data in the end", EXPFILL }},
27424 { &ei_ieee80211_ff_anqp_capability,
27425 { "wlan.fixed.anqp.capability.invalid", PI_MALFORMED, PI_ERROR,
27426 "Invalid vendor-specific ANQP capability", EXPFILL }},
27428 { &ei_ieee80211_ff_anqp_venue_length,
27429 { "wlan.fixed.anqp.venue.length.invalid", PI_MALFORMED, PI_ERROR,
27430 "Invalid Venue Name Duple length", EXPFILL }},
27432 { &ei_ieee80211_ff_anqp_roaming_consortium_oi_len,
27433 { "wlan.fixed.anqp.roaming_consortium.oi_len.invalid", PI_MALFORMED, PI_ERROR,
27434 "Invalid Roaming Consortium OI", EXPFILL }},
27436 { &ei_ieee80211_ff_anqp_nai_field_len,
27437 { "wlan.fixed.anqp.nai_realm_list.field_len.invalid", PI_MALFORMED, PI_ERROR,
27438 "Invalid NAI Realm List", EXPFILL }},
27440 { &ei_ieee80211_ff_anqp_nai_realm_eap_len,
27441 { "wlan.fixed.naqp_nai_realm_list.eap_method_len.invalid", PI_MALFORMED, PI_ERROR,
27442 "Invalid EAP Method subfield", EXPFILL }},
27444 { &ei_hs20_anqp_ofn_length,
27445 { "wlan.hs20.anqp.ofn.length.invalid", PI_MALFORMED, PI_ERROR,
27446 "Invalid Operator Friendly Name Duple length", EXPFILL }},
27448 { &ei_hs20_anqp_nai_hrq_length,
27449 { "wlan.hs20.anqp.nai_hrq.length.invalid", PI_MALFORMED, PI_ERROR,
27450 "Invalid NAI Home Realm Query length", EXPFILL }},
27452 { &ei_ieee80211_ff_anqp_info_length,
27453 { "wlan.fixed.anqp.info_length.invalid", PI_MALFORMED, PI_ERROR,
27454 "Invalid ANQP Info length", EXPFILL }},
27456 { &ei_ieee80211_not_enough_room_for_anqp_header,
27457 { "wlan.fixed.query_length_invalid", PI_MALFORMED, PI_ERROR,
27458 "Not enough room for ANQP header", EXPFILL }},
27460 { &ei_ieee80211_ff_query_request_length,
27461 { "wlan.fixed.query_request_length.invalid", PI_MALFORMED, PI_ERROR,
27462 "Invalid Query Request Length", EXPFILL }},
27464 { &ei_ieee80211_ff_query_response_length,
27465 { "wlan.fixed.query_response_length.invalid", PI_MALFORMED, PI_ERROR,
27466 "Invalid Query Response Length", EXPFILL }},
27468 { &ei_ieee80211_tag_wnm_sleep_mode_no_key_data,
27469 { "wlan.wnm_sleep_mode.no_key_data", PI_MALFORMED, PI_ERROR,
27470 "WNM-Sleep Mode Response is not long enough to include Key Data", EXPFILL }},
27472 { &ei_ieee80211_tdls_setup_response_malformed,
27473 { "wlan.tdls_setup_response_malformed", PI_MALFORMED, PI_ERROR,
27474 "TDLS Setup Response (success) does not include mandatory fields", EXPFILL }},
27476 { &ei_ieee80211_tdls_setup_confirm_malformed,
27477 { "wlan.tdls_setup_confirm_malformed", PI_MALFORMED, PI_ERROR,
27478 "TDLS Setup Confirm (success) does not include mandatory fields", EXPFILL }},
27480 { &ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype,
27481 { "wlan.wfa.ie.wme.qos_info.bad_ftype", PI_UNDECODED, PI_WARN,
27482 "Could not deduce direction to decode correctly", EXPFILL }},
27484 { &ei_ieee80211_qos_info_bad_ftype,
27485 { "wlan.qos_info.bad_ftype", PI_UNDECODED, PI_WARN,
27486 "Could not deduce direction to decode correctly", EXPFILL }},
27488 { &ei_ieee80211_qos_bad_aifsn,
27489 { "wlan.qos_info.bad_aifsn", PI_MALFORMED, PI_WARN,
27490 "Invalid AIFSN", EXPFILL }},
27492 { &ei_ieee80211_rsn_pcs_count,
27493 { "wlan.rsn.pcs.count.invalid", PI_MALFORMED, PI_ERROR,
27494 "Pairwise Cipher Suite Count too large", EXPFILL }},
27496 { &ei_ieee80211_rsn_pmkid_count,
27497 { "wlan.rsn.akms.count.invalid", PI_MALFORMED, PI_ERROR,
27498 "Auth Key Management (AKM) Suite Count too large", EXPFILL }},
27500 { &ei_ieee80211_pmkid_count_too_large,
27501 { "wlan.rsn.pmkid.count.invalid", PI_MALFORMED, PI_ERROR,
27502 "PMKID Count too large", EXPFILL }},
27504 { &ei_ieee80211_vht_tpe_pwr_info_count,
27505 { "wlan.vht.tpe.pwr_info.count.invalid", PI_MALFORMED, PI_ERROR,
27506 "Max Tx Pwr Count is Incorrect, should be 0-7", EXPFILL }},
27508 { &ei_ieee80211_missing_data,
27509 { "ieee80211.missing_data", PI_MALFORMED, PI_WARN,
27510 "No Request subelements in TFS Request", EXPFILL }},
27512 { &ei_ieee80211_fc_retry,
27513 { "wlan.fc.retry.expert", PI_SEQUENCE, PI_NOTE,
27514 "Retransmission (retry)", EXPFILL }},
27516 { &ei_ieee80211_tag_measure_request_unknown,
27517 { "wlan.measure.req.unknown.expert", PI_UNDECODED, PI_WARN,
27518 "Undecoded Measurement Request type (or subtype), Contact Wireshark developers if you want this supported", EXPFILL }},
27520 { &ei_ieee80211_tag_measure_request_beacon_unknown,
27521 { "wlan.measure.req.beacon.unknown.expert", PI_UNDECODED, PI_WARN,
27522 "Unknown Data (not interpreted)", EXPFILL }},
27524 { &ei_ieee80211_tag_measure_report_unknown,
27525 { "wlan.measure.req.unknown.expert", PI_UNDECODED, PI_WARN,
27526 "Undecoded Measurement Report type (or subtype), Contact Wireshark developers if you want this supported", EXPFILL }},
27528 { &ei_ieee80211_tag_data,
27529 { "wlan.tag.data.undecoded", PI_UNDECODED, PI_NOTE,
27530 "Dissector for 802.11 IE Tag code not implemented, Contact Wireshark developers if you want this supported", EXPFILL }},
27532 { &ei_ieee80211_dmg_subtype,
27533 { "wlan.dmg_subtype.bad", PI_MALFORMED, PI_ERROR,
27534 "Bad DMG type/subtype", EXPFILL }},
27536 { &ei_ieee80211_vht_action,
27537 { "wlan.vht.action.undecoded", PI_UNDECODED, PI_NOTE,
27538 "All subtype of VHT Action is not yet supported by Wireshark", EXPFILL }},
27540 { &ei_ieee80211_mesh_peering_unexpected,
27541 { "wlan.peering.unexpected", PI_MALFORMED, PI_ERROR,
27542 "Unexpected Self-protected action", EXPFILL }},
27544 { &ei_ieee80211_fcs,
27545 { "wlan.fcs.bad_checksum", PI_MALFORMED, PI_ERROR,
27548 { &ei_ieee80211_mismatched_akm_suite,
27549 { "wlan.rsn.akms.mismatched", PI_PROTOCOL, PI_ERROR,
27553 expert_module_t *expert_ieee80211;
27555 module_t *wlan_module;
27557 const unsigned char bssid_broadcast_data[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
27559 memset(&wlan_stats, 0, sizeof wlan_stats);
27561 proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
27562 "IEEE 802.11 Aggregate Data", "wlan_aggregate");
27563 proto_register_field_array(proto_aggregate, aggregate_fields, array_length(aggregate_fields));
27565 proto_wlan = proto_register_protocol("IEEE 802.11 wireless LAN", "IEEE 802.11", "wlan");
27566 /* Created to remove Decode As confusion */
27567 proto_centrino = proto_register_protocol("IEEE 802.11 wireless LAN (Centrino)", "IEEE 802.11 (Centrino)", "wlan_centrino");
27568 proto_register_field_array(proto_wlan, hf, array_length(hf));
27570 proto_wlan_ext = proto_register_protocol("IEEE 802.11 wireless LAN extension frame",
27571 "IEEE 802.11 EXT", "wlan_ext");
27573 proto_register_subtree_array(tree_array, array_length(tree_array));
27575 expert_ieee80211 = expert_register_protocol(proto_wlan);
27576 expert_register_field_array(expert_ieee80211, ei, array_length(ei));
27578 ieee80211_handle = register_dissector("wlan", dissect_ieee80211, proto_wlan);
27579 register_dissector("wlan_withfcs", dissect_ieee80211_withfcs, proto_wlan);
27580 wlan_withoutfcs_handle = register_dissector("wlan_withoutfcs", dissect_ieee80211_withoutfcs, proto_wlan);
27581 register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
27582 register_dissector("wlan_noqos", dissect_ieee80211_noqos, proto_wlan);
27584 register_capture_dissector("ieee80211", capture_ieee80211, proto_wlan);
27585 register_capture_dissector("ieee80211_datapad", capture_ieee80211_datapad, proto_wlan);
27587 register_init_routine(wlan_defragment_init);
27588 register_cleanup_routine(wlan_defragment_cleanup);
27589 register_init_routine(wlan_retransmit_init);
27590 register_init_routine(ieee80211_gas_reassembly_init);
27592 wlan_tap = register_tap("wlan");
27593 register_conversation_table(proto_wlan, TRUE, wlan_conversation_packet, wlan_hostlist_packet);
27595 wlan_address_type = address_type_dissector_register("AT_ETHER_WLAN", "WLAN Address", ether_to_str, ether_str_len, NULL, wlan_col_filter_str,
27596 ether_len, ether_name_resolution_str, ether_name_resolution_len);
27597 wlan_bssid_address_type = address_type_dissector_register("AT_ETHER_BSSID", "WLAN BSSID Address", ether_to_str, ether_str_len, NULL, wlan_bssid_col_filter_str,
27598 ether_len, ether_name_resolution_str, ether_name_resolution_len);
27599 set_address(&bssid_broadcast, wlan_bssid_address_type, 6, bssid_broadcast_data);
27601 /* Register configuration options */
27602 wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
27603 prefs_register_bool_preference(wlan_module, "defragment",
27604 "Reassemble fragmented 802.11 datagrams",
27605 "Whether fragmented 802.11 datagrams should be reassembled",
27608 prefs_register_bool_preference(wlan_module, "ignore_draft_ht",
27609 "Ignore vendor-specific HT elements",
27610 "Don't dissect 802.11n draft HT elements (which might contain duplicate information).",
27611 &wlan_ignore_draft_ht);
27613 prefs_register_bool_preference(wlan_module, "retransmitted",
27614 "Call subdissector for retransmitted 802.11 frames",
27615 "Whether retransmitted 802.11 frames should be subdissected",
27616 &wlan_subdissector);
27618 prefs_register_bool_preference(wlan_module, "check_fcs",
27619 "Assume packets have FCS",
27620 "Some 802.11 cards include the FCS at the end of a packet, others do not.",
27623 prefs_register_bool_preference(wlan_module, "check_checksum",
27624 "Validate the FCS checksum if possible",
27625 "Whether to validate the FCS checksum or not.",
27626 &wlan_check_checksum);
27628 prefs_register_enum_preference(wlan_module, "ignore_wep",
27629 "Ignore the Protection bit",
27630 "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
27631 "and some also leave the IV (initialization vector).",
27632 &wlan_ignore_prot, wlan_ignore_prot_options, TRUE);
27634 prefs_register_obsolete_preference(wlan_module, "wep_keys");
27636 prefs_register_bool_preference(wlan_module, "enable_decryption",
27637 "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
27638 &enable_decryption);
27640 wep_uat = uat_new("WEP and WPA Decryption Keys",
27641 sizeof(uat_wep_key_record_t), /* record size */
27642 "80211_keys", /* filename */
27643 TRUE, /* from_profile */
27644 &uat_wep_key_records, /* data_ptr */
27645 &num_wepkeys_uat, /* numitems_ptr */
27646 UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
27647 NULL, /* help. XXX Needs chapter in WSUG */
27648 uat_wep_key_record_copy_cb, /* copy callback */
27649 uat_wep_key_record_update_cb, /* update callback */
27650 uat_wep_key_record_free_cb, /* free callback */
27651 init_wepkeys, /* post update callback - update the WEP/WPA keys */
27652 NULL, /* reset callback */
27653 wep_uat_flds); /* UAT field definitions */
27655 prefs_register_uat_preference(wlan_module,
27658 "WEP and pre-shared WPA keys\n"
27659 "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
27660 "010203040506070809101111213 (104/128-bit WEP),\n"
27661 "MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
27662 "0102030405...6061626364 (WPA + 256-bit key)."
27663 "Invalid keys will be ignored.",
27668 proto_register_wlan_rsna_eapol(void)
27671 static hf_register_info hf[] = {
27672 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
27673 {"Key Information", "wlan_rsna_eapol.keydes.key_info",
27674 FT_UINT16, BASE_HEX, NULL, 0x0,
27677 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
27678 {"Key Descriptor Version", "wlan_rsna_eapol.keydes.key_info.keydes_version",
27679 FT_UINT16, BASE_DEC, VALS(keydes_version_vals), KEY_INFO_KEYDES_VERSION_MASK,
27682 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
27683 {"Key Type", "wlan_rsna_eapol.keydes.key_info.key_type",
27684 FT_BOOLEAN, 16, TFS(&keyinfo_key_type_tfs), KEY_INFO_KEY_TYPE_MASK,
27687 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
27688 {"Key Index", "wlan_rsna_eapol.keydes.key_info.key_index",
27689 FT_UINT16, BASE_DEC, NULL, KEY_INFO_KEY_INDEX_MASK,
27692 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
27693 {"Install", "wlan_rsna_eapol.keydes.key_info.install",
27694 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_INSTALL_MASK,
27697 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
27698 {"Key ACK", "wlan_rsna_eapol.keydes.key_info.key_ack",
27699 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_KEY_ACK_MASK,
27702 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
27703 {"Key MIC", "wlan_rsna_eapol.keydes.key_info.key_mic",
27704 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_KEY_MIC_MASK,
27707 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
27708 {"Secure", "wlan_rsna_eapol.keydes.key_info.secure",
27709 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_SECURE_MASK,
27712 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
27713 {"Error", "wlan_rsna_eapol.keydes.key_info.error",
27714 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_ERROR_MASK,
27717 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
27718 {"Request", "wlan_rsna_eapol.keydes.key_info.request",
27719 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_REQUEST_MASK,
27722 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
27723 {"Encrypted Key Data", "wlan_rsna_eapol.keydes.key_info.encrypted_key_data",
27724 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_ENCRYPTED_KEY_DATA_MASK,
27727 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
27728 {"SMK Message", "wlan_rsna_eapol.keydes.key_info.smk_message",
27729 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_ENCRYPTED_KEY_DATA_MASK,
27732 {&hf_wlan_rsna_eapol_keydes_key_len,
27733 {"Key Length", "eapol.keydes.key_len",
27734 FT_UINT16, BASE_DEC, NULL, 0x0,
27737 {&hf_wlan_rsna_eapol_keydes_replay_counter,
27738 {"Replay Counter", "eapol.keydes.replay_counter",
27739 FT_UINT64, BASE_DEC, NULL, 0x0,
27742 {&hf_wlan_rsna_eapol_keydes_key_iv,
27743 {"Key IV", "eapol.keydes.key_iv",
27744 FT_BYTES, BASE_NONE, NULL, 0x0,
27747 {&hf_wlan_rsna_eapol_wpa_keydes_nonce,
27748 {"WPA Key Nonce", "wlan_rsna_eapol.keydes.nonce",
27749 FT_BYTES, BASE_NONE, NULL, 0x0,
27752 {&hf_wlan_rsna_eapol_wpa_keydes_rsc,
27753 {"WPA Key RSC", "wlan_rsna_eapol.keydes.rsc",
27754 FT_BYTES, BASE_NONE, NULL, 0x0,
27757 {&hf_wlan_rsna_eapol_wpa_keydes_id,
27758 {"WPA Key ID", "wlan_rsna_eapol.keydes.id",
27759 FT_BYTES, BASE_NONE, NULL, 0x0,
27762 {&hf_wlan_rsna_eapol_wpa_keydes_mic,
27763 {"WPA Key MIC", "wlan_rsna_eapol.keydes.mic",
27764 FT_BYTES, BASE_NONE, NULL, 0x0,
27767 {&hf_wlan_rsna_eapol_wpa_keydes_data_len,
27768 {"WPA Key Data Length", "wlan_rsna_eapol.keydes.data_len",
27769 FT_UINT16, BASE_DEC, NULL, 0x0,
27772 {&hf_wlan_rsna_eapol_wpa_keydes_data,
27773 {"WPA Key Data", "wlan_rsna_eapol.keydes.data",
27774 FT_BYTES, BASE_NONE, NULL, 0x0,
27778 static gint *tree_array[] = {
27780 &ett_wlan_rsna_eapol_keydes_data,
27783 proto_wlan_rsna_eapol = proto_register_protocol("IEEE 802.11 RSNA EAPOL key",
27784 "802.11 RSNA EAPOL", "wlan_rsna_eapol");
27785 proto_register_field_array(proto_wlan_rsna_eapol, hf, array_length(hf));
27787 proto_register_subtree_array(tree_array, array_length(tree_array));
27791 proto_reg_handoff_ieee80211(void)
27793 dissector_handle_t data_encap_handle, centrino_handle;
27794 dissector_handle_t wlan_rsna_eapol_wpa_key_handle, wlan_rsna_eapol_rsn_key_handle;
27795 capture_dissector_handle_t ieee80211_cap_handle;
27798 * Get handles for the LLC, IPX and Ethernet dissectors.
27800 llc_handle = find_dissector_add_dependency("llc", proto_wlan);
27801 ipx_handle = find_dissector_add_dependency("ipx", proto_wlan);
27802 eth_withoutfcs_handle = find_dissector_add_dependency("eth_withoutfcs", proto_wlan);
27804 llc_cap_handle = find_capture_dissector("llc");
27805 ipx_cap_handle = find_capture_dissector("ipx");
27807 dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11, ieee80211_handle);
27809 centrino_handle = create_dissector_handle( dissect_ieee80211_centrino, proto_centrino );
27810 dissector_add_uint("ethertype", ETHERTYPE_CENTRINO_PROMISC, centrino_handle);
27812 ieee80211_cap_handle = find_capture_dissector("ieee80211");
27813 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11, ieee80211_cap_handle);
27814 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11_WITH_RADIO, ieee80211_cap_handle);
27815 capture_dissector_add_uint("ppi", 105 /* DLT_DLT_IEEE802_11 */, ieee80211_cap_handle);
27817 /* Register handoff to Aruba GRE */
27818 dissector_add_uint("gre.proto", GRE_ARUBA_8200, ieee80211_handle);
27819 dissector_add_uint("gre.proto", GRE_ARUBA_8210, ieee80211_handle);
27820 dissector_add_uint("gre.proto", GRE_ARUBA_8220, ieee80211_handle);
27821 dissector_add_uint("gre.proto", GRE_ARUBA_8230, ieee80211_handle);
27822 dissector_add_uint("gre.proto", GRE_ARUBA_8240, ieee80211_handle);
27823 dissector_add_uint("gre.proto", GRE_ARUBA_8250, ieee80211_handle);
27824 dissector_add_uint("gre.proto", GRE_ARUBA_8260, ieee80211_handle);
27825 dissector_add_uint("gre.proto", GRE_ARUBA_8270, ieee80211_handle);
27826 dissector_add_uint("gre.proto", GRE_ARUBA_8280, ieee80211_handle);
27827 dissector_add_uint("gre.proto", GRE_ARUBA_8290, ieee80211_handle);
27828 dissector_add_uint("gre.proto", GRE_ARUBA_82A0, ieee80211_handle);
27829 dissector_add_uint("gre.proto", GRE_ARUBA_82B0, ieee80211_handle);
27830 dissector_add_uint("gre.proto", GRE_ARUBA_82C0, ieee80211_handle);
27831 dissector_add_uint("gre.proto", GRE_ARUBA_82D0, ieee80211_handle);
27832 dissector_add_uint("gre.proto", GRE_ARUBA_82E0, ieee80211_handle);
27833 dissector_add_uint("gre.proto", GRE_ARUBA_82F0, ieee80211_handle);
27834 dissector_add_uint("gre.proto", GRE_ARUBA_8300, ieee80211_handle);
27835 dissector_add_uint("gre.proto", GRE_ARUBA_8310, ieee80211_handle);
27836 dissector_add_uint("gre.proto", GRE_ARUBA_8320, ieee80211_handle);
27837 dissector_add_uint("gre.proto", GRE_ARUBA_8330, ieee80211_handle);
27838 dissector_add_uint("gre.proto", GRE_ARUBA_8340, ieee80211_handle);
27839 dissector_add_uint("gre.proto", GRE_ARUBA_8350, ieee80211_handle);
27840 dissector_add_uint("gre.proto", GRE_ARUBA_8360, ieee80211_handle);
27841 dissector_add_uint("gre.proto", GRE_ARUBA_8370, ieee80211_handle);
27843 data_encap_handle = create_dissector_handle(dissect_data_encap, proto_wlan);
27844 dissector_add_uint("ethertype", ETHERTYPE_IEEE80211_DATA_ENCAP,
27845 data_encap_handle);
27848 * EAPOL key descriptor types.
27850 wlan_rsna_eapol_wpa_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
27851 proto_wlan_rsna_eapol);
27852 dissector_add_uint("eapol.keydes.type", EAPOL_WPA_KEY, wlan_rsna_eapol_wpa_key_handle);
27853 wlan_rsna_eapol_rsn_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
27854 proto_wlan_rsna_eapol);
27855 dissector_add_uint("eapol.keydes.type", EAPOL_RSN_KEY, wlan_rsna_eapol_rsn_key_handle);
27857 dissector_add_uint("sflow_245.header_protocol", SFLOW_5_HEADER_80211_MAC, wlan_withoutfcs_handle);
27864 * c-basic-offset: 2
27866 * indent-tabs-mode: nil
27869 * ex: set shiftwidth=2 tabstop=8 expandtab:
27870 * :indentSize=2:tabSize=8:noTabs=true: