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 /* IEEE Std 802.11s-2011 */
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_PARAMETER_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_MAINTENANCE 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 Window" },
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_PARAMETER_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_MAINTENANCE, "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 static const value_string wfa_subtype_vals[] = {
689 { WFA_SUBTYPE_P2P, "P2P" },
690 { WFA_SUBTYPE_HS20_INDICATION, "Hotspot 2.0 Indication" },
691 { WFA_SUBTYPE_HS20_ANQP, "Hotspot 2.0 ANQP" },
692 { WFA_SUBTYPE_DPP, "Device Provisioning Protocol" },
696 #define DPP_CONFIGURATION_PROTOCOL 0x01
698 static const value_string dpp_subtype_vals[] = {
699 { DPP_CONFIGURATION_PROTOCOL, "DPP Configuration Protocol" },
703 /* ************************************************************************* */
704 /* Supported Rates (7.3.2.2) */
705 /* ************************************************************************* */
707 static const value_string ieee80211_supported_rates_vals[] = {
748 { 0xFF, "BSS requires support for mandatory features of HT PHY (IEEE 802.11 - Clause 20)" },
751 value_string_ext ieee80211_supported_rates_vals_ext = VALUE_STRING_EXT_INIT(ieee80211_supported_rates_vals);
753 /* ************************************************************************* */
754 /* 8.4.1.7 Reason Code field */
755 /* ************************************************************************* */
756 static const value_string ieee80211_reason_code[] = {
757 { 1, "Unspecified reason" },
758 { 2, "Previous authentication no longer valid" },
759 { 3, "Deauthenticated because sending STA is leaving (or has left) IBSS or ESS" },
760 { 4, "Disassociated due to inactivity" },
761 { 5, "Disassociated because AP is unable to handle all currently associated STAs" },
762 { 6, "Class 2 frame received from nonauthenticated STA" },
763 { 7, "Class 3 frame received from nonassociated STA" },
764 { 8, "Disassociated because sending STA is leaving (or has left) BSS" },
765 { 9, "STA requesting (re)association is not authenticated with responding STA" },
766 { 10, "Disassociated because the information in the Power Capability element is unacceptable" },
767 { 11, "Disassociated because the information in the Supported Channels element is unacceptable" },
769 { 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" },
770 { 14, "Message integrity code (MIC) failure" },
771 { 15, "4-Way Handshake timeout" },
772 { 16, "Group Key Handshake timeout" },
773 { 17, "Information element in 4-Way Handshake different from (Re)Association Request/Probe Response/Beacon frame" },
774 { 18, "Invalid group cipher" },
775 { 19, "Invalid pairwise cipher" },
776 { 20, "Invalid AKMP" },
777 { 21, "Unsupported RSN information element version" },
778 { 22, "Invalid RSN information element capabilities" },
779 { 23, "IEEE 802.1X authentication failed" },
780 { 24, "Cipher suite rejected because of the security policy" },
781 { 25, "TDLS direct-link teardown due to TDLS peer STA unreachable via the TDLS direct link" },
782 { 26, "TDLS direct-link teardown for unspecified reason" },
783 { 27, "Disassociated because session terminated by SSP request" },
784 { 28, "Disassociated because of lack of SSP roaming agreement" },
785 { 29, "Requested service rejected because of SSP cipher suite or AKM requirement " },
786 { 30, "Requested service not authorized in this location" },
787 { 31, "TS deleted because QoS AP lacks sufficient bandwidth for this QoS STA due to a change in BSS service characteristics or operational mode" },
788 { 32, "Disassociated for unspecified, QoS-related reason" },
789 { 33, "Disassociated because QoS AP lacks sufficient bandwidth for this QoS STA" },
790 { 34, "Disassociated because excessive number of frames need to be acknowledged, but are not acknowledged due to AP transmissions and/or poor channel conditions" },
791 { 35, "Disassociated because STA is transmitting outside the limits of its TXOPs" },
792 { 36, "Requested from peer STA as the STA is leaving the BSS (or resetting)" },
793 { 37, "Requested from peer STA as it does not want to use the mechanism" },
794 { 38, "Requested from peer STA as the STA received frames using the mechanism for which a setup is required" },
795 { 39, "Requested from peer STA due to timeout" },
796 { 45, "Peer STA does not support the requested cipher suite" },
797 { 46, "Disassociated because authorized access limit reached" },
798 { 47, "Disassociated due to external service requirements" },
799 { 48, "Invalid FT Action frame count" },
800 { 49, "Invalid pairwise master key identifier (PMKI)" },
801 { 50, "Invalid MDE" },
802 { 51, "Invalid FTE" },
803 { 52, "SME cancels the mesh peering instance with the reason other than reaching the maximum number of peer mesh STAs" },
804 { 53, "The mesh STA has reached the supported maximum number of peer mesh STAs" },
805 { 54, "The received information violates the Mesh Configuration policy configured in the mesh STA profile" },
806 { 55, "The mesh STA has received a Mesh Peering Close message requesting to close the mesh peering" },
807 { 56, "The mesh STA has re-sent dot11MeshMaxRetries Mesh Peering Open messages, without receiving a Mesh Peering Confirm message" },
808 { 57, "The confirmTimer for the mesh peering instance times out" },
809 { 58, "The mesh STA fails to unwrap the GTK or the values in the wrapped contents do not match" },
810 { 59, "The mesh STA receives inconsistent information about the mesh parameters between Mesh Peering Management frames" },
811 { 60, "The mesh STA fails the authenticated mesh peering exchange because due to failure in selecting either the pairwise ciphersuite or group ciphersuite" },
812 { 61, "The mesh STA does not have proxy information for this external destination" },
813 { 62, "The mesh STA does not have forwarding information for this destination" },
814 { 63, "The mesh STA determines that the link to the next hop of an active path in its forwarding information is no longer usable" },
815 { 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)" },
816 { 65, "The mesh STA performs channel switch to meet regulatory requirements" },
817 { 66, "The mesh STA performs channel switch with unspecified reason" },
820 static value_string_ext ieee80211_reason_code_ext = VALUE_STRING_EXT_INIT(ieee80211_reason_code);
822 /* ************************************************************************* */
823 /* 8.4.1.9 Status Code field */
824 /* ************************************************************************* */
825 static const value_string ieee80211_status_code[] = {
827 { 1, "Unspecified failure" },
828 { 2, "TDLS wakeup schedule rejected but alternative schedule provided" },
829 { 3, "TDLS wakeup schedule rejected" },
831 { 5, "Security disabled" },
832 { 6, "Unacceptable lifetime" },
833 { 7, "Not in same BSS" },
836 { 10, "Cannot support all requested capabilities in the Capability Information field" },
837 { 11, "Reassociation denied due to inability to confirm that association exists" },
838 { 12, "Association denied due to reason outside the scope of this standard" },
839 { 13, "Responding STA does not support the specified authentication algorithm" },
840 { 14, "Received an Authentication frame with authentication transaction sequence number out of expected sequence" },
841 { 15, "Authentication rejected because of challenge failure" },
842 { 16, "Authentication rejected due to timeout waiting for next frame in sequence" },
843 { 17, "Association denied because AP is unable to handle additional associated STAs" },
844 { 18, "Association denied due to requesting STA not supporting all of the data rates in the BSSBasicRateSet parameter" },
845 { 19, "Association denied due to requesting STA not supporting the short preamble option" },
846 { 20, "Association denied due to requesting STA not supporting the PBCC modulation option" },
847 { 21, "Association denied due to requesting STA not supporting the Channel Agility option" },
848 { 22, "Association request rejected because Spectrum Management capability is required" },
849 { 23, "Association request rejected because the information in the Power Capability element is unacceptable" },
850 { 24, "Association request rejected because the information in the Supported Channels element is unacceptable" },
851 { 25, "Association denied due to requesting STA not supporting the Short Slot Time option" },
852 { 26, "Association denied due to requesting STA not supporting the DSSS-OFDM option" },
853 { 27, "Reserved Association denied because the requesting STA does not support HT features" },
854 { 28, "R0KH unreachable" },
855 { 29, "Association denied because the requesting STA does not support the phased coexistence operation (PCO) transition time required by the AP" },
856 { 30, "Association request rejected temporarily; try again later" },
857 { 31, "Robust Management frame policy violation" },
858 { 32, "Unspecified, QoS-related failure" },
859 { 33, "Association denied because QoS AP or PCP has insufficient bandwidth to handle another QoS STA" },
860 { 34, "Association denied due to excessive frame loss rates and/or poor conditions on current operating channel" },
861 { 35, "Association (with QoS BSS) denied because the requesting STA does not support the QoS facility" },
863 { 37, "The request has been declined" },
864 { 38, "The request has not been successful as one or more parameters have invalid values" },
865 { 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" },
866 { 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" },
867 { 41, "Invalid group cipher" },
868 { 42, "Invalid pairwise cipher" },
869 { 43, "Invalid AKMP" },
870 { 44, "Unsupported RSN information element version" },
871 { 45, "Invalid RSN information element capabilities" },
872 { 46, "Cipher suite rejected because of security policy" },
873 { 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" },
874 { 48, "Direct link is not allowed in the BSS by policy" },
875 { 49, "The Destination STA is not present within this BSS" },
876 { 50, "The Destination STA is not a QoS STA" },
877 { 51, "Association denied because the ListenInterval is too large" },
878 { 52, "Invalid FT Action frame count" },
879 { 53, "Invalid pairwise master key identifier (PMKID)" },
880 { 54, "Invalid MDIE" },
881 { 55, "Invalid FTIE" },
882 { 56, "Requested TCLAS processing is not supported by the PCP/AP" },
883 { 57, "The PCP/AP has insufficient TCLAS processing resources to satisfy the request" },
884 { 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" },
885 { 59, "GAS Advertisement Protocol not supported" },
886 { 60, "No outstanding GAS request" },
887 { 61, "GAS Response not received from the Advertisement Server" },
888 { 62, "STA timed out waiting for GAS Query Response" },
889 { 63, "GAS Response is larger than query response length limit" },
890 { 64, "Request refused because home network does not support request" },
891 { 65, "Advertisement Server in the network is not currently reachable" },
893 { 67, "Request refused due to permissions received via SSPN interface" },
894 { 68, "Request refused because PCP/AP does not support unauthenticated access" },
898 { 72, "Invalid contents of RSNIE" },
899 { 73, "U-APSD Coexistence is not supported" },
900 { 74, "Requested U-APSD Coexistence mode is not supported" },
901 { 75, "Requested Interval/Duration value cannot be supported with U-APSD Coexistence" },
902 { 76, "Authentication is rejected because an Anti-Clogging Token is required" },
903 { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
904 { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
905 { 79, "Transmission failure" },
906 { 80, "Requested TCLAS Not Supported" },
907 { 81, "TCLAS Resources Exhausted" },
908 { 82, "Rejected with Suggested BSS Transition" },
909 { 83, "Reject with recommended schedule" },
910 { 84, "Reject because no wakeup schedule specified" },
911 { 85, "Success, the destination STA is in power save mode" },
912 { 86, "FST pending, in process of admitting FST session" },
913 { 87, "performing FST now" },
914 { 88, "FST pending, gap(s) in Block Ack window" },
915 { 89, "Reject because of U-PID setting" },
916 { 92, "(Re)association refused for some external reason" },
917 { 93, "(Re)association refused because of memory limits at the AP" },
918 { 94, "(Re)association refused because emergency services are not supported at the AP" },
919 { 95, "GAS query response not yet received" },
920 { 96, "Reject since the request is for transition to a frequency band subject to DSE procedures and FST initiator is a dependent STA" },
923 { 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" },
924 { 100, "The request failed due to a reservation conflict" },
925 { 101, "The request failed due to exceeded MAF limit" },
926 { 102, "The request failed due to exceeded MCCA track limit" },
927 { 103, "Association denied because the information in the Spectrum Management field is unacceptable" },
930 static value_string_ext ieee80211_status_code_ext = VALUE_STRING_EXT_INIT(ieee80211_status_code);
932 /* ************************************************************************* */
933 /* Frame types, and their names */
934 /* ************************************************************************* */
935 static const value_string frame_type_subtype_vals[] = {
936 {MGT_ASSOC_REQ, "Association Request"},
937 {MGT_ASSOC_RESP, "Association Response"},
938 {MGT_REASSOC_REQ, "Reassociation Request"},
939 {MGT_REASSOC_RESP, "Reassociation Response"},
940 {MGT_PROBE_REQ, "Probe Request"},
941 {MGT_PROBE_RESP, "Probe Response"},
942 {MGT_MEASUREMENT_PILOT, "Measurement Pilot"},
943 {MGT_BEACON, "Beacon frame"},
945 {MGT_DISASS, "Disassociate"},
946 {MGT_AUTHENTICATION, "Authentication"},
947 {MGT_DEAUTHENTICATION, "Deauthentication"},
948 {MGT_ACTION, "Action"},
949 {MGT_ACTION_NO_ACK, "Action No Ack"},
950 {MGT_ARUBA_WLAN, "Aruba Management"},
952 {CTRL_BEAMFORM_RPT_POLL, "Beamforming Report Poll"},
953 {CTRL_VHT_NDP_ANNC, "VHT NDP Announcement"},
954 {CTRL_CONTROL_WRAPPER, "Control Wrapper"},
955 {CTRL_BLOCK_ACK_REQ, "802.11 Block Ack Req"},
956 {CTRL_BLOCK_ACK, "802.11 Block Ack"},
957 {CTRL_PS_POLL, "Power-Save poll"},
958 {CTRL_RTS, "Request-to-send"},
959 {CTRL_CTS, "Clear-to-send"},
960 {CTRL_ACKNOWLEDGEMENT, "Acknowledgement"},
961 {CTRL_CFP_END, "CF-End (Control-frame)"},
962 {CTRL_CFP_ENDACK, "CF-End + CF-Ack (Control-frame)"},
965 {DATA_CF_ACK, "Data + CF-Ack"},
966 {DATA_CF_POLL, "Data + CF-Poll"},
967 {DATA_CF_ACK_POLL, "Data + CF-Ack + CF-Poll"},
968 {DATA_NULL_FUNCTION, "Null function (No data)"},
969 {DATA_CF_ACK_NOD, "Acknowledgement (No data)"},
970 {DATA_CF_POLL_NOD, "CF-Poll (No data)"},
971 {DATA_CF_ACK_POLL_NOD, "CF-Ack/Poll (No data)"},
972 {DATA_QOS_DATA, "QoS Data"},
973 {DATA_QOS_DATA_CF_ACK, "QoS Data + CF-Acknowledgment"},
974 {DATA_QOS_DATA_CF_POLL, "QoS Data + CF-Poll"},
975 {DATA_QOS_DATA_CF_ACK_POLL, "QoS Data + CF-Ack + CF-Poll"},
976 {DATA_QOS_NULL, "QoS Null function (No data)"},
977 {DATA_QOS_CF_POLL_NOD, "QoS CF-Poll (No Data)"},
978 {DATA_QOS_CF_ACK_POLL_NOD, "QoS CF-Ack + CF-Poll (No data)"},
980 {EXTENSION_DMG_BEACON, "DMG Beacon"},
983 {CTRL_SPR, "Service Period Request"},
984 {CTRL_GRANT, "Grant"},
985 {CTRL_DMG_CTS, "DMG Clear-to-send"},
986 {CTRL_DMG_DTS, "DMG Denial-to-send"},
987 {CTRL_GRANT_ACK, "Grant Acknowledgment"},
988 {CTRL_SSW, "Sector Sweep"},
989 {CTRL_SSW_FEEDBACK, "Sector Sweep Feedback"},
990 {CTRL_SSW_ACK, "Sector Sweep Acknowledgment"},
994 static value_string_ext frame_type_subtype_vals_ext = VALUE_STRING_EXT_INIT(frame_type_subtype_vals);
996 /* ************************************************************************* */
997 /* 802.1D Tag Name (by WME Access Category Names) */
998 /* ************************************************************************* */
999 static const value_string ieee80211_qos_tags_acs[] = {
1000 { 0, "Best Effort (Best Effort)" },
1001 { 1, "Background (Background)" },
1002 { 2, "Spare (Background)" },
1003 { 3, "Excellent Effort (Best Effort)" },
1004 { 4, "Controlled Load (Video)" },
1005 { 5, "Video (Video)" },
1006 { 6, "Voice (Voice)" },
1007 { 7, "Network Control (Voice)" },
1011 /* ************************************************************************* */
1012 /* WME Access Category Names (by WME ACI) */
1013 /* ************************************************************************* */
1014 static const value_string wme_acs[] = {
1015 { 0, "Best Effort" },
1016 { 1, "Background" },
1022 /* ************************************************************************* */
1023 /* Aruba Management Type */
1024 /* ************************************************************************* */
1025 static const value_string aruba_mgt_typevals[] = {
1026 { 0x0001, "Hello" },
1027 { 0x0002, "Probe" },
1029 { 0x0004, "Ageout" },
1030 { 0x0005, "Heartbeat" },
1031 { 0x0006, "Deauth" },
1032 { 0x0007, "Disassoc" },
1033 { 0x0008, "Probe response" },
1034 { 0x0009, "Tunnel update" },
1035 { 0x000A, "Laser beam active" },
1036 { 0x000B, "Client IP" },
1037 { 0x000C, "Laser beam active v2" },
1038 { 0x000D, "AP statistics" },
1041 static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt_typevals);
1043 /*** Begin: Action Fixed Parameter ***/
1044 #define CAT_SPECTRUM_MGMT 0
1047 #define CAT_BLOCK_ACK 3
1048 #define CAT_PUBLIC 4
1049 #define CAT_RADIO_MEASUREMENT 5
1050 #define CAT_FAST_BSS_TRANSITION 6
1052 #define CAT_SA_QUERY 8
1053 #define CAT_PUBLIC_PROTECTED 9
1055 #define CAT_UNPROTECTED_WNM 11
1058 #define CAT_MULTIHOP 14
1059 #define CAT_SELF_PROTECTED 15
1061 #define CAT_MGMT_NOTIFICATION 17
1062 #define CAT_FAST_SESSION_TRANSFER 18
1063 #define CAT_ROBUST_AV_STREAMING 19
1064 #define CAT_UNPROTECTED_DMG 20
1066 #define CAT_VENDOR_SPECIFIC_PROTECTED 126
1067 #define CAT_VENDOR_SPECIFIC 127
1069 #define CAT_MESH_LINK_METRIC 31
1070 #define CAT_MESH_PATH_SELECTION 32
1071 #define CAT_MESH_INTERWORKING 33
1072 #define CAT_MESH_RESOURCE_COORDINATION 34
1073 #define CAT_MESH_SECURITY_ARCHITECTURE 35
1075 #define SM_ACTION_MEASUREMENT_REQUEST 0
1076 #define SM_ACTION_MEASUREMENT_REPORT 1
1077 #define SM_ACTION_TPC_REQUEST 2
1078 #define SM_ACTION_TPC_REPORT 3
1079 #define SM_ACTION_CHAN_SWITCH_ANNC 4
1080 #define SM_ACTION_EXT_CHAN_SWITCH_ANNC 5
1082 #define QOS_ACTION_ADDTS_REQUEST 0
1083 #define QOS_ACTION_ADDTS_RESPONSE 1
1084 #define QOS_ACTION_DELTS 2
1085 #define QOS_ACTION_SCHEDULE 3
1086 #define QOS_ACTION_MAP_CONFIGURE 4
1088 #define DLS_ACTION_REQUEST 0
1089 #define DLS_ACTION_RESPONSE 1
1090 #define DLS_ACTION_TEARDOWN 2
1092 #define BA_ADD_BLOCK_ACK_REQUEST 0
1093 #define BA_ADD_BLOCK_ACK_RESPONSE 1
1094 #define BA_DELETE_BLOCK_ACK 2
1096 /* Keep in sync with PPA_* defines */
1097 #define PA_20_40_BSS_COEXISTENCE_MANAGEMENT 0
1098 #define PA_DSE_ENABLEMENT 1
1099 #define PA_DSE_DEENABLEMENT 2
1100 #define PA_DSE_REG_LOC_ANNOUNCEMENT 3
1101 #define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4
1102 #define PA_DSE_MEASUREMENT_REQUEST 5
1103 #define PA_DSE_MEASUREMENT_REPORT 6
1104 #define PA_MEASUREMENT_PILOT 7
1105 #define PA_DSE_POWER_CONSTRAINT 8
1106 #define PA_VENDOR_SPECIFIC 9
1107 #define PA_GAS_INITIAL_REQUEST 10
1108 #define PA_GAS_INITIAL_RESPONSE 11
1109 #define PA_GAS_COMEBACK_REQUEST 12
1110 #define PA_GAS_COMEBACK_RESPONSE 13
1111 #define PA_TDLS_DISCOVERY_RESPONSE 14
1112 #define PA_LOCATION_TRACK_NOTIFICATION 15
1113 #define PA_QAB_REQUEST 16
1114 #define PA_QAB_RESPONSE 17
1116 /* Keep in sync with PA_* defines */
1117 #define PPA_DSE_ENABLEMENT 1
1118 #define PPA_DSE_DEENABLEMENT 2
1119 #define PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT 4
1120 #define PPA_DSE_MEASUREMENT_REQUEST 5
1121 #define PPA_DSE_MEASUREMENT_REPORT 6
1122 #define PPA_DSE_POWER_CONSTRAINT 8
1123 #define PPA_VENDOR_SPECIFIC 9
1124 #define PPA_GAS_INITIAL_REQUEST 10
1125 #define PPA_GAS_INITIAL_RESPONSE 11
1126 #define PPA_GAS_COMEBACK_REQUEST 12
1127 #define PPA_GAS_COMEBACK_RESPONSE 13
1128 #define PPA_QAB_REQUEST 16
1129 #define PPA_QAB_RESPONSE 17
1131 #define HT_ACTION_NOTIFY_CHAN_WIDTH 0
1132 #define HT_ACTION_SM_PWR_SAVE 1
1133 #define HT_ACTION_PSMP_ACTION 2
1134 #define HT_ACTION_SET_PCO_PHASE 3
1135 #define HT_ACTION_MIMO_CSI 4
1136 #define HT_ACTION_MIMO_BEAMFORMING 5
1137 #define HT_ACTION_MIMO_COMPRESSED_BEAMFORMING 6
1138 #define HT_ACTION_ANT_SEL_FEEDBACK 7
1139 #define HT_ACTION_HT_INFO_EXCHANGE 8
1141 #define DMG_ACTION_PWR_SAVE_CONFIG_REQ 0
1142 #define DMG_ACTION_PWR_SAVE_CONFIG_RES 1
1143 #define DMG_ACTION_INFO_REQ 2
1144 #define DMG_ACTION_INFO_RES 3
1145 #define DMG_ACTION_HANDOVER_REQ 4
1146 #define DMG_ACTION_HANDOVER_RES 5
1147 #define DMG_ACTION_DTP_REQ 6
1148 #define DMG_ACTION_DTP_RES 7
1149 #define DMG_ACTION_RELAY_SEARCH_REQ 8
1150 #define DMG_ACTION_RELAY_SEARCH_RES 9
1151 #define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ 10
1152 #define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES 11
1153 #define DMG_ACTION_RLS_REQ 12
1154 #define DMG_ACTION_RLS_RES 13
1155 #define DMG_ACTION_RLS_ANNOUNCE 14
1156 #define DMG_ACTION_RLS_TEARDOWN 15
1157 #define DMG_ACTION_RELAY_ACK_REQ 16
1158 #define DMG_ACTION_RELAY_ACK_RES 17
1159 #define DMG_ACTION_TPA_REQ 18
1160 #define DMG_ACTION_TPA_RES 19
1161 #define DMG_ACTION_TPA_REP 20
1162 #define DMG_ACTION_ROC_REQ 21
1163 #define DMG_ACTION_ROC_RES 22
1165 #define UNPROTECTED_DMG_ANNOUNCE 0
1166 #define UNPROTECTED_DMG_BRP 1
1168 #define FST_SETUP_REQUEST 0
1169 #define FST_SETUP_RESPONSE 1
1170 #define FST_TEAR_DOWN 2
1171 #define FST_ACK_REQUEST 3
1172 #define FST_ACK_RESPONSE 4
1173 #define FST_ON_CHANNEL_TUNNEL_REQUEST 5
1175 /* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */
1176 #define FT_ACTION_REQUEST 1
1177 #define FT_ACTION_RESPONSE 2
1178 #define FT_ACTION_CONFIRM 3
1179 #define FT_ACTION_ACK 4
1181 /* SA Query Action frame codes (IEEE 802.11w-2009, 7.4.9) */
1182 #define SA_QUERY_REQUEST 0
1183 #define SA_QUERY_RESPONSE 1
1185 /* IEEE Std 802.11z-2010, 7.4.11, Table 7-57v1 */
1186 #define TDLS_SETUP_REQUEST 0
1187 #define TDLS_SETUP_RESPONSE 1
1188 #define TDLS_SETUP_CONFIRM 2
1189 #define TDLS_TEARDOWN 3
1190 #define TDLS_PEER_TRAFFIC_INDICATION 4
1191 #define TDLS_CHANNEL_SWITCH_REQUEST 5
1192 #define TDLS_CHANNEL_SWITCH_RESPONSE 6
1193 #define TDLS_PEER_PSM_REQUEST 7
1194 #define TDLS_PEER_PSM_RESPONSE 8
1195 #define TDLS_PEER_TRAFFIC_RESPONSE 9
1196 #define TDLS_DISCOVERY_REQUEST 10
1198 /* IEEE Std 802.11-2012, 8.5.7.1, Table 8-206 */
1199 #define RM_ACTION_RADIO_MEASUREMENT_REQUEST 0
1200 #define RM_ACTION_RADIO_MEASUREMENT_REPORT 1
1201 #define RM_ACTION_LINK_MEASUREMENT_REQUEST 2
1202 #define RM_ACTION_LINK_MEASUREMENT_REPORT 3
1203 #define RM_ACTION_NEIGHBOR_REPORT_REQUEST 4
1204 #define RM_ACTION_NEIGHBOR_REPORT_RESPONSE 5
1206 /* 11s draft 12.0, table 7-57v30 */
1207 #define MESH_ACTION_LINK_METRIC_REPORT 0
1208 #define MESH_ACTION_HWMP 1
1209 #define MESH_ACTION_GATE_ANNOUNCE 2
1210 #define MESH_ACTION_CONGESTION_CTL 3
1211 #define MESH_ACTION_MCCA_SETUP_REQUEST 4
1212 #define MESH_ACTION_MCCA_SETUP_REPLY 5
1213 #define MESH_ACTION_MCCA_ADV_REQUEST 6
1214 #define MESH_ACTION_MCCA_ADV 7
1215 #define MESH_ACTION_MCCA_TEARDOWN 8
1216 #define MESH_ACTION_TBTT_ADJ_REQUEST 9
1217 #define MESH_ACTION_TBTT_ADJ_RESPONSE 10
1219 /* 11s draft 12.0, table 7-57v42: Multihop Action field values */
1220 #define MULTIHOP_ACTION_PROXY_UPDATE 0
1221 #define MULTIHOP_ACTION_PROXY_UPDATE_CONF 1
1223 /* 11s draft 12.0, table 7-57v24: Self-protected Action field values */
1224 #define SELFPROT_ACTION_MESH_PEERING_OPEN 1
1225 #define SELFPROT_ACTION_MESH_PEERING_CONFIRM 2
1226 #define SELFPROT_ACTION_MESH_PEERING_CLOSE 3
1227 #define SELFPROT_ACTION_MESH_GROUP_KEY_INFORM 4
1228 #define SELFPROT_ACTION_MESH_GROUP_KEY_ACK 5
1230 /* 11s draft 12.0, table 7-43bj6: Mesh Peering Protocol Identifier field values */
1231 #define MESH_PEERING_PROTO_MGMT 0
1232 #define MESH_PEERING_PROTO_AMPE 1
1233 #define MESH_PEERING_PROTO_VENDOR 255
1235 /* Vendor actions */
1237 #define MRVL_ACTION_MESH_MANAGEMENT 1
1239 #define MRVL_MESH_MGMT_ACTION_RREQ 0
1240 #define MRVL_MESH_MGMT_ACTION_RREP 1
1241 #define MRVL_MESH_MGMT_ACTION_RERR 2
1242 #define MRVL_MESH_MGMT_ACTION_PLDM 3
1244 #define ANQP_INFO_ANQP_QUERY_LIST 256
1245 #define ANQP_INFO_ANQP_CAPAB_LIST 257
1246 #define ANQP_INFO_VENUE_NAME_INFO 258
1247 #define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO 259
1248 #define ANQP_INFO_NETWORK_AUTH_TYPE_INFO 260
1249 #define ANQP_INFO_ROAMING_CONSORTIUM_LIST 261
1250 #define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO 262
1251 #define ANQP_INFO_NAI_REALM_LIST 263
1252 #define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO 264
1253 #define ANQP_INFO_AP_GEOSPATIAL_LOCATION 265
1254 #define ANQP_INFO_AP_CIVIC_LOCATION 266
1255 #define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI 267
1256 #define ANQP_INFO_DOMAIN_NAME_LIST 268
1257 #define ANQP_INFO_EMERGENCY_ALERT_ID_URI 269
1258 #define ANQP_INFO_TDLS_CAPAB_INFO 270
1259 #define ANQP_INFO_EMERGENCY_NAI 271
1260 #define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST 56797
1262 /* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */
1263 static const value_string anqp_info_id_vals[] = {
1264 {ANQP_INFO_ANQP_QUERY_LIST, "ANQP Query list"},
1265 {ANQP_INFO_ANQP_CAPAB_LIST, "ANQP Capability list"},
1266 {ANQP_INFO_VENUE_NAME_INFO, "Venue Name information"},
1267 {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO, "Emergency Call Number information"},
1268 {ANQP_INFO_NETWORK_AUTH_TYPE_INFO,
1269 "Network Authentication Type information"},
1270 {ANQP_INFO_ROAMING_CONSORTIUM_LIST, "Roaming Consortium list"},
1271 {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO,
1272 "IP Address Type Availability information"},
1273 {ANQP_INFO_NAI_REALM_LIST, "NAI Realm list"},
1274 {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO, "3GPP Cellular Network information"},
1275 {ANQP_INFO_AP_GEOSPATIAL_LOCATION, "AP Geospatial Location"},
1276 {ANQP_INFO_AP_CIVIC_LOCATION, "AP Civic Location"},
1277 {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI, "AP Location Public Identifier URI"},
1278 {ANQP_INFO_DOMAIN_NAME_LIST, "Domain Name list"},
1279 {ANQP_INFO_EMERGENCY_ALERT_ID_URI, "Emergency Alert Identifier URI"},
1280 {ANQP_INFO_TDLS_CAPAB_INFO, "TDLS Capability information"},
1281 {ANQP_INFO_EMERGENCY_NAI, "Emergency NAI"},
1282 {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST, "ANQP vendor-specific list"},
1285 static value_string_ext anqp_info_id_vals_ext = VALUE_STRING_EXT_INIT(anqp_info_id_vals);
1287 /* IEEE 802.11v - WNM Action field values */
1290 WNM_EVENT_REPORT = 1,
1291 WNM_DIAGNOSTIC_REQ = 2,
1292 WNM_DIAGNOSTIC_REPORT = 3,
1293 WNM_LOCATION_CFG_REQ = 4,
1294 WNM_LOCATION_CFG_RESP = 5,
1295 WNM_BSS_TRANS_MGMT_QUERY = 6,
1296 WNM_BSS_TRANS_MGMT_REQ = 7,
1297 WNM_BSS_TRANS_MGMT_RESP = 8,
1300 WNM_COLLOCATED_INTERFERENCE_REQ = 11,
1301 WNM_COLLOCATED_INTERFERENCE_REPORT = 12,
1304 WNM_TFS_NOTIFY = 15,
1305 WNM_SLEEP_MODE_REQ = 16,
1306 WNM_SLEEP_MODE_RESP = 17,
1307 WNM_TIM_BROADCAST_REQ = 18,
1308 WNM_TIM_BROADCAST_RESP = 19,
1309 WNM_QOS_TRAFFIC_CAPAB_UPDATE = 20,
1310 WNM_CHANNEL_USAGE_REQ = 21,
1311 WNM_CHANNEL_USAGE_RESP = 22,
1314 WNM_TIMING_MEASUREMENT_REQ = 25,
1315 WNM_NOTIFICATION_REQ = 26,
1316 WNM_NOTIFICATION_RESP = 27
1319 static const value_string wnm_action_codes[] = {
1320 { WNM_EVENT_REQ, "Event Request" },
1321 { WNM_EVENT_REPORT, "Event Report" },
1322 { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" },
1323 { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" },
1324 { WNM_LOCATION_CFG_REQ, "Location Configuration Request" },
1325 { WNM_LOCATION_CFG_RESP, "Location Configuration Response" },
1326 { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" },
1327 { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" },
1328 { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" },
1329 { WNM_FMS_REQ, "FMS Request" },
1330 { WNM_FMS_RESP, "FMS Response" },
1331 { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" },
1332 { WNM_COLLOCATED_INTERFERENCE_REPORT, "Collocated Interference Report" },
1333 { WNM_TFS_REQ, "TFS Request" },
1334 { WNM_TFS_RESP, "TFS Response" },
1335 { WNM_TFS_NOTIFY, "TFS Notify" },
1336 { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" },
1337 { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" },
1338 { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" },
1339 { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" },
1340 { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" },
1341 { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" },
1342 { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" },
1343 { WNM_DMS_REQ, "DMS Request" },
1344 { WNM_DMS_RESP, "DMS Response" },
1345 { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" },
1346 { WNM_NOTIFICATION_REQ, "WNM-Notification Request" },
1347 { WNM_NOTIFICATION_RESP, "WNM-Notification Response" },
1350 static value_string_ext wnm_action_codes_ext = VALUE_STRING_EXT_INIT(wnm_action_codes);
1352 enum unprotected_wnm_action {
1353 UNPROTECTED_WNM_TIM = 0,
1354 UNPROTECTED_WNM_TIMING_MEASUREMENT = 1
1357 static const value_string unprotected_wnm_action_codes[] = {
1358 { UNPROTECTED_WNM_TIM, "TIM" },
1359 { UNPROTECTED_WNM_TIMING_MEASUREMENT, "Timing Measurement" },
1362 static value_string_ext unprotected_wnm_action_codes_ext = VALUE_STRING_EXT_INIT(unprotected_wnm_action_codes);
1364 static const value_string wnm_notification_types[] = {
1365 { 0, "Firmware Update Notification" },
1366 { 1, "Reserved for use by WFA" },
1367 { 221, "Vendor Specific" },
1371 static value_string_ext wnm_notification_types_ext =
1372 VALUE_STRING_EXT_INIT(wnm_notification_types);
1374 /*** End: Action Fixed Parameter ***/
1376 static const value_string ieee80211_tag_measure_request_type_flags[] = {
1377 {0x00, "Basic Request"},
1378 {0x01, "Clear Channel Assessment (CCA) Request"},
1379 {0x02, "Receive Power Indication (RPI) Histogram Request"},
1380 {0x03, "Channel Load Request"},
1381 {0x04, "Noise Histogram Request"},
1382 {0x05, "Beacon Request"},
1383 {0x06, "Frame Request"},
1384 {0x07, "STA Statistics Request"},
1385 {0x08, "Location Configuration Indication (LCI) Request"},
1386 {0x09, "Transmit Stream Measurement Request"},
1387 {0x0A, "Measurement Pause Request"},
1390 static value_string_ext ieee80211_tag_measure_request_type_flags_ext =
1391 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_type_flags);
1393 static const value_string ieee80211_tag_measure_report_type_flags[] = {
1394 { 0x00, "Basic Report" },
1395 { 0x01, "Clear Channel Assessment (CCA) Report" },
1396 { 0x02, "Receive Power Indication (RPI) Histogram Report" },
1397 { 0x03, "Channel Load Report" },
1398 { 0x04, "Noise Histogram Report" },
1399 { 0x05, "Beacon Report" },
1400 { 0x06, "Frame Report" },
1401 { 0x07, "STA Statistics Report" },
1402 { 0x08, "Location Configuration Information (LCI) Report" },
1403 { 0x09, "Transmit Stream Measurement Report" },
1406 static value_string_ext ieee80211_tag_measure_report_type_flags_ext =
1407 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_report_type_flags);
1409 static const true_false_string ieee80211_tag_measure_report_frame_info_frame_type_flag = {
1410 "Measurement Pilot Frame",
1411 "Beacon/Probe Response Frame"
1414 static const true_false_string ieee80211_tag_measure_map_field_bss_flag = {
1415 "At least one MPDU was received by another BSS or IBSS in the measurement period.",
1416 "No MPDUs were received from another BSS or IBSS in the measurement period."
1419 static const value_string ieee80211_tag_measure_request_measurement_mode_flags[] = {
1420 { 0x00, "Passive" },
1422 { 0x02, "Beacon Table" },
1426 #define MEASURE_REQ_BEACON_SUB_SSID 0
1427 #define MEASURE_REQ_BEACON_SUB_BRI 1
1428 #define MEASURE_REQ_BEACON_SUB_RD 2
1429 #define MEASURE_REQ_BEACON_SUB_REQUEST 10
1430 #define MEASURE_REQ_BEACON_SUB_APCP 51
1431 #define MEASURE_REQ_BEACON_SUB_VS 221
1433 static const value_string ieee80211_tag_measure_request_beacon_sub_id_flags[] = {
1434 { MEASURE_REQ_BEACON_SUB_SSID, "SSID" },
1435 { MEASURE_REQ_BEACON_SUB_BRI, "Beacon Reporting Information" },
1436 { MEASURE_REQ_BEACON_SUB_RD, "Reporting Detail" },
1437 { MEASURE_REQ_BEACON_SUB_REQUEST, "Request" },
1438 { MEASURE_REQ_BEACON_SUB_APCP, "AP Channel Report" },
1439 { MEASURE_REQ_BEACON_SUB_VS, "Vendor Specific" },
1443 static const value_string ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags[] = {
1444 { 0x00, "Report to be issued after each measurement." },
1445 { 0x01, "The measured RCPI level is greater than an absolute threshold." },
1446 { 0x02, "The measured RCPI level is less than an absolute threshold." },
1447 { 0x03, "The measured RSNI level is greater than an absolute threshold." },
1448 { 0x04, "The measured RSNI level is less than an absolute threshold." },
1449 { 0x05, "The measured RCPI level is greater than a threshold defined by an offset from the serving AP's reference RCPI." },
1450 { 0x06, "The measured RCPI level is less than a threshold defined by an offset from the serving AP's reference RCPI." },
1451 { 0x07, "The measured RSNI level is greater than a threshold defined by an offset from the serving AP's reference RSNI." },
1452 { 0x08, "The measured RSNI level is less than a threshold defined by an offset from the serving AP's reference RSNI." },
1453 { 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." },
1454 { 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." },
1455 { 0xfe, "Report not required to be issued" },
1459 static const value_string ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags[] = {
1460 { 0, "No fixed length fields or elements" },
1461 { 1, "All fixed length fields and any requested elements in the Request information element if present" },
1462 { 2, "All fixed length fields and elements (default, used when Reporting Detail subelement is not included in Beacon Request" },
1466 static const value_string ieee80211_tag_measure_request_group_id_flags[] = {
1467 { 0x00, "STA Counters from dot11CountersTable" },
1468 { 0x01, "STA Counters from dot11MacStatistics group" },
1469 { 0x02, "QoS STA Counters for UP0 from dot11QosCountersTable" },
1470 { 0x03, "QoS STA Counters for UP1 from dot11QosCountersTable" },
1471 { 0x04, "QoS STA Counters for UP2 from dot11QosCountersTable" },
1472 { 0x05, "QoS STA Counters for UP3 from dot11QosCountersTable" },
1473 { 0x06, "QoS STA Counters for UP4 from dot11QosCountersTable" },
1474 { 0x07, "QoS STA Counters for UP5 from dot11QosCountersTable" },
1475 { 0x08, "QoS STA Counters for UP6 from dot11QosCountersTable" },
1476 { 0x09, "QoS STA Counters for UP7 from dot11QosCountersTable" },
1477 { 0x0a, "BSS Average Access Delays" },
1478 { 0x0b, "STA Counters from dot11A-MSDU Group" },
1479 { 0x0c, "STA Counters from dot11A-MPDU Group" },
1480 { 0x0d, "STA Counters from dot11 BAR, Channel Width, PSMP Group" },
1481 { 0x0e, "STA Counters from dot11Protection Group" },
1482 { 0x0f, "STBC Group" },
1485 static value_string_ext ieee80211_tag_measure_request_group_id_flags_ext =
1486 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_group_id_flags);
1488 static const value_string ieee80211_tclas_process_flag[] = {
1489 {0x00, "Incoming MSDU's higher layer parameters have to match to the parameters in all associated TCLAS elements."},
1490 {0x01, "Incoming MSDU's higher layer parameters have to match to at least one of the associated TCLAS elements."},
1491 {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."},
1496 #define MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO 1
1498 static const value_string ieee80211_tag_measure_request_channel_load_sub_id_vals[] = {
1499 { MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO, "Channel Load Reporting Information" },
1500 { 221, "Vendor Specific" },
1504 static const value_string ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals[] = {
1505 { 0x00, "Report to be issued after each measurement (default, used when Channel Load Reporting Information subelement is not included in Channel Load Request)." },
1506 { 0x01, "Report to be issued when measured Channel Load is equal to or greater than the reference value." },
1507 { 0x02, "Report to be issued when measured Channel Load is equal to or less than the reference value." },
1511 #define MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO 1
1513 static const value_string ieee80211_tag_measure_request_noise_histogram_sub_id_vals[] = {
1514 { MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO, "Noise Histogram Reporting Information" },
1515 { 221, "Vendor Specific" },
1519 static const value_string ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals[] = {
1520 { 0x00, "Report to be issued after each measurement (default, used when Noise Histogram Reporting Information subelement is not included in Noise Histogram Request)." },
1521 { 0x01, "Noise Histogram Report to be issued when measured ANPI is equal to or greater than the reference value." },
1522 { 0x02, "Noise Histogram Report to be issued when measured ANPI is equal to or less than the reference value." },
1526 #define MEASURE_REP_REPORTED_FRAME_BODY 1
1528 static const value_string ieee80211_tag_measure_report_beacon_sub_id_vals[] = {
1529 { MEASURE_REP_REPORTED_FRAME_BODY, "Reported Frame Body" },
1530 { 221, "Vendor Specific" },
1534 static const value_string frame_type[] = {
1535 {MGT_FRAME, "Management frame"},
1536 {CONTROL_FRAME, "Control frame"},
1537 {DATA_FRAME, "Data frame"},
1538 {EXTENSION_FRAME, "Extension frame"},
1542 static const value_string tofrom_ds[] = {
1543 {0, "Not leaving DS or network is operating "
1544 "in AD-HOC mode (To DS: 0 From DS: 0)"},
1545 {FLAG_TO_DS, "Frame from STA to DS via an AP (To DS: 1 "
1547 {FLAG_FROM_DS, "Frame from DS to a STA via AP(To DS: 0 "
1549 {FLAG_TO_DS|FLAG_FROM_DS, "WDS (AP to AP) or Mesh (MP to MP) Frame "
1550 "(To DS: 1 From DS: 1)"},
1554 static const true_false_string tods_flag = {
1555 "Frame is entering DS",
1556 "Frame is not entering DS"
1559 static const true_false_string fromds_flag = {
1560 "Frame is exiting DS",
1561 "Frame is not exiting DS"
1564 static const true_false_string more_fragments = {
1565 "More fragments follow",
1566 "This is the last fragment"
1569 static const true_false_string retry_flags = {
1570 "Frame is being retransmitted",
1571 "Frame is not being retransmitted"
1574 static const true_false_string pm_flags = {
1575 "STA will go to sleep",
1579 static const true_false_string md_flags = {
1580 "Data is buffered for STA at AP",
1584 static const true_false_string protected_flags = {
1585 "Data is protected",
1586 "Data is not protected"
1589 static const true_false_string order_flags = {
1591 "Not strictly ordered"
1594 static const true_false_string cf_ess_flags = {
1595 "Transmitter is an AP",
1596 "Transmitter is a STA"
1600 static const true_false_string cf_privacy_flags = {
1601 "AP/STA can support WEP",
1602 "AP/STA cannot support WEP"
1605 static const true_false_string cf_ibss_flags = {
1606 "Transmitter belongs to an IBSS",
1607 "Transmitter belongs to a BSS"
1610 static const true_false_string eosp_flag = {
1611 "End of service period",
1615 static const true_false_string bit4_flag = {
1616 "Bits 8-15 of QoS Control field are Queue Size",
1617 "Bits 8-15 of QoS Control field are TXOP Duration Requested"
1620 static const true_false_string ieee80211_qos_amsdu_present_flag = {
1625 static const true_false_string csa_txrestrict_flags = {
1630 static const true_false_string csa_initiator_flags = {
1635 static const true_false_string mesh_config_cap_power_save_level_flags = {
1636 "One of the peer-specific mesh power modes is deep sleep mode",
1637 "No one is in deep sleep mode"
1640 static const value_string sta_cf_pollable[] = {
1641 {0x00, "Station is not CF-Pollable"},
1642 {0x02, "Station is CF-Pollable, not requesting to be placed on the CF-polling list"},
1643 {0x01, "Station is CF-Pollable, requesting to be placed on the CF-polling list"},
1644 {0x03, "Station is CF-Pollable, requesting never to be polled"},
1645 {0x80, "QSTA requesting association in QBSS"},
1652 static const value_string ap_cf_pollable[] = {
1653 {0x00, "No point coordinator at AP"},
1654 {0x02, "Point coordinator at AP for delivery only (no polling)"},
1655 {0x01, "Point coordinator at AP for delivery and polling"},
1657 {0x80, "QAP (HC) does not use CFP for delivery of unicast data type frames"},
1658 {0x82, "QAP (HC) uses CFP for delivery, but does not send CF-Polls to non-QoS STAs"},
1659 {0x81, "QAP (HC) uses CFP for delivery, and sends CF-Polls to non-QoS STAs"},
1665 static const value_string auth_alg[] = {
1666 {0x00, "Open System"},
1667 {0x01, "Shared key"},
1668 {0x02, "Fast BSS Transition"},
1669 {0x03, "Simultaneous Authentication of Equals (SAE)"},
1670 {0x80, "Network EAP"}, /* Cisco proprietary? */
1674 static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
1675 "Permitted in QoS Data MPDUs",
1679 static const true_false_string ff_block_ack_params_policy_flag = {
1680 "Immediate Block Ack",
1684 static const value_string ff_channel_width_vals[] = {
1685 {0x00, "20 MHz channel width only"},
1686 {0x01, "Any channel width in the STA's Supported Channel Width Set"},
1690 static const true_false_string ff_qos_info_ap_q_ack_flag = {
1691 "APs MIB attribute dot11QAckOptionImplemented is true",
1692 "APs MIB attribute dot11QAckOptionImplemented is false"
1695 static const true_false_string ff_qos_info_ap_queue_req_flag = {
1696 "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
1697 "AP cannot process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
1700 static const true_false_string ff_qos_info_ap_txop_request_flag = {
1701 "AP can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
1702 "AP cannot process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
1705 static const true_false_string ff_qos_info_sta_ac_flag = {
1706 "Trigger-enabled and Delivery-enabled",
1707 "Neither Trigger-enabled nor Delivery-enabled"
1710 static const true_false_string ff_qos_info_sta_q_ack_flag = {
1711 "STAs MIB attribute dot11QAckOptionImplemented is true",
1712 "STAs MIB attribute dot11QAckOptionImplemented is false"
1715 static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
1716 {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
1717 {0x01, "AP may deliver a maximum of two MSDUs, A-MSDUs and MMPDUs per SP"},
1718 {0x02, "AP may deliver a maximum of four MSDUs, A-MSDUs and MMPDUs per SP"},
1719 {0x03, "AP may deliver a maximum of six MSDUs, A-MSDUs and MMPDUs per SP"},
1723 static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
1724 "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",
1725 "STA cannot process ACK frames with the More Data bit in the Frame Control field set to 1"
1728 static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
1729 "Dynamic SM Power Save mode",
1730 "Static SM Power Save mode"
1733 static const true_false_string ff_pco_phase_cntrl_flag = {
1738 static const true_false_string ff_psmp_param_set_more_psmp_flag = {
1739 "More PSMP Sequences Follow",
1740 "No PSMP Sequences Follow"
1743 static const value_string ff_mimo_cntrl_nc_index_flags[] = {
1745 {0x01, "2 Columns"},
1746 {0x02, "3 Columns"},
1747 {0x03, "4 Columns"},
1751 static const value_string ff_mimo_cntrl_nr_index_flags[] = {
1759 static const true_false_string ff_mimo_cntrl_channel_width_flag = {
1764 static const true_false_string ff_ht_info_information_request_flag = {
1765 "Requesting HT Information Exchange management action frame",
1766 "Should not send an HT Information Exchange management action frame"
1769 static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
1770 "Transmitting station is intolerant of 40 MHz operation",
1771 "Transmitting station permits 40 MHz operation"
1774 static const true_false_string ff_ht_info_sta_chan_width_flag = {
1779 static const value_string ff_ht_action_flags[] = {
1780 {HT_ACTION_NOTIFY_CHAN_WIDTH, "Notify Channel Width"},
1781 {HT_ACTION_SM_PWR_SAVE, "Spatial Multiplexing (SM) Power Save"},
1782 {HT_ACTION_PSMP_ACTION, "Power Save Multi-Poll (PSMP) action frame"},
1783 {HT_ACTION_SET_PCO_PHASE, "Set PCO Phase"},
1784 {HT_ACTION_MIMO_CSI, "MIMO CSI Matrices"},
1785 {HT_ACTION_MIMO_BEAMFORMING, "MIMO Non-compressed Beamforming"},
1786 {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING, "MIMO Compressed Beamforming"},
1787 {HT_ACTION_ANT_SEL_FEEDBACK, "Antenna Selection Indices Feedback"},
1788 {HT_ACTION_HT_INFO_EXCHANGE, "HT Information Exchange"},
1792 static const value_string ff_fst_action_flags[] = {
1793 {FST_SETUP_REQUEST, "FST Setup Request"},
1794 {FST_SETUP_RESPONSE, "FST Setup Response"},
1795 {FST_TEAR_DOWN, "FST Tear Down"},
1796 {FST_ACK_REQUEST, "FST Ack Request"},
1797 {FST_ACK_RESPONSE, "FST Ack Response"},
1798 {FST_ON_CHANNEL_TUNNEL_REQUEST, "FST On-channel Tunnel Request"},
1802 static const value_string ff_dmg_action_flags[] = {
1803 {DMG_ACTION_PWR_SAVE_CONFIG_REQ, "Power Save Configuration Request"},
1804 {DMG_ACTION_PWR_SAVE_CONFIG_RES, "Power Save Configuration Response"},
1805 {DMG_ACTION_INFO_REQ, "Information Request"},
1806 {DMG_ACTION_INFO_RES, "Information Response"},
1807 {DMG_ACTION_HANDOVER_REQ, "Handover Request"},
1808 {DMG_ACTION_HANDOVER_RES, "Handover Response"},
1809 {DMG_ACTION_DTP_REQ, "DTP Request"},
1810 {DMG_ACTION_DTP_RES, "DTP Response"},
1811 {DMG_ACTION_RELAY_SEARCH_REQ, "Relay Search Request"},
1812 {DMG_ACTION_RELAY_SEARCH_RES, "Relay Search Response"},
1813 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ, "Multi Relay Channel Measurement Request"},
1814 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES, "Multi Relay Channel Measurement Response"},
1815 {DMG_ACTION_RLS_REQ, "RLS Request"},
1816 {DMG_ACTION_RLS_RES, "RLS Response"},
1817 {DMG_ACTION_RLS_ANNOUNCE, "RLS Announcement"},
1818 {DMG_ACTION_RLS_TEARDOWN, "RLS Teardown"},
1819 {DMG_ACTION_RELAY_ACK_REQ, "Relay ACK Request"},
1820 {DMG_ACTION_RELAY_ACK_RES, "Relay ACK Response"},
1821 {DMG_ACTION_TPA_REQ, "TPA Request"},
1822 {DMG_ACTION_TPA_RES, "TPA Response"},
1823 {DMG_ACTION_TPA_REP, "TPA Report"},
1824 {DMG_ACTION_ROC_REQ, "ROC Request"},
1825 {DMG_ACTION_ROC_RES, "ROC Response"},
1829 static const value_string ff_unprotected_dmg_action_flags[] = {
1830 {UNPROTECTED_DMG_ANNOUNCE, "Announce"},
1831 {UNPROTECTED_DMG_BRP, "BRP"},
1834 static const value_string ff_mimo_cntrl_grouping_flags[] = {
1835 {0x00, "No Grouping"},
1836 {0x01, "Carrier Groups of 2"},
1837 {0x02, "Carrier Groups of 4"},
1842 static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
1850 static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
1851 {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
1852 {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
1853 {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
1854 {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
1858 static const value_string ff_ppa_action_codes[] = {
1859 {PPA_DSE_ENABLEMENT, "Protected DSE enablement"},
1860 {PPA_DSE_DEENABLEMENT, "Protected DSE deenablement"},
1861 {PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT, "Protected Extended Channel Switch Announcement"},
1862 {PPA_DSE_MEASUREMENT_REQUEST, "Protected DSE measurement request"},
1863 {PPA_DSE_MEASUREMENT_REPORT, "Protected DSE measurement report"},
1864 {PPA_DSE_POWER_CONSTRAINT, "Protected DSE power constraint"},
1865 {PPA_VENDOR_SPECIFIC, "Protected Vendor Specific"},
1866 {PPA_GAS_INITIAL_REQUEST, "Protected GAS Initial Request"},
1867 {PPA_GAS_INITIAL_RESPONSE, "Protected GAS Initial Response"},
1868 {PPA_GAS_COMEBACK_REQUEST, "Protected GAS Comeback Request"},
1869 {PPA_GAS_COMEBACK_RESPONSE, "Protected GAS Comeback Response"},
1870 {PPA_QAB_REQUEST, "Protected QAB Request"},
1871 {PPA_QAB_RESPONSE, "Protected QAB Response"},
1874 static value_string_ext ff_ppa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_ppa_action_codes);
1876 static const value_string ff_pa_action_codes[] = {
1877 {PA_20_40_BSS_COEXISTENCE_MANAGEMENT, "20/40 BSS Coexistence Management"},
1878 {PA_DSE_ENABLEMENT, "DSE enablement"},
1879 {PA_DSE_DEENABLEMENT, "DSE deenablement"},
1880 {PA_DSE_REG_LOC_ANNOUNCEMENT, "DSE Registered Location Announcement"},
1881 {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT, "Extended Channel Switch Announcement"},
1882 {PA_DSE_MEASUREMENT_REQUEST, "DSE measurement request"},
1883 {PA_DSE_MEASUREMENT_REPORT, "DSE measurement report"},
1884 {PA_MEASUREMENT_PILOT, "Measurement Pilot"},
1885 {PA_DSE_POWER_CONSTRAINT, "DSE power constraint"},
1886 {PA_VENDOR_SPECIFIC, "Vendor Specific"},
1887 {PA_GAS_INITIAL_REQUEST, "GAS Initial Request"},
1888 {PA_GAS_INITIAL_RESPONSE, "GAS Initial Response"},
1889 {PA_GAS_COMEBACK_REQUEST, "GAS Comeback Request"},
1890 {PA_GAS_COMEBACK_RESPONSE, "GAS Comeback Response"},
1891 {PA_TDLS_DISCOVERY_RESPONSE, "TDLS Discovery Response"},
1892 {PA_LOCATION_TRACK_NOTIFICATION, "Location Track Notification"},
1893 {PA_QAB_REQUEST, "QAB Request"},
1894 {PA_QAB_RESPONSE, "QAB Response"},
1897 static value_string_ext ff_pa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_pa_action_codes);
1899 static const value_string category_codes[] = {
1900 {CAT_SPECTRUM_MGMT, "Spectrum Management (SM)"},
1901 {CAT_QOS, "Quality of Service (QoS)"},
1902 {CAT_DLS, "Direct-Link Setup (DLS)"},
1903 {CAT_BLOCK_ACK, "Block Ack"},
1904 {CAT_PUBLIC, "Public Action"},
1905 {CAT_RADIO_MEASUREMENT, "Radio Measurement"},
1906 {CAT_FAST_BSS_TRANSITION, "Fast BSS Transition"},
1907 {CAT_HT, "High Throughput"},
1908 {CAT_SA_QUERY, "SA Query"},
1909 {CAT_PUBLIC_PROTECTED, "Protected Dual of Public Action"},
1911 {CAT_UNPROTECTED_WNM, "Unprotected WNM"},
1914 {CAT_MULTIHOP, "Multihop"},
1915 {CAT_SELF_PROTECTED, "Self-protected"},
1917 {CAT_MGMT_NOTIFICATION, "Management Notification"},
1918 {CAT_FAST_SESSION_TRANSFER, "Fast Session Transfer"},
1919 {CAT_ROBUST_AV_STREAMING, "Robust AV Streaming"},
1920 {CAT_UNPROTECTED_DMG, "Unprotected DMG"},
1922 {CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected"},
1923 {CAT_VENDOR_SPECIFIC, "Vendor Specific"},
1925 {0x80 | CAT_SPECTRUM_MGMT, "Spectrum Management (SM) (error)"},
1926 {0x80 | CAT_QOS, "Quality of Service (QoS (error))"},
1927 {0x80 | CAT_DLS, "Direct-Link Setup (DLS) (error)"},
1928 {0x80 | CAT_BLOCK_ACK, "Block Ack (error)"},
1929 {0x80 | CAT_PUBLIC, "Public Action (error)"},
1930 {0x80 | CAT_RADIO_MEASUREMENT, "Radio Measurement (error)"},
1931 {0x80 | CAT_FAST_BSS_TRANSITION, "Fast BSS Transition (error)"},
1932 {0x80 | CAT_HT, "High Throughput (error)"},
1933 {0x80 | CAT_SA_QUERY, "SA Query (error)"},
1934 {0x80 | CAT_PUBLIC_PROTECTED, "Protected Dual of Public Action (error)"},
1935 {0x80 | CAT_WNM, "WNM (error)"},
1936 {0x80 | CAT_UNPROTECTED_WNM, "Unprotected WNM (error)"},
1937 {0x80 | CAT_TDLS, "TDLS (error)"},
1938 {0x80 | CAT_MESH, "Mesh (error)"},
1939 {0x80 | CAT_MULTIHOP, "Multihop (error)"},
1940 {0x80 | CAT_SELF_PROTECTED, "Self-protected (error)"},
1941 {0x80 | CAT_DMG, "DMG (error)"},
1942 {0x80 | CAT_MGMT_NOTIFICATION, "Management Notification (error)"},
1943 {0x80 | CAT_FAST_SESSION_TRANSFER, "Fast Session Transfer (error)"},
1944 {0x80 | CAT_ROBUST_AV_STREAMING, "Robust AV Streaming (error)"},
1945 {0x80 | CAT_UNPROTECTED_DMG, "Unprotected DMG (error)"},
1946 {0x80 | CAT_VHT, "VHT"},
1947 {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED, "Vendor-specific Protected (error)"},
1948 {0x80 | CAT_VENDOR_SPECIFIC, "Vendor Specific (error)"},
1951 static value_string_ext category_codes_ext = VALUE_STRING_EXT_INIT(category_codes);
1953 #define NR_SUB_ID_TSF_INFO 1
1954 #define NR_SUB_ID_CON_COU_STR 2
1955 #define NR_SUB_ID_BSS_TRN_CAN_PREF 3
1956 #define NR_SUB_ID_BSS_TER_DUR 4
1957 #define NR_SUB_ID_BEARING 5
1958 #define NR_SUB_ID_WIDE_BW_CHANNEL 6
1960 #define NR_SUB_ID_MEASUREMENT_REPORT 39
1961 #define NR_SUB_ID_HT_CAPABILITIES 45
1962 #define NR_SUB_ID_HT_OPERATION 61
1963 #define NR_SUB_ID_SEC_CHANNEL_OFFSET 62
1964 #define NR_SUB_ID_MEASUREMENT_PILOT_INFO 66
1965 #define NR_SUB_ID_RM_ENABLE_CAP 70
1966 #define NR_SUB_ID_HT_MULTIPLE_BSSID 71
1967 #define NR_SUB_ID_VHT_CAPABILITIES 191
1968 #define NR_SUB_ID_VHT_OPERATION 192
1970 #define NR_SUB_ID_VENDOR_SPECIFIC 221
1972 static const value_string ieee80211_neighbor_report_subelement_id_vals[] = {
1973 {NR_SUB_ID_TSF_INFO, "TSF Information"},
1974 {NR_SUB_ID_CON_COU_STR, "Condensed Country String"},
1975 {NR_SUB_ID_BSS_TRN_CAN_PREF, "BSS Transition Candidate Preference"},
1976 {NR_SUB_ID_BSS_TER_DUR, "BSS Termination Duration"},
1977 {NR_SUB_ID_BEARING, "Bearing"},
1978 {NR_SUB_ID_WIDE_BW_CHANNEL, "Wide Bandwidth Channel"},
1979 {NR_SUB_ID_MEASUREMENT_REPORT, "Measurement Report"},
1980 {NR_SUB_ID_HT_CAPABILITIES, "HT Capabilities"},
1981 {NR_SUB_ID_HT_OPERATION, "HT Operation"},
1982 {NR_SUB_ID_SEC_CHANNEL_OFFSET, "Secondary Channel Offset"},
1983 {NR_SUB_ID_MEASUREMENT_PILOT_INFO, "Measurement Pilot Transmission"},
1984 {NR_SUB_ID_RM_ENABLE_CAP, "RM Enabled Capabilities"},
1985 {NR_SUB_ID_HT_MULTIPLE_BSSID, "Multiple BSSID"},
1986 {NR_SUB_ID_VHT_CAPABILITIES, "VHT Capabilities"},
1987 {NR_SUB_ID_VHT_OPERATION, "VHT Operation"},
1988 {NR_SUB_ID_VENDOR_SPECIFIC, "Vendor Specific"},
1992 static const value_string ieee80211_neighbor_report_bssid_info_reachability_vals[] = {
1994 {1, "Not Reachable"},
2000 static const value_string action_codes[] = {
2001 {SM_ACTION_MEASUREMENT_REQUEST, "Measurement Request"},
2002 {SM_ACTION_MEASUREMENT_REPORT, "Measurement Report"},
2003 {SM_ACTION_TPC_REQUEST, "TPC Request"},
2004 {SM_ACTION_TPC_REPORT, "TPC Report"},
2005 {SM_ACTION_CHAN_SWITCH_ANNC, "Channel Switch Announcement"},
2009 static const value_string vendor_action_types_mrvl[] = {
2010 {MRVL_ACTION_MESH_MANAGEMENT, "Mesh Management"},
2014 static const value_string mesh_mgt_action_codes_mrvl[] = {
2015 {MRVL_MESH_MGMT_ACTION_RREQ, "Route Request"},
2016 {MRVL_MESH_MGMT_ACTION_RREP, "Route Response"},
2017 {MRVL_MESH_MGMT_ACTION_RERR, "Route Error"},
2018 {MRVL_MESH_MGMT_ACTION_PLDM, "Peer Link Down"},
2022 static const value_string mesh_path_selection_codes[] = {
2023 {0x0, "Hybrid Wireless Mesh Protocol"},
2027 static const value_string mesh_metric_codes[] = {
2028 {0x0, "Airtime Link Metric"},
2032 static const value_string wme_action_codes[] = {
2033 {0x00, "Setup request"},
2034 {0x01, "Setup response"},
2039 static const value_string wme_status_codes[] = {
2040 {0x00, "Admission accepted"},
2041 {0x01, "Invalid parameters"},
2046 static const value_string mesh_action[] = {
2047 {MESH_ACTION_LINK_METRIC_REPORT, "Mesh Link Metric Report"},
2048 {MESH_ACTION_HWMP, "HWMP Mesh Path Selection"},
2049 {MESH_ACTION_GATE_ANNOUNCE, "Gate Announcement"},
2050 {MESH_ACTION_CONGESTION_CTL, "Congestion Control Notification"},
2051 {MESH_ACTION_MCCA_SETUP_REQUEST, "MCCA Setup Request"},
2052 {MESH_ACTION_MCCA_SETUP_REPLY, "MCCA Setup Reply"},
2053 {MESH_ACTION_MCCA_ADV_REQUEST, "MCCA Advertisement Request"},
2054 {MESH_ACTION_MCCA_ADV, "MCCA Advertisement"},
2055 {MESH_ACTION_MCCA_TEARDOWN, "MCCA Teardown"},
2056 {MESH_ACTION_TBTT_ADJ_REQUEST, "TBTT Adjustment Request"},
2057 {MESH_ACTION_TBTT_ADJ_RESPONSE, "TBTT Adjustment Response"},
2060 static value_string_ext mesh_action_ext = VALUE_STRING_EXT_INIT(mesh_action);
2062 static const value_string multihop_action[] = {
2063 {MULTIHOP_ACTION_PROXY_UPDATE, "Proxy Update"},
2064 {MULTIHOP_ACTION_PROXY_UPDATE_CONF, "Proxy Update Confirmation"},
2068 static const value_string selfprot_action[] = {
2069 {SELFPROT_ACTION_MESH_PEERING_OPEN, "Mesh Peering Open"},
2070 {SELFPROT_ACTION_MESH_PEERING_CONFIRM, "Mesh Peering Confirm"},
2071 {SELFPROT_ACTION_MESH_PEERING_CLOSE, "Mesh Peering Close"},
2072 {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM, "Mesh Group Key Inform"},
2073 {SELFPROT_ACTION_MESH_GROUP_KEY_ACK, "Mesh Group Key Ack"},
2077 static const value_string mesh_peering_proto_ids[] = {
2078 {MESH_PEERING_PROTO_MGMT, "Mesh peering management protocol"},
2079 {MESH_PEERING_PROTO_AMPE, "Authenticated mesh peering exchange protocol"},
2080 {MESH_PEERING_PROTO_VENDOR, "Vendor specific"},
2084 static const true_false_string hwmp_targ_usn_flags = {
2085 "[USN = 1] Target Sequence Number Unknown at Originator",
2086 "[USN = 0] Target Sequence Number Known at Originator"
2089 static const true_false_string hwmp_targ_to_flags = {
2090 "[TO = 1] Only Target Will Respond",
2091 "[TO = 0] Intermediate Nodes May Respond"
2094 static const value_string ack_policy[] = {
2095 {0x00, "Normal Ack"},
2097 {0x02, "No explicit acknowledgment"},
2098 {0x03, "Block Ack"},
2102 static const value_string qos_action_codes[] = {
2103 {QOS_ACTION_ADDTS_REQUEST, "ADDTS Request"},
2104 {QOS_ACTION_ADDTS_RESPONSE, "ADDTS Response"},
2105 {QOS_ACTION_DELTS, "DELTS"},
2106 {QOS_ACTION_SCHEDULE, "Schedule"},
2107 {QOS_ACTION_MAP_CONFIGURE, "QoS Map Configure"},
2111 static const value_string ba_action_codes[] = {
2112 {BA_ADD_BLOCK_ACK_REQUEST, "Add Block Ack Request"},
2113 {BA_ADD_BLOCK_ACK_RESPONSE, "Add Block Ack Response"},
2114 {BA_DELETE_BLOCK_ACK, "Delete Block Ack"},
2118 static const value_string dls_action_codes[] = {
2119 {DLS_ACTION_REQUEST, "DLS Request"},
2120 {DLS_ACTION_RESPONSE, "DLS Response"},
2121 {DLS_ACTION_TEARDOWN, "DLS Teardown"},
2125 static const value_string tsinfo_type[] = {
2126 {0x0, "Aperiodic or unspecified Traffic"},
2127 {0x1, "Periodic Traffic"},
2131 static const value_string tsinfo_direction[] = {
2134 {0x02, "Direct link"},
2135 {0x03, "Bidirectional link"},
2139 static const value_string tsinfo_access[] = {
2147 static const value_string qos_up[] = {
2148 {0x00, "Best Effort"},
2149 {0x01, "Background"},
2151 {0x03, "Excellent Effort"},
2152 {0x04, "Controlled Load"},
2155 {0x07, "Network Control"},
2159 static const value_string classifier_type[] = {
2160 {0x00, "Ethernet parameters"},
2161 {0x01, "TCP/UDP IP parameters"},
2162 {0x02, "IEEE 802.1D/Q parameters"},
2166 static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
2167 "Sender Does Not Require Immediate Acknowledgement",
2168 "Immediate Acknowledgement Required"
2171 static const value_string ieee80211_block_ack_request_type_flags[] = {
2172 {0x00, "Basic Block Ack Request"},
2174 {0x02, "Compressed Block Ack Request"},
2175 {0x03, "Multi-TID Block Ack Request"},
2179 static const value_string ieee80211_block_ack_type_flags[] = {
2180 {0x00, "Basic Block Ack"},
2182 {0x02, "Compressed Block"},
2183 {0x03, "Multi-TID Block"},
2187 static const value_string ft_action_codes[] = {
2188 {FT_ACTION_REQUEST, "FT Request"},
2189 {FT_ACTION_RESPONSE, "FT Response"},
2190 {FT_ACTION_CONFIRM, "FT Confirm"},
2191 {FT_ACTION_ACK, "FT Ack"},
2195 static const value_string sa_query_action_codes[] = {
2196 {SA_QUERY_REQUEST, "SA Query Request"},
2197 {SA_QUERY_RESPONSE, "SA Query Response"},
2201 static const value_string ieee80211_data_encap_payload_types[] = {
2202 {1, "Remote Request/Response"},
2207 static const true_false_string rsn_preauth_flags = {
2208 "Transmitter supports pre-authentication",
2209 "Transmitter does not support pre-authentication"
2212 static const true_false_string rsn_no_pairwise_flags = {
2213 "Transmitter cannot support WEP default key 0 simultaneously with "
2215 "Transmitter can support WEP default key 0 simultaneously with "
2219 static const value_string rsn_cap_replay_counter[] = {
2220 {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
2221 {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
2222 {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
2223 {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
2227 static const true_false_string ht_ldpc_coding_flag = {
2228 "Transmitter supports receiving LDPC coded packets",
2229 "Transmitter does not support receiving LDPC coded packets"
2232 static const true_false_string ht_chan_width_flag = {
2233 "Transmitter supports 20MHz and 40MHz operation",
2234 "Transmitter only supports 20MHz operation"
2237 static const value_string ht_sm_pwsave_flag[] = {
2238 {0x00, "Static SM Power Save mode"},
2239 {0x01, "Dynamic SM Power Save mode"},
2241 {0x03, "SM Power Save disabled"},
2245 static const true_false_string ht_green_flag = {
2246 "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
2247 "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
2250 static const value_string ht_rx_stbc_flag[] = {
2251 {0x00, "No Rx STBC support"},
2252 {0x01, "Rx support of one spatial stream"},
2253 {0x02, "Rx support of one and two spatial streams"},
2254 {0x03, "Rx support of one, two, and three spatial streams"},
2258 /* IEEE Stc 802.11ac-2013 8.4.2.29 Extended Capabilities element*/
2259 static const value_string vht_max_mpdu_in_amsdu[] = {
2267 /* IEEE Stc 802.11ac/D3.1 */
2269 static const value_string vht_max_mpdu_length_flag[] = {
2277 static const value_string vht_supported_chan_width_set_flag[] = {
2278 {0x00, "Neither 160MHz nor 80+80 supported"},
2279 {0x01, "160MHz supported"},
2280 {0x02, "160MHz and 80+80 Supported"},
2285 static const value_string vht_rx_stbc_flag[] = {
2287 {0x01, "1 Spatial Stream Supported"},
2288 {0x02, "1 to 2 Spatial Stream Supported"},
2289 {0x03, "1 to 3 Spatial Stream Supported"},
2290 {0x04, "1 to 4 Spatial Stream Supported"},
2297 static const value_string num_plus_one_3bit_flag[] = {
2309 static const value_string vht_max_ampdu_flag[] = {
2317 {0x07, "1 048 575"},
2321 static const value_string vht_link_adapt_flag[] = {
2322 {0x00, "No Feedback"},
2323 {0x01, "Reserved (logically only solicited feedback)"},
2324 {0x02, "Unsolicited feedback only"},
2325 {0x03, "Both (can provide unsolicited feedback and respond to VHT MRQ)"},
2329 static const value_string vht_supported_mcs_flag[] = {
2333 {0x03, "Not Supported"},
2337 static const value_string vht_op_channel_width_flag[] = {
2338 {0x00, "20 MHz or 40 MHz"},
2341 {0x03, "80+80 MHz"},
2345 static const value_string vht_tpe_pwr_units[] = {
2350 static const true_false_string vht_ndp_annc_sta_info_feedback_type = {
2351 "MU feedback requested",
2352 "SU feedback requested"
2355 static const true_false_string ht_delayed_block_ack_flag = {
2356 "Transmitter supports HT-Delayed BlockAck",
2357 "Transmitter does not support HT-Delayed BlockAck"
2360 static const true_false_string ht_max_amsdu_flag = {
2365 static const true_false_string ht_dss_cck_40_flag = {
2366 "Will/Can use DSSS/CCK in 40 MHz",
2367 "Won't/Can't use of DSSS/CCK in 40 MHz"
2370 static const true_false_string ht_psmp_flag = {
2371 "Will/Can support PSMP operation",
2372 "Won't/Can't support PSMP operation"
2375 static const true_false_string ht_40_mhz_intolerant_flag = {
2376 "Use of 40 MHz transmissions restricted/disallowed",
2377 "Use of 40 MHz transmissions unrestricted/allowed"
2380 static const value_string ampduparam_mpdu_start_spacing_flags[] = {
2381 {0x00, "no restriction"},
2382 {0x01, "1/4 [usec]"},
2383 {0x02, "1/2 [usec]"},
2388 {0x07, "16 [usec]"},
2392 static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
2397 static const value_string mcsset_tx_max_spatial_streams_flags[] = {
2398 {0x00, "1 spatial stream"},
2399 {0x01, "2 spatial streams"},
2400 {0x02, "3 spatial streams"},
2401 {0x03, "4 spatial streams"},
2402 {0x04, "TX MCS Set Not Defined"},
2406 static const value_string htex_transtime_flags[] = {
2407 {0x00, "No Transition"},
2414 static const value_string htex_mcs_flags[] = {
2415 {0x00, "STA does not provide MCS feedback"},
2417 {0x02, "STA provides only unsolicited MCS feedback"},
2418 {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
2422 static const value_string txbf_calib_flag[] = {
2423 {0x00, "incapable"},
2424 {0x01, "Limited involvement, cannot initiate"},
2425 {0x02, "Limited involvement, can initiate"},
2426 {0x03, "Fully capable"},
2430 static const value_string txbf_feedback_flags[] = {
2431 {0x00, "not supported"},
2432 {0x01, "delayed feedback capable"},
2433 {0x02, "immediate feedback capable"},
2434 {0x03, "delayed and immediate feedback capable"},
2438 static const value_string txbf_antenna_flags[] = {
2439 {0x00, "1 TX antenna sounding"},
2440 {0x01, "2 TX antenna sounding"},
2441 {0x02, "3 TX antenna sounding"},
2442 {0x03, "4 TX antenna sounding"},
2446 static const value_string txbf_csi_max_rows_bf_flags[] = {
2447 {0x00, "1 row of CSI"},
2448 {0x01, "2 rows of CSI"},
2449 {0x02, "3 rows of CSI"},
2450 {0x03, "4 rows of CSI"},
2454 static const value_string txbf_chan_est_flags[] = {
2455 {0x00, "1 space time stream"},
2456 {0x01, "2 space time streams"},
2457 {0x02, "3 space time streams"},
2458 {0x03, "4 space time streams"},
2462 static const value_string txbf_min_group_flags[] = {
2463 {0x00, "No grouping supported"},
2464 {0x01, "Groups of 1, 2 supported"},
2465 {0x02, "Groups of 1, 4 supported"},
2466 {0x03, "Groups of 1, 2, 4 supported"},
2470 static const value_string hta_ext_chan_offset_flag[] = {
2471 {0x00, "No Extension Channel"},
2472 {0x01, "Extension Channel above control channel"},
2473 {0x02, "Undefined"},
2474 {0x03, "Extension Channel below control channel"},
2478 static const true_false_string hta_rec_tx_width_flag = {
2479 "Any channel width enabled",
2480 "Use 20MHz channel (control)"
2483 static const true_false_string hta_rifs_mode_flag = {
2484 "Use of RIFS permitted",
2485 "Use of RIFS prohibited"
2488 static const true_false_string hta_controlled_access_flag = {
2493 static const value_string hta_service_interval_flag[] = {
2505 static const value_string hta_operating_mode_flag[] = {
2506 {0x00, "Pure HT, no protection"},
2507 {0x01, "There may be non-HT devices (control & ext channel)"},
2508 {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
2509 {0x03, "Mixed: no non-HT is associated, protect on"},
2513 static const true_false_string hta_non_gf_devices_flag = {
2514 "All HT devices associated are GF capable",
2515 "One or More HT devices are not GF capable"
2518 static const true_false_string hta_dual_stbc_protection_flag = {
2519 "Dual CTS protections is used",
2520 "Regular use of RTS/CTS"
2523 static const true_false_string hta_secondary_beacon_flag = {
2528 static const true_false_string hta_lsig_txop_protection_flag = {
2533 static const true_false_string hta_pco_active_flag = {
2534 "PCO is activated in the BSS",
2535 "PCO is not activated in the BSS"
2538 static const true_false_string hta_pco_phase_flag = {
2539 "Switch to 20MHz phase/keep 20MHz",
2540 "Switch to 40MHz phase/keep 40MHz"
2543 static const value_string ht_info_secondary_channel_offset_flags[] = {
2544 {0x00, "No secondary channel"},
2545 {0x01, "Secondary channel is above the primary channel"},
2547 {0x03, "Secondary channel is below the primary channel"},
2551 static const true_false_string ht_info_channel_width_flag = {
2552 "Channel of any width supported",
2553 "20 MHz channel width only"
2556 static const true_false_string ht_info_rifs_mode_flag = {
2561 static const true_false_string ht_info_psmp_stas_only_flag = {
2562 "Association requests are accepted from only PSMP capable STA",
2563 "Association requests are accepted regardless of PSMP capability"
2566 static const value_string ht_info_service_interval_granularity_flags[] = {
2578 static const value_string ht_info_operating_mode_flags[] = {
2579 {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"},
2580 {0x01, "HT non-member protection mode"},
2581 {0x02, "Only HT STAs in the BSS, however, there exists at least one 20 MHz STA"},
2582 {0x03, "HT mixed mode"},
2586 static const true_false_string ht_info_non_greenfield_sta_present_flag = {
2587 "One or more associated STAs are not greenfield capable",
2588 "All associated STAs are greenfield capable"
2591 static const true_false_string ht_info_transmit_burst_limit_flag = {
2592 "2.4 GHz - 6.16 ms | All other bands - 3.08 ms",
2596 static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
2597 "Use of protection for non-HT STAs by overlapping BSSs is needed",
2598 "Use of protection for non-HT STAs by overlapping BSSs is not needed"
2601 static const true_false_string ht_info_dual_beacon_flag = {
2602 "AP transmits a secondary beacon",
2603 "No second beacon is transmitted"
2606 static const true_false_string ht_info_dual_cts_protection_flag = {
2611 static const true_false_string ht_info_secondary_beacon_flag = {
2616 static const true_false_string ht_info_lsig_txop_protection_full_support_flag = {
2617 "All HT STAs in the BSS support L-SIG TXOP protection",
2618 "One or more HT STAs in the BSS do not support L-SIG TXOP protection"
2621 static const true_false_string ht_info_pco_phase_flag = {
2622 "Switch to or continue 40 MHz phase",
2623 "Switch to or continue 20 MHz phase"
2626 static const true_false_string htc_lac_trq_flag = {
2627 "Want sounding PPDU",
2628 "Don't want sounding PPDU"
2631 static const true_false_string htc_lac_mai_mrq_flag = {
2632 "MCS feedback requested",
2633 "No MCS feedback requested"
2636 static const value_string ieee80211_htc_lac_asel_command_flags[] = {
2637 {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
2638 {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
2639 {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
2640 {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
2641 {0x04, "Sounding Label"},
2642 {0x05, "No feedback, ASEL training failure"},
2643 {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
2648 static const value_string ieee80211_htc_cal_pos_flags[] = {
2649 {0x00, "Not a calibration frame"},
2650 {0x01, "Calibration Start"},
2651 {0x02, "Sounding Response"},
2652 {0x03, "Sounding Complete"},
2656 static const value_string ieee80211_htc_csi_steering_flags[] = {
2657 {0x00, "No feedback required"},
2659 {0x02, "Non-compressed Beamforming Feedback Matrix"},
2660 {0x03, "Compressed Beamforming Feedback Matrix"},
2664 static const true_false_string ieee80211_htc_ndp_announcement_flag = {
2666 "No NDP will follow"
2669 static const value_string ieee80211_htc_bw_recommended_vht_mcs_vals[] = {
2673 {3, "160 MHz and 80+80 MHz"},
2677 static const value_string ieee80211_htc_coding_type_vals[] = {
2683 static const value_string ieee80211_htc_fb_tx_type_vals[] = {
2684 {0, "Not beamformed"},
2689 static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
2690 {0x00, "No Secondary Channel"},
2691 {0x01, "Above Primary Channel"},
2693 {0x03, "Below Primary Channel"},
2697 #define BSS_BITMASK_UP0 0x0001
2698 #define BSS_BITMASK_UP1 0x0002
2699 #define BSS_BITMASK_UP2 0x0004
2700 #define BSS_BITMASK_UP3 0x0008
2701 #define BSS_BITMASK_UP4 0x0010
2702 #define BSS_BITMASK_UP5 0x0020
2703 #define BSS_BITMASK_UP6 0x0040
2704 #define BSS_BITMASK_UP7 0x0080
2705 #define BSS_BITMASK_AC0 0x0100
2706 #define BSS_BITMASK_AC1 0x0200
2707 #define BSS_BITMASK_AC2 0x0400
2708 #define BSS_BITMASK_AC3 0x0800
2709 #define BSS_BITMASK_RSV 0xF000
2711 static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
2712 {0x00, "Frames may be transmitted before the channel switch has been completed"},
2713 {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
2717 static const value_string service_interval_granularity_vals[] = {
2729 static const value_string wep_type_vals[] = {
2730 { AIRPDCAP_KEY_TYPE_WEP, STRING_KEY_TYPE_WEP },
2731 { AIRPDCAP_KEY_TYPE_WPA_PWD, STRING_KEY_TYPE_WPA_PWD },
2732 { AIRPDCAP_KEY_TYPE_WPA_PSK, STRING_KEY_TYPE_WPA_PSK },
2736 static const value_string ieee80211_ht_pren_type_vals[] = {
2737 { 51, "HT Capabilities (802.11n D1.10)" },
2738 { 52, "HT Additional Capabilities (802.11n D1.00)" },
2742 static const true_false_string ieee80211_cf_ssw_direction = {
2743 "Transmitted by the beamforming responder",
2744 "Transmitted by the beamforming initiator"
2747 static const value_string bss_type[] = {
2751 {0x3, "Infrastructure BSS"},
2755 static const value_string band_id[] = {
2756 {0x0, "TV white spaces"},
2757 {0x1, "Sub-1 GHZ (excluding TV white spaces)"},
2760 {0x4, "4.9 and 5 GHZ"},
2765 static const value_string allocation_type[] = {
2766 {0x0, "SP Allocation"},
2767 {0x4, "CBAP allocation"},
2771 static const value_string vht_operation_info_channel_width[] = {
2772 {0x00, "20MHz or 40MHz"},
2775 {0x11, "80MHz+80MHz"},
2778 static const value_string operating_mode_field_channel_width[] = {
2782 {0x03, "160MHz or 80MHz+80MHz"},
2786 static const value_string operat_mode_field_rxnss[] = {
2798 #define VHT_ACT_VHT_COMPRESSED_BEAMFORMING 0
2799 #define VHT_ACT_GROUP_ID_MANAGEMENT 1
2800 #define VHT_ACT_OPERATION_MODE_NOTIFICATION 2
2802 static const value_string vht_action_vals[] = {
2803 {VHT_ACT_VHT_COMPRESSED_BEAMFORMING, "VHT Compressed Beamforming"},
2804 {VHT_ACT_GROUP_ID_MANAGEMENT, "Group ID Management"},
2805 {VHT_ACT_OPERATION_MODE_NOTIFICATION, "Operating Mode Notification"},
2809 static const value_string ff_vht_mimo_cntrl_nc_index_vals[] = {
2811 {0x01, "2 Columns"},
2812 {0x02, "3 Columns"},
2813 {0x03, "4 Columns"},
2814 {0x04, "5 Columns"},
2815 {0x05, "6 Columns"},
2816 {0x06, "7 Columns"},
2817 {0x07, "8 Columns"},
2821 static const value_string ff_vht_mimo_cntrl_nr_index_vals[] = {
2833 static const value_string ff_vht_mimo_cntrl_channel_width_vals[] = {
2837 {0x03, "160 MHz / 80+80 Mhz"},
2841 static const value_string ff_vht_mimo_cntrl_grouping_vals[] = {
2842 {0x00, "1 (No Grouping)"},
2849 static const value_string ff_vht_mimo_cntrl_feedback_vals[] = {
2856 static int proto_wlan = -1;
2857 static int proto_centrino = -1;
2858 static int proto_aggregate = -1;
2859 static gboolean ieee80211_tvb_invalid = FALSE;
2861 /* ************************************************************************* */
2862 /* Header field info values for FC-field */
2863 /* ************************************************************************* */
2864 static int hf_ieee80211_fc_field = -1;
2865 static int hf_ieee80211_fc_proto_version = -1;
2866 static int hf_ieee80211_fc_frame_type = -1;
2867 static int hf_ieee80211_fc_frame_subtype = -1;
2868 static int hf_ieee80211_fc_frame_extension = -1;
2869 static int hf_ieee80211_fc_frame_type_subtype = -1;
2871 static int hf_ieee80211_fc_flags = -1;
2872 static int hf_ieee80211_fc_to_ds = -1;
2873 static int hf_ieee80211_fc_from_ds = -1;
2874 static int hf_ieee80211_fc_data_ds = -1;
2876 static int hf_ieee80211_fc_more_frag = -1;
2877 static int hf_ieee80211_fc_retry = -1;
2878 static int hf_ieee80211_fc_pwr_mgt = -1;
2879 static int hf_ieee80211_fc_more_data = -1;
2880 static int hf_ieee80211_fc_protected = -1;
2881 static int hf_ieee80211_fc_order = -1;
2883 typedef struct retransmit_key {
2886 guint16 seq_control;
2890 static GHashTable *fc_analyse_retransmit_table = NULL;
2891 static GHashTable *fc_first_frame_table = NULL;
2893 static int hf_ieee80211_fc_analysis_retransmission = -1;
2894 static int hf_ieee80211_fc_analysis_retransmission_frame = -1;
2896 /* ************************************************************************* */
2897 /* Header values for Duration/ID field */
2898 /* ************************************************************************* */
2899 static int hf_ieee80211_did_duration = -1;
2900 static int hf_ieee80211_assoc_id = -1;
2902 /* ************************************************************************* */
2903 /* Header values for different address-fields (all 4 of them) */
2904 /* ************************************************************************* */
2905 static int hf_ieee80211_addr_da = -1; /* Destination address subfield */
2906 static int hf_ieee80211_addr_da_resolved = -1; /* Dst addr subfield resolved*/
2907 static int hf_ieee80211_addr_sa = -1; /* Source address subfield */
2908 static int hf_ieee80211_addr_sa_resolved = -1; /* Src addr subfield resolved*/
2909 static int hf_ieee80211_addr_ra = -1; /* Receiver address subfield */
2910 static int hf_ieee80211_addr_ra_resolved = -1; /* Rcv addr subfield resolved*/
2911 static int hf_ieee80211_addr_ta = -1; /* Transmitter address subfield */
2912 static int hf_ieee80211_addr_ta_resolved = -1; /* Txm addr subfield resolved*/
2913 static int hf_ieee80211_addr_bssid = -1; /* address is bssid */
2914 static int hf_ieee80211_addr_bssid_resolved = -1; /* bssid resolved*/
2915 static int hf_ieee80211_addr_staa = -1; /* address is station address */
2916 static int hf_ieee80211_addr_staa_resolved = -1; /* station address resolved*/
2918 static int hf_ieee80211_addr = -1; /* Source or destination address subfield */
2919 static int hf_ieee80211_addr_resolved = -1;/*Src/dst address subfield resolved*/
2921 /* ************************************************************************* */
2922 /* Header values for QoS control field */
2923 /* ************************************************************************* */
2924 static int hf_ieee80211_qos = -1;
2925 static int hf_ieee80211_qos_tid = -1;
2926 static int hf_ieee80211_qos_priority = -1;
2927 static int hf_ieee80211_qos_ack_policy = -1;
2928 static int hf_ieee80211_qos_amsdu_present = -1;
2929 static int hf_ieee80211_qos_eosp = -1;
2930 static int hf_ieee80211_qos_bit4 = -1;
2931 static int hf_ieee80211_qos_txop_limit = -1;
2932 static int hf_ieee80211_qos_ps_buf_state = -1;
2933 static int hf_ieee80211_qos_buf_state_indicated = -1;
2934 static int hf_ieee80211_qos_highest_pri_buf_ac = -1;
2935 static int hf_ieee80211_qos_qap_buf_load = -1;
2936 static int hf_ieee80211_qos_txop_dur_req = -1;
2937 static int hf_ieee80211_qos_queue_size = -1;
2939 /* ************************************************************************* */
2940 /* Header values for HT control field (+HTC) */
2941 /* ************************************************************************* */
2942 /* 802.11-2012 and 802.11ac-2013 8.2.4.6 */
2943 static int hf_ieee80211_htc = -1;
2944 static int hf_ieee80211_htc_vht = -1;
2945 static int hf_ieee80211_htc_lac = -1;
2946 static int hf_ieee80211_htc_lac_trq = -1;
2947 static int hf_ieee80211_htc_lac_mai_aseli = -1;
2948 static int hf_ieee80211_htc_lac_mai_mrq = -1;
2949 static int hf_ieee80211_htc_lac_mai_msi = -1;
2950 static int hf_ieee80211_htc_lac_mai_reserved = -1;
2951 static int hf_ieee80211_htc_lac_mfsi = -1;
2952 static int hf_ieee80211_htc_lac_mfb = -1;
2953 static int hf_ieee80211_htc_lac_asel_command = -1;
2954 static int hf_ieee80211_htc_lac_asel_data = -1;
2955 static int hf_ieee80211_htc_cal_pos = -1;
2956 static int hf_ieee80211_htc_cal_seq = -1;
2957 static int hf_ieee80211_htc_reserved1 = -1;
2958 static int hf_ieee80211_htc_csi_steering = -1;
2959 static int hf_ieee80211_htc_ndp_announcement = -1;
2960 static int hf_ieee80211_htc_reserved2 = -1;
2961 static int hf_ieee80211_htc_mrq = -1;
2962 static int hf_ieee80211_htc_msi = -1;
2963 static int hf_ieee80211_htc_msi_stbc_reserved = -1;
2964 static int hf_ieee80211_htc_compressed_msi = -1;
2965 static int hf_ieee80211_htc_ppdu_stbc_encoded = -1;
2966 static int hf_ieee80211_htc_mfsi = -1;
2967 static int hf_ieee80211_htc_gid_l = -1;
2968 static int hf_ieee80211_htc_mfb = -1;
2969 static int hf_ieee80211_htc_num_sts = -1;
2970 static int hf_ieee80211_htc_vht_mcs = -1;
2971 static int hf_ieee80211_htc_bw = -1;
2972 static int hf_ieee80211_htc_snr = -1;
2973 static int hf_ieee80211_htc_reserved3 = -1;
2974 static int hf_ieee80211_htc_gid_h = -1;
2975 static int hf_ieee80211_htc_coding_type = -1;
2976 static int hf_ieee80211_htc_fb_tx_type = -1;
2977 static int hf_ieee80211_htc_unsolicited_mfb = -1;
2978 static int hf_ieee80211_htc_ac_constraint = -1;
2979 static int hf_ieee80211_htc_rdg_more_ppdu = -1;
2981 /* ************************************************************************* */
2982 /* Header values for sequence number field */
2983 /* ************************************************************************* */
2984 static int hf_ieee80211_frag_number = -1;
2985 static int hf_ieee80211_seq_number = -1;
2987 /* ************************************************************************* */
2988 /* Header values for Frame Check field */
2989 /* ************************************************************************* */
2990 static int hf_ieee80211_fcs = -1;
2991 static int hf_ieee80211_fcs_status = -1;
2993 /* ************************************************************************* */
2994 /* Header values for reassembly */
2995 /* ************************************************************************* */
2996 static int hf_ieee80211_fragments = -1;
2997 static int hf_ieee80211_fragment = -1;
2998 static int hf_ieee80211_fragment_overlap = -1;
2999 static int hf_ieee80211_fragment_overlap_conflict = -1;
3000 static int hf_ieee80211_fragment_multiple_tails = -1;
3001 static int hf_ieee80211_fragment_too_long_fragment = -1;
3002 static int hf_ieee80211_fragment_error = -1;
3003 static int hf_ieee80211_fragment_count = -1;
3004 static int hf_ieee80211_reassembled_in = -1;
3005 static int hf_ieee80211_reassembled_length = -1;
3007 static int proto_wlan_ext = -1;
3009 /* ************************************************************************* */
3010 /* Fixed fields found in mgt frames */
3011 /* ************************************************************************* */
3012 static int hf_ieee80211_fixed_parameters = -1; /* Protocol payload for management frames */
3014 static int hf_ieee80211_ff_auth_alg = -1; /* Authentication algorithm field */
3015 static int hf_ieee80211_ff_auth_seq = -1; /* Authentication transaction sequence */
3016 static int hf_ieee80211_ff_current_ap = -1; /* Current AP MAC address */
3017 static int hf_ieee80211_ff_listen_ival = -1; /* Listen interval fixed field */
3018 static int hf_ieee80211_ff_timestamp = -1; /* 64 bit timestamp */
3019 static int hf_ieee80211_ff_beacon_interval = -1; /* 16 bit Beacon interval */
3020 static int hf_ieee80211_ff_assoc_id = -1; /* 16 bit AID field */
3021 static int hf_ieee80211_ff_reason = -1; /* 16 bit reason code */
3022 static int hf_ieee80211_ff_status_code = -1; /* Status code */
3023 static int hf_ieee80211_ff_category_code = -1; /* 8 bit Category code */
3024 static int hf_ieee80211_ff_action_code = -1; /* 8 bit Action code */
3025 static int hf_ieee80211_ff_dialog_token = -1; /* 8 bit Dialog token */
3026 static int hf_ieee80211_ff_followup_dialog_token = -1;
3027 static int hf_ieee80211_ff_wme_action_code = -1; /* Management notification action code */
3028 static int hf_ieee80211_ff_wme_status_code = -1; /* Management notification setup response status code */
3029 static int hf_ieee80211_ff_qos_action_code = -1;
3030 static int hf_ieee80211_ff_dls_action_code = -1;
3031 static int hf_ieee80211_ff_dst_mac_addr = -1; /* DLS destination MAC addressi */
3032 static int hf_ieee80211_ff_src_mac_addr = -1; /* DLS source MAC addressi */
3033 static int hf_ieee80211_ff_req_ap_addr = -1;
3034 static int hf_ieee80211_ff_res_ap_addr = -1;
3035 static int hf_ieee80211_ff_check_beacon = -1;
3036 static int hf_ieee80211_ff_dls_timeout = -1; /* DLS timeout value */
3037 static int hf_ieee80211_ff_ft_action_code = -1; /* 8 bit FT Action code */
3038 static int hf_ieee80211_ff_sta_address = -1;
3039 static int hf_ieee80211_ff_target_ap_address = -1;
3040 static int hf_ieee80211_ff_gas_comeback_delay = -1;
3041 static int hf_ieee80211_ff_gas_fragment_id = -1;
3042 static int hf_ieee80211_ff_more_gas_fragments = -1;
3043 static int hf_ieee80211_ff_query_request_length = -1;
3044 static int hf_ieee80211_ff_query_request = -1;
3045 static int hf_ieee80211_ff_query_response_length = -1;
3046 static int hf_ieee80211_ff_query_response = -1;
3047 static int hf_ieee80211_ff_anqp_info_id = -1;
3048 static int hf_ieee80211_ff_anqp_info_length = -1;
3049 static int hf_ieee80211_ff_anqp_info = -1;
3050 static int hf_ieee80211_ff_anqp_query_id = -1;
3051 static int hf_ieee80211_ff_anqp_capability = -1;
3052 static int hf_ieee80211_ff_anqp_capability_vlen = -1;
3053 static int hf_ieee80211_ff_anqp_capability_vendor = -1;
3054 static int hf_ieee80211_ff_venue_info_group = -1;
3055 static int hf_ieee80211_ff_venue_info_type = -1;
3056 static int hf_ieee80211_ff_anqp_venue_length = -1;
3057 static int hf_ieee80211_ff_anqp_venue_language = -1;
3058 static int hf_ieee80211_ff_anqp_venue_name = -1;
3059 static int hf_ieee80211_ff_anqp_nw_auth_type_indicator = -1;
3060 static int hf_ieee80211_ff_anqp_nw_auth_type_url_len = -1;
3061 static int hf_ieee80211_ff_anqp_nw_auth_type_url = -1;
3062 static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len = -1;
3063 static int hf_ieee80211_ff_anqp_roaming_consortium_oi = -1;
3064 static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6 = -1;
3065 static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4 = -1;
3066 static int hf_ieee80211_ff_anqp_nai_realm_count = -1;
3067 static int hf_ieee80211_ff_anqp_nai_field_len = -1;
3068 static int hf_ieee80211_ff_anqp_nai_realm_encoding = -1;
3069 static int hf_ieee80211_ff_anqp_nai_realm_length = -1;
3070 static int hf_ieee80211_ff_anqp_nai_realm = -1;
3071 static int hf_ieee80211_ff_anqp_nai_realm_eap_count = -1;
3072 static int hf_ieee80211_ff_anqp_nai_realm_eap_len = -1;
3073 static int hf_ieee80211_ff_anqp_nai_realm_eap_method = -1;
3074 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count = -1;
3075 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id = -1;
3076 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len = -1;
3077 static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value = -1;
3078 static int hf_ieee80211_3gpp_gc_gud = -1;
3079 static int hf_ieee80211_3gpp_gc_udhl = -1;
3080 static int hf_ieee80211_3gpp_gc_iei = -1;
3081 static int hf_ieee80211_3gpp_gc_num_plmns = -1;
3082 static int hf_ieee80211_3gpp_gc_plmn_len = -1;
3083 static int hf_ieee80211_ff_anqp_domain_name_len = -1;
3084 static int hf_ieee80211_ff_anqp_domain_name = -1;
3085 static int hf_ieee80211_ff_tdls_action_code = -1;
3086 static int hf_ieee80211_ff_target_channel = -1;
3087 static int hf_ieee80211_ff_operating_class = -1;
3088 static int hf_ieee80211_ff_wnm_action_code = -1;
3089 static int hf_ieee80211_ff_unprotected_wnm_action_code = -1;
3090 static int hf_ieee80211_ff_key_data_length = -1;
3091 static int hf_ieee80211_ff_key_data = -1;
3092 static int hf_ieee80211_ff_wnm_notification_type = -1;
3093 static int hf_ieee80211_ff_rm_action_code = -1;
3094 static int hf_ieee80211_ff_rm_dialog_token = -1;
3095 static int hf_ieee80211_ff_rm_repetitions = -1;
3096 static int hf_ieee80211_ff_rm_tx_power = -1;
3097 static int hf_ieee80211_ff_rm_max_tx_power = -1;
3098 static int hf_ieee80211_ff_tpc = -1;
3099 static int hf_ieee80211_ff_tpc_element_id = -1;
3100 static int hf_ieee80211_ff_tpc_length = -1;
3101 static int hf_ieee80211_ff_tpc_tx_power = -1;
3102 static int hf_ieee80211_ff_tpc_link_margin = -1;
3103 static int hf_ieee80211_ff_rm_rx_antenna_id = -1;
3104 static int hf_ieee80211_ff_rm_tx_antenna_id = -1;
3105 static int hf_ieee80211_ff_rm_rcpi = -1;
3106 static int hf_ieee80211_ff_rm_rsni = -1;
3107 static int hf_ieee80211_ff_request_mode_pref_cand = -1;
3108 static int hf_ieee80211_ff_request_mode_abridged = -1;
3109 static int hf_ieee80211_ff_request_mode_disassoc_imminent = -1;
3110 static int hf_ieee80211_ff_request_mode_bss_term_included = -1;
3111 static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent = -1;
3112 static int hf_ieee80211_ff_disassoc_timer = -1;
3113 static int hf_ieee80211_ff_validity_interval = -1;
3114 static int hf_ieee80211_ff_bss_termination_duration = -1;
3115 static int hf_ieee80211_ff_url_len = -1;
3116 static int hf_ieee80211_ff_url = -1;
3117 static int hf_ieee80211_ff_target_bss = -1;
3118 static int hf_ieee80211_ff_bss_transition_status_code = -1;
3119 static int hf_ieee80211_ff_bss_termination_delay = -1;
3120 static int hf_ieee80211_ff_bss_transition_candidate_list_entries = -1;
3122 static int hf_ieee80211_ff_sa_query_action_code = -1;
3123 static int hf_ieee80211_ff_transaction_id = -1;
3125 /* Vendor specific */
3126 static int hf_ieee80211_ff_marvell_action_type = -1;
3127 static int hf_ieee80211_ff_marvell_mesh_mgt_action_code = -1;
3128 static int hf_ieee80211_ff_marvell_mesh_mgt_length = -1; /* Mesh Management length */
3129 static int hf_ieee80211_ff_marvell_mesh_mgt_mode = -1; /* Mesh Management mode */
3130 static int hf_ieee80211_ff_marvell_mesh_mgt_ttl = -1; /* Mesh Management TTL */
3131 static int hf_ieee80211_ff_marvell_mesh_mgt_dstcount = -1; /* Mesh Management dst count */
3132 static int hf_ieee80211_ff_marvell_mesh_mgt_hopcount = -1; /* Mesh Management hop count */
3133 static int hf_ieee80211_ff_marvell_mesh_mgt_rreqid = -1; /* Mesh Management RREQ ID */
3134 static int hf_ieee80211_ff_marvell_mesh_mgt_sa = -1; /* Mesh Management src addr */
3135 static int hf_ieee80211_ff_marvell_mesh_mgt_ssn = -1; /* Mesh Management src sequence number */
3136 static int hf_ieee80211_ff_marvell_mesh_mgt_metric = -1; /* Mesh Management metric */
3137 static int hf_ieee80211_ff_marvell_mesh_mgt_flags = -1; /* Mesh Management RREQ flags */
3138 static int hf_ieee80211_ff_marvell_mesh_mgt_da = -1; /* Mesh Management dst addr */
3139 static int hf_ieee80211_ff_marvell_mesh_mgt_dsn = -1; /* Mesh Management dst sequence number */
3140 static int hf_ieee80211_ff_marvell_mesh_mgt_lifetime = -1; /* Mesh Management lifetime */
3143 static int hf_ieee80211_ff_ba_action = -1;
3145 static int hf_ieee80211_ff_block_ack_params = -1;
3146 static int hf_ieee80211_ff_block_ack_params_amsdu_permitted = -1;
3147 static int hf_ieee80211_ff_block_ack_params_policy = -1;
3148 static int hf_ieee80211_ff_block_ack_params_tid = -1;
3149 static int hf_ieee80211_ff_block_ack_params_buffer_size = -1;
3151 static const int *ieee80211_ff_block_ack_params_fields[] = {
3152 &hf_ieee80211_ff_block_ack_params_amsdu_permitted,
3153 &hf_ieee80211_ff_block_ack_params_policy,
3154 &hf_ieee80211_ff_block_ack_params_tid,
3155 &hf_ieee80211_ff_block_ack_params_buffer_size,
3159 static int hf_ieee80211_ff_block_ack_timeout = -1;
3161 static int hf_ieee80211_ff_block_ack_ssc = -1;
3162 static int hf_ieee80211_ff_block_ack_ssc_fragment = -1;
3163 static int hf_ieee80211_ff_block_ack_ssc_sequence = -1;
3165 static const int *ieee80211_ff_block_ack_ssc_fields[] = {
3166 &hf_ieee80211_ff_block_ack_ssc_fragment,
3167 &hf_ieee80211_ff_block_ack_ssc_sequence,
3171 static int hf_ieee80211_ff_delba_param = -1;
3172 static int hf_ieee80211_ff_delba_param_reserved = -1;
3173 static int hf_ieee80211_ff_delba_param_init = -1;
3174 static int hf_ieee80211_ff_delba_param_tid = -1;
3176 static const int *ieee80211_ff_delba_param_fields[] = {
3177 &hf_ieee80211_ff_delba_param_reserved,
3178 &hf_ieee80211_ff_delba_param_init,
3179 &hf_ieee80211_ff_delba_param_tid,
3183 static int hf_ieee80211_ff_max_reg_pwr = -1;
3184 static int hf_ieee80211_ff_measurement_pilot_int = -1;
3185 static int hf_ieee80211_ff_country_str = -1;
3186 static int hf_ieee80211_ff_max_tx_pwr = -1;
3187 static int hf_ieee80211_ff_tx_pwr_used = -1;
3188 static int hf_ieee80211_ff_transceiver_noise_floor = -1;
3189 static int hf_ieee80211_ff_channel_width = -1;
3191 static int hf_ieee80211_ff_qos_info_ap = -1;
3192 static int hf_ieee80211_ff_qos_info_ap_edca_param_set_counter = -1;
3193 static int hf_ieee80211_ff_qos_info_ap_q_ack = -1;
3194 static int hf_ieee80211_ff_qos_info_ap_queue_req = -1;
3195 static int hf_ieee80211_ff_qos_info_ap_txop_request = -1;
3196 static int hf_ieee80211_ff_qos_info_ap_reserved = -1;
3198 static const int *ieee80211_ff_qos_info_ap_fields[] = {
3199 &hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
3200 &hf_ieee80211_ff_qos_info_ap_q_ack,
3201 &hf_ieee80211_ff_qos_info_ap_queue_req,
3202 &hf_ieee80211_ff_qos_info_ap_txop_request,
3203 &hf_ieee80211_ff_qos_info_ap_reserved,
3207 static int hf_ieee80211_ff_qos_info_sta = -1;
3208 static int hf_ieee80211_ff_qos_info_sta_ac_vo = -1;
3209 static int hf_ieee80211_ff_qos_info_sta_ac_vi = -1;
3210 static int hf_ieee80211_ff_qos_info_sta_ac_bk = -1;
3211 static int hf_ieee80211_ff_qos_info_sta_ac_be = -1;
3212 static int hf_ieee80211_ff_qos_info_sta_q_ack = -1;
3213 static int hf_ieee80211_ff_qos_info_sta_max_sp_length = -1;
3214 static int hf_ieee80211_ff_qos_info_sta_more_data_ack = -1;
3216 static const int *ieee80211_ff_qos_info_sta_fields[] = {
3217 &hf_ieee80211_ff_qos_info_sta_ac_vo,
3218 &hf_ieee80211_ff_qos_info_sta_ac_vi,
3219 &hf_ieee80211_ff_qos_info_sta_ac_bk,
3220 &hf_ieee80211_ff_qos_info_sta_ac_be,
3221 &hf_ieee80211_ff_qos_info_sta_q_ack,
3222 &hf_ieee80211_ff_qos_info_sta_max_sp_length,
3223 &hf_ieee80211_ff_qos_info_sta_more_data_ack,
3227 static int hf_ieee80211_ff_sm_pwr_save = -1;
3228 static int hf_ieee80211_ff_sm_pwr_save_enabled = -1;
3229 static int hf_ieee80211_ff_sm_pwr_save_sm_mode = -1;
3230 static int hf_ieee80211_ff_sm_pwr_save_reserved = -1;
3232 static const int *ieee80211_ff_sw_pwr_save_fields[] = {
3233 &hf_ieee80211_ff_sm_pwr_save_enabled,
3234 &hf_ieee80211_ff_sm_pwr_save_sm_mode,
3235 &hf_ieee80211_ff_sm_pwr_save_reserved,
3239 static int hf_ieee80211_ff_pco_phase_cntrl = -1;
3241 static int hf_ieee80211_ff_psmp_param_set = -1;
3242 static int hf_ieee80211_ff_psmp_param_set_n_sta = -1;
3243 static int hf_ieee80211_ff_psmp_param_set_more_psmp = -1;
3244 static int hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration = -1;
3246 static const int *ieee80211_ff_psmp_param_set_fields[] = {
3247 &hf_ieee80211_ff_psmp_param_set_n_sta,
3248 &hf_ieee80211_ff_psmp_param_set_more_psmp,
3249 &hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
3253 static int hf_ieee80211_ff_mimo_cntrl = -1;
3254 static int hf_ieee80211_ff_mimo_cntrl_nc_index = -1;
3255 static int hf_ieee80211_ff_mimo_cntrl_nr_index = -1;
3256 static int hf_ieee80211_ff_mimo_cntrl_channel_width = -1;
3257 static int hf_ieee80211_ff_mimo_cntrl_grouping = -1;
3258 static int hf_ieee80211_ff_mimo_cntrl_coefficient_size = -1;
3259 static int hf_ieee80211_ff_mimo_cntrl_codebook_info = -1;
3260 static int hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment = -1;
3261 static int hf_ieee80211_ff_mimo_cntrl_reserved = -1;
3262 static int hf_ieee80211_ff_mimo_cntrl_sounding_timestamp = -1;
3264 static int hf_ieee80211_ff_ant_selection = -1;
3265 static int hf_ieee80211_ff_ant_selection_0 = -1;
3266 static int hf_ieee80211_ff_ant_selection_1 = -1;
3267 static int hf_ieee80211_ff_ant_selection_2 = -1;
3268 static int hf_ieee80211_ff_ant_selection_3 = -1;
3269 static int hf_ieee80211_ff_ant_selection_4 = -1;
3270 static int hf_ieee80211_ff_ant_selection_5 = -1;
3271 static int hf_ieee80211_ff_ant_selection_6 = -1;
3272 static int hf_ieee80211_ff_ant_selection_7 = -1;
3274 static const int *ieee80211_ff_ant_selection_fields[] = {
3275 &hf_ieee80211_ff_ant_selection_0,
3276 &hf_ieee80211_ff_ant_selection_1,
3277 &hf_ieee80211_ff_ant_selection_2,
3278 &hf_ieee80211_ff_ant_selection_3,
3279 &hf_ieee80211_ff_ant_selection_4,
3280 &hf_ieee80211_ff_ant_selection_5,
3281 &hf_ieee80211_ff_ant_selection_6,
3282 &hf_ieee80211_ff_ant_selection_7,
3286 static int hf_ieee80211_ff_ext_channel_switch_announcement = -1;
3287 static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode = -1;
3288 static int hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class = -1;
3289 static int hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number = -1;
3290 static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_count = -1;
3292 static const int *ieee80211_ff_ext_channel_switch_announcement_fields[] = {
3293 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
3294 &hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
3295 &hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
3296 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
3300 static int hf_ieee80211_ff_ht_info = -1;
3301 static int hf_ieee80211_ff_ht_info_information_request = -1;
3302 static int hf_ieee80211_ff_ht_info_40_mhz_intolerant = -1;
3303 static int hf_ieee80211_ff_ht_info_sta_chan_width = -1;
3304 static int hf_ieee80211_ff_ht_info_reserved = -1;
3306 static const int *ieee80211_ff_ht_info_fields[] = {
3307 &hf_ieee80211_ff_ht_info_information_request,
3308 &hf_ieee80211_ff_ht_info_40_mhz_intolerant,
3309 &hf_ieee80211_ff_ht_info_sta_chan_width,
3310 &hf_ieee80211_ff_ht_info_reserved,
3314 static int hf_ieee80211_ff_ht_action = -1;
3316 static int hf_ieee80211_ff_psmp_sta_info = -1;
3317 static int hf_ieee80211_ff_psmp_sta_info_type = -1;
3318 static int hf_ieee80211_ff_psmp_sta_info_dtt_start_offset = -1;
3319 static int hf_ieee80211_ff_psmp_sta_info_dtt_duration = -1;
3320 static int hf_ieee80211_ff_psmp_sta_info_sta_id = -1;
3321 static int hf_ieee80211_ff_psmp_sta_info_utt_start_offset = -1;
3322 static int hf_ieee80211_ff_psmp_sta_info_utt_duration = -1;
3323 static int hf_ieee80211_ff_psmp_sta_info_reserved_small= -1;
3324 static int hf_ieee80211_ff_psmp_sta_info_reserved_large = -1;
3325 static int hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id = -1;
3327 static int hf_ieee80211_ff_mimo_csi_snr = -1;
3328 static int hf_ieee80211_ff_mimo_csi_matrices = -1;
3329 static int hf_ieee80211_ff_mimo_csi_bf_matrices = -1;
3330 static int hf_ieee80211_ff_mimo_csi_cbf_matrices = -1;
3332 /*** Begin: 802.11s additions ***/
3333 static int hf_ieee80211_mesh_control_field = -1;
3335 static int hf_ieee80211_ff_mesh_action = -1;
3336 static int hf_ieee80211_ff_multihop_action = -1;
3337 static int hf_ieee80211_ff_mesh_flags = -1;
3338 static int hf_ieee80211_ff_mesh_ttl = -1;
3339 static int hf_ieee80211_ff_mesh_sequence = -1;
3340 static int hf_ieee80211_ff_mesh_addr4 = -1;
3341 static int hf_ieee80211_ff_mesh_addr5 = -1;
3342 static int hf_ieee80211_ff_mesh_addr6 = -1;
3343 static int hf_ieee80211_ff_selfprot_action = -1;
3345 static int hf_ieee80211_mesh_peering_proto = -1;
3346 static int hf_ieee80211_mesh_peering_local_link_id = -1;
3347 static int hf_ieee80211_mesh_peering_peer_link_id = -1;
3349 static int hf_ieee80211_ff_hwmp_flags = -1;
3350 static int hf_ieee80211_ff_hwmp_hopcount = -1;
3351 static int hf_ieee80211_ff_hwmp_ttl = -1;
3352 static int hf_ieee80211_ff_hwmp_pdid = -1;
3353 static int hf_ieee80211_ff_hwmp_orig_sta = -1;
3354 static int hf_ieee80211_ff_hwmp_orig_sn = -1;
3355 static int hf_ieee80211_ff_hwmp_orig_ext = -1;
3356 static int hf_ieee80211_ff_hwmp_lifetime = -1;
3357 static int hf_ieee80211_ff_hwmp_metric = -1;
3358 static int hf_ieee80211_ff_hwmp_targ_count = -1;
3359 static int hf_ieee80211_ff_hwmp_targ_flags = -1;
3360 static int hf_ieee80211_ff_hwmp_targ_to_flags = -1;
3361 static int hf_ieee80211_ff_hwmp_targ_usn_flags = -1;
3362 static int hf_ieee80211_ff_hwmp_targ_sta = -1;
3363 static int hf_ieee80211_ff_hwmp_targ_sn = -1;
3364 static int hf_ieee80211_ff_hwmp_targ_ext = -1;
3365 static int hf_ieee80211_rann_flags = -1;
3366 static int hf_ieee80211_rann_root_sta = -1;
3367 static int hf_ieee80211_rann_sn = -1;
3368 static int hf_ieee80211_rann_interval = -1;
3370 static int hf_ieee80211_mesh_channel_switch_ttl = -1;
3371 static int hf_ieee80211_mesh_channel_switch_flag = -1;
3372 static int hf_ieee80211_mesh_channel_switch_reason_code = -1;
3373 static int hf_ieee80211_mesh_channel_switch_precedence_value = -1;
3374 static int hf_ieee80211_mesh_chswitch_flag_txrestrict = -1;
3375 static int hf_ieee80211_mesh_chswitch_flag_initiator = -1;
3377 static int hf_ieee80211_mesh_config_path_sel_protocol = -1;
3378 static int hf_ieee80211_mesh_config_path_sel_metric = -1;
3379 static int hf_ieee80211_mesh_config_congestion_control = -1;
3380 static int hf_ieee80211_mesh_config_sync_method = -1;
3381 static int hf_ieee80211_mesh_config_auth_protocol = -1;
3382 static int hf_ieee80211_mesh_config_formation_info = -1;
3383 static int hf_ieee80211_mesh_config_capability = -1;
3384 static int hf_ieee80211_mesh_id = -1;
3385 static int hf_ieee80211_mesh_config_cap_accepting = -1;
3386 static int hf_ieee80211_mesh_config_cap_mcca_support = -1;
3387 static int hf_ieee80211_mesh_config_cap_mcca_enabled = -1;
3388 static int hf_ieee80211_mesh_config_cap_forwarding = -1;
3389 static int hf_ieee80211_mesh_config_cap_mbca_enabled = -1;
3390 static int hf_ieee80211_mesh_config_cap_tbtt_adjusting = -1;
3391 static int hf_ieee80211_mesh_config_cap_power_save_level = -1;
3392 static int hf_ieee80211_mesh_form_info_num_of_peerings = -1;
3393 static int hf_ieee80211_mesh_awake_window = -1;
3395 static int hf_ieee80211_ff_public_action = -1;
3396 static int hf_ieee80211_ff_protected_public_action = -1;
3397 static int hf_ieee80211_ff_tod = -1;
3398 static int hf_ieee80211_ff_toa = -1;
3399 static int hf_ieee80211_ff_max_tod_err = -1;
3400 static int hf_ieee80211_ff_max_toa_err = -1;
3402 /* ************************************************************************* */
3403 /* Flags found in the capability field (fixed field) */
3404 /* ************************************************************************* */
3405 static int hf_ieee80211_ff_capture = -1;
3406 static int hf_ieee80211_ff_cf_ess = -1;
3407 static int hf_ieee80211_ff_cf_ibss = -1;
3408 static int hf_ieee80211_ff_cf_sta_poll = -1; /* CF pollable status for a STA */
3409 static int hf_ieee80211_ff_cf_ap_poll = -1; /* CF pollable status for an AP */
3410 static int hf_ieee80211_ff_cf_privacy = -1;
3411 static int hf_ieee80211_ff_cf_preamble = -1;
3412 static int hf_ieee80211_ff_cf_pbcc = -1;
3413 static int hf_ieee80211_ff_cf_agility = -1;
3414 static int hf_ieee80211_ff_short_slot_time = -1;
3415 static int hf_ieee80211_ff_dsss_ofdm = -1;
3416 static int hf_ieee80211_ff_cf_spec_man = -1;
3417 static int hf_ieee80211_ff_cf_apsd = -1;
3418 static int hf_ieee80211_ff_radio_measurement = -1;
3419 static int hf_ieee80211_ff_cf_del_blk_ack = -1;
3420 static int hf_ieee80211_ff_cf_imm_blk_ack = -1;
3422 /* ************************************************************************* */
3424 /* ************************************************************************* */
3425 static int hf_ieee80211_amsdu_subframe = -1;
3426 static int hf_ieee80211_amsdu_length = -1;
3428 /* ************************************************************************* */
3429 /* Tagged value format fields */
3430 /* ************************************************************************* */
3431 static int hf_ieee80211_tagged_parameters = -1; /* Tagged payload item */
3432 static int hf_ieee80211_tag = -1;
3433 static int hf_ieee80211_tag_number = -1;
3434 static int hf_ieee80211_tag_length = -1;
3435 static int hf_ieee80211_tag_interpretation = -1;
3436 static int hf_ieee80211_tag_data = -1;
3437 static int hf_ieee80211_tag_oui = -1;
3438 static int hf_ieee80211_tag_oui_wfa_subtype = -1;
3439 static int hf_ieee80211_tag_ssid = -1;
3440 static int hf_ieee80211_tag_supp_rates = -1;
3441 static int hf_ieee80211_tag_fh_dwell_time = -1;
3442 static int hf_ieee80211_tag_fh_hop_set = -1;
3443 static int hf_ieee80211_tag_fh_hop_pattern = -1;
3444 static int hf_ieee80211_tag_fh_hop_index = -1;
3445 static int hf_ieee80211_tag_ds_param_channel = -1;
3446 static int hf_ieee80211_tag_cfp_count = -1;
3447 static int hf_ieee80211_tag_cfp_period = -1;
3448 static int hf_ieee80211_tag_cfp_max_duration = -1;
3449 static int hf_ieee80211_tag_cfp_dur_remaining = -1;
3450 static int hf_ieee80211_tim_dtim_count = -1;
3451 static int hf_ieee80211_tim_dtim_period = -1;
3452 static int hf_ieee80211_tim_bmapctl = -1;
3453 static int hf_ieee80211_tim_bmapctl_mcast = -1;
3454 static int hf_ieee80211_tim_bmapctl_offset = -1;
3455 static int hf_ieee80211_tim_partial_virtual_bitmap = -1;
3456 static int hf_ieee80211_tim_aid = -1;
3457 static int hf_ieee80211_tag_ibss_atim_window = -1;
3458 static int hf_ieee80211_tag_country_info_code = -1;
3459 static int hf_ieee80211_tag_country_info_env = -1;
3460 static int hf_ieee80211_tag_country_info_pad = -1;
3461 static int hf_ieee80211_tag_country_info_fnm = -1;
3462 static int hf_ieee80211_tag_country_info_fnm_fcn = -1;
3463 static int hf_ieee80211_tag_country_info_fnm_nc = -1;
3464 static int hf_ieee80211_tag_country_info_fnm_mtpl = -1;
3465 static int hf_ieee80211_tag_country_info_rrc = -1;
3466 static int hf_ieee80211_tag_country_info_rrc_oei = -1;
3467 static int hf_ieee80211_tag_country_info_rrc_oc = -1;
3468 static int hf_ieee80211_tag_country_info_rrc_cc = -1;
3469 static int hf_ieee80211_tag_fh_hopping_parameter_prime_radix = -1;
3470 static int hf_ieee80211_tag_fh_hopping_parameter_nb_channels = -1;
3471 static int hf_ieee80211_tag_fh_hopping_table_flag = -1;
3472 static int hf_ieee80211_tag_fh_hopping_table_number_of_sets = -1;
3473 static int hf_ieee80211_tag_fh_hopping_table_modulus = -1;
3474 static int hf_ieee80211_tag_fh_hopping_table_offset = -1;
3475 static int hf_ieee80211_tag_fh_hopping_random_table = -1;
3476 static int hf_ieee80211_tag_request = -1;
3477 static int hf_ieee80211_tag_challenge_text = -1;
3479 static int hf_ieee80211_wep_iv = -1;
3480 static int hf_ieee80211_wep_iv_weak = -1;
3481 static int hf_ieee80211_tkip_extiv = -1;
3482 static int hf_ieee80211_ccmp_extiv = -1;
3483 static int hf_ieee80211_wep_key = -1;
3484 static int hf_ieee80211_wep_icv = -1;
3485 static int hf_ieee80211_fc_analysis_pmk = -1;
3486 static int hf_ieee80211_fc_analysis_tk = -1;
3487 static int hf_ieee80211_fc_analysis_gtk = -1;
3489 static int hf_ieee80211_block_ack_request_control = -1;
3490 static int hf_ieee80211_block_ack_control = -1;
3491 static int hf_ieee80211_block_ack_control_ack_policy = -1;
3492 static int hf_ieee80211_block_ack_control_multi_tid = -1;
3493 static int hf_ieee80211_block_ack_control_compressed_bitmap = -1;
3494 static int hf_ieee80211_block_ack_control_reserved = -1;
3496 static int hf_ieee80211_block_ack_control_basic_tid_info = -1;
3497 static int hf_ieee80211_block_ack_control_compressed_tid_info = -1;
3498 static int hf_ieee80211_block_ack_control_multi_tid_info = -1;
3500 static int hf_ieee80211_block_ack_multi_tid_info = -1;
3501 static int hf_ieee80211_block_ack_request_type = -1;
3502 static int hf_ieee80211_block_ack_multi_tid_reserved = -1;
3503 static int hf_ieee80211_block_ack_multi_tid_value = -1;
3504 static int hf_ieee80211_block_ack_type = -1;
3505 static int hf_ieee80211_block_ack_bitmap = -1;
3506 static int hf_ieee80211_block_ack_bitmap_missing_frame = -1;
3508 static int hf_ieee80211_tag_measure_request_measurement_mode = -1;
3509 static int hf_ieee80211_tag_measure_request_bssid = -1;
3511 static int hf_ieee80211_tag_measure_request_subelement_length = -1;
3512 static int hf_ieee80211_tag_measure_request_beacon_sub_id = -1;
3513 static int hf_ieee80211_tag_measure_request_beacon_sub_ssid = -1;
3514 static int hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition = -1;
3515 static int hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset = -1;
3516 static int hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail = -1;
3517 static int hf_ieee80211_tag_measure_request_beacon_sub_request = -1;
3518 static int hf_ieee80211_tag_measure_request_beacon_unknown = -1;
3520 static int hf_ieee80211_tag_measure_request_channel_load_sub_id = -1;
3521 static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition = -1;
3522 static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref = -1;
3524 static int hf_ieee80211_tag_measure_request_noise_histogram_sub_id = -1;
3525 static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition = -1;
3526 static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref = -1;
3528 static int hf_ieee80211_tag_measure_request_frame_request_type = -1;
3529 static int hf_ieee80211_tag_measure_request_mac_address = -1;
3530 static int hf_ieee80211_tag_measure_request_peer_mac_address = -1;
3531 static int hf_ieee80211_tag_measure_request_group_id = -1;
3533 static int hf_ieee80211_tag_measure_request_unknown = -1;
3535 static int hf_ieee80211_ht_pren_type = -1;
3536 static int hf_ieee80211_ht_pren_unknown = -1;
3538 static int hf_ieee80211_ht_cap = -1;
3539 static int hf_ieee80211_ht_vs_cap = -1;
3540 static int hf_ieee80211_ht_ldpc_coding = -1;
3541 static int hf_ieee80211_ht_chan_width = -1;
3542 static int hf_ieee80211_ht_sm_pwsave = -1;
3543 static int hf_ieee80211_ht_green = -1;
3544 static int hf_ieee80211_ht_short20 = -1;
3545 static int hf_ieee80211_ht_short40 = -1;
3546 static int hf_ieee80211_ht_tx_stbc = -1;
3547 static int hf_ieee80211_ht_rx_stbc = -1;
3548 static int hf_ieee80211_ht_delayed_block_ack = -1;
3549 static int hf_ieee80211_ht_max_amsdu = -1;
3550 static int hf_ieee80211_ht_dss_cck_40 = -1;
3551 static int hf_ieee80211_ht_psmp = -1;
3552 static int hf_ieee80211_ht_40_mhz_intolerant = -1;
3553 static int hf_ieee80211_ht_l_sig = -1;
3555 static int hf_ieee80211_ext_bss_mu_mimo_capable_sta_count = -1;
3556 static int hf_ieee80211_ext_bss_ss_underutilization = -1;
3557 static int hf_ieee80211_ext_bss_observable_sec_20mhz_utilization = -1;
3558 static int hf_ieee80211_ext_bss_observable_sec_40mhz_utilization = -1;
3559 static int hf_ieee80211_ext_bss_observable_sec_80mhz_utilization = -1;
3560 static int hf_ieee80211_wide_bw_new_channel_width = -1;
3561 static int hf_ieee80211_wide_bw_new_channel_center_freq_segment0 = -1;
3562 static int hf_ieee80211_wide_bw_new_channel_center_freq_segment1 = -1;
3564 static int hf_ieee80211_operat_notification_mode = -1;
3565 static int hf_ieee80211_operat_mode_field_channel_width = -1;
3566 static int hf_ieee80211_operat_mode_field_reserved = -1;
3567 static int hf_ieee80211_operat_mode_field_rxnss = -1;
3568 static int hf_ieee80211_operat_mode_field_rxnsstype= -1;
3569 static int hf_ieee80211_ampduparam = -1;
3570 static int hf_ieee80211_ampduparam_vs = -1;
3571 static int hf_ieee80211_ampduparam_mpdu = -1;
3572 static int hf_ieee80211_ampduparam_mpdu_start_spacing = -1;
3573 static int hf_ieee80211_ampduparam_reserved = -1;
3575 static int hf_ieee80211_mcsset = -1;
3576 static int hf_ieee80211_mcsset_vs = -1;
3577 static int hf_ieee80211_mcsset_rx_bitmask = -1;
3578 static int hf_ieee80211_mcsset_rx_bitmask_0to7 = -1;
3579 static int hf_ieee80211_mcsset_rx_bitmask_8to15 = -1;
3580 static int hf_ieee80211_mcsset_rx_bitmask_16to23 = -1;
3581 static int hf_ieee80211_mcsset_rx_bitmask_24to31 = -1;
3582 static int hf_ieee80211_mcsset_rx_bitmask_32 = -1;
3583 static int hf_ieee80211_mcsset_rx_bitmask_33to38 = -1;
3584 static int hf_ieee80211_mcsset_rx_bitmask_39to52 = -1;
3585 static int hf_ieee80211_mcsset_rx_bitmask_53to76 = -1;
3586 static int hf_ieee80211_mcsset_highest_data_rate = -1;
3587 static int hf_ieee80211_mcsset_tx_mcs_set_defined = -1;
3588 static int hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal = -1;
3589 static int hf_ieee80211_mcsset_tx_max_spatial_streams = -1;
3590 static int hf_ieee80211_mcsset_tx_unequal_modulation = -1;
3592 static int hf_ieee80211_htex_cap = -1;
3593 static int hf_ieee80211_htex_vs_cap = -1;
3594 static int hf_ieee80211_htex_pco = -1;
3595 static int hf_ieee80211_htex_transtime = -1;
3596 static int hf_ieee80211_htex_mcs = -1;
3597 static int hf_ieee80211_htex_htc_support = -1;
3598 static int hf_ieee80211_htex_rd_responder = -1;
3600 static int hf_ieee80211_txbf = -1;
3601 static int hf_ieee80211_txbf_vs = -1;
3602 static int hf_ieee80211_txbf_cap = -1;
3603 static int hf_ieee80211_txbf_rcv_ssc = -1;
3604 static int hf_ieee80211_txbf_tx_ssc = -1;
3605 static int hf_ieee80211_txbf_rcv_ndp = -1;
3606 static int hf_ieee80211_txbf_tx_ndp = -1;
3607 static int hf_ieee80211_txbf_impl_txbf = -1;
3608 static int hf_ieee80211_txbf_calib = -1;
3609 static int hf_ieee80211_txbf_expl_csi = -1;
3610 static int hf_ieee80211_txbf_expl_uncomp_fm = -1;
3611 static int hf_ieee80211_txbf_expl_comp_fm = -1;
3612 static int hf_ieee80211_txbf_expl_bf_csi = -1;
3613 static int hf_ieee80211_txbf_expl_uncomp_fm_feed = -1;
3614 static int hf_ieee80211_txbf_expl_comp_fm_feed = -1;
3615 static int hf_ieee80211_txbf_csi_num_bf_ant = -1;
3616 static int hf_ieee80211_txbf_min_group = -1;
3617 static int hf_ieee80211_txbf_uncomp_sm_bf_ant = -1;
3618 static int hf_ieee80211_txbf_comp_sm_bf_ant = -1;
3619 static int hf_ieee80211_txbf_csi_max_rows_bf = -1;
3620 static int hf_ieee80211_txbf_chan_est = -1;
3621 static int hf_ieee80211_txbf_resrv = -1;
3623 /*** Begin: 802.11n D1.10 - HT Information IE ***/
3624 static int hf_ieee80211_ht_info_primary_channel = -1;
3626 static int hf_ieee80211_ht_info_delimiter1 = -1;
3627 static int hf_ieee80211_ht_info_secondary_channel_offset = -1;
3628 static int hf_ieee80211_ht_info_channel_width = -1;
3629 static int hf_ieee80211_ht_info_rifs_mode = -1;
3630 static int hf_ieee80211_ht_info_psmp_stas_only = -1;
3631 static int hf_ieee80211_ht_info_service_interval_granularity = -1;
3633 static int hf_ieee80211_ht_info_delimiter2 = -1;
3634 static int hf_ieee80211_ht_info_operating_mode = -1;
3635 static int hf_ieee80211_ht_info_non_greenfield_sta_present = -1;
3636 static int hf_ieee80211_ht_info_transmit_burst_limit = -1;
3637 static int hf_ieee80211_ht_info_obss_non_ht_stas_present = -1;
3638 static int hf_ieee80211_ht_info_reserved_1 = -1;
3640 static int hf_ieee80211_ht_info_delimiter3 = -1;
3641 static int hf_ieee80211_ht_info_reserved_2 = -1;
3642 static int hf_ieee80211_ht_info_dual_beacon = -1;
3643 static int hf_ieee80211_ht_info_dual_cts_protection = -1;
3644 static int hf_ieee80211_ht_info_secondary_beacon = -1;
3645 static int hf_ieee80211_ht_info_lsig_txop_protection_full_support = -1;
3646 static int hf_ieee80211_ht_info_pco_active = -1;
3647 static int hf_ieee80211_ht_info_pco_phase = -1;
3648 static int hf_ieee80211_ht_info_reserved_3 = -1;
3649 /*** End: 802.11n D1.10 - HT Information IE ***/
3651 static int hf_ieee80211_tag_ap_channel_report_operating_class = -1;
3652 static int hf_ieee80211_tag_ap_channel_report_channel_list = -1;
3654 static int hf_ieee80211_tag_secondary_channel_offset = -1;
3656 static int hf_ieee80211_tag_bss_ap_avg_access_delay = -1;
3658 static int hf_ieee80211_tag_antenna_id = -1;
3660 static int hf_ieee80211_tag_rsni = -1;
3662 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask = -1;
3663 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0 = -1;
3664 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1 = -1;
3665 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2 = -1;
3666 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3 = -1;
3667 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4 = -1;
3668 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5 = -1;
3669 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6 = -1;
3670 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7 = -1;
3671 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0 = -1;
3672 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1 = -1;
3673 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2 = -1;
3674 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3 = -1;
3675 static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv = -1;
3676 static int hf_ieee80211_tag_bss_avb_adm_cap_up0 = -1;
3677 static int hf_ieee80211_tag_bss_avb_adm_cap_up1 = -1;
3678 static int hf_ieee80211_tag_bss_avb_adm_cap_up2 = -1;
3679 static int hf_ieee80211_tag_bss_avb_adm_cap_up3 = -1;
3680 static int hf_ieee80211_tag_bss_avb_adm_cap_up4 = -1;
3681 static int hf_ieee80211_tag_bss_avb_adm_cap_up5 = -1;
3682 static int hf_ieee80211_tag_bss_avb_adm_cap_up6 = -1;
3683 static int hf_ieee80211_tag_bss_avb_adm_cap_up7 = -1;
3684 static int hf_ieee80211_tag_bss_avb_adm_cap_ac0 = -1;
3685 static int hf_ieee80211_tag_bss_avb_adm_cap_ac1 = -1;
3686 static int hf_ieee80211_tag_bss_avb_adm_cap_ac2 = -1;
3687 static int hf_ieee80211_tag_bss_avb_adm_cap_ac3 = -1;
3689 static int hf_ieee80211_tag_bss_avg_ac_access_delay_be = -1;
3690 static int hf_ieee80211_tag_bss_avg_ac_access_delay_bk = -1;
3691 static int hf_ieee80211_tag_bss_avg_ac_access_delay_vi = -1;
3692 static int hf_ieee80211_tag_bss_avg_ac_access_delay_vo = -1;
3694 static int hf_ieee80211_tag_rm_enabled_capabilities = -1;
3695 static int hf_ieee80211_tag_rm_enabled_capabilities_b0 = -1;
3696 static int hf_ieee80211_tag_rm_enabled_capabilities_b1 = -1;
3697 static int hf_ieee80211_tag_rm_enabled_capabilities_b2 = -1;
3698 static int hf_ieee80211_tag_rm_enabled_capabilities_b3 = -1;
3699 static int hf_ieee80211_tag_rm_enabled_capabilities_b4 = -1;
3700 static int hf_ieee80211_tag_rm_enabled_capabilities_b5 = -1;
3701 static int hf_ieee80211_tag_rm_enabled_capabilities_b6 = -1;
3702 static int hf_ieee80211_tag_rm_enabled_capabilities_b7 = -1;
3703 static int hf_ieee80211_tag_rm_enabled_capabilities_b8 = -1;
3704 static int hf_ieee80211_tag_rm_enabled_capabilities_b9 = -1;
3705 static int hf_ieee80211_tag_rm_enabled_capabilities_b10 = -1;
3706 static int hf_ieee80211_tag_rm_enabled_capabilities_b11 = -1;
3707 static int hf_ieee80211_tag_rm_enabled_capabilities_b12 = -1;
3708 static int hf_ieee80211_tag_rm_enabled_capabilities_b13 = -1;
3709 static int hf_ieee80211_tag_rm_enabled_capabilities_b14 = -1;
3710 static int hf_ieee80211_tag_rm_enabled_capabilities_b15 = -1;
3711 static int hf_ieee80211_tag_rm_enabled_capabilities_b16 = -1;
3712 static int hf_ieee80211_tag_rm_enabled_capabilities_b17 = -1;
3713 static int hf_ieee80211_tag_rm_enabled_capabilities_b18to20 = -1;
3714 static int hf_ieee80211_tag_rm_enabled_capabilities_b21to23 = -1;
3715 static int hf_ieee80211_tag_rm_enabled_capabilities_b24to26 = -1;
3716 static int hf_ieee80211_tag_rm_enabled_capabilities_b27 = -1;
3717 static int hf_ieee80211_tag_rm_enabled_capabilities_b28 = -1;
3718 static int hf_ieee80211_tag_rm_enabled_capabilities_b29 = -1;
3719 static int hf_ieee80211_tag_rm_enabled_capabilities_b30 = -1;
3720 static int hf_ieee80211_tag_rm_enabled_capabilities_b31 = -1;
3721 static int hf_ieee80211_tag_rm_enabled_capabilities_b32 = -1;
3722 static int hf_ieee80211_tag_rm_enabled_capabilities_b33 = -1;
3723 static int hf_ieee80211_tag_rm_enabled_capabilities_o5 = -1;
3725 static int hf_ieee80211_tag_20_40_bc = -1;
3726 static int hf_ieee80211_tag_20_40_bc_information_request = -1;
3727 static int hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant = -1;
3728 static int hf_ieee80211_tag_20_40_bc_20_mhz_bss_witdh_request = -1;
3729 static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request = -1;
3730 static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant = -1;
3731 static int hf_ieee80211_tag_20_40_bc_reserved = -1;
3733 static int hf_ieee80211_tag_power_constraint_local = -1;
3735 static int hf_ieee80211_tag_power_capability_min = -1;
3736 static int hf_ieee80211_tag_power_capability_max = -1;
3738 static int hf_ieee80211_tag_tpc_report_trsmt_pow = -1;
3739 static int hf_ieee80211_tag_tpc_report_link_mrg = -1;
3741 static int hf_ieee80211_tag_supported_channels = -1;
3742 static int hf_ieee80211_tag_supported_channels_first = -1;
3743 static int hf_ieee80211_tag_supported_channels_range = -1;
3745 static int hf_ieee80211_csa_channel_switch_mode = -1;
3746 static int hf_ieee80211_csa_new_channel_number = -1;
3747 static int hf_ieee80211_csa_channel_switch_count = -1;
3749 static int hf_ieee80211_tag_measure_request_token = -1;
3750 static int hf_ieee80211_tag_measure_request_mode = -1;
3751 static int hf_ieee80211_tag_measure_request_mode_parallel = -1;
3752 static int hf_ieee80211_tag_measure_request_mode_enable = -1;
3753 static int hf_ieee80211_tag_measure_request_mode_request = -1;
3754 static int hf_ieee80211_tag_measure_request_mode_report = -1;
3755 static int hf_ieee80211_tag_measure_request_mode_duration_mandatory = -1;
3756 static int hf_ieee80211_tag_measure_request_mode_reserved = -1;
3757 static int hf_ieee80211_tag_measure_request_type = -1;
3759 static int hf_ieee80211_tag_measure_request_channel_number = -1;
3760 static int hf_ieee80211_tag_measure_request_start_time = -1;
3761 static int hf_ieee80211_tag_measure_request_duration = -1;
3763 static int hf_ieee80211_tag_measure_request_operating_class = -1;
3764 static int hf_ieee80211_tag_measure_request_randomization_interval = -1;
3766 static int hf_ieee80211_tag_measure_report_measurement_token = -1;
3767 static int hf_ieee80211_tag_measure_report_mode = -1;
3768 static int hf_ieee80211_tag_measure_report_mode_late = -1;
3769 static int hf_ieee80211_tag_measure_report_mode_incapable = -1;
3770 static int hf_ieee80211_tag_measure_report_mode_refused = -1;
3771 static int hf_ieee80211_tag_measure_report_mode_reserved = -1;
3772 static int hf_ieee80211_tag_measure_report_type = -1;
3773 static int hf_ieee80211_tag_measure_report_channel_number = -1;
3774 static int hf_ieee80211_tag_measure_report_start_time = -1;
3775 static int hf_ieee80211_tag_measure_report_duration = -1;
3777 static int hf_ieee80211_tag_measure_basic_map_field = -1;
3778 static int hf_ieee80211_tag_measure_map_field_bss = -1;
3779 static int hf_ieee80211_tag_measure_map_field_odfm = -1;
3780 static int hf_ieee80211_tag_measure_map_field_unident_signal = -1;
3781 static int hf_ieee80211_tag_measure_map_field_radar = -1;
3782 static int hf_ieee80211_tag_measure_map_field_unmeasured = -1;
3783 static int hf_ieee80211_tag_measure_map_field_reserved = -1;
3785 static int hf_ieee80211_tag_measure_cca_busy_fraction = -1;
3787 static int hf_ieee80211_tag_measure_rpi_histogram_report = -1;
3788 static int hf_ieee80211_tag_measure_rpi_histogram_report_0 = -1;
3789 static int hf_ieee80211_tag_measure_rpi_histogram_report_1 = -1;
3790 static int hf_ieee80211_tag_measure_rpi_histogram_report_2 = -1;
3791 static int hf_ieee80211_tag_measure_rpi_histogram_report_3 = -1;
3792 static int hf_ieee80211_tag_measure_rpi_histogram_report_4 = -1;
3793 static int hf_ieee80211_tag_measure_rpi_histogram_report_5 = -1;
3794 static int hf_ieee80211_tag_measure_rpi_histogram_report_6 = -1;
3795 static int hf_ieee80211_tag_measure_rpi_histogram_report_7 = -1;
3797 static int hf_ieee80211_tag_measure_report_operating_class = -1;
3798 static int hf_ieee80211_tag_measure_report_channel_load = -1;
3799 static int hf_ieee80211_tag_measure_report_frame_info = -1;
3800 static int hf_ieee80211_tag_measure_report_frame_info_phy_type = -1;
3801 static int hf_ieee80211_tag_measure_report_frame_info_frame_type = -1;
3802 static int hf_ieee80211_tag_measure_report_rcpi = -1;
3803 static int hf_ieee80211_tag_measure_report_rsni = -1;
3804 static int hf_ieee80211_tag_measure_report_bssid = -1;
3805 static int hf_ieee80211_tag_measure_report_ant_id = -1;
3806 static int hf_ieee80211_tag_measure_report_anpi = -1;
3807 static int hf_ieee80211_tag_measure_report_ipi_density_0 = -1;
3808 static int hf_ieee80211_tag_measure_report_ipi_density_1 = -1;
3809 static int hf_ieee80211_tag_measure_report_ipi_density_2 = -1;
3810 static int hf_ieee80211_tag_measure_report_ipi_density_3 = -1;
3811 static int hf_ieee80211_tag_measure_report_ipi_density_4 = -1;
3812 static int hf_ieee80211_tag_measure_report_ipi_density_5 = -1;
3813 static int hf_ieee80211_tag_measure_report_ipi_density_6 = -1;
3814 static int hf_ieee80211_tag_measure_report_ipi_density_7 = -1;
3815 static int hf_ieee80211_tag_measure_report_ipi_density_8 = -1;
3816 static int hf_ieee80211_tag_measure_report_ipi_density_9 = -1;
3817 static int hf_ieee80211_tag_measure_report_ipi_density_10 = -1;
3818 static int hf_ieee80211_tag_measure_report_parent_tsf = -1;
3820 static int hf_ieee80211_tag_measure_report_subelement_length = -1;
3821 static int hf_ieee80211_tag_measure_report_beacon_sub_id = -1;
3823 static int hf_ieee80211_tag_measure_report_unknown = -1;
3825 static int hf_ieee80211_tag_quiet_count = -1;
3826 static int hf_ieee80211_tag_quiet_period = -1;
3827 static int hf_ieee80211_tag_quiet_duration = -1;
3828 static int hf_ieee80211_tag_quiet_offset = -1;
3830 static int hf_ieee80211_tag_dfs_owner = -1;
3831 static int hf_ieee80211_tag_dfs_recovery_interval = -1;
3832 static int hf_ieee80211_tag_dfs_channel_map = -1;
3833 static int hf_ieee80211_tag_dfs_channel_number = -1;
3834 static int hf_ieee80211_tag_dfs_map = -1;
3836 static int hf_ieee80211_tag_erp_info = -1;
3837 static int hf_ieee80211_tag_erp_info_erp_present = -1;
3838 static int hf_ieee80211_tag_erp_info_use_protection = -1;
3839 static int hf_ieee80211_tag_erp_info_barker_preamble_mode = -1;
3840 static int hf_ieee80211_tag_erp_info_reserved = -1;
3842 static int hf_ieee80211_tag_extended_capabilities = -1;
3843 static int hf_ieee80211_tag_extended_capabilities_b0 = -1;
3844 static int hf_ieee80211_tag_extended_capabilities_b1 = -1;
3845 static int hf_ieee80211_tag_extended_capabilities_b2 = -1;
3846 static int hf_ieee80211_tag_extended_capabilities_b3 = -1;
3847 static int hf_ieee80211_tag_extended_capabilities_b4 = -1;
3848 static int hf_ieee80211_tag_extended_capabilities_b5 = -1;
3849 static int hf_ieee80211_tag_extended_capabilities_b6 = -1;
3850 static int hf_ieee80211_tag_extended_capabilities_b7 = -1;
3851 static int hf_ieee80211_tag_extended_capabilities_b8 = -1;
3852 static int hf_ieee80211_tag_extended_capabilities_b9 = -1;
3853 static int hf_ieee80211_tag_extended_capabilities_b10 = -1;
3854 static int hf_ieee80211_tag_extended_capabilities_b11 = -1;
3855 static int hf_ieee80211_tag_extended_capabilities_b12 = -1;
3856 static int hf_ieee80211_tag_extended_capabilities_b13 = -1;
3857 static int hf_ieee80211_tag_extended_capabilities_b14 = -1;
3858 static int hf_ieee80211_tag_extended_capabilities_b15 = -1;
3859 static int hf_ieee80211_tag_extended_capabilities_b16 = -1;
3860 static int hf_ieee80211_tag_extended_capabilities_b17 = -1;
3861 static int hf_ieee80211_tag_extended_capabilities_b18 = -1;
3862 static int hf_ieee80211_tag_extended_capabilities_b19 = -1;
3863 static int hf_ieee80211_tag_extended_capabilities_b20 = -1;
3864 static int hf_ieee80211_tag_extended_capabilities_b21 = -1;
3865 static int hf_ieee80211_tag_extended_capabilities_b22 = -1;
3866 static int hf_ieee80211_tag_extended_capabilities_b23 = -1;
3867 static int hf_ieee80211_tag_extended_capabilities_b24 = -1;
3868 static int hf_ieee80211_tag_extended_capabilities_b25 = -1;
3869 static int hf_ieee80211_tag_extended_capabilities_b26 = -1;
3870 static int hf_ieee80211_tag_extended_capabilities_b27 = -1;
3871 static int hf_ieee80211_tag_extended_capabilities_b28 = -1;
3872 static int hf_ieee80211_tag_extended_capabilities_b29 = -1;
3873 static int hf_ieee80211_tag_extended_capabilities_b30 = -1;
3874 static int hf_ieee80211_tag_extended_capabilities_b31 = -1;
3875 static int hf_ieee80211_tag_extended_capabilities_b32 = -1;
3876 static int hf_ieee80211_tag_extended_capabilities_b33 = -1;
3877 static int hf_ieee80211_tag_extended_capabilities_b34 = -1;
3878 static int hf_ieee80211_tag_extended_capabilities_b35 = -1;
3879 static int hf_ieee80211_tag_extended_capabilities_b36 = -1;
3880 static int hf_ieee80211_tag_extended_capabilities_b37 = -1;
3881 static int hf_ieee80211_tag_extended_capabilities_b38 = -1;
3882 static int hf_ieee80211_tag_extended_capabilities_b39 = -1;
3883 static int hf_ieee80211_tag_extended_capabilities_b40 = -1;
3884 static int hf_ieee80211_tag_extended_capabilities_serv_int_granularity = -1;
3885 static int hf_ieee80211_tag_extended_capabilities_b44 = -1;
3886 static int hf_ieee80211_tag_extended_capabilities_b45 = -1;
3887 static int hf_ieee80211_tag_extended_capabilities_b46 = -1;
3888 static int hf_ieee80211_tag_extended_capabilities_b47 = -1;
3889 static int hf_ieee80211_tag_extended_capabilities_b48 = -1;
3890 static int hf_ieee80211_tag_extended_capabilities_b61 = -1;
3891 static int hf_ieee80211_tag_extended_capabilities_b62 = -1;
3892 static int hf_ieee80211_tag_extended_capabilities_b63 = -1;
3893 static int hf_ieee80211_tag_extended_capabilities_b64 = -1;
3894 static int hf_ieee80211_tag_extended_capabilities_o7 = -1;
3895 static int hf_ieee80211_tag_extended_capabilities_o8 = -1;
3896 static int hf_ieee80211_tag_extended_capabilities_o9 = -1;
3898 static int hf_ieee80211_tag_cisco_ccx1_unknown = -1;
3899 static int hf_ieee80211_tag_cisco_ccx1_name = -1;
3900 static int hf_ieee80211_tag_cisco_ccx1_clients = -1;
3901 static int hf_ieee80211_tag_cisco_ccx1_unknown2 = -1;
3903 static int hf_ieee80211_vht_cap = -1;
3904 static int hf_ieee80211_vht_max_mpdu_length = -1;
3905 static int hf_ieee80211_vht_supported_chan_width_set = -1;
3906 static int hf_ieee80211_vht_rx_ldpc = -1;
3907 static int hf_ieee80211_vht_short_gi_for_80 = -1;
3908 static int hf_ieee80211_vht_short_gi_for_160 = -1;
3909 static int hf_ieee80211_vht_tx_stbc = -1;
3910 static int hf_ieee80211_vht_rx_stbc = -1;
3911 static int hf_ieee80211_vht_su_beamformer_cap = -1;
3912 static int hf_ieee80211_vht_su_beamformee_cap = -1;
3913 static int hf_ieee80211_vht_beamformer_antennas = -1;
3914 static int hf_ieee80211_vht_sounding_dimensions = -1;
3915 static int hf_ieee80211_vht_mu_beamformer_cap = -1;
3916 static int hf_ieee80211_vht_mu_beamformee_cap = -1;
3917 static int hf_ieee80211_vht_txop_ps = -1;
3918 static int hf_ieee80211_vht_var_htc_field = -1;
3919 static int hf_ieee80211_vht_max_ampdu = -1;
3920 static int hf_ieee80211_vht_link_adaptation_cap = -1;
3921 static int hf_ieee80211_vht_rx_pattern = -1;
3922 static int hf_ieee80211_vht_tx_pattern = -1;
3923 static int hf_ieee80211_vht_reserv = -1;
3925 static int hf_ieee80211_vht_mcsset = -1;
3927 static int hf_ieee80211_vht_mcsset_rx_mcs_map = -1;
3928 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss = -1;
3929 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss = -1;
3930 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss = -1;
3931 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss = -1;
3932 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss = -1;
3933 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss = -1;
3934 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss = -1;
3935 static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss = -1;
3937 static int hf_ieee80211_vht_mcsset_rx_highest_long_gi = -1;
3939 static int hf_ieee80211_vht_mcsset_tx_mcs_map = -1;
3940 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss = -1;
3941 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss = -1;
3942 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss = -1;
3943 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss = -1;
3944 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss = -1;
3945 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss = -1;
3946 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss = -1;
3947 static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss = -1;
3949 static int hf_ieee80211_vht_op = -1;
3950 static int hf_ieee80211_vht_op_channel_width = -1;
3951 static int hf_ieee80211_vht_op_channel_center0 = -1;
3952 static int hf_ieee80211_vht_op_channel_center1 = -1;
3954 static int hf_ieee80211_vht_op_basic_mcs_map = -1;
3955 static int hf_ieee80211_vht_op_max_basic_mcs_for_1_ss = -1;
3956 static int hf_ieee80211_vht_op_max_basic_mcs_for_2_ss = -1;
3957 static int hf_ieee80211_vht_op_max_basic_mcs_for_3_ss = -1;
3958 static int hf_ieee80211_vht_op_max_basic_mcs_for_4_ss = -1;
3959 static int hf_ieee80211_vht_op_max_basic_mcs_for_5_ss = -1;
3960 static int hf_ieee80211_vht_op_max_basic_mcs_for_6_ss = -1;
3961 static int hf_ieee80211_vht_op_max_basic_mcs_for_7_ss = -1;
3962 static int hf_ieee80211_vht_op_max_basic_mcs_for_8_ss = -1;
3963 static int hf_ieee80211_vht_mcsset_tx_highest_long_gi = -1;
3965 static int hf_ieee80211_vht_tpe_pwr_info = -1;
3966 static int hf_ieee80211_vht_tpe_pwr_info_count = -1;
3967 static int hf_ieee80211_vht_tpe_pwr_info_unit = -1;
3968 static int hf_ieee80211_vht_tpe_pwr_info_reserved = -1;
3969 static int hf_ieee80211_vht_tpe_pwr_constr_20 = -1;
3970 static int hf_ieee80211_vht_tpe_pwr_constr_40 = -1;
3971 static int hf_ieee80211_vht_tpe_pwr_constr_80 = -1;
3972 static int hf_ieee80211_vht_tpe_pwr_constr_160 = -1;
3974 static int hf_ieee80211_beamform_feedback_seg_retrans_bitmap = -1;
3976 static int hf_ieee80211_vht_ndp_annc_token = -1;
3977 static int hf_ieee80211_vht_ndp_annc_token_number = -1;
3978 static int hf_ieee80211_vht_ndp_annc_token_reserved = -1;
3979 static int hf_ieee80211_vht_ndp_annc_sta_info = -1;
3980 static int hf_ieee80211_vht_ndp_annc_sta_info_aid12 = -1;
3981 static int hf_ieee80211_vht_ndp_annc_sta_info_feedback_type = -1;
3982 static int hf_ieee80211_vht_ndp_annc_sta_info_nc_index = -1;
3983 static int hf_ieee80211_vht_ndp_annc_sta_info_reserved = -1;
3986 static int hf_ieee80211_ff_vht_action = -1;
3987 static int hf_ieee80211_ff_vht_mimo_cntrl = -1;
3988 static int hf_ieee80211_ff_vht_mimo_cntrl_nc_index = -1;
3989 static int hf_ieee80211_ff_vht_mimo_cntrl_nr_index = -1;
3990 static int hf_ieee80211_ff_vht_mimo_cntrl_channel_width = -1;
3991 static int hf_ieee80211_ff_vht_mimo_cntrl_grouping = -1;
3992 static int hf_ieee80211_ff_vht_mimo_cntrl_codebook_info = -1;
3993 static int hf_ieee80211_ff_vht_mimo_cntrl_feedback_type = -1;
3994 static int hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg = -1;
3995 static int hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg = -1;
3996 static int hf_ieee80211_ff_vht_mimo_cntrl_reserved = -1;
3997 static int hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number = -1;
3999 static const int *hf_ieee80211_ff_vht_mimo_cntrl_fields[] = {
4000 &hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
4001 &hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
4002 &hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
4003 &hf_ieee80211_ff_vht_mimo_cntrl_grouping,
4004 &hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
4005 &hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
4006 &hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
4007 &hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
4008 &hf_ieee80211_ff_vht_mimo_cntrl_reserved,
4009 &hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
4013 static int hf_ieee80211_vht_compressed_beamforming_report = -1;
4014 static int hf_ieee80211_vht_compressed_beamforming_report_snr = -1;
4015 static int hf_ieee80211_vht_compressed_beamforming_feedback_matrix = -1;
4016 static int hf_ieee80211_vht_group_id_management = -1;
4017 static int hf_ieee80211_vht_membership_status_array = -1;
4018 static int hf_ieee80211_vht_user_position_array = -1;
4019 static int hf_ieee80211_vht_operation_mode_notification = -1;
4020 static int hf_ieee80211_vht_membership_status_field = -1;
4021 static int hf_ieee80211_vht_user_position_field = -1;
4022 static int hf_ieee80211_vht_mu_exclusive_beamforming_report = -1;
4023 static int hf_ieee80211_vht_mu_Exclusive_beamforming_delta_snr = -1;
4024 static int hf_ieee80211_vht_compressed_beamforming_phi_angle = -1;
4025 static int hf_ieee80211_vht_compressed_beamforming_psi_angle = -1;
4027 static int hf_ieee80211_tag_neighbor_report_bssid = -1;
4028 static int hf_ieee80211_tag_neighbor_report_bssid_info = -1;
4029 static int hf_ieee80211_tag_neighbor_report_bssid_info_reachability = -1;
4030 static int hf_ieee80211_tag_neighbor_report_bssid_info_security = -1;
4031 static int hf_ieee80211_tag_neighbor_report_bssid_info_key_scope = -1;
4032 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability = -1;
4033 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng = -1;
4034 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos = -1;
4035 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd = -1;
4036 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt = -1;
4037 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback = -1;
4038 static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback = -1;
4039 static int hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain = -1;
4040 static int hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput = -1;
4041 static int hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput = -1;
4042 static int hf_ieee80211_tag_neighbor_report_bssid_info_ftm = -1;
4043 static int hf_ieee80211_tag_neighbor_report_bssid_info_reserved = -1;
4044 static int hf_ieee80211_tag_neighbor_report_ope_class = -1;
4045 static int hf_ieee80211_tag_neighbor_report_channel_number = -1;
4046 static int hf_ieee80211_tag_neighbor_report_phy_type = -1;
4047 static int hf_ieee80211_tag_neighbor_report_subelement_id = -1;
4048 static int hf_ieee80211_tag_neighbor_report_subelement_length = -1;
4049 static int hf_ieee80211_tag_neighbor_report_subelement_data = -1;
4050 static int hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref = -1;
4051 static int hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf = -1;
4052 static int hf_ieee80211_tag_neighbor_report_subelement_bss_dur = -1;
4053 static int hf_ieee80211_tag_supported_ope_classes_current = -1;
4054 static int hf_ieee80211_tag_supported_ope_classes_alternate = -1;
4056 /* IEEE Std 802.11r-2008 7.3.2.47 */
4057 static int hf_ieee80211_tag_mobility_domain_mdid = -1;
4058 static int hf_ieee80211_tag_mobility_domain_ft_capab = -1;
4059 static int hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds = -1;
4060 static int hf_ieee80211_tag_mobility_domain_ft_capab_resource_req = -1;
4062 /* IEEE Std 802.11r-2008 7.3.2.48 */
4063 static int hf_ieee80211_tag_ft_mic_control = -1;
4064 static int hf_ieee80211_tag_ft_element_count = -1;
4065 static int hf_ieee80211_tag_ft_mic = -1;
4066 static int hf_ieee80211_tag_ft_anonce = -1;
4067 static int hf_ieee80211_tag_ft_snonce = -1;
4068 static int hf_ieee80211_tag_ft_subelem_id = -1;
4069 static int hf_ieee80211_tag_ft_subelem_len = -1;
4070 static int hf_ieee80211_tag_ft_subelem_data = -1;
4071 static int hf_ieee80211_tag_ft_subelem_r1kh_id = -1;
4072 static int hf_ieee80211_tag_ft_subelem_gtk_key_info = -1;
4073 static int hf_ieee80211_tag_ft_subelem_gtk_key_id = -1;
4074 static int hf_ieee80211_tag_ft_subelem_gtk_key_length = -1;
4075 static int hf_ieee80211_tag_ft_subelem_gtk_rsc = -1;
4076 static int hf_ieee80211_tag_ft_subelem_gtk_key = -1;
4077 static int hf_ieee80211_tag_ft_subelem_r0kh_id = -1;
4078 static int hf_ieee80211_tag_ft_subelem_igtk_key_id = -1;
4079 static int hf_ieee80211_tag_ft_subelem_igtk_ipn = -1;
4080 static int hf_ieee80211_tag_ft_subelem_igtk_key_length = -1;
4081 static int hf_ieee80211_tag_ft_subelem_igtk_key = -1;
4083 /* IEEE Std 802.11-2012: 11r 8.4.2.52 */
4084 static int hf_ieee80211_tag_ric_data_id = -1;
4085 static int hf_ieee80211_tag_ric_data_desc_cnt = -1;
4086 static int hf_ieee80211_tag_ric_data_status_code = -1;
4088 /* IEEE Std 802.11-2012: 11r 8.4.2.53 */
4089 static int hf_ieee80211_tag_ric_desc_rsrc_type = -1;
4090 static int hf_ieee80211_tag_ric_desc_var_params = -1;
4092 /* IEEE Std 802.11w-2009 7.3.2.55 */
4093 static int hf_ieee80211_tag_mmie_keyid = -1;
4094 static int hf_ieee80211_tag_mmie_ipn = -1;
4095 static int hf_ieee80211_tag_mmie_mic = -1;
4097 /* IEEE Std 802.11-2012: 8.4.2.61 */
4098 static int hf_ieee80211_tag_obss_spd = -1;
4099 static int hf_ieee80211_tag_obss_sad = -1;
4100 static int hf_ieee80211_tag_obss_cwtsi = -1;
4101 static int hf_ieee80211_tag_obss_sptpc = -1;
4102 static int hf_ieee80211_tag_obss_satpc = -1;
4103 static int hf_ieee80211_tag_obss_wctdf = -1;
4104 static int hf_ieee80211_tag_obss_sat = -1;
4107 /*WAPI-Specification 7.3.2.25 : WAPI Parameter Set*/
4108 static int hf_ieee80211_tag_wapi_param_set_version = -1;
4110 static int hf_ieee80211_tag_wapi_param_set_akm_suite_count = -1;
4111 static int hf_ieee80211_tag_wapi_param_set_akm_suite_oui = -1;
4112 static int hf_ieee80211_tag_wapi_param_set_akm_suite_type = -1;
4114 static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count = -1;
4115 static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui = -1;
4116 static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type = -1;
4118 static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui = -1;
4119 static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type = -1;
4121 static int hf_ieee80211_tag_wapi_param_set_capab = -1;
4122 static int hf_ieee80211_tag_wapi_param_set_capab_preauth = -1;
4123 static int hf_ieee80211_tag_wapi_param_set_capab_rsvd = -1;
4124 static int hf_ieee80211_tag_wapi_param_set_bkid_count = -1;
4125 static int hf_ieee80211_tag_wapi_param_set_bkid_list = -1;
4127 /* IEEE Std 802.11v-2011 7.3.2.61 */
4128 static int hf_ieee80211_tag_time_adv_timing_capab = -1;
4129 static int hf_ieee80211_tag_time_adv_time_value = -1;
4130 static int hf_ieee80211_tag_time_adv_time_value_year = -1;
4131 static int hf_ieee80211_tag_time_adv_time_value_month = -1;
4132 static int hf_ieee80211_tag_time_adv_time_value_day = -1;
4133 static int hf_ieee80211_tag_time_adv_time_value_hours = -1;
4134 static int hf_ieee80211_tag_time_adv_time_value_minutes = -1;
4135 static int hf_ieee80211_tag_time_adv_time_value_seconds = -1;
4136 static int hf_ieee80211_tag_time_adv_time_value_milliseconds = -1;
4137 static int hf_ieee80211_tag_time_adv_time_value_reserved = -1;
4138 static int hf_ieee80211_tag_time_adv_time_error = -1;
4139 static int hf_ieee80211_tag_time_adv_time_update_counter = -1;
4141 /* IEEE Std 802.11-2012 8.4.2.81 */
4142 static int hf_ieee80211_tag_bss_max_idle_period = -1;
4143 static int hf_ieee80211_tag_bss_max_idle_options_protected = -1;
4145 /* IEEE Std 802.11-2012 8.4.2.82 */
4146 static int hf_ieee80211_tag_tfs_request_id = -1;
4147 static int hf_ieee80211_tag_tfs_request_ac_delete_after_match = -1;
4148 static int hf_ieee80211_tag_tfs_request_ac_notify = -1;
4149 static int hf_ieee80211_tag_tfs_request_subelem_id = -1;
4150 static int hf_ieee80211_tag_tfs_request_subelem_len = -1;
4151 static int hf_ieee80211_tag_tfs_request_subelem = -1;
4153 /* IEEE Std 802.11-2012 8.4.2.83 */
4154 static int hf_ieee80211_tag_tfs_response_subelem_id = -1;
4155 static int hf_ieee80211_tag_tfs_response_subelem_len = -1;
4156 static int hf_ieee80211_tag_tfs_response_subelem = -1;
4157 static int hf_ieee80211_tag_tfs_response_status = -1;
4158 static int hf_ieee80211_tag_tfs_response_id = -1;
4160 /* IEEE Std 802.11-2012 8.4.2.84 */
4161 static int hf_ieee80211_tag_wnm_sleep_mode_action_type = -1;
4162 static int hf_ieee80211_tag_wnm_sleep_mode_response_status = -1;
4163 static int hf_ieee80211_tag_wnm_sleep_mode_interval = -1;
4165 /* IEEE Std 802.11v-2011 7.3.2.87 */
4166 static int hf_ieee80211_tag_time_zone = -1;
4168 /* IEEE Std 802.11u-2011 7.3.2.92 */
4169 static int hf_ieee80211_tag_interworking_access_network_type = -1;
4170 static int hf_ieee80211_tag_interworking_internet = -1;
4171 static int hf_ieee80211_tag_interworking_asra = -1;
4172 static int hf_ieee80211_tag_interworking_esr = -1;
4173 static int hf_ieee80211_tag_interworking_uesa = -1;
4174 static int hf_ieee80211_tag_interworking_hessid = -1;
4176 /* IEEE Std 802.11-2012, 8.4.2.97 */
4177 static int hf_ieee80211_tag_qos_map_set_dscp_exc = -1;
4178 static int hf_ieee80211_tag_qos_map_set_dscp_exc_val = -1;
4179 static int hf_ieee80211_tag_qos_map_set_dscp_exc_up = -1;
4180 static int hf_ieee80211_tag_qos_map_set_range = -1;
4181 static int hf_ieee80211_tag_qos_map_set_low = -1;
4182 static int hf_ieee80211_tag_qos_map_set_high = -1;
4184 /* IEEE Std 802.11u-2011 7.3.2.93 */
4185 static int hf_ieee80211_tag_adv_proto_resp_len_limit = -1;
4186 static int hf_ieee80211_tag_adv_proto_pame_bi = -1;
4187 static int hf_ieee80211_tag_adv_proto_id = -1;
4188 static int hf_ieee80211_tag_adv_vs_len = -1;
4189 /* static int hf_ieee80211_tag_adv_proto_vs_info = -1; */
4191 /* IEEE Std 802.11u-2011 7.3.2.96 */
4192 static int hf_ieee80211_tag_roaming_consortium_num_anqp_oi = -1;
4193 static int hf_ieee80211_tag_roaming_consortium_oi1_len = -1;
4194 static int hf_ieee80211_tag_roaming_consortium_oi2_len = -1;
4195 static int hf_ieee80211_tag_roaming_consortium_oi1 = -1;
4196 static int hf_ieee80211_tag_roaming_consortium_oi2 = -1;
4197 static int hf_ieee80211_tag_roaming_consortium_oi3 = -1;
4199 /* 802.11n 7.3.2.48 */
4200 static int hf_ieee80211_hta_cc = -1;
4201 static int hf_ieee80211_hta_cap1 = -1;
4202 static int hf_ieee80211_hta_cap2 = -1;
4203 static int hf_ieee80211_hta_ext_chan_offset = -1;
4204 static int hf_ieee80211_hta_rec_tx_width = -1;
4205 static int hf_ieee80211_hta_rifs_mode = -1;
4206 static int hf_ieee80211_hta_controlled_access = -1;
4207 static int hf_ieee80211_hta_service_interval = -1;
4208 static int hf_ieee80211_hta_operating_mode = -1;
4209 static int hf_ieee80211_hta_non_gf_devices = -1;
4210 static int hf_ieee80211_hta_basic_stbc_mcs = -1;
4211 static int hf_ieee80211_hta_dual_stbc_protection = -1;
4212 static int hf_ieee80211_hta_secondary_beacon = -1;
4213 static int hf_ieee80211_hta_lsig_txop_protection = -1;
4214 static int hf_ieee80211_hta_pco_active = -1;
4215 static int hf_ieee80211_hta_pco_phase = -1;
4217 static int hf_ieee80211_antsel = -1;
4218 static int hf_ieee80211_antsel_vs = -1;
4219 static int hf_ieee80211_antsel_b0 = -1;
4220 static int hf_ieee80211_antsel_b1 = -1;
4221 static int hf_ieee80211_antsel_b2 = -1;
4222 static int hf_ieee80211_antsel_b3 = -1;
4223 static int hf_ieee80211_antsel_b4 = -1;
4224 static int hf_ieee80211_antsel_b5 = -1;
4225 static int hf_ieee80211_antsel_b6 = -1;
4226 static int hf_ieee80211_antsel_b7 = -1;
4228 static int hf_ieee80211_rsn_version = -1;
4229 static int hf_ieee80211_rsn_gcs = -1;
4230 static int hf_ieee80211_rsn_gcs_oui = -1;
4231 static int hf_ieee80211_rsn_gcs_type = -1;
4232 static int hf_ieee80211_rsn_gcs_80211_type = -1;
4233 static int hf_ieee80211_rsn_pcs_count = -1;
4234 static int hf_ieee80211_rsn_pcs_list = -1;
4235 static int hf_ieee80211_rsn_pcs = -1;
4236 static int hf_ieee80211_rsn_pcs_oui = -1;
4237 static int hf_ieee80211_rsn_pcs_80211_type = -1;
4238 static int hf_ieee80211_rsn_pcs_type = -1;
4239 static int hf_ieee80211_rsn_akms_count = -1;
4240 static int hf_ieee80211_rsn_akms_list = -1;
4241 static int hf_ieee80211_rsn_akms = -1;
4242 static int hf_ieee80211_rsn_akms_oui = -1;
4243 static int hf_ieee80211_rsn_akms_80211_type = -1;
4244 static int hf_ieee80211_rsn_akms_type = -1;
4245 static int hf_ieee80211_rsn_cap = -1;
4246 static int hf_ieee80211_rsn_cap_preauth = -1;
4247 static int hf_ieee80211_rsn_cap_no_pairwise = -1;
4248 static int hf_ieee80211_rsn_cap_ptksa_replay_counter = -1;
4249 static int hf_ieee80211_rsn_cap_gtksa_replay_counter = -1;
4250 static int hf_ieee80211_rsn_cap_mfpr = -1;
4251 static int hf_ieee80211_rsn_cap_mfpc = -1;
4252 static int hf_ieee80211_rsn_cap_jmr = -1;
4253 static int hf_ieee80211_rsn_cap_peerkey = -1;
4254 static int hf_ieee80211_rsn_pmkid_count = -1;
4255 static int hf_ieee80211_rsn_pmkid_list = -1;
4256 static int hf_ieee80211_rsn_pmkid = -1;
4257 static int hf_ieee80211_rsn_gmcs = -1;
4258 static int hf_ieee80211_rsn_gmcs_oui = -1;
4259 static int hf_ieee80211_rsn_gmcs_type = -1;
4260 static int hf_ieee80211_rsn_gmcs_80211_type = -1;
4262 static int hf_ieee80211_wfa_ie_type = -1;
4263 static int hf_ieee80211_wfa_ie_wpa_version = -1;
4264 static int hf_ieee80211_wfa_ie_wpa_mcs = -1;
4265 static int hf_ieee80211_wfa_ie_wpa_mcs_oui = -1;
4266 static int hf_ieee80211_wfa_ie_wpa_mcs_type = -1;
4267 static int hf_ieee80211_wfa_ie_wpa_mcs_wfa_type = -1;
4268 static int hf_ieee80211_wfa_ie_wpa_ucs_count = -1;
4269 static int hf_ieee80211_wfa_ie_wpa_ucs_list = -1;
4270 static int hf_ieee80211_wfa_ie_wpa_ucs = -1;
4271 static int hf_ieee80211_wfa_ie_wpa_ucs_oui = -1;
4272 static int hf_ieee80211_wfa_ie_wpa_ucs_wfa_type = -1;
4273 static int hf_ieee80211_wfa_ie_wpa_ucs_type = -1;
4274 static int hf_ieee80211_wfa_ie_wpa_akms_count = -1;
4275 static int hf_ieee80211_wfa_ie_wpa_akms_list = -1;
4276 static int hf_ieee80211_wfa_ie_wpa_akms = -1;
4277 static int hf_ieee80211_wfa_ie_wpa_akms_oui = -1;
4278 static int hf_ieee80211_wfa_ie_wpa_akms_wfa_type = -1;
4279 static int hf_ieee80211_wfa_ie_wpa_akms_type = -1;
4280 static int hf_ieee80211_wfa_ie_wme_subtype = -1;
4281 static int hf_ieee80211_wfa_ie_wme_version = -1;
4282 static int hf_ieee80211_wfa_ie_wme_qos_info = -1;
4283 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length = -1;
4284 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be = -1;
4285 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk = -1;
4286 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi = -1;
4287 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo = -1;
4288 static int hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved = -1;
4289 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd = -1;
4290 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count = -1;
4291 static int hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved = -1;
4292 static int hf_ieee80211_wfa_ie_wme_reserved = -1;
4293 static int hf_ieee80211_wfa_ie_wme_ac_parameters = -1;
4294 static int hf_ieee80211_wfa_ie_wme_acp_aci_aifsn = -1;
4295 static int hf_ieee80211_wfa_ie_wme_acp_aci = -1;
4296 static int hf_ieee80211_wfa_ie_wme_acp_acm = -1;
4297 static int hf_ieee80211_wfa_ie_wme_acp_aifsn = -1;
4298 static int hf_ieee80211_wfa_ie_wme_acp_reserved = -1;
4299 static int hf_ieee80211_wfa_ie_wme_acp_ecw = -1;
4300 static int hf_ieee80211_wfa_ie_wme_acp_ecw_max = -1;
4301 static int hf_ieee80211_wfa_ie_wme_acp_ecw_min = -1;
4302 static int hf_ieee80211_wfa_ie_wme_acp_cw_max = -1;
4303 static int hf_ieee80211_wfa_ie_wme_acp_cw_min = -1;
4304 static int hf_ieee80211_wfa_ie_wme_acp_txop_limit = -1;
4305 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo = -1;
4306 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid = -1;
4307 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction = -1;
4308 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb = -1;
4309 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up = -1;
4310 static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved = -1;
4311 static int hf_ieee80211_wfa_ie_wme_tspec_nor_msdu = -1;
4312 static int hf_ieee80211_wfa_ie_wme_tspec_max_msdu = -1;
4313 static int hf_ieee80211_wfa_ie_wme_tspec_min_srv = -1;
4314 static int hf_ieee80211_wfa_ie_wme_tspec_max_srv = -1;
4315 static int hf_ieee80211_wfa_ie_wme_tspec_inact_int = -1;
4316 static int hf_ieee80211_wfa_ie_wme_tspec_susp_int = -1;
4317 static int hf_ieee80211_wfa_ie_wme_tspec_srv_start = -1;
4318 static int hf_ieee80211_wfa_ie_wme_tspec_min_data = -1;
4319 static int hf_ieee80211_wfa_ie_wme_tspec_mean_data = -1;
4320 static int hf_ieee80211_wfa_ie_wme_tspec_peak_data = -1;
4321 static int hf_ieee80211_wfa_ie_wme_tspec_burst_size = -1;
4322 static int hf_ieee80211_wfa_ie_wme_tspec_delay_bound = -1;
4323 static int hf_ieee80211_wfa_ie_wme_tspec_min_phy = -1;
4324 static int hf_ieee80211_wfa_ie_wme_tspec_surplus = -1;
4325 static int hf_ieee80211_wfa_ie_wme_tspec_medium = -1;
4327 static int hf_ieee80211_aironet_ie_type = -1;
4328 static int hf_ieee80211_aironet_ie_dtpc = -1;
4329 static int hf_ieee80211_aironet_ie_version = -1;
4330 static int hf_ieee80211_aironet_ie_data = -1;
4331 static int hf_ieee80211_aironet_ie_qos_reserved = -1;
4332 static int hf_ieee80211_aironet_ie_qos_paramset = -1;
4333 static int hf_ieee80211_aironet_ie_qos_val = -1;
4334 static int hf_ieee80211_aironet_ie_clientmfp = -1;
4336 static int hf_ieee80211_vs_nintendo_type = -1;
4337 static int hf_ieee80211_vs_nintendo_length = -1;
4338 static int hf_ieee80211_vs_nintendo_servicelist = -1;
4339 static int hf_ieee80211_vs_nintendo_service = -1;
4340 static int hf_ieee80211_vs_nintendo_consoleid = -1;
4341 static int hf_ieee80211_vs_nintendo_unknown = -1;
4343 static int hf_ieee80211_vs_aruba_subtype = -1;
4344 static int hf_ieee80211_vs_aruba_apname = -1;
4345 static int hf_ieee80211_vs_aruba_data = -1;
4347 static int hf_ieee80211_vs_mikrotik_unknown = -1;
4348 static int hf_ieee80211_vs_mikrotik_subitem = -1;
4349 static int hf_ieee80211_vs_mikrotik_subtype = -1;
4350 static int hf_ieee80211_vs_mikrotik_sublength = -1;
4351 static int hf_ieee80211_vs_mikrotik_subdata = -1;
4353 static int hf_ieee80211_vs_meru_subitem = -1;
4354 static int hf_ieee80211_vs_meru_subtype = -1;
4355 static int hf_ieee80211_vs_meru_sublength = -1;
4356 static int hf_ieee80211_vs_meru_subdata = -1;
4358 static int hf_ieee80211_vs_extreme_subtype = -1;
4359 static int hf_ieee80211_vs_extreme_subdata = -1;
4360 static int hf_ieee80211_vs_extreme_unknown = -1;
4361 static int hf_ieee80211_vs_extreme_ap_length = -1;
4362 static int hf_ieee80211_vs_extreme_ap_name = -1;
4364 static int hf_ieee80211_rsn_ie_pmkid = -1;
4365 static int hf_ieee80211_rsn_ie_unknown = -1;
4367 static int hf_ieee80211_marvell_ie_type = -1;
4368 static int hf_ieee80211_marvell_ie_mesh_subtype = -1;
4369 static int hf_ieee80211_marvell_ie_mesh_version = -1;
4370 static int hf_ieee80211_marvell_ie_mesh_active_proto_id = -1;
4371 static int hf_ieee80211_marvell_ie_mesh_active_metric_id = -1;
4372 static int hf_ieee80211_marvell_ie_mesh_cap = -1;
4373 static int hf_ieee80211_marvell_ie_data = -1;
4375 static int hf_ieee80211_atheros_ie_type = -1;
4376 static int hf_ieee80211_atheros_ie_subtype = -1;
4377 static int hf_ieee80211_atheros_ie_version = -1;
4378 static int hf_ieee80211_atheros_ie_cap_f_turbop = -1;
4379 static int hf_ieee80211_atheros_ie_cap_f_comp = -1;
4380 static int hf_ieee80211_atheros_ie_cap_f_ff = -1;
4381 static int hf_ieee80211_atheros_ie_cap_f_xr = -1;
4382 static int hf_ieee80211_atheros_ie_cap_f_ar = -1;
4383 static int hf_ieee80211_atheros_ie_cap_f_burst = -1;
4384 static int hf_ieee80211_atheros_ie_cap_f_wme = -1;
4385 static int hf_ieee80211_atheros_ie_cap_f_boost = -1;
4386 static int hf_ieee80211_atheros_ie_advcap_cap = -1;
4387 static int hf_ieee80211_atheros_ie_advcap_defkey = -1;
4388 static int hf_ieee80211_atheros_ie_xr_info = -1;
4389 static int hf_ieee80211_atheros_ie_xr_base_bssid = -1;
4390 static int hf_ieee80211_atheros_ie_xr_xr_bssid = -1;
4391 static int hf_ieee80211_atheros_ie_xr_xr_beacon = -1;
4392 static int hf_ieee80211_atheros_ie_xr_base_cap = -1;
4393 static int hf_ieee80211_atheros_ie_xr_xr_cap = -1;
4394 static int hf_ieee80211_atheros_ie_data = -1;
4396 /*QBSS - Version 1,2,802.11e*/
4398 static int hf_ieee80211_qbss2_cal = -1;
4399 static int hf_ieee80211_qbss2_gl = -1;
4400 static int hf_ieee80211_qbss_cu = -1;
4401 static int hf_ieee80211_qbss2_cu = -1;
4402 static int hf_ieee80211_qbss_scount = -1;
4403 static int hf_ieee80211_qbss2_scount = -1;
4404 static int hf_ieee80211_qbss_version = -1;
4405 static int hf_ieee80211_qbss_adc = -1;
4407 static int hf_ieee80211_tsinfo = -1;
4408 static int hf_ieee80211_tsinfo_type = -1;
4409 static int hf_ieee80211_tsinfo_tsid = -1;
4410 static int hf_ieee80211_tsinfo_dir = -1;
4411 static int hf_ieee80211_tsinfo_access = -1;
4412 static int hf_ieee80211_tsinfo_agg = -1;
4413 static int hf_ieee80211_tsinfo_apsd = -1;
4414 static int hf_ieee80211_tsinfo_up = -1;
4415 static int hf_ieee80211_tsinfo_ack = -1;
4416 static int hf_ieee80211_tsinfo_sched = -1;
4417 static int hf_ieee80211_tsinfo_rsv = -1;
4419 static const int *ieee80211_tsinfo_fields[] = {
4420 &hf_ieee80211_tsinfo_type,
4421 &hf_ieee80211_tsinfo_tsid,
4422 &hf_ieee80211_tsinfo_dir,
4423 &hf_ieee80211_tsinfo_access,
4424 &hf_ieee80211_tsinfo_agg,
4425 &hf_ieee80211_tsinfo_apsd,
4426 &hf_ieee80211_tsinfo_up,
4427 &hf_ieee80211_tsinfo_ack,
4428 &hf_ieee80211_tsinfo_sched,
4429 &hf_ieee80211_tsinfo_rsv,
4433 static int hf_ieee80211_tspec_nor_msdu = -1;
4434 static int hf_ieee80211_tspec_max_msdu = -1;
4435 static int hf_ieee80211_tspec_min_srv = -1;
4436 static int hf_ieee80211_tspec_max_srv = -1;
4437 static int hf_ieee80211_tspec_inact_int = -1;
4438 static int hf_ieee80211_tspec_susp_int = -1;
4439 static int hf_ieee80211_tspec_srv_start = -1;
4440 static int hf_ieee80211_tspec_min_data = -1;
4441 static int hf_ieee80211_tspec_mean_data = -1;
4442 static int hf_ieee80211_tspec_peak_data = -1;
4443 static int hf_ieee80211_tspec_burst_size = -1;
4444 static int hf_ieee80211_tspec_delay_bound = -1;
4445 static int hf_ieee80211_tspec_min_phy = -1;
4446 static int hf_ieee80211_tspec_surplus = -1;
4447 static int hf_ieee80211_tspec_medium = -1;
4448 static int hf_ieee80211_tspec_dmg = -1;
4449 static int hf_ieee80211_ts_delay = -1;
4450 static int hf_ieee80211_tclas_process = -1;
4451 static int hf_ieee80211_tag_ext_supp_rates = -1;
4452 static int hf_ieee80211_sched_info = -1;
4453 static int hf_ieee80211_sched_info_agg = -1;
4454 static int hf_ieee80211_sched_info_tsid = -1;
4455 static int hf_ieee80211_sched_info_dir = -1;
4456 static int hf_ieee80211_sched_srv_start = -1;
4457 static int hf_ieee80211_sched_srv_int = -1;
4458 static int hf_ieee80211_sched_spec_int = -1;
4459 static int hf_ieee80211_tclas_up = -1;
4460 static int hf_ieee80211_tclas_class_type = -1;
4461 static int hf_ieee80211_tclas_class_mask = -1;
4462 static int hf_ieee80211_tclas_class_mask0_src_addr = -1;
4463 static int hf_ieee80211_tclas_class_mask0_dst_addr = -1;
4464 static int hf_ieee80211_tclas_class_mask0_type = -1;
4465 static int hf_ieee80211_tclas_class_mask1_ver = -1;
4466 static int hf_ieee80211_tclas_class_mask1_src_ip = -1;
4467 static int hf_ieee80211_tclas_class_mask1_dst_ip = -1;
4468 static int hf_ieee80211_tclas_class_mask1_src_port = -1;
4469 static int hf_ieee80211_tclas_class_mask1_dst_port = -1;
4470 static int hf_ieee80211_tclas_class_mask1_ipv4_dscp = -1;
4471 static int hf_ieee80211_tclas_class_mask1_ipv4_proto = -1;
4472 static int hf_ieee80211_tclas_class_mask1_ipv6_flow = -1;
4473 static int hf_ieee80211_tclas_class_mask2_tci = -1;
4474 static int hf_ieee80211_tclas_src_mac_addr = -1;
4475 static int hf_ieee80211_tclas_dst_mac_addr = -1;
4476 static int hf_ieee80211_tclas_ether_type = -1;
4477 static int hf_ieee80211_tclas_version = -1;
4478 static int hf_ieee80211_tclas_ipv4_src = -1;
4479 static int hf_ieee80211_tclas_ipv4_dst = -1;
4480 static int hf_ieee80211_tclas_src_port = -1;
4481 static int hf_ieee80211_tclas_dst_port = -1;
4482 static int hf_ieee80211_tclas_dscp = -1;
4483 static int hf_ieee80211_tclas_protocol = -1;
4484 static int hf_ieee80211_tclas_ipv6_src = -1;
4485 static int hf_ieee80211_tclas_ipv6_dst = -1;
4486 static int hf_ieee80211_tclas_flow = -1;
4487 static int hf_ieee80211_tclas_tag_type = -1;
4489 static int hf_ieee80211_aruba = -1;
4490 static int hf_ieee80211_aruba_hb_seq = -1;
4491 static int hf_ieee80211_aruba_mtu = -1;
4493 static int hf_ieee80211_tag_vendor_oui_type = -1;
4494 static int hf_ieee80211_tag_vendor_data = -1;
4496 /* IEEE Std 802.11z-2010 7.3.2.62 */
4497 static int hf_ieee80211_tag_link_id_bssid = -1;
4498 static int hf_ieee80211_tag_link_id_init_sta = -1;
4499 static int hf_ieee80211_tag_link_id_resp_sta = -1;
4501 /* IEEE Std 802.11z-2010 7.3.2.63 */
4502 static int hf_ieee80211_tag_wakeup_schedule_offset = -1;
4503 static int hf_ieee80211_tag_wakeup_schedule_interval = -1;
4504 static int hf_ieee80211_tag_wakeup_schedule_awake_window_slots = -1;
4505 static int hf_ieee80211_tag_wakeup_schedule_max_awake_dur = -1;
4506 static int hf_ieee80211_tag_wakeup_schedule_idle_count = -1;
4508 /* IEEE Std 802.11z-2010 7.3.2.64 */
4509 static int hf_ieee80211_tag_channel_switch_timing_switch_time = -1;
4510 static int hf_ieee80211_tag_channel_switch_timing_switch_timeout = -1;
4512 /* IEEE Std 802.11z-2010 7.3.2.65 */
4513 static int hf_ieee80211_tag_pti_control_tid = -1;
4514 static int hf_ieee80211_tag_pti_control_sequence_control = -1;
4516 /* IEEE Std 802.11z-2010 7.3.2.66 */
4517 static int hf_ieee80211_tag_pu_buffer_status_ac_bk = -1;
4518 static int hf_ieee80211_tag_pu_buffer_status_ac_be = -1;
4519 static int hf_ieee80211_tag_pu_buffer_status_ac_vi = -1;
4520 static int hf_ieee80211_tag_pu_buffer_status_ac_vo = -1;
4522 /* IEEE Std 802.11r-2008 7.3.2.49 */
4523 static int hf_ieee80211_tag_timeout_int_type = -1;
4524 static int hf_ieee80211_tag_timeout_int_value = -1;
4526 /* Ethertype 89-0d */
4527 static int hf_ieee80211_data_encap_payload_type = -1;
4529 static int hf_ieee80211_anqp_wfa_subtype = -1;
4531 static int hf_ieee80211_dpp_subtype = -1;
4534 static int hf_hs20_indication_dgaf_disabled = -1;
4535 static int hf_hs20_indication_pps_mo_id_present = -1;
4536 static int hf_hs20_indication_anqp_domain_id_present = -1;
4537 static int hf_hs20_indication_release_number = -1;
4539 static int hf_hs20_anqp_subtype = -1;
4540 static int hf_hs20_anqp_reserved = -1;
4541 static int hf_hs20_anqp_payload = -1;
4542 static int hf_hs20_anqp_hs_query_list = -1;
4543 static int hf_hs20_anqp_hs_capability_list = -1;
4544 static int hf_hs20_anqp_ofn_length = -1;
4545 static int hf_hs20_anqp_ofn_language = -1;
4546 static int hf_hs20_anqp_ofn_name = -1;
4547 static int hf_hs20_anqp_wan_metrics_link_status = -1;
4548 static int hf_hs20_anqp_wan_metrics_symmetric_link = -1;
4549 static int hf_hs20_anqp_wan_metrics_at_capacity = -1;
4550 static int hf_hs20_anqp_wan_metrics_reserved = -1;
4551 static int hf_hs20_anqp_wan_metrics_downlink_speed = -1;
4552 static int hf_hs20_anqp_wan_metrics_uplink_speed = -1;
4553 static int hf_hs20_anqp_wan_metrics_downlink_load = -1;
4554 static int hf_hs20_anqp_wan_metrics_uplink_load = -1;
4555 static int hf_hs20_anqp_wan_metrics_lmd = -1;
4556 static int hf_hs20_anqp_cc_proto_ip_proto = -1;
4557 static int hf_hs20_anqp_cc_proto_port_num = -1;
4558 static int hf_hs20_anqp_cc_proto_status = -1;
4559 static int hf_hs20_anqp_nai_hrq_count = -1;
4560 static int hf_hs20_anqp_nai_hrq_encoding_type = -1;
4561 static int hf_hs20_anqp_nai_hrq_length = -1;
4562 static int hf_hs20_anqp_nai_hrq_realm_name = -1;
4563 static int hf_hs20_anqp_oper_class_indic = -1;
4565 /* IEEE Std 802.11ad */
4566 static int hf_ieee80211_block_ack_RBUFCAP = -1;
4567 static int hf_ieee80211_cf_response_offset = -1;
4568 static int hf_ieee80211_grant_ack_reserved = -1;
4569 static int hf_ieee80211_ff_dynamic_allocation = -1;
4570 static int hf_ieee80211_ff_TID = -1;
4571 static int hf_ieee80211_ff_alloc_type = -1;
4572 static int hf_ieee80211_ff_src_aid = -1;
4573 static int hf_ieee80211_ff_dest_aid = -1;
4574 static int hf_ieee80211_ff_alloc_duration = -1;
4575 static int hf_ieee80211_ff_b39 = -1;
4576 static int hf_ieee80211_ff_ssw = -1;
4577 static int hf_ieee80211_ff_ssw_direction = -1;
4578 static int hf_ieee80211_ff_ssw_cdown = -1;
4579 static int hf_ieee80211_ff_ssw_sector_id = -1;
4580 static int hf_ieee80211_ff_ssw_dmg_ant_id = -1;
4581 static int hf_ieee80211_ff_ssw_rxss_len = -1;
4582 static int hf_ieee80211_ff_bf = -1;
4583 static int hf_ieee80211_ff_bf_train = -1;
4584 static int hf_ieee80211_ff_bf_is_init = -1;
4585 static int hf_ieee80211_ff_bf_is_resp = -1;
4586 static int hf_ieee80211_ff_bf_num_sectors = -1;
4587 static int hf_ieee80211_ff_bf_num_rx_dmg_ants = -1;
4588 static int hf_ieee80211_ff_bf_b12b15 = -1;
4589 static int hf_ieee80211_ff_bf_rxss_len = -1;
4590 static int hf_ieee80211_ff_bf_rxss_rate = -1;
4591 static int hf_ieee80211_ff_bf_b10b15 = -1;
4592 static int hf_ieee80211_addr_nav_da = -1;
4593 static int hf_ieee80211_addr_nav_sa = -1;
4594 static int hf_ieee80211_ff_sswf = -1;
4595 static int hf_ieee80211_ff_sswf_num_rx_dmg_ants = -1;
4596 static int hf_ieee80211_ff_sswf_poll_required = -1;
4597 static int hf_ieee80211_ff_sswf_total_sectors = -1;
4598 static int hf_ieee80211_ff_sswf_reserved1 = -1;
4599 static int hf_ieee80211_ff_sswf_reserved2 = -1;
4600 static int hf_ieee80211_ff_sswf_sector_select = -1;
4601 static int hf_ieee80211_ff_sswf_dmg_antenna_select = -1;
4602 static int hf_ieee80211_ff_sswf_snr_report = -1;
4603 static int hf_ieee80211_ff_brp = -1;
4604 static int hf_ieee80211_ff_brp_L_RX = -1;
4605 static int hf_ieee80211_ff_brp_TX_TRN_REQ = -1;
4606 static int hf_ieee80211_ff_brp_MID_REQ = -1;
4607 static int hf_ieee80211_ff_brp_BC_REQ = -1;
4608 static int hf_ieee80211_ff_brp_MID_GRANT = -1;
4609 static int hf_ieee80211_ff_brp_BC_GRANT = -1;
4610 static int hf_ieee80211_ff_brp_chan_FBCK_CAP = -1;
4611 static int hf_ieee80211_ff_brp_tx_sector = -1;
4612 static int hf_ieee80211_ff_brp_other_aid = -1;
4613 static int hf_ieee80211_ff_brp_tx_antenna = -1;
4614 static int hf_ieee80211_ff_brp_reserved = -1;
4615 static int hf_ieee80211_ff_blm = -1;
4616 static int hf_ieee80211_ff_blm_unit_index = -1;
4617 static int hf_ieee80211_ff_blm_maint_value = -1;
4618 static int hf_ieee80211_ff_blm_is_master = -1;
4619 static int hf_ieee80211_ff_bic = -1;
4620 static int hf_ieee80211_ff_bic_cc_present = -1;
4621 static int hf_ieee80211_ff_bic_discovery_mode = -1;
4622 static int hf_ieee80211_ff_bic_next_beacon = -1;
4623 static int hf_ieee80211_ff_bic_ati_present = -1;
4624 static int hf_ieee80211_ff_bic_abft_len = -1;
4625 static int hf_ieee80211_ff_bic_fss = -1;
4626 static int hf_ieee80211_ff_bic_is_resp = -1;
4627 static int hf_ieee80211_ff_bic_next_abft = -1;
4628 static int hf_ieee80211_ff_bic_frag_txss = -1;
4629 static int hf_ieee80211_ff_bic_txss_span = -1;
4630 static int hf_ieee80211_ff_bic_NBI_abft = -1;
4631 static int hf_ieee80211_ff_bic_abft_count = -1;
4632 static int hf_ieee80211_ff_bic_nabft = -1;
4633 static int hf_ieee80211_ff_bic_pcp = -1;
4634 static int hf_ieee80211_ff_bic_reserved = -1;
4635 static const int *ieee80211_ff_bic_fields[] = {
4636 &hf_ieee80211_ff_bic_cc_present,
4637 &hf_ieee80211_ff_bic_discovery_mode,
4638 &hf_ieee80211_ff_bic_next_beacon,
4639 &hf_ieee80211_ff_bic_ati_present,
4640 &hf_ieee80211_ff_bic_abft_len,
4641 &hf_ieee80211_ff_bic_fss,
4642 &hf_ieee80211_ff_bic_is_resp,
4643 &hf_ieee80211_ff_bic_next_abft,
4644 &hf_ieee80211_ff_bic_frag_txss,
4645 &hf_ieee80211_ff_bic_txss_span,
4646 &hf_ieee80211_ff_bic_NBI_abft,
4647 &hf_ieee80211_ff_bic_abft_count,
4648 &hf_ieee80211_ff_bic_nabft,
4649 &hf_ieee80211_ff_bic_pcp,
4650 &hf_ieee80211_ff_bic_reserved,
4653 static int hf_ieee80211_ff_dmg_params = -1;
4654 static int hf_ieee80211_ff_dmg_params_bss = -1;
4655 static int hf_ieee80211_ff_dmg_params_cbap_only = -1;
4656 static int hf_ieee80211_ff_dmg_params_cbap_src = -1;
4657 static int hf_ieee80211_ff_dmg_params_privacy = -1;
4658 static int hf_ieee80211_ff_dmg_params_policy = -1;
4659 static int hf_ieee80211_ff_cc = -1;
4660 static int hf_ieee80211_ff_cc_abft_resp_addr = -1;
4661 static int hf_ieee80211_ff_cc_sp_duration = -1;
4662 static int hf_ieee80211_ff_cc_cluster_id = -1;
4663 static int hf_ieee80211_ff_cc_role = -1;
4664 static int hf_ieee80211_ff_cc_max_mem = -1;
4665 static int hf_ieee80211_ff_dmg_action_code = -1;
4666 static int hf_ieee80211_ff_dmg_pwr_mgmt = -1;
4667 static int hf_ieee80211_ff_subject_address = -1;
4668 static int hf_ieee80211_ff_handover_reason = -1;
4669 static int hf_ieee80211_ff_handover_remaining_bi = -1;
4670 static int hf_ieee80211_ff_handover_result = -1;
4671 static int hf_ieee80211_ff_handover_reject_reason = -1;
4672 static int hf_ieee80211_ff_destination_reds_aid = -1;
4673 static int hf_ieee80211_ff_destination_aid = -1;
4674 static int hf_ieee80211_ff_realy_aid = -1;
4675 static int hf_ieee80211_ff_source_aid = -1;
4676 static int hf_ieee80211_ff_timing_offset = -1;
4677 static int hf_ieee80211_ff_sampling_frequency_offset = -1;
4678 static int hf_ieee80211_ff_relay_operation_type = -1;
4679 static int hf_ieee80211_ff_peer_sta_aid = -1;
4680 static int hf_ieee80211_ff_snr = -1;
4681 static int hf_ieee80211_ff_internal_angle = -1;
4682 static int hf_ieee80211_ff_recommend = -1;
4683 static int hf_ieee80211_ff_unprotected_dmg_action_code = -1;
4684 static int hf_ieee80211_ff_fst_action_code = -1;
4685 static int hf_ieee80211_ff_llt = -1;
4686 static int hf_ieee80211_ff_fsts_id = -1;
4687 static int hf_ieee80211_ff_mmpdu_len = -1;
4688 static int hf_ieee80211_ff_mmpdu_ctrl = -1;
4689 static int hf_ieee80211_ff_oct_mmpdu = -1;
4691 static int hf_ieee80211_ff_rcsi = -1;
4692 static int hf_ieee80211_ff_rcsi_aid = -1;
4694 static int hf_ieee80211_ff_band_id = -1;
4695 static int hf_ieee80211_tag_relay_support = -1;
4696 static int hf_ieee80211_tag_relay_use = -1;
4697 static int hf_ieee80211_tag_relay_permission = -1;
4698 static int hf_ieee80211_tag_AC_power = -1;
4699 static int hf_ieee80211_tag_relay_prefer = -1;
4700 static int hf_ieee80211_tag_duplex = -1;
4701 static int hf_ieee80211_tag_cooperation = -1;
4702 static int hf_ieee80211_tag_move = -1;
4703 static int hf_ieee80211_tag_size = -1;
4704 static int hf_ieee80211_tag_tbtt_offset = -1;
4705 static int hf_ieee80211_tag_bi_duration = -1;
4706 static int hf_ieee80211_tag_dmg_capa_sta_addr = -1;
4707 static int hf_ieee80211_tag_dmg_capa_aid = -1;
4708 static int hf_ieee80211_tag_reverse_direction = -1;
4709 static int hf_ieee80211_tag_hlts = -1;
4710 static int hf_ieee80211_tag_tpc = -1;
4711 static int hf_ieee80211_tag_spsh = -1;
4712 static int hf_ieee80211_tag_rx_antenna = -1;
4713 static int hf_ieee80211_tag_fast_link = -1;
4714 static int hf_ieee80211_tag_num_sectors = -1;
4715 static int hf_ieee80211_tag_rxss_length = -1;
4716 static int hf_ieee80211_tag_reciprocity = -1;
4717 static int hf_ieee80211_tag_max_ampdu_exp = -1;
4718 static int hf_ieee80211_tag_min_mpdu_spacing = -1;
4719 static int hf_ieee80211_tag_ba_flow_control = -1;
4720 static int hf_ieee80211_tag_max_sc_rx_mcs = -1;
4721 static int hf_ieee80211_tag_max_ofdm_rx_mcs = -1;
4722 static int hf_ieee80211_tag_max_sc_tx_mcs = -1;
4723 static int hf_ieee80211_tag_max_ofdm_tx_mcs = -1;
4724 static int hf_ieee80211_tag_low_power_supported = -1;
4725 static int hf_ieee80211_tag_code_rate = -1;
4726 static int hf_ieee80211_tag_dtp = -1;
4727 static int hf_ieee80211_tag_appdu_supp = -1;
4728 static int hf_ieee80211_tag_heartbeat = -1;
4729 static int hf_ieee80211_tag_other_aid = -1;
4730 static int hf_ieee80211_tag_pattern_recip = -1;
4731 static int hf_ieee80211_tag_heartbeat_elapsed = -1;
4732 static int hf_ieee80211_tag_grant_ack_supp = -1;
4733 static int hf_ieee80211_tag_RXSSTxRate_supp = -1;
4734 static int hf_ieee80211_tag_pcp_tddti = -1;
4735 static int hf_ieee80211_tag_pcp_PSA = -1;
4736 static int hf_ieee80211_tag_pcp_handover = -1;
4737 static int hf_ieee80211_tag_pcp_max_assoc = -1;
4738 static int hf_ieee80211_tag_pcp_power_src = -1;
4739 static int hf_ieee80211_tag_pcp_decenter = -1;
4740 static int hf_ieee80211_tag_pcp_forwarding = -1;
4741 static int hf_ieee80211_tag_pcp_center = -1;
4742 static int hf_ieee80211_tag_PSRSI = -1;
4743 static int hf_ieee80211_tag_min_BHI_duration = -1;
4744 static int hf_ieee80211_tag_brdct_sta_info_dur = -1;
4745 static int hf_ieee80211_tag_assoc_resp_confirm_time = -1;
4746 static int hf_ieee80211_tag_min_pp_duration = -1;
4747 static int hf_ieee80211_tag_SP_idle_timeout = -1;
4748 static int hf_ieee80211_tag_max_lost_beacons = -1;
4749 static int hf_ieee80211_tag_type = -1;
4750 static int hf_ieee80211_tag_tap1 = -1;
4751 static int hf_ieee80211_tag_state1 = -1;
4752 static int hf_ieee80211_tag_tap2 = -1;
4753 static int hf_ieee80211_tag_state2 = -1;
4754 static int hf_ieee80211_tag_allocation_id = -1;
4755 static int hf_ieee80211_tag_allocation_type = -1;
4756 static int hf_ieee80211_tag_pseudo_static = -1;
4757 static int hf_ieee80211_tag_truncatable = -1;
4758 static int hf_ieee80211_tag_extendable = -1;
4759 static int hf_ieee80211_tag_pcp_active = -1;
4760 static int hf_ieee80211_tag_lp_sc_used = -1;
4761 static int hf_ieee80211_tag_src_aid = -1;
4762 static int hf_ieee80211_tag_dest_aid = -1;
4763 static int hf_ieee80211_tag_alloc_start = -1;
4764 static int hf_ieee80211_tag_alloc_block_duration = -1;
4765 static int hf_ieee80211_tag_num_blocks = -1;
4766 static int hf_ieee80211_tag_alloc_block_period = -1;
4767 static int hf_ieee80211_tag_aid = -1;
4768 static int hf_ieee80211_tag_cbap = -1;
4769 static int hf_ieee80211_tag_pp_avail = -1;
4770 static int hf_ieee80211_tag_next_ati_start_time = -1;
4771 static int hf_ieee80211_tag_next_ati_duration = -1;
4772 static int hf_ieee80211_tag_old_bssid = -1;
4773 static int hf_ieee80211_tag_new_pcp_addr = -1;
4774 static int hf_ieee80211_tag_bssid = -1;
4775 static int hf_ieee80211_tag_duplex_relay = -1;
4776 static int hf_ieee80211_tag_cooperation_relay = -1;
4777 static int hf_ieee80211_tag_tx_mode = -1;
4778 static int hf_ieee80211_tag_link_change_interval = -1;
4779 static int hf_ieee80211_tag_data_sensing_time = -1;
4780 static int hf_ieee80211_tag_first_period = -1;
4781 static int hf_ieee80211_tag_second_period = -1;
4782 static int hf_ieee80211_tag_initiator = -1;
4783 static int hf_ieee80211_tag_tx_train_res = -1;
4784 static int hf_ieee80211_tag_rx_train_res = -1;
4785 static int hf_ieee80211_tag_tx_trn_ok = -1;
4786 static int hf_ieee80211_tag_txss_fbck_req = -1;
4787 static int hf_ieee80211_tag_bs_fbck = -1;
4788 static int hf_ieee80211_tag_bs_fbck_antenna_id = -1;
4789 static int hf_ieee80211_tag_snr_requested = -1;
4790 static int hf_ieee80211_tag_channel_measurement_requested = -1;
4791 static int hf_ieee80211_tag_number_of_taps_requested = -1;
4792 static int hf_ieee80211_tag_sector_id_order_req = -1;
4793 static int hf_ieee80211_tag_snr_present = -1;
4794 static int hf_ieee80211_tag_channel_measurement_present = -1;
4795 static int hf_ieee80211_tag_tap_delay_present = -1;
4796 static int hf_ieee80211_tag_number_of_taps_present = -1;
4797 static int hf_ieee80211_tag_number_of_measurement = -1;
4798 static int hf_ieee80211_tag_sector_id_order_present = -1;
4799 static int hf_ieee80211_tag_number_of_beams = -1;
4800 static int hf_ieee80211_tag_mid_extension = -1;
4801 static int hf_ieee80211_tag_capability_request = -1;
4802 static int hf_ieee80211_tag_beam_refine_reserved = -1;
4803 static int hf_ieee80211_tag_nextpcp_list = -1;
4804 static int hf_ieee80211_tag_nextpcp_token = -1;
4805 static int hf_ieee80211_tag_reamaining_BI = -1;
4806 static int hf_ieee80211_tag_request_token = -1;
4807 static int hf_ieee80211_tag_bi_start_time = -1;
4808 static int hf_ieee80211_tag_sleep_cycle = -1;
4809 static int hf_ieee80211_tag_num_awake_bis = -1;
4810 static int hf_ieee80211_tag_tspec_allocation_id = -1;
4811 static int hf_ieee80211_tag_tspec_allocation_type = -1;
4812 static int hf_ieee80211_tag_tspec_allocation_format = -1;
4813 static int hf_ieee80211_tag_tspec_pseudo_static = -1;
4814 static int hf_ieee80211_tag_tspec_truncatable = -1;
4815 static int hf_ieee80211_tag_tspec_extendable = -1;
4816 static int hf_ieee80211_tag_tspec_lp_sc_used = -1;
4817 static int hf_ieee80211_tag_tspec_up = -1;
4818 static int hf_ieee80211_tag_tspec_dest_aid = -1;
4819 static int hf_ieee80211_tag_tspec_allocation_period = -1;
4820 static int hf_ieee80211_tag_tspec_min_allocation = -1;
4821 static int hf_ieee80211_tag_tspec_max_allocation = -1;
4822 static int hf_ieee80211_tag_tspec_min_duration = -1;
4823 static int hf_ieee80211_tag_tspec_num_of_constraints = -1;
4824 static int hf_ieee80211_tag_tspec_tsconst_start_time = -1;
4825 static int hf_ieee80211_tag_tspec_tsconst_duration = -1;
4826 static int hf_ieee80211_tag_tspec_tsconst_period = -1;
4827 static int hf_ieee80211_tag_tspec_tsconst_interferer_mac = -1;
4828 static int hf_ieee80211_tag_channel_measurement_feedback_realtive_I = -1;
4829 static int hf_ieee80211_tag_channel_measurement_feedback_realtive_Q = -1;
4830 static int hf_ieee80211_tag_channel_measurement_feedback_tap_delay = -1;
4831 static int hf_ieee80211_tag_channel_measurement_feedback_sector_id = -1;
4832 static int hf_ieee80211_tag_channel_measurement_feedback_antenna_id = -1;
4833 static int hf_ieee80211_tag_awake_window = -1;
4834 static int hf_ieee80211_tag_addba_ext_no_frag = -1;
4835 static int hf_ieee80211_tag_multi_band_ctrl_sta_role = -1;
4836 static int hf_ieee80211_tag_multi_band_ctrl_addr_present = -1;
4837 static int hf_ieee80211_tag_multi_band_ctrl_cipher_present = -1;
4838 static int hf_ieee80211_tag_multi_band_oper_class = -1;
4839 static int hf_ieee80211_tag_multi_band_channel_number = -1;
4840 static int hf_ieee80211_tag_multi_band_tsf_offset = -1;
4841 static int hf_ieee80211_tag_multi_band_conn_ap = -1;
4842 static int hf_ieee80211_tag_multi_band_conn_pcp = -1;
4843 static int hf_ieee80211_tag_multi_band_conn_dls = -1;
4844 static int hf_ieee80211_tag_multi_band_conn_tdls = -1;
4845 static int hf_ieee80211_tag_multi_band_conn_ibss = -1;
4846 static int hf_ieee80211_tag_multi_band_fst_timeout = -1;
4847 static int hf_ieee80211_tag_multi_band_sta_mac = -1;
4848 static int hf_ieee80211_tag_activity = -1;
4849 static int hf_ieee80211_tag_dmg_link_adapt_mcs = -1;
4850 static int hf_ieee80211_tag_dmg_link_adapt_link_margin = -1;
4851 static int hf_ieee80211_tag_ref_timestamp = -1;
4852 static int hf_ieee80211_tag_switching_stream_non_qos = -1;
4853 static int hf_ieee80211_tag_switching_stream_param_num = -1;
4854 static int hf_ieee80211_tag_switching_stream_old_tid = -1;
4855 static int hf_ieee80211_tag_switching_stream_old_direction = -1;
4856 static int hf_ieee80211_tag_switching_stream_new_tid = -1;
4857 static int hf_ieee80211_tag_switching_stream_new_direction = -1;
4858 static int hf_ieee80211_tag_switching_stream_new_valid_id = -1;
4859 static int hf_ieee80211_tag_switching_stream_llt_type = -1;
4861 static int hf_ieee80211_mysterious_olpc_stuff = -1;
4863 /* ************************************************************************* */
4864 /* Protocol trees */
4865 /* ************************************************************************* */
4866 static gint ett_80211 = -1;
4867 static gint ett_proto_flags = -1;
4868 static gint ett_cap_tree = -1;
4869 static gint ett_fc_tree = -1;
4870 static gint ett_cntrl_wrapper_fc = -1;
4871 static gint ett_cntrl_wrapper_payload = -1;
4872 static gint ett_fragments = -1;
4873 static gint ett_fragment = -1;
4874 static gint ett_block_ack = -1;
4875 static gint ett_block_ack_bitmap = -1;
4876 static gint ett_ath_cap_tree = -1;
4878 static gint ett_80211_mgt = -1;
4879 static gint ett_fixed_parameters = -1;
4880 static gint ett_tagged_parameters = -1;
4881 static gint ett_tag_bmapctl_tree = -1;
4882 static gint ett_tag_country_fnm_tree = -1;
4883 static gint ett_tag_country_rcc_tree = -1;
4884 static gint ett_qos_parameters = -1;
4885 static gint ett_qos_ps_buf_state = -1;
4886 static gint ett_wep_parameters = -1;
4887 static gint ett_msh_control = -1;
4888 static gint ett_hwmp_targ_flags_tree = -1;
4889 static gint ett_mesh_chswitch_flag_tree = -1;
4890 static gint ett_mesh_config_cap_tree = -1;
4891 static gint ett_mesh_formation_info_tree = -1;
4893 static gint ett_rsn_gcs_tree = -1;
4894 static gint ett_rsn_pcs_tree = -1;
4895 static gint ett_rsn_sub_pcs_tree = -1;
4896 static gint ett_rsn_akms_tree = -1;
4897 static gint ett_rsn_sub_akms_tree = -1;
4898 static gint ett_rsn_cap_tree = -1;
4899 static gint ett_rsn_pmkid_tree = -1;
4900 static gint ett_rsn_gmcs_tree = -1;
4902 static gint ett_wpa_mcs_tree = -1;
4903 static gint ett_wpa_ucs_tree = -1;
4904 static gint ett_wpa_sub_ucs_tree = -1;
4905 static gint ett_wpa_akms_tree = -1;
4906 static gint ett_wpa_sub_akms_tree = -1;
4907 static gint ett_wme_ac = -1;
4908 static gint ett_wme_aci_aifsn = -1;
4909 static gint ett_wme_ecw = -1;
4910 static gint ett_wme_qos_info = -1;
4912 static gint ett_ht_cap_tree = -1;
4913 static gint ett_ampduparam_tree = -1;
4914 static gint ett_mcsset_tree = -1;
4915 static gint ett_mcsbit_tree = -1;
4916 static gint ett_htex_cap_tree = -1;
4917 static gint ett_txbf_tree = -1;
4918 static gint ett_antsel_tree = -1;
4919 static gint ett_hta_cap_tree = -1;
4920 static gint ett_hta_cap1_tree = -1;
4921 static gint ett_hta_cap2_tree = -1;
4923 static gint ett_htc_tree = -1;
4924 static gint ett_mfb_subtree = -1;
4925 static gint ett_lac_subtree = -1;
4927 static gint ett_vht_cap_tree = -1;
4928 static gint ett_vht_mcsset_tree = -1;
4929 static gint ett_vht_rx_mcsbit_tree = -1;
4930 static gint ett_vht_tx_mcsbit_tree = -1;
4931 static gint ett_vht_basic_mcsbit_tree = -1;
4932 static gint ett_vht_op_tree = -1;
4933 static gint ett_vht_tpe_info_tree = -1;
4935 static gint ett_vht_ndp_annc_token_tree = -1;
4936 static gint ett_vht_ndp_annc_sta_info_tree = -1;
4938 static gint ett_ff_vhtmimo_cntrl = -1;
4939 static gint ett_ff_vhtmimo_beamforming_report = -1;
4940 static gint ett_ff_vhtmimo_beamforming_report_snr = -1;
4941 static gint ett_ff_vhtmimo_beamforming_angle = -1;
4942 static gint ett_ff_vhtmimo_beamforming_report_feedback_matrices = -1;
4943 static gint ett_ff_vhtmu_exclusive_beamforming_report_matrices = -1;
4945 static gint ett_vht_grpidmgmt = -1;
4946 static gint ett_vht_msa = -1;
4947 static gint ett_vht_upa = -1;
4949 static gint ett_ht_info_delimiter1_tree = -1;
4950 static gint ett_ht_info_delimiter2_tree = -1;
4951 static gint ett_ht_info_delimiter3_tree = -1;
4953 static gint ett_tag_measure_request_mode_tree = -1;
4954 static gint ett_tag_measure_request_type_tree = -1;
4955 static gint ett_tag_measure_report_mode_tree = -1;
4956 static gint ett_tag_measure_report_type_tree = -1;
4957 static gint ett_tag_measure_report_basic_map_tree = -1;
4958 static gint ett_tag_measure_report_rpi_tree = -1;
4959 static gint ett_tag_measure_report_frame_tree = -1;
4960 static gint ett_tag_measure_reported_frame_tree = -1;
4961 static gint ett_tag_bss_bitmask_tree = -1;
4962 static gint ett_tag_dfs_map_tree = -1;
4963 static gint ett_tag_erp_info_tree = -1;
4964 static gint ett_tag_ex_cap1 = -1;
4965 static gint ett_tag_ex_cap2 = -1;
4966 static gint ett_tag_ex_cap3 = -1;
4967 static gint ett_tag_ex_cap4 = -1;
4968 static gint ett_tag_ex_cap5 = -1;
4969 static gint ett_tag_ex_cap6 = -1;
4970 static gint ett_tag_ex_cap7 = -1;
4971 static gint ett_tag_ex_cap8 = -1;
4972 static gint ett_tag_ex_cap9 = -1;
4974 static gint ett_tag_rm_cap1 = -1;
4975 static gint ett_tag_rm_cap2 = -1;
4976 static gint ett_tag_rm_cap3 = -1;
4977 static gint ett_tag_rm_cap4 = -1;
4978 static gint ett_tag_rm_cap5 = -1;
4980 static gint ett_tag_20_40_bc = -1;
4982 static gint ett_tag_tclas_mask_tree = -1;
4984 static gint ett_tag_supported_channels = -1;
4986 static gint ett_tag_neighbor_report_bssid_info_tree = -1;
4987 static gint ett_tag_neighbor_report_bssid_info_capability_tree = -1;
4988 static gint ett_tag_neighbor_report_sub_tag_tree = -1;
4990 static gint ett_tag_wapi_param_set_akm_tree = -1;
4991 static gint ett_tag_wapi_param_set_ucast_tree = -1;
4992 static gint ett_tag_wapi_param_set_mcast_tree = -1;
4993 static gint ett_tag_wapi_param_set_preauth_tree = -1;
4995 static gint ett_tag_time_adv_tree = -1;
4997 static gint ett_ff_ba_param_tree = -1;
4998 static gint ett_ff_ba_ssc_tree = -1;
4999 static gint ett_ff_delba_param_tree = -1;
5000 static gint ett_ff_qos_info = -1;
5001 static gint ett_ff_sm_pwr_save = -1;
5002 static gint ett_ff_psmp_param_set = -1;
5003 static gint ett_ff_mimo_cntrl = -1;
5004 static gint ett_ff_ant_sel = -1;
5005 static gint ett_mimo_report = -1;
5006 static gint ett_ff_chan_switch_announce = -1;
5007 static gint ett_ff_ht_info = -1;
5008 static gint ett_ff_psmp_sta_info = -1;
5010 static gint ett_tpc = -1;
5012 static gint ett_msdu_aggregation_parent_tree = -1;
5013 static gint ett_msdu_aggregation_subframe_tree = -1;
5015 static gint ett_80211_mgt_ie = -1;
5016 static gint ett_tsinfo_tree = -1;
5017 static gint ett_sched_tree = -1;
5019 static gint ett_fcs = -1;
5021 static gint ett_adv_proto = -1;
5022 static gint ett_adv_proto_tuple = -1;
5023 static gint ett_gas_query = -1;
5024 static gint ett_gas_anqp = -1;
5025 static gint ett_nai_realm = -1;
5026 static gint ett_nai_realm_eap = -1;
5027 static gint ett_tag_ric_data_desc_ie = -1;
5028 static gint ett_anqp_vendor_capab = -1;
5030 static gint ett_hs20_cc_proto_port_tuple = -1;
5032 static gint ett_ssid_list = -1;
5034 static gint ett_nintendo = -1;
5036 static gint ett_mikrotik = -1;
5038 static gint ett_meru = -1;
5040 static gint ett_qos_map_set_exception = -1;
5041 static gint ett_qos_map_set_range = -1;
5043 static expert_field ei_ieee80211_bad_length = EI_INIT;
5044 static expert_field ei_ieee80211_inv_val = EI_INIT;
5045 static expert_field ei_ieee80211_vht_tpe_pwr_info_count = EI_INIT;
5046 static expert_field ei_ieee80211_ff_query_response_length = EI_INIT;
5047 static expert_field ei_ieee80211_ff_anqp_nai_realm_eap_len = EI_INIT;
5048 static expert_field ei_hs20_anqp_nai_hrq_length = EI_INIT;
5049 static expert_field ei_ieee80211_extra_data = EI_INIT;
5050 static expert_field ei_ieee80211_tag_data = EI_INIT;
5051 static expert_field ei_ieee80211_tdls_setup_confirm_malformed = EI_INIT;
5052 static expert_field ei_ieee80211_ff_anqp_nai_field_len = EI_INIT;
5053 static expert_field ei_ieee80211_rsn_pcs_count = EI_INIT;
5054 static expert_field ei_ieee80211_tag_measure_request_unknown = EI_INIT;
5055 static expert_field ei_ieee80211_tag_measure_request_beacon_unknown = EI_INIT;
5056 static expert_field ei_ieee80211_tag_measure_report_unknown = EI_INIT;
5057 static expert_field ei_ieee80211_tag_number = EI_INIT;
5058 static expert_field ei_ieee80211_ff_anqp_info_length = EI_INIT;
5059 static expert_field ei_hs20_anqp_ofn_length = EI_INIT;
5060 static expert_field ei_ieee80211_tdls_setup_response_malformed = EI_INIT;
5061 static expert_field ei_ieee80211_ff_anqp_capability = EI_INIT;
5062 static expert_field ei_ieee80211_not_enough_room_for_anqp_header = EI_INIT;
5063 static expert_field ei_ieee80211_ff_query_request_length = EI_INIT;
5064 static expert_field ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype = EI_INIT;
5065 static expert_field ei_ieee80211_qos_info_bad_ftype = EI_INIT;
5066 static expert_field ei_ieee80211_qos_bad_aifsn = EI_INIT;
5067 static expert_field ei_ieee80211_pmkid_count_too_large = EI_INIT;
5068 static expert_field ei_ieee80211_ff_anqp_venue_length = EI_INIT;
5069 static expert_field ei_ieee80211_ff_anqp_roaming_consortium_oi_len = EI_INIT;
5070 static expert_field ei_ieee80211_tag_length = EI_INIT;
5071 static expert_field ei_ieee80211_missing_data = EI_INIT;
5072 static expert_field ei_ieee80211_rsn_pmkid_count = EI_INIT;
5073 static expert_field ei_ieee80211_fc_retry = EI_INIT;
5074 static expert_field ei_ieee80211_tag_wnm_sleep_mode_no_key_data = EI_INIT;
5075 static expert_field ei_ieee80211_dmg_subtype = EI_INIT;
5076 static expert_field ei_ieee80211_vht_action = EI_INIT;
5077 static expert_field ei_ieee80211_mesh_peering_unexpected = EI_INIT;
5078 static expert_field ei_ieee80211_fcs = EI_INIT;
5079 static expert_field ei_ieee80211_mismatched_akm_suite = EI_INIT;
5081 /* 802.11ad trees */
5082 static gint ett_dynamic_alloc_tree = -1;
5083 static gint ett_ssw_tree = -1;
5084 static gint ett_bf_tree = -1;
5085 static gint ett_sswf_tree = -1;
5086 static gint ett_brp_tree = -1;
5087 static gint ett_blm_tree = -1;
5088 static gint ett_bic_tree = -1;
5089 static gint ett_dmg_params_tree = -1;
5090 static gint ett_cc_tree = -1;
5091 static gint ett_rcsi_tree = -1;
5092 static gint ett_80211_ext = -1;
5093 static gint ett_allocation_tree = -1;
5094 static gint ett_sta_info = -1;
5096 static const fragment_items frag_items = {
5099 &hf_ieee80211_fragments,
5100 &hf_ieee80211_fragment,
5101 &hf_ieee80211_fragment_overlap,
5102 &hf_ieee80211_fragment_overlap_conflict,
5103 &hf_ieee80211_fragment_multiple_tails,
5104 &hf_ieee80211_fragment_too_long_fragment,
5105 &hf_ieee80211_fragment_error,
5106 &hf_ieee80211_fragment_count,
5107 &hf_ieee80211_reassembled_in,
5108 &hf_ieee80211_reassembled_length,
5109 /* Reassembled data field */
5114 static const enum_val_t wlan_ignore_prot_options[] = {
5115 { "no", "No", WLAN_IGNORE_PROT_NO },
5116 { "without_iv", "Yes - without IV", WLAN_IGNORE_PROT_WO_IV },
5117 { "with_iv", "Yes - with IV", WLAN_IGNORE_PROT_W_IV },
5121 static int wlan_address_type = -1;
5122 static int wlan_bssid_address_type = -1;
5124 static const unsigned char bssid_broadcast_data[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
5125 static address bssid_broadcast;
5127 is_broadcast_bssid(const address *bssid) {
5128 return addresses_equal(&bssid_broadcast, bssid);
5131 static dissector_handle_t ieee80211_handle;
5132 static dissector_handle_t wlan_withoutfcs_handle;
5133 static dissector_handle_t llc_handle;
5134 static dissector_handle_t ipx_handle;
5135 static dissector_handle_t eth_withoutfcs_handle;
5137 static capture_dissector_handle_t llc_cap_handle;
5138 static capture_dissector_handle_t ipx_cap_handle;
5140 static dissector_table_t tagged_field_table;
5141 static dissector_table_t vendor_specific_action_table;
5142 static dissector_table_t wifi_alliance_action_subtype_table;
5143 static dissector_table_t vendor_specific_anqp_info_table;
5144 static dissector_table_t wifi_alliance_anqp_info_table;
5145 static dissector_table_t wifi_alliance_ie_table;
5146 static dissector_table_t wifi_alliance_public_action_table;
5148 static int wlan_tap = -1;
5150 static const value_string access_network_type_vals[] = {
5151 { 0, "Private network" },
5152 { 1, "Private network with guest access" },
5153 { 2, "Chargeable public network" },
5154 { 3, "Free public network" },
5155 { 4, "Personal device network" },
5156 { 5, "Emergency services only network" },
5157 { 14, "Test or experimental" },
5162 static const value_string adv_proto_id_vals[] = {
5163 { 0, "Access Network Query Protocol"},
5164 { 1, "MIH Information Service"},
5165 { 2, "MIH Command and Event Services Capability Discovery"},
5166 { 3, "Emergency Alert System (EAS)"},
5167 { 4, "Location-to-Service Translation Protocol"},
5168 {221, "Vendor Specific"},
5172 static const value_string timeout_int_types[] = {
5173 {1, "Reassociation deadline interval (TUs)"},
5174 {2, "Key lifetime interval (seconds)"},
5175 {3, "Association Comeback time (TUs)"},
5176 {4, "Time to start (TUs)"},
5180 static const value_string tdls_action_codes[] = {
5181 {TDLS_SETUP_REQUEST, "TDLS Setup Request"},
5182 {TDLS_SETUP_RESPONSE, "TDLS Setup Response"},
5183 {TDLS_SETUP_CONFIRM, "TDLS Setup Confirm"},
5184 {TDLS_TEARDOWN, "TDLS Teardown"},
5185 {TDLS_PEER_TRAFFIC_INDICATION, "TDLS Peer Traffic Indication"},
5186 {TDLS_CHANNEL_SWITCH_REQUEST, "TDLS Channel Switch Request"},
5187 {TDLS_CHANNEL_SWITCH_RESPONSE, "TDLS Channel Switch Response"},
5188 {TDLS_PEER_PSM_REQUEST, "TDLS Peer PSM Request"},
5189 {TDLS_PEER_PSM_RESPONSE, "TDLS Peer PSM Response"},
5190 {TDLS_PEER_TRAFFIC_RESPONSE, "TDLS Peer Traffic Response"},
5191 {TDLS_DISCOVERY_REQUEST, "TDLS Discovery Request"},
5194 static value_string_ext tdls_action_codes_ext = VALUE_STRING_EXT_INIT(tdls_action_codes);
5196 static const value_string rm_action_codes[] = {
5197 {RM_ACTION_RADIO_MEASUREMENT_REQUEST, "Radio Measurement Request"},
5198 {RM_ACTION_RADIO_MEASUREMENT_REPORT, "Radio Measurement Report"},
5199 {RM_ACTION_LINK_MEASUREMENT_REQUEST, "Link Measurement Request"},
5200 {RM_ACTION_LINK_MEASUREMENT_REPORT, "Link Measurement Report"},
5201 {RM_ACTION_NEIGHBOR_REPORT_REQUEST, "Neighbor Report Request"},
5202 {RM_ACTION_NEIGHBOR_REPORT_RESPONSE, "Neighbor Report Response"},
5205 static value_string_ext rm_action_codes_ext = VALUE_STRING_EXT_INIT(rm_action_codes);
5207 static const val64_string number_of_taps_values[] = {
5215 AIRPDCAP_CONTEXT airpdcap_ctx;
5217 #define PSMP_STA_INFO_BROADCAST 0
5218 #define PSMP_STA_INFO_MULTICAST 1
5219 #define PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED 2
5221 #define PSMP_STA_INFO_FLAG_TYPE 0x00000003
5222 #define PSMP_STA_INFO_FLAG_DTT_START 0x00001FFC
5223 #define PSMP_STA_INFO_FLAG_DTT_DURATION 0x001FE000
5225 #define PSMP_STA_INFO_FLAG_STA_ID 0x001FFFE0
5227 #define PSMP_STA_INFO_FLAG_UTT_START 0x0000FFE0
5228 #define PSMP_STA_INFO_FLAG_UTT_DURATION 0x03FF0000
5230 #define PSMP_STA_INFO_FLAG_IA_RESERVED 0xFC000000
5232 static const value_string ff_psmp_sta_info_flags[] = {
5233 { PSMP_STA_INFO_BROADCAST, "Broadcast"},
5234 { PSMP_STA_INFO_MULTICAST, "Multicast"},
5235 { PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED, "Individually Addressed"},
5240 wlan_conv_get_filter_type(conv_item_t* conv, conv_filter_type_e filter)
5242 if ((filter == CONV_FT_SRC_ADDRESS) && (conv->src_address.type == wlan_address_type))
5245 if ((filter == CONV_FT_DST_ADDRESS) && (conv->dst_address.type == wlan_address_type))
5248 if ((filter == CONV_FT_ANY_ADDRESS) && (conv->src_address.type == wlan_address_type))
5251 return CONV_FILTER_INVALID;
5254 static ct_dissector_info_t wlan_ct_dissector_info = {&wlan_conv_get_filter_type};
5257 wlan_conversation_packet(void *pct, packet_info *pinfo, epan_dissect_t *edt _U_, const void *vip)
5259 conv_hash_t *hash = (conv_hash_t*) pct;
5260 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
5262 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);
5268 wlan_host_get_filter_type(hostlist_talker_t* host, conv_filter_type_e filter)
5270 if ((filter == CONV_FT_ANY_ADDRESS) && (host->myaddress.type == wlan_address_type))
5273 return CONV_FILTER_INVALID;
5276 static hostlist_dissector_info_t wlan_host_dissector_info = {&wlan_host_get_filter_type};
5279 wlan_hostlist_packet(void *pit, packet_info *pinfo, epan_dissect_t *edt _U_, const void *vip)
5281 conv_hash_t *hash = (conv_hash_t*) pit;
5282 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
5284 /* Take two "add" passes per packet, adding for each direction, ensures that all
5285 packets are counted properly (even if address is sending to itself)
5286 XXX - this could probably be done more efficiently inside hostlist_table */
5287 add_hostlist_table_data(hash, &whdr->src, 0, TRUE, 1, pinfo->fd->pkt_len, &wlan_host_dissector_info, PT_NONE);
5288 add_hostlist_table_data(hash, &whdr->dst, 0, FALSE, 1, pinfo->fd->pkt_len, &wlan_host_dissector_info, PT_NONE);
5294 wlan_col_filter_str(const address* addr _U_, gboolean is_src)
5303 wlan_bssid_col_filter_str(const address* addr _U_, gboolean is_src _U_)
5305 return "wlan.bssid";
5310 beacon_interval_base_custom(gchar *result, guint32 beacon_interval)
5314 temp_double = (double)beacon_interval;
5315 g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (temp_double * 1024 / 1000000));
5319 allocation_duration_base_custom(gchar *result, guint32 allocation_duration)
5323 temp_double = (double)allocation_duration;
5324 g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (temp_double / 1000000));
5328 extra_one_base_custom(gchar *result, guint32 value)
5330 g_snprintf(result, ITEM_LABEL_LENGTH, "%d", value+1);
5334 extra_one_mul_two_base_custom(gchar *result, guint32 value)
5336 g_snprintf(result, ITEM_LABEL_LENGTH, "%d", (value+1)*2);
5339 /* ************************************************************************* */
5340 /* Mesh Control field helper functions
5342 * Per IEEE 802.11s Draft 12.0 section 7.2.2.1:
5344 * The frame body consists of either:
5345 * The MSDU (or a fragment thereof), the Mesh Control field (if and only if the
5346 * frame is transmitted by a mesh STA and the Mesh Control Present subfield of
5347 * the QoS Control field is 1)...
5349 * 8.2.4.5.1 "QoS Control field structure", table 8-4, in 802.11-2012,
5350 * seems to indicate that the bit that means "Mesh Control Present" in
5351 * frames sent by mesh STAs in a mesh BSS is part of the TXOP Limit field,
5352 * the AP PS Buffer State field, the TXOP Duration Requested field, or the
5353 * Queue Size field in some data frames in non-mesh BSSes.
5355 * We need a statefull sniffer for that. For now, use heuristics.
5357 * Notably, only mesh data frames contain the Mesh Control field in the header.
5358 * Other frames that contain mesh control (i.e., multihop action frames) have
5359 * it deeper in the frame body where it can be definitively identified.
5360 * Further, mesh data frames always have to-ds and from-ds either 11 or 01. We
5361 * use these facts to make our heuristics more reliable.
5362 * ************************************************************************* */
5364 has_mesh_control(guint16 fcf, guint16 qos_ctl, guint8 mesh_flags)
5366 /* assume mesh control present if the QOS field's Mesh Control Present bit is
5367 * set, all reserved bits in the mesh_flags field are zero, and the address
5368 * extension mode is not a reserved value.
5370 return (((FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T4) || (FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T2)) &&
5371 (QOS_MESH_CONTROL_PRESENT(qos_ctl)) &&
5372 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION) == 0) &&
5373 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION) != MESH_FLAGS_ADDRESS_EXTENSION));
5377 find_mesh_control_length(guint8 mesh_flags)
5379 return 6 + 6*(mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION);
5382 static mimo_control_t
5383 get_mimo_control(tvbuff_t *tvb, int offset)
5386 mimo_control_t output;
5388 mimo = tvb_get_letohs(tvb, offset);
5390 output.nc = (mimo & 0x0003) + 1;
5391 output.nr = ((mimo & 0x000C) >> 2) + 1;
5392 output.chan_width = (mimo & 0x0010) >> 4;
5393 output.coefficient_size = 4; /* XXX - Is this a good default? */
5395 switch ((mimo & 0x0060) >> 5)
5398 output.grouping = 1;
5402 output.grouping = 2;
5406 output.grouping = 4;
5410 output.grouping = 1;
5414 switch ((mimo & 0x0180) >> 7)
5417 output.coefficient_size = 4;
5421 output.coefficient_size = 5;
5425 output.coefficient_size = 6;
5429 output.coefficient_size = 8;
5433 output.codebook_info = (mimo & 0x0600) >> 9;
5434 output.remaining_matrix_segment = (mimo & 0x3800) >> 11;
5440 get_mimo_na(guint8 nr, guint8 nc)
5442 if ((nr == 2) && (nc == 1)) {
5444 } else if ((nr == 2) && (nc == 2)) {
5446 } else if ((nr == 3) && (nc == 1)) {
5448 } else if ((nr == 3) && (nc == 2)) {
5450 } else if ((nr == 3) && (nc == 3)) {
5452 } else if ((nr == 4) && (nc == 1)) {
5454 } else if ((nr == 4) && (nc == 2)) {
5456 } else if ((nr == 4) && (nc == 3)) {
5458 } else if ((nr == 4) && (nc == 4)) {
5466 get_mimo_ns(gboolean chan_width, guint8 output_grouping)
5472 switch (output_grouping)
5490 switch (output_grouping)
5513 add_mimo_csi_matrices_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
5515 proto_tree *snr_tree;
5516 int csi_matrix_size, start_offset;
5519 start_offset = offset;
5520 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
5521 ett_mimo_report, NULL, "Signal to Noise Ratio");
5523 for (i = 1; i <= mimo_cntrl.nr; i++)
5527 snr = tvb_get_guint8(tvb, offset);
5528 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
5529 snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
5533 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
5534 csi_matrix_size = ns*(3+(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size));
5535 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
5536 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_matrices, tvb, offset, csi_matrix_size, ENC_NA);
5537 offset += csi_matrix_size;
5538 return offset - start_offset;
5542 add_mimo_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
5544 proto_tree *snr_tree;
5545 int csi_matrix_size, start_offset;
5548 start_offset = offset;
5549 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc, ett_mimo_report, NULL, "Signal to Noise Ratio");
5551 for (i = 1; i <= mimo_cntrl.nc; i++)
5555 snr = tvb_get_guint8(tvb, offset);
5556 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
5557 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
5561 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
5562 csi_matrix_size = ns*(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size);
5563 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
5564 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_bf_matrices, tvb, offset, csi_matrix_size, ENC_NA);
5565 offset += csi_matrix_size;
5566 return offset - start_offset;
5570 add_mimo_compressed_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
5572 proto_tree *snr_tree;
5573 int csi_matrix_size, start_offset;
5576 start_offset = offset;
5577 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
5578 ett_mimo_report, NULL, "Signal to Noise Ratio");
5580 for (i = 1; i <= mimo_cntrl.nc; i++)
5584 snr = tvb_get_guint8(tvb, offset);
5585 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
5586 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
5590 na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
5591 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
5592 csi_matrix_size = ns*(na*((mimo_cntrl.codebook_info+1)*2 + 2)/2);
5593 csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
5594 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_cbf_matrices, tvb, offset, csi_matrix_size, ENC_NA);
5595 offset += csi_matrix_size;
5596 return offset - start_offset;
5600 mesh_active_window_base_custom(gchar *result, guint32 mesh_active_window)
5602 g_snprintf(result, ITEM_LABEL_LENGTH, "%f [Seconds]", (mesh_active_window * 1024.0 / 1000000));
5605 /* ************************************************************************* */
5606 /* This is the capture function used to update packet counts */
5607 /* ************************************************************************* */
5609 capture_ieee80211_common(const guchar * pd, int offset, int len,
5610 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U_, gboolean datapad)
5612 guint16 fcf, hdr_length;
5614 if (!BYTES_ARE_IN_FRAME(offset, len, 2))
5617 fcf = pletoh16(&pd[offset]);
5619 if (IS_PROTECTED(FCF_FLAGS(fcf)) && (wlan_ignore_prot == WLAN_IGNORE_PROT_NO))
5622 switch (COMPOSE_FRAME_TYPE (fcf)) {
5627 case DATA_CF_ACK_POLL:
5629 case DATA_QOS_DATA_CF_ACK:
5630 case DATA_QOS_DATA_CF_POLL:
5631 case DATA_QOS_DATA_CF_ACK_POLL:
5633 /* These are data frames that actually contain *data*. */
5634 hdr_length = (FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T4) ? DATA_LONG_HDR_LEN : DATA_SHORT_HDR_LEN;
5636 if (DATA_FRAME_IS_QOS(COMPOSE_FRAME_TYPE(fcf))) {
5637 /* QoS frame, so the header includes a QoS field */
5638 guint16 qosoff; /* Offset of the 2-byte QoS field */
5641 qosoff = hdr_length;
5642 hdr_length += 2; /* Include the QoS field in the header length */
5644 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))) {
5645 /* Frame has a 4-byte HT Control field */
5650 * Does it look as if we have a mesh header?
5651 * Look at the Mesh Control subfield of the QoS field and at the
5652 * purported mesh flag fields.
5654 if (!BYTES_ARE_IN_FRAME(offset, hdr_length, 1))
5657 mesh_flags = pd[hdr_length];
5658 if (has_mesh_control(fcf, pletoh16(&pd[qosoff]), mesh_flags)) {
5659 /* Yes, add the length of that in as well. */
5660 hdr_length += find_mesh_control_length(mesh_flags);
5665 * Include the padding between the 802.11 header and the body,
5666 * as "helpfully" provided by some Atheros adapters.
5668 * XXX - would the mesh header be part of the header or the body
5669 * from the point of view of the Atheros adapters that insert
5670 * the padding, assuming they even recognize a mesh header?
5672 hdr_length = roundup2(hdr_length, 4);
5675 /* I guess some bridges take Netware Ethernet_802_3 frames,
5676 which are 802.3 frames (with a length field rather than
5677 a type field, but with no 802.2 header in the payload),
5678 and just stick the payload into an 802.11 frame. I've seen
5679 captures that show frames of that sort.
5681 We also handle some odd form of encapsulation in which a
5682 complete Ethernet frame is encapsulated within an 802.11
5683 data frame, with no 802.2 header. This has been seen
5686 On top of that, at least at some point it appeared that
5687 the OLPC XO sent out frames with two bytes of 0 between
5688 the "end" of the 802.11 header and the beginning of
5691 So, if the packet doesn't start with 0xaa 0xaa:
5693 we first use the same scheme that linux-wlan-ng does to detect
5694 those encapsulated Ethernet frames, namely looking to see whether
5695 the frame either starts with 6 octets that match the destination
5696 address from the 802.11 header or has 6 octets that match the
5697 source address from the 802.11 header following the first 6 octets,
5698 and, if so, treat it as an encapsulated Ethernet frame;
5700 otherwise, we use the same scheme that we use in the Ethernet
5701 dissector to recognize Netware 802.3 frames, namely checking
5702 whether the packet starts with 0xff 0xff and, if so, treat it
5703 as an encapsulated IPX frame, and then check whether the
5704 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
5706 if (!BYTES_ARE_IN_FRAME(offset+hdr_length, len, 2))
5709 if ((pd[offset+hdr_length] != 0xaa) && (pd[offset+hdr_length+1] != 0xaa)) {
5711 /* XXX - this requires us to parse the header to find the source
5712 and destination addresses. */
5713 if (BYTES_ARE_IN_FRAME(offset+hdr_length, len, 12)) {
5714 /* We have two MAC addresses after the header. */
5715 if ((memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0) ||
5716 (memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0)) {
5717 return capture_eth (pd, offset + hdr_length, len, cpinfo, pseudo_header);
5721 if ((pd[offset+hdr_length] == 0xff) && (pd[offset+hdr_length+1] == 0xff))
5722 return call_capture_dissector (ipx_cap_handle, pd, offset+hdr_length, len, cpinfo, pseudo_header);
5723 else if ((pd[offset+hdr_length] == 0x00) && (pd[offset+hdr_length+1] == 0x00))
5724 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length + 2, len, cpinfo, pseudo_header);
5727 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length, len, cpinfo, pseudo_header);
5737 * Handle 802.11 with a variable-length link-layer header.
5740 capture_ieee80211(const guchar * pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U_)
5742 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, FALSE);
5746 * Handle 802.11 with a variable-length link-layer header and data padding.
5749 capture_ieee80211_datapad(const guchar * pd, int offset, int len,
5750 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U_)
5752 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, TRUE);
5756 /* ************************************************************************* */
5757 /* Add the subtree used to store the fixed parameters */
5758 /* ************************************************************************* */
5760 get_fixed_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size)
5762 proto_item *fixed_fields;
5764 fixed_fields = proto_tree_add_item(tree, hf_ieee80211_fixed_parameters, tvb, start, size, ENC_NA);
5765 proto_item_append_text(fixed_fields, " (%d bytes)", size);
5767 return proto_item_add_subtree(fixed_fields, ett_fixed_parameters);
5771 /* ************************************************************************* */
5772 /* Add the subtree used to store tagged parameters */
5773 /* ************************************************************************* */
5775 get_tagged_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size)
5777 proto_item *tagged_fields;
5779 tagged_fields = proto_tree_add_item(tree, hf_ieee80211_tagged_parameters, tvb, start, -1, ENC_NA);
5780 proto_item_append_text(tagged_fields, " (%d bytes)", size);
5782 return proto_item_add_subtree(tagged_fields, ett_tagged_parameters);
5787 dissect_vendor_action_marvell(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
5792 octet = tvb_get_guint8(tvb, offset);
5793 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_action_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5797 case MRVL_ACTION_MESH_MANAGEMENT:
5798 octet = tvb_get_guint8(tvb, offset);
5799 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5803 case MRVL_MESH_MGMT_ACTION_RREQ:
5804 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5806 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5808 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5810 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5812 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_rreqid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5814 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA);
5816 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5818 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5820 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5822 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5824 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5826 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
5828 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5831 case MRVL_MESH_MGMT_ACTION_RREP:
5832 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5834 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5836 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5838 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5840 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
5842 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5844 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5846 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5848 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA);
5850 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5853 case MRVL_MESH_MGMT_ACTION_RERR:
5854 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5856 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5858 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5860 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA);
5862 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5877 dissect_vendor_action_wifi_alliance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
5884 subtype = tvb_get_guint8(tvb, offset);
5885 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_subtype, tvb, offset, 1, ENC_NA);
5888 subtvb = tvb_new_subset_remaining(tvb, offset);
5889 dissected = dissector_try_uint_new(wifi_alliance_action_subtype_table, subtype, subtvb, pinfo, tree, FALSE, NULL);
5892 call_data_dissector(subtvb, pinfo, tree);
5893 dissected = tvb_reported_length(subtvb);
5896 offset += dissected;
5902 dissect_advertisement_protocol_common(packet_info *pinfo, proto_tree *tree,
5903 tvbuff_t *tvb, int offset, guint *type,
5906 guint8 tag_no, tag_len, left;
5907 proto_item *item = NULL, *adv_item;
5908 proto_tree *adv_tree, *adv_tuple_tree;
5911 *type = 0xff; // Last reserved value
5914 tag_no = tvb_get_guint8(tvb, offset);
5916 item = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5918 tag_len = tvb_get_guint8(tvb, offset + 1);
5919 if (tag_no != TAG_ADVERTISEMENT_PROTOCOL) {
5920 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_number,
5921 "Unexpected IE %d (expected Advertisement "
5922 "Protocol)", tag_no);
5926 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
5929 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
5930 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
5931 "Advertisement Protocol: IE must be at least 2 "
5938 adv_tree = proto_tree_add_subtree(tree, tvb, offset, left,
5939 ett_adv_proto, &adv_item, "Advertisement Protocol element");
5944 id = tvb_get_guint8(tvb, offset + 1);
5946 proto_item_append_text(adv_item, ": ANQP");
5947 adv_tuple_tree = proto_tree_add_subtree_format(adv_tree, tvb, offset, 2, ett_adv_proto_tuple, &item,
5948 "Advertisement Protocol Tuple: %s",
5949 val_to_str(id, adv_proto_id_vals,
5952 proto_tree_add_item(adv_tuple_tree,
5953 hf_ieee80211_tag_adv_proto_resp_len_limit, tvb,
5954 offset, 1, ENC_LITTLE_ENDIAN);
5955 proto_tree_add_item(adv_tuple_tree,
5956 hf_ieee80211_tag_adv_proto_pame_bi, tvb,
5957 offset, 1, ENC_LITTLE_ENDIAN);
5960 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_id, tvb,
5961 offset, 1, ENC_LITTLE_ENDIAN);
5965 if ((id == 0) && type)
5966 *type = ADV_PROTO_ID_ANQP;
5969 /* Vendor specific */
5970 guint8 len = tvb_get_guint8(tvb, offset);
5973 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_vs_len, tvb, offset, 1, ENC_NA);
5976 *type = ADV_PROTO_ID_VS;
5978 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
5979 "Vendor specific info length error");
5982 oui = tvb_get_ntoh24(tvb, offset);
5983 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
5986 wfa_subtype = tvb_get_guint8(tvb, offset);
5987 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_anqp_wfa_subtype, tvb,
5991 if (oui == OUI_WFA) {
5992 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_dpp_subtype, tvb, offset, 1, ENC_NA);
5993 if (wfa_subtype == WFA_SUBTYPE_DPP) {
5994 *subtype = WFA_SUBTYPE_DPP;
5995 *subtype |= (tvb_get_guint8(tvb, offset) << 8);
6004 expert_add_info_format(pinfo, item, &ei_ieee80211_extra_data,
6005 "Unexpected extra data in the end");
6012 dissect_advertisement_protocol(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
6014 return dissect_advertisement_protocol_common(pinfo, tree, tvb, 0, NULL, NULL);
6018 dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
6020 while (offset + 2 <= end) {
6021 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
6022 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6025 if (offset != end) {
6026 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
6027 "Unexpected ANQP Query list format");
6032 dissect_hs20_anqp_hs_capability_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6034 while (offset < end) {
6035 proto_tree_add_item(tree, hf_hs20_anqp_hs_capability_list,
6036 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6042 dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
6050 while (offset + 2 <= end) {
6051 id = tvb_get_letohs(tvb, offset);
6052 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_capability,
6053 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6055 if (id == ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST) {
6056 vtree = proto_item_add_subtree(item, ett_anqp_vendor_capab);
6057 len = tvb_get_letohs(tvb, offset);
6058 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vlen,
6059 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6061 if ((len < 3) || ((offset + len) > end)) {
6062 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_capability);
6065 oui = tvb_get_ntoh24(tvb, offset);
6066 proto_tree_add_item(vtree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
6074 subtype = tvb_get_guint8(tvb, offset);
6075 proto_item_append_text(vtree, " - WFA - %s",
6076 val_to_str(subtype, wfa_subtype_vals,
6078 proto_tree_add_item(vtree, hf_ieee80211_anqp_wfa_subtype,
6079 tvb, offset, 1, ENC_NA);
6083 case WFA_SUBTYPE_HS20_ANQP:
6084 dissect_hs20_anqp_hs_capability_list(vtree, tvb, offset, end);
6087 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
6088 tvb, offset, len, ENC_NA);
6093 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
6094 tvb, offset, len, ENC_NA);
6101 if (offset != end) {
6102 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
6103 "Unexpected ANQP Capability list format");
6107 static const value_string venue_group_vals[] = {
6108 { 0, "Unspecified" },
6111 { 3, "Educational" },
6112 { 4, "Factory and Industrial" },
6113 { 5, "Institutional" },
6114 { 6, "Mercantile" },
6115 { 7, "Residential" },
6117 { 9, "Utility and Miscellaneous" },
6118 { 10, "Vehicular" },
6122 static value_string_ext venue_group_vals_ext = VALUE_STRING_EXT_INIT(venue_group_vals);
6125 dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
6127 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_group,
6128 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6129 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_type,
6130 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
6134 dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
6138 dissect_venue_info(tree, tvb, offset);
6140 while (offset + 4 <= end) {
6141 guint8 vlen = tvb_get_guint8(tvb, offset);
6142 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_length,
6143 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6145 if ((vlen > (end - offset)) || (vlen < 3)) {
6146 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_venue_length);
6149 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_language,
6150 tvb, offset, 3, ENC_ASCII|ENC_NA);
6151 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_name,
6152 tvb, offset + 3, vlen - 3, ENC_UTF_8|ENC_NA);
6157 static const value_string nw_auth_type_vals[] = {
6158 { 0, "Acceptance of terms and conditions" },
6159 { 1, "On-line enrollment supported" },
6160 { 2, "http/https redirection" },
6161 { 3, "DNS redirection" },
6166 dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6168 while (offset + 3 <= end) {
6170 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_indicator,
6171 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6173 len = tvb_get_letohs(tvb, offset);
6174 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url_len,
6175 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6178 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url,
6179 tvb, offset, len, ENC_ASCII|ENC_NA);
6185 add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
6187 const gchar *manuf_name;
6189 manuf_name = tvb_get_manuf_name_if_known(tvb, offset);
6190 if (manuf_name == NULL)
6192 proto_item_append_text(item, " - %s", manuf_name);
6196 dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6202 while (offset < end) {
6203 len = tvb_get_guint8(tvb, offset);
6204 item = proto_tree_add_item(tree,
6205 hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
6206 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6208 if ((len > (end - offset)) || (len < 3)) {
6209 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_roaming_consortium_oi_len);
6212 item = proto_tree_add_item(tree,
6213 hf_ieee80211_ff_anqp_roaming_consortium_oi,
6214 tvb, offset, len, ENC_NA);
6215 add_manuf(item, tvb, offset);
6220 static const value_string ip_addr_avail_ipv6_vals[] = {
6221 { 0, "Address type not available" },
6222 { 1, "Address type available" },
6223 { 2, "Availability of the address type not known" },
6227 static const value_string ip_addr_avail_ipv4_vals[] = {
6228 { 0, "Address type not available" },
6229 { 1, "Public IPv4 address available" },
6230 { 2, "Port-restricted IPv4 address available" },
6231 { 3, "Single NATed private IPv4 address available" },
6232 { 4, "Double NATed private IPv4 address available" },
6233 { 5, "Port-restricted IPv4 address and single NATed IPv4 address available" },
6234 { 6, "Port-restricted IPv4 address and double NATed IPv4 address available" },
6235 { 7, "Availability of the address type is not known" },
6240 dissect_ip_addr_type_availability_info(proto_tree *tree, tvbuff_t *tvb,
6243 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
6244 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6245 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
6246 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6249 static const value_string nai_realm_encoding_vals[] = {
6250 { 0, "Formatted in accordance with RFC 4282" },
6251 { 1, "UTF-8 formatted that is not formatted in accordance with RFC 4282" },
6255 static const value_string nai_realm_auth_param_id_vals[] = {
6256 { 1, "Expanded EAP Method" },
6257 { 2, "Non-EAP Inner Authentication Type" },
6258 { 3, "Inner Authentication EAP Method Type" },
6259 { 4, "Expanded Inner EAP Method" },
6260 { 5, "Credential Type" },
6261 { 6, "Tunneled EAP Method Credential Type" },
6262 { 221, "Vendor Specific" },
6267 dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
6270 proto_item *item, *r_item;
6272 guint8 nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
6273 guint8 auth_param_id;
6274 proto_tree *realm_tree, *eap_tree;
6275 const guint8 *realm;
6277 count = tvb_get_letohs(tvb, offset);
6278 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nai_realm_count,
6279 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6282 len = tvb_get_letohs(tvb, offset);
6283 realm_tree = proto_tree_add_subtree(tree, tvb, offset, 2 + len, ett_nai_realm, &r_item, "NAI Realm Data");
6285 item = proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_field_len,
6286 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6288 if (offset + len > end) {
6289 expert_add_info_format(pinfo, item, &ei_ieee80211_ff_anqp_nai_field_len,
6290 "Invalid NAI Realm List");
6293 f_end = offset + len;
6294 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_encoding,
6295 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6297 nai_len = tvb_get_guint8(tvb, offset);
6298 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_length,
6299 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6301 if (offset + nai_len > f_end) {
6302 expert_add_info_format(pinfo, r_item, &ei_ieee80211_ff_anqp_nai_field_len,
6303 "Invalid NAI Realm Data");
6306 proto_tree_add_item_ret_string(realm_tree, hf_ieee80211_ff_anqp_nai_realm,
6307 tvb, offset, nai_len, ENC_ASCII|ENC_NA, wmem_packet_scope(), &realm);
6309 proto_item_append_text(r_item, " (%s)", realm);
6312 eap_count = tvb_get_guint8(tvb, offset);
6313 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_eap_count,
6314 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6317 while (eap_count > 0) {
6318 eap_len = tvb_get_guint8(tvb, offset);
6319 eap_end = offset + 1 + eap_len;
6320 eap_tree = proto_tree_add_subtree(realm_tree, tvb, offset, 1 + eap_len,
6321 ett_nai_realm_eap, NULL, "EAP Method");
6323 item = proto_tree_add_item(eap_tree,
6324 hf_ieee80211_ff_anqp_nai_realm_eap_len,
6325 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6327 if (offset + eap_len > f_end) {
6328 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_nai_realm_eap_len);
6332 proto_item_append_text(eap_tree, ": %s",
6333 val_to_str_ext(tvb_get_guint8(tvb, offset),
6334 &eap_type_vals_ext, "Unknown (%d)"));
6335 proto_tree_add_item(eap_tree, hf_ieee80211_ff_anqp_nai_realm_eap_method,
6336 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6338 auth_param_count = tvb_get_guint8(tvb, offset);
6339 proto_tree_add_item(eap_tree,
6340 hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
6341 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6344 while (auth_param_count > 0) {
6345 auth_param_id = tvb_get_guint8(tvb, offset);
6346 proto_tree_add_item(eap_tree,
6347 hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
6348 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6350 auth_param_len = tvb_get_guint8(tvb, offset);
6351 proto_tree_add_item(eap_tree,
6352 hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
6353 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6355 item = proto_tree_add_item(
6356 eap_tree, hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
6357 tvb, offset, auth_param_len, ENC_NA);
6358 if ((auth_param_id == 3) && (auth_param_len == 1)) {
6359 guint8 inner_method = tvb_get_guint8(tvb, offset);
6361 str = val_to_str_ext(inner_method, &eap_type_vals_ext, "Unknown (%d)");
6363 proto_item_append_text(eap_tree, " / %s", str);
6364 proto_item_append_text(item, " - %s", str);
6366 offset += auth_param_len;
6381 dissect_3gpp_cellular_network_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
6386 /* See Annex A of 3GPP TS 24.234 v8.1.0 for description */
6387 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_gud, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6389 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_udhl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6391 iei = tvb_get_guint8(tvb, offset);
6392 item = proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_iei, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6394 proto_item_append_text(item, " (PLMN List)");
6398 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_plmn_len, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6400 num = tvb_get_guint8(tvb, offset);
6401 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_num_plmns, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6404 if (tvb_reported_length_remaining(tvb, offset) < 3)
6406 dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, tree, offset, E212_NONE, TRUE);
6413 dissect_domain_name_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6417 while (offset < end) {
6418 len = tvb_get_guint8(tvb, offset);
6419 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name_len,
6420 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6422 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name,
6423 tvb, offset, len, ENC_ASCII|ENC_NA);
6428 #define HS20_ANQP_HS_QUERY_LIST 1
6429 #define HS20_ANQP_HS_CAPABILITY_LIST 2
6430 #define HS20_ANQP_OPERATOR_FRIENDLY_NAME 3
6431 #define HS20_ANQP_WAN_METRICS 4
6432 #define HS20_ANQP_CONNECTION_CAPABILITY 5
6433 #define HS20_ANQP_NAI_HOME_REALM_QUERY 6
6434 #define HS20_ANQP_OPERATING_CLASS_INDICATION 7
6436 static const value_string hs20_anqp_subtype_vals[] = {
6437 { HS20_ANQP_HS_QUERY_LIST, "HS Query list" },
6438 { HS20_ANQP_HS_CAPABILITY_LIST, "HS Capability List" },
6439 { HS20_ANQP_OPERATOR_FRIENDLY_NAME, "Operator Friendly Name" },
6440 { HS20_ANQP_WAN_METRICS, "WAN Metrics" },
6441 { HS20_ANQP_CONNECTION_CAPABILITY, "Connection Capability" },
6442 { HS20_ANQP_NAI_HOME_REALM_QUERY, "NAI Home Realm Query" },
6443 { HS20_ANQP_OPERATING_CLASS_INDICATION, "Operating Class Indication" },
6448 dissect_hs20_anqp_hs_query_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6450 while (offset < end) {
6451 proto_tree_add_item(tree, hf_hs20_anqp_hs_query_list,
6452 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6458 dissect_hs20_anqp_operator_friendly_name(proto_tree *tree, tvbuff_t *tvb,
6459 packet_info *pinfo, int offset, int end)
6461 while (offset + 4 <= end) {
6462 guint8 vlen = tvb_get_guint8(tvb, offset);
6463 proto_item *item = proto_tree_add_item(tree, hf_hs20_anqp_ofn_length,
6464 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6466 if (vlen > end - offset || vlen < 3) {
6467 expert_add_info(pinfo, item, &ei_hs20_anqp_ofn_length);
6470 proto_tree_add_item(tree, hf_hs20_anqp_ofn_language,
6471 tvb, offset, 3, ENC_ASCII|ENC_NA);
6472 proto_tree_add_item(tree, hf_hs20_anqp_ofn_name,
6473 tvb, offset + 3, vlen - 3, ENC_UTF_8|ENC_NA);
6478 static const value_string hs20_wm_link_status_vals[] = {
6482 { 3, "Link in test state" },
6487 dissect_hs20_anqp_wan_metrics(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean request)
6492 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_link_status,
6493 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6494 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_symmetric_link,
6495 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6496 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_at_capacity,
6497 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6498 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_reserved,
6499 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6502 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_downlink_speed,
6503 tvb, offset, 4, ENC_LITTLE_ENDIAN);
6506 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_uplink_speed,
6507 tvb, offset, 4, ENC_LITTLE_ENDIAN);
6510 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_downlink_load,
6511 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6514 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_uplink_load,
6515 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6518 proto_tree_add_item(tree, hf_hs20_anqp_wan_metrics_lmd,
6519 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6522 static const value_string hs20_cc_status_vals[] = {
6530 dissect_hs20_anqp_connection_capability(proto_tree *tree, tvbuff_t *tvb,
6531 int offset, int end)
6534 while (offset + 4 <= end) {
6535 guint8 ip_proto, status;
6538 ip_proto = tvb_get_guint8(tvb, offset);
6539 port_num = tvb_get_letohs(tvb, offset + 1);
6540 status = tvb_get_guint8(tvb, offset + 3);
6542 tuple = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_hs20_cc_proto_port_tuple, NULL,
6543 "ProtoPort Tuple - ip_proto=%u port_num=%u status=%s",
6545 val_to_str(status, hs20_cc_status_vals,
6547 proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_ip_proto,
6548 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6550 proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_port_num,
6551 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6553 proto_tree_add_item(tuple, hf_hs20_anqp_cc_proto_status,
6554 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6560 dissect_hs20_anqp_nai_home_realm_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
6561 int offset, int end)
6566 proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_count,
6567 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6570 while (offset + 2 <= end) {
6571 proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_encoding_type,
6572 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6574 len = tvb_get_guint8(tvb, offset);
6575 item = proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_length,
6576 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6578 if (offset + len > end) {
6579 expert_add_info(pinfo, item, &ei_hs20_anqp_nai_hrq_length);
6582 proto_tree_add_item(tree, hf_hs20_anqp_nai_hrq_realm_name,
6583 tvb, offset, len, ENC_ASCII|ENC_NA);
6589 dissect_hs20_anqp_oper_class_indic(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
6591 while (offset < end) {
6592 proto_tree_add_item(tree, hf_hs20_anqp_oper_class_indic,
6593 tvb, offset, 1, ENC_LITTLE_ENDIAN);
6599 dissect_hs20_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
6602 int end = tvb_reported_length(tvb);
6604 anqp_info_dissector_data_t* anqp_data = (anqp_info_dissector_data_t*)data;
6606 DISSECTOR_ASSERT(anqp_data);
6608 subtype = tvb_get_guint8(tvb, offset);
6609 proto_item_append_text(tree, " - HS 2.0 %s",
6610 val_to_str(subtype, hs20_anqp_subtype_vals,
6612 if (anqp_data->idx == 0) {
6613 col_append_fstr(pinfo->cinfo, COL_INFO, " HS 2.0 %s",
6614 val_to_str(subtype, hs20_anqp_subtype_vals,
6616 } else if (anqp_data->idx == 1) {
6617 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
6619 proto_tree_add_item(tree, hf_hs20_anqp_subtype, tvb, offset, 1,
6623 proto_tree_add_item(tree, hf_hs20_anqp_reserved, tvb, offset, 1,
6628 case HS20_ANQP_HS_QUERY_LIST:
6629 dissect_hs20_anqp_hs_query_list(tree, tvb, offset, end);
6631 case HS20_ANQP_HS_CAPABILITY_LIST:
6632 dissect_hs20_anqp_hs_capability_list(tree, tvb, offset, end);
6634 case HS20_ANQP_OPERATOR_FRIENDLY_NAME:
6635 dissect_hs20_anqp_operator_friendly_name(tree, tvb, pinfo, offset, end);
6637 case HS20_ANQP_WAN_METRICS:
6638 dissect_hs20_anqp_wan_metrics(tree, tvb, offset, anqp_data->request);
6640 case HS20_ANQP_CONNECTION_CAPABILITY:
6641 dissect_hs20_anqp_connection_capability(tree, tvb, offset, end);
6643 case HS20_ANQP_NAI_HOME_REALM_QUERY:
6644 dissect_hs20_anqp_nai_home_realm_query(tree, tvb, pinfo, offset, end);
6646 case HS20_ANQP_OPERATING_CLASS_INDICATION:
6647 dissect_hs20_anqp_oper_class_indic(tree, tvb, offset, end);
6652 proto_tree_add_item(tree, hf_hs20_anqp_payload, tvb, offset,
6653 end - offset, ENC_NA);
6657 return tvb_captured_length(tvb);
6661 dissect_vendor_wifi_alliance_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
6667 subtype = tvb_get_guint8(tvb, offset);
6668 proto_tree_add_item(tree, hf_ieee80211_anqp_wfa_subtype, tvb, offset, 1, ENC_NA);
6671 subtvb = tvb_new_subset_remaining(tvb, offset);
6672 if (!dissector_try_uint_new(wifi_alliance_anqp_info_table, subtype, subtvb, pinfo, tree, FALSE, data))
6673 call_data_dissector(subtvb, pinfo, tree);
6675 return tvb_captured_length(tvb);
6680 dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6681 gboolean request, int idx)
6686 tvbuff_t *vendor_tvb;
6687 anqp_info_dissector_data_t anqp_info;
6689 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_id,
6690 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6691 id = tvb_get_letohs(tvb, offset);
6692 if (id != ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST) {
6694 proto_item_append_text(tree, " - %s",
6695 val_to_str_ext(id, &anqp_info_id_vals_ext, "Unknown (%u)"));
6696 col_append_fstr(pinfo->cinfo, COL_INFO, " %s",
6697 val_to_str_ext(id, &anqp_info_id_vals_ext, "Unknown (%u)"));
6698 } else if (idx == 1) {
6699 proto_item_append_text(tree, ", ..");
6700 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
6703 tree = proto_item_add_subtree(item, ett_gas_anqp);
6705 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_length,
6706 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6707 len = tvb_get_letohs(tvb, offset);
6709 if (tvb_reported_length_remaining(tvb, offset) < len) {
6710 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_info_length);
6715 case ANQP_INFO_ANQP_QUERY_LIST:
6716 dissect_anqp_query_list(tree, tvb, pinfo, offset, offset + len);
6718 case ANQP_INFO_ANQP_CAPAB_LIST:
6719 dissect_anqp_capab_list(tree, tvb, pinfo, offset, offset + len);
6721 case ANQP_INFO_VENUE_NAME_INFO:
6722 dissect_venue_name_info(tree, tvb, pinfo, offset, offset + len);
6724 case ANQP_INFO_NETWORK_AUTH_TYPE_INFO:
6725 dissect_network_auth_type(tree, tvb, offset, offset + len);
6727 case ANQP_INFO_ROAMING_CONSORTIUM_LIST:
6728 dissect_roaming_consortium_list(tree, tvb, pinfo, offset, offset + len);
6730 case ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO:
6731 dissect_ip_addr_type_availability_info(tree, tvb, offset);
6733 case ANQP_INFO_NAI_REALM_LIST:
6734 dissect_nai_realm_list(tree, tvb, pinfo, offset, offset + len);
6736 case ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO:
6737 dissect_3gpp_cellular_network_info(tree, tvb, pinfo, offset);
6739 case ANQP_INFO_DOMAIN_NAME_LIST:
6740 dissect_domain_name_list(tree, tvb, offset, offset + len);
6742 case ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST:
6743 oui = tvb_get_ntoh24(tvb, offset);
6744 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
6746 vendor_tvb = tvb_new_subset_length(tvb, offset, len);
6748 anqp_info.request = request;
6749 anqp_info.idx = idx;
6750 if (!dissector_try_uint_new(vendor_specific_anqp_info_table, oui, vendor_tvb, pinfo, tree, FALSE, &anqp_info))
6752 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info, tvb, offset, len, ENC_NA);
6756 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
6757 tvb, offset, len, ENC_NA);
6765 dissect_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, gboolean request)
6769 proto_item_append_text(tree, ": ANQP ");
6770 proto_item_append_text(tree, request ? "Request" : "Response");
6771 if (tvb_reported_length_remaining(tvb, offset) < 4) {
6772 expert_add_info_format(pinfo, tree, &ei_ieee80211_not_enough_room_for_anqp_header,
6773 "Not enough room for ANQP header");
6776 col_append_fstr(pinfo->cinfo, COL_INFO, ", ANQP %s",
6777 request ? "Req" : "Resp");
6778 while (tvb_reported_length_remaining(tvb, offset) > 0) {
6779 offset += dissect_anqp_info(tree, tvb, pinfo, offset, request, idx);
6785 dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6786 guint type, guint subtype)
6793 /* Query Request Length (2 octets) */
6794 req_len = tvb_get_letohs(tvb, offset);
6796 query = proto_tree_add_subtree(tree, tvb, offset, 2 + req_len, ett_gas_query, &item, "Query Request");
6797 if (tvb_reported_length_remaining(tvb, offset) < 2 + req_len) {
6798 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_request_length);
6799 return tvb_reported_length_remaining(tvb, offset);
6802 proto_tree_add_item(query, hf_ieee80211_ff_query_request_length,
6803 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6806 * Query Request (GAS query; formatted per protocol specified in the
6807 * Advertisement Protocol IE)
6810 case ADV_PROTO_ID_ANQP:
6811 dissect_anqp(query, tvb, pinfo, offset, TRUE);
6813 case ADV_PROTO_ID_VS:
6814 if (subtype == ((DPP_CONFIGURATION_PROTOCOL << 8) | WFA_SUBTYPE_DPP)) {
6815 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
6816 val_to_str(subtype >> 8, dpp_subtype_vals, "Unknown (%u)"));
6817 dissect_wifi_dpp_attributes(pinfo, query, tvb, offset);
6821 proto_tree_add_item(query, hf_ieee80211_ff_query_request,
6822 tvb, offset, req_len, ENC_NA);
6826 return offset - start;
6830 dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6831 guint type, guint subtype)
6838 /* Query Response Length (2 octets) */
6839 resp_len = tvb_get_letohs(tvb, offset);
6841 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
6842 ett_gas_query, &item, "Query Response");
6843 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
6844 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
6845 return tvb_reported_length_remaining(tvb, offset);
6848 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
6849 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6851 /* Query Response (optional) */
6854 case ADV_PROTO_ID_ANQP:
6855 dissect_anqp(query, tvb, pinfo, offset, FALSE);
6857 case ADV_PROTO_ID_VS:
6858 if (subtype == ((DPP_CONFIGURATION_PROTOCOL << 8) | WFA_SUBTYPE_DPP)) {
6859 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
6860 val_to_str(subtype >> 8, dpp_subtype_vals, "Unknown (%u)"));
6861 dissect_wifi_dpp_attributes(pinfo, query, tvb, offset);
6865 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
6866 tvb, offset, resp_len, ENC_NA);
6871 return offset - start;
6874 static reassembly_table gas_reassembly_table;
6876 static gint ett_gas_resp_fragment = -1;
6877 static gint ett_gas_resp_fragments = -1;
6879 static int hf_ieee80211_gas_resp_fragments = -1;
6880 static int hf_ieee80211_gas_resp_fragment = -1;
6881 static int hf_ieee80211_gas_resp_fragment_overlap = -1;
6882 static int hf_ieee80211_gas_resp_fragment_overlap_conflict = -1;
6883 static int hf_ieee80211_gas_resp_fragment_multiple_tails = -1;
6884 static int hf_ieee80211_gas_resp_fragment_too_long_fragment = -1;
6885 static int hf_ieee80211_gas_resp_fragment_error = -1;
6886 static int hf_ieee80211_gas_resp_fragment_count = -1;
6887 static int hf_ieee80211_gas_resp_reassembled_in = -1;
6888 static int hf_ieee80211_gas_resp_reassembled_length = -1;
6890 static const fragment_items gas_resp_frag_items = {
6891 &ett_gas_resp_fragment,
6892 &ett_gas_resp_fragments,
6893 &hf_ieee80211_gas_resp_fragments,
6894 &hf_ieee80211_gas_resp_fragment,
6895 &hf_ieee80211_gas_resp_fragment_overlap,
6896 &hf_ieee80211_gas_resp_fragment_overlap_conflict,
6897 &hf_ieee80211_gas_resp_fragment_multiple_tails,
6898 &hf_ieee80211_gas_resp_fragment_too_long_fragment,
6899 &hf_ieee80211_gas_resp_fragment_error,
6900 &hf_ieee80211_gas_resp_fragment_count,
6901 &hf_ieee80211_gas_resp_reassembled_in,
6902 &hf_ieee80211_gas_resp_reassembled_length,
6903 /* Reassembled data field */
6905 "GAS Response fragments"
6909 dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
6910 guint type, guint subtype _U_, guint8 frag, gboolean more,
6911 guint8 dialog_token)
6918 /* Query Response Length (2 octets) */
6919 resp_len = tvb_get_letohs(tvb, offset);
6921 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
6922 ett_gas_query, &item, "Query Response");
6923 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
6924 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
6925 return tvb_reported_length_remaining(tvb, offset);
6928 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
6929 tvb, offset, 2, ENC_LITTLE_ENDIAN);
6931 /* Query Response (optional) */
6933 if (type == ADV_PROTO_ID_ANQP && (frag == 0) && !more)
6934 dissect_anqp(query, tvb, pinfo, offset, FALSE);
6936 fragment_head *frag_msg;
6937 gboolean save_fragmented;
6940 save_fragmented = pinfo->fragmented;
6941 pinfo->fragmented = TRUE;
6942 frag_msg = fragment_add_seq_check(&gas_reassembly_table, tvb, offset,
6943 pinfo, dialog_token, NULL,
6944 frag, resp_len, more);
6945 new_tvb = process_reassembled_data(tvb, offset, pinfo,
6946 "Reassembled GAS Query Response",
6947 frag_msg, &gas_resp_frag_items,
6950 if (type == ADV_PROTO_ID_ANQP)
6951 dissect_anqp(query, new_tvb, pinfo, 0, FALSE);
6953 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
6955 tvb_reported_length_remaining(new_tvb, 0),
6959 /* The old tvb cannot be used anymore */
6960 ieee80211_tvb_invalid = TRUE;
6962 pinfo->fragmented = save_fragmented;
6967 return offset - start;
6970 /* ************************************************************************* */
6971 /* Dissect and add fixed mgmt fields to protocol tree */
6972 /* ************************************************************************* */
6974 static guint64 last_timestamp;
6977 add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6979 last_timestamp = tvb_get_letoh64(tvb, offset);
6980 proto_tree_add_item(tree, hf_ieee80211_ff_timestamp, tvb, offset, 8,
6986 add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
6988 proto_tree_add_item(tree, hf_ieee80211_ff_beacon_interval, tvb, offset, 2,
6990 col_append_fstr(pinfo->cinfo, COL_INFO, ", BI=%d",
6991 tvb_get_letohs(tvb, offset));
6996 add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
6998 static const int *ieee80211_ap_fields[] = {
6999 &hf_ieee80211_ff_cf_ess,
7000 &hf_ieee80211_ff_cf_ibss,
7001 &hf_ieee80211_ff_cf_ap_poll,
7002 &hf_ieee80211_ff_cf_privacy,
7003 &hf_ieee80211_ff_cf_preamble,
7004 &hf_ieee80211_ff_cf_pbcc,
7005 &hf_ieee80211_ff_cf_agility,
7006 &hf_ieee80211_ff_cf_spec_man,
7007 &hf_ieee80211_ff_short_slot_time,
7008 &hf_ieee80211_ff_cf_apsd,
7009 &hf_ieee80211_ff_radio_measurement,
7010 &hf_ieee80211_ff_dsss_ofdm,
7011 &hf_ieee80211_ff_cf_del_blk_ack,
7012 &hf_ieee80211_ff_cf_imm_blk_ack,
7016 static const int *ieee80211_sta_fields[] = {
7017 &hf_ieee80211_ff_cf_ess,
7018 &hf_ieee80211_ff_cf_ibss,
7019 &hf_ieee80211_ff_cf_sta_poll,
7020 &hf_ieee80211_ff_cf_privacy,
7021 &hf_ieee80211_ff_cf_preamble,
7022 &hf_ieee80211_ff_cf_pbcc,
7023 &hf_ieee80211_ff_cf_agility,
7024 &hf_ieee80211_ff_cf_spec_man,
7025 &hf_ieee80211_ff_short_slot_time,
7026 &hf_ieee80211_ff_cf_apsd,
7027 &hf_ieee80211_ff_radio_measurement,
7028 &hf_ieee80211_ff_dsss_ofdm,
7029 &hf_ieee80211_ff_cf_del_blk_ack,
7030 &hf_ieee80211_ff_cf_imm_blk_ack,
7034 if ((tvb_get_letohs(tvb, offset) & 0x0001) != 0) {
7036 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_capture,
7037 ett_cap_tree, ieee80211_ap_fields,
7038 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
7041 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_capture,
7042 ett_cap_tree, ieee80211_sta_fields,
7043 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
7050 add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7052 proto_tree_add_item(tree, hf_ieee80211_ff_auth_alg, tvb, offset, 2,
7058 add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7060 proto_tree_add_item(tree, hf_ieee80211_ff_auth_seq, tvb, offset, 2,
7066 add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7068 proto_tree_add_item(tree, hf_ieee80211_ff_current_ap, tvb, offset, 6,
7074 add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7076 proto_tree_add_item(tree, hf_ieee80211_ff_listen_ival, tvb, offset, 2,
7082 add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7084 proto_tree_add_item(tree, hf_ieee80211_ff_reason, tvb, offset, 2,
7090 add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7092 proto_tree_add_item(tree, hf_ieee80211_ff_assoc_id, tvb, offset, 2,
7098 add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7100 proto_tree_add_item(tree, hf_ieee80211_ff_status_code, tvb, offset, 2,
7106 add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7108 proto_tree_add_item(tree, hf_ieee80211_ff_category_code, tvb, offset, 1,
7114 add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7116 proto_tree_add_item(tree, hf_ieee80211_ff_action_code, tvb, offset, 1,
7122 add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7124 proto_tree_add_item(tree, hf_ieee80211_ff_dialog_token, tvb, offset, 1,
7130 add_ff_followup_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7132 proto_tree_add_item(tree, hf_ieee80211_ff_followup_dialog_token, tvb, offset, 1,
7138 add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7140 proto_tree_add_item(tree, hf_ieee80211_ff_wme_action_code, tvb, offset, 1,
7146 add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7148 proto_tree_add_item(tree, hf_ieee80211_ff_wme_status_code, tvb, offset, 1,
7154 add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7156 proto_tree_add_item(tree, hf_ieee80211_ff_qos_action_code, tvb, offset, 1,
7162 add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7164 proto_tree_add_item(tree, hf_ieee80211_ff_ba_action, tvb, offset, 1,
7170 add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7172 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_params,
7173 ett_ff_ba_param_tree,
7174 ieee80211_ff_block_ack_params_fields,
7180 add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7182 proto_tree_add_item(tree, hf_ieee80211_ff_block_ack_timeout, tvb, offset, 2,
7188 add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7190 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_ssc,
7191 ett_ff_ba_ssc_tree, ieee80211_ff_block_ack_ssc_fields,
7197 add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7199 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_tsinfo,
7200 ett_tsinfo_tree, ieee80211_tsinfo_fields,
7206 add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7208 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_action, tvb, offset, 1,
7214 add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7216 proto_tree_add_item(tree, hf_ieee80211_ff_multihop_action, tvb, offset, 1,
7222 add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7227 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_flags, tvb, offset, 1,
7229 flags = tvb_get_guint8(tvb, offset);
7231 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_ttl, tvb, offset, 1,
7234 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_sequence, tvb, offset, 4,
7238 switch (flags & 0x03) {
7240 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr4, tvb, offset, 6,
7245 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr5, tvb, offset, 6,
7248 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr6, tvb, offset, 6,
7253 proto_item_append_text(tree, " Unknown Address Extension Mode");
7256 /* no default action */
7260 return offset - start;
7264 add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7266 proto_tree_add_item(tree, hf_ieee80211_ff_selfprot_action, tvb, offset, 1,
7272 add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7274 proto_tree_add_item(tree, hf_ieee80211_ff_dls_action_code, tvb, offset, 1,
7280 add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7282 proto_tree_add_item(tree, hf_ieee80211_ff_dst_mac_addr, tvb, offset, 6,
7288 add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7290 proto_tree_add_item(tree, hf_ieee80211_ff_src_mac_addr, tvb, offset, 6,
7296 add_ff_req_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7298 proto_tree_add_item(tree, hf_ieee80211_ff_req_ap_addr, tvb, offset, 6,
7304 add_ff_res_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7306 proto_tree_add_item(tree, hf_ieee80211_ff_res_ap_addr, tvb, offset, 6,
7312 add_ff_check_beacon(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7314 proto_tree_add_item(tree, hf_ieee80211_ff_check_beacon, tvb, offset, 1,
7320 add_ff_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7322 proto_tree_add_item(tree, hf_ieee80211_ff_tod, tvb, offset, 4,
7328 add_ff_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7330 proto_tree_add_item(tree, hf_ieee80211_ff_toa, tvb, offset, 4,
7336 add_ff_max_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7338 proto_tree_add_item(tree, hf_ieee80211_ff_max_tod_err, tvb, offset, 1,
7344 add_ff_max_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7346 proto_tree_add_item(tree, hf_ieee80211_ff_max_toa_err, tvb, offset, 1,
7352 add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7354 proto_tree_add_item(tree, hf_ieee80211_ff_dls_timeout, tvb, offset, 2,
7360 add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7362 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_delba_param,
7363 ett_ff_ba_param_tree, ieee80211_ff_delba_param_fields,
7369 add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7371 proto_tree_add_item(tree, hf_ieee80211_ff_max_reg_pwr, tvb, offset, 2,
7377 add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7379 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
7380 2, ENC_LITTLE_ENDIAN);
7385 add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7387 proto_tree_add_item(tree, hf_ieee80211_ff_country_str, tvb, offset, 3,
7393 add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7395 proto_tree_add_item(tree, hf_ieee80211_ff_max_tx_pwr, tvb, offset, 1,
7401 add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7403 proto_tree_add_item(tree, hf_ieee80211_ff_tx_pwr_used, tvb, offset, 1,
7409 add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7411 proto_tree_add_item(tree, hf_ieee80211_ff_transceiver_noise_floor, tvb,
7412 offset, 1, ENC_LITTLE_ENDIAN);
7417 add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7419 proto_tree_add_item(tree, hf_ieee80211_ff_channel_width, tvb, offset, 1,
7424 /* QoS Info: 802.11-2012 8.4.1.17 */
7426 add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7428 /* From AP so decode as AP: Figure 8-51-QoS Info field when sent by a AP */
7429 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
7430 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
7431 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
7436 /* QoS Info: 802.11-2012 8.4.1.17 */
7438 add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7440 /* To AP so decode as STA: Figure 8-52-QoS Info field when set by a non-AP STA */
7441 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_sta,
7442 ett_ff_qos_info, ieee80211_ff_qos_info_sta_fields,
7443 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
7448 add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7450 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_sm_pwr_save,
7451 ett_ff_sm_pwr_save, ieee80211_ff_sw_pwr_save_fields,
7457 add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7459 proto_tree_add_item(tree, hf_ieee80211_ff_pco_phase_cntrl, tvb, offset, 1,
7465 add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7467 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_psmp_param_set,
7468 ett_ff_psmp_param_set,
7469 ieee80211_ff_psmp_param_set_fields,
7475 add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7477 proto_item *mimo_item;
7478 proto_tree *mimo_tree;
7479 static const int *ieee80211_mimo_fields[] = {
7480 &hf_ieee80211_ff_mimo_cntrl_nc_index,
7481 &hf_ieee80211_ff_mimo_cntrl_nr_index,
7482 &hf_ieee80211_ff_mimo_cntrl_channel_width,
7483 &hf_ieee80211_ff_mimo_cntrl_grouping,
7484 &hf_ieee80211_ff_mimo_cntrl_coefficient_size,
7485 &hf_ieee80211_ff_mimo_cntrl_codebook_info,
7486 &hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
7487 &hf_ieee80211_ff_mimo_cntrl_reserved,
7491 mimo_item = proto_tree_add_item(tree, hf_ieee80211_ff_mimo_cntrl, tvb,
7493 mimo_tree = proto_item_add_subtree(mimo_item, ett_ff_mimo_cntrl);
7495 proto_tree_add_bitmask_list(mimo_tree, tvb, offset, 2, ieee80211_mimo_fields, ENC_LITTLE_ENDIAN);
7497 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
7498 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7504 add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7506 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ant_selection,
7507 ett_ff_ant_sel, ieee80211_ff_ant_selection_fields,
7513 add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
7514 packet_info *pinfo _U_, int offset)
7516 proto_tree_add_bitmask(tree, tvb, offset,
7517 hf_ieee80211_ff_ext_channel_switch_announcement,
7518 ett_ff_chan_switch_announce,
7519 ieee80211_ff_ext_channel_switch_announcement_fields,
7525 add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7527 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ht_info,
7528 ett_ff_ht_info, ieee80211_ff_ht_info_fields,
7534 add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7536 proto_tree_add_item(tree, hf_ieee80211_ff_ht_action, tvb, offset, 1,
7542 add_ff_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7544 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_action_code, tvb, offset, 1,
7550 add_ff_dmg_pwr_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7552 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_pwr_mgmt, tvb, offset, 1,
7558 add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7560 proto_item *psmp_item;
7561 proto_tree *psmp_tree;
7563 psmp_item = proto_tree_add_item(tree, hf_ieee80211_ff_psmp_sta_info, tvb,
7564 offset, 8, ENC_LITTLE_ENDIAN);
7565 psmp_tree = proto_item_add_subtree(psmp_item, ett_ff_psmp_sta_info);
7567 proto_tree_add_item(psmp_item, hf_ieee80211_ff_psmp_sta_info_type, tvb,
7568 offset, 4, ENC_LITTLE_ENDIAN);
7570 switch (tvb_get_letohl(tvb, offset) & PSMP_STA_INFO_FLAG_TYPE) {
7571 case PSMP_STA_INFO_BROADCAST:
7572 proto_tree_add_item(psmp_tree,
7573 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
7574 offset, 4, ENC_LITTLE_ENDIAN);
7575 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
7576 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7577 /* Missing 64 bit bitmask... */
7578 proto_tree_add_uint64(psmp_tree,
7579 hf_ieee80211_ff_psmp_sta_info_reserved_large,
7581 (tvb_get_letoh64(tvb, offset) &
7582 G_GUINT64_CONSTANT(0xFFFFFFFFFFE00000)) >> 21);
7584 case PSMP_STA_INFO_MULTICAST:
7585 proto_tree_add_item(psmp_tree,
7586 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
7587 offset, 4, ENC_LITTLE_ENDIAN);
7588 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
7589 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7590 /* Missing 64 bit bitmask... */
7591 proto_tree_add_uint64(psmp_tree,
7592 hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
7594 (tvb_get_letoh64(tvb, offset) &
7595 G_GUINT64_CONSTANT(0xFFFFFFFFFFE00000)) >> 21);
7597 case PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED:
7598 proto_tree_add_item(psmp_tree,
7599 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
7600 offset, 4, ENC_LITTLE_ENDIAN);
7601 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
7602 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7604 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_sta_id, tvb,
7605 offset, 4, ENC_LITTLE_ENDIAN);
7608 proto_tree_add_item(psmp_tree,
7609 hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
7610 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7611 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_utt_duration,
7612 tvb, offset, 4, ENC_LITTLE_ENDIAN);
7613 proto_tree_add_item(psmp_tree,
7614 hf_ieee80211_ff_psmp_sta_info_reserved_small, tvb,
7615 offset, 4, ENC_LITTLE_ENDIAN);
7623 add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7625 static const int *ieee80211_schedule_info_fields1[] = {
7626 &hf_ieee80211_sched_info_agg,
7629 static const int *ieee80211_schedule_info_fields2[] = {
7630 &hf_ieee80211_sched_info_agg,
7631 &hf_ieee80211_sched_info_tsid,
7632 &hf_ieee80211_sched_info_dir,
7636 if (tvb_get_letohs(tvb, offset) & 0x0001) {
7637 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_sched_info,
7638 ett_sched_tree, ieee80211_schedule_info_fields2,
7639 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
7641 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_sched_info,
7642 ett_sched_tree, ieee80211_schedule_info_fields1,
7643 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
7650 add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7652 proto_tree_add_item(tree, hf_ieee80211_ff_public_action, tvb, offset, 1,
7658 add_ff_ppa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7660 proto_tree_add_item(tree, hf_ieee80211_ff_protected_public_action, tvb, offset, 1,
7666 add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7668 proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1,
7674 add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7676 proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6,
7682 add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7684 proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6,
7690 add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7692 proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2,
7698 add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7700 proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1,
7702 proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1,
7708 add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7710 proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset,
7711 1, ENC_LITTLE_ENDIAN);
7716 add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7718 proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2,
7724 add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7727 code = tvb_get_guint8(tvb, offset);
7728 col_set_str(pinfo->cinfo, COL_INFO,
7729 val_to_str_ext_const(code, &tdls_action_codes_ext,
7730 "Unknown TDLS Action"));
7731 proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1,
7737 add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7739 proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1,
7745 add_ff_operating_class(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7747 proto_tree_add_item(tree, hf_ieee80211_ff_operating_class, tvb, offset, 1,
7753 add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7757 code = tvb_get_guint8(tvb, offset);
7758 col_set_str(pinfo->cinfo, COL_INFO,
7759 val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action"));
7760 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7765 add_ff_unprotected_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7769 code = tvb_get_guint8(tvb, offset);
7770 col_set_str(pinfo->cinfo, COL_INFO,
7771 val_to_str_ext_const(code, &unprotected_wnm_action_codes_ext, "Unknown Unprotected WNM Action"));
7772 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7777 add_ff_unprotected_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7779 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_dmg_action_code, tvb, offset, 1, ENC_NA);
7784 add_ff_key_data_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7786 proto_tree_add_item(tree, hf_ieee80211_ff_key_data_length, tvb, offset, 2,
7792 add_ff_wnm_notification_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7794 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_type,
7795 tvb, offset, 1, ENC_NA);
7799 /* Action frame: Radio Measurement actions */
7801 add_ff_rm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7803 proto_tree_add_item(tree, hf_ieee80211_ff_rm_action_code, tvb, offset, 1, ENC_NA);
7808 add_ff_rm_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7810 proto_tree_add_item(tree, hf_ieee80211_ff_rm_dialog_token, tvb, offset, 1, ENC_NA);
7814 /* Radio Measurement Request frame, Action fields */
7816 add_ff_rm_repetitions(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7818 /* Note: 65535 means repeated until cancelled or superseded */
7819 proto_tree_add_item(tree, hf_ieee80211_ff_rm_repetitions, tvb, offset, 2,
7824 /* Link Measurement Request frame, Action fields*/
7826 add_ff_rm_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7828 /* In dBm, see 8.4.1.20 */
7829 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_power, tvb, offset, 1, ENC_NA);
7834 add_ff_rm_max_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7836 /* In dBm, see 8.4.1.19 */
7837 proto_tree_add_item(tree, hf_ieee80211_ff_rm_max_tx_power, tvb, offset, 1, ENC_NA);
7841 /* Link Measurement Report frame, Action fields */
7843 add_ff_rm_tpc_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7845 proto_tree *tpc_tree;
7846 proto_item *tpc_item;
7848 /* 8.4.2.19 TPC Report element */
7849 tpc_item = proto_tree_add_item(tree, hf_ieee80211_ff_tpc, tvb, offset, 4, ENC_NA);
7850 tpc_tree = proto_item_add_subtree(tpc_item, ett_tpc);
7851 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_element_id, tvb, offset, 1, ENC_NA);
7852 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_length, tvb, offset + 1, 1, ENC_NA);
7853 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_tx_power, tvb, offset + 2, 1, ENC_NA);
7854 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_link_margin, tvb, offset + 3, 1, ENC_NA);
7859 add_ff_rm_rx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7861 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
7862 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rx_antenna_id, tvb, offset, 1, ENC_NA);
7867 add_ff_rm_tx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7869 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
7870 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_antenna_id, tvb, offset, 1, ENC_NA);
7875 add_ff_rm_rcpi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7877 /* 8.4.2.40: RCPI as specified for certain PHYs */
7878 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rcpi, tvb, offset, 1, ENC_NA);
7883 add_ff_rm_rsni(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7885 /* 8.4.2.43: RSNI in steps of 0.5 dB, calculated as:
7886 * RSNI = (10 * log10((RCPI_{power} - ANPI_{power}) / ANPI_{power}) + 20)*2 */
7887 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rsni, tvb, offset, 1, ENC_NA);
7892 add_ff_bss_transition_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7894 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_status_code, tvb, offset, 1,
7900 add_ff_bss_termination_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
7902 proto_tree_add_item(tree, hf_ieee80211_ff_bss_termination_delay, tvb, offset, 1,
7908 add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7910 switch (tvb_get_guint8(tvb, offset + 1)) {
7911 case SM_ACTION_MEASUREMENT_REQUEST:
7912 case SM_ACTION_MEASUREMENT_REPORT:
7913 case SM_ACTION_TPC_REQUEST:
7914 case SM_ACTION_TPC_REPORT:
7915 add_ff_category_code(tree, tvb, pinfo, offset);
7916 add_ff_action_code(tree, tvb, pinfo, offset + 1);
7917 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
7919 case SM_ACTION_CHAN_SWITCH_ANNC:
7920 case SM_ACTION_EXT_CHAN_SWITCH_ANNC:
7921 add_ff_category_code(tree, tvb, pinfo, offset);
7922 add_ff_action_code(tree, tvb, pinfo, offset + 1);
7925 add_ff_category_code(tree, tvb, pinfo, offset);
7926 add_ff_action_code(tree, tvb, pinfo, offset + 1);
7932 add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7934 switch (tvb_get_guint8(tvb, offset + 1)) {
7935 case QOS_ACTION_ADDTS_REQUEST:
7936 add_ff_category_code(tree, tvb, pinfo, offset);
7937 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7938 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
7940 case QOS_ACTION_ADDTS_RESPONSE:
7941 add_ff_category_code(tree, tvb, pinfo, offset);
7942 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7943 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
7944 add_ff_status_code(tree, tvb, pinfo, offset + 3);
7946 case QOS_ACTION_DELTS:
7947 add_ff_category_code(tree, tvb, pinfo, offset);
7948 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7949 add_ff_qos_ts_info(tree, tvb, pinfo, offset + 2);
7950 add_ff_reason_code(tree, tvb, pinfo, offset + 5);
7952 case QOS_ACTION_SCHEDULE:
7953 add_ff_category_code(tree, tvb, pinfo, offset);
7954 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7956 case QOS_ACTION_MAP_CONFIGURE:
7957 add_ff_category_code(tree, tvb, pinfo, offset);
7958 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
7961 add_ff_category_code(tree, tvb, pinfo, offset);
7967 add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
7969 switch (tvb_get_guint8(tvb, offset + 1)) {
7970 case DLS_ACTION_REQUEST:
7971 add_ff_category_code(tree, tvb, pinfo, offset);
7972 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
7973 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
7974 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
7975 add_ff_cap_info(tree, tvb, pinfo, offset + 14);
7976 add_ff_dls_timeout(tree, tvb, pinfo, offset + 16);
7978 case DLS_ACTION_RESPONSE:
7979 add_ff_category_code(tree, tvb, pinfo, offset);
7980 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
7981 add_ff_status_code(tree, tvb, pinfo, offset + 2);
7982 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 4);
7983 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 10);
7984 if (!hf_ieee80211_ff_status_code) {
7985 add_ff_cap_info(tree, tvb, pinfo, offset + 16);
7988 case DLS_ACTION_TEARDOWN:
7989 add_ff_category_code(tree, tvb, pinfo, offset);
7990 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
7991 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
7992 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
7993 add_ff_reason_code(tree, tvb, pinfo, offset + 14);
7996 add_ff_category_code(tree, tvb, pinfo, offset);
8002 add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8004 guint start = offset;
8006 switch (tvb_get_guint8(tvb, offset + 1)) {
8007 case BA_ADD_BLOCK_ACK_REQUEST:
8008 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8009 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
8010 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8011 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
8012 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
8013 offset += add_ff_block_ack_ssc(tree, tvb, pinfo, offset);
8015 case BA_ADD_BLOCK_ACK_RESPONSE:
8016 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8017 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
8018 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8019 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8020 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
8021 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
8023 case BA_DELETE_BLOCK_ACK:
8024 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8025 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
8026 offset += add_ff_delba_param_set(tree, tvb, pinfo, offset);
8027 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
8031 return offset - start; /* Size of fixed fields */
8035 add_ff_action_public_fields(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, guint8 code)
8040 guint8 dialog_token;
8043 tvbuff_t *vendor_tvb;
8046 guint start = offset;
8049 case PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT:
8050 offset += add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
8052 case PA_VENDOR_SPECIFIC:
8053 oui = tvb_get_ntoh24(tvb, offset);
8054 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
8058 subtype = tvb_get_guint8(tvb, offset);
8059 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_subtype, tvb, offset, 1, ENC_NA);
8061 vendor_tvb = tvb_new_subset_remaining(tvb, offset);
8062 dissected = dissector_try_uint_new(wifi_alliance_public_action_table, subtype, vendor_tvb, pinfo, tree, FALSE, NULL);
8063 offset += dissected;
8066 /* Don't know how to handle this vendor */
8070 case PA_GAS_INITIAL_REQUEST:
8071 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8072 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
8074 offset += dissect_gas_initial_request(tree, tvb, pinfo, offset, type,
8077 case PA_GAS_INITIAL_RESPONSE:
8078 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8079 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8080 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
8081 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
8083 offset += dissect_gas_initial_response(tree, tvb, pinfo, offset, type,
8086 case PA_GAS_COMEBACK_REQUEST:
8087 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8089 case PA_GAS_COMEBACK_RESPONSE:
8090 dialog_token = tvb_get_guint8(tvb, offset);
8091 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8092 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8093 frag = tvb_get_guint8(tvb, offset) & 0x7f;
8094 more = (tvb_get_guint8(tvb, offset) & 0x80) != 0;
8095 offset += add_ff_gas_fragment_id(tree, tvb, pinfo, offset);
8096 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
8097 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
8099 offset += dissect_gas_comeback_response(tree, tvb, pinfo, offset, type,
8100 subtype, frag, more, dialog_token);
8102 case PA_TDLS_DISCOVERY_RESPONSE:
8103 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
8104 col_set_str(pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
8105 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8106 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8108 case PA_QAB_REQUEST:
8109 case PA_QAB_RESPONSE:
8110 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8111 offset += add_ff_req_ap_addr(tree, tvb, pinfo, offset);
8112 offset += add_ff_res_ap_addr(tree, tvb, pinfo, offset);
8116 return offset - start; /* Size of fixed fields */
8120 add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8123 guint start = offset;
8124 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8125 code = tvb_get_guint8(tvb, offset);
8126 offset += add_ff_pa_action_code(tree, tvb, pinfo, offset);
8127 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
8128 return offset - start;
8132 add_ff_action_protected_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8135 guint start = offset;
8136 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8137 code = tvb_get_guint8(tvb, offset);
8138 offset += add_ff_ppa_action_code(tree, tvb, pinfo, offset);
8139 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
8140 return offset - start;
8144 add_ff_action_radio_measurement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8146 guint start = offset;
8149 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8150 code = tvb_get_guint8(tvb, offset);
8151 offset += add_ff_rm_action_code(tree, tvb, pinfo, offset);
8154 case RM_ACTION_RADIO_MEASUREMENT_REQUEST:
8155 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8156 offset += add_ff_rm_repetitions(tree, tvb, pinfo, offset);
8157 /* Followed by Measurement Request Elements */
8159 case RM_ACTION_RADIO_MEASUREMENT_REPORT:
8160 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8161 /* Followed by Measurement Report Elements */
8163 case RM_ACTION_LINK_MEASUREMENT_REQUEST:
8164 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8165 offset += add_ff_rm_tx_power(tree, tvb, pinfo, offset);
8166 offset += add_ff_rm_max_tx_power(tree, tvb, pinfo, offset);
8167 /* Followed by Optional Subelements */
8169 case RM_ACTION_LINK_MEASUREMENT_REPORT:
8170 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8171 offset += add_ff_rm_tpc_report(tree, tvb, pinfo, offset);
8172 offset += add_ff_rm_rx_antenna_id(tree, tvb, pinfo, offset);
8173 offset += add_ff_rm_tx_antenna_id(tree, tvb, pinfo, offset);
8174 offset += add_ff_rm_rcpi(tree, tvb, pinfo, offset);
8175 offset += add_ff_rm_rsni(tree, tvb, pinfo, offset);
8176 /* Followed by Optional Subelements */
8178 case RM_ACTION_NEIGHBOR_REPORT_REQUEST:
8179 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8180 /* Followed by Optional Subelements */
8182 case RM_ACTION_NEIGHBOR_REPORT_RESPONSE:
8183 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
8184 /* Followed by Neighbor Report Elements */
8188 return offset - start; /* Size of fixed fields */
8192 add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8194 guint start = offset;
8197 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8198 code = tvb_get_guint8(tvb, offset);
8199 offset += add_ff_ft_action_code(tree, tvb, pinfo, offset);
8202 case FT_ACTION_REQUEST:
8203 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8204 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8205 /* Followed by FT Request frame body (IEs) */
8207 case FT_ACTION_RESPONSE:
8208 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8209 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8210 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8211 /* Followed by FT Response frame body (IEs) */
8213 case FT_ACTION_CONFIRM:
8214 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8215 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8216 /* Followed by FT Confirm frame body (IEs) */
8219 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
8220 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
8221 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8222 /* Followed by FT Ack frame body (IEs) */
8226 return offset - start; /* Size of fixed fields */
8230 add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8232 guint start = offset;
8235 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8236 code = tvb_get_guint8(tvb, offset);
8237 offset += add_ff_sa_query_action_code(tree, tvb, pinfo, offset);
8240 case SA_QUERY_REQUEST:
8241 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
8243 case SA_QUERY_RESPONSE:
8244 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
8248 return offset - start; /* Size of fixed fields */
8252 add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8256 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8257 offset += add_ff_mesh_action(tree, tvb, pinfo, offset);
8258 /* The only fixed fields are the category and mesh action. The rest are IEs.
8261 if (tvb_get_guint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE) {
8262 /* ..except for the TBTT Adjustment Response, which has a status code field
8264 length += add_ff_status_code(tree, tvb, pinfo, offset);
8270 add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8272 guint start = offset;
8274 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8275 offset += add_ff_multihop_action(tree, tvb, pinfo, offset);
8276 offset += add_ff_mesh_control(tree, tvb, pinfo, offset);
8277 return offset - start;
8281 add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8283 guint start = offset;
8285 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8286 offset += add_ff_selfprot_action(tree, tvb, pinfo, offset);
8288 switch (tvb_get_guint8(tvb, start + 1)) {
8289 case SELFPROT_ACTION_MESH_PEERING_OPEN:
8290 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8292 case SELFPROT_ACTION_MESH_PEERING_CONFIRM:
8293 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8294 offset += add_ff_assoc_id(tree, tvb, pinfo, offset);
8298 return offset - start;
8302 add_ff_vht_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8304 proto_tree_add_item(tree, hf_ieee80211_ff_vht_action, tvb, offset, 1,
8311 wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8317 const guint8 ids[] = { TAG_NEIGHBOR_REPORT };
8319 static const int *ieee80211_ff_request_flags[] = {
8320 &hf_ieee80211_ff_request_mode_pref_cand,
8321 &hf_ieee80211_ff_request_mode_abridged,
8322 &hf_ieee80211_ff_request_mode_disassoc_imminent,
8323 &hf_ieee80211_ff_request_mode_bss_term_included,
8324 &hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
8328 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8330 mode = tvb_get_guint8(tvb, offset);
8331 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_ff_request_flags, ENC_LITTLE_ENDIAN);
8334 proto_tree_add_item(tree, hf_ieee80211_ff_disassoc_timer, tvb, offset, 2,
8338 proto_tree_add_item(tree, hf_ieee80211_ff_validity_interval, tvb, offset, 1,
8343 proto_tree_add_item(tree, hf_ieee80211_ff_bss_termination_duration,
8344 tvb, offset, 8, ENC_NA);
8350 url_len = tvb_get_guint8(tvb, offset);
8351 proto_tree_add_item(tree, hf_ieee80211_ff_url_len, tvb, offset, 1,
8354 proto_tree_add_item(tree, hf_ieee80211_ff_url, tvb, offset, url_len,
8359 left = tvb_reported_length_remaining(tvb, offset);
8361 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
8362 tvb, offset, left, ENC_NA);
8365 tmp_sublen = tvb_get_guint8(tvb, offset + 1);
8366 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids), NULL) == 0){
8369 left -= (tmp_sublen + 2);
8370 offset += (tmp_sublen + 2);
8374 return offset - start;
8379 wnm_bss_trans_mgmt_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8385 const guint8 ids[] = { TAG_NEIGHBOR_REPORT };
8387 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8388 code = tvb_get_guint8(tvb, offset);
8389 offset += add_ff_bss_transition_status_code(tree, tvb, pinfo, offset);
8390 offset += add_ff_bss_termination_delay(tree, tvb, pinfo, offset);
8392 proto_tree_add_item(tree, hf_ieee80211_ff_target_bss,
8393 tvb, offset, 6, ENC_NA);
8396 left = tvb_reported_length_remaining(tvb, offset);
8398 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
8399 tvb, offset, left, ENC_NA);
8401 tmp_sublen = tvb_get_guint8(tvb, offset + 1);
8402 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids), NULL) == 0){
8405 left -= (tmp_sublen + 2);
8406 offset += (tmp_sublen + 2);
8410 return offset - start;
8414 wnm_sleep_mode_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8417 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8418 return offset - start;
8422 wnm_sleep_mode_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8425 guint16 key_data_len;
8428 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8429 key_data_len = tvb_get_letohs(tvb, offset);
8430 offset += add_ff_key_data_length(tree, tvb, pinfo, offset);
8431 left = tvb_reported_length_remaining(tvb, offset);
8432 if (left < key_data_len) {
8433 expert_add_info(pinfo, tree, &ei_ieee80211_tag_wnm_sleep_mode_no_key_data);
8434 return offset - start;
8436 proto_tree_add_item(tree, hf_ieee80211_ff_key_data, tvb, offset,
8437 key_data_len, ENC_NA);
8438 offset += key_data_len;
8439 return offset - start;
8443 wnm_tfs_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8446 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8447 return offset - start;
8451 wnm_tfs_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8454 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8455 return offset - start;
8459 wnm_notification_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8462 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8463 offset += add_ff_wnm_notification_type(tree, tvb, pinfo, offset);
8464 return offset - start;
8468 add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8471 guint start = offset;
8473 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8474 code = tvb_get_guint8(tvb, offset);
8475 offset += add_ff_wnm_action_code(tree, tvb, pinfo, offset);
8477 case WNM_BSS_TRANS_MGMT_REQ:
8478 offset += wnm_bss_trans_mgmt_req(tree, tvb, pinfo, offset);
8480 case WNM_BSS_TRANS_MGMT_RESP:
8481 offset += wnm_bss_trans_mgmt_resp(tree, tvb, pinfo, offset);
8484 offset += wnm_tfs_req(tree, tvb, pinfo, offset);
8487 offset += wnm_tfs_resp(tree, tvb, pinfo, offset);
8489 case WNM_SLEEP_MODE_REQ:
8490 offset += wnm_sleep_mode_req(tree, tvb, pinfo, offset);
8492 case WNM_SLEEP_MODE_RESP:
8493 offset += wnm_sleep_mode_resp(tree, tvb, pinfo, offset);
8495 case WNM_NOTIFICATION_REQ:
8496 offset += wnm_notification_req(tree, tvb, pinfo, offset);
8500 return offset - start; /* Size of fixed fields */
8504 add_ff_action_unprotected_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8507 guint start = offset;
8509 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8510 code = tvb_get_guint8(tvb, offset);
8511 offset += add_ff_unprotected_wnm_action_code(tree, tvb, pinfo, offset);
8514 case UNPROTECTED_WNM_TIM:
8515 offset += add_ff_check_beacon(tree, tvb, pinfo, offset);
8516 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
8517 offset += add_ff_tod(tree, tvb, pinfo, offset);
8518 offset += add_ff_toa(tree, tvb, pinfo, offset);
8519 offset += add_ff_max_tod_err(tree, tvb, pinfo, offset);
8520 offset += add_ff_max_toa_err(tree, tvb, pinfo, offset);
8522 case UNPROTECTED_WNM_TIMING_MEASUREMENT:
8523 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8524 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
8528 return offset - start; /* Size of fixed fields */
8532 add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8536 guint start = offset;
8538 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8539 code = tvb_get_guint8(tvb, offset);
8540 offset += add_ff_tdls_action_code(tree, tvb, pinfo, offset);
8542 case TDLS_SETUP_REQUEST:
8543 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8544 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8546 case TDLS_SETUP_RESPONSE:
8547 status = tvb_get_letohs(tvb, offset);
8548 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8549 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8550 if (tvb_reported_length_remaining(tvb, offset) < 2) {
8552 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_response_malformed);
8556 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
8558 case TDLS_SETUP_CONFIRM:
8559 status = tvb_get_letohs(tvb, offset);
8560 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8561 if (tvb_reported_length_remaining(tvb, offset) < 1) {
8563 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_confirm_malformed);
8567 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8570 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
8572 case TDLS_PEER_TRAFFIC_INDICATION:
8573 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8575 case TDLS_CHANNEL_SWITCH_REQUEST:
8576 offset += add_ff_target_channel(tree, tvb, pinfo, offset);
8577 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
8579 case TDLS_CHANNEL_SWITCH_RESPONSE:
8580 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8582 case TDLS_PEER_PSM_REQUEST:
8583 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8585 case TDLS_PEER_PSM_RESPONSE:
8586 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8587 offset += add_ff_status_code(tree, tvb, pinfo, offset);
8589 case TDLS_PEER_TRAFFIC_RESPONSE:
8590 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8592 case TDLS_DISCOVERY_REQUEST:
8593 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8597 return offset - start; /* Size of fixed fields */
8601 add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8603 guint start = offset;
8605 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8606 offset += add_ff_wme_action_code(tree, tvb, pinfo, offset);
8607 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
8608 offset += add_ff_wme_status_code(tree, tvb, pinfo, offset);
8610 return offset - start; /* Size of fixed fields */
8614 add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8616 guint start = offset;
8618 tvbuff_t *vendor_tvb;
8621 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8622 oui = tvb_get_ntoh24(tvb, offset);
8623 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
8626 vendor_tvb = tvb_new_subset_remaining(tvb, offset);
8627 dissected = dissector_try_uint_new(vendor_specific_action_table, oui, vendor_tvb, pinfo, tree, FALSE, NULL);
8630 call_data_dissector(vendor_tvb, pinfo, tree);
8631 /* don't advance the dissector pointer as this will probably cause more malformed packets
8632 if vendor is unknown. It also matches previous behavior (before dissection table implementation) */
8636 offset += dissected;
8638 return offset - start; /* Size of fixed fields */
8642 add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
8644 guint start = offset;
8646 mimo_control_t mimo_cntrl;
8648 offset += add_ff_category_code(tree, tvb, pinfo, offset);
8649 offset += add_ff_ht_action_code(tree, tvb, pinfo, offset);
8651 switch (tvb_get_guint8(tvb, offset - 1)) {
8652 case HT_ACTION_NOTIFY_CHAN_WIDTH:
8653 offset += add_ff_channel_width(tree, tvb, pinfo, offset);
8655 case HT_ACTION_SM_PWR_SAVE:
8656 offset += add_ff_sm_pwr_cntrl(tree, tvb, pinfo, offset);
8658 case HT_ACTION_PSMP_ACTION:
8659 n_sta = tvb_get_guint8(tvb, offset);
8660 offset += add_ff_psmp_param_set(tree, tvb, pinfo, offset);
8661 for (i = 0; i < (n_sta & 0x0F); i++) {
8662 offset += add_ff_psmp_sta_info(tree, tvb, pinfo, offset);
8665 case HT_ACTION_SET_PCO_PHASE:
8666 offset += add_ff_pco_phase_cntrl(tree, tvb, pinfo, offset);
8668 case HT_ACTION_MIMO_CSI:
8669 mimo_cntrl = get_mimo_control(tvb, offset);
8670 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
8671 offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl);
8673 case HT_ACTION_MIMO_BEAMFORMING:
8674 mimo_cntrl = get_mimo_control(tvb, offset);
8675 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
8676 offset += add_mimo_beamforming_feedback_report(tree, tvb, offset,
8679 case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING:
8680 mimo_cntrl = get_mimo_control(tvb, offset);
8681 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
8682 offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb,
8686 case HT_ACTION_ANT_SEL_FEEDBACK:
8687 offset += add_ff_ant_selection(tree, tvb, pinfo, offset);
8689 case HT_ACTION_HT_INFO_EXCHANGE:
8690 offset += add_ff_ht_information(tree, tvb, pinfo, offset);
8694 return offset - start;
8698 add_ff_beacon_interval_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8700 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bic,
8701 ett_bic_tree, ieee80211_ff_bic_fields,
8702 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
8708 add_ff_beamforming_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset, gboolean isGrant)
8710 guint16 bf_field = tvb_get_letohs(tvb, offset);
8711 gboolean isInit = (bf_field & 0x2) >> 1;
8712 gboolean isResp = (bf_field & 0x4) >> 2;
8713 static const int *ieee80211_ff_beamforming_ctrl[] = {
8714 &hf_ieee80211_ff_bf_train,
8715 &hf_ieee80211_ff_bf_is_init,
8716 &hf_ieee80211_ff_bf_is_resp,
8717 &hf_ieee80211_ff_bf_rxss_len,
8718 &hf_ieee80211_ff_bf_rxss_rate,
8719 &hf_ieee80211_ff_bf_b10b15,
8723 static const int *ieee80211_ff_beamforming_ctrl_grant[] = {
8724 &hf_ieee80211_ff_bf_train,
8725 &hf_ieee80211_ff_bf_is_init,
8726 &hf_ieee80211_ff_bf_is_resp,
8727 &hf_ieee80211_ff_bf_num_sectors,
8728 &hf_ieee80211_ff_bf_num_rx_dmg_ants,
8729 &hf_ieee80211_ff_bf_b12b15,
8733 if((isInit==TRUE) && (isResp==TRUE) && isGrant) {
8734 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bf,
8735 ett_bf_tree, ieee80211_ff_beamforming_ctrl_grant,
8736 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
8738 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bf,
8739 ett_bf_tree, ieee80211_ff_beamforming_ctrl,
8740 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
8746 add_ff_dynamic_allocation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8748 static const int *ieee80211_ff_dynamic_allocation[] = {
8749 &hf_ieee80211_ff_TID,
8750 &hf_ieee80211_ff_alloc_type,
8751 &hf_ieee80211_ff_src_aid,
8752 &hf_ieee80211_ff_dest_aid,
8753 &hf_ieee80211_ff_alloc_duration,
8754 &hf_ieee80211_ff_b39,
8758 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_dynamic_allocation,
8759 ett_dynamic_alloc_tree, ieee80211_ff_dynamic_allocation,
8760 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
8766 add_ff_beamformed_link(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8768 static const int *ieee80211_ff_beamformed_link[] = {
8769 &hf_ieee80211_ff_blm_unit_index,
8770 &hf_ieee80211_ff_blm_maint_value,
8771 &hf_ieee80211_ff_blm_is_master,
8775 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_blm,
8776 ett_blm_tree, ieee80211_ff_beamformed_link,
8777 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
8782 add_ff_BRP_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8784 static const int *ieee80211_ff_BRP_request[] = {
8785 &hf_ieee80211_ff_brp_L_RX,
8786 &hf_ieee80211_ff_brp_TX_TRN_REQ,
8787 &hf_ieee80211_ff_brp_MID_REQ,
8788 &hf_ieee80211_ff_brp_BC_REQ,
8789 &hf_ieee80211_ff_brp_MID_GRANT,
8790 &hf_ieee80211_ff_brp_BC_GRANT,
8791 &hf_ieee80211_ff_brp_chan_FBCK_CAP,
8792 &hf_ieee80211_ff_brp_tx_sector,
8793 &hf_ieee80211_ff_brp_other_aid,
8794 &hf_ieee80211_ff_brp_tx_antenna,
8795 &hf_ieee80211_ff_brp_reserved,
8799 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_brp,
8800 ett_brp_tree, ieee80211_ff_BRP_request,
8801 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
8806 add_ff_sector_sweep_feedback_from_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8808 static const int *ieee80211_ff_sector_sweep_feedback_from_iss[] = {
8809 &hf_ieee80211_ff_sswf_total_sectors,
8810 &hf_ieee80211_ff_sswf_num_rx_dmg_ants,
8811 &hf_ieee80211_ff_sswf_reserved1,
8812 &hf_ieee80211_ff_sswf_poll_required,
8813 &hf_ieee80211_ff_sswf_reserved2,
8817 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_sswf,
8818 ett_sswf_tree, ieee80211_ff_sector_sweep_feedback_from_iss,
8819 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
8824 add_ff_sector_sweep_feedback_to_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8826 static const int *ieee80211_ff_sector_sweep_feedback_to_iss[] = {
8827 &hf_ieee80211_ff_sswf_sector_select,
8828 &hf_ieee80211_ff_sswf_dmg_antenna_select,
8829 &hf_ieee80211_ff_sswf_snr_report,
8830 &hf_ieee80211_ff_sswf_poll_required,
8831 &hf_ieee80211_ff_sswf_reserved2,
8835 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_sswf,
8836 ett_sswf_tree, ieee80211_ff_sector_sweep_feedback_to_iss,
8837 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
8842 add_ff_sector_sweep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8844 static const int *ieee80211_ff_sector_sweep[] = {
8845 &hf_ieee80211_ff_ssw_direction,
8846 &hf_ieee80211_ff_ssw_cdown,
8847 &hf_ieee80211_ff_ssw_sector_id,
8848 &hf_ieee80211_ff_ssw_dmg_ant_id,
8849 &hf_ieee80211_ff_ssw_rxss_len,
8853 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ssw,
8854 ett_ssw_tree, ieee80211_ff_sector_sweep,
8855 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
8860 add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8862 static const int *ieee80211_ff_dmg_params[] = {
8863 &hf_ieee80211_ff_dmg_params_bss,
8864 &hf_ieee80211_ff_dmg_params_cbap_only,
8865 &hf_ieee80211_ff_dmg_params_cbap_src,
8866 &hf_ieee80211_ff_dmg_params_privacy,
8867 &hf_ieee80211_ff_dmg_params_policy,
8871 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_dmg_params,
8872 ett_dmg_params_tree, ieee80211_ff_dmg_params,
8873 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
8878 add_ff_cc_field(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean dis)
8880 proto_item *cc_item = proto_tree_add_item(tree, hf_ieee80211_ff_cc, tvb, offset, 8, ENC_LITTLE_ENDIAN);
8881 proto_tree *cc_tree = proto_item_add_subtree(cc_item, ett_cc_tree);
8884 proto_tree_add_item(cc_tree, hf_ieee80211_ff_cc_abft_resp_addr, tvb, offset, 6, ENC_NA);
8886 cc_field = tvb_get_letoh64(tvb, offset);
8887 /*TODO : Add support of bitmask for FT_(U)INT64 */
8888 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_sp_duration, tvb, offset, 1, (guint32)(cc_field & 0xff));
8889 proto_tree_add_uint64(cc_tree, hf_ieee80211_ff_cc_cluster_id, tvb, offset+1, 6, (guint64)((cc_field & G_GUINT64_CONSTANT(0x00ffffffffffff00)) >> 8));
8890 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_role, tvb, offset+7, 1, (guint32)((cc_field & G_GUINT64_CONSTANT(0x0300000000000000)) >> 56));
8891 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_max_mem, tvb, offset+7, 1, (guint32)((cc_field & G_GUINT64_CONSTANT(0x7c00000000000000)) >> 58));
8898 add_ff_band_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8900 proto_tree_add_item(tree, hf_ieee80211_ff_band_id, tvb, offset, 1, ENC_NA);
8905 add_ff_subject_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8907 proto_tree_add_item(tree, hf_ieee80211_ff_subject_address, tvb, offset, 6, ENC_NA);
8912 add_ff_handover_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8914 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reason, tvb, offset, 1, ENC_NA);
8919 add_ff_handover_remaining_bi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8921 proto_tree_add_item(tree, hf_ieee80211_ff_handover_remaining_bi, tvb, offset, 1, ENC_NA);
8926 add_ff_handover_result(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8928 proto_tree_add_item(tree, hf_ieee80211_ff_handover_result, tvb, offset, 1, ENC_NA);
8933 add_ff_handover_reject_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8935 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reject_reason, tvb, offset, 1, ENC_NA);
8940 add_ff_destination_reds_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8942 proto_tree_add_item(tree, hf_ieee80211_ff_destination_reds_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8947 add_ff_destination_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8949 proto_tree_add_item(tree, hf_ieee80211_ff_destination_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8954 add_ff_realy_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8956 proto_tree_add_item(tree, hf_ieee80211_ff_realy_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8961 add_ff_source_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8963 proto_tree_add_item(tree, hf_ieee80211_ff_source_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8968 add_ff_timing_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8970 proto_tree_add_item(tree, hf_ieee80211_ff_timing_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8975 add_ff_sampling_frequency_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8977 proto_tree_add_item(tree, hf_ieee80211_ff_sampling_frequency_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8982 add_ff_relay_operation_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8984 proto_tree_add_item(tree, hf_ieee80211_ff_relay_operation_type, tvb, offset, 1, ENC_NA);
8989 add_ff_fst_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8991 proto_tree_add_item(tree, hf_ieee80211_ff_fst_action_code, tvb, offset, 1, ENC_NA);
8996 add_ff_llt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
8998 proto_tree_add_item(tree, hf_ieee80211_ff_llt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9003 add_ff_fsts_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
9005 proto_tree_add_item(tree, hf_ieee80211_ff_fsts_id, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9010 add_ff_oct_mmpdu(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
9012 guint start = offset;
9013 guint len = tvb_get_letohs(tvb, offset);
9014 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_len, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9016 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_ctrl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9018 proto_tree_add_item(tree, hf_ieee80211_ff_oct_mmpdu, tvb, offset, len, ENC_NA);
9020 return offset - start;
9024 add_tag_relay_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
9026 int tag_len = tvb_reported_length(tvb);
9027 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
9029 static const int *ieee80211_tag_relay_capabilities[] = {
9030 &hf_ieee80211_tag_relay_support,
9031 &hf_ieee80211_tag_relay_use,
9032 &hf_ieee80211_tag_relay_permission,
9033 &hf_ieee80211_tag_AC_power,
9034 &hf_ieee80211_tag_relay_prefer,
9035 &hf_ieee80211_tag_duplex,
9036 &hf_ieee80211_tag_cooperation,
9041 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length must be 2");
9045 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_relay_capabilities, ENC_NA);
9046 return tvb_captured_length(tvb);
9051 add_ff_relay_capable_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
9053 proto_item *rcsi_item = proto_tree_add_item(tree, hf_ieee80211_ff_rcsi, tvb, offset, 3, ENC_LITTLE_ENDIAN);
9054 proto_tree *rcsi_tree = proto_item_add_subtree(rcsi_item, ett_rcsi_tree);
9055 proto_tree_add_item(rcsi_tree, hf_ieee80211_ff_rcsi_aid, tvb, offset, 1, ENC_NA);
9057 add_tag_relay_capabilities(pinfo, rcsi_item, 2, rcsi_tree, tvb, &offset);
9063 dissect_ieee80211_extension(guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
9066 proto_tree *ext_tree;
9067 proto_tree *fixed_tree;
9068 proto_tree *tagged_tree;
9071 int tagged_parameter_tree_len;
9073 ti = proto_tree_add_item(tree, proto_wlan_ext, tvb, offset, -1, ENC_NA);
9074 ext_tree = proto_item_add_subtree(ti, ett_80211_ext);
9076 switch (COMPOSE_FRAME_TYPE(fcf))
9078 case EXTENSION_DMG_BEACON:
9082 fixed_tree = get_fixed_parameter_tree(ext_tree, tvb, offset, 20);
9083 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
9084 offset += add_ff_sector_sweep(fixed_tree, tvb, pinfo, offset);
9085 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
9086 bic_field = tvb_get_letohs(tvb, offset);
9087 cc = (bic_field & 0x1);
9088 dis = (bic_field & 0x2) >> 1;
9089 offset += add_ff_beacon_interval_ctrl(fixed_tree, tvb, pinfo, offset);
9090 offset += add_ff_dmg_params(fixed_tree, tvb, pinfo, offset);
9092 offset += add_ff_cc_field(fixed_tree, tvb, offset, dis);
9094 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
9097 * The tagged params are optional here. See Table 8.33a of the 2012
9098 * version of the standard.
9100 if (tagged_parameter_tree_len) {
9101 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
9102 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_DMG_BEACON, NULL);
9110 add_ff_action_unprotected_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9113 guint start = offset;
9115 offset += add_ff_category_code(tree, tvb, pinfo, offset);
9116 code = tvb_get_guint8(tvb, offset);
9117 offset += add_ff_unprotected_dmg_action_code(tree, tvb, pinfo, offset);
9119 case UNPROTECTED_DMG_ANNOUNCE:
9120 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
9121 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
9123 case UNPROTECTED_DMG_BRP:
9124 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9125 offset += add_ff_BRP_request(tree, tvb, pinfo, offset);
9128 return offset - start;
9131 /* There is no easy way to skip all these subcarrier indices that must not
9132 * be displayed when showing compressed beamforming feedback matrices
9133 * Table 8-53g IEEE Std 802.11ac-2013 amendment.
9135 * The irregular use of case statements in this function is to improve
9136 * readability in what is otherwise a large funtion that does very little.
9139 vht_compressed_skip_scidx(guint8 nchan_width, guint8 ng, int scidx)
9141 switch(nchan_width) {
9147 /* Pilot subcarriers */
9148 case -21: case -7: case 7: case 21:
9161 /* Pilot subcarriers */
9162 case -53: case -25: case -11: case 11: case 25: case 53:
9165 /* DC subcarriers */
9166 case -1: case 0: case 1:
9177 /* Pilot subcarriers */
9178 case -103: case -75: case -39: case -11: case 11: case 39: case 75: case 103:
9181 /* DC subcarriers, skip -1, 0, 1 */
9188 /* 160 MHz / 80+80 Mhz
9189 * Skip values here assume 160 MHz, as vht_mimo_control does not let us differentiate
9190 * between 160 MHz & 80-80MHz */
9195 /* DC subcarriers, skip -5 to 5*/
9201 /* Pilot subcarriers */
9202 case -231: case -203: case -167: case -139: case -117: case -89: case -53: case -25:
9203 case 25: case 53: case 89: case 117: case 139: case 167: case 203: case 231:
9206 /* Other subcarriers, skip -129 to -127, 127 to 129 */
9220 /* DC subcarriers */
9221 case -128: case -4: case -2: case 0: case 2: case 4: case 128:
9229 if (scidx == -2 || scidx == 2)
9241 static inline int vht_exclusive_skip_scidx(guint8 nchan_width, guint8 ng, int scidx)
9243 switch (nchan_width) {
9249 if (scidx == -2 || scidx == 1)
9305 /* 160 MHz / 80+80 Mhz */
9311 /* DC subcarriers, skip -4 to 4*/
9315 /* Other subcarriers, skip -128, 128 */
9329 /* DC subcarriers, skip -4 to 4*/
9363 add_ff_vht_compressed_beamforming_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
9370 gboolean codebook_info;
9371 gboolean feedback_type;
9372 proto_item *vht_beam_item, *vht_excl_beam_item, *phi_angle, *psi_angle;
9373 proto_tree *vht_beam_tree, *subtree, *vht_excl_beam_tree, *angletree;
9374 int i, matrix_size, len, pos, ns, scidx = 0, matrix_len;
9375 guint8 phi, psi, carry;
9376 int j, ic, off_len = 0, sscidx = 0, xnsc;
9377 int ir, off_pos, angle_val;
9378 /* Table 8-53d Order of angles in the Compressed Beamforming Feedback
9379 * Matrix subfield, IEEE Std 802.11ac-2013 amendment */
9380 static const guint8 na_arr[8][8] = { { 0, 0, 0, 0, 0, 0, 0, 0 },
9381 { 2, 2, 0, 0, 0, 0, 0, 0 },
9382 { 4, 6, 6, 0, 0, 0, 0, 0 },
9383 { 6, 10, 12, 12, 0, 0, 0, 0 },
9384 { 8, 14, 18, 20, 20, 0, 0, 0 },
9385 { 10, 18, 24, 28, 30, 30, 0, 0 },
9386 { 12, 22, 30, 36, 40, 42, 42, 0 },
9387 { 14, 26, 36, 44, 50, 54, 56, 56 }
9389 /* Table 8-53g Subcarriers for which a Compressed Beamforming Feedback Matrix
9390 * subfield is sent back. IEEE Std 802.11ac-2013 amendment */
9391 static const int ns_arr[4][3] = { { 52, 30, 16 },
9397 /* Table 8-53j, no of Subcarriers for which the Delta SNR subfield is sent back to the beamformer.
9398 * IEEE Std 802.11ac-2013 amendment */
9399 static const int delta_ns_arr[4][3] = { { 30, 16, 10 },
9405 vht_mimo = tvb_get_letoh24(tvb, offset);
9406 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_vht_mimo_cntrl,
9407 ett_ff_vhtmimo_cntrl, hf_ieee80211_ff_vht_mimo_cntrl_fields, ENC_LITTLE_ENDIAN);
9410 /* Extract values for beamforming use */
9411 nc = (vht_mimo & 0x7) + 1;
9412 nr = ((vht_mimo & 0x38) >> 3) + 1;
9413 chan_width = (vht_mimo & 0xC0) >> 6;
9414 grouping = ((vht_mimo & 0x300) >> 8);
9415 codebook_info = (vht_mimo & 0x400) >> 10;
9416 feedback_type = (vht_mimo & 0x800) >> 11;
9418 if (feedback_type) {
9419 if (codebook_info) {
9425 if (codebook_info) {
9432 vht_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_compressed_beamforming_report, tvb,
9433 offset, -1, ENC_NA);
9434 vht_beam_tree = proto_item_add_subtree(vht_beam_item, ett_ff_vhtmimo_beamforming_report);
9436 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, nc,
9437 ett_ff_vhtmimo_beamforming_report_snr, NULL, "Average Signal to Noise Ratio");
9439 for (i = 1; i <= nc; i++)
9443 snr = tvb_get_guint8(tvb, offset);
9444 proto_tree_add_uint_format(subtree, hf_ieee80211_vht_compressed_beamforming_report_snr, tvb, offset, 1,
9445 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
9449 matrix_size = na_arr[nr - 1][nc -1] * (psi + phi)/2;
9450 if (matrix_size % 8) {
9455 off_len = (matrix_size/8) + carry;
9456 angletree = proto_tree_add_subtree_format(vht_beam_tree, tvb, offset, off_len,
9457 ett_ff_vhtmimo_beamforming_angle, NULL,"PHI and PSI Angle Decode");
9460 phi_angle = proto_tree_add_none_format(angletree, hf_ieee80211_vht_compressed_beamforming_phi_angle, tvb, offset, 0, "PHI(%u bits): ", phi);
9461 for (ic = 1; ic <= nc; ic++) {
9462 for (ir = 1; ir < nr; ir++) {
9464 angle_val = (int) tvb_get_bits16(tvb, off_pos, phi, ENC_BIG_ENDIAN);
9465 if ((ir+1 < nr) || (ic+1 <= nc))
9466 proto_item_append_text(phi_angle, "PHI%d%d: %d, ", ir, ic, angle_val);
9468 proto_item_append_text(phi_angle, "PHI%d%d: %d", ir, ic, angle_val);
9469 off_pos = off_pos + phi;
9474 psi_angle = proto_tree_add_none_format(angletree, hf_ieee80211_vht_compressed_beamforming_psi_angle, tvb, offset, 0, "PSI(%u bits): ", psi);
9475 for (ic = 1; ic <= nc; ic++)
9476 for (ir = 2; ir <= nr; ir++)
9478 angle_val = (int) tvb_get_bits8(tvb, off_pos, psi);
9479 if ((ir+1 <= nr) || (ic+1 <= nc))
9480 proto_item_append_text(psi_angle, "PSI%d%d: %d, ", ir, ic, angle_val);
9482 proto_item_append_text(psi_angle, "PSI%d%d: %d", ir, ic, angle_val);
9483 off_pos = off_pos + psi;
9486 /* Table 8-53c Subfields of the VHT MIMO Control field (802.11ac-2013)
9487 * reserves value 3 of the Grouping subfield. */
9488 if (grouping == 3) {
9489 expert_add_info_format(pinfo, vht_beam_item, &ei_ieee80211_inv_val,
9490 "Grouping subfield value 3 is reserved");
9494 ns = ns_arr[chan_width][grouping];
9495 if (((matrix_size)*(ns)) % 8)
9496 matrix_len = (((matrix_size) * (ns)) / (8)) + 1;
9498 matrix_len = (((matrix_size) * (ns)) / (8));
9499 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, matrix_len,
9500 ett_ff_vhtmimo_beamforming_report_feedback_matrices, NULL, "Beamforming Feedback Matrix");
9503 switch(chan_width) {
9514 /* This is -122 for 80+80MHz Channel Width but vht_mimo_control does not allow us
9515 * to differentiate between 160MHz and 80+80Mhz */
9521 for (i = 0; i < ns; i++) {
9526 len = roundup2((pos + matrix_size), 8)/8 - roundup2(pos, 8)/8;
9527 scidx = vht_compressed_skip_scidx(chan_width, grouping, scidx);
9529 /* TODO : For certain values from na_arr, there is always going be a carry over or overflow from the previous or
9530 into the next octet. The largest of possible unaligned values can be 41 bytes long, and masking and shifting
9531 whole buffers to show correct values with padding and overflow bits is hence skipped, we only mark the bytes
9532 of interest instead */
9533 proto_tree_add_none_format(subtree, hf_ieee80211_vht_compressed_beamforming_feedback_matrix, tvb,
9534 offset - carry, len + carry, "Compressed Beamforming Feedback Matrix for subcarrier %d", scidx++);
9539 if (feedback_type) {
9540 xnsc = delta_ns_arr[chan_width][grouping];
9541 if ((nc * xnsc *4) % 8)
9542 off_len = (nc * xnsc *4) / 8 + 1;
9544 off_len = (nc * xnsc *4) / 8;
9545 switch(chan_width) {
9559 vht_excl_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_mu_exclusive_beamforming_report, tvb, offset, off_len, ENC_NA);
9560 vht_excl_beam_tree = proto_item_add_subtree(vht_excl_beam_item, ett_ff_vhtmu_exclusive_beamforming_report_matrices);
9563 for (j = 1; j <= xnsc; j++) {
9564 for (ic = 1; ic <= nc; ic++) {
9574 proto_tree_add_none_format(vht_excl_beam_tree, hf_ieee80211_vht_mu_Exclusive_beamforming_delta_snr, tvb,
9575 offset - pos, 1, "Delta SNR for space-time stream %d for subcarrier %d", ic, sscidx);
9579 sscidx = vht_exclusive_skip_scidx(chan_width, grouping, sscidx);
9587 add_ff_action_vht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9589 guint start = offset;
9590 guint8 vht_action, field_val;
9592 guint64 upa_value, temp_val;
9595 proto_tree *ti_tree;
9596 proto_item *msa, *upa;
9597 proto_tree *msa_tree, *upa_tree;
9599 offset += add_ff_category_code(tree, tvb, pinfo, offset);
9601 vht_action = tvb_get_guint8(tvb, offset);
9602 offset += add_ff_vht_action(tree, tvb, pinfo, offset);
9605 case VHT_ACT_VHT_COMPRESSED_BEAMFORMING:{
9606 offset = add_ff_vht_compressed_beamforming_report(tree, tvb, pinfo, offset);
9607 offset += tvb_reported_length_remaining(tvb, offset);
9610 case VHT_ACT_GROUP_ID_MANAGEMENT:{
9611 ti = proto_tree_add_item(tree, hf_ieee80211_vht_group_id_management, tvb,
9612 offset, -1, ENC_NA);
9613 ti_tree = proto_item_add_subtree(ti, ett_vht_grpidmgmt);
9615 msa_value = tvb_get_letoh64(tvb, offset);
9616 msa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_membership_status_array, tvb,
9618 msa_tree = proto_item_add_subtree(msa, ett_vht_msa);
9619 for (m = 0; m < 64; m++) {
9620 if (msa_value & (G_GINT64_CONSTANT(1) << m))
9621 proto_tree_add_uint_format(msa_tree, hf_ieee80211_vht_membership_status_field,
9622 tvb, offset + (m/8), 1, 1, "Membership Status in Group ID %d: 1", m);
9626 upa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_user_position_array, tvb,
9627 offset, 16, ENC_NA);
9628 upa_tree = proto_item_add_subtree(upa, ett_vht_upa);
9630 upa_value = tvb_get_letoh64(tvb, offset);
9631 for (m = 0; m < 32; m++) {
9632 if (msa_value & (G_GINT64_CONSTANT(1) << m)) {
9633 temp_val = ((guint64) pow(4,m))*3;
9634 field_val = (guint8) ((upa_value & temp_val) >> m*2);
9635 proto_tree_add_uint_format(upa_tree, hf_ieee80211_vht_user_position_field,
9636 tvb, offset + (m/4), 1, field_val, "User Position in Group ID %d: %u", m, field_val);
9639 upa_value = tvb_get_letoh64(tvb, offset+8);
9640 for (m = 0; m < 32; m++) {
9641 if (msa_value & (G_GINT64_CONSTANT(1) << (32+m))) {
9642 temp_val = ((guint64) pow(4,m))*3;
9643 field_val = (guint8) ((upa_value & temp_val) >> m*2);
9644 proto_tree_add_uint_format(upa_tree, hf_ieee80211_vht_user_position_field,
9645 tvb, (offset + 8) + (m/4), 1, field_val, "User Position in Group ID %d: %u", m, field_val);
9648 offset += tvb_reported_length_remaining(tvb, offset);
9651 case VHT_ACT_OPERATION_MODE_NOTIFICATION:{
9652 ti = proto_tree_add_item(tree, hf_ieee80211_vht_operation_mode_notification, tvb,
9653 offset, -1, ENC_NA);
9654 expert_add_info(pinfo, ti, &ei_ieee80211_vht_action);
9655 offset += tvb_reported_length_remaining(tvb, offset);
9663 return offset - start;
9667 add_ff_action_fst(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9670 guint start = offset;
9672 offset += add_ff_category_code(tree, tvb, pinfo, offset);
9673 code = tvb_get_guint8(tvb, offset);
9674 offset += add_ff_fst_action_code(tree, tvb, pinfo, offset);
9676 case FST_SETUP_REQUEST:
9677 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9678 offset += add_ff_llt(tree, tvb, pinfo, offset);
9680 case FST_SETUP_RESPONSE:
9681 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9682 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9685 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
9687 case FST_ACK_REQUEST:
9688 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9689 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
9691 case FST_ACK_RESPONSE:
9692 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9693 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
9695 case FST_ON_CHANNEL_TUNNEL_REQUEST:
9696 offset += add_ff_oct_mmpdu(tree, tvb, pinfo, offset);
9699 return offset - start;
9703 add_ff_action_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9706 guint start = offset;
9709 offset += add_ff_category_code(tree, tvb, pinfo, offset);
9710 code = tvb_get_guint8(tvb, offset);
9711 offset += add_ff_dmg_action_code(tree, tvb, pinfo, offset);
9713 case DMG_ACTION_PWR_SAVE_CONFIG_REQ:
9714 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9715 offset += add_ff_dmg_pwr_mgmt(tree, tvb, pinfo, offset);
9717 case DMG_ACTION_PWR_SAVE_CONFIG_RES:
9718 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9719 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9721 case DMG_ACTION_INFO_REQ:
9722 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
9724 case DMG_ACTION_INFO_RES:
9725 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
9727 case DMG_ACTION_HANDOVER_REQ:
9728 offset += add_ff_handover_reason(tree, tvb, pinfo, offset);
9729 offset += add_ff_handover_remaining_bi(tree, tvb, pinfo, offset);
9731 case DMG_ACTION_HANDOVER_RES:
9732 offset += add_ff_handover_result(tree, tvb, pinfo, offset);
9733 offset += add_ff_handover_reject_reason(tree, tvb, pinfo, offset);
9735 case DMG_ACTION_DTP_REQ:
9736 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9738 case DMG_ACTION_DTP_RES:
9739 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9741 case DMG_ACTION_RELAY_SEARCH_REQ:
9742 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9743 offset += add_ff_destination_reds_aid(tree, tvb, pinfo, offset);
9745 case DMG_ACTION_RELAY_SEARCH_RES:
9746 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9747 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9749 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ:
9750 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9752 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES:
9753 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9755 tvb_reported_length_remaining(tvb, offset);
9756 while(left_offset > 0) {
9757 proto_tree_add_item(tree, hf_ieee80211_ff_peer_sta_aid, tvb, offset, 1, ENC_NA);
9758 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset+1, 1, ENC_NA);
9759 proto_tree_add_item(tree, hf_ieee80211_ff_internal_angle, tvb, offset+2, 1, ENC_NA);
9760 proto_tree_add_item(tree, hf_ieee80211_ff_recommend, tvb, offset+2, 1, ENC_NA);
9761 /* another reserved byte */
9766 case DMG_ACTION_RLS_REQ:
9767 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9768 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
9769 offset += add_ff_realy_aid(tree, tvb, pinfo, offset);
9770 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
9772 case DMG_ACTION_RLS_RES:
9773 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9775 case DMG_ACTION_RLS_ANNOUNCE:
9776 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9777 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9778 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
9779 offset += add_ff_realy_aid(tree, tvb, pinfo, offset);
9780 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
9782 case DMG_ACTION_RLS_TEARDOWN:
9783 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
9784 offset += add_ff_realy_aid(tree, tvb, pinfo, offset);
9785 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
9787 case DMG_ACTION_RELAY_ACK_REQ:
9788 case DMG_ACTION_RELAY_ACK_RES:
9790 case DMG_ACTION_TPA_REQ:
9791 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9792 offset += add_ff_timing_offset(tree, tvb, pinfo, offset);
9793 offset += add_ff_sampling_frequency_offset(tree, tvb, pinfo, offset);
9795 case DMG_ACTION_TPA_RES:
9796 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9798 case DMG_ACTION_TPA_REP:
9799 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9801 case DMG_ACTION_ROC_REQ:
9802 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9803 offset += add_ff_relay_operation_type(tree, tvb, pinfo, offset);
9805 case DMG_ACTION_ROC_RES:
9806 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
9807 offset += add_ff_status_code(tree, tvb, pinfo, offset);
9810 return offset - start;
9814 add_ff_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
9816 switch (tvb_get_guint8(tvb, offset) & 0x7f) {
9817 case CAT_SPECTRUM_MGMT: /* 0 */
9818 return add_ff_action_spectrum_mgmt(tree, tvb, pinfo, offset);
9819 case CAT_QOS: /* 1 */
9820 return add_ff_action_qos(tree, tvb, pinfo, offset);
9821 case CAT_DLS: /* 2 */
9822 return add_ff_action_dls(tree, tvb, pinfo, offset);
9823 case CAT_BLOCK_ACK: /* 3 */
9824 return add_ff_action_block_ack(tree, tvb, pinfo, offset);
9825 case CAT_PUBLIC: /* 4 */
9826 return add_ff_action_public(tree, tvb, pinfo, offset);
9827 case CAT_RADIO_MEASUREMENT: /* 5 */
9828 return add_ff_action_radio_measurement(tree, tvb, pinfo, offset);
9829 case CAT_FAST_BSS_TRANSITION: /* 6 */
9830 return add_ff_action_fast_bss_transition(tree, tvb, pinfo, offset);
9831 case CAT_HT: /* 7 */
9832 return add_ff_action_ht(tree, tvb, pinfo, offset);
9833 case CAT_SA_QUERY: /* 8 */
9834 return add_ff_action_sa_query(tree, tvb, pinfo, offset);
9835 case CAT_PUBLIC_PROTECTED: /* 9 */
9836 return add_ff_action_protected_public(tree, tvb, pinfo, offset);
9837 case CAT_WNM: /* 10 */
9838 return add_ff_action_wnm(tree, tvb, pinfo, offset);
9839 case CAT_UNPROTECTED_WNM: /* 11 */
9840 return add_ff_action_unprotected_wnm(tree, tvb, pinfo, offset);
9841 case CAT_TDLS: /* 12 */
9842 return add_ff_action_tdls(tree, tvb, pinfo, offset);
9843 case CAT_MESH: /* 13 */
9844 return add_ff_action_mesh(tree, tvb, pinfo, offset);
9845 case CAT_MULTIHOP: /* 14 */
9846 return add_ff_action_multihop(tree, tvb, pinfo, offset);
9847 case CAT_SELF_PROTECTED: /* 15 */
9848 return add_ff_action_self_protected(tree, tvb, pinfo, offset);
9849 case CAT_DMG: /* 16 */
9850 return add_ff_action_dmg(tree, tvb, pinfo, offset);
9851 case CAT_MGMT_NOTIFICATION: /* Management notification frame - 17 */
9852 return add_ff_action_mgmt_notification(tree, tvb, pinfo, offset);
9853 case CAT_FAST_SESSION_TRANSFER: /* 18 */
9854 return add_ff_action_fst(tree, tvb, pinfo, offset);
9855 /* case CAT_ROBUST_AV_STREAMING: 19 */
9856 /* return add_ff_action_robust_av_streaming(tree, tvb, pinfo, offset); */
9857 case CAT_UNPROTECTED_DMG: /* 20 */
9858 return add_ff_action_unprotected_dmg(tree, tvb, pinfo, offset);
9859 case CAT_VHT: /* 21 */
9860 return add_ff_action_vht(tree, tvb, pinfo, offset);
9861 /* case CAT_VENDOR_SPECIFIC_PROTECTED: Vendor Specific Protected Category - 126 */
9862 /* return add_ff_action_vendor_specific_protected(tree, tvb, pinfo, offset);*/
9863 case CAT_VENDOR_SPECIFIC: /* Vendor Specific Protected Category - 127 */
9864 return add_ff_action_vendor_specific(tree, tvb, pinfo, offset);
9866 add_ff_category_code(tree, tvb, pinfo, offset);
9871 static const value_string ieee80211_rsn_cipher_vals[] = {
9873 {1, "WEP (40-bit)"},
9877 {5, "WEP (104-bit)"},
9879 {7, "Group addressed traffic not allowed"},
9884 static const value_string ieee80211_rsn_keymgmt_vals[] = {
9888 {3, "FT over IEEE 802.1X"},
9889 {4, "FT using PSK"},
9890 {5, "WPA (SHA256)"},
9891 {6, "PSK (SHA256)"},
9892 {7, "TDLS / TPK Handshake"},
9897 oui_base_custom(gchar *result, guint32 oui)
9900 const gchar *manuf_name;
9902 p_oui[0] = oui >> 16 & 0xFF;
9903 p_oui[1] = oui >> 8 & 0xFF;
9904 p_oui[2] = oui & 0xFF;
9906 /* Attempt an OUI lookup. */
9907 manuf_name = get_manuf_name_if_known(p_oui);
9908 if (manuf_name == NULL) {
9909 /* Could not find an OUI. */
9910 g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x", p_oui[0], p_oui[1], p_oui[2]);
9913 /* Found an address string. */
9914 g_snprintf(result, ITEM_LABEL_LENGTH, "%.2x-%.2x-%.2x (%s)", p_oui[0], p_oui[1], p_oui[2], manuf_name);
9919 rsn_gcs_base_custom(gchar *result, guint32 gcs)
9921 gchar oui_result[SHORT_STR];
9924 oui_result[0] = '\0';
9925 oui_base_custom(oui_result, gcs >> 8);
9926 tmp_str = val_to_str_wmem(NULL, gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
9927 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9928 wmem_free(NULL, tmp_str);
9932 rsn_pcs_base_custom(gchar *result, guint32 pcs)
9934 gchar oui_result[SHORT_STR];
9937 oui_result[0] = '\0';
9938 oui_base_custom(oui_result, pcs >> 8);
9939 tmp_str = val_to_str_wmem(NULL, pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
9940 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9941 wmem_free(NULL, tmp_str);
9945 rsn_akms_base_custom(gchar *result, guint32 akms)
9947 gchar oui_result[SHORT_STR];
9950 oui_result[0] = '\0';
9951 oui_base_custom(oui_result, akms >> 8);
9952 tmp_str = val_to_str_wmem(NULL, akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d");
9953 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9954 wmem_free(NULL, tmp_str);
9958 rsn_pcs_return(guint32 pcs)
9962 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR);
9964 rsn_pcs_base_custom(result, pcs);
9970 rsn_akms_return(guint32 akms)
9974 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR);
9976 rsn_akms_base_custom(result, akms);
9982 rsn_gmcs_base_custom(gchar *result, guint32 gmcs)
9984 gchar oui_result[SHORT_STR];
9987 oui_result[0] = '\0';
9988 oui_base_custom(oui_result, gmcs >> 8);
9989 tmp_str = val_to_str_wmem(NULL, gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
9990 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
9991 wmem_free(NULL, tmp_str);
9995 rsni_base_custom(gchar *result, guint32 rsni)
9999 temp_double = (double)rsni;
10000 g_snprintf(result, ITEM_LABEL_LENGTH, "%f dB", (temp_double / 2));
10004 vht_tpe_custom(gchar *result, guint8 txpwr)
10008 txpwr_db = (gint8)(txpwr);
10009 g_snprintf(result, ITEM_LABEL_LENGTH, "%3.1f dBm", (txpwr_db/2.0));
10013 channel_number_custom(gchar *result, guint8 channel_number)
10015 switch(channel_number){
10017 g_snprintf(result, ITEM_LABEL_LENGTH, "%u (iterative measurements on all supported channels in the specified Operating Class)", channel_number);
10020 g_snprintf(result, ITEM_LABEL_LENGTH, "%u (iterative measurements on all supported channels listed in the AP Channel Report)", channel_number);
10023 g_snprintf(result, ITEM_LABEL_LENGTH, "%u (iterative measurements on that Channel Number)", channel_number);
10029 static const value_string ieee802111_wfa_ie_type_vals[] = {
10030 { 1, "WPA Information Element" },
10036 static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] = {
10038 { 1, "WEP (40-bit)" },
10040 { 3, "AES (OCB)" },
10041 { 4, "AES (CCM)" },
10042 { 5, "WEP (104-bit)" },
10044 { 7, "Group addressed traffic not allowed" },
10048 static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] = {
10052 { 3, "FT over IEEE 802.1X" },
10053 { 4, "FT using PSK" },
10054 { 5, "WPA (SHA256)" },
10055 { 6, "PSK (SHA256)" },
10056 { 7, "TDLS / TPK Handshake" },
10060 static const value_string ieee80211_wfa_ie_wme_acs_vals[] = {
10061 { 0, "Best Effort" },
10062 { 1, "Background" },
10068 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals[] = {
10071 { 2, "Direct link" },
10072 { 3, "Bidirectional link" },
10076 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals[] = {
10082 static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals[] = {
10083 { 0, "Best Effort" },
10084 { 1, "Background" },
10086 { 3, "Excellent Effort" },
10087 { 4, "Controlled Load" },
10090 { 7, "Network Control" },
10094 static const value_string ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals[] = {
10095 { 0, "WMM AP may deliver all buffered frames (MSDUs and MMPDUs)" },
10096 { 1, "WMM AP may deliver a maximum of 2 buffered frames (MSDUs and MMPDUs) per USP" },
10097 { 2, "WMM AP may deliver a maximum of 4 buffered frames (MSDUs and MMPDUs) per USP" },
10098 { 3, "WMM AP may deliver a maximum of 6 buffered frames (MSDUs and MMPDUs) per USP" },
10101 static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = {
10102 "WMM delivery and trigger enabled",
10107 wpa_mcs_base_custom(gchar *result, guint32 mcs)
10109 gchar oui_result[SHORT_STR];
10112 oui_result[0] = '\0';
10113 oui_base_custom(oui_result, mcs >> 8);
10114 tmp_str = val_to_str_wmem(NULL, mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
10115 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
10116 wmem_free(NULL, tmp_str);
10120 wpa_ucs_base_custom(gchar *result, guint32 ucs)
10122 gchar oui_result[SHORT_STR];
10125 oui_result[0] = '\0';
10126 oui_base_custom(oui_result, ucs >> 8);
10127 tmp_str = val_to_str_wmem(NULL, ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
10128 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
10129 wmem_free(NULL, tmp_str);
10132 wpa_akms_base_custom(gchar *result, guint32 akms)
10134 gchar oui_result[SHORT_STR];
10137 oui_result[0] = '\0';
10138 oui_base_custom(oui_result, akms >> 8);
10139 tmp_str = val_to_str_wmem(NULL, akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d");
10140 g_snprintf(result, ITEM_LABEL_LENGTH, "%s %s", oui_result, tmp_str);
10141 wmem_free(NULL, tmp_str);
10145 wpa_ucs_return(guint32 ucs)
10149 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR);
10151 wpa_ucs_base_custom(result, ucs);
10157 wpa_akms_return(guint32 akms)
10161 result = (gchar *)wmem_alloc(wmem_packet_scope(), SHORT_STR);
10163 wpa_akms_base_custom(result, akms);
10168 /* For each Field */
10169 static const value_string ieee80211_wapi_suite_type[] = {
10171 {1, "WAI Certificate Authentication and Key Management"},
10172 {2, "WAI Preshared Key Authentication and Key Management"},
10175 /* For Summary Tag Information */
10176 static const value_string ieee80211_wapi_suite_type_short[] = {
10183 static const value_string ieee80211_wapi_cipher_type[] = {
10189 static const value_string ieee802111_wfa_ie_wme_type[] = {
10190 { 0, "Information Element" },
10191 { 1, "Parameter Element" },
10192 { 2, "TSPEC Element" },
10196 static const value_string ft_subelem_id_vals[] = {
10198 {1, "PMK-R1 key holder identifier (R1KH-ID)"},
10199 {2, "GTK subelement"},
10200 {3, "PMK-R0 key holder identifier (R0KH-ID)"},
10206 dissect_wme_qos_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
10208 proto_item *wme_qos_info_item;
10210 static const int *ieee80211_mgt_req[] = {
10211 &hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
10212 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
10213 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
10214 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
10215 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
10216 &hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
10220 static const int *ieee80211_mgt_resp[] = {
10221 &hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
10222 &hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
10223 &hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
10228 case MGT_ASSOC_REQ:
10229 case MGT_PROBE_REQ:
10230 case MGT_REASSOC_REQ:
10232 /* To AP so decode as per WMM standard Figure 7 QoS Info field when sent from WMM STA*/
10233 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_qos_info,
10234 ett_wme_qos_info, ieee80211_mgt_req,
10235 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
10239 case MGT_PROBE_RESP:
10240 case MGT_ASSOC_RESP:
10241 case MGT_REASSOC_RESP:
10243 /* From AP so decode as per WMM standard Figure 6 QoS Info field when sent from WMM AP */
10244 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_qos_info,
10245 ett_wme_qos_info, ieee80211_mgt_resp,
10246 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
10250 wme_qos_info_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_qos_info, tvb, offset, 1, ENC_NA);
10251 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);
10260 decode_qos_parameter_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
10263 /* WME QoS Info Field */
10264 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
10265 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_reserved, tvb, offset, 1, ENC_NA);
10267 /* AC Parameters */
10268 for (i = 0; i < 4; i++)
10270 proto_item *ac_item, *aci_aifsn_item, *ecw_item;
10271 proto_tree *ac_tree, *ecw_tree;
10272 guint8 aci_aifsn, ecw, ecwmin, ecwmax;
10273 guint16 cwmin, cwmax;
10274 static const int *ieee80211_wfa_ie_wme[] = {
10275 &hf_ieee80211_wfa_ie_wme_acp_aci,
10276 &hf_ieee80211_wfa_ie_wme_acp_acm,
10277 &hf_ieee80211_wfa_ie_wme_acp_aifsn,
10278 &hf_ieee80211_wfa_ie_wme_acp_reserved,
10282 ac_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_ac_parameters, tvb, offset, 4, ENC_NA);
10283 ac_tree = proto_item_add_subtree(ac_item, ett_wme_ac);
10285 /* ACI/AIFSN Field */
10286 aci_aifsn_item = proto_tree_add_bitmask_with_flags(ac_tree, tvb, offset, hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
10287 ett_wme_aci_aifsn, ieee80211_wfa_ie_wme,
10288 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
10289 aci_aifsn = tvb_get_guint8(tvb, offset);
10290 /* 802.11-2012, 8.4.2.31 EDCA Parameter Set element */
10291 if (aci_aifsn < 2) {
10292 expert_add_info_format(pinfo, aci_aifsn_item, &ei_ieee80211_qos_bad_aifsn,
10293 "The minimum value for the AIFSN subfield is 2 (found %u).", aci_aifsn);
10295 proto_item_append_text(ac_item, " ACI %u (%s), ACM %s, AIFSN %u",
10296 (aci_aifsn & 0x60) >> 5, try_val_to_str((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
10297 (aci_aifsn & 0x10) ? "yes" : "no", aci_aifsn & 0x0f);
10300 /* ECWmin/ECWmax field */
10301 ecw_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_ecw, tvb, offset, 1, ENC_NA);
10302 ecw_tree = proto_item_add_subtree(ecw_item, ett_wme_ecw);
10303 ecw = tvb_get_guint8(tvb, offset);
10304 ecwmin = ecw & 0x0f;
10305 ecwmax = (ecw & 0xf0) >> 4;
10306 cwmin= (1 << ecwmin) - 1;
10307 cwmax= (1 << ecwmax) - 1;
10308 proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_max, tvb, offset, 1, ENC_NA);
10309 proto_tree_add_item(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_ecw_min, tvb, offset, 1, ENC_NA);
10310 proto_tree_add_uint(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_cw_max, tvb, offset, 1, cwmax);
10311 proto_tree_add_uint(ecw_tree, hf_ieee80211_wfa_ie_wme_acp_cw_min, tvb, offset, 1, cwmin);
10312 proto_item_append_text(ac_item, ", ECWmin/max %u/%u (CWmin/max %u/%u)", ecwmin, ecwmax, cwmin, cwmax);
10316 proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_txop_limit, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10317 proto_item_append_text(ac_item, ", TXOP %u", tvb_get_letohs(tvb, offset));
10325 dissect_vendor_ie_wpawme(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, guint32 tag_len, int ftype)
10329 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_type, tvb, offset, 1, ENC_NA);
10330 type = tvb_get_guint8(tvb, offset);
10331 proto_item_append_text(tree, ": %s", val_to_str(type, ieee802111_wfa_ie_type_vals, "Unknown %d"));
10335 case 1: /* Wi-Fi Protected Access (WPA) */
10337 proto_item *wpa_mcs_item, *wpa_ucs_item, *wpa_akms_item;
10338 proto_item *wpa_sub_ucs_item, *wpa_sub_akms_item;
10339 proto_tree *wpa_mcs_tree, *wpa_ucs_tree, *wpa_akms_tree;
10340 proto_tree *wpa_sub_ucs_tree, *wpa_sub_akms_tree;
10341 guint16 ucs_count, akms_count;
10344 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10347 /* Multicast Cipher Suite */
10348 wpa_mcs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_mcs, tvb, offset, 4, ENC_BIG_ENDIAN);
10349 wpa_mcs_tree = proto_item_add_subtree(wpa_mcs_item, ett_wpa_mcs_tree);
10350 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
10352 /* Check if OUI is 00:50:F2 (WFA) */
10353 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME)
10355 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_wfa_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
10357 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
10361 /* Unicast Cipher Suites */
10362 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10363 ucs_count = tvb_get_letohs(tvb, offset);
10366 wpa_ucs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_list, tvb, offset, ucs_count * 4, ENC_NA);
10367 wpa_ucs_tree = proto_item_add_subtree(wpa_ucs_item, ett_wpa_ucs_tree);
10368 for (ii = 0; ii < ucs_count; ii++)
10370 wpa_sub_ucs_item = proto_tree_add_item(wpa_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs, tvb, offset, 4, ENC_BIG_ENDIAN);
10371 wpa_sub_ucs_tree = proto_item_add_subtree(wpa_sub_ucs_item, ett_wpa_sub_ucs_tree);
10372 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
10374 /* Check if OUI is 00:50:F2 (WFA) */
10375 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME)
10377 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
10378 proto_item_append_text(wpa_ucs_item, " %s", wpa_ucs_return(tvb_get_ntohl(tvb, offset)));
10380 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
10385 /* Authenticated Key Management Suites */
10386 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10387 akms_count = tvb_get_letohs(tvb, offset);
10390 wpa_akms_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_list, tvb, offset, akms_count * 4, ENC_NA);
10391 wpa_akms_tree = proto_item_add_subtree(wpa_akms_item, ett_wpa_akms_tree);
10392 for (ii = 0; ii < akms_count; ii++)
10394 wpa_sub_akms_item = proto_tree_add_item(wpa_akms_tree, hf_ieee80211_wfa_ie_wpa_akms, tvb, offset, 4, ENC_BIG_ENDIAN);
10395 wpa_sub_akms_tree = proto_item_add_subtree(wpa_sub_akms_item, ett_wpa_sub_akms_tree);
10396 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
10398 /* Check if OUI is 00:50:F2 (WFA) */
10399 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME)
10401 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
10402 proto_item_append_text(wpa_akms_item, " %s", wpa_akms_return(tvb_get_ntohl(tvb, offset)));
10404 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
10410 case 2: /* Wireless Multimedia Enhancements (WME) */
10414 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_subtype, tvb, offset, 1, ENC_NA);
10415 subtype = tvb_get_guint8(tvb, offset);
10416 proto_item_append_text(tree, ": %s", val_to_str(subtype, ieee802111_wfa_ie_wme_type, "Unknown %d"));
10418 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA);
10421 case 0: /* WME Information Element */
10423 /* WME QoS Info Field */
10424 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
10427 case 1: /* WME Parameter Element */
10429 offset = decode_qos_parameter_set(tree, tvb, pinfo, offset, ftype);
10432 case 2: /* WME TSPEC Element */
10434 static const int *ieee80211_wfa_ie_wme_tspec_tsinfo[] = {
10435 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
10436 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
10437 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
10438 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
10439 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
10443 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
10444 ett_tsinfo_tree, ieee80211_wfa_ie_wme_tspec_tsinfo,
10445 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
10448 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10451 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10454 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10457 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10460 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10463 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10466 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10469 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10472 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10475 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10478 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10481 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10484 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN);
10487 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10490 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10496 /* No default Action */
10498 } /* End switch (subtype) */
10501 case 4: /* WPS: Wifi Protected Setup */
10503 dissect_wps_tlvs(tree, tvb, offset, tag_len-1, NULL);
10507 /* No default Action...*/
10509 } /* End switch (type) */
10514 static const value_string hs20_indication_release_number_vals[] = {
10515 { 0, "Release 1" },
10516 { 1, "Release 2" },
10521 dissect_hs20_indication(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
10523 static const int *ieee80211_hs20_indication[] = {
10524 &hf_hs20_indication_dgaf_disabled,
10525 &hf_hs20_indication_pps_mo_id_present,
10526 &hf_hs20_indication_anqp_domain_id_present,
10527 &hf_hs20_indication_release_number,
10531 proto_tree_add_bitmask_list(tree, tvb, 0, 1, ieee80211_hs20_indication, ENC_LITTLE_ENDIAN);
10532 return tvb_captured_length(tvb);
10536 dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
10538 gint tag_len = tvb_reported_length(tag_tvb);
10541 tvbuff_t *vendor_tvb;
10546 subtype = tvb_get_guint8(tag_tvb, 3);
10547 proto_item_append_text(item, ": %s", val_to_str_const(subtype, wfa_subtype_vals, "Unknown"));
10548 vendor_tvb = tvb_new_subset_length(tag_tvb, offset, tag_len - 4);
10549 dissector_try_uint_new(wifi_alliance_ie_table, subtype, vendor_tvb, pinfo, item, FALSE, NULL);
10553 dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tvb, int offset, guint32 tag_len)
10556 switch(tvb_get_guint8(tvb, offset)){
10559 /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
10560 * This is only used within EAPOL-Key frame Key Data. */
10562 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_pmkid, tvb, offset, 16, ENC_NA);
10566 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_unknown, tvb, offset, tag_len, ENC_NA);
10570 proto_item_append_text(item, ": RSN");
10575 MARVELL_IE_MESH = 4
10576 } marvell_ie_type_t;
10579 dissect_vendor_ie_marvell(proto_item *item _U_, proto_tree *ietree,
10580 tvbuff_t *tvb, int offset, guint32 tag_len)
10584 type = tvb_get_guint8(tvb, offset);
10585 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10589 case MARVELL_IE_MESH:
10590 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_subtype, tvb,
10591 offset++, 1, ENC_LITTLE_ENDIAN);
10592 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_version, tvb,
10593 offset++, 1, ENC_LITTLE_ENDIAN);
10594 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_proto_id, tvb,
10595 offset++, 1, ENC_LITTLE_ENDIAN);
10596 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_metric_id, tvb,
10597 offset++, 1, ENC_LITTLE_ENDIAN);
10598 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_cap, tvb,
10599 offset++, 1, ENC_LITTLE_ENDIAN);
10603 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_data, tvb, offset,
10604 tag_len - 1, ENC_NA);
10610 ATHEROS_IE_ADVCAP = 1,
10612 } atheros_ie_type_t;
10615 ATHEROS_IE_ADVCAP_S = 1
10616 } atheros_ie_advcap_subtype_t;
10619 ATHEROS_IE_XR_S = 1
10620 } atheros_ie_xr_subtype_t;
10623 ATHEROS_IE_CAP_TURBOP = 0x01,
10624 ATHEROS_IE_CAP_COMP = 0x02,
10625 ATHEROS_IE_CAP_FF = 0x04,
10626 ATHEROS_IE_CAP_XR = 0x08,
10627 ATHEROS_IE_CAP_AR = 0x10,
10628 ATHEROS_IE_CAP_BURST = 0x20,
10629 ATHEROS_IE_CAP_WME = 0x40,
10630 ATHEROS_IE_CAP_BOOST = 0x80
10631 } atheros_ie_cap_t;
10633 static const value_string atheros_ie_type_vals[] = {
10634 { ATHEROS_IE_ADVCAP, "Advanced Capability"},
10635 { ATHEROS_IE_XR, "eXtended Range"},
10639 static const int *ieee80211_atheros_ie_cap[] = {
10640 &hf_ieee80211_atheros_ie_cap_f_turbop,
10641 &hf_ieee80211_atheros_ie_cap_f_comp,
10642 &hf_ieee80211_atheros_ie_cap_f_ff,
10643 &hf_ieee80211_atheros_ie_cap_f_xr,
10644 &hf_ieee80211_atheros_ie_cap_f_ar,
10645 &hf_ieee80211_atheros_ie_cap_f_burst,
10646 &hf_ieee80211_atheros_ie_cap_f_wme,
10647 &hf_ieee80211_atheros_ie_cap_f_boost,
10652 dissect_vendor_ie_atheros(proto_item *item _U_, proto_tree *ietree,
10653 tvbuff_t *tvb, int offset, guint tag_len,
10654 packet_info *pinfo, proto_item *ti_len)
10660 if (tag_len <= 3) {
10661 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 */
10664 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_type, tvb, offset, 1, ENC_NA);
10665 type = tvb_get_guint8(tvb, offset);
10666 proto_item_append_text(item, ": %s", val_to_str_const(type, atheros_ie_type_vals, "Unknown"));
10670 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_subtype, tvb, offset, 1, ENC_NA);
10671 subtype = tvb_get_guint8(tvb, offset);
10675 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_version, tvb, offset, 1, ENC_NA);
10676 version = tvb_get_guint8(tvb, offset);
10683 case ATHEROS_IE_ADVCAP:
10686 case ATHEROS_IE_ADVCAP_S:
10688 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_advcap_cap,
10689 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
10690 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
10694 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_defkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10700 /* No default Action */
10702 } /* End switch (subtype) */
10705 case ATHEROS_IE_XR:
10708 case ATHEROS_IE_XR_S:
10710 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_info, tvb, offset, 1, ENC_NA);
10714 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_bssid, tvb, offset, 6, ENC_NA);
10718 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_bssid, tvb, offset, 6, ENC_NA);
10722 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10726 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_xr_base_cap,
10727 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
10728 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
10732 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_xr_xr_cap,
10733 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
10734 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
10740 /* No default Action */
10742 } /* End switch (subtype) */
10745 /* No default Action */
10747 } /* End switch (type) */
10752 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA);
10757 AIRONET_IE_DTPC = 0,
10758 AIRONET_IE_UNKNOWN1 = 1,
10759 AIRONET_IE_VERSION = 3,
10761 AIRONET_IE_UNKNOWN11 = 11,
10762 AIRONET_IE_QBSS_V2 = 14,
10763 AIRONET_IE_CLIENT_MFP = 20
10764 } aironet_ie_type_t;
10766 static const value_string aironet_ie_type_vals[] = {
10767 { AIRONET_IE_DTPC, "DTPC"},
10768 { AIRONET_IE_UNKNOWN1, "Unknown (1)"},
10769 { AIRONET_IE_VERSION, "CCX version"},
10770 { AIRONET_IE_QOS, "Qos"},
10771 { AIRONET_IE_UNKNOWN11, "Unknown (11)"},
10772 { AIRONET_IE_QBSS_V2, "QBSS V2 - CCA"},
10773 { AIRONET_IE_CLIENT_MFP, "Client MFP"},
10777 static const value_string aironet_mfp_vals[] = {
10784 dissect_vendor_ie_aironet(proto_item *aironet_item, proto_tree *ietree,
10785 tvbuff_t *tvb, int offset, guint32 tag_len)
10789 gboolean dont_change = FALSE; /* Don't change the IE item text to default */
10791 type = tvb_get_guint8(tvb, offset);
10792 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10796 case AIRONET_IE_DTPC:
10797 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc, tvb, offset, 2, ENC_NA);
10798 proto_item_append_text(aironet_item, ": Aironet DTPC Powerlevel 0x%02X", tvb_get_guint8(tvb, offset));
10799 dont_change = TRUE;
10801 case AIRONET_IE_VERSION:
10802 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_version, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10803 proto_item_append_text(aironet_item, ": Aironet CCX version = %d", tvb_get_guint8(tvb, offset));
10804 dont_change = TRUE;
10806 case AIRONET_IE_QOS:
10807 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10809 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_paramset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10812 /* XXX: just copied over from WME. Maybe "Best Effort" and "Background"
10813 * need to be swapped. Also, the "TXOP" may be TXOP - or not.
10815 for (i = 0; i < 4; i++) {
10816 guint8 byte1, byte2;
10818 byte1 = tvb_get_guint8(tvb, offset);
10819 byte2 = tvb_get_guint8(tvb, offset + 1);
10820 txop = tvb_get_letohs(tvb, offset + 2);
10821 proto_tree_add_bytes_format(ietree, hf_ieee80211_aironet_ie_qos_val, tvb, offset, 4, NULL,
10822 "CCX QoS Parameters: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
10823 (byte1 & 0x60) >> 5, val_to_str((byte1 & 0x60) >> 5, wme_acs, "(Unknown: %d)"),
10824 (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
10825 byte2 & 0x0f, (byte2 & 0xf0) >> 4,
10830 case AIRONET_IE_QBSS_V2:
10831 /* Extract Values */
10832 proto_tree_add_item(ietree, hf_ieee80211_qbss2_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10833 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
10834 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cal, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
10835 proto_tree_add_item(ietree, hf_ieee80211_qbss2_gl, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
10837 case AIRONET_IE_CLIENT_MFP:
10838 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_clientmfp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10839 proto_item_append_text(aironet_item, ": Aironet Client MFP %s",
10840 val_to_str_const(1 & tvb_get_guint8(tvb, offset), aironet_mfp_vals, "Unknown"));
10841 dont_change = TRUE;
10844 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_data, tvb, offset,
10845 tag_len - 1, ENC_NA);
10848 if (!dont_change) {
10849 proto_item_append_text(aironet_item, ": Aironet %s (%d)",
10850 val_to_str_const(type, aironet_ie_type_vals, "Unknown"), type);
10854 #define ARUBA_APNAME 3
10855 static const value_string ieee80211_vs_aruba_subtype_vals[] = {
10856 { ARUBA_APNAME, "AP Name"},
10860 dissect_vendor_ie_aruba(proto_item *item, proto_tree *ietree,
10861 tvbuff_t *tvb, int offset, guint32 tag_len)
10864 const guint8* name;
10866 offset += 1; /* VS OUI Type */
10869 type = tvb_get_guint8(tvb, offset);
10870 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_subtype, tvb, offset, 1, ENC_NA);
10871 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aruba_subtype_vals, "Unknown"));
10880 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aruba_apname, tvb,
10881 offset, tag_len, ENC_ASCII|ENC_NA, wmem_packet_scope(), &name);
10882 proto_item_append_text(item, " (%s)", name);
10886 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_data, tvb, offset,
10888 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(wmem_packet_scope(), tvb, offset, tag_len));
10894 dissect_vendor_ie_mikrotik(proto_item *item _U_, proto_tree *ietree,
10895 tvbuff_t *tvb, int offset, guint32 tag_len)
10897 guint8 type, length;
10898 proto_item *subitem;
10899 proto_tree *subtree;
10901 offset += 1; /* VS OUI Type */
10903 /* FIXME: Make sure we have at least 2 bytes left */
10904 proto_tree_add_item(ietree, hf_ieee80211_vs_mikrotik_unknown, tvb, offset, 2, ENC_NA);
10909 while (tag_len >= 2) {
10910 type = tvb_get_guint8(tvb, offset);
10911 length = tvb_get_guint8(tvb, offset+1);
10912 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_mikrotik_subitem, tvb, offset, length+2, ENC_NA);
10913 subtree = proto_item_add_subtree(subitem, ett_mikrotik);
10914 proto_item_set_text(subitem, "Sub IE (T/L: %d/%d)", type, length);
10916 proto_tree_add_item(subtree, hf_ieee80211_vs_mikrotik_subtype, tvb, offset, 1, ENC_NA);
10920 proto_tree_add_item(subtree, hf_ieee80211_vs_mikrotik_sublength, tvb, offset, 1, ENC_NA);
10924 if (tag_len < length)
10925 /* FIXME: warn about this */
10931 proto_tree_add_item(subtree, hf_ieee80211_vs_mikrotik_subdata, tvb, offset, length, ENC_NA);
10937 enum vs_nintendo_type {
10938 NINTENDO_SERVICES = 0x11,
10939 NINTENDO_CONSOLEID = 0xF0
10942 static const value_string ieee80211_vs_nintendo_type_vals[] = {
10943 { NINTENDO_SERVICES, "Services"},
10944 { NINTENDO_CONSOLEID, "ConsoleID"},
10949 dissect_vendor_ie_nintendo_tlv(const int hfindex, proto_tree *ietree,
10950 tvbuff_t *tvb, int offset, guint32 sublen)
10952 proto_item *nintendo_item;
10953 proto_tree *nintendo_tree;
10955 nintendo_item = proto_tree_add_item(ietree, hfindex, tvb, offset, sublen, ENC_NA);
10956 nintendo_tree = proto_item_add_subtree(nintendo_item, ett_nintendo);
10958 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_type, tvb, offset, 1, ENC_NA);
10959 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_length, tvb, offset + 1, 1, ENC_NA);
10961 return nintendo_tree;
10965 dissect_vendor_ie_nintendo(proto_item *item _U_, proto_tree *ietree,
10966 tvbuff_t *tvb, int offset, guint32 tag_len)
10968 proto_tree *nintendo_tree;
10972 guint32 length = tag_len;
10974 /* Skip OUI type for now - the code is for type 1 (StreetPass) only */
10975 /* http://3dbrew.org/wiki/StreetPass */
10979 while(length > 0 && length < 256) { /* otherwise we are < 0 but on unsigned */
10980 subtype = tvb_get_guint8(tvb, offset);
10981 sublength = tvb_get_guint8(tvb, offset + 1);
10984 case NINTENDO_SERVICES:
10985 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_servicelist, ietree, tvb, offset, sublength + 2);
10989 while (sublength > 4) {
10991 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_service, tvb, offset, 5, ENC_NA);
10997 case NINTENDO_CONSOLEID:
10998 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_consoleid, ietree, tvb, offset, sublength + 2);
11002 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_consoleid, tvb, offset, sublength, ENC_NA);
11003 offset += sublength;
11004 length -= sublength;
11007 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_unknown, ietree, tvb, offset, sublength + 2);
11011 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_unknown, tvb, offset, sublength, ENC_NA);
11012 offset += sublength;
11013 length -= sublength;
11020 dissect_vendor_ie_meru(proto_item *item _U_, proto_tree *ietree,
11021 tvbuff_t *tvb, int offset, guint32 tag_len,
11022 packet_info *pinfo)
11024 guint32 type, length;
11025 proto_item *subitem, *ti_len;
11026 proto_tree *subtree;
11028 while (tag_len >= 2) {
11029 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_meru_subitem, tvb, offset, 2, ENC_NA);
11030 subtree = proto_item_add_subtree(subitem, ett_meru);
11032 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_subtype, tvb, offset, 1, ENC_NA, &type);
11036 ti_len = proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_sublength, tvb, offset, 1, ENC_NA, &length);
11040 if (tag_len < length) {
11041 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < Sub Length");
11045 proto_item_append_text(subitem, " (t=%d, l=%d)", type, length);
11046 proto_item_set_len(subitem, 2+length);
11048 proto_tree_add_item(subtree, hf_ieee80211_vs_meru_subdata, tvb, offset, length, ENC_NA);
11055 static const value_string ieee80211_vs_extreme_subtype_vals[] = {
11061 dissect_vendor_ie_extreme(proto_item *item _U_, proto_tree *ietree,
11062 tvbuff_t *tvb, int offset, guint32 tag_len,
11063 packet_info *pinfo)
11065 guint32 type, length;
11066 proto_item *ti_len;
11068 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_subtype, tvb, offset, 1, ENC_NA, &type);
11072 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_subdata, tvb, offset, tag_len, ENC_NA);
11075 case 1: /* Unknown (7 bytes) + AP Name Length (1 byte) + AP Name */
11077 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_unknown, tvb, offset, 7, ENC_NA);
11081 ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_ap_length, tvb, offset, 1, ENC_NA, &length);
11085 if (tag_len < length) {
11086 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < AP Length");
11090 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_ap_name, tvb, offset, length, ENC_ASCII|ENC_NA);
11094 /* Expert info ? */
11099 /* 802.11-2012 8.4.2.37 QoS Capability element */
11101 dissect_qos_capability(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
11104 case MGT_ASSOC_REQ:
11105 case MGT_PROBE_REQ:
11106 case MGT_REASSOC_REQ:
11108 /* To AP so decode Qos Info as STA */
11109 offset += add_ff_qos_info_sta(tree, tvb, pinfo, offset);
11114 case MGT_PROBE_RESP:
11115 case MGT_ASSOC_RESP:
11116 case MGT_REASSOC_RESP:
11118 /* From AP so decode QoS Info as AP */
11119 offset += add_ff_qos_info_ap(tree, tvb, pinfo, offset);
11124 expert_add_info_format(pinfo, proto_tree_get_parent(tree), &ei_ieee80211_qos_info_bad_ftype,
11125 "Could not deduce direction to decode correctly, ftype %u", ftype);
11132 /* 7.3.2.25 RSN information element */
11134 dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
11135 int offset, guint32 tag_len, association_sanity_check_t *association_sanity_check)
11137 proto_item *rsn_gcs_item, *rsn_pcs_item, *rsn_akms_item, *rsn_pmkid_item, *rsn_gmcs_item;
11138 proto_item *rsn_sub_pcs_item, *rsn_sub_akms_item;
11139 proto_item *rsn_pcs_count, *rsn_akms_count, *rsn_pmkid_count;
11140 proto_tree *rsn_gcs_tree, *rsn_pcs_tree, *rsn_akms_tree, *rsn_pmkid_tree, *rsn_gmcs_tree;
11141 proto_tree *rsn_sub_pcs_tree, *rsn_sub_akms_tree;
11142 guint16 pcs_count, akms_count, pmkid_count;
11144 int tag_end = offset + tag_len;
11145 static const int *ieee80211_rsn_cap[] = {
11146 &hf_ieee80211_rsn_cap_preauth,
11147 &hf_ieee80211_rsn_cap_no_pairwise,
11148 &hf_ieee80211_rsn_cap_ptksa_replay_counter,
11149 &hf_ieee80211_rsn_cap_gtksa_replay_counter,
11150 &hf_ieee80211_rsn_cap_mfpr,
11151 &hf_ieee80211_rsn_cap_mfpc,
11152 &hf_ieee80211_rsn_cap_jmr,
11153 &hf_ieee80211_rsn_cap_peerkey,
11157 proto_tree_add_item(tree, hf_ieee80211_rsn_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11160 /* 7.3.2.25.1 Group Cipher suites */
11161 rsn_gcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gcs, tvb, offset, 4, ENC_BIG_ENDIAN);
11162 rsn_gcs_tree = proto_item_add_subtree(rsn_gcs_item, ett_rsn_gcs_tree);
11163 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
11165 /* Check if OUI is 00:0F:AC (ieee80211) */
11166 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
11168 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
11170 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
11174 /* 7.3.2.25.2 Pairwise Cipher suites */
11175 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11176 pcs_count = tvb_get_letohs(tvb, offset);
11179 if (offset + (pcs_count * 4) > tag_end)
11181 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
11182 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
11183 pcs_count = (tag_end - offset) / 4;
11186 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA);
11187 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
11188 for (ii = 0; ii < pcs_count; ii++)
11190 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN);
11191 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
11192 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
11194 /* Check if OUI is 00:0F:AC (ieee80211) */
11195 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
11197 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
11198 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(tvb_get_ntohl(tvb, offset)));
11200 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
11205 if (offset >= tag_end)
11210 /* 7.3.2.25.2 AKM suites */
11211 rsn_akms_count = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11212 akms_count = tvb_get_letohs(tvb, offset);
11215 if (offset + (akms_count * 4) > tag_end)
11217 expert_add_info_format(pinfo, rsn_akms_count, &ei_ieee80211_rsn_pmkid_count,
11218 "Auth Key Management (AKM) Suite Count too large, 4*%u > %d", akms_count, tag_end - offset);
11219 akms_count = (tag_end - offset) / 4;
11222 rsn_akms_item = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_list, tvb, offset, akms_count * 4, ENC_NA);
11223 rsn_akms_tree = proto_item_add_subtree(rsn_akms_item, ett_rsn_akms_tree);
11224 for (ii = 0; ii < akms_count; ii++)
11226 rsn_sub_akms_item = proto_tree_add_item(rsn_akms_tree, hf_ieee80211_rsn_akms, tvb, offset, 4, ENC_BIG_ENDIAN);
11227 rsn_sub_akms_tree = proto_item_add_subtree(rsn_sub_akms_item, ett_rsn_sub_akms_tree);
11228 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
11230 /* Check if OUI is 00:0F:AC (ieee80211) */
11231 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
11233 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
11234 proto_item_append_text(rsn_akms_item, " %s", rsn_akms_return(tvb_get_ntohl(tvb, offset)));
11236 if (association_sanity_check) {
11237 guint32 akm_suite = tvb_get_ntohl(tvb, offset);
11238 if (akm_suite == 0x000FAC03 || akm_suite == 0x000FAC04 || akm_suite == 0x000FAC09) {
11239 /* This is an FT AKM suite */
11240 association_sanity_check->has_ft_akm_suite = TRUE;
11241 if (association_sanity_check->rsn_first_ft_akm_suite == NULL && rsn_sub_akms_tree != NULL) {
11242 association_sanity_check->rsn_first_ft_akm_suite = rsn_sub_akms_tree->last_child;
11245 /* This is a non-FT AKM suite */
11246 association_sanity_check->has_non_ft_akm_suite = TRUE;
11247 if (association_sanity_check->rsn_first_non_ft_akm_suite == NULL && rsn_sub_akms_tree != NULL) {
11248 association_sanity_check->rsn_first_non_ft_akm_suite = rsn_sub_akms_tree->last_child;
11253 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
11258 /* 7.3.2.25.3 RSN capabilities */
11259 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_rsn_cap,
11260 ett_rsn_cap_tree, ieee80211_rsn_cap,
11261 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11263 if (offset >= tag_end)
11267 /* 7.3.2.25.4 PMKID */
11268 rsn_pmkid_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11269 pmkid_count = tvb_get_letohs(tvb, offset);
11272 if (offset + (pmkid_count * 16) > tag_end)
11274 expert_add_info_format(pinfo, rsn_pmkid_count, &ei_ieee80211_pmkid_count_too_large,
11275 "PMKID Count too large, 16*%u > %d", pmkid_count, tag_end - offset);
11276 pmkid_count = (tag_end - offset) / 16;
11279 rsn_pmkid_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_list, tvb, offset, pmkid_count * 16, ENC_NA);
11280 rsn_pmkid_tree = proto_item_add_subtree(rsn_pmkid_item, ett_rsn_pmkid_tree);
11281 for (ii = 0; ii < pmkid_count; ii++)
11283 proto_tree_add_item(rsn_pmkid_tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA);
11287 if (offset >= tag_end)
11291 /* Group Management Cipher Suite (802.11w)*/
11292 rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN);
11293 rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
11294 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
11295 /* Check if OUI is 00:0F:AC (ieee80211) */
11296 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
11298 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
11300 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
11307 /* 7.3.2.27 Extended Capabilities information element (127) */
11309 dissect_extended_capabilities_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11311 int tag_len = tvb_reported_length(tvb);
11312 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11314 proto_item *ti_ex_cap;
11315 proto_tree *ex_cap_tree;
11316 static const int *ieee80211_tag_extended_capabilities_byte1[] = {
11317 &hf_ieee80211_tag_extended_capabilities_b0,
11318 &hf_ieee80211_tag_extended_capabilities_b1,
11319 &hf_ieee80211_tag_extended_capabilities_b2,
11320 &hf_ieee80211_tag_extended_capabilities_b3,
11321 &hf_ieee80211_tag_extended_capabilities_b4,
11322 &hf_ieee80211_tag_extended_capabilities_b5,
11323 &hf_ieee80211_tag_extended_capabilities_b6,
11324 &hf_ieee80211_tag_extended_capabilities_b7,
11327 static const int *ieee80211_tag_extended_capabilities_byte2[] = {
11328 &hf_ieee80211_tag_extended_capabilities_b8,
11329 &hf_ieee80211_tag_extended_capabilities_b9,
11330 &hf_ieee80211_tag_extended_capabilities_b10,
11331 &hf_ieee80211_tag_extended_capabilities_b11,
11332 &hf_ieee80211_tag_extended_capabilities_b12,
11333 &hf_ieee80211_tag_extended_capabilities_b13,
11334 &hf_ieee80211_tag_extended_capabilities_b14,
11335 &hf_ieee80211_tag_extended_capabilities_b15,
11338 static const int *ieee80211_tag_extended_capabilities_byte3[] = {
11339 &hf_ieee80211_tag_extended_capabilities_b16,
11340 &hf_ieee80211_tag_extended_capabilities_b17,
11341 &hf_ieee80211_tag_extended_capabilities_b18,
11342 &hf_ieee80211_tag_extended_capabilities_b19,
11343 &hf_ieee80211_tag_extended_capabilities_b20,
11344 &hf_ieee80211_tag_extended_capabilities_b21,
11345 &hf_ieee80211_tag_extended_capabilities_b22,
11346 &hf_ieee80211_tag_extended_capabilities_b23,
11349 static const int *ieee80211_tag_extended_capabilities_byte4[] = {
11350 &hf_ieee80211_tag_extended_capabilities_b24,
11351 &hf_ieee80211_tag_extended_capabilities_b25,
11352 &hf_ieee80211_tag_extended_capabilities_b26,
11353 &hf_ieee80211_tag_extended_capabilities_b27,
11354 &hf_ieee80211_tag_extended_capabilities_b28,
11355 &hf_ieee80211_tag_extended_capabilities_b29,
11356 &hf_ieee80211_tag_extended_capabilities_b30,
11357 &hf_ieee80211_tag_extended_capabilities_b31,
11360 static const int *ieee80211_tag_extended_capabilities_byte5[] = {
11361 &hf_ieee80211_tag_extended_capabilities_b32,
11362 &hf_ieee80211_tag_extended_capabilities_b33,
11363 &hf_ieee80211_tag_extended_capabilities_b34,
11364 &hf_ieee80211_tag_extended_capabilities_b35,
11365 &hf_ieee80211_tag_extended_capabilities_b36,
11366 &hf_ieee80211_tag_extended_capabilities_b37,
11367 &hf_ieee80211_tag_extended_capabilities_b38,
11368 &hf_ieee80211_tag_extended_capabilities_b39,
11371 static const int *ieee80211_tag_extended_capabilities_byte6[] = {
11372 &hf_ieee80211_tag_extended_capabilities_b40,
11373 &hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
11374 &hf_ieee80211_tag_extended_capabilities_b44,
11375 &hf_ieee80211_tag_extended_capabilities_b45,
11376 &hf_ieee80211_tag_extended_capabilities_b46,
11377 &hf_ieee80211_tag_extended_capabilities_b47,
11380 static const int *ieee80211_tag_extended_capabilities_byte7[] = {
11381 &hf_ieee80211_tag_extended_capabilities_b48,
11382 &hf_ieee80211_tag_extended_capabilities_o7,
11389 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be greater than 0", tag_len);
11392 proto_item_append_text(field_data->item_tag, " (%u octet%s)", tag_len, plurality(tag_len, "", "s"));
11394 /* Extended Capability octet 1 */
11395 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
11396 ett_tag_ex_cap1, ieee80211_tag_extended_capabilities_byte1,
11397 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11398 proto_item_append_text(ti_ex_cap, " (octet 1)");
11401 /* Extended Capability octet 2 */
11402 if (offset >= tag_len) {
11405 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
11406 ett_tag_ex_cap2, ieee80211_tag_extended_capabilities_byte2,
11407 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11408 proto_item_append_text(ti_ex_cap, " (octet 2)");
11411 /* Extended Capability octet 3 */
11412 if (offset >= tag_len) {
11415 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
11416 ett_tag_ex_cap3, ieee80211_tag_extended_capabilities_byte3,
11417 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11418 proto_item_append_text(ti_ex_cap, " (octet 3)");
11421 /* Extended Capability octet 4 */
11422 if (offset >= tag_len) {
11425 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
11426 ett_tag_ex_cap4, ieee80211_tag_extended_capabilities_byte4,
11427 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11428 proto_item_append_text(ti_ex_cap, " (octet 4)");
11431 /* Extended Capability octet 5 */
11432 if (offset >= tag_len) {
11435 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
11436 ett_tag_ex_cap5, ieee80211_tag_extended_capabilities_byte5,
11437 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11438 proto_item_append_text(ti_ex_cap, " (octet 5)");
11441 /* Extended Capability octet 6 */
11442 if (offset >= tag_len) {
11446 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
11447 ett_tag_ex_cap6, ieee80211_tag_extended_capabilities_byte6,
11448 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11449 proto_item_append_text(ti_ex_cap, " (octet 6)");
11453 /* Extended Capability octet 7 */
11454 if (offset >= tag_len) {
11457 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
11458 ett_tag_ex_cap7, ieee80211_tag_extended_capabilities_byte7,
11459 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11460 proto_item_append_text(ti_ex_cap, " (octet 7)");
11463 /* Extended Capability octet 8 */
11464 if (offset >= tag_len) {
11467 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
11468 proto_item_append_text(ti_ex_cap, " (octet 8)");
11469 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap8);
11470 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b61, tvb, offset, 1, ENC_NA);
11471 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b62, tvb, offset, 1, ENC_NA);
11473 /* Std802.11ac-2013, b63-64 indicate the Max Number of MSDUs in AMSDU. */
11474 ti_ex_cap = proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b63, tvb, offset, 1, ENC_NA);
11475 if (offset+1 < tag_len) {
11477 proto_item_append_text(ti_ex_cap, " (b63-64 Max Number of MSDUs in AMSDU: %s)",
11478 val_to_str((tvb_get_guint8(tvb, offset) & 0x80) + ((tvb_get_guint8(tvb, offset+1) & 0x1) << 1),
11479 vht_max_mpdu_in_amsdu, "Unknown:%d"));
11482 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_o8, tvb, offset, 1, ENC_NA);
11485 /* Extended Capability octet 9 */
11486 if (offset >= tag_len) {
11489 ti_ex_cap = proto_tree_add_item(tree, hf_ieee80211_tag_extended_capabilities, tvb, offset, 1, ENC_NA);
11490 proto_item_append_text(ti_ex_cap, " (octet 9)");
11491 ex_cap_tree = proto_item_add_subtree(ti_ex_cap, ett_tag_ex_cap9);
11492 ti_ex_cap = proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_b64, tvb, offset, 1, ENC_NA);
11493 proto_item_append_text(ti_ex_cap, " (b63-64 Max Number of MSDUs in AMSDU)");
11494 proto_tree_add_item(ex_cap_tree, hf_ieee80211_tag_extended_capabilities_o9, tvb, offset, 1, ENC_NA);
11500 dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset)
11503 proto_tree *mcs_tree;
11504 static const int *ieee80211_vht_mcsset_rx_max_mcs[] = {
11505 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
11506 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
11507 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
11508 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
11509 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
11510 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
11511 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
11512 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
11515 static const int *ieee80211_vht_mcsset_tx_max_mcs[] = {
11516 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
11517 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
11518 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
11519 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
11520 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
11521 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
11522 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
11523 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
11527 /* 8 byte Supported MCS set */
11528 ti = proto_tree_add_item(tree, hf_ieee80211_vht_mcsset, tvb, offset, 8, ENC_NA);
11530 mcs_tree = proto_item_add_subtree(ti, ett_vht_mcsset_tree);
11533 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_mcsset_rx_mcs_map,
11534 ett_vht_rx_mcsbit_tree, ieee80211_vht_mcsset_rx_max_mcs,
11535 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11538 /* B16 - B28 13 bits*/
11539 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11541 /* B29 - B31 2 reserved bits*/
11546 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_mcsset_tx_mcs_map,
11547 ett_vht_tx_mcsbit_tree, ieee80211_vht_mcsset_tx_max_mcs,
11548 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11550 /* B48 - B60 13 bits */
11551 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11552 /* B61 - B63 2 reserved bits*/
11559 dissect_vht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11561 int tag_len = tvb_reported_length(tvb);
11562 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11564 static const int *ieee80211_vht_caps[] = {
11565 &hf_ieee80211_vht_max_mpdu_length,
11566 &hf_ieee80211_vht_supported_chan_width_set,
11567 &hf_ieee80211_vht_rx_ldpc,
11568 &hf_ieee80211_vht_short_gi_for_80,
11569 &hf_ieee80211_vht_short_gi_for_160,
11570 &hf_ieee80211_vht_tx_stbc,
11571 /* End of first byte */
11572 &hf_ieee80211_vht_rx_stbc,
11573 &hf_ieee80211_vht_su_beamformer_cap,
11574 &hf_ieee80211_vht_su_beamformee_cap,
11575 &hf_ieee80211_vht_beamformer_antennas,
11576 /* End of second byte */
11577 &hf_ieee80211_vht_sounding_dimensions,
11578 &hf_ieee80211_vht_mu_beamformer_cap,
11579 &hf_ieee80211_vht_mu_beamformee_cap,
11580 &hf_ieee80211_vht_txop_ps,
11581 &hf_ieee80211_vht_var_htc_field,
11582 &hf_ieee80211_vht_max_ampdu,
11583 &hf_ieee80211_vht_link_adaptation_cap,
11584 &hf_ieee80211_vht_rx_pattern,
11585 &hf_ieee80211_vht_tx_pattern,
11586 &hf_ieee80211_vht_reserv,
11590 if (tag_len != 12) {
11591 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
11592 "VHT Capabilities IE length %u wrong, must be = 12", tag_len);
11596 /* 4 byte VHT Capabilities Info*/
11597 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_cap,
11598 ett_vht_cap_tree, ieee80211_vht_caps,
11599 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11602 /* 8 byte MCS set */
11603 offset = dissect_vht_mcs_set(tree, tvb, offset);
11609 dissect_vht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11611 int tag_len = tvb_reported_length(tvb);
11612 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11614 proto_item *op_item;
11615 proto_tree *op_tree;
11616 static const int *ieee80211_vht_op_max_basic_mcs[] = {
11617 &hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
11618 &hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
11619 &hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
11620 &hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
11621 &hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
11622 &hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
11623 &hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
11624 &hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
11628 if (tag_len != 5) {
11629 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
11630 "VHT Operation IE length %u wrong, must be = 5", tag_len);
11634 /* 3 byte VHT Operation Info*/
11635 op_item = proto_tree_add_item(tree, hf_ieee80211_vht_op, tvb, offset, 3, ENC_NA);
11636 op_tree = proto_item_add_subtree(op_item, ett_vht_op_tree);
11637 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11638 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center0, tvb, offset+1, 1, ENC_LITTLE_ENDIAN);
11639 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center1, tvb, offset+2, 1, ENC_LITTLE_ENDIAN);
11642 /* VHT Basic MCS Set */
11643 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_op_basic_mcs_map,
11644 ett_vht_basic_mcsbit_tree, ieee80211_vht_op_max_basic_mcs,
11645 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
11652 dissect_vht_tx_pwr_envelope(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11654 int tag_len = tvb_reported_length(tvb);
11655 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11657 proto_item *tx_pwr_item, *ti;
11658 proto_tree *tx_pwr_info_tree;
11659 guint8 opt_ie_cnt=0;
11662 if (tag_len < 2 || tag_len > 5) {
11663 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
11664 "VHT TX PWR Envelope IE length %u wrong, must be >= 2 and <= 5", tag_len);
11668 tx_pwr_item = proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_info, tvb, offset, 1, ENC_NA);
11669 tx_pwr_info_tree = proto_item_add_subtree(tx_pwr_item, ett_vht_tpe_info_tree);
11671 ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11672 proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_unit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11673 proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11675 opt_ie_cnt = tvb_get_guint8(tvb, offset) & 0x07;
11679 /* Power Constraint info is mandatory only for 20MHz, others are optional*/
11680 /* Power is expressed in terms of 0.5dBm from -64 to 63 and is encoded
11681 * as 8-bit 2's compliment */
11682 for (i = 0; i <= opt_ie_cnt; i++) {
11685 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_20, tvb, offset, 1, ENC_NA);
11689 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_40, tvb, offset, 1, ENC_NA);
11693 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_80, tvb, offset, 1, ENC_NA);
11697 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_160, tvb, offset, 1, ENC_NA);
11701 expert_add_info(pinfo, ti, &ei_ieee80211_vht_tpe_pwr_info_count);
11711 dissect_mobility_domain(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11713 int tag_len = tvb_reported_length(tvb);
11714 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11717 if (field_data->sanity_check != NULL) {
11718 field_data->sanity_check->association_has_mobility_domain_element = TRUE;
11722 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
11723 "MDIE content length must be at least 3 bytes");
11727 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_mdid,
11728 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11729 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab,
11730 tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
11731 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
11732 tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
11733 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
11734 tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
11735 return tvb_captured_length(tvb);
11739 dissect_fast_bss_transition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11741 int tag_len = tvb_reported_length(tvb);
11742 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11744 if (tag_len < 82) {
11745 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
11746 "FTIE content length must be at least 82 bytes");
11750 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic_control,
11751 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11752 proto_tree_add_item(tree, hf_ieee80211_tag_ft_element_count,
11753 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11755 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic,
11756 tvb, offset, 16, ENC_NA);
11758 proto_tree_add_item(tree, hf_ieee80211_tag_ft_anonce,
11759 tvb, offset, 32, ENC_NA);
11761 proto_tree_add_item(tree, hf_ieee80211_tag_ft_snonce,
11762 tvb, offset, 32, ENC_NA);
11765 while (offset + 2 <= tag_len) {
11768 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_id,
11769 tvb, offset, 1, ENC_LITTLE_ENDIAN);
11770 id = tvb_get_guint8(tvb, offset);
11773 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_len,
11774 tvb, offset, 1, ENC_LITTLE_ENDIAN);
11775 len = tvb_get_guint8(tvb, offset);
11778 if (offset + len > tag_len) {
11779 proto_tree_add_string(tree, hf_ieee80211_tag_interpretation, tvb, offset,
11780 tag_len - offset, "Invalid FTIE subelement");
11784 s_end = offset + len;
11787 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_r1kh_id,
11788 tvb, offset, len, ENC_NA);
11791 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_info,
11792 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11793 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_id,
11794 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11796 if (offset > s_end)
11798 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key_length,
11799 tvb, offset, 1, ENC_LITTLE_ENDIAN);
11801 if (offset > s_end)
11803 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_rsc,
11804 tvb, offset, 8, ENC_NA);
11806 if (offset > s_end)
11808 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_gtk_key,
11809 tvb, offset, s_end - offset, ENC_NA);
11812 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_r0kh_id,
11813 tvb, offset, len, ENC_NA);
11816 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_id,
11817 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11819 if (offset > s_end)
11821 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_ipn,
11822 tvb, offset, 6, ENC_NA);
11824 if (offset > s_end)
11826 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key_length,
11827 tvb, offset, 1, ENC_LITTLE_ENDIAN);
11829 if (offset > s_end)
11831 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_igtk_key,
11832 tvb, offset, 24, ENC_NA);
11835 proto_tree_add_item(tree, hf_ieee80211_tag_ft_subelem_data,
11836 tvb, offset, len, ENC_NA);
11842 return tvb_captured_length(tvb);
11846 dissect_mmie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11848 int tag_len = tvb_reported_length(tvb);
11849 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11852 if (tag_len < 16) {
11853 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
11854 "MMIE content length must be at least 16 bytes");
11858 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_keyid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11859 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_ipn, tvb, offset + 2, 6,
11861 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_mic, tvb, offset + 8, 8,
11863 return tvb_captured_length(tvb);
11867 dissect_ssid_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11869 int tag_len = tvb_reported_length(tvb);
11872 gboolean first = TRUE;
11874 while (offset + 1 <= tag_len) {
11875 guint8 len = tvb_get_guint8(tvb, offset + 1);
11878 if (offset + 2 + len > tag_len)
11881 str = tvb_format_text(tvb, offset + 2, len);
11882 proto_item_append_text(tree, "%c %s", (first ? ':' : ','), str);
11884 entry = proto_tree_add_subtree_format(tree, tvb, offset, 2 + len, ett_ssid_list, NULL, "SSID: %s", str);
11885 proto_tree_add_item(entry, hf_ieee80211_tag_number, tvb, offset, 1,
11886 ENC_LITTLE_ENDIAN);
11888 proto_tree_add_uint(entry, hf_ieee80211_tag_length, tvb, offset, 1, len);
11890 proto_tree_add_item(entry, hf_ieee80211_tag_ssid, tvb, offset, len,
11895 return tvb_captured_length(tvb);
11899 dissect_link_identifier(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11901 int tag_len = tvb_reported_length(tvb);
11902 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11905 if (tag_len < 18) {
11906 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
11907 "Link Identifier content length must be at least "
11909 return tvb_captured_length(tvb);
11912 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_bssid, tvb,
11913 offset, 6, ENC_NA);
11914 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_init_sta, tvb,
11915 offset + 6, 6, ENC_NA);
11916 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_resp_sta, tvb,
11917 offset + 12, 6, ENC_NA);
11918 return tvb_captured_length(tvb);
11922 dissect_wakeup_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11924 int tag_len = tvb_reported_length(tvb);
11925 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11928 if (tag_len < 18) {
11929 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
11930 "Wakeup Schedule content length must be at least "
11932 return tvb_captured_length(tvb);
11935 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_offset, tvb,
11936 offset, 4, ENC_LITTLE_ENDIAN);
11939 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_interval, tvb,
11940 offset, 4, ENC_LITTLE_ENDIAN);
11943 proto_tree_add_item(tree,
11944 hf_ieee80211_tag_wakeup_schedule_awake_window_slots, tvb,
11945 offset, 4, ENC_LITTLE_ENDIAN);
11948 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
11949 tvb, offset, 4, ENC_LITTLE_ENDIAN);
11952 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_idle_count, tvb,
11953 offset, 2, ENC_LITTLE_ENDIAN);
11954 return tvb_captured_length(tvb);
11958 dissect_channel_switch_timing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11960 int tag_len = tvb_reported_length(tvb);
11961 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11965 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
11966 "Channel Switch Timing content length must be at "
11968 return tvb_captured_length(tvb);
11971 proto_tree_add_item(tree, hf_ieee80211_tag_channel_switch_timing_switch_time,
11972 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11975 proto_tree_add_item(tree,
11976 hf_ieee80211_tag_channel_switch_timing_switch_timeout,
11977 tvb, offset, 2, ENC_LITTLE_ENDIAN);
11978 return tvb_captured_length(tvb);
11982 dissect_pti_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11984 int tag_len = tvb_reported_length(tvb);
11985 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
11989 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "PTI Control content length must be at least 3 bytes");
11990 return tvb_captured_length(tvb);
11993 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_tid, tvb,
11994 offset, 1, ENC_LITTLE_ENDIAN);
11997 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_sequence_control, tvb,
11998 offset, 2, ENC_LITTLE_ENDIAN);
11999 return tvb_captured_length(tvb);
12003 dissect_pu_buffer_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12005 int tag_len = tvb_reported_length(tvb);
12006 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12008 static const int *ieee80211_pu_buffer_status[] = {
12009 &hf_ieee80211_tag_pu_buffer_status_ac_bk,
12010 &hf_ieee80211_tag_pu_buffer_status_ac_be,
12011 &hf_ieee80211_tag_pu_buffer_status_ac_vi,
12012 &hf_ieee80211_tag_pu_buffer_status_ac_vo,
12017 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "PU Buffer Status content length must be at least 1 byte");
12018 return tvb_captured_length(tvb);
12021 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_pu_buffer_status, ENC_LITTLE_ENDIAN);
12022 return tvb_captured_length(tvb);
12026 dissect_timeout_interval(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
12028 int tag_len = tvb_reported_length(tvb);
12032 pi = proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_type, tvb,
12033 offset, 1, ENC_LITTLE_ENDIAN);
12035 expert_add_info_format(pinfo, pi, &ei_ieee80211_tag_length,
12036 "Timeout Interval content length must be at least "
12041 proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_value, tvb,
12042 offset + 1, 4, ENC_LITTLE_ENDIAN);
12043 return tvb_captured_length(tvb);
12047 dissect_ric_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12049 int tag_len = tvb_reported_length(tvb);
12050 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12052 proto_tree *sub_tree;
12053 guint8 desc_cnt = 0;
12056 const guint8 ids[] = { TAG_RIC_DESCRIPTOR };
12058 if (tag_len != 4) {
12059 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
12060 "RIC Data Length must be 4 bytes");
12064 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_id, tvb,
12065 offset, 1, ENC_LITTLE_ENDIAN);
12068 desc_cnt = tvb_get_guint8(tvb, offset);
12069 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_desc_cnt, tvb,
12070 offset, 1, ENC_LITTLE_ENDIAN);
12073 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_status_code, tvb,
12074 offset, 2, ENC_LITTLE_ENDIAN);
12077 /* Our Design is such that all the Resource request IE's part of the RIC
12078 * must be in the sub tree of RIC for better readability
12079 * Even omnipeek does the same way.
12081 sub_tree = proto_item_add_subtree(tree, ett_tag_ric_data_desc_ie);
12083 proto_item_append_text(field_data->item_tag, " :Resource Descriptor List");
12084 if (desc_cnt == 0) {
12085 proto_item_append_text(field_data->item_tag, " :0 (Weird?)");
12088 while ( desc_cnt != 0 ) {
12090 next_ie = tvb_get_guint8(tvb, offset);
12091 proto_item_append_text(field_data->item_tag, " :(%d:%s)", desc_cnt, val_to_str_ext(next_ie, &tag_num_vals_ext, "Reserved (%d)"));
12092 /* Recursive call to avoid duplication of code*/
12093 offset_r = add_tagged_field(pinfo, sub_tree, tvb, offset, field_data->ftype, ids, G_N_ELEMENTS(ids), NULL);
12094 if (offset_r == 0 )/* should never happen, returns a min of 2*/
12096 /* This will ensure that the IE after RIC is processed
12097 * only once. This gives us a good looking RIC IE :-)
12099 tag_len += offset_r;
12103 return tvb_captured_length(tvb);
12106 /* Overlapping BSS Scan Parameters (74) */
12108 dissect_overlap_bss_scan_par(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12111 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12112 int tag_len = tvb_reported_length(tvb);
12114 if (tag_len != 14) {
12115 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
12116 "OBSS Length must be 14 bytes");
12120 proto_tree_add_item(tree, hf_ieee80211_tag_obss_spd, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12123 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sad, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12126 proto_tree_add_item(tree, hf_ieee80211_tag_obss_cwtsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12129 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sptpc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12132 proto_tree_add_item(tree, hf_ieee80211_tag_obss_satpc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12135 proto_tree_add_item(tree, hf_ieee80211_tag_obss_wctdf, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12138 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sat, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12144 /* RIC Descriptor (75) */
12146 dissect_ric_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12149 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12150 int tag_len = tvb_reported_length(tvb);
12151 guint8 rsrc_type = 0;
12154 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
12155 "RIC Data Length must be at least 1 byte");
12159 rsrc_type = tvb_get_guint8(tvb, offset);
12160 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_rsrc_type, tvb,
12161 offset, 1, ENC_LITTLE_ENDIAN);
12164 if (rsrc_type == 1) {
12165 /* Block ACK params
12166 * 802.11-2012: 8.4.2.53 RIC Descriptor element
12167 * Block Ack parameter set as defined in 8.4.1.14,
12168 * Block Ack timeout value as defined in 8.4.1.15, and
12169 * Block Ack starting sequence control as defined in 8.3.1.8
12171 /* TODO: Still figuring out how to parse these ones,
12172 * need a sample capture with at least HEX Dump
12174 proto_item_append_text(field_data->item_tag, " : Block ACK Params");
12175 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_var_params, tvb,
12176 offset, tag_len-1, ENC_NA);
12177 offset += tag_len -1;
12179 /* 0, 2-255 are reserved*/
12180 proto_item_append_text(field_data->item_tag, " :Reserved (type != 1)");
12187 dissect_ext_bss_load(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12190 proto_tree_add_item(tree, hf_ieee80211_ext_bss_mu_mimo_capable_sta_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12192 proto_tree_add_item(tree, hf_ieee80211_ext_bss_ss_underutilization, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12194 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_20mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12196 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_40mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12198 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_80mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12205 dissect_wide_bw_channel_switch(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12209 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12211 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment0, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12213 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12220 dissect_channel_switch_wrapper(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12222 int tag_len = tvb_reported_length(tvb);
12225 const guint8 ids[] = { TAG_COUNTRY_INFO, TAG_WIDE_BW_CHANNEL_SWITCH,
12226 TAG_VHT_TX_PWR_ENVELOPE };
12229 Decode three subelement in IE-196(Channel Switch Wrapper element):
12230 (1) New Country subelement
12231 (2) Wide Bandwidth Channel Switch subelement
12232 (3) New VHT Transmit Power Envelope subelement
12234 while (tag_len > 0){
12235 tmp_sublen = tvb_get_guint8(tvb, offset + 1);
12236 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids), NULL) == 0){
12239 tag_len -= (tmp_sublen + 2);
12240 offset += (tmp_sublen + 2);
12246 dissect_operating_mode_notification(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12249 static const int *ieee80211_operat_mode_field[] = {
12250 &hf_ieee80211_operat_mode_field_channel_width,
12251 &hf_ieee80211_operat_mode_field_reserved,
12252 &hf_ieee80211_operat_mode_field_rxnss,
12253 &hf_ieee80211_operat_mode_field_rxnsstype,
12257 /* Operating Mode field */
12258 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_operat_notification_mode,
12259 ett_mcsbit_tree, ieee80211_operat_mode_field,
12260 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
12266 dissect_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset, gboolean basic, gboolean vendorspecific)
12269 proto_tree *mcs_tree, *bit_tree;
12270 guint8 rx_nss, tx_nss; /* 0-4 for HT and 0-8 for VHT*/
12271 guint32 value_mcs_0_31, value_mcs_32_52, value_mcs_53_76;
12272 guint16 tx_mcs_set;
12273 rx_nss = tx_nss = 8;
12274 /* 16 byte Supported MCS set */
12275 if (vendorspecific)
12277 ti = proto_tree_add_string(tree, hf_ieee80211_mcsset_vs, tvb, offset, 16,
12278 basic ? "Basic MCS Set" : "MCS Set");
12281 ti = proto_tree_add_string(tree, hf_ieee80211_mcsset, tvb, offset, 16,
12282 basic ? "Basic MCS Set" : "MCS Set");
12284 mcs_tree = proto_item_add_subtree(ti, ett_mcsset_tree);
12286 /* Rx MCS Bitmask */
12287 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_rx_bitmask, tvb, offset, 10, ENC_NA);
12288 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
12291 value_mcs_0_31 = tvb_get_letohl(tvb, offset);
12293 /* Handle all zeroes/ff's case..*/
12294 if (value_mcs_0_31 != 0x0)
12296 if (!(value_mcs_0_31 & (0xffffff00))) {
12298 * At least one MCS from 0-7 is supported, but no MCS from 8-31 are
12299 * supported, so only 1 spatial stream is supported.
12302 } else if (!(value_mcs_0_31 & (0xffff0000))) {
12304 * At least one MCS from 8-15 is supported, but no MCS from 16-31 are
12305 * supported, so only 2 spatial streams are supported.
12308 } else if (!(value_mcs_0_31 & (0xff000000))) {
12310 * At least one MCS from 16-23 is supported, but no MCS from 24-31 are
12311 * supported, so only 3 spatial streams are supported.
12316 * At least one MCS from 24-31 is supported, so 4 spatial streams
12323 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_0to7, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12324 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_8to15, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12325 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_16to23, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12326 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_24to31, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12329 /* Should be we check UEQM Supported?*/
12331 value_mcs_32_52 = tvb_get_letohl(tvb, offset);
12332 if (!(value_mcs_32_52 & (0x1ffffe))) {
12334 * MCS 33-52 aren't supported, so the number of spatial streams we get
12335 * from whichever MCSes from 0-31 that we support is the total number
12336 * of spatial streams we support.
12339 } else if (!(value_mcs_32_52 & (0x1fff80))) {
12341 * At least one MCS from 33-38 is supported, but no MCS from 39-52 is
12342 * supported, so we have at least 2 spatial streams, but none of the
12343 * MCSs in that range give us any more.
12345 rx_nss = MAX(1, rx_nss);
12348 * At least one MCS from 39-52 is supported, so we have at least 3
12351 rx_nss = MAX(2, rx_nss);
12354 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12355 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_33to38, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12356 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_39to52, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12360 value_mcs_53_76 = tvb_get_letohl(tvb, offset);
12361 if ((value_mcs_53_76 & (0x1fffffe0))) {
12363 * At least one MCS from 53-76 is supported, so we have at least 4
12366 rx_nss = MAX(3, rx_nss);
12369 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_53to76, tvb, offset, 4, ENC_LITTLE_ENDIAN);
12372 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_highest_data_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12375 /* Follow table 8-126 from 802.11-2012 */
12376 tx_mcs_set = tvb_get_letohs(tvb, offset);
12378 if (!(tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
12380 /* TX MCS Set is not defined
12381 * so there is no interpretation for Max Tx Spatial Streams
12383 tx_nss = 4; /* Not Defined*/
12386 if ((tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
12388 /* TX MCS Set is defined to be equal to Rx MCS Set
12389 * So, get the Max Spatial Streams from Rx
12394 proto_item_append_text(ti, ": %s", val_to_str(rx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
12396 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_mcs_set_defined, tvb, offset, 1,
12397 ENC_LITTLE_ENDIAN);
12398 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal, tvb, offset, 1,
12399 ENC_LITTLE_ENDIAN);
12400 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_max_spatial_streams, tvb, offset, 1,
12401 ENC_LITTLE_ENDIAN);
12402 proto_item_append_text(ti, ", %s", val_to_str(tx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
12403 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_unequal_modulation, tvb, offset, 1,
12404 ENC_LITTLE_ENDIAN);
12411 /* 802.11n D1.10 - HT Information IE */
12413 dissect_ht_info_ie_1_1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12415 int tag_len = tvb_reported_length(tvb);
12416 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12418 static const int *ieee80211_ht_info1_field[] = {
12419 &hf_ieee80211_ht_info_secondary_channel_offset,
12420 &hf_ieee80211_ht_info_channel_width,
12421 &hf_ieee80211_ht_info_rifs_mode,
12422 &hf_ieee80211_ht_info_psmp_stas_only,
12423 &hf_ieee80211_ht_info_service_interval_granularity,
12427 static const int *ieee80211_ht_info2_field[] = {
12428 &hf_ieee80211_ht_info_operating_mode,
12429 &hf_ieee80211_ht_info_non_greenfield_sta_present,
12430 &hf_ieee80211_ht_info_transmit_burst_limit,
12431 &hf_ieee80211_ht_info_obss_non_ht_stas_present,
12432 &hf_ieee80211_ht_info_reserved_1,
12436 static const int *ieee80211_ht_info3_field[] = {
12437 &hf_ieee80211_ht_info_reserved_2,
12438 &hf_ieee80211_ht_info_dual_beacon,
12439 &hf_ieee80211_ht_info_dual_cts_protection,
12440 &hf_ieee80211_ht_info_secondary_beacon,
12441 &hf_ieee80211_ht_info_lsig_txop_protection_full_support,
12442 &hf_ieee80211_ht_info_pco_active,
12443 &hf_ieee80211_ht_info_pco_phase,
12444 &hf_ieee80211_ht_info_reserved_3,
12448 if (tag_len < 22) {
12449 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
12450 "HT Information IE content length %u wrong, must be at least 22 bytes", tag_len);
12454 proto_tree_add_item(tree, hf_ieee80211_ht_info_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12457 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_info_delimiter1,
12458 ett_ht_info_delimiter1_tree, ieee80211_ht_info1_field,
12459 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
12463 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_info_delimiter2,
12464 ett_ht_info_delimiter2_tree, ieee80211_ht_info2_field,
12465 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
12468 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_info_delimiter3,
12469 ett_ht_info_delimiter3_tree, ieee80211_ht_info3_field,
12470 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
12473 offset = dissect_mcs_set(tree, tvb, offset, TRUE, FALSE);
12480 dissect_wapi_param_set(tvbuff_t *tvb, packet_info *pinfo,
12481 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len,
12482 proto_item *ti, int ftype)
12484 /* Parse the WAPI Parameter Set IE Here*/
12486 proto_tree *subtree;
12487 guint16 loop_cnt, version, akm_cnt = 1, ucast_cnt = 1, bkid_cnt = 1;
12488 guint8 akm_suite_type = 0, ucast_cipher_type = 0, mcast_cipher_type = 0;
12489 static const int *ieee80211_tag_wapi_param_set[] = {
12490 &hf_ieee80211_tag_wapi_param_set_capab_preauth,
12491 &hf_ieee80211_tag_wapi_param_set_capab_rsvd,
12495 version = tvb_get_letohs(tvb, offset);
12496 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12499 /*MIN: 2 + (2+4)+ (2+4) + 4 + 2 + 0 (BKID CNT and LIST) =20*/
12500 if (tag_len < 20) {
12501 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12502 "tag_len is %d, it's neither WAPI not BSS-AC-Access-Delay", tag_len);
12506 if (version != 1) {
12507 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
12508 "Version of WAPI protocol is %d, must be = 1", version);
12512 /* AKM Suites: list can't be 0*/
12513 akm_cnt = tvb_get_letohs(tvb, offset);
12514 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_akm_suite_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12516 if (akm_cnt != 0) {
12517 proto_item_append_text(ti, " : AKM Suite List:");
12518 for (loop_cnt = 0; loop_cnt < akm_cnt; loop_cnt++) {
12519 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_akm_tree);
12520 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_oui, tvb, offset, 3, ENC_NA);
12522 akm_suite_type = tvb_get_guint8(tvb, offset);
12523 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12525 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(akm_suite_type,
12526 ieee80211_wapi_suite_type_short, "Reserved: %d"));
12528 proto_item_append_text(ti, " /");
12530 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of AKM suites is 0, must be min 1");
12534 /* Unicast Cipher Suites: list can't be 0*/
12535 ucast_cnt = tvb_get_letohs(tvb, offset);
12536 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
12537 tvb, offset, 2, ENC_LITTLE_ENDIAN);
12539 if (ucast_cnt != 0) {
12540 proto_item_append_text(ti, " Unicast Cipher List:");
12541 for (loop_cnt = 0; loop_cnt < ucast_cnt; loop_cnt++) {
12542 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_ucast_tree);
12543 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui, tvb, offset, 3, ENC_NA);
12545 ucast_cipher_type = tvb_get_guint8(tvb, offset);
12546 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12548 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(ucast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
12550 proto_item_append_text(ti, " /");
12552 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of Unicast Cipher suites is 0, must be min 1");
12557 /* Multicast Cipher Suites*/
12558 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui, tvb, offset, 3, ENC_NA);
12560 mcast_cipher_type = tvb_get_guint8(tvb, offset);
12561 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12563 proto_item_append_text(ti, " Multicast Cipher: %s", val_to_str(mcast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
12565 /* WAPI capability */
12566 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_wapi_param_set_capab,
12567 ett_tag_wapi_param_set_preauth_tree, ieee80211_tag_wapi_param_set,
12568 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
12571 /* BKID List: The list can be 0
12572 * Applicable only for assoc/re-assoc
12574 if (ftype == MGT_ASSOC_REQ || ftype == MGT_REASSOC_REQ ) {
12575 bkid_cnt = tvb_get_letohs(tvb, offset);
12576 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12578 if (bkid_cnt != 0) {
12579 for (loop_cnt = 0; loop_cnt < bkid_cnt; loop_cnt++) {
12580 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_list, tvb, offset, 16, ENC_NA);
12589 dissect_bss_max_idle_period(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12592 proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_period,
12593 tvb, offset, 2, ENC_LITTLE_ENDIAN);
12595 proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_options_protected,
12596 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12601 enum tfs_request_subelem_id {
12602 TFS_REQ_SUBELEM_TFS = 1,
12603 TFS_REQ_SUBELEM_VENDOR_SPECIFIC = 221
12606 static const value_string tfs_request_subelem_ids[] = {
12607 { TFS_REQ_SUBELEM_TFS, "TFS subelement" },
12608 { TFS_REQ_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
12613 dissect_tfs_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12615 int tag_len = tvb_reported_length(tvb);
12616 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12618 const guint8 ids[] = {
12619 1, /* TFS Subelement */
12620 TAG_VENDOR_SPECIFIC_IE
12623 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_id,
12624 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12626 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_delete_after_match,
12627 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12628 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_notify,
12629 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12631 if (offset + 1 >= tag_len) {
12632 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
12633 "No TFS Request subelements in TFS Request");
12634 return tvb_captured_length(tvb);
12637 while (offset + 1 < tag_len) {
12639 int s_offset, s_end;
12641 id = tvb_get_guint8(tvb, offset);
12642 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_id,
12643 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12645 len = tvb_get_guint8(tvb, offset);
12646 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_len,
12647 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12649 if (offset + len > tag_len) {
12650 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
12651 "Not enough data for TFS Request subelement");
12652 return tvb_captured_length(tvb);
12655 case TFS_REQ_SUBELEM_TFS:
12657 s_end = offset + len;
12658 while (s_offset < s_end) {
12659 /* TODO 1 is interpreted as TAG_SUPP_RATES, fix this! */
12660 int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, field_data->ftype, ids, G_N_ELEMENTS(ids), NULL);
12667 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem,
12668 tvb, offset, len, ENC_NA);
12674 if (offset < tag_len) {
12675 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
12676 tvb, offset, tag_len - offset, "Extra data after TFS Subelements");
12679 return tvb_captured_length(tvb);
12682 enum tfs_response_subelem_id {
12683 TFS_RESP_SUBELEM_TFS_STATUS = 1,
12684 TFS_RESP_SUBELEM_TFS = 2,
12685 TFS_RESP_SUBELEM_VENDOR_SPECIFIC = 221
12688 static const value_string tfs_response_subelem_ids[] = {
12689 { TFS_RESP_SUBELEM_TFS_STATUS, "TFS Status subelement" },
12690 { TFS_RESP_SUBELEM_TFS, "TFS subelement" },
12691 { TFS_RESP_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
12696 dissect_tfs_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12698 int tag_len = tvb_reported_length(tvb);
12699 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12701 const guint8 ids[] = {
12702 1, /* TFS Status subelement*/
12703 2, /* TFS subelement */
12704 TAG_VENDOR_SPECIFIC_IE
12707 while (offset + 3 <= tag_len) {
12709 int s_offset, s_end;
12711 id = tvb_get_guint8(tvb, offset);
12712 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_id,
12713 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12715 len = tvb_get_guint8(tvb, offset);
12716 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_len,
12717 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12719 if (offset + len > tag_len) {
12720 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
12721 "Not enough data for TFS Request subelement");
12722 return tvb_captured_length(tvb);
12725 case TFS_RESP_SUBELEM_TFS_STATUS:
12726 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_status,
12727 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12728 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_id,
12729 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
12731 case TFS_RESP_SUBELEM_TFS:
12733 s_end = offset + len;
12734 while (s_offset < s_end) {
12735 /* TODO Element IDs 1 and 2 are misinterpreted! */
12736 int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, field_data->ftype, ids, G_N_ELEMENTS(ids), NULL);
12743 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem,
12744 tvb, offset, len, ENC_NA);
12751 if (offset < tag_len) {
12752 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
12753 tvb, offset, tag_len - offset, "Extra data after TFS Subelements");
12756 return tvb_captured_length(tvb);
12759 static const value_string wnm_sleep_mode_action_types[] = {
12760 { 0, "Enter WNM-Sleep Mode" },
12761 { 1, "Exit WNM-Sleep Mode" },
12765 static const value_string wnm_sleep_mode_response_status_vals[] = {
12766 { 0, "Enter/Exit WNM-Sleep Mode Accept" },
12767 { 1, "Exit WNM-Sleep Mode Accept, GTK/IGTK update required" },
12768 { 2, "Denied. The AP is unable to perform the requested action." },
12769 { 3, "Denied temporarily. The AP is unable to perform the requested action "
12770 "at the current time. The request can be submitted again at a later time."
12772 { 4, "Denied. Due to the pending key expiration." },
12773 { 5, "Denied. The requested action was not granted due to other WNM services "
12774 "in use by the requesting STA." },
12779 dissect_wnm_sleep_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12782 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_action_type,
12783 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12785 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_response_status,
12786 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12788 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_interval,
12789 tvb, offset, 2, ENC_LITTLE_ENDIAN);
12794 static const value_string time_adv_timing_capab_vals[] = {
12795 { 0, "No standardized external time source" },
12796 { 1, "Timestamp offset based on UTC" },
12797 { 2, "UTC time at which the TSF timer is 0" },
12802 dissect_time_adv(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12807 proto_tree *subtree;
12808 struct tm tm, *now;
12811 capab = tvb_get_guint8(tvb, offset);
12812 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_timing_capab,
12813 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12818 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
12819 tvb, offset, 10, ENC_NA);
12822 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
12823 tvb, offset, 5, ENC_NA);
12827 item = proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
12828 tvb, offset, 10, ENC_NA);
12829 subtree = proto_item_add_subtree(item, ett_tag_time_adv_tree);
12830 memset(&tm, 0, sizeof(tm));
12831 tm.tm_year = tvb_get_letohs(tvb, offset) - 1900;
12832 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_year,
12833 tvb, offset, 2, ENC_LITTLE_ENDIAN);
12835 tm.tm_mon = tvb_get_guint8(tvb, offset) - 1;
12836 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_month,
12837 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12839 tm.tm_mday = tvb_get_guint8(tvb, offset);
12840 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_day,
12841 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12843 tm.tm_hour = tvb_get_guint8(tvb, offset);
12844 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_hours,
12845 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12847 tm.tm_min = tvb_get_guint8(tvb, offset);
12848 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_minutes,
12849 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12851 tm.tm_sec = tvb_get_guint8(tvb, offset);
12852 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_seconds,
12853 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12855 proto_tree_add_item(subtree,
12856 hf_ieee80211_tag_time_adv_time_value_milliseconds,
12857 tvb, offset, 2, ENC_LITTLE_ENDIAN);
12859 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
12860 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12866 t += (time_t)(last_timestamp / 1000000);
12867 now = localtime(&t);
12869 proto_item_append_text(item,
12870 ": current time=%u-%02u-%02u %02u:%02u:%02u",
12871 now->tm_year + 1900, now->tm_mon + 1,
12872 now->tm_mday, now->tm_hour, now->tm_min,
12876 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
12877 tvb, offset, 5, ENC_NA);
12880 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
12881 tvb, offset, 1, ENC_LITTLE_ENDIAN);
12890 dissect_time_zone(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12892 int tag_len = tvb_reported_length(tvb);
12895 proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
12897 return tvb_captured_length(tvb);
12901 dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12903 int tag_len = tvb_reported_length(tvb);
12904 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12908 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
12909 "AP Channel Report length %u wrong, must be > 1", tag_len);
12910 return tvb_captured_length(tvb);
12913 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_operating_class, tvb,
12914 offset, 1, ENC_LITTLE_ENDIAN);
12915 proto_item_append_text(field_data->item_tag, ": Operating Class %u, Channel List :", tvb_get_guint8(tvb, offset));
12918 while (offset < tag_len)
12920 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA);
12921 proto_item_append_text(field_data->item_tag, " %u,", tvb_get_guint8(tvb, offset));
12924 return tvb_captured_length(tvb);
12928 dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12930 int tag_len = tvb_reported_length(tvb);
12931 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12933 if (tag_len != 1) {
12934 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
12935 "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
12939 proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
12940 offset, 1, ENC_LITTLE_ENDIAN);
12941 return tvb_captured_length(tvb);
12944 /* BSS Average Access Delay element (63) */
12946 dissect_bss_avg_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12948 int tag_len = tvb_reported_length(tvb);
12949 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12951 if (tag_len != 1) {
12952 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
12953 "BSS Average Access Delay length %u wrong, must be = 1", tag_len);
12957 proto_tree_add_item(tree, hf_ieee80211_tag_bss_ap_avg_access_delay, tvb,
12958 offset, 1, ENC_LITTLE_ENDIAN);
12959 return tvb_captured_length(tvb);
12963 dissect_antenna_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12965 int tag_len = tvb_reported_length(tvb);
12966 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12969 if (tag_len != 1) {
12970 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
12971 "Antenna length %u wrong, must be = 1", tag_len);
12975 proto_tree_add_item(tree, hf_ieee80211_tag_antenna_id, tvb,
12976 offset, 1, ENC_LITTLE_ENDIAN);
12978 return tvb_captured_length(tvb);
12982 dissect_rsni_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12984 int tag_len = tvb_reported_length(tvb);
12985 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
12988 if (tag_len != 1) {
12989 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
12990 "RSNI length %u wrong, must be = 1", tag_len);
12994 proto_tree_add_item(tree, hf_ieee80211_tag_rsni, tvb,
12995 offset, 1, ENC_LITTLE_ENDIAN);
12997 return tvb_captured_length(tvb);
13001 dissect_bss_available_admission_capacity_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13003 int tag_len = tvb_reported_length(tvb);
13004 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
13007 static const int *ieee80211_tag_bss_avb_adm_cap_bitmask[] = {
13008 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
13009 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
13010 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
13011 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
13012 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
13013 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
13014 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
13015 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
13016 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
13017 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
13018 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
13019 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
13020 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
13025 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
13026 "BSS Available Admission Capacity length %u wrong, must > = 2", tag_len);
13030 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
13031 ett_tag_bss_bitmask_tree, ieee80211_tag_bss_avb_adm_cap_bitmask,
13032 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13033 bitmask = tvb_get_letohs(tvb, offset);
13036 if(bitmask & BSS_BITMASK_UP0)
13038 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13041 if(bitmask & BSS_BITMASK_UP1)
13043 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13046 if(bitmask & BSS_BITMASK_UP2)
13048 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13051 if(bitmask & BSS_BITMASK_UP3)
13053 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13056 if(bitmask & BSS_BITMASK_UP4)
13058 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13061 if(bitmask & BSS_BITMASK_UP5)
13063 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13066 if(bitmask & BSS_BITMASK_UP6)
13068 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13071 if(bitmask & BSS_BITMASK_UP7)
13073 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13076 if(bitmask & BSS_BITMASK_AC0)
13078 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13081 if(bitmask & BSS_BITMASK_AC1)
13083 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13086 if(bitmask & BSS_BITMASK_AC2)
13088 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13091 if(bitmask & BSS_BITMASK_AC3)
13093 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13100 dissect_bss_ac_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
13101 proto_tree *tree, int offset, guint32 tag_len, proto_item *ti_len)
13104 if (tag_len != 4) {
13105 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13106 "BSS AC Access Delay length %u wrong, must = 4", tag_len);
13110 /* TODO: Display the scaled representation of the average
13111 medium access delay (a big (precalculed) value_string ?)
13112 See 8.4.2.46 BSS AC Access Delay element ... */
13114 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_be, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13116 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_bk, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13118 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13120 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vo, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13126 /* RM Enabled Capabilities (70) */
13128 dissect_rm_enabled_capabilities_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13130 int tag_len = tvb_reported_length(tvb);
13131 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
13133 proto_item *ti_ex_cap;
13134 static const int *ieee80211_tag_rm_enabled_capabilities_octet1[] = {
13135 &hf_ieee80211_tag_rm_enabled_capabilities_b0,
13136 &hf_ieee80211_tag_rm_enabled_capabilities_b1,
13137 &hf_ieee80211_tag_rm_enabled_capabilities_b2,
13138 &hf_ieee80211_tag_rm_enabled_capabilities_b3,
13139 &hf_ieee80211_tag_rm_enabled_capabilities_b4,
13140 &hf_ieee80211_tag_rm_enabled_capabilities_b5,
13141 &hf_ieee80211_tag_rm_enabled_capabilities_b6,
13142 &hf_ieee80211_tag_rm_enabled_capabilities_b7,
13146 static const int *ieee80211_tag_rm_enabled_capabilities_octet2[] = {
13147 &hf_ieee80211_tag_rm_enabled_capabilities_b8,
13148 &hf_ieee80211_tag_rm_enabled_capabilities_b9,
13149 &hf_ieee80211_tag_rm_enabled_capabilities_b10,
13150 &hf_ieee80211_tag_rm_enabled_capabilities_b11,
13151 &hf_ieee80211_tag_rm_enabled_capabilities_b12,
13152 &hf_ieee80211_tag_rm_enabled_capabilities_b13,
13153 &hf_ieee80211_tag_rm_enabled_capabilities_b14,
13154 &hf_ieee80211_tag_rm_enabled_capabilities_b15,
13158 static const int *ieee80211_tag_rm_enabled_capabilities_octet3[] = {
13159 &hf_ieee80211_tag_rm_enabled_capabilities_b16,
13160 &hf_ieee80211_tag_rm_enabled_capabilities_b17,
13161 &hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
13162 &hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
13166 static const int *ieee80211_tag_rm_enabled_capabilities_octet4[] = {
13167 &hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
13168 &hf_ieee80211_tag_rm_enabled_capabilities_b27,
13169 &hf_ieee80211_tag_rm_enabled_capabilities_b28,
13170 &hf_ieee80211_tag_rm_enabled_capabilities_b29,
13171 &hf_ieee80211_tag_rm_enabled_capabilities_b30,
13172 &hf_ieee80211_tag_rm_enabled_capabilities_b31,
13176 static const int *ieee80211_tag_rm_enabled_capabilities_octet5[] = {
13177 &hf_ieee80211_tag_rm_enabled_capabilities_b32,
13178 &hf_ieee80211_tag_rm_enabled_capabilities_b33,
13179 &hf_ieee80211_tag_rm_enabled_capabilities_o5,
13185 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "RM Enabled Capabilities length %u wrong, must = 5", tag_len);
13188 proto_item_append_text(field_data->item_tag, " (%d octets)", tag_len);
13190 /* RM Enabled Capability octet 1 */
13191 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
13192 ett_tag_rm_cap1, ieee80211_tag_rm_enabled_capabilities_octet1,
13193 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13194 proto_item_append_text(ti_ex_cap, " (octet 1)");
13197 /* RM Enabled Capability octet 2 */
13198 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
13199 ett_tag_rm_cap2, ieee80211_tag_rm_enabled_capabilities_octet2,
13200 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13201 proto_item_append_text(ti_ex_cap, " (octet 2)");
13204 /* RM Enabled Capability octet 3 */
13205 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
13206 ett_tag_rm_cap3, ieee80211_tag_rm_enabled_capabilities_octet3,
13207 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13208 proto_item_append_text(ti_ex_cap, " (octet 3)");
13211 /* RM Enabled Capability octet 4 */
13212 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
13213 ett_tag_rm_cap4, ieee80211_tag_rm_enabled_capabilities_octet4,
13214 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13215 proto_item_append_text(ti_ex_cap, " (octet 4)");
13218 /* RM Enabled Capability octet 5 */
13219 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
13220 ett_tag_rm_cap5, ieee80211_tag_rm_enabled_capabilities_octet5,
13221 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13222 proto_item_append_text(ti_ex_cap, " (octet 5)");
13228 /* 20/40 BSS Coexistence (72) */
13230 dissect_20_40_bss_coexistence(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13232 int tag_len = tvb_reported_length(tvb);
13233 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
13235 static const int *ieee80211_20_40_bss_coexistence_fields[] = {
13236 &hf_ieee80211_tag_20_40_bc_information_request,
13237 &hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
13238 &hf_ieee80211_tag_20_40_bc_20_mhz_bss_witdh_request,
13239 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
13240 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
13241 &hf_ieee80211_tag_20_40_bc_reserved,
13247 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "20/40 BSS Coexistence length %u wrong, must = 1", tag_len);
13251 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_20_40_bc,
13252 ett_tag_20_40_bc, ieee80211_20_40_bss_coexistence_fields,
13253 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13261 dissect_ht_capability_ie_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
13262 guint32 tag_len, proto_item *ti_len, gboolean vendorspecific)
13264 proto_item *cap_item, *ti;
13265 proto_tree *cap_tree;
13266 static const int *ieee80211_ht[] = {
13267 &hf_ieee80211_ht_ldpc_coding,
13268 &hf_ieee80211_ht_chan_width,
13269 &hf_ieee80211_ht_sm_pwsave,
13270 &hf_ieee80211_ht_green,
13271 &hf_ieee80211_ht_short20,
13272 &hf_ieee80211_ht_short40,
13273 &hf_ieee80211_ht_tx_stbc,
13274 &hf_ieee80211_ht_rx_stbc,
13275 &hf_ieee80211_ht_delayed_block_ack,
13276 &hf_ieee80211_ht_max_amsdu,
13277 &hf_ieee80211_ht_dss_cck_40,
13278 &hf_ieee80211_ht_psmp,
13279 &hf_ieee80211_ht_40_mhz_intolerant,
13280 &hf_ieee80211_ht_l_sig,
13284 static const int *ieee80211_htex[] = {
13285 &hf_ieee80211_htex_pco,
13286 &hf_ieee80211_htex_transtime,
13287 &hf_ieee80211_htex_mcs,
13288 &hf_ieee80211_htex_htc_support,
13289 &hf_ieee80211_htex_rd_responder,
13293 static const int *ieee80211_txbf[] = {
13294 &hf_ieee80211_txbf_cap,
13295 &hf_ieee80211_txbf_rcv_ssc,
13296 &hf_ieee80211_txbf_tx_ssc,
13297 &hf_ieee80211_txbf_rcv_ndp,
13298 &hf_ieee80211_txbf_tx_ndp,
13299 &hf_ieee80211_txbf_impl_txbf,
13300 &hf_ieee80211_txbf_calib,
13301 &hf_ieee80211_txbf_expl_csi,
13302 &hf_ieee80211_txbf_expl_uncomp_fm,
13303 &hf_ieee80211_txbf_expl_comp_fm,
13304 &hf_ieee80211_txbf_expl_bf_csi,
13305 &hf_ieee80211_txbf_expl_uncomp_fm_feed,
13306 &hf_ieee80211_txbf_expl_comp_fm_feed,
13307 &hf_ieee80211_txbf_min_group,
13308 &hf_ieee80211_txbf_csi_num_bf_ant,
13309 &hf_ieee80211_txbf_uncomp_sm_bf_ant,
13310 &hf_ieee80211_txbf_comp_sm_bf_ant,
13311 &hf_ieee80211_txbf_csi_max_rows_bf,
13312 &hf_ieee80211_txbf_chan_est,
13313 &hf_ieee80211_txbf_resrv,
13317 static const int *ieee80211_antsel[] = {
13318 &hf_ieee80211_antsel_b0,
13319 &hf_ieee80211_antsel_b1,
13320 &hf_ieee80211_antsel_b2,
13321 &hf_ieee80211_antsel_b3,
13322 &hf_ieee80211_antsel_b4,
13323 &hf_ieee80211_antsel_b5,
13324 &hf_ieee80211_antsel_b6,
13325 &hf_ieee80211_antsel_b7,
13329 if (tag_len != 26) {
13330 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13331 "HT Capabilities IE length %u wrong, must be = 26", tag_len);
13332 return (offset > 0) ? offset : 1;
13335 if (wlan_ignore_draft_ht && vendorspecific)
13336 return (offset > 0) ? offset : 1;
13338 /* 2 byte HT Capabilities Info*/
13339 if (vendorspecific)
13341 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_vs_cap,
13342 ett_ht_cap_tree, ieee80211_ht,
13343 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13347 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_cap,
13348 ett_ht_cap_tree, ieee80211_ht,
13349 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13353 /* 1 byte A-MPDU Parameters */
13354 if (vendorspecific)
13356 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13359 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13361 cap_tree = proto_item_add_subtree(cap_item, ett_ampduparam_tree);
13362 ti = proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13363 proto_item_append_text(ti, " (%04.0f[Bytes])", pow(2, 13+(tvb_get_guint8(tvb, offset) & 0x3))-1);
13364 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu_start_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13365 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13368 /* 16 byte MCS set */
13369 offset = dissect_mcs_set(tree, tvb, offset, FALSE, vendorspecific);
13372 /* 2 byte HT Extended Capabilities */
13373 if (vendorspecific)
13375 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_htex_vs_cap,
13376 ett_htex_cap_tree, ieee80211_htex,
13377 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13379 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_htex_cap,
13380 ett_htex_cap_tree, ieee80211_htex,
13381 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13386 /* 4 byte TxBF capabilities */
13387 if (vendorspecific)
13389 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_txbf_vs,
13390 ett_txbf_tree, ieee80211_txbf,
13391 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13393 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_txbf,
13394 ett_txbf_tree, ieee80211_txbf,
13395 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13399 /* 1 byte Antenna Selection (ASEL) capabilities */
13400 if (vendorspecific)
13402 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_antsel_vs,
13403 ett_antsel_tree, ieee80211_antsel,
13404 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13408 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_antsel,
13409 ett_antsel_tree, ieee80211_antsel,
13410 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13418 dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13420 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
13422 return dissect_ht_capability_ie_common(tvb, pinfo, tree, 0, tvb_reported_length(tvb),
13423 field_data->item_tag_length, FALSE);
13427 dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
13428 guint32 tag_len, proto_item *ti_len)
13430 static const int *ieee80211_hta1[] = {
13431 &hf_ieee80211_hta_ext_chan_offset,
13432 &hf_ieee80211_hta_rec_tx_width,
13433 &hf_ieee80211_hta_rifs_mode,
13434 &hf_ieee80211_hta_controlled_access,
13435 &hf_ieee80211_hta_service_interval,
13439 static const int *ieee80211_hta2[] = {
13440 &hf_ieee80211_hta_operating_mode,
13441 &hf_ieee80211_hta_non_gf_devices,
13445 static const int *ieee80211_hta3[] = {
13446 &hf_ieee80211_hta_basic_stbc_mcs,
13447 &hf_ieee80211_hta_dual_stbc_protection,
13448 &hf_ieee80211_hta_secondary_beacon,
13449 &hf_ieee80211_hta_lsig_txop_protection,
13450 &hf_ieee80211_hta_pco_active,
13451 &hf_ieee80211_hta_pco_phase,
13455 if (tag_len != 22) {
13456 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
13457 "Tag length %u wrong, must be = 22", tag_len);
13461 if (wlan_ignore_draft_ht)
13464 /* 1 HT Control Channel */
13465 proto_tree_add_item(tree, hf_ieee80211_hta_cc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13468 /* 1 byte HT additional capabilities */
13469 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap1,
13470 ett_hta_cap_tree, ieee80211_hta1,
13471 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13474 /* 2 byte HT additional capabilities */
13475 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap2,
13476 ett_hta_cap1_tree, ieee80211_hta2,
13477 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13480 /* 2 byte HT additional capabilities */
13481 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap2,
13482 ett_hta_cap2_tree, ieee80211_hta3,
13483 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
13486 /* 16 byte Supported MCS set */
13487 offset = dissect_mcs_set(tree, tvb, offset, FALSE, TRUE);
13492 /* 802.11n-D1.10 and 802.11n-D2.0, 7.1.3.5a */
13495 * 8.2.4.1.10 "Order field" says:
13497 * The Order field is 1 bit in length. It is used for two purposes:
13499 * -- It is set to 1 in a non-QoS data frame transmitted by a non-QoS
13500 * STA to indicate that the frame contains an MSDU, or fragment
13501 * thereof, that is being transferred using the StrictlyOrdered
13504 * -- It is set to 1 in a QoS data or management frame transmitted
13505 * with a value of HT_GF or HT_MF for the FORMAT parameter of the
13506 * TXVECTOR to indicate that the frame contains an HT Control field.
13508 * 802.11ac changes the second of those clauses to say "HT_GF, HT_MF,
13509 * or VHT", indicates that bit B0 of the field is 0 for HT and 1 for
13510 * VHT (stealing a reserved bit from the Link Adaptation Control field),
13511 * and that everything except for "AC Constraint" and "RDG/More Cowbell^W
13512 * PPDU" is different for the VHT version.
13514 * I read the second clause of 8.2.4.1.10 "Order field", as modified by
13515 * 802.11ac, as meaning that, for QoS data and management frames, the
13516 * Order field will *only* be set to 1 for HT or VHT frames, and therefore
13517 * that we do *not* have to determine, from radio metadata, whether the
13518 * frame was transmitted as an HT or VHT frame.
13520 * (See bug 11351, in which a frame with an HT Control field, with a
13521 * radiotap header, lacks the MCS or VHT fields in the radiotap header,
13522 * so Wireshark has no clue that it's an HT or VHT field, and misdissected
13523 * the packet. Omnipeek, which also appeared to have no clue that it was
13524 * an HT or VHT field - it called it an 802.11b frame - *did* dissect the
13525 * HT Control field.)
13529 dissect_ht_control(proto_tree *tree, tvbuff_t *tvb, int offset)
13532 proto_tree *htc_tree, *lac_subtree, *mfb_subtree;
13535 htc = tvb_get_letohl(tvb, offset);
13537 ti = proto_tree_add_item(tree, hf_ieee80211_htc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13538 htc_tree = proto_item_add_subtree(ti, ett_htc_tree);
13540 /* Check the HT vs. VHT bit. */
13541 proto_tree_add_item(htc_tree, hf_ieee80211_htc_vht, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13542 if (htc & HTC_VHT) {
13544 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mrq, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13545 if (!(htc & HTC_UNSOLICITED_MFB)) {
13546 if (htc & HTC_MRQ) {
13547 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13549 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13551 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfsi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13553 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))) {
13554 proto_tree_add_item(htc_tree, hf_ieee80211_htc_compressed_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13555 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ppdu_stbc_encoded, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13557 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13559 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_l, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13561 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13562 mfb_subtree = proto_item_add_subtree(ti, ett_mfb_subtree);
13563 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13564 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13565 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13566 /* This should be converted to dB by adding 22 */
13567 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_snr, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13568 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))) {
13569 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_h, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13570 proto_tree_add_item(htc_tree, hf_ieee80211_htc_coding_type, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13571 proto_tree_add_item(htc_tree, hf_ieee80211_htc_fb_tx_type, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13573 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved3, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13575 proto_tree_add_item(htc_tree, hf_ieee80211_htc_unsolicited_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13577 /* Start: Link Adaptation Control */
13578 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_lac, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13579 lac_subtree = proto_item_add_subtree(ti, ett_lac_subtree);
13580 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13582 if (HTC_IS_ASELI(htc)) {
13583 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13585 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13586 if (HTC_LAC_MAI_MRQ(htc)) {
13587 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13589 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13593 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13595 if (HTC_IS_ASELI(htc)) {
13596 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13597 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13599 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13601 /* End: Link Adaptation Control */
13603 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13604 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13605 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13606 proto_tree_add_item(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13608 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13609 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13611 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13612 proto_tree_add_item(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 4, ENC_LITTLE_ENDIAN);
13617 #define IEEE80211_COMMON_OPT_BROKEN_FC 0x00000001
13618 #define IEEE80211_COMMON_OPT_IS_CENTRINO 0x00000002
13619 #define IEEE80211_COMMON_OPT_NORMAL_QOS 0x00000004
13622 dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, guint32 option_flags,
13623 guint32 offset, packet_info *pinfo)
13625 guint16 fcf, flags, frame_type_subtype;
13626 proto_tree *fc_tree, *flag_tree;
13627 proto_item *fc_item, *flag_item, *hidden_item, *ti;
13629 fcf = FETCH_FCF(offset);
13631 flags = FCF_FLAGS(fcf);
13632 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf);
13634 /* Swap offset... */
13635 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC)
13640 proto_tree_add_uint(tree, hf_ieee80211_fc_frame_type_subtype, tvb, offset, 1, frame_type_subtype);
13642 fc_item = proto_tree_add_item(tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_BIG_ENDIAN);
13644 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
13646 proto_tree_add_item(fc_tree, hf_ieee80211_fc_proto_version, tvb, offset, 1, ENC_NA);
13647 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_type, tvb, offset, 1, ENC_NA);
13648 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_subtype, tvb, offset, 1, ENC_NA);
13649 /* Changing control frame extension for extension frames */
13650 if(IS_FRAME_EXTENSION(fcf) == 1) {
13651 proto_tree_add_uint(fc_tree, hf_ieee80211_fc_frame_extension, tvb, offset, 1, FCF_FRAME_EXTENSION(fcf));
13655 /* Reswap offset...*/
13656 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC)
13659 proto_item_append_text(fc_item, "(Swapped)");
13663 flag_item = proto_tree_add_item(fc_tree, hf_ieee80211_fc_flags, tvb, offset, 1, ENC_NA);
13664 flag_tree = proto_item_add_subtree(flag_item, ett_proto_flags);
13665 /* Changing control frame flags for extension frames */
13666 if(IS_FRAME_EXTENSION(fcf) == 0) {
13667 proto_tree_add_item(flag_tree, hf_ieee80211_fc_data_ds, tvb, offset, 1, ENC_NA);
13668 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_to_ds, tvb, offset, 1, ENC_NA);
13669 PROTO_ITEM_SET_HIDDEN(hidden_item);
13670 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_from_ds, tvb, offset, 1, ENC_NA);
13671 PROTO_ITEM_SET_HIDDEN(hidden_item);
13672 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_frag, tvb, offset, 1, ENC_NA);
13673 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_retry, tvb, offset, 1, ENC_NA);
13674 if( IS_RETRY(flags) )
13676 expert_add_info(pinfo, ti, &ei_ieee80211_fc_retry);
13677 wlan_stats.fc_retry = 1;
13680 proto_tree_add_item(flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, offset, 1, ENC_NA);
13681 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_data, tvb, offset, 1, ENC_NA);
13682 /* Changing control frame flags for extension frames */
13683 if(IS_FRAME_EXTENSION(fcf) == 0) {
13684 proto_tree_add_item(flag_tree, hf_ieee80211_fc_protected, tvb, offset, 1, ENC_NA);
13686 proto_tree_add_item(flag_tree, hf_ieee80211_fc_order, tvb, offset, 1, ENC_NA);
13690 dissect_durid(proto_tree *hdr_tree, tvbuff_t *tvb, guint16 fts, gint offset)
13692 guint16 durid = tvb_get_letohs(tvb, offset);
13694 if (durid < 0x8000) {
13695 proto_tree_add_uint_format_value(hdr_tree, hf_ieee80211_did_duration, tvb,
13696 offset, 2, durid, "%u microseconds", durid);
13697 } else if (((durid & 0xC000) == 0xC000) &&
13698 ((durid & 0x3FFF) > 0) && ((durid & 0x3FFF) <= 2007) &&
13699 (fts == CTRL_PS_POLL)) {
13700 proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, offset, 2,
13701 ENC_LITTLE_ENDIAN);
13702 } else if (durid == 0x8000) {
13703 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
13704 offset, 2, durid, "Duration/ID: %u", durid);
13706 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
13707 offset, 2, durid, "Duration/ID: %u (reserved)", durid & 0x3FFF);
13713 dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
13714 guint offset, proto_item *item, proto_item *ti_len, gint tag_len)
13719 proto_tree_add_item(tree, hf_ieee80211_ht_pren_type, tvb, offset, 1, ENC_NA);
13720 type = tvb_get_guint8(tvb, offset);
13727 dissect_ht_capability_ie_common(tvb, pinfo, tree, offset, tag_len, ti_len, TRUE);
13728 proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
13732 dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset, tag_len, ti_len);
13733 proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
13737 proto_tree_add_item(tree, hf_ieee80211_ht_pren_unknown, tvb, offset, tag_len, ENC_NA);
13744 dissect_interworking(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13746 int tag_len = tvb_reported_length(tvb);
13747 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
13749 static const int *ieee80211_tag_interworking[] = {
13750 &hf_ieee80211_tag_interworking_access_network_type,
13751 &hf_ieee80211_tag_interworking_internet,
13752 &hf_ieee80211_tag_interworking_asra,
13753 &hf_ieee80211_tag_interworking_esr,
13754 &hf_ieee80211_tag_interworking_uesa,
13758 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_interworking, ENC_LITTLE_ENDIAN);
13761 if ((tag_len == (1 + 2)) || (tag_len == (1 + 2 + 6))) {
13762 dissect_venue_info(tree, tvb, offset);
13766 if ((tag_len == (1 + 6)) || (tag_len == (1 + 2 + 6))) {
13767 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_hessid,
13768 tvb, offset, 6, ENC_NA);
13772 if ((tag_len != 1) && (tag_len != (1 + 2)) && (tag_len != (1 + 6)) && (tag_len != (1 + 2 + 6))) {
13773 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
13774 "Invalid Interworking element length");
13781 dissect_qos_map_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13783 int tag_len = tvb_reported_length(tvb);
13784 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
13789 proto_item *dscp_item, *item;
13790 proto_tree *dscp_tree;
13792 if (tag_len < 16 || tag_len & 1) {
13793 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_bad_length,
13794 "Truncated QoS Map Set element");
13795 return tvb_captured_length(tvb);
13798 left = tag_len - 16;
13799 while (left >= 2) {
13800 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_dscp_exc,
13801 tvb, offset, 2, ENC_NA);
13802 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
13804 item = proto_tree_add_item(dscp_tree,
13805 hf_ieee80211_tag_qos_map_set_dscp_exc_val,
13806 tvb, offset, 1, ENC_NA);
13807 val = tvb_get_guint8(tvb, offset);
13808 if (val > 63 && val != 255) {
13809 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13810 "Invalid DSCP Value");
13814 item = proto_tree_add_item(dscp_tree,
13815 hf_ieee80211_tag_qos_map_set_dscp_exc_up,
13816 tvb, offset, 1, ENC_NA);
13817 val2 = tvb_get_guint8(tvb, offset);
13819 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13820 "Invalid User Priority");
13824 proto_item_append_text(dscp_item, " (0x%02x: UP %u)", val, val2);
13829 for (i = 0; i < 8; i++) {
13830 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_range,
13831 tvb, offset, 2, ENC_NA);
13832 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
13834 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_low,
13835 tvb, offset, 1, ENC_NA);
13836 val = tvb_get_guint8(tvb, offset);
13837 if (val > 63 && val != 255) {
13838 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13839 "Invalid DSCP Value");
13843 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_high,
13844 tvb, offset, 1, ENC_NA);
13845 val2 = tvb_get_guint8(tvb, offset);
13846 if ((val2 > 63 && val2 != 255) || val2 < val ||
13847 (val == 255 && val2 != 255) || (val != 255 && val2 == 255)) {
13848 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
13849 "Invalid DSCP Value");
13853 if (val == 255 && val2 == 255) {
13854 proto_item_append_text(dscp_item, " (UP %u not in use)", i);
13856 proto_item_append_text(dscp_item, " (0x%02x-0x%02x: UP %u)",
13861 return tvb_captured_length(tvb);
13865 dissect_roaming_consortium(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13867 int tag_len = tvb_reported_length(tvb);
13868 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
13871 guint8 oi_lens, oi1_len, oi2_len;
13873 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
13874 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13877 oi_lens = tvb_get_guint8(tvb, offset);
13878 oi1_len = oi_lens & 0x0f;
13879 oi2_len = (oi_lens & 0xf0) >> 4;
13880 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1_len,
13881 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13882 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2_len,
13883 tvb, offset, 1, ENC_LITTLE_ENDIAN);
13886 if (offset + oi1_len > tag_len) {
13887 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
13888 "Truncated Roaming Consortium element");
13889 return tvb_captured_length(tvb);
13892 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1,
13893 tvb, offset, oi1_len, ENC_NA);
13894 add_manuf(item, tvb, offset);
13897 if (offset + oi2_len > tag_len) {
13898 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
13899 "Truncated Roaming Consortium element");
13900 return tvb_captured_length(tvb);
13904 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2,
13905 tvb, offset, oi2_len, ENC_NA);
13909 if (tag_len > offset) {
13910 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi3,
13911 tvb, offset, tag_len - offset, ENC_NA);
13914 return tvb_captured_length(tvb);
13918 /* ************************************************************************* */
13919 /* Dissect and add tagged (optional) fields to proto tree */
13920 /* ************************************************************************* */
13922 static int beacon_padding = 0; /* beacon padding bug */
13925 ieee80211_tag_ssid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13927 int tag_len = tvb_reported_length(tvb);
13928 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
13930 /* 7.3.2.1 SSID element (0) */
13931 gchar *ssid; /* The SSID may consist of arbitrary bytes */
13932 gint ssid_len = tag_len;
13934 if (beacon_padding != 0) /* padding bug */
13937 if (ssid_len > MAX_SSID_LEN) {
13938 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
13939 "SSID length (%u) greater than maximum (%u)",
13940 ssid_len, MAX_SSID_LEN);
13941 ssid_len = MAX_SSID_LEN;
13945 * XXX - the 802.11 specs aren't particularly clear on how the SSID
13946 * is to be interpreted.
13948 * IEEE Std 802.11-1999, section 7.3.2.2 "Service Set Identity (SSID)
13949 * element" says just
13951 * The length of the SSID information field is between 0 and 32
13952 * octets. A 0 length information field indicates the broadcast SSID.
13954 * with no indication that those octets encode a string.
13956 * IEEE Std 802.11-2012, section 8.4.2.2 "SSID element", says that *but*
13959 * When the UTF-8 SSID subfield of the Extended Capabilities element
13960 * is equal to 1 in the frame that includes the SSID element, the
13961 * SSID is interpreted using UTF-8 encoding.
13963 * NOTE -- This is true for Beacon and Probe Response frames when the
13964 * MLME-START.request primitive was issued with the SSIDEncoding
13965 * parameter equal to UTF-8.
13967 * and the SSIDEncoding parameter can either be UNSPECIFIED or UTF-8.
13969 * So I *guess* that means that, if the UTF-8 SSID subfield isn't
13970 * equal to 1, the SSID is, in theory, just a bunch of octets, but
13971 * in practice, *probably* ASCII as that's the typical convention,
13972 * and, if it is equal to 1, it's a UTF-8 string. (Of course, a
13973 * host can put anything there it wants to, so we shouldn't just
13974 * assume that it's *valid* ASCII or *valid* UTF-8.)
13976 * So we really should extract it as an array of ssid_len bytes,
13977 * pass those bytes to AirPDcapSetLastSSID(), and:
13979 * If the UTF-8 SSID subfield isn't set to 1, put the SSID in
13980 * as an ENC_ASCII string;
13982 * If the UTF-8 SSID subfield is set to 1, put it in as an
13983 * ENC_UTF_8 string;
13985 * and rely on the libwireshark core code to somehow deal with
13986 * non-ASCII characters or invalid UTF-8 sequences or valid-but-
13987 * not-all-printable ASCII or UTF-8 strings in the protocol tree
13988 * display. I'm not sure we can currently rely on it to handle
13989 * invalid UTF-8 or non-printable characters in UTF-8 strings,
13990 * however, so we just treat it as ASCII for now.
13992 * We also need a better way of getting the display format of a
13993 * string value, so we can do something other than run it through
13994 * format_text(), which won't handle UTF-8.
13996 * Addendum: 802.11 2012 points out that a Zero-length SSID means
13997 * the Wildcard SSID. Make it so. From 8.4.2.2 of 802.11 2012:
13999 * "The length of the SSID field is between 0 and 32 octets. A SSID
14000 * field of length 0 is used within Probe Request management frames to
14001 * indicate the wildcard SSID. The wildcard SSID is also used in
14002 * Beacon and Probe Response frames transmitted by mesh STAs."
14004 * Also, we have to return a non-zero value here to prevent an ugly
14005 * undissected field warning. Since this code is only called from
14006 * one place and is used in call to dissector_try_uint_new, it is
14009 ssid = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, ssid_len, ENC_ASCII);
14010 if (ssid_len == (gint)tag_len) {
14011 AirPDcapSetLastSSID(&airpdcap_ctx, (CHAR *) ssid, ssid_len);
14013 proto_tree_add_item(tree, hf_ieee80211_tag_ssid, tvb, offset, tag_len,
14016 if (ssid_len > 0) {
14017 gchar* s = format_text(wmem_packet_scope(), ssid, ssid_len);
14018 proto_item_append_text(field_data->item_tag, ": %s", s);
14020 col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID=%s", s);
14023 memcpy(wlan_stats.ssid, ssid, MIN(ssid_len, MAX_SSID_LEN));
14024 wlan_stats.ssid_len = ssid_len;
14026 proto_item_append_text(field_data->item_tag, ": Wildcard SSID");
14028 col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Wildcard (Broadcast)");
14029 offset += 1; // Make sure we return non-zero
14032 beacon_padding += 1; /* padding bug */
14034 return offset + tag_len;
14038 dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14040 int tag_len = tvb_reported_length(tvb);
14041 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14044 guint32 sub_tag_length;
14045 proto_item *parent_item;
14046 proto_tree *bssid_info_subtree, *bssid_info_cap_subtree, *sub_tag_tree;
14047 tvbuff_t *sub_tag_tvb = NULL;
14049 if (tag_len < 13) {
14050 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
14051 "Neighbor Report length %u wrong, must be > 13", tag_len);
14052 return tvb_captured_length(tvb);
14055 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid, tvb, offset, 6, ENC_NA);
14058 /*** Begin: BSSID Information ***/
14060 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid_info, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14061 bssid_info_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_tree);
14063 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reachability, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14064 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_security, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14065 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_key_scope, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14066 parent_item = proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14067 bssid_info_cap_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_capability_tree);
14068 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14069 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14070 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14071 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14072 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14073 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14074 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14075 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14076 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14077 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_ftm, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14078 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14081 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_ope_class, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14084 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14087 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_phy_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14090 /* The Optional Subelements field format contains zero or more subelements */
14091 if (tag_len == 13){ /* tag_len == 13 => no Subelements */
14092 return tvb_captured_length(tvb);
14095 while (offset < tag_len)
14098 sub_tag_id = tvb_get_guint8(tvb, offset);
14099 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_subelement_id, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14102 sub_tag_length = tvb_get_guint8(tvb, offset);
14103 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_subelement_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14105 sub_tag_tvb = tvb_new_subset_length(tvb, offset, sub_tag_length);
14107 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_subelement_data, tvb, offset, sub_tag_length, ENC_NA);
14109 switch (sub_tag_id) {
14110 case NR_SUB_ID_TSF_INFO:
14113 case NR_SUB_ID_MEASUREMENT_PILOT_INFO:
14116 case NR_SUB_ID_BSS_TRN_CAN_PREF:
14117 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref, tvb, offset, 1, ENC_NA);
14119 case NR_SUB_ID_BSS_TER_DUR:
14120 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf, tvb, offset, 8, ENC_NA);
14122 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_subelement_bss_dur, tvb, offset+8, 2, ENC_NA);
14124 case NR_SUB_ID_HT_CAPABILITIES:
14125 sub_tag_tree = proto_tree_add_subtree(tree, tvb, offset, sub_tag_length,
14126 ett_tag_neighbor_report_sub_tag_tree, NULL, "HT Capabilities");
14127 dissect_ht_capability_ie_common(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_length, field_data->item_tag_length, FALSE);
14129 case NR_SUB_ID_HT_OPERATION:
14130 sub_tag_tree = proto_tree_add_subtree(tree, tvb, offset, sub_tag_length,
14131 ett_tag_neighbor_report_sub_tag_tree, NULL, "HT Information");
14132 dissect_ht_info_ie_1_1(sub_tag_tvb, pinfo, sub_tag_tree, data);
14134 case NR_SUB_ID_SEC_CHANNEL_OFFSET:
14135 sub_tag_tree = proto_tree_add_subtree(tree, tvb, offset, sub_tag_length,
14136 ett_tag_neighbor_report_sub_tag_tree, NULL, "Secondary Channel Offset");
14137 dissect_secondary_channel_offset_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
14139 case NR_SUB_ID_VENDOR_SPECIFIC:
14144 offset += sub_tag_length;
14151 ieee80211_tag_supp_rates(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14153 int tag_len = tvb_reported_length(tvb);
14154 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14156 /* 7.3.2.2 Supported Rates element (1) */
14158 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
14159 "Tag length %u too short, must be greater than 0",
14164 while (offset < tag_len) {
14165 proto_tree_add_item(tree, hf_ieee80211_tag_supp_rates, tvb, offset, 1,
14166 ENC_LITTLE_ENDIAN);
14167 proto_item_append_text(field_data->item_tag, " %s,",
14168 val_to_str_ext_const(tvb_get_guint8(tvb, offset),
14169 &ieee80211_supported_rates_vals_ext,
14174 proto_item_append_text(field_data->item_tag, " [Mbit/sec]");
14180 ieee80211_tag_fh_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14182 int tag_len = tvb_reported_length(tvb);
14183 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14185 /* 7.3.2.3 FH Parameter Set element (2) */
14187 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
14188 "Tag length %u too short, must be >= 5", tag_len);
14192 proto_tree_add_item(tree, hf_ieee80211_tag_fh_dwell_time,
14193 tvb, offset, 2, ENC_LITTLE_ENDIAN);
14196 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_set,
14197 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14200 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_pattern,
14201 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14204 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_index,
14205 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14212 ieee80211_tag_ds_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14214 int tag_len = tvb_reported_length(tvb);
14215 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14217 /* 7.3.2.4 DS Parameter Set element (3) */
14218 if (tag_len != 1) {
14219 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
14220 "Tag length %u wrong, must be = 1", tag_len);
14224 proto_tree_add_item(tree, hf_ieee80211_tag_ds_param_channel,
14225 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14227 proto_item_append_text(field_data->item_tag, ": Current Channel: %u",
14228 tvb_get_guint8(tvb, offset));
14230 wlan_stats.channel = tvb_get_guint8(tvb, offset);
14237 ieee80211_tag_cf_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14239 int tag_len = tvb_reported_length(tvb);
14240 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14242 /* 7.3.2.5 CF Parameter Set element (4) */
14243 if (tag_len != 6) {
14244 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
14245 "Tag length %u wrong, must be = 6", tag_len);
14249 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_count,
14250 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14251 proto_item_append_text(field_data->item_tag, ": CFP count %u", tvb_get_guint8(tvb, offset));
14254 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_period,
14255 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14256 proto_item_append_text(field_data->item_tag, ": CFP Period %u", tvb_get_guint8(tvb, offset));
14259 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_max_duration,
14260 tvb, offset, 2, ENC_LITTLE_ENDIAN);
14261 proto_item_append_text(field_data->item_tag, ": CFP Max Duration %u",
14262 tvb_get_letohs(tvb, offset));
14265 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_dur_remaining,
14266 tvb, offset, 2, ENC_LITTLE_ENDIAN);
14267 proto_item_append_text(field_data->item_tag, ": CFP Dur Remaining %u",
14268 tvb_get_letohs(tvb, offset));
14275 ieee80211_tag_tim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14277 int tag_len = tvb_reported_length(tvb);
14278 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14280 guint aid, pvb_len, n1, i, j, byte;
14281 static const int *ieee80211_tim_bmapctl[] = {
14282 &hf_ieee80211_tim_bmapctl_mcast,
14283 &hf_ieee80211_tim_bmapctl_offset,
14287 /* 802.11-2012: 8.4.2.7 TIM element (5) */
14289 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
14290 "Tag length %u too short, must be >= 4", tag_len);
14294 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_count,
14295 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14296 proto_item_append_text(field_data->item_tag, ": DTIM %u of", tvb_get_guint8(tvb, offset));
14299 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_period,
14300 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14301 proto_item_append_text(field_data->item_tag, " %u bitmap", tvb_get_guint8(tvb, offset + 1));
14304 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tim_bmapctl,
14305 ett_tag_bmapctl_tree, ieee80211_tim_bmapctl,
14306 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
14307 pvb_len = tag_len - 3;
14308 n1 = tvb_get_guint8(tvb, offset) & 0xFE;
14311 proto_tree_add_item(tree, hf_ieee80211_tim_partial_virtual_bitmap,
14312 tvb, offset, pvb_len, ENC_NA);
14313 /* FIXME: Handles dot11MgmtOptionMultiBSSIDActivated = false only */
14314 for (i = 0; i < pvb_len; i++) {
14315 byte = tvb_get_guint8(tvb, offset + i);
14316 for (j = 0; j < 8; j++) {
14317 if (byte & (1 << j)) {
14318 aid = 8*n1 + 8*i + j;
14319 proto_tree_add_uint(tree, hf_ieee80211_tim_aid, tvb, offset + i, 1, aid);
14329 ieee80211_tag_ibss_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14331 int tag_len = tvb_reported_length(tvb);
14332 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14334 /* 7.3.2.7 IBSS Parameter Set element (6) */
14336 if (tag_len != 2) {
14337 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
14338 "Tag length %u wrong, must be = 2", tag_len);
14342 proto_tree_add_item(tree, hf_ieee80211_tag_ibss_atim_window,
14343 tvb, offset, 2, ENC_LITTLE_ENDIAN);
14344 proto_item_append_text(field_data->item_tag, ": ATIM window 0x%x",
14345 tvb_get_letohs(tvb, offset));
14351 static const value_string environment_vals[] = {
14353 { 0x4f, "Outdoor" },
14354 { 0x49, "Indoor" },
14359 ieee80211_tag_country_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14361 int tag_len = tvb_reported_length(tvb);
14362 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14364 /* 7.3.2.9 Country information element (7) */
14365 proto_tree *sub_tree;
14366 proto_item *sub_item;
14367 const guint8* country_code;
14370 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
14371 "Tag length %u too short, must be >= 6", tag_len);
14375 proto_tree_add_item_ret_string(tree, hf_ieee80211_tag_country_info_code,
14376 tvb, offset, 2, ENC_ASCII|ENC_NA, wmem_packet_scope(), &country_code);
14377 proto_item_append_text(field_data->item_tag, ": Country Code %s", country_code);
14380 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
14381 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14382 proto_item_append_text(field_data->item_tag, ", Environment %s",
14383 val_to_str(tvb_get_guint8(tvb, offset),
14384 environment_vals, "Unknown (0x%02x)"));
14387 while (offset < tag_len) {
14389 if ((tag_len - offset) < 3) {
14390 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_pad,
14391 tvb, offset, 1, ENC_NA);
14395 if (tvb_get_guint8(tvb, offset) <= 200) { /* 802.11d */
14396 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_fnm,
14397 tvb, offset, 3, ENC_NA);
14398 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_fnm_tree);
14400 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_fcn,
14401 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14402 proto_item_append_text(sub_item, ": First Channel Number: %d",
14403 tvb_get_guint8(tvb, offset));
14405 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_nc,
14406 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14407 proto_item_append_text(sub_item, ", Number of Channels: %d",
14408 tvb_get_guint8(tvb, offset));
14410 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_mtpl,
14411 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14412 proto_item_append_text(sub_item,
14413 ", Maximum Transmit Power Level: %d dBm",
14414 tvb_get_guint8(tvb, offset));
14416 } else { /* 802.11j */
14417 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_rrc,
14418 tvb, offset, 3, ENC_NA);
14419 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_rcc_tree);
14421 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oei,
14422 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14423 proto_item_append_text(sub_item,
14424 ": Operating Extension Identifier: %d",
14425 tvb_get_guint8(tvb, offset));
14427 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oc,
14428 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14429 proto_item_append_text(sub_item, ", Operating Class: %d",
14430 tvb_get_guint8(tvb, offset));
14432 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_cc,
14433 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14434 proto_item_append_text(sub_item, ", Coverage Class: %d",
14435 tvb_get_guint8(tvb, offset));
14444 ieee80211_tag_fh_hopping_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14446 int tag_len = tvb_reported_length(tvb);
14447 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14450 /* 7.3.2.10 Hopping Pattern Parameters information element (8) */
14452 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
14453 "Tag length %u too short, must be >= 2", tag_len);
14457 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
14458 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14459 proto_item_append_text(field_data->item_tag, ": Prime Radix: %u", tvb_get_guint8(tvb, offset));
14462 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
14463 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14464 proto_item_append_text(field_data->item_tag, ", Number of Channels: %u",
14465 tvb_get_guint8(tvb, offset));
14472 ieee80211_tag_fh_hopping_table(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14474 int tag_len = tvb_reported_length(tvb);
14475 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14478 /* 7.3.2.11 Hopping Pattern Table information element (9) */
14480 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
14481 "Tag length %u too short, must be >= 4", tag_len);
14485 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_flag,
14486 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14489 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_number_of_sets,
14490 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14493 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_modulus,
14494 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14497 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_offset,
14498 tvb, offset, 1, ENC_LITTLE_ENDIAN);
14501 while (offset < tag_len) {
14502 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_random_table,
14503 tvb, offset, 2, ENC_BIG_ENDIAN);
14511 add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
14512 const guint8 *valid_element_ids, guint valid_element_ids_count,
14513 association_sanity_check_t *association_sanity_check)
14516 guint32 tag_no, tag_len;
14517 proto_tree *orig_tree = tree;
14518 proto_item *ti = NULL;
14519 proto_item *ti_len, *ti_tag;
14520 ieee80211_tagged_field_data_t field_data;
14523 isDMG = GPOINTER_TO_INT(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY));
14525 tag_no = tvb_get_guint8(tvb, offset);
14526 tag_len = tvb_get_guint8(tvb, offset + 1);
14529 ti = proto_tree_add_item(orig_tree, hf_ieee80211_tag, tvb, offset, 2 + tag_len , ENC_NA);
14530 proto_item_append_text(ti, ": %s", val_to_str_ext(tag_no, &tag_num_vals_ext, "Reserved (%d)"));
14532 tree = proto_item_add_subtree(ti, ett_80211_mgt_ie);
14536 ti_tag = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14537 ti_len = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
14538 if (tag_len > (guint)tvb_reported_length_remaining(tvb, offset)) {
14539 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
14540 "Tag Length is longer than remaining payload");
14543 /* If the list of valid elements is restricted, require an Element ID to be
14544 * present in that list. Otherwise stop decoding the value to prevent possible
14545 * infinite recursions due to unexpected elements. */
14546 if (valid_element_ids_count) {
14547 gboolean valid_tag_no;
14550 for (i = 0; i < valid_element_ids_count; i++) {
14551 valid_tag_no = valid_element_ids[i] == tag_no;
14555 if (!valid_tag_no) {
14556 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
14557 "Unexpected Element ID %d", tag_no);
14558 return tag_len + 1 + 1;
14562 tag_tvb = tvb_new_subset_length(tvb, offset+2, tag_len);
14563 field_data.sanity_check = association_sanity_check;
14564 field_data.ftype = ftype;
14565 field_data.isDMG = isDMG;
14566 field_data.item_tag = ti;
14567 field_data.item_tag_length = ti_len;
14568 if (!dissector_try_uint_new(tagged_field_table, tag_no, tag_tvb, pinfo, tree, FALSE, &field_data))
14570 proto_tree_add_item(tree, hf_ieee80211_tag_data, tvb, offset + 1 + 1, tag_len, ENC_NA);
14571 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_data,
14572 "Dissector for 802.11 IE Tag"
14573 " (%s) code not implemented, Contact"
14574 " Wireshark developers if you want this supported", val_to_str_ext(tag_no,
14575 &tag_num_vals_ext, "(%d)"));
14576 proto_item_append_text(ti, ": Undecoded");
14579 return tag_len + 1 + 1;
14582 /* 7.3.2.12 Request information element (10) */
14584 ieee80211_tag_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
14586 int tag_len = tvb_reported_length(tvb);
14589 while (offset < tag_len)
14591 proto_tree_add_item(tree, hf_ieee80211_tag_request, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14594 return ((tag_len > 0) ? tag_len : 1);
14597 /* 7.3.2.28 BSS Load element (11) */
14598 /* 8.4.2.30 in 802.11-2012 */
14600 ieee80211_tag_qbss_load(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14602 int tag_len = tvb_reported_length(tvb);
14603 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14606 if ((tag_len < 4) || (tag_len > 5))
14608 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4 or 5", tag_len);
14609 return tvb_captured_length(tvb);
14614 /* QBSS Version 1 */
14615 proto_item_append_text(field_data->item_tag, " Cisco QBSS Version 1 - non CCA");
14617 /* Extract Values */
14618 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset, tag_len, 1);
14619 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14620 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
14621 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
14623 else if (tag_len == 5)
14625 proto_item *base_item;
14627 /* QBSS Version 2 */
14628 proto_item_append_text(field_data->item_tag, " 802.11e CCA Version");
14630 /* Extract Values */
14631 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset, tag_len, 2);
14632 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14633 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
14634 proto_item_append_text(base_item, " (%d%%)", 100*tvb_get_guint8(tvb, offset + 2)/255);
14635 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 3, 2, ENC_LITTLE_ENDIAN);
14636 proto_item_append_text(base_item, " (%d us/s)", tvb_get_letohs(tvb, offset + 3)*32);
14639 return tvb_captured_length(tvb);
14642 /* 8.4.2.31 in 802-11-2012 */
14644 ieee80211_tag_edca_param_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14646 int tag_len = tvb_reported_length(tvb);
14647 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14650 if ((tag_len != 18))
14652 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 18", tag_len);
14653 return tvb_captured_length(tvb);
14656 decode_qos_parameter_set(tree, tvb, pinfo, offset, field_data->ftype);
14658 return tvb_captured_length(tvb);
14661 /* TSPEC element (13) */
14663 ieee80211_tag_tspec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14665 int tag_len = tvb_reported_length(tvb);
14666 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14669 if (field_data->isDMG == FALSE && tag_len != 55)
14671 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 55", tag_len);
14672 return tvb_captured_length(tvb);
14674 if (field_data->isDMG == TRUE && tag_len != 57)
14676 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 57", tag_len);
14677 return tvb_captured_length(tvb);
14680 add_ff_qos_ts_info(tree, tvb, pinfo, offset);
14683 proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14686 proto_tree_add_item(tree, hf_ieee80211_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14689 proto_tree_add_item(tree, hf_ieee80211_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14692 proto_tree_add_item(tree, hf_ieee80211_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14695 proto_tree_add_item(tree, hf_ieee80211_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14698 proto_tree_add_item(tree, hf_ieee80211_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14701 proto_tree_add_item(tree, hf_ieee80211_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14704 proto_tree_add_item(tree, hf_ieee80211_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14707 proto_tree_add_item(tree, hf_ieee80211_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14710 proto_tree_add_item(tree, hf_ieee80211_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14713 proto_tree_add_item(tree, hf_ieee80211_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14716 proto_tree_add_item(tree, hf_ieee80211_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14719 proto_tree_add_item(tree, hf_ieee80211_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14722 proto_tree_add_item(tree, hf_ieee80211_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14725 proto_tree_add_item(tree, hf_ieee80211_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14728 if(field_data->isDMG == TRUE) {
14729 proto_tree_add_item(tree, hf_ieee80211_tspec_dmg, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14733 return tvb_captured_length(tvb);
14736 /* 7.3.2.31 TCLAS element (14) */
14738 ieee80211_tag_tclas(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14740 int tag_len = tvb_reported_length(tvb);
14741 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14745 static const int *ieee80211_tclas_class_mask0[] = {
14746 &hf_ieee80211_tclas_class_mask0_src_addr,
14747 &hf_ieee80211_tclas_class_mask0_dst_addr,
14748 &hf_ieee80211_tclas_class_mask0_type,
14752 static const int *ieee80211_tclas_class_mask1[] = {
14753 &hf_ieee80211_tclas_class_mask1_ver,
14754 &hf_ieee80211_tclas_class_mask1_src_ip,
14755 &hf_ieee80211_tclas_class_mask1_dst_ip,
14756 &hf_ieee80211_tclas_class_mask1_src_port,
14757 &hf_ieee80211_tclas_class_mask1_dst_port,
14758 &hf_ieee80211_tclas_class_mask1_ipv6_flow,
14762 static const int *ieee80211_tclas_class_mask1_4[] = {
14763 &hf_ieee80211_tclas_class_mask1_ver,
14764 &hf_ieee80211_tclas_class_mask1_src_ip,
14765 &hf_ieee80211_tclas_class_mask1_dst_ip,
14766 &hf_ieee80211_tclas_class_mask1_src_port,
14767 &hf_ieee80211_tclas_class_mask1_dst_port,
14768 &hf_ieee80211_tclas_class_mask1_ipv4_dscp,
14769 &hf_ieee80211_tclas_class_mask1_ipv4_proto,
14773 static const int *ieee80211_tclas_class_mask2[] = {
14774 &hf_ieee80211_tclas_class_mask2_tci,
14780 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 5", tag_len);
14784 proto_tree_add_item(tree, hf_ieee80211_tclas_up, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14787 type = tvb_get_guint8(tvb, offset);
14788 proto_tree_add_item(tree, hf_ieee80211_tclas_class_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14794 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
14795 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask0,
14796 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
14799 proto_tree_add_item(tree, hf_ieee80211_tclas_src_mac_addr, tvb, offset, 6, ENC_NA);
14802 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_mac_addr, tvb, offset, 6, ENC_NA);
14805 proto_tree_add_item(tree, hf_ieee80211_tclas_ether_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14810 version = tvb_get_guint8(tvb, offset+1);
14811 if (version == 4) {
14812 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
14813 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask1_4,
14814 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
14816 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
14817 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask1,
14818 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
14822 proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14826 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN);
14828 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN);
14830 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN);
14832 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN);
14834 proto_tree_add_item(tree, hf_ieee80211_tclas_dscp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14836 proto_tree_add_item(tree, hf_ieee80211_tclas_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14839 else if (version == 6)
14841 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_src, tvb, offset, 16, ENC_NA);
14843 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_dst, tvb, offset, 16, ENC_NA);
14845 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN);
14847 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN);
14849 proto_tree_add_item(tree, hf_ieee80211_tclas_flow, tvb, offset, 3, ENC_BIG_ENDIAN);
14855 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
14856 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask2,
14857 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
14860 proto_tree_add_item(tree, hf_ieee80211_tclas_tag_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14868 return tvb_captured_length(tvb);
14871 /* 7.3.2.34 Schedule element (15) */
14873 ieee80211_tag_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14875 int tag_len = tvb_reported_length(tvb);
14876 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14880 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 14", tag_len);
14884 add_ff_schedule_info(tree, tvb, pinfo, offset);
14887 proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14890 proto_tree_add_item(tree, hf_ieee80211_sched_srv_int, tvb, offset, 4, ENC_LITTLE_ENDIAN);
14893 proto_tree_add_item(tree, hf_ieee80211_sched_spec_int, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14894 return tvb_captured_length(tvb);
14897 /* 7.3.2.8 Challenge Text element (16) */
14899 ieee80211_tag_challenge_text(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
14901 int tag_len = tvb_reported_length(tvb);
14904 proto_tree_add_item(tree, hf_ieee80211_tag_challenge_text, tvb, offset, tag_len, ENC_NA);
14906 return ((tag_len > 0) ? tag_len : 1);
14909 /* 7.3.2.15 Power Constraint element (32) */
14911 ieee80211_tag_power_constraint(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14913 int tag_len = tvb_reported_length(tvb);
14914 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14918 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
14922 proto_tree_add_item(tree, hf_ieee80211_tag_power_constraint_local, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14923 proto_item_append_text(field_data->item_tag, ": %d", tvb_get_guint8(tvb, offset));
14924 return tvb_captured_length(tvb);
14927 /* 7.3.2.16 Power Capability element (33) */
14929 ieee80211_tag_power_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14931 int tag_len = tvb_reported_length(tvb);
14932 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14936 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
14940 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_min, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14941 proto_item_append_text(field_data->item_tag, " Min: %d", tvb_get_guint8(tvb, offset));
14944 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_max, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14945 proto_item_append_text(field_data->item_tag, ", Max :%d", tvb_get_guint8(tvb, offset));
14946 return tvb_captured_length(tvb);
14949 /* 7.3.2.18 TPC Request element (34) */
14951 ieee80211_tag_tpc_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, void* data)
14953 int tag_len = tvb_reported_length(tvb);
14954 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14957 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 0", tag_len);
14958 return 1; /* Even with no data, we can't return 0 */
14961 return 1; /* Even with no data, we can't return 0 */
14964 /* 7.3.2.18 TPC Report element (35) */
14966 ieee80211_tag_tpc_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14968 int tag_len = tvb_reported_length(tvb);
14969 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14974 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
14978 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_trsmt_pow, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14979 proto_item_append_text(field_data->item_tag, " Transmit Power: %d", tvb_get_guint8(tvb, offset));
14982 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_link_mrg, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14983 proto_item_append_text(field_data->item_tag, ", Link Margin: %d", tvb_get_guint8(tvb, offset));
14984 return tvb_captured_length(tvb);
14987 /* 7.3.2.19 Supported Channels element (36) */
14989 ieee80211_tag_supported_channels(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14991 int tag_len = tvb_reported_length(tvb);
14992 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
14995 proto_item *chan_item;
14996 proto_tree *chan_tree;
14999 if (tag_len % 2 == 1) {
15000 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u must be even", tag_len);
15001 return tvb_captured_length(tvb);
15004 while (offset < tag_len)
15006 chan_item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_channels, tvb, offset, 2, ENC_NA);
15007 proto_item_append_text(chan_item, " #%d", i);
15010 chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
15012 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_first, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15013 proto_item_append_text(chan_item, " First: %d", tvb_get_guint8(tvb, offset));
15016 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_range, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15017 proto_item_append_text(chan_item, ", Range: %d ", tvb_get_guint8(tvb, offset));
15021 return tvb_captured_length(tvb);
15024 /* 7.3.2.20 Channel Switch Announcement element (37) */
15026 ieee80211_tag_switch_ann(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15028 int tag_len = tvb_reported_length(tvb);
15029 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15033 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 3", tag_len);
15037 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15038 proto_item_append_text(field_data->item_tag, " Mode: %d", tvb_get_guint8(tvb, offset));
15041 proto_tree_add_item(tree, hf_ieee80211_csa_new_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15042 proto_item_append_text(field_data->item_tag, ", Number: %d ", tvb_get_guint8(tvb, offset));
15045 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15046 proto_item_append_text(field_data->item_tag, ", Count: %d ", tvb_get_guint8(tvb, offset));
15047 return tvb_captured_length(tvb);
15050 /* 7.3.2.21 Measurement Request element (38) with update from 802.11k-2008 */
15052 ieee80211_tag_measure_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15054 int tag_len = tvb_reported_length(tvb);
15055 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15057 guint8 request_type;
15058 proto_item *parent_item;
15059 proto_tree *sub_tree;
15060 static const int *ieee80211_tag_measure_request_mode[] = {
15061 &hf_ieee80211_tag_measure_request_mode_parallel,
15062 &hf_ieee80211_tag_measure_request_mode_enable,
15063 &hf_ieee80211_tag_measure_request_mode_request,
15064 &hf_ieee80211_tag_measure_request_mode_report,
15065 &hf_ieee80211_tag_measure_request_mode_duration_mandatory,
15066 &hf_ieee80211_tag_measure_request_mode_reserved,
15072 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
15073 return tvb_captured_length(tvb);
15075 proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_token, tvb, offset, 1, ENC_NA);
15078 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_request_mode,
15079 ett_tag_measure_request_mode_tree, ieee80211_tag_measure_request_mode,
15080 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
15083 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_type, tvb, offset, 1, ENC_NA);
15084 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_type_tree);
15085 request_type = tvb_get_guint8(tvb, offset);
15088 switch (request_type) {
15089 case 0: /* Basic Request */
15090 case 1: /* Clear channel assessment (CCA) request */
15091 case 2: /* Receive power indication (RPI) histogram request */
15093 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
15096 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
15099 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15103 case 3: /* Channel Load Request */
15105 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA);
15108 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
15111 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15114 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15117 while (offset < tag_len)
15120 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_id, tvb, offset, 1, ENC_NA);
15121 sub_id = tvb_get_guint8(tvb, offset);
15124 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA);
15128 case MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO: /* Channel Load Reporting Information (1) */
15129 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition, tvb, offset, 1, ENC_NA);
15131 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref, tvb, offset, 1, ENC_NA);
15135 /* no default action */
15141 case 4: /* Noise Histogram Request */
15143 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA);
15146 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
15149 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15152 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15155 while (offset < tag_len)
15158 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_id, tvb, offset, 1, ENC_NA);
15159 sub_id = tvb_get_guint8(tvb, offset);
15162 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA);
15166 case MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO: /* Noise Histogram Reporting Information (1) */
15167 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition, tvb, offset, 1, ENC_NA);
15169 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref, tvb, offset, 1, ENC_NA);
15173 /* no default action */
15179 case 5: /* Beacon Request */
15181 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA);
15184 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
15187 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15190 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15193 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_measurement_mode, tvb, offset, 1, ENC_NA);
15196 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_bssid, tvb, offset, 6, ENC_NA);
15199 while (offset < tag_len)
15201 guint8 sub_id, sub_length, sub_tag_end;
15202 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_id, tvb, offset, 1, ENC_NA);
15203 sub_id = tvb_get_guint8(tvb, offset);
15206 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA);
15207 sub_length = tvb_get_guint8(tvb, offset);
15209 sub_tag_end = offset + sub_length;
15212 case MEASURE_REQ_BEACON_SUB_SSID: /* SSID (0) */
15213 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_ssid, tvb, offset, sub_length, ENC_ASCII|ENC_NA);
15214 offset += sub_length;
15216 case MEASURE_REQ_BEACON_SUB_BRI: /* Beacon Reporting Information (1) */
15217 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15219 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15222 case MEASURE_REQ_BEACON_SUB_RD: /* Reporting Detail (2) */
15223 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15226 case MEASURE_REQ_BEACON_SUB_REQUEST: /* Request (10) */
15227 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_request, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15230 case MEASURE_REQ_BEACON_SUB_APCP: /* AP Channel Report (51) */
15234 /* no default action */
15237 if (offset < sub_tag_end)
15240 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA);
15241 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_beacon_unknown);
15242 offset = sub_tag_end;
15248 case 6: /* Frame Request */
15250 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA);
15253 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA);
15256 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15259 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15262 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_frame_request_type, tvb, offset, 1, ENC_NA);
15265 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mac_address, tvb, offset, 6, ENC_NA);
15268 /* TODO Add Optional Subelements */
15271 case 7: /* BSTA Statistics Request */
15273 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_peer_mac_address, tvb, offset, 6, ENC_NA);
15276 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15279 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15282 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_group_id, tvb, offset, 1, ENC_NA);
15285 /* TODO Add Optional Subelements */
15288 case 8: /* Location Configuration Indication (LCI) Request */
15290 case 9: /* Transmit Stream Measurement Request */
15292 case 10: /* Multicast diagnostics request */
15294 case 11: /* Location Civic request */
15296 case 12: /* Location Identifier request */
15298 case 13: /* Directional channel quality request */
15300 case 14: /* Directional measurement request */
15302 case 15: /* Directional statistics request */
15304 case 255: /* Measurement Pause Request*/
15306 default: /* unknown */
15309 if (offset < tag_len)
15312 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_unknown, tvb, offset, tag_len - offset, ENC_NA);
15313 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_unknown);
15316 return tvb_captured_length(tvb);
15319 /* 7.3.2.22 Measurement Report element (39) with update from 802.11k-2008 */
15321 ieee80211_tag_measure_rep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15323 int tag_len = tvb_reported_length(tvb);
15324 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15326 proto_item *parent_item;
15327 proto_tree *sub_tree;
15328 guint8 report_type;
15329 static const int *ieee80211_tag_measure_report_mode[] = {
15330 &hf_ieee80211_tag_measure_report_mode_late,
15331 &hf_ieee80211_tag_measure_report_mode_incapable,
15332 &hf_ieee80211_tag_measure_report_mode_refused,
15333 &hf_ieee80211_tag_measure_report_mode_reserved,
15336 static const int *ieee80211_tag_measure_map_field[] = {
15337 &hf_ieee80211_tag_measure_map_field_bss,
15338 &hf_ieee80211_tag_measure_map_field_odfm,
15339 &hf_ieee80211_tag_measure_map_field_unident_signal,
15340 &hf_ieee80211_tag_measure_map_field_radar,
15341 &hf_ieee80211_tag_measure_map_field_unmeasured,
15342 &hf_ieee80211_tag_measure_map_field_reserved,
15345 static const int *ieee80211_tag_measure_report_frame_info[] = {
15346 &hf_ieee80211_tag_measure_report_frame_info_phy_type,
15347 &hf_ieee80211_tag_measure_report_frame_info_frame_type,
15353 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
15354 return tvb_captured_length(tvb);
15356 proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_measurement_token, tvb, offset, 1, ENC_NA);
15359 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_report_mode,
15360 ett_tag_measure_report_mode_tree, ieee80211_tag_measure_report_mode,
15361 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
15364 report_type = tvb_get_guint8(tvb, offset);
15365 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15366 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_type_tree);
15370 return tvb_captured_length(tvb);
15372 switch (report_type) {
15373 case 0: /* Basic Report */
15375 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
15378 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
15381 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15384 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_basic_map_field,
15385 ett_tag_measure_report_basic_map_tree, ieee80211_tag_measure_map_field,
15386 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
15389 case 1: /* Clear channel assessment (CCA) report */
15390 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
15393 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
15396 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15399 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_cca_busy_fraction, tvb, offset, 1, ENC_NA);
15402 case 2: /* Receive power indication (RPI) histogram report */
15403 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
15406 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
15409 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15412 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report, tvb, offset, 8, ENC_NA);
15413 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_rpi_tree);
15415 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_0, tvb, offset, 1, ENC_NA);
15418 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_1, tvb, offset, 1, ENC_NA);
15421 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_2, tvb, offset, 1, ENC_NA);
15424 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_3, tvb, offset, 1, ENC_NA);
15427 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_4, tvb, offset, 1, ENC_NA);
15430 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_5, tvb, offset, 1, ENC_NA);
15433 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_6, tvb, offset, 1, ENC_NA);
15436 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_7, tvb, offset, 1, ENC_NA);
15439 case 3: /* Channel Load Report */
15441 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA);
15444 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
15447 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
15450 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15453 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_load, tvb, offset, 1, ENC_NA);
15456 /* TODO Add Optional Subelements */
15459 case 4: /* Noise Histogram Report */
15460 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA);
15463 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
15466 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
15469 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15472 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA);
15475 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_anpi, tvb, offset, 1, ENC_NA);
15478 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_0, tvb, offset, 1, ENC_NA);
15481 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_1, tvb, offset, 1, ENC_NA);
15484 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_2, tvb, offset, 1, ENC_NA);
15487 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_3, tvb, offset, 1, ENC_NA);
15490 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_4, tvb, offset, 1, ENC_NA);
15493 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_5, tvb, offset, 1, ENC_NA);
15496 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_6, tvb, offset, 1, ENC_NA);
15499 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_7, tvb, offset, 1, ENC_NA);
15502 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_8, tvb, offset, 1, ENC_NA);
15505 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_9, tvb, offset, 1, ENC_NA);
15508 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_10, tvb, offset, 1, ENC_NA);
15511 /* TODO Add Optional Subelements */
15513 case 5: /* Beacon Report */
15515 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA);
15518 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
15521 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
15524 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15527 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_report_frame_info,
15528 ett_tag_measure_report_frame_tree, ieee80211_tag_measure_report_frame_info,
15529 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
15532 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rcpi, tvb, offset, 1, ENC_NA);
15535 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rsni, tvb, offset, 1, ENC_NA);
15538 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_bssid, tvb, offset, 6, ENC_NA);
15541 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA);
15544 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15547 while (offset < tag_len)
15549 guint8 sub_id, sub_length;
15550 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_beacon_sub_id, tvb, offset, 1, ENC_NA);
15551 sub_id = tvb_get_guint8(tvb, offset);
15554 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_subelement_length, tvb, offset, 1, ENC_NA);
15555 sub_length = tvb_get_guint8(tvb, offset);
15559 case MEASURE_REP_REPORTED_FRAME_BODY: /* Reported Frame Body (1) */
15561 proto_tree *rep_tree;
15563 rep_tree = proto_tree_add_subtree(sub_tree, tvb, offset, sub_length, ett_tag_measure_reported_frame_tree, NULL, "Reported Frame Body");
15565 add_ff_timestamp(rep_tree, tvb, pinfo, 0);
15566 add_ff_beacon_interval(rep_tree, tvb, pinfo, 8);
15567 add_ff_cap_info(rep_tree, tvb, pinfo, 10);
15570 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, rep_tree, sub_length - 12, MGT_PROBE_RESP, NULL);
15571 offset += (sub_length - 12);
15575 /* no default action */
15581 case 6: /* Frame Report */
15582 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA);
15585 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA);
15588 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN);
15591 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15594 /* TODO Add Optional Subelements */
15596 case 7: /* BSTA Statistics Report */
15598 case 8: /* Location Configuration Information Report element */
15600 case 9: /* Transmit Stream Measurement Report */
15602 case 10: /* Multicast diagnostics Report */
15604 case 11: /* Location Civic Report */
15606 case 12: /* Location Identifier Report */
15608 case 13: /* Directional channel quality Report */
15610 case 14: /* Directional measurement Report */
15612 case 15: /* Directional statistics Report */
15614 default: /* unknown */
15617 if (offset < tag_len)
15620 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_unknown, tvb, offset, tag_len - offset, ENC_NA);
15621 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_unknown);
15623 return tvb_captured_length(tvb);
15626 /* 7.3.2.23 Quiet element (40) */
15628 ieee80211_tag_quiet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15630 int tag_len = tvb_reported_length(tvb);
15631 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15635 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
15636 return tvb_captured_length(tvb);
15639 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_count, tvb, offset, 1, ENC_NA);
15640 proto_item_append_text(field_data->item_tag, " Count: %d", tvb_get_guint8(tvb, offset));
15643 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_period, tvb, offset, 1, ENC_NA);
15644 proto_item_append_text(field_data->item_tag, " Period: %d", tvb_get_guint8(tvb, offset));
15647 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15648 proto_item_append_text(field_data->item_tag, " Duration: %d", tvb_get_letohs(tvb, offset));
15651 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15652 proto_item_append_text(field_data->item_tag, " Offset: %d", tvb_get_letohs(tvb, offset));
15654 return tvb_captured_length(tvb);
15657 /* 7.3.2.24 IBSS DFS element (41) */
15659 ieee80211_tag_ibss_dfs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15661 int tag_len = tvb_reported_length(tvb);
15662 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15664 proto_item *ti_sup_map;
15665 proto_tree *sub_map_tree;
15668 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 7", tag_len);
15669 return tvb_captured_length(tvb);
15672 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_owner, tvb, offset, 6, ENC_NA);
15673 proto_item_append_text(field_data->item_tag, " Owner: %s", tvb_ether_to_str(tvb, offset));
15676 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_recovery_interval, tvb, offset, 1, ENC_NA);
15679 while (offset < tag_len)
15681 ti_sup_map = proto_tree_add_item(tree, hf_ieee80211_tag_dfs_channel_map, tvb, offset, 2, ENC_NA);
15682 sub_map_tree = proto_item_add_subtree(ti_sup_map, ett_tag_dfs_map_tree);
15683 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_channel_number, tvb, offset, 1, ENC_NA);
15684 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_map, tvb, offset, 1, ENC_NA);
15687 return tvb_captured_length(tvb);
15690 /* 7.3.2.13 ERP Information element (42) */
15692 ieee80211_tag_erp_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15694 int tag_len = tvb_reported_length(tvb);
15695 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15697 static const int *ieee80211_tag_erp_info_flags[] = {
15698 &hf_ieee80211_tag_erp_info_erp_present,
15699 &hf_ieee80211_tag_erp_info_use_protection,
15700 &hf_ieee80211_tag_erp_info_barker_preamble_mode,
15701 &hf_ieee80211_tag_erp_info_reserved,
15707 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
15708 return tvb_captured_length(tvb);
15711 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_erp_info,
15712 ett_tag_erp_info_tree, ieee80211_tag_erp_info_flags,
15713 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
15715 return tvb_captured_length(tvb);
15718 /* 7.3.2.32 TS Delay element (43) */
15720 ieee80211_tag_ts_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15722 int tag_len = tvb_reported_length(tvb);
15723 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15727 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
15728 return tvb_captured_length(tvb);
15731 proto_tree_add_item(tree, hf_ieee80211_ts_delay, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15732 proto_item_append_text(field_data->item_tag, " : %d", tvb_get_ntohl(tvb, offset));
15733 return tvb_captured_length(tvb);
15736 /* 7.3.2.33 TCLAS Processing element (44) */
15738 ieee80211_tag_tclas_process(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15740 int tag_len = tvb_reported_length(tvb);
15741 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15745 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
15746 return tvb_captured_length(tvb);
15749 proto_tree_add_item(tree, hf_ieee80211_tclas_process, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15750 proto_item_append_text(field_data->item_tag, " : %s", val_to_str(tvb_get_guint8(tvb, offset), ieee80211_tclas_process_flag, "Unknown %d"));
15751 return tvb_captured_length(tvb);
15754 /* 802.11-2012 8.4.2.37 QoS Capability element (46) */
15756 ieee80211_tag_qos_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15758 int tag_len = tvb_reported_length(tvb);
15759 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15763 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
15764 return tvb_captured_length(tvb);
15766 dissect_qos_capability(tree, tvb, pinfo, offset, field_data->ftype);
15767 return tvb_captured_length(tvb);
15771 ieee80211_tag_rsn_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15773 int tag_len = tvb_reported_length(tvb);
15774 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15778 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 18", tag_len);
15779 return tvb_captured_length(tvb);
15782 dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len, field_data->sanity_check);
15783 return tvb_captured_length(tvb);
15786 /* 7.3.2.14 Extended Supported Rates element (50) */
15788 ieee80211_tag_ext_supp_rates(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15790 int tag_len = tvb_reported_length(tvb);
15791 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15795 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be greater than 0", tag_len);
15796 return tvb_captured_length(tvb);
15799 while (offset < tag_len)
15801 proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA);
15802 proto_item_append_text(field_data->item_tag, " %s,", val_to_str_ext_const(tvb_get_guint8(tvb, offset), &ieee80211_supported_rates_vals_ext, "Unknown Rate"));
15805 proto_item_append_text(field_data->item_tag, " [Mbit/sec]");
15806 return tvb_captured_length(tvb);
15810 ieee80211_tag_cisco_ccx1_ckip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15812 int tag_len = tvb_reported_length(tvb);
15813 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15815 /* From WCS manual:
15816 * If Aironet IE support is enabled, the access point sends an Aironet
15817 * IE 0x85 (which contains the access point name, load, number of
15818 * associated clients, and so on) in the beacon and probe responses of
15819 * this WLAN, and the controller sends Aironet IEs 0x85 and 0x95
15820 * (which contains the management IP address of the controller and
15821 * the IP address of the access point) in the reassociation response
15822 * if it receives Aironet IE 0x85 in the reassociation request.
15827 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u too short, must be >= 26", tag_len);
15828 return tvb_captured_length(tvb);
15830 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown, tvb, offset, 10, ENC_NA);
15833 /* The Name of the sending device starts at offset 10 and is up to
15834 15 or 16 bytes in length, \0 padded */
15835 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_name, tvb, offset, 16, ENC_ASCII|ENC_NA);
15838 /* Total number off associated clients and repeater access points */
15839 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_clients, tvb, offset, 1, ENC_NA);
15841 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown2, tvb, offset, 3, ENC_NA);
15842 return tvb_captured_length(tvb);
15846 ieee80211_tag_vendor_specific_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15848 int tag_len = tvb_reported_length(tvb);
15849 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15851 guint32 tag_vs_len = tag_len;
15856 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
15857 return tvb_captured_length(tvb);
15860 oui = tvb_get_ntoh24(tvb, offset);
15861 proto_tree_add_item(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_NA);
15862 proto_item_append_text(field_data->item_tag, ": %s", uint_get_manuf_name_if_known(oui));
15867 proto_tree_add_item(field_data->item_tag, hf_ieee80211_tag_vendor_oui_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15871 /* 802.11 specific vendor ids */
15873 dissect_vendor_ie_wpawme(tree, tvb, pinfo, offset, tag_vs_len, field_data->ftype);
15876 dissect_vendor_ie_rsn(field_data->item_tag, tree, tvb, offset, tag_vs_len);
15879 dissect_vendor_ie_ht(tvb, pinfo, tree, offset, field_data->item_tag, field_data->item_tag_length, tag_vs_len);
15882 dissect_vendor_ie_wfa(pinfo, field_data->item_tag, tvb);
15885 /* Normal IEEE vendor ids (from oui.h) */
15886 case OUI_CISCOWL: /* Cisco Wireless (Aironet) */
15887 dissect_vendor_ie_aironet(field_data->item_tag, tree, tvb, offset, tag_vs_len);
15890 dissect_vendor_ie_marvell(field_data->item_tag, tree, tvb, offset, tag_vs_len);
15893 dissect_vendor_ie_atheros(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo, field_data->item_tag_length);
15896 dissect_vendor_ie_aruba(field_data->item_tag, tree, tvb, offset, tag_vs_len);
15899 dissect_vendor_ie_nintendo(field_data->item_tag, tree, tvb, offset, tag_vs_len);
15902 dissect_vendor_ie_mikrotik(field_data->item_tag, tree, tvb, offset, tag_vs_len);
15905 dissect_vendor_ie_meru(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
15907 case OUI_ZEBRA_EXTREME:
15908 dissect_vendor_ie_extreme(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
15911 proto_tree_add_item(tree, hf_ieee80211_tag_vendor_data, tvb, offset, tag_vs_len, ENC_NA);
15915 return tvb_captured_length(tvb);
15918 /* Conflict: WAPI Vs. IEEE */
15920 ieee80211_tag_ie_68_conflict(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15922 int tag_len = tvb_reported_length(tvb);
15923 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15924 if (tag_len >= 20) { /* It Might be WAPI*/
15925 dissect_wapi_param_set(tvb, pinfo, tree, 0, tag_len, field_data->item_tag_length, field_data->item_tag, field_data->ftype);
15927 else { /* BSS AC Access Delay (68) */
15928 dissect_bss_ac_access_delay_ie(tvb, pinfo, tree, 0, tag_len, field_data->item_tag_length);
15930 return tvb_captured_length(tvb);
15934 ieee80211_tag_mesh_peering_mgmt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
15936 int tag_len = tvb_reported_length(tvb);
15939 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_proto, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15941 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_local_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15943 switch (tvb_get_guint8(tvb, 1))
15944 { /* Self-protected action field */
15945 case SELFPROT_ACTION_MESH_PEERING_OPEN:
15948 case SELFPROT_ACTION_MESH_PEERING_CONFIRM:
15949 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15952 case SELFPROT_ACTION_MESH_PEERING_CLOSE:
15953 if ((tag_len == 8) || (tag_len == 24))
15955 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15958 add_ff_reason_code(tree, tvb, pinfo, offset);
15961 /* unexpected values */
15963 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_mesh_peering_unexpected , tvb, offset, tag_len);
15966 if (tag_len - offset == 16)
15968 proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA);
15970 return tvb_captured_length(tvb);
15974 ieee80211_tag_mesh_configuration(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
15978 proto_tree *subtree;
15979 static const int *ieee80211_mesh_config_cap[] = {
15980 &hf_ieee80211_mesh_config_cap_accepting,
15981 &hf_ieee80211_mesh_config_cap_mcca_support,
15982 &hf_ieee80211_mesh_config_cap_mcca_enabled,
15983 &hf_ieee80211_mesh_config_cap_forwarding,
15984 &hf_ieee80211_mesh_config_cap_mbca_enabled,
15985 &hf_ieee80211_mesh_config_cap_tbtt_adjusting,
15986 &hf_ieee80211_mesh_config_cap_power_save_level,
15990 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15991 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_metric, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN);
15992 proto_tree_add_item(tree, hf_ieee80211_mesh_config_congestion_control, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN);
15993 proto_tree_add_item(tree, hf_ieee80211_mesh_config_sync_method, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN);
15994 proto_tree_add_item(tree, hf_ieee80211_mesh_config_auth_protocol, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN);
15995 item = proto_tree_add_item(tree, hf_ieee80211_mesh_config_formation_info, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
15996 subtree = proto_item_add_subtree(item, ett_mesh_formation_info_tree);
15997 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_num_of_peerings, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN);
15999 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_mesh_config_capability,
16000 ett_mesh_config_cap_tree, ieee80211_mesh_config_cap,
16001 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
16002 return tvb_captured_length(tvb);
16006 ieee80211_tag_mesh_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16009 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16010 int tag_len = tvb_reported_length(tvb);
16011 const guint8* mesh_id;
16013 proto_tree_add_item_ret_string(tree, hf_ieee80211_mesh_id, tvb, offset, tag_len, ENC_ASCII|ENC_NA, wmem_packet_scope(), &mesh_id);
16015 gchar* s = format_text(wmem_packet_scope(), mesh_id, tag_len);
16016 col_append_fstr(pinfo->cinfo, COL_INFO, ", MESHID=%s", s);
16017 proto_item_append_text(field_data->item_tag, ": %s", s);
16019 /* Make sure dissector is accepted */
16020 return ((tag_len > 0) ? tag_len : 1);
16024 ieee80211_tag_mesh_preq(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
16031 proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN, &flags);
16033 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16035 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16037 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_pdid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16039 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA);
16041 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16044 if (flags & (1<<6)) {
16045 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_ext, tvb, offset, 6, ENC_NA);
16048 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16050 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16052 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16053 targs = tvb_get_guint8(tvb, offset);
16055 for (i = 0; i < targs; i++) {
16056 const int * targ_flags[] = {
16057 &hf_ieee80211_ff_hwmp_targ_to_flags,
16058 &hf_ieee80211_ff_hwmp_targ_usn_flags,
16062 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_hwmp_targ_flags,
16063 ett_hwmp_targ_flags_tree, targ_flags, ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
16066 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
16068 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16072 return tvb_captured_length(tvb);
16076 ieee80211_tag_mesh_prep(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
16081 proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN, &flags);
16083 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16085 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset , 1, ENC_LITTLE_ENDIAN);
16087 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
16089 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16091 if (flags & (1<<6)) {
16092 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA);
16095 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16097 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16099 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA);
16101 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16102 return tvb_captured_length(tvb);
16106 ieee80211_tag_mesh_perr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
16111 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16113 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16114 targs = tvb_get_guint8(tvb, offset);
16116 for (i = 0; i < targs; i++) {
16117 guint8 flags = tvb_get_guint8(tvb, offset);
16119 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16121 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA);
16123 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16125 if (flags & (1<<6)) {
16126 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA);
16129 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
16131 return tvb_captured_length(tvb);
16135 ieee80211_tag_rann(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
16138 proto_tree_add_item(tree, hf_ieee80211_rann_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16140 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16142 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16144 proto_tree_add_item(tree, hf_ieee80211_rann_root_sta, tvb, offset, 6, ENC_NA);
16146 proto_tree_add_item(tree, hf_ieee80211_rann_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16148 proto_tree_add_item(tree, hf_ieee80211_rann_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16150 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16151 return tvb_captured_length(tvb);
16154 /* Mesh Channel Switch Parameters (118) */
16156 ieee80211_tag_mesh_channel_switch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16158 int tag_len = tvb_reported_length(tvb);
16159 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16161 static const int * ieee80211_mesh_chswitch_flag[] = {
16162 &hf_ieee80211_mesh_chswitch_flag_initiator,
16163 &hf_ieee80211_mesh_chswitch_flag_txrestrict,
16169 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
16170 return tvb_captured_length(tvb);
16173 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16174 proto_item_append_text(field_data->item_tag, " TTL: %d", tvb_get_guint8(tvb, offset));
16177 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_mesh_channel_switch_flag,
16178 ett_mesh_chswitch_flag_tree, ieee80211_mesh_chswitch_flag, ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
16181 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_reason_code, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16184 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_precedence_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16185 return tvb_captured_length(tvb);
16188 /* Mesh Awake Window Parameters (119) */
16190 ieee80211_tag_mesh_awake_window(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16192 int tag_len = tvb_reported_length(tvb);
16193 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16196 if (tag_len != 2) {
16197 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
16198 "Tag length %u wrong, must be = 2", tag_len);
16199 return tvb_captured_length(tvb);
16202 proto_tree_add_item(tree, hf_ieee80211_mesh_awake_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16203 return tvb_captured_length(tvb);
16207 ieee80211_tag_channel_switch_announcement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16209 int tag_len = tvb_reported_length(tvb);
16210 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16214 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
16215 return tvb_captured_length(tvb);
16218 add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
16219 return tvb_captured_length(tvb);
16223 ieee80211_tag_supported_operating_classes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16225 int tag_len = tvb_reported_length(tvb);
16226 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16228 proto_item* item = NULL;
16230 guint8 field_len = 0;
16231 guint8 alt_op_class_field[256];
16234 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
16235 return tvb_captured_length(tvb);
16236 } else if (tag_len > 255) {
16237 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, uint8 <= 255", tag_len);
16238 return tvb_captured_length(tvb);
16241 proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_current, tvb, offset++, 1, ENC_NA);
16243 for (i = offset; i < tag_len; i++) {
16244 guint8 op_class = tvb_get_guint8(tvb, i);
16245 /* Field terminates immediately before OneHundredAndThirty or Zero delimiter */
16246 if (op_class == 130 || op_class == 0) {
16249 alt_op_class_field[field_len++] = op_class;
16252 item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_alternate, tvb, offset, field_len, ENC_NA);
16254 for (i = 0; i < field_len; i++) {
16255 proto_item_append_text(item, i == 0 ? ": %d":", %d", alt_op_class_field[i]);
16258 /* TODO parse optional Current Operating Class Extension Sequence field */
16259 /* TODO parse optional Operating Class Duple Sequence field */
16260 return tvb_captured_length(tvb);
16264 ieee80211_tag_bss_parameter_change(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16266 int tag_len = tvb_reported_length(tvb);
16267 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16272 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
16273 return tvb_captured_length(tvb);
16275 size = (tvb_get_guint8(tvb, offset) & 0x02) >> 1;
16276 proto_tree_add_item(tree, hf_ieee80211_tag_move, tvb, offset, 1, ENC_NA);
16277 proto_tree_add_item(tree, hf_ieee80211_tag_size, tvb, offset, 1, ENC_NA);
16279 proto_tree_add_item(tree, hf_ieee80211_tag_tbtt_offset, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16281 if(size == TRUE) { /* if size bit is 0, the field is reserved. */
16282 proto_tree_add_item(tree, hf_ieee80211_tag_bi_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16284 return tvb_captured_length(tvb);
16288 ieee80211_tag_dmg_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16290 int tag_len = tvb_reported_length(tvb);
16291 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16293 static const int * ieee80211_tag_dmg_cap1[] = {
16294 &hf_ieee80211_tag_reverse_direction,
16295 &hf_ieee80211_tag_hlts,
16296 &hf_ieee80211_tag_tpc,
16297 &hf_ieee80211_tag_spsh,
16298 &hf_ieee80211_tag_rx_antenna,
16299 &hf_ieee80211_tag_fast_link,
16300 &hf_ieee80211_tag_num_sectors,
16301 &hf_ieee80211_tag_rxss_length,
16302 &hf_ieee80211_tag_reciprocity,
16303 &hf_ieee80211_tag_max_ampdu_exp,
16307 static const int * ieee80211_tag_dmg_cap2[] = {
16308 &hf_ieee80211_tag_min_mpdu_spacing,
16309 &hf_ieee80211_tag_ba_flow_control,
16310 &hf_ieee80211_tag_max_sc_rx_mcs,
16311 &hf_ieee80211_tag_max_ofdm_rx_mcs,
16312 &hf_ieee80211_tag_max_sc_tx_mcs,
16313 &hf_ieee80211_tag_max_ofdm_tx_mcs,
16317 static const int * ieee80211_tag_dmg_cap3[] = {
16318 &hf_ieee80211_tag_low_power_supported,
16319 &hf_ieee80211_tag_code_rate,
16320 &hf_ieee80211_tag_dtp,
16321 &hf_ieee80211_tag_appdu_supp,
16322 &hf_ieee80211_tag_heartbeat,
16323 &hf_ieee80211_tag_other_aid,
16324 &hf_ieee80211_tag_pattern_recip,
16325 &hf_ieee80211_tag_heartbeat_elapsed,
16326 &hf_ieee80211_tag_grant_ack_supp,
16327 &hf_ieee80211_tag_RXSSTxRate_supp,
16331 static const int * ieee80211_tag_dmg_cap4[] = {
16332 &hf_ieee80211_tag_pcp_tddti,
16333 &hf_ieee80211_tag_pcp_PSA,
16334 &hf_ieee80211_tag_pcp_handover,
16335 &hf_ieee80211_tag_pcp_max_assoc,
16336 &hf_ieee80211_tag_pcp_power_src,
16337 &hf_ieee80211_tag_pcp_decenter,
16338 &hf_ieee80211_tag_pcp_forwarding,
16339 &hf_ieee80211_tag_pcp_center,
16345 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 17", tag_len);
16346 return tvb_captured_length(tvb);
16348 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_sta_addr, tvb, offset, 6, ENC_NA);
16350 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_aid, tvb, offset, 1, ENC_NA);
16352 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_dmg_cap1, ENC_LITTLE_ENDIAN);
16354 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_dmg_cap2, ENC_LITTLE_ENDIAN);
16356 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_dmg_cap3, ENC_LITTLE_ENDIAN);
16358 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_dmg_cap4, ENC_LITTLE_ENDIAN);
16359 return tvb_captured_length(tvb);
16363 ieee80211_tag_dmg_operation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16365 int tag_len = tvb_reported_length(tvb);
16366 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16368 static const int * ieee80211_tag_dmg_operation_flags[] = {
16369 &hf_ieee80211_tag_pcp_tddti,
16370 &hf_ieee80211_tag_pcp_PSA,
16371 &hf_ieee80211_tag_pcp_handover,
16377 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 10", tag_len);
16378 return tvb_captured_length(tvb);
16380 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_dmg_operation_flags, ENC_LITTLE_ENDIAN);
16382 proto_tree_add_item(tree, hf_ieee80211_tag_PSRSI, tvb, offset, 1, ENC_NA);
16384 proto_tree_add_item(tree, hf_ieee80211_tag_min_BHI_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16386 proto_tree_add_item(tree, hf_ieee80211_tag_brdct_sta_info_dur, tvb, offset, 1, ENC_NA);
16388 proto_tree_add_item(tree, hf_ieee80211_tag_assoc_resp_confirm_time, tvb, offset, 1, ENC_NA);
16390 proto_tree_add_item(tree, hf_ieee80211_tag_min_pp_duration, tvb, offset, 1, ENC_NA);
16392 proto_tree_add_item(tree, hf_ieee80211_tag_SP_idle_timeout, tvb, offset, 1, ENC_NA);
16394 proto_tree_add_item(tree, hf_ieee80211_tag_max_lost_beacons, tvb, offset, 1, ENC_NA);
16395 return tvb_captured_length(tvb);
16399 ieee80211_tag_antenna_section_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16401 int tag_len = tvb_reported_length(tvb);
16402 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16404 static const int * ieee80211_tag_antenna[] = {
16405 &hf_ieee80211_tag_type,
16406 &hf_ieee80211_tag_tap1,
16407 &hf_ieee80211_tag_state1,
16408 &hf_ieee80211_tag_tap2,
16409 &hf_ieee80211_tag_state2,
16415 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
16416 return tvb_captured_length(tvb);
16418 proto_tree_add_bitmask_list(tree, tvb, offset, 4, ieee80211_tag_antenna, ENC_LITTLE_ENDIAN);
16419 return tvb_captured_length(tvb);
16423 ieee80211_tag_extended_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16425 int tag_len = tvb_reported_length(tvb);
16426 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16430 proto_tree * alloc_tree;
16431 if ((tag_len%15) != 0)
16433 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be N*15 where 0<=N<=17", tag_len);
16434 return tvb_captured_length(tvb);
16436 isGrant = ((field_data->ftype==CTRL_GRANT)||(field_data->ftype==CTRL_GRANT_ACK));
16437 for(i=0; i < tag_len; i+=15) {
16438 alloc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 15, ett_allocation_tree, NULL, "Allocation %d", i/15);
16439 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16440 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16441 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pseudo_static, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16442 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_truncatable, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16443 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_extendable, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16444 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pcp_active, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16445 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_lp_sc_used, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16447 offset += add_ff_beamforming_ctrl(alloc_tree, tvb, pinfo, offset, isGrant);
16448 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_src_aid, tvb, offset, 1, ENC_NA);
16450 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_dest_aid, tvb, offset, 1, ENC_NA);
16452 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_start, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16454 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16456 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_num_blocks, tvb, offset, 1, ENC_NA);
16458 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_period, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16461 return tvb_captured_length(tvb);
16465 ieee80211_tag_sta_availability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16467 int tag_len = tvb_reported_length(tvb);
16468 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16471 proto_tree * sta_info_tree;
16472 if ((tag_len%2) != 0)
16474 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be N*2 where N>=0", tag_len);
16475 return tvb_captured_length(tvb);
16477 for(i=0; i < tag_len; i+=2) {
16478 sta_info_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2, ett_sta_info, NULL, "STA Info %d", i/2);
16479 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16480 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_cbap, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16481 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_pp_avail, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16484 return tvb_captured_length(tvb);
16488 ieee80211_tag_next_dmg_ati(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16490 int tag_len = tvb_reported_length(tvb);
16491 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16495 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
16496 return tvb_captured_length(tvb);
16498 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16500 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16501 return tvb_captured_length(tvb);
16505 ieee80211_tag_nextpcp_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16507 int tag_len = tvb_reported_length(tvb);
16508 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16513 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 1", tag_len);
16514 return tvb_captured_length(tvb);
16516 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_token, tvb, offset, 1, ENC_NA);
16518 for(i=0; i < tag_len-1; i+=1) {
16519 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_list, tvb, offset, 1, ENC_NA);
16522 return tvb_captured_length(tvb);
16526 ieee80211_tag_pcp_handover(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16528 int tag_len = tvb_reported_length(tvb);
16529 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16533 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 13", tag_len);
16534 return tvb_captured_length(tvb);
16536 proto_tree_add_item(tree, hf_ieee80211_tag_old_bssid, tvb, offset, 6, ENC_NA);
16538 proto_tree_add_item(tree, hf_ieee80211_tag_new_pcp_addr, tvb, offset, 6, ENC_NA);
16540 proto_tree_add_item(tree, hf_ieee80211_tag_reamaining_BI, tvb, offset, 1, ENC_NA);
16541 return tvb_captured_length(tvb);
16545 ieee80211_tag_beamlink_maintenance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16547 int tag_len = tvb_reported_length(tvb);
16548 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16552 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
16553 return tvb_captured_length(tvb);
16555 add_ff_beamformed_link(tree, tvb, pinfo, offset);
16556 return tvb_captured_length(tvb);
16560 ieee80211_tag_quiet_period_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16562 int tag_len = tvb_reported_length(tvb);
16563 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16567 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 10", tag_len);
16568 return tvb_captured_length(tvb);
16570 proto_tree_add_item(tree, hf_ieee80211_tag_request_token, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16572 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA);
16574 add_ff_sta_address(tree, tvb, pinfo, offset);
16575 return tvb_captured_length(tvb);
16579 ieee80211_tag_relay_transfer_param(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16581 int tag_len = tvb_reported_length(tvb);
16582 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16587 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
16588 return tvb_captured_length(tvb);
16590 proto_tree_add_item(tree, hf_ieee80211_tag_duplex_relay, tvb, offset, 1, ENC_NA);
16591 proto_tree_add_item(tree, hf_ieee80211_tag_cooperation_relay, tvb, offset, 1, ENC_NA);
16592 proto_tree_add_item(tree, hf_ieee80211_tag_tx_mode, tvb, offset, 1, ENC_NA);
16593 proto_tree_add_item(tree, hf_ieee80211_tag_link_change_interval, tvb, offset+1, 1, ENC_NA);
16594 proto_tree_add_item(tree, hf_ieee80211_tag_data_sensing_time, tvb, offset+2, 1, ENC_NA);
16595 proto_tree_add_item(tree, hf_ieee80211_tag_first_period, tvb, offset+3, 2, ENC_LITTLE_ENDIAN);
16596 proto_tree_add_item(tree, hf_ieee80211_tag_second_period, tvb, offset+5, 2, ENC_LITTLE_ENDIAN);
16597 return tvb_captured_length(tvb);
16601 ieee80211_tag_dmg_beam_refinement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16603 int tag_len = tvb_reported_length(tvb);
16604 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16606 static const int * ieee80211_dmg_beam_refinement_fields[] = {
16607 &hf_ieee80211_tag_initiator,
16608 &hf_ieee80211_tag_tx_train_res,
16609 &hf_ieee80211_tag_rx_train_res,
16610 &hf_ieee80211_tag_tx_trn_ok,
16611 &hf_ieee80211_tag_txss_fbck_req,
16612 &hf_ieee80211_tag_bs_fbck,
16613 &hf_ieee80211_tag_bs_fbck_antenna_id,
16614 &hf_ieee80211_tag_snr_requested,
16615 &hf_ieee80211_tag_channel_measurement_requested,
16616 &hf_ieee80211_tag_number_of_taps_requested,
16617 &hf_ieee80211_tag_sector_id_order_req,
16618 &hf_ieee80211_tag_snr_present,
16619 &hf_ieee80211_tag_channel_measurement_present,
16620 &hf_ieee80211_tag_tap_delay_present,
16621 &hf_ieee80211_tag_number_of_taps_present,
16622 &hf_ieee80211_tag_number_of_measurement,
16623 &hf_ieee80211_tag_sector_id_order_present,
16624 &hf_ieee80211_tag_number_of_beams,
16625 &hf_ieee80211_tag_mid_extension,
16626 &hf_ieee80211_tag_capability_request,
16627 &hf_ieee80211_tag_beam_refine_reserved,
16633 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
16634 return tvb_captured_length(tvb);
16637 proto_tree_add_bitmask_list(tree, tvb, offset, 5, ieee80211_dmg_beam_refinement_fields, ENC_LITTLE_ENDIAN);
16638 return tvb_captured_length(tvb);
16642 ieee80211_tag_wakeup_schedule_ad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16644 int tag_len = tvb_reported_length(tvb);
16645 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16650 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
16651 return tvb_captured_length(tvb);
16653 proto_tree_add_item(tree, hf_ieee80211_tag_bi_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16655 proto_tree_add_item(tree, hf_ieee80211_tag_sleep_cycle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16657 proto_tree_add_item(tree, hf_ieee80211_tag_num_awake_bis, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16658 return tvb_captured_length(tvb);
16662 ieee80211_tag_dmg_tspec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16664 int tag_len = tvb_reported_length(tvb);
16665 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16669 int num_constraints;
16672 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 14", tag_len);
16673 return tvb_captured_length(tvb);
16675 static const int * ieee80211_tag_tspec_flags[] = {
16676 &hf_ieee80211_tag_tspec_allocation_id,
16677 &hf_ieee80211_tag_tspec_allocation_type,
16678 &hf_ieee80211_tag_tspec_allocation_format,
16679 &hf_ieee80211_tag_tspec_pseudo_static,
16680 &hf_ieee80211_tag_tspec_truncatable,
16681 &hf_ieee80211_tag_tspec_extendable,
16682 &hf_ieee80211_tag_tspec_lp_sc_used,
16683 &hf_ieee80211_tag_tspec_up,
16684 &hf_ieee80211_tag_tap2,
16685 &hf_ieee80211_tag_tspec_dest_aid,
16689 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_tspec_flags, ENC_LITTLE_ENDIAN);
16691 isGrant = ((field_data->ftype==CTRL_GRANT)||(field_data->ftype==CTRL_GRANT_ACK));
16692 offset += add_ff_beamforming_ctrl(tree, tvb, pinfo, 2, isGrant);
16693 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_period, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16695 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16697 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_max_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16699 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16701 num_constraints = tvb_get_guint8(tvb, offset);
16702 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_num_of_constraints, tvb, offset, 1, ENC_NA);
16704 while(num_constraints > 0) {
16705 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
16707 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16709 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_period, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16711 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_interferer_mac, tvb, offset, 2, ENC_NA);
16715 return tvb_captured_length(tvb);
16719 ieee80211_tag_channel_measurement_fb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16721 int tag_len = tvb_reported_length(tvb);
16722 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16725 int num_measurement;
16726 if (tag_len%5 != 0)
16728 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be multiple of 5", tag_len);
16729 return tvb_captured_length(tvb);
16731 num_measurement = tvb_get_guint8(tvb, offset+1);
16733 while(num_measurement > 0) {
16734 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA);
16736 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_realtive_I, tvb, offset, 1, ENC_NA);
16738 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_realtive_Q, tvb, offset, 1, ENC_NA);
16740 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_tap_delay, tvb, offset, 1, ENC_NA);
16742 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_sector_id, tvb, offset, 1, ENC_NA);
16743 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_antenna_id, tvb, offset, 1, ENC_NA);
16747 return tvb_captured_length(tvb);
16751 ieee80211_tag_awake_window(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16753 int tag_len = tvb_reported_length(tvb);
16754 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16758 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 2", tag_len);
16762 proto_tree_add_item(tree, hf_ieee80211_tag_awake_window, tvb, 0, 2, ENC_LITTLE_ENDIAN);
16764 return tvb_captured_length(tvb);
16768 ieee80211_tag_addba_ext(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16770 int tag_len = tvb_reported_length(tvb);
16771 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16775 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
16779 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_no_frag, tvb, 0, 1, ENC_NA);
16781 return tvb_captured_length(tvb);
16785 ieee80211_tag_multi_band(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16787 int tag_len = tvb_reported_length(tvb);
16788 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16790 gboolean chiper_present, addr_present;
16791 static const int * ieee80211_tag_multi_band_ctrl[] = {
16792 &hf_ieee80211_tag_multi_band_ctrl_sta_role,
16793 &hf_ieee80211_tag_multi_band_ctrl_addr_present,
16794 &hf_ieee80211_tag_multi_band_ctrl_cipher_present,
16797 static const int * ieee80211_tag_multi_band_conn[] = {
16798 &hf_ieee80211_tag_multi_band_conn_ap,
16799 &hf_ieee80211_tag_multi_band_conn_pcp,
16800 &hf_ieee80211_tag_multi_band_conn_dls,
16801 &hf_ieee80211_tag_multi_band_conn_tdls,
16802 &hf_ieee80211_tag_multi_band_conn_ibss,
16808 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 22", tag_len);
16809 return tvb_captured_length(tvb);
16811 chiper_present = (tvb_get_letohs(tvb, offset) & 0x08) >> 3;
16812 addr_present = (tvb_get_letohs(tvb, offset) & 0x10) >> 4;
16813 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_multi_band_ctrl, ENC_NA);
16815 offset += add_ff_band_id(tree, tvb, pinfo, 1);
16816 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_oper_class, tvb, offset, 1, ENC_NA);
16818 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_channel_number, tvb, offset, 1, ENC_NA);
16820 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA);
16822 offset += add_ff_beacon_interval(tree, tvb, pinfo, 2);
16823 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_tsf_offset, tvb, offset, 8, ENC_LITTLE_ENDIAN);
16826 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_multi_band_conn, ENC_NA);
16828 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_fst_timeout, tvb, offset, 1, ENC_NA);
16832 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_sta_mac, tvb, offset, 6, ENC_NA);
16837 proto_item *rsn_pcs_count, *rsn_pcs_item, *rsn_sub_pcs_item;
16838 proto_tree *rsn_pcs_tree, *rsn_sub_pcs_tree;
16841 int tag_end = tvb_reported_length(tvb);
16842 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16843 pcs_count = tvb_get_letohs(tvb, offset);
16846 if (offset + (pcs_count * 4) > tag_end)
16848 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
16849 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
16850 pcs_count = (tag_end - offset) / 4;
16853 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA);
16854 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
16855 for (ii = 0; ii < pcs_count; ii++)
16857 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN);
16858 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
16859 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN);
16861 /* Check if OUI is 00:0F:AC (ieee80211) */
16862 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN)
16864 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
16865 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(tvb_get_ntohl(tvb, offset)));
16867 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN);
16873 return tvb_captured_length(tvb);
16877 ieee80211_tag_dmg_link_margin(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16879 int tag_len = tvb_reported_length(tvb);
16880 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16885 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
16886 return tvb_captured_length(tvb);
16888 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA);
16890 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_mcs, tvb, offset, 1, ENC_NA);
16892 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_link_margin, tvb, offset, 1, ENC_NA);
16894 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA);
16896 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16897 return tvb_captured_length(tvb);
16901 ieee80211_tag_dmg_link_adaption_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16903 int tag_len = tvb_reported_length(tvb);
16904 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16909 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
16910 return tvb_captured_length(tvb);
16912 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA);
16914 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN);
16915 return tvb_captured_length(tvb);
16919 ieee80211_tag_switching_stream(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
16921 int tag_len = tvb_reported_length(tvb);
16922 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
16924 static const int * ieee80211_tag_switching_stream_flags[] = {
16925 &hf_ieee80211_tag_switching_stream_old_tid,
16926 &hf_ieee80211_tag_switching_stream_old_direction,
16927 &hf_ieee80211_tag_switching_stream_new_tid,
16928 &hf_ieee80211_tag_switching_stream_new_direction,
16929 &hf_ieee80211_tag_switching_stream_new_valid_id,
16930 &hf_ieee80211_tag_switching_stream_llt_type,
16937 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 4", tag_len);
16938 return tvb_captured_length(tvb);
16940 offset += add_ff_band_id(tree, tvb, pinfo, 1);
16941 offset += add_ff_band_id(tree, tvb, pinfo, 1);
16942 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_non_qos, tvb, offset, 1, ENC_NA);
16944 param_num = tvb_get_letohs(tvb, offset);
16945 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_param_num, tvb, offset, 1, ENC_NA);
16947 while(param_num > 0)
16949 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_switching_stream_flags, ENC_NA);
16953 return tvb_captured_length(tvb);
16957 ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
16958 proto_tree *tree, int tagged_parameters_len, int ftype,
16959 association_sanity_check_t *association_sanity_check)
16962 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
16963 while (tagged_parameters_len > 0) {
16964 /* TODO make callers optionally specify the list of valid IE IDs? */
16965 if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype, NULL, 0, association_sanity_check)) == 0)
16967 if (next_len > tagged_parameters_len) {
16968 /* XXX - flag this as an error? */
16969 next_len = tagged_parameters_len;
16971 offset += next_len;
16972 tagged_parameters_len -= next_len;
16977 ieee_80211_do_association_sanity_check(packet_info *pinfo, association_sanity_check_t *sanity_check)
16979 /* Given a [re-]association request frame, consider it in its totality and
16980 add expert information as appropriate */
16982 if (sanity_check->association_has_mobility_domain_element) {
16983 /* This is an FT association, warn about any non-FT AKM suites */
16984 if (sanity_check->has_non_ft_akm_suite) {
16985 expert_add_info_format(pinfo, sanity_check->rsn_first_non_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
16986 "Non-FT AKM suite is prohibited for FT association request");
16989 /* This is a non-FT association, warn about any FT AKM suites */
16990 if (sanity_check->has_ft_akm_suite) {
16991 expert_add_info_format(pinfo, sanity_check->rsn_first_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
16992 "FT AKM suite is prohibited for non-FT association request");
16997 /* ************************************************************************* */
16998 /* Dissect 802.11 management frame */
16999 /* ************************************************************************* */
17001 dissect_ieee80211_mgt(guint16 fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
17004 proto_tree *mgt_tree;
17005 proto_tree *fixed_tree;
17006 proto_tree *tagged_tree;
17008 int tagged_parameter_tree_len;
17010 association_sanity_check_t association_sanity_check;
17011 memset(&association_sanity_check, 0, sizeof(association_sanity_check));
17013 ieee80211_tvb_invalid = FALSE;
17015 ti = proto_tree_add_item(tree, proto_wlan, tvb, 0, -1, ENC_NA);
17016 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
17018 switch (COMPOSE_FRAME_TYPE(fcf))
17021 case MGT_ASSOC_REQ:
17022 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 4);
17023 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
17024 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
17025 offset = 4; /* Size of fixed fields */
17027 tagged_parameter_tree_len =
17028 tvb_reported_length_remaining(tvb, offset);
17029 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
17030 tagged_parameter_tree_len);
17031 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17032 tagged_parameter_tree_len, MGT_ASSOC_REQ, &association_sanity_check);
17033 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
17037 case MGT_ASSOC_RESP:
17038 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6);
17039 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
17040 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
17041 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
17042 offset = 6; /* Size of fixed fields */
17044 tagged_parameter_tree_len =
17045 tvb_reported_length_remaining(tvb, offset);
17046 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
17047 tagged_parameter_tree_len);
17048 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17049 tagged_parameter_tree_len, MGT_ASSOC_RESP, NULL);
17053 case MGT_REASSOC_REQ:
17054 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 10);
17055 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
17056 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
17057 add_ff_current_ap_addr(fixed_tree, tvb, pinfo, 4);
17058 offset = 10; /* Size of fixed fields */
17060 tagged_parameter_tree_len =
17061 tvb_reported_length_remaining(tvb, offset);
17062 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
17063 tagged_parameter_tree_len);
17064 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17065 tagged_parameter_tree_len, MGT_REASSOC_REQ, &association_sanity_check);
17066 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
17069 case MGT_REASSOC_RESP:
17070 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6);
17071 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
17072 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
17073 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
17074 offset = 6; /* Size of fixed fields */
17076 tagged_parameter_tree_len =
17077 tvb_reported_length_remaining(tvb, offset);
17078 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
17079 tagged_parameter_tree_len);
17080 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17081 tagged_parameter_tree_len, MGT_REASSOC_RESP, NULL);
17085 case MGT_PROBE_REQ:
17087 tagged_parameter_tree_len =
17088 tvb_reported_length_remaining(tvb, offset);
17089 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
17090 tagged_parameter_tree_len);
17091 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17092 tagged_parameter_tree_len, MGT_PROBE_REQ, NULL);
17095 case MGT_PROBE_RESP:
17097 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12);
17098 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
17099 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
17100 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
17101 offset = 12; /* Size of fixed fields */
17103 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
17104 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
17105 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_PROBE_RESP, NULL);
17108 case MGT_MEASUREMENT_PILOT:
17110 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12);
17111 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
17112 offset += add_ff_measurement_pilot_int(fixed_tree, tvb, pinfo, offset);
17113 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
17114 offset += add_ff_cap_info(fixed_tree, tvb, pinfo, offset);
17115 offset += add_ff_country_str(fixed_tree, tvb, pinfo, offset);
17116 offset += add_ff_max_reg_pwr(fixed_tree, tvb, pinfo, offset);
17117 offset += add_ff_max_tx_pwr(fixed_tree, tvb, pinfo, offset);
17118 offset += add_ff_tx_pwr_used(fixed_tree, tvb, pinfo, offset);
17119 offset += add_ff_transceiver_noise_floor(fixed_tree, tvb, pinfo, offset);
17120 /* TODO DS Parameter Set ??? */
17122 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
17123 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
17124 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_MEASUREMENT_PILOT, NULL);
17127 case MGT_BEACON: /* Dissect protocol payload fields */
17128 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12);
17129 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
17130 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
17131 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
17132 offset = 12; /* Size of fixed fields */
17134 tagged_parameter_tree_len =
17135 tvb_reported_length_remaining(tvb, offset);
17136 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
17137 tagged_parameter_tree_len);
17138 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17139 tagged_parameter_tree_len, MGT_BEACON, NULL);
17146 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2);
17147 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
17148 offset = 2; /* Size of fixed fields */
17149 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
17150 if (tagged_parameter_tree_len > 0) {
17151 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
17152 tagged_parameter_tree_len);
17153 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17154 tagged_parameter_tree_len, MGT_DISASS, NULL);
17158 case MGT_AUTHENTICATION:
17159 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6);
17160 add_ff_auth_alg(fixed_tree, tvb, pinfo, 0);
17161 add_ff_auth_trans_seq(fixed_tree, tvb, pinfo, 2);
17162 add_ff_status_code(fixed_tree, tvb, pinfo, 4);
17163 offset = 6; /* Size of fixed fields */
17165 tagged_parameter_tree_len =
17166 tvb_reported_length_remaining(tvb, offset);
17167 if (tagged_parameter_tree_len > 0)
17169 tagged_tree = get_tagged_parameter_tree(mgt_tree,
17172 tagged_parameter_tree_len);
17173 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17174 tagged_parameter_tree_len, MGT_AUTHENTICATION, NULL);
17178 case MGT_DEAUTHENTICATION:
17179 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2);
17180 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
17181 offset = 2; /* Size of fixed fields */
17182 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
17183 if (tagged_parameter_tree_len > 0) {
17184 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
17185 tagged_parameter_tree_len);
17186 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17187 tagged_parameter_tree_len, MGT_DEAUTHENTICATION, NULL);
17193 proto_item *lcl_fixed_hdr;
17194 proto_tree *lcl_fixed_tree;
17195 lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
17196 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0);
17198 proto_item_set_len(lcl_fixed_hdr, offset);
17199 if (ieee80211_tvb_invalid)
17200 break; /* Buffer not available for further processing */
17201 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
17202 if (tagged_parameter_tree_len > 0)
17204 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
17205 tagged_parameter_tree_len);
17206 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17207 tagged_parameter_tree_len, MGT_ACTION, NULL);
17211 case MGT_ACTION_NO_ACK:
17213 proto_item *lcl_fixed_hdr;
17214 proto_tree *lcl_fixed_tree;
17215 lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
17217 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0);
17219 proto_item_set_len(lcl_fixed_hdr, offset);
17220 if (ieee80211_tvb_invalid)
17221 break; /* Buffer not available for further processing */
17222 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
17223 if (tagged_parameter_tree_len > 0)
17225 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
17226 tagged_parameter_tree_len);
17227 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
17228 tagged_parameter_tree_len, MGT_ACTION_NO_ACK, NULL);
17232 case MGT_ARUBA_WLAN:
17234 proto_tree *aruba_tree;
17236 type = tvb_get_ntohs(tvb, offset);
17238 aruba_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, NULL, "Aruba Management");
17240 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba, tvb, offset, 2, ENC_BIG_ENDIAN);
17243 case 0x0003: /* MTU Size */
17244 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_mtu, tvb, offset, 2, ENC_BIG_ENDIAN);
17246 case 0x0005: /* HeartBeat Sequence */
17247 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_hb_seq, tvb, offset, 8, ENC_BIG_ENDIAN);
17256 set_src_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, const char *type)
17258 address ether_addr;
17260 set_address_tvb(ðer_addr, AT_ETHER, 6, tvb, offset);
17262 col_add_fstr(pinfo->cinfo, COL_RES_DL_SRC, "%s (%s)",
17263 address_with_resolution_to_str(wmem_packet_scope(), ðer_addr), type);
17267 set_dst_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, const char *type)
17269 address ether_addr;
17271 set_address_tvb(ðer_addr, AT_ETHER, 6, tvb, offset);
17273 col_add_fstr(pinfo->cinfo, COL_RES_DL_DST, "%s (%s)",
17274 address_with_resolution_to_str(wmem_packet_scope(), ðer_addr), type);
17278 crc32_802_tvb_padded(tvbuff_t *tvb, guint hdr_len, guint hdr_size, guint len)
17282 c_crc = crc32_ccitt_tvb(tvb, hdr_len);
17283 c_crc = crc32_ccitt_tvb_offset_seed(tvb, hdr_size, len, ~c_crc);
17294 /* ************************************************************************* */
17295 /* Dissect 802.11 frame */
17296 /* ************************************************************************* */
17298 * The 802.11n specification makes some fairly significant changes to the
17299 * layout of the MAC header. The first two bits of the MAC header are the
17300 * protocol version. You'd think that the 802.11 committee would have
17301 * bumped the version to indicate a different MAC layout, but NOOOO -- we
17302 * have to go digging for bits in various locations instead.
17305 dissect_ieee80211_common(tvbuff_t *tvb, packet_info *pinfo,
17306 proto_tree *tree, guint32 option_flags,
17307 struct ieee_802_11_phdr *phdr)
17309 guint16 fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
17311 guint16 seq_control;
17312 guint32 seq_number, frag_number;
17313 gboolean more_frags;
17314 proto_item *ti = NULL;
17315 proto_item *cw_item = NULL;
17316 proto_item *hidden_item;
17317 proto_tree *cw_tree = NULL;
17318 guint16 hdr_len, ohdr_len;
17319 guint16 htc_len = 0;
17321 gint len, reported_len, ivlen;
17322 gint sta_addr_offset = 0;
17323 const gchar *station_name;
17324 gboolean is_amsdu = 0;
17325 gboolean save_fragmented;
17327 guint8 octet1, octet2;
17328 char out_buff[SHORT_STR];
17331 const char *addr1_str = NULL;
17332 int addr1_hf = -1, addr1_hf_resolved = -1;
17334 const gchar *fts_str;
17335 gchar flag_str[] = "opmPRMFTC";
17337 guint16 qosoff = 0;
17338 guint16 qos_control = 0;
17339 gint meshctl_len = 0;
17341 guint16 meshoff = 0;
17342 static wlan_hdr_t whdrs[4];
17343 gboolean retransmitted;
17344 gboolean isDMG = (phdr->has_frequency ?
17345 IS_80211AD(phdr->frequency) :
17348 encap_t encap_type;
17349 proto_tree *hdr_tree = NULL;
17350 tvbuff_t *next_tvb = NULL;
17353 AIRPDCAP_KEY_ITEM used_key;
17355 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY, GINT_TO_POINTER(isDMG));
17359 col_set_str(pinfo->cinfo, COL_PROTOCOL, "802.11");
17360 col_clear(pinfo->cinfo, COL_INFO);
17362 fcf = FETCH_FCF(0);
17363 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf);
17364 whdr->type = frame_type_subtype;
17365 if (frame_type_subtype == CTRL_CONTROL_WRAPPER)
17366 ctrl_fcf = FETCH_FCF(10);
17370 fts_str = val_to_str_ext_const(frame_type_subtype, &frame_type_subtype_vals_ext,
17371 "Unrecognized (Reserved frame)");
17372 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
17375 # define FROM_TO_DS 3
17376 flags = FCF_FLAGS(fcf);
17377 more_frags = HAVE_FRAGMENTS(flags);
17379 for (ii = 0; ii < 8; ii++) {
17380 if (! (flags & 0x80 >> ii)) {
17381 flag_str[ii] = '.';
17385 switch (FCF_FRAME_TYPE (fcf)) {
17388 hdr_len = MGT_FRAME_HDR_LEN;
17389 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))) {
17391 * Management frames with the Order bit set have an HT Control field;
17392 * see 8.2.4.1.10 "Order field". If they're not HT frames, they should
17393 * never have the Order bit set.
17400 case CONTROL_FRAME:
17401 if (frame_type_subtype == CTRL_CONTROL_WRAPPER) {
17408 switch (COMPOSE_FRAME_TYPE (cw_fcf)) {
17410 case CTRL_BEAMFORM_RPT_POLL:
17414 case CTRL_VHT_NDP_ANNC:
17416 /* TODO: for now we only consider a single STA, add support for more */
17421 case CTRL_ACKNOWLEDGEMENT:
17431 case CTRL_GRANT_ACK:
17444 case CTRL_SSW_FEEDBACK:
17452 case CTRL_CFP_ENDACK:
17453 case CTRL_BLOCK_ACK_REQ:
17454 case CTRL_BLOCK_ACK:
17459 hdr_len += 4; /* XXX */
17465 hdr_len = (FCF_ADDR_SELECTOR(fcf) == DATA_ADDR_T4) ? DATA_LONG_HDR_LEN : DATA_SHORT_HDR_LEN;
17467 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS) && DATA_FRAME_IS_QOS(frame_type_subtype)) {
17470 hdr_len += 2; /* Include the QoS field in the header length */
17472 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))) {
17474 * QoS data frames with the Order bit set have an HT Control field;
17475 * see 8.2.4.1.10 "Order field". If they're not HT frames, they
17476 * should never have the Order bit set.
17483 * Does it look as if we have a mesh header?
17484 * Look at the Mesh Control subfield of the QoS field and at the
17485 * purported mesh flag fields.
17487 qos_control = tvb_get_letohs(tvb, qosoff);
17488 if (tvb_bytes_exist(tvb, hdr_len, 1)) {
17490 mesh_flags = tvb_get_guint8(tvb, meshoff);
17491 if (has_mesh_control(fcf, qos_control, mesh_flags)) {
17492 /* Yes, add the length of that in as well. */
17493 meshctl_len = find_mesh_control_length(mesh_flags);
17494 hdr_len += meshctl_len;
17500 case EXTENSION_FRAME:
17505 hdr_len = 4; /* XXX */
17510 * Some portions of this code calculate offsets relative to the end of the
17511 * header. But when the header has been padded to align the data this must
17512 * be done relative to true header size, not the padded/aligned value. To
17513 * simplify this work we stash the original header size in ohdr_len instead
17514 * of recalculating it every time we need it.
17516 ohdr_len = hdr_len;
17517 if (phdr->datapad) {
17519 * Add in Atheros padding between the 802.11 header and body.
17521 * XXX - would the mesh header be part of the header or the body
17522 * from the point of view of the Atheros adapters that insert
17523 * the padding, assuming they even recognize a mesh header?
17525 hdr_len = roundup2(hdr_len, 4);
17528 /* Add the FC and duration/id to the current tree */
17529 ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, hdr_len,
17530 "IEEE 802.11 %s", fts_str);
17531 hdr_tree = proto_item_add_subtree(ti, ett_80211);
17533 dissect_frame_control(hdr_tree, tvb, option_flags, 0, pinfo);
17534 dissect_durid(hdr_tree, tvb, frame_type_subtype, 2);
17536 switch (phdr->fcs_len)
17538 case 0: /* Definitely has no FCS */
17542 case 4: /* Definitely has an FCS */
17546 case -2: /* Data frames have no FCS, other frames may have an FCS */
17547 /* XXX: -2 currently used only in wiretap/netmon.c */
17548 if (FCF_FRAME_TYPE (fcf) == DATA_FRAME)
17550 else /* Management, Control, Extension */
17551 has_fcs = wlan_check_fcs;
17554 default: /* Don't know - use "wlan_check_fcs" */
17555 has_fcs = wlan_check_fcs;
17560 * Decode the part of the frame header that isn't the same for all
17567 switch (FCF_FRAME_TYPE (fcf))
17572 * All management frame types have the same header.
17574 set_address_tvb(&pinfo->dl_src, wlan_address_type, 6, tvb, 10);
17575 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
17576 set_address_tvb(&pinfo->dl_dst, wlan_address_type, 6, tvb, 4);
17577 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
17580 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, 16);
17581 copy_address_shallow(&whdr->src, &pinfo->dl_src);
17582 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
17584 seq_control = tvb_get_letohs(tvb, 22);
17585 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control);
17586 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control);
17588 col_append_fstr(pinfo->cinfo, COL_INFO,
17589 ", SN=%d", seq_number);
17591 col_append_fstr(pinfo->cinfo, COL_INFO,
17592 ", FN=%d", frag_number);
17596 const gchar *ra_da_name, *ta_sa_name, *bssid_name;
17598 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ra, tvb, 4, 6, ENC_NA);
17599 ra_da_name = tvb_get_ether_name(tvb, 4);
17600 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ra_resolved, tvb, 4, 6, ra_da_name);
17601 PROTO_ITEM_SET_HIDDEN(hidden_item);
17602 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_da, tvb, 4, 6, ENC_NA);
17603 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_da_resolved, tvb, 4, 6, ra_da_name);
17604 PROTO_ITEM_SET_HIDDEN(hidden_item);
17605 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, 10, 6, ENC_NA);
17606 ta_sa_name = tvb_get_ether_name(tvb, 10);
17607 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, 10, 6, ta_sa_name);
17608 PROTO_ITEM_SET_HIDDEN(hidden_item);
17609 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_sa, tvb, 10, 6, ENC_NA);
17610 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_sa_resolved, tvb, 10, 6, ta_sa_name);
17611 PROTO_ITEM_SET_HIDDEN(hidden_item);
17612 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, 16, 6, ENC_NA);
17613 bssid_name = tvb_get_ether_name(tvb, 16);
17614 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_bssid_resolved, tvb, 16, 6, bssid_name);
17615 PROTO_ITEM_SET_HIDDEN(hidden_item);
17617 /* FIXME: With mgmt frames FROM_TO_DS is always 0, perhaps compare address to bssid instead? */
17618 if ((flags & FROM_TO_DS) == FLAG_FROM_DS) { /* Receiver address */
17619 sta_addr_offset = 4;
17620 } else if ((flags & FROM_TO_DS) == FLAG_TO_DS) { /* Transmitter address */
17621 sta_addr_offset = 10;
17623 if (sta_addr_offset > 0) {
17624 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_staa, tvb, sta_addr_offset, 6, ENC_NA);
17625 station_name = tvb_get_ether_name(tvb, sta_addr_offset);
17626 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_staa_resolved, tvb, sta_addr_offset, 6, station_name);
17627 PROTO_ITEM_SET_HIDDEN(hidden_item);
17629 /* add items for wlan.addr filter */
17630 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
17631 PROTO_ITEM_SET_HIDDEN(hidden_item);
17632 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 4, 6, ra_da_name);
17633 PROTO_ITEM_SET_HIDDEN(hidden_item);
17634 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 10, 6, ENC_NA);
17635 PROTO_ITEM_SET_HIDDEN(hidden_item);
17636 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 10, 6, ta_sa_name);
17637 PROTO_ITEM_SET_HIDDEN(hidden_item);
17638 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 16, 6, ENC_NA);
17639 PROTO_ITEM_SET_HIDDEN(hidden_item);
17640 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 16, 6, bssid_name);
17641 PROTO_ITEM_SET_HIDDEN(hidden_item);
17642 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN);
17643 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN);
17647 case CONTROL_FRAME:
17650 * Control Wrapper frames insert themselves between address 1
17651 * and address 2 in a normal control frame. Process address 1
17652 * first, then handle the rest of the frame in dissect_control.
17654 if (frame_type_subtype == CTRL_CONTROL_WRAPPER) {
17655 offset = 10; /* FC + D/ID + Address 1 + CFC + HTC */
17656 ctrl_fcf = FETCH_FCF(10);
17657 ctrl_type_subtype = COMPOSE_FRAME_TYPE(ctrl_fcf);
17659 offset = 10; /* FC + D/ID + Address 1 */
17660 ctrl_type_subtype = frame_type_subtype;
17662 /* Added to disallow DMG STA to transfer packets of certain forbidden types. */
17663 switch (ctrl_type_subtype)
17667 case CTRL_CFP_ENDACK:
17668 if(isDMG == TRUE) {
17669 expert_add_info_format(pinfo, hdr_tree, &ei_ieee80211_dmg_subtype,
17670 "DMG STA shouldn't transmit control frame of type contention-free period end+ack");
17677 switch (ctrl_type_subtype)
17680 addr1_str = "BSSID";
17681 addr1_hf = hf_ieee80211_addr_bssid;
17682 addr1_hf_resolved = hf_ieee80211_addr_bssid_resolved;
17685 case CTRL_BEAMFORM_RPT_POLL:
17686 case CTRL_VHT_NDP_ANNC:
17693 case CTRL_GRANT_ACK:
17695 case CTRL_SSW_FEEDBACK:
17698 case CTRL_ACKNOWLEDGEMENT:
17700 case CTRL_CFP_ENDACK:
17701 case CTRL_BLOCK_ACK_REQ:
17702 case CTRL_BLOCK_ACK:
17704 addr1_hf = hf_ieee80211_addr_ra;
17705 addr1_hf_resolved = hf_ieee80211_addr_ra_resolved;
17711 if (!addr1_str) /* XXX - Should we throw some sort of error? */
17714 /* Add address 1 */
17715 set_dst_addr_cols(pinfo, tvb, 4, addr1_str);
17717 const gchar *ether_name = tvb_get_ether_name(tvb, 4);
17718 proto_tree_add_item(hdr_tree, addr1_hf, tvb, 4, 6, ENC_NA);
17719 hidden_item = proto_tree_add_string(hdr_tree, addr1_hf_resolved, tvb, 4, 6, ether_name);
17720 PROTO_ITEM_SET_HIDDEN(hidden_item);
17721 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
17722 PROTO_ITEM_SET_HIDDEN(hidden_item);
17723 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, 4, 6, ether_name);
17724 PROTO_ITEM_SET_HIDDEN(hidden_item);
17728 * Start shoving in other fields if needed.
17730 if (frame_type_subtype == CTRL_CONTROL_WRAPPER) {
17733 cw_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
17734 ett_cntrl_wrapper_fc, NULL, "Contained Frame Control");
17735 dissect_frame_control(cw_tree, tvb, 0, offset, pinfo);
17736 dissect_ht_control(hdr_tree, tvb, offset + 2);
17738 hdr_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
17739 ett_cntrl_wrapper_fc, &cw_item, "Carried Frame");
17741 expert_add_info_format(pinfo, cw_item, &ei_ieee80211_dmg_subtype,
17742 "DMG STA shouldn't transmit Control Wrapper frame");
17747 switch (ctrl_type_subtype)
17750 case CTRL_CFP_ENDACK:
17752 set_src_addr_cols(pinfo, tvb, offset, "BSSID");
17755 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17756 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17757 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17758 PROTO_ITEM_SET_HIDDEN(hidden_item);
17759 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17760 PROTO_ITEM_SET_HIDDEN(hidden_item);
17761 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17762 PROTO_ITEM_SET_HIDDEN(hidden_item);
17771 set_src_addr_cols(pinfo, tvb, offset, "TA");
17773 set_src_addr_cols(pinfo, tvb, offset, "BSSID");
17776 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17778 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17779 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17780 PROTO_ITEM_SET_HIDDEN(hidden_item);
17782 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, offset, 6, ENC_NA);
17783 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_bssid_resolved, tvb, offset, 6, ether_name);
17784 PROTO_ITEM_SET_HIDDEN(hidden_item);
17786 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17787 PROTO_ITEM_SET_HIDDEN(hidden_item);
17788 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17789 PROTO_ITEM_SET_HIDDEN(hidden_item);
17795 case CTRL_BEAMFORM_RPT_POLL:
17797 set_src_addr_cols(pinfo, tvb, offset, "TA");
17800 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17802 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17803 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17804 PROTO_ITEM_SET_HIDDEN(hidden_item);
17805 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17806 PROTO_ITEM_SET_HIDDEN(hidden_item);
17807 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17808 PROTO_ITEM_SET_HIDDEN(hidden_item);
17811 proto_tree_add_item(hdr_tree, hf_ieee80211_beamform_feedback_seg_retrans_bitmap, tvb, offset, 1, ENC_NA);
17816 case CTRL_VHT_NDP_ANNC:
17818 set_src_addr_cols(pinfo, tvb, offset, "TA");
17822 guint8 len_fcs = 0;
17823 proto_tree *dialog_token_tree;
17824 proto_item *dialog_token_item;
17825 proto_tree *sta_info_tree;
17826 proto_item *sta_info_item;
17827 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17829 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17830 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17831 PROTO_ITEM_SET_HIDDEN(hidden_item);
17832 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17833 PROTO_ITEM_SET_HIDDEN(hidden_item);
17834 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17835 PROTO_ITEM_SET_HIDDEN(hidden_item);
17838 dialog_token_item = proto_tree_add_item(hdr_tree, hf_ieee80211_vht_ndp_annc_token,
17839 tvb, offset, 1, ENC_NA);
17840 dialog_token_tree = proto_item_add_subtree(dialog_token_item, ett_vht_ndp_annc_token_tree);
17841 proto_tree_add_item(dialog_token_tree, hf_ieee80211_vht_ndp_annc_token_number,
17842 tvb, offset, 1, ENC_NA);
17843 proto_tree_add_item(dialog_token_tree, hf_ieee80211_vht_ndp_annc_token_reserved,
17844 tvb, offset, 1, ENC_NA);
17847 /* Check if there is FCS in the packet */
17851 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
17852 sta_info_item = proto_tree_add_item(hdr_tree, hf_ieee80211_vht_ndp_annc_sta_info,
17853 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17854 sta_info_tree = proto_item_add_subtree(sta_info_item, ett_vht_ndp_annc_sta_info_tree);
17855 proto_tree_add_item(sta_info_tree, hf_ieee80211_vht_ndp_annc_sta_info_aid12,
17856 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17857 proto_tree_add_item(sta_info_tree, hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
17858 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17860 sta_info = tvb_get_letohs(tvb, offset);
17862 if (sta_info & 0x1000)
17863 proto_tree_add_uint(sta_info_tree,
17864 hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
17865 tvb, offset, 2, sta_info);
17867 proto_tree_add_item(sta_info_tree, hf_ieee80211_vht_ndp_annc_sta_info_reserved,
17868 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17875 case CTRL_GRANT_ACK:
17877 case CTRL_SSW_FEEDBACK:
17885 set_src_addr_cols(pinfo, tvb, offset, "TA");
17888 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17889 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17890 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17891 PROTO_ITEM_SET_HIDDEN(hidden_item);
17892 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17893 PROTO_ITEM_SET_HIDDEN(hidden_item);
17894 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17895 PROTO_ITEM_SET_HIDDEN(hidden_item);
17901 case CTRL_CONTROL_WRAPPER:
17903 /* XXX - We shouldn't see this. Should we throw an error? */
17907 case CTRL_BLOCK_ACK_REQ:
17909 set_src_addr_cols(pinfo, tvb, offset, "TA");
17913 guint16 bar_control;
17914 guint8 block_ack_type;
17915 proto_item *bar_parent_item;
17916 proto_tree *bar_sub_tree;
17917 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
17919 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
17920 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
17921 PROTO_ITEM_SET_HIDDEN(hidden_item);
17922 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
17923 PROTO_ITEM_SET_HIDDEN(hidden_item);
17924 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
17925 PROTO_ITEM_SET_HIDDEN(hidden_item);
17928 bar_control = tvb_get_letohs(tvb, offset);
17929 /* According to the 802.11ad standard (28/12/12) there is need to find the
17930 * GCR subfield which isn't described, thus the black_ack_type calculations
17931 * should be changed.
17933 block_ack_type = (bar_control & 0x0006) >> 1;
17934 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_request_type, tvb,
17935 offset, 2, ENC_LITTLE_ENDIAN);
17936 bar_parent_item = proto_tree_add_item(hdr_tree,
17937 hf_ieee80211_block_ack_request_control, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17938 bar_sub_tree = proto_item_add_subtree(bar_parent_item,
17940 proto_tree_add_item(bar_sub_tree,
17941 hf_ieee80211_block_ack_control_ack_policy, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17942 proto_tree_add_item(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
17943 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17944 proto_tree_add_item(bar_sub_tree,
17945 hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 2,
17946 ENC_LITTLE_ENDIAN);
17947 proto_tree_add_item(bar_sub_tree, hf_ieee80211_block_ack_control_reserved,
17948 tvb, offset, 2, ENC_LITTLE_ENDIAN);
17950 switch (block_ack_type)
17952 case 0: /*Basic BlockAckReq */
17954 if(isDMG == TRUE) {
17955 expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
17956 "DMG STA shouldn't transmit BlockAckReq frame with Basic BlockAckReq");
17959 proto_tree_add_item(bar_sub_tree,
17960 hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17963 /*offset +=*/ add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17966 case 1: /* Extended Compressesd BlockAckReq */
17967 if(isDMG == FALSE) {
17968 expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
17969 "Non-DMG STA shouldn't transmit BlockAckReq frame with Extended Compressed BlockAckReq");
17973 case 2: /* Compressed BlockAckReq */
17975 proto_tree_add_item(bar_sub_tree,
17976 hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17979 /*offset +=*/ add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
17982 case 3: /* Multi-TID BlockAckReq */
17986 proto_tree *bar_mtid_tree, *bar_mtid_sub_tree;
17988 if(isDMG == TRUE) {
17989 expert_add_info_format(pinfo, bar_sub_tree, &ei_ieee80211_dmg_subtype,
17990 "DMG STA shouldn't transmit BlockAckReq frame with Basic BlockAckReq");
17994 tid_count = ((bar_control & 0xF000) >> 12) + 1;
17995 proto_tree_add_uint(bar_sub_tree, hf_ieee80211_block_ack_control_multi_tid_info, tvb, offset, 2, tid_count);
17998 bar_mtid_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, tid_count*4, ett_block_ack, NULL, "Per TID Info");
17999 for (iii = 0; iii < tid_count; iii++) {
18000 bar_parent_item = proto_tree_add_uint(bar_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, iii);
18001 bar_mtid_sub_tree = proto_item_add_subtree(bar_parent_item, ett_block_ack);
18003 proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
18004 proto_tree_add_item(bar_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
18007 offset += add_ff_block_ack_ssc(bar_mtid_sub_tree, tvb, pinfo, offset);
18016 case CTRL_BLOCK_ACK:
18018 set_src_addr_cols(pinfo, tvb, offset, "TA");
18022 guint16 ba_control;
18023 guint8 block_ack_type;
18024 proto_item *ba_parent_item;
18025 proto_tree *ba_sub_tree;
18026 const gchar *ether_name = tvb_get_ether_name(tvb, offset);
18028 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, offset, 6, ENC_NA);
18029 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, offset, 6, ether_name);
18030 PROTO_ITEM_SET_HIDDEN(hidden_item);
18031 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, offset, 6, ENC_NA);
18032 PROTO_ITEM_SET_HIDDEN(hidden_item);
18033 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, offset, 6, ether_name);
18034 PROTO_ITEM_SET_HIDDEN(hidden_item);
18037 ba_control = tvb_get_letohs(tvb, offset);
18038 block_ack_type = (ba_control & 0x0006) >> 1;
18039 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
18040 ba_parent_item = proto_tree_add_item(hdr_tree,
18041 hf_ieee80211_block_ack_control, tvb, offset, 2, ENC_LITTLE_ENDIAN);
18042 ba_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
18043 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_ack_policy,
18044 tvb, offset, 2, ENC_LITTLE_ENDIAN);
18045 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_multi_tid,
18046 tvb, offset, 2, ENC_LITTLE_ENDIAN);
18047 proto_tree_add_item(ba_sub_tree,
18048 hf_ieee80211_block_ack_control_compressed_bitmap, tvb, offset, 2,
18049 ENC_LITTLE_ENDIAN);
18050 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_reserved, tvb,
18051 offset, 2, ENC_LITTLE_ENDIAN);
18053 switch (block_ack_type)
18055 case 0: /*Basic BlockAck */
18057 proto_tree_add_item(ba_sub_tree,
18058 hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
18061 offset += add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
18062 proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 128, ENC_NA);
18066 /* Added to support Extended Compressed BlockAck RBUFCAP subfield.*/
18067 case 1: /* Extended Compressed BlockAck */
18072 proto_item *ba_bitmap_item;
18073 proto_tree *ba_bitmap_tree;
18074 if(isDMG == FALSE) {
18075 expert_add_info_format(pinfo, ba_sub_tree, &ei_ieee80211_dmg_subtype,
18076 "Non-DMG STA shouldn't transmit BlockAck frame with Extended Compressed BlockAck");
18079 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
18082 ssn = tvb_get_letohs(tvb, offset);
18084 offset += add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
18085 bmap = tvb_get_letoh64(tvb, offset);
18086 ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
18087 ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap);
18088 for (f = 0; f < 64; f++) {
18089 if (bmap & (G_GUINT64_CONSTANT(1) << f))
18091 proto_tree_add_uint(ba_bitmap_tree, hf_ieee80211_block_ack_bitmap_missing_frame,
18092 tvb, offset + (f/8), 1, ssn + f);
18095 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_RBUFCAP, tvb, offset, 1, ENC_LITTLE_ENDIAN);
18099 case 2: /* Compressed BlockAck */
18104 proto_item *ba_bitmap_item;
18105 proto_tree *ba_bitmap_tree;
18107 proto_tree_add_item(ba_sub_tree, hf_ieee80211_block_ack_control_basic_tid_info, tvb, offset, 2, ENC_LITTLE_ENDIAN);
18110 ssn = tvb_get_letohs(tvb, offset);
18112 offset += add_ff_block_ack_ssc(hdr_tree, tvb, pinfo, offset);
18113 bmap = tvb_get_letoh64(tvb, offset);
18114 ba_bitmap_item = proto_tree_add_item(hdr_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
18115 ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item, ett_block_ack_bitmap);
18116 for (f = 0; f < 64; f++) {
18117 if (bmap & (G_GUINT64_CONSTANT(1) << f))
18119 proto_tree_add_uint_format_value(ba_bitmap_tree, hf_ieee80211_block_ack_bitmap_missing_frame,
18120 tvb, offset + (f/8), 1, ssn + f, "%u", (ssn + f) & 0x0fff);
18125 case 3: /* Multi-TID BlockAck */
18129 proto_tree *ba_mtid_tree, *ba_mtid_sub_tree;
18131 tid_count = ((ba_control & 0xF000) >> 12) + 1;
18132 proto_tree_add_uint(ba_sub_tree,
18133 hf_ieee80211_block_ack_control_compressed_tid_info, tvb, offset, 2, tid_count);
18136 ba_mtid_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, tid_count*4, ett_block_ack, NULL, "Per TID Info");
18137 for (iii = 0; iii < tid_count; iii++) {
18138 ba_parent_item = proto_tree_add_uint(ba_mtid_tree, hf_ieee80211_block_ack_multi_tid_info, tvb, offset, 4, iii);
18139 ba_mtid_sub_tree = proto_item_add_subtree(ba_parent_item, ett_block_ack);
18141 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
18142 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
18145 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
18146 proto_tree_add_item(ba_mtid_sub_tree, hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA);
18157 * 802.11ad : Used for extension types.
18159 switch (ctrl_type_subtype) {
18161 proto_tree_add_item(hdr_tree, hf_ieee80211_cf_response_offset,
18162 tvb, offset, 2, ENC_LITTLE_ENDIAN);
18167 case CTRL_GRANT_ACK:
18170 if(ctrl_type_subtype != CTRL_GRANT_ACK) {
18171 offset += add_ff_dynamic_allocation(hdr_tree, tvb, pinfo, offset);
18172 } else { /* CTRL_GRANT_ACK have 5 octets that are reserved*/
18173 proto_tree_add_item(hdr_tree, hf_ieee80211_grant_ack_reserved, tvb, offset, 5, ENC_NA);
18176 isGrant = ((ctrl_type_subtype==CTRL_GRANT)||(ctrl_type_subtype==CTRL_GRANT_ACK));
18177 add_ff_beamforming_ctrl(hdr_tree, tvb, pinfo, offset, isGrant);
18182 guint32 sector_sweep;
18184 sector_sweep = tvb_get_letoh24(tvb, offset);
18185 offset += add_ff_sector_sweep(hdr_tree, tvb, pinfo, offset);
18186 /* if Sector Sweep Direction = Responder, use SW Feedback field format when not transmitted as part of an ISS */
18187 if(sector_sweep & 0x00001) {
18188 add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
18190 add_ff_sector_sweep_feedback_from_iss(hdr_tree, tvb, pinfo, offset);
18196 case CTRL_SSW_FEEDBACK: {
18197 offset += add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
18198 offset += add_ff_BRP_request(hdr_tree, tvb, pinfo, offset);
18199 add_ff_beamformed_link(hdr_tree, tvb, pinfo, offset);
18203 case CTRL_DMG_DTS: {
18204 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_sa, tvb, offset, 6, ENC_NA);
18206 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_da, tvb, offset, 6, ENC_NA);
18218 guint32 ra_offset, da_offset, sa_offset, ta_offset, bssid_offset;
18219 addr_type = FCF_ADDR_SELECTOR(fcf);
18221 /* In order to show src/dst address we must always do the following */
18258 /* Should never happen? */
18269 set_address_tvb(&pinfo->dl_src, wlan_address_type, 6, tvb, sa_offset);
18270 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
18271 set_address_tvb(&pinfo->dl_dst, wlan_address_type, 6, tvb, da_offset);
18272 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
18275 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, bssid_offset);
18277 copy_address_shallow(&whdr->src, &pinfo->dl_src);
18278 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
18280 seq_control = tvb_get_letohs(tvb, 22);
18281 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control);
18282 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control);
18284 col_append_fstr(pinfo->cinfo, COL_INFO,
18285 ", SN=%d, FN=%d", seq_number, frag_number);
18287 /* Now if we have a tree we start adding stuff */
18290 const gchar *ra_name, *ta_name, *sa_name, *da_name, *bssid_name = NULL;
18298 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ra, tvb, ra_offset, 6, ENC_NA);
18299 ra_name = tvb_get_ether_name(tvb, ra_offset);
18300 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ra_resolved, tvb, ra_offset, 6, ra_name);
18301 PROTO_ITEM_SET_HIDDEN(hidden_item);
18303 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_da, tvb, da_offset, 6, ENC_NA);
18304 da_name = tvb_get_ether_name(tvb, da_offset);
18305 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_da_resolved, tvb, da_offset, 6, da_name);
18306 PROTO_ITEM_SET_HIDDEN(hidden_item);
18308 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_ta, tvb, ta_offset, 6, ENC_NA);
18309 ta_name = tvb_get_ether_name(tvb, ta_offset);
18310 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_ta_resolved, tvb, ta_offset, 6, ta_name);
18311 PROTO_ITEM_SET_HIDDEN(hidden_item);
18313 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_sa, tvb, sa_offset, 6, ENC_NA);
18314 sa_name = tvb_get_ether_name(tvb, sa_offset);
18315 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_sa_resolved, tvb, sa_offset, 6, sa_name);
18316 PROTO_ITEM_SET_HIDDEN(hidden_item);
18318 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, bssid_offset, 6, ENC_NA);
18319 bssid_name = tvb_get_ether_name(tvb, bssid_offset);
18320 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_bssid_resolved, tvb, bssid_offset, 6, bssid_name);
18321 PROTO_ITEM_SET_HIDDEN(hidden_item);
18323 if ((flags & FROM_TO_DS) == FLAG_FROM_DS) { /* Receiver address */
18324 sta_addr_offset = ra_offset;
18325 } else if ((flags & FROM_TO_DS) == FLAG_TO_DS) { /* Transmitter address */
18326 sta_addr_offset = ta_offset;
18328 if (sta_addr_offset > 0) {
18329 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_staa, tvb, sta_addr_offset, 6, ENC_NA);
18330 station_name = tvb_get_ether_name(tvb, sta_addr_offset);
18331 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_staa_resolved, tvb, sta_addr_offset, 6, station_name);
18332 PROTO_ITEM_SET_HIDDEN(hidden_item);
18334 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN);
18335 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN);
18337 /* add items for wlan.addr filter */
18338 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, ra_offset, 6, ENC_NA);
18339 PROTO_ITEM_SET_HIDDEN(hidden_item);
18340 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, ra_offset, 6, ra_name);
18341 PROTO_ITEM_SET_HIDDEN(hidden_item);
18342 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, ta_offset, 6, ENC_NA);
18343 PROTO_ITEM_SET_HIDDEN(hidden_item);
18344 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, ta_offset, 6, ta_name);
18345 PROTO_ITEM_SET_HIDDEN(hidden_item);
18346 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, sa_offset, 6, ENC_NA);
18347 PROTO_ITEM_SET_HIDDEN(hidden_item);
18348 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, sa_offset, 6, sa_name);
18349 PROTO_ITEM_SET_HIDDEN(hidden_item);
18350 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, da_offset, 6, ENC_NA);
18351 PROTO_ITEM_SET_HIDDEN(hidden_item);
18352 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, da_offset, 6, da_name);
18353 PROTO_ITEM_SET_HIDDEN(hidden_item);
18354 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, bssid_offset, 6, ENC_NA);
18355 PROTO_ITEM_SET_HIDDEN(hidden_item);
18356 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_resolved, tvb, bssid_offset, 6, bssid_name);
18357 PROTO_ITEM_SET_HIDDEN(hidden_item);
18364 case EXTENSION_FRAME: {
18365 switch (frame_type_subtype) {
18366 case EXTENSION_DMG_BEACON: {
18367 set_dst_addr_cols(pinfo, tvb, 4, "BSSID");
18369 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_bssid, tvb, 4, 6, ENC_NA);
18370 hidden_item = proto_tree_add_item(hdr_tree, hf_ieee80211_addr, tvb, 4, 6, ENC_NA);
18371 PROTO_ITEM_SET_HIDDEN(hidden_item);
18379 len = tvb_captured_length_remaining(tvb, hdr_len);
18380 reported_len = tvb_reported_length_remaining(tvb, hdr_len);
18385 * Well, this packet should, in theory, have an FCS.
18386 * Do we have the entire packet, and does it have enough data for
18389 if (reported_len < 4)
18392 * The packet is claimed not to even have enough data for a 4-byte
18394 * Pretend it doesn't have an FCS.
18398 else if (len < reported_len)
18401 * The packet is claimed to have enough data for a 4-byte FCS, but
18402 * we didn't capture all of the packet.
18403 * Slice off the 4-byte FCS from the reported length, and trim the
18404 * captured length so it's no more than the reported length; that
18405 * will slice off what of the FCS, if any, is in the captured
18409 if (len > reported_len)
18410 len = reported_len;
18415 * We have the entire packet, and it includes a 4-byte FCS.
18416 * Slice it off, and put it into the tree.
18420 if (wlan_check_checksum)
18422 guint32 sent_fcs = tvb_get_letohl(tvb, hdr_len + len);
18426 fcs = crc32_802_tvb_padded(tvb, ohdr_len, hdr_len, len);
18428 fcs = crc32_ccitt_tvb(tvb, hdr_len + len);
18429 if (fcs != sent_fcs) {
18433 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);
18435 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);
18441 flag_str[8] = '\0';
18444 proto_item_append_text(ti, ", Flags: %s", flag_str);
18445 col_append_fstr(pinfo->cinfo, COL_INFO, ", Flags=%s", flag_str);
18449 * Only management and data frames have a body, so we don't have
18450 * anything more to do for other types of frames.
18452 switch (FCF_FRAME_TYPE (fcf))
18456 if (htc_len == 4) {
18457 dissect_ht_control(hdr_tree, tvb, ohdr_len - 4);
18462 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS) && tree && DATA_FRAME_IS_QOS(frame_type_subtype))
18464 proto_item *qos_fields, *qos_ti;
18465 proto_tree *qos_tree;
18468 guint16 qos_field_content;
18470 qos_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_qos, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18471 qos_tree = proto_item_add_subtree(qos_fields, ett_qos_parameters);
18473 qos_eosp = QOS_EOSP(qos_control);
18474 qos_field_content = QOS_FIELD_CONTENT(qos_control);
18476 proto_tree_add_item(qos_tree, hf_ieee80211_qos_tid, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18478 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_priority, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18479 PROTO_ITEM_SET_GENERATED(qos_ti);
18481 if (FLAGS_DS_STATUS(flags) == (FLAG_FROM_DS|FLAG_TO_DS)) {
18483 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18485 if (flags & FLAG_TO_DS) {
18486 proto_tree_add_item(qos_tree, hf_ieee80211_qos_bit4, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18488 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18492 proto_tree_add_item(qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18494 if (flags & FLAG_FROM_DS) {
18495 if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
18496 proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18497 is_amsdu = QOS_AMSDU_PRESENT(qos_control);
18499 if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)) {
18501 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_limit, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18502 if (qos_field_content == 0) {
18503 proto_item_append_text(qos_ti, " (transmit one frame immediately)");
18506 /* qap ps buffer state */
18507 proto_item *qos_ps_buf_state_fields;
18508 proto_tree *qos_ps_buf_state_tree;
18510 qos_ps_buf_state_fields = proto_tree_add_item(qos_tree, hf_ieee80211_qos_ps_buf_state, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18511 qos_ps_buf_state_tree = proto_item_add_subtree(qos_ps_buf_state_fields, ett_qos_ps_buf_state);
18513 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18515 if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)) {
18516 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18517 qos_ti = proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18518 switch (QOS_PS_QAP_BUF_LOAD(qos_field_content)) {
18521 proto_item_append_text(qos_ti, " (no buffered traffic)");
18525 proto_item_append_text(qos_ti, " (%d octets)", QOS_PS_QAP_BUF_LOAD(qos_field_content)*4096);
18529 proto_item_append_text(qos_ti, " (greater than 57344 octets)");
18536 if (!DATA_FRAME_IS_NULL(frame_type_subtype)) {
18537 proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18538 is_amsdu = QOS_AMSDU_PRESENT(qos_control);
18542 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_queue_size, tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18543 switch (qos_field_content) {
18545 proto_item_append_text(qos_ti, " (no buffered traffic in the queue)");
18549 proto_item_append_text(qos_ti, " (%u bytes)", qos_field_content*256);
18553 proto_item_append_text(qos_ti, " (more than 64768 octets)");
18557 proto_item_append_text(qos_ti, " (unspecified or unknown)");
18561 /* txop duration requested */
18562 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_dur_req,
18563 tvb, qosoff, 2, ENC_LITTLE_ENDIAN);
18564 if (qos_field_content == 0) {
18565 proto_item_append_text(qos_ti, " (no TXOP requested)");
18570 /* Do we have +HTC? */
18571 if (htc_len == 4) {
18572 dissect_ht_control(hdr_tree, tvb, ohdr_len - 4);
18575 if (meshctl_len != 0) {
18576 proto_item *msh_fields;
18577 proto_tree *msh_tree;
18579 msh_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_mesh_control_field, tvb, meshoff, meshctl_len, ENC_NA);
18580 msh_tree = proto_item_add_subtree(msh_fields, ett_msh_control);
18581 add_ff_mesh_control(msh_tree, tvb, pinfo, meshoff);
18584 } /* end of qos control field */
18585 if (enable_decryption && !pinfo->fd->flags.visited) {
18586 const guint8 *enc_data = tvb_get_ptr(tvb, 0, hdr_len+reported_len);
18587 /* The processing will take care of 4-way handshake sessions for WPA and WPA2 decryption */
18588 AirPDcapPacketProcess(&airpdcap_ctx, enc_data, hdr_len, hdr_len+reported_len, NULL, 0, NULL, TRUE);
18592 * No-data frames don't have a body.
18594 if (DATA_FRAME_IS_NULL(frame_type_subtype))
18597 if (!wlan_subdissector) {
18601 * data: last seq_control seen and frame number
18603 retransmitted = FALSE;
18604 if (!pinfo->fd->flags.visited) {
18605 retransmit_key key;
18606 retransmit_key *result;
18608 memcpy(key.bssid, whdr->bssid.data, 6);
18609 memcpy(key.src, whdr->src.data, 6);
18610 key.seq_control = 0;
18611 result = (retransmit_key *)g_hash_table_lookup(fc_analyse_retransmit_table, &key);
18612 if (result && (result->seq_control == seq_control)) {
18613 /* keep a pointer to the first seen frame, could be done with proto data? */
18614 fnum = result->fnum;
18615 g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER(pinfo->num),
18616 GINT_TO_POINTER(fnum));
18617 retransmitted = TRUE;
18619 /* first time or new seq*/
18621 result = wmem_new(wmem_file_scope(), retransmit_key);
18623 g_hash_table_insert(fc_analyse_retransmit_table, result, result);
18625 result->seq_control = seq_control;
18626 result->fnum = pinfo->num;
18629 else if ((fnum = GPOINTER_TO_UINT(g_hash_table_lookup(fc_first_frame_table, GINT_TO_POINTER(pinfo->num))))) {
18630 retransmitted = TRUE;
18633 if (retransmitted) {
18634 col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
18638 item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0,
18639 "Retransmitted frame");
18640 PROTO_ITEM_SET_GENERATED(item);
18641 item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame, tvb, 0, 0, fnum);
18642 PROTO_ITEM_SET_GENERATED(item);
18644 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
18645 call_data_dissector(next_tvb, pinfo, tree);
18652 case CONTROL_FRAME:
18655 case EXTENSION_FRAME:
18662 if (IS_PROTECTED(FCF_FLAGS(fcf))
18663 && !phdr->decrypted
18664 && (wlan_ignore_prot != WLAN_IGNORE_PROT_WO_IV)) {
18666 * It's a WEP or WPA encrypted frame, and it hasn't already been
18667 * decrypted; dissect the protections parameters and decrypt the data,
18668 * if we have a matching key. Otherwise display it as data.
18670 gboolean can_decrypt = FALSE;
18671 proto_tree *wep_tree = NULL;
18673 guint8 key, keybyte;
18675 #define PROTECTION_ALG_WEP AIRPDCAP_KEY_TYPE_WEP
18676 #define PROTECTION_ALG_TKIP AIRPDCAP_KEY_TYPE_TKIP
18677 #define PROTECTION_ALG_CCMP AIRPDCAP_KEY_TYPE_CCMP
18678 #define PROTECTION_ALG_RSNA PROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP
18679 guint8 algorithm=G_MAXUINT8;
18680 #define IS_TKIP(tvb, hdr_len) (tvb_get_guint8(tvb, hdr_len + 1) == \
18681 ((tvb_get_guint8(tvb, hdr_len) | 0x20) & 0x7f))
18682 #define IS_CCMP(tvb, hdr_len) (tvb_get_guint8(tvb, hdr_len + 2) == 0)
18683 guint32 sec_header=0;
18684 guint32 sec_trailer=0;
18686 next_tvb = try_decrypt(tvb, pinfo, hdr_len, reported_len, &algorithm, &sec_header, &sec_trailer, &used_key);
18688 keybyte = tvb_get_guint8(tvb, hdr_len + 3);
18689 key = KEY_OCTET_WEP_KEY(keybyte);
18690 if ((keybyte & KEY_EXTIV) && (len >= EXTIV_LEN)) {
18691 /* Extended IV; this frame is likely encrypted with TKIP or CCMP */
18693 if (algorithm==PROTECTION_ALG_TKIP)
18694 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
18695 ett_wep_parameters, NULL, "TKIP parameters");
18696 else if (algorithm==PROTECTION_ALG_CCMP)
18697 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
18698 ett_wep_parameters, NULL, "CCMP parameters");
18700 if (IS_TKIP(tvb, hdr_len)) {
18701 algorithm=PROTECTION_ALG_TKIP;
18702 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
18703 ett_wep_parameters, NULL, "TKIP parameters");
18704 } else if (IS_CCMP(tvb, hdr_len)) {
18705 algorithm=PROTECTION_ALG_CCMP;
18706 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
18707 ett_wep_parameters, NULL, "CCMP parameters");
18709 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
18710 ett_wep_parameters, NULL, "TKIP/CCMP parameters");
18712 proto_item_set_len(ti, hdr_len + 8);
18714 if (algorithm==PROTECTION_ALG_TKIP) {
18715 g_snprintf(out_buff, SHORT_STR, "0x%08X%02X%02X",
18716 tvb_get_letohl(tvb, hdr_len + 4),
18717 tvb_get_guint8(tvb, hdr_len),
18718 tvb_get_guint8(tvb, hdr_len + 2));
18719 proto_tree_add_string(wep_tree, hf_ieee80211_tkip_extiv, tvb, hdr_len,
18720 EXTIV_LEN, out_buff);
18721 } else if (algorithm==PROTECTION_ALG_CCMP) {
18722 g_snprintf(out_buff, SHORT_STR, "0x%08X%02X%02X",
18723 tvb_get_letohl(tvb, hdr_len + 4),
18724 tvb_get_guint8(tvb, hdr_len + 1),
18725 tvb_get_guint8(tvb, hdr_len));
18726 proto_tree_add_string(wep_tree, hf_ieee80211_ccmp_extiv, tvb, hdr_len,
18727 EXTIV_LEN, out_buff);
18730 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
18733 /* Subtract out the length of the IV. */
18735 reported_len -= EXTIV_LEN;
18737 /* It is unknown whether this is TKIP or CCMP, so let's not even try to
18738 * parse TKIP Michael MIC+ICV or CCMP MIC. */
18740 /* checking for the trailer */
18741 if (next_tvb!=NULL) {
18742 if (reported_len < (gint) sec_trailer) {
18743 /* There is no space for a trailer, ignore it and don't decrypt */
18745 } else if (len < reported_len) {
18746 /* There is space for a trailer, but we haven't capture all the */
18747 /* packet. Slice off the trailer, but don't try to decrypt */
18748 reported_len -= sec_trailer;
18749 if (len > reported_len)
18750 len = reported_len;
18752 /* Ok, we have a trailer and the whole packet. Decrypt it! */
18753 /* TODO: At the moment we won't add the trailer to the tree, */
18754 /* so don't remove the trailer from the packet */
18755 len -= sec_trailer;
18756 reported_len -= sec_trailer;
18757 can_decrypt = TRUE;
18759 /* Add Key information to packet */
18760 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 */
18761 out_buff[2*AIRPDCAP_TK_LEN] = '\0';
18763 if (key == 0) { /* encrypted with pairwise key */
18764 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_tk, tvb, 0, 0, out_buff);
18765 PROTO_ITEM_SET_GENERATED(ti);
18767 /* Also add the PMK used to to decrypt the packet. (PMK==PSK) */
18768 bytes_to_hexstr(out_buff, used_key.KeyData.Wpa.Psk, AIRPDCAP_WPA_PSK_LEN); /* 32 bytes */
18769 out_buff[2*AIRPDCAP_WPA_PSK_LEN] = '\0';
18770 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_pmk, tvb, 0, 0, out_buff);
18771 PROTO_ITEM_SET_GENERATED(ti);
18773 } else { /* Encrypted with Group Key */
18774 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 */
18775 PROTO_ITEM_SET_GENERATED(ti);
18780 /* No Ext. IV - WEP packet */
18782 * XXX - pass the IV and key to "try_decrypt_wep()", and have it pass
18783 * them to "wep_decrypt()", rather than having "wep_decrypt()" extract
18786 * Also, just pass the data *following* the WEP parameters as the
18787 * buffer to decrypt.
18789 iv = tvb_get_ntoh24(tvb, hdr_len);
18791 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 4,
18792 ett_wep_parameters, NULL, "WEP parameters");
18794 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_iv, tvb, hdr_len, 3, iv);
18795 tvb_memcpy(tvb, iv_buff, hdr_len, 3);
18796 is_iv_bad = weak_iv(iv_buff);
18797 if (is_iv_bad != -1) {
18798 proto_tree_add_boolean_format (wep_tree, hf_ieee80211_wep_iv_weak,
18800 "Weak IV for key byte %d",
18805 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, key);
18807 /* Subtract out the length of the IV. */
18812 /* Even if the decryption was not successful, set the algorithm */
18813 algorithm=PROTECTION_ALG_WEP;
18816 * Well, this packet should, in theory, have an ICV.
18817 * Do we have the entire packet, and does it have enough data for
18820 if (reported_len < 4) {
18822 * The packet is claimed not to even have enough data for a
18824 * Pretend it doesn't have an ICV.
18827 } else if (len < reported_len) {
18829 * The packet is claimed to have enough data for a 4-byte ICV,
18830 * but we didn't capture all of the packet.
18831 * Slice off the 4-byte ICV from the reported length, and trim
18832 * the captured length so it's no more than the reported length;
18833 * that will slice off what of the ICV, if any, is in the
18837 if (len > reported_len)
18838 len = reported_len;
18841 * We have the entire packet, and it includes a 4-byte ICV.
18842 * Slice it off, and put it into the tree.
18844 * We only support decrypting if we have the the ICV.
18846 * XXX - the ICV is encrypted; we're putting the encrypted
18847 * value, not the decrypted value, into the tree.
18851 can_decrypt = TRUE;
18855 if (algorithm == PROTECTION_ALG_WEP) {
18856 g_strlcpy(wlan_stats.protection, "WEP", MAX_PROTECT_LEN);
18857 } else if (algorithm == PROTECTION_ALG_TKIP) {
18858 g_strlcpy(wlan_stats.protection, "TKIP", MAX_PROTECT_LEN);
18859 } else if (algorithm == PROTECTION_ALG_CCMP) {
18860 g_strlcpy(wlan_stats.protection, "CCMP", MAX_PROTECT_LEN);
18862 g_strlcpy(wlan_stats.protection, "Unknown", MAX_PROTECT_LEN);
18865 /* protection header */
18866 if (!can_decrypt || (next_tvb == NULL)) {
18868 * WEP decode impossible or failed, treat payload as raw data
18869 * and don't attempt fragment reassembly or further dissection.
18871 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len + ivlen, len, reported_len);
18874 if (algorithm == PROTECTION_ALG_WEP) {
18876 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
18877 hdr_len + ivlen + len, 4,
18878 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
18879 "0x%08x (not verified)",
18880 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
18881 } else if (algorithm == PROTECTION_ALG_CCMP) {
18882 } else if (algorithm == PROTECTION_ALG_TKIP) {
18886 if ((!(option_flags & IEEE80211_COMMON_OPT_IS_CENTRINO)) && (wlan_ignore_prot == WLAN_IGNORE_PROT_NO)) {
18887 /* Some wireless drivers (such as Centrino) WEP payload already decrypted */
18888 call_data_dissector(next_tvb, pinfo, tree);
18892 if (algorithm == PROTECTION_ALG_WEP) {
18894 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
18895 hdr_len + ivlen + len, 4,
18896 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
18897 "0x%08x (correct)",
18898 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
18900 add_new_data_source(pinfo, next_tvb, "Decrypted WEP data");
18901 } else if (algorithm==PROTECTION_ALG_CCMP) {
18902 add_new_data_source(pinfo, next_tvb, "Decrypted CCMP data");
18903 } else if (algorithm==PROTECTION_ALG_TKIP) {
18904 add_new_data_source(pinfo, next_tvb, "Decrypted TKIP data");
18908 #undef PROTECTION_ALG_CCMP
18909 #undef PROTECTION_ALG_TKIP
18910 #undef PROTECTION_ALG_WEP
18914 * WEP decryption successful!
18916 * Use the tvbuff we got back from the decryption; the data starts at
18917 * the beginning. The lengths are already correct for the decoded WEP
18924 * Not a WEP-encrypted frame; just use the data from the tvbuff
18927 * The payload starts at "hdr_len" (i.e., just past the 802.11
18928 * MAC header), the length of data in the tvbuff following the
18929 * 802.11 header is "len", and the length of data in the packet
18930 * following the 802.11 header is "reported_len".
18936 * Do defragmentation if "wlan_defragment" is true, and we have more
18937 * fragments or this isn't the first fragment.
18939 * We have to do some special handling to catch frames that
18940 * have the "More Fragments" indicator not set but that
18941 * don't show up as reassembled and don't have any other
18942 * fragments present. Some networking interfaces appear
18943 * to do reassembly even when you're capturing raw packets
18944 * *and* show the reassembled packet without the "More
18945 * Fragments" indicator set *but* with a non-zero fragment
18948 * "fragment_add_seq_802_11()" handles that; we want to call it
18949 * even if we have a short frame, so that it does those checks - if
18950 * the frame is short, it doesn't do reassembly on it.
18952 * (This could get some false positives if we really *did* only
18953 * capture the last fragment of a fragmented packet, but that's
18956 save_fragmented = pinfo->fragmented;
18957 if (wlan_defragment && (more_frags || (frag_number != 0))) {
18958 fragment_head *fd_head;
18961 * If we've already seen this frame, look it up in the
18962 * table of reassembled packets, otherwise add it to
18963 * whatever reassembly is in progress, if any, and see
18966 if (reported_len < 0)
18967 THROW(ReportedBoundsError);
18968 fd_head = fragment_add_seq_802_11(&wlan_reassembly_table,
18969 next_tvb, hdr_len, pinfo, seq_number, NULL,
18973 next_tvb = process_reassembled_data(tvb, hdr_len, pinfo,
18974 "Reassembled 802.11", fd_head,
18975 &frag_items, NULL, hdr_tree);
18978 * If this is the first fragment, dissect its contents, otherwise
18979 * just show it as a fragment.
18981 if (frag_number != 0) {
18982 /* Not the first fragment - don't dissect it. */
18985 /* First fragment, or not fragmented. Dissect what we have here. */
18987 /* Get a tvbuff for the payload. */
18988 next_tvb = tvb_new_subset_length_caplen(next_tvb, hdr_len, len, reported_len);
18991 * If this is the first fragment, but not the only fragment,
18992 * tell the next protocol that.
18995 pinfo->fragmented = TRUE;
18997 pinfo->fragmented = FALSE;
19001 if (next_tvb == NULL) {
19002 /* Just show this as an incomplete fragment. */
19003 col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
19004 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
19005 call_data_dissector(next_tvb, pinfo, tree);
19006 pinfo->fragmented = save_fragmented;
19010 switch (FCF_FRAME_TYPE (fcf))
19014 dissect_ieee80211_mgt(fcf, next_tvb, pinfo, tree);
19018 if (is_amsdu && (tvb_reported_length_remaining(next_tvb, 0) > 4)) {
19019 proto_item *parent_item;
19020 proto_tree *mpdu_tree;
19021 guint32 msdu_offset = 0;
19024 parent_item = proto_tree_add_protocol_format(tree, proto_aggregate, next_tvb, 0,
19025 tvb_reported_length_remaining(next_tvb, 0), "IEEE 802.11 Aggregate MSDU");
19026 mpdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_parent_tree);
19029 tvbuff_t *msdu_tvb;
19030 guint16 msdu_length;
19031 proto_tree *subframe_tree;
19032 const gchar *resolve_name;
19035 * IEEE Std 802.11-2012 says, in section 8.3.2.2 "A-MSDU format":
19037 * The A-MSDU subframe header contains three fields: DA, SA, and
19038 * Length. The order of these fields and the bits within these
19039 * fields are the same as the IEEE 802.3 frame format.
19041 * which means that the length field is big-endian, not
19044 msdu_length = tvb_get_ntohs(next_tvb, msdu_offset+12);
19046 parent_item = proto_tree_add_item(mpdu_tree, hf_ieee80211_amsdu_subframe, next_tvb,
19047 msdu_offset, roundup2(msdu_offset+14+msdu_length, 4), ENC_NA);
19048 proto_item_append_text(parent_item, " #%u", i);
19049 subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
19052 proto_tree_add_item(subframe_tree, hf_ieee80211_addr_da, next_tvb, msdu_offset, 6, ENC_NA);
19053 resolve_name = tvb_get_ether_name(tvb, msdu_offset);
19054 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_da_resolved, tvb, msdu_offset, 6,
19056 PROTO_ITEM_SET_HIDDEN(hidden_item);
19057 proto_tree_add_item(subframe_tree, hf_ieee80211_addr_sa, next_tvb, msdu_offset+6, 6, ENC_NA);
19058 resolve_name = tvb_get_ether_name(tvb, msdu_offset+6);
19059 hidden_item = proto_tree_add_string(hdr_tree, hf_ieee80211_addr_sa_resolved, tvb, msdu_offset+6, 6,
19061 PROTO_ITEM_SET_HIDDEN(hidden_item);
19062 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_length, next_tvb, msdu_offset+12, 2, ENC_BIG_ENDIAN);
19065 msdu_tvb = tvb_new_subset_length(next_tvb, msdu_offset, msdu_length);
19066 call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
19067 msdu_offset = roundup2(msdu_offset+msdu_length, 4);
19068 } while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
19072 /* I guess some bridges take Netware Ethernet_802_3 frames,
19073 which are 802.3 frames (with a length field rather than
19074 a type field, but with no 802.2 header in the payload),
19075 and just stick the payload into an 802.11 frame. I've seen
19076 captures that show frames of that sort.
19078 We also handle some odd form of encapsulation in which a
19079 complete Ethernet frame is encapsulated within an 802.11
19080 data frame, with no 802.2 header. This has been seen
19081 from some hardware.
19083 On top of that, at least at some point it appeared that
19084 the OLPC XO sent out frames with two bytes of 0 between
19085 the "end" of the 802.11 header and the beginning of
19086 the payload. Something similar has also been observed
19087 with Atheros chipsets. There the sequence control field
19090 So, if the packet doesn't start with 0xaa 0xaa:
19092 we first use the same scheme that linux-wlan-ng does to detect
19093 those encapsulated Ethernet frames, namely looking to see whether
19094 the frame either starts with 6 octets that match the destination
19095 address from the 802.11 header or has 6 octets that match the
19096 source address from the 802.11 header following the first 6 octets,
19097 and, if so, treat it as an encapsulated Ethernet frame;
19099 otherwise, we use the same scheme that we use in the Ethernet
19100 dissector to recognize Netware 802.3 frames, namely checking
19101 whether the packet starts with 0xff 0xff and, if so, treat it
19102 as an encapsulated IPX frame, and then check whether the
19103 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
19104 frame, or check the packet starts with the repetition of the
19105 sequence control field and, if so, treat it as an Atheros frame. */
19106 encap_type = ENCAP_802_2;
19107 if (tvb_bytes_exist(next_tvb, 0, 2)) {
19108 octet1 = tvb_get_guint8(next_tvb, 0);
19109 octet2 = tvb_get_guint8(next_tvb, 1);
19110 if ((octet1 != 0xaa) || (octet2 != 0xaa)) {
19111 if ((tvb_memeql(next_tvb, 6, (const guint8 *)pinfo->dl_src.data, 6) == 0) ||
19112 (tvb_memeql(next_tvb, 0, (const guint8 *)pinfo->dl_dst.data, 6) == 0))
19113 encap_type = ENCAP_ETHERNET;
19114 else if ((octet1 == 0xff) && (octet2 == 0xff))
19115 encap_type = ENCAP_IPX;
19116 else if (((octet1 == 0x00) && (octet2 == 0x00)) ||
19117 (((octet2 << 8) | octet1) == seq_control)) {
19118 proto_tree_add_item(tree, hf_ieee80211_mysterious_olpc_stuff, next_tvb, 0, 2, ENC_NA);
19119 next_tvb = tvb_new_subset_remaining(next_tvb, 2);
19124 switch (encap_type) {
19127 call_dissector(llc_handle, next_tvb, pinfo, tree);
19130 case ENCAP_ETHERNET:
19131 call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
19135 call_dissector(ipx_handle, next_tvb, pinfo, tree);
19140 case EXTENSION_FRAME:
19142 dissect_ieee80211_extension(fcf, next_tvb, pinfo, tree);
19146 pinfo->fragmented = save_fragmented;
19149 whdr->stats = wlan_stats;
19150 tap_queue_packet(wlan_tap, pinfo, whdr);
19151 memset(&wlan_stats, 0, sizeof wlan_stats);
19153 return tvb_captured_length(tvb);
19157 * Dissect 802.11 with a variable-length link-layer header and with the FCS
19158 * presence or absence indicated by the pseudo-header, if there is one.
19161 dissect_ieee80211(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
19163 struct ieee_802_11_phdr *phdr = (struct ieee_802_11_phdr *)data;
19164 struct ieee_802_11_phdr ourphdr;
19166 if (phdr == NULL) {
19168 * Fake a pseudo-header.
19169 * XXX - what are we supposed to do if the FCS length is unknown?
19171 memset(&ourphdr, 0, sizeof(ourphdr));
19172 ourphdr.fcs_len = -1;
19173 ourphdr.decrypted = FALSE;
19174 ourphdr.datapad = FALSE;
19175 ourphdr.phy = PHDR_802_11_PHY_UNKNOWN;
19178 return dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS, phdr);
19182 * Dissect 802.11 with a variable-length link-layer header and with an
19183 * FCS, but no pseudo-header.
19186 dissect_ieee80211_withfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
19188 struct ieee_802_11_phdr phdr;
19190 /* Construct a pseudo-header to hand to the common code. */
19191 memset(&phdr, 0, sizeof(phdr));
19193 phdr.decrypted = FALSE;
19194 phdr.datapad = FALSE;
19195 phdr.phy = PHDR_802_11_PHY_UNKNOWN;
19196 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS, &phdr);
19197 return tvb_captured_length(tvb);
19201 * Dissect 802.11 with a variable-length link-layer header and without an
19202 * FCS, but no pseudo-header.
19205 dissect_ieee80211_withoutfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
19207 struct ieee_802_11_phdr phdr;
19209 /* Construct a pseudo-header to hand to the common code. */
19210 memset(&phdr, 0, sizeof(phdr));
19211 phdr.decrypted = FALSE;
19212 phdr.datapad = FALSE;
19213 phdr.phy = PHDR_802_11_PHY_UNKNOWN;
19214 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS, &phdr);
19215 return tvb_captured_length(tvb);
19219 * Dissect 802.11 from an Intel 2200BG adapter in a Centrino laptop
19220 * running Windows XP.
19224 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00184.html
19228 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00393.html:
19230 * I tried capturing from a Centrino laptop with the Intel 2200BG 802.11g
19231 * chipset. I saw a lot of "Ethernet II" frames with 0x2452 as ethertype.
19235 * This behaviour has been observed on Windows XP. In my opinion it is
19236 * a "proprietary" behaviour of either the Centrino driver or the Centrino
19237 * hardware. Currently I have no Linux distro installed on the machine to
19238 * verify whether it is also the case.
19240 * These packets are seen only in a promiscuous capture:
19241 * - Packets normally received by the Centrino computer have the normal
19242 * structure (no 802.11/LLC header but directly IP header).
19243 * - Packets that are supposed to be received by another computer have
19244 * the 802.11/LLC headers. ... Also I noticed that when WEP is enabled,
19245 * the 802.11 header has the flag "WEP" set to true, but the packet
19246 * is already decrypted. I added a test in the code to accomodate this.
19247 * For TKIP it seems to stay encrypted.
19250 dissect_ieee80211_centrino(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
19252 struct ieee_802_11_phdr phdr;
19254 /* Construct a pseudo-header to hand to the common code. */
19255 memset(&phdr, 0, sizeof(phdr));
19256 phdr.decrypted = FALSE;
19257 phdr.datapad = FALSE;
19258 phdr.phy = PHDR_802_11_PHY_UNKNOWN;
19259 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_IS_CENTRINO|IEEE80211_COMMON_OPT_NORMAL_QOS, &phdr);
19260 return tvb_captured_length(tvb);
19264 * Dissect 802.11 with a variable-length link-layer header and a byte-swapped
19265 * control field and with no FCS (some hardware sends out LWAPP-encapsulated
19266 * 802.11 packets with the control field byte swapped).
19269 dissect_ieee80211_bsfc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
19271 struct ieee_802_11_phdr phdr;
19273 /* Construct a pseudo-header to hand to the common code. */
19274 memset(&phdr, 0, sizeof(phdr));
19275 phdr.decrypted = FALSE;
19276 phdr.datapad = FALSE;
19277 phdr.phy = PHDR_802_11_PHY_UNKNOWN;
19278 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_BROKEN_FC|IEEE80211_COMMON_OPT_NORMAL_QOS, &phdr);
19279 return tvb_captured_length(tvb);
19283 * Dissect 802.11 with a variable-length link-layer header without qos elements
19284 * in data+qos frames and with no FCS (sent as WIDS frames by Cisco standalone
19288 dissect_ieee80211_noqos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
19290 struct ieee_802_11_phdr phdr;
19292 /* Construct a pseudo-header to hand to the common code. */
19293 memset(&phdr, 0, sizeof(phdr));
19294 phdr.decrypted = FALSE;
19295 phdr.datapad = FALSE;
19296 phdr.phy = PHDR_802_11_PHY_UNKNOWN;
19297 dissect_ieee80211_common(tvb, pinfo, tree, 0, &phdr);
19298 return tvb_captured_length(tvb);
19302 /* ------------- */
19304 retransmit_hash(gconstpointer k)
19306 const retransmit_key *key = (const retransmit_key *)k;
19311 for (i = 0; i < 6; i++)
19312 hash_val += key->bssid[i];
19314 for (i = 0; i < 6; i++)
19315 hash_val += key->src[i];
19321 retransmit_equal(gconstpointer k1, gconstpointer k2)
19323 const retransmit_key *key1 = (const retransmit_key *)k1;
19324 const retransmit_key *key2 = (const retransmit_key *)k2;
19326 return ((!memcmp(key1->bssid, key2->bssid, 6) && !memcmp(key1->src, key2->src, 6)) ? TRUE:FALSE);
19330 frame_hash(gconstpointer k)
19332 guint32 frame = GPOINTER_TO_UINT(k);
19338 frame_equal(gconstpointer k1, gconstpointer k2)
19340 guint32 frame1 = GPOINTER_TO_UINT(k1);
19341 guint32 frame2 = GPOINTER_TO_UINT(k2);
19343 return frame1==frame2;
19347 * EAPOL key description dissectors.
19349 #define KEY_INFO_KEYDES_VERSION_MASK 0x0007
19350 #define KEY_INFO_KEY_TYPE_MASK 0x0008
19351 #define KEY_INFO_KEY_INDEX_MASK 0x0030
19352 #define KEY_INFO_INSTALL_MASK 0x0040
19353 #define KEY_INFO_KEY_ACK_MASK 0x0080
19354 #define KEY_INFO_KEY_MIC_MASK 0x0100
19355 #define KEY_INFO_SECURE_MASK 0x0200
19356 #define KEY_INFO_ERROR_MASK 0x0400
19357 #define KEY_INFO_REQUEST_MASK 0x0800
19358 #define KEY_INFO_ENCRYPTED_KEY_DATA_MASK 0x1000
19359 #define KEY_INFO_SMK_MESSAGE_MASK 0x2000
19361 #define KEYDES_VER_TYPE1 0x01
19362 #define KEYDES_VER_TYPE2 0x02
19363 #define KEYDES_VER_TYPE3 0x03
19365 static const value_string keydes_version_vals[] = {
19366 { KEYDES_VER_TYPE1, "RC4 Cipher, HMAC-MD5 MIC" },
19367 { KEYDES_VER_TYPE2, "AES Cipher, HMAC-SHA1 MIC" },
19368 { KEYDES_VER_TYPE3, "AES Cipher, AES-128-CMAC MIC" },
19372 static int proto_wlan_rsna_eapol = -1;
19374 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo = -1;
19375 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version = -1;
19376 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type = -1;
19377 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index = -1;
19378 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install = -1;
19379 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack = -1;
19380 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic = -1;
19381 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure = -1;
19382 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error = -1;
19383 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request = -1;
19384 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data = -1;
19385 static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message = -1;
19386 static int hf_wlan_rsna_eapol_keydes_key_len = -1;
19387 static int hf_wlan_rsna_eapol_keydes_replay_counter = -1;
19388 static int hf_wlan_rsna_eapol_keydes_key_iv = -1;
19389 static int hf_wlan_rsna_eapol_wpa_keydes_nonce = -1;
19390 static int hf_wlan_rsna_eapol_wpa_keydes_rsc = -1;
19391 static int hf_wlan_rsna_eapol_wpa_keydes_id = -1;
19392 static int hf_wlan_rsna_eapol_wpa_keydes_mic = -1;
19393 static int hf_wlan_rsna_eapol_wpa_keydes_data_len = -1;
19394 static int hf_wlan_rsna_eapol_wpa_keydes_data = -1;
19396 static gint ett_keyinfo = -1;
19397 static gint ett_wlan_rsna_eapol_keydes_data = -1;
19399 static const true_false_string keyinfo_key_type_tfs = { "Pairwise Key", "Group Key" };
19402 dissect_wlan_rsna_eapol_wpa_or_rsn_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
19406 guint16 eapol_data_len;
19407 proto_tree *keydes_tree;
19408 proto_tree *ti = NULL;
19409 static const int * wlan_rsna_eapol_wpa_keydes_keyinfo[] = {
19410 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
19411 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
19412 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
19413 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
19414 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
19415 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
19416 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
19417 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
19418 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
19419 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
19420 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
19425 * RSNA key descriptors.
19427 eapol_data_len = tvb_get_ntohs(tvb, offset+92);
19428 keyinfo = tvb_get_ntohs(tvb, offset);
19429 if (keyinfo & KEY_INFO_REQUEST_MASK) {
19430 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request)");
19431 if (keyinfo & KEY_INFO_ERROR_MASK)
19432 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request, Error)");
19433 } else if (keyinfo & KEY_INFO_KEY_TYPE_MASK) {
19435 /* Windows is setting the Secure Bit on message 2 when rekeying, so we'll ignore it */
19437 (KEY_INFO_INSTALL_MASK | KEY_INFO_KEY_ACK_MASK | KEY_INFO_KEY_MIC_MASK);
19440 case KEY_INFO_KEY_ACK_MASK:
19441 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 1 of 4)");
19444 case KEY_INFO_KEY_MIC_MASK:
19445 /* We check the key length to differentiate between message 2 and 4 and just hope that
19446 there are no strange implementations with key data and non-zero key length in message 4.
19447 According to the IEEE specification, sections 11.6.6.3 and 11.6.6.5 we should
19448 use the Secure Bit and/or the Nonce, but there are implementations ignoring the spec.
19449 The Secure Bit is incorrectly set on rekeys for Windows clients for Message 2 and the Nonce is non-zero
19450 in Message 4 in Bug 11994 (Apple?) */
19451 if (eapol_data_len)
19452 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 2 of 4)");
19454 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 4 of 4)");
19457 case (KEY_INFO_INSTALL_MASK | KEY_INFO_KEY_ACK_MASK | KEY_INFO_KEY_MIC_MASK):
19458 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 3 of 4)");
19462 if (keyinfo & KEY_INFO_KEY_ACK_MASK)
19463 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 1 of 2)");
19465 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 2 of 2)");
19468 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
19469 ett_keyinfo, wlan_rsna_eapol_wpa_keydes_keyinfo,
19470 ENC_BIG_ENDIAN, BMT_NO_APPEND);
19473 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_len, tvb, offset,
19474 2, ENC_BIG_ENDIAN);
19476 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_replay_counter, tvb,
19477 offset, 8, ENC_BIG_ENDIAN);
19479 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_nonce, tvb, offset,
19482 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_iv, tvb,
19483 offset, 16, ENC_NA);
19485 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_rsc, tvb, offset,
19488 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_id, tvb, offset, 8,
19491 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_mic, tvb, offset,
19494 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data_len, tvb,
19495 offset, 2, ENC_BIG_ENDIAN);
19497 if (eapol_data_len != 0) {
19498 ti = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data,
19499 tvb, offset, eapol_data_len, ENC_NA);
19500 if ((keyinfo & KEY_INFO_ENCRYPTED_KEY_DATA_MASK) ||
19501 !(keyinfo & KEY_INFO_KEY_TYPE_MASK)) {
19502 /* RSN: EAPOL-Key Key Data is encrypted.
19503 * WPA: Group Keys use encrypted Key Data.
19504 * Cannot parse this without knowing the key.
19505 * IEEE 802.11i-2004 8.5.2.
19508 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
19509 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, keydes_tree,
19510 tvb_reported_length_remaining(tvb, offset),
19514 return tvb_captured_length(tvb);
19517 /* It returns the algorithm used for decryption and the header and trailer lengths. */
19519 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)
19521 const guint8 *enc_data;
19522 tvbuff_t *decr_tvb = NULL;
19523 guint32 dec_caplen;
19524 guchar dec_data[AIRPDCAP_MAX_CAPLEN];
19526 if (!enable_decryption)
19529 /* get the entire packet */
19530 enc_data = tvb_get_ptr(tvb, 0, len+offset);
19532 /* process packet with AirPDcap */
19533 if (AirPDcapPacketProcess(&airpdcap_ctx, enc_data, offset, offset+len, dec_data, &dec_caplen,
19534 used_key, FALSE)==AIRPDCAP_RET_SUCCESS)
19537 *algorithm=used_key->KeyType;
19538 switch (*algorithm) {
19539 case AIRPDCAP_KEY_TYPE_WEP:
19540 *sec_header=AIRPDCAP_WEP_HEADER;
19541 *sec_trailer=AIRPDCAP_WEP_TRAILER;
19543 case AIRPDCAP_KEY_TYPE_CCMP:
19544 *sec_header=AIRPDCAP_RSNA_HEADER;
19545 *sec_trailer=AIRPDCAP_CCMP_TRAILER;
19547 case AIRPDCAP_KEY_TYPE_TKIP:
19548 *sec_header=AIRPDCAP_RSNA_HEADER;
19549 *sec_trailer=AIRPDCAP_TKIP_TRAILER;
19555 /* allocate buffer for decrypted payload */
19556 tmp = (guint8 *)wmem_memdup(pinfo->pool, dec_data+offset, dec_caplen-offset);
19558 len = dec_caplen-offset;
19560 /* decrypt successful, let's set up a new data tvb. */
19561 decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
19567 /* Collect our WEP and WPA keys */
19569 set_airpdcap_keys(void)
19572 AIRPDCAP_KEYS_COLLECTION *keys = g_new(AIRPDCAP_KEYS_COLLECTION, 1);
19573 GByteArray *bytes = NULL;
19577 for (i = 0; (uat_wep_key_records != NULL) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS); i++)
19579 decryption_key_t *dk;
19580 dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key);
19584 AIRPDCAP_KEY_ITEM key;
19585 if (dk->type == AIRPDCAP_KEY_TYPE_WEP)
19588 key.KeyType = AIRPDCAP_KEY_TYPE_WEP;
19590 bytes = g_byte_array_new();
19591 res = hex_str_to_bytes(dk->key->str, bytes, FALSE);
19593 if (dk->key->str && res && (bytes->len > 0) && (bytes->len <= AIRPDCAP_WEP_KEY_MAXLEN))
19596 * WEP key is correct (well, the can be even or odd, so it is not
19597 * a real check, I think... is a check performed somewhere in the
19598 * AirPDcap function???)
19600 memcpy(key.KeyData.Wep.WepKey, bytes->data, bytes->len);
19601 key.KeyData.Wep.WepKeyLen = bytes->len;
19602 keys->Keys[keys->nKeys] = key;
19606 else if (dk->type == AIRPDCAP_KEY_TYPE_WPA_PWD)
19608 key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PWD;
19610 /* XXX - This just lops the end if the key off if it's too long.
19611 * Should we handle this more gracefully? */
19612 g_strlcpy(key.UserPwd.Passphrase, dk->key->str, AIRPDCAP_WPA_PASSPHRASE_MAX_LEN+1);
19614 key.UserPwd.SsidLen = 0;
19615 if ((dk->ssid != NULL) && (dk->ssid->len <= AIRPDCAP_WPA_SSID_MAX_LEN))
19617 memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
19618 key.UserPwd.SsidLen = dk->ssid->len;
19621 keys->Keys[keys->nKeys] = key;
19624 else if (dk->type == AIRPDCAP_KEY_TYPE_WPA_PSK)
19626 key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PSK;
19628 bytes = g_byte_array_new();
19629 hex_str_to_bytes(dk->key->str, bytes, FALSE);
19631 /* XXX - Pass the correct array of bytes... */
19632 if (bytes->len <= AIRPDCAP_WPA_PSK_LEN) {
19633 memcpy(key.KeyData.Wpa.Psk, bytes->data, bytes->len);
19635 keys->Keys[keys->nKeys] = key;
19639 free_key_string(dk);
19641 g_byte_array_free(bytes, TRUE);
19647 /* Now set the keys */
19648 AirPDcapSetKeys(&airpdcap_ctx, keys->Keys, keys->nKeys);
19657 * XXX - AirPDcap - That God sends it to us beautiful (che dio ce la mandi bona)
19658 * The next lines will add a key to the AirPDcap context. The keystring will be added
19659 * to the old WEP array too, but we don't care, because the packets will come here
19660 * already decrypted... One of these days we will fix this too
19662 set_airpdcap_keys();
19666 * This code had been taken from AirSnort crack.c function classify()
19667 * Permission granted by snax <at> shmoo dot com
19668 * weak_iv - determine which key byte an iv is useful in resolving
19669 * parm - p, pointer to the first byte of an IV
19670 * return - n - this IV is weak for byte n of a WEP key
19671 * -1 - this IV is not weak for any key bytes
19673 * This function tests for IVs that are known to satisfy the criteria
19674 * for a weak IV as specified in FMS section 7.1
19678 weak_iv(guchar *iv)
19682 if ((iv[1] == 255) && (iv[0] > 2) && (iv[0] < 16)) {
19686 sum = iv[0] + iv[1];
19688 if (iv[2] <= 0x0a) {
19691 else if (iv[2] == 0xff) {
19696 if ((sum == k) && ((iv[2] >= 0xf2) && (iv[2] <= 0xfe) && (iv[2] != 0xfd))) {
19703 wlan_retransmit_init(void)
19705 if (fc_analyse_retransmit_table) {
19706 g_hash_table_destroy(fc_analyse_retransmit_table);
19707 fc_analyse_retransmit_table = NULL;
19710 if (fc_first_frame_table) {
19711 g_hash_table_destroy(fc_first_frame_table);
19712 fc_first_frame_table = NULL;
19715 if (wlan_subdissector)
19718 fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
19719 fc_first_frame_table = g_hash_table_new(frame_hash, frame_equal);
19724 dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
19728 int tagged_parameter_tree_len;
19729 proto_tree *tagged_tree;
19731 type = tvb_get_guint8(tvb, offset);
19732 proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
19733 1, ENC_LITTLE_ENDIAN);
19737 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
19738 /* TODO: IEEE 802.11r */
19741 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
19742 col_clear(pinfo->cinfo, COL_INFO);
19743 offset += add_ff_action(tree, tvb, pinfo, offset);
19744 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
19745 if (tagged_parameter_tree_len > 0) {
19746 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
19747 tagged_parameter_tree_len);
19748 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
19749 tagged_parameter_tree_len, -1, NULL);
19753 return tvb_captured_length(tvb);
19757 proto_register_ieee80211(void)
19760 static hf_register_info hf[] = {
19761 {&hf_ieee80211_fc_field,
19762 {"Frame Control Field", "wlan.fc",
19763 FT_UINT16, BASE_HEX, NULL, 0,
19764 "MAC Frame control", HFILL }},
19766 {&hf_ieee80211_fc_proto_version,
19767 {"Version", "wlan.fc.version",
19768 FT_UINT8, BASE_DEC, NULL, 0x03,
19769 "MAC Protocol version", HFILL }}, /* 0 */
19771 {&hf_ieee80211_fc_frame_type,
19772 {"Type", "wlan.fc.type",
19773 FT_UINT8, BASE_DEC, VALS(frame_type), 0x0C,
19774 "Frame type", HFILL }},
19776 {&hf_ieee80211_fc_frame_subtype,
19777 {"Subtype", "wlan.fc.subtype",
19778 FT_UINT8, BASE_DEC, NULL, 0xF0,
19779 "Frame subtype", HFILL }}, /* 2 */
19781 {&hf_ieee80211_fc_frame_type_subtype,
19782 {"Type/Subtype", "wlan.fc.type_subtype",
19783 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &frame_type_subtype_vals_ext, 0x0,
19784 "Type and subtype combined (first byte: type, second byte: subtype)", HFILL }},
19786 {&hf_ieee80211_fc_frame_extension,
19787 {"Control Frame Extension", "wlan.fc.extension",
19788 FT_UINT8, BASE_DEC, NULL, 0,
19791 {&hf_ieee80211_fc_flags,
19792 {"Flags", "wlan.flags",
19793 FT_UINT8, BASE_HEX, NULL, 0,
19796 {&hf_ieee80211_fc_data_ds,
19797 {"DS status", "wlan.fc.ds",
19798 FT_UINT8, BASE_HEX, VALS(tofrom_ds), (FLAG_FROM_DS|FLAG_TO_DS),
19799 "Data-frame DS-traversal status", HFILL }}, /* 3 */
19801 {&hf_ieee80211_fc_to_ds,
19802 {"To DS", "wlan.fc.tods",
19803 FT_BOOLEAN, 8, TFS(&tods_flag), FLAG_TO_DS,
19804 "To DS flag", HFILL }}, /* 4 */
19806 {&hf_ieee80211_fc_from_ds,
19807 {"From DS", "wlan.fc.fromds",
19808 FT_BOOLEAN, 8, TFS(&fromds_flag), FLAG_FROM_DS,
19809 "From DS flag", HFILL }}, /* 5 */
19811 {&hf_ieee80211_fc_more_frag,
19812 {"More Fragments", "wlan.fc.frag",
19813 FT_BOOLEAN, 8, TFS(&more_fragments), FLAG_MORE_FRAGMENTS,
19814 "More Fragments flag", HFILL }}, /* 6 */
19816 {&hf_ieee80211_fc_retry,
19817 {"Retry", "wlan.fc.retry",
19818 FT_BOOLEAN, 8, TFS(&retry_flags), FLAG_RETRY,
19819 "Retransmission flag", HFILL }},
19821 { &hf_ieee80211_fc_analysis_retransmission,
19822 {"Retransmission", "wlan.analysis.retransmission",
19823 FT_NONE, BASE_NONE, NULL, 0x0,
19824 "This frame is a suspected wireless retransmission", HFILL }},
19826 { &hf_ieee80211_fc_analysis_retransmission_frame,
19827 {"Retransmission of frame", "wlan.analysis.retransmission_frame",
19828 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
19829 "This is a retransmission of frame #", HFILL }},
19831 {&hf_ieee80211_fc_pwr_mgt,
19832 {"PWR MGT", "wlan.fc.pwrmgt",
19833 FT_BOOLEAN, 8, TFS(&pm_flags), FLAG_POWER_MGT,
19834 "Power management status", HFILL }},
19836 {&hf_ieee80211_fc_more_data,
19837 {"More Data", "wlan.fc.moredata",
19838 FT_BOOLEAN, 8, TFS(&md_flags), FLAG_MORE_DATA,
19839 "More data flag", HFILL }},
19841 {&hf_ieee80211_fc_protected,
19842 {"Protected flag", "wlan.fc.protected",
19843 FT_BOOLEAN, 8, TFS(&protected_flags), FLAG_PROTECTED,
19846 {&hf_ieee80211_fc_order,
19847 {"Order flag", "wlan.fc.order",
19848 FT_BOOLEAN, 8, TFS(&order_flags), FLAG_ORDER,
19849 "Strictly ordered flag", HFILL }},
19851 {&hf_ieee80211_assoc_id,
19852 {"Association ID", "wlan.aid",
19853 FT_UINT16, BASE_DEC, NULL, 0x3FFF,
19856 {&hf_ieee80211_did_duration,
19857 {"Duration", "wlan.duration",
19858 FT_UINT16, BASE_DEC, NULL, 0x7FFF,
19861 {&hf_ieee80211_addr_da,
19862 {"Destination address", "wlan.da",
19863 FT_ETHER, BASE_NONE, NULL, 0,
19864 "Destination Hardware Address", HFILL }},
19866 { &hf_ieee80211_addr_da_resolved,
19867 {"Destination address (resolved)", "wlan.da_resolved", FT_STRING,
19868 BASE_NONE, NULL, 0x0,
19869 "Destination Hardware Address (resolved)", HFILL }},
19871 {&hf_ieee80211_addr_sa,
19872 {"Source address", "wlan.sa",
19873 FT_ETHER, BASE_NONE, NULL, 0,
19874 "Source Hardware Address", HFILL }},
19876 { &hf_ieee80211_addr_sa_resolved,
19877 {"Source address (resolved)", "wlan.sa_resolved", FT_STRING,
19878 BASE_NONE, NULL, 0x0,
19879 "Source Hardware Address (resolved)", HFILL }},
19881 { &hf_ieee80211_addr,
19882 {"Hardware address", "wlan.addr",
19883 FT_ETHER, BASE_NONE, NULL, 0,
19884 "SA, DA, BSSID, RA or TA Hardware Address", HFILL }},
19886 { &hf_ieee80211_addr_resolved,
19887 { "Hardware address (resolved)", "wlan.addr_resolved", FT_STRING,
19888 BASE_NONE, NULL, 0x0,
19889 "SA, DA, BSSID, RA or TA Hardware Address (resolved)", HFILL }},
19891 {&hf_ieee80211_addr_ra,
19892 {"Receiver address", "wlan.ra",
19893 FT_ETHER, BASE_NONE, NULL, 0,
19894 "Receiving Station Hardware Address", HFILL }},
19896 { &hf_ieee80211_addr_ra_resolved,
19897 {"Receiver address (resolved)", "wlan.ra_resolved", FT_STRING, BASE_NONE,
19898 NULL, 0x0, "Receiving Station Hardware Address (resolved)", HFILL }},
19900 {&hf_ieee80211_addr_ta,
19901 {"Transmitter address", "wlan.ta",
19902 FT_ETHER, BASE_NONE, NULL, 0,
19903 "Transmitting Station Hardware Address", HFILL }},
19905 { &hf_ieee80211_addr_ta_resolved,
19906 {"Transmitter address (resolved)", "wlan.ta_resolved", FT_STRING,
19907 BASE_NONE, NULL, 0x0,
19908 "Transmitting Station Hardware Address (resolved)", HFILL }},
19910 {&hf_ieee80211_addr_bssid,
19911 {"BSS Id", "wlan.bssid",
19912 FT_ETHER, BASE_NONE, NULL, 0,
19913 "Basic Service Set ID", HFILL }},
19915 { &hf_ieee80211_addr_bssid_resolved,
19916 {"BSS Id (resolved)", "wlan.bssid_resolved", FT_STRING, BASE_NONE, NULL,
19917 0x0, "Basic Service Set ID (resolved)", HFILL }},
19919 {&hf_ieee80211_addr_staa,
19920 {"STA address", "wlan.staa",
19921 FT_ETHER, BASE_NONE, NULL, 0,
19922 "Station Hardware Address", HFILL }},
19924 { &hf_ieee80211_addr_staa_resolved,
19925 {"STA address (resolved)", "wlan.staa_resolved", FT_STRING, BASE_NONE, NULL,
19926 0x0, "Station Hardware Address (resolved)", HFILL }},
19928 {&hf_ieee80211_frag_number,
19929 {"Fragment number", "wlan.frag",
19930 FT_UINT16, BASE_DEC, NULL, 0x000F,
19933 {&hf_ieee80211_seq_number,
19934 {"Sequence number", "wlan.seq",
19935 FT_UINT16, BASE_DEC, NULL, 0xFFF0,
19938 {&hf_ieee80211_mesh_control_field,
19939 {"Mesh Control Field", "wlan.mesh.control_field",
19940 FT_NONE, BASE_NONE, NULL, 0,
19943 {&hf_ieee80211_qos,
19944 {"Qos Control", "wlan.qos",
19945 FT_UINT16, BASE_HEX, NULL, 0,
19948 {&hf_ieee80211_qos_tid,
19949 {"TID", "wlan.qos.tid",
19950 FT_UINT16, BASE_DEC, NULL, 0x000F,
19953 {&hf_ieee80211_qos_priority,
19954 {"Priority", "wlan.qos.priority",
19955 FT_UINT16, BASE_DEC, VALS(ieee80211_qos_tags_acs), 0x0007,
19956 "802.1D Tag", HFILL }},
19958 {&hf_ieee80211_qos_eosp,
19959 {"EOSP", "wlan.qos.eosp",
19960 FT_BOOLEAN, 16, TFS(&eosp_flag), QOS_FLAG_EOSP,
19961 "EOSP Field", HFILL }},
19963 {&hf_ieee80211_qos_bit4,
19964 {"QoS bit 4", "wlan.qos.bit4",
19965 FT_BOOLEAN, 16, TFS(&bit4_flag), QOS_FLAG_EOSP,
19968 {&hf_ieee80211_qos_ack_policy,
19969 {"Ack Policy", "wlan.qos.ack",
19970 FT_UINT16, BASE_HEX, VALS(ack_policy), 0x0060,
19973 {&hf_ieee80211_qos_amsdu_present,
19974 {"Payload Type", "wlan.qos.amsdupresent",
19975 FT_BOOLEAN, 16, TFS(&ieee80211_qos_amsdu_present_flag), 0x0080,
19978 {&hf_ieee80211_qos_txop_limit,
19979 {"TXOP Limit", "wlan.qos.txop_limit",
19980 FT_UINT16, BASE_DEC, NULL, 0xFF00,
19983 {&hf_ieee80211_qos_ps_buf_state,
19984 {"QAP PS Buffer State", "wlan.qos.ps_buf_state",
19985 FT_UINT16, BASE_HEX, NULL, 0xFF00,
19988 {&hf_ieee80211_qos_buf_state_indicated,
19989 {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
19990 FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x0200,
19993 {&hf_ieee80211_qos_highest_pri_buf_ac,
19994 {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
19995 FT_UINT16, BASE_DEC, VALS(wme_acs), 0x0C00,
19998 {&hf_ieee80211_qos_qap_buf_load,
19999 {"QAP Buffered Load", "wlan.qos.qap_buf_load",
20000 FT_UINT16, BASE_DEC, NULL, 0xF000,
20003 {&hf_ieee80211_qos_txop_dur_req,
20004 {"TXOP Duration Requested", "wlan.qos.txop_dur_req",
20005 FT_UINT16, BASE_DEC, NULL, 0xFF00,
20008 {&hf_ieee80211_qos_queue_size,
20009 {"Queue Size", "wlan.qos.queue_size",
20010 FT_UINT16, BASE_DEC, NULL, 0xFF00,
20013 {&hf_ieee80211_fcs,
20014 {"Frame check sequence", "wlan.fcs",
20015 FT_UINT32, BASE_HEX, NULL, 0,
20016 "Frame Check Sequence (FCS)", HFILL }},
20018 {&hf_ieee80211_fcs_status,
20019 {"FCS Status", "wlan.fcs.status",
20020 FT_UINT8, BASE_NONE, VALS(proto_checksum_vals), 0x0,
20023 {&hf_ieee80211_fragment_overlap,
20024 {"Fragment overlap", "wlan.fragment.overlap",
20025 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
20026 "Fragment overlaps with other fragments", HFILL }},
20028 {&hf_ieee80211_fragment_overlap_conflict,
20029 {"Conflicting data in fragment overlap", "wlan.fragment.overlap.conflict",
20030 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
20031 "Overlapping fragments contained conflicting data", HFILL }},
20033 {&hf_ieee80211_fragment_multiple_tails,
20034 {"Multiple tail fragments found", "wlan.fragment.multipletails",
20035 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
20036 "Several tails were found when defragmenting the packet", HFILL }},
20038 {&hf_ieee80211_fragment_too_long_fragment,
20039 {"Fragment too long", "wlan.fragment.toolongfragment",
20040 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
20041 "Fragment contained data past end of packet", HFILL }},
20043 {&hf_ieee80211_fragment_error,
20044 {"Defragmentation error", "wlan.fragment.error",
20045 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
20046 "Defragmentation error due to illegal fragments", HFILL }},
20048 {&hf_ieee80211_fragment_count,
20049 {"Fragment count", "wlan.fragment.count",
20050 FT_UINT32, BASE_DEC, NULL, 0x0,
20053 {&hf_ieee80211_fragment,
20054 {"802.11 Fragment", "wlan.fragment",
20055 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
20058 {&hf_ieee80211_fragments,
20059 {"802.11 Fragments", "wlan.fragments",
20060 FT_NONE, BASE_NONE, NULL, 0x0,
20063 {&hf_ieee80211_reassembled_in,
20064 {"Reassembled 802.11 in frame", "wlan.reassembled_in",
20065 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
20066 "This 802.11 packet is reassembled in this frame", HFILL }},
20068 {&hf_ieee80211_reassembled_length,
20069 {"Reassembled 802.11 length", "wlan.reassembled.length",
20070 FT_UINT32, BASE_DEC, NULL, 0x0,
20071 "The total length of the reassembled payload", HFILL }},
20073 {&hf_ieee80211_wep_iv,
20074 {"Initialization Vector", "wlan.wep.iv",
20075 FT_UINT24, BASE_HEX, NULL, 0,
20078 {&hf_ieee80211_wep_iv_weak,
20079 {"Weak IV", "wlan.wep.weakiv",
20080 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
20083 {&hf_ieee80211_tkip_extiv,
20084 {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv",
20085 FT_STRING, BASE_NONE, NULL, 0,
20086 "TKIP Extended Initialization Vector", HFILL }},
20088 {&hf_ieee80211_ccmp_extiv,
20089 {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv",
20090 FT_STRING, BASE_NONE, NULL, 0,
20091 "CCMP Extended Initialization Vector", HFILL }},
20093 {&hf_ieee80211_wep_key,
20094 {"Key Index", "wlan.wep.key",
20095 FT_UINT8, BASE_DEC, NULL, 0,
20098 {&hf_ieee80211_wep_icv,
20099 {"WEP ICV", "wlan.wep.icv",
20100 FT_UINT32, BASE_HEX, NULL, 0,
20103 {&hf_ieee80211_fc_analysis_pmk,
20104 {"PMK", "wlan.analysis.pmk",
20105 FT_STRING, BASE_NONE, NULL, 0x0,
20108 {&hf_ieee80211_fc_analysis_tk,
20109 {"TK", "wlan.analysis.tk",
20110 FT_STRING, BASE_NONE, NULL, 0x0,
20113 {&hf_ieee80211_fc_analysis_gtk,
20114 {"GTK", "wlan.analysis.gtk",
20115 FT_STRING, BASE_NONE, NULL, 0x0,
20118 {&hf_ieee80211_block_ack_request_control,
20119 {"Block Ack Request (BAR) Control", "wlan.bar.control",
20120 FT_UINT16, BASE_HEX, NULL, 0,
20123 {&hf_ieee80211_block_ack_control,
20124 {"Block Ack Request Control", "wlan.ba.control",
20125 FT_UINT16, BASE_HEX, NULL, 0,
20128 {&hf_ieee80211_block_ack_control_ack_policy,
20129 {"BAR Ack Policy", "wlan.ba.control.ackpolicy",
20130 FT_BOOLEAN, 16, TFS(&ieee80211_block_ack_control_ack_policy_flag), 0x01,
20131 "Block Ack Request (BAR) Ack Policy", HFILL }},
20133 {&hf_ieee80211_block_ack_control_multi_tid,
20134 {"Multi-TID", "wlan.ba.control.multitid",
20135 FT_BOOLEAN, 16, 0, 0x02,
20136 "Multi-Traffic Identifier (TID)", HFILL }},
20138 {&hf_ieee80211_block_ack_control_compressed_bitmap,
20139 {"Compressed Bitmap", "wlan.ba.control.cbitmap",
20140 FT_BOOLEAN, 16, 0, 0x04,
20143 {&hf_ieee80211_block_ack_control_reserved,
20144 {"Reserved", "wlan.ba.control.reserved",
20145 FT_UINT16, BASE_HEX, NULL, 0x0ff8,
20148 {&hf_ieee80211_block_ack_control_basic_tid_info,
20149 {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
20150 FT_UINT16, BASE_HEX, NULL, 0xf000,
20151 "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL }},
20153 {&hf_ieee80211_block_ack_control_compressed_tid_info,
20154 {"TID for which a BlockAck frame is requested", "wlan.bar.compressed.tidinfo",
20155 FT_UINT16, BASE_HEX, NULL, 0xf000,
20156 "Traffic Identifier (TID) for which a BlockAck frame is requested", HFILL }},
20158 {&hf_ieee80211_block_ack_control_multi_tid_info,
20159 {"Number of TIDs Present", "wlan.ba.mtid.tidinfo",
20160 FT_UINT16, BASE_HEX, NULL, 0xf000,
20161 "Number of Traffic Identifiers (TIDs) Present", HFILL }},
20163 {&hf_ieee80211_block_ack_multi_tid_info,
20164 {"Traffic Identifier (TID) Info", "wlan.ba.mtid.tid",
20165 FT_UINT8, BASE_DEC, 0, 0,
20168 {&hf_ieee80211_block_ack_multi_tid_reserved,
20169 {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
20170 FT_UINT16, BASE_HEX, 0, 0x0fff,
20173 {&hf_ieee80211_block_ack_multi_tid_value,
20174 {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
20175 FT_UINT16, BASE_HEX, 0, 0xf000,
20178 {&hf_ieee80211_block_ack_request_type,
20179 {"Block Ack Request Type", "wlan.bar.type",
20180 FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_request_type_flags), 0x06,
20181 "Block Ack Request (BAR) Type", HFILL }},
20183 {&hf_ieee80211_block_ack_type,
20184 {"Block Ack Type", "wlan.ba.type",
20185 FT_UINT8, BASE_HEX, VALS(ieee80211_block_ack_type_flags), 0x06,
20188 {&hf_ieee80211_block_ack_bitmap,
20189 {"Block Ack Bitmap", "wlan.ba.bm",
20190 FT_BYTES, BASE_NONE, NULL, 0,
20193 /* Used for Extended compressed BlockAck */
20194 {&hf_ieee80211_block_ack_RBUFCAP,
20195 {"Block Ack RBUFCAP", "wlan.ba.RBUFCAP",
20196 FT_BOOLEAN, BASE_DEC, NULL, 0,
20199 {&hf_ieee80211_block_ack_bitmap_missing_frame,
20200 {"Missing frame", "wlan.ba.bm.missing_frame",
20201 FT_UINT32, BASE_DEC, NULL, 0,
20204 {&hf_ieee80211_beamform_feedback_seg_retrans_bitmap,
20205 {"Feedback segment Retansmission Bitmap", "wlan.beamform.feedback_seg_retrans_bitmap",
20206 FT_UINT8, BASE_HEX, NULL, 0,
20209 {&hf_ieee80211_vht_ndp_annc_token,
20210 {"Sounding Dialog Token", "wlan.vht_ndp.token",
20211 FT_UINT8, BASE_HEX, NULL, 0,
20214 {&hf_ieee80211_vht_ndp_annc_token_number,
20215 {"Sounding Dialog Token Number", "wlan.vht_ndp.token.number",
20216 FT_UINT8, BASE_DEC, NULL, 0xFC,
20219 {&hf_ieee80211_vht_ndp_annc_token_reserved,
20220 {"Reserved", "wlan.vht_ndp.token.reserved",
20221 FT_UINT8, BASE_HEX, NULL, 0x03,
20224 {&hf_ieee80211_vht_ndp_annc_sta_info,
20225 {"STA Info", "wlan.vht_ndp.sta_info",
20226 FT_UINT16, BASE_HEX, NULL, 0,
20229 {&hf_ieee80211_vht_ndp_annc_sta_info_aid12,
20230 {"AID12", "wlan.vht_ndp.sta_info.aid12",
20231 FT_UINT16, BASE_HEX, NULL, 0x0FFF,
20232 "12 least significant bits of the AID of the target STA", HFILL }},
20234 {&hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
20235 {"Feedback Type", "wlan.vht_ndp.sta_info.feedback_type",
20236 FT_BOOLEAN, 16, TFS(&vht_ndp_annc_sta_info_feedback_type), 0x1000,
20239 {&hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
20240 {"Nc Index", "wlan.vht_ndp.sta_info.nc_index",
20241 FT_UINT16, BASE_DEC, VALS(num_plus_one_3bit_flag), 0xE000,
20244 {&hf_ieee80211_vht_ndp_annc_sta_info_reserved,
20245 {"Reserved", "wlan.vht_ndp.sta_info.reserved",
20246 FT_UINT16, BASE_HEX, NULL, 0xE000,
20249 {&hf_ieee80211_data_encap_payload_type,
20250 {"Payload Type", "wlan.data_encap.payload_type",
20251 FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types), 0,
20254 {&hf_ieee80211_ff_tdls_action_code,
20255 {"Action code", "wlan.fixed.action_code",
20256 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tdls_action_codes_ext, 0,
20257 "Management action code", HFILL }},
20259 {&hf_ieee80211_ff_target_channel,
20260 {"Target Channel", "wlan.fixed.target_channel",
20261 FT_UINT8, BASE_DEC, NULL, 0,
20264 {&hf_ieee80211_ff_operating_class,
20265 {"Operating Class", "wlan.fixed.operating_class",
20266 FT_UINT8, BASE_DEC, NULL, 0,
20269 {&hf_ieee80211_ff_wnm_action_code,
20270 {"Action code", "wlan.fixed.action_code",
20271 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &wnm_action_codes_ext, 0,
20272 "Management action code", HFILL }},
20274 {&hf_ieee80211_ff_unprotected_wnm_action_code,
20275 {"Action code", "wlan.fixed.action_code",
20276 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &unprotected_wnm_action_codes_ext, 0,
20277 "Management action code", HFILL }},
20279 {&hf_ieee80211_ff_key_data,
20280 {"Key Data", "wlan.fixed.key_data",
20281 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
20283 {&hf_ieee80211_ff_key_data_length,
20284 {"Key Data Length", "wlan.fixed.key_data_length",
20285 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
20287 {&hf_ieee80211_ff_wnm_notification_type,
20288 {"WNM-Notification type", "wlan.fixed.wnm_notification_type",
20289 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &wnm_notification_types_ext, 0,
20292 {&hf_ieee80211_ff_rm_action_code,
20293 {"Action code", "wlan.rm.action_code",
20294 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &rm_action_codes_ext, 0,
20295 "Radio Measurement Action", HFILL }},
20297 {&hf_ieee80211_ff_rm_dialog_token,
20298 {"Dialog token", "wlan.rm.dialog_token",
20299 FT_UINT8, BASE_DEC, NULL, 0,
20300 "Non-zero Dialog Token identifies request/report transaction", HFILL }},
20302 {&hf_ieee80211_ff_rm_repetitions,
20303 {"Repetitions", "wlan.rm.repetitions",
20304 FT_UINT16, BASE_DEC, NULL, 0,
20305 "Numer of Repetitions, 65535 indicates repeat until cancellation", HFILL }},
20307 {&hf_ieee80211_ff_rm_tx_power,
20308 {"Transmit Power Used", "wlan.rm.tx_power",
20309 FT_INT8, BASE_DEC, NULL, 0,
20312 {&hf_ieee80211_ff_rm_max_tx_power,
20313 {"Max Transmit Power", "wlan.rm.max_tx_power",
20314 FT_INT8, BASE_DEC, NULL, 0,
20317 {&hf_ieee80211_ff_tpc,
20318 {"TPC Report", "wlan.rm.tpc",
20319 FT_NONE, BASE_NONE, NULL, 0,
20322 {&hf_ieee80211_ff_tpc_element_id,
20323 {"TPC Element ID", "wlan.rm.tpc.element_id",
20324 FT_UINT8, BASE_DEC, NULL, 0,
20327 {&hf_ieee80211_ff_tpc_length,
20328 {"TPC Length", "wlan.rm.tpc.length",
20329 FT_UINT8, BASE_DEC, NULL, 0,
20330 "Length of TPC Report element (always 2)", HFILL }},
20332 {&hf_ieee80211_ff_tpc_tx_power,
20333 {"TPC Transmit Power", "wlan.rm.tpc.tx_power",
20334 FT_INT8, BASE_DEC, NULL, 0,
20337 {&hf_ieee80211_ff_tpc_link_margin,
20338 {"TPC Link Margin", "wlan.rm.tpc.link_margin",
20339 FT_INT8, BASE_DEC, NULL, 0,
20342 {&hf_ieee80211_ff_rm_rx_antenna_id,
20343 {"Receive Antenna ID", "wlan.rm.rx_antenna_id",
20344 FT_UINT8, BASE_DEC, NULL, 0,
20347 {&hf_ieee80211_ff_rm_tx_antenna_id,
20348 {"Transmit Antenna ID", "wlan.rm.tx_antenna_id",
20349 FT_UINT8, BASE_DEC, NULL, 0,
20352 {&hf_ieee80211_ff_rm_rcpi,
20353 {"Received Channel Power", "wlan.rm.rcpi",
20354 FT_UINT8, BASE_DEC, NULL, 0,
20357 {&hf_ieee80211_ff_rm_rsni,
20358 {"Received Signal to noise indication", "wlan.rm.rsni",
20359 FT_UINT8, BASE_DEC, NULL, 0,
20362 {&hf_ieee80211_ff_request_mode_pref_cand,
20363 {"Preferred Candidate List Included", "wlan.fixed.request_mode.pref_cand",
20364 FT_UINT8, BASE_DEC, NULL, 0x01,
20367 {&hf_ieee80211_ff_request_mode_abridged,
20368 {"Abridged", "wlan.fixed.request_mode.abridged",
20369 FT_UINT8, BASE_DEC, NULL, 0x02,
20372 {&hf_ieee80211_ff_request_mode_disassoc_imminent,
20373 {"Disassociation Imminent", "wlan.fixed.request_mode.disassoc_imminent",
20374 FT_UINT8, BASE_DEC, NULL, 0x04,
20377 {&hf_ieee80211_ff_request_mode_bss_term_included,
20378 {"BSS Termination Included", "wlan.fixed.request_mode.bss_term_included",
20379 FT_UINT8, BASE_DEC, NULL, 0x08,
20382 {&hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
20383 {"ESS Disassociation Imminent", "wlan.fixed.request_mode.ess_disassoc_imminent",
20384 FT_UINT8, BASE_DEC, NULL, 0x10,
20387 {&hf_ieee80211_ff_disassoc_timer,
20388 {"Disassociation Timer", "wlan.fixed.disassoc_timer",
20389 FT_UINT16, BASE_DEC, NULL, 0,
20392 {&hf_ieee80211_ff_bss_termination_delay,
20393 {"BSS Termination Delay", "wlan.fixed.bss_termination_delay",
20394 FT_UINT8, BASE_DEC, NULL, 0,
20397 {&hf_ieee80211_ff_bss_transition_status_code,
20398 {"BSS Transition Status Code", "wlan.fixed.bss_transition_status_code",
20399 FT_UINT8, BASE_DEC, NULL, 0,
20402 {&hf_ieee80211_ff_validity_interval,
20403 {"Validity Interval", "wlan.fixed.validity_interval",
20404 FT_UINT8, BASE_DEC, NULL, 0,
20407 {&hf_ieee80211_ff_bss_termination_duration,
20408 {"BSS Termination Duration", "wlan.fixed.bss_termination_duration",
20409 FT_BYTES, BASE_NONE, NULL, 0,
20412 {&hf_ieee80211_ff_url_len,
20413 {"Session Information URL Length",
20414 "wlan.fixed.session_information.url_length",
20415 FT_UINT8, BASE_DEC, NULL, 0,
20418 {&hf_ieee80211_ff_url,
20419 {"Session Information URL", "wlan.fixed.session_information.url",
20420 FT_STRING, BASE_NONE, NULL, 0,
20423 {&hf_ieee80211_ff_target_bss,
20424 {"BSS Transition Target BSS", "wlan.fixed.bss_transition_target_bss",
20425 FT_ETHER, BASE_NONE, NULL, 0,
20428 {&hf_ieee80211_ff_bss_transition_candidate_list_entries,
20429 {"BSS Transition Candidate List Entries", "wlan.fixed.bss_transition_candidate_list_entries",
20430 FT_BYTES, BASE_NONE, NULL, 0,
20434 {&hf_ieee80211_cf_response_offset,
20435 {"Response Offset", "wlan.res_offset",
20436 FT_UINT16, BASE_DEC, NULL, 0,
20439 {&hf_ieee80211_grant_ack_reserved,
20440 {"Reserved", "wlan.grant_ack.reserved",
20441 FT_BYTES, BASE_NONE, NULL, 0,
20444 {&hf_ieee80211_ff_dynamic_allocation,
20445 {"Dynamic Allocation", "wlan.dynamic_allocation",
20446 FT_UINT40, BASE_HEX, NULL, 0,
20449 {&hf_ieee80211_ff_TID,
20450 {"TID", "wlan.dynamic_allocation.tid",
20451 FT_UINT40, BASE_DEC, NULL, 0x000000000F,
20454 {&hf_ieee80211_ff_alloc_type,
20455 {"Allocation Type", "wlan.dynamic_allocation.alloc_type",
20456 FT_UINT40, BASE_DEC, NULL, 0x000000070,
20459 {&hf_ieee80211_ff_src_aid,
20460 {"Source AID", "wlan.dynamic_allocation.src_aid",
20461 FT_UINT40, BASE_DEC, NULL, 0x0000007F80,
20464 {&hf_ieee80211_ff_dest_aid,
20465 {"Destination AID", "wlan.dynamic_allocation.dest_aid",
20466 FT_UINT40, BASE_DEC, NULL, 0x00007f8000,
20469 {&hf_ieee80211_ff_alloc_duration,
20470 {"Allocation Duration", "wlan.dynamic_allocation.alloc_duration",
20471 FT_UINT40, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom), 0x7FFF800000,
20474 {&hf_ieee80211_ff_b39,
20475 {"Reserved (b39)", "wlan.dynamic_allocation.b39",
20476 FT_UINT40, BASE_HEX, NULL, 0x8000000000,
20479 {&hf_ieee80211_ff_ssw,
20480 {"Sector Sweep", "wlan.ssw",
20481 FT_UINT24, BASE_HEX, NULL, 0,
20484 {&hf_ieee80211_ff_ssw_direction,
20485 {"Sector Sweep Direction", "wlan.ssw.direction",
20486 FT_BOOLEAN, 24, TFS(&ieee80211_cf_ssw_direction), 0x000001,
20489 {&hf_ieee80211_ff_ssw_cdown,
20490 {"Sector Sweep CDOWN", "wlan.ssw.cdown",
20491 FT_UINT24, BASE_DEC, NULL, 0x0003fe,
20494 {&hf_ieee80211_ff_ssw_sector_id,
20495 {"Sector Sweep Sector ID", "wlan.ssw.sector_id",
20496 FT_UINT24, BASE_DEC, NULL, 0x00fc00,
20499 {&hf_ieee80211_ff_ssw_dmg_ant_id,
20500 {"Sector Sweep DMG Antenna ID", "wlan.ssw.dmg_ant_id",
20501 FT_UINT24, BASE_DEC, NULL, 0x030000,
20504 {&hf_ieee80211_ff_ssw_rxss_len,
20505 {"Sector Sweep RXSS Length", "wlan.ssw.rxss_len",
20506 FT_UINT24, BASE_DEC, NULL, 0xfc0000,
20509 {&hf_ieee80211_ff_bf,
20510 {"Beam Forming", "wlan.bf",
20511 FT_UINT16, BASE_HEX, NULL, 0,
20514 {&hf_ieee80211_ff_bf_train,
20515 {"Beam Forming Training", "wlan.bf.train",
20516 FT_BOOLEAN, 16, NULL, 0x0001,
20519 {&hf_ieee80211_ff_bf_is_init,
20520 {"Beam Forming Is InitiatorTXSS", "wlan.bf.isInit",
20521 FT_BOOLEAN, 16, NULL, 0x0002,
20524 {&hf_ieee80211_ff_bf_is_resp,
20525 {"Beam Forming Is ResponderTXSS", "wlan.bf.isResp",
20526 FT_BOOLEAN, 16, NULL, 0x0004,
20529 {&hf_ieee80211_ff_bf_rxss_len,
20530 {"Beam Forming RXSS Length", "wlan.bf.rxss_len",
20531 FT_UINT16, BASE_DEC, NULL, 0x01f8,
20534 {&hf_ieee80211_ff_bf_rxss_rate,
20535 {"Beam Forming RXSS Rate", "wlan.bf.rxss_rate",
20536 FT_BOOLEAN, 16, NULL, 0x0200,
20539 {&hf_ieee80211_ff_bf_b10b15,
20540 {"Reserved (B10-B15)", "wlan.bf.reserved",
20541 FT_UINT16, BASE_DEC, NULL, 0xFC00,
20544 {&hf_ieee80211_ff_bf_num_sectors,
20545 {"Beam Forming Total Number of Sectors", "wlan.bf.num_sectors",
20546 FT_UINT16, BASE_DEC, NULL, 0x03f8,
20549 {&hf_ieee80211_ff_bf_num_rx_dmg_ants,
20550 {"Beam Forming Number of DMG Antennas", "wlan.bf.num_dmg_ants",
20551 FT_UINT16, BASE_DEC, NULL, 0x0c00,
20554 {&hf_ieee80211_ff_bf_b12b15,
20555 {"Reserved (B12-B15)", "wlan.bf.reserved",
20556 FT_UINT16, BASE_DEC, NULL, 0xF000,
20559 {&hf_ieee80211_addr_nav_da,
20560 {"Destination address of STA that caused NAV update", "wlan.nav_da",
20561 FT_ETHER, BASE_NONE, NULL, 0,
20562 "DMG Destination Hardware Address", HFILL }},
20564 {&hf_ieee80211_addr_nav_sa,
20565 {"Source address of STA that caused NAV update", "wlan.nav_sa",
20566 FT_ETHER, BASE_NONE, NULL, 0,
20567 "DMG Source Hardware Address", HFILL }},
20569 {&hf_ieee80211_ff_sswf,
20570 {"Sector Sweep Feedback", "wlan.sswf",
20571 FT_UINT24, BASE_HEX, NULL, 0,
20574 {&hf_ieee80211_ff_sswf_total_sectors,
20575 {"Sector Sweep Feedback total number of sectors", "wlan.sswf.num_sectors",
20576 FT_UINT24, BASE_DEC, NULL, 0x0001ff,
20579 {&hf_ieee80211_ff_sswf_num_rx_dmg_ants,
20580 {"Sector Sweep Feedback Number of receive DMG Antennas", "wlan.sswf.num_dmg_ants",
20581 FT_UINT24, BASE_DEC, NULL, 0x000600,
20584 {&hf_ieee80211_ff_sswf_poll_required,
20585 {"Sector Sweep Feedback Poll required", "wlan.sswf.poll",
20586 FT_BOOLEAN, 24, NULL, 0x010000,
20589 {&hf_ieee80211_ff_sswf_reserved1,
20590 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
20591 FT_UINT24, BASE_HEX, NULL, 0x00F800,
20594 {&hf_ieee80211_ff_sswf_reserved2,
20595 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
20596 FT_UINT24, BASE_HEX, NULL, 0xFE0000,
20599 {&hf_ieee80211_ff_sswf_sector_select,
20600 {"Sector Sweep Feedback Sector Select", "wlan.sswf.sector_select",
20601 FT_UINT24, BASE_DEC, NULL, 0x00003F,
20604 {&hf_ieee80211_ff_sswf_dmg_antenna_select,
20605 {"Sector Sweep Feedback DMG Antenna Select", "wlan.sswf.dmg_antenna_select",
20606 FT_UINT24, BASE_DEC, NULL, 0x0000C0,
20609 {&hf_ieee80211_ff_sswf_snr_report,
20610 {"Sector Sweep Feedback SNR Report", "wlan.sswf.snr_report",
20611 FT_UINT24, BASE_DEC, NULL, 0x00FF00,
20615 {&hf_ieee80211_ff_brp,
20616 {"BRP Request", "wlan.brp",
20617 FT_UINT32, BASE_HEX, NULL, 0,
20620 {&hf_ieee80211_ff_brp_L_RX,
20621 {"BRP Request L-RX", "wlan.brp.l_rx",
20622 FT_UINT32, BASE_DEC, NULL, 0x0000001f,
20625 {&hf_ieee80211_ff_brp_TX_TRN_REQ,
20626 {"BRP Request TX-TRN-REQ", "wlan.brp.tx_trn_req",
20627 FT_BOOLEAN, 32, NULL, 0x00000020,
20630 {&hf_ieee80211_ff_brp_MID_REQ,
20631 {"BRP Request MID-REQ", "wlan.brp.mid_req",
20632 FT_BOOLEAN, 32, NULL, 0x00000040,
20635 {&hf_ieee80211_ff_brp_BC_REQ,
20636 {"BRP Request BC-REQ", "wlan.brp.bc_req",
20637 FT_BOOLEAN, 32, NULL, 0x00000080,
20640 {&hf_ieee80211_ff_brp_MID_GRANT,
20641 {"BRP Request MID-GRANT", "wlan.brp.mid_grant",
20642 FT_BOOLEAN, 32, NULL, 0x00000100,
20645 {&hf_ieee80211_ff_brp_BC_GRANT,
20646 {"BRP Request BC-GRANT", "wlan.brp.bc_grant",
20647 FT_BOOLEAN, 32, NULL, 0x00000200,
20650 {&hf_ieee80211_ff_brp_chan_FBCK_CAP,
20651 {"BRP Request Chan FBCK-CAP", "wlan.brp.chan_fbck_cap",
20652 FT_BOOLEAN, 32, NULL, 0x00000400,
20655 {&hf_ieee80211_ff_brp_tx_sector,
20656 {"BRP Request TX Sector ID", "wlan.brp.tx_sector_id",
20657 FT_UINT32, BASE_DEC, NULL, 0x0001f800,
20660 {&hf_ieee80211_ff_brp_other_aid,
20661 {"BRP Request Other AID", "wlan.brp.other_aid",
20662 FT_UINT32, BASE_DEC, NULL, 0x01fe0000,
20665 {&hf_ieee80211_ff_brp_tx_antenna,
20666 {"BRP Request TX Antenna ID", "wlan.brp.tx_antenna_id",
20667 FT_UINT32, BASE_DEC, NULL, 0x06000000,
20670 {&hf_ieee80211_ff_brp_reserved,
20671 {"BRP Request Reserved", "wlan.brp.reserved",
20672 FT_UINT32, BASE_HEX, NULL, 0xF8000000,
20675 {&hf_ieee80211_ff_blm,
20676 {"Beamformed Link Maintenance", "wlan.blm",
20677 FT_UINT8, BASE_HEX, NULL, 0,
20680 {&hf_ieee80211_ff_blm_unit_index,
20681 {"BeamLink Maintenance Uint Index", "wlan.blm.uint_index",
20682 FT_BOOLEAN, 8, NULL, 0x01,
20685 {&hf_ieee80211_ff_blm_maint_value,
20686 {"BeamLink Maintenance Value", "wlan.blm.value",
20687 FT_UINT8, BASE_DEC, NULL, 0x7e,
20690 {&hf_ieee80211_ff_blm_is_master,
20691 {"BeamLink Is Master", "wlan.blm.is_master",
20692 FT_BOOLEAN, 8, NULL, 0x80,
20695 {&hf_ieee80211_ff_bic,
20696 {"Beacon Interval Control", "wlan.bic",
20697 FT_UINT48, BASE_HEX, NULL, 0,
20700 {&hf_ieee80211_ff_bic_cc_present,
20701 {"Clustering Control Present", "wlan.bic.cc",
20702 FT_BOOLEAN, 48, NULL, 0x000000000001,
20705 {&hf_ieee80211_ff_bic_discovery_mode,
20706 {"Discovery Mode", "wlan.bic.discovery_mode",
20707 FT_BOOLEAN, 48, NULL, 0x000000000002,
20710 {&hf_ieee80211_ff_bic_next_beacon,
20711 {"Next Beacon", "wlan.bic.next_beacon",
20712 FT_UINT48, BASE_DEC, NULL, 0x00000000003c,
20716 {&hf_ieee80211_ff_bic_ati_present,
20717 {"ATI Present", "wlan.bic.ati",
20718 FT_BOOLEAN, 48, NULL, 0x000000000040,
20721 {&hf_ieee80211_ff_bic_abft_len,
20722 {"A-BFT length", "wlan.bic.abft_len",
20723 FT_UINT48, BASE_DEC, NULL, 0x000000000380,
20726 {&hf_ieee80211_ff_bic_fss,
20727 {"FSS", "wlan.bic.fss",
20728 FT_UINT48, BASE_DEC, NULL, 0x000000003c00,
20731 {&hf_ieee80211_ff_bic_is_resp,
20732 {"Is TXSS Responder", "wlan.bic.is_responder",
20733 FT_BOOLEAN, 48, NULL, 0x000000004000,
20736 {&hf_ieee80211_ff_bic_next_abft,
20737 {"Next A-BFT", "wlan.bic.next_abft",
20738 FT_UINT48, BASE_DEC, NULL, 0x000000078000,
20741 {&hf_ieee80211_ff_bic_frag_txss,
20742 {"Fragmented TXSS", "wlan.bic.frag_txss",
20743 FT_BOOLEAN, 48, NULL, 0x000000080000,
20746 {&hf_ieee80211_ff_bic_txss_span,
20747 {"TXSS span", "wlan.bic.txss_span",
20748 FT_UINT48, BASE_DEC, NULL, 0x000007f00000,
20751 {&hf_ieee80211_ff_bic_NBI_abft,
20752 {"Number of Beacon Intervals that are needed to allocate A-BFT", "wlan.bic.NBI_abft",
20753 FT_UINT48, BASE_DEC, NULL, 0x00078000000,
20756 {&hf_ieee80211_ff_bic_abft_count,
20757 {"A-BFT Count", "wlan.bic.abft_count",
20758 FT_UINT48, BASE_DEC, NULL, 0x001f80000000,
20761 {&hf_ieee80211_ff_bic_nabft,
20762 {"Number of A-BFT's received from each Antenna", "wlan.bic.nabft",
20763 FT_UINT48, BASE_DEC, NULL, 0x07e000000000,
20766 {&hf_ieee80211_ff_bic_pcp,
20767 {"PCP Association Ready", "wlan.bic.pcp",
20768 FT_BOOLEAN, 48, NULL, 0x080000000000,
20771 {&hf_ieee80211_ff_bic_reserved,
20772 {"Reserved", "wlan.bic.reserved",
20773 FT_UINT48, BASE_HEX, NULL, 0xF00000000000,
20776 {&hf_ieee80211_ff_dmg_params,
20777 {"DMG Parameters", "wlan.dmg_params",
20778 FT_UINT8, BASE_HEX , NULL, 0,
20781 {&hf_ieee80211_ff_dmg_params_bss,
20782 {"BSS Type", "wlan.dmg_params.bss",
20783 FT_UINT8, BASE_DEC, VALS(bss_type), 0x03,
20786 {&hf_ieee80211_ff_dmg_params_cbap_only,
20787 {"CBAP Only", "wlan.dmp_params.cbap_only",
20788 FT_BOOLEAN, 8, NULL, 0x04,
20791 {&hf_ieee80211_ff_dmg_params_cbap_src,
20792 {"CBAP Source", "wlan.dmp_params.cbap_src",
20793 FT_BOOLEAN, 8, NULL, 0x08,
20796 {&hf_ieee80211_ff_dmg_params_privacy,
20797 {"DMG Privacy", "wlan.dmp_params.privacy",
20798 FT_BOOLEAN, 8, NULL, 0x10,
20801 {&hf_ieee80211_ff_dmg_params_policy,
20802 {"ECPAC Policy Enforced", "wlan.dmp_params.policy",
20803 FT_BOOLEAN, 8, NULL, 0x20,
20806 {&hf_ieee80211_ff_cc,
20807 {"Clustering Control", "wlan.cc",
20808 FT_UINT64, BASE_HEX , NULL, 0,
20811 {&hf_ieee80211_ff_cc_abft_resp_addr,
20812 {"A-BFT Responder Address", "wlan.cc.abft_resp_addr",
20813 FT_ETHER, BASE_NONE , NULL, 0,
20816 {&hf_ieee80211_ff_cc_sp_duration,
20817 {"Beacon SP Duration", "wlan.cc.sp_duration",
20818 FT_UINT8, BASE_DEC , NULL, 0,
20821 {&hf_ieee80211_ff_cc_cluster_id,
20822 {"Cluster ID", "wlan.cc.cluster_id",
20823 FT_UINT64, BASE_DEC , NULL, 0,
20826 {&hf_ieee80211_ff_cc_role,
20827 {"Cluster Member Role", "wlan.cc.rold",
20828 FT_UINT8, BASE_DEC , NULL, 0,
20831 {&hf_ieee80211_ff_cc_max_mem,
20832 {"Cluster MaxMem", "wlan.cc.max_mem",
20833 FT_UINT8, BASE_DEC , NULL, 0,
20836 {&hf_ieee80211_tag_relay_support,
20837 {"Relay Supportability", "wlan.relay_capabilities.relay_support",
20838 FT_BOOLEAN, 8, NULL, 0x01,
20841 {&hf_ieee80211_tag_relay_use,
20842 {"Relay Usability", "wlan.relay_capabilities.relay_use",
20843 FT_BOOLEAN, 8, NULL, 0x02,
20846 {&hf_ieee80211_tag_relay_permission,
20847 {"Relay Permission", "wlan.relay_capabilities.relay_permission",
20848 FT_BOOLEAN, 8, NULL, 0x04,
20851 {&hf_ieee80211_tag_AC_power,
20852 {"A/C Power", "wlan.relay_capabilities.AC_power",
20853 FT_BOOLEAN, 8, NULL, 0x08,
20856 {&hf_ieee80211_tag_relay_prefer,
20857 {"Relay Preference", "wlan.relay_capabilities.relay_prefer",
20858 FT_BOOLEAN, 8, NULL, 0x10,
20861 {&hf_ieee80211_tag_duplex,
20862 {"Duplex", "wlan.relay_capabilities.duplex",
20863 FT_UINT8, BASE_DEC, NULL, 0x60,
20866 {&hf_ieee80211_tag_cooperation,
20867 {"Cooperation", "wlan.relay_capabilities.cooperation",
20868 FT_BOOLEAN, 8, NULL, 0x80,
20872 {&hf_ieee80211_ff_rcsi,
20873 {"Relay Capable STA Info", "wlan.rcsi",
20874 FT_UINT24, BASE_HEX, NULL, 0,
20877 {&hf_ieee80211_ff_rcsi_aid,
20878 {"AID", "wlan.rcsi.aid",
20879 FT_UINT8, BASE_DEC, NULL, 0xff,
20883 {&hf_ieee80211_ff_band_id,
20884 {"Band ID", "wlan.band_id",
20885 FT_UINT8, BASE_DEC, VALS(band_id), 0xff,
20888 {&hf_ieee80211_tag_move,
20889 {"Move", "wlan.dmg_bss_param_change.move",
20890 FT_BOOLEAN, 8, NULL, 0x01,
20893 {&hf_ieee80211_tag_size,
20894 {"Size", "wlan.dmg_bss_param_change.size",
20895 FT_BOOLEAN, 8, NULL, 0x02,
20898 {&hf_ieee80211_tag_tbtt_offset,
20899 {"TBTT Offset", "wlan.dmg_bss_param_change.tbtt_offset",
20900 FT_UINT32, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom), 0xffffffff,
20903 {&hf_ieee80211_tag_bi_duration,
20904 {"BI Duration", "wlan.dmg_bss_param_change.bi_duration",
20905 FT_UINT16, BASE_DEC, NULL, 0xffff,
20908 {&hf_ieee80211_tag_dmg_capa_sta_addr,
20909 {"STA Address", "wlan.dmg_capa.sta_addr",
20910 FT_ETHER, BASE_NONE, NULL, 0,
20911 "STA_Address", HFILL }},
20913 {&hf_ieee80211_tag_dmg_capa_aid,
20914 {"AID", "wlan.dmg_capa.aid",
20915 FT_UINT16, BASE_DEC, NULL, 0,
20917 /* 8.4.2.127.2 DMG STA Capability Information field */
20918 {&hf_ieee80211_tag_reverse_direction, /* DMG STA capa, bits [0] */
20919 {"Reverse Direction", "wlan.dmg_capa.reverse_direction",
20920 FT_BOOLEAN, 24, NULL, GENMASK(0, 0),
20923 {&hf_ieee80211_tag_hlts, /* DMG STA capa, bits [1] */
20924 {"Higher Layer Timer Synchronization", "wlan.dmg_capa.htls",
20925 FT_BOOLEAN, 24, NULL, GENMASK(1, 1),
20928 {&hf_ieee80211_tag_tpc, /* DMG STA capa, bits [2] */
20929 {"TPC", "wlan.dmg_capa.tpc",
20930 FT_BOOLEAN, 24, NULL, GENMASK(2, 2),
20933 {&hf_ieee80211_tag_spsh, /* DMG STA capa, bits [3] */
20934 {"SPSH and Interference Mitigation", "wlan.dmg_capa.spsh",
20935 FT_BOOLEAN, 24, NULL, GENMASK(3, 3),
20938 {&hf_ieee80211_tag_rx_antenna, /* DMG STA capa, bits [4..5] */
20939 {"Number of RX DMG Antennas", "wlan.dmg_capa.num_rx",
20940 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_base_custom), GENMASK(5, 4),
20943 {&hf_ieee80211_tag_fast_link, /* DMG STA capa, bits [6] */
20944 {"Fast Link Adaptation", "wlan.dmg_capa.fast_link",
20945 FT_BOOLEAN, 24, NULL, GENMASK(6, 6),
20948 {&hf_ieee80211_tag_num_sectors, /* DMG STA capa, bits [7..13] */
20949 {"Total Number of Sectors", "wlan.dmg_capa.num_sectors",
20950 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_base_custom), GENMASK(13, 7),
20953 {&hf_ieee80211_tag_rxss_length, /* DMG STA capa, bits [14..19] */
20954 {"RXSS Length", "wlan.dmg_capa.rxss_len",
20955 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_mul_two_base_custom), GENMASK(19, 14),
20958 {&hf_ieee80211_tag_reciprocity, /* DMG STA capa, bits [20] */
20959 {"DMG Antenna Reciprocity", "wlan.dmg_capa.reciprocity",
20960 FT_BOOLEAN, 24, NULL, GENMASK(20, 20),
20962 /* DMG STA capa, A-MPDU params, bits [21..26] */
20963 {&hf_ieee80211_tag_max_ampdu_exp, /* DMG STA capa, bits [21..23] */
20964 {"Maximum A-MPDU Length Exponent", "wlan.dmg_capa.max_ampdu_exp",
20965 FT_UINT24, BASE_DEC, NULL, GENMASK(23, 21),
20968 {&hf_ieee80211_tag_min_mpdu_spacing, /* DMG STA capa, bits [24..26] */
20969 {"Minimum MPDU Start Spacing", "wlan.dmg_capa.min_mpdu_spacing",
20970 FT_UINT24, BASE_DEC, NULL, GENMASK(26-24, 24-24),
20973 {&hf_ieee80211_tag_ba_flow_control , /* DMG STA capa, bits [27] */
20974 {"BA with Flow Control", "wlan.dmg_capa.bs_flow_ctrl",
20975 FT_BOOLEAN, 24, NULL, GENMASK(27-24, 27-24),
20977 /* DMG STA capa, supported MCS set, bits [28..51] */
20978 {&hf_ieee80211_tag_max_sc_rx_mcs, /* DMG STA capa, bits [28..32] */
20979 {"Maximum SC Rx MCS", "wlan.dmg_capa.max_sc_rx_mcs",
20980 FT_UINT24, BASE_DEC, NULL, GENMASK(32-24, 28-24),
20983 {&hf_ieee80211_tag_max_ofdm_rx_mcs, /* DMG STA capa, bits [33..37] */
20984 {"Maximum OFDM Rx MCS", "wlan.dmg_capa.max_ofdm_rx_mcs",
20985 FT_UINT24, BASE_DEC, NULL, GENMASK(37-24, 33-24),
20988 {&hf_ieee80211_tag_max_sc_tx_mcs, /* DMG STA capa, bits [38..42] */
20989 {"Maximum SC Tx MCS", "wlan.dmg_capa.max_sc_tx_mcs",
20990 FT_UINT24, BASE_DEC, NULL, GENMASK(42-24, 38-24),
20993 {&hf_ieee80211_tag_max_ofdm_tx_mcs, /* DMG STA capa, bits [43..47] */
20994 {"Maximum OFDM Tx MCS", "wlan.dmg_capa.max_ofdm_tx_mcs",
20995 FT_UINT24, BASE_DEC, NULL, GENMASK(47-24, 43-24),
20998 {&hf_ieee80211_tag_low_power_supported, /* DMG STA capa, bits [48] */
20999 {"Low Power SC PHY Supported", "wlan.dmg_capa.low_power_suuported",
21000 FT_BOOLEAN, 16, NULL, GENMASK(48-48, 48-48),
21003 {&hf_ieee80211_tag_code_rate, /* DMG STA capa, bits [49] */
21004 {"Code Rate 13/16", "wlan.dmg_capa.code_rate",
21005 FT_BOOLEAN, 16, NULL, GENMASK(49-48, 49-48),
21008 {&hf_ieee80211_tag_dtp, /* DMG STA capa, bits [52] */
21009 {"DTP Supported", "wlan.dmg_capa.dtp",
21010 FT_BOOLEAN, 16, NULL, GENMASK(52-48, 52-48),
21013 {&hf_ieee80211_tag_appdu_supp, /* DMG STA capa, bits [53] */
21014 {"A-PPDU Supported", "wlan.dmg_capa.appdu_supp",
21015 FT_BOOLEAN, 16, NULL, GENMASK(53-48, 53-48),
21018 {&hf_ieee80211_tag_heartbeat, /* DMG STA capa, bits [54] */
21019 {"HeartBeat", "wlan.dmg_capa.heartbeat",
21020 FT_BOOLEAN, 16, NULL, GENMASK(54-48, 54-48),
21023 {&hf_ieee80211_tag_other_aid, /* DMG STA capa, bits [55] */
21024 {"Supports Other_AID", "wlan.dmg_capa.other_aid",
21025 FT_BOOLEAN, 16, NULL, GENMASK(55-48, 55-48),
21028 {&hf_ieee80211_tag_pattern_recip, /* DMG STA capa, bits [56] */
21029 {"Antenna Pattern Reciprocity", "wlan.dmg_capa.pattern_recip",
21030 FT_BOOLEAN, 16, NULL, GENMASK(56-48, 56-48),
21033 {&hf_ieee80211_tag_heartbeat_elapsed, /* DMG STA capa, bits [57..59] */
21034 {"Heartbeat Elapsed Indication", "wlan.dmg_capa.heartbeat_elapsed",
21035 FT_UINT16, BASE_DEC, NULL, GENMASK(59-48, 57-48),
21038 {&hf_ieee80211_tag_grant_ack_supp, /* DMG STA capa, bits [60] */
21039 {"Grant ACK Supported", "wlan.dmg_capa.grant_ack_supp",
21040 FT_BOOLEAN, 16, NULL, GENMASK(60-48, 60-48),
21043 {&hf_ieee80211_tag_RXSSTxRate_supp, /* DMG STA capa, bits [61] */
21044 {"RXSSTxRate Supported", "wlan.dmg_capa.RXSSTxRate",
21045 FT_BOOLEAN, 16, NULL, GENMASK(61-48, 61-48),
21047 /* 8.4.2.127.3 DMG PCP/AP Capability Information field */
21048 {&hf_ieee80211_tag_pcp_tddti, /* DMG PCP/AP capa, bits [0] */
21049 {"TDDTI", "wlan.dmg_capa.pcp_tdtti",
21050 FT_BOOLEAN, 16, NULL, GENMASK(0, 0),
21053 {&hf_ieee80211_tag_pcp_PSA, /* DMG PCP/AP capa, bits [1] */
21054 {"Pseudo-static Allocations", "wlan.dmg_capa.pcp_psa",
21055 FT_BOOLEAN, 16, NULL, GENMASK(1, 1),
21058 {&hf_ieee80211_tag_pcp_handover, /* DMG PCP/AP capa, bits [2] */
21059 {"PDP Handover", "wlan.dmg_capa.pcp_handover",
21060 FT_BOOLEAN, 16, NULL, GENMASK(2, 2),
21063 {&hf_ieee80211_tag_pcp_max_assoc, /* DMG PCP/AP capa, bits [3..10] */
21064 {"Max Associated STA Number", "wlan.dmg_capa.pcp_max_assoc",
21065 FT_UINT16, BASE_DEC, NULL, GENMASK(10, 3),
21068 {&hf_ieee80211_tag_pcp_power_src, /* DMG PCP/AP capa, bits [11] */
21069 {"Power Source", "wlan.dmg_capa.pcp_power_src",
21070 FT_BOOLEAN, 16, NULL, GENMASK(11, 11),
21073 {&hf_ieee80211_tag_pcp_decenter, /* DMG PCP/AP capa, bits [12] */
21074 {"Decentralized PCP/AP Clustering", "wlan.dmg_capa.pcp_decenter",
21075 FT_BOOLEAN, 16, NULL, GENMASK(12, 12),
21078 {&hf_ieee80211_tag_pcp_forwarding, /* DMG PCP/AP capa, bits [13] */
21079 {"PCP Forwarding", "wlan.dmg_capa.pcp_forwarding",
21080 FT_BOOLEAN, 16, NULL, GENMASK(13, 13),
21083 {&hf_ieee80211_tag_pcp_center, /* DMG PCP/AP capa, bits [14] */
21084 {"Centralized PCP/AP Clustering", "wlan.dmg_capa.pcp_center",
21085 FT_BOOLEAN, 16, NULL, GENMASK(14, 14),
21088 {&hf_ieee80211_tag_PSRSI,
21089 {"PS Request Suspension Interval", "wlan.dmg_oper.psrsi",
21090 FT_UINT8, BASE_DEC, NULL, 0,
21093 {&hf_ieee80211_tag_min_BHI_duration,
21094 {"Min BHI Duration", "wlan.dmg_oper.min_BHI_duration",
21095 FT_UINT16, BASE_DEC, NULL, 0,
21098 {&hf_ieee80211_tag_brdct_sta_info_dur,
21099 {"Broadcast STA Info Duration", "wlan.dmg_oper.brdcst_sta_info_dur",
21100 FT_UINT8, BASE_DEC, NULL, 0,
21103 {&hf_ieee80211_tag_assoc_resp_confirm_time,
21104 {"Associated Response Confirm Time", "wlan.dmg_oper.assoc_resp_confirm_time",
21105 FT_UINT8, BASE_DEC, NULL, 0,
21108 {&hf_ieee80211_tag_min_pp_duration,
21109 {"Min PP Duration", "wlan.dmg_oper.min_pp_duration",
21110 FT_UINT8, BASE_DEC, NULL, 0,
21113 {&hf_ieee80211_tag_SP_idle_timeout,
21114 {"SP Idle Timeout", "wlan.dmg_oper.SP_idle_timeout",
21115 FT_UINT8, BASE_DEC, NULL, 0,
21118 {&hf_ieee80211_tag_max_lost_beacons,
21119 {"Max Lost Beacons", "wlan.dmg_oper.max_lost_beacons",
21120 FT_UINT8, BASE_DEC, NULL, 0,
21123 {&hf_ieee80211_tag_type,
21124 {"Type", "wlan.sctor_id.type",
21125 FT_UINT32, BASE_HEX, NULL, 0x0000000f,
21128 {&hf_ieee80211_tag_tap1,
21129 {"Tap 1", "wlan.sctor_id.tap1",
21130 FT_UINT32, BASE_HEX, NULL, 0x000003f0,
21133 {&hf_ieee80211_tag_state1,
21134 {"State 1", "wlan.sctor_id.state1",
21135 FT_UINT32, BASE_HEX, NULL, 0x0000fc00,
21138 {&hf_ieee80211_tag_tap2,
21139 {"Tap 2", "wlan.sctor_id.tap2",
21140 FT_UINT32, BASE_HEX, NULL, 0x00ff0000,
21143 {&hf_ieee80211_tag_state2,
21144 {"State 2", "wlan.sctor_id.state2",
21145 FT_UINT32, BASE_HEX, NULL, 0xff000000,
21148 {&hf_ieee80211_tag_allocation_id,
21149 {"Allocation ID", "wlan.ext_sched.alloc_id",
21150 FT_UINT16, BASE_DEC, NULL, 0x000f,
21153 {&hf_ieee80211_tag_allocation_type,
21154 {"Allocation Type", "wlan.ext_sched.alloc_type",
21155 FT_UINT16, BASE_DEC, VALS(allocation_type), 0x0070,
21158 {&hf_ieee80211_tag_pseudo_static,
21159 {"Pseudo-static", "wlan.ext_sched.p_static",
21160 FT_BOOLEAN, 16, NULL, 0x0080,
21163 {&hf_ieee80211_tag_truncatable,
21164 {"Truncatable", "wlan.ext_sched.truncatable",
21165 FT_BOOLEAN, 16, NULL, 0x0100,
21168 {&hf_ieee80211_tag_extendable,
21169 {"Extenedable", "wlan.ext_sched.extendable",
21170 FT_BOOLEAN, 16, NULL, 0x0200,
21173 {&hf_ieee80211_tag_pcp_active,
21174 {"PCP Active", "wlan.ext_sched.pcp_active",
21175 FT_BOOLEAN, 16, NULL, 0x0400,
21178 {&hf_ieee80211_tag_lp_sc_used,
21179 {"LP SC Used", "wlan.ext_sched.lp_sc_used",
21180 FT_BOOLEAN, 16, NULL, 0x0800,
21183 {&hf_ieee80211_tag_src_aid,
21184 {"Source AID", "wlan.ext_sched.src_id",
21185 FT_UINT8, BASE_DEC, NULL, 0xff,
21188 {&hf_ieee80211_tag_dest_aid,
21189 {"Destination AID", "wlan.ext_sched.dest_id",
21190 FT_UINT8, BASE_DEC, NULL, 0xff,
21193 {&hf_ieee80211_tag_alloc_start,
21194 {"Allocation Start", "wlan.ext_sched.alloc_start",
21195 FT_UINT32, BASE_DEC, NULL, 0,
21198 {&hf_ieee80211_tag_alloc_block_duration,
21199 {"Allocation Block Duration", "wlan.ext_sched.block_duration",
21200 FT_UINT16, BASE_DEC, NULL, 0xffff,
21203 {&hf_ieee80211_tag_num_blocks,
21204 {"Number of Blocks", "wlan.ext_sched.num_blocks",
21205 FT_UINT8, BASE_DEC, NULL, 0xff,
21208 {&hf_ieee80211_tag_alloc_block_period,
21209 {"Allocation Block Period", "wlan.ext_sched.alloc_block_period",
21210 FT_UINT16, BASE_DEC, NULL, 0xffff,
21213 {&hf_ieee80211_tag_aid,
21214 {"AID", "wlan.sta_avail.aid",
21215 FT_UINT16, BASE_DEC, NULL, 0x00ff,
21218 {&hf_ieee80211_tag_cbap,
21219 {"CBAP", "wlan.sta_avail.cbap",
21220 FT_BOOLEAN, 16, NULL, 0x0100,
21223 {&hf_ieee80211_tag_pp_avail,
21224 {"PP Available", "wlan.sta_avail.pp_avail",
21225 FT_BOOLEAN, 16, NULL, 0x0200,
21228 {&hf_ieee80211_tag_next_ati_start_time,
21229 {"Start Time", "wlan.next_ati.start_time",
21230 FT_UINT32, BASE_DEC, NULL, 0,
21233 {&hf_ieee80211_tag_next_ati_duration,
21234 {"ATI Duration", "wlan.next_ati.duration",
21235 FT_UINT16, BASE_DEC, NULL, 0xffff,
21238 {&hf_ieee80211_tag_old_bssid,
21239 {"Old BSSID", "wlan.pcp_handover.old_bssid",
21240 FT_ETHER, BASE_NONE, NULL, 0,
21241 "OLD_BSSID", HFILL }},
21243 {&hf_ieee80211_tag_new_pcp_addr,
21244 {"New PCP Address", "wlan.pcp_handover.new_pcp_addr",
21245 FT_ETHER, BASE_NONE, NULL, 0,
21246 "New_PCP_Address", HFILL }},
21248 {&hf_ieee80211_tag_bssid,
21249 {"BSSID", "wlan.quiet_res.bssid",
21250 FT_ETHER, BASE_NONE, NULL, 0,
21251 "BSS-ID", HFILL }},
21253 {&hf_ieee80211_tag_duplex_relay,
21254 {"Duplex", "wlan.relay_capabilities.duplex",
21255 FT_UINT8, BASE_DEC, NULL, 0x01,
21258 {&hf_ieee80211_tag_cooperation_relay,
21259 {"Cooperation", "wlan.relay_capabilities.cooperation",
21260 FT_BOOLEAN, 8, NULL, 0x02,
21263 {&hf_ieee80211_tag_tx_mode,
21264 {"TX-Mode", "wlan.realy_trans_param.tx_mode",
21265 FT_BOOLEAN, 8, NULL, 0x04,
21268 {&hf_ieee80211_tag_link_change_interval,
21269 {"Link Change Interval", "wlan.realy_trans_param.link_change_interval",
21270 FT_UINT8, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom), 0xff,
21273 {&hf_ieee80211_tag_data_sensing_time,
21274 {"Data Sensing Time", "wlan.realy_trans_param.data_sensing_time",
21275 FT_UINT8, BASE_DEC, NULL, 0xff,
21278 {&hf_ieee80211_tag_first_period,
21279 {"First Period", "wlan.realy_trans_param.first_period",
21280 FT_UINT16, BASE_DEC, NULL, 0xffff,
21283 {&hf_ieee80211_tag_second_period,
21284 {"Second Period", "wlan.realy_trans_param.second_period",
21285 FT_UINT16, BASE_DEC, NULL, 0xffff,
21288 {&hf_ieee80211_tag_initiator,
21289 {"Initiator", "wlan.beam_refine.initiator",
21290 FT_BOOLEAN, 40, NULL, 0x0000000001,
21293 {&hf_ieee80211_tag_tx_train_res,
21294 {"TX-train-response", "wlan.beam_refine.tx_train_res",
21295 FT_BOOLEAN, 40, NULL, 0x0000000002,
21298 {&hf_ieee80211_tag_rx_train_res,
21299 {"RX-train-response", "wlan.beam_refine.rx_train_res",
21300 FT_BOOLEAN, 40, NULL, 0x0000000004,
21303 {&hf_ieee80211_tag_tx_trn_ok,
21304 {"TX-TRN-OK", "wlan.beam_refine.tx_trn_ok",
21305 FT_BOOLEAN, 40, NULL, 0x0000000008,
21308 {&hf_ieee80211_tag_txss_fbck_req,
21309 {"TXSS-FBCK-REQ", "wlan.beam_refine.txss_fbck_req",
21310 FT_BOOLEAN, 40, NULL, 0x0000000010,
21313 {&hf_ieee80211_tag_bs_fbck,
21314 {"BS-FBCK", "wlan.beam_refine.bs_fbck",
21315 FT_UINT40, BASE_DEC, NULL, 0x00000007e0,
21318 {&hf_ieee80211_tag_bs_fbck_antenna_id,
21319 {"BS-FBCK Anetenna ID", "wlan.beam_refine.bs_fbck_antenna_id",
21320 FT_UINT40, BASE_DEC, NULL, 0x0000001800,
21323 {&hf_ieee80211_tag_snr_requested,
21324 {"SNR Requested", "wlan.beam_refine.snr_req",
21325 FT_BOOLEAN, 40, NULL, 0x0000002000,
21328 {&hf_ieee80211_tag_channel_measurement_requested,
21329 {"Channel Measurement Requested", "wlan.beam_refine.ch_measure_req",
21330 FT_BOOLEAN, 40, NULL, 0x0000004000,
21333 {&hf_ieee80211_tag_number_of_taps_requested,
21334 {"Number of Taps Requested", "wlan.beam_refine.taps_req",
21335 FT_UINT40, BASE_DEC | BASE_VAL64_STRING, VALS64(number_of_taps_values), 0x0000018000,
21338 {&hf_ieee80211_tag_sector_id_order_req,
21339 {"Sector ID Order Requested", "wlan.beam_refine.sector_id_req",
21340 FT_BOOLEAN, 40, NULL, 0x0000020000,
21343 {&hf_ieee80211_tag_snr_present,
21344 {"SNR Present", "wlan.beam_refine.snr_present",
21345 FT_BOOLEAN, 40, NULL, 0x0000040000,
21348 {&hf_ieee80211_tag_channel_measurement_present,
21349 {"Channel Measurement Present", "wlan.beam_refine.ch_measure_present",
21350 FT_BOOLEAN, 40, NULL, 0x0000080000,
21353 {&hf_ieee80211_tag_tap_delay_present,
21354 {"Tap Delay Present", "wlan.beam_refine.tap_delay_present",
21355 FT_BOOLEAN, 40, NULL, 0x0000100000,
21358 {&hf_ieee80211_tag_number_of_taps_present,
21359 {"Number of Taps Present", "wlan.beam_refine.taps_present",
21360 FT_UINT40, BASE_DEC | BASE_VAL64_STRING, VALS64(number_of_taps_values), 0x0000600000,
21363 {&hf_ieee80211_tag_number_of_measurement,
21364 {"Number of Measurements", "wlan.beam_refine.num_measurement",
21365 FT_UINT40, BASE_DEC, NULL, 0x003f800000,
21368 {&hf_ieee80211_tag_sector_id_order_present,
21369 {"Sector ID Order Present", "wlan.beam_refine.sector_id_present",
21370 FT_BOOLEAN, 40, NULL, 0x0040000000,
21373 {&hf_ieee80211_tag_number_of_beams,
21374 {"Number of Beams", "wlan.beam_refine.num_beams",
21375 FT_UINT40, BASE_DEC, NULL, 0x0f80000000,
21378 {&hf_ieee80211_tag_mid_extension,
21379 {"MID Extension", "wlan.beam_refine.mid_ext",
21380 FT_BOOLEAN, 40, NULL, 0x1000000000,
21383 {&hf_ieee80211_tag_capability_request,
21384 {"Capability Request", "wlan.beam_refine.cap_req",
21385 FT_BOOLEAN, 40, NULL, 0x2000000000,
21388 {&hf_ieee80211_tag_beam_refine_reserved,
21389 {"Reserved", "wlan.beam_refine.reserved",
21390 FT_UINT40, BASE_DEC, NULL, 0xc000000000,
21393 {&hf_ieee80211_tag_nextpcp_list,
21394 {"AID of NextPCP", "wlan.next_pcp.list",
21395 FT_UINT8, BASE_DEC, NULL, 0,
21398 {&hf_ieee80211_tag_nextpcp_token,
21399 {"NextPCP List Token", "wlan.next_pcp.token",
21400 FT_UINT8, BASE_DEC, NULL, 0,
21403 {&hf_ieee80211_tag_reamaining_BI,
21404 {"Remaining BI's", "wlan.pcp_handover.remaining_BIs",
21405 FT_UINT8, BASE_DEC, NULL, 0,
21408 {&hf_ieee80211_tag_request_token,
21409 {"Request Token", "wlan.request_token",
21410 FT_UINT16, BASE_DEC, NULL, 0,
21413 {&hf_ieee80211_tag_bi_start_time,
21414 {"BI Start Time", "wlan.bi_start_time",
21415 FT_UINT32, BASE_DEC, NULL, 0,
21418 {&hf_ieee80211_tag_sleep_cycle,
21419 {"Sleep Cycle", "wlan.sleep_cycle",
21420 FT_UINT16, BASE_DEC, NULL, 0,
21423 {&hf_ieee80211_tag_num_awake_bis,
21424 {"Number of Awake/Doze BIs", "wlan.num_awake_bis",
21425 FT_UINT16, BASE_DEC, NULL, 0,
21428 {&hf_ieee80211_ff_dmg_action_code,
21429 {"DMG Action", "wlan.fixed.dmg_act",
21430 FT_UINT8, BASE_HEX, VALS(ff_dmg_action_flags), 0,
21431 "Action Code", HFILL }},
21433 {&hf_ieee80211_ff_unprotected_dmg_action_code,
21434 {"Unprotected DMG Action", "wlan.fixed.unprotected_dmg_act",
21435 FT_UINT8, BASE_HEX, VALS(ff_unprotected_dmg_action_flags), 0,
21436 "Action Code", HFILL }},
21438 {&hf_ieee80211_ff_dmg_pwr_mgmt,
21439 {"DMG Power Management", "wlan.dmg.pwr_mgmt",
21440 FT_BOOLEAN, 8, NULL, 0x01,
21443 {&hf_ieee80211_ff_subject_address,
21444 {"Subject Address", "wlan.dmg.subject_addr",
21445 FT_ETHER, BASE_NONE, NULL, 0,
21446 "MAC address of requested STA", HFILL }},
21448 {&hf_ieee80211_ff_handover_reason,
21449 {"Handover Reason", "wlan.dmg.handover_reason",
21450 FT_UINT8, BASE_DEC, NULL, 0x03,
21453 {&hf_ieee80211_ff_handover_remaining_bi,
21454 {"Handover Remaining BI", "wlan.dmg.handover_remaining_bi",
21455 FT_UINT8, BASE_DEC, NULL, 0x01,
21458 {&hf_ieee80211_ff_handover_result,
21459 {"Handover Result", "wlan.dmg.handover_result",
21460 FT_UINT8, BASE_DEC, NULL, 0x01,
21463 {&hf_ieee80211_ff_handover_reject_reason,
21464 {"Handover Reject Reason", "wlan.dmg.handover_reject_reason",
21465 FT_UINT8, BASE_DEC, NULL, 0x03,
21468 {&hf_ieee80211_ff_destination_reds_aid,
21469 {"Destination REDS AID", "wlan.dmg.destination_reds_aid",
21470 FT_UINT16, BASE_DEC, NULL, 0,
21473 {&hf_ieee80211_ff_destination_aid,
21474 {"Destination AID", "wlan.dmg.destination_aid",
21475 FT_UINT16, BASE_DEC, NULL, 0,
21478 {&hf_ieee80211_ff_realy_aid,
21479 {"Relay AID", "wlan.dmg.realy_aid",
21480 FT_UINT16, BASE_DEC, NULL, 0,
21483 {&hf_ieee80211_ff_source_aid,
21484 {"Source AID", "wlan.dmg.source_aid",
21485 FT_UINT16, BASE_DEC, NULL, 0,
21488 {&hf_ieee80211_ff_timing_offset,
21489 {"Timing Offset", "wlan.dmg.timing_offset",
21490 FT_UINT16, BASE_DEC, NULL, 0,
21493 {&hf_ieee80211_ff_sampling_frequency_offset,
21494 {"Sampling Frequency Offset", "wlan.dmg.sampling_frequency_offset",
21495 FT_UINT16, BASE_DEC, NULL, 0,
21498 {&hf_ieee80211_ff_relay_operation_type,
21499 {"Relay Operation Type", "wlan.dmg.relay_operation_type",
21500 FT_UINT8, BASE_DEC, NULL, 0x03,
21503 {&hf_ieee80211_ff_peer_sta_aid,
21504 {"Peer STA AID", "wlan.dmg.peer_sta_aid",
21505 FT_UINT8, BASE_DEC, NULL, 0,
21508 {&hf_ieee80211_ff_snr,
21509 {"SNR", "wlan.dmg.snr",
21510 FT_UINT8, BASE_DEC, NULL, 0,
21513 {&hf_ieee80211_ff_internal_angle,
21514 {"Internal Angle", "wlan.dmg.internal_angle",
21515 FT_UINT8, BASE_DEC, NULL, 0xfe,
21518 {&hf_ieee80211_ff_recommend,
21519 {"Recommend", "wlan.dmg.recommend",
21520 FT_UINT8, BASE_DEC, NULL, 0x01,
21523 {&hf_ieee80211_ff_fst_action_code,
21524 {"FST Action Code", "wlan.fst.action_code",
21525 FT_UINT8, BASE_HEX, VALS(ff_fst_action_flags), 0,
21526 "Action Code", HFILL }},
21528 {&hf_ieee80211_ff_llt,
21529 {"Link Loss Timeout", "wlan.fst.llt",
21530 FT_UINT32, BASE_DEC, NULL, 0,
21533 {&hf_ieee80211_ff_fsts_id,
21534 {"FSTS ID", "wlan.session_trans.fsts_id",
21535 FT_UINT32, BASE_DEC, NULL, 0,
21538 {&hf_ieee80211_ff_mmpdu_len,
21539 {"MMPDU Length", "wlan.fst.mmpdu_length",
21540 FT_UINT16, BASE_DEC, NULL, 0,
21543 {&hf_ieee80211_ff_mmpdu_ctrl,
21544 {"MMPDU Control", "wlan.fst.mmpdu_ctrl",
21545 FT_UINT16, BASE_HEX, NULL, 0,
21548 {&hf_ieee80211_ff_oct_mmpdu,
21549 {"OCT MMPDU", "wlan.fst.oct_mmpdu",
21550 FT_BYTES, BASE_NONE, NULL, 0,
21553 {&hf_ieee80211_ff_vht_mimo_cntrl,
21554 {"VHT MIMO Control", "wlan.vht.mimo_control.control",
21555 FT_UINT24, BASE_HEX, NULL, 0x0,
21558 {&hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
21559 {"Nc Index", "wlan.vht.mimo_control.ncindex",
21560 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_nc_index_vals), 0x000007,
21561 "Number of Columns Less One", HFILL }},
21563 {&hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
21564 {"Nr Index", "wlan.vht.mimo_control.nrindex",
21565 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_nr_index_vals), 0x000038,
21566 "Number of Rows Less One", HFILL }},
21568 {&hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
21569 {"Channel Width", "wlan.vht.mimo_control.chanwidth",
21570 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_channel_width_vals), 0x0000C0,
21573 {&hf_ieee80211_ff_vht_mimo_cntrl_grouping,
21574 {"Grouping (Ng)", "wlan.vht.mimo_control.grouping",
21575 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_grouping_vals), 0x000300,
21578 {&hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
21579 {"Codebook Information", "wlan.vht.mimo_control.codebookinfo",
21580 FT_UINT24, BASE_HEX, NULL, 0x000400,
21583 {&hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
21584 {"Feedback Type", "wlan.vht.mimo_control.feedbacktype",
21585 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_feedback_vals), 0x000800,
21588 {&hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
21589 {"Remaining Feedback Segments", "wlan.vht.mimo_control.remainingfeedbackseg",
21590 FT_UINT24, BASE_HEX, NULL, 0x007000,
21593 {&hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
21594 {"First Feedback Segments", "wlan.vht.mimo_control.firstfeedbackseg",
21595 FT_UINT24, BASE_HEX, NULL, 0x008000,
21598 {&hf_ieee80211_ff_vht_mimo_cntrl_reserved,
21599 {"Reserved", "wlan.vht.mimo_control.reserved",
21600 FT_UINT24, BASE_HEX, NULL, 0x030000,
21603 {&hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
21604 {"Sounding Dialog Toker Number", "wlan.vht.mimo_control.soundingdialogtocketnbr",
21605 FT_UINT24, BASE_HEX, NULL, 0xFC0000,
21608 {&hf_ieee80211_ff_vht_action,
21609 {"VHT Action", "wlan.vht.action",
21610 FT_UINT8, BASE_DEC, VALS(vht_action_vals), 0,
21613 {&hf_ieee80211_vht_compressed_beamforming_report,
21614 {"VHT Compressed Beamforming Report", "wlan.vht.compressed_beamforming_report",
21615 FT_BYTES, BASE_NONE, NULL, 0,
21618 {&hf_ieee80211_vht_mu_exclusive_beamforming_report,
21619 {"VHT MU Exclusive Beamforming Report","wlan.vht.exclusive_beamforming_report",
21620 FT_BYTES, BASE_NONE, NULL, 0,
21623 {&hf_ieee80211_vht_compressed_beamforming_report_snr,
21624 {"Signal to Noise Ratio (SNR)", "wlan.vht.compressed_beamforming_report.snr",
21625 FT_UINT8, BASE_HEX, NULL, 0,
21628 {&hf_ieee80211_vht_compressed_beamforming_phi_angle,
21629 {"PHI", "wlan.vht.compressed_beamforming_report.phi",
21630 FT_NONE, BASE_NONE, NULL, 0,
21633 {&hf_ieee80211_vht_compressed_beamforming_psi_angle,
21634 {"PSI", "wlan.vht.compressed_beamforming_report.psi",
21635 FT_NONE, BASE_NONE, NULL, 0,
21638 {&hf_ieee80211_vht_compressed_beamforming_feedback_matrix,
21639 {"Compressed Beamforming Feedback Matrix", "wlan.vht.compressed_beamforming_report.feedback_matrix",
21640 FT_NONE, BASE_NONE, NULL, 0,
21643 {&hf_ieee80211_vht_mu_Exclusive_beamforming_delta_snr,
21644 {"Delta SNR for space-time stream Nc for subcarrier k", "wlan.vht.exclusive_beamforming_report.delta_snr",
21645 FT_NONE, BASE_NONE, NULL, 0,
21648 {&hf_ieee80211_vht_group_id_management,
21649 {"Group ID Management", "wlan.vht.group_id_management",
21650 FT_BYTES, BASE_NONE, NULL, 0,
21653 {&hf_ieee80211_vht_membership_status_array,
21654 {"Membership Status Array", "wlan.vht.membership_status_array",
21655 FT_BYTES, BASE_NONE, NULL, 0,
21658 {&hf_ieee80211_vht_user_position_array,
21659 {"User Position Array", "wlan.vht.user_position_array",
21660 FT_BYTES, BASE_NONE, NULL, 0,
21663 {&hf_ieee80211_vht_membership_status_field,
21664 {"Membership Status Field", "wlan.vht.membership_status_array.field",
21665 FT_UINT8, BASE_DEC, NULL, 0,
21668 {&hf_ieee80211_vht_user_position_field,
21669 {"User Position Field", "wlan.vht.user_position_array.field",
21670 FT_UINT8, BASE_DEC, NULL, 0,
21673 {&hf_ieee80211_vht_operation_mode_notification,
21674 {"Operation Mode Notification", "wlan.vht.operation_mode_notification",
21675 FT_BYTES, BASE_NONE, NULL, 0,
21678 {&hf_ieee80211_tag_tspec_allocation_id,
21679 {"Allocation ID", "wlan.dmg_tspec.allocation_id",
21680 FT_UINT24, BASE_DEC, NULL, 0x00000f,
21683 {&hf_ieee80211_tag_tspec_allocation_type,
21684 {"Allocation Type", "wlan.dmg_tspec.allocation_type",
21685 FT_UINT24, BASE_DEC, NULL, 0x000070,
21688 {&hf_ieee80211_tag_tspec_allocation_format,
21689 {"Allocation Format", "wlan.dmg_tspec.allocation_format",
21690 FT_BOOLEAN, 24, NULL, 0x000080,
21693 {&hf_ieee80211_tag_tspec_pseudo_static,
21694 {"Pseudo Static", "wlan.dmg_tspec.pseudo_static",
21695 FT_BOOLEAN, 24, NULL, 0x000100,
21698 {&hf_ieee80211_tag_tspec_truncatable,
21699 {"Truncatable", "wlan.dmg_tspec.truncatable",
21700 FT_BOOLEAN, 24, NULL, 0x000200,
21703 {&hf_ieee80211_tag_tspec_extendable,
21704 {"Extendable", "wlan.dmg_tspec.extendable",
21705 FT_BOOLEAN, 24, NULL, 0x000400,
21708 {&hf_ieee80211_tag_tspec_lp_sc_used,
21709 {"LP SC Usec", "wlan.dmg_tspec.lp_sc_used",
21710 FT_BOOLEAN, 24, NULL, 0x000800,
21713 {&hf_ieee80211_tag_tspec_up,
21714 {"UP", "wlan.dmg_tspec.up",
21715 FT_UINT24, BASE_HEX, NULL, 0x007000,
21718 {&hf_ieee80211_tag_tspec_dest_aid,
21719 {"Destination AID", "wlan.dmg_tspec.dest_aid",
21720 FT_UINT24, BASE_HEX, NULL, 0x7f8000,
21723 {&hf_ieee80211_tag_tspec_allocation_period,
21724 {"Allocation Period", "wlan.dmg_tspec.allocation_period",
21725 FT_UINT16, BASE_DEC, NULL, 0,
21728 {&hf_ieee80211_tag_tspec_min_allocation,
21729 {"Minimal Allocation", "wlan.dmg_tspec.min_allocation",
21730 FT_UINT16, BASE_DEC, NULL, 0,
21733 {&hf_ieee80211_tag_tspec_max_allocation,
21734 {"Maximal Allocation", "wlan.dmg_tspec.max_allocation",
21735 FT_UINT16, BASE_DEC, NULL, 0,
21738 {&hf_ieee80211_tag_tspec_min_duration,
21739 {"Minimal Duration", "wlan.dmg_tspec.min_duration",
21740 FT_UINT16, BASE_DEC, NULL, 0,
21743 {&hf_ieee80211_tag_tspec_num_of_constraints,
21744 {"Number Of Constraints", "wlan.dmg_tspec.num_of_constraints",
21745 FT_UINT8, BASE_DEC, NULL, 0,
21748 {&hf_ieee80211_tag_tspec_tsconst_start_time,
21749 {"TS Constraint Start Time", "wlan.dmg_tspec.tsconst.start_time",
21750 FT_UINT32, BASE_DEC, NULL, 0,
21753 {&hf_ieee80211_tag_tspec_tsconst_duration,
21754 {"TS Constraint Duration", "wlan.dmg_tspec.tsconst.duration",
21755 FT_UINT16, BASE_DEC, NULL, 0,
21758 {&hf_ieee80211_tag_tspec_tsconst_period,
21759 {"TS Constraint Period", "wlan.dmg_tspec.tsconst.period",
21760 FT_UINT16, BASE_DEC, NULL, 0,
21763 {&hf_ieee80211_tag_tspec_tsconst_interferer_mac,
21764 {"TS Constraint Interferer MAC Address", "wlan.dmg_tspec.tsconst.interferer_mac",
21765 FT_ETHER, BASE_NONE, NULL, 0,
21768 {&hf_ieee80211_tag_channel_measurement_feedback_realtive_I,
21769 {"Channel Measurement Feedback Relative I", "wlan.ch_meas_fb.realtive_I",
21770 FT_UINT8, BASE_DEC, NULL, 0,
21773 {&hf_ieee80211_tag_channel_measurement_feedback_realtive_Q,
21774 {"Channel Measurement Feedback Relative Q", "wlan.ch_meas_fb.realtive_Q",
21775 FT_UINT8, BASE_DEC, NULL, 0,
21778 {&hf_ieee80211_tag_channel_measurement_feedback_tap_delay,
21779 {"Channel Measurement Feedback Tap Delay", "wlan.ch_meas_fb.tap_delay",
21780 FT_UINT8, BASE_DEC, NULL, 0,
21783 {&hf_ieee80211_tag_channel_measurement_feedback_sector_id,
21784 {"Channel Measurement Feedback Secotr ID", "wlan.ch_meas_fb.sector_id",
21785 FT_UINT8, BASE_DEC, NULL, 0xfc,
21788 {&hf_ieee80211_tag_channel_measurement_feedback_antenna_id,
21789 {"Channel Measurement Feedback Antenna ID", "wlan.ch_meas_fb.antenna_id",
21790 FT_UINT8, BASE_DEC, NULL, 0x03,
21793 {&hf_ieee80211_tag_awake_window,
21794 {"Awake Window", "wlan.awake_window",
21795 FT_UINT16, BASE_DEC, NULL, 0,
21798 {&hf_ieee80211_tag_addba_ext_no_frag,
21799 {"ADDBA No Fragmentation", "wlan.addba.no_frag",
21800 FT_BOOLEAN, 8, NULL, 0x80,
21803 {&hf_ieee80211_tag_multi_band_ctrl_sta_role,
21804 {"STA Rold", "wlan.multi_band.ctrl_sta_role",
21805 FT_UINT8, BASE_DEC, NULL, 0xe0,
21808 {&hf_ieee80211_tag_multi_band_ctrl_addr_present,
21809 {"STA MAC Address Present", "wlan.multi_band.ctrl_addr_present",
21810 FT_BOOLEAN, 8, NULL, 0x10,
21813 {&hf_ieee80211_tag_multi_band_ctrl_cipher_present,
21814 {"PCS Present", "wlan.multi_band.ctrl_cipher_present",
21815 FT_BOOLEAN, 8, NULL, 0x08,
21818 {&hf_ieee80211_tag_multi_band_oper_class,
21819 {"Operating Class", "wlan.multi_band.oper_class",
21820 FT_UINT8, BASE_DEC, NULL, 0,
21823 {&hf_ieee80211_tag_multi_band_channel_number,
21824 {"Channel Number", "wlan.multi_band.channel_number",
21825 FT_UINT8, BASE_DEC, NULL, 0,
21828 {&hf_ieee80211_tag_multi_band_tsf_offset,
21829 {"TSF Offset", "wlan.multi_band.tsf_offset",
21830 FT_UINT64, BASE_DEC, NULL, 0,
21833 {&hf_ieee80211_tag_multi_band_conn_ap,
21834 {"Connection Capability AP", "wlan.multi_band.conn_ap",
21835 FT_BOOLEAN, 8, NULL, 0x80,
21838 {&hf_ieee80211_tag_multi_band_conn_pcp,
21839 {"Connection Capability PCP", "wlan.multi_band.conn_pcp",
21840 FT_BOOLEAN, 8, NULL, 0x40,
21843 {&hf_ieee80211_tag_multi_band_conn_dls,
21844 {"Connection Capability DLS", "wlan.multi_band.conn_dls",
21845 FT_BOOLEAN, 8, NULL, 0x20,
21848 {&hf_ieee80211_tag_multi_band_conn_tdls,
21849 {"Connection Capability TDLS", "wlan.multi_band.conn_tdls",
21850 FT_BOOLEAN, 8, NULL, 0x10,
21853 {&hf_ieee80211_tag_multi_band_conn_ibss,
21854 {"Connection Capability IBSS", "wlan.multi_band.conn_ibss",
21855 FT_BOOLEAN, 8, NULL, 0x08,
21858 {&hf_ieee80211_tag_multi_band_fst_timeout,
21859 {"FST Session Timeout", "wlan.multi_band.fst_timeout",
21860 FT_UINT8, BASE_DEC, NULL, 0,
21863 {&hf_ieee80211_tag_multi_band_sta_mac,
21864 {"Transmitting STA MAC Address", "wlan.multi_band.sta_mac",
21865 FT_ETHER, BASE_NONE, NULL, 0,
21868 {&hf_ieee80211_tag_activity,
21869 {"Activity", "wlan.activity",
21870 FT_UINT8, BASE_DEC, NULL, 0,
21873 {&hf_ieee80211_tag_dmg_link_adapt_mcs,
21874 {"MCS", "wlan.dmg_link_adapt.mcs",
21875 FT_UINT8, BASE_DEC, NULL, 0,
21878 {&hf_ieee80211_tag_dmg_link_adapt_link_margin,
21879 {"Link Margin", "wlan.dmg_link_adapt.link_margin",
21880 FT_UINT8, BASE_DEC, NULL, 0,
21883 {&hf_ieee80211_tag_ref_timestamp,
21884 {"Reference Timestamp", "wlan.ref_timestamp",
21885 FT_UINT32, BASE_DEC, NULL, 0,
21888 {&hf_ieee80211_tag_switching_stream_non_qos,
21889 {"Non-Qos Data Frames", "wlan.switching_stream.non_qos",
21890 FT_BOOLEAN, 8, NULL, 0,
21893 {&hf_ieee80211_tag_switching_stream_param_num,
21894 {"Number Of Switching Stream Elements", "wlan.switching_stream.param_num",
21895 FT_UINT8, BASE_DEC, NULL, 0,
21898 {&hf_ieee80211_tag_switching_stream_old_tid,
21899 {"Old Band TID", "wlan.switching_stream.old_tid",
21900 FT_UINT16, BASE_DEC, NULL, 0xf000,
21903 {&hf_ieee80211_tag_switching_stream_old_direction,
21904 {"Old Band Direction", "wlan.switching_stream.old_direction",
21905 FT_BOOLEAN, 16, NULL, 0x0800,
21908 {&hf_ieee80211_tag_switching_stream_new_tid,
21909 {"New Band TID", "wlan.switching_stream.new_tid",
21910 FT_UINT16, BASE_DEC, NULL, 0x0780,
21913 {&hf_ieee80211_tag_switching_stream_new_direction,
21914 {"New Band Direction", "wlan.switching_stream.new_direction",
21915 FT_BOOLEAN, 16, NULL, 0x0040,
21918 {&hf_ieee80211_tag_switching_stream_new_valid_id,
21919 {"Stream ID in New Band Valid", "wlan.switching_stream.new_valid_id",
21920 FT_BOOLEAN, 16, NULL, 0x0020,
21923 {&hf_ieee80211_tag_switching_stream_llt_type,
21924 {"LLT Type", "wlan.switching_stream.llt_type",
21925 FT_BOOLEAN, 16, NULL, 0x0010,
21928 {&hf_ieee80211_ff_timestamp,
21929 {"Timestamp", "wlan.fixed.timestamp",
21930 FT_UINT64, BASE_HEX, NULL, 0,
21933 {&hf_ieee80211_ff_auth_alg,
21934 {"Authentication Algorithm", "wlan.fixed.auth.alg",
21935 FT_UINT16, BASE_DEC, VALS(auth_alg), 0,
21938 {&hf_ieee80211_ff_beacon_interval,
21939 {"Beacon Interval", "wlan.fixed.beacon",
21940 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom), 0,
21943 {&hf_ieee80211_fixed_parameters,
21944 {"Fixed parameters", "wlan.fixed.all",
21945 FT_NONE, BASE_NONE, NULL, 0,
21948 {&hf_ieee80211_tagged_parameters,
21949 {"Tagged parameters", "wlan.tagged.all",
21950 FT_NONE, BASE_NONE, NULL, 0,
21953 {&hf_ieee80211_tag_ssid,
21954 {"SSID", "wlan.ssid",
21955 FT_STRING, BASE_NONE, NULL, 0,
21956 "Indicates the identity of an ESS or IBSS", HFILL }},
21958 {&hf_ieee80211_tag_supp_rates,
21959 {"Supported Rates", "wlan.supported_rates",
21960 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_supported_rates_vals_ext, 0x0,
21961 "In Mbit/sec, (B) for Basic Rates", HFILL }},
21963 {&hf_ieee80211_tag_fh_dwell_time,
21964 {"Dwell Time", "wlan.fh.dwell_time",
21965 FT_UINT16, BASE_HEX, NULL, 0x0,
21966 "In Time Unit (TU)", HFILL }},
21968 {&hf_ieee80211_tag_fh_hop_set,
21969 {"Hop Set", "wlan.fh.hop_set",
21970 FT_UINT8, BASE_DEC, NULL, 0x0,
21973 {&hf_ieee80211_tag_fh_hop_pattern,
21974 {"Hop Pattern", "wlan.fh.hop_pattern",
21975 FT_UINT8, BASE_DEC, NULL, 0x0,
21978 {&hf_ieee80211_tag_fh_hop_index,
21979 {"Hop Index", "wlan.fh.hop_index",
21980 FT_UINT8, BASE_DEC, NULL, 0x0,
21983 {&hf_ieee80211_ff_block_ack_params,
21984 {"Block Ack Parameters", "wlan.fixed.baparams",
21985 FT_UINT16, BASE_HEX, NULL, 0,
21988 {&hf_ieee80211_ff_block_ack_params_amsdu_permitted,
21989 {"A-MSDUs", "wlan.fixed.baparams.amsdu",
21990 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_amsdu_permitted_flag), 0x0001,
21991 "A-MSDU Permitted in QoS Data MPDUs", HFILL }},
21993 {&hf_ieee80211_ff_block_ack_params_policy,
21994 {"Block Ack Policy", "wlan.fixed.baparams.policy",
21995 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_policy_flag), 0x0002,
21998 {&hf_ieee80211_ff_block_ack_params_tid,
21999 {"Traffic Identifier", "wlan.fixed.baparams.tid",
22000 FT_UINT16, BASE_HEX, NULL, 0x003C,
22003 {&hf_ieee80211_ff_block_ack_params_buffer_size,
22004 {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan.fixed.baparams.buffersize",
22005 FT_UINT16, BASE_DEC, NULL, 0xFFC0,
22006 "Number of Buffers", HFILL }},
22008 {&hf_ieee80211_ff_block_ack_timeout,
22009 {"Block Ack Timeout", "wlan.fixed.batimeout",
22010 FT_UINT16, BASE_HEX, NULL, 0,
22013 {&hf_ieee80211_ff_block_ack_ssc,
22014 {"Block Ack Starting Sequence Control (SSC)", "wlan.fixed.ssc",
22015 FT_UINT16, BASE_HEX, 0, 0,
22018 {&hf_ieee80211_ff_block_ack_ssc_fragment,
22019 {"Fragment", "wlan.fixed.ssc.fragment",
22020 FT_UINT16, BASE_DEC, 0, 0x000f,
22023 {&hf_ieee80211_ff_block_ack_ssc_sequence,
22024 {"Starting Sequence Number", "wlan.fixed.ssc.sequence",
22025 FT_UINT16, BASE_DEC, 0, 0xfff0,
22028 {&hf_ieee80211_ff_delba_param,
22029 {"Delete Block Ack (DELBA) Parameter Set", "wlan.fixed.delba.param",
22030 FT_UINT16, BASE_HEX, 0, 0,
22033 {&hf_ieee80211_ff_delba_param_reserved,
22034 {"Reserved", "wlan.fixed.delba.param.reserved",
22035 FT_UINT16, BASE_HEX, 0, 0x07ff,
22038 {&hf_ieee80211_ff_delba_param_init,
22039 {"Initiator", "wlan.fixed.delba.param.initiator",
22040 FT_BOOLEAN, 16, 0, 0x0800,
22043 {&hf_ieee80211_ff_delba_param_tid,
22044 {"TID", "wlan.fixed.delba.param.tid",
22045 FT_UINT16, BASE_HEX, 0, 0xf000,
22046 "Traffic Identifier (TID)", HFILL }},
22048 {&hf_ieee80211_ff_max_reg_pwr,
22049 {"Maximum Regulation Power", "wlan.fixed.maxregpwr",
22050 FT_UINT16, BASE_HEX, 0, 0,
22053 {&hf_ieee80211_ff_measurement_pilot_int,
22054 {"Measurement Pilot Interval", "wlan.fixed.msmtpilotint",
22055 FT_UINT16, BASE_HEX, 0, 0,
22056 "Measurement Pilot Interval Fixed Field", HFILL }},
22058 {&hf_ieee80211_ff_country_str,
22059 {"Country String", "wlan.fixed.country",
22060 FT_STRING, BASE_NONE, 0, 0,
22063 {&hf_ieee80211_ff_max_tx_pwr,
22064 {"Maximum Transmit Power", "wlan.fixed.maxtxpwr",
22065 FT_UINT8, BASE_HEX, 0, 0,
22068 {&hf_ieee80211_ff_tx_pwr_used,
22069 {"Transmit Power Used", "wlan.fixed.txpwr",
22070 FT_UINT8, BASE_HEX, 0, 0,
22073 {&hf_ieee80211_ff_transceiver_noise_floor,
22074 {"Transceiver Noise Floor", "wlan.fixed.tnoisefloor",
22075 FT_UINT8, BASE_HEX, 0, 0,
22078 {&hf_ieee80211_ff_channel_width,
22079 {"Supported Channel Width", "wlan.fixed.chanwidth",
22080 FT_UINT8, BASE_HEX, VALS(ff_channel_width_vals), 0,
22083 {&hf_ieee80211_ff_qos_info_ap,
22084 {"QoS Information (AP)", "wlan.fixed.qosinfo.ap",
22085 FT_UINT8, BASE_HEX, NULL, 0,
22088 {&hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
22089 {"EDCA Parameter Set Update Count", "wlan.fixed.qosinfo.ap.edcaupdate",
22090 FT_UINT8, BASE_HEX, NULL, 0x0F,
22091 "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL }},
22093 {&hf_ieee80211_ff_qos_info_ap_q_ack,
22094 {"Q-Ack", "wlan.fixed.qosinfo.ap.qack",
22095 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_q_ack_flag), 0x10,
22096 "QoS Ack", HFILL }},
22098 {&hf_ieee80211_ff_qos_info_ap_queue_req,
22099 {"Queue Request", "wlan.fixed.qosinfo.ap.queue_req",
22100 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_queue_req_flag), 0x20,
22103 {&hf_ieee80211_ff_qos_info_ap_txop_request,
22104 {"TXOP Request", "wlan.fixed.qosinfo.ap.txopreq",
22105 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_txop_request_flag), 0x40,
22106 "Transmit Opportunity (TXOP) Request", HFILL }},
22108 {&hf_ieee80211_ff_qos_info_ap_reserved,
22109 {"Reserved", "wlan.fixed.qosinfo.ap.reserved",
22110 FT_BOOLEAN, 8, NULL, 0x80,
22113 {&hf_ieee80211_ff_qos_info_sta,
22114 {"QoS Information (STA)", "wlan.fixed.qosinfo.sta",
22115 FT_UINT8, BASE_HEX, NULL, 0,
22116 "TCLAS Processing", HFILL }},
22118 {&hf_ieee80211_ff_qos_info_sta_ac_vo,
22119 {"AC_VO U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vo",
22120 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag), 0x01,
22123 {&hf_ieee80211_ff_qos_info_sta_ac_vi,
22124 {"AC_VI U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vi",
22125 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag), 0x02,
22128 {&hf_ieee80211_ff_qos_info_sta_ac_bk,
22129 {"AC_BK U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_bk",
22130 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag), 0x04,
22133 {&hf_ieee80211_ff_qos_info_sta_ac_be,
22134 {"AC_BE U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_be",
22135 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag), 0x08,
22138 {&hf_ieee80211_ff_qos_info_sta_q_ack,
22139 {"Q-Ack", "wlan.fixed.qosinfo.sta.qack",
22140 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_q_ack_flag), 0x10,
22141 "QoS Ack", HFILL }},
22143 {&hf_ieee80211_ff_qos_info_sta_max_sp_length,
22144 {"Max SP Length", "wlan.fixed.qosinfo.sta.max_sp_length",
22145 FT_UINT8, BASE_HEX, VALS(ff_qos_info_sta_max_sp_len_flags) , 0x60,
22148 {&hf_ieee80211_ff_qos_info_sta_more_data_ack,
22149 {"More Data Ack", "wlan.fixed.qosinfo.sta.more_data_ack",
22150 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_more_data_ack_flag), 0x80,
22153 {&hf_ieee80211_ff_sm_pwr_save,
22154 {"Spatial Multiplexing (SM) Power Control", "wlan.fixed.sm.powercontrol",
22155 FT_UINT8, BASE_HEX, NULL, 0,
22158 {&hf_ieee80211_ff_sm_pwr_save_enabled,
22159 {"SM Power Save", "wlan.fixed.sm.powercontrol.enabled",
22160 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
22161 "Spatial Multiplexing (SM) Power Save", HFILL }},
22163 {&hf_ieee80211_ff_sm_pwr_save_sm_mode,
22164 {"SM Mode", "wlan.fixed.sm.powercontrol.mode",
22165 FT_BOOLEAN, 8, TFS(&ff_sm_pwr_save_sm_mode_flag), 0x02,
22166 "Spatial Multiplexing (SM) Mode", HFILL }},
22168 {&hf_ieee80211_ff_sm_pwr_save_reserved,
22169 {"Reserved", "wlan.fixed.sm.powercontrol.reserved",
22170 FT_UINT8, BASE_HEX, NULL, 0xFC,
22173 {&hf_ieee80211_ff_pco_phase_cntrl,
22174 {"Phased Coexistence Operation (PCO) Phase Control", "wlan.fixed.pco.phasecntrl",
22175 FT_BOOLEAN, BASE_NONE, TFS(&ff_pco_phase_cntrl_flag), 0x0,
22178 {&hf_ieee80211_ff_psmp_param_set,
22179 {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan.fixed.psmp.paramset",
22180 FT_UINT16, BASE_HEX, 0, 0,
22183 {&hf_ieee80211_ff_psmp_param_set_n_sta,
22184 {"Number of STA Info Fields Present", "wlan.fixed.psmp.paramset.nsta",
22185 FT_UINT16, BASE_HEX, 0, 0x000F,
22188 {&hf_ieee80211_ff_psmp_param_set_more_psmp,
22189 {"More PSMP", "wlan.fixed.psmp.paramset.more",
22190 FT_BOOLEAN, 16, TFS(&ff_psmp_param_set_more_psmp_flag), 0x0010,
22191 "More Power Save Multi-Poll (PSMP)", HFILL }},
22193 {&hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
22194 {"PSMP Sequence Duration [us]", "wlan.fixed.psmp.paramset.seqduration",
22195 FT_UINT16, BASE_DEC, 0, 0xFFE0,
22196 "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL }},
22198 {&hf_ieee80211_ff_mimo_cntrl,
22199 {"MIMO Control", "wlan.fixed.mimo.control",
22200 FT_BYTES, BASE_NONE, 0, 0x0,
22203 {&hf_ieee80211_ff_mimo_cntrl_nc_index,
22204 {"Nc Index", "wlan.fixed.mimo.control.ncindex",
22205 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags), 0x0003,
22206 "Number of Columns Less One", HFILL }},
22208 {&hf_ieee80211_ff_mimo_cntrl_nr_index,
22209 {"Nr Index", "wlan.fixed.mimo.control.nrindex",
22210 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags), 0x000C,
22211 "Number of Rows Less One", HFILL }},
22213 {&hf_ieee80211_ff_mimo_cntrl_channel_width,
22214 {"Channel Width", "wlan.fixed.mimo.control.chanwidth",
22215 FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag), 0x0010,
22218 {&hf_ieee80211_ff_mimo_cntrl_grouping,
22219 {"Grouping (Ng)", "wlan.fixed.mimo.control.grouping",
22220 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags), 0x0060,
22223 {&hf_ieee80211_ff_mimo_cntrl_coefficient_size,
22224 {"Coefficient Size (Nb)", "wlan.fixed.mimo.control.cosize",
22225 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags), 0x0180,
22228 {&hf_ieee80211_ff_mimo_cntrl_codebook_info,
22229 {"Codebook Information", "wlan.fixed.mimo.control.codebookinfo",
22230 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags), 0x0600,
22233 {&hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
22234 {"Remaining Matrix Segment", "wlan.fixed.mimo.control.matrixseg",
22235 FT_UINT16, BASE_HEX, 0, 0x3800,
22238 {&hf_ieee80211_ff_mimo_cntrl_reserved,
22239 {"Reserved", "wlan.fixed.mimo.control.reserved",
22240 FT_UINT16, BASE_HEX, 0, 0xC000,
22243 {&hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
22244 {"Sounding Timestamp", "wlan.fixed.mimo.control.soundingtime",
22245 FT_UINT32, BASE_HEX, 0, 0,
22248 {&hf_ieee80211_ff_psmp_sta_info,
22249 {"Power Save Multi-Poll (PSMP) Station Information", "wlan.fixed.psmp.stainfo",
22250 FT_UINT64, BASE_HEX, 0, 0,
22253 {&hf_ieee80211_ff_psmp_sta_info_type,
22254 {"Sta Info Type", "wlan.fixed.psmp.stainfo.type",
22255 FT_UINT32, BASE_HEX, VALS(ff_psmp_sta_info_flags), PSMP_STA_INFO_FLAG_TYPE,
22258 {&hf_ieee80211_ff_psmp_sta_info_dtt_start_offset,
22259 {"DTT Start Offset", "wlan.fixed.psmp.stainfo.dttstart",
22260 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_START,
22263 {&hf_ieee80211_ff_psmp_sta_info_dtt_duration,
22264 {"DTT Duration", "wlan.fixed.psmp.stainfo.dttduration",
22265 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_DTT_DURATION,
22268 {&hf_ieee80211_ff_psmp_sta_info_sta_id,
22269 {"Target Station ID", "wlan.fixed.psmp.stainfo.staid",
22270 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_STA_ID,
22273 {&hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
22274 {"UTT Start Offset", "wlan.fixed.psmp.stainfo.uttstart",
22275 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_START,
22278 {&hf_ieee80211_ff_psmp_sta_info_utt_duration,
22279 {"UTT Duration", "wlan.fixed.psmp.stainfo.uttduration",
22280 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_UTT_DURATION,
22283 {&hf_ieee80211_ff_psmp_sta_info_reserved_small,
22284 {"Reserved", "wlan.fixed.psmp.stainfo.reserved",
22285 FT_UINT32, BASE_HEX, 0, PSMP_STA_INFO_FLAG_IA_RESERVED,
22288 {&hf_ieee80211_ff_psmp_sta_info_reserved_large,
22289 {"Reserved", "wlan.fixed.psmp.stainfo.reserved64",
22290 FT_UINT64, BASE_HEX, 0, 0,
22293 {&hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
22294 {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan.fixed.psmp.stainfo.multicastid",
22295 FT_UINT64, BASE_HEX, 0, 0,
22298 {&hf_ieee80211_ff_ant_selection,
22299 {"Antenna Selection", "wlan.fixed.antsel",
22300 FT_UINT8, BASE_HEX, 0, 0,
22303 {&hf_ieee80211_ff_ant_selection_0,
22304 {"Antenna 0", "wlan.fixed.antsel.ant0",
22305 FT_UINT8, BASE_HEX, 0, 0x01,
22308 {&hf_ieee80211_ff_ant_selection_1,
22309 {"Antenna 1", "wlan.fixed.antsel.ant1",
22310 FT_UINT8, BASE_HEX, 0, 0x02,
22313 {&hf_ieee80211_ff_ant_selection_2,
22314 {"Antenna 2", "wlan.fixed.antsel.ant2",
22315 FT_UINT8, BASE_HEX, 0, 0x04,
22318 {&hf_ieee80211_ff_ant_selection_3,
22319 {"Antenna 3", "wlan.fixed.antsel.ant3",
22320 FT_UINT8, BASE_HEX, 0, 0x08,
22323 {&hf_ieee80211_ff_ant_selection_4,
22324 {"Antenna 4", "wlan.fixed.antsel.ant4",
22325 FT_UINT8, BASE_HEX, 0, 0x10,
22328 {&hf_ieee80211_ff_ant_selection_5,
22329 {"Antenna 5", "wlan.fixed.antsel.ant5",
22330 FT_UINT8, BASE_HEX, 0, 0x20,
22333 {&hf_ieee80211_ff_ant_selection_6,
22334 {"Antenna 6", "wlan.fixed.antsel.ant6",
22335 FT_UINT8, BASE_HEX, 0, 0x40,
22338 {&hf_ieee80211_ff_ant_selection_7,
22339 {"Antenna 7", "wlan.fixed.antsel.ant7",
22340 FT_UINT8, BASE_HEX, 0, 0x80,
22343 {&hf_ieee80211_ff_ext_channel_switch_announcement,
22344 {"Extended Channel Switch Announcement", "wlan.fixed.extchansw",
22345 FT_UINT32, BASE_HEX, 0, 0,
22348 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
22349 {"Channel Switch Mode", "wlan.fixed.extchansw.switchmode",
22350 FT_UINT32, BASE_HEX, VALS(ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags), 0x000000FF,
22353 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
22354 {"New Operating Class", "wlan.fixed.extchansw.new.opeclass",
22355 FT_UINT32, BASE_HEX, NULL, 0x0000FF00,
22358 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
22359 {"New Channel Number", "wlan.fixed.extchansw.new.channumber",
22360 FT_UINT32, BASE_HEX, NULL, 0x00FF0000,
22363 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
22364 {"Channel Switch Count", "wlan.extchanswitch.switchcount",
22365 FT_UINT32, BASE_HEX, NULL, 0xFF000000,
22368 {&hf_ieee80211_ff_ht_info,
22369 {"HT Information", "wlan.fixed.extchansw",
22370 FT_UINT8, BASE_HEX, 0, 0,
22371 "HT Information Fixed Field", HFILL }},
22373 {&hf_ieee80211_ff_ht_info_information_request,
22374 {"Information Request", "wlan.fixed.mimo.control.chanwidth",
22375 FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag), 0x01,
22378 {&hf_ieee80211_ff_ht_info_40_mhz_intolerant,
22379 {"40 MHz Intolerant", "wlan.fixed.mimo.control.chanwidth",
22380 FT_BOOLEAN, 8, TFS(&ff_ht_info_40_mhz_intolerant_flag), 0x02,
22383 {&hf_ieee80211_ff_ht_info_sta_chan_width,
22384 {"Station Channel Width", "wlan.fixed.mimo.control.chanwidth",
22385 FT_BOOLEAN, 8, TFS(&ff_ht_info_sta_chan_width_flag), 0x04,
22388 {&hf_ieee80211_ff_ht_info_reserved,
22389 {"Reserved", "wlan.fixed.extchansw",
22390 FT_UINT8, BASE_HEX, 0, 0xF8,
22391 "Reserved Field", HFILL }},
22393 {&hf_ieee80211_ff_ht_action,
22394 {"HT Action", "wlan.fixed.htact",
22395 FT_UINT8, BASE_HEX, VALS(ff_ht_action_flags), 0,
22396 "HT Action Code", HFILL }},
22398 {&hf_ieee80211_ff_mimo_csi_snr,
22399 {"Signal to Noise Ratio (SNR)", "wlan.mimo.csimatrices.snr",
22400 FT_UINT8, BASE_HEX, NULL, 0,
22403 {&hf_ieee80211_ff_mimo_csi_matrices,
22404 {"CSI Matrices", "wlan.mimo.csimatrices",
22405 FT_NONE, BASE_NONE, NULL, 0,
22408 {&hf_ieee80211_ff_mimo_csi_bf_matrices,
22409 {"Beamforming Feedback Matrices", "wlan.mimo.csimatrices.bf",
22410 FT_NONE, BASE_NONE, NULL, 0,
22413 {&hf_ieee80211_ff_mimo_csi_cbf_matrices,
22414 {"Compressed Beamforming Feedback Matrices", "wlan.mimo.csimatrices.cbf",
22415 FT_NONE, BASE_NONE, NULL, 0,
22417 {&hf_ieee80211_ff_public_action,
22418 {"Public Action", "wlan.fixed.publicact",
22419 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_pa_action_codes_ext, 0,
22420 "Public Action Code", HFILL }},
22422 {&hf_ieee80211_ff_protected_public_action,
22423 {"Protected Public Action", "wlan.fixed.publicact",
22424 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ff_ppa_action_codes_ext, 0,
22425 "Protected Public Action Code", HFILL }},
22427 {&hf_ieee80211_ff_capture,
22428 {"Capabilities Information", "wlan.fixed.capabilities",
22429 FT_UINT16, BASE_HEX, NULL, 0,
22430 "Capability information", HFILL }},
22432 {&hf_ieee80211_ff_cf_ess,
22433 {"ESS capabilities", "wlan.fixed.capabilities.ess",
22434 FT_BOOLEAN, 16, TFS(&cf_ess_flags), 0x0001,
22437 {&hf_ieee80211_ff_cf_ibss,
22438 {"IBSS status", "wlan.fixed.capabilities.ibss",
22439 FT_BOOLEAN, 16, TFS(&cf_ibss_flags), 0x0002,
22440 "IBSS participation", HFILL }},
22442 {&hf_ieee80211_ff_cf_sta_poll,
22443 {"CFP participation capabilities", "wlan.fixed.capabilities.cfpoll.sta",
22444 FT_UINT16, BASE_HEX, VALS(sta_cf_pollable), 0x020C,
22445 "CF-Poll capabilities for a STA", HFILL }},
22447 {&hf_ieee80211_ff_cf_ap_poll,
22448 {"CFP participation capabilities", "wlan.fixed.capabilities.cfpoll.ap",
22449 FT_UINT16, BASE_HEX, VALS(ap_cf_pollable), 0x020C,
22450 "CF-Poll capabilities for an AP", HFILL }},
22452 {&hf_ieee80211_ff_cf_privacy,
22453 {"Privacy", "wlan.fixed.capabilities.privacy",
22454 FT_BOOLEAN, 16, TFS(&cf_privacy_flags), 0x0010,
22455 "WEP support", HFILL }},
22457 {&hf_ieee80211_ff_cf_preamble,
22458 {"Short Preamble", "wlan.fixed.capabilities.preamble",
22459 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed), 0x0020,
22462 {&hf_ieee80211_ff_cf_pbcc,
22463 {"PBCC", "wlan.fixed.capabilities.pbcc",
22464 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed), 0x0040,
22465 "PBCC Modulation", HFILL }},
22467 {&hf_ieee80211_ff_cf_agility,
22468 {"Channel Agility", "wlan.fixed.capabilities.agility",
22469 FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse), 0x0080,
22472 {&hf_ieee80211_ff_cf_spec_man,
22473 {"Spectrum Management", "wlan.fixed.capabilities.spec_man",
22474 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x0100,
22477 {&hf_ieee80211_ff_short_slot_time,
22478 {"Short Slot Time", "wlan.fixed.capabilities.short_slot_time",
22479 FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse), 0x0400,
22482 {&hf_ieee80211_ff_cf_apsd,
22483 {"Automatic Power Save Delivery", "wlan.fixed.capabilities.apsd",
22484 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x0800,
22487 {&hf_ieee80211_ff_radio_measurement,
22488 {"Radio Measurement", "wlan.fixed.capabilities.radio_measurement",
22489 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x1000,
22492 {&hf_ieee80211_ff_dsss_ofdm,
22493 {"DSSS-OFDM", "wlan.fixed.capabilities.dsss_ofdm",
22494 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed), 0x2000,
22495 "DSSS-OFDM Modulation", HFILL }},
22497 {&hf_ieee80211_ff_cf_del_blk_ack,
22498 {"Delayed Block Ack", "wlan.fixed.capabilities.del_blk_ack",
22499 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x4000,
22502 {&hf_ieee80211_ff_cf_imm_blk_ack,
22503 {"Immediate Block Ack", "wlan.fixed.capabilities.imm_blk_ack",
22504 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented), 0x8000,
22507 {&hf_ieee80211_ff_auth_seq,
22508 {"Authentication SEQ", "wlan.fixed.auth_seq",
22509 FT_UINT16, BASE_HEX, NULL, 0,
22510 "Authentication Sequence Number", HFILL }},
22512 {&hf_ieee80211_ff_assoc_id,
22513 {"Association ID", "wlan.fixed.aid",
22514 FT_UINT16, BASE_HEX, NULL, 0x3FFF,
22517 {&hf_ieee80211_ff_listen_ival,
22518 {"Listen Interval", "wlan.fixed.listen_ival",
22519 FT_UINT16, BASE_HEX, NULL, 0,
22522 {&hf_ieee80211_ff_current_ap,
22523 {"Current AP", "wlan.fixed.current_ap",
22524 FT_ETHER, BASE_NONE, NULL, 0,
22525 "MAC address of current AP", HFILL }},
22527 {&hf_ieee80211_ff_reason,
22528 {"Reason code", "wlan.fixed.reason_code",
22529 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_reason_code_ext, 0,
22530 "Reason for unsolicited notification", HFILL }},
22532 {&hf_ieee80211_ff_status_code,
22533 {"Status code", "wlan.fixed.status_code",
22534 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_status_code_ext, 0,
22535 "Status of requested event", HFILL }},
22537 {&hf_ieee80211_ff_category_code,
22538 {"Category code", "wlan.fixed.category_code",
22539 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &category_codes_ext, 0,
22540 "Management action category", HFILL }},
22542 {&hf_ieee80211_ff_action_code,
22543 {"Action code", "wlan.fixed.action_code",
22544 FT_UINT16, BASE_DEC, VALS(action_codes), 0,
22545 "Management action code", HFILL }},
22547 {&hf_ieee80211_ff_dialog_token,
22548 {"Dialog token", "wlan.fixed.dialog_token",
22549 FT_UINT8, BASE_HEX, NULL, 0,
22550 "Management action dialog token", HFILL }},
22552 {&hf_ieee80211_ff_followup_dialog_token,
22553 {"Followup Dialog token", "wlan.fixed.followup_dialog_token",
22554 FT_UINT8, BASE_HEX, NULL, 0,
22555 "Management action followup dialog token", HFILL }},
22557 {&hf_ieee80211_ff_marvell_action_type,
22558 {"Marvell Action type", "wlan.fixed.mrvl_action_type",
22559 FT_UINT8, BASE_DEC, VALS(vendor_action_types_mrvl), 0,
22560 "Vendor Specific Action Type (Marvell)", HFILL }},
22562 {&hf_ieee80211_ff_marvell_mesh_mgt_action_code,
22563 {"Mesh action(Marvell)", "wlan.fixed.mrvl_mesh_action",
22564 FT_UINT8, BASE_HEX, VALS(mesh_mgt_action_codes_mrvl), 0,
22565 "Mesh action code(Marvell)", HFILL }},
22567 {&hf_ieee80211_ff_marvell_mesh_mgt_length,
22568 {"Message Length", "wlan.fixed.length",
22569 FT_UINT8, BASE_DEC, NULL, 0,
22572 {&hf_ieee80211_ff_marvell_mesh_mgt_mode,
22573 {"Message Mode", "wlan.fixed.mode",
22574 FT_UINT8, BASE_HEX, NULL, 0,
22577 {&hf_ieee80211_ff_marvell_mesh_mgt_ttl,
22578 {"Message TTL", "wlan.fixed.ttl",
22579 FT_UINT8, BASE_DEC, NULL, 0,
22582 {&hf_ieee80211_ff_marvell_mesh_mgt_dstcount,
22583 {"Destination Count", "wlan.fixed.dstcount",
22584 FT_UINT8, BASE_DEC, NULL, 0,
22587 {&hf_ieee80211_ff_marvell_mesh_mgt_hopcount,
22588 {"Hop Count", "wlan.fixed.hopcount",
22589 FT_UINT8, BASE_DEC, NULL, 0,
22592 {&hf_ieee80211_ff_marvell_mesh_mgt_rreqid,
22593 {"RREQ ID", "wlan.fixed.rreqid",
22594 FT_UINT32, BASE_DEC, NULL, 0,
22597 {&hf_ieee80211_ff_marvell_mesh_mgt_sa,
22598 {"Source Address", "wlan.fixed.sa",
22599 FT_ETHER, BASE_NONE, NULL, 0,
22600 "Source MAC address", HFILL }},
22602 {&hf_ieee80211_ff_marvell_mesh_mgt_ssn,
22603 {"SSN", "wlan.fixed.ssn",
22604 FT_UINT32, BASE_DEC, NULL, 0,
22605 "Source Sequence Number", HFILL }},
22607 {&hf_ieee80211_ff_marvell_mesh_mgt_metric,
22608 {"Metric", "wlan.fixed.metric",
22609 FT_UINT32, BASE_DEC, NULL, 0,
22610 "Route Metric", HFILL }},
22612 {&hf_ieee80211_ff_marvell_mesh_mgt_flags,
22613 {"RREQ Flags", "wlan.fixed.hopcount",
22614 FT_UINT8, BASE_HEX, NULL, 0,
22617 {&hf_ieee80211_ff_marvell_mesh_mgt_da,
22618 {"Destination Address", "wlan.fixed.da",
22619 FT_ETHER, BASE_NONE, NULL, 0,
22620 "Destination MAC address", HFILL }},
22622 {&hf_ieee80211_ff_marvell_mesh_mgt_dsn,
22623 {"DSN", "wlan.fixed.dsn",
22624 FT_UINT32, BASE_DEC, NULL, 0,
22625 "Destination Sequence Number", HFILL }},
22627 {&hf_ieee80211_ff_marvell_mesh_mgt_lifetime,
22628 {"Lifetime", "wlan.fixed.lifetime",
22629 FT_UINT32, BASE_DEC, NULL, 0,
22630 "Route Lifetime", HFILL }},
22632 {&hf_ieee80211_ff_wme_action_code,
22633 {"Action code", "wlan.fixed.action_code",
22634 FT_UINT16, BASE_HEX, VALS(wme_action_codes), 0,
22635 "Management notification action code", HFILL }},
22637 {&hf_ieee80211_ff_wme_status_code,
22638 {"Status code", "wlan.fixed.status_code",
22639 FT_UINT16, BASE_HEX, VALS(wme_status_codes), 0,
22640 "Management notification setup response status code", HFILL }},
22642 {&hf_ieee80211_ff_mesh_action,
22643 {"Mesh Action code", "wlan.fixed.mesh_action",
22644 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &mesh_action_ext, 0,
22647 {&hf_ieee80211_ff_multihop_action,
22648 {"Multihop Action code", "wlan.fixed.multihop_action",
22649 FT_UINT8, BASE_HEX, VALS(multihop_action), 0,
22652 {&hf_ieee80211_ff_mesh_flags,
22653 {"Mesh Flags", "wlan.fixed.mesh_flags",
22654 FT_UINT8, BASE_HEX, NULL, 0,
22657 {&hf_ieee80211_ff_mesh_ttl,
22658 {"Mesh TTL", "wlan.fixed.mesh_ttl",
22659 FT_UINT8, BASE_HEX, NULL, 0,
22662 {&hf_ieee80211_ff_mesh_sequence,
22663 {"Sequence Number", "wlan.fixed.mesh_sequence",
22664 FT_UINT32, BASE_HEX, NULL, 0,
22667 {&hf_ieee80211_ff_mesh_addr4,
22668 {"Mesh Extended Address 4", "wlan.fixed.mesh_addr4",
22669 FT_ETHER, BASE_NONE, NULL, 0,
22672 {&hf_ieee80211_ff_mesh_addr5,
22673 {"Mesh Extended Address 5", "wlan.fixed.mesh_addr5",
22674 FT_ETHER, BASE_NONE, NULL, 0,
22677 {&hf_ieee80211_ff_mesh_addr6,
22678 {"Mesh Extended Address 6", "wlan.fixed.mesh_addr6",
22679 FT_ETHER, BASE_NONE, NULL, 0,
22682 {&hf_ieee80211_ff_selfprot_action,
22683 {"Self-protected Action code", "wlan.fixed.selfprot_action",
22684 FT_UINT8, BASE_HEX, VALS(selfprot_action), 0,
22687 {&hf_ieee80211_mesh_peering_proto,
22688 {"Mesh Peering Protocol ID", "wlan.peering.proto",
22689 FT_UINT16, BASE_HEX, VALS(mesh_peering_proto_ids), 0,
22692 {&hf_ieee80211_mesh_peering_local_link_id,
22693 {"Local Link ID", "wlan.peering.local_id",
22694 FT_UINT16, BASE_HEX, NULL, 0,
22695 "Mesh Peering Management Local Link ID", HFILL }},
22697 {&hf_ieee80211_mesh_peering_peer_link_id,
22698 {"Peer Link ID", "wlan.peering.peer_id",
22699 FT_UINT16, BASE_HEX, NULL, 0,
22700 "Mesh Peering Management Peer Link ID", HFILL }},
22702 {&hf_ieee80211_ff_hwmp_flags,
22703 {"HWMP Flags", "wlan.hwmp.flags",
22704 FT_UINT8, BASE_HEX, NULL, 0,
22707 {&hf_ieee80211_ff_hwmp_hopcount,
22708 {"HWMP Hop Count", "wlan.hwmp.hopcount",
22709 FT_UINT8, BASE_DEC, NULL, 0,
22712 {&hf_ieee80211_ff_hwmp_ttl,
22713 {"HWMP TTL", "wlan.hwmp.ttl",
22714 FT_UINT8, BASE_DEC, NULL, 0,
22717 {&hf_ieee80211_ff_hwmp_pdid,
22718 {"HWMP Path Discovery ID", "wlan.hwmp.pdid",
22719 FT_UINT32, BASE_DEC, NULL, 0,
22722 {&hf_ieee80211_ff_hwmp_orig_sta,
22723 {"Originator STA Address", "wlan.hwmp.orig_sta",
22724 FT_ETHER, BASE_NONE, NULL, 0,
22727 {&hf_ieee80211_ff_hwmp_orig_sn,
22728 {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn",
22729 FT_UINT32, BASE_DEC, NULL, 0,
22732 {&hf_ieee80211_ff_hwmp_orig_ext,
22733 {"Originator External Address", "wlan.hwmp.orig_ext",
22734 FT_ETHER, BASE_NONE, NULL, 0,
22737 {&hf_ieee80211_ff_hwmp_lifetime,
22738 {"HWMP Lifetime", "wlan.hwmp.lifetime",
22739 FT_UINT32, BASE_DEC, NULL, 0,
22742 {&hf_ieee80211_ff_hwmp_metric,
22743 {"HWMP Metric", "wlan.hwmp.metric",
22744 FT_UINT32, BASE_DEC, NULL, 0,
22747 {&hf_ieee80211_ff_hwmp_targ_count,
22748 {"HWMP Target Count", "wlan.hwmp.targ_count",
22749 FT_UINT8, BASE_DEC, NULL, 0,
22752 {&hf_ieee80211_ff_hwmp_targ_flags,
22753 {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags",
22754 FT_UINT8, BASE_HEX, NULL, 0,
22757 {&hf_ieee80211_ff_hwmp_targ_to_flags,
22758 {"TO Flag", "wlan.hwmp.to_flag",
22759 FT_BOOLEAN, 8, TFS(&hwmp_targ_to_flags), 0x01,
22760 "Target Only Flag", HFILL }},
22762 {&hf_ieee80211_ff_hwmp_targ_usn_flags,
22763 {"USN Flag", "wlan.hwmp.usn_flag",
22764 FT_BOOLEAN, 8, TFS(&hwmp_targ_usn_flags), 0x04,
22765 "Unknown Target HWMP Sequence Number Flag", HFILL }},
22767 {&hf_ieee80211_ff_hwmp_targ_sta,
22768 {"Target STA Address", "wlan.hwmp.targ_sta",
22769 FT_ETHER, BASE_NONE, NULL, 0,
22772 {&hf_ieee80211_ff_hwmp_targ_ext,
22773 {"Target External Address", "wlan.hwmp.targ_ext",
22774 FT_ETHER, BASE_NONE, NULL, 0,
22777 {&hf_ieee80211_ff_hwmp_targ_sn,
22778 {"Target HWMP Sequence Number", "wlan.hwmp.targ_sn",
22779 FT_UINT32, BASE_DEC, NULL, 0,
22782 {&hf_ieee80211_mesh_config_path_sel_protocol,
22783 {"Path Selection Protocol", "wlan.mesh.config.ps_protocol",
22784 FT_UINT8, BASE_HEX, NULL, 0,
22785 "Mesh Configuration Path Selection Protocol", HFILL }},
22787 {&hf_ieee80211_mesh_config_path_sel_metric,
22788 {"Path Selection Metric", "wlan.mesh.config.ps_metric",
22789 FT_UINT8, BASE_HEX, NULL, 0,
22790 "Mesh Configuration Path Selection Metric", HFILL }},
22792 {&hf_ieee80211_mesh_config_congestion_control,
22793 {"Congestion Control", "wlan.mesh.config.cong_ctl",
22794 FT_UINT8, BASE_HEX, NULL, 0,
22795 "Mesh Configuration Congestion Control", HFILL }},
22797 {&hf_ieee80211_mesh_config_sync_method,
22798 {"Synchronization Method", "wlan.mesh.config.sync_method",
22799 FT_UINT8, BASE_HEX, NULL, 0,
22800 "Mesh Configuration Synchronization Method", HFILL }},
22802 {&hf_ieee80211_mesh_config_auth_protocol,
22803 {"Authentication Protocol", "wlan.mesh.config.auth_protocol",
22804 FT_UINT8, BASE_HEX, NULL, 0,
22805 "Mesh Configuration Authentication Protocol", HFILL }},
22807 {&hf_ieee80211_mesh_config_formation_info,
22808 {"Formation Info", "wlan.mesh.config.formation_info",
22809 FT_UINT8, BASE_HEX, NULL, 0,
22810 "Mesh Configuration Formation Info", HFILL }},
22812 {&hf_ieee80211_mesh_form_info_num_of_peerings,
22813 {"Number of Peerings", "wlan.mesh.config.formation_info.num_peers",
22814 FT_UINT8, BASE_DEC, NULL, 0x7E,
22817 {&hf_ieee80211_mesh_config_capability,
22818 {"Capability", "wlan.mesh.config.cap",
22819 FT_UINT8, BASE_HEX, NULL, 0,
22820 "Mesh Configuration Capability", HFILL }},
22822 {&hf_ieee80211_mesh_config_cap_accepting,
22823 {"Accepting Additional Mesh Peerings", "wlan.mesh.config.cap.accept",
22824 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
22827 {&hf_ieee80211_mesh_config_cap_mcca_support,
22828 {"MCCA Support", "wlan.mesh.config.cap.mcca_support",
22829 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
22832 {&hf_ieee80211_mesh_config_cap_mcca_enabled,
22833 {"MCCA Enabled", "wlan.mesh.config.cap.mcca_enabled",
22834 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
22837 {&hf_ieee80211_mesh_config_cap_forwarding,
22838 {"Mesh Forwarding", "wlan.mesh.config.cap.forwarding",
22839 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
22842 {&hf_ieee80211_mesh_config_cap_mbca_enabled,
22843 {"MBCA Enabled", "wlan.mesh.config.cap.mbca_enabled",
22844 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
22847 {&hf_ieee80211_mesh_config_cap_tbtt_adjusting,
22848 {"TBTT Adjustment", "wlan.mesh.config.cap.tbtt_adjusting",
22849 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
22852 {&hf_ieee80211_mesh_config_cap_power_save_level,
22853 {"Power Save", "wlan.mesh.config.cap.power_save_level",
22854 FT_BOOLEAN, 8, TFS(&mesh_config_cap_power_save_level_flags), 0x40,
22857 {&hf_ieee80211_mesh_id,
22858 {"Mesh ID", "wlan.mesh.id",
22859 FT_STRING, BASE_NONE, NULL, 0,
22862 {&hf_ieee80211_rann_flags,
22863 {"RANN Flags", "wlan.rann.flags",
22864 FT_UINT8, BASE_HEX, NULL, 0,
22865 "Root Announcement Flags", HFILL }},
22867 {&hf_ieee80211_rann_root_sta,
22868 {"Root STA Address", "wlan.rann.root_sta", FT_ETHER, BASE_NONE, NULL, 0,
22869 "Root Mesh STA Address", HFILL }},
22871 {&hf_ieee80211_rann_sn,
22872 {"Root STA Sequence Number", "wlan.rann.rann_sn",
22873 FT_UINT32, BASE_DEC, NULL, 0,
22874 "Root Mesh STA Sequence Number", HFILL }},
22876 {&hf_ieee80211_rann_interval,
22877 {"RANN Interval", "wlan.rann.interval",
22878 FT_UINT32, BASE_DEC, NULL, 0,
22879 "Root Announcement Interval", HFILL }},
22881 {&hf_ieee80211_ff_qos_action_code,
22882 {"Action code", "wlan.fixed.action_code",
22883 FT_UINT16, BASE_HEX, VALS(qos_action_codes), 0,
22884 "QoS management action code", HFILL }},
22886 {&hf_ieee80211_ff_ba_action,
22887 {"Action code", "wlan.fixed.action_code",
22888 FT_UINT8, BASE_HEX, VALS(ba_action_codes), 0,
22889 "Block Ack action code", HFILL }},
22891 {&hf_ieee80211_ff_check_beacon,
22892 {"Check Beacon", "wlan.fixed.check_beacon",
22893 FT_UINT8, BASE_DEC, NULL, 0,
22894 "Unprotected WNM Check Beacon", HFILL }},
22896 {&hf_ieee80211_ff_tod,
22897 {"TOD", "wlan.fixed.tod",
22898 FT_UINT32, BASE_DEC, NULL, 0,
22899 "Previous TS of transmit antenna port", HFILL }},
22901 {&hf_ieee80211_ff_toa,
22902 {"TOA", "wlan.fixed.toa",
22903 FT_UINT32, BASE_DEC, NULL, 0,
22904 "Previous TS of receive antenna port", HFILL }},
22906 {&hf_ieee80211_ff_max_tod_err,
22907 {"MAX TOD ERROR", "wlan.fixed.max_tod_err",
22908 FT_UINT8, BASE_DEC, NULL, 0,
22909 "Maximal Error at Previous TS of transmit antenna port", HFILL }},
22911 {&hf_ieee80211_ff_max_toa_err,
22912 {"MAX TOA ERROR", "wlan.fixed.max_toa_err",
22913 FT_UINT8, BASE_DEC, NULL, 0,
22914 "Maximal Error at Previous TS of receive antenna port", HFILL }},
22916 {&hf_ieee80211_ff_dls_action_code,
22917 {"Action code", "wlan.fixed.action_code",
22918 FT_UINT16, BASE_HEX, VALS(dls_action_codes), 0,
22919 "DLS management action code", HFILL }},
22921 {&hf_ieee80211_ff_dst_mac_addr,
22922 {"Destination address", "wlan.fixed.dst_mac_addr",
22923 FT_ETHER, BASE_NONE, NULL, 0,
22924 "Destination MAC address", HFILL }},
22926 {&hf_ieee80211_ff_src_mac_addr,
22927 {"Source address", "wlan.fixed.src_mac_addr",
22928 FT_ETHER, BASE_NONE, NULL, 0,
22929 "Source MAC address", HFILL }},
22931 {&hf_ieee80211_ff_req_ap_addr,
22932 {"RequesterAP address", "wlan.fixed.req_ap_addr",
22933 FT_ETHER, BASE_NONE, NULL, 0,
22936 {&hf_ieee80211_ff_res_ap_addr,
22937 {"ResponderAP address", "wlan.fixed.res_ap_addr",
22938 FT_ETHER, BASE_NONE, NULL, 0,
22941 {&hf_ieee80211_ff_ft_action_code,
22942 {"Action code", "wlan.fixed.action_code",
22943 FT_UINT8, BASE_DEC, VALS(ft_action_codes), 0,
22944 "Management action code", HFILL }},
22946 {&hf_ieee80211_ff_sta_address,
22947 {"STA Address", "wlan.fixed.sta_address",
22948 FT_ETHER, BASE_NONE, NULL, 0,
22951 {&hf_ieee80211_ff_target_ap_address,
22952 {"Target AP Address", "wlan.fixed.target_ap_address",
22953 FT_ETHER, BASE_NONE, NULL, 0,
22954 "Target AP MAC address", HFILL }},
22956 {&hf_ieee80211_ff_gas_comeback_delay,
22957 {"GAS Comeback Delay", "wlan.fixed.gas_comeback_delay",
22958 FT_UINT16, BASE_DEC, NULL, 0,
22961 {&hf_ieee80211_ff_gas_fragment_id,
22962 {"GAS Query Response Fragment ID", "wlan.fixed.gas_fragment_id",
22963 FT_UINT8, BASE_DEC, NULL, 0x7f,
22966 {&hf_ieee80211_ff_more_gas_fragments,
22967 {"More GAS Fragments", "wlan.fixed.more_gas_fragments",
22968 FT_UINT8, BASE_DEC, NULL, 0x80,
22971 {&hf_ieee80211_ff_query_request_length,
22972 {"Query Request Length", "wlan.fixed.query_request_length",
22973 FT_UINT16, BASE_DEC, NULL, 0,
22976 {&hf_ieee80211_ff_query_request,
22977 {"Query Request", "wlan.fixed.query_request",
22978 FT_BYTES, BASE_NONE, NULL, 0,
22981 {&hf_ieee80211_ff_query_response_length,
22982 {"Query Response Length", "wlan.fixed.query_response_length",
22983 FT_UINT16, BASE_DEC, NULL, 0,
22986 {&hf_ieee80211_ff_query_response,
22987 {"Query Response", "wlan.fixed.query_response",
22988 FT_BYTES, BASE_NONE, NULL, 0,
22991 {&hf_ieee80211_gas_resp_fragments,
22992 {"GAS Query Response fragments", "wlan.fixed.fragments",
22993 FT_NONE, BASE_NONE, NULL, 0x00,
22996 {&hf_ieee80211_gas_resp_fragment,
22997 {"GAS Query Response fragment", "wlan.fixed.fragment",
22998 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
23001 {&hf_ieee80211_gas_resp_fragment_overlap,
23002 {"GAS Query Response fragment overlap", "wlan.fixed.fragment.overlap",
23003 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
23006 {&hf_ieee80211_gas_resp_fragment_overlap_conflict,
23007 {"GAS Query Response fragment overlapping with conflicting data", "wlan.fixed.fragment.overlap.conflicts",
23008 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
23011 {&hf_ieee80211_gas_resp_fragment_multiple_tails,
23012 {"GAS Query Response has multiple tail fragments", "wlan.fixed.fragment.multiple_tails",
23013 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
23016 {&hf_ieee80211_gas_resp_fragment_too_long_fragment,
23017 {"GAS Query Response fragment too long", "wlan.fixed.fragment.too_long_fragment",
23018 FT_BOOLEAN, BASE_NONE, NULL, 0x00,
23021 {&hf_ieee80211_gas_resp_fragment_error,
23022 {"GAS Query Response reassembly error", "wlan.fixed.fragment.error",
23023 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
23026 {&hf_ieee80211_gas_resp_fragment_count,
23027 {"GAS Query Response fragment count", "wlan.fixed.fragment.count",
23028 FT_UINT32, BASE_DEC, NULL, 0x00,
23031 {&hf_ieee80211_gas_resp_reassembled_in,
23032 {"Reassembled in", "wlan.fixed.reassembled.in",
23033 FT_FRAMENUM, BASE_NONE, NULL, 0x00,
23036 {&hf_ieee80211_gas_resp_reassembled_length,
23037 {"Reassembled length", "wlan.fixed.reassembled.length",
23038 FT_UINT32, BASE_DEC, NULL, 0x00,
23041 {&hf_ieee80211_ff_anqp_info_id,
23042 {"Info ID", "wlan.fixed.anqp.info_id",
23043 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
23044 "Access Network Query Protocol Info ID", HFILL }},
23046 {&hf_ieee80211_ff_anqp_info_length,
23047 {"Length", "wlan.fixed.anqp.info_length",
23048 FT_UINT16, BASE_DEC, NULL, 0,
23049 "Access Network Query Protocol Length", HFILL }},
23051 {&hf_ieee80211_ff_anqp_info,
23052 {"Information", "wlan.fixed.anqp.info",
23053 FT_BYTES, BASE_NONE, NULL, 0,
23054 "Access Network Query Protocol Information", HFILL }},
23056 {&hf_ieee80211_ff_anqp_query_id,
23057 {"ANQP Query ID", "wlan.fixed.anqp.query_id",
23058 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
23059 "Access Network Query Protocol Query ID", HFILL }},
23061 {&hf_ieee80211_ff_anqp_capability,
23062 {"ANQP Capability", "wlan.fixed.anqp.capability",
23063 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &anqp_info_id_vals_ext, 0,
23064 "Access Network Query Protocol Query ID", HFILL }},
23066 {&hf_ieee80211_ff_anqp_capability_vlen,
23067 {"Vendor-specific Capability Length", "wlan.fixed.anqp.capability_vlen",
23068 FT_UINT16, BASE_DEC, NULL, 0,
23071 {&hf_ieee80211_ff_anqp_capability_vendor,
23072 {"Vendor-specific Capability", "wlan.fixed.anqp.capability_vendor",
23073 FT_BYTES, BASE_NONE, NULL, 0,
23076 {&hf_ieee80211_ff_venue_info_group,
23077 {"Venue Group", "wlan.fixed.venue_info.group",
23078 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &venue_group_vals_ext, 0,
23081 {&hf_ieee80211_ff_venue_info_type,
23082 {"Venue Type", "wlan.fixed.venue_info.type",
23083 FT_UINT8, BASE_DEC, NULL, 0,
23086 {&hf_ieee80211_ff_anqp_venue_length,
23087 {"Venue Name Duple Length", "wlan.fixed.anqp.venue.length",
23088 FT_UINT8, BASE_DEC, NULL, 0,
23091 {&hf_ieee80211_ff_anqp_venue_language,
23092 {"Language Code", "wlan.fixed.anqp.venue.language",
23093 FT_STRING, BASE_NONE, NULL, 0,
23094 "Venue Name Language Code", HFILL }},
23096 {&hf_ieee80211_ff_anqp_venue_name,
23097 {"Venue Name", "wlan.fixed.anqp.venue.name",
23098 FT_STRING, BASE_NONE, NULL, 0,
23101 {&hf_ieee80211_ff_anqp_nw_auth_type_indicator,
23102 {"Network Authentication Type Indicator", "wlan.fixed.anqp.nw_auth_type.indicator",
23103 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals), 0,
23106 {&hf_ieee80211_ff_anqp_nw_auth_type_url_len,
23107 {"Re-direct URL Length", "wlan.fixed.anqp.nw_auth_type.url_len",
23108 FT_UINT16, BASE_DEC, NULL, 0,
23111 {&hf_ieee80211_ff_anqp_nw_auth_type_url,
23112 {"Re-direct URL", "wlan.fixed.anqp.nw_auth_type_url",
23113 FT_STRING, BASE_NONE, NULL, 0,
23116 {&hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
23117 {"OI Length", "wlan.fixed.anqp.roaming_consortium.oi_len",
23118 FT_UINT8, BASE_DEC, NULL, 0,
23119 "Roaming Consortium OI Length", HFILL }},
23121 {&hf_ieee80211_ff_anqp_roaming_consortium_oi,
23122 {"OI", "wlan.fixed.anqp.roaming_consortium.oi",
23123 FT_BYTES, BASE_NONE, NULL, 0,
23124 "Roaming Consortium OI", HFILL }},
23126 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
23127 {"IPv6 Address", "wlan.fixed.anqp.ip_addr_availability.ipv6",
23128 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv6_vals), 0x03,
23129 "IP Address Type Availability information for IPv6", HFILL }},
23131 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
23132 {"IPv4 Address", "wlan.fixed.anqp.ip_addr_availability.ipv4",
23133 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv4_vals), 0xfc,
23134 "IP Address Type Availability information for IPv4", HFILL }},
23136 {&hf_ieee80211_ff_anqp_nai_realm_count,
23137 {"NAI Realm Count", "wlan.fixed.anqp.nai_realm_list.count",
23138 FT_UINT16, BASE_DEC, NULL, 0,
23141 {&hf_ieee80211_ff_anqp_nai_field_len,
23142 {"NAI Realm Data Field Length", "wlan.fixed.anqp.nai_realm_list.field_len",
23143 FT_UINT16, BASE_DEC, NULL, 0,
23146 {&hf_ieee80211_ff_anqp_nai_realm_encoding,
23147 {"NAI Realm Encoding", "wlan.fixed.naqp_nai_realm_list.encoding",
23148 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals), 0x01,
23151 {&hf_ieee80211_ff_anqp_nai_realm_length,
23152 {"NAI Realm Length", "wlan.fixed.naqp_nai_realm_list.realm_length",
23153 FT_UINT8, BASE_DEC, NULL, 0,
23156 {&hf_ieee80211_ff_anqp_nai_realm,
23157 {"NAI Realm", "wlan.fixed.naqp_nai_realm_list.realm",
23158 FT_STRING, BASE_NONE, NULL, 0,
23161 {&hf_ieee80211_ff_anqp_nai_realm_eap_count,
23162 {"EAP Method Count", "wlan.fixed.naqp_nai_realm_list.eap_method_count",
23163 FT_UINT8, BASE_DEC, NULL, 0,
23166 {&hf_ieee80211_ff_anqp_nai_realm_eap_len,
23167 {"EAP Method subfield Length", "wlan.fixed.naqp_nai_realm_list.eap_method_len",
23168 FT_UINT8, BASE_DEC, NULL, 0,
23171 {&hf_ieee80211_ff_anqp_nai_realm_eap_method,
23172 {"EAP Method", "wlan.fixed.naqp_nai_realm_list.eap_method",
23173 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &eap_type_vals_ext, 0,
23176 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
23177 {"Authentication Parameter Count", "wlan.fixed.naqp_nai_realm_list.auth_param_count",
23178 FT_UINT8, BASE_DEC, NULL, 0,
23181 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
23182 {"Authentication Parameter ID", "wlan.fixed.naqp_nai_realm_list.auth_param_id",
23183 FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals), 0,
23186 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
23187 {"Authentication Parameter Length", "wlan.fixed.naqp_nai_realm_list.auth_param_len",
23188 FT_UINT8, BASE_DEC, NULL, 0,
23191 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
23192 {"Authentication Parameter Value", "wlan.fixed.naqp_nai_realm_list.auth_param_value",
23193 FT_BYTES, BASE_NONE, NULL, 0,
23196 {&hf_ieee80211_3gpp_gc_gud,
23197 {"GUD", "wlan.fixed.anqp.3gpp_cellular_info.gud",
23198 FT_UINT8, BASE_DEC, NULL, 0,
23199 "Generic container User Data", HFILL }},
23201 {&hf_ieee80211_3gpp_gc_udhl,
23202 {"UDHL", "wlan.fixed.anqp.3gpp_cellular_info.udhl",
23203 FT_UINT8, BASE_DEC, NULL, 0,
23204 "User Data Header Length", HFILL }},
23206 {&hf_ieee80211_3gpp_gc_iei,
23207 {"IEI", "wlan.fixed.anqp.3gpp_cellular_info.iei",
23208 FT_UINT8, BASE_DEC, NULL, 0,
23209 "Information Element Identity", HFILL }},
23211 {&hf_ieee80211_3gpp_gc_plmn_len,
23212 {"PLMN Length", "wlan.fixed.anqp.3gpp_cellular_info.plmn_len",
23213 FT_UINT8, BASE_DEC, NULL, 0,
23214 "Length of PLMN List value contents", HFILL }},
23216 {&hf_ieee80211_3gpp_gc_num_plmns,
23217 {"Number of PLMNs", "wlan.fixed.anqp.3gpp_cellular_info.num_plmns",
23218 FT_UINT8, BASE_DEC, NULL, 0,
23221 {&hf_ieee80211_ff_anqp_domain_name_len,
23222 {"Domain Name Length", "wlan.fixed.anqp.domain_name_list.len",
23223 FT_UINT8, BASE_DEC, NULL, 0,
23226 {&hf_ieee80211_ff_anqp_domain_name,
23227 {"Domain Name", "wlan.fixed.anqp.domain_name_list.name",
23228 FT_STRING, BASE_NONE, NULL, 0,
23231 {&hf_ieee80211_ff_dls_timeout,
23232 {"DLS timeout", "wlan.fixed.dls_timeout",
23233 FT_UINT16, BASE_HEX, NULL, 0,
23234 "DLS timeout value", HFILL }},
23236 {&hf_ieee80211_ff_sa_query_action_code,
23237 {"Action code", "wlan.fixed.action_code",
23238 FT_UINT8, BASE_DEC, VALS(sa_query_action_codes), 0,
23239 "Management action code", HFILL }},
23241 {&hf_ieee80211_ff_transaction_id,
23242 {"Transaction Id", "wlan.fixed.transaction_id",
23243 FT_UINT16, BASE_HEX, NULL, 0,
23246 {&hf_ieee80211_anqp_wfa_subtype,
23247 {"WFA Subtype", "wlan.anqp.wfa.subtype",
23248 FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals), 0, NULL, HFILL }},
23250 {&hf_ieee80211_dpp_subtype,
23251 {"DPP Subtype", "wlan.wfa.dpp.subtype",
23252 FT_UINT8, BASE_DEC, VALS(dpp_subtype_vals), 0, NULL, HFILL }},
23254 {&hf_hs20_indication_dgaf_disabled,
23255 {"DGAF Disabled", "wlan.hs20.indication.dgaf_disabled",
23256 FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
23258 {&hf_hs20_indication_pps_mo_id_present,
23259 {"PPS MO ID Present", "wlan.hs20.indication.pps_mo_id_present",
23260 FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
23262 {&hf_hs20_indication_anqp_domain_id_present,
23263 {"ANQP Domain ID Present", "wlan.hs20.indication.anqp_domain_id_present",
23264 FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
23266 {&hf_hs20_indication_release_number,
23267 {"Release Number", "wlan.hs20.indication.release_number",
23268 FT_UINT8, BASE_DEC, VALS(hs20_indication_release_number_vals), 0xF0, NULL, HFILL }},
23270 {&hf_hs20_anqp_subtype,
23271 {"Subtype", "wlan.hs20.anqp.subtype",
23272 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals), 0,
23273 "Hotspot 2.0 ANQP Subtype", HFILL }},
23275 {&hf_hs20_anqp_reserved,
23276 {"Reserved", "wlan.hs20.anqp.reserved",
23277 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
23279 {&hf_hs20_anqp_payload,
23280 {"Payload", "wlan.hs20.anqp.payload",
23281 FT_BYTES, BASE_NONE, NULL, 0,
23282 "Hotspot 2.0 ANQP Payload", HFILL }},
23284 {&hf_hs20_anqp_hs_query_list,
23285 {"Queried Subtype", "wlan.hs20.anqp.hs_query_list",
23286 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals), 0,
23287 "Queried HS 2.0 Element Subtype", HFILL }},
23289 {&hf_hs20_anqp_hs_capability_list,
23290 {"Capability", "wlan.hs20.anqp.hs_capability_list",
23291 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals), 0,
23292 "Hotspot 2.0 ANQP Subtype Capability", HFILL }},
23294 {&hf_hs20_anqp_ofn_length,
23295 {"Length", "wlan.hs20.anqp.ofn.length",
23296 FT_UINT8, BASE_DEC, NULL, 0,
23297 "Operator Friendly Name Length", HFILL }},
23299 {&hf_hs20_anqp_ofn_language,
23300 {"Language Code", "wlan.hs20.anqp.ofn.language",
23301 FT_STRING, BASE_NONE, NULL, 0,
23302 "Operator Friendly Name Language Code", HFILL }},
23304 {&hf_hs20_anqp_ofn_name,
23305 {"Operator Friendly Name", "wlan.hs20.anqp.ofn.name",
23306 FT_STRING, BASE_NONE, NULL, 0,
23309 {&hf_hs20_anqp_wan_metrics_link_status,
23310 {"Link Status", "wlan.hs20.anqp.wan_metrics.link_status",
23311 FT_UINT8, BASE_DEC, VALS(hs20_wm_link_status_vals), 0x03, NULL, HFILL }},
23313 {&hf_hs20_anqp_wan_metrics_symmetric_link,
23314 {"Symmetric Link", "wlan.hs20.anqp.wan_metrics.symmetric_link",
23315 FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
23317 {&hf_hs20_anqp_wan_metrics_at_capacity,
23318 {"At Capacity", "wlan.hs20.anqp.wan_metrics.at_capacity",
23319 FT_UINT8, BASE_DEC, NULL, 0x08, NULL, HFILL }},
23321 {&hf_hs20_anqp_wan_metrics_reserved,
23322 {"Reserved", "wlan.hs20.anqp.wan_metrics.reserved",
23323 FT_UINT8, BASE_DEC, NULL, 0xf0, NULL, HFILL }},
23325 {&hf_hs20_anqp_wan_metrics_downlink_speed,
23326 {"Downlink Speed", "wlan.hs20.anqp.wan_metrics.downlink_speed",
23327 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
23329 {&hf_hs20_anqp_wan_metrics_uplink_speed,
23330 {"Uplink Speed", "wlan.hs20.anqp.wan_metrics.uplink_speed",
23331 FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
23333 {&hf_hs20_anqp_wan_metrics_downlink_load,
23334 {"Downlink Load", "wlan.hs20.anqp.wan_metrics.downlink_load",
23335 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
23337 {&hf_hs20_anqp_wan_metrics_uplink_load,
23338 {"Uplink Load", "wlan.hs20.anqp.wan_metrics.uplink_load",
23339 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
23341 {&hf_hs20_anqp_wan_metrics_lmd,
23342 {"LMD", "wlan.hs20.anqp.wan_metrics.lmd",
23343 FT_UINT16, BASE_DEC, NULL, 0, "Load Measurement Duration", HFILL }},
23345 {&hf_hs20_anqp_cc_proto_ip_proto,
23346 {"IP Protocol", "wlan.hs20.anqp.cc.ip_proto",
23347 FT_UINT8, BASE_DEC, NULL, 0,
23348 "ProtoPort Tuple - IP Protocol", HFILL }},
23350 {&hf_hs20_anqp_cc_proto_port_num,
23351 {"Port Number", "wlan.hs20.anqp.cc.port_num",
23352 FT_UINT16, BASE_DEC, NULL, 0,
23353 "ProtoPort Tuple - Port Number", HFILL }},
23355 {&hf_hs20_anqp_cc_proto_status,
23356 {"Status", "wlan.hs20.anqp.cc.status",
23357 FT_UINT8, BASE_DEC, VALS(hs20_cc_status_vals), 0,
23358 "ProtoPort Tuple - Status", HFILL }},
23360 {&hf_hs20_anqp_nai_hrq_count,
23361 {"NAI Home Realm Count", "wlan.hs20.anqp.nai_hrq.count",
23362 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
23364 {&hf_hs20_anqp_nai_hrq_encoding_type,
23365 {"NAI Home Realm Encoding Type",
23366 "wlan.hs20.anqp.nai_hrq.encoding_type",
23367 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals),
23368 0x01, NULL, HFILL }},
23370 {&hf_hs20_anqp_nai_hrq_length,
23371 {"NAI Home Realm Name Length", "wlan.hs20.anqp.nai_hrq.length",
23372 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
23374 {&hf_hs20_anqp_nai_hrq_realm_name,
23375 {"NAI Home Realm Name", "wlan.hs20.anqp.nai_hrq.name",
23376 FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
23378 {&hf_hs20_anqp_oper_class_indic,
23379 {"Operating Class", "wlan.hs20.anqp.oper_class_indic.oper_class",
23380 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
23382 {&hf_ieee80211_tag,
23383 {"Tag", "wlan.tag",
23384 FT_NONE, BASE_NONE, 0x0, 0,
23387 {&hf_ieee80211_tag_number,
23388 {"Tag Number", "wlan.tag.number",
23389 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tag_num_vals_ext, 0,
23390 "Element ID", HFILL }},
23392 {&hf_ieee80211_tag_length,
23393 {"Tag length", "wlan.tag.length",
23394 FT_UINT32, BASE_DEC, NULL, 0,
23395 "Length of tag", HFILL }},
23397 {&hf_ieee80211_tag_interpretation,
23398 {"Tag interpretation", "wlan.tag.interpretation",
23399 FT_STRING, BASE_NONE, NULL, 0,
23400 "Interpretation of tag", HFILL }},
23402 {&hf_ieee80211_tag_data,
23403 {"Tag Data", "wlan.tag.data",
23404 FT_BYTES, BASE_NONE, NULL, 0,
23405 "Data Interpretation of tag", HFILL }},
23407 {&hf_ieee80211_tag_oui,
23408 {"OUI", "wlan.tag.oui",
23409 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
23410 "OUI of vendor specific IE", HFILL }},
23412 {&hf_ieee80211_tag_oui_wfa_subtype,
23413 {"WFA Subtype", "wlan.tag.oui.wfa_subtype",
23414 FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals), 0,
23417 {&hf_ieee80211_tag_ds_param_channel,
23418 {"Current Channel", "wlan.ds.current_channel",
23419 FT_UINT8, BASE_DEC, NULL, 0,
23420 "DS Parameter Set - Current Channel", HFILL }},
23422 {&hf_ieee80211_tag_cfp_count,
23423 {"CFP Count", "wlan.cfp.count",
23424 FT_UINT8, BASE_DEC, NULL, 0,
23425 "Indicates how many delivery traffic indication messages (DTIMs)", HFILL }},
23427 {&hf_ieee80211_tag_cfp_period,
23428 {"CFP Period", "wlan.cfp.period",
23429 FT_UINT8, BASE_DEC, NULL, 0,
23430 "Indicates the number of DTIM intervals between the start of CFPs", HFILL }},
23432 {&hf_ieee80211_tag_cfp_max_duration,
23433 {"CFP Max Duration", "wlan.cfp.max_duration",
23434 FT_UINT16, BASE_DEC, NULL, 0,
23435 "Indicates the maximum duration (in TU) of the CFP that may be generated by this PCF", HFILL }},
23437 {&hf_ieee80211_tag_cfp_dur_remaining,
23438 {"CFP Dur Remaining", "wlan.cfp.dur_remaining",
23439 FT_UINT16, BASE_DEC, NULL, 0,
23440 "Indicates the maximum time (in TU) remaining in the present CFP", HFILL }},
23442 {&hf_ieee80211_tag_vendor_oui_type,
23443 {"Vendor Specific OUI Type", "wlan.tag.vendor.oui.type",
23444 FT_UINT8, BASE_DEC, NULL, 0,
23447 {&hf_ieee80211_tag_vendor_data,
23448 {"Vendor Specific Data", "wlan.tag.vendor.data",
23449 FT_BYTES, BASE_NONE, NULL, 0,
23450 "Unknown/undecoded Vendor Specific Data", HFILL }},
23452 {&hf_ieee80211_tim_dtim_count,
23453 {"DTIM count", "wlan.tim.dtim_count",
23454 FT_UINT8, BASE_DEC, NULL, 0,
23455 "Indicates how many Beacon frames (including the current frame) appear before the next DTIM", HFILL }},
23457 {&hf_ieee80211_tim_dtim_period,
23458 {"DTIM period", "wlan.tim.dtim_period",
23459 FT_UINT8, BASE_DEC, NULL, 0,
23460 "Indicates the number of beacon intervals between successive DTIMs", HFILL }},
23462 {&hf_ieee80211_tim_bmapctl,
23463 {"Bitmap control", "wlan.tim.bmapctl",
23464 FT_UINT8, BASE_HEX, NULL, 0,
23467 {&hf_ieee80211_tim_bmapctl_mcast,
23468 {"Multicast", "wlan.tim.bmapctl.multicast",
23469 FT_BOOLEAN, 8, NULL, 0x1,
23470 "Contains the Traffic Indicator bit associated with Association ID 0", HFILL }},
23472 {&hf_ieee80211_tim_bmapctl_offset,
23473 {"Bitmap Offset", "wlan.tim.bmapctl.offset",
23474 FT_UINT8, BASE_HEX, NULL, 0xFE,
23477 {&hf_ieee80211_tim_partial_virtual_bitmap,
23478 {"Partial Virtual Bitmap", "wlan.tim.partial_virtual_bitmap",
23479 FT_BYTES, BASE_NONE, NULL, 0x0,
23482 {&hf_ieee80211_tim_aid,
23483 {"Association ID", "wlan.tim.aid",
23484 FT_UINT8, BASE_HEX, NULL, 0x0,
23487 {&hf_ieee80211_tag_ibss_atim_window,
23488 {"Atim Windows", "wlan.ibss.atim_windows",
23489 FT_UINT16, BASE_HEX, NULL, 0x0,
23490 "Contains the ATIM Window length in TU", HFILL }},
23492 {&hf_ieee80211_tag_country_info_code,
23493 {"Code", "wlan.country_info.code",
23494 FT_STRING, BASE_NONE, NULL, 0x0,
23497 {&hf_ieee80211_tag_country_info_env,
23498 {"Environment", "wlan.country_info.environment",
23499 FT_UINT8, BASE_HEX, VALS(environment_vals), 0x0,
23502 {&hf_ieee80211_tag_country_info_pad,
23503 {"Padding", "wlan.country_info.padding",
23504 FT_BYTES, BASE_NONE, NULL, 0x0,
23507 {&hf_ieee80211_tag_country_info_fnm,
23508 {"Country Info", "wlan.country_info.fnm",
23509 FT_NONE, BASE_NONE, NULL, 0x0,
23512 {&hf_ieee80211_tag_country_info_fnm_fcn,
23513 {"First Channel Number", "wlan.country_info.fnm.fcn",
23514 FT_UINT8, BASE_DEC, NULL, 0x0,
23517 {&hf_ieee80211_tag_country_info_fnm_nc,
23518 {"Number of Channels", "wlan.country_info.fnm.nc",
23519 FT_UINT8, BASE_DEC, NULL, 0x0,
23522 {&hf_ieee80211_tag_country_info_fnm_mtpl,
23523 {"Maximum Transmit Power Level (in dBm)", "wlan.country_info.fnm.mtpl",
23524 FT_UINT8, BASE_DEC, NULL, 0x0,
23527 {&hf_ieee80211_tag_country_info_rrc,
23528 {"Country Info", "wlan.country_info.rrc",
23529 FT_NONE, BASE_NONE, NULL, 0x0,
23532 {&hf_ieee80211_tag_country_info_rrc_oei,
23533 {"Operating Extension Identifier", "wlan.country_info.rrc.oei",
23534 FT_UINT8, BASE_DEC, NULL, 0x0,
23537 {&hf_ieee80211_tag_country_info_rrc_oc,
23538 {"Operating Class", "wlan.country_info.rrc.oc",
23539 FT_UINT8, BASE_DEC, NULL, 0x0,
23542 {&hf_ieee80211_tag_country_info_rrc_cc,
23543 {"Coverage Class", "wlan.country_info.rrc.cc",
23544 FT_UINT8, BASE_DEC, NULL, 0x0,
23547 {&hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
23548 {"Prime Radix", "wlan.fh_hopping.parameter.prime_radix",
23549 FT_UINT8, BASE_DEC, NULL, 0x0,
23552 {&hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
23553 {"Number of Channels", "wlan.fh_hopping.parameter.nb_channels",
23554 FT_UINT8, BASE_DEC, NULL, 0x0,
23557 {&hf_ieee80211_tag_fh_hopping_table_flag,
23558 {"Flag", "wlan.fh_hopping.table.flag",
23559 FT_UINT8, BASE_HEX, NULL, 0x0,
23560 "Indicates that a Random Table is present when the value is 1", HFILL }},
23562 {&hf_ieee80211_tag_fh_hopping_table_number_of_sets,
23563 {"Number of Sets", "wlan.fh_hopping.table.number_of_sets",
23564 FT_UINT8, BASE_DEC, NULL, 0x0,
23565 "Indicates the total number of sets within the hopping patterns", HFILL }},
23567 {&hf_ieee80211_tag_fh_hopping_table_modulus,
23568 {"Modulus", "wlan.fh_hopping.table.modulus",
23569 FT_UINT8, BASE_HEX, NULL, 0x0,
23570 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL }},
23572 {&hf_ieee80211_tag_fh_hopping_table_offset,
23573 {"Offset", "wlan.fh_hopping.table.offset",
23574 FT_UINT8, BASE_HEX, NULL, 0x0,
23575 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL }},
23577 {&hf_ieee80211_tag_fh_hopping_random_table,
23578 {"Random Table", "wlan.fh_hopping.table.random_table",
23579 FT_UINT16, BASE_HEX, NULL, 0x0,
23580 "It is a vector of single octet values that indicate the random sequence to be followed during a hopping sequence", HFILL }},
23582 {&hf_ieee80211_tag_request,
23583 {"Requested Element ID", "wlan.tag.request",
23584 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &tag_num_vals_ext, 0,
23585 "The list of elements that are to be included in the responding STA Probe Response frame", HFILL }},
23587 {&hf_ieee80211_tclas_up,
23588 {"User Priority", "wlan.tclas.user_priority",
23589 FT_UINT8, BASE_DEC, NULL, 0,
23590 "Contains the value of the UP of the associated MSDUs", HFILL }},
23592 {&hf_ieee80211_tclas_class_type,
23593 {"Classifier Type", "wlan.tclas.class_type",
23594 FT_UINT8, BASE_DEC, VALS(classifier_type), 0,
23595 "Specifies the type of classifier parameters", HFILL }},
23597 {&hf_ieee80211_tclas_class_mask,
23598 {"Classifier Mask", "wlan.tclas.class_mask",
23599 FT_UINT8, BASE_HEX, NULL, 0,
23600 "Specifies a bitmap where bits that are set to 1 identify a subset of the classifier parameters", HFILL }},
23602 {&hf_ieee80211_tclas_class_mask0_src_addr,
23603 {"Source Address", "wlan.tclas.class_mask.src_addr",
23604 FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
23606 {&hf_ieee80211_tclas_class_mask0_dst_addr,
23607 {"Destination Address", "wlan.tclas.class_mask.dst_addr",
23608 FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
23610 {&hf_ieee80211_tclas_class_mask0_type,
23611 {"Type", "wlan.tclas.class_mask.type",
23612 FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL }},
23614 {&hf_ieee80211_tclas_class_mask1_ver,
23615 {"Version", "wlan.tclas.class_mask.version",
23616 FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
23618 {&hf_ieee80211_tclas_class_mask1_src_ip,
23619 {"Source IP Address", "wlan.tclas.class_mask.src_ip",
23620 FT_UINT8, BASE_HEX, NULL, 0x02, NULL, HFILL }},
23622 {&hf_ieee80211_tclas_class_mask1_dst_ip,
23623 {"Destination IP Address", "wlan.tclas.class_mask.dst_ip",
23624 FT_UINT8, BASE_HEX, NULL, 0x04, NULL, HFILL }},
23626 {&hf_ieee80211_tclas_class_mask1_src_port,
23627 {"Source Port", "wlan.tclas.class_mask.src_port",
23628 FT_UINT8, BASE_HEX, NULL, 0x08, NULL, HFILL }},
23630 {&hf_ieee80211_tclas_class_mask1_dst_port,
23631 {"Destination Port", "wlan.tclas.class_mask.dst_port",
23632 FT_UINT8, BASE_HEX, NULL, 0x10, NULL, HFILL }},
23634 {&hf_ieee80211_tclas_class_mask1_ipv4_dscp,
23635 {"DSCP", "wlan.tclas.class_mask.dscp",
23636 FT_UINT8, BASE_HEX, NULL, 0x20, NULL, HFILL }},
23638 {&hf_ieee80211_tclas_class_mask1_ipv4_proto,
23639 {"Protocol", "wlan.tclas.class_mask.proto",
23640 FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL }},
23642 {&hf_ieee80211_tclas_class_mask1_ipv6_flow,
23643 {"Flow Label", "wlan.tclas.class_mask.flow_label",
23644 FT_UINT8, BASE_HEX, NULL, 0x20, NULL, HFILL }},
23646 {&hf_ieee80211_tclas_class_mask2_tci,
23647 {"802.1Q CLAN TCI", "wlan.tclas.class_mask.tci",
23648 FT_UINT8, BASE_HEX, NULL, 0x01, NULL, HFILL }},
23650 {&hf_ieee80211_tclas_src_mac_addr,
23651 {"Source address", "wlan.tclas.src_mac_addr",
23652 FT_ETHER, BASE_NONE, NULL, 0,
23653 "Classifier Parameters Ethernet Type", HFILL }},
23655 {&hf_ieee80211_tclas_dst_mac_addr,
23656 {"Destination address", "wlan.tclas.dat_mac_addr",
23657 FT_ETHER, BASE_NONE, NULL, 0,
23660 {&hf_ieee80211_tclas_ether_type,
23661 {"Ethernet Type", "wlan.tclas.ether_type",
23662 FT_UINT8, BASE_DEC, NULL, 0,
23665 {&hf_ieee80211_tclas_version,
23666 {"IP Version", "wlan.tclas.version",
23667 FT_UINT8, BASE_DEC, NULL, 0,
23670 {&hf_ieee80211_tclas_ipv4_src,
23671 {"IPv4 Src Addr", "wlan.tclas.ipv4_src",
23672 FT_IPv4, BASE_NONE, NULL, 0,
23675 {&hf_ieee80211_tclas_ipv4_dst,
23676 {"IPv4 Dst Addr", "wlan.tclas.ipv4_dst",
23677 FT_IPv4, BASE_NONE, NULL, 0,
23680 {&hf_ieee80211_tclas_src_port,
23681 {"Source Port", "wlan.tclas.src_port",
23682 FT_UINT16, BASE_DEC, NULL, 0,
23685 {&hf_ieee80211_tclas_dst_port,
23686 {"Destination Port", "wlan.tclas.dst_port",
23687 FT_UINT16, BASE_DEC, NULL, 0,
23690 {&hf_ieee80211_tclas_dscp,
23691 {"IPv4 DSCP", "wlan.tclas.dscp",
23692 FT_UINT8, BASE_HEX, NULL, 0,
23693 "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL }},
23695 {&hf_ieee80211_tclas_protocol,
23696 {"Protocol", "wlan.tclas.protocol",
23697 FT_UINT8, BASE_HEX, NULL, 0,
23698 "IPv4 Protocol", HFILL }},
23700 {&hf_ieee80211_tclas_ipv6_src,
23701 {"IPv6 Src Addr", "wlan.tclas.ipv6_src",
23702 FT_IPv6, BASE_NONE, NULL, 0,
23705 {&hf_ieee80211_tclas_ipv6_dst,
23706 {"IPv6 Dst Addr", "wlan.tclas.ipv6_dst",
23707 FT_IPv6, BASE_NONE, NULL, 0,
23710 {&hf_ieee80211_tclas_flow,
23711 {"Flow Label", "wlan.tclas.flow",
23712 FT_UINT24, BASE_HEX, NULL, 0,
23713 "IPv6 Flow Label", HFILL }},
23715 {&hf_ieee80211_tclas_tag_type,
23716 {"802.1Q Tag Type", "wlan.tclas.tag_type",
23717 FT_UINT16, BASE_HEX, NULL, 0,
23720 {&hf_ieee80211_tag_challenge_text,
23721 {"Challenge Text", "wlan.tag.challenge_text",
23722 FT_BYTES, BASE_NONE, NULL, 0,
23725 {&hf_ieee80211_rsn_version,
23726 {"RSN Version", "wlan.rsn.version",
23727 FT_UINT16, BASE_DEC, NULL, 0,
23728 "Indicates the version number of the RSNA protocol", HFILL }},
23730 {&hf_ieee80211_rsn_gcs,
23731 {"Group Cipher Suite", "wlan.rsn.gcs",
23732 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gcs_base_custom), 0,
23733 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
23735 {&hf_ieee80211_rsn_gcs_oui,
23736 {"Group Cipher Suite OUI", "wlan.rsn.gcs.oui",
23737 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
23740 {&hf_ieee80211_rsn_gcs_type,
23741 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
23742 FT_UINT8, BASE_DEC, NULL, 0,
23745 {&hf_ieee80211_rsn_gcs_80211_type,
23746 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
23747 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
23750 {&hf_ieee80211_rsn_pcs_count,
23751 {"Pairwise Cipher Suite Count", "wlan.rsn.pcs.count",
23752 FT_UINT16, BASE_DEC, NULL, 0,
23753 "Indicates the number of pairwise cipher suite selectors that are contained in the Pairwise Cipher Suite List", HFILL }},
23755 {&hf_ieee80211_rsn_pcs_list,
23756 {"Pairwise Cipher Suite List", "wlan.rsn.pcs.list",
23757 FT_NONE, BASE_NONE, NULL, 0,
23758 "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL }},
23760 {&hf_ieee80211_rsn_pcs,
23761 {"Pairwise Cipher Suite", "wlan.rsn.pcs",
23762 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_pcs_base_custom), 0,
23765 {&hf_ieee80211_rsn_pcs_oui,
23766 {"Pairwise Cipher Suite OUI", "wlan.rsn.pcs.oui",
23767 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
23770 {&hf_ieee80211_rsn_pcs_type,
23771 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
23772 FT_UINT8, BASE_DEC, NULL, 0,
23775 {&hf_ieee80211_rsn_pcs_80211_type,
23776 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
23777 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
23780 {&hf_ieee80211_rsn_akms_count,
23781 {"Auth Key Management (AKM) Suite Count", "wlan.rsn.akms.count",
23782 FT_UINT16, BASE_DEC, NULL, 0,
23783 "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
23785 {&hf_ieee80211_rsn_akms_list,
23786 {"Auth Key Management (AKM) List", "wlan.rsn.akms.list",
23787 FT_NONE, BASE_NONE, NULL, 0,
23788 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
23790 {&hf_ieee80211_rsn_akms,
23791 {"Auth Key Management (AKM) Suite", "wlan.rsn.akms",
23792 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_akms_base_custom), 0,
23795 {&hf_ieee80211_rsn_akms_oui,
23796 {"Auth Key Management (AKM) OUI", "wlan.rsn.akms.oui",
23797 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
23800 {&hf_ieee80211_rsn_akms_type,
23801 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
23802 FT_UINT8, BASE_DEC, NULL, 0,
23805 {&hf_ieee80211_rsn_akms_80211_type,
23806 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
23807 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_keymgmt_vals), 0,
23810 {&hf_ieee80211_rsn_cap,
23811 {"RSN Capabilities", "wlan.rsn.capabilities",
23812 FT_UINT16, BASE_HEX, NULL, 0,
23813 "RSN Capability information", HFILL }},
23815 {&hf_ieee80211_rsn_cap_preauth,
23816 {"RSN Pre-Auth capabilities", "wlan.rsn.capabilities.preauth",
23817 FT_BOOLEAN, 16, TFS(&rsn_preauth_flags), 0x0001,
23820 {&hf_ieee80211_rsn_cap_no_pairwise,
23821 {"RSN No Pairwise capabilities", "wlan.rsn.capabilities.no_pairwise",
23822 FT_BOOLEAN, 16, TFS(&rsn_no_pairwise_flags), 0x0002,
23825 {&hf_ieee80211_rsn_cap_ptksa_replay_counter,
23826 {"RSN PTKSA Replay Counter capabilities", "wlan.rsn.capabilities.ptksa_replay_counter",
23827 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter), 0x000C,
23830 {&hf_ieee80211_rsn_cap_gtksa_replay_counter,
23831 {"RSN GTKSA Replay Counter capabilities", "wlan.rsn.capabilities.gtksa_replay_counter",
23832 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter), 0x0030,
23835 {&hf_ieee80211_rsn_cap_mfpr,
23836 {"Management Frame Protection Required", "wlan.rsn.capabilities.mfpr",
23837 FT_BOOLEAN, 16, NULL, 0x0040,
23840 {&hf_ieee80211_rsn_cap_mfpc,
23841 {"Management Frame Protection Capable", "wlan.rsn.capabilities.mfpc",
23842 FT_BOOLEAN, 16, NULL, 0x0080,
23845 {&hf_ieee80211_rsn_cap_jmr,
23846 {"Joint Multi-band RSNA", "wlan.rsn.capabilities.jmr",
23847 FT_BOOLEAN, 16, NULL, 0x0100,
23850 {&hf_ieee80211_rsn_cap_peerkey,
23851 {"PeerKey Enabled", "wlan.rsn.capabilities.peerkey",
23852 FT_BOOLEAN, 16, NULL, 0x0200,
23855 {&hf_ieee80211_rsn_pmkid_count,
23856 {"PMKID Count", "wlan.rsn.pmkid.count",
23857 FT_UINT16, BASE_DEC, NULL, 0,
23858 "Indicates the number of PMKID selectors that are contained in the PMKID Suite List", HFILL }},
23860 {&hf_ieee80211_rsn_pmkid_list,
23861 {"PMKID List", "wlan.rsn.pmkid.list",
23862 FT_NONE, BASE_NONE, NULL, 0,
23863 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
23865 {&hf_ieee80211_rsn_pmkid,
23866 {"PMKID", "wlan.pmkid.akms",
23867 FT_BYTES, BASE_NONE, NULL, 0,
23870 {&hf_ieee80211_rsn_gmcs,
23871 {"Group Management Cipher Suite", "wlan.rsn.gmcs",
23872 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gmcs_base_custom), 0,
23873 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL }},
23875 {&hf_ieee80211_rsn_gmcs_oui,
23876 {"Group Management Cipher Suite OUI", "wlan.rsn.gmcs.oui",
23877 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
23880 {&hf_ieee80211_rsn_gmcs_type,
23881 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
23882 FT_UINT8, BASE_DEC, NULL, 0,
23885 {&hf_ieee80211_rsn_gmcs_80211_type,
23886 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
23887 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals), 0,
23890 {&hf_ieee80211_ht_pren_type,
23891 {"802.11n (Pre) Type", "wlan.vs.pren.type",
23892 FT_UINT8, BASE_DEC, VALS(ieee80211_ht_pren_type_vals), 0,
23893 "Vendor Specific HT Type", HFILL }},
23894 {&hf_ieee80211_ht_pren_unknown,
23895 {"802.11n (Pre) Unknown Data", "wlan.vs.pren.unknown_data",
23896 FT_BYTES, BASE_NONE, NULL, 0,
23899 {&hf_ieee80211_ht_cap,
23900 {"HT Capabilities Info", "wlan.ht.capabilities",
23901 FT_UINT16, BASE_HEX, NULL, 0,
23902 "HT Capabilities information", HFILL }},
23904 {&hf_ieee80211_ht_vs_cap,
23905 {"HT Capabilities Info (VS)", "wlan.vs.ht.capabilities",
23906 FT_UINT16, BASE_HEX, NULL, 0,
23907 "Vendor Specific HT Capabilities information", HFILL }},
23909 {&hf_ieee80211_ht_ldpc_coding,
23910 {"HT LDPC coding capability", "wlan.ht.capabilities.ldpccoding",
23911 FT_BOOLEAN, 16, TFS(&ht_ldpc_coding_flag), 0x0001,
23914 {&hf_ieee80211_ht_chan_width,
23915 {"HT Support channel width", "wlan.ht.capabilities.width",
23916 FT_BOOLEAN, 16, TFS(&ht_chan_width_flag), 0x0002,
23919 {&hf_ieee80211_ht_sm_pwsave,
23920 {"HT SM Power Save", "wlan.ht.capabilities.sm",
23921 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag), 0x000c,
23924 {&hf_ieee80211_ht_green,
23925 {"HT Green Field", "wlan.ht.capabilities.green",
23926 FT_BOOLEAN, 16, TFS(&ht_green_flag), 0x0010,
23929 {&hf_ieee80211_ht_short20,
23930 {"HT Short GI for 20MHz", "wlan.ht.capabilities.short20",
23931 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0020,
23934 {&hf_ieee80211_ht_short40,
23935 {"HT Short GI for 40MHz", "wlan.ht.capabilities.short40",
23936 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0040,
23939 {&hf_ieee80211_ht_tx_stbc,
23940 {"HT Tx STBC", "wlan.ht.capabilities.txstbc",
23941 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0080,
23944 {&hf_ieee80211_ht_rx_stbc,
23945 {"HT Rx STBC", "wlan.ht.capabilities.rxstbc",
23946 FT_UINT16, BASE_HEX, VALS(ht_rx_stbc_flag), 0x0300,
23947 "HT Tx STBC", HFILL }},
23949 {&hf_ieee80211_ht_delayed_block_ack,
23950 {"HT Delayed Block ACK", "wlan.ht.capabilities.delayedblockack",
23951 FT_BOOLEAN, 16, TFS(&ht_delayed_block_ack_flag), 0x0400,
23954 {&hf_ieee80211_ht_max_amsdu,
23955 {"HT Max A-MSDU length", "wlan.ht.capabilities.amsdu",
23956 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag), 0x0800,
23959 {&hf_ieee80211_ht_dss_cck_40,
23960 {"HT DSSS/CCK mode in 40MHz", "wlan.ht.capabilities.dsscck",
23961 FT_BOOLEAN, 16, TFS(&ht_dss_cck_40_flag), 0x1000,
23962 "HT DSS/CCK mode in 40MHz", HFILL }},
23964 {&hf_ieee80211_ht_psmp,
23965 {"HT PSMP Support", "wlan.ht.capabilities.psmp",
23966 FT_BOOLEAN, 16, TFS(&ht_psmp_flag), 0x2000,
23969 {&hf_ieee80211_ht_40_mhz_intolerant,
23970 {"HT Forty MHz Intolerant", "wlan.ht.capabilities.40mhzintolerant",
23971 FT_BOOLEAN, 16, TFS(&ht_40_mhz_intolerant_flag), 0x4000,
23974 {&hf_ieee80211_ht_l_sig,
23975 {"HT L-SIG TXOP Protection support", "wlan.ht.capabilities.lsig",
23976 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x8000,
23979 {&hf_ieee80211_ext_bss_mu_mimo_capable_sta_count,
23980 {"MU-MIMO Capable STA Count", "wlan.ext_bss.mu_mimo_capable_sta_count",
23981 FT_UINT16, BASE_DEC, NULL, 0,
23984 {&hf_ieee80211_ext_bss_ss_underutilization,
23985 {"Spatial Stream Underutilization", "wlan.ext_bss.ss_underutilization",
23986 FT_UINT8, BASE_HEX, NULL, 0,
23989 {&hf_ieee80211_ext_bss_observable_sec_20mhz_utilization,
23990 {"Observable Secondary 20MHz Utilization", "wlan.ext_bss.observable_sec_20mhz_utilization",
23991 FT_UINT8, BASE_HEX, NULL, 0,
23994 {&hf_ieee80211_ext_bss_observable_sec_40mhz_utilization,
23995 {"Observable Secondary 40MHz Utilization", "wlan.ext_bss.observable_sec_40mhz_utilization",
23996 FT_UINT8, BASE_HEX, NULL, 0,
23999 {&hf_ieee80211_ext_bss_observable_sec_80mhz_utilization,
24000 {"Observable Secondary 80MHz Utilization", "wlan.ext_bss.observable_sec_80mhz_utilization",
24001 FT_UINT8, BASE_HEX, NULL, 0,
24004 {&hf_ieee80211_wide_bw_new_channel_width,
24005 {"New Channel Width", "wlan.wide_bw.new_channel_width",
24006 FT_UINT8, BASE_HEX, VALS(vht_operation_info_channel_width), 0x0,
24009 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment0,
24010 {"New Channel Center Frequency Segment 0", "wlan.wide_bw.new_channel_center_freq_segment0",
24011 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
24014 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment1,
24015 {"New Channel Center Frequency Segment 1", "wlan.wide_bw.new_channel_center_freq_segment1",
24016 FT_UINT8, BASE_HEX_DEC, NULL, 0x0,
24019 {&hf_ieee80211_operat_notification_mode,
24020 {"Operating Mode Notification", "wlan.operat_notification_mode",
24021 FT_UINT8, BASE_HEX, NULL, 0x0,
24024 {&hf_ieee80211_operat_mode_field_channel_width,
24025 {"Channel Width", "wlan.operat_mode_field.channelwidth",
24026 FT_UINT8, BASE_HEX, VALS(operating_mode_field_channel_width), 0x03,
24029 {&hf_ieee80211_operat_mode_field_reserved,
24030 {"Reserved", "wlan.operat_mode_field.reserved",
24031 FT_UINT8, BASE_HEX, NULL, 0x0C,
24034 {&hf_ieee80211_operat_mode_field_rxnss,
24035 {"Rx NSS", "wlan.operat_mode_field.rxnss",
24036 FT_UINT8, BASE_HEX, VALS(operat_mode_field_rxnss), 0x70,
24039 {&hf_ieee80211_operat_mode_field_rxnsstype,
24040 {"Rx NSS Type", "wlan.operat_mode_field.rxnsstype",
24041 FT_UINT8, BASE_HEX, NULL, 0x80,
24042 "Indicate that the Rx NSS subfield carries the maximum number of spatial streams that the STA can receive", HFILL }},
24044 {&hf_ieee80211_ampduparam,
24045 {"A-MPDU Parameters", "wlan.ht.ampduparam",
24046 FT_UINT8, BASE_HEX, NULL, 0,
24049 {&hf_ieee80211_ampduparam_vs,
24050 {"A-MPDU Parameters (VS)", "wlan.vs.ht.ampduparam",
24051 FT_UINT8, BASE_HEX, NULL, 0,
24052 "Vendor Specific A-MPDU Parameters", HFILL }},
24054 {&hf_ieee80211_ampduparam_mpdu,
24055 {"Maximum Rx A-MPDU Length", "wlan.ht.ampduparam.maxlength",
24056 FT_UINT8, BASE_HEX, 0, 0x03,
24059 {&hf_ieee80211_ampduparam_mpdu_start_spacing,
24060 {"MPDU Density", "wlan.ht.ampduparam.mpdudensity",
24061 FT_UINT8, BASE_HEX, VALS(ampduparam_mpdu_start_spacing_flags), 0x1c,
24064 {&hf_ieee80211_ampduparam_reserved,
24065 {"Reserved", "wlan.ht.ampduparam.reserved",
24066 FT_UINT8, BASE_HEX, NULL, 0xE0,
24069 {&hf_ieee80211_mcsset,
24070 {"Rx Supported Modulation and Coding Scheme Set", "wlan.ht.mcsset",
24071 FT_STRING, BASE_NONE, NULL, 0,
24074 {&hf_ieee80211_mcsset_vs,
24075 {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan.vs.ht.mcsset",
24076 FT_STRING, BASE_NONE, NULL, 0,
24077 "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL }},
24079 {&hf_ieee80211_mcsset_rx_bitmask,
24080 {"Rx Modulation and Coding Scheme (One bit per modulation)", "wlan.ht.mcsset.rxbitmask",
24081 FT_NONE, BASE_NONE, NULL, 0,
24082 "One bit per modulation", HFILL }},
24084 {&hf_ieee80211_mcsset_rx_bitmask_0to7,
24085 {"Rx Bitmask Bits 0-7", "wlan.ht.mcsset.rxbitmask.0to7",
24086 FT_UINT32, BASE_HEX, 0, 0x000000ff,
24089 {&hf_ieee80211_mcsset_rx_bitmask_8to15,
24090 {"Rx Bitmask Bits 8-15", "wlan.ht.mcsset.rxbitmask.8to15",
24091 FT_UINT32, BASE_HEX, 0, 0x0000ff00,
24094 {&hf_ieee80211_mcsset_rx_bitmask_16to23,
24095 {"Rx Bitmask Bits 16-23", "wlan.ht.mcsset.rxbitmask.16to23",
24096 FT_UINT32, BASE_HEX, 0, 0x00ff0000,
24099 {&hf_ieee80211_mcsset_rx_bitmask_24to31,
24100 {"Rx Bitmask Bits 24-31", "wlan.ht.mcsset.rxbitmask.24to31",
24101 FT_UINT32, BASE_HEX, 0, 0xff000000,
24104 {&hf_ieee80211_mcsset_rx_bitmask_32,
24105 {"Rx Bitmask Bit 32", "wlan.ht.mcsset.rxbitmask.32",
24106 FT_UINT32, BASE_HEX, 0, 0x000001,
24109 {&hf_ieee80211_mcsset_rx_bitmask_33to38,
24110 {"Rx Bitmask Bits 33-38", "wlan.ht.mcsset.rxbitmask.33to38",
24111 FT_UINT32, BASE_HEX, 0, 0x00007e,
24114 {&hf_ieee80211_mcsset_rx_bitmask_39to52,
24115 {"Rx Bitmask Bits 39-52", "wlan.ht.mcsset.rxbitmask.39to52",
24116 FT_UINT32, BASE_HEX, 0, 0x1fff80,
24119 {&hf_ieee80211_mcsset_rx_bitmask_53to76,
24120 {"Rx Bitmask Bits 53-76", "wlan.ht.mcsset.rxbitmask.53to76",
24121 FT_UINT32, BASE_HEX, 0, 0x1fffffe0,
24124 {&hf_ieee80211_mcsset_highest_data_rate,
24125 {"Highest Supported Data Rate", "wlan.ht.mcsset.highestdatarate",
24126 FT_UINT16, BASE_HEX, 0, 0x03ff,
24129 {&hf_ieee80211_mcsset_tx_mcs_set_defined,
24130 {"Tx Supported MCS Set", "wlan.ht.mcsset.txsetdefined",
24131 FT_BOOLEAN, 16, TFS(&tfs_defined_not_defined), 0x0001,
24134 {&hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal,
24135 {"Tx and Rx MCS Set", "wlan.ht.mcsset.txrxmcsnotequal",
24136 FT_BOOLEAN, 16, TFS(&mcsset_tx_rx_mcs_set_not_equal_flag), 0x0002,
24139 {&hf_ieee80211_mcsset_tx_max_spatial_streams,
24140 {"Maximum Number of Tx Spatial Streams Supported", "wlan.ht.mcsset.txmaxss",
24141 FT_UINT16, BASE_HEX, 0 , 0x000c,
24144 {&hf_ieee80211_mcsset_tx_unequal_modulation,
24145 {"Unequal Modulation", "wlan.ht.mcsset.txunequalmod",
24146 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0010,
24149 {&hf_ieee80211_htex_cap,
24150 {"HT Extended Capabilities", "wlan.htex.capabilities",
24151 FT_UINT16, BASE_HEX, NULL, 0,
24152 "HT Extended Capability information", HFILL }},
24154 {&hf_ieee80211_htex_vs_cap,
24155 {"HT Extended Capabilities (VS)", "wlan.vs.htex.capabilities",
24156 FT_UINT16, BASE_HEX, NULL, 0,
24157 "Vendor Specific HT Extended Capability information", HFILL }},
24159 {&hf_ieee80211_htex_pco,
24160 {"Transmitter supports PCO", "wlan.htex.capabilities.pco",
24161 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0001,
24164 {&hf_ieee80211_htex_transtime,
24165 {"Time needed to transition between 20MHz and 40MHz", "wlan.htex.capabilities.transtime",
24166 FT_UINT16, BASE_HEX, VALS(htex_transtime_flags), 0x0006,
24169 {&hf_ieee80211_htex_mcs,
24170 {"MCS Feedback capability", "wlan.htex.capabilities.mcs",
24171 FT_UINT16, BASE_HEX, VALS(htex_mcs_flags), 0x0300,
24174 {&hf_ieee80211_htex_htc_support,
24175 {"High Throughput", "wlan.htex.capabilities.htc",
24176 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0400,
24179 {&hf_ieee80211_htex_rd_responder,
24180 {"Reverse Direction Responder", "wlan.htex.capabilities.rdresponder",
24181 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0800,
24184 {&hf_ieee80211_txbf,
24185 {"Transmit Beam Forming (TxBF) Capabilities", "wlan.txbf",
24186 FT_UINT32, BASE_HEX, NULL, 0,
24189 {&hf_ieee80211_txbf_vs,
24190 {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan.vs.txbf",
24191 FT_UINT32, BASE_HEX, NULL, 0,
24192 "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL }},
24194 {&hf_ieee80211_txbf_cap,
24195 {"Transmit Beamforming", "wlan.txbf.txbf",
24196 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000001,
24199 {&hf_ieee80211_txbf_rcv_ssc,
24200 {"Receive Staggered Sounding", "wlan.txbf.rxss",
24201 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000002,
24204 {&hf_ieee80211_txbf_tx_ssc,
24205 {"Transmit Staggered Sounding", "wlan.txbf.txss",
24206 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000004,
24209 {&hf_ieee80211_txbf_rcv_ndp,
24210 {"Receive Null Data packet (NDP)", "wlan.txbf.rxndp",
24211 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000008,
24214 {&hf_ieee80211_txbf_tx_ndp,
24215 {"Transmit Null Data packet (NDP)", "wlan.txbf.txndp",
24216 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000010,
24219 {&hf_ieee80211_txbf_impl_txbf,
24220 {"Implicit TxBF capable", "wlan.txbf.impltxbf",
24221 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000020,
24222 "Implicit Transmit Beamforming (TxBF) capable", HFILL }},
24224 {&hf_ieee80211_txbf_calib,
24225 {"Calibration", "wlan.txbf.calibration",
24226 FT_UINT32, BASE_HEX, VALS(txbf_calib_flag), 0x000000c0,
24229 {&hf_ieee80211_txbf_expl_csi,
24230 {"STA can apply TxBF using CSI explicit feedback", "wlan.txbf.csi",
24231 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000100,
24232 "Station can apply TxBF using CSI explicit feedback", HFILL }},
24234 {&hf_ieee80211_txbf_expl_uncomp_fm,
24235 {"STA can apply TxBF using uncompressed beamforming feedback matrix", "wlan.txbf.fm.uncompressed.tbf",
24236 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000200,
24237 "Station can apply TxBF using uncompressed beamforming feedback matrix", HFILL }},
24239 {&hf_ieee80211_txbf_expl_comp_fm,
24240 {"STA can apply TxBF using compressed beamforming feedback matrix", "wlan.txbf.fm.compressed.tbf",
24241 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000400,
24242 "Station can apply TxBF using compressed beamforming feedback matrix", HFILL }},
24244 {&hf_ieee80211_txbf_expl_bf_csi,
24245 {"Receiver can return explicit CSI feedback", "wlan.txbf.rcsi",
24246 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00001800,
24249 {&hf_ieee80211_txbf_expl_uncomp_fm_feed,
24250 {"Receiver can return explicit uncompressed Beamforming Feedback Matrix", "wlan.txbf.fm.uncompressed.rbf",
24251 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00006000,
24254 {&hf_ieee80211_txbf_expl_comp_fm_feed,
24255 {"STA can compress and use compressed Beamforming Feedback Matrix", "wlan.txbf.fm.compressed.bf",
24256 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags), 0x00018000,
24257 "Station can compress and use compressed Beamforming Feedback Matrix", HFILL }},
24259 {&hf_ieee80211_txbf_min_group,
24260 {"Minimal grouping used for explicit feedback reports", "wlan.txbf.mingroup",
24261 FT_UINT32, BASE_HEX, VALS(txbf_min_group_flags), 0x00060000,
24264 {&hf_ieee80211_vht_cap,
24265 {"VHT Capabilities Info", "wlan.vht.capabilities",
24266 FT_UINT32, BASE_HEX, NULL, 0,
24267 "VHT Capabilities information", HFILL }},
24269 {&hf_ieee80211_vht_max_mpdu_length,
24270 {"Maximum MPDU Length", "wlan.vht.capabilities.maxmpdulength",
24271 FT_UINT32, BASE_HEX, VALS(vht_max_mpdu_length_flag), 0x00000003,
24272 "In Octets unit", HFILL }},
24274 {&hf_ieee80211_vht_supported_chan_width_set,
24275 {"Supported Channel Width Set", "wlan.vht.capabilities.supportedchanwidthset",
24276 FT_UINT32, BASE_HEX, VALS(vht_supported_chan_width_set_flag), 0x0000000c,
24279 {&hf_ieee80211_vht_rx_ldpc,
24280 {"Rx LDPC", "wlan.vht.capabilities.rxldpc",
24281 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000010,
24284 {&hf_ieee80211_vht_short_gi_for_80,
24285 {"Short GI for 80MHz", "wlan.vht.capabilities.short80",
24286 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000020,
24289 {&hf_ieee80211_vht_short_gi_for_160,
24290 {"Short GI for 160MHz and 80+80MHz", "wlan.vht.capabilities.short160",
24291 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000040,
24294 {&hf_ieee80211_vht_tx_stbc,
24295 {"Tx STBC", "wlan.vht.capabilities.txstbc",
24296 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000080,
24299 {&hf_ieee80211_vht_rx_stbc,
24300 {"Rx STBC", "wlan.vht.capabilities.rxstbc",
24301 FT_UINT32, BASE_HEX, VALS(vht_rx_stbc_flag), 0x00000700,
24304 {&hf_ieee80211_vht_su_beamformer_cap,
24305 {"SU Beam-former Capable", "wlan.vht.capabilities.subeamformer",
24306 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000800,
24309 {&hf_ieee80211_vht_su_beamformee_cap,
24310 {"SU Beam-formee Capable", "wlan.vht.capabilities.subeamformee",
24311 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00001000,
24314 {&hf_ieee80211_vht_beamformer_antennas,
24315 {"Compressed Steering Number of Beamformer Antennas Supported", "wlan.vht.capabilities.beamformerants",
24316 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag), 0x0000e000,
24319 {&hf_ieee80211_vht_sounding_dimensions,
24320 {"Number of Sounding Dimensions", "wlan.vht.capabilities.soundingdimensions",
24321 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag), 0x00070000,
24324 {&hf_ieee80211_vht_mu_beamformer_cap,
24325 {"MU Beam-former Capable", "wlan.vht.capabilities.mubeamformer",
24326 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00080000,
24329 {&hf_ieee80211_vht_mu_beamformee_cap,
24330 {"MU Beam-formee Capable", "wlan.vht.capabilities.mubeamformee",
24331 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00100000,
24334 {&hf_ieee80211_vht_txop_ps,
24335 {"VHT TXOP PS", "wlan.vht.capabilities.vhttxopps",
24336 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00200000,
24339 {&hf_ieee80211_vht_var_htc_field,
24340 {"+HTC-VHT Capable (VHT variant HT Control field)", "wlan.vht.capabilities.vhthtc",
24341 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00400000,
24344 {&hf_ieee80211_vht_max_ampdu,
24345 {"Max A-MPDU Length", "wlan.vht.capabilities.maxampdu",
24346 FT_UINT32, BASE_HEX, VALS(vht_max_ampdu_flag), 0x03800000,
24347 "In Octets unit", HFILL }},
24349 {&hf_ieee80211_vht_link_adaptation_cap,
24350 {"VHT Link Adaptation", "wlan.vht.capabilities.linkadapt",
24351 FT_UINT32, BASE_HEX, VALS(vht_link_adapt_flag), 0x0c000000,
24354 {&hf_ieee80211_vht_rx_pattern,
24355 {"Rx Antenna Pattern Consistency", "wlan.vht.capabilities.rxpatconsist",
24356 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x10000000,
24359 {&hf_ieee80211_vht_tx_pattern,
24360 {"Tx Antenna Pattern Consistency", "wlan.vht.capabilities.txpatconsist",
24361 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x20000000,
24364 {&hf_ieee80211_vht_reserv,
24365 {"Reserved", "wlan.vht.reserved",
24366 FT_BOOLEAN, 32, NULL, 0xc0000000,
24369 {&hf_ieee80211_vht_mcsset,
24370 {"VHT Supported MCS Set", "wlan.vht.mcsset",
24371 FT_NONE, BASE_NONE, NULL, 0,
24374 {&hf_ieee80211_vht_mcsset_rx_mcs_map,
24375 {"Rx MCS Map", "wlan.vht.mcsset.rxmcsmap",
24376 FT_UINT16, BASE_HEX, NULL, 0,
24379 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
24380 {"Rx 1 SS", "wlan.vht.mcsset.rxmcsmap.ss1",
24381 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
24384 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
24385 {"Rx 2 SS", "wlan.vht.mcsset.rxmcsmap.ss2",
24386 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
24389 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
24390 {"Rx 3 SS", "wlan.vht.mcsset.rxmcsmap.ss3",
24391 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
24394 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
24395 {"Rx 4 SS", "wlan.vht.mcsset.rxmcsmap.ss4",
24396 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
24399 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
24400 {"Rx 5 SS", "wlan.vht.mcsset.rxmcsmap.ss5",
24401 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
24404 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
24405 {"Rx 6 SS", "wlan.vht.mcsset.rxmcsmap.ss6",
24406 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
24409 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
24410 {"Rx 7 SS", "wlan.vht.mcsset.rxmcsmap.ss7",
24411 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
24414 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
24415 {"Rx 8 SS", "wlan.vht.mcsset.rxmcsmap.ss8",
24416 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
24419 {&hf_ieee80211_vht_mcsset_rx_highest_long_gi,
24420 {"Rx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.rxhighestlonggirate",
24421 FT_UINT16, BASE_HEX, NULL, 0x1fff,
24424 {&hf_ieee80211_vht_mcsset_tx_mcs_map,
24425 {"Tx MCS Map", "wlan.vht.mcsset.txmcsmap",
24426 FT_UINT16, BASE_HEX, NULL, 0,
24429 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
24430 {"Tx 1 SS", "wlan.vht.mcsset.txmcsmap.ss1",
24431 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
24434 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
24435 {"Tx 2 SS", "wlan.vht.mcsset.txmcsmap.ss2",
24436 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
24439 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
24440 {"Tx 3 SS", "wlan.vht.mcsset.txmcsmap.ss3",
24441 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
24444 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
24445 {"Tx 4 SS", "wlan.vht.mcsset.txmcsmap.ss4",
24446 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
24449 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
24450 {"Tx 5 SS", "wlan.vht.mcsset.txmcsmap.ss5",
24451 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
24454 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
24455 {"Tx 6 SS", "wlan.vht.mcsset.txmcsmap.ss6",
24456 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
24459 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
24460 {"Tx 7 SS", "wlan.vht.mcsset.txmcsmap.ss7",
24461 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
24464 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
24465 {"Tx 8 SS", "wlan.vht.mcsset.txmcsmap.ss8",
24466 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
24469 {&hf_ieee80211_vht_mcsset_tx_highest_long_gi,
24470 {"Tx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.txhighestlonggirate",
24471 FT_UINT16, BASE_HEX, NULL, 0x1fff,
24474 {&hf_ieee80211_vht_op,
24475 {"VHT Operation Info", "wlan.vht.op",
24476 FT_NONE, BASE_NONE, NULL, 0,
24479 {&hf_ieee80211_vht_op_channel_width,
24480 {"Channel Width", "wlan.vht.op.channelwidth",
24481 FT_UINT8, BASE_HEX, VALS(vht_op_channel_width_flag), 0,
24484 {&hf_ieee80211_vht_op_channel_center0,
24485 {"Channel Center Segment 0", "wlan.vht.op.channelcenter0",
24486 FT_UINT8, BASE_DEC, NULL, 0,
24489 {&hf_ieee80211_vht_op_channel_center1,
24490 {"Channel Center Segment 1", "wlan.vht.op.channelcenter1",
24491 FT_UINT8, BASE_DEC, NULL, 0,
24494 {&hf_ieee80211_vht_op_basic_mcs_map,
24495 {"Basic MCS Map", "wlan.vht.op.basicmcsmap",
24496 FT_UINT16, BASE_HEX, NULL, 0,
24499 {&hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
24500 {"Basic 1 SS", "wlan.vht.op.basicmcsmap.ss1",
24501 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0003,
24504 {&hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
24505 {"Basic 2 SS", "wlan.vht.op.basicmcsmap.ss2",
24506 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x000c,
24509 {&hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
24510 {"Basic 3 SS", "wlan.vht.op.basicmcsmap.ss3",
24511 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0030,
24514 {&hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
24515 {"Basic 4 SS", "wlan.vht.op.basicmcsmap.ss4",
24516 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x00c0,
24519 {&hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
24520 {"Basic 5 SS", "wlan.vht.op.basicmcsmap.ss5",
24521 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0300,
24524 {&hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
24525 {"Basic 6 SS", "wlan.vht.op.basicmcsmap.ss6",
24526 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x0c00,
24529 {&hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
24530 {"Basic 7 SS", "wlan.vht.op.basicmcsmap.ss7",
24531 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0x3000,
24534 {&hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
24535 {"Basic 8 SS", "wlan.vht.op.basicmcsmap.ss8",
24536 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag), 0xc000,
24539 {&hf_ieee80211_vht_tpe_pwr_info,
24540 {"Tx Pwr Info", "wlan.vht.tpe.pwr_info",
24541 FT_UINT8, BASE_HEX, NULL, 0,
24544 {&hf_ieee80211_vht_tpe_pwr_info_count,
24545 {"Max Tx Pwr Count", "wlan.vht.tpe.pwr_info.count",
24546 FT_UINT8, BASE_DEC, NULL , 0x07,
24549 {&hf_ieee80211_vht_tpe_pwr_info_unit,
24550 {"Max Tx Pwr Unit Interpretation", "wlan.vht.tpe.pwr_info.unit",
24551 FT_UINT8, BASE_DEC, VALS(vht_tpe_pwr_units) , 0x38,
24554 {&hf_ieee80211_vht_tpe_pwr_info_reserved,
24555 {"Reserved", "wlan.vht.tpe.pwr_info.reserved",
24556 FT_UINT8, BASE_DEC, NULL , 0xC0,
24559 {&hf_ieee80211_vht_tpe_pwr_constr_20,
24560 {"Local Max Tx Pwr Constraint 20MHz", "wlan.vht.tpe.pwr_constr_20",
24561 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom), 0,
24564 {&hf_ieee80211_vht_tpe_pwr_constr_40,
24565 {"Local Max Tx Pwr Constraint 40MHz", "wlan.vht.tpe.pwr_constr_40",
24566 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom), 0,
24569 {&hf_ieee80211_vht_tpe_pwr_constr_80,
24570 {"Local Max Tx Pwr Constraint 80MHz", "wlan.vht.tpe.pwr_constr_80",
24571 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom), 0,
24574 {&hf_ieee80211_vht_tpe_pwr_constr_160,
24575 {"Local Max Tx Pwr Constraint 160MHz/80+80 MHz", "wlan.vht.tpe.pwr_constr_160",
24576 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom), 0,
24579 {&hf_ieee80211_txbf_csi_num_bf_ant,
24580 {"Max antennae STA can support when CSI feedback required", "wlan.txbf.csinumant",
24581 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x00180000,
24582 "Max antennae station can support when CSI feedback required", HFILL }},
24584 {&hf_ieee80211_txbf_uncomp_sm_bf_ant,
24585 {"Max antennae STA can support when uncompressed Beamforming feedback required", "wlan.txbf.fm.uncompressed.maxant",
24586 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x00600000,
24587 "Max antennae station can support when uncompressed Beamforming feedback required", HFILL }},
24589 {&hf_ieee80211_txbf_comp_sm_bf_ant,
24590 {"Max antennae STA can support when compressed Beamforming feedback required", "wlan.txbf.fm.compressed.maxant",
24591 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags), 0x01800000,
24592 "Max antennae station can support when compressed Beamforming feedback required", HFILL }},
24594 {&hf_ieee80211_txbf_csi_max_rows_bf,
24595 {"Maximum number of rows of CSI explicit feedback", "wlan.txbf.csi.maxrows",
24596 FT_UINT32, BASE_HEX, VALS(txbf_csi_max_rows_bf_flags), 0x06000000,
24599 {&hf_ieee80211_txbf_chan_est,
24600 {"Maximum number of space time streams for which channel dimensions can be simultaneously estimated", "wlan.txbf.channelest",
24601 FT_UINT32, BASE_HEX, VALS(txbf_chan_est_flags), 0x18000000,
24604 {&hf_ieee80211_txbf_resrv,
24605 {"Reserved", "wlan.txbf.reserved",
24606 FT_UINT32, BASE_HEX, NULL, 0xe0000000,
24609 {&hf_ieee80211_hta_cc,
24610 {"HT Control Channel", "wlan.hta.control_channel",
24611 FT_UINT8, BASE_DEC, NULL, 0,
24614 {&hf_ieee80211_hta_cap1,
24615 {"HT Additional Capabilities", "wlan.hta.capabilities",
24616 FT_UINT8, BASE_HEX, NULL, 0,
24617 "HT Additional Capability information", HFILL }},
24619 {&hf_ieee80211_hta_cap2,
24620 {"HT Additional Capabilities", "wlan.hta.capabilities",
24621 FT_UINT16, BASE_HEX, NULL, 0,
24622 "HT Additional Capability information", HFILL }},
24624 {&hf_ieee80211_hta_ext_chan_offset,
24625 {"Extension Channel Offset", "wlan.hta.capabilities.ext_chan_offset",
24626 FT_UINT16, BASE_HEX, VALS(hta_ext_chan_offset_flag), 0x0003,
24629 {&hf_ieee80211_hta_rec_tx_width,
24630 {"Recommended Tx Channel Width", "wlan.hta.capabilities.rec_tx_width",
24631 FT_BOOLEAN, 16, TFS(&hta_rec_tx_width_flag), 0x0004,
24632 "Recommended Transmit Channel Width", HFILL }},
24634 {&hf_ieee80211_hta_rifs_mode,
24635 {"Reduced Interframe Spacing (RIFS) Mode", "wlan.hta.capabilities.rifs_mode",
24636 FT_BOOLEAN, 16, TFS(&hta_rifs_mode_flag), 0x0008,
24639 {&hf_ieee80211_hta_controlled_access,
24640 {"Controlled Access Only", "wlan.hta.capabilities.controlled_access",
24641 FT_BOOLEAN, 16, TFS(&hta_controlled_access_flag), 0x0010,
24644 {&hf_ieee80211_hta_service_interval,
24645 {"Service Interval Granularity", "wlan.hta.capabilities.service_interval",
24646 FT_UINT16, BASE_HEX, VALS(hta_service_interval_flag), 0x00E0,
24649 {&hf_ieee80211_hta_operating_mode,
24650 {"Operating Mode", "wlan.hta.capabilities.operating_mode",
24651 FT_UINT16, BASE_HEX, VALS(hta_operating_mode_flag), 0x0003,
24654 {&hf_ieee80211_hta_non_gf_devices,
24655 {"Non Greenfield (GF) devices Present", "wlan.hta.capabilities.non_gf_devices",
24656 FT_BOOLEAN, 16, TFS(&hta_non_gf_devices_flag), 0x0004,
24657 "on Greenfield (GF) devices Present", HFILL }},
24659 {&hf_ieee80211_hta_basic_stbc_mcs,
24660 {"Basic STB Modulation and Coding Scheme (MCS)", "wlan.hta.capabilities.basic_stbc_mcs",
24661 FT_UINT16, BASE_HEX, NULL , 0x007f,
24664 {&hf_ieee80211_hta_dual_stbc_protection,
24665 {"Dual Clear To Send (CTS) Protection", "wlan.hta.capabilities.dual_stbc_protection",
24666 FT_BOOLEAN, 16, TFS(&hta_dual_stbc_protection_flag), 0x0080,
24669 {&hf_ieee80211_hta_secondary_beacon,
24670 {"Secondary Beacon", "wlan.hta.capabilities.secondary_beacon",
24671 FT_BOOLEAN, 16, TFS(&hta_secondary_beacon_flag), 0x0100,
24674 {&hf_ieee80211_hta_lsig_txop_protection,
24675 {"L-SIG TXOP Protection Support", "wlan.hta.capabilities.lsig_txop_protection",
24676 FT_BOOLEAN, 16, TFS(&hta_lsig_txop_protection_flag), 0x0200,
24679 {&hf_ieee80211_hta_pco_active,
24680 {"Phased Coexistence Operation (PCO) Active", "wlan.hta.capabilities.pco_active",
24681 FT_BOOLEAN, 16, TFS(&hta_pco_active_flag), 0x0400,
24684 {&hf_ieee80211_hta_pco_phase,
24685 {"Phased Coexistence Operation (PCO) Phase", "wlan.hta.capabilities.pco_phase",
24686 FT_BOOLEAN, 16, TFS(&hta_pco_phase_flag), 0x0800,
24689 {&hf_ieee80211_antsel,
24690 {"Antenna Selection (ASEL) Capabilities", "wlan.asel",
24691 FT_UINT8, BASE_HEX, NULL, 0,
24694 {&hf_ieee80211_antsel_vs,
24695 {"Antenna Selection (ASEL) Capabilities (VS)", "wlan.vs.asel",
24696 FT_UINT8, BASE_HEX, NULL, 0,
24697 "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL }},
24699 {&hf_ieee80211_antsel_b0,
24700 {"Antenna Selection Capable", "wlan.asel.capable",
24701 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
24704 {&hf_ieee80211_antsel_b1,
24705 {"Explicit CSI Feedback Based Tx ASEL", "wlan.asel.txcsi",
24706 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
24709 {&hf_ieee80211_antsel_b2,
24710 {"Antenna Indices Feedback Based Tx ASEL", "wlan.asel.txif",
24711 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
24714 {&hf_ieee80211_antsel_b3,
24715 {"Explicit CSI Feedback", "wlan.asel.csi",
24716 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
24719 {&hf_ieee80211_antsel_b4,
24720 {"Antenna Indices Feedback", "wlan.asel.if",
24721 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
24724 {&hf_ieee80211_antsel_b5,
24725 {"Rx ASEL", "wlan.asel.rx",
24726 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
24729 {&hf_ieee80211_antsel_b6,
24730 {"Tx Sounding PPDUs", "wlan.asel.sppdu",
24731 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
24734 {&hf_ieee80211_antsel_b7,
24735 {"Reserved", "wlan.asel.reserved",
24736 FT_UINT8, BASE_HEX, NULL, 0x80,
24739 {&hf_ieee80211_ht_info_delimiter1,
24740 {"HT Information Subset (1 of 3)", "wlan.ht.info.delim1",
24741 FT_UINT8, BASE_HEX, NULL, 0,
24744 {&hf_ieee80211_ht_info_primary_channel,
24745 {"Primary Channel", "wlan.ht.info.primarychannel",
24746 FT_UINT8, BASE_DEC, NULL, 0,
24749 {&hf_ieee80211_ht_info_secondary_channel_offset,
24750 {"Secondary channel offset", "wlan.ht.info.secchanoffset",
24751 FT_UINT8, BASE_HEX, VALS(ht_info_secondary_channel_offset_flags), 0x03,
24754 {&hf_ieee80211_ht_info_channel_width,
24755 {"Supported channel width", "wlan.ht.info.chanwidth",
24756 FT_BOOLEAN, 8, TFS(&ht_info_channel_width_flag), 0x04,
24759 {&hf_ieee80211_ht_info_rifs_mode,
24760 {"Reduced Interframe Spacing (RIFS)", "wlan.ht.info.rifs",
24761 FT_BOOLEAN, 8, TFS(&ht_info_rifs_mode_flag), 0x08,
24764 {&hf_ieee80211_ht_info_psmp_stas_only,
24765 {"Power Save Multi-Poll (PSMP) stations only", "wlan.ht.info.psmponly",
24766 FT_BOOLEAN, 8, TFS(&ht_info_psmp_stas_only_flag), 0x10,
24769 {&hf_ieee80211_ht_info_service_interval_granularity,
24770 {"Shortest service interval", "wlan.ht.info",
24771 FT_UINT8, BASE_HEX, VALS(ht_info_service_interval_granularity_flags), 0xe0,
24774 {&hf_ieee80211_ht_info_delimiter2,
24775 {"HT Information Subset (2 of 3)", "wlan.ht.info.delim2",
24776 FT_UINT16, BASE_HEX, NULL, 0,
24779 {&hf_ieee80211_ht_info_operating_mode,
24780 {"Operating mode of BSS", "wlan.ht.info.operatingmode",
24781 FT_UINT16, BASE_HEX, VALS(ht_info_operating_mode_flags), 0x0003,
24784 {&hf_ieee80211_ht_info_non_greenfield_sta_present,
24785 {"Non-greenfield STAs present", "wlan.ht.info.greenfield",
24786 FT_BOOLEAN, 16, TFS(&ht_info_non_greenfield_sta_present_flag), 0x0004,
24789 {&hf_ieee80211_ht_info_transmit_burst_limit,
24790 {"Transmit burst limit", "wlan.ht.info.burstlim",
24791 FT_BOOLEAN, 16, TFS(&ht_info_transmit_burst_limit_flag), 0x0008,
24794 {&hf_ieee80211_ht_info_obss_non_ht_stas_present,
24795 {"OBSS non-HT STAs present", "wlan.ht.info.obssnonht",
24796 FT_BOOLEAN, 16, TFS(&ht_info_obss_non_ht_stas_present_flag), 0x0010,
24799 {&hf_ieee80211_ht_info_reserved_1,
24800 {"Reserved", "wlan.ht.info.reserved1",
24801 FT_UINT16, BASE_HEX, NULL, 0xffe0,
24804 {&hf_ieee80211_ht_info_delimiter3,
24805 {"HT Information Subset (3 of 3)", "wlan.ht.info.delim3",
24806 FT_UINT16, BASE_HEX, NULL, 0,
24809 {&hf_ieee80211_ht_info_reserved_2,
24810 {"Reserved", "wlan.ht.info.reserved2",
24811 FT_UINT16, BASE_HEX, NULL, 0x003f,
24814 {&hf_ieee80211_ht_info_dual_beacon,
24815 {"Dual beacon", "wlan.ht.info.dualbeacon",
24816 FT_BOOLEAN, 16, TFS(&ht_info_dual_beacon_flag), 0x0040,
24819 {&hf_ieee80211_ht_info_dual_cts_protection,
24820 {"Dual Clear To Send (CTS) protection", "wlan.ht.info.dualcts",
24821 FT_BOOLEAN, 16, TFS(&ht_info_dual_cts_protection_flag), 0x0080,
24824 {&hf_ieee80211_ht_info_secondary_beacon,
24825 {"Beacon ID", "wlan.ht.info.secondarybeacon",
24826 FT_BOOLEAN, 16, TFS(&ht_info_secondary_beacon_flag), 0x0100,
24829 {&hf_ieee80211_ht_info_lsig_txop_protection_full_support,
24830 {"L-SIG TXOP Protection Full Support", "wlan.ht.info.lsigprotsupport",
24831 FT_BOOLEAN, 16, TFS(&ht_info_lsig_txop_protection_full_support_flag), 0x0200,
24834 {&hf_ieee80211_ht_info_pco_active,
24835 {"Phased Coexistence Operation (PCO)", "wlan.ht.info.pco.active",
24836 FT_BOOLEAN, 16, TFS(&tfs_active_inactive), 0x0400,
24839 {&hf_ieee80211_ht_info_pco_phase,
24840 {"Phased Coexistence Operation (PCO) Phase", "wlan.ht.info.pco.phase",
24841 FT_BOOLEAN, 16, TFS(&ht_info_pco_phase_flag), 0x0800,
24844 {&hf_ieee80211_ht_info_reserved_3,
24845 {"Reserved", "wlan.ht.info.reserved3",
24846 FT_UINT16, BASE_HEX, NULL, 0xf000,
24849 {&hf_ieee80211_tag_ap_channel_report_operating_class,
24850 {"Operating Class", "wlan.ap_channel_report.operating_class",
24851 FT_UINT8, BASE_DEC, NULL, 0,
24854 {&hf_ieee80211_tag_ap_channel_report_channel_list,
24855 {"Channel List", "wlan.ap_channel_report.channel_list",
24856 FT_UINT8, BASE_DEC, NULL, 0,
24859 {&hf_ieee80211_tag_secondary_channel_offset,
24860 {"Secondary Channel Offset", "wlan.secchanoffset",
24861 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_secondary_channel_offset_flags), 0,
24864 {&hf_ieee80211_tag_bss_ap_avg_access_delay,
24865 {"AP Average Access Delay", "wlan.bss_ap_avg_access_delay",
24866 FT_UINT8, BASE_DEC, NULL, 0x0,
24869 {&hf_ieee80211_tag_antenna_id,
24870 {"Antenna ID", "wlan.antenna.id",
24871 FT_UINT8, BASE_DEC, NULL, 0x0,
24874 {&hf_ieee80211_tag_rsni,
24875 {"RSNI", "wlan.rsni",
24876 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom), 0x0,
24879 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
24880 {"Available Admission Capacity Bitmask", "wlan.bss_avb_adm_cap.bitmask",
24881 FT_UINT16, BASE_HEX, NULL, 0,
24883 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
24884 {"UP0 (bit0)", "wlan.bss_avb_adm_cap.bitmask.up0",
24885 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP0,
24887 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
24888 {"UP1 (bit1)", "wlan.bss_avb_adm_cap.bitmask.up1",
24889 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP1,
24891 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
24892 {"UP2 (bit2)", "wlan.bss_avb_adm_cap.bitmask.up2",
24893 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP2,
24895 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
24896 {"UP3 (bit3)", "wlan.bss_avb_adm_cap.bitmask.up3",
24897 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP3,
24899 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
24900 {"UP4 (bit4)", "wlan.bss_avb_adm_cap.bitmask.up4",
24901 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP4,
24903 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
24904 {"UP5 (bit5)", "wlan.bss_avb_adm_cap.bitmask.up5",
24905 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP5,
24907 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
24908 {"UP0 (bit6)", "wlan.bss_avb_adm_cap.bitmask.up6",
24909 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP6,
24911 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
24912 {"UP7 (bit7)", "wlan.bss_avb_adm_cap.bitmask.up7",
24913 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_UP7,
24915 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
24916 {"AC0 (bit8)", "wlan.bss_avb_adm_cap.bitmask.ac0",
24917 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC0,
24919 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
24920 {"AC1 (bit9)", "wlan.bss_avb_adm_cap.bitmask.AC1",
24921 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC1,
24923 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
24924 {"AC2 (bit10)", "wlan.bss_avb_adm_cap.bitmask.ac2",
24925 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC2,
24927 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
24928 {"AC3 (bit11)", "wlan.bss_avb_adm_cap.bitmask.ac3",
24929 FT_BOOLEAN, 16, TFS(&tfs_set_notset), BSS_BITMASK_AC3,
24931 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
24932 {"Reserved", "wlan.bss_avb_adm_cap.bitmask.rsv",
24933 FT_UINT16, BASE_HEX, NULL, BSS_BITMASK_RSV,
24935 {&hf_ieee80211_tag_bss_avb_adm_cap_up0,
24936 {"UP0", "wlan.bss_avb_adm_cap.up0",
24937 FT_UINT16, BASE_DEC, NULL, 0x0,
24939 {&hf_ieee80211_tag_bss_avb_adm_cap_up1,
24940 {"UP1", "wlan.bss_avb_adm_cap.up1",
24941 FT_UINT16, BASE_DEC, NULL, 0x0,
24943 {&hf_ieee80211_tag_bss_avb_adm_cap_up2,
24944 {"UP2", "wlan.bss_avb_adm_cap.up2",
24945 FT_UINT16, BASE_DEC, NULL, 0x0,
24947 {&hf_ieee80211_tag_bss_avb_adm_cap_up3,
24948 {"UP3", "wlan.bss_avb_adm_cap.up3",
24949 FT_UINT16, BASE_DEC, NULL, 0x0,
24951 {&hf_ieee80211_tag_bss_avb_adm_cap_up4,
24952 {"UP4", "wlan.bss_avb_adm_cap.up4",
24953 FT_UINT16, BASE_DEC, NULL, 0x0,
24955 {&hf_ieee80211_tag_bss_avb_adm_cap_up5,
24956 {"UP5", "wlan.bss_avb_adm_cap.up5",
24957 FT_UINT16, BASE_DEC, NULL, 0x0,
24959 {&hf_ieee80211_tag_bss_avb_adm_cap_up6,
24960 {"UP6", "wlan.bss_avb_adm_cap.up6",
24961 FT_UINT16, BASE_DEC, NULL, 0x0,
24963 {&hf_ieee80211_tag_bss_avb_adm_cap_up7,
24964 {"UP7", "wlan.bss_avb_adm_cap.up7",
24965 FT_UINT16, BASE_DEC, NULL, 0x0,
24967 {&hf_ieee80211_tag_bss_avb_adm_cap_ac0,
24968 {"AC0", "wlan.bss_avb_adm_cap.ac0",
24969 FT_UINT16, BASE_DEC, NULL, 0x0,
24971 {&hf_ieee80211_tag_bss_avb_adm_cap_ac1,
24972 {"AC1", "wlan.bss_avb_adm_cap.ac1",
24973 FT_UINT16, BASE_DEC, NULL, 0x0,
24975 {&hf_ieee80211_tag_bss_avb_adm_cap_ac2,
24976 {"AC2", "wlan.bss_avb_adm_cap.ac2",
24977 FT_UINT16, BASE_DEC, NULL, 0x0,
24979 {&hf_ieee80211_tag_bss_avb_adm_cap_ac3,
24980 {"AC3", "wlan.bss_avb_adm_cap.ac3",
24981 FT_UINT16, BASE_DEC, NULL, 0x0,
24984 {&hf_ieee80211_tag_bss_avg_ac_access_delay_be,
24985 {"AC Average Access Delay for Best Effort", "wlan.bss_avg_ac_access_delay.be",
24986 FT_UINT8, BASE_DEC, NULL, 0x0,
24988 {&hf_ieee80211_tag_bss_avg_ac_access_delay_bk,
24989 {"AC Average Access Delay for Best Background", "wlan.bss_avg_ac_access_delay.bk",
24990 FT_UINT8, BASE_DEC, NULL, 0x0,
24992 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vi,
24993 {"AC Average Access Delay for Video", "wlan.bss_avg_ac_access_delay_vi",
24994 FT_UINT8, BASE_DEC, NULL, 0x0,
24996 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vo,
24997 {"AC Average Access Delay for Voice", "wlan.bss_avg_ac_access_delay_vo",
24998 FT_UINT8, BASE_DEC, NULL, 0x0,
25002 /* 802.11-2012 Table 8-119-RM Enabled Capabilities definition */
25003 {&hf_ieee80211_tag_rm_enabled_capabilities,
25004 {"RM Capabilities", "wlan.rmcap",
25005 FT_UINT8, BASE_HEX, NULL, 0,
25006 "Signals support for radio measurements in a device", HFILL }},
25008 /* RM Enabled Capability octet 1 */
25009 {&hf_ieee80211_tag_rm_enabled_capabilities_b0,
25010 {"Link Measurement", "wlan.rmcap.b0",
25011 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
25013 {&hf_ieee80211_tag_rm_enabled_capabilities_b1,
25014 {"Neighbor Report", "wlan.rmcap.b1",
25015 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
25017 {&hf_ieee80211_tag_rm_enabled_capabilities_b2,
25018 {"Parallel Measurements", "wlan.rmcap.b2",
25019 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04,
25021 {&hf_ieee80211_tag_rm_enabled_capabilities_b3,
25022 {"Repeated Measurements", "wlan.rmcap.b3",
25023 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
25025 {&hf_ieee80211_tag_rm_enabled_capabilities_b4,
25026 {"Beacon Passive Measurement", "wlan.rmcap.b4",
25027 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10,
25029 {&hf_ieee80211_tag_rm_enabled_capabilities_b5,
25030 {"Beacon Active Measurement", "wlan.rmcap.b5",
25031 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20,
25033 {&hf_ieee80211_tag_rm_enabled_capabilities_b6,
25034 {"Beacon Table Measurement", "wlan.rmcap.b6",
25035 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25037 {&hf_ieee80211_tag_rm_enabled_capabilities_b7,
25038 {"Beacon Measurement Reporting Conditions", "wlan.rmcap.b7",
25039 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
25042 /* RM Enabled Capability octet 2 */
25043 {&hf_ieee80211_tag_rm_enabled_capabilities_b8,
25044 {"Frame Measurement", "wlan.rmcap.b8",
25045 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
25047 {&hf_ieee80211_tag_rm_enabled_capabilities_b9,
25048 {"Channel Load Measurement", "wlan.rmcap.b9",
25049 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
25051 {&hf_ieee80211_tag_rm_enabled_capabilities_b10,
25052 {"Noise Histogram Measurement", "wlan.rmcap.b10",
25053 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04,
25055 {&hf_ieee80211_tag_rm_enabled_capabilities_b11,
25056 {"Statistics Measurement", "wlan.rmcap.b11",
25057 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
25059 {&hf_ieee80211_tag_rm_enabled_capabilities_b12,
25060 {"LCI Measurement", "wlan.rmcap.b12",
25061 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10,
25063 {&hf_ieee80211_tag_rm_enabled_capabilities_b13,
25064 {"LCI Azimuth capability", "wlan.rmcap.b13",
25065 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20,
25067 {&hf_ieee80211_tag_rm_enabled_capabilities_b14,
25068 {"Transmit Stream/Category Measurement", "wlan.rmcap.b14",
25069 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25071 {&hf_ieee80211_tag_rm_enabled_capabilities_b15,
25072 {"Triggered Transmit Stream/Category Measurement", "wlan.rmcap.b15",
25073 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
25076 /* RM Enabled Capability octet 3 */
25077 {&hf_ieee80211_tag_rm_enabled_capabilities_b16,
25078 {"AP Channel Report capability", "wlan.rmcap.b16",
25079 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
25081 {&hf_ieee80211_tag_rm_enabled_capabilities_b17,
25082 {"RM MIB capability", "wlan.rmcap.b17",
25083 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
25085 {&hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
25086 {"Operating Channel Max Measurement Duration", "wlan.rmcap.b18to20",
25087 FT_UINT8, BASE_DEC, NULL, 0x1C,
25089 {&hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
25090 {"Nonoperating Channel Max Measurement Duration", "wlan.rmcap.b21to23",
25091 FT_UINT8, BASE_DEC, NULL, 0xE0,
25094 /* RM Enabled Capability octet 4 */
25095 {&hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
25096 {"Measurement Pilotcapability", "wlan.rmcap.b24to26",
25097 FT_UINT8, BASE_DEC, NULL, 0x07,
25099 {&hf_ieee80211_tag_rm_enabled_capabilities_b27,
25100 {"Measurement Pilot Transmission Information", "wlan.rmcap.b27",
25101 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08,
25103 {&hf_ieee80211_tag_rm_enabled_capabilities_b28,
25104 {"Neighbor Report TSF Offset", "wlan.rmcap.b28",
25105 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10,
25107 {&hf_ieee80211_tag_rm_enabled_capabilities_b29,
25108 {"RCPI Measurement capability", "wlan.rmcap.b29",
25109 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20,
25111 {&hf_ieee80211_tag_rm_enabled_capabilities_b30,
25112 {"RSNI Measurement capability", "wlan.rmcap.b30",
25113 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25115 {&hf_ieee80211_tag_rm_enabled_capabilities_b31,
25116 {"BSS Average Access Delay capability", "wlan.rmcap.b31",
25117 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
25120 /* RM Enabled Capability octet 5 */
25121 {&hf_ieee80211_tag_rm_enabled_capabilities_b32,
25122 {"BSS Available Admission Capacity capability", "wlan.rmcap.b32",
25123 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
25125 {&hf_ieee80211_tag_rm_enabled_capabilities_b33,
25126 {"Antenna capability", "wlan.rmcap.b33",
25127 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
25129 {&hf_ieee80211_tag_rm_enabled_capabilities_o5,
25130 {"Reserved", "wlan.rmcap.o5",
25131 FT_UINT8, BASE_HEX, NULL, 0xFC,
25132 "Must be zero", HFILL }},
25134 /* 20/40 BSS Coexistence */
25135 {&hf_ieee80211_tag_20_40_bc,
25136 {"20/40 BSS Coexistence Flags", "wlan.20_40_bc",
25137 FT_UINT8, BASE_HEX, NULL, 0x0,
25139 {&hf_ieee80211_tag_20_40_bc_information_request,
25140 {"Information Request", "wlan.20_40_bc.information_request",
25141 FT_BOOLEAN, 8, NULL, 0x01,
25143 {&hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
25144 {"Forty MHz Intolerant", "wlan.20_40_bc.forty_mhz_intolerant",
25145 FT_BOOLEAN, 8, NULL, 0x02,
25147 {&hf_ieee80211_tag_20_40_bc_20_mhz_bss_witdh_request,
25148 {"20 MHz BSS Witdh Request", "wlan.20_40_bc.20_mhz_bss_witdh_request",
25149 FT_BOOLEAN, 8, NULL, 0x04,
25151 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
25152 {"OBSS Scanning Exemption Request", "wlan.20_40_bc.obss_scanning_exemption_request",
25153 FT_BOOLEAN, 8, NULL, 0x08,
25155 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
25156 {"OBSS Scanning Exemption Grant", "wlan.20_40_bc.obss_scanning_exemption_grant",
25157 FT_BOOLEAN, 8, NULL, 0x10,
25159 {&hf_ieee80211_tag_20_40_bc_reserved,
25160 {"Reserved", "wlan.20_40_bc.reserved",
25161 FT_UINT8, BASE_HEX, NULL, 0xE0,
25162 "Must be zero", HFILL }},
25165 {&hf_ieee80211_tag_power_constraint_local,
25166 {"Local Power Constraint", "wlan.powercon.local",
25167 FT_UINT8, BASE_DEC, NULL, 0,
25168 "Value that allows the mitigation requirements to be satisfied in the current channel", HFILL }},
25170 {&hf_ieee80211_tag_power_capability_min,
25171 {"Minimum Transmit Power", "wlan.powercap.min",
25172 FT_UINT8, BASE_DEC_HEX, NULL, 0,
25173 "The nominal minimum transmit power with which the STA is capable of transmitting in the current channel", HFILL }},
25175 {&hf_ieee80211_tag_power_capability_max,
25176 {"Maximum Transmit Power", "wlan.powercap.max",
25177 FT_UINT8, BASE_DEC_HEX, NULL, 0,
25178 "The nominal maximum transmit power with which the STA is capable of transmitting in the current channel", HFILL }},
25180 {&hf_ieee80211_tag_tpc_report_trsmt_pow,
25181 {"Transmit Power", "wlan.tcprep.trsmt_pow",
25182 FT_INT8, BASE_DEC, NULL, 0,
25185 {&hf_ieee80211_tag_tpc_report_link_mrg,
25186 {"Link Margin", "wlan.tcprep.link_mrg",
25187 FT_INT8, BASE_DEC, NULL, 0,
25190 {&hf_ieee80211_tag_supported_channels,
25191 {"Supported Channels Set", "wlan.supchan",
25192 FT_NONE, BASE_NONE, NULL, 0,
25195 {&hf_ieee80211_tag_supported_channels_first,
25196 {"First Supported Channel", "wlan.supchan.first",
25197 FT_UINT8, BASE_DEC, NULL, 0,
25200 {&hf_ieee80211_tag_supported_channels_range,
25201 {"Supported Channel Range", "wlan.supchan.range",
25202 FT_UINT8, BASE_DEC, NULL, 0,
25205 {&hf_ieee80211_csa_channel_switch_mode,
25206 {"Channel Switch Mode", "wlan.csa.channel_switch_mode",
25207 FT_UINT8, BASE_HEX, NULL, 0,
25208 "Indicates any restrictions on transmission until a channel switch", HFILL }},
25210 {&hf_ieee80211_csa_new_channel_number,
25211 {"New Channel Number", "wlan.csa.new_channel_number",
25212 FT_UINT8, BASE_HEX, NULL, 0,
25213 "Set to the number of the channel to which the STA is moving", HFILL }},
25215 {&hf_ieee80211_csa_channel_switch_count,
25216 {"Channel Switch Count", "wlan.csa.channel_switch.count",
25217 FT_UINT8, BASE_DEC, NULL, 0,
25218 "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 }},
25220 {&hf_ieee80211_mesh_channel_switch_ttl,
25221 {"Mesh Channel Switch TTL", "wlan.csa.mesh_channel_switch.ttl",
25222 FT_UINT8, BASE_DEC, NULL, 0,
25225 {&hf_ieee80211_mesh_channel_switch_flag,
25226 {"Mesh Channel Switch Flag", "wlan.csa.mesh_channel_switch.flag",
25227 FT_UINT8, BASE_HEX, NULL, 0,
25230 {&hf_ieee80211_mesh_chswitch_flag_txrestrict,
25231 {"CSA Tx Restrict", "wlan.csa.mesh_channel_switch.flag.txrestrict",
25232 FT_BOOLEAN, 16, TFS(&csa_txrestrict_flags), 0x0001,
25235 {&hf_ieee80211_mesh_chswitch_flag_initiator,
25236 {"CSA Initiator", "wlan.csa.mesh_channel_switch.flag.initiator",
25237 FT_BOOLEAN, 16, TFS(&csa_initiator_flags), 0x0002,
25240 {&hf_ieee80211_mesh_channel_switch_reason_code,
25241 {"Mesh Channel Switch Reason Code", "wlan.csa.mesh_channel_switch.reason_code",
25242 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_reason_code_ext, 0,
25245 {&hf_ieee80211_mesh_channel_switch_precedence_value,
25246 {"Mesh Channel Switch Precedence Value", "wlan.csa.mesh_channel_switch.pre_value",
25247 FT_UINT16, BASE_DEC, NULL, 0,
25250 {&hf_ieee80211_mesh_awake_window,
25251 {"Mesh Awake Window", "wlan.mesh.mesh_awake_window",
25252 FT_UINT16, BASE_CUSTOM, CF_FUNC(mesh_active_window_base_custom), 0,
25255 {&hf_ieee80211_tag_measure_request_token,
25256 {"Measurement Token", "wlan.measure.req.token",
25257 FT_UINT8, BASE_HEX, NULL, 0xff,
25260 {&hf_ieee80211_tag_measure_request_mode,
25261 {"Measurement Request Mode", "wlan.measure.req.mode",
25262 FT_UINT8, BASE_HEX, NULL, 0xff,
25265 {&hf_ieee80211_tag_measure_request_mode_parallel,
25266 {"Parallel", "wlan.measure.req.reqmode.parallel",
25267 FT_BOOLEAN, 8, NULL, 0x01,
25270 {&hf_ieee80211_tag_measure_request_mode_enable,
25271 {"Measurement Request Mode Field", "wlan.measure.req.reqmode.enable",
25272 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
25275 {&hf_ieee80211_tag_measure_request_mode_request,
25276 {"Measurement Reports", "wlan.measure.req.reqmode.request",
25277 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted), 0x04,
25280 {&hf_ieee80211_tag_measure_request_mode_report,
25281 {"Autonomous Measurement Reports", "wlan.measure.req.reqmode.report",
25282 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted), 0x08,
25285 {&hf_ieee80211_tag_measure_request_mode_duration_mandatory,
25286 {"Duration Mandatory", "wlan.measure.req.reqmode.duration_mandatory",
25287 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted), 0x10,
25290 {&hf_ieee80211_tag_measure_request_mode_reserved,
25291 {"Reserved", "wlan.measure.req.reqmode.reserved",
25292 FT_UINT8, BASE_HEX, NULL, 0xE0,
25295 {&hf_ieee80211_tag_measure_request_type,
25296 {"Measurement Request Type", "wlan.measure.req.reqtype",
25297 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_request_type_flags_ext, 0x00,
25300 {&hf_ieee80211_tag_measure_request_channel_number,
25301 {"Measurement Channel Number", "wlan.measure.req.channelnumber",
25302 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom), 0,
25305 {&hf_ieee80211_tag_measure_request_start_time,
25306 {"Measurement Start Time", "wlan.measure.req.starttime",
25307 FT_UINT64, BASE_HEX, NULL, 0,
25310 {&hf_ieee80211_tag_measure_request_duration,
25311 {"Measurement Duration", "wlan.measure.req.channelnumber",
25312 FT_UINT16, BASE_HEX, NULL, 0,
25313 "in TU (1 TU = 1024 us)", HFILL }},
25315 {&hf_ieee80211_tag_measure_request_operating_class,
25316 {"Operating Class", "wlan.measure.req.operatingclass",
25317 FT_UINT8, BASE_DEC, NULL, 0,
25320 {&hf_ieee80211_tag_measure_request_randomization_interval,
25321 {"Randomization Interval", "wlan.measure.req.randint",
25322 FT_UINT16, BASE_HEX, NULL, 0,
25323 "in TU (1 TU = 1024 us)", HFILL }},
25325 {&hf_ieee80211_tag_measure_request_measurement_mode,
25326 {"Measurement Mode", "wlan.measure.req.measurementmode",
25327 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_measurement_mode_flags), 0,
25330 {&hf_ieee80211_tag_measure_request_bssid,
25331 {"BSSID", "wlan.measure.req.bssid",
25332 FT_ETHER, BASE_NONE, NULL, 0,
25335 {&hf_ieee80211_tag_measure_request_subelement_length,
25336 {"Length", "wlan.measure.req.sub.length",
25337 FT_UINT8, BASE_DEC, NULL, 0,
25340 {&hf_ieee80211_tag_measure_request_beacon_sub_id,
25341 {"SubElement ID", "wlan.measure.req.beacon.sub.id",
25342 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_beacon_sub_id_flags), 0,
25345 {&hf_ieee80211_tag_measure_request_beacon_sub_ssid,
25346 {"SSID", "wlan.measure.req.beacon.sub.ssid",
25347 FT_STRING, BASE_NONE, 0, 0,
25350 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition,
25351 {"Reporting Condition", "wlan.measure.req.beacon.sub.bri.repcond",
25352 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags), 0,
25355 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset,
25356 {"Threshold/Offset", "wlan.measure.req.beacon.sub.bri.threshold_offset",
25357 FT_UINT8, BASE_HEX, NULL, 0,
25360 {&hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail,
25361 {"Reporting Detail", "wlan.measure.req.beacon.sub.bri.reporting_detail",
25362 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags), 0,
25365 {&hf_ieee80211_tag_measure_request_beacon_sub_request,
25366 {"Request", "wlan.measure.req.beacon.sub.request",
25367 FT_UINT8, BASE_DEC, 0, 0,
25370 {&hf_ieee80211_tag_measure_request_beacon_unknown,
25371 {"Unknown Data", "wlan.measure.req.beacon.unknown",
25372 FT_BYTES, BASE_NONE, NULL, 0,
25373 "(not interpreted)", HFILL }},
25375 {&hf_ieee80211_tag_measure_request_channel_load_sub_id,
25376 {"SubElement ID", "wlan.measure.req.channel_load.sub.id",
25377 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_channel_load_sub_id_vals), 0,
25380 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition,
25381 {"Reporting Condition", "wlan.measure.req.channel_load.sub.repcond",
25382 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals), 0,
25385 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref,
25386 {"Reference Value", "wlan.measure.req.channel_load.sub.ref",
25387 FT_UINT8, BASE_HEX, NULL, 0,
25391 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_id,
25392 {"SubElement ID", "wlan.measure.req.noise_histogram.sub.id",
25393 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_noise_histogram_sub_id_vals), 0,
25396 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition,
25397 {"Reporting Condition", "wlan.measure.reqnoise_histogram.sub.repcond",
25398 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals), 0,
25401 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref,
25402 {"ANPI Reference Value", "wlan.measure.req.noise_histogram.sub.anpiref",
25403 FT_UINT8, BASE_HEX, NULL, 0,
25407 {&hf_ieee80211_tag_measure_request_frame_request_type,
25408 {"Frame Request Type", "wlan.measure.req.frame_request_type",
25409 FT_UINT8, BASE_HEX, NULL, 0,
25412 {&hf_ieee80211_tag_measure_request_mac_address,
25413 {"MAC Address", "wlan.measure.req.mac_address",
25414 FT_BYTES, BASE_NONE, NULL, 0,
25417 {&hf_ieee80211_tag_measure_request_peer_mac_address,
25418 {"Peer MAC Address", "wlan.measure.req.peer_mac_address",
25419 FT_BYTES, BASE_NONE, NULL, 0,
25422 {&hf_ieee80211_tag_measure_request_group_id,
25423 {"Group ID", "wlan.measure.req.groupid",
25424 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_request_group_id_flags_ext, 0,
25427 {&hf_ieee80211_tag_measure_request_unknown,
25428 {"Unknown Data", "wlan.measure.req.unknown",
25429 FT_BYTES, BASE_NONE, NULL, 0,
25430 "(not interpreted)", HFILL }},
25432 {&hf_ieee80211_tag_measure_report_measurement_token,
25433 {"Measurement Token", "wlan.measure.req.token",
25434 FT_UINT8, BASE_HEX, NULL, 0,
25437 {&hf_ieee80211_tag_measure_report_mode,
25438 {"Measurement Report Mode", "wlan.measure.req.mode",
25439 FT_UINT8, BASE_HEX, NULL, 0,
25442 {&hf_ieee80211_tag_measure_report_mode_late,
25443 {"Measurement Report Mode Field", "wlan.measure.rep.repmode.late",
25444 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
25447 {&hf_ieee80211_tag_measure_report_mode_incapable,
25448 {"Measurement Reports", "wlan.measure.rep.repmode.incapable",
25449 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted), 0x02,
25452 {&hf_ieee80211_tag_measure_report_mode_refused,
25453 {"Autonomous Measurement Reports", "wlan.measure.rep.repmode.refused",
25454 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted), 0x04,
25457 {&hf_ieee80211_tag_measure_report_mode_reserved,
25458 {"Reserved", "wlan.measure.rep.repmode.reserved",
25459 FT_UINT8, BASE_HEX, NULL, 0xf8,
25462 {&hf_ieee80211_tag_measure_report_type,
25463 {"Measurement Report Type", "wlan.measure.rep.reptype",
25464 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_tag_measure_report_type_flags_ext, 0x00,
25467 {&hf_ieee80211_tag_measure_report_channel_number,
25468 {"Measurement Channel Number", "wlan.measure.rep.channelnumber",
25469 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom), 0,
25472 {&hf_ieee80211_tag_measure_report_start_time,
25473 {"Measurement Start Time", "wlan.measure.rep.starttime",
25474 FT_UINT64, BASE_HEX, NULL, 0,
25477 {&hf_ieee80211_tag_measure_report_duration,
25478 {"Measurement Duration", "wlan.measure.rep.channelnumber",
25479 FT_UINT16, BASE_HEX, NULL, 0,
25482 {&hf_ieee80211_tag_measure_cca_busy_fraction,
25483 {"CCA Busy Fraction", "wlan.measure.rep.ccabusy",
25484 FT_UINT8, BASE_HEX, NULL, 0,
25487 {&hf_ieee80211_tag_measure_basic_map_field,
25488 {"Map Field", "wlan.measure.rep.mapfield",
25489 FT_UINT8, BASE_HEX, NULL, 0,
25492 {&hf_ieee80211_tag_measure_map_field_bss,
25493 {"BSS", "wlan.measure.rep.repmode.mapfield.bss",
25494 FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_map_field_bss_flag), 0x01,
25497 {&hf_ieee80211_tag_measure_map_field_odfm,
25498 {"Orthogonal Frequency Division Multiplexing (ODFM) Preamble", "wlan.measure.rep.repmode.mapfield.bss",
25499 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x02,
25502 {&hf_ieee80211_tag_measure_map_field_unident_signal,
25503 {"Unidentified Signal", "wlan.measure.rep.repmode.mapfield.unidentsig",
25504 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x04,
25507 {&hf_ieee80211_tag_measure_map_field_radar,
25508 {"Radar", "wlan.measure.rep.repmode.mapfield.radar",
25509 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected), 0x08,
25512 {&hf_ieee80211_tag_measure_map_field_unmeasured,
25513 {"Unmeasured", "wlan.measure.rep.repmode.mapfield.unmeasured",
25514 FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x10,
25517 {&hf_ieee80211_tag_measure_map_field_reserved,
25518 {"Reserved", "wlan.measure.rep.repmode.mapfield.reserved",
25519 FT_UINT8, BASE_HEX, NULL, 0xe0,
25522 {&hf_ieee80211_tag_measure_rpi_histogram_report,
25523 {"Receive Power Indicator (RPI) Histogram Report", "wlan.measure.rep.rpi.histogram_report",
25524 FT_BYTES, BASE_NONE, NULL, 0,
25527 {&hf_ieee80211_tag_measure_rpi_histogram_report_0,
25528 {"RPI 0 Density", "wlan.measure.rep.rpi.rpi0density",
25529 FT_UINT8, BASE_HEX, NULL, 0,
25530 "Receive Power Indicator (RPI) 0 Density", HFILL }},
25532 {&hf_ieee80211_tag_measure_rpi_histogram_report_1,
25533 {"RPI 1 Density", "wlan.measure.rep.rpi.rpi1density",
25534 FT_UINT8, BASE_HEX, NULL, 0,
25535 "Receive Power Indicator (RPI) 1 Density", HFILL }},
25537 {&hf_ieee80211_tag_measure_rpi_histogram_report_2,
25538 {"RPI 2 Density", "wlan.measure.rep.rpi.rpi2density",
25539 FT_UINT8, BASE_HEX, NULL, 0,
25540 "Receive Power Indicator (RPI) 2 Density", HFILL }},
25542 {&hf_ieee80211_tag_measure_rpi_histogram_report_3,
25543 {"RPI 3 Density", "wlan.measure.rep.rpi.rpi3density",
25544 FT_UINT8, BASE_HEX, NULL, 0,
25545 "Receive Power Indicator (RPI) 3 Density", HFILL }},
25547 {&hf_ieee80211_tag_measure_rpi_histogram_report_4,
25548 {"RPI 4 Density", "wlan.measure.rep.rpi.rpi4density",
25549 FT_UINT8, BASE_HEX, NULL, 0,
25550 "Receive Power Indicator (RPI) 4 Density", HFILL }},
25552 {&hf_ieee80211_tag_measure_rpi_histogram_report_5,
25553 {"RPI 5 Density", "wlan.measure.rep.rpi.rpi5density",
25554 FT_UINT8, BASE_HEX, NULL, 0,
25555 "Receive Power Indicator (RPI) 5 Density", HFILL }},
25557 {&hf_ieee80211_tag_measure_rpi_histogram_report_6,
25558 {"RPI 6 Density", "wlan.measure.rep.rpi.rpi6density",
25559 FT_UINT8, BASE_HEX, NULL, 0,
25560 "Receive Power Indicator (RPI) 6 Density", HFILL }},
25562 {&hf_ieee80211_tag_measure_rpi_histogram_report_7,
25563 {"RPI 7 Density", "wlan.measure.rep.rpi.rpi7density",
25564 FT_UINT8, BASE_HEX, NULL, 0,
25565 "Receive Power Indicator (RPI) 7 Density", HFILL }},
25567 {&hf_ieee80211_tag_measure_report_operating_class,
25568 {"Operating Class", "wlan.measure.rep.operatingclass",
25569 FT_UINT8, BASE_DEC, NULL, 0,
25572 {&hf_ieee80211_tag_measure_report_channel_load,
25573 {"Channel Load", "wlan.measure.rep.chanload",
25574 FT_UINT8, BASE_HEX, NULL, 0,
25577 {&hf_ieee80211_tag_measure_report_frame_info,
25578 {"Reported Frame Information", "wlan.measure.rep.frameinfo",
25579 FT_UINT8, BASE_HEX, NULL, 0,
25582 {&hf_ieee80211_tag_measure_report_frame_info_phy_type,
25583 {"Condensed PHY", "wlan.measure.rep.frameinfo.phytype",
25584 FT_UINT8, BASE_HEX, NULL, 0x7F,
25587 {&hf_ieee80211_tag_measure_report_frame_info_frame_type,
25588 {"Reported Frame Type", "wlan.measure.rep.frameinfo.frametype",
25589 FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_report_frame_info_frame_type_flag), 0x80,
25592 {&hf_ieee80211_tag_measure_report_rcpi,
25593 {"Received Channel Power Indicator (RCPI)", "wlan.measure.rep.rcpi",
25594 FT_UINT8, BASE_HEX, NULL, 0,
25595 "in dBm", HFILL }},
25597 {&hf_ieee80211_tag_measure_report_rsni,
25598 {"Received Signal to Noise Indicator (RSNI)", "wlan.measure.rep.rsni",
25599 FT_UINT8, BASE_HEX, NULL, 0,
25602 {&hf_ieee80211_tag_measure_report_bssid,
25603 {"BSSID Being Reported", "wlan.measure.rep.bssid",
25604 FT_ETHER, BASE_NONE, NULL, 0,
25607 {&hf_ieee80211_tag_measure_report_ant_id,
25608 {"Antenna ID", "wlan.measure.rep.antid",
25609 FT_UINT8, BASE_HEX, NULL, 0,
25612 {&hf_ieee80211_tag_measure_report_anpi,
25613 {"ANPI", "wlan.measure.rep.anpi",
25614 FT_UINT8, BASE_HEX, NULL, 0,
25617 {&hf_ieee80211_tag_measure_report_ipi_density_0,
25618 {"IPI Density 0", "wlan.measure.rep.ipi_density0",
25619 FT_UINT8, BASE_HEX, NULL, 0,
25622 {&hf_ieee80211_tag_measure_report_ipi_density_1,
25623 {"IPI Density 1", "wlan.measure.rep.ipi_density1",
25624 FT_UINT8, BASE_HEX, NULL, 0,
25627 {&hf_ieee80211_tag_measure_report_ipi_density_2,
25628 {"IPI Density 2", "wlan.measure.rep.ipi_density2",
25629 FT_UINT8, BASE_HEX, NULL, 0,
25632 {&hf_ieee80211_tag_measure_report_ipi_density_3,
25633 {"IPI Density 3", "wlan.measure.rep.ipi_density3",
25634 FT_UINT8, BASE_HEX, NULL, 0,
25637 {&hf_ieee80211_tag_measure_report_ipi_density_4,
25638 {"IPI Density 4", "wlan.measure.rep.ipi_density4",
25639 FT_UINT8, BASE_HEX, NULL, 0,
25642 {&hf_ieee80211_tag_measure_report_ipi_density_5,
25643 {"IPI Density 5", "wlan.measure.rep.ipi_density5",
25644 FT_UINT8, BASE_HEX, NULL, 0,
25647 {&hf_ieee80211_tag_measure_report_ipi_density_6,
25648 {"IPI Density 6", "wlan.measure.rep.ipi_density6",
25649 FT_UINT8, BASE_HEX, NULL, 0,
25652 {&hf_ieee80211_tag_measure_report_ipi_density_7,
25653 {"IPI Density 7", "wlan.measure.rep.ipi_density7",
25654 FT_UINT8, BASE_HEX, NULL, 0,
25657 {&hf_ieee80211_tag_measure_report_ipi_density_8,
25658 {"IPI Density 8", "wlan.measure.rep.ipi_density8",
25659 FT_UINT8, BASE_HEX, NULL, 0,
25662 {&hf_ieee80211_tag_measure_report_ipi_density_9,
25663 {"IPI Density 9", "wlan.measure.rep.ipi_density9",
25664 FT_UINT8, BASE_HEX, NULL, 0,
25667 {&hf_ieee80211_tag_measure_report_ipi_density_10,
25668 {"IPI Density 10", "wlan.measure.rep.ipi_density10",
25669 FT_UINT8, BASE_HEX, NULL, 0,
25672 {&hf_ieee80211_tag_measure_report_parent_tsf,
25673 {"Parent Timing Synchronization Function (TSF)", "wlan.measure.rep.parenttsf",
25674 FT_UINT32, BASE_HEX, NULL, 0,
25677 {&hf_ieee80211_tag_measure_report_subelement_length,
25678 {"Length", "wlan.measure.req.sub.length",
25679 FT_UINT8, BASE_DEC, NULL, 0,
25682 {&hf_ieee80211_tag_measure_report_beacon_sub_id,
25683 {"SubElement ID", "wlan.measure.req.beacon.sub.id",
25684 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_report_beacon_sub_id_vals), 0,
25687 {&hf_ieee80211_tag_measure_report_unknown,
25688 {"Unknown Data", "wlan.measure.rep.unknown",
25689 FT_BYTES, BASE_NONE, NULL, 0,
25690 "(not interpreted)", HFILL }},
25692 {&hf_ieee80211_tag_quiet_count,
25693 {"Count", "wlan.quiet.count",
25694 FT_UINT8, BASE_DEC, NULL, 0,
25695 "Set to the number of TBTTs until the beacon interval during which the next quiet interval shall start", HFILL }},
25697 {&hf_ieee80211_tag_quiet_period,
25698 {"Period", "wlan.quiet.period",
25699 FT_UINT8, BASE_DEC, NULL, 0,
25700 "Set to the number of beacon intervals between the start of regularly scheduled quiet intervals", HFILL }},
25702 {&hf_ieee80211_tag_quiet_duration,
25703 {"Duration", "wlan.quiet.duration",
25704 FT_UINT16, BASE_DEC, NULL, 0,
25705 "Set to the duration of the quiet interval", HFILL }},
25707 {&hf_ieee80211_tag_quiet_offset,
25708 {"Offset", "wlan.quiet.offset",
25709 FT_UINT16, BASE_DEC, NULL, 0,
25710 "Set to the offset of the start of the quiet interval from the TBTT", HFILL }},
25712 {&hf_ieee80211_tag_dfs_owner,
25713 {"Owner", "wlan.dfs.owner",
25714 FT_ETHER, BASE_NONE, NULL, 0,
25715 "Set to the individual IEEE MAC address of the STA that is the currently known DFS Owner in the IBSS", HFILL }},
25717 {&hf_ieee80211_tag_dfs_recovery_interval,
25718 {"Recovery Interval", "wlan.dfs.recovery_interval",
25719 FT_UINT8, BASE_DEC, NULL, 0,
25720 "Indicates the time interval that shall be used for DFS owner recovery", HFILL }},
25722 {&hf_ieee80211_tag_dfs_channel_map,
25723 {"Channel Map", "wlan.dfs.channel_map",
25724 FT_NONE, BASE_NONE, NULL, 0,
25727 {&hf_ieee80211_tag_dfs_channel_number,
25728 {"Channel Number", "wlan.dfs.channel_number",
25729 FT_UINT8, BASE_DEC, NULL, 0,
25732 {&hf_ieee80211_tag_dfs_map,
25733 {"Map", "wlan.dfs.map",
25734 FT_UINT8, BASE_HEX, NULL, 0,
25737 {&hf_ieee80211_tag_erp_info,
25738 {"ERP Information", "wlan.erp_info",
25739 FT_UINT8, BASE_HEX, NULL, 0,
25742 {&hf_ieee80211_tag_erp_info_erp_present,
25743 {"Non ERP Present", "wlan.erp_info.erp_present",
25744 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x01,
25747 {&hf_ieee80211_tag_erp_info_use_protection,
25748 {"Use Protection", "wlan.erp_info.use_protection",
25749 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x02,
25752 {&hf_ieee80211_tag_erp_info_barker_preamble_mode,
25753 {"Barker Preamble Mode", "wlan.erp_info.barker_preamble_mode",
25754 FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x04,
25757 {&hf_ieee80211_tag_erp_info_reserved,
25758 {"Reserved", "wlan.erp_info.reserved",
25759 FT_UINT8, BASE_HEX, NULL, 0xF8,
25762 /* Table 8-103-Capabilities field */
25763 {&hf_ieee80211_tag_extended_capabilities,
25764 {"Extended Capabilities", "wlan.extcap",
25765 FT_UINT8, BASE_HEX, NULL, 0,
25768 /* P802.11n/D6.0 */
25769 /* Extended Capability octet 1 */
25770 {&hf_ieee80211_tag_extended_capabilities_b0,
25771 {"20/40 BSS Coexistence Management Support", "wlan.extcap.b0",
25772 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25773 "HT Information Exchange Support", HFILL }},
25775 /* P802.11p/D4.0 */
25776 {&hf_ieee80211_tag_extended_capabilities_b1,
25777 {"On-demand beacon", "wlan.extcap.b1",
25778 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
25781 {&hf_ieee80211_tag_extended_capabilities_b2,
25782 {"Extended Channel Switching", "wlan.extcap.b2",
25783 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
25786 {&hf_ieee80211_tag_extended_capabilities_b3,
25787 {"WAVE indication", "wlan.extcap.b3",
25788 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
25790 /*End: P802.11p/D4.0 */
25792 {&hf_ieee80211_tag_extended_capabilities_b4,
25793 {"PSMP Capability", "wlan.extcap.b4",
25794 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25797 {&hf_ieee80211_tag_extended_capabilities_b5,
25798 {"Reserved", "wlan.extcap.b5",
25799 FT_UINT8, BASE_HEX, NULL, 0x20,
25800 "Must be zero", HFILL }},
25802 {&hf_ieee80211_tag_extended_capabilities_b6,
25803 {"S-PSMP Support", "wlan.extcap.b6",
25804 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25807 {&hf_ieee80211_tag_extended_capabilities_b7,
25808 {"Event", "wlan.extcap.b7",
25809 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
25813 /* Extended Capability octet 2 */
25814 {&hf_ieee80211_tag_extended_capabilities_b8,
25815 {"Diagnostics", "wlan.extcap.b8",
25816 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25819 {&hf_ieee80211_tag_extended_capabilities_b9,
25820 {"Multicast Diagnostics", "wlan.extcap.b9",
25821 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
25824 {&hf_ieee80211_tag_extended_capabilities_b10,
25825 {"Location Tracking", "wlan.extcap.b10",
25826 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
25829 {&hf_ieee80211_tag_extended_capabilities_b11,
25830 {"FMS", "wlan.extcap.b11",
25831 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
25834 {&hf_ieee80211_tag_extended_capabilities_b12,
25835 {"Proxy ARP Service", "wlan.extcap.b12",
25836 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25839 {&hf_ieee80211_tag_extended_capabilities_b13,
25840 {"Collocated Interference Reporting", "wlan.extcap.b13",
25841 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
25844 {&hf_ieee80211_tag_extended_capabilities_b14,
25845 {"Civic Location", "wlan.extcap.b14",
25846 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25849 {&hf_ieee80211_tag_extended_capabilities_b15,
25850 {"Geospatial Location", "wlan.extcap.b15",
25851 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
25855 /* Extended Capability octet 3 */
25856 {&hf_ieee80211_tag_extended_capabilities_b16,
25857 {"TFS", "wlan.extcap.b16",
25858 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25861 {&hf_ieee80211_tag_extended_capabilities_b17,
25862 {"WNM-Sleep Mode", "wlan.extcap.b17",
25863 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
25866 {&hf_ieee80211_tag_extended_capabilities_b18,
25867 {"TIM Broadcast", "wlan.extcap.b18",
25868 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
25871 {&hf_ieee80211_tag_extended_capabilities_b19,
25872 {"BSS Transition", "wlan.extcap.b19",
25873 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
25876 {&hf_ieee80211_tag_extended_capabilities_b20,
25877 {"QoS Traffic Capability", "wlan.extcap.b20",
25878 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25881 {&hf_ieee80211_tag_extended_capabilities_b21,
25882 {"AC Station Count", "wlan.extcap.b21",
25883 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
25886 {&hf_ieee80211_tag_extended_capabilities_b22,
25887 {"Multiple BSSID", "wlan.extcap.b22",
25888 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25891 {&hf_ieee80211_tag_extended_capabilities_b23,
25892 {"Timing Measurement", "wlan.extcap.b23",
25893 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
25897 /* Extended Capability octet 4 */
25898 {&hf_ieee80211_tag_extended_capabilities_b24,
25899 {"Channel Usage", "wlan.extcap.b24",
25900 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25903 {&hf_ieee80211_tag_extended_capabilities_b25,
25904 {"SSID List", "wlan.extcap.b25",
25905 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
25908 {&hf_ieee80211_tag_extended_capabilities_b26,
25909 {"DMS", "wlan.extcap.b26",
25910 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
25913 {&hf_ieee80211_tag_extended_capabilities_b27,
25914 {"UTC TSF Offset", "wlan.extcap.b27",
25915 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
25918 {&hf_ieee80211_tag_extended_capabilities_b28,
25919 {"Peer U-APSD Buffer STA Support", "wlan.extcap.b28",
25920 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25923 {&hf_ieee80211_tag_extended_capabilities_b29,
25924 {"TDLS Peer PSM Support", "wlan.extcap.b29",
25925 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
25928 {&hf_ieee80211_tag_extended_capabilities_b30,
25929 {"TDLS channel switching", "wlan.extcap.b30",
25930 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25933 {&hf_ieee80211_tag_extended_capabilities_b31,
25934 {"Interworking", "wlan.extcap.b31",
25935 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
25939 /* Extended Capability octet 5 */
25940 {&hf_ieee80211_tag_extended_capabilities_b32,
25941 {"QoS Map", "wlan.extcap.b32",
25942 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25945 {&hf_ieee80211_tag_extended_capabilities_b33,
25946 {"EBR", "wlan.extcap.b33",
25947 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
25950 {&hf_ieee80211_tag_extended_capabilities_b34,
25951 {"SSPN Interface", "wlan.extcap.b34",
25952 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
25955 {&hf_ieee80211_tag_extended_capabilities_b35,
25956 {"Reserved", "wlan.extcap.b35",
25957 FT_UINT8, BASE_HEX, NULL, 0x08,
25958 "Must be zero", HFILL }},
25960 {&hf_ieee80211_tag_extended_capabilities_b36,
25961 {"MSGCF Capability", "wlan.extcap.b36",
25962 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25965 {&hf_ieee80211_tag_extended_capabilities_b37,
25966 {"TDLS support", "wlan.extcap.b37",
25967 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
25970 {&hf_ieee80211_tag_extended_capabilities_b38,
25971 {"TDLS Prohibited", "wlan.extcap.b38",
25972 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
25975 {&hf_ieee80211_tag_extended_capabilities_b39,
25976 {"TDLS Channel Switching Prohibited", "wlan.extcap.b39",
25977 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
25980 /* Extended Capability octet 6 */
25981 {&hf_ieee80211_tag_extended_capabilities_b40,
25982 {"Reject Unadmitted Frame", "wlan.extcap.b40",
25983 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
25986 {&hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
25987 {"Service Interval Granularity",
25988 "wlan.extcap.serv_int_granularity",
25989 FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals), 0x0e,
25992 {&hf_ieee80211_tag_extended_capabilities_b44,
25993 {"Identifier Location", "wlan.extcap.b44",
25994 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
25997 {&hf_ieee80211_tag_extended_capabilities_b45,
25998 {"U-APSD Coexistence", "wlan.extcap.b45",
25999 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
26002 {&hf_ieee80211_tag_extended_capabilities_b46,
26003 {"WNM-Notification", "wlan.extcap.b46",
26004 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
26007 {&hf_ieee80211_tag_extended_capabilities_b47,
26008 {"QAB Capability", "wlan.extcap.b47",
26009 FT_UINT8, BASE_HEX, NULL, 0x80,
26010 "AP supports QAB", HFILL }},
26012 /* Extended Capability octet 7 */
26013 {&hf_ieee80211_tag_extended_capabilities_b48,
26014 {"UTF-8 SSID", "wlan.extcap.b48",
26015 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
26016 "The SSID in this BSS is interpreted using UTF-8 encoding", HFILL }},
26018 {&hf_ieee80211_tag_extended_capabilities_o7,
26019 {"Reserved", "wlan.extcap.o7",
26020 FT_UINT8, BASE_HEX, NULL, 0xfe,
26021 "Must be zero", HFILL }},
26023 /* Extended Capability octet 8 */
26024 {&hf_ieee80211_tag_extended_capabilities_b61,
26025 {"TDLS Wider Bandwidth", "wlan.extcap.b61",
26026 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
26029 {&hf_ieee80211_tag_extended_capabilities_b62,
26030 {"Operating Mode Notification", "wlan.extcap.b62",
26031 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
26034 {&hf_ieee80211_tag_extended_capabilities_b63,
26035 {"Max Number Of MSDUs In A-MSDU", "wlan.extcap.b63",
26036 FT_UINT8, BASE_DEC, NULL, 0x80,
26037 "Part 1 (bit63)", HFILL }},
26039 {&hf_ieee80211_tag_extended_capabilities_o8,
26040 {"Reserved", "wlan.extcap.o8",
26041 FT_UINT8, BASE_HEX, NULL, 0x1f,
26042 "Must be zero", HFILL }},
26044 /* Extended Capability octet 9 */
26045 {&hf_ieee80211_tag_extended_capabilities_b64,
26046 {"Max Number Of MSDUs In A-MSDU64", "wlan.extcap.b64",
26047 FT_UINT8, BASE_DEC, NULL, 0x01,
26048 "Part 2 (bit64)", HFILL }},
26050 {&hf_ieee80211_tag_extended_capabilities_o9,
26051 {"Reserved", "wlan.extcap.o9",
26052 FT_UINT8, BASE_HEX, NULL, 0xfe,
26053 "Must be zero", HFILL }},
26055 {&hf_ieee80211_tag_cisco_ccx1_unknown,
26056 {"Unknown", "wlan.cisco.ccx1.unknown",
26057 FT_BYTES, BASE_NONE, NULL, 0,
26060 {&hf_ieee80211_tag_cisco_ccx1_name,
26061 {"Name", "wlan.cisco.ccx1.name",
26062 FT_STRING, BASE_NONE, NULL, 0,
26065 {&hf_ieee80211_tag_cisco_ccx1_clients,
26066 {"Clients", "wlan.cisco.ccx1.clients",
26067 FT_UINT8, BASE_DEC, NULL, 0,
26070 {&hf_ieee80211_tag_cisco_ccx1_unknown2,
26071 {"Unknown2", "wlan.cisco.ccx1.unknown2",
26072 FT_BYTES, BASE_NONE, NULL, 0,
26075 {&hf_ieee80211_tag_neighbor_report_bssid,
26076 {"BSSID", "wlan.nreport.bssid",
26077 FT_ETHER, BASE_NONE, NULL, 0,
26080 {&hf_ieee80211_tag_neighbor_report_bssid_info,
26081 {"BSSID Information", "wlan.nreport.bssid.info",
26082 FT_UINT32, BASE_HEX, NULL, 0,
26085 {&hf_ieee80211_tag_neighbor_report_bssid_info_reachability,
26086 {"AP Reachability", "wlan.nreport.bssid.info.reachability",
26087 FT_UINT32, BASE_HEX, VALS(ieee80211_neighbor_report_bssid_info_reachability_vals), 0x00000003,
26088 "Indicates whether the AP identified by this BSSID is reachable by the STA that requested the neighbor report", HFILL }},
26090 {&hf_ieee80211_tag_neighbor_report_bssid_info_security,
26091 {"Security", "wlan.nreport.bssid.info.security",
26092 FT_BOOLEAN, 32, NULL, 0x00000004,
26093 "Indicates that the AP identified by this BSSID supports the same security provisioning as used by the STA in its current association", HFILL }},
26095 {&hf_ieee80211_tag_neighbor_report_bssid_info_key_scope,
26096 {"Key Scope", "wlan.nreport.bssid.info.keyscope",
26097 FT_BOOLEAN, 32, NULL, 0x00000008,
26098 "indicates the AP indicated by this BSSID has the same authenticator as the AP sending the report", HFILL }},
26100 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability,
26101 {"Capability", "wlan.nreport.bssid.info.capability",
26102 FT_UINT32, BASE_HEX, NULL, 0x000003F0,
26103 "Contains selected capability information for the AP indicated by this BSSID", HFILL }},
26105 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng,
26106 {"Spectrum Management", "wlan.nreport.bssid.info.capability.specmngt",
26107 FT_BOOLEAN, 32, NULL, 0x00000010,
26110 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos,
26111 {"QoS", "wlan.nreport.bssid.info.capability.qos",
26112 FT_BOOLEAN, 32, NULL, 0x00000020,
26115 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd,
26116 {"APSD", "wlan.nreport.bssid.info.capability.apsd",
26117 FT_BOOLEAN, 32, NULL, 0x00000040,
26120 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt,
26121 {"Radio Measurement", "wlan.nreport.bssid.info.capability.radiomsnt",
26122 FT_BOOLEAN, 32, NULL, 0x00000080,
26125 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_dback,
26126 {"Delayed Block Ack", "wlan.nreport.bssid.info.capability.dback",
26127 FT_BOOLEAN, 32, NULL, 0x000000100,
26130 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_iback,
26131 {"Immediate Block Ack", "wlan.nreport.bssid.info.capability.iback",
26132 FT_BOOLEAN, 32, NULL, 0x00000200,
26135 {&hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain,
26136 {"Mobility Domain", "wlan.nreport.bssid.info.mobilitydomain",
26137 FT_BOOLEAN, 32, NULL, 0x00000400,
26140 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput,
26141 {"High Throughput Control (+HTC)", "wlan.nreport.bssid.info.hthoughput",
26142 FT_BOOLEAN, 32, NULL, 0x00000800,
26145 {&hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput,
26146 {"Very High Throughput (+VHT)", "wlan.nreport.bssid.info.vht",
26147 FT_BOOLEAN, 32, NULL, 0x00001000,
26150 {&hf_ieee80211_tag_neighbor_report_bssid_info_ftm,
26151 {"Fine Timing Measurement (FTM)", "wlan.nreport.bssid.info.ftm",
26152 FT_BOOLEAN, 32, NULL, 0x00002000,
26155 {&hf_ieee80211_tag_neighbor_report_bssid_info_reserved,
26156 {"Reserved", "wlan.nreport.bssid.info.reserved",
26157 FT_UINT32, BASE_HEX, NULL, 0xFFFFC000,
26158 "Must be zero", HFILL }},
26160 {&hf_ieee80211_tag_neighbor_report_ope_class,
26161 {"Operating Class", "wlan.nreport.opeclass",
26162 FT_UINT8, BASE_DEC, NULL, 0,
26165 {&hf_ieee80211_tag_neighbor_report_channel_number,
26166 {"Channel Number", "wlan.nreport.channumber",
26167 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom), 0,
26170 {&hf_ieee80211_tag_neighbor_report_phy_type,
26171 {"PHY Type", "wlan.nreport.phytype",
26172 FT_UINT8, BASE_HEX, NULL, 0,
26175 {&hf_ieee80211_tag_neighbor_report_subelement_id,
26176 {"Subelement ID", "wlan.nreport.subelement_id",
26177 FT_UINT8, BASE_HEX, VALS(ieee80211_neighbor_report_subelement_id_vals), 0,
26180 {&hf_ieee80211_tag_neighbor_report_subelement_length,
26181 {"Length", "wlan.nreport.subelement_length",
26182 FT_UINT8, BASE_HEX, NULL, 0,
26185 {&hf_ieee80211_tag_neighbor_report_subelement_data,
26186 {"Subelement Data", "wlan.nreport.subelement_data",
26187 FT_BYTES, BASE_NONE, NULL, 0,
26190 {&hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref,
26191 {"Preference", "wlan.nreport.subelement.bss_trn_can_pref",
26192 FT_UINT8, BASE_DEC, NULL, 0,
26195 {&hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf,
26196 {"BSS Termination TSF", "wlan.nreport.subelement.bss_ter_tsf",
26197 FT_UINT64, BASE_DEC, NULL, 0,
26200 {&hf_ieee80211_tag_neighbor_report_subelement_bss_dur,
26201 {"Duration", "wlan.nreport.subelement.bss_dur",
26202 FT_UINT16, BASE_DEC, NULL, 0,
26205 {&hf_ieee80211_tag_supported_ope_classes_current,
26206 {"Current Operating Class", "wlan.supopeclass.current",
26207 FT_UINT8, BASE_DEC, NULL, 0,
26210 {&hf_ieee80211_tag_supported_ope_classes_alternate,
26211 {"Alternate Operating Classes", "wlan.supopeclass.alt",
26212 FT_NONE, BASE_NONE, 0x0, 0,
26215 {&hf_ieee80211_wfa_ie_type,
26216 {"Type", "wlan.wfa.ie.type",
26217 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals), 0,
26220 {&hf_ieee80211_wfa_ie_wpa_version,
26221 {"WPA Version", "wlan.wfa.ie.wpa.version",
26222 FT_UINT16, BASE_DEC, NULL, 0,
26225 {&hf_ieee80211_wfa_ie_wpa_mcs,
26226 {"Multicast Cipher Suite", "wlan.wfa.ie.wpa.mcs",
26227 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_mcs_base_custom), 0,
26228 "Contains the cipher suite selector used by the BSS to protect broadcast/multicasttraffic", HFILL }},
26230 {&hf_ieee80211_wfa_ie_wpa_mcs_oui,
26231 {"Multicast Cipher Suite OUI", "wlan.wfa.ie.wpa.mcs.oui",
26232 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
26235 {&hf_ieee80211_wfa_ie_wpa_mcs_type,
26236 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
26237 FT_UINT8, BASE_DEC, NULL, 0,
26240 {&hf_ieee80211_wfa_ie_wpa_mcs_wfa_type,
26241 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
26242 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0,
26245 {&hf_ieee80211_wfa_ie_wpa_ucs_count,
26246 {"Unicast Cipher Suite Count", "wlan.wfa.ie.wpa.ucs.count",
26247 FT_UINT16, BASE_DEC, NULL, 0,
26248 "Indicates the number of pairwise cipher suite selectors that are contained in the Unicast Cipher Suite List", HFILL }},
26250 {&hf_ieee80211_wfa_ie_wpa_ucs_list,
26251 {"Unicast Cipher Suite List", "wlan.wfa.ie.wpa.ucs.list",
26252 FT_NONE, BASE_NONE, NULL, 0,
26253 "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL }},
26255 {&hf_ieee80211_wfa_ie_wpa_ucs,
26256 {"Unicast Cipher Suite", "wlan.wfa.ie.wpa.ucs",
26257 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_ucs_base_custom), 0,
26260 {&hf_ieee80211_wfa_ie_wpa_ucs_oui,
26261 {"Unicast Cipher Suite OUI", "wlan.wfa.ie.wpau.cs.oui",
26262 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
26265 {&hf_ieee80211_wfa_ie_wpa_ucs_type,
26266 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
26267 FT_UINT8, BASE_DEC, NULL, 0,
26270 {&hf_ieee80211_wfa_ie_wpa_ucs_wfa_type,
26271 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
26272 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals), 0,
26275 {&hf_ieee80211_wfa_ie_wpa_akms_count,
26276 {"Auth Key Management (AKM) Suite Count", "wlan.wfa.ie.wpa.akms.count",
26277 FT_UINT16, BASE_DEC, NULL, 0,
26278 "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL }},
26280 {&hf_ieee80211_wfa_ie_wpa_akms_list,
26281 {"Auth Key Management (AKM) List", "wlan.wfa.ie.wpa.akms.list",
26282 FT_NONE, BASE_NONE, NULL, 0,
26283 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL }},
26285 {&hf_ieee80211_wfa_ie_wpa_akms,
26286 {"Auth Key Management (AKM) Suite", "wlan.wfa.ie.wpa.akms",
26287 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_akms_base_custom), 0,
26290 {&hf_ieee80211_wfa_ie_wpa_akms_oui,
26291 {"Auth Key Management (AKM) OUI", "wlan.wfa.ie.wpa.akms.oui",
26292 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
26295 {&hf_ieee80211_wfa_ie_wpa_akms_type,
26296 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.akms.type",
26297 FT_UINT8, BASE_DEC, NULL, 0,
26300 {&hf_ieee80211_wfa_ie_wpa_akms_wfa_type,
26301 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.type",
26302 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_keymgmt_vals), 0,
26305 {&hf_ieee80211_wfa_ie_wme_subtype,
26306 {"WME Subtype", "wlan.wfa.ie.wme.subtype",
26307 FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type), 0,
26310 {&hf_ieee80211_wfa_ie_wme_version,
26311 {"WME Version", "wlan.wfa.ie.wme.version",
26312 FT_UINT8, BASE_DEC, NULL, 0,
26315 {&hf_ieee80211_wfa_ie_wme_qos_info,
26316 {"WME QoS Info", "wlan.wfa.ie.wme.qos_info",
26317 FT_UINT8, BASE_HEX, NULL, 0,
26320 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
26321 {"Max SP Length", "wlan.wfa.ie.wme.qos_info.sta.max_sp_length",
26322 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals), 0x60,
26325 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
26326 {"AC_BE", "wlan.wfa.ie.wme.qos_info.sta.ac_be",
26327 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x08,
26330 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
26331 {"AC_BK", "wlan.wfa.ie.wme.qos_info.sta.ac_bk",
26332 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x04,
26335 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
26336 {"AC_VI", "wlan.wfa.ie.wme.qos_info.sta.ac_vi",
26337 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x02,
26340 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
26341 {"AC_VO", "wlan.wfa.ie.wme.qos_info.sta.ac_vo",
26342 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs), 0x01,
26345 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
26346 {"Reserved", "wlan.wfa.ie.wme.qos_info.sta.reserved",
26347 FT_UINT8, BASE_HEX, NULL, 0x90,
26348 "Must Be Zero", HFILL }},
26350 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
26351 {"U-APSD", "wlan.wfa.ie.wme.qos_info.ap.u_apsd",
26352 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80,
26353 "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL }},
26355 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
26356 {"Parameter Set Count", "wlan.wfa.ie.wme.qos_info.ap.parameter_set_count",
26357 FT_UINT8, BASE_HEX, NULL, 0x0F,
26360 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
26361 {"Reserved", "wlan.wfa.ie.wme.qos_info.ap.reserved",
26362 FT_UINT8, BASE_HEX, NULL, 0x70,
26363 "Must Be Zero", HFILL }},
26365 {&hf_ieee80211_wfa_ie_wme_reserved,
26366 {"Reserved", "wlan.wfa.ie.wme.reserved",
26367 FT_BYTES, BASE_NONE, NULL, 0,
26368 "Must Be Zero", HFILL }},
26370 {&hf_ieee80211_wfa_ie_wme_ac_parameters,
26371 {"Ac Parameters", "wlan.wfa.ie.wme.acp",
26372 FT_NONE, BASE_NONE, NULL, 0,
26375 {&hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
26376 {"ACI / AIFSN Field", "wlan.wfa.ie.wme.acp.aci_aifsn",
26377 FT_UINT8, BASE_HEX, NULL, 0,
26380 {&hf_ieee80211_wfa_ie_wme_acp_aci,
26381 {"ACI", "wlan.wfa.ie.wme.acp.aci",
26382 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals), 0x60,
26385 {&hf_ieee80211_wfa_ie_wme_acp_acm,
26386 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm",
26387 FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
26390 {&hf_ieee80211_wfa_ie_wme_acp_aifsn,
26391 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn",
26392 FT_UINT8, BASE_DEC, NULL, 0x0F,
26395 {&hf_ieee80211_wfa_ie_wme_acp_reserved,
26396 {"Reserved", "wlan.wfa.ie.wme.acp.reserved",
26397 FT_UINT8, BASE_DEC, NULL, 0x80,
26398 "Must be Zero", HFILL }},
26400 {&hf_ieee80211_wfa_ie_wme_acp_ecw,
26401 {"ECW", "wlan.wfa.ie.wme.acp.ecw",
26402 FT_UINT8, BASE_HEX, NULL, 0x00,
26405 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max,
26406 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max",
26407 FT_UINT8, BASE_DEC, NULL, 0xF0,
26410 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min,
26411 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min",
26412 FT_UINT8, BASE_DEC, NULL, 0x0F,
26415 {&hf_ieee80211_wfa_ie_wme_acp_cw_max,
26416 {"CW Max", "wlan.wfa.ie.wme.acp.cw.max",
26417 FT_UINT8, BASE_DEC, NULL, 0,
26420 {&hf_ieee80211_wfa_ie_wme_acp_cw_min,
26421 {"CW Min", "wlan.wfa.ie.wme.acp.cw.min",
26422 FT_UINT8, BASE_DEC, NULL, 0,
26425 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit,
26426 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit",
26427 FT_UINT16, BASE_DEC, NULL, 0x00,
26430 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
26431 {"TS Info", "wlan.wfa.ie.wme.tspec.ts_info",
26432 FT_UINT24, BASE_HEX, NULL, 0,
26433 "Traffic Stream (TS) Info", HFILL }},
26435 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
26436 {"TID", "wlan.wfa.ie.wme.tspec.ts_info.tid",
26437 FT_UINT24, BASE_DEC, NULL, 0x00001E,
26438 "Traffic Stream Info ID (TID)", HFILL }},
26440 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
26441 {"Direction", "wlan.wfa.ie.wme.tspec.ts_info.dir",
26442 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals), 0x000060,
26443 "Traffic Stream (TS) Info Direction", HFILL }},
26445 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
26446 {"PSB", "wlan.wfa.ie.wme.tspec.ts_info.psb",
26447 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals), 0x000400,
26448 "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL }},
26450 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
26451 {"UP", "wlan.wfa.ie.wme.tspec.ts_info.up",
26452 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals), 0x003800,
26453 "Traffic Stream (TS) Info User Priority (UP)", HFILL }},
26455 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
26456 {"Reserved", "wlan.wfa.ie.wme.tspec.ts_info.reserved",
26457 FT_UINT24, BASE_HEX, NULL, 0xFFC381,
26458 "Must be Zero", HFILL }},
26460 {&hf_ieee80211_wfa_ie_wme_tspec_nor_msdu,
26461 {"Normal MSDU Size", "wlan.wfa.ie.wme.tspec.nor_msdu",
26462 FT_UINT16, BASE_DEC, NULL, 0,
26465 {&hf_ieee80211_wfa_ie_wme_tspec_max_msdu,
26466 {"Maximum MSDU Size", "wlan.wfa.ie.wme.tspec.max_msdu",
26467 FT_UINT16, BASE_DEC, NULL, 0,
26470 {&hf_ieee80211_wfa_ie_wme_tspec_min_srv,
26471 {"Minimum Service Interval", "wlan.wfa.ie.wme.tspec.min_srv",
26472 FT_UINT32, BASE_DEC, NULL, 0,
26475 {&hf_ieee80211_wfa_ie_wme_tspec_max_srv,
26476 {"Maximum Service Interval", "wlan.wfa.ie.wme.tspec.max_srv",
26477 FT_UINT32, BASE_DEC, NULL, 0,
26480 {&hf_ieee80211_wfa_ie_wme_tspec_inact_int,
26481 {"Inactivity Interval", "wlan.wfa.ie.wme.tspec.inact_int",
26482 FT_UINT32, BASE_DEC, NULL, 0,
26485 {&hf_ieee80211_wfa_ie_wme_tspec_susp_int,
26486 {"Suspension Interval", "wlan.wfa.ie.wme.tspec.susp_int",
26487 FT_UINT32, BASE_DEC, NULL, 0,
26490 {&hf_ieee80211_wfa_ie_wme_tspec_srv_start,
26491 {"Service Start Time", "wlan.wfa.ie.wme.tspec.srv_start",
26492 FT_UINT32, BASE_DEC, NULL, 0,
26495 {&hf_ieee80211_wfa_ie_wme_tspec_min_data,
26496 {"Minimum Data Rate", "wlan.wfa.ie.wme.tspec.min_data",
26497 FT_UINT32, BASE_DEC, NULL, 0,
26500 {&hf_ieee80211_wfa_ie_wme_tspec_mean_data,
26501 {"Mean Data Rate", "wlan.wfa.ie.wme.tspec.mean_data",
26502 FT_UINT32, BASE_DEC, NULL, 0,
26505 {&hf_ieee80211_wfa_ie_wme_tspec_peak_data,
26506 {"Peak Data Rate", "wlan.wfa.ie.wme.tspec.peak_data",
26507 FT_UINT32, BASE_DEC, NULL, 0,
26510 {&hf_ieee80211_wfa_ie_wme_tspec_burst_size,
26511 {"Burst Size", "wlan.wfa.ie.wme.tspec.burst_size",
26512 FT_UINT32, BASE_DEC, NULL, 0,
26515 {&hf_ieee80211_wfa_ie_wme_tspec_delay_bound,
26516 {"Delay Bound", "wlan.wfa.ie.wme.tspec.delay_bound",
26517 FT_UINT32, BASE_DEC, NULL, 0,
26520 {&hf_ieee80211_wfa_ie_wme_tspec_min_phy,
26521 {"Minimum PHY Rate", "wlan.wfa.ie.wme.tspec.min_phy",
26522 FT_UINT32, BASE_DEC, NULL, 0,
26525 {&hf_ieee80211_wfa_ie_wme_tspec_surplus,
26526 {"Surplus Bandwidth Allowance", "wlan.wfa.ie.wme.tspec.surplus",
26527 FT_UINT16, BASE_DEC, NULL, 0,
26530 {&hf_ieee80211_wfa_ie_wme_tspec_medium,
26531 {"Medium Time", "wlan.wfa.ie.wme.tspec.medium",
26532 FT_UINT16, BASE_DEC, NULL, 0,
26535 {&hf_ieee80211_rsn_ie_pmkid,
26536 {"RSN PMKID", "wlan.rsn.ie.pmkid",
26537 FT_BYTES, BASE_NONE, NULL, 0,
26540 {&hf_ieee80211_rsn_ie_unknown,
26541 {"RSN Unknown", "wlan.rsn.ie.unknown",
26542 FT_BYTES, BASE_NONE, NULL, 0,
26545 {&hf_ieee80211_marvell_ie_type,
26546 {"Type", "wlan.marvell.ie.type",
26547 FT_UINT8, BASE_HEX, NULL, 0,
26550 {&hf_ieee80211_marvell_ie_mesh_subtype,
26551 {"Subtype", "wlan.marvell.ie.subtype",
26552 FT_UINT8, BASE_HEX, NULL, 0,
26555 {&hf_ieee80211_marvell_ie_mesh_version,
26556 {"Version", "wlan.marvell.ie.version",
26557 FT_UINT8, BASE_HEX, NULL, 0,
26560 {&hf_ieee80211_marvell_ie_mesh_active_proto_id,
26561 {"Path Selection Protocol", "wlan.marvell.ie.proto_id",
26562 FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes), 0,
26565 {&hf_ieee80211_marvell_ie_mesh_active_metric_id,
26566 {"Path Selection Metric", "wlan.marvell.ie.metric_id",
26567 FT_UINT8, BASE_HEX, VALS(mesh_metric_codes), 0,
26570 {&hf_ieee80211_marvell_ie_mesh_cap,
26571 {"Mesh Capabilities", "wlan.marvell.ie.cap",
26572 FT_UINT8, BASE_HEX, NULL, 0,
26575 {&hf_ieee80211_marvell_ie_data,
26576 { "Marvell IE data", "wlan.marvell.data",
26577 FT_BYTES, BASE_NONE, NULL, 0x0,
26580 {&hf_ieee80211_atheros_ie_type,
26581 {"Type", "wlan.atheros.ie.type",
26582 FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals), 0,
26585 {&hf_ieee80211_atheros_ie_subtype,
26586 {"Subtype", "wlan.atheros.ie.subtype",
26587 FT_UINT8, BASE_HEX, NULL, 0,
26590 {&hf_ieee80211_atheros_ie_version,
26591 {"Version", "wlan.atheros.ie.version",
26592 FT_UINT8, BASE_HEX, NULL, 0,
26595 {&hf_ieee80211_atheros_ie_cap_f_turbop,
26596 {"Turbo Prime", "wlan.ie.atheros.capabilities.turbop",
26597 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_TURBOP,
26600 {&hf_ieee80211_atheros_ie_cap_f_comp,
26601 {"Compression", "wlan.ie.atheros.capabilities.comp",
26602 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_COMP,
26605 {&hf_ieee80211_atheros_ie_cap_f_ff,
26606 {"Fast Frames", "wlan.ie.atheros.capabilities.ff",
26607 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_FF,
26610 {&hf_ieee80211_atheros_ie_cap_f_xr,
26611 {"eXtended Range", "wlan.ie.atheros.capabilities.xr",
26612 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_XR,
26615 {&hf_ieee80211_atheros_ie_cap_f_ar,
26616 {"Advanced Radar", "wlan.ie.atheros.capabilities.ar",
26617 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_AR,
26620 {&hf_ieee80211_atheros_ie_cap_f_burst,
26621 {"Burst", "wlan.ie.atheros.capabilities.burst",
26622 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BURST,
26625 {&hf_ieee80211_atheros_ie_cap_f_wme,
26626 {"CWMin tuning", "wlan.ie.atheros.capabilities.wme",
26627 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_WME,
26630 {&hf_ieee80211_atheros_ie_cap_f_boost,
26631 {"Boost", "wlan.ie.atheros.capabilities.boost",
26632 FT_BOOLEAN, 8, NULL, ATHEROS_IE_CAP_BOOST,
26635 {&hf_ieee80211_atheros_ie_advcap_cap,
26636 {"Capabilities", "wlan.atheros.ie.advcap.cap",
26637 FT_UINT8, BASE_HEX, NULL, 0,
26640 {&hf_ieee80211_atheros_ie_advcap_defkey,
26641 {"Default key index", "wlan.atheros.ie.advcap.defkey",
26642 FT_UINT16, BASE_HEX, NULL, 0,
26645 {&hf_ieee80211_atheros_ie_xr_info,
26646 {"Info", "wlan.atheros.ie.xr.info",
26647 FT_UINT8, BASE_HEX, NULL, 0,
26650 {&hf_ieee80211_atheros_ie_xr_base_bssid,
26651 {"Base BSS Id", "wlan.atheros.ie.xr.base_bssid",
26652 FT_ETHER, BASE_NONE, NULL, 0,
26655 {&hf_ieee80211_atheros_ie_xr_xr_bssid,
26656 {"XR BSS Id", "wlan.atheros.ie.xr.xr_bssid",
26657 FT_ETHER, BASE_NONE, NULL, 0,
26660 {&hf_ieee80211_atheros_ie_xr_xr_beacon,
26661 {"XR Beacon Interval", "wlan.atheros.ie.xr.xr_beacon",
26662 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom), 0,
26665 {&hf_ieee80211_atheros_ie_xr_base_cap,
26666 {"Base capabilities", "wlan.atheros.ie.xr.base_cap",
26667 FT_UINT8, BASE_HEX, NULL, 0,
26670 {&hf_ieee80211_atheros_ie_xr_xr_cap,
26671 {"XR capabilities", "wlan.atheros.ie.xr.xr_cap",
26672 FT_UINT8, BASE_HEX, NULL, 0,
26675 {&hf_ieee80211_atheros_ie_data,
26676 {"Atheros IE data", "wlan.atheros.data",
26677 FT_BYTES, BASE_NONE, NULL, 0,
26680 {&hf_ieee80211_aironet_ie_type,
26681 {"Aironet IE type", "wlan.aironet.type",
26682 FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals), 0,
26685 {&hf_ieee80211_aironet_ie_dtpc,
26686 {"Aironet IE CCX DTCP", "wlan.aironet.dtpc",
26687 FT_BYTES, BASE_NONE, NULL, 0,
26690 {&hf_ieee80211_aironet_ie_version,
26691 {"Aironet IE CCX version", "wlan.aironet.version",
26692 FT_UINT8, BASE_DEC, NULL, 0,
26695 {&hf_ieee80211_aironet_ie_data,
26696 { "Aironet IE data", "wlan.aironet.data",
26697 FT_BYTES, BASE_NONE, NULL, 0x0,
26700 {&hf_ieee80211_qbss_version,
26701 {"QBSS Version", "wlan.qbss.version",
26702 FT_UINT8, BASE_DEC, NULL, 0,
26705 {&hf_ieee80211_qbss_scount,
26706 {"Station Count", "wlan.qbss.scount",
26707 FT_UINT16, BASE_DEC, NULL, 0,
26710 {&hf_ieee80211_qbss_cu,
26711 {"Channel Utilization", "wlan.qbss.cu",
26712 FT_UINT8, BASE_DEC, NULL, 0,
26715 {&hf_ieee80211_qbss_adc,
26716 {"Available Admission Capacity", "wlan.qbss.adc",
26717 FT_UINT8, BASE_DEC, NULL, 0,
26720 {&hf_ieee80211_qbss2_cu,
26721 {"Channel Utilization", "wlan.qbss2.cu",
26722 FT_UINT8, BASE_DEC, NULL, 0,
26725 {&hf_ieee80211_qbss2_gl,
26726 {"G.711 CU Quantum", "wlan.qbss2.glimit",
26727 FT_UINT8, BASE_DEC, NULL, 0,
26730 {&hf_ieee80211_qbss2_cal,
26731 {"Call Admission Limit", "wlan.qbss2.cal",
26732 FT_UINT8, BASE_DEC, NULL, 0,
26735 {&hf_ieee80211_qbss2_scount,
26736 {"Station Count", "wlan.qbss2.scount",
26737 FT_UINT16, BASE_DEC, NULL, 0,
26740 {&hf_ieee80211_aironet_ie_qos_reserved,
26741 {"Aironet IE QoS reserved", "wlan.aironet.qos.reserved",
26742 FT_UINT8, BASE_HEX, NULL, 0,
26745 {&hf_ieee80211_aironet_ie_qos_paramset,
26746 {"Aironet IE QoS paramset", "wlan.aironet.qos.paramset",
26747 FT_UINT8, BASE_DEC, NULL, 0,
26750 {&hf_ieee80211_aironet_ie_qos_val,
26751 {"Aironet IE QoS valueset", "wlan.aironet.qos.val",
26752 FT_BYTES, BASE_NONE, NULL, 0,
26755 {&hf_ieee80211_aironet_ie_clientmfp,
26756 {"Aironet IE Client MFP", "wlan.aironet.clientmfp",
26757 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
26760 /* Vendor Specific : Nintendo */
26761 {&hf_ieee80211_vs_nintendo_type,
26762 {"Type", "wlan.vs.nintendo.type",
26763 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_nintendo_type_vals), 0,
26766 {&hf_ieee80211_vs_nintendo_length,
26767 {"Length", "wlan.vs.nintendo.length",
26768 FT_UINT8, BASE_DEC, NULL, 0,
26771 {&hf_ieee80211_vs_nintendo_servicelist,
26772 {"Servicelist", "wlan.vs.nintendo.servicelist",
26773 FT_BYTES, BASE_NONE, NULL, 0,
26776 {&hf_ieee80211_vs_nintendo_service,
26777 {"Service", "wlan.vs.nintendo.service",
26778 FT_BYTES, BASE_NONE, NULL, 0,
26781 {&hf_ieee80211_vs_nintendo_consoleid,
26782 {"Console ID", "wlan.vs.nintendo.consoleid",
26783 FT_BYTES, BASE_NONE, NULL, 0,
26786 {&hf_ieee80211_vs_nintendo_unknown,
26787 {"Unknown", "wlan.vs.nintendo.unknown",
26788 FT_BYTES, BASE_NONE, NULL, 0,
26791 /* Vendor Specific : Aruba Networks */
26792 {&hf_ieee80211_vs_aruba_subtype,
26793 {"Subtype", "wlan.vs.aruba.subtype",
26794 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_aruba_subtype_vals), 0,
26797 {&hf_ieee80211_vs_aruba_apname,
26798 {"AP Name", "wlan.vs.aruba.ap_name",
26799 FT_STRINGZ, BASE_NONE, NULL, 0,
26802 {&hf_ieee80211_vs_aruba_data,
26803 {"Data", "wlan.vs.aruba.data",
26804 FT_BYTES, BASE_NONE, NULL, 0,
26807 {&hf_ieee80211_vs_mikrotik_unknown,
26808 {"Unknown", "wlan.vs.mikrotik.unknown",
26809 FT_BYTES, BASE_NONE, NULL, 0,
26812 {&hf_ieee80211_vs_mikrotik_subitem,
26813 {"Sub IE", "wlan.vs.mikrotik.unknown",
26814 FT_BYTES, BASE_NONE, NULL, 0,
26817 {&hf_ieee80211_vs_mikrotik_subtype,
26818 {"Subtype", "wlan.vs.mikrotik.subtype",
26819 FT_UINT8, BASE_DEC, NULL, 0,
26822 {&hf_ieee80211_vs_mikrotik_sublength,
26823 {"Sublength", "wlan.vs.mikrotik.sublength",
26824 FT_UINT8, BASE_DEC, NULL, 0,
26827 {&hf_ieee80211_vs_mikrotik_subdata,
26828 {"Subdata", "wlan.vs.mikrotik.subdata",
26829 FT_BYTES, BASE_NONE, NULL, 0,
26832 /* Vendor Specific : Meru (Fortinet) */
26833 {&hf_ieee80211_vs_meru_subitem,
26834 {"Sub IE", "wlan.vs.meru.unknown",
26835 FT_NONE, BASE_NONE, NULL, 0,
26838 {&hf_ieee80211_vs_meru_subtype,
26839 {"Subtype", "wlan.vs.meru.subtype",
26840 FT_UINT8, BASE_DEC, NULL, 0,
26843 {&hf_ieee80211_vs_meru_sublength,
26844 {"Sublength", "wlan.vs.meru.sublength",
26845 FT_UINT8, BASE_DEC, NULL, 0,
26848 {&hf_ieee80211_vs_meru_subdata,
26849 {"Subdata", "wlan.vs.meru.subdata",
26850 FT_BYTES, BASE_NONE, NULL, 0,
26853 /* Vendor Specific : Extreme (Zebra) */
26854 {&hf_ieee80211_vs_extreme_subtype,
26855 {"Subtype", "wlan.vs.extreme.subtype",
26856 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_extreme_subtype_vals), 0,
26859 {&hf_ieee80211_vs_extreme_subdata,
26860 {"Subdata", "wlan.vs.extreme.subdata",
26861 FT_BYTES, BASE_NONE, NULL, 0,
26864 {&hf_ieee80211_vs_extreme_unknown,
26865 {"Unknown", "wlan.vs.extreme.unknown",
26866 FT_BYTES, BASE_NONE, NULL, 0,
26869 {&hf_ieee80211_vs_extreme_ap_length,
26870 {"AP Length", "wlan.vs.extreme.ap_length",
26871 FT_UINT8, BASE_DEC, NULL, 0,
26874 {&hf_ieee80211_vs_extreme_ap_name,
26875 {"AP Name", "wlan.vs.extreme.ap_name",
26876 FT_STRING, BASE_NONE, NULL, 0,
26879 {&hf_ieee80211_tsinfo,
26880 {"Traffic Stream (TS) Info", "wlan.ts_info",
26881 FT_UINT24, BASE_HEX, NULL, 0,
26882 "Traffic Stream (TS) Info field", HFILL }},
26884 {&hf_ieee80211_tsinfo_type,
26885 {"Traffic Type", "wlan.ts_info.type",
26886 FT_UINT24, BASE_DEC, VALS(tsinfo_type), 0x000001,
26887 "Traffic Stream (TS) Info Traffic Type", HFILL }},
26889 {&hf_ieee80211_tsinfo_tsid,
26890 {"Traffic Stream ID (TSID)", "wlan.ts_info.tsid",
26891 FT_UINT24, BASE_DEC, NULL, 0x00001E,
26892 "Traffic Stream ID (TSID) Info TSID", HFILL }},
26894 {&hf_ieee80211_tsinfo_dir,
26895 {"Direction", "wlan.ts_info.dir",
26896 FT_UINT24, BASE_DEC, VALS(tsinfo_direction), 0x000060,
26897 "Traffic Stream (TS) Info Direction", HFILL }},
26899 {&hf_ieee80211_tsinfo_access,
26900 {"Access Policy", "wlan.ts_info.dir",
26901 FT_UINT24, BASE_DEC, VALS(tsinfo_access), 0x000180,
26902 "Traffic Stream (TS) Info Access Policy", HFILL }},
26904 {&hf_ieee80211_tsinfo_agg,
26905 {"Aggregation", "wlan.ts_info.agg",
26906 FT_UINT24, BASE_DEC, NULL, 0x000200,
26907 "Traffic Stream (TS) Info Access Policy", HFILL }},
26909 {&hf_ieee80211_tsinfo_apsd,
26910 {"Automatic Power-Save Delivery (APSD)", "wlan.ts_info.apsd",
26911 FT_UINT24, BASE_DEC, NULL, 0x000400,
26912 "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL }},
26914 {&hf_ieee80211_tsinfo_up,
26915 {"User Priority", "wlan.ts_info.up",
26916 FT_UINT24, BASE_DEC, VALS(qos_up), 0x003800,
26917 "Traffic Stream (TS) Info User Priority", HFILL }},
26919 {&hf_ieee80211_tsinfo_ack,
26920 {"Ack Policy", "wlan.ts_info.ack",
26921 FT_UINT24, BASE_DEC, VALS(ack_policy), 0x00C000,
26922 "Traffic Stream (TS) Info Ack Policy", HFILL }},
26924 {&hf_ieee80211_tsinfo_sched,
26925 {"Schedule", "wlan.ts_info.sched",
26926 FT_UINT24, BASE_DEC, NULL, 0x010000,
26927 "Traffic Stream (TS) Info Schedule", HFILL }},
26929 {&hf_ieee80211_tsinfo_rsv,
26930 {"Reserved", "wlan.ts_info.rsv",
26931 FT_UINT24, BASE_HEX, NULL, 0xFE0000,
26932 "Must be Zero", HFILL }},
26934 {&hf_ieee80211_tspec_nor_msdu,
26935 {"Normal MSDU Size", "wlan.tspec.nor_msdu",
26936 FT_UINT16, BASE_DEC, NULL, 0,
26939 {&hf_ieee80211_tspec_max_msdu,
26940 {"Maximum MSDU Size", "wlan.tspec.max_msdu",
26941 FT_UINT16, BASE_DEC, NULL, 0,
26944 {&hf_ieee80211_tspec_min_srv,
26945 {"Minimum Service Interval", "wlan.tspec.min_srv",
26946 FT_UINT32, BASE_DEC, NULL, 0,
26949 {&hf_ieee80211_tspec_max_srv,
26950 {"Maximum Service Interval", "wlan.tspec.max_srv",
26951 FT_UINT32, BASE_DEC, NULL, 0,
26954 {&hf_ieee80211_tspec_inact_int,
26955 {"Inactivity Interval", "wlan.tspec.inact_int",
26956 FT_UINT32, BASE_DEC, NULL, 0,
26959 {&hf_ieee80211_tspec_susp_int,
26960 {"Suspension Interval", "wlan.tspec.susp_int",
26961 FT_UINT32, BASE_DEC, NULL, 0,
26964 {&hf_ieee80211_tspec_srv_start,
26965 {"Service Start Time", "wlan.tspec.srv_start",
26966 FT_UINT32, BASE_DEC, NULL, 0,
26969 {&hf_ieee80211_tspec_min_data,
26970 {"Minimum Data Rate", "wlan.tspec.min_data",
26971 FT_UINT32, BASE_DEC, NULL, 0,
26974 {&hf_ieee80211_tspec_mean_data,
26975 {"Mean Data Rate", "wlan.tspec.mean_data",
26976 FT_UINT32, BASE_DEC, NULL, 0,
26979 {&hf_ieee80211_tspec_peak_data,
26980 {"Peak Data Rate", "wlan.tspec.peak_data",
26981 FT_UINT32, BASE_DEC, NULL, 0,
26984 {&hf_ieee80211_tspec_burst_size,
26985 {"Burst Size", "wlan.tspec.burst_size",
26986 FT_UINT32, BASE_DEC, NULL, 0,
26989 {&hf_ieee80211_tspec_delay_bound,
26990 {"Delay Bound", "wlan.tspec.delay_bound",
26991 FT_UINT32, BASE_DEC, NULL, 0,
26994 {&hf_ieee80211_tspec_min_phy,
26995 {"Minimum PHY Rate", "wlan.tspec.min_phy",
26996 FT_UINT32, BASE_DEC, NULL, 0,
26999 {&hf_ieee80211_tspec_surplus,
27000 {"Surplus Bandwidth Allowance", "wlan.tspec.surplus",
27001 FT_UINT16, BASE_DEC, NULL, 0,
27004 {&hf_ieee80211_tspec_medium,
27005 {"Medium Time", "wlan.tspec.medium",
27006 FT_UINT16, BASE_DEC, NULL, 0,
27009 {&hf_ieee80211_tspec_dmg,
27010 {"DMG attributes", "wlan.tspec.dmg",
27011 FT_UINT16, BASE_DEC, NULL, 0,
27014 {&hf_ieee80211_ts_delay,
27015 {"Traffic Stream (TS) Delay", "wlan.ts_delay",
27016 FT_UINT32, BASE_DEC, NULL, 0,
27019 {&hf_ieee80211_tclas_process,
27020 {"Processing", "wlan.tclas_proc.processing",
27021 FT_UINT8, BASE_DEC, VALS(ieee80211_tclas_process_flag), 0,
27024 {&hf_ieee80211_tag_ext_supp_rates,
27025 {"Extended Supported Rates", "wlan.extended_supported_rates",
27026 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ieee80211_supported_rates_vals_ext, 0x0,
27027 "In Mbit/sec, (B) for Basic Rates", HFILL }},
27029 {&hf_ieee80211_sched_info,
27030 {"Schedule Info", "wlan.sched.sched_info",
27031 FT_UINT16, BASE_HEX, NULL, 0,
27032 "Schedule Info field", HFILL }},
27034 {&hf_ieee80211_sched_info_agg,
27035 {"Schedule Aggregation", "wlan.sched_info.agg",
27036 FT_UINT16, BASE_DEC, NULL, 0x0001,
27037 "Traffic Stream (TS) Info Access Policy", HFILL }},
27039 {&hf_ieee80211_sched_info_tsid,
27040 {"Schedule Traffic Stream ID (TSID)", "wlan.sched_info.tsid",
27041 FT_UINT16, BASE_DEC, NULL, 0x001E,
27042 "Traffic Stream ID (TSID) Info TSID", HFILL }},
27044 {&hf_ieee80211_sched_info_dir,
27045 {"Schedule Direction", "wlan.sched_info.dir",
27046 FT_UINT16, BASE_DEC, VALS(tsinfo_direction), 0x0060,
27047 "Traffic Stream (TS) Info Direction", HFILL }},
27049 {&hf_ieee80211_sched_srv_start,
27050 {"Service Start Time", "wlan.sched.srv_start",
27051 FT_UINT32, BASE_HEX, NULL, 0,
27054 {&hf_ieee80211_sched_srv_int,
27055 {"Service Interval", "wlan.sched.srv_int",
27056 FT_UINT32, BASE_HEX, NULL, 0,
27059 {&hf_ieee80211_sched_spec_int,
27060 {"Specification Interval", "wlan.sched.spec_int",
27061 FT_UINT16, BASE_HEX, NULL, 0,
27064 {&hf_ieee80211_aruba,
27065 {"Aruba Type", "wlan.aruba.type",
27066 FT_UINT16, BASE_DEC|BASE_EXT_STRING, &aruba_mgt_typevals_ext, 0,
27067 "Aruba Management", HFILL }},
27069 {&hf_ieee80211_aruba_hb_seq,
27070 {"Aruba Heartbeat Sequence", "wlan.aruba.heartbeat_sequence",
27071 FT_UINT64, BASE_DEC, NULL, 0,
27074 {&hf_ieee80211_aruba_mtu,
27075 {"Aruba MTU Size", "wlan.aruba.mtu_size",
27076 FT_UINT16, BASE_DEC, NULL, 0,
27079 /* Start: HT Control (+HTC) */
27080 {&hf_ieee80211_htc,
27081 {"HT Control (+HTC)", "wlan.htc",
27082 FT_UINT32, BASE_HEX, NULL, 0,
27083 "High Throughput Control (+HTC)", HFILL }},
27085 {&hf_ieee80211_htc_vht,
27086 {"VHT", "wlan.htc.lac.vht",
27087 FT_BOOLEAN, 32, NULL, HTC_VHT,
27088 "High Throughput Control HT/VHT flag", HFILL }},
27090 {&hf_ieee80211_htc_lac,
27091 {"Link Adaptation Control (LAC)", "wlan.htc.lac",
27092 FT_UINT32, BASE_HEX, NULL, 0x0000FFFE,
27093 "High Throughput Control Link Adaptation Control (LAC)", HFILL }},
27095 {&hf_ieee80211_htc_lac_trq,
27096 {"Training Request (TRQ)", "wlan.htc.lac.trq",
27097 FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag), 0x0002,
27098 "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL }},
27100 {&hf_ieee80211_htc_lac_mai_aseli,
27101 {"Antenna Selection Indication (ASELI)", "wlan.htc.lac.mai.aseli",
27102 FT_UINT16, BASE_HEX, NULL, 0x003C,
27103 "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL }},
27105 {&hf_ieee80211_htc_lac_mai_mrq,
27106 {"MCS Request (MRQ)", "wlan.htc.lac.mai.mrq",
27107 FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag), 0x0004,
27108 "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL }},
27110 {&hf_ieee80211_htc_lac_mai_msi,
27111 {"MCS Request Sequence Identifier (MSI)", "wlan.htc.lac.mai.msi",
27112 FT_UINT16, BASE_HEX, NULL, 0x0038,
27113 "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL }},
27115 {&hf_ieee80211_htc_lac_mai_reserved,
27116 {"Reserved", "wlan.htc.lac.mai.reserved",
27117 FT_UINT16, BASE_HEX, NULL, 0x0038,
27118 "High Throughput Control Link Adaptation Control MAI Reserved", HFILL }},
27120 {&hf_ieee80211_htc_lac_mfsi,
27121 {"MCS Feedback Sequence Identifier (MFSI)", "wlan.htc.lac.mfsi",
27122 FT_UINT16, BASE_DEC, NULL, 0x01C0,
27123 "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL }},
27125 {&hf_ieee80211_htc_lac_asel_command,
27126 {"Antenna Selection (ASEL) Command", "wlan.htc.lac.asel.command",
27127 FT_UINT16, BASE_HEX, VALS(ieee80211_htc_lac_asel_command_flags), 0x0E00,
27128 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL }},
27130 {&hf_ieee80211_htc_lac_asel_data,
27131 {"Antenna Selection (ASEL) Data", "wlan.htc.lac.asel.data",
27132 FT_UINT16, BASE_HEX, NULL, 0xF000,
27133 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL }},
27135 {&hf_ieee80211_htc_lac_mfb,
27136 {"MCS Feedback (MFB)", "wlan.htc.lac.mfb",
27137 FT_UINT16, BASE_HEX, NULL, 0xFE00,
27138 "High Throughput Control Link Adaptation Control MCS Feedback", HFILL }},
27140 {&hf_ieee80211_htc_cal_pos,
27141 {"Calibration Position", "wlan.htc.cal.pos",
27142 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags), 0x00030000,
27143 "High Throughput Control Calibration Position", HFILL }},
27145 {&hf_ieee80211_htc_cal_seq,
27146 {"Calibration Sequence Identifier", "wlan.htc.cal.seq",
27147 FT_UINT32, BASE_DEC, NULL, 0x000C0000,
27148 "High Throughput Control Calibration Sequence Identifier", HFILL }},
27150 {&hf_ieee80211_htc_reserved1,
27151 {"Reserved", "wlan.htc.reserved1",
27152 FT_UINT32, BASE_HEX, NULL, 0x00300000,
27153 "High Throughput Control Reserved", HFILL }},
27155 {&hf_ieee80211_htc_csi_steering,
27156 {"CSI/Steering", "wlan.htc.csi_steering",
27157 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags), 0x00C00000,
27158 "High Throughput Control CSI/Steering", HFILL }},
27160 {&hf_ieee80211_htc_ndp_announcement,
27161 {"NDP Announcement", "wlan.htc.ndp_announcement",
27162 FT_BOOLEAN, 32, TFS(&ieee80211_htc_ndp_announcement_flag), 0x01000000,
27163 "High Throughput Control NDP Announcement", HFILL }},
27165 {&hf_ieee80211_htc_reserved2,
27166 {"Reserved", "wlan.htc.reserved2",
27167 FT_UINT32, BASE_HEX, NULL, 0x3E000000,
27168 "High Throughput Control Reserved", HFILL }},
27170 {&hf_ieee80211_htc_mrq,
27171 {"MRQ", "wlan.htc.mrq",
27172 FT_BOOLEAN, 32, NULL, HTC_MRQ,
27173 "VHT-MCS feedback request", HFILL }},
27175 {&hf_ieee80211_htc_msi,
27176 {"MSI", "wlan.htc.msi",
27177 FT_UINT32, BASE_DEC, NULL, 0x00000038,
27178 "MRQ sequence number", HFILL }},
27180 {&hf_ieee80211_htc_msi_stbc_reserved,
27181 {"Reserved", "wlan.htc.msi_stbc_reserved",
27182 FT_UINT32, BASE_HEX, NULL, 0x00000038,
27185 {&hf_ieee80211_htc_compressed_msi,
27186 {"Compressed MSI", "wlan.htc.compressed_msi",
27187 FT_UINT32, BASE_DEC, NULL, 0x00000018,
27190 {&hf_ieee80211_htc_ppdu_stbc_encoded,
27191 {"PPDU was STBC encoded", "wlan.htc.ppdu_stbc_encoded",
27192 FT_BOOLEAN, 32, NULL, 0x00000020,
27195 {&hf_ieee80211_htc_mfsi,
27196 {"MFSI", "wlan.htc.mfsi",
27197 FT_BOOLEAN, 32, NULL, 0x000001C0,
27198 "MFB sequence identifier", HFILL }},
27200 {&hf_ieee80211_htc_gid_l,
27201 {"GID-L", "wlan.htc.gid_l",
27202 FT_BOOLEAN, 32, NULL, 0x000001C0,
27203 "LSBs of group ID", HFILL }},
27205 {&hf_ieee80211_htc_mfb,
27206 {"MFB", "wlan.htc.mfb",
27207 FT_UINT32, BASE_HEX, NULL, 0x00FFFE00,
27208 "Recommended MFB", HFILL }},
27210 {&hf_ieee80211_htc_num_sts,
27211 {"NUM_STS", "wlan.htc.num_sts",
27212 FT_UINT32, BASE_DEC, NULL, 0x00000E00,
27213 "Recommended NUM_STS", HFILL }},
27215 {&hf_ieee80211_htc_vht_mcs,
27216 {"VHT-MCS", "wlan.htc.vht_mcs",
27217 FT_UINT32, BASE_DEC, NULL, 0x0000F000,
27218 "Recommended VHT-MCS", HFILL }},
27220 {&hf_ieee80211_htc_bw,
27221 {"BW", "wlan.htc.bw",
27222 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_bw_recommended_vht_mcs_vals), 0x00030000,
27223 "Bandwidth for recommended VHT-MCS", HFILL }},
27225 {&hf_ieee80211_htc_snr,
27226 {"SNR", "wlan.htc.snr",
27227 FT_INT32, BASE_DEC, NULL, 0x00FC0000,
27228 "Average SNR + 22", HFILL }},
27230 {&hf_ieee80211_htc_reserved3,
27231 {"Reserved", "wlan.htc.reserved3",
27232 FT_UINT32, BASE_HEX, NULL, 0x1F000000,
27235 {&hf_ieee80211_htc_gid_h,
27236 {"GID-H", "wlan.htc.gid_h",
27237 FT_UINT32, BASE_DEC, NULL, 0x07000000,
27240 {&hf_ieee80211_htc_coding_type,
27241 {"Coding type", "wlan.htc.coding_type",
27242 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_coding_type_vals), 0x08000000,
27245 {&hf_ieee80211_htc_fb_tx_type,
27246 {"FB Tx type", "wlan.htc.fb_tx_type",
27247 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_fb_tx_type_vals), 0x10000000,
27250 {&hf_ieee80211_htc_unsolicited_mfb,
27251 {"Unsolicited MFB", "wlan.htc.unsolicited_mfb",
27252 FT_BOOLEAN, 32, NULL, HTC_UNSOLICITED_MFB,
27253 "High Throughput Control Unsolicited MFB", HFILL }},
27255 {&hf_ieee80211_htc_ac_constraint,
27256 {"AC Constraint", "wlan.htc.ac_constraint",
27257 FT_BOOLEAN, 32, NULL, 0x40000000,
27258 "High Throughput Control AC Constraint", HFILL }},
27260 {&hf_ieee80211_htc_rdg_more_ppdu,
27261 {"RDG/More PPDU", "wlan.htc.rdg_more_ppdu",
27262 FT_BOOLEAN, 32, NULL, 0x80000000,
27263 "High Throughput Control RDG/More PPDU", HFILL }},
27264 /* End: HT Control (+HTC) */
27267 {&hf_ieee80211_tag_mobility_domain_mdid,
27268 {"Mobility Domain Identifier", "wlan.mobility_domain.mdid",
27269 FT_UINT16, BASE_HEX, NULL, 0,
27272 {&hf_ieee80211_tag_mobility_domain_ft_capab,
27273 {"FT Capability and Policy", "wlan.mobility_domain.ft_capab",
27274 FT_UINT8, BASE_HEX, NULL, 0,
27277 {&hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
27278 {"Fast BSS Transition over DS",
27279 "wlan.mobility_domain.ft_capab.ft_over_ds",
27280 FT_UINT8, BASE_HEX, NULL, 0x01,
27283 {&hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
27284 {"Resource Request Protocol Capability",
27285 "wlan.mobility_domain.ft_capab.resource_req",
27286 FT_UINT8, BASE_HEX, NULL, 0x02,
27290 {&hf_ieee80211_tag_ft_mic_control,
27291 {"MIC Control", "wlan.ft.mic_control",
27292 FT_UINT16, BASE_HEX, NULL, 0,
27295 {&hf_ieee80211_tag_ft_element_count,
27296 {"Element Count", "wlan.ft.element_count",
27297 FT_UINT16, BASE_DEC, NULL, 0xff00,
27300 {&hf_ieee80211_tag_ft_mic,
27301 {"MIC", "wlan.ft.mic",
27302 FT_BYTES, BASE_NONE, NULL, 0,
27305 {&hf_ieee80211_tag_ft_anonce,
27306 {"ANonce", "wlan.ft.anonce",
27307 FT_BYTES, BASE_NONE, NULL, 0,
27310 {&hf_ieee80211_tag_ft_snonce,
27311 {"SNonce", "wlan.ft.snonce",
27312 FT_BYTES, BASE_NONE, NULL, 0,
27315 {&hf_ieee80211_tag_ft_subelem_id,
27316 {"Subelement ID", "wlan.ft.subelem.id",
27317 FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals), 0,
27320 {&hf_ieee80211_tag_ft_subelem_len,
27321 {"Length", "wlan.ft.subelem.len",
27322 FT_UINT8, BASE_DEC, NULL, 0,
27325 {&hf_ieee80211_tag_ft_subelem_data,
27326 {"Data", "wlan.ft.subelem.data",
27327 FT_BYTES, BASE_NONE, NULL, 0,
27330 {&hf_ieee80211_tag_ft_subelem_r1kh_id,
27331 {"PMK-R1 key holder identifier (R1KH-ID)", "wlan.ft.subelem.r1kh_id",
27332 FT_BYTES, BASE_NONE, NULL, 0,
27335 {&hf_ieee80211_tag_ft_subelem_gtk_key_info,
27336 {"Key Info", "wlan.ft.subelem.gtk.key_info",
27337 FT_UINT16, BASE_HEX, NULL, 0,
27340 {&hf_ieee80211_tag_ft_subelem_gtk_key_id,
27341 {"Key ID", "wlan.ft.subelem.gtk.key_id",
27342 FT_UINT16, BASE_DEC, NULL, 0x0003,
27345 {&hf_ieee80211_tag_ft_subelem_gtk_key_length,
27346 {"Key Length", "wlan.ft.subelem.gtk.key_length",
27347 FT_UINT8, BASE_HEX, NULL, 0,
27350 {&hf_ieee80211_tag_ft_subelem_gtk_rsc,
27351 {"RSC", "wlan.ft.subelem.gtk.rsc",
27352 FT_BYTES, BASE_NONE, NULL, 0,
27355 {&hf_ieee80211_tag_ft_subelem_gtk_key,
27356 {"GTK", "wlan.ft.subelem.gtk.key",
27357 FT_BYTES, BASE_NONE, NULL, 0,
27360 {&hf_ieee80211_tag_ft_subelem_r0kh_id,
27361 {"PMK-R0 key holder identifier (R0KH-ID)", "wlan.ft.subelem.r0kh_id",
27362 FT_BYTES, BASE_NONE, NULL, 0,
27365 {&hf_ieee80211_tag_ft_subelem_igtk_key_id,
27366 {"Key ID", "wlan.ft.subelem.igtk.key_id",
27367 FT_UINT16, BASE_DEC, NULL, 0,
27370 {&hf_ieee80211_tag_ft_subelem_igtk_ipn,
27371 {"IPN", "wlan.ft.subelem.igtk.ipn",
27372 FT_BYTES, BASE_NONE, NULL, 0,
27375 {&hf_ieee80211_tag_ft_subelem_igtk_key_length,
27376 {"Key Length", "wlan.ft.subelem.igtk.key_length",
27377 FT_UINT8, BASE_HEX, NULL, 0,
27380 {&hf_ieee80211_tag_ft_subelem_igtk_key,
27381 {"Wrapped Key (IGTK)", "wlan.ft.subelem.igtk.key",
27382 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
27384 /* RIC Data IE: 802.11-2012: 8.4.2.52 */
27385 {&hf_ieee80211_tag_ric_data_id,
27386 {"Resource Handshake Identifier", "wlan.ric_data.id",
27387 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
27389 {&hf_ieee80211_tag_ric_data_desc_cnt,
27390 {"Resource Descriptor Count", "wlan.ric_data.desc_cnt",
27391 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
27393 {&hf_ieee80211_tag_ric_data_status_code,
27394 {"Status Code", "wlan.ric_data.status_code",
27395 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &ieee80211_status_code_ext, 0,
27396 "Status of requested Resource", HFILL }},
27398 /* OBSS IE: 802.11-2012: 8.4.2.61 */
27399 {&hf_ieee80211_tag_obss_spd,
27400 {"Scan Passive Dwell", "wlan.obss.spd",
27401 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
27403 {&hf_ieee80211_tag_obss_sad,
27404 {"Scan Active Dwell", "wlan.obss.sad",
27405 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
27407 {&hf_ieee80211_tag_obss_cwtsi,
27408 {"Channel Width Trigger Scan Interval", "wlan.obss.cwtsi",
27409 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
27411 {&hf_ieee80211_tag_obss_sptpc,
27412 {"Scan Passive Total Per Channel", "wlan.obss.sptpc",
27413 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
27415 {&hf_ieee80211_tag_obss_satpc,
27416 {"Scan Active Total Per Channel", "wlan.obss.satpc",
27417 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
27419 {&hf_ieee80211_tag_obss_wctdf,
27420 {"Width Channel Transition Delay Factor", "wlan.obss.wctdf",
27421 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
27423 {&hf_ieee80211_tag_obss_sat,
27424 {"Scan Activity Threshold", "wlan.obss.sat",
27425 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
27427 /* RIC Descriptor IE: 802.11-2012: 8.4.2.53 */
27428 {&hf_ieee80211_tag_ric_desc_rsrc_type,
27429 {"Resource Type", "wlan.ric_desc.rsrc_type",
27430 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
27432 {&hf_ieee80211_tag_ric_desc_var_params,
27433 {"Variable Params", "wlan.ric_desc.var_params",
27434 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
27437 {&hf_ieee80211_tag_mmie_keyid,
27438 {"KeyID", "wlan.mmie.keyid",
27439 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
27441 {&hf_ieee80211_tag_mmie_ipn,
27442 {"IPN", "wlan.mmie.ipn",
27443 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
27445 {&hf_ieee80211_tag_mmie_mic,
27446 {"MIC", "wlan.mmie.mic",
27447 FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
27449 /* WAPI Parameter Set*/
27450 {&hf_ieee80211_tag_wapi_param_set_version,
27451 {"Version", "wlan.wapi.version",
27452 FT_UINT16, BASE_DEC, NULL, 0,
27455 {&hf_ieee80211_tag_wapi_param_set_akm_suite_count,
27456 {"AKM Suite Count", "wlan.wapi.akm_suite.count",
27457 FT_UINT16, BASE_DEC, NULL, 0,
27460 {&hf_ieee80211_tag_wapi_param_set_akm_suite_oui,
27461 {"AKM Suite OUI", "wlan.wapi.akm_suite.oui",
27462 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
27465 {&hf_ieee80211_tag_wapi_param_set_akm_suite_type,
27466 {"AKM Suite Type", "wlan.wapi.akm_suite.type",
27467 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_suite_type) , 0,
27470 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
27471 {"Unicast Cipher Suite Count", "wlan.wapi.unicast_cipher.suite.count",
27472 FT_UINT16, BASE_DEC, NULL, 0,
27475 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui,
27476 {"Unicast Cipher Suite OUI", "wlan.wapi.unicast_cipher.suite.oui",
27477 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
27480 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type,
27481 {"Unicast Cipher Suite Type", "wlan.wapi.unicast_cipher.suite.type",
27482 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type) , 0,
27485 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui,
27486 {"Multicast Cipher Suite OUI", "wlan.wapi.multicast_cipher.suite.oui",
27487 FT_UINT24, BASE_CUSTOM, CF_FUNC(oui_base_custom), 0,
27490 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type,
27491 {"Multicast Cipher Suite Type", "wlan.wapi.multicast_cipher.suite.type",
27492 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type) , 0,
27495 {&hf_ieee80211_tag_wapi_param_set_capab,
27496 {"WAPI Capability Info", "wlan.wapi.capab",
27497 FT_UINT16, BASE_HEX, NULL, 0,
27500 {&hf_ieee80211_tag_wapi_param_set_capab_preauth,
27501 {"Supports Preauthentication?", "wlan.wapi.capab.preauth",
27502 FT_BOOLEAN, 16 , NULL, 0x0001,
27505 {&hf_ieee80211_tag_wapi_param_set_capab_rsvd,
27506 {"Reserved", "wlan.wapi.capab.rsvd",
27507 FT_UINT16, BASE_DEC , NULL, 0xFFFE,
27510 {&hf_ieee80211_tag_wapi_param_set_bkid_count,
27511 {"No of BKID's", "wlan.wapi.bkid.count",
27512 FT_UINT16, BASE_DEC, NULL, 0,
27515 {&hf_ieee80211_tag_wapi_param_set_bkid_list,
27516 {"BKID", "wlan.wapi.bkid",
27517 FT_BYTES, BASE_NONE, NULL, 0,
27520 /* BSS Max Idle Period */
27521 {&hf_ieee80211_tag_bss_max_idle_period,
27522 {"BSS Max Idle Period (1000 TUs)", "wlan.bss_max_idle.period",
27523 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
27525 {&hf_ieee80211_tag_bss_max_idle_options_protected,
27526 {"BSS Max Idle Period Options: Protected Keep-Alive Required",
27527 "wlan.bss_max_idle.options.protected",
27528 FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
27531 {&hf_ieee80211_tag_tfs_request_id,
27532 {"TFS ID", "wlan.tfs_request.id",
27533 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
27535 {&hf_ieee80211_tag_tfs_request_ac_delete_after_match,
27536 {"TFS Action Code - Delete after match",
27537 "wlan.tfs_request.action_code.delete_after_match",
27538 FT_UINT8, BASE_DEC, NULL, 0x01, NULL, HFILL }},
27540 {&hf_ieee80211_tag_tfs_request_ac_notify,
27541 {"TFS Action Code - Notify",
27542 "wlan.tfs_request.action_code.notify",
27543 FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
27545 {&hf_ieee80211_tag_tfs_request_subelem_id,
27546 {"Subelement ID", "wlan.tfs_request.subelem.id",
27547 FT_UINT8, BASE_DEC, VALS(tfs_request_subelem_ids), 0,
27548 "TFS Request Subelement ID", HFILL }},
27550 {&hf_ieee80211_tag_tfs_request_subelem_len,
27551 {"Length", "wlan.tfs_request.subelem.len",
27552 FT_UINT8, BASE_DEC, NULL, 0,
27553 "TFS Request Subelement Length", HFILL }},
27555 {&hf_ieee80211_tag_tfs_request_subelem,
27556 {"Subelement Data", "wlan.tfs_request.subelem",
27557 FT_BYTES, BASE_NONE, NULL, 0,
27558 "TFS Request Subelement Data", HFILL }},
27561 {&hf_ieee80211_tag_tfs_response_subelem_id,
27562 {"Subelement ID", "wlan.tfs_response.subelem.id",
27563 FT_UINT8, BASE_DEC, VALS(tfs_response_subelem_ids), 0,
27564 "TFS Response Subelement ID", HFILL }},
27566 {&hf_ieee80211_tag_tfs_response_subelem_len,
27567 {"Length", "wlan.tfs_response.subelem.len",
27568 FT_UINT8, BASE_DEC, NULL, 0,
27569 "TFS Response Subelement Length", HFILL }},
27571 {&hf_ieee80211_tag_tfs_response_subelem,
27572 {"Subelement Data", "wlan.tfs_response.subelem",
27573 FT_BYTES, BASE_NONE, NULL, 0,
27574 "TFS Response Subelement Data", HFILL }},
27576 {&hf_ieee80211_tag_tfs_response_status,
27577 {"TFS Response Status", "wlan.tfs_response.status",
27578 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
27580 {&hf_ieee80211_tag_tfs_response_id,
27581 {"TFS ID", "wlan.tfs_response.tfs_id",
27582 FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
27584 /* WNM-Sleep Mode */
27585 {&hf_ieee80211_tag_wnm_sleep_mode_action_type,
27586 {"Action Type", "wlan.wnm_sleep_mode.action_type",
27587 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_action_types), 0,
27588 "WNM-Sleep Mode Action Type", HFILL }},
27590 {&hf_ieee80211_tag_wnm_sleep_mode_response_status,
27591 {"WNM-Sleep Mode Response Status",
27592 "wlan.wnm_sleep_mode.response_status",
27593 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_response_status_vals), 0, NULL,
27596 {&hf_ieee80211_tag_wnm_sleep_mode_interval,
27597 {"WNM-Sleep Interval", "wlan.wnm_sleep_mode.interval",
27598 FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
27600 /* Time Advertisement */
27601 {&hf_ieee80211_tag_time_adv_timing_capab,
27602 {"Timing capabilities", "wlan.time_adv.timing_capab",
27603 FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals), 0,
27606 {&hf_ieee80211_tag_time_adv_time_value,
27607 {"Time Value", "wlan.time_adv.time_value",
27608 FT_BYTES, BASE_NONE, NULL, 0,
27611 {&hf_ieee80211_tag_time_adv_time_value_year,
27612 {"Time Value: Year", "wlan.time_adv.time_value.year",
27613 FT_UINT16, BASE_DEC, NULL, 0,
27616 {&hf_ieee80211_tag_time_adv_time_value_month,
27617 {"Time Value: Month", "wlan.time_adv.time_value.month",
27618 FT_UINT8, BASE_DEC, NULL, 0,
27621 {&hf_ieee80211_tag_time_adv_time_value_day,
27622 {"Time Value: Day", "wlan.time_adv.time_value.month",
27623 FT_UINT8, BASE_DEC, NULL, 0,
27626 {&hf_ieee80211_tag_time_adv_time_value_hours,
27627 {"Time Value: Hours", "wlan.time_adv.time_value.hours",
27628 FT_UINT8, BASE_DEC, NULL, 0,
27631 {&hf_ieee80211_tag_time_adv_time_value_minutes,
27632 {"Time Value: Minutes", "wlan.time_adv.time_value.minutes",
27633 FT_UINT8, BASE_DEC, NULL, 0,
27636 {&hf_ieee80211_tag_time_adv_time_value_seconds,
27637 {"Time Value: Seconds", "wlan.time_adv.time_value.seconds",
27638 FT_UINT8, BASE_DEC, NULL, 0,
27641 {&hf_ieee80211_tag_time_adv_time_value_milliseconds,
27642 {"Time Value: Milliseconds", "wlan.time_adv.time_value.milliseconds",
27643 FT_UINT16, BASE_DEC, NULL, 0,
27646 {&hf_ieee80211_tag_time_adv_time_value_reserved,
27647 {"Time Value: Reserved", "wlan.time_adv.time_value.reserved",
27648 FT_UINT8, BASE_DEC, NULL, 0,
27651 {&hf_ieee80211_tag_time_adv_time_error,
27652 {"Time Error", "wlan.time_adv.time_error",
27653 FT_BYTES, BASE_NONE, NULL, 0,
27656 {&hf_ieee80211_tag_time_adv_time_update_counter,
27657 {"Time Update Counter", "wlan.time_adv.time_update_counter",
27658 FT_UINT8, BASE_DEC, NULL, 0,
27662 {&hf_ieee80211_tag_time_zone,
27663 {"Time Zone", "wlan.time_zone",
27664 FT_STRING, BASE_NONE, NULL, 0,
27668 {&hf_ieee80211_tag_interworking_access_network_type,
27669 {"Access Network Type", "wlan.interworking.access_network_type",
27670 FT_UINT8, BASE_DEC, VALS(access_network_type_vals), 0x0f,
27673 {&hf_ieee80211_tag_interworking_internet,
27674 {"Internet", "wlan.interworking.internet",
27675 FT_UINT8, BASE_DEC, NULL, 0x10,
27678 {&hf_ieee80211_tag_interworking_asra,
27679 {"ASRA", "wlan.interworking.asra",
27680 FT_UINT8, BASE_DEC, NULL, 0x20,
27681 "Additional Step Required for Access", HFILL }},
27683 {&hf_ieee80211_tag_interworking_esr,
27684 {"ESR", "wlan.interworking.esr",
27685 FT_UINT8, BASE_DEC, NULL, 0x40,
27686 "Emergency services reachable", HFILL }},
27688 {&hf_ieee80211_tag_interworking_uesa,
27689 {"UESA", "wlan.interworking.uesa",
27690 FT_UINT8, BASE_DEC, NULL, 0x80,
27691 "Unauthenticated emergency service accessible", HFILL }},
27693 {&hf_ieee80211_tag_interworking_hessid,
27694 {"HESSID", "wlan.interworking.hessid",
27695 FT_ETHER, BASE_NONE, NULL, 0,
27696 "Homogeneous ESS identifier", HFILL }},
27698 /* QoS Map Set element */
27699 {&hf_ieee80211_tag_qos_map_set_dscp_exc,
27700 {"DSCP Exception", "wlan.qos_map_set.dscp_exception",
27701 FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
27703 {&hf_ieee80211_tag_qos_map_set_dscp_exc_val,
27704 {"DSCP Value", "wlan.qos_map_set.dscp_value",
27705 FT_UINT8, BASE_DEC, NULL, 0,
27706 "DSCP Exception - DSCP Value", HFILL }},
27708 {&hf_ieee80211_tag_qos_map_set_dscp_exc_up,
27709 {"User Priority", "wlan.qos_map_set.up",
27710 FT_UINT8, BASE_DEC, NULL, 0,
27711 "DSCP Exception - User Priority", HFILL }},
27713 {&hf_ieee80211_tag_qos_map_set_range,
27714 {"DSCP Range description", "wlan.qos_map_set.range",
27715 FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
27717 {&hf_ieee80211_tag_qos_map_set_low,
27718 {"DSCP Low Value", "wlan.qos_map_set.dscp_low_value",
27719 FT_UINT8, BASE_DEC, NULL, 0,
27720 "DSCP Range description - DSCP Low Value", HFILL }},
27722 {&hf_ieee80211_tag_qos_map_set_high,
27723 {"DSCP High Value", "wlan.qos_map_set.dscp_high_value",
27724 FT_UINT8, BASE_DEC, NULL, 0,
27725 "DSCP Range description - DSCP High Value", HFILL }},
27727 /* Advertisement Protocol */
27728 {&hf_ieee80211_tag_adv_proto_resp_len_limit,
27729 {"Query Response Length Limit", "wlan.adv_proto.resp_len_limit",
27730 FT_UINT8, BASE_DEC, NULL, 0x7f,
27733 {&hf_ieee80211_tag_adv_proto_pame_bi,
27734 {"PAME-BI", "wlan.adv_proto.pame_bi",
27735 FT_UINT8, BASE_DEC, NULL, 0x80,
27736 "Pre-Association Message Xchange BSSID Independent (PAME-BI)", HFILL }},
27738 {&hf_ieee80211_tag_adv_proto_id,
27739 {"Advertisement Protocol ID", "wlan.adv_proto.id",
27740 FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals), 0,
27743 {&hf_ieee80211_tag_adv_vs_len,
27744 {"Advertisement Protocol Vendor Specific length", "wlan.adv_proto.vs_len",
27745 FT_UINT8, BASE_DEC, NULL, 0,
27748 {&hf_ieee80211_tag_adv_proto_vs_info,
27749 {"Advertisement Protocol Vendor Specific info", "wlan.adv_proto.vs_info",
27750 FT_NONE, BASE_NONE, NULL, 0,
27754 /* Roaming Consortium */
27755 {&hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
27756 {"Number of ANQP OIs", "wlan.roaming_consortium.num_anqp_oi",
27757 FT_UINT8, BASE_DEC, NULL, 0,
27760 {&hf_ieee80211_tag_roaming_consortium_oi1_len,
27761 {"OI #1 Length", "wlan.roaming_consortium.oi1_len",
27762 FT_UINT8, BASE_DEC, NULL, 0x0f,
27765 {&hf_ieee80211_tag_roaming_consortium_oi2_len,
27766 {"OI #2 Length", "wlan.roaming_consortium.oi2_len",
27767 FT_UINT8, BASE_DEC, NULL, 0xf0,
27770 {&hf_ieee80211_tag_roaming_consortium_oi1,
27771 {"OI #1", "wlan.roaming_consortium.oi1",
27772 FT_BYTES, BASE_NONE, NULL, 0,
27775 {&hf_ieee80211_tag_roaming_consortium_oi2,
27776 {"OI #2", "wlan.roaming_consortium.oi2",
27777 FT_BYTES, BASE_NONE, NULL, 0,
27780 {&hf_ieee80211_tag_roaming_consortium_oi3,
27781 {"OI #3", "wlan.roaming_consortium.oi3",
27782 FT_BYTES, BASE_NONE, NULL, 0,
27785 /* Timeout Interval */
27786 {&hf_ieee80211_tag_timeout_int_type,
27787 {"Timeout Interval Type", "wlan.timeout_int.type",
27788 FT_UINT8, BASE_DEC, VALS(timeout_int_types), 0,
27791 {&hf_ieee80211_tag_timeout_int_value,
27792 {"Timeout Interval Value", "wlan.timeout_int.value",
27793 FT_UINT32, BASE_DEC, NULL, 0,
27796 /* Link Identifier */
27797 {&hf_ieee80211_tag_link_id_bssid,
27798 {"BSSID", "wlan.link_id.bssid",
27799 FT_ETHER, BASE_NONE, NULL, 0,
27802 {&hf_ieee80211_tag_link_id_init_sta,
27803 {"TDLS initiator STA Address", "wlan.link_id.init_sta",
27804 FT_ETHER, BASE_NONE, NULL, 0,
27807 {&hf_ieee80211_tag_link_id_resp_sta,
27808 {"TDLS responder STA Address", "wlan.link_id.resp_sta",
27809 FT_ETHER, BASE_NONE, NULL, 0,
27812 /* Wakeup Schedule */
27813 {&hf_ieee80211_tag_wakeup_schedule_offset,
27814 {"Offset", "wlan.wakeup_schedule.offset",
27815 FT_UINT32, BASE_DEC, NULL, 0,
27818 {&hf_ieee80211_tag_wakeup_schedule_interval,
27819 {"Interval", "wlan.wakeup_schedule.interval",
27820 FT_UINT32, BASE_DEC, NULL, 0,
27823 {&hf_ieee80211_tag_wakeup_schedule_awake_window_slots,
27824 {"Awake Window Slots", "wlan.wakeup_schedule.awake_window_slots",
27825 FT_UINT32, BASE_DEC, NULL, 0,
27828 {&hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
27829 {"Maximum Awake Window Duration", "wlan.wakeup_schedule.max_awake_dur",
27830 FT_UINT32, BASE_DEC, NULL, 0,
27833 {&hf_ieee80211_tag_wakeup_schedule_idle_count,
27834 {"Idle Count", "wlan.wakeup_schedule.idle_count",
27835 FT_UINT16, BASE_DEC, NULL, 0,
27838 /* Channel Switch Timing */
27839 {&hf_ieee80211_tag_channel_switch_timing_switch_time,
27840 {"Switch Time", "wlan.channel_switch_timing.switch_time",
27841 FT_UINT16, BASE_DEC, NULL, 0,
27844 {&hf_ieee80211_tag_channel_switch_timing_switch_timeout,
27845 {"Switch Timeout", "wlan.channel_switch_timing.switch_timeout",
27846 FT_UINT16, BASE_DEC, NULL, 0,
27850 {&hf_ieee80211_tag_pti_control_tid,
27851 {"TID", "wlan.pti_control.tid",
27852 FT_UINT8, BASE_DEC, NULL, 0,
27855 {&hf_ieee80211_tag_pti_control_sequence_control,
27856 {"Sequence Control", "wlan.pti_control.sequence_control",
27857 FT_UINT16, BASE_HEX, NULL, 0,
27860 /* PU Buffer Status */
27861 {&hf_ieee80211_tag_pu_buffer_status_ac_bk,
27862 {"AC_BK traffic available", "wlan.pu_buffer_status.ac_bk",
27863 FT_UINT8, BASE_DEC, NULL, 0x01,
27866 {&hf_ieee80211_tag_pu_buffer_status_ac_be,
27867 {"AC_BE traffic available", "wlan.pu_buffer_status.ac_be",
27868 FT_UINT8, BASE_DEC, NULL, 0x02,
27871 {&hf_ieee80211_tag_pu_buffer_status_ac_vi,
27872 {"AC_VI traffic available", "wlan.pu_buffer_status.ac_vi",
27873 FT_UINT8, BASE_DEC, NULL, 0x04,
27876 {&hf_ieee80211_tag_pu_buffer_status_ac_vo,
27877 {"AC_VO traffic available", "wlan.pu_buffer_status.ac_vo",
27878 FT_UINT8, BASE_DEC, NULL, 0x08,
27881 {&hf_ieee80211_mysterious_olpc_stuff,
27882 {"Mysterious OLPC stuff", "wlan.mysterious_olpc_stuff",
27883 FT_NONE, BASE_NONE, NULL, 0x0,
27888 static hf_register_info aggregate_fields[] = {
27889 {&hf_ieee80211_amsdu_subframe,
27890 {"A-MSDU Subframe", "wlan_aggregate.a_mdsu.subframe",
27891 FT_NONE, BASE_NONE, NULL, 0x0,
27892 "Aggregate MAC Service Data Unit (MSDU) Subframe", HFILL }},
27894 {&hf_ieee80211_amsdu_length,
27895 {"A-MSDU Length", "wlan_aggregate.a_mdsu.length",
27896 FT_UINT16, BASE_DEC, NULL, 0x0,
27900 static uat_field_t wep_uat_flds[] = {
27902 UAT_FLD_VS(uat_wep_key_records, key, "Key type", wep_type_vals,
27903 "Decryption key type used"),
27904 UAT_FLD_CSTRING(uat_wep_key_records, string, "Key",
27905 "wep:<wep hexadecimal key>\n"
27906 "wpa-pwd:<passphrase>[:<ssid>]\n"
27907 "wpa-psk:<wpa hexadecimal key>"),
27911 static gint *tree_array[] = {
27916 &ett_cntrl_wrapper_fc,
27917 &ett_cntrl_wrapper_payload,
27921 &ett_block_ack_bitmap,
27925 &ett_fixed_parameters,
27926 &ett_tagged_parameters,
27927 &ett_tag_bmapctl_tree,
27928 &ett_tag_country_fnm_tree,
27929 &ett_tag_country_rcc_tree,
27930 &ett_qos_parameters,
27931 &ett_qos_ps_buf_state,
27932 &ett_wep_parameters,
27934 &ett_hwmp_targ_flags_tree,
27935 &ett_mesh_chswitch_flag_tree,
27936 &ett_mesh_config_cap_tree,
27937 &ett_mesh_formation_info_tree,
27941 &ett_rsn_sub_pcs_tree,
27942 &ett_rsn_akms_tree,
27943 &ett_rsn_sub_akms_tree,
27945 &ett_rsn_pmkid_tree,
27946 &ett_rsn_gmcs_tree,
27950 &ett_wpa_sub_ucs_tree,
27951 &ett_wpa_akms_tree,
27952 &ett_wpa_sub_akms_tree,
27954 &ett_wme_aci_aifsn,
27959 &ett_ampduparam_tree,
27962 &ett_htex_cap_tree,
27966 &ett_hta_cap1_tree,
27967 &ett_hta_cap2_tree,
27974 &ett_vht_mcsset_tree,
27975 &ett_vht_rx_mcsbit_tree,
27976 &ett_vht_tx_mcsbit_tree,
27977 &ett_vht_basic_mcsbit_tree,
27979 &ett_vht_tpe_info_tree,
27981 &ett_vht_ndp_annc_token_tree,
27982 &ett_vht_ndp_annc_sta_info_tree,
27984 &ett_ff_vhtmimo_cntrl,
27985 &ett_ff_vhtmimo_beamforming_report,
27986 &ett_ff_vhtmimo_beamforming_report_snr,
27987 &ett_ff_vhtmimo_beamforming_angle,
27988 &ett_ff_vhtmimo_beamforming_report_feedback_matrices,
27989 &ett_ff_vhtmu_exclusive_beamforming_report_matrices,
27991 &ett_vht_grpidmgmt,
27995 &ett_ht_info_delimiter1_tree,
27996 &ett_ht_info_delimiter2_tree,
27997 &ett_ht_info_delimiter3_tree,
27999 &ett_tag_measure_request_mode_tree,
28000 &ett_tag_measure_request_type_tree,
28001 &ett_tag_measure_report_mode_tree,
28002 &ett_tag_measure_report_type_tree,
28003 &ett_tag_measure_report_basic_map_tree,
28004 &ett_tag_measure_report_rpi_tree,
28005 &ett_tag_measure_report_frame_tree,
28006 &ett_tag_measure_reported_frame_tree,
28007 &ett_tag_bss_bitmask_tree,
28008 &ett_tag_dfs_map_tree,
28009 &ett_tag_erp_info_tree,
28028 &ett_tag_tclas_mask_tree,
28030 &ett_tag_supported_channels,
28032 &ett_tag_neighbor_report_bssid_info_tree,
28033 &ett_tag_neighbor_report_bssid_info_capability_tree,
28034 &ett_tag_neighbor_report_sub_tag_tree,
28036 &ett_tag_wapi_param_set_akm_tree,
28037 &ett_tag_wapi_param_set_ucast_tree,
28038 &ett_tag_wapi_param_set_mcast_tree,
28039 &ett_tag_wapi_param_set_preauth_tree,
28041 &ett_tag_time_adv_tree,
28043 &ett_ff_ba_param_tree,
28044 &ett_ff_ba_ssc_tree,
28045 &ett_ff_delba_param_tree,
28047 &ett_ff_psmp_param_set,
28048 &ett_ff_mimo_cntrl,
28051 &ett_ff_sm_pwr_save,
28052 &ett_ff_chan_switch_announce,
28054 &ett_ff_psmp_sta_info,
28058 &ett_msdu_aggregation_parent_tree,
28059 &ett_msdu_aggregation_subframe_tree,
28068 &ett_adv_proto_tuple,
28072 &ett_nai_realm_eap,
28073 &ett_tag_ric_data_desc_ie,
28074 &ett_anqp_vendor_capab,
28076 &ett_hs20_cc_proto_port_tuple,
28086 &ett_qos_map_set_exception,
28087 &ett_qos_map_set_range,
28089 /* 802.11ad trees */
28090 &ett_dynamic_alloc_tree,
28097 &ett_dmg_params_tree,
28101 &ett_allocation_tree,
28104 &ett_gas_resp_fragment,
28105 &ett_gas_resp_fragments
28108 static ei_register_info ei[] = {
28109 { &ei_ieee80211_bad_length,
28110 { "ieee80211.bad_length", PI_MALFORMED, PI_ERROR,
28111 "Wrong length indicated", EXPFILL }},
28113 { &ei_ieee80211_inv_val,
28114 { "ieee80211.invalid_value", PI_MALFORMED, PI_WARN,
28115 "Invalid value", EXPFILL }},
28117 { &ei_ieee80211_tag_number,
28118 { "wlan.tag.number.unexpected_ie", PI_MALFORMED, PI_ERROR,
28119 "Unexpected Information Element ID", EXPFILL }},
28121 { &ei_ieee80211_tag_length,
28122 { "wlan.tag.length.bad", PI_MALFORMED, PI_ERROR,
28123 "Bad tag length", EXPFILL }},
28125 { &ei_ieee80211_extra_data,
28126 { "ieee80211.extra_data", PI_MALFORMED, PI_WARN,
28127 "Unexpected extra data in the end", EXPFILL }},
28129 { &ei_ieee80211_ff_anqp_capability,
28130 { "wlan.fixed.anqp.capability.invalid", PI_MALFORMED, PI_ERROR,
28131 "Invalid vendor-specific ANQP capability", EXPFILL }},
28133 { &ei_ieee80211_ff_anqp_venue_length,
28134 { "wlan.fixed.anqp.venue.length.invalid", PI_MALFORMED, PI_ERROR,
28135 "Invalid Venue Name Duple length", EXPFILL }},
28137 { &ei_ieee80211_ff_anqp_roaming_consortium_oi_len,
28138 { "wlan.fixed.anqp.roaming_consortium.oi_len.invalid", PI_MALFORMED, PI_ERROR,
28139 "Invalid Roaming Consortium OI", EXPFILL }},
28141 { &ei_ieee80211_ff_anqp_nai_field_len,
28142 { "wlan.fixed.anqp.nai_realm_list.field_len.invalid", PI_MALFORMED, PI_ERROR,
28143 "Invalid NAI Realm List", EXPFILL }},
28145 { &ei_ieee80211_ff_anqp_nai_realm_eap_len,
28146 { "wlan.fixed.naqp_nai_realm_list.eap_method_len.invalid", PI_MALFORMED, PI_ERROR,
28147 "Invalid EAP Method subfield", EXPFILL }},
28149 { &ei_hs20_anqp_ofn_length,
28150 { "wlan.hs20.anqp.ofn.length.invalid", PI_MALFORMED, PI_ERROR,
28151 "Invalid Operator Friendly Name Duple length", EXPFILL }},
28153 { &ei_hs20_anqp_nai_hrq_length,
28154 { "wlan.hs20.anqp.nai_hrq.length.invalid", PI_MALFORMED, PI_ERROR,
28155 "Invalid NAI Home Realm Query length", EXPFILL }},
28157 { &ei_ieee80211_ff_anqp_info_length,
28158 { "wlan.fixed.anqp.info_length.invalid", PI_MALFORMED, PI_ERROR,
28159 "Invalid ANQP Info length", EXPFILL }},
28161 { &ei_ieee80211_not_enough_room_for_anqp_header,
28162 { "wlan.fixed.query_length_invalid", PI_MALFORMED, PI_ERROR,
28163 "Not enough room for ANQP header", EXPFILL }},
28165 { &ei_ieee80211_ff_query_request_length,
28166 { "wlan.fixed.query_request_length.invalid", PI_MALFORMED, PI_ERROR,
28167 "Invalid Query Request Length", EXPFILL }},
28169 { &ei_ieee80211_ff_query_response_length,
28170 { "wlan.fixed.query_response_length.invalid", PI_MALFORMED, PI_ERROR,
28171 "Invalid Query Response Length", EXPFILL }},
28173 { &ei_ieee80211_tag_wnm_sleep_mode_no_key_data,
28174 { "wlan.wnm_sleep_mode.no_key_data", PI_MALFORMED, PI_ERROR,
28175 "WNM-Sleep Mode Response is not long enough to include Key Data", EXPFILL }},
28177 { &ei_ieee80211_tdls_setup_response_malformed,
28178 { "wlan.tdls_setup_response_malformed", PI_MALFORMED, PI_ERROR,
28179 "TDLS Setup Response (success) does not include mandatory fields", EXPFILL }},
28181 { &ei_ieee80211_tdls_setup_confirm_malformed,
28182 { "wlan.tdls_setup_confirm_malformed", PI_MALFORMED, PI_ERROR,
28183 "TDLS Setup Confirm (success) does not include mandatory fields", EXPFILL }},
28185 { &ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype,
28186 { "wlan.wfa.ie.wme.qos_info.bad_ftype", PI_UNDECODED, PI_WARN,
28187 "Could not deduce direction to decode correctly", EXPFILL }},
28189 { &ei_ieee80211_qos_info_bad_ftype,
28190 { "wlan.qos_info.bad_ftype", PI_UNDECODED, PI_WARN,
28191 "Could not deduce direction to decode correctly", EXPFILL }},
28193 { &ei_ieee80211_qos_bad_aifsn,
28194 { "wlan.qos_info.bad_aifsn", PI_MALFORMED, PI_WARN,
28195 "Invalid AIFSN", EXPFILL }},
28197 { &ei_ieee80211_rsn_pcs_count,
28198 { "wlan.rsn.pcs.count.invalid", PI_MALFORMED, PI_ERROR,
28199 "Pairwise Cipher Suite Count too large", EXPFILL }},
28201 { &ei_ieee80211_rsn_pmkid_count,
28202 { "wlan.rsn.akms.count.invalid", PI_MALFORMED, PI_ERROR,
28203 "Auth Key Management (AKM) Suite Count too large", EXPFILL }},
28205 { &ei_ieee80211_pmkid_count_too_large,
28206 { "wlan.rsn.pmkid.count.invalid", PI_MALFORMED, PI_ERROR,
28207 "PMKID Count too large", EXPFILL }},
28209 { &ei_ieee80211_vht_tpe_pwr_info_count,
28210 { "wlan.vht.tpe.pwr_info.count.invalid", PI_MALFORMED, PI_ERROR,
28211 "Max Tx Pwr Count is Incorrect, should be 0-7", EXPFILL }},
28213 { &ei_ieee80211_missing_data,
28214 { "ieee80211.missing_data", PI_MALFORMED, PI_WARN,
28215 "No Request subelements in TFS Request", EXPFILL }},
28217 { &ei_ieee80211_fc_retry,
28218 { "wlan.fc.retry.expert", PI_SEQUENCE, PI_NOTE,
28219 "Retransmission (retry)", EXPFILL }},
28221 { &ei_ieee80211_tag_measure_request_unknown,
28222 { "wlan.measure.req.unknown.expert", PI_UNDECODED, PI_WARN,
28223 "Undecoded Measurement Request type (or subtype), Contact Wireshark developers if you want this supported", EXPFILL }},
28225 { &ei_ieee80211_tag_measure_request_beacon_unknown,
28226 { "wlan.measure.req.beacon.unknown.expert", PI_UNDECODED, PI_WARN,
28227 "Unknown Data (not interpreted)", EXPFILL }},
28229 { &ei_ieee80211_tag_measure_report_unknown,
28230 { "wlan.measure.req.unknown.expert", PI_UNDECODED, PI_WARN,
28231 "Undecoded Measurement Report type (or subtype), Contact Wireshark developers if you want this supported", EXPFILL }},
28233 { &ei_ieee80211_tag_data,
28234 { "wlan.tag.data.undecoded", PI_UNDECODED, PI_NOTE,
28235 "Dissector for 802.11 IE Tag code not implemented, Contact Wireshark developers if you want this supported", EXPFILL }},
28237 { &ei_ieee80211_dmg_subtype,
28238 { "wlan.dmg_subtype.bad", PI_MALFORMED, PI_ERROR,
28239 "Bad DMG type/subtype", EXPFILL }},
28241 { &ei_ieee80211_vht_action,
28242 { "wlan.vht.action.undecoded", PI_UNDECODED, PI_NOTE,
28243 "All subtype of VHT Action is not yet supported by Wireshark", EXPFILL }},
28245 { &ei_ieee80211_mesh_peering_unexpected,
28246 { "wlan.peering.unexpected", PI_MALFORMED, PI_ERROR,
28247 "Unexpected Self-protected action", EXPFILL }},
28249 { &ei_ieee80211_fcs,
28250 { "wlan.fcs.bad_checksum", PI_MALFORMED, PI_ERROR,
28251 "Bad checksum", EXPFILL }},
28253 { &ei_ieee80211_mismatched_akm_suite,
28254 { "wlan.rsn.akms.mismatched", PI_PROTOCOL, PI_ERROR,
28255 "Mismatched AKMS", EXPFILL }},
28258 expert_module_t *expert_ieee80211;
28260 module_t *wlan_module;
28262 memset(&wlan_stats, 0, sizeof wlan_stats);
28264 proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
28265 "IEEE 802.11 Aggregate Data", "wlan_aggregate");
28266 proto_register_field_array(proto_aggregate, aggregate_fields, array_length(aggregate_fields));
28268 proto_wlan = proto_register_protocol("IEEE 802.11 wireless LAN", "IEEE 802.11", "wlan");
28269 /* Created to remove Decode As confusion */
28270 proto_centrino = proto_register_protocol("IEEE 802.11 wireless LAN (Centrino)", "IEEE 802.11 (Centrino)", "wlan_centrino");
28271 proto_register_field_array(proto_wlan, hf, array_length(hf));
28273 proto_wlan_ext = proto_register_protocol("IEEE 802.11 wireless LAN extension frame",
28274 "IEEE 802.11 EXT", "wlan_ext");
28276 proto_register_subtree_array(tree_array, array_length(tree_array));
28278 expert_ieee80211 = expert_register_protocol(proto_wlan);
28279 expert_register_field_array(expert_ieee80211, ei, array_length(ei));
28281 ieee80211_handle = register_dissector("wlan", dissect_ieee80211, proto_wlan);
28282 register_dissector("wlan_withfcs", dissect_ieee80211_withfcs, proto_wlan);
28283 wlan_withoutfcs_handle = register_dissector("wlan_withoutfcs", dissect_ieee80211_withoutfcs, proto_wlan);
28284 register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
28285 register_dissector("wlan_noqos", dissect_ieee80211_noqos, proto_wlan);
28287 register_capture_dissector("ieee80211", capture_ieee80211, proto_wlan);
28288 register_capture_dissector("ieee80211_datapad", capture_ieee80211_datapad, proto_wlan);
28290 reassembly_table_register(&wlan_reassembly_table,
28291 &addresses_reassembly_table_functions);
28292 register_init_routine(wlan_retransmit_init);
28293 reassembly_table_register(&gas_reassembly_table,
28294 &addresses_reassembly_table_functions);
28296 wlan_tap = register_tap("wlan");
28297 register_conversation_table(proto_wlan, TRUE, wlan_conversation_packet, wlan_hostlist_packet);
28299 wlan_address_type = address_type_dissector_register("AT_ETHER_WLAN", "WLAN Address", ether_to_str, ether_str_len, NULL, wlan_col_filter_str,
28300 ether_len, ether_name_resolution_str, ether_name_resolution_len);
28301 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,
28302 ether_len, ether_name_resolution_str, ether_name_resolution_len);
28303 set_address(&bssid_broadcast, wlan_bssid_address_type, 6, bssid_broadcast_data);
28305 tagged_field_table = register_dissector_table("wlan.tag.number", "IEEE 802.11 Fields", proto_wlan, FT_UINT8, BASE_DEC);
28306 vendor_specific_action_table = register_dissector_table("wlan.action.vendor_specific", "IEEE802.11 Vendor Specific Action", proto_wlan, FT_UINT24, BASE_HEX);
28307 wifi_alliance_action_subtype_table = register_dissector_table("wlan.action.wifi_alliance.subtype", "Wi-Fi Alliance Action Subtype", proto_wlan, FT_UINT8, BASE_HEX);
28308 vendor_specific_anqp_info_table = register_dissector_table("wlan.anqp.vendor_specific", "IEEE802.11 ANQP information Vendor Specific", proto_wlan, FT_UINT24, BASE_HEX);
28309 wifi_alliance_anqp_info_table = register_dissector_table("wlan.anqp.wifi_alliance.subtype", "Wi-Fi Alliance ANQP Subtype", proto_wlan, FT_UINT8, BASE_HEX);
28310 wifi_alliance_ie_table = register_dissector_table("wlan.ie.wifi_alliance.subtype", "Wi-Fi Alliance IE Subtype", proto_wlan, FT_UINT8, BASE_HEX);
28311 wifi_alliance_public_action_table = register_dissector_table("wlan.pa.wifi_alliance.subtype", "Wi-Fi Alliance PA Subtype", proto_wlan, FT_UINT8, BASE_HEX);
28313 /* Register configuration options */
28314 wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
28315 prefs_register_bool_preference(wlan_module, "defragment",
28316 "Reassemble fragmented 802.11 datagrams",
28317 "Whether fragmented 802.11 datagrams should be reassembled",
28320 prefs_register_bool_preference(wlan_module, "ignore_draft_ht",
28321 "Ignore vendor-specific HT elements",
28322 "Don't dissect 802.11n draft HT elements (which might contain duplicate information).",
28323 &wlan_ignore_draft_ht);
28325 prefs_register_bool_preference(wlan_module, "retransmitted",
28326 "Call subdissector for retransmitted 802.11 frames",
28327 "Whether retransmitted 802.11 frames should be subdissected",
28328 &wlan_subdissector);
28330 prefs_register_bool_preference(wlan_module, "check_fcs",
28331 "Assume packets have FCS",
28332 "Some 802.11 cards include the FCS at the end of a packet, others do not.",
28335 prefs_register_bool_preference(wlan_module, "check_checksum",
28336 "Validate the FCS checksum if possible",
28337 "Whether to validate the FCS checksum or not.",
28338 &wlan_check_checksum);
28340 prefs_register_enum_preference(wlan_module, "ignore_wep",
28341 "Ignore the Protection bit",
28342 "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
28343 "and some also leave the IV (initialization vector).",
28344 &wlan_ignore_prot, wlan_ignore_prot_options, TRUE);
28346 prefs_register_obsolete_preference(wlan_module, "wep_keys");
28348 prefs_register_bool_preference(wlan_module, "enable_decryption",
28349 "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
28350 &enable_decryption);
28352 wep_uat = uat_new("WEP and WPA Decryption Keys",
28353 sizeof(uat_wep_key_record_t), /* record size */
28354 "80211_keys", /* filename */
28355 TRUE, /* from_profile */
28356 &uat_wep_key_records, /* data_ptr */
28357 &num_wepkeys_uat, /* numitems_ptr */
28358 UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
28359 NULL, /* help. XXX Needs chapter in WSUG */
28360 uat_wep_key_record_copy_cb, /* copy callback */
28361 uat_wep_key_record_update_cb, /* update callback */
28362 uat_wep_key_record_free_cb, /* free callback */
28363 init_wepkeys, /* post update callback - update the WEP/WPA keys */
28364 NULL, /* reset callback */
28365 wep_uat_flds); /* UAT field definitions */
28367 prefs_register_uat_preference(wlan_module,
28370 "WEP and pre-shared WPA keys\n"
28371 "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
28372 "010203040506070809101111213 (104/128-bit WEP),\n"
28373 "MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
28374 "0102030405...6061626364 (WPA + 256-bit key)."
28375 "Invalid keys will be ignored.",
28380 proto_register_wlan_rsna_eapol(void)
28383 static hf_register_info hf[] = {
28384 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
28385 {"Key Information", "wlan_rsna_eapol.keydes.key_info",
28386 FT_UINT16, BASE_HEX, NULL, 0x0,
28389 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
28390 {"Key Descriptor Version", "wlan_rsna_eapol.keydes.key_info.keydes_version",
28391 FT_UINT16, BASE_DEC, VALS(keydes_version_vals), KEY_INFO_KEYDES_VERSION_MASK,
28394 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
28395 {"Key Type", "wlan_rsna_eapol.keydes.key_info.key_type",
28396 FT_BOOLEAN, 16, TFS(&keyinfo_key_type_tfs), KEY_INFO_KEY_TYPE_MASK,
28399 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
28400 {"Key Index", "wlan_rsna_eapol.keydes.key_info.key_index",
28401 FT_UINT16, BASE_DEC, NULL, KEY_INFO_KEY_INDEX_MASK,
28404 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
28405 {"Install", "wlan_rsna_eapol.keydes.key_info.install",
28406 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_INSTALL_MASK,
28409 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
28410 {"Key ACK", "wlan_rsna_eapol.keydes.key_info.key_ack",
28411 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_KEY_ACK_MASK,
28414 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
28415 {"Key MIC", "wlan_rsna_eapol.keydes.key_info.key_mic",
28416 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_KEY_MIC_MASK,
28419 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
28420 {"Secure", "wlan_rsna_eapol.keydes.key_info.secure",
28421 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_SECURE_MASK,
28424 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
28425 {"Error", "wlan_rsna_eapol.keydes.key_info.error",
28426 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_ERROR_MASK,
28429 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
28430 {"Request", "wlan_rsna_eapol.keydes.key_info.request",
28431 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_REQUEST_MASK,
28434 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
28435 {"Encrypted Key Data", "wlan_rsna_eapol.keydes.key_info.encrypted_key_data",
28436 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_ENCRYPTED_KEY_DATA_MASK,
28439 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
28440 {"SMK Message", "wlan_rsna_eapol.keydes.key_info.smk_message",
28441 FT_BOOLEAN, 16, TFS(&tfs_set_notset), KEY_INFO_SMK_MESSAGE_MASK,
28444 {&hf_wlan_rsna_eapol_keydes_key_len,
28445 {"Key Length", "eapol.keydes.key_len",
28446 FT_UINT16, BASE_DEC, NULL, 0x0,
28449 {&hf_wlan_rsna_eapol_keydes_replay_counter,
28450 {"Replay Counter", "eapol.keydes.replay_counter",
28451 FT_UINT64, BASE_DEC, NULL, 0x0,
28454 {&hf_wlan_rsna_eapol_keydes_key_iv,
28455 {"Key IV", "eapol.keydes.key_iv",
28456 FT_BYTES, BASE_NONE, NULL, 0x0,
28459 {&hf_wlan_rsna_eapol_wpa_keydes_nonce,
28460 {"WPA Key Nonce", "wlan_rsna_eapol.keydes.nonce",
28461 FT_BYTES, BASE_NONE, NULL, 0x0,
28464 {&hf_wlan_rsna_eapol_wpa_keydes_rsc,
28465 {"WPA Key RSC", "wlan_rsna_eapol.keydes.rsc",
28466 FT_BYTES, BASE_NONE, NULL, 0x0,
28469 {&hf_wlan_rsna_eapol_wpa_keydes_id,
28470 {"WPA Key ID", "wlan_rsna_eapol.keydes.id",
28471 FT_BYTES, BASE_NONE, NULL, 0x0,
28474 {&hf_wlan_rsna_eapol_wpa_keydes_mic,
28475 {"WPA Key MIC", "wlan_rsna_eapol.keydes.mic",
28476 FT_BYTES, BASE_NONE, NULL, 0x0,
28479 {&hf_wlan_rsna_eapol_wpa_keydes_data_len,
28480 {"WPA Key Data Length", "wlan_rsna_eapol.keydes.data_len",
28481 FT_UINT16, BASE_DEC, NULL, 0x0,
28484 {&hf_wlan_rsna_eapol_wpa_keydes_data,
28485 {"WPA Key Data", "wlan_rsna_eapol.keydes.data",
28486 FT_BYTES, BASE_NONE, NULL, 0x0,
28490 static gint *tree_array[] = {
28492 &ett_wlan_rsna_eapol_keydes_data,
28495 proto_wlan_rsna_eapol = proto_register_protocol("IEEE 802.11 RSNA EAPOL key",
28496 "802.11 RSNA EAPOL", "wlan_rsna_eapol");
28497 proto_register_field_array(proto_wlan_rsna_eapol, hf, array_length(hf));
28499 proto_register_subtree_array(tree_array, array_length(tree_array));
28503 proto_reg_handoff_ieee80211(void)
28505 dissector_handle_t data_encap_handle, centrino_handle;
28506 dissector_handle_t wlan_rsna_eapol_wpa_key_handle, wlan_rsna_eapol_rsn_key_handle;
28507 capture_dissector_handle_t ieee80211_cap_handle;
28510 * Get handles for the LLC, IPX and Ethernet dissectors.
28512 llc_handle = find_dissector_add_dependency("llc", proto_wlan);
28513 ipx_handle = find_dissector_add_dependency("ipx", proto_wlan);
28514 eth_withoutfcs_handle = find_dissector_add_dependency("eth_withoutfcs", proto_wlan);
28516 llc_cap_handle = find_capture_dissector("llc");
28517 ipx_cap_handle = find_capture_dissector("ipx");
28519 dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11, ieee80211_handle);
28521 centrino_handle = create_dissector_handle( dissect_ieee80211_centrino, proto_centrino );
28522 dissector_add_uint("ethertype", ETHERTYPE_CENTRINO_PROMISC, centrino_handle);
28524 ieee80211_cap_handle = find_capture_dissector("ieee80211");
28525 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11, ieee80211_cap_handle);
28526 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11_WITH_RADIO, ieee80211_cap_handle);
28527 capture_dissector_add_uint("ppi", 105 /* DLT_DLT_IEEE802_11 */, ieee80211_cap_handle);
28529 /* Register handoff to Aruba GRE */
28530 dissector_add_uint("gre.proto", GRE_ARUBA_8200, ieee80211_handle);
28531 dissector_add_uint("gre.proto", GRE_ARUBA_8210, ieee80211_handle);
28532 dissector_add_uint("gre.proto", GRE_ARUBA_8220, ieee80211_handle);
28533 dissector_add_uint("gre.proto", GRE_ARUBA_8230, ieee80211_handle);
28534 dissector_add_uint("gre.proto", GRE_ARUBA_8240, ieee80211_handle);
28535 dissector_add_uint("gre.proto", GRE_ARUBA_8250, ieee80211_handle);
28536 dissector_add_uint("gre.proto", GRE_ARUBA_8260, ieee80211_handle);
28537 dissector_add_uint("gre.proto", GRE_ARUBA_8270, ieee80211_handle);
28538 dissector_add_uint("gre.proto", GRE_ARUBA_8280, ieee80211_handle);
28539 dissector_add_uint("gre.proto", GRE_ARUBA_8290, ieee80211_handle);
28540 dissector_add_uint("gre.proto", GRE_ARUBA_82A0, ieee80211_handle);
28541 dissector_add_uint("gre.proto", GRE_ARUBA_82B0, ieee80211_handle);
28542 dissector_add_uint("gre.proto", GRE_ARUBA_82C0, ieee80211_handle);
28543 dissector_add_uint("gre.proto", GRE_ARUBA_82D0, ieee80211_handle);
28544 dissector_add_uint("gre.proto", GRE_ARUBA_82E0, ieee80211_handle);
28545 dissector_add_uint("gre.proto", GRE_ARUBA_82F0, ieee80211_handle);
28546 dissector_add_uint("gre.proto", GRE_ARUBA_8300, ieee80211_handle);
28547 dissector_add_uint("gre.proto", GRE_ARUBA_8310, ieee80211_handle);
28548 dissector_add_uint("gre.proto", GRE_ARUBA_8320, ieee80211_handle);
28549 dissector_add_uint("gre.proto", GRE_ARUBA_8330, ieee80211_handle);
28550 dissector_add_uint("gre.proto", GRE_ARUBA_8340, ieee80211_handle);
28551 dissector_add_uint("gre.proto", GRE_ARUBA_8350, ieee80211_handle);
28552 dissector_add_uint("gre.proto", GRE_ARUBA_8360, ieee80211_handle);
28553 dissector_add_uint("gre.proto", GRE_ARUBA_8370, ieee80211_handle);
28555 data_encap_handle = create_dissector_handle(dissect_data_encap, proto_wlan);
28556 dissector_add_uint("ethertype", ETHERTYPE_IEEE80211_DATA_ENCAP,
28557 data_encap_handle);
28560 * EAPOL key descriptor types.
28562 wlan_rsna_eapol_wpa_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
28563 proto_wlan_rsna_eapol);
28564 dissector_add_uint("eapol.keydes.type", EAPOL_WPA_KEY, wlan_rsna_eapol_wpa_key_handle);
28565 wlan_rsna_eapol_rsn_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
28566 proto_wlan_rsna_eapol);
28567 dissector_add_uint("eapol.keydes.type", EAPOL_RSN_KEY, wlan_rsna_eapol_rsn_key_handle);
28569 dissector_add_uint("sflow_245.header_protocol", SFLOW_5_HEADER_80211_MAC, wlan_withoutfcs_handle);
28571 /* Tagged fields */
28572 /* XXX - for now, do it without pinos so the protocol is -1 */
28573 dissector_add_uint("wlan.tag.number", TAG_SSID, create_dissector_handle(ieee80211_tag_ssid, -1));
28574 dissector_add_uint("wlan.tag.number", TAG_SUPP_RATES, create_dissector_handle(ieee80211_tag_supp_rates, -1));
28575 dissector_add_uint("wlan.tag.number", TAG_FH_PARAMETER, create_dissector_handle(ieee80211_tag_fh_parameter, -1));
28576 dissector_add_uint("wlan.tag.number", TAG_DS_PARAMETER, create_dissector_handle(ieee80211_tag_ds_parameter, -1));
28577 dissector_add_uint("wlan.tag.number", TAG_CF_PARAMETER, create_dissector_handle(ieee80211_tag_cf_parameter, -1));
28578 dissector_add_uint("wlan.tag.number", TAG_TIM, create_dissector_handle(ieee80211_tag_tim, -1));
28579 dissector_add_uint("wlan.tag.number", TAG_IBSS_PARAMETER, create_dissector_handle(ieee80211_tag_ibss_parameter, -1));
28580 dissector_add_uint("wlan.tag.number", TAG_COUNTRY_INFO, create_dissector_handle(ieee80211_tag_country_info, -1));
28581 dissector_add_uint("wlan.tag.number", TAG_FH_HOPPING_PARAMETER, create_dissector_handle(ieee80211_tag_fh_hopping_parameter, -1));
28582 dissector_add_uint("wlan.tag.number", TAG_FH_HOPPING_TABLE, create_dissector_handle(ieee80211_tag_fh_hopping_table, -1));
28583 dissector_add_uint("wlan.tag.number", TAG_REQUEST, create_dissector_handle(ieee80211_tag_request, -1));
28584 dissector_add_uint("wlan.tag.number", TAG_QBSS_LOAD, create_dissector_handle(ieee80211_tag_qbss_load, -1));
28585 dissector_add_uint("wlan.tag.number", TAG_EDCA_PARAM_SET, create_dissector_handle(ieee80211_tag_edca_param_set, -1));
28586 dissector_add_uint("wlan.tag.number", TAG_TSPEC, create_dissector_handle(ieee80211_tag_tspec, -1));
28587 dissector_add_uint("wlan.tag.number", TAG_TCLAS, create_dissector_handle(ieee80211_tag_tclas, -1));
28588 dissector_add_uint("wlan.tag.number", TAG_SCHEDULE, create_dissector_handle(ieee80211_tag_schedule, -1));
28589 dissector_add_uint("wlan.tag.number", TAG_CHALLENGE_TEXT, create_dissector_handle(ieee80211_tag_challenge_text, -1));
28590 dissector_add_uint("wlan.tag.number", TAG_POWER_CONSTRAINT, create_dissector_handle(ieee80211_tag_power_constraint, -1));
28591 dissector_add_uint("wlan.tag.number", TAG_POWER_CAPABILITY, create_dissector_handle(ieee80211_tag_power_capability, -1));
28592 dissector_add_uint("wlan.tag.number", TAG_TPC_REQUEST, create_dissector_handle(ieee80211_tag_tpc_request, -1));
28593 dissector_add_uint("wlan.tag.number", TAG_TPC_REPORT, create_dissector_handle(ieee80211_tag_tpc_report, -1));
28594 dissector_add_uint("wlan.tag.number", TAG_SUPPORTED_CHANNELS, create_dissector_handle(ieee80211_tag_supported_channels, -1));
28595 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_ANN, create_dissector_handle(ieee80211_tag_switch_ann, -1));
28596 dissector_add_uint("wlan.tag.number", TAG_MEASURE_REQ, create_dissector_handle(ieee80211_tag_measure_req, -1));
28597 dissector_add_uint("wlan.tag.number", TAG_MEASURE_REP, create_dissector_handle(ieee80211_tag_measure_rep, -1));
28598 dissector_add_uint("wlan.tag.number", TAG_QUIET, create_dissector_handle(ieee80211_tag_quiet, -1));
28599 dissector_add_uint("wlan.tag.number", TAG_IBSS_DFS, create_dissector_handle(ieee80211_tag_ibss_dfs, -1));
28600 dissector_add_uint("wlan.tag.number", TAG_ERP_INFO, create_dissector_handle(ieee80211_tag_erp_info, -1));
28601 dissector_add_uint("wlan.tag.number", TAG_ERP_INFO_OLD, create_dissector_handle(ieee80211_tag_erp_info, -1));
28602 dissector_add_uint("wlan.tag.number", TAG_TS_DELAY, create_dissector_handle(ieee80211_tag_ts_delay, -1));
28603 dissector_add_uint("wlan.tag.number", TAG_TCLAS_PROCESS, create_dissector_handle(ieee80211_tag_tclas_process, -1));
28604 dissector_add_uint("wlan.tag.number", TAG_QOS_CAPABILITY, create_dissector_handle(ieee80211_tag_qos_capability, -1));
28605 dissector_add_uint("wlan.tag.number", TAG_RSN_IE, create_dissector_handle(ieee80211_tag_rsn_ie, -1));
28606 dissector_add_uint("wlan.tag.number", TAG_EXT_SUPP_RATES, create_dissector_handle(ieee80211_tag_ext_supp_rates, -1));
28607 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_CAPABILITIES, create_dissector_handle(dissect_extended_capabilities_ie, -1));
28608 dissector_add_uint("wlan.tag.number", TAG_CISCO_CCX1_CKIP, create_dissector_handle(ieee80211_tag_cisco_ccx1_ckip, -1));
28609 dissector_add_uint("wlan.tag.number", TAG_VHT_CAPABILITY, create_dissector_handle(dissect_vht_capability_ie, -1));
28610 dissector_add_uint("wlan.tag.number", TAG_VHT_OPERATION, create_dissector_handle(dissect_vht_operation_ie, -1));
28611 dissector_add_uint("wlan.tag.number", TAG_EXT_BSS_LOAD, create_dissector_handle(dissect_ext_bss_load, -1));
28612 dissector_add_uint("wlan.tag.number", TAG_WIDE_BW_CHANNEL_SWITCH, create_dissector_handle(dissect_wide_bw_channel_switch, -1));
28613 dissector_add_uint("wlan.tag.number", TAG_VHT_TX_PWR_ENVELOPE, create_dissector_handle(dissect_vht_tx_pwr_envelope, -1));
28614 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_WRAPPER, create_dissector_handle(dissect_channel_switch_wrapper, -1));
28615 dissector_add_uint("wlan.tag.number", TAG_OPERATING_MODE_NOTIFICATION, create_dissector_handle(dissect_operating_mode_notification, -1));
28616 /* 7.3.2.26 Vendor Specific information element (221) */
28617 dissector_add_uint("wlan.tag.number", TAG_VENDOR_SPECIFIC_IE, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
28618 /* This Cisco proprietary IE seems to mimic 221 */
28619 dissector_add_uint("wlan.tag.number", TAG_CISCO_VENDOR_SPECIFIC, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
28620 /* This Symbol proprietary IE seems to mimic 221 */
28621 dissector_add_uint("wlan.tag.number", TAG_SYMBOL_PROPRIETARY, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
28622 dissector_add_uint("wlan.tag.number", TAG_MOBILITY_DOMAIN, create_dissector_handle(dissect_mobility_domain, -1));
28623 dissector_add_uint("wlan.tag.number", TAG_FAST_BSS_TRANSITION, create_dissector_handle(dissect_fast_bss_transition, -1));
28624 dissector_add_uint("wlan.tag.number", TAG_MMIE, create_dissector_handle(dissect_mmie, -1));
28625 dissector_add_uint("wlan.tag.number", TAG_SSID_LIST, create_dissector_handle(dissect_ssid_list, -1));
28626 dissector_add_uint("wlan.tag.number", TAG_TIME_ZONE, create_dissector_handle(dissect_time_zone, -1));
28627 dissector_add_uint("wlan.tag.number", TAG_TIMEOUT_INTERVAL, create_dissector_handle(dissect_timeout_interval, -1));
28628 dissector_add_uint("wlan.tag.number", TAG_RIC_DATA, create_dissector_handle(dissect_ric_data, -1));
28629 dissector_add_uint("wlan.tag.number", TAG_LINK_IDENTIFIER, create_dissector_handle(dissect_link_identifier, -1));
28630 dissector_add_uint("wlan.tag.number", TAG_WAKEUP_SCHEDULE, create_dissector_handle(dissect_wakeup_schedule, -1));
28631 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_TIMING, create_dissector_handle(dissect_channel_switch_timing, -1));
28632 dissector_add_uint("wlan.tag.number", TAG_PTI_CONTROL, create_dissector_handle(dissect_pti_control, -1));
28633 dissector_add_uint("wlan.tag.number", TAG_PU_BUFFER_STATUS, create_dissector_handle(dissect_pu_buffer_status, -1));
28634 dissector_add_uint("wlan.tag.number", TAG_HT_CAPABILITY, create_dissector_handle(dissect_ht_capability_ie, -1));
28635 dissector_add_uint("wlan.tag.number", TAG_HT_INFO, create_dissector_handle(dissect_ht_info_ie_1_1, -1));
28636 dissector_add_uint("wlan.tag.number", TAG_SECONDARY_CHANNEL_OFFSET, create_dissector_handle(dissect_secondary_channel_offset_ie, -1));
28637 dissector_add_uint("wlan.tag.number", TAG_BSS_AVG_ACCESS_DELAY, create_dissector_handle(dissect_bss_avg_access_delay_ie, -1));
28638 dissector_add_uint("wlan.tag.number", TAG_ANTENNA, create_dissector_handle(dissect_antenna_ie, -1));
28639 dissector_add_uint("wlan.tag.number", TAG_RSNI, create_dissector_handle(dissect_rsni_ie, -1));
28640 dissector_add_uint("wlan.tag.number", TAG_BSS_AVB_ADM_CAPACITY, create_dissector_handle(dissect_bss_available_admission_capacity_ie, -1));
28641 dissector_add_uint("wlan.tag.number", TAG_IE_68_CONFLICT, create_dissector_handle(ieee80211_tag_ie_68_conflict, -1));
28642 dissector_add_uint("wlan.tag.number", TAG_BSS_MAX_IDLE_PERIOD, create_dissector_handle(dissect_bss_max_idle_period, -1));
28643 dissector_add_uint("wlan.tag.number", TAG_TFS_REQUEST, create_dissector_handle(dissect_tfs_request, -1));
28644 dissector_add_uint("wlan.tag.number", TAG_TFS_RESPONSE, create_dissector_handle(dissect_tfs_response, -1));
28645 dissector_add_uint("wlan.tag.number", TAG_WNM_SLEEP_MODE, create_dissector_handle(dissect_wnm_sleep_mode, -1));
28646 dissector_add_uint("wlan.tag.number", TAG_TIME_ADV, create_dissector_handle(dissect_time_adv, -1));
28647 dissector_add_uint("wlan.tag.number", TAG_RM_ENABLED_CAPABILITY, create_dissector_handle(dissect_rm_enabled_capabilities_ie, -1));
28648 dissector_add_uint("wlan.tag.number", TAG_20_40_BSS_CO_EX, create_dissector_handle(dissect_20_40_bss_coexistence, -1));
28649 dissector_add_uint("wlan.tag.number", TAG_OVERLAP_BSS_SCAN_PAR, create_dissector_handle(dissect_overlap_bss_scan_par, -1));
28650 dissector_add_uint("wlan.tag.number", TAG_RIC_DESCRIPTOR, create_dissector_handle(dissect_ric_descriptor, -1));
28651 dissector_add_uint("wlan.tag.number", TAG_MESH_PEERING_MGMT, create_dissector_handle(ieee80211_tag_mesh_peering_mgmt, -1));
28652 dissector_add_uint("wlan.tag.number", TAG_MESH_CONFIGURATION, create_dissector_handle(ieee80211_tag_mesh_configuration, -1));
28653 dissector_add_uint("wlan.tag.number", TAG_MESH_ID, create_dissector_handle(ieee80211_tag_mesh_id, -1));
28654 dissector_add_uint("wlan.tag.number", TAG_MESH_PREQ, create_dissector_handle(ieee80211_tag_mesh_preq, -1));
28655 dissector_add_uint("wlan.tag.number", TAG_MESH_PREP, create_dissector_handle(ieee80211_tag_mesh_prep, -1));
28656 dissector_add_uint("wlan.tag.number", TAG_MESH_PERR, create_dissector_handle(ieee80211_tag_mesh_perr, -1));
28657 dissector_add_uint("wlan.tag.number", TAG_RANN, create_dissector_handle(ieee80211_tag_rann, -1));
28658 dissector_add_uint("wlan.tag.number", TAG_MESH_CHANNEL_SWITCH, create_dissector_handle(ieee80211_tag_mesh_channel_switch, -1));
28659 dissector_add_uint("wlan.tag.number", TAG_INTERWORKING, create_dissector_handle(dissect_interworking, -1));
28660 dissector_add_uint("wlan.tag.number", TAG_ADVERTISEMENT_PROTOCOL, create_dissector_handle(dissect_advertisement_protocol, -1));
28661 dissector_add_uint("wlan.tag.number", TAG_QOS_MAP_SET, create_dissector_handle(dissect_qos_map_set, -1));
28662 dissector_add_uint("wlan.tag.number", TAG_ROAMING_CONSORTIUM, create_dissector_handle(dissect_roaming_consortium, -1));
28663 dissector_add_uint("wlan.tag.number", TAG_AP_CHANNEL_REPORT, create_dissector_handle(dissect_ap_channel_report, -1));
28664 dissector_add_uint("wlan.tag.number", TAG_NEIGHBOR_REPORT, create_dissector_handle(dissect_neighbor_report, -1));
28665 dissector_add_uint("wlan.tag.number", TAG_MESH_AWAKE_WINDOW, create_dissector_handle(ieee80211_tag_mesh_awake_window, -1));
28666 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT, create_dissector_handle(ieee80211_tag_channel_switch_announcement, -1));
28667 dissector_add_uint("wlan.tag.number", TAG_SUPPORTED_OPERATING_CLASSES, create_dissector_handle(ieee80211_tag_supported_operating_classes, -1));
28668 dissector_add_uint("wlan.tag.number", TAG_RELAY_CAPABILITIES, create_dissector_handle(add_tag_relay_capabilities, -1));
28669 dissector_add_uint("wlan.tag.number", TAG_DMG_BSS_PARAMETER_CHANGE, create_dissector_handle(ieee80211_tag_bss_parameter_change, -1));
28670 dissector_add_uint("wlan.tag.number", TAG_DMG_CAPABILITIES, create_dissector_handle(ieee80211_tag_dmg_capabilities, -1));
28671 dissector_add_uint("wlan.tag.number", TAG_DMG_OPERATION, create_dissector_handle(ieee80211_tag_dmg_operation, -1));
28672 dissector_add_uint("wlan.tag.number", TAG_ANTENNA_SECTOR_ID, create_dissector_handle(ieee80211_tag_antenna_section_id, -1));
28673 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_SCHEDULE, create_dissector_handle(ieee80211_tag_extended_schedule, -1));
28674 dissector_add_uint("wlan.tag.number", TAG_STA_AVAILABILITY, create_dissector_handle(ieee80211_tag_sta_availability, -1));
28675 dissector_add_uint("wlan.tag.number", TAG_NEXT_DMG_ATI, create_dissector_handle(ieee80211_tag_next_dmg_ati, -1));
28676 dissector_add_uint("wlan.tag.number", TAG_NEXTPCP_LIST, create_dissector_handle(ieee80211_tag_nextpcp_list, -1));
28677 dissector_add_uint("wlan.tag.number", TAG_PCP_HANDOVER, create_dissector_handle(ieee80211_tag_pcp_handover, -1));
28678 dissector_add_uint("wlan.tag.number", TAG_BEAMLINK_MAINTENANCE, create_dissector_handle(ieee80211_tag_beamlink_maintenance, -1));
28679 dissector_add_uint("wlan.tag.number", TAG_QUIET_PERIOD_RES, create_dissector_handle(ieee80211_tag_quiet_period_res, -1));
28680 dissector_add_uint("wlan.tag.number", TAG_RELAY_TRANSFER_PARAM, create_dissector_handle(ieee80211_tag_relay_transfer_param, -1));
28681 dissector_add_uint("wlan.tag.number", TAG_DMG_BEAM_REFINEMENT, create_dissector_handle(ieee80211_tag_dmg_beam_refinement, -1));
28682 dissector_add_uint("wlan.tag.number", TAG_WAKEUP_SCHEDULE_AD, create_dissector_handle(ieee80211_tag_wakeup_schedule_ad, -1));
28683 dissector_add_uint("wlan.tag.number", TAG_DMG_TSPEC, create_dissector_handle(ieee80211_tag_dmg_tspec, -1));
28684 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_MEASURMENT_FB, create_dissector_handle(ieee80211_tag_channel_measurement_fb, -1));
28685 dissector_add_uint("wlan.tag.number", TAG_AWAKE_WINDOW, create_dissector_handle(ieee80211_tag_awake_window, -1));
28686 dissector_add_uint("wlan.tag.number", TAG_ADDBA_EXT, create_dissector_handle(ieee80211_tag_addba_ext, -1));
28687 dissector_add_uint("wlan.tag.number", TAG_MULTI_BAND, create_dissector_handle(ieee80211_tag_multi_band, -1));
28688 dissector_add_uint("wlan.tag.number", TAG_DMG_LINK_MARGIN, create_dissector_handle(ieee80211_tag_dmg_link_margin, -1));
28689 dissector_add_uint("wlan.tag.number", TAG_DMG_LINK_ADAPTION_ACK, create_dissector_handle(ieee80211_tag_dmg_link_adaption_ack, -1));
28690 dissector_add_uint("wlan.tag.number", TAG_SWITCHING_STREAM, create_dissector_handle(ieee80211_tag_switching_stream, -1));
28692 /* Vendor specific actions */
28693 dissector_add_uint("wlan.action.vendor_specific", OUI_MARVELL, create_dissector_handle(dissect_vendor_action_marvell, -1));
28694 dissector_add_uint("wlan.action.vendor_specific", OUI_WFA, create_dissector_handle(dissect_vendor_action_wifi_alliance, -1));
28696 dissector_add_uint("wlan.anqp.vendor_specific", OUI_WFA, create_dissector_handle(dissect_vendor_wifi_alliance_anqp, -1));
28697 dissector_add_uint("wlan.anqp.wifi_alliance.subtype", WFA_SUBTYPE_HS20_ANQP, create_dissector_handle(dissect_hs20_anqp, -1));
28698 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_HS20_INDICATION, create_dissector_handle(dissect_hs20_indication, -1));
28706 * c-basic-offset: 2
28708 * indent-tabs-mode: nil
28711 * ex: set shiftwidth=2 tabstop=8 expandtab:
28712 * :indentSize=2:tabSize=8:noTabs=true: