Bug Summary

File:epan/dissectors/packet-ieee80211.c
Warning:line 37357, column 5
Value stored to 'offset' is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name packet-ieee80211.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -ffloat16-excess-precision=fast -fbfloat16-excess-precision=fast -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/builds/wireshark/wireshark/build -fcoverage-compilation-dir=/builds/wireshark/wireshark/build -resource-dir /usr/lib/llvm-21/lib/clang/21 -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /builds/wireshark/wireshark/epan/dissectors -isystem /builds/wireshark/wireshark/build/epan/dissectors -isystem /usr/include/mit-krb5 -isystem /usr/include/libxml2 -isystem /builds/wireshark/wireshark/epan -D G_DISABLE_DEPRECATED -D G_DISABLE_SINGLE_INCLUDES -D WS_BUILD_DLL -D WS_DEBUG -D WS_DEBUG_UTF_8 -I /builds/wireshark/wireshark/build -I /builds/wireshark/wireshark -I /builds/wireshark/wireshark/include -D _GLIBCXX_ASSERTIONS -internal-isystem /usr/lib/llvm-21/lib/clang/21/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fmacro-prefix-map=/builds/wireshark/wireshark/= -fmacro-prefix-map=/builds/wireshark/wireshark/build/= -fmacro-prefix-map=../= -Wno-format-nonliteral -std=gnu11 -ferror-limit 19 -fvisibility=hidden -fwrapv -fwrapv-pointer -fstrict-flex-arrays=3 -stack-protector 2 -fstack-clash-protection -fcf-protection=full -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fexceptions -fcolor-diagnostics -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /builds/wireshark/wireshark/sbout/2025-12-05-100328-3573-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-ieee80211.c
1/* packet-ieee80211.c
2 * Routines for Wireless LAN (IEEE 802.11) dissection
3 * Copyright 2000, Axis Communications AB
4 *
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
8 *
9 * SPDX-License-Identifier: GPL-2.0-or-later
10 *
11 * Credits:
12 *
13 * The following people helped me by pointing out bugs etc. Thank you!
14 *
15 * Marco Molteni
16 * Lena-Marie Nilsson
17 * Magnus Hultman-Persson
18 */
19
20/*
21 * 10/24/2005 - Add dissection for 802.11e
22 * Zhu Yi <yi.zhu@intel.com>
23 *
24 * 04/21/2008 - Added dissection for 802.11p
25 * Arada Systems <http://www.aradasystems.com>
26 *
27 * 04/20/2013 - Added dissection of 802.11ad according to the 9th draft of the standard.
28 * Extended as a project in the Laboratory of Computer Communication & Networking (LCCN), Computer Science Department, Technion, Israel.
29 * Majd Omari <majd.omari@outlook.com>
30 * Jalil Moraney <moraney.jalil@outlook.com>
31 */
32
33/*
34 * Reference :
35 * The 802.11 standard is "free", 6 month after the publication.
36 *
37 * IEEE Std 802.11-2020: Revision of IEEE Std 802.11-2016
38 * include 5 amendments (802.11ai,ah,aj,ak,aq) 802.11-2016
39 * include 5 amendments (802.11ae,aa,ad,ac,af) 802.11-2012
40 * include 10 amendments (802.11k,r,y,w,n,p,z,v,u,s) 802.11-2007
41 * include 8 amendments (802.11a,b,d,e,g,h,i,j) 802.11-1999
42 * https://ieeexplore.ieee.org/document/9502043
43 *
44 * WAPI (IE 68)
45 * http://isotc.iso.org/livelink/livelink/fetch/-8913189/8913214/8913250/8913253/JTC001-N-9880.pdf?nodeid=8500308&vernum=-2
46 */
47
48#include "config.h"
49
50#include <math.h>
51
52#include <epan/packet.h>
53#include <epan/capture_dissectors.h>
54#include <epan/exceptions.h>
55#include <wsutil/pint.h>
56#include <wsutil/ws_roundup.h>
57#include <epan/addr_resolv.h>
58#include <epan/address_types.h>
59#include <epan/strutil.h>
60#include <epan/prefs.h>
61#include <epan/reassemble.h>
62#include "packet-eapol.h"
63#include "packet-ieee80211.h"
64#include <epan/etypes.h>
65#include <epan/oui.h>
66#include <epan/crc32-tvb.h>
67#include <epan/crypt/wep-wpadefs.h>
68#include <epan/expert.h>
69#include <epan/conversation_table.h>
70#include <epan/uat.h>
71#include <epan/proto_data.h>
72#include <epan/tfs.h>
73#include <epan/unit_strings.h>
74#include <wsutil/array.h>
75#include <wsutil/bits_ctz.h>
76
77#include "packet-wps.h"
78#include "packet-e212.h"
79#include "packet-sflow.h"
80#include "packet-gre.h"
81
82#include <epan/crypt/dot11decrypt_ws.h>
83
84void proto_register_ieee80211(void);
85void proto_reg_handoff_ieee80211(void);
86void proto_register_wlan_rsna_eapol(void);
87
88static dissector_handle_t centrino_handle;
89
90typedef struct {
91 DOT11DECRYPT_KEY_ITEM used_key;
92 unsigned keydata_len;
93 uint8_t *keydata;
94} proto_keydata_t;
95
96extern value_string_ext eap_type_vals_ext; /* from packet-eap.c */
97
98/* TUs are used a lot in 802.11 ... */
99static const unit_name_string units_tu_tus = { "TU", "TUs" };
100
101/* DIs are also used */
102static const unit_name_string units_di_dis = { "DI", "DIs" };
103
104/* az min/max time units */
105static const unit_name_string units_100_us = { " times 100 microseconds", NULL((void*)0) };
106static const unit_name_string units_10_ms = { " times 10 milliseconds", NULL((void*)0) };
107
108#define IS_2_4_GHZ(freq)(freq >= 2400 && freq <= 2500) (freq >= 2400 && freq <= 2500)
109#define IS_5PLUSGHZ(freq) (freq >= 5000) GHZ(freq) (freq >= 5000)
110#define IS_6_GHZ(freq)(freq >= 5955) (freq >= 5955)
111
112/*
113 * We keep STA properties here, like whether they are S1G STAs or DMG STAs.
114 * This is based on looking at BEACONs, or perhaps from the radiotap header
115 * if we get one.
116 */
117static wmem_map_t *sta_prop_hash;
118
119/*
120 * Not sure that they can be both, so are bit values wanted?
121 */
122#define STA_IS_S1G0x00000001 0x00000001
123#define STA_IS_DMG0x00000002 0x00000002
124
125/*
126 * Add the top three bytes of the STA address to the bottom three bytes
127 */
128static unsigned
129sta_prop_hash_fn(const void *k)
130{
131 return wmem_strong_hash((const uint8_t *)k, 6);
132}
133
134static gboolean
135sta_prop_equal_fn(const void *v, const void *w)
136{
137 const uint8_t *k1 = (const uint8_t *)v;
138 const uint8_t *k2 = (const uint8_t *)w;
139
140 return memcmp(k1, k2, 6) == 0; /* Compare each address for equality */
141}
142
143/* bitmask for bits [l..h]
144 * taken from kernel's include/linux/bitops.h
145 */
146#define GENMASK(h, l)(((1U << ((h) - (l) + 1)) - 1) << (l)) (((1U << ((h) - (l) + 1)) - 1) << (l))
147#define GENMASK64(h, l)(((1UL << ((h) - (l) + 1)) - 1) << (l)) (((UINT64_C(1)1UL << ((h) - (l) + 1)) - 1) << (l))
148
149/* Defragment fragmented 802.11 datagrams */
150static bool_Bool wlan_defragment = true1;
151
152/* call subdissector for retransmitted frames */
153static bool_Bool wlan_subdissector = true1;
154
155/* Check for the presence of the 802.11 FCS */
156static bool_Bool wlan_check_fcs;
157
158/* Check the FCS checksum */
159static bool_Bool wlan_check_checksum;
160
161/* Ignore vendor-specific HT elements */
162static bool_Bool wlan_ignore_draft_ht;
163
164/* Ignore the Protection bit; assume packet is decrypted */
165#define WLAN_IGNORE_PROT_NO0 0
166#define WLAN_IGNORE_PROT_WO_IV1 1
167#define WLAN_IGNORE_PROT_W_IV2 2
168static int wlan_ignore_prot = WLAN_IGNORE_PROT_NO0;
169
170/* The Key MIC len has been set by the user */
171static bool_Bool wlan_key_mic_len_enable;
172static unsigned wlan_key_mic_len;
173
174/* Counter incremented on each (re)association
175 * This value will be assigned to each packet's pinfo->srcport/pinfo->destport
176 * as a way to uniquely make a one to one mapping between conversations and
177 * associations
178 */
179static uint32_t association_counter;
180/* association_counter is assigned in authentication for AKM 24/MLD */
181static uint32_t assoc_counter_in_auth;
182
183/* Treat all Wi-Fi frames as being S1G frames where it is important */
184static bool_Bool treat_as_s1g;
185
186/* Table for reassembly of fragments. */
187static reassembly_table wlan_reassembly_table;
188
189/* Statistical data */
190static struct _wlan_stats wlan_stats;
191
192/*-------------------------------------
193 * UAT for WEP decoder
194 *-------------------------------------
195 */
196static uat_wep_key_record_t *uat_wep_key_records;
197static uat_t *wep_uat;
198static unsigned num_wepkeys_uat;
199
200static void *
201uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U___attribute__((unused)))
202{
203 uat_wep_key_record_t* new_key = (uat_wep_key_record_t *)n;
204 const uat_wep_key_record_t* old_key = (const uat_wep_key_record_t *)o;
205
206 new_key->string = g_strdup(old_key->string)g_strdup_inline (old_key->string);
207
208 return new_key;
209}
210
211static bool_Bool
212uat_wep_key_record_update_cb(void* r, char** err)
213{
214 uat_wep_key_record_t* rec = (uat_wep_key_record_t *)r;
215 decryption_key_t* dk;
216 unsigned dk_type;
217
218 if (rec->string == NULL((void*)0)) {
219 *err = g_strdup("Key can't be blank")g_strdup_inline ("Key can't be blank");
220 return false0;
221 }
222
223 *err = NULL((void*)0);
224 g_strstrip(rec->string)g_strchomp (g_strchug (rec->string));
225 dk = parse_key_string(rec->string, rec->key, err);
226
227 if (dk != NULL((void*)0)) {
228 dk_type = dk->type;
229 free_key_string(dk);
230 switch (dk_type) {
231 case DOT11DECRYPT_KEY_TYPE_WEP0:
232 case DOT11DECRYPT_KEY_TYPE_WEP_401:
233 case DOT11DECRYPT_KEY_TYPE_WEP_1042:
234 if (rec->key != DOT11DECRYPT_KEY_TYPE_WEP0) {
235 *err = g_strdup("Invalid WEP key format")g_strdup_inline ("Invalid WEP key format");
236 return false0;
237 }
238 break;
239 case DOT11DECRYPT_KEY_TYPE_WPA_PWD3:
240 if (rec->key != DOT11DECRYPT_KEY_TYPE_WPA_PWD3) {
241 *err = g_strdup("Invalid WPA_PWD key format")g_strdup_inline ("Invalid WPA_PWD key format");
242 return false0;
243 }
244 break;
245 case DOT11DECRYPT_KEY_TYPE_WPA_PSK4:
246 if (rec->key != DOT11DECRYPT_KEY_TYPE_WPA_PSK4) {
247 *err = g_strdup("Invalid WPA_PSK key format")g_strdup_inline ("Invalid WPA_PSK key format");
248 return false0;
249 }
250 break;
251 case DOT11DECRYPT_KEY_TYPE_TK6:
252 if (rec->key != DOT11DECRYPT_KEY_TYPE_TK6) {
253 *err = g_strdup("Invalid TK key format")g_strdup_inline ("Invalid TK key format");
254 return false0;
255 }
256 break;
257 case DOT11DECRYPT_KEY_TYPE_MSK7:
258 if (rec->key != DOT11DECRYPT_KEY_TYPE_MSK7) {
259 *err = g_strdup("Invalid MSK key format")g_strdup_inline ("Invalid MSK key format");
260 return false0;
261 }
262 break;
263 default:
264 *err = g_strdup("Invalid key format")g_strdup_inline ("Invalid key format");
265 return false0;
266 }
267 } else {
268 if (*err == NULL((void*)0)) {
269 *err = g_strdup("Invalid key format")g_strdup_inline ("Invalid key format");
270 }
271 return false0;
272 }
273 return true1;
274}
275
276static void
277uat_wep_key_record_free_cb(void*r)
278{
279 uat_wep_key_record_t* key = (uat_wep_key_record_t *)r;
280 g_free(key->string);
281}
282
283UAT_VS_DEF(uat_wep_key_records, key, uat_wep_key_record_t, uint8_t, 0, STRING_KEY_TYPE_WEP)static void uat_wep_key_records_key_set_cb(void* rec, const char
* buf, unsigned len, const void* vs, const void* u2 __attribute__
((unused))) { unsigned i; char* str = g_strndup(buf,len); const
char* cstr; ((uat_wep_key_record_t*)rec)->key = 0; for(i=
0; ( cstr = ((const value_string*)vs)[i].strptr ) ;i++) { if (
(strcmp ((const char *) (cstr), (const char *) (str)) == 0)) {
((uat_wep_key_record_t*)rec)->key = (uint8_t)((const value_string
*)vs)[i].value; g_free(str); return; } } g_free(str); } static
void uat_wep_key_records_key_tostr_cb(void* rec, char** out_ptr
, unsigned* out_len, const void* vs, const void* u2 __attribute__
((unused))) { unsigned i; for(i=0;((const value_string*)vs)[i
].strptr;i++) { if ( ((const value_string*)vs)[i].value == ((
uat_wep_key_record_t*)rec)->key ) { *out_ptr = g_strdup_inline
(((const value_string*)vs)[i].strptr); *out_len = (unsigned)
strlen(*out_ptr); return; } } *out_ptr = g_strdup_inline ("wep"
); *out_len = (unsigned)strlen("wep"); }
284UAT_CSTRING_CB_DEF(uat_wep_key_records, string, uat_wep_key_record_t)static void uat_wep_key_records_string_set_cb(void* rec, const
char* buf, unsigned len, const void* u1 __attribute__((unused
)), const void* u2 __attribute__((unused))) { char* new_buf =
g_strndup(buf,len); g_free((((uat_wep_key_record_t*)rec)->
string)); (((uat_wep_key_record_t*)rec)->string) = new_buf
; } static void uat_wep_key_records_string_tostr_cb(void* rec
, char** out_ptr, unsigned* out_len, const void* u1 __attribute__
((unused)), const void* u2 __attribute__((unused))) { if (((uat_wep_key_record_t
*)rec)->string ) { *out_ptr = g_strdup_inline ((((uat_wep_key_record_t
*)rec)->string)); *out_len = (unsigned)strlen((((uat_wep_key_record_t
*)rec)->string)); } else { *out_ptr = g_strdup_inline ("")
; *out_len = 0; } }
285
286/* Stuff for the WEP/WPA/WPA2 decoder */
287static bool_Bool enable_decryption = true1;
288
289static void
290ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
291 proto_tree *tree, int tagged_parameters_len, int ftype,
292 association_sanity_check_t *association_sanity_check);
293
294
295static void
296save_proto_data(tvbuff_t *tvb, packet_info *pinfo, int offset, size_t size, int key);
297
298static void
299save_proto_data_value(packet_info *pinfo, unsigned value, int key);
300
301static void try_scan_tdls_keys(tvbuff_t *tvb, packet_info *pinfo, int offset);
302
303static void try_scan_ft_assoc_keys(packet_info *pinfo, const wlan_hdr_t *whdr);
304
305static tvbuff_t *
306try_decrypt(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, unsigned len,
307 uint8_t *algorithm, uint32_t *sec_trailer,
308 PDOT11DECRYPT_KEY_ITEM used_key);
309
310static int weak_iv(unsigned char *iv);
311
312typedef struct mimo_control
313{
314 uint8_t nc;
315 uint8_t nr;
316 bool_Bool chan_width;
317 uint8_t grouping;
318 uint8_t coefficient_size;
319 uint8_t codebook_info;
320 uint8_t remaining_matrix_segment;
321} mimo_control_t;
322
323/* ************************************************************************* */
324/* Miscellaneous Constants */
325/* ************************************************************************* */
326#define SHORT_STR256 256
327
328typedef enum {
329 IS_DMG_KEY = 1,
330 IS_AP_KEY,
331 IS_CTRL_GRANT_OR_GRANT_ACK_KEY,
332 IS_S1G_KEY,
333 DECRYPTED_EAPOL_KEY,
334 DECRYPTED_GTK_KEY,
335 PACKET_DATA_KEY,
336 ASSOC_COUNTER_KEY,
337 STA_KEY,
338 BSSID_KEY,
339 NONCE_KEY,
340 GROUP_CIPHER_KEY,
341 CIPHER_KEY,
342 AKM_KEY,
343 MIC_KEY,
344 MIC_LEN_KEY,
345 KEY_VERSION_KEY,
346 KEY_LEN_KEY,
347 KEY_IV_KEY,
348 KEY_DATA_KEY,
349 KEY_DATA_LEN_KEY,
350 GTK_KEY,
351 GTK_LEN_KEY,
352 MDID_KEY,
353 FTE_R0KH_ID_KEY,
354 FTE_R0KH_ID_LEN_KEY,
355 FTE_R1KH_ID_KEY,
356 FTE_R1KH_ID_LEN_KEY,
357 FTE_ANONCE_KEY,
358 FTE_SNONCE_KEY,
359 FTE_MIC_KEY,
360 FTE_MIC_LEN_KEY,
361 FTE_TAG_KEY,
362 MDE_TAG_KEY,
363 RSNE_TAG_KEY,
364 RSNXE_TAG_KEY,
365 RDE_TAG_KEY,
366 GTK_SUBELEM_KEY_LEN_KEY,
367 PASN_DATA_KEY,
368 HE_CHANNEL_WIDTH_KEY,
369 FRAME_TYPE_KEY,
370} wlan_proto_key_t;
371
372/* ************************************************************************* */
373/* Define some very useful macros that are used to analyze frame types etc. */
374/* ************************************************************************* */
375
376/*
377 * Fetch the frame control field and swap it if needed. "fcf" and "tvb"
378 * must be valid variables.
379 */
380#define FETCH_FCF(off)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, off)) >> 8) | (guint16) (
(guint16) (tvb_get_letohs(tvb, off)) << 8)))) : tvb_get_letohs
(tvb, off))
((option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001) ? \
381 GUINT16_SWAP_LE_BE(tvb_get_letohs(tvb, off))(((guint16) ( (guint16) ((guint16) (tvb_get_letohs(tvb, off))
>> 8) | (guint16) ((guint16) (tvb_get_letohs(tvb, off)
) << 8))))
: \
382 tvb_get_letohs(tvb, off))
383
384/*
385 * Extract the fragment number and sequence number from the sequence
386 * control field.
387 */
388#define SEQCTL_FRAGMENT_NUMBER(x)((x) & 0x000F) ((x) & 0x000F)
389#define SEQCTL_SEQUENCE_NUMBER(x)(((x) & 0xFFF0) >> 4) (((x) & 0xFFF0) >> 4)
390
391/*
392 * Extract subfields from the QoS control field.
393 */
394#define QOS_TID(x)((x) & 0x000F) ((x) & 0x000F)
395#define QOS_PRIORITY(x)((x) & 0x0007) ((x) & 0x0007)
396#define QOS_EOSP(x)(((x) & 0x0010) >> 4) (((x) & 0x0010) >> 4) /* end of service period */
397#define QOS_ACK_POLICY(x)(((x) & 0x0060) >> 5) (((x) & 0x0060) >> 5)
398#define QOS_AMSDU_PRESENT(x)(((x) & 0x0080) >> 6) (((x) & 0x0080) >> 6)
399#define QOS_FIELD_CONTENT(x)(((x) & 0xFF00) >> 8) (((x) & 0xFF00) >> 8)
400#define QOS_SCALING_FACTOR(x)(((x) & 0xD0) >> 6) (((x) & 0xD0) >> 6)
401#define QOS_UNSCALED_VALUE(x)((x) & 0x3F) ((x) & 0x3F)
402#define QOS_MESH_CONTROL_PRESENT(x)(((x) & 0x0100) >> 8) (((x) & 0x0100) >> 8)
403
404#define QOS_FLAG_EOSP0x0010 0x0010
405
406/*
407 * Extract subfields from the result of QOS_FIELD_CONTENT().
408 */
409#define QOS_PS_BUF_STATE_INDICATED(x)(((x) & 0x02) >> 1) (((x) & 0x02) >> 1)
410#define QOS_PS_HIGHEST_PRI_BUF_AC(x)(((x) & 0x0C) >> 2) (((x) & 0x0C) >> 2)
411#define QOS_PS_QAP_BUF_LOAD(x)(((x) & 0xF0) >> 4) (((x) & 0xF0) >> 4)
412
413/*
414 * Bits from the HT Control field.
415 * 802.11-2016 9.2.4.6, and 802.11ax draft, 32 bits.
416 */
417#define HTC_VHT0x00000001 0x00000001
418#define HTC_HE0x00000002 0x00000002
419#define HTC_MRQ0x00000004 0x00000004
420#define HTC_UNSOLICITED_MFB0x20000000 0x20000000
421
422/*
423 * Extract subfields from the HT Control field.
424 */
425#define HTC_LAC(htc)((htc) & 0xFE) ((htc) & 0xFE)
426#define HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) (((htc) >> 2) & 0xF)
427#define HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE) (HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) == 0xE)
428#define HTC_LAC_MAI_MRQ(htc)(((((htc) >> 2) & 0xF)) & 0x1) ((HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF)) & 0x1)
429#define HTC_LAC_MAI_MSI(htc)(((((htc) >> 2) & 0xF) >> 1) & 0x7) ((HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) >> 1) & 0x7)
430#define HTC_LAC_MFSI(htc)(((htc) >> 4) & 0x7) (((htc) >> 4) & 0x7)
431#define HTC_LAC_ASEL_CMD(htc)(((htc) >> 9) & 0x7) (((htc) >> 9) & 0x7)
432#define HTC_LAC_ASEL_DATA(htc)(((htc) >> 12) & 0xF) (((htc) >> 12) & 0xF)
433#define HTC_LAC_MFB(htc)(((htc) >> 9) & 0x7F) (((htc) >> 9) & 0x7F)
434#define HTC_CAL_POS(htc)(((htc) >> 16) & 0x3) (((htc) >> 16) & 0x3)
435#define HTC_CAL_SEQ(htc)(((htc) >> 18) & 0x3) (((htc) >> 18) & 0x3)
436#define HTC_CSI_STEERING(htc)(((htc) >> 22) & 0x3) (((htc) >> 22) & 0x3)
437#define HTC_NDP_ANN(htc)(((htc) >> 24) & 0x1) (((htc) >> 24) & 0x1)
438#define HTC_AC_CONSTRAINT(htc)(((htc) >> 30) & 0x1) (((htc) >> 30) & 0x1)
439#define HTC_RDG_MORE_PPDU(htc)(((htc) >> 31) & 0x1) (((htc) >> 31) & 0x1)
440
441#define HTC_MFB(htc)(((htc) >> 9) & 0x7FFF) (((htc) >> 9) & 0x7FFF)
442
443/* VHT-MCS = 15, NUM_STS = 7 */
444#define HTC_NO_FEEDBACK_PRESENT(mfb)(((mfb) & 0x7F) == 0x7F) (((mfb) & 0x7F) == 0x7F)
445
446/*
447 * Extract subfields from the key octet in WEP-encrypted frames.
448 */
449#define KEY_OCTET_WEP_KEY(x)(((x) & 0xC0) >> 6) (((x) & 0xC0) >> 6)
450
451#define KEY_EXTIV0x20 0x20
452#define EXTIV_LEN8 8
453
454/*
455 * Bits from the Mesh Flags field
456 */
457#define MESH_FLAGS_ADDRESS_EXTENSION0x3 0x3
458
459/* ************************************************************************* */
460/* Constants used to identify cooked frame types */
461/* ************************************************************************* */
462#define MGT_FRAME0x00 0x00 /* Frame type is management */
463#define CONTROL_FRAME0x01 0x01 /* Frame type is control */
464#define DATA_FRAME0x02 0x02 /* Frame type is Data */
465#define EXTENSION_FRAME0x03 0x03 /* Frame type is Extension */
466
467#define DATA_SHORT_HDR_LEN24 24
468#define DATA_LONG_HDR_LEN30 30
469#define MGT_FRAME_HDR_LEN24 24 /* Length of Management frame-headers */
470
471/* ************************************************************************* */
472/* Logical field codes (IEEE 802.11 encoding of tags) */
473/* ************************************************************************* */
474const value_string ie_tag_num_vals[] = {
475 { TAG_SSID0, "SSID parameter set" },
476 { TAG_SUPP_RATES1, "Supported Rates" },
477 { TAG_FH_PARAMETER2, "FH Parameter set" },
478 { TAG_DS_PARAMETER3, "DS Parameter set" },
479 { TAG_CF_PARAMETER4, "CF Parameter set" },
480 { TAG_TIM5, "Traffic Indication Map (TIM)" },
481 { TAG_IBSS_PARAMETER6, "IBSS Parameter set" },
482 { TAG_COUNTRY_INFO7, "Country Information" },
483 { TAG_FH_HOPPING_PARAMETER8, "Hopping Pattern Parameters" },
484 { TAG_FH_HOPPING_TABLE9, "Hopping Pattern Table" },
485 { TAG_REQUEST10, "Request" },
486 { TAG_QBSS_LOAD11, "QBSS Load Element" },
487 { TAG_EDCA_PARAM_SET12, "EDCA Parameter Set" },
488 { TAG_TSPEC13, "Traffic Specification" },
489 { TAG_TCLAS14, "Traffic Classification" },
490 { TAG_SCHEDULE15, "Schedule" },
491 { TAG_CHALLENGE_TEXT16, "Challenge text" },
492 { TAG_POWER_CONSTRAINT32, "Power Constraint" },
493 { TAG_POWER_CAPABILITY33, "Power Capability" },
494 { TAG_TPC_REQUEST34, "TPC Request" },
495 { TAG_TPC_REPORT35, "TPC Report" },
496 { TAG_SUPPORTED_CHANNELS36, "Supported Channels" },
497 { TAG_CHANNEL_SWITCH_ANN37, "Channel Switch Announcement" },
498 { TAG_MEASURE_REQ38, "Measurement Request" },
499 { TAG_MEASURE_REP39, "Measurement Report" },
500 { TAG_QUIET40, "Quiet" },
501 { TAG_IBSS_DFS41, "IBSS DFS" },
502 { TAG_ERP_INFO42, "ERP Information" },
503 { TAG_TS_DELAY43, "TS Delay" },
504 { TAG_TCLAS_PROCESS44, "TCLAS Processing" },
505 { TAG_HT_CAPABILITY45, "HT Capabilities" },
506 { TAG_QOS_CAPABILITY46, "QoS Capability" },
507 { TAG_ERP_INFO_OLD47, "ERP Information" }, /* Reserved... */
508 { TAG_RSN_IE48, "RSN Information" },
509 { TAG_EXT_SUPP_RATES50, "Extended Supported Rates" },
510 { TAG_AP_CHANNEL_REPORT51, "AP Channel Report" },
511 { TAG_NEIGHBOR_REPORT52, "Neighbor Report" },
512 { TAG_RCPI53, "RCPI" },
513 { TAG_MOBILITY_DOMAIN54, "Mobility Domain" },
514 { TAG_FAST_BSS_TRANSITION55, "Fast BSS Transition" },
515 { TAG_TIMEOUT_INTERVAL56, "Timeout Interval" },
516 { TAG_RIC_DATA57, "RIC Data" },
517 { TAG_DSE_REG_LOCATION58, "DSE Registered Location" },
518 { TAG_SUPPORTED_OPERATING_CLASSES59, "Supported Operating Classes" },
519 { TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60, "Extended Channel Switch Announcement" },
520 { TAG_HT_OPERATION61, "HT Operation" },
521 { TAG_SECONDARY_CHANNEL_OFFSET62, "Secondary Channel Offset (802.11n D1.10)" },
522 { TAG_BSS_AVG_ACCESS_DELAY63, "BSS Average Access Delay" },
523 { TAG_ANTENNA64, "Antenna" },
524 { TAG_RSNI65, "RSNI" },
525 { TAG_MEASURE_PILOT_TRANS66, "Measurement Pilot Transmission" },
526 { TAG_BSS_AVB_ADM_CAPACITY67, "BSS Available Admission Capacity" },
527 { TAG_IE_68_CONFLICT68, "BSS AC Access Delay/WAPI Parameter Set" },
528 { TAG_TIME_ADV69, "Time Advertisement" },
529 { TAG_RM_ENABLED_CAPABILITY70, "RM Enabled Capabilities" },
530 { TAG_MULTIPLE_BSSID71, "Multiple BSSID" },
531 { TAG_20_40_BSS_CO_EX72, "20/40 BSS Coexistence" },
532 { TAG_20_40_BSS_INTOL_CH_REP73, "20/40 BSS Intolerant Channel Report" }, /* IEEE P802.11n/D6.0 */
533 { TAG_OVERLAP_BSS_SCAN_PAR74, "Overlapping BSS Scan Parameters" }, /* IEEE P802.11n/D6.0 */
534 { TAG_RIC_DESCRIPTOR75, "RIC Descriptor" },
535 { TAG_MMIE76, "Management MIC" },
536 { TAG_EVENT_REQUEST78, "Event Request" },
537 { TAG_EVENT_REPORT79, "Event Report" },
538 { TAG_DIAGNOSTIC_REQUEST80, "Diagnostic Request" },
539 { TAG_DIAGNOSTIC_REPORT81, "Diagnostic Report" },
540 { TAG_LOCATION_PARAMETERS82, "Location Parameters" },
541 { TAG_NO_BSSID_CAPABILITY83, "Non Transmitted BSSID Capability" },
542 { TAG_SSID_LIST84, "SSID List" },
543 { TAG_MULTIPLE_BSSID_INDEX85, "Multiple BSSID Index" },
544 { TAG_FMS_DESCRIPTOR86, "FMS Descriptor" },
545 { TAG_FMS_REQUEST87, "FMS Request" },
546 { TAG_FMS_RESPONSE88, "FMS Response" },
547 { TAG_QOS_TRAFFIC_CAPABILITY89, "QoS Traffic Capability" },
548 { TAG_BSS_MAX_IDLE_PERIOD90, "BSS Max Idle Period" },
549 { TAG_TFS_REQUEST91, "TFS Request" },
550 { TAG_TFS_RESPONSE92, "TFS Response" },
551 { TAG_WNM_SLEEP_MODE93, "WNM-Sleep Mode" },
552 { TAG_TIM_BROADCAST_REQUEST94, "TIM Broadcast Request" },
553 { TAG_TIM_BROADCAST_RESPONSE95, "TIM Broadcast Response" },
554 { TAG_COLLOCATED_INTER_REPORT96, "Collocated Interference Report" },
555 { TAG_CHANNEL_USAGE97, "Channel Usage" },
556 { TAG_TIME_ZONE98, "Time Zone" },
557 { TAG_DMS_REQUEST99, "DMS Request" },
558 { TAG_DMS_RESPONSE100, "DMS Response" },
559 { TAG_LINK_IDENTIFIER101, "Link Identifier" },
560 { TAG_WAKEUP_SCHEDULE102, "Wakeup Schedule" },
561 { TAG_CHANNEL_SWITCH_TIMING104, "Channel Switch Timing" },
562 { TAG_PTI_CONTROL105, "PTI Control" },
563 { TAG_PU_BUFFER_STATUS106, "PU Buffer Status" },
564 { TAG_INTERWORKING107, "Interworking" },
565 { TAG_ADVERTISEMENT_PROTOCOL108, "Advertisement Protocol"},
566 { TAG_EXPIDITED_BANDWIDTH_REQ109, "Expedited Bandwidth Request" },
567 { TAG_QOS_MAP_SET110, "QoS Map Set" },
568 { TAG_ROAMING_CONSORTIUM111, "Roaming Consortium" },
569 { TAG_EMERGENCY_ALERT_ID112, "Emergency Alert Identifier" },
570 { TAG_MESH_CONFIGURATION113, "Mesh Configuration" },
571 { TAG_MESH_ID114, "Mesh ID" },
572 { TAG_MESH_LINK_METRIC_REPORT115, "Mesh Link Metric Report" },
573 { TAG_CONGESTION_NOTIFICATION116, "Congestion Notification" },
574 { TAG_MESH_PEERING_MGMT117, "Mesh Peering Management" },
575 { TAG_MESH_CHANNEL_SWITCH118, "Mesh Channel Switch Parameters" },
576 { TAG_MESH_AWAKE_WINDOW119, "Mesh Awake Window" },
577 { TAG_BEACON_TIMING120, "Beacon Timing" },
578 { TAG_MCCAOP_SETUP_REQUEST121, "MCCAOP Setup Request" },
579 { TAG_MCCAOP_SETUP_REPLY122, "MCCAOP SETUP Reply" },
580 { TAG_MCCAOP_ADVERTISEMENT123, "MCCAOP Advertisement" },
581 { TAG_MCCAOP_TEARDOWN124, "MCCAOP Teardown" },
582 { TAG_GANN125, "Gate Announcement" },
583 { TAG_RANN126, "Root Announcement" },
584 { TAG_EXTENDED_CAPABILITIES127, "Extended Capabilities" },
585 { TAG_AGERE_PROPRIETARY128, "Agere Proprietary" },
586 { TAG_MESH_PREQ130, "Path Request" },
587 { TAG_MESH_PREP131, "Path Reply" },
588 { TAG_MESH_PERR132, "Path Error" },
589 { TAG_CISCO_CCX1_CKIP133, "Cisco CCX1 CKIP + Device Name" },
590 { TAG_CISCO_CCX2136, "Cisco CCX2" },
591 { TAG_PXU137, "Proxy Update" },
592 { TAG_PXUC138, "Proxy Update Confirmation"},
593 { TAG_AUTH_MESH_PEERING_EXCH139, "Authenticated Mesh Peering Exchange" },
594 { TAG_MIC140, "MIC (Message Integrity Code)" },
595 { TAG_DESTINATION_URI141, "Destination URI" },
596 { TAG_U_APSD_COEX142, "U-APSD Coexistence" },
597 { TAG_WAKEUP_SCHEDULE_AD143, "Wakeup Schedule 802.11ad" },
598 { TAG_EXTENDED_SCHEDULE144, "Extended Schedule" },
599 { TAG_STA_AVAILABILITY145, "STA Availability" },
600 { TAG_DMG_TSPEC146, "DMG TSPEC" },
601 { TAG_NEXT_DMG_ATI147, "Next DMG ATI" },
602 { TAG_DMG_CAPABILITIES148, "DMG Capabilities" },
603 { TAG_CISCO_CCX3149, "Cisco Unknown 95" },
604 { TAG_CISCO_VENDOR_SPECIFIC150, "Vendor Specific" },
605 { TAG_DMG_OPERATION151, "DMG Operating" },
606 { TAG_DMG_BSS_PARAMETER_CHANGE152, "DMG BSS Parameter Change" },
607 { TAG_DMG_BEAM_REFINEMENT153, "DMG Beam Refinement" },
608 { TAG_CHANNEL_MEASURMENT_FB154, "Channel Measurement Feedback" },
609 { TAG_AWAKE_WINDOW157, "Awake Window" },
610 { TAG_MULTI_BAND158, "Multi Band" },
611 { TAG_ADDBA_EXT159, "ADDBA Extension" },
612 { TAG_NEXTPCP_LIST160, "NEXTPCP List" },
613 { TAG_PCP_HANDOVER161, "PCP Handover" },
614 { TAG_DMG_LINK_MARGIN162, "DMG Link Margin" },
615 { TAG_SWITCHING_STREAM163, "Switching Stream" },
616 { TAG_SESSION_TRANSMISSION164, "Session Transmission" },
617 { TAG_DYN_TONE_PAIR_REP165, "Dynamic Tone Pairing Report" },
618 { TAG_CLUSTER_REP166, "Cluster Report" },
619 { TAG_RELAY_CAPABILITIES167, "Relay Capabilities" },
620 { TAG_RELAY_TRANSFER_PARAM168, "Relay Transfer Parameter" },
621 { TAG_BEAMLINK_MAINTENANCE169, "Beamlink Maintenance" },
622 { TAG_MULTIPLE_MAC_SUBLAYERS170, "Multiple MAC Sublayers" },
623 { TAG_U_PID171, "U-PID" },
624 { TAG_DMG_LINK_ADAPTION_ACK172, "DMG Link Adaption Acknowledgment" },
625 { TAG_SYMBOL_PROPRIETARY173, "Symbol Proprietary" },
626 { TAG_MCCAOP_ADVERTISEMENT_OV174, "MCCAOP Advertisement Overview" },
627 { TAG_QUIET_PERIOD_REQ175, "Quiet Period Request" },
628 { TAG_QUIET_PERIOD_RES177, "Quiet Period Response" },
629 { TAG_ECAPC_POLICY182, "ECAPC Policy" },
630 { TAG_CLUSTER_TIME_OFFSET183, "Cluster Time Offset" },
631 { TAG_INTRA_ACCESS_CAT_PRIO184, "Intra-Access Category Priority" },
632 { TAG_SCS_DESCRIPTOR185, "SCS Descriptor" },
633 { TAG_ANTENNA_SECTOR_ID190, "Antenna Sector ID" },
634 { TAG_VHT_CAPABILITY191, "VHT Capabilities" },
635 { TAG_VHT_OPERATION192, "VHT Operation" },
636 { TAG_EXT_BSS_LOAD193, "Extended BSS Load" },
637 { TAG_WIDE_BW_CHANNEL_SWITCH194, "Wide Bandwidth Channel Switch" },
638 { TAG_TX_PWR_ENVELOPE195, "Tx Power Envelope" },
639 { TAG_CHANNEL_SWITCH_WRAPPER196, "Channel Switch Wrapper" },
640 { TAG_OPERATING_MODE_NOTIFICATION199, "Operating Mode Notification" },
641 { TAG_REDUCED_NEIGHBOR_REPORT201, "Reduced Neighbor Report" },
642 { TAG_FINE_TIME_MEASUREMENT_PARAM206, "Fine Time Measurement Params" },
643 { TAG_S1G_OPEN_LOOP_LINK_MARGIN_INDEX207, "S1G Open-Loop Link Margin Index" },
644 { TAG_RPS208, "RPS" },
645 { TAG_PAGE_SLICE209, "Page Slice" },
646 { TAG_AID_REQUEST210, "AID Request" },
647 { TAG_AID_RESPONSE211, "AID Response" },
648 { TAG_S1G_SECTOR_OPERATION212, "Sector Operation" },
649 { TAG_S1G_BEACON_COMPATIBILITY213, "S1G Beacon Compatibility" },
650 { TAG_SHORT_BEACON_INTERVAL214, "Short Beacon Interval" },
651 { TAG_CHANGE_SEQUENCE215, "Change Sequence" },
652 { TAG_TWT216, "Target Wake Time" },
653 { TAG_S1G_CAPABILITIES217, "S1G Capabilities" },
654 { TAG_SUBCHANNEL_SELECTIVE_TRANSMISSION220, "Subchannel Selective Transmission" },
655 { TAG_VENDOR_SPECIFIC_IE221, "Vendor Specific" },
656 { TAG_AUTHENTICATION_CONTROL222, "Authentication Control" },
657 { TAG_TSF_TIMER_ACCURACY223, "TSF Timer Accuracy" },
658 { TAG_S1G_RELAY224, "S1G Relay" },
659 { TAG_REACHABLE_ADDRESS225, "Reachable Address" },
660 { TAG_S1G_RELAY_DISCOVERY226, "S1G Relay Discovery" },
661 { TAG_AID_ANNOUNCEMENT228, "AID Announcement" },
662 { TAG_PV1_PROBE_RESPONSE_OPTION229, "PV1 Probe Response Option" },
663 { TAG_EL_OPERATION230, "EL Operation" },
664 { TAG_SECTORIZED_GROUP_ID_LIST231, "Sectorized Group ID List" },
665 { TAG_S1G_OPERATION232, "S1G Operation" },
666 { TAG_HEADER_COMPRESSION233, "Header Compression" },
667 { TAG_SST_OPERATION234, "SST Operation" },
668 { TAG_MAD235, "MAD" },
669 { TAG_S1G_RELAY_ACTIVATION236, "S1G Relay Activation" },
670 { TAG_CAG_NUMBER237, "CAG Number"},
671 { TAG_AP_CSN239, "AP-CSN"},
672 { TAG_FILS_INDICATION240, "FILS Indication"},
673 { TAG_DIFF_INITIAL_LINK_SETUP241, "Differential Initial Link Setup"},
674 { TAG_FRAGMENT242, "Fragment"},
675 { TAG_RSNX244, "RSN eXtension"},
676 { TAG_ELEMENT_ID_EXTENSION255, "Element ID Extension" },
677 { 0, NULL((void*)0) }
678};
679
680static value_string_ext tag_num_vals_ext = VALUE_STRING_EXT_INIT(ie_tag_num_vals){ _try_val_to_str_ext_init, 0, (sizeof (ie_tag_num_vals) / sizeof
((ie_tag_num_vals)[0]))-1, ie_tag_num_vals, "ie_tag_num_vals"
, ((void*)0) }
;
681
682#define ETAG_ASSOC_DELAY_INFO1 1
683#define ETAG_FILS_REQ_PARAMS2 2
684#define ETAG_FILS_KEY_CONFIRM3 3
685#define ETAG_FILS_SESSION4 4
686#define ETAG_FILS_HLP_CONTAINER5 5
687#define ETAG_FILS_IP_ADDRESS_ASSIGN6 6
688#define ETAG_KEY_DELIVERY7 7
689#define ETAG_FILS_WRAPPED_DATA8 8
690#define ETAG_FTM_SYNC_INFO9 9
691#define ETAG_EXTENDED_REQUEST10 10
692#define ETAG_ESTIMATED_SERVICE_PARAM11 11
693#define ETAG_FILS_PUBLIC_KEY12 12
694#define ETAG_FILS_NONCE13 13
695#define ETAG_FUTURE_CHANNEL_GUIDANCE14 14
696
697/* RFC 8110 */
698#define ETAG_OWE_DH_PARAMETER32 32
699
700#define ETAG_PASSWORD_IDENTIFIER33 33
701
702/* 802.11AX defined tags */
703#define ETAG_HE_CAPABILITIES35 35
704#define ETAG_HE_OPERATION36 36
705#define ETAG_UORA_PARAMETER_SET37 37
706#define ETAG_MU_EDCA_PARAMETER_SET38 38
707#define ETAG_SPATIAL_REUSE_PARAMETER_SET39 39
708#define ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41 41
709#define ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42 42
710#define ETAG_QUIET_TIME_PERIOD_SETUP43 43
711#define ETAG_ESS_REPORT45 45
712#define ETAG_OPS46 46
713#define ETAG_HE_BSS_LOAD47 47
714#define ETAG_MAX_CHANNEL_SWITCH_TIME52 52
715#define ETAG_OCI54 54
716#define ETAG_MULTIPLE_BSSID_CONFIGURATION55 55
717#define ETAG_NON_INHERITANCE56 56
718#define ETAG_KNOWN_BSSID57 57
719#define ETAG_SHORT_SSID58 58
720#define ETAG_HE_6GHZ_BAND_CAPABILITIES59 59
721#define ETAG_UL_MU_POWER_CAPABILITIES60 60
722#define ETAG_MSCS_DESCRIPTOR_ELEMENT88 88
723#define ETAG_TCLAS_MASK89 89
724#define ETAG_REJECTED_GROUPS92 92
725#define ETAG_ANTI_CLOGGING_TOKEN93 93
726
727/* 802.11az */
728#define ETAG_SECURE_LTF_PARAMETERS94 94
729#define ETAG_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT95 95
730#define ETAG_RSTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT96 96
731#define ETAG_PASSIVE_TB_RANGING_LCI_TABLE_ELEMENT97 97
732#define ETAG_ISTA_AVAILABILITY_WINDOW98 98
733#define ETAG_RSTA_AVAILABILITY_WINDOW99 99
734#define ETAG_PASN_PARAMETERS100 100
735#define ETAG_RANGING_PARAMETERS101 101
736#define ETAG_DIRECTION_MEASUREMENT_RESULTS102 102
737#define ETAG_MULTIPLE_AOD_FEEDBACK103 103
738#define ETAG_MULTIPLE_BEST_AWV_ID104 104
739#define ETAG_LOS_LIKELIHOOD105 105
740#define ETAG_EHT_OPERATION106 106
741#define ETAG_MULTI_LINK107 107
742#define ETAG_EHT_CAPABILITIES108 108
743#define ETAG_TID_TO_LINK_MAPPING109 109
744#define ETAG_MULTI_LINK_TRAFFIC110 110
745#define ETAG_QOS_CHARACTERISTICS113 113
746#define ETAG_AKM_SUITE_SELECTOR114 114
747#define ETAG_MLO_LINK_INFORMATION133 133
748#define ETAG_AID_BITMAP134 134
749#define ETAG_BANDWIDTH_INDICATION135 135
750#define ETAG_NONAP_STA_REGULATORY_CONNECT137 137
751
752
753static const value_string tag_num_vals_eid_ext[] = {
754 { ETAG_ASSOC_DELAY_INFO1, "Association Delay Info" },
755 { ETAG_FILS_REQ_PARAMS2, "FILS Request Parameters" },
756 { ETAG_FILS_KEY_CONFIRM3, "FILS Key Confirmation" },
757 { ETAG_FILS_SESSION4, "FILS Session" },
758 { ETAG_FILS_HLP_CONTAINER5, "FILS HLP Container" },
759 { ETAG_FILS_IP_ADDRESS_ASSIGN6, "FILS IP Address Assignment" },
760 { ETAG_KEY_DELIVERY7, "Key Delivery" },
761 { ETAG_FILS_WRAPPED_DATA8, "Wrapped Data" },
762 { ETAG_FTM_SYNC_INFO9, "FTM Synchronization Information" },
763 { ETAG_EXTENDED_REQUEST10, "Extended Request" },
764 { ETAG_ESTIMATED_SERVICE_PARAM11, "Estimated Service Parameters" },
765 { ETAG_FILS_PUBLIC_KEY12, "FILS Public Key" },
766 { ETAG_FILS_NONCE13, "FILS Nonce" },
767 { ETAG_FUTURE_CHANNEL_GUIDANCE14, "Future Channel Guidance" },
768 { ETAG_OWE_DH_PARAMETER32, "OWE Diffie-Hellman Parameter" },
769 { ETAG_PASSWORD_IDENTIFIER33, "Password Identifier" },
770 { ETAG_HE_CAPABILITIES35, "HE Capabilities" },
771 { ETAG_HE_OPERATION36, "HE Operation" },
772 { ETAG_UORA_PARAMETER_SET37, "UORA Parameter Set" },
773 { ETAG_MU_EDCA_PARAMETER_SET38, "MU EDCA Parameter Set" },
774 { ETAG_SPATIAL_REUSE_PARAMETER_SET39, "Spatial Reuse Parameter Set" },
775 { ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41, "NDP Feedback Report Parameter Set" },
776 { ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42, "BSS Color Change Announcement" },
777 { ETAG_QUIET_TIME_PERIOD_SETUP43, "Quiet Time Period Setup" },
778 { ETAG_ESS_REPORT45, "ESS Report" },
779 { ETAG_OPS46, "Opportunistic Power Save" },
780 { ETAG_HE_BSS_LOAD47, "HE BSS Load" },
781 { ETAG_MAX_CHANNEL_SWITCH_TIME52, "Max Channel Switch Time" },
782 { ETAG_OCI54, "Operating Channel Information" },
783 { ETAG_MULTIPLE_BSSID_CONFIGURATION55, "Multiple BSSID Configuration" },
784 { ETAG_NON_INHERITANCE56, "Non-Inheritance"},
785 { ETAG_KNOWN_BSSID57, "Known BSSID" },
786 { ETAG_SHORT_SSID58, "Short SSID" },
787 { ETAG_HE_6GHZ_BAND_CAPABILITIES59, "HE 6 GHz Band Capabilities" },
788 { ETAG_UL_MU_POWER_CAPABILITIES60, "UL MU Power Capabilities" },
789 { ETAG_MSCS_DESCRIPTOR_ELEMENT88, "MSCS Descriptor Element" },
790 { ETAG_TCLAS_MASK89, "TCLAS Mask" },
791 { ETAG_REJECTED_GROUPS92, "Rejected Groups" },
792 { ETAG_ANTI_CLOGGING_TOKEN93, "Anti-Clogging Token Container" },
793 /* 802.11az */
794 { ETAG_SECURE_LTF_PARAMETERS94, "Secure LTF Parameters" },
795 { ETAG_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT95, "ISTA Passive TB Ranging Measurement Report" },
796 { ETAG_RSTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT96, "RSTA Passive TB Ranging Measurement Report" },
797 { ETAG_PASSIVE_TB_RANGING_LCI_TABLE_ELEMENT97, "Passive TB Ranging LCI Table element" },
798 { ETAG_ISTA_AVAILABILITY_WINDOW98, "ISTA Availability Window" },
799 { ETAG_RSTA_AVAILABILITY_WINDOW99, "RSTA Availability Window" },
800 { ETAG_PASN_PARAMETERS100, "PASN Parameters" },
801 { ETAG_RANGING_PARAMETERS101, "Ranging Parameters" },
802 { ETAG_DIRECTION_MEASUREMENT_RESULTS102, "Direction Measurement Results" },
803 { ETAG_MULTIPLE_AOD_FEEDBACK103, "Multiple AOD Feedback" },
804 { ETAG_MULTIPLE_BEST_AWV_ID104, "Multiple Best AWV ID" },
805 { ETAG_LOS_LIKELIHOOD105, "LOS Likelihood" },
806 { ETAG_EHT_OPERATION106, "EHT Operation (802.11be D3.0)" },
807 { ETAG_MULTI_LINK107, "Multi-Link (802.11be D3.0)" },
808 { ETAG_EHT_CAPABILITIES108, "EHT Capabilities (802.11be D3.0)" },
809 { ETAG_TID_TO_LINK_MAPPING109, "TID-To-Link Mapping (802.11be D3.0)" },
810 { ETAG_MULTI_LINK_TRAFFIC110, "Multi-Link Traffic Indication (802.11be D3.0)" },
811 { ETAG_QOS_CHARACTERISTICS113, "QoS Characteristics (802.11be D3.0)" },
812 { ETAG_AKM_SUITE_SELECTOR114, "AKM Suite Selector" },
813 { ETAG_MLO_LINK_INFORMATION133, "MLO Link Information (802.11be D3.0)" },
814 { ETAG_AID_BITMAP134, "AID Bitmap (802.11be D3.0)" },
815 { ETAG_BANDWIDTH_INDICATION135, "Bandwidth Indication (802.11be D3.0)" },
816 { ETAG_NONAP_STA_REGULATORY_CONNECT137, "Non-AP STA Regulatory Connectivity" },
817 { 0, NULL((void*)0) }
818};
819static value_string_ext tag_num_vals_eid_ext_ext = VALUE_STRING_EXT_INIT(tag_num_vals_eid_ext){ _try_val_to_str_ext_init, 0, (sizeof (tag_num_vals_eid_ext)
/ sizeof ((tag_num_vals_eid_ext)[0]))-1, tag_num_vals_eid_ext
, "tag_num_vals_eid_ext", ((void*)0) }
;
820
821static const value_string wfa_qos_subtype_vals[] = {
822 { 0, "DSCP Policy Query" },
823 { 1, "DSCP Policy Request" },
824 { 2, "DSCP Policy Response" },
825 { 0, NULL((void*)0) }
826};
827
828static const value_string wfa_action_subtype_vals[] = {
829 { WFA_SUBTYPE_ACTION_QOS_MGMT0x1A, "QoS Management" },
830 { 0, NULL((void*)0) }
831};
832
833const value_string wfa_subtype_vals[] = {
834 { WFA_SUBTYPE_SUBSCRIPTION_REMEDIATION0, "Subscription Remediation" },
835 { WFA_SUBTYPE_DEAUTHENTICATION_IMMINENT1, "Deauthentication Imminent" },
836 { WFA_WNM_SUBTYPE_NON_PREF_CHAN_REPORT2, "Non-preferred Channel Report" },
837 { WFA_WNM_SUBTYPE_CELL_DATA_CAPABILITIES3, "Cellular Data Capabilities" },
838 { WFA_SUBTYPE_P2P9, "P2P" },
839 { WFA_SUBTYPE_HS20_INDICATION16, "Hotspot 2.0 Indication" },
840 { WFA_SUBTYPE_NAN_IE19, "NAN" },
841 { WFA_SUBTYPE_OSEN20, "OSU Server-only l2 Encryption Network" },
842 { WFA_SUBTYPE_MBO_OCE22, "Multi Band Operation - Optimized Connectivity Experience"},
843 { WFA_SUBTYPE_WIFI_60G23, "60GHz Information Element" },
844 { WFA_SUBTYPE_NAN_ACTION24, "NAN Action" },
845 { WFA_SUBTYPE_DPP26, "Device Provisioning Protocol" },
846 { WFA_SUBTYPE_IEEE1905_MULTI_AP27, "IEEE1905 Multi-AP" },
847 { WFA_SUBTYPE_OWE_TRANSITION_MODE28, "OWE Transition Mode" },
848 { WFA_SUBTYPE_TRANSITION_DISABLE_KDE32, "Transition Disable KDE" },
849 { WFA_SUBTYPE_QOS_MGMT34, "QoS Management" },
850 { WFA_SUBTYPE_RSN_OVERRIDE41, "RSN Element Override" },
851 { WFA_SUBTYPE_RSN_OVERRIDE_242, "RSN Element Override 2" },
852 { WFA_SUBTYPE_RSNX_OVERRIDE43, "RSN Extension Element Override" },
853 { WFA_SUBTYPE_RSN_SELECTION44, "RSN Selection" },
854 { WFA_SUBTYPE_RSN_OVERRIDE_LINK_KDE45, "RSN Override Link KDE" },
855 { 0, NULL((void*)0) }
856};
857
858static const value_string wfa_anqp_subtype_vals[] = {
859 { WFA_ANQP_SUBTYPE_HS2017, "Hotspot 2.0 ANQP" },
860 { WFA_ANQP_SUBTYPE_MBO18, "Multi Band Operation ANQP" },
861 { 0, NULL((void*)0) }
862};
863
864#define DPP_CONFIGURATION_PROTOCOL0x01 0x01
865
866static const value_string dpp_subtype_vals[] = {
867 { DPP_CONFIGURATION_PROTOCOL0x01, "DPP Configuration Protocol" },
868 { 0, NULL((void*)0) }
869};
870
871/* ************************************************************************* */
872/* Supported Rates (7.3.2.2) */
873/* ************************************************************************* */
874
875static const value_string ieee80211_supported_rates_vals[] = {
876 { 0x02, "1" },
877 { 0x03, "1.5" },
878 { 0x04, "2" },
879 { 0x05, "2.5" },
880 { 0x06, "3" },
881 { 0x09, "4.5" },
882 { 0x0B, "5.5" },
883 { 0x0C, "6" },
884 { 0x12, "9" },
885 { 0x16, "11" },
886 { 0x18, "12" },
887 { 0x1B, "13.5" },
888 { 0x24, "18" },
889 { 0x2C, "22" },
890 { 0x30, "24" },
891 { 0x36, "27" },
892 { 0x42, "33" },
893 { 0x48, "36" },
894 { 0x60, "48" },
895 { 0x6C, "54" },
896 { 0x82, "1(B)" },
897 { 0x83, "1.5(B)" },
898 { 0x84, "2(B)" },
899 { 0x85, "2.5(B)" },
900 { 0x86, "3(B)" },
901 { 0x89, "4.5(B)" },
902 { 0x8B, "5.5(B)" },
903 { 0x8C, "6(B)" },
904 { 0x92, "9(B)" },
905 { 0x96, "11(B)" },
906 { 0x98, "12(B)" },
907 { 0x9B, "13.5(B)" },
908 { 0xA4, "18(B)" },
909 { 0xAC, "22(B)" },
910 { 0xB0, "24(B)" },
911 { 0xB6, "27(B)" },
912 { 0xC2, "33(B)" },
913 { 0xC8, "36(B)" },
914 { 0xE0, "48(B)" },
915 { 0xEC, "54(B)" },
916 /* BSS membership selector */
917 { 0xFA, "HE PHY" },
918 { 0xFB, "SAE Hash to Element Only" },
919 { 0xFC, "EPD" }, /* 802.11ak */
920 { 0xFD, "GLK" }, /* 802.11ak */
921 { 0xFE, "VHT PHY" },
922 { 0xFF, "HT PHY" },
923 { 0, NULL((void*)0)}
924};
925value_string_ext ieee80211_supported_rates_vals_ext = VALUE_STRING_EXT_INIT(ieee80211_supported_rates_vals){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_supported_rates_vals
) / sizeof ((ieee80211_supported_rates_vals)[0]))-1, ieee80211_supported_rates_vals
, "ieee80211_supported_rates_vals", ((void*)0) }
;
926
927/* ************************************************************************* */
928/* 8.4.1.7 Reason Code field */
929/* ************************************************************************* */
930static const value_string ieee80211_reason_code[] = {
931 { 1, "Unspecified reason" },
932 { 2, "Previous authentication no longer valid" },
933 { 3, "Deauthenticated because sending STA is leaving (or has left) the BSS" },
934 { 4, "Disassociated due to inactivity" },
935 { 5, "Disassociated because AP is unable to handle all currently associated STAs" },
936 { 6, "Class 2 frame received from nonauthenticated STA" },
937 { 7, "Class 3 frame received from nonassociated STA" },
938 { 8, "Disassociated because sending STA is leaving (or has left) BSS" },
939 { 9, "STA requesting (re)association is not authenticated with responding STA" },
940 { 10, "Disassociated because the information in the Power Capability element is unacceptable" },
941 { 11, "Disassociated because the information in the Supported Channels element is unacceptable" },
942 { 12, "Disassociated due to BSS transition management" },
943 { 13, "Invalid information element, i.e., an information element defined in this standard for which the content does not meet the specifications in Clause 9" },
944 { 14, "Message integrity code (MIC) failure" },
945 { 15, "4-way handshake timeout" },
946 { 16, "Group key handshake timeout" },
947 { 17, "Element in 4-way handshake different from (Re)Association Request/Probe Response/Beacon frame" },
948 { 18, "Invalid group cipher" },
949 { 19, "Invalid pairwise cipher" },
950 { 20, "Invalid AKMP" },
951 { 21, "Unsupported RSNE version" },
952 { 22, "Invalid RSNE capabilities" },
953 { 23, "IEEE 802.1X authentication failed" },
954 { 24, "Cipher suite rejected because of the security policy" },
955 { 25, "TDLS direct-link teardown due to TDLS peer STA unreachable via the TDLS direct link" },
956 { 26, "TDLS direct-link teardown for unspecified reason" },
957 { 27, "Disassociated because session terminated by SSP request" },
958 { 28, "Disassociated because of lack of SSP roaming agreement" },
959 { 29, "Requested service rejected because of SSP cipher suite or AKM requirement " },
960 { 30, "Requested service not authorized in this location" },
961 { 31, "TS deleted because QoS AP lacks sufficient bandwidth for this QoS STA due to a change in BSS service characteristics or operational mode" },
962 { 32, "Disassociated for unspecified, QoS-related reason" },
963 { 33, "Disassociated because QoS AP lacks sufficient bandwidth for this QoS STA" },
964 { 34, "Disassociated because excessive number of frames need to be acknowledged, but are not acknowledged due to AP transmissions and/or poor channel conditions" },
965 { 35, "Disassociated because STA is transmitting outside the limits of its TXOPs" },
966 { 36, "Requested from peer STA as the STA is leaving the BSS (or resetting)" },
967 { 37, "Requesting STA is no longer using the stream or session" },
968 { 38, "Requesting STA received frames using a mechanism for which a setup has not been completed" },
969 { 39, "Requested from peer STA due to timeout" },
970 { 46, "Disassociated because authorized access limit reached" },
971 { 47, "Disassociated due to external service requirements" },
972 { 48, "Invalid FT Action frame count" },
973 { 49, "Invalid pairwise master key identifier (PMKID)" },
974 { 50, "Invalid MDE" },
975 { 51, "Invalid FTE" },
976 { 52, "Mesh peering canceled for unknown reasons" },
977 { 53, "The mesh STA has reached the supported maximum number of peer mesh STAs" },
978 { 54, "The received information violates the Mesh Configuration policy configured in the mesh STA profile" },
979 { 55, "The mesh STA has received a Mesh Peering Close message requesting to close the mesh peering" },
980 { 56, "The mesh STA has re-sent dot11MeshMaxRetries Mesh Peering Open messages, without receiving a Mesh Peering Confirm message" },
981 { 57, "The confirmTimer for the mesh peering instance times out" },
982 { 58, "The mesh STA fails to unwrap the GTK or the values in the wrapped contents do not match" },
983 { 59, "The mesh STA receives inconsistent information about the mesh parameters between Mesh Peering Management frames" },
984 { 60, "The mesh STA fails the authenticated mesh peering exchange because due to failure in selecting either the pairwise ciphersuite or group ciphersuite" },
985 { 61, "The mesh STA does not have proxy information for this external destination" },
986 { 62, "The mesh STA does not have forwarding information for this destination" },
987 { 63, "The mesh STA determines that the link to the next hop of an active path in its forwarding information is no longer usable" },
988 { 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)" },
989 { 65, "The mesh STA performs channel switch to meet regulatory requirements" },
990 { 66, "The mesh STA performs channel switch with unspecified reason" },
991 { 67, "Transmission link establishment in alternative channel failed" },
992 { 68, "The alternative channel is occupied" },
993 { 71, "Disassociated due to poor RSSI" },
994 { 0, NULL((void*)0)}
995};
996value_string_ext ieee80211_reason_code_ext = VALUE_STRING_EXT_INIT(ieee80211_reason_code){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_reason_code
) / sizeof ((ieee80211_reason_code)[0]))-1, ieee80211_reason_code
, "ieee80211_reason_code", ((void*)0) }
;
997
998/* ************************************************************************* */
999/* 8.4.1.9 Status Code field */
1000/* ************************************************************************* */
1001static const value_string ieee80211_status_code[] = {
1002 { 0, "Successful" },
1003 { 1, "Unspecified failure" },
1004 { 2, "TDLS wakeup schedule rejected but alternative schedule provided" },
1005 { 3, "TDLS wakeup schedule rejected" },
1006 { 4, "Reserved" },
1007 { 5, "Security disabled" },
1008 { 6, "Unacceptable lifetime" },
1009 { 7, "Not in same BSS" },
1010 { 8, "Reserved" },
1011 { 9, "Reserved" },
1012 { 10, "Cannot support all requested capabilities in the Capability Information field" },
1013 { 11, "Reassociation denied due to inability to confirm that association exists" },
1014 { 12, "Association denied due to reason outside the scope of this standard" },
1015 { 13, "Responding STA does not support the specified authentication algorithm" },
1016 { 14, "Received an Authentication frame with authentication transaction sequence number out of expected sequence" },
1017 { 15, "Authentication rejected because of challenge failure" },
1018 { 16, "Authentication rejected due to timeout waiting for next frame in sequence" },
1019 { 17, "Association denied because AP is unable to handle additional associated STAs" },
1020 { 18, "Association denied due to requesting STA not supporting all of the data rates in the BSSBasicRateSet parameter, the Basic HT-MCS Set field of the HT Operation parameter, or the Basic VHT-MCS and NSS Set field in the VHT Operation parameter" },
1021 { 19, "Association denied due to requesting STA not supporting the short preamble option" },
1022 { 20, "Reserved" },
1023 { 21, "Reserved" },
1024 { 22, "Association request rejected because spectrum management capability is required" },
1025 { 23, "Association request rejected because the information in the Power Capability element is unacceptable" },
1026 { 24, "Association request rejected because the information in the Supported Channels element is unacceptable" },
1027 { 25, "Association denied due to requesting STA not supporting short slot time" },
1028 { 26, "Reserved" },
1029 { 27, "Association denied because the requesting STA does not support HT features" },
1030 { 28, "R0KH unreachable" },
1031 { 29, "Reserved"},
1032 { 30, "Association request rejected temporarily; try again later" },
1033 { 31, "Robust management frame policy violation" },
1034 { 32, "Unspecified, QoS-related failure" },
1035 { 33, "Association denied because QoS AP or PCP has insufficient bandwidth to handle another QoS STA" },
1036 { 34, "Association denied due to excessive frame loss rates and/ or poor conditions on current operating channel" },
1037 { 35, "Association (with QoS BSS) denied because the requesting STA does not support the QoS facility" },
1038 { 36, "Reserved" },
1039 { 37, "The request has been declined" },
1040 { 38, "The request has not been successful as one or more parameters have invalid values" },
1041 { 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 can attempt to set another allocation or TS with the suggested changes to the TSPEC/DMG TSPEC" },
1042 { 40, "Invalid element, i.e., an element defined in this standard for which the content does not meet the specifications in Clause 9 (Frame formats)" },
1043 { 41, "Invalid group cipher" },
1044 { 42, "Invalid pairwise cipher" },
1045 { 43, "Invalid AKMP" },
1046 { 44, "Unsupported RSNE version" },
1047 { 45, "Invalid RSNE capabilities" },
1048 { 46, "Cipher suite rejected because of security policy" },
1049 { 47, "The TS or allocation has not been created; however, the HC or PCP might be capable of creating a TS or allocation, in response to a request, after the time indicated in the TS Delay element" },
1050 { 48, "Reserved" },
1051 { 49, "The Destination STA is not present within this BSS" },
1052 { 50, "The Destination STA is not a QoS STA" },
1053 { 51, "Association denied because the listen interval is too large" },
1054 { 52, "Invalid FT Action frame count" },
1055 { 53, "Invalid pairwise master key identifier (PMKID)" },
1056 { 54, "Invalid MDE" },
1057 { 55, "Invalid FTE" },
1058 { 56, "Requested TCLAS processing is not supported by the AP or PCP" },
1059 { 57, "The AP or PCP has insufficient TCLAS processing resources to satisfy the request" },
1060 { 58, "The TS has not been created because the request cannot be honored; however, the HC or PCP suggests that the STA transition to a different BSS to set up the TS" },
1061 { 59, "GAS advertisement protocol not supported" },
1062 { 60, "No outstanding GAS request" },
1063 { 61, "GAS response not received from the advertisement server" },
1064 { 62, "STA timed out waiting for GAS query response" },
1065 { 63, "GAS response is larger than query response length limit" },
1066 { 64, "Request refused because home network does not support request" },
1067 { 65, "Advertisement server in the network is not currently reachable" },
1068 { 66, "Reserved" },
1069 { 67, "Request refused due to permissions received via SSPN interface" },
1070 { 68, "Request refused because the AP or PCP does not support unauthenticated access" },
1071 { 69, "Reserved" },
1072 { 70, "Reserved" },
1073 { 71, "Reserved" },
1074 { 72, "Invalid contents of RSNE, other than unsupported RSNE version or invalid RSNE capabilities, AKMP or pairwise cipher" },
1075 { 73, "U-APSD coexistence is not supported" },
1076 { 74, "Requested U-APSD coexistence mode is not supported" },
1077 { 75, "Requested interval/duration value cannot be supported with U-APSD coexistence" },
1078 { 76, "Authentication is rejected because an anti-clogging token is required" },
1079 { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
1080 { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
1081 { 79, "Transmission failure" },
1082 { 80, "Requested TCLAS not supported" },
1083 { 81, "TCLAS resources exhausted" },
1084 { 82, "Rejected with suggested BSS transition" },
1085 { 83, "Reject with recommended schedule" },
1086 { 84, "Reject because no wakeup schedule specified" },
1087 { 85, "Success, the destination STA is in power save mode" },
1088 { 86, "FST pending, in process of admitting FST session" },
1089 { 87, "Performing FST now" },
1090 { 88, "FST pending, gap(s) in block ack window" },
1091 { 89, "Reject because of U-PID setting" },
1092 { 90, "Reserved" },
1093 { 91, "Reserved" },
1094 { 92, "(Re)Association refused for some external reason" },
1095 { 93, "(Re)Association refused because of memory limits at the AP" },
1096 { 94, "(Re)Association refused because emergency services are not supported at the AP" },
1097 { 95, "GAS query response not yet received" },
1098 { 96, "Reject since the request is for transition to a frequency band subject to DSE procedures and FST Initiator is a dependent STA" },
1099 { 97, "Requested TCLAS processing has been terminated by the AP" },
1100 { 98, "The TS schedule conflicts with an existing schedule; an alternative schedule is provided" },
1101 { 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" },
1102 { 100, "The request failed due to a reservation conflict" },
1103 { 101, "The request failed due to exceeded MAF limit" },
1104 { 102, "The request failed due to exceeded MCCA track limit" },
1105 { 103, "Association denied because the information in the Spectrum Management field is unacceptable" },
1106 { 104, "Association denied because the requesting STA does not support VHT features" },
1107 { 105, "Enablement denied" },
1108 { 106, "Enablement denied due to restriction from an authorized GDB" },
1109 { 107, "Authorization deenabled" },
1110 { 108, "Re(association) refused or disassociated because energy limited operation is not supported at the AP" },
1111 { 109, "BlockAck negotiation refused because, due to buffer constraints and other unspecified reasons, the recipient prefers to generate only NDP BlockAck frames" },
1112 { 110, "Association denied/disassociated because the suggested value for max away duration is unacceptable" },
1113 { 111, "Re(association) refused or disassociated because flow control operation is not supported by the non-AP STA" },
1114 { 112, "Authentication rejected due to FILS authentication failure" },
1115 { 113, "Authentication rejected due to unknown Authentication Server" },
1116 { 114, "Reserved" },
1117 { 115, "Reserved" },
1118 { 116, "Request denied because the allocation of notification period is failed" },
1119 { 117, "Request denied because the request of channel splitting is failed" },
1120 { 118, "Request denied because the allocation request is failed" },
1121 { 119, "Association denied because the requesting STA does not support CMMG features" },
1122 { 120, "The requested GAS fragment is not available" },
1123 { 121, "Success, the CAG Version provided by the requesting STA is the same as the latest CAG Version provided by the relevant server" },
1124 { 122, "The STA is not authorized to use GLK per local policy" },
1125 { 123, "Authentication rejected because the password identifier is unknown" },
1126 { 124, "Reserved"},
1127 { 125, "Request denied because source address of request is inconsistent with local MAC address policy" },
1128 { 126, "SAE authentication uses direct hashing, instead of looping, to obtain the PWE" },
1129 { 127, "Reserved"},
1130 { 128, "Requested TCLAS processing has been terminated by the AP due to insufficient QoS capacity" },
1131 { 129, "Requested TCLAS processing has been terminated by the AP due to conflict with higher layer QoS policies" },
1132 { 130, "Association denied because the requesting STA is affiliated with a non-AP MLD that is associated with the AP MLD"},
1133 { 131, "EPCS priority access denied because the non-AP MLD is not authorized to use the service"},
1134 { 132, "EPCS priority access denied due to reason outside the scope of this standard"},
1135 { 133, "Request denied because the requested TID-to-link mapping is unacceptable"},
1136 { 134, "Preferred TID-to-link mapping suggested"},
1137 { 135, "Association denied because the requesting STA does not support EHT features"},
1138 { 139, "Link not accepted because the link on which the (Re)Association Request frame is transmitted is not accepted"},
1139 { 140, "EPCS priority access is temporarily denied because the receiving AP MLD is unable to verify that the non-AP MLD is authorized for an unspecified reason"},
1140 { 141, "Operation parameter update denied because the requested operation parameters or capabilities are not acceptable"},
1141 { 0, NULL((void*)0)}
1142};
1143value_string_ext ieee80211_status_code_ext = VALUE_STRING_EXT_INIT(ieee80211_status_code){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_status_code
) / sizeof ((ieee80211_status_code)[0]))-1, ieee80211_status_code
, "ieee80211_status_code", ((void*)0) }
;
1144
1145static const value_string ieee80211_transition_reasons[] = {
1146 { 0, "Unspecified" },
1147 { 1, "Excessive frame loss rates and/or poor conditions" },
1148 { 2, "Excessive delay for current traffic streams" },
1149 { 3, "Insufficient QoS capacity for current traffic streams (TSPEC rejected)" },
1150 { 4, "First association to ESS (the association initiated by an Association Request frame instead of a Reassociation Request frame)" },
1151 { 5, "Load balancing" },
1152 { 6, "Better AP found" },
1153 { 7, "Deauthenticated or Disassociated from the previous AP" },
1154 { 8, "AP failed IEEE 802.1X EAP Authentication" },
1155 { 9, "AP failed 4-way handshake" },
1156 { 10, "Received too many replay counter failures" },
1157 { 11, "Received too many data MIC failures" },
1158 { 12, "Exceeded maximum number of retransmissions" },
1159 { 13, "Received too many broadcast disassociations" },
1160 { 14, "Received too many broadcast deauthentications" },
1161 { 15, "Previous transition failed" },
1162 { 16, "Low RSSI" },
1163 { 17, "Roam from a non-IEEE-802.11 system" },
1164 { 18, "Transition due to received BSS Transition Request frame" },
1165 { 19, "Preferred BSS transition candidate list included" },
1166 { 20, "Leaving ESS" },
1167 { 0, NULL((void*)0)}
1168};
1169/* ************************************************************************* */
1170/* Frame types, and their names */
1171/* ************************************************************************* */
1172static const value_string frame_type_subtype_vals[] = {
1173 {MGT_ASSOC_REQ0x00, "Association Request"},
1174 {MGT_ASSOC_RESP0x01, "Association Response"},
1175 {MGT_REASSOC_REQ0x02, "Reassociation Request"},
1176 {MGT_REASSOC_RESP0x03, "Reassociation Response"},
1177 {MGT_PROBE_REQ0x04, "Probe Request"},
1178 {MGT_PROBE_RESP0x05, "Probe Response"},
1179 {MGT_MEASUREMENT_PILOT0x06, "Measurement Pilot"},
1180 {MGT_BEACON0x08, "Beacon frame"},
1181 {MGT_ATIM0x09, "ATIM"},
1182 {MGT_DISASS0x0A, "Disassociate"},
1183 {MGT_AUTHENTICATION0x0B, "Authentication"},
1184 {MGT_DEAUTHENTICATION0x0C, "Deauthentication"},
1185 {MGT_ACTION0x0D, "Action"},
1186 {MGT_ACTION_NO_ACK0x0E, "Action No Ack"},
1187 {MGT_ARUBA_WLAN0x0F, "Aruba Management"},
1188
1189 {CTRL_TRIGGER0x12, "Trigger"},
1190 {CTRL_TACK0x13, "TWT Ack"},
1191 {CTRL_BEAMFORM_RPT_POLL0x14, "Beamforming Report Poll"},
1192 {CTRL_VHT_NDP_ANNC0x15, "VHT/HE/EHT/RANGING NDP Announcement"},
1193 {CTRL_CONTROL_WRAPPER0x17, "Control Wrapper"},
1194 {CTRL_BLOCK_ACK_REQ0x18, "802.11 Block Ack Req"},
1195 {CTRL_BLOCK_ACK0x19, "802.11 Block Ack"},
1196 {CTRL_PS_POLL0x1A, "Power-Save poll"},
1197 {CTRL_RTS0x1B, "Request-to-send"},
1198 {CTRL_CTS0x1C, "Clear-to-send"},
1199 {CTRL_ACKNOWLEDGEMENT0x1D, "Acknowledgement"},
1200 {CTRL_CFP_END0x1E, "CF-End (Control-frame)"},
1201 {CTRL_CFP_ENDACK0x1F, "CF-End + CF-Ack (Control-frame)"},
1202
1203 {DATA0x20, "Data"},
1204 {DATA_CF_ACK0x21, "Data + CF-Ack"},
1205 {DATA_CF_POLL0x22, "Data + CF-Poll"},
1206 {DATA_CF_ACK_POLL0x23, "Data + CF-Ack + CF-Poll"},
1207 {DATA_NULL_FUNCTION0x24, "Null function (No data)"},
1208 {DATA_CF_ACK_NOD0x25, "Acknowledgement (No data)"},
1209 {DATA_CF_POLL_NOD0x26, "CF-Poll (No data)"},
1210 {DATA_CF_ACK_POLL_NOD0x27, "CF-Ack/Poll (No data)"},
1211 {DATA_QOS_DATA0x28, "QoS Data"},
1212 {DATA_QOS_DATA_CF_ACK0x29, "QoS Data + CF-Acknowledgment"},
1213 {DATA_QOS_DATA_CF_POLL0x2A, "QoS Data + CF-Poll"},
1214 {DATA_QOS_DATA_CF_ACK_POLL0x2B, "QoS Data + CF-Ack + CF-Poll"},
1215 {DATA_QOS_NULL0x2C, "QoS Null function (No data)"},
1216 {DATA_QOS_CF_POLL_NOD0x2E, "QoS CF-Poll (No Data)"},
1217 {DATA_QOS_CF_ACK_POLL_NOD0x2F, "QoS CF-Ack + CF-Poll (No data)"},
1218
1219 {EXTENSION_DMG_BEACON0x30, "DMG Beacon"},
1220 {EXTENSION_S1G_BEACON0x31, "S1G Beacon"},
1221
1222 {CTRL_POLL0x162, "Poll"},
1223 {CTRL_SPR0x163, "Service Period Request"},
1224 {CTRL_GRANT0x164, "Grant"},
1225 {CTRL_DMG_CTS0x165, "DMG Clear-to-send"},
1226 {CTRL_DMG_DTS0x166, "DMG Denial-to-send"},
1227 {CTRL_GRANT_ACK0x167, "Grant Acknowledgment"},
1228 {CTRL_SSW0x168, "Sector Sweep"},
1229 {CTRL_SSW_FEEDBACK0x169, "Sector Sweep Feedback"},
1230 {CTRL_SSW_ACK0x16A, "Sector Sweep Acknowledgment"},
1231
1232 {0, NULL((void*)0)}
1233};
1234static value_string_ext frame_type_subtype_vals_ext = VALUE_STRING_EXT_INIT(frame_type_subtype_vals){ _try_val_to_str_ext_init, 0, (sizeof (frame_type_subtype_vals
) / sizeof ((frame_type_subtype_vals)[0]))-1, frame_type_subtype_vals
, "frame_type_subtype_vals", ((void*)0) }
;
1235
1236/* ************************************************************************* */
1237/* 802.1D Tag Name (by WME Access Category Names) */
1238/* ************************************************************************* */
1239static const value_string ieee80211_qos_tags_acs[] = {
1240 { 0, "Best Effort (Best Effort)" },
1241 { 1, "Background (Background)" },
1242 { 2, "Spare (Background)" },
1243 { 3, "Excellent Effort (Best Effort)" },
1244 { 4, "Controlled Load (Video)" },
1245 { 5, "Video (Video)" },
1246 { 6, "Voice (Voice)" },
1247 { 7, "Network Control (Voice)" },
1248 { 0, NULL((void*)0) }
1249};
1250
1251/* ************************************************************************* */
1252/* WME Access Category Names (by WME ACI) */
1253/* ************************************************************************* */
1254static const value_string wme_acs[] = {
1255 { 0, "Best Effort" },
1256 { 1, "Background" },
1257 { 2, "Video" },
1258 { 3, "Voice" },
1259 { 0, NULL((void*)0) }
1260};
1261
1262/* ************************************************************************* */
1263/* Aruba Management Type */
1264/* ************************************************************************* */
1265static const value_string aruba_mgt_typevals[] = {
1266 { 0x0001, "Hello" },
1267 { 0x0002, "Probe" },
1268 { 0x0003, "MTU" },
1269 { 0x0004, "Ageout" },
1270 { 0x0005, "Heartbeat" },
1271 { 0x0006, "Deauth" },
1272 { 0x0007, "Disassoc" },
1273 { 0x0008, "Probe response" },
1274 { 0x0009, "Tunnel update" },
1275 { 0x000A, "Laser beam active" },
1276 { 0x000B, "Client IP" },
1277 { 0x000C, "Laser beam active v2" },
1278 { 0x000D, "AP statistics" },
1279 { 0, NULL((void*)0) }
1280};
1281static value_string_ext aruba_mgt_typevals_ext = VALUE_STRING_EXT_INIT(aruba_mgt_typevals){ _try_val_to_str_ext_init, 0, (sizeof (aruba_mgt_typevals) /
sizeof ((aruba_mgt_typevals)[0]))-1, aruba_mgt_typevals, "aruba_mgt_typevals"
, ((void*)0) }
;
1282
1283/*** Begin: Action Fixed Parameter ***/
1284#define CAT_SPECTRUM_MGMT0 0
1285#define CAT_QOS1 1
1286#define CAT_DLS2 2
1287#define CAT_BLOCK_ACK3 3
1288#define CAT_PUBLIC4 4
1289#define CAT_RADIO_MEASUREMENT5 5
1290#define CAT_FAST_BSS_TRANSITION6 6
1291#define CAT_HT7 7
1292#define CAT_SA_QUERY8 8
1293#define CAT_PUBLIC_PROTECTED9 9
1294#define CAT_WNM10 10
1295#define CAT_UNPROTECTED_WNM11 11
1296#define CAT_TDLS12 12
1297#define CAT_MESH13 13
1298#define CAT_MULTIHOP14 14
1299#define CAT_SELF_PROTECTED15 15
1300#define CAT_DMG16 16
1301#define CAT_MGMT_NOTIFICATION17 17
1302#define CAT_FAST_SESSION_TRANSFER18 18
1303#define CAT_ROBUST_AV_STREAMING19 19
1304#define CAT_UNPROTECTED_DMG20 20
1305#define CAT_VHT21 21
1306#define CAT_S1G22 22
1307#define CAT_PROTECTED_S1G23 23
1308#define CAT_FLOW_CONTROL24 24
1309#define CAT_CONTROL_RESPONSE_MCS_NEG25 25
1310#define CAT_FILS26 26
1311/* aj */
1312#define CAT_CDMG27 27
1313#define CAT_CMMG28 28
1314/* ak */
1315#define CAT_GLK29 29
1316
1317#define CAT_HE30 30
1318#define CAT_PROTECTED_HE31 31
1319#define CAT_PROTECTED_FTM34 34
1320#define CAT_EHT36 36
1321#define CAT_PROTECTED_EHT37 37
1322#define CAT_VENDOR_SPECIFIC_PROTECTED126 126
1323#define CAT_VENDOR_SPECIFIC127 127
1324
1325#define CAT_MESH_LINK_METRIC31 31
1326#define CAT_MESH_PATH_SELECTION32 32
1327#define CAT_MESH_INTERWORKING33 33
1328#define CAT_MESH_RESOURCE_COORDINATION34 34
1329#define CAT_MESH_SECURITY_ARCHITECTURE35 35
1330
1331#define SM_ACTION_MEASUREMENT_REQUEST0 0
1332#define SM_ACTION_MEASUREMENT_REPORT1 1
1333#define SM_ACTION_TPC_REQUEST2 2
1334#define SM_ACTION_TPC_REPORT3 3
1335#define SM_ACTION_CHAN_SWITCH_ANNC4 4
1336#define SM_ACTION_EXT_CHAN_SWITCH_ANNC5 5
1337
1338#define QOS_ACTION_ADDTS_REQUEST0 0
1339#define QOS_ACTION_ADDTS_RESPONSE1 1
1340#define QOS_ACTION_DELTS2 2
1341#define QOS_ACTION_SCHEDULE3 3
1342#define QOS_ACTION_MAP_CONFIGURE4 4
1343
1344#define DLS_ACTION_REQUEST0 0
1345#define DLS_ACTION_RESPONSE1 1
1346#define DLS_ACTION_TEARDOWN2 2
1347
1348#define BA_ADD_BLOCK_ACK_REQUEST0 0
1349#define BA_ADD_BLOCK_ACK_RESPONSE1 1
1350#define BA_DELETE_BLOCK_ACK2 2
1351
1352#define BA_NDP_ADD_BLOCK_ACK_REQUEST128 128
1353#define BA_NDP_ADD_BLOCK_ACK_RESPONSE129 129
1354#define BA_NDP_DELETE_BLOCK_ACK130 130
1355#define BA_BAT_ADD_BLOCK_ACK_REQUEST132 132
1356#define BA_BAT_ADD_BLOCK_ACK_RESPONSE133 133
1357#define BA_BAT_DELETE_BLOCK_ACK134 134
1358
1359#define BA_ADD_BLOCK_ACK_REQUEST0 0
1360#define BA_ADD_BLOCK_ACK_RESPONSE1 1
1361#define BA_DELETE_BLOCK_ACK2 2
1362
1363/* Keep in sync with PPA_* defines */
1364#define PA_20_40_BSS_COEXISTENCE_MANAGEMENT0 0
1365#define PA_DSE_ENABLEMENT1 1
1366#define PA_DSE_DEENABLEMENT2 2
1367#define PA_DSE_REG_LOC_ANNOUNCEMENT3 3
1368#define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4 4
1369#define PA_DSE_MEASUREMENT_REQUEST5 5
1370#define PA_DSE_MEASUREMENT_REPORT6 6
1371#define PA_MEASUREMENT_PILOT7 7
1372#define PA_DSE_POWER_CONSTRAINT8 8
1373#define PA_VENDOR_SPECIFIC9 9
1374#define PA_GAS_INITIAL_REQUEST10 10
1375#define PA_GAS_INITIAL_RESPONSE11 11
1376#define PA_GAS_COMEBACK_REQUEST12 12
1377#define PA_GAS_COMEBACK_RESPONSE13 13
1378#define PA_TDLS_DISCOVERY_RESPONSE14 14
1379#define PA_LOCATION_TRACK_NOTIFICATION15 15
1380#define PA_QAB_REQUEST16 16
1381#define PA_QAB_RESPONSE17 17
1382#define PA_QMF_POLICY18 18
1383#define PA_QMF_POLICY_CHANGE19 19
1384#define PA_QLOAD_REQUEST20 20
1385#define PA_QLOAD_REPORT21 21
1386#define PA_HCCA_TXOP_ADVERTISEMENT22 22
1387#define PA_HCCA_TXOP_RESPONSE23 23
1388#define PA_PUBLIC_KEY24 24
1389#define PA_CHANNEL_AVAILABILITY_QUERY25 25
1390#define PA_CHANNEL_SCHEDULE_MANAGEMENT26 26
1391#define PA_CONTACT_VERIFICATION_SIGNAL27 27
1392#define PA_GDD_ENABLEMENT_REQUEST28 28
1393#define PA_GDD_ENABLEMENT_RESPONSE29 29
1394#define PA_NETWORK_CHANNEL_CONTROL30 30
1395#define PA_WHITE_SPACE_MAP_ANNOUNCEMENT31 31
1396#define PA_FTM_REQUEST32 32
1397#define PA_FTM33 33
1398#define PA_FILS_DISCOVERY34 34
1399/* 802.11aj */
1400#define PA_DCS_MEASUREMENT_REQUEST35 35
1401#define PA_DCS_MEASUREMENT_REPORT36 36
1402#define PA_DCS_REQUEST37 37
1403#define PA_DCS_RESPONSE38 38
1404#define PA_EXTENDED_NOTIFICATION_PERIOD_REQUEST39 39
1405#define PA_EXTENDED_NOTIFICATION_PERIOD_RESPONSE40 40
1406#define PA_EXTENDED_CHANNEL_SPLITTING_REQUEST41 41
1407#define PA_EXTENDED_CHANNEL_SPLITTING_RESPONSE42 42
1408/* 802.11aq */
1409#define PA_GROUP_ADDRESSED_GAS_REQUEST43 43
1410#define PA_GROUP_ADDRESSED_GAS_RESPONSE44 44
1411/* Unknown */
1412#define PA_ON_CHANNEL_TUNNEL_REQUEST45 45
1413#define PA_VALUE_4646 46
1414/* 802.11az */
1415#define PA_LOCATION_MEASUREMENT_REPORT47 47
1416#define PA_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT48 48
1417#define PA_PRIMARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT49 49
1418#define PA_SECONDARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT50 50
1419
1420/* Keep in sync with PA_* defines */
1421#define PPA_DSE_ENABLEMENT1 1
1422#define PPA_DSE_DEENABLEMENT2 2
1423#define PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4 4
1424#define PPA_DSE_MEASUREMENT_REQUEST5 5
1425#define PPA_DSE_MEASUREMENT_REPORT6 6
1426#define PPA_DSE_POWER_CONSTRAINT8 8
1427#define PPA_VENDOR_SPECIFIC9 9
1428#define PPA_GAS_INITIAL_REQUEST10 10
1429#define PPA_GAS_INITIAL_RESPONSE11 11
1430#define PPA_GAS_COMEBACK_REQUEST12 12
1431#define PPA_GAS_COMEBACK_RESPONSE13 13
1432#define PPA_QAB_REQUEST16 16
1433#define PPA_QAB_RESPONSE17 17
1434
1435#define HT_ACTION_NOTIFY_CHAN_WIDTH0 0
1436#define HT_ACTION_SM_PWR_SAVE1 1
1437#define HT_ACTION_PSMP_ACTION2 2
1438#define HT_ACTION_SET_PCO_PHASE3 3
1439#define HT_ACTION_MIMO_CSI4 4
1440#define HT_ACTION_MIMO_BEAMFORMING5 5
1441#define HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6 6
1442#define HT_ACTION_ANT_SEL_FEEDBACK7 7
1443#define HT_ACTION_HT_INFO_EXCHANGE8 8
1444
1445#define DMG_ACTION_PWR_SAVE_CONFIG_REQ0 0
1446#define DMG_ACTION_PWR_SAVE_CONFIG_RES1 1
1447#define DMG_ACTION_INFO_REQ2 2
1448#define DMG_ACTION_INFO_RES3 3
1449#define DMG_ACTION_HANDOVER_REQ4 4
1450#define DMG_ACTION_HANDOVER_RES5 5
1451#define DMG_ACTION_DTP_REQ6 6
1452#define DMG_ACTION_DTP_RES7 7
1453#define DMG_ACTION_RELAY_SEARCH_REQ8 8
1454#define DMG_ACTION_RELAY_SEARCH_RES9 9
1455#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10 10
1456#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11 11
1457#define DMG_ACTION_RLS_REQ12 12
1458#define DMG_ACTION_RLS_RES13 13
1459#define DMG_ACTION_RLS_ANNOUNCE14 14
1460#define DMG_ACTION_RLS_TEARDOWN15 15
1461#define DMG_ACTION_RELAY_ACK_REQ16 16
1462#define DMG_ACTION_RELAY_ACK_RES17 17
1463#define DMG_ACTION_TPA_REQ18 18
1464#define DMG_ACTION_TPA_RES19 19
1465#define DMG_ACTION_TPA_REP20 20
1466#define DMG_ACTION_ROC_REQ21 21
1467#define DMG_ACTION_ROC_RES22 22
1468
1469#define UNPROTECTED_DMG_ANNOUNCE0 0
1470#define UNPROTECTED_DMG_BRP1 1
1471
1472#define FST_SETUP_REQUEST0 0
1473#define FST_SETUP_RESPONSE1 1
1474#define FST_TEAR_DOWN2 2
1475#define FST_ACK_REQUEST3 3
1476#define FST_ACK_RESPONSE4 4
1477#define FST_ON_CHANNEL_TUNNEL_REQUEST5 5
1478
1479#define ROBUST_AV_STREAMING_SCS_REQUEST0 0
1480#define ROBUST_AV_STREAMING_SCS_RESPONSE1 1
1481#define ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_REQ2 2
1482#define ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_RSP3 3
1483#define ROBUST_AV_STREAMING_MSCS_REQUEST4 4
1484#define ROBUST_AV_STREAMING_MSCS_RESPONSE5 5
1485
1486
1487/* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */
1488#define FT_ACTION_REQUEST1 1
1489#define FT_ACTION_RESPONSE2 2
1490#define FT_ACTION_CONFIRM3 3
1491#define FT_ACTION_ACK4 4
1492
1493/* SA Query Action frame codes (IEEE 802.11w-2009, 7.4.9) */
1494#define SA_QUERY_REQUEST0 0
1495#define SA_QUERY_RESPONSE1 1
1496
1497/* IEEE Std 802.11z-2010, 7.4.11, Table 7-57v1 */
1498#define TDLS_SETUP_REQUEST0 0
1499#define TDLS_SETUP_RESPONSE1 1
1500#define TDLS_SETUP_CONFIRM2 2
1501#define TDLS_TEARDOWN3 3
1502#define TDLS_PEER_TRAFFIC_INDICATION4 4
1503#define TDLS_CHANNEL_SWITCH_REQUEST5 5
1504#define TDLS_CHANNEL_SWITCH_RESPONSE6 6
1505#define TDLS_PEER_PSM_REQUEST7 7
1506#define TDLS_PEER_PSM_RESPONSE8 8
1507#define TDLS_PEER_TRAFFIC_RESPONSE9 9
1508#define TDLS_DISCOVERY_REQUEST10 10
1509
1510/* IEEE Std 802.11-2012, 8.5.7.1, Table 8-206 */
1511#define RM_ACTION_RADIO_MEASUREMENT_REQUEST0 0
1512#define RM_ACTION_RADIO_MEASUREMENT_REPORT1 1
1513#define RM_ACTION_LINK_MEASUREMENT_REQUEST2 2
1514#define RM_ACTION_LINK_MEASUREMENT_REPORT3 3
1515#define RM_ACTION_NEIGHBOR_REPORT_REQUEST4 4
1516#define RM_ACTION_NEIGHBOR_REPORT_RESPONSE5 5
1517
1518/* 11s draft 12.0, table 7-57v30 */
1519#define MESH_ACTION_LINK_METRIC_REPORT0 0
1520#define MESH_ACTION_HWMP1 1
1521#define MESH_ACTION_GATE_ANNOUNCE2 2
1522#define MESH_ACTION_CONGESTION_CTL3 3
1523#define MESH_ACTION_MCCA_SETUP_REQUEST4 4
1524#define MESH_ACTION_MCCA_SETUP_REPLY5 5
1525#define MESH_ACTION_MCCA_ADV_REQUEST6 6
1526#define MESH_ACTION_MCCA_ADV7 7
1527#define MESH_ACTION_MCCA_TEARDOWN8 8
1528#define MESH_ACTION_TBTT_ADJ_REQUEST9 9
1529#define MESH_ACTION_TBTT_ADJ_RESPONSE10 10
1530
1531/* 11s draft 12.0, table 7-57v42: Multihop Action field values */
1532#define MULTIHOP_ACTION_PROXY_UPDATE0 0
1533#define MULTIHOP_ACTION_PROXY_UPDATE_CONF1 1
1534
1535/* 11s draft 12.0, table 7-57v24: Self-protected Action field values */
1536#define SELFPROT_ACTION_MESH_PEERING_OPEN1 1
1537#define SELFPROT_ACTION_MESH_PEERING_CONFIRM2 2
1538#define SELFPROT_ACTION_MESH_PEERING_CLOSE3 3
1539#define SELFPROT_ACTION_MESH_GROUP_KEY_INFORM4 4
1540#define SELFPROT_ACTION_MESH_GROUP_KEY_ACK5 5
1541
1542/* 11s draft 12.0, table 7-43bj6: Mesh Peering Protocol Identifier field values */
1543#define MESH_PEERING_PROTO_MGMT0 0
1544#define MESH_PEERING_PROTO_AMPE1 1
1545#define MESH_PEERING_PROTO_VENDOR255 255
1546
1547/* Vendor actions */
1548/* MARVELL */
1549#define MRVL_ACTION_MESH_MANAGEMENT1 1
1550
1551#define MRVL_MESH_MGMT_ACTION_RREQ0 0
1552#define MRVL_MESH_MGMT_ACTION_RREP1 1
1553#define MRVL_MESH_MGMT_ACTION_RERR2 2
1554#define MRVL_MESH_MGMT_ACTION_PLDM3 3
1555
1556#define ANQP_INFO_ANQP_QUERY_LIST256 256
1557#define ANQP_INFO_ANQP_CAPAB_LIST257 257
1558#define ANQP_INFO_VENUE_NAME_INFO258 258
1559#define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO259 259
1560#define ANQP_INFO_NETWORK_AUTH_TYPE_INFO260 260
1561#define ANQP_INFO_ROAMING_CONSORTIUM_LIST261 261
1562#define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262 262
1563#define ANQP_INFO_NAI_REALM_LIST263 263
1564#define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264 264
1565#define ANQP_INFO_AP_GEOSPATIAL_LOCATION265 265
1566#define ANQP_INFO_AP_CIVIC_LOCATION266 266
1567#define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI267 267
1568#define ANQP_INFO_DOMAIN_NAME_LIST268 268
1569#define ANQP_INFO_EMERGENCY_ALERT_ID_URI269 269
1570#define ANQP_INFO_TDLS_CAPAB_INFO270 270
1571#define ANQP_INFO_EMERGENCY_NAI271 271
1572#define ANQP_INFO_NEIGHBOR_REPORT272 272
1573#define ANQP_INFO_QUERY_AP_LIST273 273
1574#define ANQP_INFO_AP_LIST_RESPONSE274 274
1575#define ANQP_INFO_FILS_REALM_INFO275 275
1576#define ANQP_INFO_CAG276 276
1577#define ANQP_INFO_VENUE_URL277 277
1578#define ANQP_INFO_ADVICE_OF_CHARGE278 278
1579#define ANQP_INFO_LOCAL_CONTENT279 279
1580#define ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280 280
1581#define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797 56797
1582
1583/* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */
1584static const value_string anqp_info_id_vals[] = {
1585 {ANQP_INFO_ANQP_QUERY_LIST256, "ANQP Query list"},
1586 {ANQP_INFO_ANQP_CAPAB_LIST257, "ANQP Capability list"},
1587 {ANQP_INFO_VENUE_NAME_INFO258, "Venue Name information"},
1588 {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO259, "Emergency Call Number information"},
1589 {ANQP_INFO_NETWORK_AUTH_TYPE_INFO260,
1590 "Network Authentication Type information"},
1591 {ANQP_INFO_ROAMING_CONSORTIUM_LIST261, "Roaming Consortium list"},
1592 {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262,
1593 "IP Address Type Availability information"},
1594 {ANQP_INFO_NAI_REALM_LIST263, "NAI Realm list"},
1595 {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264, "3GPP Cellular Network information"},
1596 {ANQP_INFO_AP_GEOSPATIAL_LOCATION265, "AP Geospatial Location"},
1597 {ANQP_INFO_AP_CIVIC_LOCATION266, "AP Civic Location"},
1598 {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI267, "AP Location Public Identifier URI"},
1599 {ANQP_INFO_DOMAIN_NAME_LIST268, "Domain Name list"},
1600 {ANQP_INFO_EMERGENCY_ALERT_ID_URI269, "Emergency Alert Identifier URI"},
1601 {ANQP_INFO_TDLS_CAPAB_INFO270, "TDLS Capability information"},
1602 {ANQP_INFO_EMERGENCY_NAI271, "Emergency NAI"},
1603 {ANQP_INFO_NEIGHBOR_REPORT272, "Neighbor Report"},
1604 {ANQP_INFO_QUERY_AP_LIST273, "Query AP List"},
1605 {ANQP_INFO_AP_LIST_RESPONSE274, "AP List Response"},
1606 {ANQP_INFO_FILS_REALM_INFO275, "FILS Realm Info"},
1607 {ANQP_INFO_CAG276, "CAG"},
1608 {ANQP_INFO_VENUE_URL277, "Venue URL"},
1609 {ANQP_INFO_ADVICE_OF_CHARGE278, "Advice of Charge"},
1610 {ANQP_INFO_LOCAL_CONTENT279, "Local Content"},
1611 {ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280,
1612 "Network Authentication Type with Timestamp"},
1613 {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797, "ANQP vendor-specific list"},
1614 {0, NULL((void*)0)}
1615};
1616static value_string_ext anqp_info_id_vals_ext = VALUE_STRING_EXT_INIT(anqp_info_id_vals){ _try_val_to_str_ext_init, 0, (sizeof (anqp_info_id_vals) / sizeof
((anqp_info_id_vals)[0]))-1, anqp_info_id_vals, "anqp_info_id_vals"
, ((void*)0) }
;
1617
1618/* IEEE 802.11v - WNM Action field values */
1619enum wnm_action {
1620 WNM_EVENT_REQ = 0,
1621 WNM_EVENT_REPORT = 1,
1622 WNM_DIAGNOSTIC_REQ = 2,
1623 WNM_DIAGNOSTIC_REPORT = 3,
1624 WNM_LOCATION_CFG_REQ = 4,
1625 WNM_LOCATION_CFG_RESP = 5,
1626 WNM_BSS_TRANS_MGMT_QUERY = 6,
1627 WNM_BSS_TRANS_MGMT_REQ = 7,
1628 WNM_BSS_TRANS_MGMT_RESP = 8,
1629 WNM_FMS_REQ = 9,
1630 WNM_FMS_RESP = 10,
1631 WNM_COLLOCATED_INTERFERENCE_REQ = 11,
1632 WNM_COLLOCATED_INTERFERENCE_REPORT = 12,
1633 WNM_TFS_REQ = 13,
1634 WNM_TFS_RESP = 14,
1635 WNM_TFS_NOTIFY = 15,
1636 WNM_SLEEP_MODE_REQ = 16,
1637 WNM_SLEEP_MODE_RESP = 17,
1638 WNM_TIM_BROADCAST_REQ = 18,
1639 WNM_TIM_BROADCAST_RESP = 19,
1640 WNM_QOS_TRAFFIC_CAPAB_UPDATE = 20,
1641 WNM_CHANNEL_USAGE_REQ = 21,
1642 WNM_CHANNEL_USAGE_RESP = 22,
1643 WNM_DMS_REQ = 23,
1644 WNM_DMS_RESP = 24,
1645 WNM_TIMING_MEASUREMENT_REQ = 25,
1646 WNM_NOTIFICATION_REQ = 26,
1647 WNM_NOTIFICATION_RESP = 27
1648};
1649
1650static const value_string wnm_action_codes[] = {
1651 { WNM_EVENT_REQ, "Event Request" },
1652 { WNM_EVENT_REPORT, "Event Report" },
1653 { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" },
1654 { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" },
1655 { WNM_LOCATION_CFG_REQ, "Location Configuration Request" },
1656 { WNM_LOCATION_CFG_RESP, "Location Configuration Response" },
1657 { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" },
1658 { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" },
1659 { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" },
1660 { WNM_FMS_REQ, "FMS Request" },
1661 { WNM_FMS_RESP, "FMS Response" },
1662 { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" },
1663 { WNM_COLLOCATED_INTERFERENCE_REPORT, "Collocated Interference Report" },
1664 { WNM_TFS_REQ, "TFS Request" },
1665 { WNM_TFS_RESP, "TFS Response" },
1666 { WNM_TFS_NOTIFY, "TFS Notify" },
1667 { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" },
1668 { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" },
1669 { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" },
1670 { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" },
1671 { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" },
1672 { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" },
1673 { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" },
1674 { WNM_DMS_REQ, "DMS Request" },
1675 { WNM_DMS_RESP, "DMS Response" },
1676 { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" },
1677 { WNM_NOTIFICATION_REQ, "WNM-Notification Request" },
1678 { WNM_NOTIFICATION_RESP, "WNM-Notification Response" },
1679 { 0, NULL((void*)0) }
1680};
1681static value_string_ext wnm_action_codes_ext = VALUE_STRING_EXT_INIT(wnm_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (wnm_action_codes) / sizeof
((wnm_action_codes)[0]))-1, wnm_action_codes, "wnm_action_codes"
, ((void*)0) }
;
1682
1683enum unprotected_wnm_action {
1684 UNPROTECTED_WNM_TIM = 0,
1685 UNPROTECTED_WNM_TIMING_MEASUREMENT = 1
1686};
1687
1688static const value_string unprotected_wnm_action_codes[] = {
1689 { UNPROTECTED_WNM_TIM, "TIM" },
1690 { UNPROTECTED_WNM_TIMING_MEASUREMENT, "Timing Measurement" },
1691 { 0, NULL((void*)0) }
1692};
1693static value_string_ext unprotected_wnm_action_codes_ext = VALUE_STRING_EXT_INIT(unprotected_wnm_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (unprotected_wnm_action_codes
) / sizeof ((unprotected_wnm_action_codes)[0]))-1, unprotected_wnm_action_codes
, "unprotected_wnm_action_codes", ((void*)0) }
;
1694
1695static const value_string wnm_notification_types[] = {
1696 { 0, "Firmware Update Notification" },
1697 { 1, "Reserved for use by WFA" },
1698 { 221, "Vendor Specific" },
1699 { 0, NULL((void*)0) }
1700};
1701
1702static value_string_ext wnm_notification_types_ext =
1703 VALUE_STRING_EXT_INIT(wnm_notification_types){ _try_val_to_str_ext_init, 0, (sizeof (wnm_notification_types
) / sizeof ((wnm_notification_types)[0]))-1, wnm_notification_types
, "wnm_notification_types", ((void*)0) }
;
1704
1705static const range_string wnm_notification_response_code[] = {
1706 { 0, 0, "Notification Acknowledged" },
1707 { 1, 255, "Reserved" },
1708 { 0, 0, NULL((void*)0) }
1709};
1710
1711/*** End: Action Fixed Parameter ***/
1712
1713static const value_string ieee80211_tag_measure_request_type_flags[] = {
1714 {0x00, "Basic Request"},
1715 {0x01, "Clear Channel Assessment (CCA) Request"},
1716 {0x02, "Receive Power Indication (RPI) Histogram Request"},
1717 {0x03, "Channel Load Request"},
1718 {0x04, "Noise Histogram Request"},
1719 {0x05, "Beacon Request"},
1720 {0x06, "Frame Request"},
1721 {0x07, "STA Statistics Request"},
1722 {0x08, "Location Configuration Indication (LCI) Request"},
1723 {0x09, "Transmit Stream Measurement Request"},
1724 {0x0a, "Multicast Diagnostics Request"},
1725 {0x0b, "Location Civic Request"},
1726 {0x0c, "Location Identifier Request"},
1727 {0x0d, "Directional Channel Quality Request"},
1728 {0x0e, "Directional Measurement Request"},
1729 {0x0f, "Directional Statistics Request"},
1730 {0x10, "Fine Timing Measurement Range Request"},
1731 {0xFF, "Measurement Pause Request"},
1732 {0x00, NULL((void*)0)}
1733};
1734static value_string_ext ieee80211_tag_measure_request_type_flags_ext =
1735 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_type_flags){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_tag_measure_request_type_flags
) / sizeof ((ieee80211_tag_measure_request_type_flags)[0]))-1
, ieee80211_tag_measure_request_type_flags, "ieee80211_tag_measure_request_type_flags"
, ((void*)0) }
;
1736
1737static const value_string ieee80211_tag_measure_report_type_flags[] = {
1738 { 0x00, "Basic Report" },
1739 { 0x01, "Clear Channel Assessment (CCA) Report" },
1740 { 0x02, "Receive Power Indication (RPI) Histogram Report" },
1741 { 0x03, "Channel Load Report" },
1742 { 0x04, "Noise Histogram Report" },
1743 { 0x05, "Beacon Report" },
1744 { 0x06, "Frame Report" },
1745 { 0x07, "STA Statistics Report" },
1746 { 0x08, "Location Configuration Information (LCI) Report" },
1747 { 0x09, "Transmit Stream Measurement Report" },
1748 { 0x0a, "Multicast Diagnostics Report"},
1749 { 0x0b, "Location Civic Report"},
1750 { 0x0c, "Location Identifier Report"},
1751 { 0x0d, "Directional Channel Quality Report"},
1752 { 0x0e, "Directional Measurement Report"},
1753 { 0x0f, "Directional Statistics Report"},
1754 { 0x10, "Fine Timing Measurement Range Report"},
1755 { 0x00, NULL((void*)0) }
1756};
1757static value_string_ext ieee80211_tag_measure_report_type_flags_ext =
1758 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_report_type_flags){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_tag_measure_report_type_flags
) / sizeof ((ieee80211_tag_measure_report_type_flags)[0]))-1,
ieee80211_tag_measure_report_type_flags, "ieee80211_tag_measure_report_type_flags"
, ((void*)0) }
;
1759
1760static const true_false_string ieee80211_tag_measure_report_frame_info_frame_type_flag = {
1761 "Measurement Pilot Frame",
1762 "Beacon/Probe Response Frame"
1763};
1764
1765static const true_false_string ig_tfs = {
1766 "Group address (multicast/broadcast)",
1767 "Individual address (unicast)"
1768};
1769
1770static const true_false_string lg_tfs = {
1771 "Locally administered address (this is NOT the factory default)",
1772 "Globally unique address (factory default)"
1773};
1774
1775static const true_false_string ieee80211_tag_measure_map_field_bss_flag = {
1776 "At least one valid MPDU was received by another BSS or IBSS during the measurement period.",
1777 "No valid MPDUs were received from another BSS or IBSS during the measurement period."
1778};
1779
1780static const value_string ieee80211_tag_measure_request_measurement_mode_flags[] = {
1781 { 0x00, "Passive" },
1782 { 0x01, "Active" },
1783 { 0x02, "Beacon Table" },
1784 { 0x00, NULL((void*)0) }
1785};
1786
1787#define MEASURE_REQ_BEACON_SUB_SSID0 0
1788#define MEASURE_REQ_BEACON_SUB_BRI1 1
1789#define MEASURE_REQ_BEACON_SUB_RD2 2
1790#define MEASURE_REQ_BEACON_SUB_REQUEST10 10
1791#define MEASURE_REQ_BEACON_SUB_REQUEST_EXT11 11
1792#define MEASURE_REQ_BEACON_SUB_APCP51 51
1793#define MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163 163
1794#define MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164 164
1795#define MEASURE_REQ_BEACON_SUB_VS221 221
1796
1797static const value_string ieee80211_tag_measure_request_beacon_sub_id_flags[] = {
1798 { MEASURE_REQ_BEACON_SUB_SSID0, "SSID" },
1799 { MEASURE_REQ_BEACON_SUB_BRI1, "Beacon Reporting Information" },
1800 { MEASURE_REQ_BEACON_SUB_RD2, "Reporting Detail" },
1801 { MEASURE_REQ_BEACON_SUB_REQUEST10, "Request" },
1802 { MEASURE_REQ_BEACON_SUB_REQUEST_EXT11, "Extended Request" },
1803 { MEASURE_REQ_BEACON_SUB_APCP51, "AP Channel Report" },
1804 { MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163, "Wide Channel Bandwidth Switch" },
1805 { MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164, "Last Beacon Report Indication Request" },
1806 { MEASURE_REQ_BEACON_SUB_VS221, "Vendor Specific" },
1807 { 0x00, NULL((void*)0)}
1808};
1809
1810static const value_string ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags[] = {
1811 { 0x00, "Report to be issued after each measurement." },
1812 { 0x01, "The measured RCPI level is greater than an absolute threshold." },
1813 { 0x02, "The measured RCPI level is less than an absolute threshold." },
1814 { 0x03, "The measured RSNI level is greater than an absolute threshold." },
1815 { 0x04, "The measured RSNI level is less than an absolute threshold." },
1816 { 0x05, "The measured RCPI level is greater than a threshold defined by an offset from the serving AP's reference RCPI." },
1817 { 0x06, "The measured RCPI level is less than a threshold defined by an offset from the serving AP's reference RCPI." },
1818 { 0x07, "The measured RSNI level is greater than a threshold defined by an offset from the serving AP's reference RSNI." },
1819 { 0x08, "The measured RSNI level is less than a threshold defined by an offset from the serving AP's reference RSNI." },
1820 { 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." },
1821 { 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." },
1822 { 0xfe, "Report not required to be issued" },
1823 { 0x00, NULL((void*)0) }
1824};
1825
1826static const value_string ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags[] = {
1827 { 0, "No fixed length fields or elements" },
1828 { 1, "All fixed length fields and any requested elements in the Request information element if present" },
1829 { 2, "All fixed length fields and elements (default, used when Reporting Detail subelement is not included in Beacon Request" },
1830 { 0x00, NULL((void*)0) }
1831};
1832
1833static const value_string ieee80211_tag_measure_request_group_id_flags[] = {
1834 { 0x00, "STA Counters from dot11CountersTable" },
1835 { 0x01, "STA Counters from dot11MacStatistics group" },
1836 { 0x02, "QoS STA Counters for UP0 from dot11QosCountersTable" },
1837 { 0x03, "QoS STA Counters for UP1 from dot11QosCountersTable" },
1838 { 0x04, "QoS STA Counters for UP2 from dot11QosCountersTable" },
1839 { 0x05, "QoS STA Counters for UP3 from dot11QosCountersTable" },
1840 { 0x06, "QoS STA Counters for UP4 from dot11QosCountersTable" },
1841 { 0x07, "QoS STA Counters for UP5 from dot11QosCountersTable" },
1842 { 0x08, "QoS STA Counters for UP6 from dot11QosCountersTable" },
1843 { 0x09, "QoS STA Counters for UP7 from dot11QosCountersTable" },
1844 { 0x0a, "BSS Average Access Delays" },
1845 { 0x0b, "STA Counters from dot11A-MSDU Group" },
1846 { 0x0c, "STA Counters from dot11A-MPDU Group" },
1847 { 0x0d, "STA Counters from dot11 BAR, Channel Width, PSMP Group" },
1848 { 0x0e, "STA Counters from dot11Protection Group" },
1849 { 0x0f, "STBC Group" },
1850 { 0x00, NULL((void*)0) }
1851};
1852static value_string_ext ieee80211_tag_measure_request_group_id_flags_ext =
1853 VALUE_STRING_EXT_INIT(ieee80211_tag_measure_request_group_id_flags){ _try_val_to_str_ext_init, 0, (sizeof (ieee80211_tag_measure_request_group_id_flags
) / sizeof ((ieee80211_tag_measure_request_group_id_flags)[0]
))-1, ieee80211_tag_measure_request_group_id_flags, "ieee80211_tag_measure_request_group_id_flags"
, ((void*)0) }
;
1854
1855static const value_string ieee80211_tag_measure_request_location_subject[] = {
1856 { 0, "Local" },
1857 { 1, "Remote" },
1858 { 2, "Third party" },
1859 { 0x00, NULL((void*)0) }
1860};
1861
1862static const value_string ieee80211_tag_measure_request_civic_location_type[] = {
1863 { 0, "IETF RFC 4776" },
1864 { 1, "Vendor Specific" },
1865 { 0x00, NULL((void*)0) }
1866};
1867
1868static const value_string ieee80211_tclas_process_flag[] = {
1869 {0x00, "Incoming MSDU's higher layer parameters have to match to the parameters in all associated TCLAS elements."},
1870 {0x01, "Incoming MSDU's higher layer parameters have to match to at least one of the associated TCLAS elements."},
1871 {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."},
1872 {0, NULL((void*)0)}
1873};
1874
1875
1876#define MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1 1
1877
1878static const value_string ieee80211_tag_measure_request_channel_load_sub_id_vals[] = {
1879 { MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1, "Channel Load Reporting Information" },
1880 { 221, "Vendor Specific" },
1881 { 0x00, NULL((void*)0)}
1882};
1883
1884static const value_string ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals[] = {
1885 { 0x00, "Report to be issued after each measurement (default, used when Channel Load Reporting Information subelement is not included in Channel Load Request)." },
1886 { 0x01, "Report to be issued when measured Channel Load is equal to or greater than the reference value." },
1887 { 0x02, "Report to be issued when measured Channel Load is equal to or less than the reference value." },
1888 { 0x00, NULL((void*)0)}
1889};
1890
1891#define MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1 1
1892
1893static const value_string ieee80211_tag_measure_request_noise_histogram_sub_id_vals[] = {
1894 { MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1, "Noise Histogram Reporting Information" },
1895 { 221, "Vendor Specific" },
1896 { 0x00, NULL((void*)0)}
1897};
1898
1899static const value_string ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals[] = {
1900 { 0x00, "Report to be issued after each measurement (default, used when Noise Histogram Reporting Information subelement is not included in Noise Histogram Request)." },
1901 { 0x01, "Noise Histogram Report to be issued when measured ANPI is equal to or greater than the reference value." },
1902 { 0x02, "Noise Histogram Report to be issued when measured ANPI is equal to or less than the reference value." },
1903 { 0x00, NULL((void*)0)}
1904};
1905
1906#define MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1 1
1907#define MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2 2
1908#define MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163 163
1909#define MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164 164
1910
1911static const value_string ieee80211_tag_measure_report_beacon_sub_id_vals[] = {
1912 { MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1, "Reported Frame Body" },
1913 { MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2, "Reported Frame Body Fragment ID" },
1914 { MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163, "Wide Bandwidth Channel Switch"},
1915 { MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164, "Last Beacon Report Indication"},
1916 { 221, "Vendor Specific" },
1917 { 0x00, NULL((void*)0)}
1918};
1919
1920#define MEASURE_REP_LCI_SUB_REPORTED_LCI0 0
1921#define MEASURE_REP_LCI_SUB_REPORTED_AZIMUTH_REPORT1 1
1922#define MEASURE_REP_LCI_SUB_REPORTED_OR_STA2 2
1923#define MEASURE_REP_LCI_SUB_REPORTED_T_MAC3 3
1924#define MEASURE_REP_LCI_SUB_REPORTED_Z4 4
1925#define MEASURE_REP_LCI_SUB_REPORTED_RLE5 5
1926#define MEASURE_REP_LCI_SUB_REPORTED_URP6 6
1927#define MEASURE_REP_LCI_SUB_REPORTED_CO_BSSID7 7
1928
1929static const value_string ieee80211_tag_measure_report_lci_sub_id_vals[] = {
1930 { MEASURE_REP_LCI_SUB_REPORTED_LCI0, "LCI" },
1931 { MEASURE_REP_LCI_SUB_REPORTED_AZIMUTH_REPORT1, "Azimuth Report" },
1932 { MEASURE_REP_LCI_SUB_REPORTED_OR_STA2, "Originator Requesting STA MAC Address" },
1933 { MEASURE_REP_LCI_SUB_REPORTED_T_MAC3, "Target MAC Address" },
1934 { MEASURE_REP_LCI_SUB_REPORTED_Z4, "Z" },
1935 { MEASURE_REP_LCI_SUB_REPORTED_RLE5, "Relative Location Error" },
1936 { MEASURE_REP_LCI_SUB_REPORTED_URP6, "Usage Rules/Policy" },
1937 { MEASURE_REP_LCI_SUB_REPORTED_CO_BSSID7, "Co-Located BSSID List" },
1938 { 221, "Vendor Specific" },
1939 { 0x00, NULL((void*)0)}
1940};
1941
1942#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0 0
1943#define MEASURE_REP_CIVIC_SUB_REPORTED_OR_STA1 1
1944#define MEASURE_REP_CIVIC_SUB_REPORTED_T_MAC2 2
1945#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_REFERENCE3 3
1946#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_SHAPE4 4
1947#define MEASURE_REP_CIVIC_SUB_REPORTED_MAP_IMAGE5 5
1948#define MEASURE_REP_CIVIC_SUB_REPORTED_RESERVED6 6
1949#define MEASURE_REP_CIVIC_SUB_REPORTED_CO_BSSID7 7
1950
1951static const value_string ieee80211_tag_measure_report_civic_sub_id_vals[] = {
1952 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0, "Location Civic" },
1953 { MEASURE_REP_CIVIC_SUB_REPORTED_OR_STA1, "Originator Requesting STA MAC Address" },
1954 { MEASURE_REP_CIVIC_SUB_REPORTED_T_MAC2, "Target MAC Address" },
1955 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_REFERENCE3, "Location Reference" },
1956 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_SHAPE4, "Location Shape" },
1957 { MEASURE_REP_CIVIC_SUB_REPORTED_MAP_IMAGE5, "Map Image" },
1958 { MEASURE_REP_CIVIC_SUB_REPORTED_RESERVED6, "Reserved" },
1959 { MEASURE_REP_CIVIC_SUB_REPORTED_CO_BSSID7, "Co-Located BSSID List" },
1960 { 221, "Vendor Specific" },
1961 { 0x00, NULL((void*)0)}
1962};
1963
1964static const value_string frame_type[] = {
1965 {MGT_FRAME0x00, "Management frame"},
1966 {CONTROL_FRAME0x01, "Control frame"},
1967 {DATA_FRAME0x02, "Data frame"},
1968 {EXTENSION_FRAME0x03, "Extension frame"},
1969 {0, NULL((void*)0)}
1970};
1971
1972static const value_string tofrom_ds[] = {
1973 {0, "Not leaving DS or network is operating "
1974 "in AD-HOC mode (To DS: 0 From DS: 0)"},
1975 {FLAG_TO_DS0x01, "Frame from STA to DS via an AP (To DS: 1 "
1976 "From DS: 0)"},
1977 {FLAG_FROM_DS0x02, "Frame from DS to a STA via AP(To DS: 0 "
1978 "From DS: 1)"},
1979 {FLAG_TO_DS0x01|FLAG_FROM_DS0x02, "WDS (AP to AP) or Mesh (MP to MP) Frame "
1980 "(To DS: 1 From DS: 1)"},
1981 {0, NULL((void*)0)}
1982};
1983
1984static const true_false_string tods_flag = {
1985 "Frame is entering DS",
1986 "Frame is not entering DS"
1987};
1988
1989static const true_false_string fromds_flag = {
1990 "Frame is exiting DS",
1991 "Frame is not exiting DS"
1992};
1993
1994static const true_false_string more_fragments = {
1995 "More fragments follow",
1996 "This is the last fragment"
1997};
1998
1999static const true_false_string retry_flags = {
2000 "Frame is being retransmitted",
2001 "Frame is not being retransmitted"
2002};
2003
2004static const true_false_string s1g_dynamic_indication_flags = {
2005 "Dynamic",
2006 "Static"
2007};
2008
2009static const true_false_string pm_flags = {
2010 "STA will go to sleep",
2011 "STA will stay up"
2012};
2013
2014static const true_false_string md_flags = {
2015 "Data is buffered for STA at AP",
2016 "No data buffered"
2017};
2018
2019static const true_false_string protected_flags = {
2020 "Data is protected",
2021 "Data is not protected"
2022};
2023
2024static const true_false_string order_flags = {
2025 "Strictly ordered",
2026 "Not strictly ordered"
2027};
2028
2029static const true_false_string cf_ess_flags = {
2030 "Transmitter is an AP",
2031 "Transmitter is a STA"
2032};
2033
2034
2035static const true_false_string cf_privacy_flags = {
2036 "Data confidentiality required",
2037 "Data confidentiality not required"
2038};
2039
2040static const true_false_string cf_ibss_flags = {
2041 "Transmitter belongs to an IBSS",
2042 "Transmitter belongs to a BSS"
2043};
2044
2045static const true_false_string eosp_flag = {
2046 "End of service period",
2047 "Service period"
2048};
2049
2050static const true_false_string bit4_flag = {
2051 "Bits 8-15 of QoS Control field are Queue Size",
2052 "Bits 8-15 of QoS Control field are TXOP Duration Requested"
2053};
2054
2055static const true_false_string ieee80211_qos_amsdu_present_flag = {
2056 "A-MSDU",
2057 "MSDU"
2058};
2059
2060static const true_false_string csa_txrestrict_flags = {
2061 "Tx Restrict",
2062 "No Tx Restrict"
2063};
2064
2065static const true_false_string csa_initiator_flags = {
2066 "Initiator",
2067 "Non Initiator"
2068};
2069
2070static const true_false_string mesh_config_cap_power_save_level_flags = {
2071 "At least one of the peer-specific mesh power modes is deep sleep mode",
2072 "None of the peer-specific mesh power modes is deep sleep mode"
2073};
2074
2075static const true_false_string ieee80211_qos_mesh_ps = {
2076 "deep sleep mode",
2077 "light sleep mode"
2078};
2079
2080#define AUTH_ALG_OPEN0 0
2081#define AUTH_ALG_SHARED1 1
2082#define AUTH_ALG_FAST_BSS_TRANS2 2
2083#define AUTH_ALG_SAE3 3
2084#define AUTH_ALG_FILS_SK_WITHOUT_PFS4 4
2085#define AUTH_ALG_FILS_SK_WITH_PFS5 5
2086#define AUTH_ALG_FILS_PK6 6
2087#define AUTH_ALG_PASN7 7
2088#define AUTH_ALG_NETWORK_EAP0x80 0x80
2089
2090static const value_string auth_alg[] = {
2091 {AUTH_ALG_OPEN0, "Open System"},
2092 {AUTH_ALG_SHARED1, "Shared key"},
2093 {AUTH_ALG_FAST_BSS_TRANS2, "Fast BSS Transition"},
2094 {AUTH_ALG_SAE3, "Simultaneous Authentication of Equals (SAE)"},
2095 {AUTH_ALG_FILS_SK_WITHOUT_PFS4, "FILS Shared Key authentication without PFS"},
2096 {AUTH_ALG_FILS_SK_WITH_PFS5, "FILS Shared Key authentication with PFS"},
2097 {AUTH_ALG_FILS_PK6, "FILS Public Key authentication"},
2098 {AUTH_ALG_PASN7, "Pre-Association Security Negotiation (PASN)"},
2099 {AUTH_ALG_NETWORK_EAP0x80, "Network EAP"}, /* Cisco proprietary? */
2100 {0, NULL((void*)0)}
2101};
2102
2103/* IANA - Internet Key Exchange (IKE) Attributes - Group Description (https://www.iana.org/assignments/ipsec-registry/ipsec-registry.xhtml) */
2104static const value_string ff_finite_cyclic_group_vals[] = {
2105 { 1, "default 768-bit MODP group"},
2106 { 2, "alternate 1024-bit MODP group"},
2107 { 3, "EC2N group on GP[2^155]"},
2108 { 4, "EC2N group on GP[2^185]"},
2109 { 5, "1536-bit MODP group"},
2110 {14, "2048-bit MODP group"},
2111 {15, "3072-bit MODP group"},
2112 {16, "4096-bit MODP group"},
2113 {17, "6144-bit MODP group"},
2114 {18, "8192-bit MODP group"},
2115 {19, "256-bit random ECP group"},
2116 {20, "384-bit random ECP group"},
2117 {21, "521-bit random ECP group"},
2118 {22, "1024-bit MODP Group with 160-bit Prime Order Subgroup"},
2119 {23, "2048-bit MODP Group with 224-bit Prime Order Subgroup"},
2120 {24, "2048-bit MODP Group with 256-bit Prime Order Subgroup"},
2121 {25, "192-bit Random ECP Group"},
2122 {26, "224-bit Random ECP Group"},
2123 {27, "224-bit Brainpool ECP group"},
2124 {28, "256-bit Brainpool ECP group"},
2125 {29, "384-bit Brainpool ECP group"},
2126 {30, "512-bit Brainpool ECP group"},
2127 {0, NULL((void*)0)}
2128};
2129
2130static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
2131 "Permitted in QoS Data MPDUs",
2132 "Not Permitted"
2133};
2134
2135static const true_false_string ff_block_ack_params_policy_flag = {
2136 "Immediate Block Ack",
2137 "Delayed Block Ack"
2138};
2139
2140static const value_string ff_channel_width_vals[] = {
2141 {0x00, "20 MHz channel width only"},
2142 {0x01, "Any channel width in the STA's Supported Channel Width Set"},
2143 {0, NULL((void*)0)}
2144};
2145
2146static const true_false_string ff_qos_info_ap_q_ack_flag = {
2147 "APs MIB attribute dot11QAckOptionImplemented is true",
2148 "APs MIB attribute dot11QAckOptionImplemented is false"
2149};
2150
2151static const true_false_string ff_qos_info_ap_queue_req_flag = {
2152 "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
2153 "AP cannot process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
2154};
2155
2156static const true_false_string ff_qos_info_ap_txop_request_flag = {
2157 "AP can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
2158 "AP cannot process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
2159};
2160
2161static const true_false_string ff_qos_info_sta_ac_flag = {
2162 "Trigger-enabled and Delivery-enabled",
2163 "Neither Trigger-enabled nor Delivery-enabled"
2164};
2165
2166static const true_false_string ff_qos_info_sta_q_ack_flag = {
2167 "STAs MIB attribute dot11QAckOptionImplemented is true",
2168 "STAs MIB attribute dot11QAckOptionImplemented is false"
2169};
2170
2171static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
2172 {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
2173 {0x01, "AP may deliver a maximum of two MSDUs, A-MSDUs and MMPDUs per SP"},
2174 {0x02, "AP may deliver a maximum of four MSDUs, A-MSDUs and MMPDUs per SP"},
2175 {0x03, "AP may deliver a maximum of six MSDUs, A-MSDUs and MMPDUs per SP"},
2176 {0, NULL((void*)0)}
2177};
2178
2179static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
2180 "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",
2181 "STA cannot process ACK frames with the More Data bit in the Frame Control field set to 1"
2182};
2183
2184static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
2185 "Dynamic SM Power Save mode",
2186 "Static SM Power Save mode"
2187};
2188
2189static const true_false_string ff_pco_phase_cntrl_flag = {
2190 "40 MHz Phase",
2191 "20 MHz Phase"
2192};
2193
2194static const true_false_string ff_psmp_param_set_more_psmp_flag = {
2195 "More PSMP Sequences Follow",
2196 "No PSMP Sequences Follow"
2197};
2198
2199static const value_string ff_mimo_cntrl_nc_index_flags[] = {
2200 {0x00, "1 Column"},
2201 {0x01, "2 Columns"},
2202 {0x02, "3 Columns"},
2203 {0x03, "4 Columns"},
2204 {0, NULL((void*)0)}
2205};
2206
2207static const value_string ff_mimo_cntrl_nr_index_flags[] = {
2208 {0x00, "1 Row"},
2209 {0x01, "2 Rows"},
2210 {0x02, "3 Rows"},
2211 {0x03, "4 Rows"},
2212 {0, NULL((void*)0)}
2213};
2214
2215static const true_false_string ff_mimo_cntrl_channel_width_flag = {
2216 "40 MHz",
2217 "20 MHz"
2218};
2219
2220static const true_false_string ff_ht_info_information_request_flag = {
2221 "Requesting HT Information Exchange management action frame",
2222 "Should not send an HT Information Exchange management action frame"
2223};
2224
2225static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
2226 "Transmitting station is intolerant of 40 MHz operation",
2227 "Transmitting station permits 40 MHz operation"
2228};
2229
2230static const true_false_string ff_ht_info_sta_chan_width_flag = {
2231 "40 MHz",
2232 "20 MHz"
2233};
2234
2235static const value_string ff_ht_action_flags[] = {
2236 {HT_ACTION_NOTIFY_CHAN_WIDTH0, "Notify Channel Width"},
2237 {HT_ACTION_SM_PWR_SAVE1, "Spatial Multiplexing (SM) Power Save"},
2238 {HT_ACTION_PSMP_ACTION2, "Power Save Multi-Poll (PSMP) action frame"},
2239 {HT_ACTION_SET_PCO_PHASE3, "Set PCO Phase"},
2240 {HT_ACTION_MIMO_CSI4, "MIMO CSI Matrices"},
2241 {HT_ACTION_MIMO_BEAMFORMING5, "MIMO Non-compressed Beamforming"},
2242 {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6, "MIMO Compressed Beamforming"},
2243 {HT_ACTION_ANT_SEL_FEEDBACK7, "Antenna Selection Indices Feedback"},
2244 {HT_ACTION_HT_INFO_EXCHANGE8, "HT Information Exchange"},
2245 {0x00, NULL((void*)0)}
2246};
2247
2248static const value_string ff_fst_action_flags[] = {
2249 {FST_SETUP_REQUEST0, "FST Setup Request"},
2250 {FST_SETUP_RESPONSE1, "FST Setup Response"},
2251 {FST_TEAR_DOWN2, "FST Tear Down"},
2252 {FST_ACK_REQUEST3, "FST Ack Request"},
2253 {FST_ACK_RESPONSE4, "FST Ack Response"},
2254 {FST_ON_CHANNEL_TUNNEL_REQUEST5, "FST On-channel Tunnel Request"},
2255 {0x00, NULL((void*)0)}
2256};
2257
2258static const value_string ff_robust_av_streaming_action_flags[] = {
2259 {ROBUST_AV_STREAMING_SCS_REQUEST0, "SCS Request"},
2260 {ROBUST_AV_STREAMING_SCS_RESPONSE1, "SCS Response"},
2261 {ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_REQ2, "Group Membership Request"},
2262 {ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_RSP3, "Group Membership Response"},
2263 {ROBUST_AV_STREAMING_MSCS_REQUEST4, "MSCS Request"},
2264 {ROBUST_AV_STREAMING_MSCS_RESPONSE5, "MSCS Response"},
2265 {0x00, NULL((void*)0)}
2266};
2267
2268static const value_string ff_dmg_action_flags[] = {
2269 {DMG_ACTION_PWR_SAVE_CONFIG_REQ0, "Power Save Configuration Request"},
2270 {DMG_ACTION_PWR_SAVE_CONFIG_RES1, "Power Save Configuration Response"},
2271 {DMG_ACTION_INFO_REQ2, "Information Request"},
2272 {DMG_ACTION_INFO_RES3, "Information Response"},
2273 {DMG_ACTION_HANDOVER_REQ4, "Handover Request"},
2274 {DMG_ACTION_HANDOVER_RES5, "Handover Response"},
2275 {DMG_ACTION_DTP_REQ6, "DTP Request"},
2276 {DMG_ACTION_DTP_RES7, "DTP Response"},
2277 {DMG_ACTION_RELAY_SEARCH_REQ8, "Relay Search Request"},
2278 {DMG_ACTION_RELAY_SEARCH_RES9, "Relay Search Response"},
2279 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10, "Multi Relay Channel Measurement Request"},
2280 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11, "Multi Relay Channel Measurement Response"},
2281 {DMG_ACTION_RLS_REQ12, "RLS Request"},
2282 {DMG_ACTION_RLS_RES13, "RLS Response"},
2283 {DMG_ACTION_RLS_ANNOUNCE14, "RLS Announcement"},
2284 {DMG_ACTION_RLS_TEARDOWN15, "RLS Teardown"},
2285 {DMG_ACTION_RELAY_ACK_REQ16, "Relay ACK Request"},
2286 {DMG_ACTION_RELAY_ACK_RES17, "Relay ACK Response"},
2287 {DMG_ACTION_TPA_REQ18, "TPA Request"},
2288 {DMG_ACTION_TPA_RES19, "TPA Response"},
2289 {DMG_ACTION_TPA_REP20, "TPA Report"},
2290 {DMG_ACTION_ROC_REQ21, "ROC Request"},
2291 {DMG_ACTION_ROC_RES22, "ROC Response"},
2292 {0x00, NULL((void*)0)}
2293};
2294
2295static const value_string ff_unprotected_dmg_action_flags[] = {
2296 {UNPROTECTED_DMG_ANNOUNCE0, "Announce"},
2297 {UNPROTECTED_DMG_BRP1, "BRP"},
2298 {0x00, NULL((void*)0)}
2299};
2300static const value_string ff_mimo_cntrl_grouping_flags[] = {
2301 {0x00, "No Grouping"},
2302 {0x01, "Carrier Groups of 2"},
2303 {0x02, "Carrier Groups of 4"},
2304 {0x03, "Reserved"},
2305 {0, NULL((void*)0)}
2306};
2307
2308static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
2309 {0x00, "4 Bits"},
2310 {0x01, "5 Bits"},
2311 {0x02, "6 Bits"},
2312 {0x03, "8 Bits"},
2313 {0, NULL((void*)0)}
2314};
2315
2316static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
2317 {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
2318 {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
2319 {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
2320 {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
2321 {0, NULL((void*)0)}
2322};
2323
2324static const value_string ff_ppa_action_codes[] = {
2325 {PPA_DSE_ENABLEMENT1, "Protected DSE enablement"},
2326 {PPA_DSE_DEENABLEMENT2, "Protected DSE deenablement"},
2327 {PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4, "Protected Extended Channel Switch Announcement"},
2328 {PPA_DSE_MEASUREMENT_REQUEST5, "Protected DSE measurement request"},
2329 {PPA_DSE_MEASUREMENT_REPORT6, "Protected DSE measurement report"},
2330 {PPA_DSE_POWER_CONSTRAINT8, "Protected DSE power constraint"},
2331 {PPA_VENDOR_SPECIFIC9, "Protected Vendor Specific"},
2332 {PPA_GAS_INITIAL_REQUEST10, "Protected GAS Initial Request"},
2333 {PPA_GAS_INITIAL_RESPONSE11, "Protected GAS Initial Response"},
2334 {PPA_GAS_COMEBACK_REQUEST12, "Protected GAS Comeback Request"},
2335 {PPA_GAS_COMEBACK_RESPONSE13, "Protected GAS Comeback Response"},
2336 {PPA_QAB_REQUEST16, "Protected QAB Request"},
2337 {PPA_QAB_RESPONSE17, "Protected QAB Response"},
2338 {0x00, NULL((void*)0)}
2339};
2340static value_string_ext ff_ppa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_ppa_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (ff_ppa_action_codes) /
sizeof ((ff_ppa_action_codes)[0]))-1, ff_ppa_action_codes, "ff_ppa_action_codes"
, ((void*)0) }
;
2341
2342static const value_string ff_pa_action_codes[] = {
2343 {PA_20_40_BSS_COEXISTENCE_MANAGEMENT0, "20/40 BSS Coexistence Management"},
2344 {PA_DSE_ENABLEMENT1, "DSE enablement"},
2345 {PA_DSE_DEENABLEMENT2, "DSE deenablement"},
2346 {PA_DSE_REG_LOC_ANNOUNCEMENT3, "DSE Registered Location Announcement"},
2347 {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4, "Extended Channel Switch Announcement"},
2348 {PA_DSE_MEASUREMENT_REQUEST5, "DSE measurement request"},
2349 {PA_DSE_MEASUREMENT_REPORT6, "DSE measurement report"},
2350 {PA_MEASUREMENT_PILOT7, "Measurement Pilot"},
2351 {PA_DSE_POWER_CONSTRAINT8, "DSE power constraint"},
2352 {PA_VENDOR_SPECIFIC9, "Vendor Specific"},
2353 {PA_GAS_INITIAL_REQUEST10, "GAS Initial Request"},
2354 {PA_GAS_INITIAL_RESPONSE11, "GAS Initial Response"},
2355 {PA_GAS_COMEBACK_REQUEST12, "GAS Comeback Request"},
2356 {PA_GAS_COMEBACK_RESPONSE13, "GAS Comeback Response"},
2357 {PA_TDLS_DISCOVERY_RESPONSE14, "TDLS Discovery Response"},
2358 {PA_LOCATION_TRACK_NOTIFICATION15, "Location Track Notification"},
2359 {PA_QAB_REQUEST16, "QAB Request"},
2360 {PA_QAB_RESPONSE17, "QAB Response"},
2361 {PA_QMF_POLICY18, "QMF Policy"},
2362 {PA_QMF_POLICY_CHANGE19, "QMF Policy Change"},
2363 {PA_QLOAD_REQUEST20, "QLoad Request"},
2364 {PA_QLOAD_REPORT21, "QLoad Report"},
2365 {PA_HCCA_TXOP_ADVERTISEMENT22, "HCCA TXOP Advertisement"},
2366 {PA_HCCA_TXOP_RESPONSE23, "HCCA TXOP Response"},
2367 {PA_PUBLIC_KEY24, "Public Key"},
2368 {PA_CHANNEL_AVAILABILITY_QUERY25, "Channel Availability Query"},
2369 {PA_CHANNEL_SCHEDULE_MANAGEMENT26, "Channel Schedule Management"},
2370 {PA_CONTACT_VERIFICATION_SIGNAL27, "Contact Verification Signal"},
2371 {PA_GDD_ENABLEMENT_REQUEST28, "GDD Enablement Request"},
2372 {PA_GDD_ENABLEMENT_RESPONSE29, "GDD Enablement Response"},
2373 {PA_NETWORK_CHANNEL_CONTROL30, "Network Channel Control"},
2374 {PA_WHITE_SPACE_MAP_ANNOUNCEMENT31, "White Space Map Announcement"},
2375 {PA_FTM_REQUEST32, "FTM Request"},
2376 {PA_FTM33, "FTM"},
2377 {PA_FILS_DISCOVERY34, "FILS Discovery"},
2378 {PA_LOCATION_MEASUREMENT_REPORT47, "Location Measurement Report"},
2379 {PA_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT48, "ISTA Passive TB Ranging Measurement Report"},
2380 {PA_PRIMARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT49, "Primary RSTA Broadcast Passive TB Ranging Measurement Report"},
2381 {PA_SECONDARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT50, "Secondary RSTA Broadcast Passive TB Ranging Measurement Report"},
2382 {0x00, NULL((void*)0)}
2383};
2384value_string_ext ff_pa_action_codes_ext = VALUE_STRING_EXT_INIT(ff_pa_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (ff_pa_action_codes) /
sizeof ((ff_pa_action_codes)[0]))-1, ff_pa_action_codes, "ff_pa_action_codes"
, ((void*)0) }
;
2385
2386static const value_string protected_ftm_action_vals[] = {
2387 {0, "Reserved"},
2388 {1, "Protected FTM Request"},
2389 {2, "Protected FTM"},
2390 {3, "Protected Location Measurement Report"},
2391 {0, NULL((void*)0)}
2392};
2393
2394static const value_string ftm_trigger_vals[] = {
2395 {0, "Stop sending FTM frames"},
2396 {1, "Start or continue sending FTM frames"},
2397 /* all other values reserved */
2398 {0, NULL((void*)0)}
2399};
2400
2401static const value_string category_codes[] = {
2402 {CAT_SPECTRUM_MGMT0, "Spectrum Management (SM)"},
2403 {CAT_QOS1, "Quality of Service (QoS)"},
2404 {CAT_DLS2, "Direct-Link Setup (DLS)"},
2405 {CAT_BLOCK_ACK3, "Block Ack"},
2406 {CAT_PUBLIC4, "Public Action"},
2407 {CAT_RADIO_MEASUREMENT5, "Radio Measurement"},
2408 {CAT_FAST_BSS_TRANSITION6, "Fast BSS Transition"},
2409 {CAT_HT7, "High Throughput"},
2410 {CAT_SA_QUERY8, "SA Query"},
2411 {CAT_PUBLIC_PROTECTED9, "Protected Dual of Public Action"},
2412 {CAT_WNM10, "WNM"},
2413 {CAT_UNPROTECTED_WNM11, "Unprotected WNM"},
2414 {CAT_TDLS12, "TDLS"},
2415 {CAT_MESH13, "MESH"},
2416 {CAT_MULTIHOP14, "Multihop"},
2417 {CAT_SELF_PROTECTED15, "Self-protected"},
2418 {CAT_DMG16, "DMG"},
2419 {CAT_MGMT_NOTIFICATION17, "Management Notification"},
2420 {CAT_FAST_SESSION_TRANSFER18, "Fast Session Transfer"},
2421 {CAT_ROBUST_AV_STREAMING19, "Robust AV Streaming"},
2422 {CAT_UNPROTECTED_DMG20, "Unprotected DMG"},
2423 {CAT_VHT21, "VHT"},
2424 {CAT_S1G22, "S1G"},
2425 {CAT_PROTECTED_S1G23, "Protected S1G"},
2426 {CAT_FLOW_CONTROL24, "Flow Control"},
2427 {CAT_CONTROL_RESPONSE_MCS_NEG25, "Control Response MCS Negotiation"},
2428 {CAT_FILS26, "FILS"},
2429 {CAT_HE30, "HE"},
2430 {CAT_PROTECTED_HE31, "Protected HE"},
2431 {CAT_PROTECTED_FTM34, "Protected FTM"},
2432 {CAT_EHT36, "EHT"},
2433 {CAT_PROTECTED_EHT37, "Protected EHT"},
2434 {CAT_VENDOR_SPECIFIC_PROTECTED126, "Vendor-specific Protected"},
2435 {CAT_VENDOR_SPECIFIC127, "Vendor Specific"},
2436
2437 {0x80 | CAT_SPECTRUM_MGMT0, "Spectrum Management (SM) (error)"},
2438 {0x80 | CAT_QOS1, "Quality of Service (QoS (error))"},
2439 {0x80 | CAT_DLS2, "Direct-Link Setup (DLS) (error)"},
2440 {0x80 | CAT_BLOCK_ACK3, "Block Ack (error)"},
2441 {0x80 | CAT_PUBLIC4, "Public Action (error)"},
2442 {0x80 | CAT_RADIO_MEASUREMENT5, "Radio Measurement (error)"},
2443 {0x80 | CAT_FAST_BSS_TRANSITION6, "Fast BSS Transition (error)"},
2444 {0x80 | CAT_HT7, "High Throughput (error)"},
2445 {0x80 | CAT_SA_QUERY8, "SA Query (error)"},
2446 {0x80 | CAT_PUBLIC_PROTECTED9, "Protected Dual of Public Action (error)"},
2447 {0x80 | CAT_WNM10, "WNM (error)"},
2448 {0x80 | CAT_UNPROTECTED_WNM11, "Unprotected WNM (error)"},
2449 {0x80 | CAT_TDLS12, "TDLS (error)"},
2450 {0x80 | CAT_MESH13, "Mesh (error)"},
2451 {0x80 | CAT_MULTIHOP14, "Multihop (error)"},
2452 {0x80 | CAT_SELF_PROTECTED15, "Self-protected (error)"},
2453 {0x80 | CAT_DMG16, "DMG (error)"},
2454 {0x80 | CAT_MGMT_NOTIFICATION17, "Management Notification (error)"},
2455 {0x80 | CAT_FAST_SESSION_TRANSFER18, "Fast Session Transfer (error)"},
2456 {0x80 | CAT_ROBUST_AV_STREAMING19, "Robust AV Streaming (error)"},
2457 {0x80 | CAT_UNPROTECTED_DMG20, "Unprotected DMG (error)"},
2458 {0x80 | CAT_VHT21, "VHT (error)"},
2459 {0x80 | CAT_HE30, "HE (error)"},
2460 {0x80 | CAT_PROTECTED_HE31, "Protected HE (error)"},
2461 {0x80 | CAT_PROTECTED_FTM34, "Protected FTM (error)"},
2462 {0x80 | CAT_EHT36, "EHT (error)"},
2463 {0x80 | CAT_PROTECTED_EHT37, "Protected EHT (error)"},
2464 {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED126, "Vendor-specific Protected (error)"},
2465 {0x80 | CAT_VENDOR_SPECIFIC127, "Vendor Specific (error)"},
2466 {0, NULL((void*)0)}
2467};
2468static value_string_ext category_codes_ext = VALUE_STRING_EXT_INIT(category_codes){ _try_val_to_str_ext_init, 0, (sizeof (category_codes) / sizeof
((category_codes)[0]))-1, category_codes, "category_codes", (
(void*)0) }
;
2469
2470#define NR_SUB_ID_TSF_INFO1 1
2471#define NR_SUB_ID_CON_COU_STR2 2
2472#define NR_SUB_ID_BSS_TRN_CAN_PREF3 3
2473#define NR_SUB_ID_BSS_TER_DUR4 4
2474#define NR_SUB_ID_BEARING5 5
2475#define NR_SUB_ID_WIDE_BW_CHANNEL6 6
2476
2477#define NR_SUB_ID_MEASUREMENT_REPORT39 39
2478#define NR_SUB_ID_HT_CAPABILITIES45 45
2479#define NR_SUB_ID_HT_OPERATION61 61
2480#define NR_SUB_ID_SEC_CHANNEL_OFFSET62 62
2481#define NR_SUB_ID_MEASUREMENT_PILOT_INFO66 66
2482#define NR_SUB_ID_RM_ENABLE_CAP70 70
2483#define NR_SUB_ID_HT_MULTIPLE_BSSID71 71
2484#define NR_SUB_ID_VHT_CAPABILITIES191 191
2485#define NR_SUB_ID_VHT_OPERATION192 192
2486#define NR_SUB_ID_HE_CAPABILITIES193 193
2487#define NR_SUB_ID_HE_OPERATION194 194
2488#define NR_SUB_ID_EHT_CAPABILITIES199 199
2489#define NR_SUB_ID_EHT_OPERATION200 200
2490#define NR_SUB_ID_BASIC_MULTI_LINK201 201
2491
2492#define NR_SUB_ID_VENDOR_SPECIFIC221 221
2493
2494static const value_string ieee80211_neighbor_report_subelement_id_vals[] = {
2495 {NR_SUB_ID_TSF_INFO1, "TSF Information"},
2496 {NR_SUB_ID_CON_COU_STR2, "Condensed Country String"},
2497 {NR_SUB_ID_BSS_TRN_CAN_PREF3, "BSS Transition Candidate Preference"},
2498 {NR_SUB_ID_BSS_TER_DUR4, "BSS Termination Duration"},
2499 {NR_SUB_ID_BEARING5, "Bearing"},
2500 {NR_SUB_ID_WIDE_BW_CHANNEL6, "Wide Bandwidth Channel"},
2501 {NR_SUB_ID_MEASUREMENT_REPORT39, "Measurement Report"},
2502 {NR_SUB_ID_HT_CAPABILITIES45, "HT Capabilities"},
2503 {NR_SUB_ID_HT_OPERATION61, "HT Operation"},
2504 {NR_SUB_ID_SEC_CHANNEL_OFFSET62, "Secondary Channel Offset"},
2505 {NR_SUB_ID_MEASUREMENT_PILOT_INFO66, "Measurement Pilot Transmission"},
2506 {NR_SUB_ID_RM_ENABLE_CAP70, "RM Enabled Capabilities"},
2507 {NR_SUB_ID_HT_MULTIPLE_BSSID71, "Multiple BSSID"},
2508 {NR_SUB_ID_VHT_CAPABILITIES191, "VHT Capabilities"},
2509 {NR_SUB_ID_VHT_OPERATION192, "VHT Operation"},
2510 {NR_SUB_ID_HE_CAPABILITIES193, "HE Capabilities"},
2511 {NR_SUB_ID_HE_OPERATION194, "HE Operation"},
2512 {NR_SUB_ID_EHT_CAPABILITIES199, "EHT Capabilities"},
2513 {NR_SUB_ID_EHT_OPERATION200, "EHT Operation"},
2514 {NR_SUB_ID_BASIC_MULTI_LINK201, "Basic Multi-Link"},
2515 {NR_SUB_ID_VENDOR_SPECIFIC221, "Vendor Specific"},
2516 {0, NULL((void*)0)}
2517};
2518
2519static const value_string ieee80211_neighbor_report_bssid_info_reachability_vals[] = {
2520 {0, "Reserved"},
2521 {1, "Not Reachable"},
2522 {2, "Unknown"},
2523 {3, "Reachable"},
2524 {0, NULL((void*)0)}
2525};
2526
2527static const value_string action_codes[] = {
2528 {SM_ACTION_MEASUREMENT_REQUEST0, "Measurement Request"},
2529 {SM_ACTION_MEASUREMENT_REPORT1, "Measurement Report"},
2530 {SM_ACTION_TPC_REQUEST2, "TPC Request"},
2531 {SM_ACTION_TPC_REPORT3, "TPC Report"},
2532 {SM_ACTION_CHAN_SWITCH_ANNC4, "Channel Switch Announcement"},
2533 {0, NULL((void*)0)}
2534};
2535
2536static const value_string vendor_action_types_mrvl[] = {
2537 {MRVL_ACTION_MESH_MANAGEMENT1, "Mesh Management"},
2538 {0, NULL((void*)0)}
2539};
2540
2541static const value_string mesh_mgt_action_codes_mrvl[] = {
2542 {MRVL_MESH_MGMT_ACTION_RREQ0, "Route Request"},
2543 {MRVL_MESH_MGMT_ACTION_RREP1, "Route Response"},
2544 {MRVL_MESH_MGMT_ACTION_RERR2, "Route Error"},
2545 {MRVL_MESH_MGMT_ACTION_PLDM3, "Peer Link Down"},
2546 {0, NULL((void*)0)}
2547};
2548
2549static const value_string mesh_path_selection_codes[] = {
2550 {0x0, "Hybrid Wireless Mesh Protocol"},
2551 {0, NULL((void*)0)}
2552};
2553
2554static const value_string mesh_metric_codes[] = {
2555 {0x0, "Airtime Link Metric"},
2556 {0, NULL((void*)0)}
2557};
2558
2559static const value_string wme_action_codes[] = {
2560 {0x00, "Setup request"},
2561 {0x01, "Setup response"},
2562 {0x02, "Teardown"},
2563 {0x00, NULL((void*)0)}
2564};
2565
2566static const value_string wme_status_codes[] = {
2567 {0x00, "Admission accepted"},
2568 {0x01, "Invalid parameters"},
2569 {0x03, "Refused"},
2570 {0x00, NULL((void*)0)}
2571};
2572
2573static const value_string mesh_action[] = {
2574 {MESH_ACTION_LINK_METRIC_REPORT0, "Mesh Link Metric Report"},
2575 {MESH_ACTION_HWMP1, "HWMP Mesh Path Selection"},
2576 {MESH_ACTION_GATE_ANNOUNCE2, "Gate Announcement"},
2577 {MESH_ACTION_CONGESTION_CTL3, "Congestion Control Notification"},
2578 {MESH_ACTION_MCCA_SETUP_REQUEST4, "MCCA Setup Request"},
2579 {MESH_ACTION_MCCA_SETUP_REPLY5, "MCCA Setup Reply"},
2580 {MESH_ACTION_MCCA_ADV_REQUEST6, "MCCA Advertisement Request"},
2581 {MESH_ACTION_MCCA_ADV7, "MCCA Advertisement"},
2582 {MESH_ACTION_MCCA_TEARDOWN8, "MCCA Teardown"},
2583 {MESH_ACTION_TBTT_ADJ_REQUEST9, "TBTT Adjustment Request"},
2584 {MESH_ACTION_TBTT_ADJ_RESPONSE10, "TBTT Adjustment Response"},
2585 {0, NULL((void*)0)}
2586};
2587static value_string_ext mesh_action_ext = VALUE_STRING_EXT_INIT(mesh_action){ _try_val_to_str_ext_init, 0, (sizeof (mesh_action) / sizeof
((mesh_action)[0]))-1, mesh_action, "mesh_action", ((void*)0
) }
;
2588
2589static const value_string multihop_action[] = {
2590 {MULTIHOP_ACTION_PROXY_UPDATE0, "Proxy Update"},
2591 {MULTIHOP_ACTION_PROXY_UPDATE_CONF1, "Proxy Update Confirmation"},
2592 {0, NULL((void*)0)}
2593};
2594
2595static const value_string selfprot_action[] = {
2596 {SELFPROT_ACTION_MESH_PEERING_OPEN1, "Mesh Peering Open"},
2597 {SELFPROT_ACTION_MESH_PEERING_CONFIRM2, "Mesh Peering Confirm"},
2598 {SELFPROT_ACTION_MESH_PEERING_CLOSE3, "Mesh Peering Close"},
2599 {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM4, "Mesh Group Key Inform"},
2600 {SELFPROT_ACTION_MESH_GROUP_KEY_ACK5, "Mesh Group Key Ack"},
2601 {0, NULL((void*)0)}
2602};
2603
2604static const value_string mesh_peering_proto_ids[] = {
2605 {MESH_PEERING_PROTO_MGMT0, "Mesh peering management protocol"},
2606 {MESH_PEERING_PROTO_AMPE1, "Authenticated mesh peering exchange protocol"},
2607 {MESH_PEERING_PROTO_VENDOR255, "Vendor specific"},
2608 {0, NULL((void*)0)}
2609};
2610
2611static const true_false_string hwmp_targ_usn_flags = {
2612 "[USN = 1] Target Sequence Number Unknown at Originator",
2613 "[USN = 0] Target Sequence Number Known at Originator"
2614};
2615
2616static const true_false_string hwmp_targ_to_flags = {
2617 "[TO = 1] Only Target Will Respond",
2618 "[TO = 0] Intermediate Nodes May Respond"
2619};
2620
2621static const value_string ack_policy[] = {
2622 {0x00, "Normal Ack"},
2623 {0x01, "No Ack"},
2624 {0x02, "No explicit acknowledgment"},
2625 {0x03, "Block Ack"},
2626 {0x00, NULL((void*)0)}
2627};
2628
2629static const value_string qos_action_codes[] = {
2630 {QOS_ACTION_ADDTS_REQUEST0, "ADDTS Request"},
2631 {QOS_ACTION_ADDTS_RESPONSE1, "ADDTS Response"},
2632 {QOS_ACTION_DELTS2, "DELTS"},
2633 {QOS_ACTION_SCHEDULE3, "Schedule"},
2634 {QOS_ACTION_MAP_CONFIGURE4, "QoS Map Configure"},
2635 {0, NULL((void*)0)}
2636};
2637
2638static const value_string ba_action_codes[] = {
2639 {BA_ADD_BLOCK_ACK_REQUEST0, "Add Block Ack Request"},
2640 {BA_ADD_BLOCK_ACK_RESPONSE1, "Add Block Ack Response"},
2641 {BA_DELETE_BLOCK_ACK2, "Delete Block Ack"},
2642 {BA_NDP_ADD_BLOCK_ACK_REQUEST128, "NDP ADDBA Request"},
2643 {BA_NDP_ADD_BLOCK_ACK_RESPONSE129, "NDP ADDBA Response"},
2644 {BA_NDP_DELETE_BLOCK_ACK130, "NDP DELBA"},
2645 {BA_BAT_ADD_BLOCK_ACK_REQUEST132, "BAT ADDBA Request"},
2646 {BA_BAT_ADD_BLOCK_ACK_RESPONSE133, "BAT ADDBA Response"},
2647 {BA_BAT_DELETE_BLOCK_ACK134, "BAT DELBA"},
2648 {0x00, NULL((void*)0)}
2649};
2650
2651static const value_string dls_action_codes[] = {
2652 {DLS_ACTION_REQUEST0, "DLS Request"},
2653 {DLS_ACTION_RESPONSE1, "DLS Response"},
2654 {DLS_ACTION_TEARDOWN2, "DLS Teardown"},
2655 {0, NULL((void*)0)}
2656};
2657
2658static const value_string tsinfo_type[] = {
2659 {0x0, "Aperiodic or unspecified Traffic"},
2660 {0x1, "Periodic Traffic"},
2661 {0, NULL((void*)0)}
2662};
2663
2664static const value_string tsinfo_direction[] = {
2665 {0x00, "Uplink"},
2666 {0x01, "Downlink"},
2667 {0x02, "Direct link"},
2668 {0x03, "Bidirectional link"},
2669 {0, NULL((void*)0)}
2670};
2671
2672static const value_string tsinfo_access[] = {
2673 {0x00, "Reserved"},
2674 {0x01, "EDCA"},
2675 {0x02, "HCCA"},
2676 {0x03, "HEMM"},
2677 {0, NULL((void*)0)}
2678};
2679
2680static const value_string qos_up[] = {
2681 {0x00, "Best Effort"},
2682 {0x01, "Background"},
2683 {0x02, "Spare"},
2684 {0x03, "Excellent Effort"},
2685 {0x04, "Controlled Load"},
2686 {0x05, "Video"},
2687 {0x06, "Voice"},
2688 {0x07, "Network Control"},
2689 {0, NULL((void*)0)}
2690};
2691
2692static const range_string classifier_type[] = {
2693 {0x00, 0x00, "Ethernet parameters"},
2694 {0x01, 0x01, "TCP/UDP IP parameters"},
2695 {0x02, 0x02, "IEEE 802.1D/Q parameters"},
2696 {0x03, 0x03, "Filter Offset parameters"},
2697 {0x04, 0x04, "IP and higher layer parameters"},
2698 {0x05, 0x05, "IEEE 802.1D/Q parameters"},
2699 {0x06, 0x06, "IEEE 802.11 MAC header parameters"},
2700 {0x07, 0x07, "IEEE Std 802.11 downlink PV1 MPDU MAC header parameters"},
2701 {0x08, 0x08, "IEEE Std 802.11 non-downlink PV1 MPDU MAC header parameters"},
2702 {0x09, 0x09, "IEEE Std 802.11 PV1 MPDU Full Address MAC header parameters"},
2703 {0x0A, 0x0A, "IP extensions and higher layer parameters"},
2704 {0x0B, 0xFF, "Reserved" },
2705 {0, 0, NULL((void*)0)}
2706};
2707
2708static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
2709 "Sender Does Not Require Immediate Acknowledgement",
2710 "Immediate Acknowledgement Required"
2711};
2712
2713static const value_string ft_action_codes[] = {
2714 {FT_ACTION_REQUEST1, "FT Request"},
2715 {FT_ACTION_RESPONSE2, "FT Response"},
2716 {FT_ACTION_CONFIRM3, "FT Confirm"},
2717 {FT_ACTION_ACK4, "FT Ack"},
2718 {0, NULL((void*)0)}
2719};
2720
2721static const value_string sa_query_action_codes[] = {
2722 {SA_QUERY_REQUEST0, "SA Query Request"},
2723 {SA_QUERY_RESPONSE1, "SA Query Response"},
2724 {0, NULL((void*)0)}
2725};
2726
2727static const value_string ieee80211_data_encap_payload_types[] = {
2728 {1, "Remote Request/Response"},
2729 {2, "TDLS"},
2730 {0, NULL((void*)0)}
2731};
2732
2733static const true_false_string rsn_preauth_flags = {
2734 "Transmitter supports pre-authentication",
2735 "Transmitter does not support pre-authentication"
2736};
2737
2738static const true_false_string rsn_no_pairwise_flags = {
2739 "Transmitter cannot support WEP default key 0 simultaneously with "
2740 "Pairwise key",
2741 "Transmitter can support WEP default key 0 simultaneously with "
2742 "Pairwise key"
2743};
2744
2745static const value_string rsn_cap_replay_counter[] = {
2746 {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
2747 {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
2748 {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
2749 {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
2750 {0, NULL((void*)0)}
2751};
2752
2753static const true_false_string ht_ldpc_coding_flag = {
2754 "Transmitter supports receiving LDPC coded packets",
2755 "Transmitter does not support receiving LDPC coded packets"
2756};
2757
2758static const true_false_string ht_chan_width_flag = {
2759 "Transmitter supports 20MHz and 40MHz operation",
2760 "Transmitter only supports 20MHz operation"
2761};
2762
2763static const value_string ht_sm_pwsave_flag[] = {
2764 {0x00, "Static SM Power Save mode"},
2765 {0x01, "Dynamic SM Power Save mode"},
2766 {0x02, "Reserved"},
2767 {0x03, "SM Power Save disabled"},
2768 {0x00, NULL((void*)0)}
2769};
2770
2771static const true_false_string ht_green_flag = {
2772 "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
2773 "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
2774};
2775
2776static const value_string ht_rx_stbc_flag[] = {
2777 {0x00, "No Rx STBC support"},
2778 {0x01, "Rx support of one spatial stream"},
2779 {0x02, "Rx support of one and two spatial streams"},
2780 {0x03, "Rx support of one, two, and three spatial streams"},
2781 {0x00, NULL((void*)0)}
2782};
2783
2784 /* IEEE Stc 802.11ac-2013 8.4.2.29 Extended Capabilities element*/
2785static const value_string vht_max_mpdu_in_amsdu[] = {
2786 {0x00, "No limit"},
2787 {0x01, "32"},
2788 {0x02, "16"},
2789 {0x03, "8"},
2790 {0, NULL((void*)0)}
2791};
2792
2793 /* IEEE Stc 802.11ac/D3.1 */
2794
2795static const value_string vht_max_mpdu_length_flag[] = {
2796 {0x00, "3 895"},
2797 {0x01, "7 991"},
2798 {0x02, "11 454"},
2799 {0x03, "Reserved"},
2800 {0x00, NULL((void*)0)}
2801};
2802
2803static const value_string vht_supported_chan_width_set_flag[] = {
2804 {0x00, "Neither 160MHz nor 80+80 supported"},
2805 {0x01, "160MHz supported"},
2806 {0x02, "160MHz and 80+80 Supported"},
2807 {0x03, "Reserved"},
2808 {0x00, NULL((void*)0)}
2809};
2810
2811static const value_string vht_rx_stbc_flag[] = {
2812 {0x00, "None"},
2813 {0x01, "1 Spatial Stream Supported"},
2814 {0x02, "1 to 2 Spatial Stream Supported"},
2815 {0x03, "1 to 3 Spatial Stream Supported"},
2816 {0x04, "1 to 4 Spatial Stream Supported"},
2817 {0x05, "Reserved"},
2818 {0x06, "Reserved"},
2819 {0x07, "Reserved"},
2820 {0x00, NULL((void*)0)}
2821};
2822
2823static const value_string num_plus_one_3bit_flag[] = {
2824 {0x00, "1"},
2825 {0x01, "2"},
2826 {0x02, "3"},
2827 {0x03, "4"},
2828 {0x04, "5"},
2829 {0x05, "6"},
2830 {0x06, "7"},
2831 {0x07, "8"},
2832 {0x00, NULL((void*)0)}
2833};
2834
2835static const value_string vht_max_ampdu_flag[] = {
2836 {0x00, "8 191"},
2837 {0x01, "16 383"},
2838 {0x02, "32 767"},
2839 {0x03, "65 535"},
2840 {0x04, "131 071"},
2841 {0x05, "262 143"},
2842 {0x06, "524 287"},
2843 {0x07, "1 048 575"},
2844 {0x00, NULL((void*)0)}
2845};
2846
2847static const value_string vht_link_adapt_flag[] = {
2848 {0x00, "No Feedback"},
2849 {0x01, "Reserved (logically only solicited feedback)"},
2850 {0x02, "Unsolicited feedback only"},
2851 {0x03, "Both (can provide unsolicited feedback and respond to VHT MRQ)"},
2852 {0x00, NULL((void*)0)}
2853};
2854
2855static const value_string vht_supported_mcs_flag[] = {
2856 {0x00, "MCS 0-7"},
2857 {0x01, "MCS 0-8"},
2858 {0x02, "MCS 0-9"},
2859 {0x03, "Not Supported"},
2860 {0x00, NULL((void*)0)}
2861};
2862
2863static const value_string vht_tpe_pwr_units[] = {
2864 { 0, "Local EIRP" },
2865 { 1, "Local EIRP PSD" },
2866 { 2, "Regulatory client EIRP" },
2867 { 3, "Regulatory client EIRP PSD" },
2868 { 4, "Additional regulatory client EIRP" },
2869 { 5, "Additional regulatory client EIRP PSD" },
2870 { 6, "Reserved" },
2871 { 7, "Reserved" },
2872 {0x00, NULL((void*)0)}
2873};
2874
2875static const true_false_string vht_ndp_annc_sta_info_feedback_type = {
2876 "MU feedback requested",
2877 "SU feedback requested"
2878};
2879
2880static const true_false_string ht_max_amsdu_flag = {
2881 "7935 bytes",
2882 "3839 bytes"
2883};
2884
2885static const true_false_string ht_dss_cck_40_flag = {
2886 "Will/Can use DSSS/CCK in 40 MHz",
2887 "Won't/Can't use of DSSS/CCK in 40 MHz"
2888};
2889
2890static const true_false_string ht_40_mhz_intolerant_flag = {
2891 "Use of 40 MHz transmissions restricted/disallowed",
2892 "Use of 40 MHz transmissions unrestricted/allowed"
2893};
2894
2895static const value_string ampduparam_mpdu_start_spacing_flags[] = {
2896 {0x00, "No restriction"},
2897 {0x01, "1/4 [usec]"},
2898 {0x02, "1/2 [usec]"},
2899 {0x03, "1 [usec]"},
2900 {0x04, "2 [usec]"},
2901 {0x05, "4 [usec]"},
2902 {0x06, "8 [usec]"},
2903 {0x07, "16 [usec]"},
2904 {0x00, NULL((void*)0)}
2905};
2906
2907static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
2908 "Not Equal",
2909 "Equal",
2910};
2911
2912static const value_string mcsset_tx_max_spatial_streams_flags[] = {
2913 {0x00, "1 spatial stream"},
2914 {0x01, "2 spatial streams"},
2915 {0x02, "3 spatial streams"},
2916 {0x03, "4 spatial streams"},
2917 {0x04, "TX MCS Set Not Defined"},
2918 {0x00, NULL((void*)0)}
2919};
2920
2921static const value_string htex_mcs_flags[] = {
2922 {0x00, "STA does not provide MCS feedback"},
2923 {0x01, "Reserved"},
2924 {0x02, "STA provides only unsolicited MCS feedback"},
2925 {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
2926 {0x00, NULL((void*)0)}
2927};
2928
2929static const value_string txbf_calib_flag[] = {
2930 {0x00, "Not supported"},
2931 {0x01, "Can respond to a calibration request but cannot initiate calibration"},
2932 {0x02, "Reserved"},
2933 {0x03, "Can both initiate and respond to a calibration request"},
2934 {0x00, NULL((void*)0)}
2935};
2936
2937static const value_string txbf_feedback_flags[] = {
2938 {0x00, "Not supported"},
2939 {0x01, "Delayed feedback capable"},
2940 {0x02, "Immediate feedback capable"},
2941 {0x03, "Delayed and immediate feedback capable"},
2942 {0x00, NULL((void*)0)}
2943};
2944
2945static const value_string txbf_antenna_flags[] = {
2946 {0x00, "1 TX antenna sounding"},
2947 {0x01, "2 TX antenna sounding"},
2948 {0x02, "3 TX antenna sounding"},
2949 {0x03, "4 TX antenna sounding"},
2950 {0x00, NULL((void*)0)}
2951};
2952
2953static const value_string txbf_csi_max_rows_bf_flags[] = {
2954 {0x00, "1 row of CSI"},
2955 {0x01, "2 rows of CSI"},
2956 {0x02, "3 rows of CSI"},
2957 {0x03, "4 rows of CSI"},
2958 {0x00, NULL((void*)0)}
2959};
2960
2961static const value_string txbf_chan_est_flags[] = {
2962 {0x00, "1 space time stream"},
2963 {0x01, "2 space time streams"},
2964 {0x02, "3 space time streams"},
2965 {0x03, "4 space time streams"},
2966 {0x00, NULL((void*)0)}
2967};
2968
2969static const value_string txbf_min_group_flags[] = {
2970 {0x00, "No grouping supported"},
2971 {0x01, "Groups of 1, 2 supported"},
2972 {0x02, "Groups of 1, 4 supported"},
2973 {0x03, "Groups of 1, 2, 4 supported"},
2974 {0x00, NULL((void*)0)}
2975};
2976
2977static const value_string hta_ext_chan_offset_flag[] = {
2978 {0x00, "No Extension Channel"},
2979 {0x01, "Extension Channel above control channel"},
2980 {0x02, "Undefined"},
2981 {0x03, "Extension Channel below control channel"},
2982 {0x00, NULL((void*)0)}
2983};
2984
2985static const true_false_string hta_rec_tx_width_flag = {
2986 "Any channel width enabled",
2987 "Use 20MHz channel (control)"
2988};
2989
2990static const true_false_string hta_rifs_mode_flag = {
2991 "Use of RIFS permitted",
2992 "Use of RIFS prohibited"
2993};
2994
2995static const true_false_string hta_controlled_access_flag = {
2996 "Not only PSMP",
2997 "PSMP only"
2998};
2999
3000static const value_string hta_service_interval_flag[] = {
3001 {0x00, "5ms"},
3002 {0x01, "10ms"},
3003 {0x02, "15ms"},
3004 {0x03, "20ms"},
3005 {0x04, "25ms"},
3006 {0x05, "30ms"},
3007 {0x06, "35ms"},
3008 {0x07, "40ms"},
3009 {0x00, NULL((void*)0)}
3010};
3011
3012static const value_string hta_operating_mode_flag[] = {
3013 {0x00, "Pure HT, no protection"},
3014 {0x01, "There may be non-HT devices (control & ext channel)"},
3015 {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
3016 {0x03, "Mixed: no non-HT is associated, protect on"},
3017 {0x00, NULL((void*)0)}
3018};
3019
3020static const true_false_string hta_non_gf_devices_flag = {
3021 "All HT devices associated are GF capable",
3022 "One or More HT devices are not GF capable"
3023};
3024
3025static const true_false_string hta_dual_stbc_protection_flag = {
3026 "Dual CTS protections is used",
3027 "Regular use of RTS/CTS"
3028};
3029
3030static const true_false_string hta_secondary_beacon_flag = {
3031 "Secondary Beacon",
3032 "Primary Beacon"
3033};
3034
3035static const true_false_string hta_lsig_txop_protection_flag = {
3036 "Full Support",
3037 "Not full support"
3038};
3039
3040static const true_false_string hta_pco_active_flag = {
3041 "PCO is activated in the BSS",
3042 "PCO is not activated in the BSS"
3043};
3044
3045static const true_false_string hta_pco_phase_flag = {
3046 "Switch to 20MHz phase/keep 20MHz",
3047 "Switch to 40MHz phase/keep 40MHz"
3048};
3049
3050static const value_string ht_info_secondary_channel_offset_flags[] = {
3051 {0x00, "No secondary channel"},
3052 {0x01, "Secondary channel is above the primary channel"},
3053 {0x02, "Reserved"},
3054 {0x03, "Secondary channel is below the primary channel"},
3055 {0x00, NULL((void*)0)}
3056};
3057
3058static const true_false_string ht_info_channel_sta_width_flag = {
3059 "Channel of any width supported",
3060 "20 MHz channel width only"
3061};
3062
3063static const true_false_string ht_info_rifs_mode_flag = {
3064 "Permitted",
3065 "Prohibited"
3066};
3067
3068static const value_string ht_info_operating_protection_mode_flags[] = {
3069 {0x00, "No protection mode"},
3070 {0x01, "HT non-member protection mode"},
3071 {0x02, "20 MHz protection mode"},
3072 {0x03, "non-HT mixed mode"},
3073 {0x00, NULL((void*)0)}
3074};
3075
3076static const true_false_string ht_info_non_greenfield_sta_present_flag = {
3077 "One or more associated STAs are not greenfield capable",
3078 "All associated STAs are greenfield capable"
3079};
3080
3081static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
3082 "Use of protection for non-HT STAs by overlapping BSSs is needed",
3083 "Use of protection for non-HT STAs by overlapping BSSs is not needed"
3084};
3085
3086static const true_false_string ht_info_dual_beacon_flag = {
3087 "AP transmits a secondary beacon",
3088 "No second beacon is transmitted"
3089};
3090
3091static const true_false_string ht_info_stbc_beacon_flag = {
3092 "STBC beacon",
3093 "Primary beacon"
3094};
3095
3096static const true_false_string htc_lac_trq_flag = {
3097 "Want sounding PPDU",
3098 "Don't want sounding PPDU"
3099};
3100
3101static const true_false_string htc_lac_mai_mrq_flag = {
3102 "MCS feedback requested",
3103 "No MCS feedback requested"
3104};
3105
3106static const value_string ieee80211_htc_lac_asel_command_flags[] = {
3107 {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
3108 {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
3109 {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
3110 {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
3111 {0x04, "Sounding Label"},
3112 {0x05, "No feedback, ASEL training failure"},
3113 {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
3114 {0x07, "Reserved"},
3115 {0x00, NULL((void*)0)}
3116};
3117
3118static const value_string ieee80211_htc_cal_pos_flags[] = {
3119 {0x00, "Not a calibration frame"},
3120 {0x01, "Calibration Start"},
3121 {0x02, "Sounding Response"},
3122 {0x03, "Sounding Complete"},
3123 {0x00, NULL((void*)0)}
3124};
3125
3126static const value_string ieee80211_htc_csi_steering_flags[] = {
3127 {0x00, "No feedback required"},
3128 {0x01, "CSI"},
3129 {0x02, "Non-compressed Beamforming Feedback Matrix"},
3130 {0x03, "Compressed Beamforming Feedback Matrix"},
3131 {0x00, NULL((void*)0)}
3132};
3133
3134static const true_false_string ieee80211_htc_ndp_announcement_flag = {
3135 "NDP will follow",
3136 "No NDP will follow"
3137};
3138
3139static const value_string ieee80211_htc_bw_recommended_vht_mcs_vals[] = {
3140 {0, "20 MHz"},
3141 {1, "40 MHz"},
3142 {2, "80 MHz"},
3143 {3, "160 MHz and 80+80 MHz"},
3144 {0, NULL((void*)0)}
3145};
3146
3147static const value_string ieee80211_htc_s1g_bw_recommended_vht_mcs_vals[] = {
3148 {0, "1 MHz"},
3149 {1, "2 MHz"},
3150 {2, "4 MHz"},
3151 {3, "8 MHz"},
3152 {4, "16 MHz"},
3153 {5, "Reserved"},
3154 {6, "Reserved"},
3155 {7, "Reserved"},
3156 {0, NULL((void*)0)}
3157};
3158
3159static const value_string ieee80211_htc_coding_type_vals[] = {
3160 {0, "BCC"},
3161 {1, "LDPC"},
3162 {0, NULL((void*)0)}
3163};
3164
3165static const value_string ieee80211_htc_fb_tx_type_vals[] = {
3166 {0, "Not beamformed"},
3167 {1, "Beamformed"},
3168 {0, NULL((void*)0)}
3169};
3170
3171static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
3172 {0x00, "No Secondary Channel"},
3173 {0x01, "Above Primary Channel"},
3174 {0x02, "Reserved"},
3175 {0x03, "Below Primary Channel"},
3176 {0x00, NULL((void*)0)}
3177};
3178
3179#define BSS_BITMASK_UP00x0001 0x0001
3180#define BSS_BITMASK_UP10x0002 0x0002
3181#define BSS_BITMASK_UP20x0004 0x0004
3182#define BSS_BITMASK_UP30x0008 0x0008
3183#define BSS_BITMASK_UP40x0010 0x0010
3184#define BSS_BITMASK_UP50x0020 0x0020
3185#define BSS_BITMASK_UP60x0040 0x0040
3186#define BSS_BITMASK_UP70x0080 0x0080
3187#define BSS_BITMASK_AC00x0100 0x0100
3188#define BSS_BITMASK_AC10x0200 0x0200
3189#define BSS_BITMASK_AC20x0400 0x0400
3190#define BSS_BITMASK_AC30x0800 0x0800
3191#define BSS_BITMASK_RSV0xF000 0xF000
3192
3193static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
3194 {0x00, "Frames may be transmitted before the channel switch has been completed"},
3195 {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
3196 {0x00, NULL((void*)0)}
3197};
3198
3199static const value_string service_interval_granularity_vals[] = {
3200 { 0, "5 ms" },
3201 { 1, "10 ms" },
3202 { 2, "15 ms" },
3203 { 3, "20 ms" },
3204 { 4, "25 ms" },
3205 { 5, "30 ms" },
3206 { 6, "35 ms" },
3207 { 7, "40 ms" },
3208 { 0x00, NULL((void*)0) }
3209};
3210
3211static const value_string wep_type_vals[] = {
3212 { DOT11DECRYPT_KEY_TYPE_WEP0, STRING_KEY_TYPE_WEP"wep" },
3213 { DOT11DECRYPT_KEY_TYPE_WPA_PWD3, STRING_KEY_TYPE_WPA_PWD"wpa-pwd" },
3214 { DOT11DECRYPT_KEY_TYPE_WPA_PSK4, STRING_KEY_TYPE_WPA_PSK"wpa-psk" },
3215 { DOT11DECRYPT_KEY_TYPE_TK6, STRING_KEY_TYPE_TK"tk" },
3216 { DOT11DECRYPT_KEY_TYPE_MSK7, STRING_KEY_TYPE_MSK"msk" },
3217 { 0x00, NULL((void*)0) }
3218};
3219
3220static const value_string ieee80211_ht_pren_type_vals[] = {
3221 { 51, "HT Capabilities (802.11n D1.10)" },
3222 { 52, "HT Additional Capabilities (802.11n D1.00)" },
3223 { 0, NULL((void*)0) }
3224};
3225
3226static const true_false_string ieee80211_cf_ssw_direction = {
3227 "Transmitted by the beamforming responder",
3228 "Transmitted by the beamforming initiator"
3229};
3230
3231static const value_string bss_type[] = {
3232 {0x0, "Reserved"},
3233 {0x1, "IBSS"},
3234 {0x2, "PBSS"},
3235 {0x3, "Infrastructure BSS"},
3236 {0, NULL((void*)0)}
3237};
3238
3239static const value_string band_id[] = {
3240 {0x0, "TV white spaces"},
3241 {0x1, "Sub-1 GHz (excluding TV white spaces)"},
3242 {0x2, "2.4 GHz"},
3243 {0x3, "3.6 GHz"},
3244 {0x4, "4.9 and 5 GHz"},
3245 {0x5, "60 GHz"},
3246 {0x6, "45 GHz"},
3247 {0x7, "6 GHz"},
3248 {0, NULL((void*)0)}
3249};
3250
3251static const value_string extended_sc_mcs[] = {
3252 {0x0, "None"},
3253 {0x1, "MCS 9.1"},
3254 {0x2, "MCS 12.1"},
3255 {0x3, "MCS 12.2"},
3256 {0x4, "MCS 12.3"},
3257 {0x5, "MCS 12.4"},
3258 {0x6, "MCS 12.5"},
3259 {0x7, "MCS 12.6"},
3260 {0, NULL((void*)0)}
3261};
3262
3263static const range_string max_basic_sf_amsdu[] = {
3264 {0, 0, "No Limit"},
3265 {1, 1, "4 Basic subframes"},
3266 {2, 2, "8 Basic subframes"},
3267 {3, 3, "16 Basic subframes"},
3268 {4, 4, "32 Basic subframes"},
3269 {5, 5, "64 Basic subframes"},
3270 {6, 6, "128 Basic subframes"},
3271 {7, 7, "256 Basic subframes"},
3272 {8, 255, "reserved"},
3273 {0, 0, NULL((void*)0)}
3274};
3275
3276static const range_string max_short_sf_amsdu[] = {
3277 {0, 0, "No Limit"},
3278 {1, 1, "32 Short subframes"},
3279 {2, 2, "64 Short subframes"},
3280 {3, 3, "128 Short subframes"},
3281 {4, 4, "256 Short subframes"},
3282 {5, 5, "512 Short subframes"},
3283 {6, 6, "1024 Short subframes"},
3284 {7, 255, "reserved"},
3285 {0, 0, NULL((void*)0)}
3286};
3287
3288static const value_string allocation_type[] = {
3289 {0x0, "SP Allocation"},
3290 {0x1, "CBAP allocation"},
3291 {0, NULL((void*)0)}
3292};
3293
3294static const value_string vht_operation_info_channel_width[] = {
3295 {0x00, "20MHz or 40MHz"},
3296 {0x01, "80MHZ"},
3297 {0x10, "160MHz"},
3298 {0x11, "80MHz+80MHz"},
3299 {0, NULL((void*)0)}
3300};
3301static const value_string operating_mode_field_channel_width[] = {
3302 {0x00, "20MHz"},
3303 {0x01, "40MHZ"},
3304 {0x02, "80MHz"},
3305 {0x03, "160MHz or 80MHz+80MHz"},
3306 {0, NULL((void*)0)}
3307};
3308
3309static const value_string operat_mode_field_rxnss[] = {
3310 {0x0, "1Nss"},
3311 {0x1, "2Nss"},
3312 {0x2, "3Nss"},
3313 {0x3, "4Nss"},
3314 {0x4, "5Nss"},
3315 {0x5, "6Nss"},
3316 {0x6, "7Nss"},
3317 {0x7, "8Nss"},
3318 {0, NULL((void*)0)}
3319};
3320
3321#define VHT_ACT_VHT_COMPRESSED_BEAMFORMING0 0
3322#define VHT_ACT_GROUP_ID_MANAGEMENT1 1
3323#define VHT_ACT_OPERATION_MODE_NOTIFICATION2 2
3324
3325static const value_string vht_action_vals[] = {
3326 {VHT_ACT_VHT_COMPRESSED_BEAMFORMING0, "VHT Compressed Beamforming"},
3327 {VHT_ACT_GROUP_ID_MANAGEMENT1, "Group ID Management"},
3328 {VHT_ACT_OPERATION_MODE_NOTIFICATION2, "Operating Mode Notification"},
3329 {0, NULL((void*)0)}
3330};
3331
3332static const value_string ff_vht_mimo_cntrl_nc_index_vals[] = {
3333 {0x00, "1 Column"},
3334 {0x01, "2 Columns"},
3335 {0x02, "3 Columns"},
3336 {0x03, "4 Columns"},
3337 {0x04, "5 Columns"},
3338 {0x05, "6 Columns"},
3339 {0x06, "7 Columns"},
3340 {0x07, "8 Columns"},
3341 {0, NULL((void*)0)}
3342};
3343
3344static const value_string ff_vht_mimo_cntrl_nr_index_vals[] = {
3345 {0x00, "1 Row"},
3346 {0x01, "2 Rows"},
3347 {0x02, "3 Rows"},
3348 {0x03, "4 Rows"},
3349 {0x04, "5 Rows"},
3350 {0x05, "6 Rows"},
3351 {0x06, "7 Rows"},
3352 {0x07, "8 Rows"},
3353 {0, NULL((void*)0)}
3354};
3355
3356static const value_string ff_vht_mimo_cntrl_channel_width_vals[] = {
3357 {0x00, "20 MHz"},
3358 {0x01, "40 MHz"},
3359 {0x02, "80 MHz"},
3360 {0x03, "160 MHz / 80+80 MHz"},
3361 {0, NULL((void*)0)}
3362};
3363
3364static const value_string ff_vht_mimo_cntrl_grouping_vals[] = {
3365 {0x00, "1 (No Grouping)"},
3366 {0x01, "2"},
3367 {0x02, "4"},
3368 {0x03, "Reserved"},
3369 {0, NULL((void*)0)}
3370};
3371
3372static const value_string ff_vht_mimo_cntrl_feedback_vals[] = {
3373 {0x00, "SU"},
3374 {0x01, "MU"},
3375 {0, NULL((void*)0)}
3376};
3377
3378#define S1G_ACT_AID_SWITCH_REQUEST0 0
3379#define S1G_ACT_AID_SWITCH_RESPONSE1 1
3380#define S1G_ACT_SYNC_CONTROL2 2
3381#define S1G_ACT_STA_INFO_ANNOUNCE3 3
3382#define S1G_ACT_EDCA_PARAM_SET4 4
3383#define S1G_ACT_EL_OPERATION5 5
3384#define S1G_ACT_TWT_SETUP6 6
3385#define S1G_ACT_TWT_TEARDOWN7 7
3386#define S1G_ACT_SECT_GROUP_ID_LIST8 8
3387#define S1G_ACT_SECT_ID_FEEDBACK9 9
3388#define S1G_ACT_RESERVED10 10
3389#define S1G_ACT_TWT_INFORMATION11 11
3390
3391static const value_string s1g_action_vals[] = {
3392 {S1G_ACT_AID_SWITCH_REQUEST0, "AID Switch Request"},
3393 {S1G_ACT_AID_SWITCH_RESPONSE1, "AID Switch Response"},
3394 {S1G_ACT_SYNC_CONTROL2, "Sync Control"},
3395 {S1G_ACT_STA_INFO_ANNOUNCE3, "STA Information Announcement"},
3396 {S1G_ACT_EDCA_PARAM_SET4, "EDCA Parameter Set"},
3397 {S1G_ACT_EL_OPERATION5, "EL Operation"},
3398 {S1G_ACT_TWT_SETUP6, "TWT Setup"},
3399 {S1G_ACT_TWT_TEARDOWN7, "TWT Teardown"},
3400 {S1G_ACT_SECT_GROUP_ID_LIST8, "Sectorized Group ID List"},
3401 {S1G_ACT_SECT_ID_FEEDBACK9, "Sector ID Feedback"},
3402 {S1G_ACT_RESERVED10, "Reserved"},
3403 {S1G_ACT_TWT_INFORMATION11, "TWT Information"},
3404 {0, NULL((void*)0)},
3405};
3406
3407#define PROT_S1G_ACT_REACH_ADDR_UPDATE0 0
3408#define PROT_S1G_ACT_RELAY_ACTIVATE_REQ1 1
3409#define PROT_S1G_ACT_RELAY_ACTIVATE_RESP2 2
3410#define PROT_S1G_ACT_HEADER_COMPRESSION3 3
3411#define PROT_S1G_ACT_TWT_SETUP4 4
3412#define PROT_S1G_ACT_TWT_TEARDOWN5 5
3413#define PROT_S1G_ACT_TWT_INFORMATION6 6
3414#define PROT_S1G_ACT_AID_SWITCH_REQUEST7 7
3415#define PROT_S1G_ACT_AID_SWITCH_RESPONSE8 8
3416#define PROT_S1G_ACT_SYNC_CONTROL9 9
3417#define PROT_S1G_ACT_STA_INFO_ANNOUNCE10 10
3418#define PROT_S1G_ACT_EDCA_PARAM_SET11 11
3419#define PROT_S1G_ACT_EL_OPERATION12 12
3420#define PROT_S1G_ACT_SECT_GROUP_ID_LIST13 13
3421#define PROT_S1G_ACT_SECT_ID_FEEDBACK14 14
3422
3423static const value_string prot_s1g_action_vals[] = {
3424 {PROT_S1G_ACT_REACH_ADDR_UPDATE0, "Reachable Address Update"},
3425 {PROT_S1G_ACT_RELAY_ACTIVATE_REQ1, "Relay Activation Request"},
3426 {PROT_S1G_ACT_RELAY_ACTIVATE_RESP2, "Relay Activation Response"},
3427 {PROT_S1G_ACT_HEADER_COMPRESSION3, "Header Compression"},
3428 {PROT_S1G_ACT_TWT_SETUP4, "Protected TWT Setup"},
3429 {PROT_S1G_ACT_TWT_TEARDOWN5, "Protected TWT Teardown"},
3430 {PROT_S1G_ACT_TWT_INFORMATION6, "Protected TWT Information"},
3431 {PROT_S1G_ACT_AID_SWITCH_REQUEST7, "Protected AID Switch Request"},
3432 {PROT_S1G_ACT_AID_SWITCH_RESPONSE8, "Protected AID Switch Response"},
3433 {PROT_S1G_ACT_SYNC_CONTROL9, "Protected Sync Control"},
3434 {PROT_S1G_ACT_STA_INFO_ANNOUNCE10, "Protected STA Information Announcement"},
3435 {PROT_S1G_ACT_EDCA_PARAM_SET11, "Protected EDCA Parameter Set"},
3436 {PROT_S1G_ACT_EL_OPERATION12, "Protected EL Operation"},
3437 {PROT_S1G_ACT_SECT_GROUP_ID_LIST13, "Protected Sectorized Group ID List"},
3438 {PROT_S1G_ACT_SECT_ID_FEEDBACK14, "Protected Sector ID Feedback"},
3439 {0, NULL((void*)0)},
3440};
3441
3442static const value_string twt_neg_type_vals[] = {
3443 {0x0, "Individual TWT"},
3444 {0x1, "Wake TBTT"},
3445 {0x2, "Broadcast TWT schedule, TWT element in broadcast management frame"},
3446 {0x3, "Broadcast TWT schedule, TWT element in unicast management frame"},
3447 {0, NULL((void*)0)},
3448};
3449
3450static const true_false_string twt_responder_pm_mode_tfs = {
3451 "AP may doze outside the TWT",
3452 "AP is always awake",
3453};
3454
3455static const true_false_string twt_requester_tfs = {
3456 "This STA is a TWT Requesting STA",
3457 "This STA is a TWT Responding STA or a TWT scheduling AP",
3458};
3459
3460static const true_false_string twt_info_frame_disabled_tfs = {
3461 "Reception of TWT Information frames is disabled",
3462 "Reception of TWT Information frames is enabled",
3463};
3464
3465static const true_false_string twt_wake_duration_unit_tfs = {
3466 "1 TU",
3467 "256 microseconds",
3468};
3469
3470#define REQUEST_TWT0 0
3471#define SUGGEST_TWT1 1
3472#define DEMAND_TWT2 2
3473#define TWT_GROUPING3 3
3474#define ACCEPT_TWT4 4
3475#define ALTERNATE_TWT5 5
3476#define DICTATE_TWT6 6
3477#define REJECT_TWT7 7
3478
3479static const value_string twt_setup_cmd[] = {
3480 {REQUEST_TWT0, "Request TWT"},
3481 {SUGGEST_TWT1, "Suggest TWT"},
3482 {DEMAND_TWT2, "Demand TWT"},
3483 {TWT_GROUPING3, "TWT Grouping"},
3484 {ACCEPT_TWT4, "Accept TWT"},
3485 {ALTERNATE_TWT5, "Alternate TWT"},
3486 {DICTATE_TWT6, "Dictate TWT"},
3487 {REJECT_TWT7, "Reject TWT"},
3488 {0, NULL((void*)0)},
3489};
3490
3491static const true_false_string twt_trigger = {
3492 "TWT SP includes trigger frames",
3493 "TWT SP does not include trigger frames",
3494};
3495
3496static const true_false_string twt_implicit = {
3497 "TWT is implicit",
3498 "TWT is explicit",
3499};
3500
3501static const true_false_string twt_flow_type = {
3502 "TWT is unannounced, the TWT responding STA can send frames at any time",
3503 "TWT is announced, the TWT Requesting STA will send trigger frames",
3504};
3505
3506static const value_string he_phy_device_class_vals[] = {
3507 { 0, "Class B Device" },
3508 { 1, "Class A Device" },
3509 { 0, NULL((void*)0) }
3510};
3511
3512static const value_string he_phy_midamble_tx_rx_max_nsts_vals[] = {
3513 { 0, "1 Space-Time Stream" },
3514 { 1, "2 Space-Time Streams" },
3515 { 2, "3 Space-Time Streams" },
3516 { 3, "4 Space-Time Streams" },
3517 { 0, NULL((void*)0) }
3518};
3519
3520static const value_string he_phy_dcm_max_constellation_vals[] = {
3521 { 0, "DCM is not supported" },
3522 { 1, "BPSK" },
3523 { 2, "QPSK" },
3524 { 3, "16-QAM" },
3525 { 0, NULL((void*)0) }
3526};
3527
3528static const value_string he_phy_dcm_max_nss_vals[] = {
3529 { 0, "1 Spatial Stream" },
3530 { 1, "2 Spatial Streams" },
3531 { 0, NULL((void*)0) }
3532};
3533
3534static const value_string he_phy_dcm_max_ru_vals[] = {
3535 { 0, "242-tone RU" },
3536 { 1, "484-tone RU" },
3537 { 2, "996-tone RU" },
3538 { 3, "2x996-tone RU"},
3539 { 0, NULL((void*)0) }
3540};
3541
3542static const value_string he_phy_nominal_packet_padding_vals[] = {
3543 { 0, "0 µs for all constellations, Nss and RU allocations" },
3544 { 1, "8 µs for all constellations, Nss and RU allocations" },
3545 { 2, "16 µs for all constellations, Nss and RU allocations" },
3546 { 3, "Reserved" },
3547 { 0, NULL((void*)0) }
3548};
3549
3550// MBO-OCE attributes
3551#define MBO_AP_CAPABILITY_INDICATION1 1
3552#define MBO_NON_PREF_CHANNEL_REPORT2 2
3553#define MBO_CELLULAR_DATA_CAPABILITIES3 3
3554#define MBO_ASSOCIATION_DISALLOWED4 4
3555#define MBO_CELLULAR_DATA_PREFERENCE5 5
3556#define MBO_TRANSITION_REASON6 6
3557#define MBO_TRANSITION_REJECTION_REASON7 7
3558#define MBO_ASSOCIATION_RETRY_DELAY8 8
3559#define OCE_CAPABILITY_INDICATION101 101
3560#define OCE_RSSI_ASSOCIATION_REJECTION102 102
3561#define OCE_REDUCED_WAN_METRICS103 103
3562#define OCE_RNR_COMPLETENESS104 104
3563#define OCE_PROBE_SUPPR_BSSID105 105
3564#define OCE_PROBE_SUPPR_SSID106 106
3565
3566static const value_string wfa_mbo_oce_attr_id_vals[] = {
3567 { MBO_AP_CAPABILITY_INDICATION1, "MBO AP Capability Indication"},
3568 { MBO_NON_PREF_CHANNEL_REPORT2, "Non-preferred Channel Report"},
3569 { MBO_CELLULAR_DATA_CAPABILITIES3, "Cellular Data Capabilities"},
3570 { MBO_ASSOCIATION_DISALLOWED4, "Association Disallowed"},
3571 { MBO_CELLULAR_DATA_PREFERENCE5, "Cellular Data Connection Preference"},
3572 { MBO_TRANSITION_REASON6, "Transition Reason Code BTM Request"},
3573 { MBO_TRANSITION_REJECTION_REASON7, "Transition Rejection Reason Code"},
3574 { MBO_ASSOCIATION_RETRY_DELAY8, "Association Retry Delay"},
3575 { OCE_CAPABILITY_INDICATION101, "OCE Capability Indication" },
3576 { OCE_RSSI_ASSOCIATION_REJECTION102, "RSSI-based (Re-)Association Rejection" },
3577 { OCE_REDUCED_WAN_METRICS103, "Reduced WAN Metrics" },
3578 { OCE_RNR_COMPLETENESS104, "RNR Completeness" },
3579 { OCE_PROBE_SUPPR_BSSID105, "Probe Suppression BSSIDs" },
3580 { OCE_PROBE_SUPPR_SSID106, "Probe Suppression SSIDs" },
3581 { 0, NULL((void*)0)}
3582};
3583
3584static const value_string wfa_mbo_non_pref_chan_pref_vals[] = {
3585 { 0, "non-operable band/channel for the STA"},
3586 { 1, "band/channel the STA prefers not to operate in"},
3587 { 255, "band/channel the STA prefers to operate in"},
3588 { 0, NULL((void*)0) }
3589};
3590
3591static const value_string wfa_mbo_non_pref_chan_reason_vals[] = {
3592 { 0, "Unspecified reason"},
3593 { 1, "An unacceptable level of interference is being experienced by STA in this channel"},
3594 { 2, "The STA has another active connection in this channel, "
3595 "or near enough to this channel to cause operating interference"},
3596 { 0, NULL((void*)0) }
3597};
3598
3599static const value_string wfa_mbo_cellular_cap_vals[] = {
3600 { 1, "Cellular data connection available"},
3601 { 2, "Cellular data connection not available"},
3602 { 3, "Not Cellular data capable"},
3603 { 0, NULL((void*)0) }
3604};
3605
3606static const value_string wfa_mbo_assoc_disallow_reason_vals[] = {
3607 { 1, "Unspecified reason"},
3608 { 2, "Maximum number of associated STAs reached"},
3609 { 3, "Air interface is overloaded"},
3610 { 4, "Authentication server overloaded"},
3611 { 5, "Insufficient RSSI"},
3612 { 0, NULL((void*)0) }
3613};
3614
3615static const value_string wfa_mbo_cellular_pref_vals[] = {
3616 { 0, "Excluded. The AP does not want STA to use the cellular data connection"},
3617 { 1, "The AP prefers the STA should not use cellular data connection"},
3618 { 255, "The AP prefers the STA should use cellular data connection"},
3619 { 0, NULL((void*)0) }
3620};
3621
3622static const value_string wfa_mbo_transition_reason_vals[] = {
3623 { 0, "Unspecified"},
3624 { 1, "Excessive frame loss rate"},
3625 { 2, "Excessive delay for current traffic stream"},
3626 { 3, "Insufficient bandwidth for current traffic stream"},
3627 { 4, "Load balancing"},
3628 { 5, "Low RSSI"},
3629 { 6, "Received excessive number of retransmissions"},
3630 { 7, "High interference"},
3631 { 8, "Gray zone"},
3632 { 9, "Transitioning to a premium AP"},
3633 { 0, NULL((void*)0) }
3634};
3635
3636static const value_string wfa_mbo_transition_rej_reason_vals[] = {
3637 { 0, "Unspecified"},
3638 { 1, "Excessive frame loss rate expected by the STA if it transitions"},
3639 { 2, "Excessive delay for current traffic stream would be incurred by BSS transition at this time"},
3640 { 3, "Insufficient QoS capacity for current traffic stream expected by the STA if it transitions"},
3641 { 4, "Low RSSI in frames being received by the STA from to the suggested candidate BSS(s)"},
3642 { 5, "High interference expected by STA if it transitions"},
3643 { 6, "Service Availability – the STA expects that services it needs "
3644 "which are available at its serving AP will not be available if it transitions"},
3645 { 0, NULL((void*)0) }
3646};
3647
3648/* 802.11ai FILS Discovery */
3649#define PA_FILS_FC_SSID_LENGTH0x001F 0x001F
3650#define PA_FILS_FC_CAPABILITY0x0020 0x0020
3651#define PA_FILS_FC_SHORT_SSID0x0040 0x0040
3652#define PA_FILS_FC_AP_CSN0x0080 0x0080
3653#define PA_FILS_FC_ANO0x0100 0x0100
3654#define PA_FILS_FC_CCFS10x0200 0x0200
3655#define PA_FILS_FC_PC0x0400 0x0400
3656#define PA_FILS_FC_RSN_INFO0x0800 0x0800
3657#define PA_FILS_FC_LENGTH0x1000 0x1000
3658#define PA_FILS_FC_MD0x2000 0x2000
3659#define PA_FILS_FC_RESERVED0xC000 0xC000
3660
3661static const value_string fils_discovery_capability_bss_operating_channel_width[] = {
3662 {0, "20MHz (or 22Mhz) / TVHT_W"},
3663 {1, "40MHZ / TVHT_W+W"},
3664 {2, "80MHz / TVHT_2W"},
3665 {3, "160MHz or 80MHz+80MHz / TVHT_4W or TVHT_2W+2W"},
3666 {0, NULL((void*)0)}
3667};
3668
3669static const value_string fils_discovery_capability_max_number_of_spatial_streams[] = {
3670 {0, "1 spatial stream"},
3671 {1, "2 spatial streams"},
3672 {2, "3 spatial streams"},
3673 {3, "4 spatial streams"},
3674 {4, "5-8 spatial streams"},
3675 {0, NULL((void*)0)}
3676};
3677
3678static const value_string fils_discovery_capability_phy_index[] = {
3679 {0, "HR/DSSS"},
3680 {1, "ERP-OFDM"},
3681 {2, "HT"},
3682 {3, "VHT or TVHT"},
3683 {4, "HE"},
3684 {0x00, NULL((void*)0)}
3685};
3686
3687static const value_string fils_discovery_capability_fils_minimum_rate_dsss[] = {
3688 {0, "1 Mbps"},
3689 {1, "2 Mbps"},
3690 {2, "5.5 Mbps"},
3691 {3, "11 Mbps"},
3692 {0x00, NULL((void*)0)}
3693};
3694
3695static const value_string fils_discovery_capability_fils_minimum_rate_ofdm[] = {
3696 {0, "6 Mbps"},
3697 {1, "9 Mbps"},
3698 {2, "12 Mbps"},
3699 {3, "18 Mbps"},
3700 {4, "24 Mbps"},
3701 {0x00, NULL((void*)0)}
3702};
3703
3704static const value_string fils_discovery_capability_fils_minimum_rate_ht_vht_tvht[] = {
3705 {0, "MCS 0"},
3706 {1, "MCS 1"},
3707 {2, "MCS 2"},
3708 {3, "MCS 3"},
3709 {4, "MCS 4"},
3710 {0x00, NULL((void*)0)}
3711};
3712
3713static const value_string fils_discovery_capability_fils_minimum_rate_he[] = {
3714 {0, "HE-MCS 0"},
3715 {1, "HE-MCS 1"},
3716 {2, "HE-MCS 2"},
3717 {3, "HE-MCS 3"},
3718 {4, "HE-MCS 4"},
3719 {0x00, NULL((void*)0)}
3720};
3721
3722static const value_string wfa_rsne_variant_vals[] = {
3723 { 0, "RSNE" },
3724 { 1, "RSNE Override" },
3725 { 2, "RSNE Override 2" },
3726 { 0, NULL((void*)0) }
3727};
3728
3729static int proto_wlan;
3730static int proto_centrino;
3731static int proto_aggregate;
3732static bool_Bool ieee80211_tvb_invalid;
3733static int proto_eapol; /* Externally retrieved */
3734
3735/* ************************************************************************* */
3736/* Header field info values for FC-field */
3737/* ************************************************************************* */
3738static int hf_ieee80211_fc_field;
3739static int hf_ieee80211_fc_proto_version;
3740static int hf_ieee80211_fc_frame_type;
3741static int hf_ieee80211_fc_frame_subtype;
3742static int hf_ieee80211_fc_frame_extension;
3743static int hf_ieee80211_fc_frame_type_subtype;
3744
3745static int hf_ieee80211_fc_flags;
3746static int hf_ieee80211_fc_flags_str;
3747static int hf_ieee80211_fc_to_ds;
3748static int hf_ieee80211_fc_from_ds;
3749static int hf_ieee80211_fc_data_ds;
3750
3751static int hf_ieee80211_fc_more_frag;
3752static int hf_ieee80211_fc_retry;
3753static int hf_ieee80211_fc_pwr_mgt;
3754static int hf_ieee80211_fc_more_data;
3755static int hf_ieee80211_fc_protected;
3756static int hf_ieee80211_fc_order;
3757
3758/* S1G Flags */
3759static int hf_ieee80211_fc_s1g_next_tbtt_present;
3760static int hf_ieee80211_fc_s1g_compressed_ssid_present;
3761static int hf_ieee80211_fc_s1g_ano_present;
3762static int hf_ieee80211_fc_s1g_bss_bw;
3763static int hf_ieee80211_fc_s1g_security;
3764static int hf_ieee80211_fc_s1g_ap_pm;
3765
3766/* S1G PV0 fields */
3767static int hf_ieee80211_fc_s1g_bw_indication;
3768static int hf_ieee80211_fc_s1g_dynamic_indication;
3769
3770/* PV1 fields */
3771static int hf_ieee80211_fc_pv1_proto_version;
3772static int hf_ieee80211_fc_pv1_type;
3773static int hf_ieee80211_fc_pv1_ptid;
3774static int hf_ieee80211_fc_pv1_mgmt_subtype;
3775static int hf_ieee80211_fc_pv1_cntl_subtype;
3776static int hf_ieee80211_fc_pv1_unk_field;
3777static int hf_ieee80211_fc_pv1_bw_indication;
3778static int hf_ieee80211_fc_pv1_dynamic_indication;
3779static int hf_ieee80211_fc_pv1_cntl_power_mgmt;
3780static int hf_ieee80211_fc_pv1_cntl_more_data;
3781static int hf_ieee80211_fc_pv1_cntl_flow_control;
3782static int hf_ieee80211_fc_pv1_cntl_next_twt_info;
3783static int hf_ieee80211_fc_pv1_mgmt_pr_next_tbt;
3784static int hf_ieee80211_fc_pv1_mgmt_pr_full_ssid;
3785static int hf_ieee80211_fc_pv1_mgmt_pr_ano;
3786static int hf_ieee80211_fc_pv1_mgmt_pr_bss_bw;
3787static int hf_ieee80211_fc_pv1_mgmt_pr_security;
3788static int hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc;
3789static int hf_ieee80211_fc_pv1_mgmt_pr_slot_assign;
3790static int hf_ieee80211_fc_pv1_mgmt_pr_more_frag;
3791static int hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt;
3792static int hf_ieee80211_fc_pv1_mgmt_pr_grp_indic;
3793static int hf_ieee80211_fc_pv1_mgmt_pr_protected;
3794static int hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc;
3795static int hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm;
3796static int hf_ieee80211_fc_pv1_mgmt_pr_ack_policy;
3797static int hf_ieee80211_fc_pv1_from_ds;
3798static int hf_ieee80211_fc_pv1_more_fragments;
3799static int hf_ieee80211_fc_pv1_power_mgmt;
3800static int hf_ieee80211_fc_pv1_more_data;
3801static int hf_ieee80211_fc_pv1_protected_frame;
3802static int hf_ieee80211_fc_pv1_end_service_per;
3803static int hf_ieee80211_fc_pv1_relayed_frame;
3804static int hf_ieee80211_fc_pv1_ack_policy;
3805static int hf_ieee80211_pv1_sid;
3806static int hf_ieee80211_pv1_sid_association_id;
3807static int hf_ieee80211_pv1_sid_a3_present;
3808static int hf_ieee80211_pv1_sid_a4_present;
3809static int hf_ieee80211_pv1_sid_a_msdu;
3810
3811static int hf_ieee80211_pv1_cnt_stack_tetra_timest;
3812static int hf_ieee80211_pv1_cnt_bat_beacon_seq;
3813static int hf_ieee80211_pv1_cnt_bat_penta_timest;
3814static int hf_ieee80211_pv1_cnt_bat_next_twt_info;
3815static int hf_ieee80211_pv1_cnt_bat_stating_seq_cntl;
3816static int hf_ieee80211_pv1_cnt_bat_bitmap;
3817
3818static int hf_ieee80211_pv1_mgmt_reserved;
3819static int hf_ieee80211_pv1_cntl_reserved;
3820
3821typedef struct retransmit_key {
3822 uint8_t bssid[6];
3823 uint8_t src[6];
3824 uint16_t seq_control;
3825 unsigned fnum;
3826} retransmit_key;
3827
3828static GHashTable *fc_analyse_retransmit_table;
3829static GHashTable *fc_first_frame_table;
3830
3831static int hf_ieee80211_fc_analysis_retransmission;
3832static int hf_ieee80211_fc_analysis_retransmission_frame;
3833
3834/* ************************************************************************* */
3835/* Header values for Duration/ID field */
3836/* ************************************************************************* */
3837static int hf_ieee80211_did_duration;
3838static int hf_ieee80211_assoc_id;
3839
3840/* ************************************************************************* */
3841/* Header values for different address-fields (all 4 of them) */
3842/* ************************************************************************* */
3843static int hf_ieee80211_addr_da; /* Destination address subfield */
3844static int hf_ieee80211_addr_da_resolved; /* Dst addr subfield resolved*/
3845static int hf_ieee80211_addr_da_oui; /* Destination address subfield */
3846static int hf_ieee80211_addr_da_oui_resolved; /* Dst addr subfield resolved*/
3847static int hf_ieee80211_addr_da_ig; /* Destination address IG bit */
3848static int hf_ieee80211_addr_da_lg; /* Destination address LG bit */
3849
3850static int hf_ieee80211_addr_sa; /* Source address subfield */
3851static int hf_ieee80211_addr_sa_resolved; /* Src addr subfield resolved*/
3852static int hf_ieee80211_addr_sa_oui; /* Source address subfield */
3853static int hf_ieee80211_addr_sa_oui_resolved; /* Src addr subfield resolved*/
3854static int hf_ieee80211_addr_sa_ig; /* Source address IG bit */
3855static int hf_ieee80211_addr_sa_lg; /* Source address LG bit */
3856
3857static int hf_ieee80211_addr_ra; /* Receiver address subfield */
3858static int hf_ieee80211_addr_ra_resolved; /* Rcv addr subfield resolved*/
3859static int hf_ieee80211_addr_ra_oui; /* Receiver address subfield */
3860static int hf_ieee80211_addr_ra_oui_resolved; /* Rcv addr subfield resolved*/
3861static int hf_ieee80211_addr_ra_ig; /* Receiver address IG bit */
3862static int hf_ieee80211_addr_ra_lg; /* Receiver address LG bit */
3863
3864static int hf_ieee80211_addr_ta; /* Transmitter address subfield */
3865static int hf_ieee80211_addr_ta_resolved; /* Txm addr subfield resolved*/
3866static int hf_ieee80211_addr_ta_oui; /* Transmitter address subfield */
3867static int hf_ieee80211_addr_ta_oui_resolved; /* Txm addr subfield resolved*/
3868static int hf_ieee80211_addr_ta_ig; /* Transmitter address IG bit */
3869static int hf_ieee80211_addr_ta_lg; /* Transmitter address LG bit */
3870
3871static int hf_ieee80211_addr_bssid; /* address is bssid */
3872static int hf_ieee80211_addr_bssid_resolved; /* bssid resolved*/
3873static int hf_ieee80211_addr_bssid_oui; /* address is bssid */
3874static int hf_ieee80211_addr_bssid_oui_resolved; /* bssid resolved*/
3875static int hf_ieee80211_addr_bssid_ig; /* bssid address IG bit */
3876static int hf_ieee80211_addr_bssid_lg; /* bssid address LG bit */
3877
3878static int hf_ieee80211_addr_staa; /* address is station address */
3879static int hf_ieee80211_addr_staa_resolved; /* station address resolved*/
3880static int hf_ieee80211_addr_staa_oui; /* address is station address */
3881static int hf_ieee80211_addr_staa_oui_resolved; /* station address resolved*/
3882static int hf_ieee80211_addr_staa_ig; /* station address IG bit */
3883static int hf_ieee80211_addr_staa_lg; /* station address LG bit */
3884
3885static int hf_ieee80211_addr; /* Source or destination address subfield */
3886static int hf_ieee80211_addr_resolved;/*Src/dst address subfield resolved*/
3887static int hf_ieee80211_addr_oui; /* Source or destination address subfield */
3888static int hf_ieee80211_addr_oui_resolved;/*Src/dst address subfield resolved*/
3889static int hf_ieee80211_addr_ig; /* Src/dst address IG bit */
3890static int hf_ieee80211_addr_lg; /* Src/dst address LG bit */
3891
3892static int hf_ieee80211_mgt;
3893
3894/* ************************************************************************* */
3895/* Header values for QoS control field */
3896/* ************************************************************************* */
3897static int hf_ieee80211_qos;
3898static int hf_ieee80211_qos_tid;
3899static int hf_ieee80211_qos_priority;
3900static int hf_ieee80211_qos_ack_policy;
3901static int hf_ieee80211_qos_amsdu_present;
3902static int hf_ieee80211_qos_eosp;
3903static int hf_ieee80211_qos_bit4;
3904static int hf_ieee80211_qos_txop_limit;
3905static int hf_ieee80211_qos_ps_buf_state;
3906static int hf_ieee80211_qos_buf_state_indicated;
3907static int hf_ieee80211_qos_highest_pri_buf_ac;
3908static int hf_ieee80211_qos_qap_buf_load;
3909static int hf_ieee80211_qos_txop_dur_req;
3910static int hf_ieee80211_qos_queue_size;
3911static int hf_ieee80211_qos_mesh_ctl_present;
3912static int hf_ieee80211_qos_mesh_ps_rsvd;
3913static int hf_ieee80211_qos_mesh_ps_unicast;
3914static int hf_ieee80211_qos_mesh_ps_multicast;
3915static int hf_ieee80211_qos_mesh_rspi;
3916
3917/* ************************************************************************* */
3918/* Header values for HT control field (+HTC) and HE control */
3919/* ************************************************************************* */
3920/* 802.11-2012 and 802.11ac-2013 8.2.4.6 */
3921static int hf_ieee80211_htc;
3922static int hf_ieee80211_htc_vht;
3923static int hf_ieee80211_htc_he;
3924static int hf_ieee80211_htc_he_ctrl_id;
3925static int hf_ieee80211_he_a_control_padding;
3926static int hf_ieee80211_he_a_control_ones;
3927static int hf_ieee80211_he_trs_he_tb_ppdu_len;
3928static int hf_ieee80211_he_trs_ru_allocation;
3929static int hf_ieee80211_he_dl_tx_power;
3930static int hf_ieee80211_he_ul_target_rssi;
3931static int hf_ieee80211_he_ul_mcs;
3932static int hf_ieee80211_he_ul_reserved;
3933static int hf_ieee80211_he_om_rx_nss;
3934static int hf_ieee80211_he_om_channel_width;
3935static int hf_ieee80211_he_om_ul_mu_disable;
3936static int hf_ieee80211_he_om_tx_nsts;
3937static int hf_ieee80211_he_om_er_su_disable;
3938static int hf_ieee80211_he_om_dl_mu_mimo_resound;
3939static int hf_ieee80211_he_om_ul_mu_data_disable;
3940static int hf_ieee80211_he_hla_unsolicited_mfb;
3941static int hf_ieee80211_he_hla_mrq;
3942static int hf_ieee80211_he_hla_nss;
3943static int hf_ieee80211_he_hla_he_mcs;
3944static int hf_ieee80211_he_hla_dcm;
3945static int hf_ieee80211_he_hla_ru;
3946static int hf_ieee80211_he_hla_bw;
3947static int hf_ieee80211_he_hla_msi_ppdu_type;
3948static int hf_ieee80211_he_hla_tx_bf;
3949static int hf_ieee80211_he_hla_reserved;
3950static int hf_ieee80211_he_bsr_aci_bitmap;
3951static int hf_ieee80211_he_bsr_delta_tid;
3952static int hf_ieee80211_he_bsr_aci_high;
3953static int hf_ieee80211_he_bsr_scaling_factor;
3954static int hf_ieee80211_he_bsr_queue_size_high;
3955static int hf_ieee80211_he_bsr_queue_size_all;
3956static int hf_ieee80211_he_uph_ul_power_headroom;
3957static int hf_ieee80211_he_uph_ul_min_transmit_power_flag;
3958static int hf_ieee80211_he_uph_reserved;
3959static int hf_ieee80211_he_cci_ac_constraint;
3960static int hf_ieee80211_he_cci_rdg_more_ppdu;
3961static int hf_ieee80211_he_cci_sr_ppdu_indic;
3962static int hf_ieee80211_he_cci_reserved;
3963static int hf_ieee80211_he_eht_om_rx_nss_ext;
3964static int hf_ieee80211_he_eht_om_chan_w_ext;
3965static int hf_ieee80211_he_eht_om_tx_nsts_ext;
3966static int hf_ieee80211_he_eht_om_reserved;
3967static int hf_ieee80211_he_srs_ppdu_resp_dur;
3968static int hf_ieee80211_he_srs_reserved;
3969static int hf_ieee80211_he_aar_assisted_ap_bitmap;
3970static int hf_ieee80211_he_aar_reserved;
3971static int hf_ieee80211_he_btc_avail_chan;
3972static int hf_ieee80211_he_btc_reserved;
3973static int hf_ieee80211_he_trigger_common_info;
3974static int hf_ieee80211_he_trigger_type;
3975static int hf_ieee80211_he_trigger_ul_length;
3976static int hf_ieee80211_he_trigger_more_tf;
3977static int hf_ieee80211_he_trigger_cs_required;
3978static int hf_ieee80211_he_trigger_ul_bw;
3979static int hf_ieee80211_he_trigger_gi_and_ltf_type;
3980static int hf_ieee80211_he_trigger_mu_mimo_ltf_mode;
3981static int hf_ieee80211_he_trigger_num_he_ltf_syms_etc;
3982static int hf_ieee80211_he_trigger_ul_stbc;
3983static int hf_ieee80211_he_trigger_ldpc_extra_sym_seg;
3984static int hf_ieee80211_he_trigger_ap_tx_power;
3985static int hf_ieee80211_he_trigger_pre_fec_padding_factor;
3986static int hf_ieee80211_he_trigger_pe_disambiguity;
3987static int hf_ieee80211_he_trigger_ul_spatial_reuse;
3988static int hf_ieee80211_he_trigger_doppler;
3989static int hf_ieee80211_he_trigger_ul_he_sig_a_reserved;
3990static int hf_ieee80211_he_trigger_reserved;
3991static int hf_ieee80211_he_trigger_user_info;
3992static int hf_ieee80211_he_trigger_user_info_padding_start;
3993static int hf_ieee80211_he_trigger_padding;
3994static int hf_ieee80211_he_trigger_bar_ctrl;
3995static int hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy;
3996static int hf_ieee80211_he_trigger_bar_ctrl_ba_type;
3997static int hf_ieee80211_he_trigger_bar_ctrl_reserved;
3998static int hf_ieee80211_he_trigger_bar_ctrl_tid_info;
3999static int hf_ieee80211_he_trigger_bar_info;
4000static int hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl;
4001static int hf_ieee80211_he_trigger_mpdu_mu_spacing;
4002static int hf_ieee80211_he_trigger_tid_aggregation_limit;
4003static int hf_ieee80211_he_trigger_dependent_reserved1;
4004static int hf_ieee80211_he_trigger_preferred_ac;
4005static int hf_ieee80211_he_trigger_starting_aid;
4006static int hf_ieee80211_he_trigger_dependent_reserved2;
4007static int hf_ieee80211_he_trigger_feedback_type;
4008static int hf_ieee80211_he_trigger_dependent_reserved3;
4009static int hf_ieee80211_he_trigger_nfrp_target_rssi;
4010static int hf_ieee80211_he_trigger_multiplexing_flag;
4011static int hf_ieee80211_he_trigger_dep_nfrp_user_info;
4012static int hf_ieee80211_he_trigger_feedback_seg_retrans_bm;
4013static int hf_ieee80211_he_trigger_aid12;
4014static int hf_ieee80211_he_trigger_ru_allocation;
4015static int hf_ieee80211_he_trigger_ru_allocation_region;
4016static int hf_ieee80211_he_trigger_ru_starting_spatial_stream;
4017static int hf_ieee80211_he_trigger_ru_number_spatial_streams;
4018static int hf_ieee80211_he_trigger_ru_number_ra_ru;
4019static int hf_ieee80211_he_trigger_ru_no_more_ra_ru;
4020static int hf_ieee80211_he_trigger_ul_fec_coding_type;
4021static int hf_ieee80211_he_trigger_ul_mcs;
4022static int hf_ieee80211_he_trigger_ul_dcm;
4023static int hf_ieee80211_he_trigger_ul_target_rssi;
4024static int hf_ieee80211_he_trigger_user_reserved;
4025static int hf_ieee80211_he_trigger_dep_basic_user_info;
4026static int hf_ieee80211_he_trigger_ranging_common_info_1;
4027static int hf_ieee80211_he_trigger_ranging_common_info_2;
4028static int hf_ieee80211_eht_trigger_common_info;
4029static int hf_ieee80211_eht_trigger_type;
4030static int hf_ieee80211_eht_trigger_ul_length;
4031static int hf_ieee80211_eht_trigger_more_tf;
4032static int hf_ieee80211_eht_trigger_cs_required;
4033static int hf_ieee80211_eht_trigger_ul_bw;
4034static int hf_ieee80211_eht_trigger_gi_and_eht_ltf_type;
4035static int hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc;
4036static int hf_ieee80211_eht_trigger_reserved2;
4037static int hf_ieee80211_eht_trigger_ldpc_extra_sym_seg;
4038static int hf_ieee80211_eht_trigger_ap_tx_power;
4039static int hf_ieee80211_eht_trigger_pre_fec_padding_factor;
4040static int hf_ieee80211_eht_trigger_pe_disambiguity;
4041static int hf_ieee80211_eht_trigger_ul_spatial_reuse;
4042static int hf_ieee80211_eht_trigger_reserved3;
4043static int hf_ieee80211_eht_trigger_he_eht_p160;
4044static int hf_ieee80211_eht_trigger_special_user_info_flag;
4045static int hf_ieee80211_eht_trigger_eht_reserved;
4046static int hf_ieee80211_eht_trigger_reserved4;
4047static int hf_ieee80211_eht_trigger_reserved;
4048static int hf_ieee80211_eht_trigger_aid12;
4049static int hf_ieee80211_eht_trigger_special_user_info;
4050static int hf_ieee80211_eht_trigger_phy_version_identifier;
4051static int hf_ieee80211_eht_trigger_ul_bw_extenstion;
4052static int hf_ieee80211_eht_trigger_eht_spatial_reuse_1;
4053static int hf_ieee80211_eht_trigger_eht_spatial_reuse_2;
4054static int hf_ieee80211_eht_trigger_disregard_u_sig_1;
4055static int hf_ieee80211_eht_trigger_validate_u_sig_2;
4056static int hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb;
4057static int hf_ieee80211_eht_trigger_disregard_u_sig_2_msb;
4058static int hf_ieee80211_eht_trigger_special_reserved;
4059static int hf_ieee80211_eht_trigger_user_info;
4060static int hf_ieee80211_eht_trigger_ru_allocation_region;
4061static int hf_ieee80211_eht_trigger_ru_allocation;
4062static int hf_ieee80211_eht_trigger_ul_fec_coding_type;
4063static int hf_ieee80211_eht_trigger_ul_eht_mcs;
4064static int hf_ieee80211_eht_trigger_ru_starting_spatial_stream;
4065static int hf_ieee80211_eht_trigger_ru_number_spatial_streams;
4066static int hf_ieee80211_eht_trigger_ul_target_recv_power;
4067static int hf_ieee80211_eht_trigger_ps160;
4068static int hf_ieee80211_eht_trigger_user_info_reserved;
4069static int hf_ieee80211_uhr_trigger_common_info;
4070static int hf_ieee80211_uhr_trigger_type;
4071static int hf_ieee80211_uhr_trigger_ul_length;
4072static int hf_ieee80211_uhr_trigger_more_tf;
4073static int hf_ieee80211_uhr_trigger_cs_required;
4074static int hf_ieee80211_uhr_trigger_ul_bw;
4075static int hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type;
4076static int hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc;
4077static int hf_ieee80211_uhr_trigger_reserved2;
4078static int hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg;
4079static int hf_ieee80211_uhr_trigger_ap_tx_power;
4080static int hf_ieee80211_uhr_trigger_pre_fec_padding_factor;
4081static int hf_ieee80211_uhr_trigger_pe_disambiguity;
4082static int hf_ieee80211_uhr_trigger_ul_spatial_reuse;
4083static int hf_ieee80211_uhr_trigger_reserved3;
4084static int hf_ieee80211_uhr_trigger_he_uhr_p160;
4085static int hf_ieee80211_uhr_trigger_special_user_info_flag;
4086static int hf_ieee80211_uhr_trigger_dru_rru;
4087static int hf_ieee80211_uhr_trigger_ifcs;
4088static int hf_ieee80211_uhr_trigger_uhr_reserved;
4089static int hf_ieee80211_uhr_trigger_reserved4;
4090static int hf_ieee80211_uhr_trigger_reserved;
4091static int hf_ieee80211_uhr_trigger_user_info;
4092static int hf_ieee80211_uhr_trigger_aid12;
4093static int hf_ieee80211_uhr_trigger_ru_allocation_region;
4094static int hf_ieee80211_uhr_trigger_ru_allocation;
4095static int hf_ieee80211_uhr_trigger_ul_fec_coding_type;
4096static int hf_ieee80211_uhr_trigger_ul_uhr_mcs;
4097static int hf_ieee80211_uhr_trigger_2xldpc;
4098static int hf_ieee80211_uhr_trigger_ru_starting_spatial_stream;
4099static int hf_ieee80211_uhr_trigger_ru_number_spatial_streams;
4100static int hf_ieee80211_uhr_trigger_dru_distribution_bw;
4101static int hf_ieee80211_uhr_trigger_dru_reserved;
4102static int hf_ieee80211_uhr_trigger_ul_target_recv_power;
4103static int hf_ieee80211_uhr_trigger_ps160;
4104
4105
4106static int hf_ieee80211_ranging_trigger_subtype1;
4107static int hf_ieee80211_ranging_trigger_reserved1;
4108static int hf_ieee80211_ranging_trigger_token;
4109static int hf_ieee80211_ranging_trigger_subtype2;
4110static int hf_ieee80211_ranging_trigger_reserved2;
4111static int hf_ieee80211_ranging_trigger_sounding_dialog_token;
4112static int hf_ieee80211_he_trigger_ranging_trigger_poll_rpt;
4113static int hf_ieee80211_ranging_pol_rpt_aid12_rsid12;
4114static int hf_ieee80211_ranging_pol_rpt_ru_alloc_region;
4115static int hf_ieee80211_ranging_pol_rpt_ru_alloc;
4116static int hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type;
4117static int hf_ieee80211_ranging_pol_rpt_ulmcs;
4118static int hf_ieee80211_ranging_pol_rpt_uldcm;
4119static int hf_ieee80211_ranging_pol_rpt_starting_spatial_stream;
4120static int hf_ieee80211_ranging_pol_rpt_number_spatial_streams;
4121static int hf_ieee80211_ranging_pol_rpt_ul_target_rssi;
4122static int hf_ieee80211_ranging_pol_rpt_reserved;
4123static int hf_ieee80211_he_trigger_ranging_trigger_sounding;
4124static int hf_ieee80211_ranging_sounding_aid12_rsid12;
4125static int hf_ieee80211_ranging_sounding_reserved1;
4126static int hf_ieee80211_ranging_sounding_i2r_rep;
4127static int hf_ieee80211_ranging_sounding_reserved2;
4128static int hf_ieee80211_ranging_sounding_starting_spatial_stream;
4129static int hf_ieee80211_ranging_sounding_number_spatial_streams;
4130static int hf_ieee80211_ranging_sounding_ul_target_rssi;
4131static int hf_ieee80211_ranging_sounding_reserved3;
4132static int hf_ieee80211_he_trigger_ranging_trigger_sec_sound;
4133static int hf_ieee80211_ranging_sec_sound_aid12_rsid12;
4134static int hf_ieee80211_ranging_sec_sound_reserved1;
4135static int hf_ieee80211_ranging_sec_sound_i2r_rep;
4136static int hf_ieee80211_ranging_sec_sound_reserved2;
4137static int hf_ieee80211_ranging_sec_sound_starting_spatial_stream;
4138static int hf_ieee80211_ranging_sec_sound_number_spatial_streams;
4139static int hf_ieee80211_ranging_sec_sound_ul_target_rssi;
4140static int hf_ieee80211_ranging_sec_sound_reserved3;
4141static int hf_ieee80211_he_trigger_ranging_user_info_sac;
4142static int hf_ieee80211_he_ndp_annc_sta;
4143static int hf_ieee80211_he_ndp_annc_aid11;
4144static int hf_ieee80211_he_ndp_annc_ru_start;
4145static int hf_ieee80211_he_ndp_annc_ru_end;
4146static int hf_ieee80211_he_ndp_annc_feedback_type_and_ng;
4147static int hf_ieee80211_he_ndp_annc_disambiguation;
4148static int hf_ieee80211_he_ndp_annc_codebook_size;
4149static int hf_ieee80211_he_ndp_annc_nc;
4150static int hf_ieee80211_he_ndp_annc_disallowed_bitmap;
4151static int hf_ieee80211_he_ndp_annc_reserved1;
4152static int hf_ieee80211_he_ndp_annc_reserved2;
4153static int hf_ieee80211_he_qtp_control;
4154static int hf_ieee80211_he_qtp_setup_quiet_period_duration;
4155static int hf_ieee80211_he_qtp_setup_srv_specific_identif;
4156static int hf_ieee80211_he_qtp_request_dialog_token;
4157static int hf_ieee80211_he_qtp_request_quiet_period_offset;
4158static int hf_ieee80211_he_qtp_request_quiet_period_duration;
4159static int hf_ieee80211_he_qtp_request_quiet_period_interval;
4160static int hf_ieee80211_he_qtp_request_repetition_count;
4161static int hf_ieee80211_he_qtp_request_srv_specific_identif;
4162static int hf_ieee80211_he_qtp_response_dialog_token;
4163static int hf_ieee80211_he_qtp_response_status_code;
4164static int hf_ieee80211_he_qtp_response_quiet_period_offset;
4165static int hf_ieee80211_he_qtp_response_quiet_period_duration;
4166static int hf_ieee80211_he_qtp_response_quiet_period_interval;
4167static int hf_ieee80211_he_qtp_response_repetition_count;
4168static int hf_ieee80211_he_qtp_response_srv_specific_identif;
4169static int hf_ieee80211_htc_ht_lac;
4170static int hf_ieee80211_htc_lac_trq;
4171static int hf_ieee80211_htc_lac_mai_aseli;
4172static int hf_ieee80211_htc_lac_mai_mrq;
4173static int hf_ieee80211_htc_lac_mai_msi;
4174static int hf_ieee80211_htc_lac_mai_reserved;
4175static int hf_ieee80211_htc_lac_mfsi;
4176static int hf_ieee80211_htc_lac_mfb;
4177static int hf_ieee80211_htc_lac_asel_command;
4178static int hf_ieee80211_htc_lac_asel_data;
4179static int hf_ieee80211_htc_cal_pos;
4180static int hf_ieee80211_htc_cal_seq;
4181static int hf_ieee80211_htc_reserved1;
4182static int hf_ieee80211_htc_csi_steering;
4183static int hf_ieee80211_htc_ndp_announcement;
4184static int hf_ieee80211_htc_reserved2;
4185static int hf_ieee80211_htc_mrq;
4186static int hf_ieee80211_htc_msi;
4187static int hf_ieee80211_htc_msi_stbc_reserved;
4188static int hf_ieee80211_htc_compressed_msi;
4189static int hf_ieee80211_htc_ppdu_stbc_encoded;
4190static int hf_ieee80211_htc_mfsi;
4191static int hf_ieee80211_htc_gid_l;
4192static int hf_ieee80211_htc_mfb;
4193static int hf_ieee80211_htc_num_sts;
4194static int hf_ieee80211_htc_vht_mcs;
4195static int hf_ieee80211_htc_bw;
4196static int hf_ieee80211_htc_s1g_num_sts;
4197static int hf_ieee80211_htc_s1g_vht_mcs;
4198static int hf_ieee80211_htc_s1g_bw;
4199static int hf_ieee80211_htc_snr;
4200static int hf_ieee80211_htc_reserved3;
4201static int hf_ieee80211_htc_gid_h;
4202static int hf_ieee80211_htc_coding_type;
4203static int hf_ieee80211_htc_fb_tx_type;
4204static int hf_ieee80211_htc_unsolicited_mfb;
4205static int hf_ieee80211_htc_ac_constraint;
4206static int hf_ieee80211_htc_rdg_more_ppdu;
4207
4208/* ************************************************************************* */
4209/* Header values for sequence number field */
4210/* ************************************************************************* */
4211static int hf_ieee80211_frag_number;
4212static int hf_ieee80211_seq_number;
4213
4214/* ************************************************************************* */
4215/* Header values for Frame Check field */
4216/* ************************************************************************* */
4217static int hf_ieee80211_fcs;
4218static int hf_ieee80211_fcs_status;
4219
4220/* ************************************************************************* */
4221/* Header values for reassembly */
4222/* ************************************************************************* */
4223static int hf_ieee80211_fragments;
4224static int hf_ieee80211_fragment;
4225static int hf_ieee80211_fragment_overlap;
4226static int hf_ieee80211_fragment_overlap_conflict;
4227static int hf_ieee80211_fragment_multiple_tails;
4228static int hf_ieee80211_fragment_too_long_fragment;
4229static int hf_ieee80211_fragment_error;
4230static int hf_ieee80211_fragment_count;
4231static int hf_ieee80211_reassembled_in;
4232static int hf_ieee80211_reassembled_length;
4233
4234static int proto_wlan_ext;
4235
4236/* ************************************************************************* */
4237/* Fixed fields found in mgt frames */
4238/* ************************************************************************* */
4239static int hf_ieee80211_fixed_parameters; /* Protocol payload for management frames */
4240
4241static int hf_ieee80211_ff_auth_alg; /* Authentication algorithm field */
4242static int hf_ieee80211_ff_auth_seq; /* Authentication transaction sequence */
4243static int hf_ieee80211_ff_current_ap; /* Current AP MAC address */
4244static int hf_ieee80211_ff_listen_ival; /* Listen interval fixed field */
4245static int hf_ieee80211_ff_timestamp; /* 64 bit timestamp */
4246static int hf_ieee80211_ff_beacon_interval; /* 16 bit Beacon interval */
4247static int hf_ieee80211_ff_assoc_id; /* 16 bit AID field */
4248static int hf_ieee80211_ff_reason; /* 16 bit reason code */
4249static int hf_ieee80211_ff_status_code; /* Status code */
4250static int hf_ieee80211_ff_category_code; /* 8 bit Category code */
4251static int hf_ieee80211_ff_action_code; /* 8 bit Action code */
4252static int hf_ieee80211_ff_dialog_token; /* 8 bit Dialog token */
4253static int hf_ieee80211_ff_trigger;
4254static int hf_ieee80211_ff_ftm_tod;
4255static int hf_ieee80211_ff_ftm_toa;
4256static int hf_ieee80211_ff_ftm_tod_err;
4257static int hf_ieee80211_ff_ftm_toa_err;
4258static int hf_ieee80211_ff_followup_dialog_token;
4259static int hf_ieee80211_ff_wme_action_code; /* Management notification action code */
4260static int hf_ieee80211_ff_wme_status_code; /* Management notification setup response status code */
4261static int hf_ieee80211_ff_qos_action_code;
4262static int hf_ieee80211_ff_dls_action_code;
4263static int hf_ieee80211_ff_dst_mac_addr; /* DLS destination MAC address */
4264static int hf_ieee80211_ff_src_mac_addr; /* DLS source MAC address */
4265static int hf_ieee80211_ff_req_ap_addr;
4266static int hf_ieee80211_ff_res_ap_addr;
4267static int hf_ieee80211_ff_check_beacon;
4268static int hf_ieee80211_ff_dls_timeout; /* DLS timeout value */
4269static int hf_ieee80211_ff_ft_action_code; /* 8 bit FT Action code */
4270static int hf_ieee80211_ff_sta_address;
4271static int hf_ieee80211_ff_target_ap_address;
4272static int hf_ieee80211_ff_gas_comeback_delay;
4273static int hf_ieee80211_ff_gas_fragment_id;
4274static int hf_ieee80211_ff_more_gas_fragments;
4275static int hf_ieee80211_ff_query_request_length;
4276static int hf_ieee80211_ff_query_request;
4277static int hf_ieee80211_ff_query_response_length;
4278static int hf_ieee80211_ff_query_response;
4279static int hf_ieee80211_ff_anqp_info_id;
4280static int hf_ieee80211_ff_anqp_info_length;
4281static int hf_ieee80211_ff_anqp_info;
4282static int hf_ieee80211_ff_anqp_query_id;
4283static int hf_ieee80211_ff_anqp_capability;
4284static int hf_ieee80211_ff_anqp_capability_vlen;
4285static int hf_ieee80211_ff_anqp_capability_vendor;
4286static int hf_ieee80211_ff_venue_info_group;
4287static int hf_ieee80211_ff_venue_info_type;
4288static int hf_ieee80211_ff_anqp_venue_length;
4289static int hf_ieee80211_ff_anqp_venue_language;
4290static int hf_ieee80211_ff_anqp_venue_name;
4291static int hf_ieee80211_ff_anqp_nw_auth_type_indicator;
4292static int hf_ieee80211_ff_anqp_nw_auth_type_url_len;
4293static int hf_ieee80211_ff_anqp_nw_auth_type_url;
4294static int hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator;
4295static int hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len;
4296static int hf_ieee80211_ff_anqp_nw_auth_type_ts_url;
4297static int hf_ieee80211_ff_anqp_nw_auth_type_ts_year;
4298static int hf_ieee80211_ff_anqp_nw_auth_type_ts_mon;
4299static int hf_ieee80211_ff_anqp_nw_auth_type_ts_day;
4300static int hf_ieee80211_ff_anqp_nw_auth_type_ts_hr;
4301static int hf_ieee80211_ff_anqp_nw_auth_type_ts_min;
4302static int hf_ieee80211_ff_anqp_nw_auth_type_ts_sec;
4303static int hf_ieee80211_ff_anqp_nw_auth_type_ts_msec;
4304static int hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd;
4305static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len;
4306static int hf_ieee80211_ff_anqp_roaming_consortium_oi;
4307static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6;
4308static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4;
4309static int hf_ieee80211_ff_anqp_nai_realm_count;
4310static int hf_ieee80211_ff_anqp_nai_field_len;
4311static int hf_ieee80211_ff_anqp_nai_realm_encoding;
4312static int hf_ieee80211_ff_anqp_nai_realm_length;
4313static int hf_ieee80211_ff_anqp_nai_realm;
4314static int hf_ieee80211_ff_anqp_nai_realm_eap_count;
4315static int hf_ieee80211_ff_anqp_nai_realm_eap_len;
4316static int hf_ieee80211_ff_anqp_nai_realm_eap_method;
4317static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count;
4318static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id;
4319static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len;
4320static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value;
4321static int hf_ieee80211_3gpp_gc_gud;
4322static int hf_ieee80211_3gpp_gc_udhl;
4323static int hf_ieee80211_3gpp_gc_iei;
4324static int hf_ieee80211_3gpp_gc_num_plmns;
4325static int hf_ieee80211_3gpp_gc_plmn;
4326static int hf_ieee80211_3gpp_gc_plmn_len;
4327static int hf_ieee80211_ff_anqp_domain_name_len;
4328static int hf_ieee80211_ff_anqp_domain_name;
4329static int hf_ieee80211_ff_tdls_action_code;
4330static int hf_ieee80211_ff_target_channel;
4331static int hf_ieee80211_ff_operating_class;
4332static int hf_ieee80211_ff_channel;
4333static int hf_ieee80211_ff_wnm_action_code;
4334static int hf_ieee80211_ff_unprotected_wnm_action_code;
4335static int hf_ieee80211_ff_key_data_length;
4336static int hf_ieee80211_ff_key_data;
4337static int hf_ieee80211_ff_wnm_notification_type;
4338static int hf_ieee80211_ff_wnm_notification_response_status;
4339static int hf_ieee80211_ff_rm_action_code;
4340static int hf_ieee80211_ff_rm_dialog_token;
4341static int hf_ieee80211_ff_rm_repetitions;
4342static int hf_ieee80211_ff_rm_tx_power;
4343static int hf_ieee80211_ff_rm_max_tx_power;
4344static int hf_ieee80211_ff_tpc;
4345static int hf_ieee80211_ff_tpc_element_id;
4346static int hf_ieee80211_ff_tpc_length;
4347static int hf_ieee80211_ff_tpc_tx_power;
4348static int hf_ieee80211_ff_tpc_link_margin;
4349static int hf_ieee80211_ff_rm_rx_antenna_id;
4350static int hf_ieee80211_ff_rm_tx_antenna_id;
4351static int hf_ieee80211_ff_rm_rcpi;
4352static int hf_ieee80211_ff_rm_rsni;
4353static int hf_ieee80211_ff_request_mode_pref_cand;
4354static int hf_ieee80211_ff_request_mode_abridged;
4355static int hf_ieee80211_ff_request_mode_disassoc_imminent;
4356static int hf_ieee80211_ff_request_mode_bss_term_included;
4357static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent;
4358static int hf_ieee80211_ff_request_mode_link_removal_imminent;
4359static int hf_ieee80211_ff_request_mode_reserved;
4360static int hf_ieee80211_ff_disassoc_timer;
4361static int hf_ieee80211_ff_validity_interval;
4362static int hf_ieee80211_ff_url_len;
4363static int hf_ieee80211_ff_url;
4364static int hf_ieee80211_ff_target_bss;
4365static int hf_ieee80211_ff_bss_transition_query_reason;
4366static int hf_ieee80211_ff_bss_transition_status_code;
4367static int hf_ieee80211_ff_bss_termination_delay;
4368static int hf_ieee80211_ff_bss_transition_candidate_list_entries;
4369
4370static int hf_ieee80211_ff_sa_query_action_code;
4371static int hf_ieee80211_ff_transaction_id;
4372
4373static int hf_ieee80211_ff_send_confirm;
4374static int hf_ieee80211_ff_scalar;
4375static int hf_ieee80211_ff_finite_field_element;
4376static int hf_ieee80211_ff_confirm;
4377static int hf_ieee80211_ff_finite_cyclic_group;
4378static int hf_ieee80211_ff_sae_message_type;
4379static int hf_ieee80211_ff_sae_anti_clogging_token;
4380
4381
4382/* Vendor specific */
4383static int hf_ieee80211_ff_marvell_action_type;
4384static int hf_ieee80211_ff_marvell_mesh_mgt_action_code;
4385static int hf_ieee80211_ff_marvell_mesh_mgt_length; /* Mesh Management length */
4386static int hf_ieee80211_ff_marvell_mesh_mgt_mode; /* Mesh Management mode */
4387static int hf_ieee80211_ff_marvell_mesh_mgt_ttl; /* Mesh Management TTL */
4388static int hf_ieee80211_ff_marvell_mesh_mgt_dstcount; /* Mesh Management dst count */
4389static int hf_ieee80211_ff_marvell_mesh_mgt_hopcount; /* Mesh Management hop count */
4390static int hf_ieee80211_ff_marvell_mesh_mgt_rreqid; /* Mesh Management RREQ ID */
4391static int hf_ieee80211_ff_marvell_mesh_mgt_sa; /* Mesh Management src addr */
4392static int hf_ieee80211_ff_marvell_mesh_mgt_ssn; /* Mesh Management src sequence number */
4393static int hf_ieee80211_ff_marvell_mesh_mgt_metric; /* Mesh Management metric */
4394static int hf_ieee80211_ff_marvell_mesh_mgt_flags; /* Mesh Management RREQ flags */
4395static int hf_ieee80211_ff_marvell_mesh_mgt_da; /* Mesh Management dst addr */
4396static int hf_ieee80211_ff_marvell_mesh_mgt_dsn; /* Mesh Management dst sequence number */
4397static int hf_ieee80211_ff_marvell_mesh_mgt_lifetime; /* Mesh Management lifetime */
4398
4399
4400static int hf_ieee80211_ff_ba_action;
4401
4402static int hf_ieee80211_ff_block_ack_params;
4403static int hf_ieee80211_ff_block_ack_params_amsdu_permitted;
4404static int hf_ieee80211_ff_block_ack_params_policy;
4405static int hf_ieee80211_ff_block_ack_params_tid;
4406static int hf_ieee80211_ff_block_ack_params_buffer_size;
4407
4408static int * const ieee80211_ff_block_ack_params_fields[] = {
4409 &hf_ieee80211_ff_block_ack_params_amsdu_permitted,
4410 &hf_ieee80211_ff_block_ack_params_policy,
4411 &hf_ieee80211_ff_block_ack_params_tid,
4412 &hf_ieee80211_ff_block_ack_params_buffer_size,
4413 NULL((void*)0)
4414};
4415
4416static int hf_ieee80211_ff_block_ack_timeout;
4417
4418static int hf_ieee80211_ff_block_ack_ssc;
4419static int hf_ieee80211_ff_block_ack_ssc_fragment;
4420static int hf_ieee80211_ff_block_ack_ssc_sequence;
4421
4422static int * const ieee80211_ff_block_ack_ssc_fields[] = {
4423 &hf_ieee80211_ff_block_ack_ssc_fragment,
4424 &hf_ieee80211_ff_block_ack_ssc_sequence,
4425 NULL((void*)0)
4426};
4427
4428static int hf_ieee80211_ff_delba_param;
4429static int hf_ieee80211_ff_delba_param_reserved;
4430static int hf_ieee80211_ff_delba_param_init;
4431static int hf_ieee80211_ff_delba_param_tid;
4432
4433static int * const ieee80211_ff_delba_param_fields[] = {
4434 &hf_ieee80211_ff_delba_param_reserved,
4435 &hf_ieee80211_ff_delba_param_init,
4436 &hf_ieee80211_ff_delba_param_tid,
4437 NULL((void*)0)
4438};
4439
4440static int hf_ieee80211_ff_max_reg_pwr;
4441static int hf_ieee80211_ff_measurement_pilot_int;
4442static int hf_ieee80211_ff_country_str;
4443static int hf_ieee80211_ff_max_tx_pwr;
4444static int hf_ieee80211_ff_tx_pwr_used;
4445static int hf_ieee80211_ff_transceiver_noise_floor;
4446static int hf_ieee80211_ff_channel_width;
4447
4448static int hf_ieee80211_ff_qos_info_ap;
4449static int hf_ieee80211_ff_qos_info_ap_edca_param_set_counter;
4450static int hf_ieee80211_ff_qos_info_ap_q_ack;
4451static int hf_ieee80211_ff_qos_info_ap_queue_req;
4452static int hf_ieee80211_ff_qos_info_ap_txop_request;
4453static int hf_ieee80211_ff_qos_info_ap_more_data_ack;
4454
4455static int * const ieee80211_ff_qos_info_ap_fields[] = {
4456 &hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
4457 &hf_ieee80211_ff_qos_info_ap_q_ack,
4458 &hf_ieee80211_ff_qos_info_ap_queue_req,
4459 &hf_ieee80211_ff_qos_info_ap_txop_request,
4460 &hf_ieee80211_ff_qos_info_ap_more_data_ack,
4461 NULL((void*)0)
4462};
4463
4464static int hf_ieee80211_ff_qos_info_sta;
4465static int hf_ieee80211_ff_qos_info_sta_ac_vo;
4466static int hf_ieee80211_ff_qos_info_sta_ac_vi;
4467static int hf_ieee80211_ff_qos_info_sta_ac_bk;
4468static int hf_ieee80211_ff_qos_info_sta_ac_be;
4469static int hf_ieee80211_ff_qos_info_sta_q_ack;
4470static int hf_ieee80211_ff_qos_info_sta_max_sp_length;
4471static int hf_ieee80211_ff_qos_info_sta_more_data_ack;
4472
4473static int * const ieee80211_ff_qos_info_sta_fields[] = {
4474 &hf_ieee80211_ff_qos_info_sta_ac_vo,
4475 &hf_ieee80211_ff_qos_info_sta_ac_vi,
4476 &hf_ieee80211_ff_qos_info_sta_ac_bk,
4477 &hf_ieee80211_ff_qos_info_sta_ac_be,
4478 &hf_ieee80211_ff_qos_info_sta_q_ack,
4479 &hf_ieee80211_ff_qos_info_sta_max_sp_length,
4480 &hf_ieee80211_ff_qos_info_sta_more_data_ack,
4481 NULL((void*)0)
4482};
4483
4484static int hf_ieee80211_ff_sm_pwr_save;
4485static int hf_ieee80211_ff_sm_pwr_save_enabled;
4486static int hf_ieee80211_ff_sm_pwr_save_sm_mode;
4487static int hf_ieee80211_ff_sm_pwr_save_reserved;
4488
4489static int * const ieee80211_ff_sw_pwr_save_fields[] = {
4490 &hf_ieee80211_ff_sm_pwr_save_enabled,
4491 &hf_ieee80211_ff_sm_pwr_save_sm_mode,
4492 &hf_ieee80211_ff_sm_pwr_save_reserved,
4493 NULL((void*)0)
4494};
4495
4496static int hf_ieee80211_ff_pco_phase_cntrl;
4497
4498static int hf_ieee80211_ff_psmp_param_set;
4499static int hf_ieee80211_ff_psmp_param_set_n_sta;
4500static int hf_ieee80211_ff_psmp_param_set_more_psmp;
4501static int hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration;
4502
4503static int * const ieee80211_ff_psmp_param_set_fields[] = {
4504 &hf_ieee80211_ff_psmp_param_set_n_sta,
4505 &hf_ieee80211_ff_psmp_param_set_more_psmp,
4506 &hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
4507 NULL((void*)0)
4508};
4509
4510static int hf_ieee80211_ff_mimo_cntrl;
4511static int hf_ieee80211_ff_mimo_cntrl_nc_index;
4512static int hf_ieee80211_ff_mimo_cntrl_nr_index;
4513static int hf_ieee80211_ff_mimo_cntrl_channel_width;
4514static int hf_ieee80211_ff_mimo_cntrl_grouping;
4515static int hf_ieee80211_ff_mimo_cntrl_coefficient_size;
4516static int hf_ieee80211_ff_mimo_cntrl_codebook_info;
4517static int hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment;
4518static int hf_ieee80211_ff_mimo_cntrl_reserved;
4519static int hf_ieee80211_ff_mimo_cntrl_sounding_timestamp;
4520
4521static int hf_ieee80211_ff_ftm_param_delim1;
4522static int hf_ieee80211_ff_ftm_param_status_indication;
4523static int hf_ieee80211_ff_ftm_param_value;
4524static int hf_ieee80211_ff_ftm_param_reserved1;
4525static int hf_ieee80211_ff_ftm_param_burst_exponent;
4526static int hf_ieee80211_ff_ftm_param_burst_duration;
4527
4528static int hf_ieee80211_ff_ftm_param_delim2;
4529static int hf_ieee80211_ff_ftm_param_min_delta_ftm;
4530static int hf_ieee80211_ff_ftm_param_partial_tsf_timer;
4531static int hf_ieee80211_ff_ftm_param_partial_tsf_no_pref;
4532static int hf_ieee80211_ff_ftm_param_asap_capable;
4533static int hf_ieee80211_ff_ftm_param_asap;
4534static int hf_ieee80211_ff_ftm_param_ftm_per_burst;
4535
4536static int hf_ieee80211_ff_ftm_param_delim3;
4537static int hf_ieee80211_ff_ftm_param_reserved2;
4538static int hf_ieee80211_ff_ftm_param_format_and_bw;
4539static int hf_ieee80211_ff_ftm_param_burst_period;
4540
4541/* az D3.0 introduces a 1-octet TOD Error field; use a different name to avoid
4542 * conflicting with the existing hf_ieee80211_ff_ftm_tod_err (which is 2
4543 * octets).
4544 */
4545static int hf_ieee80211_ff_ftm_tod_err1;
4546static int hf_ieee80211_ff_ftm_max_tod_error_exponent;
4547static int hf_ieee80211_ff_ftm_tod_err_reserved;
4548static int hf_ieee80211_ff_ftm_tod_not_continuous;
4549
4550/* Same situation with ...toa_err1 as ...tod_err1 */
4551static int hf_ieee80211_ff_ftm_toa_err1;
4552static int hf_ieee80211_ff_ftm_max_toa_error_exponent;
4553static int hf_ieee80211_ff_ftm_toa_err_reserved;
4554static int hf_ieee80211_ff_ftm_invalid_measurement;
4555static int hf_ieee80211_ff_ftm_toa_type;
4556
4557static int hf_ieee80211_ff_ftm_cfo;
4558static int hf_ieee80211_ff_ftm_r2i_ndp_tx_power;
4559static int hf_ieee80211_ff_ftm_i2r_ndp_target_rssi;
4560
4561/* az: FTM Ranging Parameters Element */
4562static int hf_ieee80211_tag_ranging_parameters;
4563static int hf_ieee80211_tag_ranging_subelt_tag;
4564static int hf_ieee80211_tag_ranging_subelt_len;
4565static int hf_ieee80211_tag_ranging_status_indication;
4566static int hf_ieee80211_tag_ranging_value;
4567static int hf_ieee80211_tag_ranging_i2r_lmr_feedback;
4568static int hf_ieee80211_tag_ranging_secure_ltf_required;
4569static int hf_ieee80211_tag_ranging_secure_ltf_support;
4570static int hf_ieee80211_tag_ranging_ranging_priority;
4571static int hf_ieee80211_tag_ranging_r2i_toa_type;
4572static int hf_ieee80211_tag_ranging_i2r_toa_type;
4573static int hf_ieee80211_tag_ranging_r2i_aoa_requested;
4574static int hf_ieee80211_tag_ranging_i2r_aoa_requested;
4575static int hf_ieee80211_tag_ranging_format_and_bandwidth;
4576static int hf_ieee80211_tag_ranging_immediate_r2i_feedback;
4577static int hf_ieee80211_tag_ranging_immediate_i2r_feedback;
4578static int hf_ieee80211_tag_ranging_max_i2r_repetition;
4579static int hf_ieee80211_tag_ranging_max_r2i_repetition;
4580static int hf_ieee80211_tag_ranging_reserved1;
4581static int hf_ieee80211_tag_ranging_reserved2;
4582static int hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz;
4583static int hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz;
4584static int hf_ieee80211_tag_ranging_max_r2i_ltf_total;
4585static int hf_ieee80211_tag_ranging_max_i2r_ltf_total;
4586static int hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz;
4587static int hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz;
4588static int hf_ieee80211_tag_ranging_bss_color_info;
4589
4590/* az: FTM Ranging Parameters NTB-specific subelement */
4591static int hf_ieee80211_tag_ranging_ntb;
4592static int hf_ieee80211_tag_ranging_ntb_reserved1;
4593static int hf_ieee80211_tag_ranging_ntb_min_time_msmts;
4594static int hf_ieee80211_tag_ranging_ntb_max_time_msmts;
4595static int hf_ieee80211_tag_ranging_ntb_r2i_tx_power;
4596static int hf_ieee80211_tag_ranging_ntb_i2r_tx_power;
4597static int hf_ieee80211_tag_ranging_ntb_reserved2;
4598
4599/* az: FTM Ranging Specific TB subelement */
4600static int hf_ieee80211_tag_ranging_aid_rsid;
4601static int hf_ieee80211_tag_ranging_device_class;
4602static int hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo;
4603static int hf_ieee80211_tag_ranging_trigger_frame_paddur;
4604static int hf_ieee80211_tag_ranging_max_sess_exp;
4605static int hf_ieee80211_tag_ranging_passive_tb_ranging;
4606static int hf_ieee80211_tag_ranging_tb_specific_reserved;
4607
4608/* az: FTM Ranging Secure HE-LTF subelement */
4609static int hf_ieee80211_tag_ranging_secure_he_ltf;
4610static int hf_ieee80211_tag_ranging_secure_he_ltf_version;
4611static int hf_ieee80211_tag_ranging_secure_he_ltf_req;
4612static int hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window;
4613static int hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window;
4614static int hf_ieee80211_tag_ranging_secure_he_ltf_reserved;
4615
4616/* az: PASN subelements etc. */
4617static int hf_ieee80211_tag_pasn_parameters_control;
4618static int hf_ieee80211_tag_pasn_params_comeback_info_present;
4619static int hf_ieee80211_tag_pasn_params_group_and_key_present;
4620static int hf_ieee80211_tag_pasn_parameters_reserved;
4621static int hf_ieee80211_tag_pasn_parameters_wrapped_fmt;
4622static int hf_ieee80211_tag_pasn_comeback_after;
4623static int hf_ieee80211_tag_pasn_cookie_length;
4624static int hf_ieee80211_tag_pasn_cookie;
4625static int hf_ieee80211_tag_pasn_finite_cyclic_group_id;
4626static int hf_ieee80211_tag_pasn_ephemeral_public_key_len;
4627static int hf_ieee80211_tag_pasn_ephemeral_public_key;
4628static int hf_ieee80211_pasn_auth1_frame_len;
4629static int hf_ieee80211_pasn_auth2_frame_len;
4630
4631/* az: Secure LTF Parameters */
4632static int hf_ieee80211_tag_secure_ltf_params_counter;
4633static int hf_ieee80211_tag_secure_ltf_generation_sac;
4634static int hf_ieee80211_tag_secure_ltf_management_sac;
4635static int hf_ieee80211_tag_secure_ltf_result_ltf_ofs;
4636
4637/* az: ista and rsta availability details */
4638static int hf_ieee80211_ftm_ista_availability_count;
4639static int hf_ieee80211_ftm_ista_availability_reserved;
4640static int hf_ieee80211_ftm_ista_avail_bits;
4641static int hf_ieee80211_ftm_ista_avail_pad;
4642
4643static int hf_ieee80211_ftm_rsta_header;
4644static int hf_ieee80211_ftm_rsta_count;
4645static int hf_ieee80211_ftm_rsta_avail_window_bcast_fmt;
4646static int hf_ieee80211_ftm_rsta_partial_tsf_timer1;
4647static int hf_ieee80211_ftm_rsta_duration1;
4648static int hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1;
4649static int hf_ieee80211_ftm_rsta_periodicity1;
4650static int hf_ieee80211_ftm_rsta_partial_tsf_timer;
4651static int hf_ieee80211_ftm_rsta_duration;
4652static int hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved;
4653static int hf_ieee80211_ftm_rsta_periodicity;
4654static int hf_ieee80211_ftm_rsta_format_and_bandwidth;
4655static int hf_ieee80211_ftm_rsta_reserved;
4656static int hf_ieee80211_ftm_rsta_avail_subfield_short;
4657static int hf_ieee80211_ftm_rsta_avail_subfield_long;
4658
4659/* be: Multi-link elements and other fields */
4660static int hf_ieee80211_eht_multi_link_control;
4661static int hf_ieee80211_eht_multi_link_control_type;
4662static int hf_ieee80211_eht_multi_link_control_reserved;
4663static int hf_ieee80211_eht_multi_link_control_link_id_present;
4664static int hf_ieee80211_eht_multi_link_control_bss_parms_ch_count;
4665static int hf_ieee80211_eht_multi_link_control_medium_sync_delay;
4666static int hf_ieee80211_eht_multi_link_control_eml_capa;
4667static int hf_ieee80211_eht_multi_link_control_mld_capa;
4668static int hf_ieee80211_eht_multi_link_control_basic_mld_id_present;
4669static int hf_ieee80211_eht_multi_link_control_ext_mld_capa;
4670static int hf_ieee80211_eht_multi_link_control_bitmap_reserved;
4671static int hf_ieee80211_eht_multi_link_control_probe_mld_id_present;
4672static int hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present;
4673static int hf_ieee80211_eht_multi_link_control_probe_reserved;
4674static int hf_ieee80211_eht_multi_link_control_reconfig_mld_mac;
4675static int hf_ieee80211_eht_multi_link_control_reconfig_eml_capa;
4676static int hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper;
4677static int hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper;
4678static int hf_ieee80211_eht_multi_link_control_reconfig_reserved;
4679static int hf_ieee80211_eht_multi_link_control_tdls_reserved;
4680static int hf_ieee80211_eht_multi_link_control_prio_access_reserved;
4681static int hf_ieee80211_eht_common_field_length;
4682static int hf_ieee80211_eht_common_field_mld_mac;
4683static int hf_ieee80211_eht_common_field_link_id_field;
4684static int hf_ieee80211_eht_common_info_link_id;
4685static int hf_ieee80211_eht_common_info_link_id_reserved;
4686static int hf_ieee80211_eht_common_field_bss_param_change_count;
4687static int hf_ieee80211_eht_common_field_medium_sync_field;
4688static int hf_ieee80211_eht_common_info_medium_sync_duration;
4689static int hf_ieee80211_eht_common_info_medium_sync_threshold;
4690static int hf_ieee80211_eht_common_info_medium_sync_max_txops;
4691static int hf_ieee80211_eht_common_field_eml_capabilities;
4692static int hf_ieee80211_eht_common_info_eml_capa_emlsr_support;
4693static int hf_ieee80211_eht_common_info_eml_capa_emlsr_padding_delay;
4694static int hf_ieee80211_eht_common_info_eml_capa_emlsr_transition_delay;
4695static int hf_ieee80211_eht_common_info_eml_capa_emlmr_support;
4696static int hf_ieee80211_eht_common_info_eml_capa_emlmr_delay;
4697static int hf_ieee80211_eht_common_info_eml_capa_transition_timeout;
4698static int hf_ieee80211_eht_common_info_eml_capa_reserved;
4699static int hf_ieee80211_eht_common_field_mld_capabilities;
4700static int hf_ieee80211_eht_common_info_mld_max_simul_links;
4701static int hf_ieee80211_eht_common_info_mld_srs_support;
4702static int hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg;
4703static int hf_ieee80211_eht_common_info_mld_freq_sep_for_str;
4704static int hf_ieee80211_eht_common_info_mld_aar_support;
4705static int hf_ieee80211_eht_common_info_mld_link_reconf_op_support;
4706static int hf_ieee80211_eht_common_info_mld_aligned_twt_support;
4707static int hf_ieee80211_eht_common_info_mld_reserved;
4708static int hf_ieee80211_eht_common_field_mld_id;
4709static int hf_ieee80211_eht_common_field_ap_mld_mac;
4710static int hf_ieee80211_eht_common_field_ext_mld_capabilities;
4711static int hf_ieee80211_eht_common_info_ext_mld_op_update_support;
4712static int hf_ieee80211_eht_common_info_ext_mld_max_simul_links;
4713static int hf_ieee80211_eht_common_info_ext_mld_nstr_status_support;
4714static int hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support;
4715static int hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support;
4716static int hf_ieee80211_eht_common_info_ext_mld_reserved;
4717static int hf_ieee80211_eht_multi_link_subelt_tag;
4718static int hf_ieee80211_eht_multi_link_subelt_len;
4719static int hf_ieee80211_eht_multi_link_type_0_link_count;
4720static int hf_ieee80211_eht_multi_link_type_1_link_count;
4721static int hf_ieee80211_eht_multi_link_type_2_link_count;
4722static int hf_ieee80211_eht_multi_link_type_3_link_count;
4723static int hf_ieee80211_eht_multi_link_type_4_link_count;
4724static int hf_ieee80211_eht_multi_link_link_id_list;
4725static int hf_ieee80211_eht_profile_sta_control;
4726static int hf_ieee80211_eht_profile_link_id;
4727static int hf_ieee80211_eht_profile_complete_profile;
4728static int hf_ieee80211_eht_profile_mac_address_present;
4729static int hf_ieee80211_eht_profile_beacon_interval_present;
4730static int hf_ieee80211_eht_profile_tsf_offset_present;
4731static int hf_ieee80211_eht_profile_dtim_info_present;
4732static int hf_ieee80211_eht_profile_nstr_link_pair_present;
4733static int hf_ieee80211_eht_profile_nstr_bitmap_size;
4734static int hf_ieee80211_eht_profile_bss_params_change_count_present;
4735static int hf_ieee80211_eht_profile_reserved;
4736static int hf_ieee80211_eht_profile_probe_reserved;
4737static int hf_ieee80211_eht_profile_removal_timer_present;
4738static int hf_ieee80211_eht_profile_reconfig_operation_type;
4739static int hf_ieee80211_eht_profile_operation_para_present;
4740static int hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size;
4741static int hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present;
4742static int hf_ieee80211_eht_profile_reconfig_reserved;
4743static int hf_ieee80211_eht_profile_prio_acc_reserved;
4744static int hf_ieee80211_eht_sta_profile_info_len;
4745static int hf_ieee80211_eht_sta_profile_info_mac;
4746static int hf_ieee80211_eht_sta_profile_info_beacon;
4747static int hf_ieee80211_eht_sta_profile_info_tsf_offset;
4748static int hf_ieee80211_eht_sta_profile_info_dtim_count;
4749static int hf_ieee80211_eht_sta_profile_info_dtim_period;
4750static int hf_ieee80211_eht_sta_profile_info_bitmap;
4751static int hf_ieee80211_eht_sta_profile_bss_params_change_count;
4752static int hf_ieee80211_eht_sta_profile_removal_timer;
4753static int hf_ieee80211_eht_sta_profile_presence_indi;
4754static int hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present;
4755static int hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present;
4756static int hf_ieee80211_eht_sta_profile_presence_indi_reserved;
4757static int hf_ieee80211_eht_sta_profile_operation_para_info;
4758static int hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length;
4759static int hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length;
4760static int hf_ieee80211_eht_sta_profile_operation_para_info_pad;
4761static int hf_ieee80211_eht_operation_parameters;
4762static int hf_ieee80211_eht_basic_eht_mcs_nss_set;
4763static int hf_ieee80211_eht_operation_control_chan_width;
4764static int hf_ieee80211_eht_operation_control_reserved;
4765static int hf_ieee80211_eht_operation_info_present;
4766static int hf_ieee80211_eht_operation_subchannel_bitmap_present;
4767static int hf_ieee80211_eht_operation_default_pe_duration;
4768static int hf_ieee80211_eht_operation_group_addressed_bu_indication_limit;
4769static int hf_ieee80211_eht_operation_group_addressed_bu_indication_exp;
4770static int hf_ieee80211_eht_operation_mcs15_disable;
4771static int hf_ieee80211_eht_operation_reserved;
4772static int hf_ieee80211_eht_operation_control;
4773static int hf_ieee80211_eht_operation_ccfs0;
4774static int hf_ieee80211_eht_operation_ccfs1;
4775static int hf_ieee80211_eht_operation_disabled_bitmap;
4776static int hf_ieee80211_eht_mac_capabilities;
4777static int hf_ieee80211_eht_mac_capa_epcs_prio_access_support;
4778static int hf_ieee80211_eht_mac_capa_eht_om_control_support;
4779static int hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support;
4780static int hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support;
4781static int hf_ieee80211_eht_mac_capa_restricted_twt_support;
4782static int hf_ieee80211_eht_mac_capa_scs_traffic_description_support;
4783static int hf_ieee80211_eht_mac_capa_maximum_mpdu_length;
4784static int hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext;
4785static int hf_ieee80211_eht_mac_capa_eht_trs_support;
4786static int hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode;
4787static int hf_ieee80211_eht_mac_capa_two_bqrs_support;
4788static int hf_ieee80211_eht_mac_capa_eht_link_adaptation_support;
4789static int hf_ieee80211_eht_mac_capa_unsolicited_epcs_update;
4790static int hf_ieee80211_eht_mac_capa_reserved;
4791static int hf_ieee80211_eht_phy_bits_0_15;
4792static int hf_ieee80211_eht_phy_bits_0_15_reserved;
4793static int hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz;
4794static int hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz;
4795static int hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi;
4796static int hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo;
4797static int hf_ieee80211_eht_phy_bits_0_15_su_beamformer;
4798static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee;
4799static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz;
4800static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz;
4801static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz;
4802static int hf_ieee80211_eht_phy_bits_16_31;
4803static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz;
4804static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz;
4805static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz;
4806static int hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback;
4807static int hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback;
4808static int hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck;
4809static int hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck;
4810static int hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck;
4811static int hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck;
4812static int hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback;
4813static int hf_ieee80211_eht_phy_bits_32_39;
4814static int hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo;
4815static int hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support;
4816static int hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support;
4817static int hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi;
4818static int hf_ieee80211_eht_phy_bits_32_39_max_nc;
4819static int hf_ieee80211_eht_phy_bits_40_63;
4820static int hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck;
4821static int hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support;
4822static int hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support;
4823static int hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present;
4824static int hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding;
4825static int hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs;
4826static int hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15;
4827static int hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz;
4828static int hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw;
4829static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz;
4830static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz;
4831static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz;
4832static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz;
4833static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz;
4834static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz;
4835static int hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit;
4836static int hf_ieee80211_eht_phy_bits_64_71;
4837static int hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup;
4838static int hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup;
4839static int hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support;
4840static int hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo;
4841static int hf_ieee80211_eht_phy_bits_64_71_20m_mru_support;
4842static int hf_ieee80211_eht_phy_bits_64_71_reserved;
4843static int hf_ieee80211_eht_supported_mcs_nss_bytes;
4844static int hf_ieee80211_eht_mcs_and_nss_non_ap;
4845static int hf_ieee80211_eht_rx_max_nss_20mhz_0_7;
4846static int hf_ieee80211_eht_tx_max_nss_20mhz_0_7;
4847static int hf_ieee80211_eht_rx_max_nss_20mhz_8_9;
4848static int hf_ieee80211_eht_tx_max_nss_20mhz_8_9;
4849static int hf_ieee80211_eht_rx_max_nss_20mhz_10_11;
4850static int hf_ieee80211_eht_tx_max_nss_20mhz_10_11;
4851static int hf_ieee80211_eht_rx_max_nss_20mhz_12_13;
4852static int hf_ieee80211_eht_tx_max_nss_20mhz_12_13;
4853static int hf_ieee80211_eht_le_80_rx_max_nss_0_9;
4854static int hf_ieee80211_eht_le_80_tx_max_nss_0_9;
4855static int hf_ieee80211_eht_le_80_rx_max_nss_10_11;
4856static int hf_ieee80211_eht_le_80_tx_max_nss_10_11;
4857static int hf_ieee80211_eht_le_80_rx_max_nss_12_13;
4858static int hf_ieee80211_eht_le_80_tx_max_nss_12_13;
4859static int hf_ieee80211_eht_160_rx_max_nss_0_9;
4860static int hf_ieee80211_eht_160_tx_max_nss_0_9;
4861static int hf_ieee80211_eht_160_rx_max_nss_10_11;
4862static int hf_ieee80211_eht_160_tx_max_nss_10_11;
4863static int hf_ieee80211_eht_160_rx_max_nss_12_13;
4864static int hf_ieee80211_eht_160_tx_max_nss_12_13;
4865static int hf_ieee80211_eht_320_rx_max_nss_0_9;
4866static int hf_ieee80211_eht_320_tx_max_nss_0_9;
4867static int hf_ieee80211_eht_320_rx_max_nss_10_11;
4868static int hf_ieee80211_eht_320_tx_max_nss_10_11;
4869static int hf_ieee80211_eht_320_rx_max_nss_12_13;
4870static int hf_ieee80211_eht_320_tx_max_nss_12_13;
4871static int hf_ieee80211_eht_mcs_and_nss_le_80mhz;
4872static int hf_ieee80211_eht_mcs_and_nss_eq_160mhz;
4873static int hf_ieee80211_eht_mcs_and_nss_eq_320mhz;
4874static int hf_ieee80211_eht_ppe_thresholds;
4875static int hf_ieee80211_eht_ttl_mapping_control;
4876static int hf_ieee80211_eht_ttl_mapping_direction;
4877static int hf_ieee80211_eht_ttl_default_link_mapping;
4878static int hf_ieee80211_eht_ttl_mapping_switch_time_pres;
4879static int hf_ieee80211_eht_ttl_expected_dura_pres;
4880static int hf_ieee80211_eht_ttl_link_mapping_size;
4881static int hf_ieee80211_eht_ttl_mapping_reserved;
4882static int hf_ieee80211_eht_ttl_mapping_presence;
4883static int hf_ieee80211_eht_ttl_mapping_switch_time;
4884static int hf_ieee80211_eht_ttl_mapping_expected_duration;
4885static int hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping;
4886static int hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping;
4887static int hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping;
4888static int hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping;
4889static int hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping;
4890static int hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping;
4891static int hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping;
4892static int hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping;
4893static int hf_ieee80211_eht_multi_link_traffic_control;
4894static int hf_ieee80211_eht_multi_link_tc_bitmap_size;
4895static int hf_ieee80211_eht_multi_link_tc_aid_offset;
4896static int hf_ieee80211_eht_multi_link_tc_reserved;
4897static int hf_ieee80211_eht_multi_link_traffic_indication;
4898static int hf_ieee80211_eht_qos_chars_dirn;
4899static int hf_ieee80211_eht_qos_chars_tid;
4900static int hf_ieee80211_eht_qos_chars_user_prio;
4901static int hf_ieee80211_eht_qos_chars_bitmap;
4902static int hf_ieee80211_eht_qos_chars_linkid;
4903static int hf_ieee80211_eht_qos_chars_resrvd;
4904static int hf_ieee80211_eht_qos_chars_min_svc_interval;
4905static int hf_ieee80211_eht_qos_chars_max_svc_interval;
4906static int hf_ieee80211_eht_qos_chars_min_data_rate;
4907static int hf_ieee80211_eht_qos_chars_delay_bound;
4908static int hf_ieee80211_eht_qos_chars_max_msdu_size;
4909static int hf_ieee80211_eht_qos_chars_service_start_time;
4910static int hf_ieee80211_eht_qos_chars_service_start_time_linkid;
4911static int hf_ieee80211_eht_qos_chars_mean_data_rate;
4912static int hf_ieee80211_eht_qos_chars_burst_size;
4913static int hf_ieee80211_eht_qos_chars_msdu_lifetime;
4914static int hf_ieee80211_eht_qos_chars_msdu_delivery_ratio;
4915static int hf_ieee80211_eht_qos_chars_msdu_count_exponent;
4916static int hf_ieee80211_eht_qos_chars_medium_time;
4917static int hf_ieee80211_eht_link_id_bitmap;
4918static int hf_ieee80211_eht_aid_bitmap_length;
4919static int hf_ieee80211_eht_aid_bitmap_control;
4920static int hf_ieee80211_eht_aid_bitmap_control_reserved;
4921static int hf_ieee80211_eht_aid_bitmap_control_offset;
4922static int hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap;
4923static int hf_ieee80211_eht_aid_bitmap_aid;
4924static int hf_ieee80211_eht_bw_indi_param;
4925static int hf_ieee80211_eht_bw_indi_param_reserved;
4926static int hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap;
4927static int hf_ieee80211_eht_bw_indi_param_reserved1;
4928static int hf_ieee80211_eht_bw_indi_diabled_bitmap;
4929static int hf_ieee80211_eht_mimo_ctrl_field;
4930static int hf_ieee80211_eht_mimo_ctrl_nc_index;
4931static int hf_ieee80211_eht_mimo_ctrl_nr_index;
4932static int hf_ieee80211_eht_mimo_ctrl_bw;
4933static int hf_ieee80211_eht_mimo_ctrl_grouping;
4934static int hf_ieee80211_eht_mimo_ctrl_feedback_type;
4935static int hf_ieee80211_eht_mimo_ctrl_reserved1;
4936static int hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments;
4937static int hf_ieee80211_eht_mimo_ctrl_first_feedback_segment;
4938static int hf_ieee80211_eht_mimo_ctrl_partial_bw_info;
4939static int hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number;
4940static int hf_ieee80211_eht_mimo_ctrl_codebook_info;
4941static int hf_ieee80211_eht_mimo_ctrl_reserved2;
4942
4943/* be: Compressed beamforming report etc */
4944static int hf_ieee80211_eht_compressed_beamforming_report_snr;
4945static int hf_ieee80211_eht_compressed_beamform_scidx;
4946
4947/* be: MU Exclusive beamforming report */
4948static int hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr;
4949
4950static int hf_ieee80211_eht_eml_control_field;
4951static int hf_ieee80211_eht_eml_control_emlsr_mode;
4952static int hf_ieee80211_eht_eml_control_emlmr_mode;
4953static int hf_ieee80211_eht_eml_control_emlsr_para_update_control;
4954static int hf_ieee80211_eht_eml_control_device_coexist_activities;
4955static int hf_ieee80211_eht_eml_control_reserved;
4956static int hf_ieee80211_eht_eml_control_link_bitmap;
4957static int hf_ieee80211_eht_eml_control_link_enable_id;
4958static int hf_ieee80211_eht_eml_control_mcs_map_count;
4959static int hf_ieee80211_eht_eml_control_mcs_map_count_bw;
4960static int hf_ieee80211_eht_eml_control_mcs_map_count_reserved;
4961static int hf_ieee80211_eht_emlsr_para_update;
4962static int hf_ieee80211_eht_emlsr_para_update_padding_delay;
4963static int hf_ieee80211_eht_emlsr_para_update_tran_delay;
4964static int hf_ieee80211_eht_emlsr_para_update_reserved;
4965
4966static int hf_ieee80211_eht_group_key_data_length;
4967static int hf_ieee80211_eht_reconfig_link_id_info;
4968static int hf_ieee80211_eht_reconfig_link_id;
4969static int hf_ieee80211_eht_reconfig_link_id_reserved;
4970static int hf_ieee80211_eht_reconfig_status_code;
4971
4972static int hf_ieee80211_ff_ant_selection;
4973static int hf_ieee80211_ff_ant_selection_0;
4974static int hf_ieee80211_ff_ant_selection_1;
4975static int hf_ieee80211_ff_ant_selection_2;
4976static int hf_ieee80211_ff_ant_selection_3;
4977static int hf_ieee80211_ff_ant_selection_4;
4978static int hf_ieee80211_ff_ant_selection_5;
4979static int hf_ieee80211_ff_ant_selection_6;
4980static int hf_ieee80211_ff_ant_selection_7;
4981
4982static int * const ieee80211_ff_ant_selection_fields[] = {
4983 &hf_ieee80211_ff_ant_selection_0,
4984 &hf_ieee80211_ff_ant_selection_1,
4985 &hf_ieee80211_ff_ant_selection_2,
4986 &hf_ieee80211_ff_ant_selection_3,
4987 &hf_ieee80211_ff_ant_selection_4,
4988 &hf_ieee80211_ff_ant_selection_5,
4989 &hf_ieee80211_ff_ant_selection_6,
4990 &hf_ieee80211_ff_ant_selection_7,
4991 NULL((void*)0)
4992};
4993
4994static int hf_ieee80211_ff_ext_channel_switch_announcement;
4995static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode;
4996static int hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class;
4997static int hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number;
4998static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_count;
4999
5000static int * const ieee80211_ff_ext_channel_switch_announcement_fields[] = {
5001 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
5002 &hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
5003 &hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
5004 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
5005 NULL((void*)0)
5006};
5007
5008static int hf_ieee80211_ff_ht_info;
5009static int hf_ieee80211_ff_ht_info_information_request;
5010static int hf_ieee80211_ff_ht_info_40_mhz_intolerant;
5011static int hf_ieee80211_ff_ht_info_sta_chan_width;
5012static int hf_ieee80211_ff_ht_info_reserved;
5013
5014static int * const ieee80211_ff_ht_info_fields[] = {
5015 &hf_ieee80211_ff_ht_info_information_request,
5016 &hf_ieee80211_ff_ht_info_40_mhz_intolerant,
5017 &hf_ieee80211_ff_ht_info_sta_chan_width,
5018 &hf_ieee80211_ff_ht_info_reserved,
5019 NULL((void*)0)
5020};
5021
5022static int hf_ieee80211_ff_ht_action;
5023
5024static int hf_ieee80211_ff_psmp_sta_info;
5025static int hf_ieee80211_ff_psmp_sta_info_type;
5026static int hf_ieee80211_ff_psmp_sta_info_dtt_start_offset;
5027static int hf_ieee80211_ff_psmp_sta_info_dtt_duration;
5028static int hf_ieee80211_ff_psmp_sta_info_sta_id;
5029static int hf_ieee80211_ff_psmp_sta_info_utt_start_offset;
5030static int hf_ieee80211_ff_psmp_sta_info_utt_duration;
5031static int hf_ieee80211_ff_psmp_sta_info_reserved_small;
5032static int hf_ieee80211_ff_psmp_sta_info_reserved_large;
5033static int hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id;
5034
5035static int hf_ieee80211_ff_mimo_csi_snr;
5036static int hf_ieee80211_ff_mimo_csi_matrices;
5037static int hf_ieee80211_ff_mimo_csi_bf_matrices;
5038static int hf_ieee80211_ff_mimo_csi_cbf_matrices;
5039
5040/*** Begin: 802.11s additions ***/
5041static int hf_ieee80211_mesh_control_field;
5042
5043static int hf_ieee80211_ff_mesh_action;
5044static int hf_ieee80211_ff_multihop_action;
5045static int hf_ieee80211_ff_mesh_flags;
5046static int hf_ieee80211_ff_mesh_ttl;
5047static int hf_ieee80211_ff_mesh_sequence;
5048static int hf_ieee80211_ff_mesh_addr4;
5049static int hf_ieee80211_ff_mesh_addr5;
5050static int hf_ieee80211_ff_mesh_addr6;
5051static int hf_ieee80211_ff_selfprot_action;
5052
5053static int hf_ieee80211_mesh_peering_proto;
5054static int hf_ieee80211_mesh_peering_local_link_id;
5055static int hf_ieee80211_mesh_peering_peer_link_id;
5056
5057static int hf_ieee80211_ff_hwmp_flags;
5058static int hf_ieee80211_ff_hwmp_hopcount;
5059static int hf_ieee80211_ff_hwmp_ttl;
5060static int hf_ieee80211_ff_hwmp_pdid;
5061static int hf_ieee80211_ff_hwmp_orig_sta;
5062static int hf_ieee80211_ff_hwmp_orig_sn;
5063static int hf_ieee80211_ff_hwmp_orig_ext;
5064static int hf_ieee80211_ff_hwmp_lifetime;
5065static int hf_ieee80211_ff_hwmp_metric;
5066static int hf_ieee80211_ff_hwmp_targ_count;
5067static int hf_ieee80211_ff_hwmp_targ_flags;
5068static int hf_ieee80211_ff_hwmp_targ_to_flags;
5069static int hf_ieee80211_ff_hwmp_targ_usn_flags;
5070static int hf_ieee80211_ff_hwmp_targ_sta;
5071static int hf_ieee80211_ff_hwmp_targ_sn;
5072static int hf_ieee80211_ff_hwmp_targ_ext;
5073static int hf_ieee80211_rann_flags;
5074static int hf_ieee80211_rann_root_sta;
5075static int hf_ieee80211_rann_sn;
5076static int hf_ieee80211_rann_interval;
5077
5078static int hf_ieee80211_mesh_channel_switch_ttl;
5079static int hf_ieee80211_mesh_channel_switch_flag;
5080static int hf_ieee80211_mesh_channel_switch_reason_code;
5081static int hf_ieee80211_mesh_channel_switch_precedence_value;
5082static int hf_ieee80211_mesh_chswitch_flag_txrestrict;
5083static int hf_ieee80211_mesh_chswitch_flag_initiator;
5084
5085static int hf_ieee80211_mesh_config_path_sel_protocol;
5086static int hf_ieee80211_mesh_config_path_sel_metric;
5087static int hf_ieee80211_mesh_config_congestion_control;
5088static int hf_ieee80211_mesh_config_sync_method;
5089static int hf_ieee80211_mesh_config_auth_protocol;
5090static int hf_ieee80211_mesh_config_formation_info;
5091static int hf_ieee80211_mesh_config_capability;
5092static int hf_ieee80211_mesh_id;
5093static int hf_ieee80211_mesh_config_cap_accepting;
5094static int hf_ieee80211_mesh_config_cap_mcca_support;
5095static int hf_ieee80211_mesh_config_cap_mcca_enabled;
5096static int hf_ieee80211_mesh_config_cap_forwarding;
5097static int hf_ieee80211_mesh_config_cap_mbca_enabled;
5098static int hf_ieee80211_mesh_config_cap_tbtt_adjusting;
5099static int hf_ieee80211_mesh_config_cap_power_save_level;
5100static int hf_ieee80211_mesh_config_cap_reserved;
5101static int hf_ieee80211_mesh_form_info_conn_to_mesh_gate;
5102static int hf_ieee80211_mesh_form_info_num_of_peerings;
5103static int hf_ieee80211_mesh_form_info_conn_to_as;
5104static int hf_ieee80211_mesh_awake_window;
5105static int hf_ieee80211_mesh_mic;
5106static int hf_ieee80211_mesh_ampe_encrypted_data;
5107
5108static int hf_ieee80211_bcn_timing_rctrl;
5109static int hf_ieee80211_bcn_timing_rctrl_more;
5110static int hf_ieee80211_bcn_timing_rctrl_element_num;
5111static int hf_ieee80211_bcn_timing_rctrl_status_num;
5112static int hf_ieee80211_bcn_timing_info;
5113static int hf_ieee80211_bcn_timing_info_nsta_id;
5114static int hf_ieee80211_bcn_timing_info_nsta_tbtt;
5115static int hf_ieee80211_bcn_timing_info_nsta_bi;
5116
5117static int hf_ieee80211_gann_flags;
5118static int hf_ieee80211_gann_flags_reserved;
5119static int hf_ieee80211_gann_hop_count;
5120static int hf_ieee80211_gann_elem_ttl;
5121static int hf_ieee80211_gann_mesh_gate_addr;
5122static int hf_ieee80211_gann_seq_num;
5123static int hf_ieee80211_gann_interval;
5124
5125static int hf_ieee80211_pxu_pxu_id;
5126static int hf_ieee80211_pxu_pxu_origin_mac;
5127static int hf_ieee80211_pxu_no_proxy_info;
5128static int hf_ieee80211_pxu_proxy_info;
5129static int hf_ieee80211_pxu_proxy_info_flags;
5130static int hf_ieee80211_pxu_proxy_info_flags_delete;
5131static int hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy;
5132static int hf_ieee80211_pxu_proxy_info_flags_lifetime;
5133static int hf_ieee80211_pxu_proxy_info_flags_reserved;
5134static int hf_ieee80211_pxu_proxy_info_ext_mac;
5135static int hf_ieee80211_pxu_proxy_info_seq_num;
5136static int hf_ieee80211_pxu_proxy_info_proxy_mac;
5137static int hf_ieee80211_pxu_proxy_info_lifetime;
5138
5139static int hf_ieee80211_pxuc_pxu_id;
5140static int hf_ieee80211_pxuc_pxu_recip_mac;
5141
5142static int hf_ieee80211_ff_public_action;
5143static int hf_ieee80211_ff_protected_public_action;
5144static int hf_ieee80211_ff_tod;
5145static int hf_ieee80211_ff_toa;
5146static int hf_ieee80211_ff_max_tod_err;
5147static int hf_ieee80211_ff_max_toa_err;
5148
5149/* ************************************************************************* */
5150/* Flags found in the capability field (fixed field) */
5151/* ************************************************************************* */
5152static int hf_ieee80211_ff_capture;
5153static int hf_ieee80211_ff_cf_ess;
5154static int hf_ieee80211_ff_cf_ibss;
5155static int hf_ieee80211_ff_cf_reserved1;
5156static int hf_ieee80211_ff_cf_reserved2;
5157static int hf_ieee80211_ff_cf_privacy;
5158static int hf_ieee80211_ff_cf_preamble;
5159static int hf_ieee80211_ff_cf_critical_update_flag;
5160static int hf_ieee80211_ff_cf_nontran_bss_critical_update_flag;
5161static int hf_ieee80211_ff_cf_spec_man;
5162static int hf_ieee80211_ff_cf_qos;
5163static int hf_ieee80211_ff_cf_short_slot_time;
5164static int hf_ieee80211_ff_cf_apsd;
5165static int hf_ieee80211_ff_cf_radio_measurement;
5166static int hf_ieee80211_ff_cf_epd;
5167static int hf_ieee80211_ff_cf_reserved5;
5168static int hf_ieee80211_ff_cf_reserved6;
5169
5170/* ************************************************************************* */
5171/* A-MSDU fields */
5172/* ************************************************************************* */
5173static int hf_ieee80211_amsdu_subframe;
5174static int hf_ieee80211_amsdu_length;
5175static int hf_ieee80211_amsdu_padding;
5176
5177/* ************************************************************************* */
5178/* Tagged value format fields */
5179/* ************************************************************************* */
5180static int hf_ieee80211_tagged_parameters; /* Tagged payload item */
5181static int hf_ieee80211_tag;
5182static int hf_ieee80211_tag_number;
5183static int hf_ieee80211_tag_length;
5184static int hf_ieee80211_tag_data;
5185static int hf_ieee80211_tag_oui;
5186static int hf_ieee80211_tag_oui_wfa_subtype;
5187static int hf_ieee80211_tag_oui_wfa_action_type;
5188static int hf_ieee80211_tag_ssid;
5189static int hf_ieee80211_tag_supp_rates;
5190static int hf_ieee80211_tag_fh_dwell_time;
5191static int hf_ieee80211_tag_fh_hop_set;
5192static int hf_ieee80211_tag_fh_hop_pattern;
5193static int hf_ieee80211_tag_fh_hop_index;
5194static int hf_ieee80211_tag_ds_param_channel;
5195static int hf_ieee80211_tag_cfp_count;
5196static int hf_ieee80211_tag_cfp_period;
5197static int hf_ieee80211_tag_cfp_max_duration;
5198static int hf_ieee80211_tag_cfp_dur_remaining;
5199static int hf_ieee80211_tim_dtim_count;
5200static int hf_ieee80211_tim_dtim_period;
5201static int hf_ieee80211_tim_bmapctl;
5202static int hf_ieee80211_tim_bmapctl_mcast;
5203static int hf_ieee80211_tim_bmapctl_offset;
5204static int hf_ieee80211_tim_partial_virtual_bitmap;
5205static int hf_ieee80211_tim_aid;
5206static int hf_ieee80211_tag_ibss_atim_window;
5207static int hf_ieee80211_tag_country_info_code;
5208static int hf_ieee80211_tag_country_info_env;
5209static int hf_ieee80211_tag_country_info_pad;
5210static int hf_ieee80211_tag_country_info_fnm;
5211static int hf_ieee80211_tag_country_info_fnm_fcn;
5212static int hf_ieee80211_tag_country_info_fnm_nc;
5213static int hf_ieee80211_tag_country_info_fnm_mtpl;
5214static int hf_ieee80211_tag_country_info_rrc;
5215static int hf_ieee80211_tag_country_info_rrc_oei;
5216static int hf_ieee80211_tag_country_info_rrc_oc;
5217static int hf_ieee80211_tag_country_info_rrc_cc;
5218static int hf_ieee80211_tag_fh_hopping_parameter_prime_radix;
5219static int hf_ieee80211_tag_fh_hopping_parameter_nb_channels;
5220static int hf_ieee80211_tag_fh_hopping_table_flag;
5221static int hf_ieee80211_tag_fh_hopping_table_number_of_sets;
5222static int hf_ieee80211_tag_fh_hopping_table_modulus;
5223static int hf_ieee80211_tag_fh_hopping_table_offset;
5224static int hf_ieee80211_tag_fh_hopping_random_table;
5225static int hf_ieee80211_tag_request;
5226static int hf_ieee80211_tag_extended_request_id;
5227static int hf_ieee80211_tag_extended_request_extension;
5228static int hf_ieee80211_tag_challenge_text;
5229
5230static int hf_ieee80211_oui_qos_subtype;
5231static int hf_ieee80211_oui_qos_mgmt_dialog_token;
5232static int hf_ieee80211_oui_qos_mgmt_resp_control;
5233static int hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more;
5234static int hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset;
5235static int hf_ieee80211_oui_qos_mgmt_rsp_reserved;
5236static int hf_ieee80211_oui_qos_mgmt_rqst_control;
5237static int hf_ieee80211_oui_qos_mgmt_rq_ctrl_more;
5238static int hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset;
5239static int hf_ieee80211_oui_qos_mgmt_rq_reserved;
5240static int hf_ieee80211_oui_qos_mgmt_count;
5241static int hf_ieee80211_dscp_policy_id;
5242static int hf_ieee80211_dscp_policy_status;
5243static int hf_ieee80211_dscp_policy_scs_sts_list;
5244
5245static int hf_ieee80211_tag_he_6ghz_cap_inf;
5246static int hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2;
5247static int hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5;
5248static int hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7;
5249static int hf_ieee80211_tag_he_6ghz_cap_inf_b8;
5250static int hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10;
5251static int hf_ieee80211_tag_he_6ghz_cap_inf_b11;
5252static int hf_ieee80211_tag_he_6ghz_cap_inf_b12;
5253static int hf_ieee80211_tag_he_6ghz_cap_inf_b13;
5254static int hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15;
5255
5256static int hf_ieee80211_tag_ftm_tsf_sync_info;
5257
5258static int * const ieee80211_tag_he_6ghz_cap_inf[] = {
5259 &hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2,
5260 &hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5,
5261 &hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7,
5262 &hf_ieee80211_tag_he_6ghz_cap_inf_b8,
5263 &hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10,
5264 &hf_ieee80211_tag_he_6ghz_cap_inf_b11,
5265 &hf_ieee80211_tag_he_6ghz_cap_inf_b12,
5266 &hf_ieee80211_tag_he_6ghz_cap_inf_b13,
5267 &hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15,
5268 NULL((void*)0)
5269};
5270
5271
5272static int hf_ieee80211_wep_iv;
5273static int hf_ieee80211_wep_iv_weak;
5274static int hf_ieee80211_tkip_extiv;
5275static int hf_ieee80211_ccmp_extiv;
5276static int hf_ieee80211_wep_key;
5277static int hf_ieee80211_wep_icv;
5278static int hf_ieee80211_fc_analysis_pmk;
5279static int hf_ieee80211_fc_analysis_kck;
5280static int hf_ieee80211_fc_analysis_kek;
5281static int hf_ieee80211_fc_analysis_tk;
5282static int hf_ieee80211_fc_analysis_gtk;
5283
5284static int hf_ieee80211_block_ack_control;
5285static int hf_ieee80211_block_ack_control_ack_policy;
5286static int hf_ieee80211_block_ack_control_type;
5287static int hf_ieee80211_block_ack_control_reserved;
5288static int hf_ieee80211_block_ack_control_tid_info;
5289
5290static int hf_ieee80211_block_ack_multi_tid_reserved;
5291static int hf_ieee80211_block_ack_multi_tid_value;
5292static int hf_ieee80211_block_ack_bitmap;
5293static int hf_ieee80211_block_ack_bitmap_missing_frame;
5294static int hf_ieee80211_block_ack_bitmap_last_ack_frame;
5295static int hf_ieee80211_block_ack_gcr_addr;
5296
5297static int hf_ieee80211_block_ack_multi_sta_aid11;
5298static int hf_ieee80211_block_ack_multi_sta_ack_type;
5299static int hf_ieee80211_block_ack_multi_sta_tid;
5300static int hf_ieee80211_block_ack_multi_sta_aid_tid;
5301static int hf_ieee80211_block_ack_multi_sta_reserved;
5302static int hf_ieee80211_block_ack_multi_sta_ra;
5303
5304static int hf_ieee80211_tag_measure_request_measurement_mode;
5305static int hf_ieee80211_tag_measure_request_bssid;
5306
5307static int hf_ieee80211_tag_measure_request_subelement_length;
5308static int hf_ieee80211_tag_measure_request_beacon_sub_id;
5309static int hf_ieee80211_tag_measure_request_beacon_sub_ssid;
5310static int hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition;
5311static int hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset;
5312static int hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail;
5313static int hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request;
5314static int hf_ieee80211_tag_measure_request_beacon_unknown;
5315
5316static int hf_ieee80211_tag_measure_request_channel_load_sub_id;
5317static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition;
5318static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref;
5319
5320static int hf_ieee80211_tag_measure_request_noise_histogram_sub_id;
5321static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition;
5322static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref;
5323
5324static int hf_ieee80211_tag_measure_request_frame_request_type;
5325static int hf_ieee80211_tag_measure_request_mac_address;
5326static int hf_ieee80211_tag_measure_request_peer_mac_address;
5327static int hf_ieee80211_tag_measure_request_group_id;
5328
5329static int hf_ieee80211_tag_measure_request_location_subject;
5330static int hf_ieee80211_tag_measure_request_civic_location_type;
5331static int hf_ieee80211_tag_measure_request_location_service_interval_units;
5332static int hf_ieee80211_tag_measure_request_location_service_interval;
5333
5334static int hf_ieee80211_tag_measure_request_unknown;
5335
5336static int hf_ieee80211_ht_pren_type;
5337static int hf_ieee80211_ht_pren_unknown;
5338
5339static int hf_ieee80211_ht_cap;
5340static int hf_ieee80211_ht_vs_cap;
5341static int hf_ieee80211_ht_ldpc_coding;
5342static int hf_ieee80211_ht_chan_width;
5343static int hf_ieee80211_ht_sm_pwsave;
5344static int hf_ieee80211_ht_green;
5345static int hf_ieee80211_ht_short20;
5346static int hf_ieee80211_ht_short40;
5347static int hf_ieee80211_ht_tx_stbc;
5348static int hf_ieee80211_ht_rx_stbc;
5349static int hf_ieee80211_ht_reserved_b10;
5350static int hf_ieee80211_ht_max_amsdu;
5351static int hf_ieee80211_ht_dss_cck_40;
5352static int hf_ieee80211_ht_reserved_b13;
5353static int hf_ieee80211_ht_40_mhz_intolerant;
5354static int hf_ieee80211_ht_reserved_b15;
5355
5356static int hf_ieee80211_ext_bss_mu_mimo_capable_sta_count;
5357static int hf_ieee80211_ext_bss_ss_underutilization;
5358static int hf_ieee80211_ext_bss_observable_sec_20mhz_utilization;
5359static int hf_ieee80211_ext_bss_observable_sec_40mhz_utilization;
5360static int hf_ieee80211_ext_bss_observable_sec_80mhz_utilization;
5361static int hf_ieee80211_wide_bw_new_channel_width;
5362static int hf_ieee80211_wide_bw_new_channel_center_freq_segment0;
5363static int hf_ieee80211_wide_bw_new_channel_center_freq_segment1;
5364
5365static int hf_ieee80211_operat_notification_mode;
5366static int hf_ieee80211_operat_mode_field_channel_width;
5367static int hf_ieee80211_operat_mode_field_160_80plus80_bw;
5368static int hf_ieee80211_operat_mode_field_no_ldpc;
5369static int hf_ieee80211_operat_mode_field_rxnss;
5370static int hf_ieee80211_operat_mode_field_rxnsstype;
5371
5372static int hf_ieee80211_tbtt_info;
5373static int hf_ieee80211_tbtt_filtered_nap;
5374static int hf_ieee80211_tbtt_info_count;
5375static int hf_ieee80211_tbtt_info_length;
5376
5377static int hf_ieee80211_tbtt_operating_class;
5378static int hf_ieee80211_tbtt_channel_number;
5379
5380static int hf_ieee80211_tbtt_offset;
5381static int hf_ieee80211_tbtt_bssid;
5382static int hf_ieee80211_tbtt_short_ssid;
5383static int hf_ieee80211_rnr_bss_params;
5384static int hf_ieee80211_rnr_oct_recommended;
5385static int hf_ieee80211_rnr_same_ssid;
5386static int hf_ieee80211_rnr_multiple_bssid;
5387static int hf_ieee80211_rnr_transmitted_bssid;
5388static int hf_ieee80211_rnr_ess_with_colocated_ap;
5389static int hf_ieee80211_rnr_unsolicited_probe_responses;
5390static int hf_ieee80211_rnr_same_colocated_ap;
5391static int hf_ieee80211_rnr_same_reserved;
5392static int hf_ieee80211_rnr_20mhz_psd_subfield;
5393static int hf_ieee80211_rnr_reserved_data;
5394static int hf_ieee80211_rnr_mld_params;
5395static int hf_ieee80211_rnr_mld_id;
5396static int hf_ieee80211_rnr_mld_link_id;
5397static int hf_ieee80211_rnr_mld_bss_params_change_count;
5398static int hf_ieee80211_rnr_mld_all_updates_included;
5399static int hf_ieee80211_rnr_mld_disabled_link_indication;
5400static int hf_ieee80211_rnr_mld_reserved;
5401
5402static int hf_ieee80211_ampduparam;
5403static int hf_ieee80211_ampduparam_vs;
5404static int hf_ieee80211_ampduparam_mpdu;
5405static int hf_ieee80211_ampduparam_mpdu_start_spacing;
5406static int hf_ieee80211_ampduparam_reserved;
5407
5408static int hf_ieee80211_beacon_sequence;
5409static int hf_ieee80211_pentapartial_timestamp;
5410static int hf_ieee80211_tack_next_twt_info;
5411static int hf_ieee80211_tack_next_twt;
5412static int hf_ieee80211_tack_flow_identifier;
5413
5414static int hf_ieee80211_ff_s1g_action;
5415static int hf_ieee80211_ff_prot_s1g_action;
5416static int hf_ieee80211_ff_s1g_timestamp;
5417static int hf_ieee80211_ff_s1g_change_sequence;
5418static int hf_ieee80211_ff_s1g_next_tbtt;
5419static int hf_ieee80211_ff_s1g_compressed_ssid;
5420static int hf_ieee80211_ff_s1g_access_network_options;
5421
5422static int hf_ieee80211_s1g_sync_control;
5423static int hf_ieee80211_s1g_sync_control_uplink_sync_request;
5424static int hf_ieee80211_s1g_sync_control_time_slot_protection_request;
5425static int hf_ieee80211_s1g_sync_control_reserved;
5426
5427static int hf_ieee80211_s1g_sector_id_index;
5428static int hf_ieee80211_s1g_sector_id_preferred_sector_id;
5429static int hf_ieee80211_s1g_sector_id_snr;
5430static int hf_ieee80211_s1g_sector_id_receive_sector_bitmap;
5431
5432static int hf_ieee80211_s1g_twt_information_control;
5433static int hf_ieee80211_s1g_twt_flow_identifier;
5434static int hf_ieee80211_s1g_twt_response_required;
5435static int hf_ieee80211_s1g_twt_next_twt_request;
5436static int hf_ieee80211_s1g_twt_next_twt_subfield_size;
5437static int hf_ieee80211_s1g_twt_reserved;
5438static int hf_ieee80211_s1g_twt_next_twt_32;
5439static int hf_ieee80211_s1g_twt_next_twt_48;
5440static int hf_ieee80211_s1g_twt_next_twt_64;
5441
5442static int hf_ieee80211_s1g_update_edca_info;
5443static int hf_ieee80211_s1g_update_edca_override;
5444static int hf_ieee80211_s1g_update_edca_ps_poll_aci;
5445static int hf_ieee80211_s1g_update_edca_raw_aci;
5446static int hf_ieee80211_s1g_update_edca_sta_type;
5447static int hf_ieee80211_s1g_update_edca_reserved;
5448
5449static int hf_ieee80211_s1g_cap_byte1;
5450static int hf_ieee80211_s1g_cap_byte2;
5451static int hf_ieee80211_s1g_cap_byte3;
5452static int hf_ieee80211_s1g_cap_byte4;
5453static int hf_ieee80211_s1g_cap_byte5;
5454static int hf_ieee80211_s1g_cap_byte6;
5455static int hf_ieee80211_s1g_cap_byte7;
5456static int hf_ieee80211_s1g_cap_byte8;
5457static int hf_ieee80211_s1g_cap_byte9;
5458static int hf_ieee80211_s1g_cap_byte10;
5459static int hf_ieee80211_s1g_cap_s1g_long_support;
5460static int hf_ieee80211_s1g_cap_short_gi_for_1_mhz;
5461static int hf_ieee80211_s1g_cap_short_gi_for_2_mhz;
5462static int hf_ieee80211_s1g_cap_short_gi_for_4_mhz;
5463static int hf_ieee80211_s1g_cap_short_gi_for_8_mhz;
5464static int hf_ieee80211_s1g_cap_short_gi_for_16_mhz;
5465static int hf_ieee80211_s1g_cap_supported_channel_width;
5466static int hf_ieee80211_s1g_cap_rx_ldpc;
5467static int hf_ieee80211_s1g_cap_tx_stbc;
5468static int hf_ieee80211_s1g_cap_rx_stbc;
5469static int hf_ieee80211_s1g_cap_su_beamformer_capable;
5470static int hf_ieee80211_s1g_cap_su_beamformee_capable;
5471static int hf_ieee80211_s1g_cap_beamformee_sts_capability;
5472static int hf_ieee80211_s1g_cap_number_sounding_dimensions;
5473static int hf_ieee80211_s1g_cap_mu_beamformer_capable;
5474static int hf_ieee80211_s1g_cap_mu_beamformee_capable;
5475static int hf_ieee80211_s1g_cap_htc_vht_capable;
5476static int hf_ieee80211_s1g_cap_travelling_pilot_support;
5477static int hf_ieee80211_s1g_cap_rd_responder;
5478static int hf_ieee80211_s1g_cap_ht_delayed_block_ack;
5479static int hf_ieee80211_s1g_cap_maximum_mpdu_length;
5480static int hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp;
5481static int hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing;
5482static int hf_ieee80211_s1g_cap_uplink_sync_capable;
5483static int hf_ieee80211_s1g_cap_dynamic_aid;
5484static int hf_ieee80211_s1g_cap_bat_support;
5485static int hf_ieee80211_s1g_cap_tim_ade_support;
5486static int hf_ieee80211_s1g_cap_non_tim_support;
5487static int hf_ieee80211_s1g_cap_group_aid_support;
5488static int hf_ieee80211_s1g_cap_sta_type_support;
5489static int hf_ieee80211_s1g_cap_centralized_authentication_control;
5490static int hf_ieee80211_s1g_cap_distributed_authentication_control;
5491static int hf_ieee80211_s1g_cap_a_msdu_support;
5492static int hf_ieee80211_s1g_cap_a_mpdu_support;
5493static int hf_ieee80211_s1g_cap_asymmetic_block_ack_support;
5494static int hf_ieee80211_s1g_cap_flow_control_support;
5495static int hf_ieee80211_s1g_cap_sectorized_beam_capable;
5496static int hf_ieee80211_s1g_cap_obss_mitigation_support;
5497static int hf_ieee80211_s1g_cap_fragment_ba_support;
5498static int hf_ieee80211_s1g_cap_ndp_ps_poll_supported;
5499static int hf_ieee80211_s1g_cap_raw_operation_support;
5500static int hf_ieee80211_s1g_cap_page_slicing_support;
5501static int hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support;
5502static int hf_ieee80211_s1g_cap_vht_link_adaptation_capable;
5503static int hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response;
5504static int hf_ieee80211_s1g_cap_duplicate_1_mhz_support;
5505static int hf_ieee80211_s1g_cap_mcs_negotiation_support;
5506static int hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support;
5507static int hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support;
5508static int hf_ieee80211_s1g_cap_unsolicited_dynamic_aid;
5509static int hf_ieee80211_s1g_cap_sector_training_operation_supported;
5510static int hf_ieee80211_s1g_cap_temporary_ps_mode_switch;
5511static int hf_ieee80211_s1g_cap_twt_grouping_support;
5512static int hf_ieee80211_s1g_cap_bdt_capable;
5513static int hf_ieee80211_s1g_cap_color;
5514static int hf_ieee80211_s1g_cap_twt_requester_support;
5515static int hf_ieee80211_s1g_cap_twt_responder_support;
5516static int hf_ieee80211_s1g_cap_pv1_frame_support;
5517static int hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable;
5518static int hf_ieee80211_s1g_cap_reserved;
5519static int hf_ieee80211_s1g_mcs_and_nss_set;
5520static int hf_ieee80211_s1g_rx_s1g_mcs_map;
5521static int hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate;
5522static int hf_ieee80211_s1g_tx_s1g_mcs_map;
5523static int hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate;
5524static int hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz;
5525static int hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz;
5526static int hf_ieee80211_s1g_mcs_and_nss_reserved;
5527static int hf_ieee80211_s1g_subchannel_selective_transmission;
5528static int hf_ieee80211_s1g_sst_sounding_option;
5529static int hf_ieee80211_s1g_channel_activity_bitmap;
5530static int hf_ieee80211_s1g_ul_activity;
5531static int hf_ieee80211_s1g_dl_activity;
5532static int hf_ieee80211_s1g_max_trans_width;
5533static int hf_ieee80211_s1g_activity_start_time;
5534static int hf_ieee80211_s1g_sst_sounding_option1;
5535static int hf_ieee80211_s1g_channel_activity_bitmap1;
5536static int hf_ieee80211_s1g_sounding_start_time_present;
5537static int hf_ieee80211_s1g_channel_activity_reserved;
5538static int hf_ieee80211_s1g_max_trans_width1;
5539static int hf_ieee80211_s1g_sounding_start_time;
5540static int hf_ieee80211_s1g_open_loop_link_margin;
5541static int hf_ieee80211_s1g_raw_control;
5542static int hf_ieee80211_s1g_raw_type;
5543static int hf_ieee80211_s1g_raw_type_options;
5544static int hf_ieee80211_s1g_raw_start_time_indication;
5545static int hf_ieee80211_s1g_raw_raw_group_indication;
5546static int hf_ieee80211_s1g_raw_channel_indication_preference;
5547static int hf_ieee80211_s1g_raw_periodic_raw_indication;
5548static int hf_ieee80211_s1g_raw_slot_def;
5549static int hf_ieee80211_s1g_slot_def_format_indication;
5550static int hf_ieee80211_s1g_slot_def_cross_slot_boundary;
5551static int hf_ieee80211_s1g_slot_def_slot_duration_count8;
5552static int hf_ieee80211_s1g_slot_def_num_slots6;
5553static int hf_ieee80211_s1g_slot_def_slot_duration_count11;
5554static int hf_ieee80211_s1g_slot_def_num_slots3;
5555static int hf_ieee80211_s1g_raw_start_time;
5556static int hf_ieee80211_s1g_raw_group_subfield;
5557static int hf_ieee80211_s1g_raw_group_page_index;
5558static int hf_ieee80211_s1g_raw_group_start_aid;
5559static int hf_ieee80211_s1g_raw_group_end_aid;
5560static int hf_ieee80211_s1g_raw_channel_indication;
5561static int hf_ieee80211_s1g_raw_ci_channel_activity_bitmap;
5562static int hf_ieee80211_s1g_raw_ci_max_trans_width;
5563static int hf_ieee80211_s1g_raw_ci_ul_activity;
5564static int hf_ieee80211_s1g_raw_ci_dl_activity;
5565static int hf_ieee80211_s1g_raw_ci_reserved;
5566static int hf_ieee80211_s1g_raw_praw_periodicity;
5567static int hf_ieee80211_s1g_raw_praw_validity;
5568static int hf_ieee80211_s1g_raw_praw_start_offset;
5569static int hf_ieee80211_s1g_page_slice_page_period;
5570static int hf_ieee80211_s1g_page_slice_control;
5571static int hf_ieee80211_s1g_page_slice_page_index;
5572static int hf_ieee80211_s1g_page_slice_page_slice_length;
5573static int hf_ieee80211_s1g_page_slice_page_slice_count;
5574static int hf_ieee80211_s1g_page_slice_block_offset;
5575static int hf_ieee80211_s1g_page_slice_tim_offset;
5576static int hf_ieee80211_s1g_page_slice_reserved;
5577static int hf_ieee80211_s1g_page_slice_page_bitmap;
5578static int hf_ieee80211_s1g_aid_request_mode;
5579static int hf_ieee80211_s1g_aid_request_interval_present;
5580static int hf_ieee80211_s1g_aid_request_per_sta_address_present;
5581static int hf_ieee80211_s1g_aid_request_service_characteristic_present;
5582static int hf_ieee80211_s1g_aid_request_non_tim_mode_switch;
5583static int hf_ieee80211_s1g_aid_request_tim_mode_switch;
5584static int hf_ieee80211_s1g_aid_request_group_address_present;
5585static int hf_ieee80211_s1g_aid_request_reserved;
5586static int hf_ieee80211_s1g_aid_request_interval;
5587static int hf_ieee80211_s1g_aid_request_characteristic_sensor;
5588static int hf_ieee80211_s1g_aid_request_characteristic_offload;
5589static int hf_ieee80211_s1g_aid_request_characteristic_official_service;
5590static int hf_ieee80211_s1g_aid_request_characteristic_reserved;
5591static int hf_ieee80211_s1g_aid_req_peer_sta_addr;
5592static int hf_ieee80211_s1g_aid_request_characteristic;
5593static int hf_ieee80211_s1g_aid_req_group_addr;
5594static int hf_ieee80211_s1g_aid_rsp_aid_group_aid;
5595static int hf_ieee80211_s1g_aid_rsp_aid_switch_count;
5596static int hf_ieee80211_s1g_aid_rsp_aid_response_interval;
5597static int hf_ieee80211_s1g_sector_op_control_16b;
5598static int hf_ieee80211_s1g_sector_op_sectorization_type_b16;
5599static int hf_ieee80211_s1g_sector_op_periodic_training_indicator;
5600static int hf_ieee80211_s1g_sector_op_training_period;
5601static int hf_ieee80211_s1g_sector_op_remaining_beacon_interval;
5602static int hf_ieee80211_s1g_sector_op_reserved_b16;
5603static int hf_ieee80211_s1g_sector_op_control;
5604static int hf_ieee80211_s1g_sector_op_sectorization_type;
5605static int hf_ieee80211_s1g_sector_op_period;
5606static int hf_ieee80211_s1g_sector_op_omni;
5607static int hf_ieee80211_s1g_sector_op_group_info;
5608static int hf_ieee80211_s1g_short_beacon_interval;
5609static int hf_ieee80211_s1g_change_sequence;
5610static int hf_ieee80211_s1g_auth_control_control;
5611static int hf_ieee80211_s1g_auth_control_deferral;
5612static int hf_ieee80211_s1g_auth_control_reserved;
5613static int hf_ieee80211_s1g_auth_control_thresh;
5614static int hf_ieee80211_s1g_auth_control_thresh_tus;
5615static int hf_ieee80211_s1g_auth_slot_duration;
5616static int hf_ieee80211_s1g_auth_max_trans_int;
5617static int hf_ieee80211_s1g_auth_min_trans_int;
5618static int hf_ieee80211_s1g_tsf_timer_accuracy;
5619static int hf_ieee80211_s1g_relay_control;
5620static int hf_ieee80211_s1g_relay_control_rootap_bssid;
5621static int hf_ieee80211_s1g_relay_function_activation_mode;
5622static int hf_ieee80211_s1g_relay_function_direction;
5623static int hf_ieee80211_s1g_relay_function_enable_relay_function;
5624static int hf_ieee80211_s1g_relay_function_stas_present_indic;
5625static int hf_ieee80211_s1g_relay_function_reserved;
5626static int hf_ieee80211_s1g_number_of_stas;
5627static int hf_ieee80211_s1g_initiator_mac_address;
5628static int hf_ieee80211_s1g_address_count;
5629static int hf_ieee80211_s1g_reachable_add_remove;
5630static int hf_ieee80211_s1g_reachable_relay_capable;
5631static int hf_ieee80211_s1g_reachable_reserved;
5632static int hf_ieee80211_s1g_reachable_mac_address;
5633static int hf_ieee80211_s1g_relay_discovery_control;
5634static int hf_ieee80211_s1g_min_data_rate_included;
5635static int hf_ieee80211_s1g_mean_data_rate_included;
5636static int hf_ieee80211_s1g_max_data_rate_included;
5637static int hf_ieee80211_s1g_delay_and_min_phy_rate;
5638static int hf_ieee80211_s1g_information_not_available;
5639static int hf_ieee80211_s1g_relay_discovery_reserved;
5640static int hf_ieee80211_s1g_relay_control_ul_min;
5641static int hf_ieee80211_s1g_relay_control_ul_mean;
5642static int hf_ieee80211_s1g_relay_control_ul_max;
5643static int hf_ieee80211_s1g_relay_control_dl_min;
5644static int hf_ieee80211_s1g_relay_control_dl_mean;
5645static int hf_ieee80211_s1g_relay_control_dl_max;
5646static int hf_ieee80211_s1g_relay_hierarchy_identifier;
5647static int hf_ieee80211_s1g_relay_no_more_relay_flag;
5648static int hf_ieee80211_s1g_aid_entry_mac_addr;
5649static int hf_ieee80211_s1g_aid_entry_assoc_id;
5650static int hf_ieee80211_s1g_beacon_compatibility_info;
5651static int hf_ieee80211_s1g_beacon_interval;
5652static int hf_ieee80211_s1g_tsf_completion;
5653static int hf_ieee80211_s1g_channel_width;
5654static int hf_ieee80211_s1g_primary_channel_width;
5655static int hf_ieee80211_s1g_bss_operating_channel_width;
5656static int hf_ieee80211_s1g_primary_channel_location;
5657static int hf_ieee80211_s1g_reserved_b6;
5658static int hf_ieee80211_s1g_mcs10_use;
5659static int hf_ieee80211_s1g_operating_class;
5660static int hf_ieee80211_s1g_primary_channel_number;
5661static int hf_ieee80211_s1g_channel_center_frequency;
5662static int hf_ieee80211_s1g_basic_mcs_and_nss_set;
5663static int hf_ieee80211_s1g_sst_enabled_channel_bitmap;
5664static int hf_ieee80211_s1g_sst_primary_channel_offset;
5665static int hf_ieee80211_s1g_sst_channel_unit;
5666static int hf_ieee80211_s1g_sst_reserved;
5667static int hf_ieee80211_s1g_max_away_duration;
5668static int hf_ieee80211_s1g_tim_bmapctrl;
5669static int hf_ieee80211_s1g_tim_bmapctl_traffic_indicator;
5670static int hf_ieee80211_s1g_tim_page_slice_number;
5671static int hf_ieee80211_s1g_tim_page_index;
5672static int hf_ieee80211_s1g_pvb_block_control_byte;
5673static int hf_ieee80211_s1g_pvb_encoding_mode;
5674static int hf_ieee80211_s1g_pvb_inverse_bitmap;
5675static int hf_ieee80211_s1g_pvb_block_offset;
5676static int hf_ieee80211_s1g_block_bitmap;
5677static int hf_ieee80211_s1g_block_bitmap_sta_aid13;
5678static int hf_ieee80211_s1g_block_bitmap_single_aid;
5679static int hf_ieee80211_s1g_block_bitmap_olb_length;
5680static int hf_ieee80211_s1g_block_bitmap_ade;
5681static int hf_ieee80211_s1g_block_bitmap_ewl;
5682static int hf_ieee80211_s1g_block_bitmap_len;
5683static int hf_ieee80211_s1g_block_bitmap_ade_bytes;
5684static int hf_ieee80211_s1g_probe_response_group_bitmap;
5685static int hf_ieee80211_s1g_probe_resp_subfield_0;
5686static int hf_ieee80211_pv1_probe_response_req_full_ssid;
5687static int hf_ieee80211_pv1_probe_response_req_next_tbtt;
5688static int hf_ieee80211_pv1_probe_response_req_access_network_option;
5689static int hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility;
5690static int hf_ieee80211_pv1_probe_response_req_supported_rates;
5691static int hf_ieee80211_pv1_probe_response_req_s1g_capability;
5692static int hf_ieee80211_pv1_probe_response_req_s1g_operation;
5693static int hf_ieee80211_pv1_probe_response_req_rsn;
5694static int hf_ieee80211_s1g_el_op_max_awake_duration;
5695static int hf_ieee80211_s1g_el_op_recovery_time_duration;
5696static int hf_ieee80211_s1g_sectorized_group_id_list;
5697static int hf_ieee80211_s1g_header_comp_control;
5698static int hf_ieee80211_s1g_header_comp_req_resp;
5699static int hf_ieee80211_s1g_header_comp_store_a3;
5700static int hf_ieee80211_s1g_header_comp_store_a4;
5701static int hf_ieee80211_s1g_header_comp_ccmp_update_present;
5702static int hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported;
5703static int hf_ieee80211_s1g_header_comp_reserved;
5704static int hf_ieee80211_s1g_header_comp_a3;
5705static int hf_ieee80211_s1g_header_comp_a4;
5706static int hf_ieee80211_s1g_header_comp_ccmp_update;
5707
5708static int hf_ieee80211_mcsset;
5709static int hf_ieee80211_mcsset_vs;
5710static int hf_ieee80211_mcsset_rx_bitmask;
5711static int hf_ieee80211_mcsset_rx_bitmask_0to7;
5712static int hf_ieee80211_mcsset_rx_bitmask_8to15;
5713static int hf_ieee80211_mcsset_rx_bitmask_16to23;
5714static int hf_ieee80211_mcsset_rx_bitmask_24to31;
5715static int hf_ieee80211_mcsset_rx_bitmask_32;
5716static int hf_ieee80211_mcsset_rx_bitmask_33to38;
5717static int hf_ieee80211_mcsset_rx_bitmask_39to52;
5718static int hf_ieee80211_mcsset_rx_bitmask_53to76;
5719static int hf_ieee80211_mcsset_highest_data_rate;
5720static int hf_ieee80211_mcsset_tx_mcs_set_defined;
5721static int hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal;
5722static int hf_ieee80211_mcsset_tx_max_spatial_streams;
5723static int hf_ieee80211_mcsset_tx_unequal_modulation;
5724
5725static int hf_ieee80211_htex_cap;
5726static int hf_ieee80211_htex_vs_cap;
5727static int hf_ieee80211_htex_reserved_b0_b7;
5728static int hf_ieee80211_htex_mcs;
5729static int hf_ieee80211_htex_htc_support;
5730static int hf_ieee80211_htex_rd_responder;
5731static int hf_ieee80211_htex_reserved_b12_b15;
5732
5733static int hf_ieee80211_txbf;
5734static int hf_ieee80211_txbf_vs;
5735static int hf_ieee80211_txbf_cap;
5736static int hf_ieee80211_txbf_rcv_ssc;
5737static int hf_ieee80211_txbf_tx_ssc;
5738static int hf_ieee80211_txbf_rcv_ndp;
5739static int hf_ieee80211_txbf_tx_ndp;
5740static int hf_ieee80211_txbf_impl_txbf;
5741static int hf_ieee80211_txbf_calib;
5742static int hf_ieee80211_txbf_expl_csi;
5743static int hf_ieee80211_txbf_expl_uncomp_fm;
5744static int hf_ieee80211_txbf_expl_comp_fm;
5745static int hf_ieee80211_txbf_expl_bf_csi;
5746static int hf_ieee80211_txbf_expl_uncomp_fm_feed;
5747static int hf_ieee80211_txbf_expl_comp_fm_feed;
5748static int hf_ieee80211_txbf_csi_num_bf_ant;
5749static int hf_ieee80211_txbf_min_group;
5750static int hf_ieee80211_txbf_uncomp_sm_bf_ant;
5751static int hf_ieee80211_txbf_comp_sm_bf_ant;
5752static int hf_ieee80211_txbf_csi_max_rows_bf;
5753static int hf_ieee80211_txbf_chan_est;
5754static int hf_ieee80211_txbf_resrv;
5755
5756/*** Begin: 802.11n - HT Operation IE ***/
5757static int hf_ieee80211_ht_operation_primary_channel;
5758
5759static int hf_ieee80211_ht_operation_info_delimiter1;
5760static int hf_ieee80211_ht_operation_info_secondary_channel_offset;
5761static int hf_ieee80211_ht_operation_info_sta_channel_width;
5762static int hf_ieee80211_ht_operation_info_rifs_mode;
5763static int hf_ieee80211_ht_operation_info_reserved_b4_b7;
5764
5765static int hf_ieee80211_ht_operation_info_delimiter2;
5766static int hf_ieee80211_ht_operation_info_protection;
5767static int hf_ieee80211_ht_operation_info_non_greenfield_sta_present;
5768static int hf_ieee80211_ht_operation_info_reserved_b11;
5769static int hf_ieee80211_ht_operation_info_obss_non_ht_stas_present;
5770static int hf_ieee80211_ht_operation_info_channel_center_freq_seg_2;
5771static int hf_ieee80211_ht_operation_info_reserved_b21_b23;
5772
5773static int hf_ieee80211_ht_operation_info_delimiter3;
5774static int hf_ieee80211_ht_operation_info_reserved_b24_b29;
5775static int hf_ieee80211_ht_operation_info_dual_beacon;
5776static int hf_ieee80211_ht_operation_info_dual_cts_protection;
5777static int hf_ieee80211_ht_operation_info_stbc_beacon;
5778static int hf_ieee80211_ht_operation_info_reserved_b33_b39;
5779
5780static int hf_ieee80211_ht_operation_mcsset_reserved;
5781/*** End: 802.11n - HT Operation IE ***/
5782
5783static int hf_ieee80211_tag_ap_channel_report_operating_class;
5784static int hf_ieee80211_tag_ap_channel_report_channel_list;
5785
5786static int hf_ieee80211_tag_secondary_channel_offset;
5787
5788static int hf_ieee80211_tag_bss_ap_avg_access_delay;
5789
5790static int hf_ieee80211_tag_antenna_id;
5791
5792static int hf_ieee80211_tag_rsni;
5793
5794static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask;
5795static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0;
5796static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1;
5797static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2;
5798static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3;
5799static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4;
5800static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5;
5801static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6;
5802static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7;
5803static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0;
5804static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1;
5805static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2;
5806static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3;
5807static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv;
5808static int hf_ieee80211_tag_bss_avb_adm_cap_up0;
5809static int hf_ieee80211_tag_bss_avb_adm_cap_up1;
5810static int hf_ieee80211_tag_bss_avb_adm_cap_up2;
5811static int hf_ieee80211_tag_bss_avb_adm_cap_up3;
5812static int hf_ieee80211_tag_bss_avb_adm_cap_up4;
5813static int hf_ieee80211_tag_bss_avb_adm_cap_up5;
5814static int hf_ieee80211_tag_bss_avb_adm_cap_up6;
5815static int hf_ieee80211_tag_bss_avb_adm_cap_up7;
5816static int hf_ieee80211_tag_bss_avb_adm_cap_ac0;
5817static int hf_ieee80211_tag_bss_avb_adm_cap_ac1;
5818static int hf_ieee80211_tag_bss_avb_adm_cap_ac2;
5819static int hf_ieee80211_tag_bss_avb_adm_cap_ac3;
5820
5821static int hf_ieee80211_tag_bss_avg_ac_access_delay_be;
5822static int hf_ieee80211_tag_bss_avg_ac_access_delay_bk;
5823static int hf_ieee80211_tag_bss_avg_ac_access_delay_vi;
5824static int hf_ieee80211_tag_bss_avg_ac_access_delay_vo;
5825
5826static int hf_ieee80211_tag_rm_enabled_capabilities;
5827static int hf_ieee80211_tag_rm_enabled_capabilities_b0;
5828static int hf_ieee80211_tag_rm_enabled_capabilities_b1;
5829static int hf_ieee80211_tag_rm_enabled_capabilities_b2;
5830static int hf_ieee80211_tag_rm_enabled_capabilities_b3;
5831static int hf_ieee80211_tag_rm_enabled_capabilities_b4;
5832static int hf_ieee80211_tag_rm_enabled_capabilities_b5;
5833static int hf_ieee80211_tag_rm_enabled_capabilities_b6;
5834static int hf_ieee80211_tag_rm_enabled_capabilities_b7;
5835static int hf_ieee80211_tag_rm_enabled_capabilities_b8;
5836static int hf_ieee80211_tag_rm_enabled_capabilities_b9;
5837static int hf_ieee80211_tag_rm_enabled_capabilities_b10;
5838static int hf_ieee80211_tag_rm_enabled_capabilities_b11;
5839static int hf_ieee80211_tag_rm_enabled_capabilities_b12;
5840static int hf_ieee80211_tag_rm_enabled_capabilities_b13;
5841static int hf_ieee80211_tag_rm_enabled_capabilities_b14;
5842static int hf_ieee80211_tag_rm_enabled_capabilities_b15;
5843static int hf_ieee80211_tag_rm_enabled_capabilities_b16;
5844static int hf_ieee80211_tag_rm_enabled_capabilities_b17;
5845static int hf_ieee80211_tag_rm_enabled_capabilities_b18to20;
5846static int hf_ieee80211_tag_rm_enabled_capabilities_b21to23;
5847static int hf_ieee80211_tag_rm_enabled_capabilities_b24to26;
5848static int hf_ieee80211_tag_rm_enabled_capabilities_b27;
5849static int hf_ieee80211_tag_rm_enabled_capabilities_b28;
5850static int hf_ieee80211_tag_rm_enabled_capabilities_b29;
5851static int hf_ieee80211_tag_rm_enabled_capabilities_b30;
5852static int hf_ieee80211_tag_rm_enabled_capabilities_b31;
5853static int hf_ieee80211_tag_rm_enabled_capabilities_b32;
5854static int hf_ieee80211_tag_rm_enabled_capabilities_b33;
5855static int hf_ieee80211_tag_rm_enabled_capabilities_b34;
5856static int hf_ieee80211_tag_rm_enabled_capabilities_b35;
5857static int hf_ieee80211_tag_rm_enabled_capabilities_o5;
5858
5859static int hf_ieee80211_tag_rcpi;
5860static int hf_ieee80211_tag_multiple_bssid;
5861static int hf_ieee80211_tag_multiple_bssid_subelem_id;
5862static int hf_ieee80211_tag_multiple_bssid_subelem_len;
5863static int hf_ieee80211_tag_multiple_bssid_subelem_reserved;
5864static int hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile;
5865
5866static int hf_ieee80211_tag_20_40_bc;
5867static int hf_ieee80211_tag_20_40_bc_information_request;
5868static int hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant;
5869static int hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request;
5870static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request;
5871static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant;
5872static int hf_ieee80211_tag_20_40_bc_reserved;
5873
5874static int hf_ieee80211_tag_intolerant_operating_class;
5875static int hf_ieee80211_tag_intolerant_channel_list;
5876static int hf_ieee80211_tag_intolerant_channel;
5877
5878static int hf_ieee80211_tag_power_constraint_local;
5879
5880static int hf_ieee80211_tag_power_capability_min;
5881static int hf_ieee80211_tag_power_capability_max;
5882
5883static int hf_ieee80211_tag_tpc_report_trsmt_pow;
5884static int hf_ieee80211_tag_tpc_report_link_mrg;
5885static int hf_ieee80211_tag_tpc_report_reserved;
5886
5887static int hf_ieee80211_tag_supported_channels;
5888static int hf_ieee80211_tag_supported_channels_first;
5889static int hf_ieee80211_tag_supported_channels_range;
5890
5891static int hf_ieee80211_csa_channel_switch_mode;
5892static int hf_ieee80211_csa_new_channel_number;
5893static int hf_ieee80211_csa_channel_switch_count;
5894
5895static int hf_ieee80211_tag_measure_request_token;
5896static int hf_ieee80211_tag_measure_request_mode;
5897static int hf_ieee80211_tag_measure_request_mode_parallel;
5898static int hf_ieee80211_tag_measure_request_mode_enable;
5899static int hf_ieee80211_tag_measure_request_mode_request;
5900static int hf_ieee80211_tag_measure_request_mode_report;
5901static int hf_ieee80211_tag_measure_request_mode_duration_mandatory;
5902static int hf_ieee80211_tag_measure_request_mode_reserved;
5903static int hf_ieee80211_tag_measure_request_type;
5904
5905static int hf_ieee80211_tag_measure_request_channel_number;
5906static int hf_ieee80211_tag_measure_request_start_time;
5907static int hf_ieee80211_tag_measure_request_duration;
5908
5909static int hf_ieee80211_tag_measure_request_operating_class;
5910static int hf_ieee80211_tag_measure_request_randomization_interval;
5911
5912static int hf_ieee80211_tag_measure_report_measurement_token;
5913static int hf_ieee80211_tag_measure_report_mode;
5914static int hf_ieee80211_tag_measure_report_mode_late;
5915static int hf_ieee80211_tag_measure_report_mode_incapable;
5916static int hf_ieee80211_tag_measure_report_mode_refused;
5917static int hf_ieee80211_tag_measure_report_mode_reserved;
5918static int hf_ieee80211_tag_measure_report_type;
5919static int hf_ieee80211_tag_measure_report_channel_number;
5920static int hf_ieee80211_tag_measure_report_start_time;
5921static int hf_ieee80211_tag_measure_report_duration;
5922
5923static int hf_ieee80211_tag_measure_basic_map_field;
5924static int hf_ieee80211_tag_measure_map_field_bss;
5925static int hf_ieee80211_tag_measure_map_field_ofdm;
5926static int hf_ieee80211_tag_measure_map_field_unident_signal;
5927static int hf_ieee80211_tag_measure_map_field_radar;
5928static int hf_ieee80211_tag_measure_map_field_unmeasured;
5929static int hf_ieee80211_tag_measure_map_field_reserved;
5930
5931static int hf_ieee80211_tag_measure_cca_busy_fraction;
5932
5933static int hf_ieee80211_tag_measure_rpi_histogram_report;
5934static int hf_ieee80211_tag_measure_rpi_histogram_report_0;
5935static int hf_ieee80211_tag_measure_rpi_histogram_report_1;
5936static int hf_ieee80211_tag_measure_rpi_histogram_report_2;
5937static int hf_ieee80211_tag_measure_rpi_histogram_report_3;
5938static int hf_ieee80211_tag_measure_rpi_histogram_report_4;
5939static int hf_ieee80211_tag_measure_rpi_histogram_report_5;
5940static int hf_ieee80211_tag_measure_rpi_histogram_report_6;
5941static int hf_ieee80211_tag_measure_rpi_histogram_report_7;
5942
5943static int hf_ieee80211_tag_measure_report_operating_class;
5944static int hf_ieee80211_tag_measure_report_channel_load;
5945static int hf_ieee80211_tag_measure_report_frame_info;
5946static int hf_ieee80211_tag_measure_report_frame_info_phy_type;
5947static int hf_ieee80211_tag_measure_report_frame_info_frame_type;
5948static int hf_ieee80211_tag_measure_report_rcpi;
5949static int hf_ieee80211_tag_measure_report_rsni;
5950static int hf_ieee80211_tag_measure_report_bssid;
5951static int hf_ieee80211_tag_measure_report_ant_id;
5952static int hf_ieee80211_tag_measure_report_anpi;
5953static int hf_ieee80211_tag_measure_report_ipi_density_0;
5954static int hf_ieee80211_tag_measure_report_ipi_density_1;
5955static int hf_ieee80211_tag_measure_report_ipi_density_2;
5956static int hf_ieee80211_tag_measure_report_ipi_density_3;
5957static int hf_ieee80211_tag_measure_report_ipi_density_4;
5958static int hf_ieee80211_tag_measure_report_ipi_density_5;
5959static int hf_ieee80211_tag_measure_report_ipi_density_6;
5960static int hf_ieee80211_tag_measure_report_ipi_density_7;
5961static int hf_ieee80211_tag_measure_report_ipi_density_8;
5962static int hf_ieee80211_tag_measure_report_ipi_density_9;
5963static int hf_ieee80211_tag_measure_report_ipi_density_10;
5964static int hf_ieee80211_tag_measure_report_parent_tsf;
5965
5966static int hf_ieee80211_tag_measure_report_subelement_length;
5967static int hf_ieee80211_tag_measure_report_beacon_sub_id;
5968static int hf_ieee80211_tag_measure_report_beacon_unknown;
5969static int hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication;
5970static int hf_ieee80211_tag_measure_reported_frame_frag_id;
5971static int hf_ieee80211_tag_measure_reported_frame_frag_rep_id;
5972static int hf_ieee80211_tag_measure_reported_frame_frag_number;
5973static int hf_ieee80211_tag_measure_reported_frame_frag_more;
5974
5975static int hf_ieee80211_tag_measure_report_lci_sub_id;
5976static int hf_ieee80211_tag_measure_report_lci_lci;
5977static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info;
5978static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move;
5979static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number;
5980static int hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor;
5981static int hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty;
5982static int hf_ieee80211_tag_measure_report_lci_urp;
5983static int hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed;
5984static int hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present;
5985static int hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy;
5986static int hf_ieee80211_tag_measure_report_lci_urp_reserved;
5987static int hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative;
5988static int hf_ieee80211_tag_measure_report_lci_unknown;
5989
5990static int hf_ieee80211_tag_measure_report_civic_location_type;
5991static int hf_ieee80211_tag_measure_report_civic_sub_id;
5992static int hf_ieee80211_tag_measure_report_location_civic_country;
5993static int hf_ieee80211_tag_measure_report_location_civic_type;
5994static int hf_ieee80211_tag_measure_report_location_civic_length;
5995static int hf_ieee80211_tag_measure_report_location_civic;
5996
5997static int hf_ieee80211_tag_measure_report_unknown;
5998
5999static int hf_ieee80211_tag_quiet_count;
6000static int hf_ieee80211_tag_quiet_period;
6001static int hf_ieee80211_tag_quiet_duration;
6002static int hf_ieee80211_tag_quiet_offset;
6003
6004static int hf_ieee80211_tag_dfs_owner;
6005static int hf_ieee80211_tag_dfs_recovery_interval;
6006static int hf_ieee80211_tag_dfs_channel_map;
6007static int hf_ieee80211_tag_dfs_channel_number;
6008static int hf_ieee80211_tag_dfs_map;
6009
6010static int hf_ieee80211_tag_erp_info;
6011static int hf_ieee80211_tag_erp_info_erp_present;
6012static int hf_ieee80211_tag_erp_info_use_protection;
6013static int hf_ieee80211_tag_erp_info_barker_preamble_mode;
6014static int hf_ieee80211_tag_erp_info_reserved;
6015
6016static int hf_ieee80211_tag_extended_capabilities;
6017static int hf_ieee80211_tag_extended_capabilities_b0;
6018static int hf_ieee80211_tag_extended_capabilities_b1;
6019static int hf_ieee80211_tag_extended_capabilities_b2;
6020static int hf_ieee80211_tag_extended_capabilities_b3;
6021static int hf_ieee80211_tag_extended_capabilities_b4;
6022static int hf_ieee80211_tag_extended_capabilities_b5;
6023static int hf_ieee80211_tag_extended_capabilities_b6;
6024static int hf_ieee80211_tag_extended_capabilities_b7;
6025static int hf_ieee80211_tag_extended_capabilities_b8;
6026static int hf_ieee80211_tag_extended_capabilities_b9;
6027static int hf_ieee80211_tag_extended_capabilities_b10;
6028static int hf_ieee80211_tag_extended_capabilities_b11;
6029static int hf_ieee80211_tag_extended_capabilities_b12;
6030static int hf_ieee80211_tag_extended_capabilities_b13;
6031static int hf_ieee80211_tag_extended_capabilities_b14;
6032static int hf_ieee80211_tag_extended_capabilities_b15;
6033static int hf_ieee80211_tag_extended_capabilities_b16;
6034static int hf_ieee80211_tag_extended_capabilities_b17;
6035static int hf_ieee80211_tag_extended_capabilities_b18;
6036static int hf_ieee80211_tag_extended_capabilities_b19;
6037static int hf_ieee80211_tag_extended_capabilities_b20;
6038static int hf_ieee80211_tag_extended_capabilities_b21;
6039static int hf_ieee80211_tag_extended_capabilities_b22;
6040static int hf_ieee80211_tag_extended_capabilities_b23;
6041static int hf_ieee80211_tag_extended_capabilities_b24;
6042static int hf_ieee80211_tag_extended_capabilities_b25;
6043static int hf_ieee80211_tag_extended_capabilities_b26;
6044static int hf_ieee80211_tag_extended_capabilities_b27;
6045static int hf_ieee80211_tag_extended_capabilities_b28;
6046static int hf_ieee80211_tag_extended_capabilities_b29;
6047static int hf_ieee80211_tag_extended_capabilities_b30;
6048static int hf_ieee80211_tag_extended_capabilities_b31;
6049static int hf_ieee80211_tag_extended_capabilities_b32;
6050static int hf_ieee80211_tag_extended_capabilities_b33;
6051static int hf_ieee80211_tag_extended_capabilities_b34;
6052static int hf_ieee80211_tag_extended_capabilities_b35;
6053static int hf_ieee80211_tag_extended_capabilities_b36;
6054static int hf_ieee80211_tag_extended_capabilities_b37;
6055static int hf_ieee80211_tag_extended_capabilities_b38;
6056static int hf_ieee80211_tag_extended_capabilities_b39;
6057static int hf_ieee80211_tag_extended_capabilities_b40;
6058static int hf_ieee80211_tag_extended_capabilities_serv_int_granularity;
6059static int hf_ieee80211_tag_extended_capabilities_b44;
6060static int hf_ieee80211_tag_extended_capabilities_b45;
6061static int hf_ieee80211_tag_extended_capabilities_b46;
6062static int hf_ieee80211_tag_extended_capabilities_b47;
6063static int hf_ieee80211_tag_extended_capabilities_b48;
6064static int hf_ieee80211_tag_extended_capabilities_b49;
6065static int hf_ieee80211_tag_extended_capabilities_b50;
6066static int hf_ieee80211_tag_extended_capabilities_b51;
6067static int hf_ieee80211_tag_extended_capabilities_b52;
6068static int hf_ieee80211_tag_extended_capabilities_b53;
6069static int hf_ieee80211_tag_extended_capabilities_b54;
6070static int hf_ieee80211_tag_extended_capabilities_b55;
6071static int hf_ieee80211_tag_extended_capabilities_b56;
6072static int hf_ieee80211_tag_extended_capabilities_b57;
6073static int hf_ieee80211_tag_extended_capabilities_b58;
6074static int hf_ieee80211_tag_extended_capabilities_b59;
6075static int hf_ieee80211_tag_extended_capabilities_b60;
6076static int hf_ieee80211_tag_extended_capabilities_b61;
6077static int hf_ieee80211_tag_extended_capabilities_b62;
6078static int hf_ieee80211_tag_extended_capabilities_b63;
6079/* Used for the two-byte ext-cap field when present */
6080static int hf_ieee80211_tag_extended_capabilities_2;
6081static int hf_ieee80211_tag_extended_capabilities_b56_2;
6082static int hf_ieee80211_tag_extended_capabilities_b57_2;
6083static int hf_ieee80211_tag_extended_capabilities_b58_2;
6084static int hf_ieee80211_tag_extended_capabilities_b59_2;
6085static int hf_ieee80211_tag_extended_capabilities_b60_2;
6086static int hf_ieee80211_tag_extended_capabilities_b61_2;
6087static int hf_ieee80211_tag_extended_capabilities_b62_2;
6088static int hf_ieee80211_tag_extended_capabilities_max_num_msdus;
6089static int hf_ieee80211_tag_extended_capabilities_b65_2;
6090static int hf_ieee80211_tag_extended_capabilities_b66_2;
6091static int hf_ieee80211_tag_extended_capabilities_b67_2;
6092static int hf_ieee80211_tag_extended_capabilities_b68_2;
6093static int hf_ieee80211_tag_extended_capabilities_b69_2;
6094static int hf_ieee80211_tag_extended_capabilities_b70_2;
6095static int hf_ieee80211_tag_extended_capabilities_b71_2;
6096
6097static int hf_ieee80211_tag_extended_capabilities_b72;
6098static int hf_ieee80211_tag_extended_capabilities_b73;
6099static int hf_ieee80211_tag_extended_capabilities_b74;
6100static int hf_ieee80211_tag_extended_capabilities_b75;
6101static int hf_ieee80211_tag_extended_capabilities_b76;
6102static int hf_ieee80211_tag_extended_capabilities_b77;
6103static int hf_ieee80211_tag_extended_capabilities_b78;
6104static int hf_ieee80211_tag_extended_capabilities_b79;
6105static int hf_ieee80211_tag_extended_capabilities_b80;
6106static int hf_ieee80211_tag_extended_capabilities_b81;
6107static int hf_ieee80211_tag_extended_capabilities_b82;
6108static int hf_ieee80211_tag_extended_capabilities_b83;
6109static int hf_ieee80211_tag_extended_capabilities_b84;
6110static int hf_ieee80211_tag_extended_capabilities_b85;
6111static int hf_ieee80211_tag_extended_capabilities_b86;
6112static int hf_ieee80211_tag_extended_capabilities_b87;
6113
6114static int hf_ieee80211_tag_extended_capabilities_b88;
6115static int hf_ieee80211_tag_extended_capabilities_b89;
6116static int hf_ieee80211_tag_extended_capabilities_b90;
6117static int hf_ieee80211_tag_extended_capabilities_b91;
6118static int hf_ieee80211_tag_extended_capabilities_b92;
6119static int hf_ieee80211_tag_extended_capabilities_b93;
6120static int hf_ieee80211_tag_extended_capabilities_b94;
6121static int hf_ieee80211_tag_extended_capabilities_b95;
6122
6123static int hf_ieee80211_tag_extended_capabilities_b96;
6124static int hf_ieee80211_tag_extended_capabilities_b97;
6125static int hf_ieee80211_tag_extended_capabilities_b98;
6126static int hf_ieee80211_tag_extended_capabilities_b99;
6127static int hf_ieee80211_tag_extended_capabilities_b100;
6128static int hf_ieee80211_tag_extended_capabilities_b101;
6129static int hf_ieee80211_tag_extended_capabilities_b102;
6130static int hf_ieee80211_tag_extended_capabilities_b103;
6131static int hf_ieee80211_tag_extended_capabilities_b104;
6132static int hf_ieee80211_tag_extended_capabilities_b105;
6133static int hf_ieee80211_tag_extended_capabilities_reserved2;
6134
6135static int hf_ieee80211_tag_cisco_ccx1_unknown;
6136static int hf_ieee80211_tag_cisco_ccx1_name;
6137static int hf_ieee80211_tag_cisco_ccx1_clients;
6138static int hf_ieee80211_tag_cisco_ccx1_unknown2;
6139
6140static int hf_ieee80211_vs_cisco_ap_name_v2;
6141
6142static int hf_ieee80211_vht_cap;
6143static int hf_ieee80211_vht_max_mpdu_length;
6144static int hf_ieee80211_vht_supported_chan_width_set;
6145static int hf_ieee80211_vht_rx_ldpc;
6146static int hf_ieee80211_vht_short_gi_for_80;
6147static int hf_ieee80211_vht_short_gi_for_160;
6148static int hf_ieee80211_vht_tx_stbc;
6149static int hf_ieee80211_vht_rx_stbc;
6150static int hf_ieee80211_vht_su_beamformer_cap;
6151static int hf_ieee80211_vht_su_beamformee_cap;
6152static int hf_ieee80211_vht_beamformer_antennas;
6153static int hf_ieee80211_vht_sounding_dimensions;
6154static int hf_ieee80211_vht_mu_beamformer_cap;
6155static int hf_ieee80211_vht_mu_beamformee_cap;
6156static int hf_ieee80211_vht_txop_ps;
6157static int hf_ieee80211_vht_var_htc_field;
6158static int hf_ieee80211_vht_max_ampdu;
6159static int hf_ieee80211_vht_link_adaptation_cap;
6160static int hf_ieee80211_vht_rx_pattern;
6161static int hf_ieee80211_vht_tx_pattern;
6162static int hf_ieee80211_vht_ext_nss_bw_support;
6163
6164static int hf_ieee80211_vht_mcsset;
6165
6166static int hf_ieee80211_vht_mcsset_rx_mcs_map;
6167static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss;
6168static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss;
6169static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss;
6170static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss;
6171static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss;
6172static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss;
6173static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss;
6174static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss;
6175
6176static int hf_ieee80211_vht_mcsset_max_nsts_total;
6177static int hf_ieee80211_vht_mcsset_rx_highest_long_gi;
6178static int hf_ieee80211_vht_mcsset_extended_nss_bw_capable;
6179static int hf_ieee80211_vht_mcsset_reserved;
6180
6181static int hf_ieee80211_vht_mcsset_tx_mcs_map;
6182static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss;
6183static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss;
6184static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss;
6185static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss;
6186static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss;
6187static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss;
6188static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss;
6189static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss;
6190
6191static int hf_ieee80211_vht_op;
6192static int hf_ieee80211_vht_op_channel_width;
6193static int hf_ieee80211_vht_op_channel_center0;
6194static int hf_ieee80211_vht_op_channel_center1;
6195
6196static int hf_ieee80211_vht_op_basic_mcs_map;
6197static int hf_ieee80211_vht_op_max_basic_mcs_for_1_ss;
6198static int hf_ieee80211_vht_op_max_basic_mcs_for_2_ss;
6199static int hf_ieee80211_vht_op_max_basic_mcs_for_3_ss;
6200static int hf_ieee80211_vht_op_max_basic_mcs_for_4_ss;
6201static int hf_ieee80211_vht_op_max_basic_mcs_for_5_ss;
6202static int hf_ieee80211_vht_op_max_basic_mcs_for_6_ss;
6203static int hf_ieee80211_vht_op_max_basic_mcs_for_7_ss;
6204static int hf_ieee80211_vht_op_max_basic_mcs_for_8_ss;
6205static int hf_ieee80211_vht_mcsset_tx_highest_long_gi;
6206
6207static int hf_ieee80211_vht_tpe_pwr_info;
6208static int hf_ieee80211_vht_tpe_pwr_info_count;
6209static int hf_ieee80211_vht_tpe_pwr_info_unit;
6210static int hf_ieee80211_vht_tpe_pwr_info_category;
6211static int hf_ieee80211_vht_tpe_pwr_constr_20;
6212static int hf_ieee80211_vht_tpe_pwr_constr_40;
6213static int hf_ieee80211_vht_tpe_pwr_constr_80;
6214static int hf_ieee80211_vht_tpe_pwr_constr_160;
6215static int hf_ieee80211_vht_tpe_pwr_constr_320;
6216static int hf_ieee80211_vht_tpe_any_bw_psd;
6217static int hf_ieee80211_vht_tpe_psd;
6218static int hf_ieee80211_vht_tpe_ext_count;
6219static int hf_ieee80211_vht_tpe_ext_reserved;
6220
6221static int hf_ieee80211_beamform_feedback_seg_retrans_bitmap;
6222
6223static int hf_ieee80211_ndp_annc_token;
6224static int hf_ieee80211_ndp_annc_variant;
6225static int hf_ieee80211_ndp_annc_token_number;
6226static int hf_ieee80211_vht_ndp_annc_sta_info_aid12;
6227static int hf_ieee80211_vht_ndp_annc_sta_info_feedback_type;
6228static int hf_ieee80211_vht_ndp_annc_sta_info_nc_index;
6229static int hf_ieee80211_vht_ndp_annc_sta_info_reserved;
6230
6231static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008;
6232static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11;
6233static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset;
6234static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts;
6235static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep;
6236static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts;
6237static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1;
6238static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation;
6239static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep;
6240static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2;
6241
6242static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043;
6243static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11;
6244static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac;
6245static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation;
6246static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved;
6247
6248static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044;
6249static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11;
6250static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf;
6251static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation;
6252static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved;
6253static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token;
6254
6255static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045;
6256static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11;
6257static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power;
6258static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi;
6259static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation;
6260static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved;
6261
6262
6263static int hf_ieee80211_ndp_eht_annc_sta_info;
6264static int hf_ieee80211_ndp_eht_annc_aid11;
6265static int hf_ieee80211_ndp_eht_annc_resolution;
6266static int hf_ieee80211_ndp_eht_annc_feedback_map;
6267static int hf_ieee80211_ndp_eht_annc_reserved1;
6268static int hf_ieee80211_ndp_eht_annc_nc_index;
6269static int hf_ieee80211_ndp_eht_annc_feedback_type;
6270static int hf_ieee80211_ndp_eht_annc_disambiguation;
6271static int hf_ieee80211_ndp_eht_annc_codebook_size;
6272static int hf_ieee80211_ndp_eht_annc_reserved2;
6273
6274static int hf_ieee80211_ff_vht_action;
6275static int hf_ieee80211_ff_vht_mimo_cntrl;
6276static int hf_ieee80211_ff_vht_mimo_cntrl_nc_index;
6277static int hf_ieee80211_ff_vht_mimo_cntrl_nr_index;
6278static int hf_ieee80211_ff_vht_mimo_cntrl_channel_width;
6279static int hf_ieee80211_ff_vht_mimo_cntrl_grouping;
6280static int hf_ieee80211_ff_vht_mimo_cntrl_codebook_info;
6281static int hf_ieee80211_ff_vht_mimo_cntrl_feedback_type;
6282static int hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg;
6283static int hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg;
6284static int hf_ieee80211_ff_vht_mimo_cntrl_reserved;
6285static int hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number;
6286
6287static int * const hf_ieee80211_ff_vht_mimo_cntrl_fields[] = {
6288 &hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
6289 &hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
6290 &hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
6291 &hf_ieee80211_ff_vht_mimo_cntrl_grouping,
6292 &hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
6293 &hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
6294 &hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
6295 &hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
6296 &hf_ieee80211_ff_vht_mimo_cntrl_reserved,
6297 &hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
6298 NULL((void*)0),
6299};
6300
6301static int hf_ieee80211_vht_compressed_beamforming_report;
6302static int hf_ieee80211_vht_compressed_beamforming_report_snr;
6303static int hf_ieee80211_vht_compressed_beamform_scidx;
6304static int hf_ieee80211_vht_group_id_management;
6305static int hf_ieee80211_vht_membership_status_array;
6306static int hf_ieee80211_vht_user_position_array;
6307static int hf_ieee80211_vht_operation_mode_notification;
6308static int hf_ieee80211_vht_membership_status_field;
6309static int hf_ieee80211_vht_user_position_field;
6310static int hf_ieee80211_vht_mu_exclusive_beamforming_report;
6311static int hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr;
6312
6313static int hf_ieee80211_ff_he_action;
6314static int hf_ieee80211_ff_protected_he_action;
6315static int hf_ieee80211_ff_protected_ftm_action;
6316static int hf_ieee80211_ff_eht_action;
6317static int hf_ieee80211_ff_protected_eht_action;
6318static int hf_ieee80211_he_mimo_control_nc_index;
6319static int hf_ieee80211_he_mimo_control_nr_index;
6320static int hf_ieee80211_he_mimo_control_bw;
6321static int hf_ieee80211_he_mimo_control_grouping;
6322static int hf_ieee80211_he_mimo_control_codebook_info;
6323static int hf_ieee80211_he_mimo_control_feedback_type;
6324static int hf_ieee80211_he_mimo_control_remaining_feedback_segs;
6325static int hf_ieee80211_he_mimo_control_first_feedback_seg;
6326static int hf_ieee80211_he_mimo_control_ru_start_index;
6327static int hf_ieee80211_he_mimo_control_ru_end_index;
6328static int hf_ieee80211_he_mimo_control_sounding_dialog_token_num;
6329static int hf_ieee80211_he_mimo_control_reserved;
6330static int hf_ieee80211_he_mimo_control_field;
6331static int hf_ieee80211_he_compressed_beamforming_report_snr;
6332static int hf_ieee80211_he_compressed_beamform_scidx;
6333static int hf_ieee80211_he_beamforming_report_len;
6334
6335static int hf_ieee80211_tag_neighbor_report_bssid;
6336static int hf_ieee80211_tag_neighbor_report_bssid_info;
6337static int hf_ieee80211_tag_neighbor_report_bssid_info_reachability;
6338static int hf_ieee80211_tag_neighbor_report_bssid_info_security;
6339static int hf_ieee80211_tag_neighbor_report_bssid_info_key_scope;
6340static int hf_ieee80211_tag_neighbor_report_bssid_info_capability;
6341static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng;
6342static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos;
6343static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd;
6344static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt;
6345static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4;
6346static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5;
6347static int hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain;
6348static int hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput;
6349static int hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput;
6350static int hf_ieee80211_tag_neighbor_report_bssid_info_ftm;
6351static int hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency;
6352static int hf_ieee80211_tag_neighbor_report_bssid_info_er_bss;
6353static int hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap;
6354static int hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active;
6355static int hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap;
6356static int hf_ieee80211_tag_neighbor_report_bssid_info_oct_supported_with_reporting_ap;
6357static int hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap;
6358static int hf_ieee80211_tag_neighbor_report_bssid_info_eht;
6359static int hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning;
6360static int hf_ieee80211_tag_neighbor_report_bssid_info_reserved;
6361static int hf_ieee80211_tag_neighbor_report_ope_class;
6362static int hf_ieee80211_tag_neighbor_report_channel_number;
6363static int hf_ieee80211_tag_neighbor_report_phy_type;
6364static int hf_ieee80211_tag_neighbor_report_subelement_id;
6365static int hf_ieee80211_tag_neighbor_report_subelement_length;
6366static int hf_ieee80211_tag_neighbor_report_subelement_data;
6367static int hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref;
6368static int hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf;
6369static int hf_ieee80211_tag_neighbor_report_subelement_bss_dur;
6370static int hf_ieee80211_tag_neighbor_report_subelement_tsf_offset;
6371static int hf_ieee80211_tag_neighbor_report_subelement_beacon_interval;
6372static int hf_ieee80211_tag_neighbor_report_subelement_country_code;
6373static int hf_ieee80211_tag_supported_ope_classes_current;
6374static int hf_ieee80211_tag_supported_ope_classes_alternate;
6375
6376static int hf_ieee80211_tag_dirn_meas_results_aoa_results;
6377static int hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth;
6378static int hf_ieee80211_tag_ftm_aoa_results_aoa_elevation;
6379static int hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy;
6380static int hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy;
6381static int hf_ieee80211_tag_ftm_aoa_results_best_awv_id;
6382static int hf_ieee80211_tag_ftm_aoa_results_aoa_reference;
6383static int hf_ieee80211_tag_ftm_aoa_results_reserved;
6384
6385/* IEEE Std 802.11r-2008 7.3.2.47 */
6386static int hf_ieee80211_tag_mobility_domain_mdid;
6387static int hf_ieee80211_tag_mobility_domain_ft_capab;
6388static int hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds;
6389static int hf_ieee80211_tag_mobility_domain_ft_capab_resource_req;
6390static int hf_ieee80211_tag_mobility_domain_ft_capab_reserved;
6391static int * const ieee80211_tag_mobility_domain_ft_capab_fields[] = {
6392 &hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
6393 &hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
6394 &hf_ieee80211_tag_mobility_domain_ft_capab_reserved,
6395 NULL((void*)0)
6396};
6397
6398/* IEEE Std 802.11r-2008 7.3.2.48 */
6399static int hf_ieee80211_tag_ft_mic_control;
6400static int hf_ieee80211_tag_ft_mic_control_rsnxe_used;
6401static int hf_ieee80211_tag_ft_mic_control_mic_length;
6402static int hf_ieee80211_tag_ft_mic_control_reserved;
6403static int hf_ieee80211_tag_ft_mic_control_element_count;
6404static int * const ieee80211_tag_ft_mic_control_fields[] = {
6405 &hf_ieee80211_tag_ft_mic_control_rsnxe_used,
6406 &hf_ieee80211_tag_ft_mic_control_mic_length,
6407 &hf_ieee80211_tag_ft_mic_control_reserved,
6408 &hf_ieee80211_tag_ft_mic_control_element_count,
6409 NULL((void*)0)
6410};
6411static int hf_ieee80211_tag_ft_mic;
6412static int hf_ieee80211_tag_ft_anonce;
6413static int hf_ieee80211_tag_ft_snonce;
6414static int hf_ieee80211_tag_ft_subelem_id;
6415static int hf_ieee80211_tag_ft_subelem_len;
6416static int hf_ieee80211_tag_ft_subelem_data;
6417static int hf_ieee80211_tag_ft_subelem_r1kh_id;
6418static int hf_ieee80211_tag_ft_subelem_gtk_key_info;
6419static int hf_ieee80211_tag_ft_subelem_gtk_key_id;
6420static int hf_ieee80211_tag_ft_subelem_gtk_key_length;
6421static int hf_ieee80211_tag_ft_subelem_gtk_rsc;
6422static int hf_ieee80211_tag_ft_subelem_gtk_key;
6423static int hf_ieee80211_tag_ft_subelem_gtk_key_encrypted;
6424static int hf_ieee80211_tag_ft_subelem_r0kh_id;
6425static int hf_ieee80211_tag_ft_subelem_igtk_key_id;
6426static int hf_ieee80211_tag_ft_subelem_igtk_ipn;
6427static int hf_ieee80211_tag_ft_subelem_igtk_key_length;
6428static int hf_ieee80211_tag_ft_subelem_igtk_key;
6429static int hf_ieee80211_tag_ft_subelem_oci_op_class;
6430static int hf_ieee80211_tag_ft_subelem_oci_prim_chan_num;
6431static int hf_ieee80211_tag_ft_subelem_oci_freq_seg_1;
6432static int hf_ieee80211_tag_ft_subelem_oci_oct_op_class;
6433static int hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num;
6434static int hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1;
6435static int hf_ieee80211_tag_ft_subelem_bigtk_key_id;
6436static int hf_ieee80211_tag_ft_subelem_bigtk_bipn;
6437static int hf_ieee80211_tag_ft_subelem_bigtk_key_length;
6438static int hf_ieee80211_tag_ft_subelem_bigtk_key;
6439static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info;
6440static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id;
6441static int hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info;
6442static int hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id;
6443static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length;
6444static int hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc;
6445static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key;
6446static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id;
6447static int hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn;
6448static int hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info;
6449static int hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id;
6450static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length;
6451static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key;
6452static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id;
6453static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_bipn;
6454static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info;
6455static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id;
6456static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length;
6457static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key;
6458
6459/* IEEE Std 802.11-2012: 11r 8.4.2.52 */
6460static int hf_ieee80211_tag_ric_data_id;
6461static int hf_ieee80211_tag_ric_data_desc_cnt;
6462static int hf_ieee80211_tag_ric_data_status_code;
6463
6464/* IEEE Std 802.11-2012: 11r 8.4.2.53 */
6465static int hf_ieee80211_tag_ric_desc_rsrc_type;
6466static int hf_ieee80211_tag_ric_desc_var_params;
6467
6468/* IEEE Std 802.11w-2009 7.3.2.55 */
6469static int hf_ieee80211_tag_mmie_keyid;
6470static int hf_ieee80211_tag_mmie_ipn;
6471static int hf_ieee80211_tag_mmie_mic;
6472
6473/* IEEE Std 802.11-2016: 9.4.2.72 */
6474static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control;
6475static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type;
6476static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved;
6477
6478/* IEEE Std 802.11-2016: 9.4.2.74 */
6479static int hf_ieee80211_tag_multiple_bssid_index_bssid_index;
6480static int hf_ieee80211_tag_multiple_bssid_index_dtim_period;
6481static int hf_ieee80211_tag_multiple_bssid_index_dtim_count;
6482
6483/* IEEE Std 802.11-2012: 8.4.2.61 */
6484static int hf_ieee80211_tag_obss_spd;
6485static int hf_ieee80211_tag_obss_sad;
6486static int hf_ieee80211_tag_obss_cwtsi;
6487static int hf_ieee80211_tag_obss_sptpc;
6488static int hf_ieee80211_tag_obss_satpc;
6489static int hf_ieee80211_tag_obss_wctdf;
6490static int hf_ieee80211_tag_obss_sat;
6491
6492/* IEEE Std 802.11-2012: 8.4.2.25.1 */
6493static int hf_ieee80211_group_data_cipher_suite_oui;
6494static int hf_ieee80211_group_data_cipher_suite_type;
6495static int hf_ieee80211_osen_pairwise_cipher_suite_oui;
6496static int hf_ieee80211_osen_pairwise_cipher_suite_type;
6497static int hf_ieee80211_osen_pcs_count;
6498static int hf_ieee80211_osen_akm_count;
6499static int hf_ieee80211_osen_akm_cipher_suite_oui;
6500static int hf_ieee80211_osen_akm_cipher_suite_type;
6501static int hf_ieee80211_osen_rsn_cap_preauth;
6502static int hf_ieee80211_osen_rsn_cap_no_pairwise;
6503static int hf_ieee80211_osen_rsn_cap_ptksa_replay_counter;
6504static int hf_ieee80211_osen_rsn_cap_gtksa_replay_counter;
6505static int hf_ieee80211_osen_rsn_cap_mfpr;
6506static int hf_ieee80211_osen_rsn_cap_mfpc;
6507static int hf_ieee80211_osen_rsn_cap_jmr;
6508static int hf_ieee80211_osen_rsn_cap_peerkey;
6509static int hf_ieee80211_osen_rsn_spp_a_msdu_capable;
6510static int hf_ieee80211_osen_rsn_spp_a_msdu_required;
6511static int hf_ieee80211_osen_rsn_pbac;
6512static int hf_ieee80211_osen_extended_key_id_iaf;
6513static int hf_ieee80211_osen_reserved;
6514static int hf_ieee80211_osen_rsn_cap_flags;
6515static int hf_ieee80211_osen_pmkid_count;
6516static int hf_ieee80211_osen_pmkid;
6517static int hf_ieee80211_osen_group_management_cipher_suite_oui;
6518static int hf_ieee80211_osen_group_management_cipher_suite_type;
6519
6520/*WAPI-Specification 7.3.2.25 : WAPI Parameter Set*/
6521static int hf_ieee80211_tag_wapi_param_set_version;
6522
6523static int hf_ieee80211_tag_wapi_param_set_akm_suite_count;
6524static int hf_ieee80211_tag_wapi_param_set_akm_suite_oui;
6525static int hf_ieee80211_tag_wapi_param_set_akm_suite_type;
6526
6527static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count;
6528static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui;
6529static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type;
6530
6531static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui;
6532static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type;
6533
6534static int hf_ieee80211_tag_wapi_param_set_capab;
6535static int hf_ieee80211_tag_wapi_param_set_capab_preauth;
6536static int hf_ieee80211_tag_wapi_param_set_capab_rsvd;
6537static int hf_ieee80211_tag_wapi_param_set_bkid_count;
6538static int hf_ieee80211_tag_wapi_param_set_bkid_list;
6539
6540/* IEEE Std 802.11v-2011 7.3.2.61 */
6541static int hf_ieee80211_tag_time_adv_timing_capab;
6542static int hf_ieee80211_tag_time_adv_time_value;
6543static int hf_ieee80211_tag_time_adv_time_value_year;
6544static int hf_ieee80211_tag_time_adv_time_value_month;
6545static int hf_ieee80211_tag_time_adv_time_value_day;
6546static int hf_ieee80211_tag_time_adv_time_value_hours;
6547static int hf_ieee80211_tag_time_adv_time_value_minutes;
6548static int hf_ieee80211_tag_time_adv_time_value_seconds;
6549static int hf_ieee80211_tag_time_adv_time_value_milliseconds;
6550static int hf_ieee80211_tag_time_adv_time_value_reserved;
6551static int hf_ieee80211_tag_time_adv_time_error;
6552static int hf_ieee80211_tag_time_adv_time_update_counter;
6553
6554/* IEEE Std 802.11-2012 8.4.2.81 */
6555static int hf_ieee80211_tag_bss_max_idle_period;
6556static int hf_ieee80211_tag_bss_max_idle_options;
6557static int hf_ieee80211_tag_bss_max_idle_options_protected;
6558static int hf_ieee80211_tag_bss_idle_options_reserved;
6559
6560/* IEEE Std 802.11-2012 8.4.2.82 */
6561static int hf_ieee80211_tag_tfs_request_id;
6562static int hf_ieee80211_tag_tfs_request_ac_delete_after_match;
6563static int hf_ieee80211_tag_tfs_request_ac_notify;
6564static int hf_ieee80211_tag_tfs_request_subelem_id;
6565static int hf_ieee80211_tag_tfs_request_subelem_len;
6566static int hf_ieee80211_tag_tfs_request_subelem;
6567
6568/* IEEE Std 802.11-2012 8.4.2.83 */
6569static int hf_ieee80211_tag_tfs_response_subelem_id;
6570static int hf_ieee80211_tag_tfs_response_subelem_len;
6571static int hf_ieee80211_tag_tfs_response_subelem;
6572static int hf_ieee80211_tag_tfs_response_status;
6573static int hf_ieee80211_tag_tfs_response_id;
6574
6575/* IEEE Std 802.11-2012 8.4.2.84 */
6576static int hf_ieee80211_tag_wnm_sleep_mode_action_type;
6577static int hf_ieee80211_tag_wnm_sleep_mode_response_status;
6578static int hf_ieee80211_tag_wnm_sleep_mode_interval;
6579
6580static int hf_ieee80211_wnm_sub_elt_id;
6581static int hf_ieee80211_wnm_sub_elt_len;
6582
6583/* IEEE Std 802.11v-2011 7.3.2.87 */
6584static int hf_ieee80211_tag_time_zone;
6585
6586/* IEEE Std 802.11u-2011 7.3.2.92 */
6587static int hf_ieee80211_tag_interworking_access_network_type;
6588static int hf_ieee80211_tag_interworking_internet;
6589static int hf_ieee80211_tag_interworking_asra;
6590static int hf_ieee80211_tag_interworking_esr;
6591static int hf_ieee80211_tag_interworking_uesa;
6592static int hf_ieee80211_tag_interworking_hessid;
6593
6594/* IEEE Std 802.11-2012, 8.4.2.97 */
6595static int hf_ieee80211_tag_qos_map_set_dscp_exc;
6596static int hf_ieee80211_tag_qos_map_set_dscp_exc_val;
6597static int hf_ieee80211_tag_qos_map_set_dscp_exc_up;
6598static int hf_ieee80211_tag_qos_map_set_range;
6599static int hf_ieee80211_tag_qos_map_set_low;
6600static int hf_ieee80211_tag_qos_map_set_high;
6601
6602/* IEEE Std 802.11u-2011 7.3.2.93 */
6603static int hf_ieee80211_tag_adv_proto_resp_len_limit;
6604static int hf_ieee80211_tag_adv_proto_pame_bi;
6605static int hf_ieee80211_tag_adv_proto_id;
6606static int hf_ieee80211_tag_adv_vs_len;
6607/* static int hf_ieee80211_tag_adv_proto_vs_info; */
6608
6609/* IEEE Std 802.11u-2011 7.3.2.96 */
6610static int hf_ieee80211_tag_roaming_consortium_num_anqp_oi;
6611static int hf_ieee80211_tag_roaming_consortium_oi1_len;
6612static int hf_ieee80211_tag_roaming_consortium_oi2_len;
6613static int hf_ieee80211_tag_roaming_consortium_oi1;
6614static int hf_ieee80211_tag_roaming_consortium_oi2;
6615static int hf_ieee80211_tag_roaming_consortium_oi3;
6616
6617/* 802.11n 7.3.2.48 */
6618static int hf_ieee80211_hta_cc;
6619static int hf_ieee80211_hta_cap1;
6620static int hf_ieee80211_hta_cap2;
6621static int hf_ieee80211_hta_ext_chan_offset;
6622static int hf_ieee80211_hta_rec_tx_width;
6623static int hf_ieee80211_hta_rifs_mode;
6624static int hf_ieee80211_hta_controlled_access;
6625static int hf_ieee80211_hta_service_interval;
6626static int hf_ieee80211_hta_operating_mode;
6627static int hf_ieee80211_hta_non_gf_devices;
6628static int hf_ieee80211_hta_basic_stbc_mcs;
6629static int hf_ieee80211_hta_dual_stbc_protection;
6630static int hf_ieee80211_hta_secondary_beacon;
6631static int hf_ieee80211_hta_lsig_txop_protection;
6632static int hf_ieee80211_hta_pco_active;
6633static int hf_ieee80211_hta_pco_phase;
6634
6635static int hf_ieee80211_antsel;
6636static int hf_ieee80211_antsel_vs;
6637static int hf_ieee80211_antsel_b0;
6638static int hf_ieee80211_antsel_b1;
6639static int hf_ieee80211_antsel_b2;
6640static int hf_ieee80211_antsel_b3;
6641static int hf_ieee80211_antsel_b4;
6642static int hf_ieee80211_antsel_b5;
6643static int hf_ieee80211_antsel_b6;
6644static int hf_ieee80211_antsel_b7;
6645
6646static int hf_ieee80211_rsn_version;
6647static int hf_ieee80211_rsn_gcs;
6648static int hf_ieee80211_rsn_gcs_oui;
6649static int hf_ieee80211_rsn_gcs_type;
6650static int hf_ieee80211_rsn_gcs_80211_type;
6651static int hf_ieee80211_rsn_pcs_count;
6652static int hf_ieee80211_rsn_pcs_list;
6653static int hf_ieee80211_rsn_pcs;
6654static int hf_ieee80211_rsn_pcs_oui;
6655static int hf_ieee80211_rsn_pcs_80211_type;
6656static int hf_ieee80211_rsn_pcs_type;
6657static int hf_ieee80211_rsn_akms_count;
6658static int hf_ieee80211_rsn_akms_list;
6659static int hf_ieee80211_rsn_akms;
6660static int hf_ieee80211_rsn_akms_oui;
6661static int hf_ieee80211_rsn_akms_80211_type;
6662static int hf_ieee80211_rsn_akms_type;
6663static int hf_ieee80211_rsn_cap;
6664static int hf_ieee80211_rsn_cap_preauth;
6665static int hf_ieee80211_rsn_cap_no_pairwise;
6666static int hf_ieee80211_rsn_cap_ptksa_replay_counter;
6667static int hf_ieee80211_rsn_cap_gtksa_replay_counter;
6668static int hf_ieee80211_rsn_cap_mfpr;
6669static int hf_ieee80211_rsn_cap_mfpc;
6670static int hf_ieee80211_rsn_cap_jmr;
6671static int hf_ieee80211_rsn_cap_peerkey;
6672static int hf_ieee80211_rsn_cap_spp_amsdu_cap;
6673static int hf_ieee80211_rsn_cap_spp_amsdu_req;
6674static int hf_ieee80211_rsn_cap_pbac;
6675static int hf_ieee80211_rsn_cap_extended_key_id_iaf;
6676static int hf_ieee80211_rsn_cap_ocvc;
6677static int hf_ieee80211_rsn_pmkid_count;
6678static int hf_ieee80211_rsn_pmkid_list;
6679static int hf_ieee80211_rsn_pmkid;
6680static int hf_ieee80211_rsn_gmcs;
6681static int hf_ieee80211_rsn_gmcs_oui;
6682static int hf_ieee80211_rsn_gmcs_type;
6683static int hf_ieee80211_rsn_gmcs_80211_type;
6684
6685static int hf_ieee80211_wfa_ie_type;
6686static int hf_ieee80211_wfa_ie_wpa_version;
6687static int hf_ieee80211_wfa_ie_wpa_mcs;
6688static int hf_ieee80211_wfa_ie_wpa_mcs_oui;
6689static int hf_ieee80211_wfa_ie_wpa_mcs_type;
6690static int hf_ieee80211_wfa_ie_wpa_mcs_wfa_type;
6691static int hf_ieee80211_wfa_ie_wpa_ucs_count;
6692static int hf_ieee80211_wfa_ie_wpa_ucs_list;
6693static int hf_ieee80211_wfa_ie_wpa_ucs;
6694static int hf_ieee80211_wfa_ie_wpa_ucs_oui;
6695static int hf_ieee80211_wfa_ie_wpa_ucs_wfa_type;
6696static int hf_ieee80211_wfa_ie_wpa_ucs_type;
6697static int hf_ieee80211_wfa_ie_wpa_akms_count;
6698static int hf_ieee80211_wfa_ie_wpa_akms_list;
6699static int hf_ieee80211_wfa_ie_wpa_akms;
6700static int hf_ieee80211_wfa_ie_wpa_akms_oui;
6701static int hf_ieee80211_wfa_ie_wpa_akms_wfa_type;
6702static int hf_ieee80211_wfa_ie_wpa_akms_type;
6703static int hf_ieee80211_wfa_ie_wme_subtype;
6704static int hf_ieee80211_wfa_ie_wme_version;
6705static int hf_ieee80211_wfa_ie_wme_qos_info;
6706static int hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length;
6707static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be;
6708static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk;
6709static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi;
6710static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo;
6711static int hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved;
6712static int hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd;
6713static int hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count;
6714static int hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved;
6715static int hf_ieee80211_wfa_ie_wme_reserved;
6716static int hf_ieee80211_wfa_ie_wme_ac_parameters;
6717static int hf_ieee80211_wfa_ie_wme_acp_aci_aifsn;
6718static int hf_ieee80211_wfa_ie_wme_acp_aci_be;
6719static int hf_ieee80211_wfa_ie_wme_acp_acm_be;
6720static int hf_ieee80211_wfa_ie_wme_acp_aifsn_be;
6721static int hf_ieee80211_wfa_ie_wme_acp_reserved_be;
6722static int hf_ieee80211_wfa_ie_wme_acp_aci_bk;
6723static int hf_ieee80211_wfa_ie_wme_acp_acm_bk;
6724static int hf_ieee80211_wfa_ie_wme_acp_aifsn_bk;
6725static int hf_ieee80211_wfa_ie_wme_acp_reserved_bk;
6726static int hf_ieee80211_wfa_ie_wme_acp_aci_vi;
6727static int hf_ieee80211_wfa_ie_wme_acp_acm_vi;
6728static int hf_ieee80211_wfa_ie_wme_acp_aifsn_vi;
6729static int hf_ieee80211_wfa_ie_wme_acp_reserved_vi;
6730static int hf_ieee80211_wfa_ie_wme_acp_aci_vo;
6731static int hf_ieee80211_wfa_ie_wme_acp_acm_vo;
6732static int hf_ieee80211_wfa_ie_wme_acp_aifsn_vo;
6733static int hf_ieee80211_wfa_ie_wme_acp_reserved_vo;
6734static int hf_ieee80211_wfa_ie_wme_acp_ecw;
6735static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_be;
6736static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk;
6737static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo;
6738static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi;
6739static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_be;
6740static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk;
6741static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo;
6742static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi;
6743static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_be;
6744static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk;
6745static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo;
6746static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi;
6747static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo;
6748static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid;
6749static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction;
6750static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb;
6751static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up;
6752static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved;
6753static int hf_ieee80211_wfa_ie_wme_tspec_nor_msdu;
6754static int hf_ieee80211_wfa_ie_wme_tspec_max_msdu;
6755static int hf_ieee80211_wfa_ie_wme_tspec_min_srv;
6756static int hf_ieee80211_wfa_ie_wme_tspec_max_srv;
6757static int hf_ieee80211_wfa_ie_wme_tspec_inact_int;
6758static int hf_ieee80211_wfa_ie_wme_tspec_susp_int;
6759static int hf_ieee80211_wfa_ie_wme_tspec_srv_start;
6760static int hf_ieee80211_wfa_ie_wme_tspec_min_data;
6761static int hf_ieee80211_wfa_ie_wme_tspec_mean_data;
6762static int hf_ieee80211_wfa_ie_wme_tspec_peak_data;
6763static int hf_ieee80211_wfa_ie_wme_tspec_burst_size;
6764static int hf_ieee80211_wfa_ie_wme_tspec_delay_bound;
6765static int hf_ieee80211_wfa_ie_wme_tspec_min_phy;
6766static int hf_ieee80211_wfa_ie_wme_tspec_surplus;
6767static int hf_ieee80211_wfa_ie_wme_tspec_medium;
6768static int hf_ieee80211_wfa_ie_nc_cost_level;
6769static int hf_ieee80211_wfa_ie_nc_reserved;
6770static int hf_ieee80211_wfa_ie_nc_cost_flags;
6771static int hf_ieee80211_wfa_ie_tethering_type;
6772static int hf_ieee80211_wfa_ie_tethering_mac_length;
6773static int hf_ieee80211_wfa_ie_tethering_mac;
6774static int hf_ieee80211_wfa_ie_owe_bssid;
6775static int hf_ieee80211_wfa_ie_owe_ssid_length;
6776static int hf_ieee80211_wfa_ie_owe_ssid;
6777static int hf_ieee80211_wfa_ie_owe_band_info;
6778static int hf_ieee80211_wfa_ie_owe_channel_info;
6779static int hf_ieee80211_wfa_ie_mbo_oce_attr;
6780static int hf_ieee80211_wfa_ie_mbo_oce_attr_id;
6781static int hf_ieee80211_wfa_ie_mbo_oce_attr_len;
6782static int hf_ieee80211_wfa_ie_mbo_ap_cap;
6783static int hf_ieee80211_wfa_ie_mbo_ap_cap_cell;
6784static int hf_ieee80211_wfa_ie_mbo_ap_cap_reserved;
6785static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class;
6786static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan;
6787static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref;
6788static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason;
6789static int hf_ieee80211_wfa_ie_mbo_cellular_cap;
6790static int hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason;
6791static int hf_ieee80211_wfa_ie_mbo_cellular_pref;
6792static int hf_ieee80211_wfa_ie_mbo_transition_reason;
6793static int hf_ieee80211_wfa_ie_mbo_transition_rej_reason;
6794static int hf_ieee80211_wfa_ie_mbo_assoc_retry_delay;
6795static int hf_ieee80211_wfa_ie_oce_cap_ctrl;
6796static int hf_ieee80211_wfa_ie_oce_cap_release;
6797static int hf_ieee80211_wfa_ie_oce_cap_sta_cfon;
6798static int hf_ieee80211_wfa_ie_oce_cap_11b_only_ap;
6799static int hf_ieee80211_wfa_ie_oce_cap_hlp;
6800static int hf_ieee80211_wfa_ie_oce_cap_non_oce_ap;
6801static int hf_ieee80211_wfa_ie_oce_cap_reserved;
6802static int hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta;
6803static int hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay;
6804static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap;
6805static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink;
6806static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink;
6807static int hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid;
6808static int hf_ieee80211_wfa_ie_oce_probe_suppr_bssid;
6809static int hf_ieee80211_wfa_ie_oce_probe_suppr_ssid;
6810static int hf_ieee80211_wfa_anqp_mbo_subtype;
6811static int hf_ieee80211_wfa_anqp_mbo_query;
6812static int hf_ieee80211_wfa_anqp_mbo_cellular_pref;
6813static int hf_ieee80211_wfa_ie_transition_disable_bitmap;
6814static int hf_ieee80211_wfa_ie_transition_disable_wpa3_personal;
6815static int hf_ieee80211_wfa_ie_transition_disable_sae_pk;
6816static int hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise;
6817static int hf_ieee80211_wfa_ie_transition_disable_enhanced_open;
6818static int hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7;
6819static int hf_ieee80211_wfa_ie_transition_disable_reserved;
6820
6821static int hf_ieee80211_aironet_ie_type;
6822static int hf_ieee80211_aironet_ie_dtpc;
6823static int hf_ieee80211_aironet_ie_dtpc_unknown;
6824static int hf_ieee80211_aironet_ie_version;
6825static int hf_ieee80211_aironet_ie_data;
6826static int hf_ieee80211_aironet_ie_qos_reserved;
6827static int hf_ieee80211_aironet_ie_qos_paramset;
6828static int hf_ieee80211_aironet_ie_qos_val;
6829static int hf_ieee80211_aironet_ie_clientmfp;
6830
6831static int hf_ieee80211_vs_sgdsn_tag;
6832static int hf_ieee80211_vs_sgdsn_type;
6833static int hf_ieee80211_vs_sgdsn_length;
6834static int hf_ieee80211_vs_sgdsn_version;
6835static int hf_ieee80211_vs_sgdsn_icaomfrcode;
6836static int hf_ieee80211_vs_sgdsn_manufacturer;
6837static int hf_ieee80211_vs_sgdsn_model;
6838static int hf_ieee80211_vs_sgdsn_serialnumber;
6839static int hf_ieee80211_vs_sgdsn_serialnumber_len;
6840static int hf_ieee80211_vs_sgdsn_gpscoord;
6841static int hf_ieee80211_vs_sgdsn_altitude;
6842static int hf_ieee80211_vs_sgdsn_speed;
6843static int hf_ieee80211_vs_sgdsn_heading;
6844
6845static int hf_ieee80211_vs_nintendo_type;
6846static int hf_ieee80211_vs_nintendo_length;
6847static int hf_ieee80211_vs_nintendo_servicelist;
6848static int hf_ieee80211_vs_nintendo_service;
6849static int hf_ieee80211_vs_nintendo_consoleid;
6850static int hf_ieee80211_vs_nintendo_unknown;
6851
6852static int hf_ieee80211_vs_aruba_subtype;
6853static int hf_ieee80211_vs_aruba_apname;
6854static int hf_ieee80211_vs_aruba_data;
6855static int hf_ieee80211_vs_aruba_gps_length;
6856static int hf_ieee80211_vs_aruba_gps_subversion;
6857static int hf_ieee80211_vs_aruba_gps_hop;
6858static int hf_ieee80211_vs_aruba_gps_latitude;
6859static int hf_ieee80211_vs_aruba_gps_longitude;
6860static int hf_ieee80211_vs_aruba_gps_major_axis;
6861static int hf_ieee80211_vs_aruba_gps_minor_axis;
6862static int hf_ieee80211_vs_aruba_gps_orientation;
6863static int hf_ieee80211_vs_aruba_gps_distance;
6864
6865static int hf_ieee80211_vs_routerboard_unknown;
6866static int hf_ieee80211_vs_routerboard_subitem;
6867static int hf_ieee80211_vs_routerboard_subtype;
6868static int hf_ieee80211_vs_routerboard_sublength;
6869static int hf_ieee80211_vs_routerboard_subdata;
6870static int hf_ieee80211_vs_routerboard_subtype1_prefix;
6871static int hf_ieee80211_vs_routerboard_subtype1_data;
6872
6873static int hf_ieee80211_vs_meru_subitem;
6874static int hf_ieee80211_vs_meru_subtype;
6875static int hf_ieee80211_vs_meru_sublength;
6876static int hf_ieee80211_vs_meru_subdata;
6877
6878static int hf_ieee80211_vs_extreme_subtype;
6879static int hf_ieee80211_vs_extreme_subdata;
6880static int hf_ieee80211_vs_extreme_unknown;
6881static int hf_ieee80211_vs_extreme_ap_length;
6882static int hf_ieee80211_vs_extreme_ap_name;
6883
6884static int hf_ieee80211_vs_aerohive_version;
6885static int hf_ieee80211_vs_aerohive_subtype;
6886static int hf_ieee80211_vs_aerohive_hostname_length;
6887static int hf_ieee80211_vs_aerohive_hostname;
6888static int hf_ieee80211_vs_aerohive_data;
6889
6890static int hf_ieee80211_vs_mist_ap_name;
6891static int hf_ieee80211_vs_mist_data;
6892
6893static int hf_ieee80211_vs_ruckus_ap_name;
6894static int hf_ieee80211_vs_ruckus_data;
6895
6896static int hf_ieee80211_vs_alcatel_ap_name;
6897static int hf_ieee80211_vs_alcatel_data;
6898
6899static int hf_ieee80211_vs_fortinet_subtype;
6900static int hf_ieee80211_vs_fortinet_system_type;
6901static int hf_ieee80211_vs_fortinet_system_length;
6902static int hf_ieee80211_vs_fortinet_system_apname;
6903static int hf_ieee80211_vs_fortinet_system_apmodel;
6904static int hf_ieee80211_vs_fortinet_system_apserial;
6905static int hf_ieee80211_vs_fortinet_data;
6906
6907static int hf_ieee80211_vs_arista_subtype;
6908static int hf_ieee80211_vs_arista_apname;
6909static int hf_ieee80211_vs_arista_data;
6910
6911static int hf_ieee80211_vs_wisun_type;
6912static int hf_ieee80211_vs_wisun_ptkid;
6913static int hf_ieee80211_vs_wisun_gtkl;
6914static int hf_ieee80211_vs_wisun_gtkl_gtk0;
6915static int hf_ieee80211_vs_wisun_gtkl_gtk1;
6916static int hf_ieee80211_vs_wisun_gtkl_gtk2;
6917static int hf_ieee80211_vs_wisun_gtkl_gtk3;
6918static int hf_ieee80211_vs_wisun_nr;
6919static int hf_ieee80211_vs_wisun_lgtkl;
6920static int hf_ieee80211_vs_wisun_lgtkl_lgtk0;
6921static int hf_ieee80211_vs_wisun_lgtkl_lgtk1;
6922static int hf_ieee80211_vs_wisun_lgtkl_lgtk2;
6923static int hf_ieee80211_vs_wisun_lgtk_key_id;
6924static int hf_ieee80211_vs_wisun_lgtk_lgtk;
6925static int hf_ieee80211_vs_wisun_data;
6926
6927static int hf_ieee80211_vs_apple_type;
6928static int hf_ieee80211_vs_apple_subtype;
6929static int hf_ieee80211_vs_apple_length;
6930static int hf_ieee80211_vs_apple_data;
6931
6932static int hf_ieee80211_vs_ubiquiti_type;
6933static int hf_ieee80211_vs_ubiquiti_ap_name;
6934static int hf_ieee80211_vs_ubiquiti_data;
6935
6936static int hf_ieee80211_rsn_ie_ptk_keyid;
6937
6938static int hf_ieee80211_rsn_ie_gtk_kde_data_type;
6939static int hf_ieee80211_rsn_ie_gtk_kde_key_id;
6940static int hf_ieee80211_rsn_ie_gtk_kde_tx;
6941static int hf_ieee80211_rsn_ie_gtk_kde_reserved1;
6942static int hf_ieee80211_rsn_ie_gtk_kde_reserved2;
6943static int hf_ieee80211_rsn_ie_gtk_kde_gtk;
6944
6945static int hf_ieee80211_rsn_ie_mac_address_kde_mac;
6946
6947static int hf_ieee80211_rsn_ie_pmkid;
6948
6949static int hf_ieee80211_rsn_ie_unknown;
6950
6951static int hf_ieee80211_rsn_ie_gtk_kde_nonce;
6952static int hf_ieee80211_rsn_ie_gtk_kde_lifetime;
6953static int hf_ieee80211_rsn_ie_error_kde_res;
6954static int hf_ieee80211_rsn_ie_error_kde_error_type;
6955static int hf_ieee80211_rsn_ie_igtk_kde_keyid;
6956static int hf_ieee80211_rsn_ie_igtk_kde_ipn;
6957static int hf_ieee80211_rsn_ie_igtk_kde_igtk;
6958static int hf_ieee80211_rsn_ie_oci_operating_class;
6959static int hf_ieee80211_rsn_ie_oci_primary_channel_number;
6960static int hf_ieee80211_rsn_ie_oci_frequency_segment_1;
6961static int hf_ieee80211_rsn_ie_bigtk_key_id;
6962static int hf_ieee80211_rsn_ie_bigtk_bipn;
6963static int hf_ieee80211_rsn_ie_bigtk_bigtk;
6964static int hf_ieee80211_rsn_ie_mlo_link_info;
6965static int hf_ieee80211_rsn_ie_mlo_linkid;
6966static int hf_ieee80211_rsn_ie_mlo_rnse_present;
6967static int hf_ieee80211_rsn_ie_mlo_rnsxe_present;
6968static int hf_ieee80211_rsn_ie_mlo_reserved;
6969static int hf_ieee80211_rsn_ie_mlo_mac_addr;
6970static int hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id;
6971static int hf_ieee80211_rsn_ie_mlo_gtk_kde_tx;
6972static int hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved;
6973static int hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid;
6974static int hf_ieee80211_rsn_ie_mlo_gtk_kde_pn;
6975static int hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk;
6976
6977static int hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id;
6978static int hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn;
6979static int hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved;
6980static int hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid;
6981static int hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk;
6982
6983static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id;
6984static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn;
6985static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved;
6986static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid;
6987static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk;
6988
6989static int hf_ieee80211_marvell_ie_type;
6990static int hf_ieee80211_marvell_ie_mesh_subtype;
6991static int hf_ieee80211_marvell_ie_mesh_version;
6992static int hf_ieee80211_marvell_ie_mesh_active_proto_id;
6993static int hf_ieee80211_marvell_ie_mesh_active_metric_id;
6994static int hf_ieee80211_marvell_ie_mesh_cap;
6995static int hf_ieee80211_marvell_ie_data;
6996
6997static int hf_ieee80211_extreme_mesh_ie_type;
6998static int hf_ieee80211_extreme_mesh_ie_services;
6999static int hf_ieee80211_extreme_mesh_ie_hello_f_root;
7000static int hf_ieee80211_extreme_mesh_ie_hello_f_proxy;
7001static int hf_ieee80211_extreme_mesh_ie_hello_f_geo;
7002static int hf_ieee80211_extreme_mesh_ie_hello_f_path_pref;
7003static int hf_ieee80211_extreme_mesh_ie_hello_f_mobile;
7004static int hf_ieee80211_extreme_mesh_ie_htr;
7005static int hf_ieee80211_extreme_mesh_ie_mtr;
7006static int hf_ieee80211_extreme_mesh_ie_root;
7007static int hf_ieee80211_extreme_mesh_ie_nh;
7008static int hf_ieee80211_extreme_mesh_ie_mesh_id;
7009static int hf_ieee80211_extreme_mesh_ie_mp_id;
7010
7011static int hf_ieee80211_atheros_ie_type;
7012static int hf_ieee80211_atheros_ie_subtype;
7013static int hf_ieee80211_atheros_ie_version;
7014static int hf_ieee80211_atheros_ie_cap_f_turbop;
7015static int hf_ieee80211_atheros_ie_cap_f_comp;
7016static int hf_ieee80211_atheros_ie_cap_f_ff;
7017static int hf_ieee80211_atheros_ie_cap_f_xr;
7018static int hf_ieee80211_atheros_ie_cap_f_ar;
7019static int hf_ieee80211_atheros_ie_cap_f_burst;
7020static int hf_ieee80211_atheros_ie_cap_f_wme;
7021static int hf_ieee80211_atheros_ie_cap_f_boost;
7022static int hf_ieee80211_atheros_ie_advcap_cap;
7023static int hf_ieee80211_atheros_ie_advcap_defkey;
7024static int hf_ieee80211_atheros_ie_xr_info;
7025static int hf_ieee80211_atheros_ie_xr_base_bssid;
7026static int hf_ieee80211_atheros_ie_xr_xr_bssid;
7027static int hf_ieee80211_atheros_ie_xr_xr_beacon;
7028static int hf_ieee80211_atheros_ie_xr_base_cap;
7029static int hf_ieee80211_atheros_ie_xr_xr_cap;
7030static int hf_ieee80211_atheros_ie_data;
7031
7032/*QBSS - Version 1,2,802.11e*/
7033
7034static int hf_ieee80211_qbss2_cal;
7035static int hf_ieee80211_qbss2_gl;
7036static int hf_ieee80211_qbss_cu;
7037static int hf_ieee80211_qbss2_cu;
7038static int hf_ieee80211_qbss_scount;
7039static int hf_ieee80211_qbss2_scount;
7040static int hf_ieee80211_qbss_version;
7041static int hf_ieee80211_qbss_adc;
7042
7043static int hf_ieee80211_tsinfo;
7044static int hf_ieee80211_tsinfo_type;
7045static int hf_ieee80211_tsinfo_tsid;
7046static int hf_ieee80211_tsinfo_dir;
7047static int hf_ieee80211_tsinfo_access;
7048static int hf_ieee80211_tsinfo_agg;
7049static int hf_ieee80211_tsinfo_apsd;
7050static int hf_ieee80211_tsinfo_up;
7051static int hf_ieee80211_tsinfo_ack;
7052static int hf_ieee80211_tsinfo_sched;
7053static int hf_ieee80211_tsinfo_rsv;
7054
7055static int * const ieee80211_tsinfo_fields[] = {
7056 &hf_ieee80211_tsinfo_type,
7057 &hf_ieee80211_tsinfo_tsid,
7058 &hf_ieee80211_tsinfo_dir,
7059 &hf_ieee80211_tsinfo_access,
7060 &hf_ieee80211_tsinfo_agg,
7061 &hf_ieee80211_tsinfo_apsd,
7062 &hf_ieee80211_tsinfo_up,
7063 &hf_ieee80211_tsinfo_ack,
7064 &hf_ieee80211_tsinfo_sched,
7065 &hf_ieee80211_tsinfo_rsv,
7066 NULL((void*)0)
7067};
7068
7069static int hf_ieee80211_tspec_nor_msdu;
7070static int hf_ieee80211_tspec_max_msdu;
7071static int hf_ieee80211_tspec_min_srv;
7072static int hf_ieee80211_tspec_max_srv;
7073static int hf_ieee80211_tspec_inact_int;
7074static int hf_ieee80211_tspec_susp_int;
7075static int hf_ieee80211_tspec_srv_start;
7076static int hf_ieee80211_tspec_min_data;
7077static int hf_ieee80211_tspec_mean_data;
7078static int hf_ieee80211_tspec_peak_data;
7079static int hf_ieee80211_tspec_burst_size;
7080static int hf_ieee80211_tspec_delay_bound;
7081static int hf_ieee80211_tspec_min_phy;
7082static int hf_ieee80211_tspec_surplus;
7083static int hf_ieee80211_tspec_medium;
7084static int hf_ieee80211_tspec_dmg;
7085static int hf_ieee80211_ts_delay;
7086static int hf_ieee80211_tclas_process;
7087static int hf_ieee80211_tag_ext_supp_rates;
7088static int hf_ieee80211_sched_info;
7089static int hf_ieee80211_sched_info_agg;
7090static int hf_ieee80211_sched_info_tsid;
7091static int hf_ieee80211_sched_info_dir;
7092static int hf_ieee80211_sched_srv_start;
7093static int hf_ieee80211_sched_srv_int;
7094static int hf_ieee80211_sched_spec_int;
7095static int hf_ieee80211_tclas_up;
7096static int hf_ieee80211_tclas_class_type;
7097static int hf_ieee80211_tclas_class_mask;
7098static int hf_ieee80211_tclas_mask_reserved;
7099static int hf_ieee80211_tclas_class_mask0_src_addr;
7100static int hf_ieee80211_tclas_class_mask0_dst_addr;
7101static int hf_ieee80211_tclas_class_mask0_type;
7102static int hf_ieee80211_tclas_class_mask1_ver;
7103static int hf_ieee80211_tclas_class_mask1_src_ip;
7104static int hf_ieee80211_tclas_class_mask1_dst_ip;
7105static int hf_ieee80211_tclas_class_mask1_src_port;
7106static int hf_ieee80211_tclas_class_mask1_dst_port;
7107static int hf_ieee80211_tclas_class_mask1_ipv4_dscp;
7108static int hf_ieee80211_tclas_class_mask1_ipv4_proto;
7109static int hf_ieee80211_tclas_class_mask1_reserved;
7110static int hf_ieee80211_tclas_class_mask1_ipv6_flow;
7111static int hf_ieee80211_tclas_class_mask2_tci;
7112static int hf_ieee80211_tclas_src_mac_addr;
7113static int hf_ieee80211_tclas_dst_mac_addr;
7114static int hf_ieee80211_tclas_ether_type;
7115static int hf_ieee80211_tclas_version;
7116static int hf_ieee80211_tclas_ipv4_src;
7117static int hf_ieee80211_tclas_ipv4_dst;
7118static int hf_ieee80211_tclas_src_port;
7119static int hf_ieee80211_tclas_dst_port;
7120static int hf_ieee80211_tclas_dscp;
7121static int hf_ieee80211_tclas_protocol;
7122static int hf_ieee80211_tclas_ipv6_src;
7123static int hf_ieee80211_tclas_ipv6_dst;
7124static int hf_ieee80211_tclas_flow;
7125static int hf_ieee80211_tclas_tag_type;
7126static int hf_ieee80211_tclas_filter_offset;
7127static int hf_ieee80211_tclas_filter_value;
7128static int hf_ieee80211_tclas_filter_mask;
7129static int hf_ieee80211_tclas4_version;
7130static int hf_ieee80211_tclas_class_mask4_ver;
7131static int hf_ieee80211_tclas_class_mask4_4_src_ip;
7132static int hf_ieee80211_tclas_class_mask4_4_dst_ip;
7133static int hf_ieee80211_tclas_class_mask4_src_port;
7134static int hf_ieee80211_tclas_class_mask4_dst_port;
7135static int hf_ieee80211_tclas_class_mask4_dscp;
7136static int hf_ieee80211_tclas_class_mask4_ipv4_proto;
7137static int hf_ieee80211_tclas_class_mask4_reserved;
7138static int hf_ieee80211_tclas_class_mask4_6_src_ip;
7139static int hf_ieee80211_tclas_class_mask4_6_dst_ip;
7140static int hf_ieee80211_tclas_reserved_bytes;
7141static int hf_ieee80211_tclas_class_mask4_next_hdr;
7142static int hf_ieee80211_tclas_class_mask4_flow_label;
7143static int hf_ieee80211_tclas4_ipv4_src;
7144static int hf_ieee80211_tclas4_ipv4_dst;
7145static int hf_ieee80211_tclas4_src_port;
7146static int hf_ieee80211_tclas4_dst_port;
7147static int hf_ieee80211_tclas4_dscp;
7148static int hf_ieee80211_tclas4_protocol;
7149static int hf_ieee80211_tclas4_reserved;
7150static int hf_ieee80211_tclas4_ipv6_src;
7151static int hf_ieee80211_tclas4_ipv6_dst;
7152static int hf_ieee80211_tclas4_next_hdr;
7153static int hf_ieee80211_tclas4_flow;
7154static int hf_ieee80211_tclas_tclas_8021d_up_pcp;
7155static int hf_ieee80211_tclas_8021q_dei;
7156static int hf_ieee80211_tclas_8021q_vid;
7157
7158static int hf_ieee80211_tclas_class_mask5_up_prio;
7159static int hf_ieee80211_tclas_class_mask5_dei;
7160static int hf_ieee80211_tclas_class_mask5_vid;
7161static int hf_ieee80211_tclas_class_mask5_reserved;
7162
7163static int hf_ieee80211_tclas_class_mask6_a_above;
7164static int hf_ieee80211_tclas_class_mask6_frame_control_match_spec;
7165static int hf_ieee80211_tclas_class_mask6_duration_id_match_spec;
7166static int hf_ieee80211_tclas_class_mask6_address_1_match_spec;
7167static int hf_ieee80211_tclas_class_mask6_address_2_match_spec;
7168static int hf_ieee80211_tclas_class_mask6_address_3_match_spec;
7169static int hf_ieee80211_tclas_class_mask6_sequence_control_spec;
7170static int hf_ieee80211_tclas_class_mask6_address_4_match_spec;
7171static int hf_ieee80211_tclas_class_mask6_qos_control_spec;
7172static int hf_ieee80211_tclas_class_mask6_ht_control_spec;
7173static int hf_ieee80211_tclas_class_mask6_reserved;
7174static int hf_ieee80211_tclas6_frame_control_spec;
7175static int hf_ieee80211_tclas6_frame_control_mask;
7176static int hf_ieee80211_tclas6_duration_spec;
7177static int hf_ieee80211_tclas6_duration_mask;
7178static int hf_ieee80211_tclas6_address_1_spec;
7179static int hf_ieee80211_tclas6_address_1_mask;
7180static int hf_ieee80211_tclas6_address_2_spec;
7181static int hf_ieee80211_tclas6_address_2_mask;
7182static int hf_ieee80211_tclas6_address_3_spec;
7183static int hf_ieee80211_tclas6_address_3_mask;
7184static int hf_ieee80211_tclas6_sequence_control_spec;
7185static int hf_ieee80211_tclas6_sequence_control_mask;
7186static int hf_ieee80211_tclas6_address_4_spec;
7187static int hf_ieee80211_tclas6_address_4_mask;
7188static int hf_ieee80211_tclas6_qos_control_spec;
7189static int hf_ieee80211_tclas6_qos_control_mask;
7190static int hf_ieee80211_tclas6_ht_control_spec;
7191static int hf_ieee80211_tclas6_ht_control_mask;
7192
7193static int hf_ieee80211_tclas_class_mask7_frame_control_match_spec;
7194static int hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec;
7195static int hf_ieee80211_tclas_class_mask7_address_2_match_spec;
7196static int hf_ieee80211_tclas_class_mask7_sequence_control_spec;
7197static int hf_ieee80211_tclas_class_mask7_address_3_match_spec;
7198static int hf_ieee80211_tclas_class_mask7_address_4_match_spec;
7199static int hf_ieee80211_tclas_class_mask7_reserved;
7200static int hf_ieee80211_tclas7_frame_control_spec;
7201static int hf_ieee80211_tclas7_frame_control_mask;
7202static int hf_ieee80211_tclas7_address_1_sid_spec;
7203static int hf_ieee80211_tclas7_address_1_sid_mask;
7204static int hf_ieee80211_tclas7_address_2_spec;
7205static int hf_ieee80211_tclas7_address_2_mask;
7206static int hf_ieee80211_tclas7_sequence_control_spec;
7207static int hf_ieee80211_tclas7_sequence_control_mask;
7208static int hf_ieee80211_tclas7_address_3_spec;
7209static int hf_ieee80211_tclas7_address_3_mask;
7210static int hf_ieee80211_tclas7_address_4_spec;
7211static int hf_ieee80211_tclas7_address_4_mask;
7212
7213static int hf_ieee80211_tclas_class_mask8_frame_control_match_spec;
7214static int hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec;
7215static int hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec;
7216static int hf_ieee80211_tclas_class_mask8_sequence_control_spec;
7217static int hf_ieee80211_tclas_class_mask8_address_3_match_spec;
7218static int hf_ieee80211_tclas_class_mask8_address_4_match_spec;
7219static int hf_ieee80211_tclas_class_mask8_reserved;
7220static int hf_ieee80211_tclas8_frame_control_spec;
7221static int hf_ieee80211_tclas8_frame_control_mask;
7222static int hf_ieee80211_tclas8_address_1_bssid_spec;
7223static int hf_ieee80211_tclas8_address_1_bssid_mask;
7224static int hf_ieee80211_tclas8_address_2_sid_spec;
7225static int hf_ieee80211_tclas8_address_2_sid_mask;
7226static int hf_ieee80211_tclas8_sequence_control_spec;
7227static int hf_ieee80211_tclas8_sequence_control_mask;
7228static int hf_ieee80211_tclas8_address_3_spec;
7229static int hf_ieee80211_tclas8_address_3_mask;
7230static int hf_ieee80211_tclas8_address_4_spec;
7231static int hf_ieee80211_tclas8_address_4_mask;
7232
7233static int hf_ieee80211_tclas_class_mask9_frame_control_match_spec;
7234static int hf_ieee80211_tclas_class_mask9_address_1_match_spec;
7235static int hf_ieee80211_tclas_class_mask9_address_2_match_spec;
7236static int hf_ieee80211_tclas_class_mask9_sequence_control_spec;
7237static int hf_ieee80211_tclas_class_mask9_reserved;
7238static int hf_ieee80211_tclas9_frame_control_spec;
7239static int hf_ieee80211_tclas9_frame_control_mask;
7240static int hf_ieee80211_tclas9_address_1_spec;
7241static int hf_ieee80211_tclas9_address_1_mask;
7242static int hf_ieee80211_tclas9_address_2_spec;
7243static int hf_ieee80211_tclas9_address_2_mask;
7244static int hf_ieee80211_tclas9_sequence_control_spec;
7245static int hf_ieee80211_tclas9_sequence_control_mask;
7246
7247static int hf_ieee80211_tclas10_protocol_instance;
7248static int hf_ieee80211_tclas10_protocol_num_next_hdr;
7249
7250static int hf_ieee80211_aruba;
7251static int hf_ieee80211_aruba_hb_seq;
7252static int hf_ieee80211_aruba_mtu;
7253
7254static int hf_ieee80211_tag_vendor_oui_type;
7255static int hf_ieee80211_tag_vendor_data;
7256
7257static int hf_ieee80211_symbp_extreme_assoc_clients;
7258static int hf_ieee80211_symbp_extreme_load_kbps;
7259static int hf_ieee80211_symbp_extreme_load_pps;
7260static int hf_ieee80211_symbp_extreme_client_tx_power;
7261static int hf_ieee80211_symbp_extreme_timestamp;
7262
7263static int hf_ieee80211_tag_symbol_proprietary_oui;
7264static int hf_ieee80211_tag_symbol_proprietary_data;
7265
7266/* IEEE Std 802.11z-2010 7.3.2.62 */
7267static int hf_ieee80211_tag_link_id_bssid;
7268static int hf_ieee80211_tag_link_id_init_sta;
7269static int hf_ieee80211_tag_link_id_resp_sta;
7270
7271/* IEEE Std 802.11z-2010 7.3.2.63 */
7272static int hf_ieee80211_tag_wakeup_schedule_offset;
7273static int hf_ieee80211_tag_wakeup_schedule_interval;
7274static int hf_ieee80211_tag_wakeup_schedule_awake_window_slots;
7275static int hf_ieee80211_tag_wakeup_schedule_max_awake_dur;
7276static int hf_ieee80211_tag_wakeup_schedule_idle_count;
7277
7278/* IEEE Std 802.11z-2010 7.3.2.64 */
7279static int hf_ieee80211_tag_channel_switch_timing_switch_time;
7280static int hf_ieee80211_tag_channel_switch_timing_switch_timeout;
7281
7282/* IEEE Std 802.11z-2010 7.3.2.65 */
7283static int hf_ieee80211_tag_pti_control_tid;
7284static int hf_ieee80211_tag_pti_control_sequence_control;
7285
7286/* IEEE Std 802.11z-2010 7.3.2.66 */
7287static int hf_ieee80211_tag_pu_buffer_status_ac_bk;
7288static int hf_ieee80211_tag_pu_buffer_status_ac_be;
7289static int hf_ieee80211_tag_pu_buffer_status_ac_vi;
7290static int hf_ieee80211_tag_pu_buffer_status_ac_vo;
7291
7292/* IEEE Std 802.11r-2008 7.3.2.49 */
7293static int hf_ieee80211_tag_timeout_int_type;
7294static int hf_ieee80211_tag_timeout_int_value;
7295
7296/* Ethertype 89-0d */
7297static int hf_ieee80211_data_encap_payload_type;
7298
7299static int hf_ieee80211_anqp_wfa_subtype;
7300
7301static int hf_ieee80211_dpp_subtype;
7302
7303/* Hotspot 2.0 */
7304static int hf_ieee80211_hs20_indication_dgaf_disabled;
7305static int hf_ieee80211_hs20_indication_pps_mo_id_present;
7306static int hf_ieee80211_hs20_indication_anqp_domain_id_present;
7307static int hf_ieee80211_hs20_reserved;
7308static int hf_ieee80211_hs20_indication_version_number;
7309static int hf_ieee80211_hs20_indication_pps_mo_id;
7310static int hf_ieee80211_hs20_indication_anqp_domain_id;
7311
7312static int hf_ieee80211_hs20_anqp_subtype;
7313static int hf_ieee80211_hs20_anqp_reserved;
7314static int hf_ieee80211_hs20_anqp_payload;
7315static int hf_ieee80211_hs20_anqp_hs_query_list;
7316static int hf_ieee80211_hs20_anqp_hs_capability_list;
7317static int hf_ieee80211_hs20_anqp_ofn_length;
7318static int hf_ieee80211_hs20_anqp_ofn_language;
7319static int hf_ieee80211_hs20_anqp_ofn_name;
7320static int hf_ieee80211_hs20_anqp_wan_metrics_link_status;
7321static int hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link;
7322static int hf_ieee80211_hs20_anqp_wan_metrics_at_capacity;
7323static int hf_ieee80211_hs20_anqp_wan_metrics_reserved;
7324static int hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed;
7325static int hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed;
7326static int hf_ieee80211_hs20_anqp_wan_metrics_downlink_load;
7327static int hf_ieee80211_hs20_anqp_wan_metrics_uplink_load;
7328static int hf_ieee80211_hs20_anqp_wan_metrics_lmd;
7329static int hf_ieee80211_hs20_anqp_cc_proto_ip_proto;
7330static int hf_ieee80211_hs20_anqp_cc_proto_port_num;
7331static int hf_ieee80211_hs20_anqp_cc_proto_status;
7332static int hf_ieee80211_hs20_anqp_nai_hrq_count;
7333static int hf_ieee80211_hs20_anqp_nai_hrq_encoding_type;
7334static int hf_ieee80211_hs20_anqp_nai_hrq_length;
7335static int hf_ieee80211_hs20_anqp_nai_hrq_realm_name;
7336static int hf_ieee80211_hs20_anqp_oper_class_indic;
7337static int hf_ieee80211_hs20_osu_friendly_names_len;
7338static int hf_ieee80211_hs20_osu_friendly_name_length;
7339static int hf_ieee80211_hs20_osu_friendly_name_language;
7340static int hf_ieee80211_hs20_osu_friendly_name_name;
7341static int hf_ieee80211_hs20_osu_server_uri_len;
7342static int hf_ieee80211_hs20_osu_server_uri;
7343static int hf_ieee80211_hs20_osu_method_list_len;
7344static int hf_ieee80211_hs20_osu_method_val;
7345static int hf_ieee80211_hs20_icons_avail_len;
7346static int hf_ieee80211_hs20_osu_providers_list_ssid_len;
7347static int hf_ieee80211_hs20_osu_providers_ssid;
7348static int hf_ieee80211_hs20_osu_providers_count;
7349static int hf_ieee80211_hs20_osu_prov_length;
7350static int hf_ieee80211_hs20_icon_request_filename;
7351static int hf_ieee80211_hs20_icon_binary_file_status;
7352static int hf_ieee80211_hs20_icon_type_length;
7353static int hf_ieee80211_hs20_icon_type;
7354static int hf_ieee80211_hs20_icon_binary_data_len;
7355static int hf_ieee80211_hs20_icon_binary_data;
7356static int hf_ieee80211_osu_icon_avail_width;
7357static int hf_ieee80211_osu_icon_avail_height;
7358static int hf_ieee80211_osu_icon_avail_lang_code;
7359static int hf_ieee80211_osu_icon_avail_icon_type_len;
7360static int hf_ieee80211_osu_icon_avail_icon_type;
7361static int hf_ieee80211_osu_icon_avail_filename_len;
7362static int hf_ieee80211_osu_icon_avail_filename;
7363static int hf_ieee80211_hs20_osu_nai_len;
7364static int hf_ieee80211_hs20_osu_nai;
7365static int hf_ieee80211_hs20_osu_service_desc_len;
7366static int hf_ieee80211_hs20_osu_service_desc_duple_len;
7367static int hf_ieee80211_hs20_osu_service_desc_lang;
7368static int hf_ieee80211_hs20_osu_service_desc;
7369static int hf_ieee80211_hs20_anqp_venue_url_length;
7370static int hf_ieee80211_hs20_anqp_venue_number;
7371static int hf_ieee80211_hs20_anqp_venue_url;
7372static int hf_ieee80211_hs20_anqp_advice_of_charge_length;
7373static int hf_ieee80211_hs20_anqp_advice_of_charge_type;
7374static int hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding;
7375static int hf_ieee80211_hs20_anqp_aoc_nai_realm_len;
7376static int hf_ieee80211_hs20_anqp_aoc_nai_realm;
7377static int hf_ieee80211_hs20_anqp_aoc_plan_len;
7378static int hf_ieee80211_hs20_anqp_aoc_plan_lang;
7379static int hf_ieee80211_hs20_anqp_aoc_plan_curcy;
7380static int hf_ieee80211_hs20_anqp_aoc_plan_information;
7381
7382static int hf_ieee80211_hs20_subscription_remediation_url_len;
7383static int hf_ieee80211_hs20_subscription_remediation_server_url;
7384static int hf_ieee80211_hs20_subscription_remediation_server_method;
7385static int hf_ieee80211_hs20_deauth_reason_code;
7386static int hf_ieee80211_hs20_reauth_delay;
7387static int hf_ieee80211_hs20_deauth_reason_url_len;
7388static int hf_ieee80211_hs20_deauth_imminent_reason_url;
7389
7390/* IEEE Std 802.11ai : FILS Discovery */
7391static int hf_ieee80211_ff_fils_discovery_frame_control;
7392static int hf_ieee80211_ff_fils_discovery_frame_control_ssid_length;
7393static int hf_ieee80211_ff_fils_discovery_frame_control_capability;
7394static int hf_ieee80211_ff_fils_discovery_frame_control_short_ssid;
7395static int hf_ieee80211_ff_fils_discovery_frame_control_ap_csn;
7396static int hf_ieee80211_ff_fils_discovery_frame_control_ano;
7397static int hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency;
7398static int hf_ieee80211_ff_fils_discovery_frame_control_primary_channel;
7399static int hf_ieee80211_ff_fils_discovery_frame_control_rsn_info;
7400static int hf_ieee80211_ff_fils_discovery_frame_control_length;
7401static int hf_ieee80211_ff_fils_discovery_frame_control_md;
7402static int hf_ieee80211_ff_fils_discovery_frame_control_reserved;
7403static int hf_ieee80211_ff_fils_discovery_ssid;
7404static int hf_ieee80211_ff_fils_discovery_capability;
7405static int hf_ieee80211_ff_fils_discovery_capability_ess;
7406static int hf_ieee80211_ff_fils_discovery_capability_privacy;
7407static int hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width;
7408static int hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams;
7409static int hf_ieee80211_ff_fils_discovery_capability_reserved;
7410static int hf_ieee80211_ff_fils_discovery_capability_multiple_bssid;
7411static int hf_ieee80211_ff_fils_discovery_capability_phy_index;
7412static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss;
7413static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm;
7414static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht;
7415static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he;
7416static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate;
7417
7418static int hf_ieee80211_ff_fils_discovery_short_ssid;
7419static int hf_ieee80211_ff_fils_discovery_ap_csn;
7420static int hf_ieee80211_ff_fils_discovery_ano;
7421static int hf_ieee80211_ff_fils_discovery_ccfs1;
7422static int hf_ieee80211_ff_fils_discovery_operating_class;
7423static int hf_ieee80211_ff_fils_discovery_primary_channel;
7424static int hf_ieee80211_ff_fils_discovery_rsn_info;
7425static int hf_ieee80211_ff_fils_discovery_length;
7426static int hf_ieee80211_ff_fils_discovery_md;
7427
7428/* IEEE Std 802.11ad */
7429static int hf_ieee80211_block_ack_RBUFCAP;
7430static int hf_ieee80211_cf_response_offset;
7431static int hf_ieee80211_grant_ack_reserved;
7432static int hf_ieee80211_ff_dynamic_allocation;
7433static int hf_ieee80211_ff_TID;
7434static int hf_ieee80211_ff_alloc_type;
7435static int hf_ieee80211_ff_src_aid;
7436static int hf_ieee80211_ff_dest_aid;
7437static int hf_ieee80211_ff_alloc_duration;
7438static int hf_ieee80211_ff_b39;
7439static int hf_ieee80211_ff_ssw;
7440static int hf_ieee80211_ff_ssw_direction;
7441static int hf_ieee80211_ff_ssw_cdown;
7442static int hf_ieee80211_ff_ssw_sector_id;
7443static int hf_ieee80211_ff_ssw_dmg_ant_id;
7444static int hf_ieee80211_ff_ssw_rxss_len;
7445static int hf_ieee80211_ff_bf;
7446static int hf_ieee80211_ff_bf_train;
7447static int hf_ieee80211_ff_bf_is_init;
7448static int hf_ieee80211_ff_bf_is_resp;
7449static int hf_ieee80211_ff_bf_num_sectors;
7450static int hf_ieee80211_ff_bf_num_rx_dmg_ants;
7451static int hf_ieee80211_ff_bf_b12b15;
7452static int hf_ieee80211_ff_bf_rxss_len;
7453static int hf_ieee80211_ff_bf_rxss_rate;
7454static int hf_ieee80211_ff_bf_b10b15;
7455static int hf_ieee80211_addr_nav_da;
7456static int hf_ieee80211_addr_nav_sa;
7457static int hf_ieee80211_ff_sswf;
7458static int hf_ieee80211_ff_sswf_num_rx_dmg_ants;
7459static int hf_ieee80211_ff_sswf_poll_required;
7460static int hf_ieee80211_ff_sswf_total_sectors;
7461static int hf_ieee80211_ff_sswf_reserved1;
7462static int hf_ieee80211_ff_sswf_reserved2;
7463static int hf_ieee80211_ff_sswf_sector_select;
7464static int hf_ieee80211_ff_sswf_dmg_antenna_select;
7465static int hf_ieee80211_ff_sswf_snr_report;
7466static int hf_ieee80211_ff_brp;
7467static int hf_ieee80211_ff_brp_L_RX;
7468static int hf_ieee80211_ff_brp_TX_TRN_REQ;
7469static int hf_ieee80211_ff_brp_MID_REQ;
7470static int hf_ieee80211_ff_brp_BC_REQ;
7471static int hf_ieee80211_ff_brp_MID_GRANT;
7472static int hf_ieee80211_ff_brp_BC_GRANT;
7473static int hf_ieee80211_ff_brp_chan_FBCK_CAP;
7474static int hf_ieee80211_ff_brp_tx_sector;
7475static int hf_ieee80211_ff_brp_other_aid;
7476static int hf_ieee80211_ff_brp_tx_antenna;
7477static int hf_ieee80211_ff_brp_reserved;
7478static int hf_ieee80211_ff_blm;
7479static int hf_ieee80211_ff_blm_unit_index;
7480static int hf_ieee80211_ff_blm_maint_value;
7481static int hf_ieee80211_ff_blm_is_master;
7482static int hf_ieee80211_ff_bic;
7483static int hf_ieee80211_ff_bic_cc_present;
7484static int hf_ieee80211_ff_bic_discovery_mode;
7485static int hf_ieee80211_ff_bic_next_beacon;
7486static int hf_ieee80211_ff_bic_ati_present;
7487static int hf_ieee80211_ff_bic_abft_len;
7488static int hf_ieee80211_ff_bic_fss;
7489static int hf_ieee80211_ff_bic_is_resp;
7490static int hf_ieee80211_ff_bic_next_abft;
7491static int hf_ieee80211_ff_bic_frag_txss;
7492static int hf_ieee80211_ff_bic_txss_span;
7493static int hf_ieee80211_ff_bic_NBI_abft;
7494static int hf_ieee80211_ff_bic_abft_count;
7495static int hf_ieee80211_ff_bic_nabft;
7496static int hf_ieee80211_ff_bic_pcp;
7497static int hf_ieee80211_ff_bic_reserved;
7498static int * const ieee80211_ff_bic_fields[] = {
7499 &hf_ieee80211_ff_bic_cc_present,
7500 &hf_ieee80211_ff_bic_discovery_mode,
7501 &hf_ieee80211_ff_bic_next_beacon,
7502 &hf_ieee80211_ff_bic_ati_present,
7503 &hf_ieee80211_ff_bic_abft_len,
7504 &hf_ieee80211_ff_bic_fss,
7505 &hf_ieee80211_ff_bic_is_resp,
7506 &hf_ieee80211_ff_bic_next_abft,
7507 &hf_ieee80211_ff_bic_frag_txss,
7508 &hf_ieee80211_ff_bic_txss_span,
7509 &hf_ieee80211_ff_bic_NBI_abft,
7510 &hf_ieee80211_ff_bic_abft_count,
7511 &hf_ieee80211_ff_bic_nabft,
7512 &hf_ieee80211_ff_bic_pcp,
7513 &hf_ieee80211_ff_bic_reserved,
7514 NULL((void*)0)
7515};
7516static int hf_ieee80211_ff_dmg_params;
7517static int hf_ieee80211_ff_dmg_params_bss;
7518static int hf_ieee80211_ff_dmg_params_cbap_only;
7519static int hf_ieee80211_ff_dmg_params_cbap_src;
7520static int hf_ieee80211_ff_dmg_params_privacy;
7521static int hf_ieee80211_ff_dmg_params_policy;
7522static int hf_ieee80211_ff_dmg_params_spec_mgmt;
7523static int hf_ieee80211_ff_dmg_params_radio_measure;
7524static int hf_ieee80211_ff_cc;
7525static int hf_ieee80211_ff_cc_abft_resp_addr;
7526static int hf_ieee80211_ff_cc_sp_duration;
7527static int hf_ieee80211_ff_cc_cluster_id;
7528static int hf_ieee80211_ff_cc_role;
7529static int hf_ieee80211_ff_cc_max_mem;
7530static int hf_ieee80211_ff_dmg_action_code;
7531static int hf_ieee80211_ff_dmg_pwr_mgmt;
7532static int hf_ieee80211_ff_subject_address;
7533static int hf_ieee80211_ff_handover_reason;
7534static int hf_ieee80211_ff_handover_remaining_bi;
7535static int hf_ieee80211_ff_handover_result;
7536static int hf_ieee80211_ff_handover_reject_reason;
7537static int hf_ieee80211_ff_destination_reds_aid;
7538static int hf_ieee80211_ff_destination_aid;
7539static int hf_ieee80211_ff_relay_aid;
7540static int hf_ieee80211_ff_source_aid;
7541static int hf_ieee80211_ff_timing_offset;
7542static int hf_ieee80211_ff_sampling_frequency_offset;
7543static int hf_ieee80211_ff_relay_operation_type;
7544static int hf_ieee80211_ff_peer_sta_aid;
7545static int hf_ieee80211_ff_snr;
7546static int hf_ieee80211_ff_internal_angle;
7547static int hf_ieee80211_ff_recommend;
7548static int hf_ieee80211_ff_unprotected_dmg_action_code;
7549static int hf_ieee80211_ff_fst_action_code;
7550static int hf_ieee80211_ff_robust_av_streaming_action_code;
7551static int hf_ieee80211_ff_llt;
7552static int hf_ieee80211_ff_fsts_id;
7553static int hf_ieee80211_ff_mmpdu_len;
7554static int hf_ieee80211_ff_mmpdu_ctrl;
7555static int hf_ieee80211_ff_oct_mmpdu;
7556static int hf_ieee80211_ff_scs_scsid;
7557static int hf_ieee80211_ff_scs_status;
7558static int hf_ieee80211_ff_scs_response_count;
7559
7560#if 0
7561static int hf_ieee80211_ff_rcsi;
7562static int hf_ieee80211_ff_rcsi_aid;
7563#endif
7564static int hf_ieee80211_ff_band_id;
7565static int hf_ieee80211_tag_relay_support;
7566static int hf_ieee80211_tag_relay_use;
7567static int hf_ieee80211_tag_relay_permission;
7568static int hf_ieee80211_tag_AC_power;
7569static int hf_ieee80211_tag_relay_prefer;
7570static int hf_ieee80211_tag_duplex;
7571static int hf_ieee80211_tag_cooperation;
7572static int hf_ieee80211_tag_move;
7573static int hf_ieee80211_tag_size;
7574static int hf_ieee80211_tag_tbtt_offset;
7575static int hf_ieee80211_tag_bi_duration;
7576static int hf_ieee80211_tag_dmg_capa_sta_addr;
7577static int hf_ieee80211_tag_dmg_capa_aid;
7578static int hf_ieee80211_tag_reverse_direction;
7579static int hf_ieee80211_tag_hlts;
7580static int hf_ieee80211_tag_tpc;
7581static int hf_ieee80211_tag_spsh;
7582static int hf_ieee80211_tag_rx_antenna;
7583static int hf_ieee80211_tag_fast_link;
7584static int hf_ieee80211_tag_num_sectors;
7585static int hf_ieee80211_tag_rxss_length;
7586static int hf_ieee80211_tag_reciprocity;
7587static int hf_ieee80211_tag_max_ampdu_exp;
7588static int hf_ieee80211_tag_min_mpdu_spacing;
7589static int hf_ieee80211_tag_ba_flow_control;
7590static int hf_ieee80211_tag_max_sc_rx_mcs;
7591static int hf_ieee80211_tag_max_ofdm_rx_mcs;
7592static int hf_ieee80211_tag_max_sc_tx_mcs;
7593static int hf_ieee80211_tag_max_ofdm_tx_mcs;
7594static int hf_ieee80211_tag_low_power_supported;
7595static int hf_ieee80211_tag_code_rate;
7596static int hf_ieee80211_tag_dtp;
7597static int hf_ieee80211_tag_appdu_supp;
7598static int hf_ieee80211_tag_heartbeat;
7599static int hf_ieee80211_tag_other_aid;
7600static int hf_ieee80211_tag_pattern_recip;
7601static int hf_ieee80211_tag_heartbeat_elapsed;
7602static int hf_ieee80211_tag_grant_ack_supp;
7603static int hf_ieee80211_tag_RXSSTxRate_supp;
7604static int hf_ieee80211_tag_pcp_tddti;
7605static int hf_ieee80211_tag_pcp_PSA;
7606static int hf_ieee80211_tag_pcp_handover;
7607static int hf_ieee80211_tag_pcp_max_assoc;
7608static int hf_ieee80211_tag_pcp_power_src;
7609static int hf_ieee80211_tag_pcp_decenter;
7610static int hf_ieee80211_tag_pcp_forwarding;
7611static int hf_ieee80211_tag_pcp_center;
7612static int hf_ieee80211_tag_sta_beam_track;
7613static int hf_ieee80211_tag_ext_sc_mcs_max_tx;
7614static int hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8;
7615static int hf_ieee80211_tag_ext_sc_mcs_max_rx;
7616static int hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8;
7617static int hf_ieee80211_tag_max_basic_sf_amsdu;
7618static int hf_ieee80211_tag_max_short_sf_amsdu;
7619static int hf_ieee80211_tag_PSRSI;
7620static int hf_ieee80211_tag_min_BHI_duration;
7621static int hf_ieee80211_tag_brdct_sta_info_dur;
7622static int hf_ieee80211_tag_assoc_resp_confirm_time;
7623static int hf_ieee80211_tag_min_pp_duration;
7624static int hf_ieee80211_tag_SP_idle_timeout;
7625static int hf_ieee80211_tag_max_lost_beacons;
7626static int hf_ieee80211_tag_type;
7627static int hf_ieee80211_tag_tap1;
7628static int hf_ieee80211_tag_state1;
7629static int hf_ieee80211_tag_tap2;
7630static int hf_ieee80211_tag_state2;
7631static int hf_ieee80211_tag_allocation_id;
7632static int hf_ieee80211_tag_allocation_type;
7633static int hf_ieee80211_tag_pseudo_static;
7634static int hf_ieee80211_tag_truncatable;
7635static int hf_ieee80211_tag_extendable;
7636static int hf_ieee80211_tag_pcp_active;
7637static int hf_ieee80211_tag_lp_sc_used;
7638static int hf_ieee80211_tag_src_aid;
7639static int hf_ieee80211_tag_dest_aid;
7640static int hf_ieee80211_tag_alloc_start;
7641static int hf_ieee80211_tag_alloc_block_duration;
7642static int hf_ieee80211_tag_num_blocks;
7643static int hf_ieee80211_tag_alloc_block_period;
7644static int hf_ieee80211_tag_aid;
7645static int hf_ieee80211_tag_cbap;
7646static int hf_ieee80211_tag_pp_avail;
7647static int hf_ieee80211_tag_next_ati_start_time;
7648static int hf_ieee80211_tag_next_ati_duration;
7649static int hf_ieee80211_tag_old_bssid;
7650static int hf_ieee80211_tag_new_pcp_addr;
7651static int hf_ieee80211_tag_bssid;
7652static int hf_ieee80211_tag_duplex_relay;
7653static int hf_ieee80211_tag_cooperation_relay;
7654static int hf_ieee80211_tag_tx_mode;
7655static int hf_ieee80211_tag_link_change_interval;
7656static int hf_ieee80211_tag_data_sensing_time;
7657static int hf_ieee80211_tag_first_period;
7658static int hf_ieee80211_tag_second_period;
7659static int hf_ieee80211_tag_initiator;
7660static int hf_ieee80211_tag_tx_train_res;
7661static int hf_ieee80211_tag_rx_train_res;
7662static int hf_ieee80211_tag_tx_trn_ok;
7663static int hf_ieee80211_tag_txss_fbck_req;
7664static int hf_ieee80211_tag_bs_fbck;
7665static int hf_ieee80211_tag_bs_fbck_antenna_id;
7666static int hf_ieee80211_tag_snr_requested;
7667static int hf_ieee80211_tag_channel_measurement_requested;
7668static int hf_ieee80211_tag_number_of_taps_requested;
7669static int hf_ieee80211_tag_sector_id_order_req;
7670static int hf_ieee80211_tag_snr_present;
7671static int hf_ieee80211_tag_channel_measurement_present;
7672static int hf_ieee80211_tag_tap_delay_present;
7673static int hf_ieee80211_tag_number_of_taps_present;
7674static int hf_ieee80211_tag_number_of_measurement;
7675static int hf_ieee80211_tag_sector_id_order_present;
7676static int hf_ieee80211_tag_number_of_beams;
7677static int hf_ieee80211_tag_mid_extension;
7678static int hf_ieee80211_tag_capability_request;
7679static int hf_ieee80211_tag_beam_refine_reserved;
7680static int hf_ieee80211_tag_nextpcp_list;
7681static int hf_ieee80211_tag_nextpcp_token;
7682static int hf_ieee80211_tag_remaining_BI;
7683static int hf_ieee80211_tag_request_token;
7684static int hf_ieee80211_tag_bi_start_time;
7685static int hf_ieee80211_tag_sleep_cycle;
7686static int hf_ieee80211_tag_num_awake_bis;
7687static int hf_ieee80211_tag_tspec_allocation_id;
7688static int hf_ieee80211_tag_tspec_allocation_type;
7689static int hf_ieee80211_tag_tspec_allocation_format;
7690static int hf_ieee80211_tag_tspec_pseudo_static;
7691static int hf_ieee80211_tag_tspec_truncatable;
7692static int hf_ieee80211_tag_tspec_extendable;
7693static int hf_ieee80211_tag_tspec_lp_sc_used;
7694static int hf_ieee80211_tag_tspec_up;
7695static int hf_ieee80211_tag_tspec_dest_aid;
7696static int hf_ieee80211_tag_tspec_allocation_period;
7697static int hf_ieee80211_tag_tspec_min_allocation;
7698static int hf_ieee80211_tag_tspec_max_allocation;
7699static int hf_ieee80211_tag_tspec_min_duration;
7700static int hf_ieee80211_tag_tspec_num_of_constraints;
7701static int hf_ieee80211_tag_tspec_tsconst_start_time;
7702static int hf_ieee80211_tag_tspec_tsconst_duration;
7703static int hf_ieee80211_tag_tspec_tsconst_period;
7704static int hf_ieee80211_tag_tspec_tsconst_interferer_mac;
7705static int hf_ieee80211_tag_channel_measurement_feedback_relative_I;
7706static int hf_ieee80211_tag_channel_measurement_feedback_relative_Q;
7707static int hf_ieee80211_tag_channel_measurement_feedback_tap_delay;
7708static int hf_ieee80211_tag_channel_measurement_feedback_sector_id;
7709static int hf_ieee80211_tag_channel_measurement_feedback_antenna_id;
7710static int hf_ieee80211_tag_awake_window;
7711static int hf_ieee80211_tag_addba_ext_no_frag;
7712static int hf_ieee80211_tag_addba_ext_he_fragmentation_operation;
7713static int hf_ieee80211_tag_addba_ext_reserved;
7714static int hf_ieee80211_tag_addba_ext_buffer_size;
7715static int hf_ieee80211_tag_multi_band_ctrl_sta_role;
7716static int hf_ieee80211_tag_multi_band_ctrl_addr_present;
7717static int hf_ieee80211_tag_multi_band_ctrl_cipher_present;
7718static int hf_ieee80211_tag_multi_band_oper_class;
7719static int hf_ieee80211_tag_multi_band_channel_number;
7720static int hf_ieee80211_tag_multi_band_tsf_offset;
7721static int hf_ieee80211_tag_multi_band_conn_ap;
7722static int hf_ieee80211_tag_multi_band_conn_pcp;
7723static int hf_ieee80211_tag_multi_band_conn_dls;
7724static int hf_ieee80211_tag_multi_band_conn_tdls;
7725static int hf_ieee80211_tag_multi_band_conn_ibss;
7726static int hf_ieee80211_tag_multi_band_fst_timeout;
7727static int hf_ieee80211_tag_multi_band_sta_mac;
7728static int hf_ieee80211_tag_activity;
7729static int hf_ieee80211_tag_dmg_link_adapt_mcs;
7730static int hf_ieee80211_tag_dmg_link_adapt_link_margin;
7731static int hf_ieee80211_tag_ref_timestamp;
7732static int hf_ieee80211_tag_switching_stream_non_qos;
7733static int hf_ieee80211_tag_switching_stream_param_num;
7734static int hf_ieee80211_tag_switching_stream_old_tid;
7735static int hf_ieee80211_tag_switching_stream_old_direction;
7736static int hf_ieee80211_tag_switching_stream_new_tid;
7737static int hf_ieee80211_tag_switching_stream_new_direction;
7738static int hf_ieee80211_tag_switching_stream_new_valid_id;
7739static int hf_ieee80211_tag_switching_stream_llt_type;
7740
7741static int hf_ieee80211_mysterious_extra_stuff;
7742
7743static int hf_ieee80211_mscs_descriptor_type;
7744static int hf_ieee80211_mscs_user_prio_control_reserved;
7745static int hf_ieee80211_user_prio_bitmap;
7746static int hf_ieee80211_user_prio_bitmap_bit0;
7747static int hf_ieee80211_user_prio_bitmap_bit1;
7748static int hf_ieee80211_user_prio_bitmap_bit2;
7749static int hf_ieee80211_user_prio_bitmap_bit3;
7750static int hf_ieee80211_user_prio_bitmap_bit4;
7751static int hf_ieee80211_user_prio_bitmap_bit5;
7752static int hf_ieee80211_user_prio_bitmap_bit6;
7753static int hf_ieee80211_user_prio_bitmap_bit7;
7754static int hf_ieee80211_user_prio_limit;
7755static int hf_ieee80211_user_prio_reserved;
7756static int hf_ieee80211_stream_timeout_reserved;
7757static int hf_ieee80211_stream_timeout;
7758static int hf_ieee80211_mscs_subelement_id;
7759static int hf_ieee80211_mscs_subelement_len;
7760static int hf_ieee80211_mscs_subelement_data;
7761
7762static int hf_ieee80211_intra_access_prio;
7763static int hf_ieee80211_intra_access_prio_user_prio;
7764static int hf_ieee80211_intra_access_prio_alt_queue;
7765static int hf_ieee80211_intra_access_prio_drop_elig;
7766static int hf_ieee80211_intra_access_prio_reserved;
7767
7768static int hf_ieee80211_scs_descriptor_scsid;
7769static int hf_ieee80211_scs_descriptor_type;
7770
7771static int hf_ieee80211_esp_access_category;
7772static int hf_ieee80211_esp_reserved;
7773static int hf_ieee80211_esp_data_format;
7774static int hf_ieee80211_esp_ba_windows_size;
7775static int hf_ieee80211_esp_est_air_time_frac;
7776static int hf_ieee80211_esp_data_ppdu_duration_target;
7777static int hf_ieee80211_estimated_service_params;
7778
7779static int hf_ieee80211_fcg_new_channel_number;
7780static int hf_ieee80211_fcg_extra_info;
7781static int hf_ieee80211_sae_password_identifier;
7782
7783static int hf_ieee80211_sae_anti_clogging_token;
7784
7785static int hf_ieee80211_tag_fils_indication_info_nr_pk;
7786static int hf_ieee80211_tag_fils_indication_info_nr_realm;
7787static int hf_ieee80211_tag_fils_indication_info_ip_config;
7788static int hf_ieee80211_tag_fils_indication_info_cache_id_included;
7789static int hf_ieee80211_tag_fils_indication_info_hessid_included;
7790static int hf_ieee80211_tag_fils_indication_info_ska_without_pfs;
7791static int hf_ieee80211_tag_fils_indication_info_ska_with_pfs;
7792static int hf_ieee80211_tag_fils_indication_info_pka;
7793static int hf_ieee80211_tag_fils_indication_info_reserved;
7794static int hf_ieee80211_tag_fils_indication_cache_identifier;
7795static int hf_ieee80211_tag_fils_indication_hessid;
7796static int hf_ieee80211_tag_fils_indication_realm_list;
7797static int hf_ieee80211_tag_fils_indication_realm_identifier;
7798static int hf_ieee80211_tag_fils_indication_public_key_list;
7799static int hf_ieee80211_tag_fils_indication_public_key_type;
7800static int hf_ieee80211_tag_fils_indication_public_key_length;
7801static int hf_ieee80211_tag_fils_indication_public_key_indicator;
7802
7803static int hf_ieee80211_qos_mgmt_attribute_id;
7804static int hf_ieee80211_qos_mgmt_attribute_len;
7805static int hf_ieee80211_qos_mgmt_start_port_range;
7806static int hf_ieee80211_qos_mgmt_end_port_range;
7807static int hf_ieee80211_qos_mgmt_dscp_pol_id;
7808static int hf_ieee80211_qos_mgmt_dscp_pol_req_type;
7809static int hf_ieee80211_qos_mgmt_dscp_pol_dscp;
7810static int hf_ieee80211_qos_mgmt_domain_name;
7811static int hf_ieee80211_qos_mgmt_unknown_attr;
7812
7813static int hf_ieee80211_ext_tag;
7814static int hf_ieee80211_ext_tag_number;
7815static int hf_ieee80211_ext_tag_length;
7816static int hf_ieee80211_ext_tag_data;
7817
7818static int hf_ieee80211_fils_req_params_parameter_control_bitmap;
7819static int hf_ieee80211_fils_req_params_fils_criteria_present;
7820static int hf_ieee80211_fils_req_params_max_delay_limit_present;
7821static int hf_ieee80211_fils_req_params_minimum_data_rate_present;
7822static int hf_ieee80211_fils_req_params_rcpi_limit_present;
7823static int hf_ieee80211_fils_req_params_oui_response_criteria_present;
7824static int hf_ieee80211_fils_req_params_reserved;
7825static int hf_ieee80211_fils_req_params_max_channel_time;
7826static int hf_ieee80211_fils_req_params_fils_criteria;
7827static int hf_ieee80211_fils_req_params_fils_criteria_bss_delay;
7828static int hf_ieee80211_fils_req_params_fils_criteria_phy_support;
7829static int hf_ieee80211_fils_req_params_fils_criteria_reserved;
7830static int hf_ieee80211_fils_req_params_max_delay_limit;
7831static int hf_ieee80211_fils_req_params_minimum_data_rate;
7832static int hf_ieee80211_fils_req_params_rcpi_limit;
7833static int hf_ieee80211_fils_req_params_oui_response_criteria;
7834
7835static int hf_ieee80211_fils_session;
7836static int hf_ieee80211_fils_encrypted_data;
7837static int hf_ieee80211_fils_nonce;
7838
7839/* wfa 60g ie tree */
7840static int hf_ieee80211_wfa_60g_attr;
7841static int hf_ieee80211_wfa_60g_attr_id;
7842static int hf_ieee80211_wfa_60g_attr_len;
7843
7844static int hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr;
7845static int hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames;
7846static int hf_ieee80211_wfa_60g_attr_cap_reserved;
7847
7848/* ************************************************************************* */
7849/* 802.11AX fields */
7850/* ************************************************************************* */
7851static int hf_ieee80211_he_mac_capabilities;
7852static int hf_ieee80211_he_htc_he_support;
7853static int hf_ieee80211_he_twt_requester_support;
7854static int hf_ieee80211_he_twt_responder_support;
7855static int hf_ieee80211_he_dynamic_fragmentation_support;
7856static int hf_ieee80211_he_max_number_fragmented_msdus;
7857static int hf_ieee80211_he_min_fragment_size;
7858static int hf_ieee80211_he_trigger_frame_mac_padding_dur;
7859static int hf_ieee80211_he_multi_tid_aggregation_rx_support;
7860static int hf_ieee80211_he_he_link_adaptation_support;
7861static int hf_ieee80211_he_all_ack_support;
7862static int hf_ieee80211_he_trs_support;
7863static int hf_ieee80211_he_bsr_support;
7864static int hf_ieee80211_he_broadcast_twt_support;
7865static int hf_ieee80211_he_32_bit_ba_bitmap_support;
7866static int hf_ieee80211_he_mu_cascading_support;
7867static int hf_ieee80211_he_ack_enabled_aggregation_support;
7868static int hf_ieee80211_he_reserved_b24;
7869static int hf_ieee80211_he_om_control_support;
7870static int hf_ieee80211_he_ofdma_ra_support;
7871static int hf_ieee80211_he_max_a_mpdu_length_exponent_ext;
7872static int hf_ieee80211_he_a_msdu_fragmentation_support;
7873static int hf_ieee80211_he_flexible_twt_schedule_support;
7874static int hf_ieee80211_he_rx_control_frame_to_multibss;
7875static int hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation;
7876static int hf_ieee80211_he_qtp_support;
7877static int hf_ieee80211_he_bqr_support;
7878static int hf_ieee80211_he_psr_responder;
7879static int hf_ieee80211_he_ndp_feedback_report_support;
7880static int hf_ieee80211_he_ops_support;
7881static int hf_ieee80211_he_a_msdu_in_a_mpdu_support;
7882static int hf_ieee80211_he_multi_tid_aggregation_tx_support;
7883static int hf_ieee80211_he_subchannel_selective_trans_support;
7884static int hf_ieee80211_he_2_996_tone_ru_support;
7885static int hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support;
7886static int hf_ieee80211_he_dynamic_sm_power_save;
7887static int hf_ieee80211_he_punctured_sounding_support;
7888static int hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support;
7889static int hf_ieee80211_he_reserved_bit_18;
7890static int hf_ieee80211_he_reserved_bit_19;
7891static int hf_ieee80211_he_reserved_bit_25;
7892static int hf_ieee80211_he_reserved_bit_29;
7893static int hf_ieee80211_he_reserved_bit_34;
7894static int hf_ieee80211_he_reserved_bits_5_7;
7895static int hf_ieee80211_he_reserved_bits_8_9;
7896static int hf_ieee80211_he_reserved_bits_15_16;
7897static int hf_ieee80211_he_phy_reserved_b0;
7898static int hf_ieee80211_he_phy_cap_reserved_b0;
7899static int hf_ieee80211_he_phy_chan_width_set;
7900static int hf_ieee80211_he_40mhz_channel_2_4ghz;
7901static int hf_ieee80211_he_40_and_80_mhz_5ghz;
7902static int hf_ieee80211_he_160_mhz_5ghz;
7903static int hf_ieee80211_he_160_80_plus_80_mhz_5ghz;
7904static int hf_ieee80211_he_242_tone_rus_in_2_4ghz;
7905static int hf_ieee80211_he_242_tone_rus_in_5ghz;
7906static int hf_ieee80211_he_5ghz_b0_reserved;
7907static int hf_ieee80211_he_5ghz_b4_reserved;
7908static int hf_ieee80211_he_24ghz_b1_reserved;
7909static int hf_ieee80211_he_24ghz_b2_reserved;
7910static int hf_ieee80211_he_24ghz_b3_reserved;
7911static int hf_ieee80211_he_24ghz_b5_reserved;
7912static int hf_ieee80211_he_chan_width_reserved;
7913static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss;
7914static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss;
7915static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss;
7916static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss;
7917static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss;
7918static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss;
7919static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss;
7920static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss;
7921static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss;
7922static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss;
7923static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss;
7924static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss;
7925static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss;
7926static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss;
7927static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss;
7928static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss;
7929static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss;
7930static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss;
7931static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss;
7932static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss;
7933static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss;
7934static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss;
7935static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss;
7936static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss;
7937static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss;
7938static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss;
7939static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss;
7940static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss;
7941static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss;
7942static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss;
7943static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss;
7944static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss;
7945static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss;
7946static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss;
7947static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss;
7948static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss;
7949static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss;
7950static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss;
7951static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss;
7952static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss;
7953static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss;
7954static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss;
7955static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss;
7956static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss;
7957static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss;
7958static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss;
7959static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss;
7960static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss;
7961static int hf_ieee80211_he_rx_he_mcs_map_lte_80;
7962static int hf_ieee80211_he_tx_he_mcs_map_lte_80;
7963static int hf_ieee80211_he_rx_he_mcs_map_160;
7964static int hf_ieee80211_he_tx_he_mcs_map_160;
7965static int hf_ieee80211_he_rx_he_mcs_map_80_80;
7966static int hf_ieee80211_he_tx_he_mcs_map_80_80;
7967static int hf_ieee80211_he_ppe_thresholds_nss;
7968static int hf_ieee80211_he_ppe_thresholds_ru_index_bitmask;
7969static int hf_ieee80211_he_ppe_ppet16;
7970static int hf_ieee80211_he_ppe_ppet8;
7971static int hf_ieee80211_he_phy_b8_to_b23;
7972static int hf_ieee80211_he_phy_cap_punctured_preamble_rx;
7973static int hf_ieee80211_he_phy_cap_device_class;
7974static int hf_ieee80211_he_phy_cap_ldpc_coding_in_payload;
7975static int hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us;
7976static int hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts;
7977static int hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us;
7978static int hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz;
7979static int hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz;
7980static int hf_ieee80211_he_phy_cap_doppler_tx;
7981static int hf_ieee80211_he_phy_cap_doppler_rx;
7982static int hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo;
7983static int hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo;
7984static int hf_ieee80211_he_phy_b24_to_b39;
7985static int hf_ieee80211_he_phy_cap_dcm_max_constellation_tx;
7986static int hf_ieee80211_he_phy_cap_dcm_max_nss_tx;
7987static int hf_ieee80211_he_phy_cap_dcm_max_constellation_rx;
7988static int hf_ieee80211_he_phy_cap_dcm_max_nss_rx;
7989static int hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu;
7990static int hf_ieee80211_he_phy_cap_su_beamformer;
7991static int hf_ieee80211_he_phy_cap_su_beamformee;
7992static int hf_ieee80211_he_phy_cap_mu_beamformer;
7993static int hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz;
7994static int hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz;
7995static int hf_ieee80211_he_phy_b40_to_b55;
7996static int hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80;
7997static int hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80;
7998static int hf_ieee80211_he_phy_cap_ng_eq_16_su_fb;
7999static int hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb;
8000static int hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb;
8001static int hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb;
8002static int hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb;
8003static int hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb;
8004static int hf_ieee80211_he_phy_cap_triggered_cqi_fb;
8005static int hf_ieee80211_he_phy_cap_partial_bw_extended_range;
8006static int hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo;
8007static int hf_ieee80211_he_phy_cap_ppe_threshold_present;
8008static int hf_ieee80211_he_phy_b56_to_b71;
8009static int hf_ieee80211_he_phy_cap_psr_based_sr_support;
8010static int hf_ieee80211_he_phy_cap_power_boost_factor_ar_support;
8011static int hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi;
8012static int hf_ieee80211_he_phy_cap_max_nc;
8013static int hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz;
8014static int hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz;
8015static int hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi;
8016static int hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band;
8017static int hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu;
8018static int hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu;
8019static int hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi;
8020static int hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf;
8021static int hf_ieee80211_he_phy_b72_to_b87;
8022static int hf_ieee80211_he_phy_cap_dcm_max_ru;
8023static int hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support;
8024static int hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback;
8025static int hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support;
8026static int hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support;
8027static int hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb;
8028static int hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb;
8029static int hf_ieee80211_he_phy_cap_nominal_packet_padding;
8030static int hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max;
8031static int hf_ieee80211_he_phy_cap_b81_b87_reserved;
8032static int hf_ieee80211_he_operation_parameter;
8033static int hf_ieee80211_he_operation_default_pe_duration;
8034static int hf_ieee80211_he_operation_twt_required;
8035static int hf_ieee80211_he_operation_txop_duration_rts_threshold;
8036static int hf_ieee80211_he_operation_vht_operation_information_present;
8037static int hf_ieee80211_he_operation_co_hosted_bss;
8038static int hf_ieee80211_he_operation_er_su_disable;
8039static int hf_ieee80211_he_operation_6ghz_operation_information_present;
8040static int hf_ieee80211_he_operation_reserved_b16_b23;
8041static int hf_ieee80211_he_bss_color_information;
8042static int hf_ieee80211_he_bss_color_info_bss_color;
8043static int hf_ieee80211_he_bss_color_partial_bss_color;
8044static int hf_ieee80211_he_bss_color_bss_color_disabled;
8045static int hf_ieee80211_he_operation_basic_mcs;
8046static int hf_ieee80211_he_oper_max_he_mcs_for_1_ss;
8047static int hf_ieee80211_he_oper_max_he_mcs_for_2_ss;
8048static int hf_ieee80211_he_oper_max_he_mcs_for_3_ss;
8049static int hf_ieee80211_he_oper_max_he_mcs_for_4_ss;
8050static int hf_ieee80211_he_oper_max_he_mcs_for_5_ss;
8051static int hf_ieee80211_he_oper_max_he_mcs_for_6_ss;
8052static int hf_ieee80211_he_oper_max_he_mcs_for_7_ss;
8053static int hf_ieee80211_he_oper_max_he_mcs_for_8_ss;
8054static int hf_ieee80211_he_operation_channel_width;
8055static int hf_ieee80211_he_operation_channel_center_freq_0;
8056static int hf_ieee80211_he_operation_channel_center_freq_1;
8057static int hf_ieee80211_he_operation_max_co_hosted_bssid_indicator;
8058static int hf_ieee80211_he_operation_6ghz_primary_channel;
8059static int hf_ieee80211_he_operation_6ghz_control;
8060static int hf_ieee80211_he_operation_6ghz_control_channel_width;
8061static int hf_ieee80211_he_operation_6ghz_control_duplicate_beacon;
8062static int hf_ieee80211_he_operation_6ghz_control_regulatory_info;
8063static int hf_ieee80211_he_operation_6ghz_control_reserved;
8064static int hf_ieee80211_he_operation_6ghz_channel_center_freq_0;
8065static int hf_ieee80211_he_operation_6ghz_channel_center_freq_1;
8066static int hf_ieee80211_he_operation_6ghz_minimum_rate;
8067static int hf_ieee80211_he_muac_aci_aifsn;
8068static int hf_ieee80211_he_muac_aifsn;
8069static int hf_ieee80211_he_muac_acm;
8070static int hf_ieee80211_he_muac_aci;
8071static int hf_ieee80211_he_muac_reserved;
8072static int hf_ieee80211_he_mu_edca_timer;
8073static int hf_ieee80211_he_muac_ecwmin_ecwmax;
8074static int hf_ieee80211_he_srp_disallowed;
8075static int hf_ieee80211_he_non_srg_obss_pd_sr_disallowed;
8076static int hf_ieee80211_he_non_srg_offset_present;
8077static int hf_ieee80211_he_srg_information_present;
8078static int hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed;
8079static int hf_ieee80211_he_sr_control_reserved;
8080static int hf_ieee80211_he_spatial_reuse_sr_control;
8081static int hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset;
8082static int hf_ieee80211_he_spatial_srg_obss_pd_min_offset;
8083static int hf_ieee80211_he_spatial_srg_obss_pd_max_offset;
8084static int hf_ieee80211_he_spatial_srg_bss_color_bitmap;
8085static int hf_ieee80211_he_spatial_srg_partial_bssid_bitmap;
8086static int hf_ieee80211_he_ess_report_planned_ess;
8087static int hf_ieee80211_he_ess_report_edge_of_ess;
8088static int hf_ieee80211_he_resource_request_buffer_thresh;
8089static int hf_ieee80211_he_bss_color_change_new_color_info;
8090static int hf_ieee80211_he_new_bss_color_info_color;
8091static int hf_ieee80211_he_new_bss_color_info_reserved;
8092static int hf_ieee80211_he_bss_color_change_switch_countdown;
8093static int hf_ieee80211_he_ess_report_info_field;
8094static int hf_ieee80211_he_ess_report_recommend_transition_thresh;
8095static int hf_ieee80211_he_ops_duration;
8096static int hf_ieee80211_he_uora_field;
8097static int hf_ieee80211_he_uora_eocwmin;
8098static int hf_ieee80211_he_uora_owcwmax;
8099static int hf_ieee80211_he_uora_reserved;
8100
8101static int hf_ieee80211_max_channel_switch_time;
8102
8103static int hf_ieee80211_oci_operating_class;
8104static int hf_ieee80211_oci_primary_channel_number;
8105static int hf_ieee80211_oci_frequency_segment_1;
8106static int hf_ieee80211_oci_oct_operating_class;
8107static int hf_ieee80211_oci_oct_primary_channel_number;
8108static int hf_ieee80211_oci_oct_frequency_segment_1;
8109
8110static int hf_ieee80211_multiple_bssid_configuration_bssid_count;
8111static int hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity;
8112static int hf_ieee80211_known_bssid_bitmap;
8113static int hf_ieee80211_short_ssid;
8114
8115static int hf_ieee80211_non_inheritance_element_id_list_length;
8116static int hf_ieee80211_non_inheritance_element_id_list_element_id;
8117static int hf_ieee80211_non_inheritance_element_id_ext_list_length;
8118static int hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext;
8119
8120static int hf_ieee80211_rejected_groups_group;
8121
8122static int hf_ieee80211_twt_bcast_flow;
8123static int hf_ieee80211_twt_individual_flow;
8124static int hf_ieee80211_twt_individual_flow_id;
8125static int hf_ieee80211_twt_individual_reserved;
8126static int hf_ieee80211_twt_bcast_id;
8127static int hf_ieee80211_twt_neg_type;
8128static int hf_ieee80211_twt_neg_type2_reserved1;
8129static int hf_ieee80211_twt_neg_type2_reserved2;
8130static int hf_ieee80211_twt_bcast_teardown_all;
8131static int hf_ieee80211_twt_bcast_teardown_all_twt;
8132static int hf_ieee80211_twt_bcast_twt_id_reserved;
8133static int hf_ieee80211_twt_bcast_neg_type_reserved;
8134
8135static int hf_ieee80211_tag_twt_control_field;
8136static int hf_ieee80211_tag_twt_ndp_paging_indicator;
8137static int hf_ieee80211_tag_twt_responder_pm_mode;
8138static int hf_ieee80211_tag_twt_neg_type;
8139static int hf_ieee80211_tag_twt_info_frame_disabled;
8140static int hf_ieee80211_tag_twt_wake_duration_unit;
8141static int hf_ieee80211_tag_twt_link_id_bitmap_present;
8142static int hf_ieee80211_tag_twt_aligned_twt;
8143
8144static int hf_ieee80211_tag_twt_req_type_field;
8145static int hf_ieee80211_tag_twt_req_type_req;
8146static int hf_ieee80211_tag_twt_req_type_setup_cmd;
8147static int hf_ieee80211_tag_twt_req_type_trigger;
8148static int hf_ieee80211_tag_twt_req_type_implicit;
8149static int hf_ieee80211_tag_twt_req_type_flow_type;
8150static int hf_ieee80211_tag_twt_req_type_flow_id;
8151static int hf_ieee80211_tag_twt_req_type_wake_int_exp;
8152static int hf_ieee80211_tag_twt_req_type_prot;
8153static int hf_ieee80211_tag_twt_req_type_last_bcst_parm_set;
8154static int hf_ieee80211_tag_twt_req_type_bcst_twt_recom;
8155static int hf_ieee80211_tag_twt_req_type_aligned;
8156
8157static int hf_ieee80211_tag_twt_ndp_paging_field;
8158static int hf_ieee80211_tag_twt_ndp_paging_p_id;
8159static int hf_ieee80211_tag_twt_ndp_max_ndp_paging_period;
8160static int hf_ieee80211_tag_twt_ndp_partial_tsf_offset;
8161static int hf_ieee80211_tag_twt_ndp_action;
8162static int hf_ieee80211_tag_twt_ndp_min_sleep_duration;
8163static int hf_ieee80211_tag_twt_ndp_reserved;
8164static int hf_ieee80211_tag_twt_link_id_bitmap;
8165static int hf_ieee80211_tag_twt_aligned_twt_link_bitmap;
8166static int hf_ieee80211_tag_twt_broadcast_info;
8167static int hf_ieee80211_tag_twt_bcast_info_persistence;
8168static int hf_ieee80211_tag_twt_bcast_info_id;
8169static int hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present;
8170static int hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info;
8171static int hf_ieee80211_tag_twt_traffic_info_control;
8172static int hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid;
8173static int hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid;
8174static int hf_ieee80211_tag_twt_traffic_info_reserved;
8175static int hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap;
8176static int hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap;
8177
8178static int hf_ieee80211_tag_twt_target_wake_time;
8179static int hf_ieee80211_tag_twt_target_wake_time_short;
8180static int hf_ieee80211_tag_twt_nom_min_twt_wake_dur;
8181static int hf_ieee80211_tag_twt_wake_interval_mantissa;
8182static int hf_ieee80211_tag_twt_channel;
8183
8184static int hf_ieee80211_tag_rsnx;
8185/* octet 1 */
8186static int hf_ieee80211_tag_rsnx_length;
8187static int hf_ieee80211_tag_rsnx_protected_twt_operations_support;
8188static int hf_ieee80211_tag_rsnx_sae_hash_to_element;
8189static int hf_ieee80211_tag_rsnx_sae_pk;
8190static int hf_ieee80211_tag_rsnx_protected_wur_frame_support;
8191/* octet 2 */
8192static int hf_ieee80211_tag_rsnx_secure_ltf_support;
8193static int hf_ieee80211_tag_rsnx_secure_rtt_supported;
8194static int hf_ieee80211_tag_rsnx_urnm_mfpr_x20;
8195static int hf_ieee80211_tag_rsnx_protected_announce_support;
8196static int hf_ieee80211_tag_rsnx_pbac;
8197static int hf_ieee80211_tag_rsnx_extended_s1g_action_protection;
8198static int hf_ieee80211_tag_rsnx_spp_amsdu_capable;
8199static int hf_ieee80211_tag_rsnx_urnm_mfpr;
8200static int hf_ieee80211_tag_rsnx_reserved;
8201
8202static int hf_ieee80211_wfa_rsn_selection;
8203static int hf_ieee80211_wfa_rsn_or_link_kde_link_id;
8204
8205static int hf_ieee80211_nonap_sta_regulatory_conn;
8206static int hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid;
8207static int hf_ieee80211_nonap_sta_regu_conn_indoor_ap;
8208static int hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid;
8209static int hf_ieee80211_nonap_sta_regu_conn_sp_ap;
8210static int hf_ieee80211_nonap_sta_regu_conn_reserved;
8211
8212static int hf_ieee80211_tag_channel_usage_mode;
8213
8214static int hf_ieee80211_ff_count;
8215
8216static int hf_ieee80211_tag_dms_id;
8217static int hf_ieee80211_tag_dms_length;
8218static int hf_ieee80211_tag_dms_req_type;
8219static int hf_ieee80211_tag_dms_resp_type;
8220static int hf_ieee80211_tag_dms_last_seq_control;
8221
8222/* ************************************************************************* */
8223/* RFC 8110 fields */
8224/* ************************************************************************* */
8225static int hf_ieee80211_owe_dh_parameter_group;
8226static int hf_ieee80211_owe_dh_parameter_public_key;
8227
8228/* ************************************************************************* */
8229/* Protocol trees */
8230/* ************************************************************************* */
8231static int ett_80211;
8232static int ett_proto_flags;
8233static int ett_cap_tree;
8234static int ett_fc_tree;
8235static int ett_cntrl_wrapper_fc;
8236static int ett_cntrl_wrapper_payload;
8237static int ett_fragments;
8238static int ett_fragment;
8239static int ett_block_ack;
8240static int ett_block_ack_tid;
8241static int ett_block_ack_request_control;
8242static int ett_block_ack_bitmap;
8243static int ett_block_ack_request_multi_sta_aid_tid;
8244static int ett_multi_sta_block_ack;
8245static int ett_ath_cap_tree;
8246static int ett_extreme_mesh_services_tree;
8247static int ett_addr;
8248
8249static int ett_80211_mgt;
8250static int ett_fixed_parameters;
8251static int ett_tagged_parameters;
8252static int ett_tag_bmapctl_tree;
8253static int ett_s1g_pvb_tree;
8254static int ett_s1g_pvb_eb_tree;
8255static int ett_s1g_pvb_block_control_byte;
8256static int ett_s1g_pvb_block_bitmap_tree;
8257static int ett_s1g_pvb_subblock_tree;
8258static int ett_s1g_pvb_olb_tree;
8259static int ett_s1g_pvb_olb_subblock;
8260static int ett_s1g_pvb_ade_tree;
8261static int ett_s1g_pvb_ade_control;
8262static int ett_tag_country_fnm_tree;
8263static int ett_tag_country_rcc_tree;
8264static int ett_qos_parameters;
8265static int ett_qos_ps_buf_state;
8266static int ett_wep_parameters;
8267static int ett_msh_control;
8268static int ett_hwmp_targ_flags_tree;
8269static int ett_mesh_chswitch_flag_tree;
8270static int ett_mesh_config_cap_tree;
8271static int ett_mesh_formation_info_tree;
8272static int ett_bcn_timing_rctrl_tree;
8273static int ett_bcn_timing_info_tree;
8274static int ett_gann_flags_tree;
8275static int ett_pxu_proxy_info_tree;
8276static int ett_pxu_proxy_info_flags_tree;
8277
8278static int ett_rsn_gcs_tree;
8279static int ett_rsn_pcs_tree;
8280static int ett_rsn_sub_pcs_tree;
8281static int ett_rsn_akms_tree;
8282static int ett_rsn_sub_akms_tree;
8283static int ett_rsn_cap_tree;
8284static int ett_rsn_pmkid_tree;
8285static int ett_rsn_gmcs_tree;
8286
8287static int ett_kde_mlo_link_info;
8288
8289static int ett_wpa_mcs_tree;
8290static int ett_wpa_ucs_tree;
8291static int ett_wpa_sub_ucs_tree;
8292static int ett_wpa_akms_tree;
8293static int ett_wpa_sub_akms_tree;
8294static int ett_wme_ac;
8295static int ett_wme_aci_aifsn;
8296static int ett_wme_ecw;
8297static int ett_wme_qos_info;
8298
8299static int ett_update_edca_info;
8300
8301static int ett_ht_cap_tree;
8302static int ett_ampduparam_tree;
8303static int ett_mcsset_tree;
8304static int ett_mcsbit_tree;
8305static int ett_htex_cap_tree;
8306static int ett_txbf_tree;
8307static int ett_antsel_tree;
8308static int ett_hta_cap_tree;
8309static int ett_hta_cap1_tree;
8310static int ett_hta_cap2_tree;
8311
8312static int ett_s1g_ndp;
8313static int ett_s1g_ndp_ack;
8314static int ett_s1g_ndp_cts;
8315static int ett_s1g_ndp_cf_end;
8316static int ett_s1g_ndp_ps_poll;
8317static int ett_s1g_ndp_ps_poll_ack;
8318static int ett_s1g_ndp_block_ack;
8319static int ett_s1g_ndp_beamforming_report_poll;
8320static int ett_s1g_ndp_paging;
8321static int ett_s1g_ndp_probe;
8322static int ett_pv1_sid;
8323static int ett_pv1_sid_field;
8324static int ett_pv1_seq_control;
8325static int ett_ieee80211_s1g_capabilities_info;
8326static int ett_ieee80211_s1g_capabilities;
8327static int ett_s1g_cap_byte1;
8328static int ett_s1g_cap_byte2;
8329static int ett_s1g_cap_byte3;
8330static int ett_s1g_cap_byte4;
8331static int ett_s1g_cap_byte5;
8332static int ett_s1g_cap_byte6;
8333static int ett_s1g_cap_byte7;
8334static int ett_s1g_cap_byte8;
8335static int ett_s1g_cap_byte9;
8336static int ett_s1g_cap_byte10;
8337static int ett_ieee80211_s1g_sup_mcs_and_nss_set;
8338static int ett_s1g_mcs_and_mcs_set;
8339static int ett_s1g_operation_info;
8340static int ett_s1g_channel_width;
8341static int ett_s1g_subchannel_selective_transmission;
8342static int ett_s1g_raw_assignment;
8343static int ett_s1g_raw_assn_tree;
8344static int ett_s1g_raw_control;
8345static int ett_s1g_raw_slot_def;
8346static int ett_s1g_raw_group_subfield;
8347static int ett_s1g_raw_channel_indication;
8348static int ett_s1g_page_slice_control;
8349static int ett_s1g_aid_request_mode;
8350static int ett_s1g_aid_characteristic;
8351static int ett_s1g_sector_operation;
8352static int ett_tack_info;
8353static int ett_ieee80211_s1g_auth_control;
8354static int ett_s1g_relay_control;
8355static int ett_s1g_relay_function;
8356static int ett_ieee80211_s1g_addr_list;
8357static int ett_ieee80211_s1g_reach_addr;
8358static int ett_s1g_relay_discovery_control;
8359static int ett_ieee80211_s1g_aid_entry;
8360static int ett_s1g_probe_resp_subfield_0;
8361static int ett_s1g_header_comp_control;
8362static int ett_pv1_mgmt_action;
8363static int ett_pv1_mgmt_action_no_ack;
8364static int ett_pv1_cntl_stack;
8365static int ett_pv1_cntl_bat;
8366
8367static int ett_htc_tree;
8368static int ett_htc_he_a_control;
8369static int ett_mfb_subtree;
8370static int ett_lac_subtree;
8371static int ett_ieee80211_buffer_status_report;
8372static int ett_ieee80211_a_control_padding;
8373static int ett_ieee80211_a_control_ones;
8374static int ett_ieee80211_triggered_response_schedule;
8375static int ett_ieee80211_control_om;
8376static int ett_ieee80211_hla_control;
8377static int ett_ieee80211_control_uph;
8378static int ett_ieee80211_buffer_control_bqr;
8379static int ett_ieee80211_control_cci;
8380static int ett_ieee80211_control_eht_om;
8381static int ett_ieee80211_control_srs;
8382static int ett_ieee80211_control_aar;
8383
8384static int ett_vht_cap_tree;
8385static int ett_vht_mcsset_tree;
8386static int ett_vht_rx_mcsbit_tree;
8387static int ett_vht_tx_mcsbit_tree;
8388static int ett_vht_basic_mcsbit_tree;
8389static int ett_vht_op_tree;
8390static int ett_vht_tpe_info_tree;
8391static int ett_tpe_psd;
8392
8393static int ett_vht_ranging_annc;
8394static int ett_ndp_ranging_annc_sta_info;
8395
8396static int ett_ff_he_action;
8397static int ett_ff_protected_he_action;
8398static int ett_ff_protected_eht_action;
8399static int ett_ff_he_mimo_control;
8400static int ett_ff_he_mimo_beamforming_report_snr;
8401static int ett_ff_he_mimo_feedback_matrices;
8402
8403static int ett_ff_vhtmimo_cntrl;
8404static int ett_ff_vhtmimo_beamforming_report;
8405static int ett_ff_vhtmimo_beamforming_report_snr;
8406static int ett_ff_vhtmimo_beamforming_angle;
8407static int ett_ff_vhtmimo_beamforming_report_feedback_matrices;
8408static int ett_ff_vhtmu_exclusive_beamforming_report_matrices;
8409
8410static int ett_vht_grpidmgmt;
8411static int ett_vht_msa;
8412static int ett_vht_upa;
8413
8414static int ett_ht_operation_info_delimiter1_tree;
8415static int ett_ht_operation_info_delimiter2_tree;
8416static int ett_ht_operation_info_delimiter3_tree;
8417
8418static int ett_ff_ftm_param_delim1;
8419static int ett_ff_ftm_param_delim2;
8420static int ett_ff_ftm_param_delim3;
8421static int ett_ff_ftm_tod_err1;
8422static int ett_ff_ftm_toa_err1;
8423static int ett_tag_ranging;
8424static int ett_tag_ranging_ntb;
8425static int ett_tag_ranging_secure_he_ltf;
8426
8427static int ett_ranging_subelement_tree;
8428
8429static int ett_tag_direct_meas_results;
8430
8431static int ett_rsta_avail_header;
8432static int ett_rsta_avail_tree;
8433static int ett_rsta_avail_subfield;
8434
8435static int ett_pasn_parameters;
8436static int ett_pasn_comeback_tree;
8437
8438static int ett_pasn_auth_frame;
8439
8440/* 802.11be trees */
8441static int ett_eht_multi_link_control;
8442static int ett_eht_multi_link_common_info;
8443static int ett_eht_multi_link_common_info_link_id;
8444static int ett_eht_multi_link_common_info_medium_sync;
8445static int ett_eht_multi_link_common_info_eml_capa;
8446static int ett_eht_multi_link_common_info_mld_capa;
8447static int ett_eht_multi_link_common_info_ext_mld_capa;
8448static int ett_eht_multi_link_per_sta;
8449static int ett_eht_multi_link_subelt;
8450static int ett_eht_multi_link_sta_control;
8451static int ett_eht_multi_link_per_sta_info;
8452static int ett_eht_multi_link_sta_dtim;
8453static int ett_eht_multi_link_reconf_oper_param;
8454static int ett_eht_multi_link_reconfig_presence_indi;
8455static int ett_eht_multi_link_reconfig_operation_para_info;
8456static int ett_eht_operation_params;
8457static int ett_eht_operation_control;
8458static int ett_eht_mac_capa;
8459static int ett_eht_phy_capa;
8460static int ett_eht_phy_bits_0_15;
8461static int ett_eht_phy_bits_16_31;
8462static int ett_eht_phy_bits_32_39;
8463static int ett_eht_phy_bits_40_63;
8464static int ett_eht_phy_bits_64_71;
8465static int ett_eht_phy_mcs_nss;
8466static int ett_eht_phy_mcs_nss_set;
8467static int ett_eht_ttl_mapping;
8468static int ett_eht_ttl_mapping_link_mapping;
8469static int ett_eht_eht_multi_link_tc;
8470static int ett_eht_qos_characteristics;
8471static int ett_eht_aid_bmapctl_tree;
8472static int ett_eht_bw_indication_param;
8473static int ett_eht_eml_control;
8474static int ett_eht_eml_control_link_map;
8475static int ett_eht_eml_control_mcs_map_count;
8476static int ett_eht_emlsr_para_update;
8477static int ett_eht_mimo_ctrl;
8478static int ett_eht_beamforming_rpt_ru_index;
8479static int ett_eht_beamforming_feedback_tree;
8480static int ett_ff_eht_mimo_beamforming_report_snr;
8481static int ett_ff_eht_mimo_mu_exclusive_report;
8482static int ett_eht_mu_exclusive_beamforming_rpt_ru_index;
8483static int ett_eht_reconfig_status_list;
8484static int ett_eht_group_key_data;
8485
8486static int ett_tag_measure_request_mode_tree;
8487static int ett_tag_measure_request_type_tree;
8488static int ett_tag_measure_request_sub_element_tree;
8489static int ett_tag_measure_report_mode_tree;
8490static int ett_tag_measure_report_type_tree;
8491static int ett_tag_measure_report_basic_map_tree;
8492static int ett_tag_measure_report_rpi_tree;
8493static int ett_tag_measure_report_frame_tree;
8494static int ett_tag_measure_report_sub_element_tree;
8495static int ett_tag_measure_reported_frame_tree;
8496static int ett_tag_measure_reported_frame_frag_id_tree;
8497static int ett_tag_measure_reported_lci_z_tree;
8498static int ett_tag_measure_reported_lci_urp_tree;
8499static int ett_tag_bss_bitmask_tree;
8500static int ett_tag_dfs_map_tree;
8501static int ett_tag_dfs_map_flags_tree;
8502static int ett_tag_erp_info_tree;
8503static int ett_tag_ex_cap1;
8504static int ett_tag_ex_cap2;
8505static int ett_tag_ex_cap3;
8506static int ett_tag_ex_cap4;
8507static int ett_tag_ex_cap5;
8508static int ett_tag_ex_cap6;
8509static int ett_tag_ex_cap7;
8510static int ett_tag_ex_cap8;
8511static int ett_tag_ex_cap89;
8512static int ett_tag_ex_cap10;
8513static int ett_tag_ex_cap11;
8514static int ett_tag_ex_cap12;
8515static int ett_tag_ex_cap13;
8516static int ett_tag_ex_cap14;
8517
8518static int ett_tag_rm_cap1;
8519static int ett_tag_rm_cap2;
8520static int ett_tag_rm_cap3;
8521static int ett_tag_rm_cap4;
8522static int ett_tag_rm_cap5;
8523
8524static int ett_tag_rsnx_octet1;
8525static int ett_tag_rsnx_octet2;
8526
8527static int ett_tag_multiple_bssid_subelem_tree;
8528static int ett_tag_20_40_bc;
8529
8530static int ett_tag_intolerant_tree;
8531
8532static int ett_tag_tclas_mask_tree;
8533
8534static int ett_tag_supported_channels;
8535
8536static int ett_tag_neighbor_report_bssid_info_tree;
8537static int ett_tag_neighbor_report_bssid_info_capability_tree;
8538static int ett_tag_neighbor_report_subelement_tree;
8539static int ett_tag_neighbor_report_sub_tag_tree;
8540
8541static int ett_tag_wapi_param_set_akm_tree;
8542static int ett_tag_wapi_param_set_ucast_tree;
8543static int ett_tag_wapi_param_set_mcast_tree;
8544static int ett_tag_wapi_param_set_preauth_tree;
8545
8546static int ett_max_idle_period_options;
8547
8548static int ett_tag_time_adv_tree;
8549
8550static int ett_tag_he_6ghz_cap_inf_tree;
8551
8552static int ett_ff_ba_param_tree;
8553static int ett_ff_ba_ssc_tree;
8554static int ett_ff_delba_param_tree;
8555static int ett_ff_qos_info;
8556static int ett_ff_sm_pwr_save;
8557static int ett_ff_psmp_param_set;
8558static int ett_ff_mimo_cntrl;
8559static int ett_ff_ant_sel;
8560static int ett_mimo_report;
8561static int ett_ff_chan_switch_announce;
8562static int ett_ff_ht_info;
8563static int ett_ff_psmp_sta_info;
8564
8565static int ett_tpc;
8566
8567static int ett_msdu_aggregation_parent_tree;
8568static int ett_msdu_aggregation_subframe_tree;
8569
8570static int ett_80211_mgt_ie;
8571static int ett_tsinfo_tree;
8572static int ett_sched_tree;
8573
8574static int ett_fcs;
8575
8576static int ett_hs20_osu_providers_list;
8577static int ett_hs20_osu_provider_tree;
8578static int ett_hs20_friendly_names_list;
8579static int ett_hs20_friendly_name_tree;
8580static int ett_hs20_osu_provider_method_list;
8581static int ett_osu_icons_avail_list;
8582static int ett_hs20_osu_icon_tree;
8583static int ett_hs20_osu_service_desc_list;
8584static int ett_hs20_osu_service_desc_tree;
8585static int ett_hs20_venue_url;
8586static int ett_hs20_advice_of_charge;
8587static int ett_hs20_aoc_plan;
8588
8589static int ett_hs20_ofn_tree;
8590
8591static int ett_adv_proto;
8592static int ett_adv_proto_tuple;
8593static int ett_gas_query;
8594static int ett_gas_anqp;
8595static int ett_nai_realm;
8596static int ett_nai_realm_eap;
8597static int ett_tag_ric_data_desc_ie;
8598static int ett_anqp_vendor_capab;
8599
8600static int ett_osen_group_data_cipher_suite;
8601static int ett_osen_pairwise_cipher_suites;
8602static int ett_osen_pairwise_cipher_suite;
8603static int ett_osen_akm_cipher_suites;
8604static int ett_osen_akm_cipher_suite;
8605static int ett_osen_rsn_cap_tree;
8606static int ett_osen_pmkid_list;
8607static int ett_osen_pmkid_tree;
8608static int ett_osen_group_management_cipher_suite;
8609
8610static int ett_hs20_cc_proto_port_tuple;
8611
8612static int ett_tag_no_bssid_capability_dmg_bss_control_tree;
8613static int ett_ssid_list;
8614
8615static int ett_sgdsn;
8616static int ett_nintendo;
8617
8618static int ett_routerboard;
8619
8620static int ett_meru;
8621
8622static int ett_wisun_gtkl;
8623static int ett_wisun_lgtkl;
8624
8625static int ett_qos_map_set_exception;
8626static int ett_qos_map_set_range;
8627
8628static int ett_wnm_notif_subelt;
8629
8630static int ett_ieee80211_3gpp_plmn;
8631
8632static int ett_mbo_oce_attr;
8633static int ett_mbo_ap_cap;
8634static int ett_oce_cap;
8635static int ett_oce_metrics_cap;
8636
8637static int ett_tag_mobility_domain_ft_capab_tree;
8638
8639static int ett_tag_ft_mic_control_tree;
8640static int ett_tag_ft_subelem_tree;
8641
8642static int ett_qos_mgmt_pol_capa;
8643static int ett_qos_mgmt_attributes;
8644static int ett_qos_mgmt_dscp_policy_capabilities;
8645static int ett_qos_mgmt_dscp_policy;
8646static int ett_qos_mgmt_tclas;
8647static int ett_qos_mgmt_domain_name;
8648static int ett_qos_mgmt_unknown_attribute;
8649static int ett_dscp_policy_status_list;
8650static int ett_pol_rqst_cont_tree;
8651static int ett_pol_resp_cont_tree;
8652
8653static expert_field ei_ieee80211_bad_length;
8654static expert_field ei_ieee80211_inv_val;
8655static expert_field ei_ieee80211_vht_tpe_pwr_info_count;
8656static expert_field ei_ieee80211_vht_tpe_pwr_info_unit;
8657static expert_field ei_ieee80211_ff_query_response_length;
8658static expert_field ei_ieee80211_ff_anqp_nai_realm_eap_len;
8659static expert_field ei_hs20_anqp_nai_hrq_length;
8660static expert_field ei_ieee80211_extra_data;
8661static expert_field ei_ieee80211_tag_data;
8662static expert_field ei_ieee80211_tdls_setup_confirm_malformed;
8663static expert_field ei_ieee80211_ff_anqp_nai_field_len;
8664static expert_field ei_ieee80211_rsn_pcs_count;
8665static expert_field ei_ieee80211_tag_measure_request_unknown;
8666static expert_field ei_ieee80211_tag_measure_request_beacon_unknown;
8667static expert_field ei_ieee80211_tag_measure_report_unknown;
8668static expert_field ei_ieee80211_tag_measure_report_beacon_unknown;
8669static expert_field ei_ieee80211_tag_measure_report_lci_unknown;
8670static expert_field ei_ieee80211_tag_number;
8671static expert_field ei_ieee80211_ff_anqp_info_length;
8672static expert_field ei_hs20_anqp_ofn_length;
8673static expert_field ei_ieee80211_tdls_setup_response_malformed;
8674static expert_field ei_ieee80211_ff_anqp_capability;
8675static expert_field ei_ieee80211_not_enough_room_for_anqp_header;
8676static expert_field ei_ieee80211_ff_query_request_length;
8677static expert_field ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype;
8678static expert_field ei_ieee80211_qos_info_bad_ftype;
8679static expert_field ei_ieee80211_qos_bad_aifsn;
8680static expert_field ei_ieee80211_pmkid_count_too_large;
8681static expert_field ei_ieee80211_ff_anqp_venue_length;
8682static expert_field ei_ieee80211_ff_anqp_roaming_consortium_oi_len;
8683static expert_field ei_ieee80211_tag_length;
8684static expert_field ei_ieee80211_missing_data;
8685static expert_field ei_ieee80211_rsn_pmkid_count;
8686static expert_field ei_ieee80211_fc_retry;
8687static expert_field ei_ieee80211_tag_wnm_sleep_mode_no_key_data;
8688static expert_field ei_ieee80211_dmg_subtype;
8689static expert_field ei_ieee80211_vht_action;
8690static expert_field ei_ieee80211_mesh_peering_unexpected;
8691static expert_field ei_ieee80211_fcs;
8692static expert_field ei_ieee80211_mismatched_akm_suite;
8693static expert_field ei_ieee80211_vs_routerboard_unexpected_len;
8694static expert_field ei_ieee80211_vs_sgdsn_serialnumber_invalid_len_val;
8695static expert_field ei_ieee80211_vs_sgdsn_serialnumber_unexpected_len_val;
8696static expert_field ei_ieee80211_twt_tear_down_bad_neg_type;
8697static expert_field ei_ieee80211_twt_setup_bad_command;
8698static expert_field ei_ieee80211_twt_bcast_info_no_term;
8699static expert_field ei_ieee80211_invalid_control_word;
8700static expert_field ei_ieee80211_invalid_control_id;
8701static expert_field ei_ieee80211_invalid_control_length;
8702static expert_field ei_ieee80211_wfa_60g_attr_len_invalid;
8703static expert_field ei_ieee80211_wfa_60g_unknown_attribute;
8704static expert_field ei_ieee80211_htc_in_dmg_packet;
8705static expert_field ei_ieee80211_eht_invalid_subelement;
8706static expert_field ei_ieee80211_eht_invalid_action;
8707static expert_field ei_ieee80211_eht_invalid_multi_link;
8708static expert_field ei_ieee80211_eht_invalid_nc_nr;
8709
8710
8711/* 802.11ad trees */
8712static int ett_dynamic_alloc_tree;
8713static int ett_ssw_tree;
8714static int ett_bf_tree;
8715static int ett_sswf_tree;
8716static int ett_brp_tree;
8717static int ett_blm_tree;
8718static int ett_bic_tree;
8719static int ett_dmg_params_tree;
8720static int ett_cc_tree;
8721static int ett_rcsi_tree;
8722static int ett_80211_ext;
8723static int ett_allocation_tree;
8724static int ett_sta_info;
8725
8726static int ett_ieee80211_esp;
8727
8728static int ett_ieee80211_wfa_60g_attr;
8729static int ett_ieee80211_wfa_transition_disable_tree;
8730
8731/* 802.11ah trees */
8732static int ett_s1g_sync_control_tree;
8733static int ett_s1g_sector_id_index;
8734static int ett_s1g_twt_information_control;
8735static int ett_twt_tear_down_tree;
8736static int ett_twt_control_field_tree;
8737static int ett_twt_req_type_tree;
8738static int ett_twt_ndp_paging_field_tree;
8739static int ett_twt_broadcast_info_tree;
8740static int ett_twt_traffic_info_tree;
8741static int ett_twt_traffic_info_control_tree;
8742
8743/* 802.11ax trees */
8744static int ett_he_mac_capabilities;
8745static int ett_he_phy_capabilities;
8746static int ett_he_phy_cap_first_byte;
8747static int ett_he_phy_cap_chan_width_set;
8748static int ett_he_phy_cap_b8_to_b23;
8749static int ett_he_phy_cap_b24_to_b39;
8750static int ett_he_phy_cap_b40_to_b55;
8751static int ett_he_phy_cap_b56_to_b71;
8752static int ett_he_phy_cap_b72_to_b87;
8753static int ett_he_mcs_and_nss_set;
8754static int ett_he_rx_tx_he_mcs_map_lte_80;
8755static int ett_he_rx_mcs_map_lte_80;
8756static int ett_he_tx_mcs_map_lte_80;
8757static int ett_he_rx_tx_he_mcs_map_160;
8758static int ett_he_rx_mcs_map_160;
8759static int ett_he_tx_mcs_map_160;
8760static int ett_he_rx_tx_he_mcs_map_80_80;
8761static int ett_he_rx_mcs_map_80_80;
8762static int ett_he_tx_mcs_map_80_80;
8763static int ett_he_ppe_threshold;
8764static int ett_he_ppe_nss;
8765static int ett_he_ppe_ru_alloc;
8766static int ett_he_uora_tree;
8767static int ett_he_aic_aifsn;
8768static int ett_he_spatial_reuse_control;
8769static int ett_he_bss_new_color_info;
8770static int ett_he_ess_report_info_field;
8771static int ett_he_operation_params;
8772static int ett_he_bss_color_information;
8773static int ett_he_oper_basic_mcs;
8774static int ett_he_operation_vht_op_info;
8775static int ett_mscs_user_prio;
8776static int ett_ieee80211_user_prio_bitmap;
8777static int ett_ieee80211_intra_access_prio;
8778static int ett_he_operation_6ghz;
8779static int ett_he_operation_6ghz_control;
8780static int ett_he_mu_edca_param;
8781static int ett_he_trigger_common_info;
8782static int ett_he_trigger_ranging;
8783static int ett_he_trigger_ranging_poll;
8784static int ett_he_trigger_packet_extension;
8785static int ett_he_trigger_base_common_info;
8786static int ett_he_trigger_bar_ctrl;
8787static int ett_he_trigger_bar_info;
8788static int ett_he_trigger_user_info;
8789static int ett_he_trigger_base_user_info;
8790static int ett_he_trigger_dep_basic_user_info;
8791static int ett_he_trigger_dep_nfrp_user_info;
8792static int ett_ndp_annc;
8793static int ett_ndp_vht_annc_sta_list;
8794static int ett_ndp_vht_annc_sta_info_tree;
8795static int ett_ndp_he_annc_sta_list;
8796static int ett_ndp_he_annc_sta_item;
8797static int ett_ndp_he_annc_sta_info;
8798static int ett_ndp_ranging_annc_sta_list;
8799static int ett_ndp_eht_annc_sta_list;
8800static int ett_ndp_eht_annc_sta_info;
8801static int ett_non_inheritance_element_id_list;
8802static int ett_non_inheritance_element_id_ext_list;
8803
8804/* 802.11ai trees */
8805static int ett_fils_indication_realm_list;
8806static int ett_fils_indication_public_key_list;
8807static int ett_ff_fils_discovery_frame_control;
8808static int ett_ff_fils_discovery_capability;
8809static int ett_neighbor_ap_info;
8810static int ett_tbtt_infos;
8811static int ett_rnr_bss_params_tree;
8812static int ett_rnr_mld_params_tree;
8813
8814static int ett_ff_fils_req_params;
8815static int ett_ff_fils_req_params_fils_criteria;
8816
8817static int ett_nonap_sta_regulatory_conn;
8818
8819static int ett_chan_usage;
8820
8821/* Generic address HF list for proto_tree_add_mac48_detail() */
8822static const mac_hf_list_t mac_addr = {
8823 &hf_ieee80211_addr,
8824 &hf_ieee80211_addr_resolved,
8825 &hf_ieee80211_addr_oui,
8826 &hf_ieee80211_addr_oui_resolved,
8827 &hf_ieee80211_addr_lg,
8828 &hf_ieee80211_addr_ig,
8829};
8830
8831/* Generic address HF list for proto_tree_add_mac48_detail() --
8832 * no LG/IG bits */
8833static const mac_hf_list_t mac_addr_hidden = {
8834 &hf_ieee80211_addr,
8835 &hf_ieee80211_addr_resolved,
8836 &hf_ieee80211_addr_oui,
8837 &hf_ieee80211_addr_oui_resolved,
8838 NULL((void*)0),
8839 NULL((void*)0),
8840};
8841
8842/* Destination address HF list for proto_tree_add_mac48_detail() */
8843static const mac_hf_list_t mac_da = {
8844 &hf_ieee80211_addr_da,
8845 &hf_ieee80211_addr_da_resolved,
8846 &hf_ieee80211_addr_da_oui,
8847 &hf_ieee80211_addr_da_oui_resolved,
8848 &hf_ieee80211_addr_da_lg,
8849 &hf_ieee80211_addr_da_ig,
8850};
8851
8852/* Source address HF list for proto_tree_add_mac48_detail() */
8853static const mac_hf_list_t mac_sa = {
8854 &hf_ieee80211_addr_sa,
8855 &hf_ieee80211_addr_sa_resolved,
8856 &hf_ieee80211_addr_sa_oui,
8857 &hf_ieee80211_addr_sa_oui_resolved,
8858 &hf_ieee80211_addr_sa_lg,
8859 &hf_ieee80211_addr_sa_ig,
8860};
8861
8862/* Receiver address HF list for proto_tree_add_mac48_detail() */
8863static const mac_hf_list_t mac_ra = {
8864 &hf_ieee80211_addr_ra,
8865 &hf_ieee80211_addr_ra_resolved,
8866 &hf_ieee80211_addr_ra_oui,
8867 &hf_ieee80211_addr_ra_oui_resolved,
8868 &hf_ieee80211_addr_ra_lg,
8869 &hf_ieee80211_addr_ra_ig,
8870};
8871
8872/* Transmitter address HF list for proto_tree_add_mac48_detail() */
8873static const mac_hf_list_t mac_ta = {
8874 &hf_ieee80211_addr_ta,
8875 &hf_ieee80211_addr_ta_resolved,
8876 &hf_ieee80211_addr_ta_oui,
8877 &hf_ieee80211_addr_ta_oui_resolved,
8878 &hf_ieee80211_addr_ta_lg,
8879 &hf_ieee80211_addr_ta_ig,
8880};
8881
8882/* BSSID address HF list for proto_tree_add_mac48_detail() */
8883static const mac_hf_list_t mac_bssid = {
8884 &hf_ieee80211_addr_bssid,
8885 &hf_ieee80211_addr_bssid_resolved,
8886 &hf_ieee80211_addr_bssid_oui,
8887 &hf_ieee80211_addr_bssid_oui_resolved,
8888 &hf_ieee80211_addr_bssid_lg,
8889 &hf_ieee80211_addr_bssid_ig,
8890};
8891
8892/* Station address HF list for proto_tree_add_mac48_detail() */
8893static const mac_hf_list_t mac_staa = {
8894 &hf_ieee80211_addr_staa,
8895 &hf_ieee80211_addr_staa_resolved,
8896 &hf_ieee80211_addr_staa_oui,
8897 &hf_ieee80211_addr_staa_oui_resolved,
8898 &hf_ieee80211_addr_staa_lg,
8899 &hf_ieee80211_addr_staa_ig,
8900};
8901
8902static const fragment_items frag_items = {
8903 &ett_fragment,
8904 &ett_fragments,
8905 &hf_ieee80211_fragments,
8906 &hf_ieee80211_fragment,
8907 &hf_ieee80211_fragment_overlap,
8908 &hf_ieee80211_fragment_overlap_conflict,
8909 &hf_ieee80211_fragment_multiple_tails,
8910 &hf_ieee80211_fragment_too_long_fragment,
8911 &hf_ieee80211_fragment_error,
8912 &hf_ieee80211_fragment_count,
8913 &hf_ieee80211_reassembled_in,
8914 &hf_ieee80211_reassembled_length,
8915 /* Reassembled data field */
8916 NULL((void*)0),
8917 "fragments"
8918};
8919
8920static const enum_val_t wlan_ignore_prot_options[] = {
8921 { "no", "No", WLAN_IGNORE_PROT_NO0 },
8922 { "without_iv", "Yes - without IV", WLAN_IGNORE_PROT_WO_IV1 },
8923 { "with_iv", "Yes - with IV", WLAN_IGNORE_PROT_W_IV2 },
8924 { NULL((void*)0), NULL((void*)0), 0 }
8925};
8926
8927static int wlan_address_type = -1;
8928static int wlan_bssid_address_type = -1;
8929static int wlan_ra_ta_address_type = -1;
8930static int wlan_aid_address_type = -1;
8931
8932static int beacon_padding; /* beacon padding bug */
8933
8934/*
8935 * Check if we have an S1G STA
8936 */
8937static bool_Bool
8938sta_is_s1g(packet_info *pinfo)
8939{
8940 void * data_p;
8941
8942 if (treat_as_s1g)
8943 return true1;
8944
8945 data_p = p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY);
8946 return GPOINTER_TO_INT(data_p)((gint) (glong) (data_p));
8947}
8948
8949static heur_dissector_list_t heur_subdissector_list;
8950
8951static dissector_handle_t ieee80211_handle;
8952static dissector_handle_t wlan_withoutfcs_handle;
8953static dissector_handle_t llc_handle;
8954static dissector_handle_t epd_llc_handle;
8955static dissector_handle_t ipx_handle;
8956static dissector_handle_t eth_withoutfcs_handle;
8957
8958static capture_dissector_handle_t llc_cap_handle;
8959static capture_dissector_handle_t ipx_cap_handle;
8960
8961static dissector_table_t ethertype_subdissector_table;
8962static dissector_table_t tagged_field_table;
8963static dissector_table_t vendor_specific_action_table;
8964static dissector_table_t wifi_alliance_action_subtype_table;
8965static dissector_table_t vendor_specific_anqp_info_table;
8966static dissector_table_t wifi_alliance_anqp_info_table;
8967static dissector_table_t wifi_alliance_ie_table;
8968static dissector_table_t wifi_alliance_public_action_table;
8969
8970static int wlan_tap;
8971
8972static const value_string access_network_type_vals[] = {
8973 { 0, "Private network" },
8974 { 1, "Private network with guest access" },
8975 { 2, "Chargeable public network" },
8976 { 3, "Free public network" },
8977 { 4, "Personal device network" },
8978 { 5, "Emergency services only network" },
8979 { 14, "Test or experimental" },
8980 { 15, "Wildcard" },
8981 { 0, NULL((void*)0) }
8982};
8983
8984static const value_string adv_proto_id_vals[] = {
8985 { 0, "Access Network Query Protocol"},
8986 { 1, "MIH Information Service"},
8987 { 2, "MIH Command and Event Services Capability Discovery"},
8988 { 3, "Emergency Alert System (EAS)"},
8989 { 4, "Location-to-Service Translation Protocol"},
8990 {221, "Vendor Specific"},
8991 {0, NULL((void*)0)}
8992};
8993
8994static const value_string timeout_int_types[] = {
8995 {1, "Reassociation deadline interval (TUs)"},
8996 {2, "Key lifetime interval (seconds)"},
8997 {3, "Association Comeback time (TUs)"},
8998 {4, "Time to start (TUs)"},
8999 {0, NULL((void*)0)}
9000};
9001
9002static const value_string tdls_action_codes[] = {
9003 {TDLS_SETUP_REQUEST0, "TDLS Setup Request"},
9004 {TDLS_SETUP_RESPONSE1, "TDLS Setup Response"},
9005 {TDLS_SETUP_CONFIRM2, "TDLS Setup Confirm"},
9006 {TDLS_TEARDOWN3, "TDLS Teardown"},
9007 {TDLS_PEER_TRAFFIC_INDICATION4, "TDLS Peer Traffic Indication"},
9008 {TDLS_CHANNEL_SWITCH_REQUEST5, "TDLS Channel Switch Request"},
9009 {TDLS_CHANNEL_SWITCH_RESPONSE6, "TDLS Channel Switch Response"},
9010 {TDLS_PEER_PSM_REQUEST7, "TDLS Peer PSM Request"},
9011 {TDLS_PEER_PSM_RESPONSE8, "TDLS Peer PSM Response"},
9012 {TDLS_PEER_TRAFFIC_RESPONSE9, "TDLS Peer Traffic Response"},
9013 {TDLS_DISCOVERY_REQUEST10, "TDLS Discovery Request"},
9014 {0, NULL((void*)0)}
9015};
9016static value_string_ext tdls_action_codes_ext = VALUE_STRING_EXT_INIT(tdls_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (tdls_action_codes) / sizeof
((tdls_action_codes)[0]))-1, tdls_action_codes, "tdls_action_codes"
, ((void*)0) }
;
9017
9018static const value_string rm_action_codes[] = {
9019 {RM_ACTION_RADIO_MEASUREMENT_REQUEST0, "Radio Measurement Request"},
9020 {RM_ACTION_RADIO_MEASUREMENT_REPORT1, "Radio Measurement Report"},
9021 {RM_ACTION_LINK_MEASUREMENT_REQUEST2, "Link Measurement Request"},
9022 {RM_ACTION_LINK_MEASUREMENT_REPORT3, "Link Measurement Report"},
9023 {RM_ACTION_NEIGHBOR_REPORT_REQUEST4, "Neighbor Report Request"},
9024 {RM_ACTION_NEIGHBOR_REPORT_RESPONSE5, "Neighbor Report Response"},
9025 {0, NULL((void*)0)}
9026};
9027static value_string_ext rm_action_codes_ext = VALUE_STRING_EXT_INIT(rm_action_codes){ _try_val_to_str_ext_init, 0, (sizeof (rm_action_codes) / sizeof
((rm_action_codes)[0]))-1, rm_action_codes, "rm_action_codes"
, ((void*)0) }
;
9028
9029static const val64_string number_of_taps_values[] = {
9030 {0x0, "1 tap"},
9031 {0x1, "5 taps"},
9032 {0x2, "15 taps"},
9033 {0x3, "63 taps"},
9034 {0, NULL((void*)0)}
9035};
9036
9037#define PSMP_STA_INFO_BROADCAST0 0
9038#define PSMP_STA_INFO_MULTICAST1 1
9039#define PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2 2
9040
9041#define PSMP_STA_INFO_FLAG_TYPE0x00000003 0x00000003
9042#define PSMP_STA_INFO_FLAG_DTT_START0x00001FFC 0x00001FFC
9043#define PSMP_STA_INFO_FLAG_DTT_DURATION0x001FE000 0x001FE000
9044
9045#define PSMP_STA_INFO_FLAG_STA_ID0x001FFFE0 0x001FFFE0
9046
9047#define PSMP_STA_INFO_FLAG_UTT_START0x0000FFE0 0x0000FFE0
9048#define PSMP_STA_INFO_FLAG_UTT_DURATION0x03FF0000 0x03FF0000
9049
9050#define PSMP_STA_INFO_FLAG_IA_RESERVED0xFC000000 0xFC000000
9051
9052static const value_string ff_psmp_sta_info_flags[] = {
9053 { PSMP_STA_INFO_BROADCAST0, "Broadcast"},
9054 { PSMP_STA_INFO_MULTICAST1, "Multicast"},
9055 { PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2, "Individually Addressed"},
9056 {0, NULL((void*)0)}
9057};
9058
9059static const char*
9060wlan_conv_get_filter_type(conv_item_t* conv, conv_filter_type_e filter)
9061{
9062 if ((filter == CONV_FT_SRC_ADDRESS) && (conv->src_address.type == wlan_address_type))
9063 return "wlan.sa";
9064
9065 if ((filter == CONV_FT_DST_ADDRESS) && (conv->dst_address.type == wlan_address_type))
9066 return "wlan.da";
9067
9068 if ((filter == CONV_FT_ANY_ADDRESS) && (conv->src_address.type == wlan_address_type))
9069 return "wlan.addr";
9070
9071 return CONV_FILTER_INVALID"INVALID";
9072}
9073
9074static ct_dissector_info_t wlan_ct_dissector_info = {&wlan_conv_get_filter_type};
9075
9076static tap_packet_status
9077wlan_conversation_packet(void *pct, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *vip, tap_flags_t flags)
9078{
9079 conv_hash_t *hash = (conv_hash_t*) pct;
9080 hash->flags = flags;
9081 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
9082 tap_packet_status status = TAP_PACKET_DONT_REDRAW;
9083
9084 if ((whdr->src.type != AT_NONE) && (whdr->dst.type != AT_NONE)) {
9085 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, CONVERSATION_NONE);
9086
9087 status = TAP_PACKET_REDRAW;
9088 }
9089
9090 return status;
9091}
9092
9093static const char*
9094wlan_endpoint_get_filter_type(endpoint_item_t* endpoint, conv_filter_type_e filter)
9095{
9096 if ((filter == CONV_FT_ANY_ADDRESS) && (endpoint->myaddress.type == wlan_address_type))
9097 return "wlan.addr";
9098
9099 return CONV_FILTER_INVALID"INVALID";
9100}
9101
9102static et_dissector_info_t wlan_endpoint_dissector_info = {&wlan_endpoint_get_filter_type};
9103
9104static tap_packet_status
9105wlan_endpoint_packet(void *pit, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *vip, tap_flags_t flags)
9106{
9107 conv_hash_t *hash = (conv_hash_t*) pit;
9108 hash->flags = flags;
9109 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
9110 tap_packet_status status = TAP_PACKET_DONT_REDRAW;
9111
9112 /* Take two "add" passes per packet, adding for each direction, ensures that all
9113 packets are counted properly (even if address is sending to itself)
9114 XXX - this could probably be done more efficiently inside endpoint_table */
9115 if (whdr->src.type != AT_NONE) {
9116 add_endpoint_table_data(hash, &whdr->src, 0, true1, 1, pinfo->fd->pkt_len, &wlan_endpoint_dissector_info, ENDPOINT_NONECONVERSATION_NONE);
9117 status = TAP_PACKET_REDRAW;
9118 }
9119
9120 if (whdr->dst.type != AT_NONE) {
9121 add_endpoint_table_data(hash, &whdr->dst, 0, false0, 1, pinfo->fd->pkt_len, &wlan_endpoint_dissector_info, ENDPOINT_NONECONVERSATION_NONE);
9122 status = TAP_PACKET_REDRAW;
9123 }
9124
9125 return status;
9126}
9127
9128static const char*
9129wlan_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src)
9130{
9131 if (is_src)
9132 return "wlan.sa";
9133
9134 return "wlan.da";
9135}
9136
9137static const char*
9138wlan_bssid_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src _U___attribute__((unused)))
9139{
9140 return "wlan.bssid";
9141}
9142
9143static const char*
9144wlan_ra_ta_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src)
9145{
9146 if (is_src)
9147 return "wlan.ta";
9148
9149 return "wlan.ra";
9150}
9151
9152static const char*
9153wlan_aid_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src _U___attribute__((unused)))
9154{
9155 return "wlan.fc.sid.association_id";
9156}
9157
9158static void
9159beacon_interval_base_custom(char *result, uint32_t beacon_interval)
9160{
9161 double temp_double;
9162
9163 temp_double = (double)beacon_interval;
9164 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (temp_double * 1024 / 1000000));
9165}
9166
9167static void
9168allocation_duration_base_custom(char *result, uint32_t allocation_duration)
9169{
9170 double temp_double;
9171
9172 temp_double = (double)allocation_duration;
9173 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (temp_double / 1000000));
9174}
9175
9176static void
9177extra_one_base_custom(char *result, uint32_t value)
9178{
9179 snprintf(result, ITEM_LABEL_LENGTH240, "%d", value+1);
9180}
9181
9182static void
9183extra_one_mul_two_base_custom(char *result, uint32_t value)
9184{
9185 snprintf(result, ITEM_LABEL_LENGTH240, "%d", (value+1)*2);
9186}
9187
9188static void
9189rcpi_and_power_level_custom(char *result, uint8_t value)
9190{
9191 /* 802.11-2016 section 9.4.2.38
9192 RCPI = |2 x (P + 110)| in steps of 0.5 dB */
9193
9194 if (value == 0)
9195 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P < -109.5 dBm)", value);
9196 else if (value == 220)
9197 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P >= 0 dBm)", value);
9198 else if (value < 220)
9199 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P = %.1f dBm)", value, ((double)value) / 2 - 110);
9200 else if (value < 255)
9201 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Reserved)", value);
9202 else
9203 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Measurement not available)", value);
9204}
9205
9206static void
9207sts_custom(char *result, uint32_t value)
9208{
9209 snprintf(result, ITEM_LABEL_LENGTH240, "%d STS", value + 1);
9210}
9211
9212static void
9213rep_custom(char *result, uint32_t value)
9214{
9215 snprintf(result, ITEM_LABEL_LENGTH240, "%u repetition%s (%u)", value + 1, plurality(value + 1, "", "s")((value + 1) == 1 ? ("") : ("s")), value);
9216}
9217
9218static void
9219hundred_us_base_custom(char *result, uint32_t value)
9220{
9221 snprintf(result, ITEM_LABEL_LENGTH240, "%0.1f ms (%u)", ((double)value * 100 / 1000), value);
9222}
9223
9224static void
9225partial_tsf_custom(char *result, uint32_t value)
9226{
9227 uint32_t shifted = value << 10;
9228 snprintf(result, ITEM_LABEL_LENGTH240, "%u %s (%u)", shifted,
9229 unit_name_string_get_value(shifted, &units_microseconds), value);
9230}
9231
9232/*
9233 * We use this is displaying the ru allocation region.
9234 */
9235static uint8_t global_he_trigger_bw;
9236
9237static void
9238he_ru_allocation_base_custom(char *result, uint32_t ru_allocation)
9239{
9240 uint32_t tones = 0;
9241
9242 switch (global_he_trigger_bw) {
9243 case 0:
9244 if (ru_allocation <= 8) {
9245 tones = 26;
9246 break;
9247 }
9248 if (ru_allocation >= 37 && ru_allocation <= 40) {
9249 tones = 52;
9250 break;
9251 }
9252 if (ru_allocation >= 53 && ru_allocation <= 54) {
9253 tones = 106;
9254 break;
9255 }
9256 if (ru_allocation == 61) {
9257 tones = 242;
9258 break;
9259 }
9260 // error
9261 break;
9262 case 1:
9263 if (ru_allocation <= 17) {
9264 tones = 26;
9265 break;
9266 }
9267 if (ru_allocation >= 37 && ru_allocation <= 44) {
9268 tones = 52;
9269 break;
9270 }
9271 if (ru_allocation >= 53 && ru_allocation <= 56) {
9272 tones = 106;
9273 break;
9274 }
9275 if (ru_allocation >= 61 && ru_allocation <= 62) {
9276 tones = 242;
9277 break;
9278 }
9279 if (ru_allocation == 65) {
9280 tones = 484;
9281 break;
9282 }
9283 // error
9284 break;
9285 case 2:
9286 /* fall-through */
9287 case 3:
9288 if (ru_allocation <= 36) {
9289 tones = 26;
9290 break;
9291 }
9292 if (ru_allocation >= 37 && ru_allocation <= 52) {
9293 tones = 52;
9294 break;
9295 }
9296 if (ru_allocation >= 53 && ru_allocation <= 60) {
9297 tones = 106;
9298 break;
9299 }
9300 if (ru_allocation >= 61 && ru_allocation <= 64) {
9301 tones = 242;
9302 break;
9303 }
9304 if (ru_allocation >= 65 && ru_allocation <= 66) {
9305 tones = 484;
9306 break;
9307 }
9308 if (ru_allocation == 67) {
9309 tones = 996;
9310 break;
9311 }
9312 if (ru_allocation == 68 && global_he_trigger_bw == 3) {
9313 tones = 2*996;
9314 break;
9315 }
9316 break;
9317 default:
9318 break;
9319 }
9320
9321 if (tones)
9322 snprintf(result, ITEM_LABEL_LENGTH240, "%d (%d tones)", ru_allocation, tones);
9323 else
9324 snprintf(result, ITEM_LABEL_LENGTH240, "%d (bogus number of tones)", ru_allocation);
9325}
9326
9327static void
9328eht_ru_allocation_base_custom(char *result, uint32_t ru_allocation)
9329{
9330 char *ru_str;
9331
9332 /* TODO: check with PS160, B0 of RU allocation, BW */
9333 if (ru_allocation <= 36) {
9334 ru_str = "RU size: 26";
9335 } else if (ru_allocation >= 37 && ru_allocation <= 52) {
9336 ru_str = "RU size: 52";
9337 } else if (ru_allocation >= 53 && ru_allocation <= 60) {
9338 ru_str = "RU size: 106";
9339 } else if (ru_allocation >= 61 && ru_allocation <= 64) {
9340 ru_str = "RU size: 242";
9341 } else if (ru_allocation == 65 || ru_allocation == 66) {
9342 ru_str = "RU size: 484";
9343 } else if (ru_allocation == 67) {
9344 ru_str = "RU size: 996";
9345 } else if (ru_allocation == 68) {
9346 ru_str = "RU size: 2x996";
9347 } else if (ru_allocation == 69) {
9348 ru_str = "RU size: 4x996";
9349 } else if (ru_allocation >= 70 && ru_allocation <= 81) {
9350 ru_str = "MRU size: 52+26";
9351 } else if (ru_allocation >= 82 && ru_allocation <= 89) {
9352 ru_str = "MRU size: 106+26";
9353 } else if (ru_allocation >= 90 && ru_allocation <= 93) {
9354 ru_str = "MRU size: 484+242";
9355 } else if (ru_allocation >= 94 && ru_allocation <= 95) {
9356 ru_str = "MRU size: 996+484";
9357 } else if (ru_allocation >= 96 && ru_allocation <= 99) {
9358 ru_str = "MRU size: 996+484+242";
9359 } else if (ru_allocation >= 100 && ru_allocation <= 103) {
9360 ru_str = "MRU size: 2x996+484";
9361 } else if (ru_allocation == 104) {
9362 ru_str = "MRU size: 3x996";
9363 } else if (ru_allocation == 105 || ru_allocation == 106) {
9364 ru_str = "MRU size: 3x996+484";
9365 } else {
9366 ru_str = "Reserved";
9367 }
9368
9369 snprintf(result, ITEM_LABEL_LENGTH240, "%d (%s)", ru_allocation, ru_str);
9370}
9371
9372/*
9373 * We use this to display the ANSI/CTA-2063 Serial number length
9374 */
9375static void
9376vs_sgdsn_serialnumber_len_custom(char *result, uint32_t val)
9377{
9378 if (val >= 0x30 && val <= 0x39) {
9379 snprintf(result, ITEM_LABEL_LENGTH240, "%d byte(s)", val-0x30);
9380 } else if (val >= 0x41 && val <= 0x46) {
9381 snprintf(result, ITEM_LABEL_LENGTH240, "%d byte(s)", val-0x37);
9382 } else {
9383 snprintf(result, ITEM_LABEL_LENGTH240, "Invalid length: %u", val);
9384 }
9385}
9386
9387/* ************************************************************************* */
9388/* Mesh Control field helper functions
9389 *
9390 * Per IEEE 802.11s Draft 12.0 section 7.2.2.1:
9391 *
9392 * The frame body consists of either:
9393 * The MSDU (or a fragment thereof), the Mesh Control field (if and only if the
9394 * frame is transmitted by a mesh STA and the Mesh Control Present subfield of
9395 * the QoS Control field is 1)...
9396 *
9397 * 8.2.4.5.1 "QoS Control field structure", table 8-4, in 802.11-2012,
9398 * seems to indicate that the bit that means "Mesh Control Present" in
9399 * frames sent by mesh STAs in a mesh BSS is part of the TXOP Limit field,
9400 * the AP PS Buffer State field, the TXOP Duration Requested field, or the
9401 * Queue Size field in some data frames in non-mesh BSSes.
9402 *
9403 * We need a statefull sniffer for that. For now, use heuristics.
9404 *
9405 * Notably, only mesh data frames contain the Mesh Control field in the header.
9406 * Other frames that contain mesh control (i.e., multihop action frames) have
9407 * it deeper in the frame body where it can be definitively identified.
9408 * Further, mesh data frames always have to-ds and from-ds either 11 or 01. We
9409 * use these facts to make our heuristics more reliable.
9410 * ************************************************************************* */
9411static int
9412has_mesh_control(uint16_t fcf, uint16_t qos_ctl, uint8_t mesh_flags)
9413{
9414 /* assume mesh control present if the QOS field's Mesh Control Present bit is
9415 * set, all reserved bits in the mesh_flags field are zero, and the address
9416 * extension mode is not a reserved value.
9417 */
9418 return (((FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) || (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T2(0x02 << 8))) &&
9419 (QOS_MESH_CONTROL_PRESENT(qos_ctl)(((qos_ctl) & 0x0100) >> 8)) &&
9420 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION0x3) == 0) &&
9421 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3) != MESH_FLAGS_ADDRESS_EXTENSION0x3));
9422}
9423
9424/****************************************************************************** */
9425/*
9426 * locally originated mesh frames will have a mesh control field, but no QoS header
9427 * detect the presence of mesh control field by checking if mesh flags are legal
9428 * and confirming that the next header is an 802.2 LLC header
9429 *
9430 ****************************************************************************** */
9431static int
9432has_mesh_control_local(uint16_t fcf, uint8_t mesh_flags, uint16_t next_header)
9433{
9434 return (((FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) || (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T2(0x02 << 8))) &&
9435 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION0x3) == 0) &&
9436 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3) != MESH_FLAGS_ADDRESS_EXTENSION0x3)) &&
9437 next_header == 0xaaaa;
9438}
9439
9440static int
9441find_mesh_control_length(uint8_t mesh_flags)
9442{
9443 return 6 + 6*(mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3);
9444}
9445
9446static mimo_control_t
9447get_mimo_control(tvbuff_t *tvb, int offset)
9448{
9449 uint16_t mimo;
9450 mimo_control_t output;
9451
9452 mimo = tvb_get_letohs(tvb, offset);
9453
9454 output.nc = (mimo & 0x0003) + 1;
9455 output.nr = ((mimo & 0x000C) >> 2) + 1;
9456 output.chan_width = (mimo & 0x0010) >> 4;
9457 output.coefficient_size = 4; /* XXX - Is this a good default? */
9458
9459 switch ((mimo & 0x0060) >> 5)
9460 {
9461 case 0:
9462 output.grouping = 1;
9463 break;
9464
9465 case 1:
9466 output.grouping = 2;
9467 break;
9468
9469 case 2:
9470 output.grouping = 4;
9471 break;
9472
9473 default:
9474 output.grouping = 1;
9475 break;
9476 }
9477
9478 switch ((mimo & 0x0180) >> 7)
9479 {
9480 case 0:
9481 output.coefficient_size = 4;
9482 break;
9483
9484 case 1:
9485 output.coefficient_size = 5;
9486 break;
9487
9488 case 2:
9489 output.coefficient_size = 6;
9490 break;
9491
9492 case 3:
9493 output.coefficient_size = 8;
9494 break;
9495 }
9496
9497 output.codebook_info = (mimo & 0x0600) >> 9;
9498 output.remaining_matrix_segment = (mimo & 0x3800) >> 11;
9499
9500 return output;
9501}
9502
9503static int
9504get_mimo_na(uint8_t nr, uint8_t nc)
9505{
9506 if ((nr == 2) && (nc == 1)) {
9507 return 2;
9508 } else if ((nr == 2) && (nc == 2)) {
9509 return 2;
9510 } else if ((nr == 3) && (nc == 1)) {
9511 return 4;
9512 } else if ((nr == 3) && (nc == 2)) {
9513 return 6;
9514 } else if ((nr == 3) && (nc == 3)) {
9515 return 6;
9516 } else if ((nr == 4) && (nc == 1)) {
9517 return 6;
9518 } else if ((nr == 4) && (nc == 2)) {
9519 return 10;
9520 } else if ((nr == 4) && (nc == 3)) {
9521 return 12;
9522 } else if ((nr == 4) && (nc == 4)) {
9523 return 12;
9524 } else{
9525 return 0;
9526 }
9527}
9528
9529static int
9530get_mimo_ns(bool_Bool chan_width, uint8_t output_grouping)
9531{
9532 int ns = 0;
9533
9534 if (chan_width)
9535 {
9536 switch (output_grouping)
9537 {
9538 case 1:
9539 ns = 114;
9540 break;
9541
9542 case 2:
9543 ns = 58;
9544 break;
9545
9546 case 4:
9547 ns = 30;
9548 break;
9549
9550 default:
9551 ns = 0;
9552 }
9553 } else {
9554 switch (output_grouping)
9555 {
9556 case 1:
9557 ns = 56;
9558 break;
9559
9560 case 2:
9561 ns = 30;
9562 break;
9563
9564 case 4:
9565 ns = 16;
9566 break;
9567
9568 default:
9569 ns = 0;
9570 }
9571 }
9572
9573 return ns;
9574}
9575
9576static int
9577add_mimo_csi_matrices_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9578{
9579 proto_tree *snr_tree;
9580 int csi_matrix_size, start_offset;
9581 int ns, i;
9582
9583 start_offset = offset;
9584 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
9585 ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9586
9587 for (i = 1; i <= mimo_cntrl.nr; i++)
9588 {
9589 uint8_t snr;
9590
9591 snr = tvb_get_uint8(tvb, offset);
9592 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9593 snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
9594 offset += 1;
9595 }
9596
9597 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9598 csi_matrix_size = ns*(3+(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size));
9599 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9600 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9601 offset += csi_matrix_size;
9602 return offset - start_offset;
9603}
9604
9605static int
9606add_mimo_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9607{
9608 proto_tree *snr_tree;
9609 int csi_matrix_size, start_offset;
9610 int ns, i;
9611
9612 start_offset = offset;
9613 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc, ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9614
9615 for (i = 1; i <= mimo_cntrl.nc; i++)
9616 {
9617 uint8_t snr;
9618
9619 snr = tvb_get_uint8(tvb, offset);
9620 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9621 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
9622 offset += 1;
9623 }
9624
9625 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9626 csi_matrix_size = ns*(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size);
9627 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9628 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_bf_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9629 offset += csi_matrix_size;
9630 return offset - start_offset;
9631}
9632
9633static int
9634add_mimo_compressed_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9635{
9636 proto_tree *snr_tree;
9637 int csi_matrix_size, start_offset;
9638 int ns, na, i;
9639
9640 start_offset = offset;
9641 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
9642 ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9643
9644 for (i = 1; i <= mimo_cntrl.nc; i++)
9645 {
9646 int8_t snr;
9647 char edge_sign;
9648
9649 snr = tvb_get_int8(tvb, offset);
9650
9651 switch(snr) {
9652 case -128:
9653 edge_sign = '<';
9654 break;
9655 case 127:
9656 edge_sign = '>';
9657 break;
9658 default:
9659 edge_sign = ' ';
9660 break;
9661 }
9662 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9663 snr, "Stream %d - Signal to Noise Ratio: %c%3.2fdB", i, edge_sign,snr/4.0+22.0);
9664 offset += 1;
9665 }
9666
9667 na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
9668 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9669 csi_matrix_size = ns*(na*((mimo_cntrl.codebook_info+1)*2 + 2)/2);
9670 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9671 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_cbf_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9672 offset += csi_matrix_size;
9673 return offset - start_offset;
9674}
9675
9676static void
9677mesh_active_window_base_custom(char *result, uint32_t mesh_active_window)
9678{
9679 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (mesh_active_window * 1024.0 / 1000000));
9680}
9681
9682/* ************************************************************************* */
9683/* This is the capture function used to update packet counts */
9684/* ************************************************************************* */
9685static bool_Bool
9686capture_ieee80211_common(const unsigned char * pd, int offset, int len,
9687 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)), bool_Bool datapad)
9688{
9689 uint16_t fcf, hdr_length;
9690
9691 if (!BYTES_ARE_IN_FRAME(offset, len, 2)((unsigned)(offset) + (unsigned)(2) > (unsigned)(offset) &&
(unsigned)(offset) + (unsigned)(2) <= (unsigned)(len))
)
9692 return false0;
9693
9694 fcf = pletohu16(&pd[offset]);
9695
9696 if (IS_PROTECTED(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x40)
&& (wlan_ignore_prot == WLAN_IGNORE_PROT_NO0))
9697 return false0;
9698
9699 switch (COMPOSE_FRAME_TYPE (fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
) {
9700
9701 case DATA0x20:
9702 case DATA_CF_ACK0x21:
9703 case DATA_CF_POLL0x22:
9704 case DATA_CF_ACK_POLL0x23:
9705 case DATA_QOS_DATA0x28:
9706 case DATA_QOS_DATA_CF_ACK0x29:
9707 case DATA_QOS_DATA_CF_POLL0x2A:
9708 case DATA_QOS_DATA_CF_ACK_POLL0x2B:
9709 {
9710 /* These are data frames that actually contain *data*. */
9711 hdr_length = (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) ? DATA_LONG_HDR_LEN30 : DATA_SHORT_HDR_LEN24;
9712
9713 if (DATA_FRAME_IS_QOS(COMPOSE_FRAME_TYPE(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))) &
0x08)
) {
9714 /* QoS frame, so the header includes a QoS field */
9715 uint16_t qosoff; /* Offset of the 2-byte QoS field */
9716 uint8_t mesh_flags;
9717
9718 qosoff = hdr_length;
9719 hdr_length += 2; /* Include the QoS field in the header length */
9720
9721 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
9722 /* Frame has a 4-byte HT Control field */
9723 hdr_length += 4;
9724 }
9725
9726 if (datapad) {
9727 /*
9728 * Include the padding between the 802.11 header and the body,
9729 * as "helpfully" provided by some Atheros adapters.
9730 *
9731 * In the Atheros mesh capture sample we have, the padding
9732 * is before the mesh header, possibly because it doesn't
9733 * recognize the mesh header.
9734 */
9735 hdr_length = WS_ROUNDUP_4(hdr_length)(((hdr_length) + ((unsigned)(4U-1U))) & (~((unsigned)(4U-
1U))))
;
9736 }
9737
9738 /*
9739 * Does it look as if we have a mesh header?
9740 * Look at the Mesh Control subfield of the QoS field and at the
9741 * purported mesh flag fields.
9742 */
9743 if (!BYTES_ARE_IN_FRAME(offset, hdr_length, 1)((unsigned)(offset) + (unsigned)(1) > (unsigned)(offset) &&
(unsigned)(offset) + (unsigned)(1) <= (unsigned)(hdr_length
))
)
9744 return false0;
9745
9746 mesh_flags = pd[hdr_length];
9747 if (has_mesh_control(fcf, pletohu16(&pd[qosoff]), mesh_flags)) {
9748 /* Yes, add the length of that in as well. */
9749 hdr_length += find_mesh_control_length(mesh_flags);
9750 }
9751 }
9752 /* I guess some bridges take Netware Ethernet_802_3 frames,
9753 which are 802.3 frames (with a length field rather than
9754 a type field, but with no 802.2 header in the payload),
9755 and just stick the payload into an 802.11 frame. I've seen
9756 captures that show frames of that sort.
9757
9758 We also handle some odd form of encapsulation in which a
9759 complete Ethernet frame is encapsulated within an 802.11
9760 data frame, with no 802.2 header. This has been seen
9761 from some hardware.
9762
9763 On top of that, at least at some point it appeared that
9764 the OLPC XO sent out frames with two bytes of 0 between
9765 the "end" of the 802.11 header and the beginning of
9766 the payload.
9767
9768 So, if the packet doesn't start with 0xaa 0xaa:
9769
9770 we first use the same scheme that linux-wlan-ng does to detect
9771 those encapsulated Ethernet frames, namely looking to see whether
9772 the frame either starts with 6 octets that match the destination
9773 address from the 802.11 header or has 6 octets that match the
9774 source address from the 802.11 header following the first 6 octets,
9775 and, if so, treat it as an encapsulated Ethernet frame;
9776
9777 otherwise, we use the same scheme that we use in the Ethernet
9778 dissector to recognize Netware 802.3 frames, namely checking
9779 whether the packet starts with 0xff 0xff and, if so, treat it
9780 as an encapsulated IPX frame, and then check whether the
9781 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
9782 frame. */
9783 if (!BYTES_ARE_IN_FRAME(offset+hdr_length, len, 2)((unsigned)(offset+hdr_length) + (unsigned)(2) > (unsigned
)(offset+hdr_length) && (unsigned)(offset+hdr_length)
+ (unsigned)(2) <= (unsigned)(len))
)
9784 return false0;
9785
9786 if ((pd[offset+hdr_length] != 0xaa) && (pd[offset+hdr_length+1] != 0xaa)) {
9787#if 0
9788 /* XXX - this requires us to parse the header to find the source
9789 and destination addresses. */
9790 if (BYTES_ARE_IN_FRAME(offset+hdr_length, len, 12)((unsigned)(offset+hdr_length) + (unsigned)(12) > (unsigned
)(offset+hdr_length) && (unsigned)(offset+hdr_length)
+ (unsigned)(12) <= (unsigned)(len))
) {
9791 /* We have two MAC addresses after the header. */
9792 if ((memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0) ||
9793 (memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0)) {
9794 return capture_eth (pd, offset + hdr_length, len, cpinfo, pseudo_header);
9795 }
9796 }
9797#endif
9798 if ((pd[offset+hdr_length] == 0xff) && (pd[offset+hdr_length+1] == 0xff))
9799 return call_capture_dissector (ipx_cap_handle, pd, offset+hdr_length, len, cpinfo, pseudo_header);
9800 else if ((pd[offset+hdr_length] == 0x00) && (pd[offset+hdr_length+1] == 0x00))
9801 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length + 2, len, cpinfo, pseudo_header);
9802 }
9803 else {
9804 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length, len, cpinfo, pseudo_header);
9805 }
9806 break;
9807 }
9808 }
9809
9810 return false0;
9811}
9812
9813/*
9814 * Handle 802.11 with a variable-length link-layer header.
9815 */
9816static bool_Bool
9817capture_ieee80211(const unsigned char * pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)))
9818{
9819 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, false0);
9820}
9821
9822/*
9823 * Handle 802.11 with a variable-length link-layer header and data padding.
9824 */
9825static bool_Bool
9826capture_ieee80211_datapad(const unsigned char * pd, int offset, int len,
9827 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)))
9828{
9829 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, true1);
9830}
9831
9832
9833/* ************************************************************************* */
9834/* Add the subtree used to store the fixed parameters */
9835/* ************************************************************************* */
9836static proto_tree *
9837get_fixed_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size,
9838 bool_Bool no_append)
9839{
9840 proto_item *fixed_fields;
9841
9842 fixed_fields = proto_tree_add_item(tree, hf_ieee80211_fixed_parameters, tvb, start, size, ENC_NA0x00000000);
9843 if (!no_append)
9844 proto_item_append_text(fixed_fields, " (%d bytes)", size);
9845
9846 return proto_item_add_subtree(fixed_fields, ett_fixed_parameters);
9847}
9848
9849
9850/* ************************************************************************* */
9851/* Add the subtree used to store tagged parameters */
9852/* ************************************************************************* */
9853static proto_tree *
9854get_tagged_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size)
9855{
9856 proto_item *tagged_fields;
9857
9858 tagged_fields = proto_tree_add_item(tree, hf_ieee80211_tagged_parameters, tvb, start, -1, ENC_NA0x00000000);
9859 proto_item_append_text(tagged_fields, " (%d bytes)", size);
9860
9861 return proto_item_add_subtree(tagged_fields, ett_tagged_parameters);
9862}
9863
9864static void
9865add_ptk_analysis(tvbuff_t *tvb, proto_tree *tree, DOT11DECRYPT_KEY_ITEM *used_key)
9866{
9867 if (!used_key) {
9868 return;
9869 }
9870 const uint8_t *key = NULL((void*)0);
9871 proto_item *ti;
9872 char buf[SHORT_STR256];
9873 int len = Dot11DecryptGetKCK(used_key, &key);
9874 bytes_to_hexstr(buf, key, len);
9875 buf[2 * len] = '\0';
9876 ti = proto_tree_add_string(tree, hf_ieee80211_fc_analysis_kck, tvb, 0, 0, buf);
9877 proto_item_set_generated(ti);
9878
9879 len = Dot11DecryptGetKEK(used_key, &key);
9880 bytes_to_hexstr(buf, key, len);
9881 buf[2 * len] = '\0';
9882 ti = proto_tree_add_string(tree, hf_ieee80211_fc_analysis_kek, tvb, 0, 0, buf);
9883 proto_item_set_generated(ti);
9884}
9885
9886static int
9887dissect_vendor_action_marvell(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
9888{
9889 uint8_t octet;
9890 int offset = 0;
9891
9892 octet = tvb_get_uint8(tvb, offset);
9893 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_action_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9894 offset += 1;
9895 switch (octet)
9896 {
9897 case MRVL_ACTION_MESH_MANAGEMENT1:
9898 octet = tvb_get_uint8(tvb, offset);
9899 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9900 offset += 1;
9901 switch (octet)
9902 {
9903 case MRVL_MESH_MGMT_ACTION_RREQ0:
9904 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9905 offset += 1;
9906 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9907 offset += 1;
9908 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9909 offset += 1;
9910 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9911 offset += 1;
9912 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_rreqid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9913 offset += 4;
9914 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA0x00000000);
9915 offset += 6;
9916 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9917 offset += 4;
9918 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9919 offset += 4;
9920 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9921 offset += 4;
9922 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9923 offset += 1;
9924 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9925 offset += 1;
9926 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
9927 offset += 6;
9928 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9929 offset += 4;
9930 break;
9931 case MRVL_MESH_MGMT_ACTION_RREP1:
9932 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9933 offset += 1;
9934 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9935 offset += 1;
9936 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9937 offset += 1;
9938 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9939 offset += 1;
9940 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
9941 offset += 6;
9942 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9943 offset += 4;
9944 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9945 offset += 4;
9946 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9947 offset += 4;
9948 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA0x00000000);
9949 offset += 6;
9950 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9951 offset += 4;
9952 break;
9953 case MRVL_MESH_MGMT_ACTION_RERR2:
9954 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9955 offset += 1;
9956 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9957 offset += 1;
9958 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
9959 offset += 1;
9960 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
9961 offset += 6;
9962 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
9963 offset += 4;
9964 break;
9965 default:
9966 break;
9967 }
9968 break;
9969 default:
9970 break;
9971 }
9972
9973 return offset;
9974}
9975
9976static int
9977dissect_dscp_policy_query(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
9978 proto_tree *tree, int offset)
9979{
9980 int start_offset = offset;
9981
9982 while (tvb_captured_length_remaining(tvb, offset)) {
9983 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
9984 }
9985
9986 return offset - start_offset;
9987}
9988
9989static int * const rqst_control_fields[] = {
9990 &hf_ieee80211_oui_qos_mgmt_rq_ctrl_more,
9991 &hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset,
9992 &hf_ieee80211_oui_qos_mgmt_rq_reserved,
9993 NULL((void*)0)
9994};
9995
9996static int
9997dissect_dscp_policy_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
9998 proto_tree *tree, int offset)
9999{
10000 int start_offset = offset;
10001
10002 proto_tree_add_bitmask(tree, tvb, offset,
10003 hf_ieee80211_oui_qos_mgmt_rqst_control,
10004 ett_pol_rqst_cont_tree, rqst_control_fields,
10005 ENC_NA0x00000000);
10006 offset += 1;
10007
10008 while (tvb_reported_length_remaining(tvb, offset)) {
10009 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
10010 }
10011
10012 return offset - start_offset;
10013}
10014
10015static int * const resp_control_fields[] = {
10016 &hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more,
10017 &hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset,
10018 &hf_ieee80211_oui_qos_mgmt_rsp_reserved,
10019 NULL((void*)0)
10020};
10021
10022static int
10023dissect_dscp_policy_response(tvbuff_t *tvb, packet_info *pinfo,
10024 proto_tree *tree, int offset)
10025{
10026 int start_offset = offset;
10027 uint8_t count;
10028 wmem_strbuf_t *status_buf = wmem_strbuf_create(pinfo->pool)wmem_strbuf_new(pinfo->pool, "");
10029 int i;
10030
10031 proto_tree_add_bitmask(tree, tvb, offset,
10032 hf_ieee80211_oui_qos_mgmt_resp_control,
10033 ett_pol_resp_cont_tree, resp_control_fields,
10034 ENC_NA0x00000000);
10035 offset += 1;
10036
10037 count = tvb_get_uint8(tvb, offset);
10038 proto_tree_add_item(tree, hf_ieee80211_oui_qos_mgmt_count, tvb, offset,
10039 1, ENC_NA0x00000000);
10040 offset += 1;
10041
10042 for (i = 0; i < count; i++) {
10043 proto_tree *status_tree = NULL((void*)0);
10044 uint8_t scsid, status;
10045
10046 scsid = tvb_get_uint8(tvb, offset);
10047 status_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2,
10048 ett_dscp_policy_status_list,
10049 NULL((void*)0), "Status list item %d",
10050 i);
10051 proto_tree_add_item(status_tree, hf_ieee80211_dscp_policy_id, tvb,
10052 offset, 1, ENC_NA0x00000000);
10053 if (wmem_strbuf_get_len(status_buf) == 0) {
10054 wmem_strbuf_append_printf(status_buf, "%u:", scsid);
10055 } else {
10056 wmem_strbuf_append_printf(status_buf, " %u:", scsid);
10057 }
10058 offset += 1;
10059
10060 status = tvb_get_uint8(tvb, offset);
10061 proto_tree_add_item(status_tree, hf_ieee80211_dscp_policy_status, tvb,
10062 offset, 1, ENC_NA0x00000000);
10063 wmem_strbuf_append_printf(status_buf, "%u", status);
10064 offset += 1;
10065 }
10066 proto_tree_add_string(tree, hf_ieee80211_dscp_policy_scs_sts_list, tvb, 0, 1,
10067 wmem_strbuf_finalize(status_buf));
10068
10069 return offset - start_offset;
10070}
10071
10072static int
10073dissect_vendor_action_wfa_qos_mgmt(tvbuff_t *tvb, packet_info *pinfo,
10074 proto_tree *tree, void *data _U___attribute__((unused)))
10075{
10076 int offset = 0;
10077 uint8_t subtype = tvb_get_uint8(tvb, offset);
10078
10079 proto_tree_add_item(tree, hf_ieee80211_oui_qos_subtype, tvb, offset, 1,
10080 ENC_NA0x00000000);
10081 offset += 1;
10082
10083 proto_tree_add_item(tree, hf_ieee80211_oui_qos_mgmt_dialog_token, tvb, offset,
10084 1, ENC_NA0x00000000);
10085 offset += 1;
10086
10087 switch (subtype) {
10088 case 0:
10089 offset += dissect_dscp_policy_query(tvb, pinfo, tree, offset);
10090 break;
10091 case 1:
10092 offset += dissect_dscp_policy_request(tvb, pinfo, tree, offset);
10093 break;
10094 case 2:
10095 offset += dissect_dscp_policy_response(tvb, pinfo, tree, offset);
10096 break;
10097 }
10098
10099 return offset;
10100}
10101
10102static int
10103dissect_vendor_action_wifi_alliance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
10104{
10105 uint8_t subtype;
10106 int offset = 0;
10107 int dissected;
10108 tvbuff_t *subtvb;
10109
10110 subtype = tvb_get_uint8(tvb, offset);
10111 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_action_type, tvb, offset,
10112 1, ENC_NA0x00000000);
10113 offset += 1;
10114
10115 subtvb = tvb_new_subset_remaining(tvb, offset);
10116 dissected = dissector_try_uint_with_data(wifi_alliance_action_subtype_table, subtype, subtvb, pinfo, tree, false0, NULL((void*)0));
10117 if (dissected <= 0)
10118 {
10119 call_data_dissector(subtvb, pinfo, tree);
10120 dissected = tvb_reported_length(subtvb);
10121 }
10122
10123 offset += dissected;
10124
10125 return offset;
10126}
10127
10128/*
10129 * This function is called from two different places. In one case it is called
10130 * without the tag and length. In other cases, it is called with those and
10131 * is asked to return the type and subtype. We know the difference because
10132 * type and subtype will be NULL in the first case.
10133 */
10134static unsigned
10135dissect_advertisement_protocol_common(packet_info *pinfo, proto_tree *tree,
10136 tvbuff_t *tvb, int offset, unsigned *type,
10137 unsigned *subtype)
10138{
10139 uint8_t tag_no = 0, tag_len, left;
10140 proto_item *item = NULL((void*)0), *adv_item;
10141 proto_tree *adv_tree, *adv_tuple_tree;
10142
10143 if (type)
10144 *type = 0xff; // Last reserved value
10145 if (subtype)
10146 *subtype = 0xff;
10147 tag_no = tvb_get_uint8(tvb, offset);
10148 if (type)
10149 item = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10150
10151 /*
10152 * If we have the tag and len, use the len in the tvb, otherwise ask
10153 * for the length of the tvb.
10154 */
10155 if (type)
10156 tag_len = tvb_get_uint8(tvb, offset + 1);
10157 else
10158 tag_len = tvb_reported_length_remaining(tvb, 0);
10159
10160 if (type && tag_no != TAG_ADVERTISEMENT_PROTOCOL108) {
10161 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_number,
10162 "Unexpected IE %d (expected Advertisement "
10163 "Protocol)", tag_no);
10164 return 2 + tag_len;
10165 }
10166 if (type)
10167 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
10168 if (tag_len < 2) {
10169 if (!type)
10170 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
10171 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
10172 "Advertisement Protocol: IE must be at least 2 "
10173 "octets long");
10174 return 2 + tag_len;
10175 }
10176
10177 left = tag_len;
10178 if (type) /* Skip past the header if there ... */
10179 offset += 2;
10180 adv_tree = proto_tree_add_subtree(tree, tvb, offset, left,
10181 ett_adv_proto, &adv_item, "Advertisement Protocol element");
10182
10183 while (left >= 2) {
10184 uint8_t id;
10185
10186 id = tvb_get_uint8(tvb, offset + 1);
10187 if (id == 0)
10188 proto_item_append_text(adv_item, ": ANQP");
10189 adv_tuple_tree = proto_tree_add_subtree_format(adv_tree, tvb, offset, 2, ett_adv_proto_tuple, &item,
10190 "Advertisement Protocol Tuple: %s",
10191 val_to_str(pinfo->pool, id, adv_proto_id_vals,
10192 "Unknown (%d)"));
10193
10194 proto_tree_add_item(adv_tuple_tree,
10195 hf_ieee80211_tag_adv_proto_resp_len_limit, tvb,
10196 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10197 proto_tree_add_item(adv_tuple_tree,
10198 hf_ieee80211_tag_adv_proto_pame_bi, tvb,
10199 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10200 offset += 1;
10201 left--;
10202 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_id, tvb,
10203 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10204 offset += 1;
10205 left--;
10206
10207 if ((id == 0) && type)
10208 *type = ADV_PROTO_ID_ANQP0;
10209
10210 if (id == 221) {
10211 /* Vendor specific */
10212 uint8_t len = tvb_get_uint8(tvb, offset);
10213 unsigned oui;
10214 uint8_t wfa_subtype;
10215 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_vs_len, tvb, offset, 1, ENC_NA0x00000000);
10216 offset += 1;
10217 left -= 1;
10218 if (type)
10219 *type = ADV_PROTO_ID_VS221;
10220 if (len > left) {
10221 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
10222 "Vendor specific info length error");
10223 return 2 + tag_len;
10224 }
10225 proto_tree_add_item_ret_uint(adv_tuple_tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
10226 offset += 3;
10227 left -= 3;
10228 wfa_subtype = tvb_get_uint8(tvb, offset);
10229 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_anqp_wfa_subtype, tvb,
10230 offset, 1, ENC_NA0x00000000);
10231 offset += 1;
10232 left -= 1;
10233 if (oui == OUI_WFA0x506F9A) {
10234 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_dpp_subtype, tvb, offset, 1, ENC_NA0x00000000);
10235 if (subtype && wfa_subtype == WFA_SUBTYPE_DPP26) {
10236 *subtype = WFA_SUBTYPE_DPP26;
10237 *subtype |= (tvb_get_uint8(tvb, offset) << 8);
10238 }
10239 offset++;
10240 left--;
10241 }
10242 }
10243 }
10244
10245 if (left) {
10246 expert_add_info_format(pinfo, item, &ei_ieee80211_extra_data,
10247 "Unexpected extra data in the end");
10248 }
10249
10250 return 2 + tag_len;
10251}
10252
10253static int
10254dissect_advertisement_protocol(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
10255{
10256 return dissect_advertisement_protocol_common(pinfo, tree, tvb, 0, NULL((void*)0), NULL((void*)0));
10257}
10258
10259static void
10260dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10261{
10262 while (offset + 2 <= end) {
10263 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
10264 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10265 offset += 2;
10266 }
10267 if (offset != end) {
10268 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
10269 "Unexpected ANQP Query list format");
10270 }
10271}
10272
10273static void
10274dissect_hs20_anqp_hs_capability_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10275{
10276 while (offset < end) {
10277 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_hs_capability_list,
10278 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10279 offset++;
10280 }
10281}
10282
10283static void
10284dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10285{
10286 uint16_t id, len;
10287 proto_item *item;
10288 proto_tree *vtree;
10289 uint32_t oui;
10290 uint8_t subtype;
10291
10292 while (offset + 2 <= end) {
10293 id = tvb_get_letohs(tvb, offset);
10294 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_capability,
10295 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10296 offset += 2;
10297 if (id == ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797) {
10298 vtree = proto_item_add_subtree(item, ett_anqp_vendor_capab);
10299 len = tvb_get_letohs(tvb, offset);
10300 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vlen,
10301 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10302 offset += 2;
10303 if ((len < 3) || ((offset + len) > end)) {
10304 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_capability);
10305 return;
10306 }
10307 proto_tree_add_item_ret_uint(vtree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
10308 offset += 3;
10309 len -= 3;
10310
10311 switch (oui) {
10312 case OUI_WFA0x506F9A:
10313 if (len == 0)
10314 break;
10315 subtype = tvb_get_uint8(tvb, offset);
10316 proto_item_append_text(vtree, " - WFA - %s",
10317 val_to_str(pinfo->pool, subtype, wfa_anqp_subtype_vals,
10318 "Unknown (%u)"));
10319 proto_tree_add_item(vtree, hf_ieee80211_anqp_wfa_subtype,
10320 tvb, offset, 1, ENC_NA0x00000000);
10321 offset++;
10322 len--;
10323 switch (subtype) {
10324 case WFA_ANQP_SUBTYPE_HS2017:
10325 proto_tree_add_item(vtree, hf_ieee80211_hs20_anqp_subtype, tvb, offset, 1, ENC_NA0x00000000);
10326 proto_tree_add_item(vtree, hf_ieee80211_hs20_anqp_reserved, tvb, offset + 1, 1, ENC_NA0x00000000);
10327 offset += 2;
10328 len -= 2;
10329 dissect_hs20_anqp_hs_capability_list(vtree, tvb, offset, end);
10330 break;
10331 default:
10332 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
10333 tvb, offset, len, ENC_NA0x00000000);
10334 break;
10335 }
10336 break;
10337 default:
10338 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
10339 tvb, offset, len, ENC_NA0x00000000);
10340 break;
10341 }
10342
10343 offset += len;
10344 }
10345 }
10346 if (offset != end) {
10347 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
10348 "Unexpected ANQP Capability list format");
10349 }
10350}
10351
10352static const value_string venue_group_vals[] = {
10353 { 0, "Unspecified" },
10354 { 1, "Assembly" },
10355 { 2, "Business" },
10356 { 3, "Educational" },
10357 { 4, "Factory and Industrial" },
10358 { 5, "Institutional" },
10359 { 6, "Mercantile" },
10360 { 7, "Residential" },
10361 { 8, "Storage" },
10362 { 9, "Utility and Miscellaneous" },
10363 { 10, "Vehicular" },
10364 { 11, "Outdoor" },
10365 { 0, NULL((void*)0) }
10366};
10367static value_string_ext venue_group_vals_ext = VALUE_STRING_EXT_INIT(venue_group_vals){ _try_val_to_str_ext_init, 0, (sizeof (venue_group_vals) / sizeof
((venue_group_vals)[0]))-1, venue_group_vals, "venue_group_vals"
, ((void*)0) }
;
10368
10369static void
10370dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
10371{
10372 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_group,
10373 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10374 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_type,
10375 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
10376}
10377
10378static void
10379dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10380{
10381 proto_item *item;
10382
10383 dissect_venue_info(tree, tvb, offset);
10384 offset += 2;
10385 while (offset + 4 <= end) {
10386 uint8_t vlen = tvb_get_uint8(tvb, offset);
10387 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_length,
10388 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10389 offset += 1;
10390 if ((vlen > (end - offset)) || (vlen < 3)) {
10391 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_venue_length);
10392 break;
10393 }
10394 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_language,
10395 tvb, offset, 3, ENC_ASCII0x00000000);
10396 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_name,
10397 tvb, offset + 3, vlen - 3, ENC_UTF_80x00000002);
10398 offset += vlen;
10399 }
10400}
10401
10402static const value_string nw_auth_type_vals[] = {
10403 { 0, "Acceptance of terms and conditions" },
10404 { 1, "On-line enrollment supported" },
10405 { 2, "http/https redirection" },
10406 { 3, "DNS redirection" },
10407 { 0, NULL((void*)0) }
10408};
10409
10410static void
10411dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10412{
10413 while (offset + 3 <= end) {
10414 uint16_t len;
10415 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_indicator,
10416 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10417 offset += 1;
10418 len = tvb_get_letohs(tvb, offset);
10419 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url_len,
10420 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10421 offset += 2;
10422 if (len)
10423 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url,
10424 tvb, offset, len, ENC_ASCII0x00000000);
10425 offset += len;
10426 }
10427}
10428
10429static void
10430dissect_anqp_network_auth_type_timestamp(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10431{
10432 while (offset + 2 <= end) {
10433 uint8_t len;
10434 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator,
10435 tvb, offset, 1, ENC_NA0x00000000);
10436 len = tvb_get_uint8(tvb, offset + 1);
10437 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len,
10438 tvb, offset, 1, ENC_NA0x00000000);
10439 offset += 2;
10440 if(len)
10441 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_url,
10442 tvb, offset, len, ENC_ASCII0x00000000);
10443 offset += len;
10444 /* Optional Time Value - Either 0 or 10 octets */
10445 /* Format: Octet 0-1: Year (0-65534)
10446 Octet 2: Month (0-12)
10447 Octet 3: Day of month (0-31)
10448 Octet 4: Hours (0-23)
10449 Octet 5: Minutes (0-59)
10450 Octet 6: Seconds (0-59)
10451 Octet 7-8: Milliseconds (0-999)
10452 Octet 9: Reserved */
10453 if ((offset + 10) < end) {
10454 /* Enough bytes to dissect a timestamp */
10455 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_year,
10456 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10457 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_mon,
10458 tvb, offset, 1, ENC_NA0x00000000);
10459 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_day,
10460 tvb, offset, 1, ENC_NA0x00000000);
10461 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_hr,
10462 tvb, offset, 1, ENC_NA0x00000000);
10463 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_min,
10464 tvb, offset, 1, ENC_NA0x00000000);
10465 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_sec,
10466 tvb, offset, 1, ENC_NA0x00000000);
10467 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_msec,
10468 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10469 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd,
10470 tvb, offset, 1, ENC_NA0x00000000);
10471 offset += 10;
10472 } else {
10473 /* Not enough bytes to dissect a timestamp */
10474 }
10475 }
10476}
10477
10478static void
10479add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
10480{
10481 const char *manuf_name;
10482
10483 manuf_name = tvb_get_manuf_name_if_known(tvb, offset);
10484 if (manuf_name == NULL((void*)0))
10485 return;
10486 proto_item_append_text(item, " - %s", manuf_name);
10487}
10488
10489static void
10490dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
10491 int end)
10492{
10493 proto_item *item;
10494 uint8_t len;
10495
10496 while (offset < end) {
10497 len = tvb_get_uint8(tvb, offset);
10498 item = proto_tree_add_item(tree,
10499 hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
10500 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10501 offset += 1;
10502 if ((len > (end - offset)) || (len < 3)) {
10503 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_roaming_consortium_oi_len);
10504 break;
10505 }
10506 item = proto_tree_add_item(tree,
10507 hf_ieee80211_ff_anqp_roaming_consortium_oi,
10508 tvb, offset, len, ENC_NA0x00000000);
10509 add_manuf(item, tvb, offset);
10510 offset += len;
10511 }
10512}
10513
10514static const value_string ip_addr_avail_ipv6_vals[] = {
10515 { 0, "Address type not available" },
10516 { 1, "Address type available" },
10517 { 2, "Availability of the address type not known" },
10518 { 0, NULL((void*)0) }
10519};
10520
10521static const value_string ip_addr_avail_ipv4_vals[] = {
10522 { 0, "Address type not available" },
10523 { 1, "Public IPv4 address available" },
10524 { 2, "Port-restricted IPv4 address available" },
10525 { 3, "Single NATed private IPv4 address available" },
10526 { 4, "Double NATed private IPv4 address available" },
10527 { 5, "Port-restricted IPv4 address and single NATed IPv4 address available" },
10528 { 6, "Port-restricted IPv4 address and double NATed IPv4 address available" },
10529 { 7, "Availability of the address type is not known" },
10530 { 0, NULL((void*)0) }
10531};
10532
10533static void
10534dissect_ip_addr_type_availability_info(proto_tree *tree, tvbuff_t *tvb,
10535 int offset)
10536{
10537 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
10538 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10539 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
10540 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10541}
10542
10543static const value_string nai_realm_encoding_vals[] = {
10544 { 0, "Formatted in accordance with RFC 4282" },
10545 { 1, "UTF-8 formatted that is not formatted in accordance with RFC 4282" },
10546 { 0, NULL((void*)0) }
10547};
10548
10549static const range_string oper_class_rvals[] = {
10550 { 0, 0, "Unknown" }, /* 0 should not be used */
10551 { 1, 65, "Reserved" },
10552 { 66, 66, "0.863 GHz, 1 MHz Spacing" },
10553 { 67, 67, "0.863 GHz, 2 MHz Spacing" },
10554 { 68, 68, "0.902 GHz, 1 MHz Spacing" },
10555 { 69, 69, "0.902 GHz, 2 MHz Spacing" },
10556 { 70, 70, "0.902 GHz, 4 MHz Spacing" },
10557 { 71, 71, "0.902 GHz, 8 MHz Spacing" },
10558 { 72, 72, "0.902 GHz, 16 MHz Spacing" },
10559 { 73, 73, "0.9165 GHz, 1 MHz Spacing" },
10560 { 74, 74, "0.9175 GHz, 1 MHz Spacing" },
10561 { 75, 75, "0.9175 GHz, 2 MHz Spacing" },
10562 { 76, 76, "0.9175 GHz, 4 Spacing" },
10563 { 77, 77, "0.9014 GHz, 1 MHz Spacing" },
10564 { 78, 80, "Reserved" },
10565 { 81, 81, "2.407 GHz, Channels 1-13, 25 MHz Spacing" },
10566 { 82, 82, "2.414 GHz, Channel 14, 25 MHz Spacing" },
10567 { 83, 83, "2.407 GHz, Channels 1-9, 40 MHz Spacing" },
10568 { 84, 84, "2.407 GHz, Channels 5-13, 40 MHz Spacing" },
10569 { 85, 93, "Reserved" },
10570 { 94, 94, "3.0 GHz, Channels 133 and 137, 20 MHz Spacing" },
10571 { 95, 95, "3.0 GHz, Channels 132, 134, 136, and 138, 10 MHz Spacing" },
10572 { 96, 96, "3.0025 GHz, Channels 131-138, 5 MHz Spacing" },
10573 { 97, 100, "Reserved" },
10574 { 101, 101, "4.85 GHz, Channels 21 and 25, 20 MHz Spacing" },
10575 { 102, 102, "4.89 GHz, Channels 11, 13, 15, 17, and 19, 10 MHz Spacing" },
10576 { 103, 103, "4.9375 GHz, Channels 1-10, 5 MHz Spacing" },
10577 { 104, 104, "4.0 GHz, Channels 184 and 192, 40 MHz Spacing" },
10578 { 105, 105, "4.0 GHz, Channels 188 and 196, 40 MHz Spacing" },
10579 { 106, 106, "4.0 GHz, Channels 191 and 195, 20 MHz Spacing" },
10580 { 107, 107, "4.0 GHz, Channels 189, 191, 193, 195, and 197, 10 MHz Spacing" },
10581 { 108, 108, "4.0025 GHz, Channels 188-197, 5 MHz Spacing" },
10582 { 109, 109, "4.0 GHz, Channels 184, 188, 192, and 196, 20 MHz Spacing" },
10583 { 110, 110, "4.0 GHz, Channels 183-189, 10 MHz Spacing" },
10584 { 111, 111, "4.0025 GHz, Channels 182-189, 5 MHz Spacing" },
10585 { 112, 114, "Reserved" },
10586 { 115, 115, "5.0 GHz, Channels 36, 40, 44, and 48, 20 MHz Spacing" },
10587 { 116, 116, "5.0 GHz, Channels 36 and 44, 40 MHz Spacing" },
10588 { 117, 117, "5.0 GHz, Channels 40 and 48, 40 MHz Spacing" },
10589 { 118, 118, "5.0 GHz, Channels 52, 56, 60, and 64, 20 MHz Spacing" },
10590 { 119, 119, "5.0 GHz, Channels 52 and 60, 40 MHz Spacing" },
10591 { 120, 120, "5.0 GHz, Channels 56 and 64, 40 MHz Spacing" },
10592 { 121, 121, "5.0 GHz, Channels 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, and 140, 20 MHz Spacing" },
10593 { 122, 122, "5.0 GHz, Channels 100, 108, 116, 124, and 132, 40 MHz Spacing" },
10594 { 123, 123, "5.0 GHz, Channels 104, 112, 120, 128, and 136, 40 MHz Spacing" },
10595 { 124, 124, "5.0 GHz, Channels 149, 153, 157, and 161, 20 MHz Spacing" },
10596 { 125, 125, "5.0 GHz, Channels 149, 153, 157, 161, 165, and 169, 20 MHz Spacing" },
10597 { 126, 126, "5.0 GHz, Channels 149 and 157, 40 MHz Spacing" },
10598 { 127, 127, "5.0 GHz, Channels 153 and 161, 40 MHz Spacing" },
10599 { 128, 128, "5.0 GHz, Channel center frequency index 42, 58, 106, 122, 138 and 155, 80 MHz Spacing" },
10600 { 129, 129, "5.0 GHz, Channel center frequency index 50 and 114, 160 MHz Spacing" },
10601 { 130, 130, "5.0 GHz, Channel center frequency index 42, 58, 106, 122, 138 and 155, 80 MHz Spacing, 80+" },
10602 { 131, 131, "5.950 GHz, Channels 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, and 233, 20 MHz Spacing" },
10603 { 132, 132, "5.950 GHz, Channel center frequency index 3, 11, 19, 27, 35, 43, 51, 59, 67, 75, 83, 91, 99, 107, 115, 123, 131, 139, 147, 155, 163, 171, 179, 187, 195, 203, 211, 219, and 227, 40 MHz Spacing" },
10604 { 133, 133, "5.950 GHz, Channel center frequency index 7, 23, 39, 55, 71, 87, 103, 119, 135, 151, 167, 183, 199, and 215, 80 MHz Spacing" },
10605 { 134, 134, "5.950 GHz, Channel center frequency index 15, 47, 79, 111, 143, 175, and 207, 160 MHz Spacing" },
10606 { 135, 135, "5.950 GHz, Channel center frequency index 7, 23, 39, 55, 71, 87, 103, 119, 135, 151, 167, 183, 199, and 215, 80 MHz Spacing, 80+" },
10607 { 136, 136, "5.925 GHz, Channel center frequency index 2, 20 MHz Spacing" },
10608 { 137, 137, "5.925 GHz, Channel center frequency index 31, 63, 95, 127, 159, and 191, 320 MHz Spacing" },
10609 { 138, 179, "Reserved" },
10610 { 180, 180, "56.16 GHz, Channels 1, 2, 3, 4, 5, and 6, 2160 MHz Spacing" },
10611 { 181, 181, "56.16 GHz, Channels 2 and 3, 2160 MHz Spacing" },
10612 { 182, 182, "56.70 GHz, Channels 35, 36, 37, and 38, 1080 MHz Spacing" },
10613 { 183, 183, "42.66 GHz, Channels 1, 2, 3, 4, 5, 6, 7, and 8, 540 MHz Spacing" },
10614 { 184, 184, "47.52 GHz, Channels 9 and 10, 540 MHz Spacing" },
10615 { 185, 185, "42.93 GHz, Channels 11, 12, 13, and 14, 1080 MHz Spacing" },
10616 { 186, 186, "47.79 GHz, Channel 15, 1080 MHz Spacing" },
10617 { 187, 191, "Reserved" },
10618 { 192, 254, "Vendor-Specific" },
10619
10620 { 255, 255, "Reserved" },
10621 { 0, 0, NULL((void*)0) }
10622};
10623
10624static const value_string nai_realm_auth_param_id_vals[] = {
10625 { 1, "Expanded EAP Method" },
10626 { 2, "Non-EAP Inner Authentication Type" },
10627 { 3, "Inner Authentication EAP Method Type" },
10628 { 4, "Expanded Inner EAP Method" },
10629 { 5, "Credential Type" },
10630 { 6, "Tunneled EAP Method Credential Type" },
10631 { 221, "Vendor Specific" },
10632 { 0, NULL((void*)0) }
10633};
10634
10635static void
10636dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10637{
10638 uint16_t count, len;
10639 proto_item *item, *r_item;
10640 int f_end, eap_end;
10641 uint8_t nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
10642 uint8_t auth_param_id;
10643 proto_tree *realm_tree, *eap_tree;
10644 const uint8_t *realm;
10645
10646 count = tvb_get_letohs(tvb, offset);
10647 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nai_realm_count,
10648 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10649 offset += 2;
10650 while (count > 0) {
10651 len = tvb_get_letohs(tvb, offset);
10652 realm_tree = proto_tree_add_subtree(tree, tvb, offset, 2 + len, ett_nai_realm, &r_item, "NAI Realm Data");
10653
10654 item = proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_field_len,
10655 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10656 offset += 2;
10657 if (offset + len > end) {
10658 expert_add_info_format(pinfo, item, &ei_ieee80211_ff_anqp_nai_field_len,
10659 "Invalid NAI Realm List");
10660 break;
10661 }
10662 f_end = offset + len;
10663 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_encoding,
10664 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10665 offset += 1;
10666 nai_len = tvb_get_uint8(tvb, offset);
10667 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_length,
10668 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10669 offset += 1;
10670 if (offset + nai_len > f_end) {
10671 expert_add_info_format(pinfo, r_item, &ei_ieee80211_ff_anqp_nai_field_len,
10672 "Invalid NAI Realm Data");
10673 break;
10674 }
10675 proto_tree_add_item_ret_string(realm_tree, hf_ieee80211_ff_anqp_nai_realm,
10676 tvb, offset, nai_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &realm);
10677 if (realm) {
10678 proto_item_append_text(r_item, " (%s)", realm);
10679 }
10680 offset += nai_len;
10681 eap_count = tvb_get_uint8(tvb, offset);
10682 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_eap_count,
10683 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10684 offset += 1;
10685
10686 while (eap_count > 0) {
10687 eap_len = tvb_get_uint8(tvb, offset);
10688 eap_end = offset + 1 + eap_len;
10689 eap_tree = proto_tree_add_subtree(realm_tree, tvb, offset, 1 + eap_len,
10690 ett_nai_realm_eap, NULL((void*)0), "EAP Method");
10691
10692 item = proto_tree_add_item(eap_tree,
10693 hf_ieee80211_ff_anqp_nai_realm_eap_len,
10694 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10695 offset += 1;
10696 if (offset + eap_len > f_end) {
10697 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_nai_realm_eap_len);
10698 break;
10699 }
10700
10701 proto_item_append_text(eap_tree, ": %s",
10702 val_to_str_ext(pinfo->pool, tvb_get_uint8(tvb, offset),
10703 &eap_type_vals_ext, "Unknown (%d)"));
10704 proto_tree_add_item(eap_tree, hf_ieee80211_ff_anqp_nai_realm_eap_method,
10705 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10706 offset += 1;
10707 auth_param_count = tvb_get_uint8(tvb, offset);
10708 proto_tree_add_item(eap_tree,
10709 hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
10710 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10711 offset += 1;
10712
10713 while (auth_param_count > 0) {
10714 auth_param_id = tvb_get_uint8(tvb, offset);
10715 proto_tree_add_item(eap_tree,
10716 hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
10717 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10718 offset += 1;
10719 auth_param_len = tvb_get_uint8(tvb, offset);
10720 proto_tree_add_item(eap_tree,
10721 hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
10722 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10723 offset += 1;
10724 item = proto_tree_add_item(
10725 eap_tree, hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
10726 tvb, offset, auth_param_len, ENC_NA0x00000000);
10727 if ((auth_param_id == 3) && (auth_param_len == 1)) {
10728 uint8_t inner_method = tvb_get_uint8(tvb, offset);
10729 const char *str;
10730 str = val_to_str_ext(pinfo->pool, inner_method, &eap_type_vals_ext, "Unknown (%d)");
10731
10732 proto_item_append_text(eap_tree, " / %s", str);
10733 proto_item_append_text(item, " - %s", str);
10734 }
10735 offset += auth_param_len;
10736
10737 auth_param_count--;
10738 }
10739
10740 offset = eap_end;
10741 eap_count--;
10742 }
10743
10744 offset = f_end;
10745 count--;
10746 }
10747}
10748
10749static void
10750dissect_3gpp_cellular_network_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
10751{
10752 uint8_t iei, num, plmn_idx = 0;
10753 proto_item *item;
10754
10755 /* See Annex A of 3GPP TS 24.234 v8.1.0 for description */
10756 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_gud, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10757 offset += 1;
10758 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_udhl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10759 offset += 1;
10760 iei = tvb_get_uint8(tvb, offset);
10761 item = proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_iei, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10762 if (iei == 0)
10763 proto_item_append_text(item, " (PLMN List)");
10764 else
10765 return;
10766 offset += 1;
10767 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_plmn_len, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10768 offset += 1;
10769 num = tvb_get_uint8(tvb, offset);
10770 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_num_plmns, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10771 offset += 1;
10772 while (num > 0) {
10773 proto_item *plmn_item = NULL((void*)0);
10774 proto_tree *plmn_tree = NULL((void*)0);
10775 unsigned plmn_val = 0;
10776
10777 if (tvb_reported_length_remaining(tvb, offset) < 3)
10778 break;
10779 plmn_val = tvb_get_letoh24(tvb, offset);
10780 plmn_item = proto_tree_add_uint_format(tree, hf_ieee80211_3gpp_gc_plmn,
10781 tvb, offset, 3, plmn_val, "PLMN %d (0x%x)",
10782 plmn_idx++, plmn_val);
10783 plmn_tree = proto_item_add_subtree(plmn_item, ett_ieee80211_3gpp_plmn);
10784 dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, plmn_tree, offset, E212_NONE, true1);
10785 num--;
10786 offset += 3;
10787 }
10788}
10789
10790static void
10791dissect_domain_name_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10792{
10793 uint8_t len;
10794
10795 while (offset < end) {
10796 len = tvb_get_uint8(tvb, offset);
10797 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name_len,
10798 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10799 offset += 1;
10800 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name,
10801 tvb, offset, len, ENC_ASCII0x00000000);
10802 offset += len;
10803 }
10804}
10805
10806static int
10807dissect_hs20_subscription_remediation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10808 proto_tree *tree, void *data _U___attribute__((unused)))
10809{
10810 int offset = 0;
10811 uint8_t url_len = tvb_get_uint8(tvb, offset);
10812 proto_item *pi = NULL((void*)0);
10813
10814 proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_url_len, tvb, offset,
10815 1, ENC_NA0x00000000);
10816 offset++;
10817 if (tvb_reported_length_remaining(tvb, offset) >= url_len) {
10818 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_server_url,
10819 tvb, offset, url_len, ENC_ASCII0x00000000);
10820 offset += url_len;
10821 proto_item_set_url(pi);
10822 proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_server_method,
10823 tvb, offset, 1, ENC_NA0x00000000);
10824 offset++;
10825 }
10826
10827 return offset;
10828}
10829
10830static int
10831dissect_hs20_deauthentication_imminent(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10832 proto_tree *tree, void *data _U___attribute__((unused)))
10833{
10834 int offset = 0;
10835 uint8_t url_len = 0;
10836 proto_item *pi = NULL((void*)0);
10837
10838 proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_reason_code, tvb, offset, 1, ENC_NA0x00000000);
10839 offset++;
10840
10841 proto_tree_add_item(tree, hf_ieee80211_hs20_reauth_delay, tvb, offset, 2,
10842 ENC_LITTLE_ENDIAN0x80000000);
10843 offset += 2;
10844
10845 url_len = tvb_get_uint8(tvb, offset);
10846 proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_reason_url_len, tvb, offset, 1,
10847 ENC_NA0x00000000);
10848 offset++;
10849
10850 if (tvb_reported_length_remaining(tvb, offset) >= url_len) {
10851 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_imminent_reason_url,
10852 tvb, offset, url_len, ENC_ASCII0x00000000);
10853 offset += url_len;
10854 proto_item_set_url(pi);
10855 }
10856 return offset;
10857}
10858
10859#define HS20_ANQP_HS_QUERY_LIST1 1
10860#define HS20_ANQP_HS_CAPABILITY_LIST2 2
10861#define HS20_ANQP_OPERATOR_FRIENDLY_NAME3 3
10862#define HS20_ANQP_WAN_METRICS4 4
10863#define HS20_ANQP_CONNECTION_CAPABILITY5 5
10864#define HS20_ANQP_NAI_HOME_REALM_QUERY6 6
10865#define HS20_ANQP_OPERATING_CLASS_INDICATION7 7
10866#define HS20_ANQP_OSU_PROVIDERS_LIST8 8
10867/* 9 is reserved */
10868#define HS20_ANQP_ICON_REQUEST10 10
10869#define HS20_ANQP_ICON_BINARY_FILE11 11
10870#define HS20_ANQP_OPERATOR_ICON_METADATA12 12
10871#define HS20_ANQP_ADVICE_OF_CHARGE13 13
10872
10873static const value_string hs20_anqp_subtype_vals[] = {
10874 { HS20_ANQP_HS_QUERY_LIST1, "HS Query list" },
10875 { HS20_ANQP_HS_CAPABILITY_LIST2, "HS Capability List" },
10876 { HS20_ANQP_OPERATOR_FRIENDLY_NAME3, "Operator Friendly Name" },
10877 { HS20_ANQP_WAN_METRICS4, "WAN Metrics" },
10878 { HS20_ANQP_CONNECTION_CAPABILITY5, "Connection Capability" },
10879 { HS20_ANQP_NAI_HOME_REALM_QUERY6, "NAI Home Realm Query" },
10880 { HS20_ANQP_OPERATING_CLASS_INDICATION7, "Operating Class Indication" },
10881 { HS20_ANQP_OSU_PROVIDERS_LIST8, "OSU Providers List" },
10882 { 9, "Reserved" },
10883 { HS20_ANQP_ICON_REQUEST10, "Icon Request" },
10884 { HS20_ANQP_ICON_BINARY_FILE11, "Icon Binary File" },
10885 { HS20_ANQP_OPERATOR_ICON_METADATA12, "Operator Icon Metadata" },
10886 { HS20_ANQP_ADVICE_OF_CHARGE13, "Advice of Charge" },
10887 { 0, NULL((void*)0) }
10888};
10889
10890static void
10891dissect_hs20_anqp_hs_query_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10892{
10893 while (offset < end) {
10894 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_hs_query_list,
10895 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10896 offset++;
10897 }
10898}
10899
10900static void
10901dissect_hs20_anqp_operator_friendly_name(proto_tree *tree, tvbuff_t *tvb,
10902 packet_info *pinfo, int offset,
10903 int end, int hf_array[],
10904 int ett_val)
10905{
10906 int ofn_index = 0;
10907
10908 while (offset + 4 <= end) {
10909 uint8_t vlen = tvb_get_uint8(tvb, offset);
10910 proto_tree *ofn_tree = NULL((void*)0);
10911 proto_item *item = NULL((void*)0), *pi = NULL((void*)0);
10912 int start_offset = offset;
10913
10914 ofn_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_val,
10915 &pi, "Friendly Name [%d]", ofn_index + 1);
10916
10917 item = proto_tree_add_item(ofn_tree, hf_array[0],
10918 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10919 offset++;
10920 if (vlen > end - offset || vlen < 3) {
10921 expert_add_info(pinfo, item, &ei_hs20_anqp_ofn_length);
10922 break;
10923 }
10924 proto_tree_add_item(ofn_tree, hf_array[1],
10925 tvb, offset, 3, ENC_ASCII0x00000000|ENC_NA0x00000000);
10926 proto_tree_add_item(ofn_tree, hf_array[2],
10927 tvb, offset + 3, vlen - 3, ENC_UTF_80x00000002);
10928 offset += vlen;
10929
10930 proto_item_set_len(pi, offset - start_offset);
10931 ofn_index++;
10932 }
10933}
10934
10935static const value_string hs20_wm_link_status_vals[] = {
10936 { 0, "Reserved" },
10937 { 1, "Link up" },
10938 { 2, "Link down" },
10939 { 3, "Link in test state" },
10940 { 0, NULL((void*)0) }
10941};
10942
10943static void
10944dissect_hs20_anqp_wan_metrics(proto_tree *tree, tvbuff_t *tvb, int offset, bool_Bool request)
10945{
10946 if (request)
10947 return;
10948
10949 if(tvb_reported_length_remaining(tvb, offset) < 13)
10950 return;
10951
10952 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_link_status,
10953 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10954 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link,
10955 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10956 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_at_capacity,
10957 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10958 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_reserved,
10959 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10960 offset++;
10961
10962 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed,
10963 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10964 offset += 4;
10965
10966 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed,
10967 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10968 offset += 4;
10969
10970 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_downlink_load,
10971 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10972 offset++;
10973
10974 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_uplink_load,
10975 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10976 offset++;
10977
10978 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_lmd,
10979 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10980}
10981
10982static const value_string hs20_cc_proto_vals[] = {
10983 { 1, "ICMP" },
10984 { 6, "TCP" },
10985 { 17, "UDP" },
10986 { 50, "ESP" },
10987 { 0, NULL((void*)0) }
10988};
10989
10990static const value_string hs20_cc_port_vals[] = {
10991 { 0, "[Supported]" }, /* Used to indicate ICMP, ESP for IPSec VPN, or IKEv2 for IPSec VPN */
10992 { 20, "FTP" },
10993 { 22, "SSH" },
10994 { 80, "HTTP" },
10995 { 443, "HTTPS" },
10996 { 500, "IKEv2 for IPSec VPN" },
10997 { 1723, "PPTP for IPSec VPN" },
10998 { 4500, "[Optional] IKEv2 for IPSec VPN" },
10999 { 5060, "VOIP" },
11000 { 0, NULL((void*)0) },
11001};
11002
11003static const value_string hs20_cc_status_vals[] = {
11004 { 0, "Closed" },
11005 { 1, "Open" },
11006 { 2, "Unknown" },
11007 { 0, NULL((void*)0) }
11008};
11009
11010static void
11011dissect_hs20_anqp_connection_capability(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb,
11012 int offset, int end)
11013{
11014 proto_tree *tuple;
11015 while (offset + 4 <= end) {
11016 uint8_t ip_proto, status;
11017 uint16_t port_num;
11018
11019 ip_proto = tvb_get_uint8(tvb, offset);
11020 port_num = tvb_get_letohs(tvb, offset + 1);
11021 status = tvb_get_uint8(tvb, offset + 3);
11022
11023 tuple = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_hs20_cc_proto_port_tuple, NULL((void*)0),
11024 "ProtoPort Tuple - ip_proto=%s port_num=%s status=%s",
11025 val_to_str(pinfo->pool, ip_proto, hs20_cc_proto_vals, "Unknown (%u)"),
11026 val_to_str(pinfo->pool, port_num, hs20_cc_port_vals, "Unknown (%u)"),
11027 val_to_str(pinfo->pool, status, hs20_cc_status_vals, "Reserved (%u)"));
11028 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_ip_proto,
11029 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11030 offset++;
11031 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_port_num,
11032 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11033 offset += 2;
11034 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_status,
11035 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11036 offset++;
11037 }
11038}
11039
11040static void
11041dissect_hs20_anqp_nai_home_realm_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
11042 int offset, int end)
11043{
11044 uint8_t len;
11045 proto_item *item;
11046
11047 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_count,
11048 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11049 offset++;
11050
11051 while (offset + 2 <= end) {
11052 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_encoding_type,
11053 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11054 offset++;
11055 len = tvb_get_uint8(tvb, offset);
11056 item = proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_length,
11057 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11058 offset++;
11059 if (offset + len > end) {
11060 expert_add_info(pinfo, item, &ei_hs20_anqp_nai_hrq_length);
11061 break;
11062 }
11063 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_realm_name,
11064 tvb, offset, len, ENC_ASCII0x00000000);
11065 offset += len;
11066 }
11067}
11068
11069static void
11070dissect_hs20_anqp_oper_class_indic(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
11071{
11072 while (offset < end) {
11073 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_oper_class_indic,
11074 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11075 offset++;
11076 }
11077}
11078
11079static int
11080dissect_hs20_osu_friendly_names(proto_tree *tree, tvbuff_t *tvb,
11081 packet_info *pinfo, int offset, int end _U___attribute__((unused)))
11082{
11083 int osu_fn_hf_array[3] = {hf_ieee80211_hs20_osu_friendly_name_length,
11084 hf_ieee80211_hs20_osu_friendly_name_language,
11085 hf_ieee80211_hs20_osu_friendly_name_name };
11086 uint16_t osu_fn_count = tvb_get_letohs(tvb, offset);
11087 proto_tree *fn_tree = NULL((void*)0);
11088
11089 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_friendly_names_len, tvb, offset, 2,
11090 ENC_LITTLE_ENDIAN0x80000000);
11091 offset += 2;
11092
11093 fn_tree = proto_tree_add_subtree(tree, tvb, offset, osu_fn_count,
11094 ett_hs20_friendly_names_list, NULL((void*)0),
11095 "Friendly Names List");
11096
11097 dissect_hs20_anqp_operator_friendly_name(fn_tree, tvb, pinfo, offset,
11098 offset + osu_fn_count,
11099 osu_fn_hf_array, ett_hs20_friendly_name_tree);
11100
11101 return offset + osu_fn_count;
11102}
11103
11104static int
11105dissect_hs20_osu_icon_available(proto_tree *tree, tvbuff_t *tvb,
11106 packet_info *pinfo _U___attribute__((unused)), int offset, int end _U___attribute__((unused)), uint16_t icon_index)
11107{
11108 proto_tree *icon_avail = NULL((void*)0);
11109 proto_item *pi = NULL((void*)0);
11110 int start_offset = offset;
11111 uint8_t icon_type_len = 0, icon_filename_len = 0;
11112
11113 icon_avail = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11114 ett_hs20_osu_icon_tree, &pi,
11115 "Icon Available %d", icon_index);
11116
11117 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_width, tvb, offset, 2,
11118 ENC_LITTLE_ENDIAN0x80000000);
11119 offset += 2;
11120
11121 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_height, tvb, offset, 2,
11122 ENC_LITTLE_ENDIAN0x80000000);
11123 offset += 2;
11124
11125 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_lang_code, tvb, offset, 3,
11126 ENC_ASCII0x00000000);
11127 offset += 3;
11128
11129 icon_type_len = tvb_get_uint8(tvb, offset);
11130 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_icon_type_len, tvb, offset,
11131 1, ENC_NA0x00000000);
11132 offset++;
11133
11134 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_icon_type, tvb, offset,
11135 icon_type_len, ENC_ASCII0x00000000);
11136 offset += icon_type_len;
11137
11138 icon_filename_len = tvb_get_uint8(tvb, offset);
11139 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_filename_len, tvb, offset,
11140 1, ENC_NA0x00000000);
11141 offset++;
11142
11143 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_filename, tvb, offset,
11144 icon_filename_len, ENC_ASCII0x00000000);
11145 offset += icon_filename_len;
11146
11147 proto_item_set_len(pi, offset - start_offset);
11148
11149 return offset;
11150}
11151
11152static const value_string osu_method_vals[] = {
11153 { 0, "OMA DM" },
11154 { 1, "SOAP XML SPP" },
11155 { 0, NULL((void*)0) },
11156};
11157
11158static int
11159dissect_hs20_osu_provider(proto_tree *tree, tvbuff_t *tvb,
11160 packet_info *pinfo, int offset, int end, uint8_t provider_index)
11161{
11162 proto_tree *prov_tree = NULL((void*)0);
11163 proto_item *osupi = NULL((void*)0), *uri_pi = NULL((void*)0);
11164 int start_offset = offset;
11165 uint8_t osu_server_uri_len = 0;
11166 uint8_t osu_method_list_len = 0;
11167 uint16_t icons_avail = 0, icons_index = 0;
11168 uint8_t osu_nai_len = 0;
11169 uint16_t osu_service_desc_len = 0;
11170
11171 prov_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11172 ett_hs20_osu_provider_tree, &osupi,
11173 "OSU Provider %d", provider_index);
11174
11175 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_prov_length, tvb, offset, 2,
11176 ENC_LITTLE_ENDIAN0x80000000);
11177 offset += 2;
11178
11179 offset = dissect_hs20_osu_friendly_names(prov_tree, tvb, pinfo, offset, end);
11180
11181 proto_item_set_len(osupi, offset - start_offset);
11182
11183 osu_server_uri_len = tvb_get_uint8(tvb, offset);
11184 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_server_uri_len, tvb, offset, 1,
11185 ENC_NA0x00000000);
11186 offset++;
11187
11188 uri_pi = proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_server_uri, tvb, offset,
11189 osu_server_uri_len, ENC_ASCII0x00000000);
11190 offset += osu_server_uri_len;
11191 proto_item_set_url(uri_pi);
11192
11193 osu_method_list_len = tvb_get_uint8(tvb, offset);
11194 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_method_list_len, tvb, offset, 1,
11195 ENC_NA0x00000000);
11196 offset++;
11197
11198 if (osu_method_list_len > 0) {
11199 proto_tree *osu_method_list = NULL((void*)0);
11200 uint8_t osu_method_list_index = 0;
11201
11202 osu_method_list = proto_tree_add_subtree(prov_tree, tvb, offset,
11203 osu_method_list_len,
11204 ett_hs20_osu_provider_method_list,
11205 NULL((void*)0), "OSU Method List");
11206 while (osu_method_list_len > osu_method_list_index) {
11207 proto_item *pi = NULL((void*)0);
11208 uint8_t method = tvb_get_uint8(tvb, offset);
11209
11210 pi = proto_tree_add_item(osu_method_list, hf_ieee80211_hs20_osu_method_val, tvb,
11211 offset, 1, ENC_NA0x00000000);
11212 proto_item_append_text(pi, ": %s",
11213 val_to_str_const(method, osu_method_vals,
11214 "Reserved"));
11215 offset++;
11216 osu_method_list_index++;
11217 }
11218 }
11219
11220 icons_avail = tvb_get_letohs(tvb, offset);
11221 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_icons_avail_len, tvb, offset, 2,
11222 ENC_LITTLE_ENDIAN0x80000000);
11223 offset += 2;
11224
11225 if (icons_avail > 0) {
11226 proto_tree *icon_list = NULL((void*)0);
11227 proto_item *pi = NULL((void*)0);
11228
11229 start_offset = offset;
11230
11231 icon_list = proto_tree_add_subtree(prov_tree, tvb, offset, -1,
11232 ett_osu_icons_avail_list, &pi,
11233 "Icons Available");
11234
11235 while ((offset - start_offset) < icons_avail) {
11236 offset = dissect_hs20_osu_icon_available(icon_list, tvb, pinfo, offset,
11237 end, icons_index);
11238 icons_index++;
11239 }
11240
11241 proto_item_set_len(pi, offset - start_offset);
11242 }
11243
11244 osu_nai_len = tvb_get_uint8(tvb, offset);
11245 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_nai_len, tvb, offset, 1, ENC_NA0x00000000);
11246 offset++;
11247
11248 if (osu_nai_len > 0) {
11249 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_nai, tvb, offset,
11250 osu_nai_len, ENC_ASCII0x00000000);
11251 offset += osu_nai_len;
11252 }
11253
11254 osu_service_desc_len = tvb_get_letohs(tvb, offset);
11255 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_service_desc_len, tvb, offset, 2,
11256 ENC_LITTLE_ENDIAN0x80000000);
11257 offset += 2;
11258
11259 if (osu_service_desc_len > 0) {
11260 proto_tree *desc_tree = NULL((void*)0);
11261 proto_item *pi = NULL((void*)0);
11262 uint8_t service_desc_index = 0;
11263
11264 start_offset = offset;
11265 desc_tree = proto_tree_add_subtree(prov_tree, tvb, offset, -1,
11266 ett_hs20_osu_service_desc_list, &pi,
11267 "OSU Service Description List");
11268
11269 while ((offset - start_offset) < osu_service_desc_len) {
11270 proto_tree *desc_duple = NULL((void*)0);
11271 uint8_t serv_desc_len = tvb_get_uint8(tvb, offset);
11272
11273 desc_duple = proto_tree_add_subtree_format(desc_tree, tvb, offset,
11274 1 + serv_desc_len,
11275 ett_hs20_osu_service_desc_tree, NULL((void*)0),
11276 "OSU Service Description Duple %d",
11277 service_desc_index);
11278
11279 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc_duple_len, tvb,
11280 offset, 1, ENC_NA0x00000000);
11281 offset++;
11282
11283 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc_lang, tvb, offset,
11284 3, ENC_ASCII0x00000000);
11285 offset += 3;
11286
11287 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc, tvb, offset,
11288 serv_desc_len - 3, ENC_ASCII0x00000000);
11289 offset += serv_desc_len - 3;
11290
11291 service_desc_index++;
11292 }
11293
11294 proto_item_set_len(pi, offset - start_offset);
11295 }
11296
11297 return offset;
11298}
11299
11300static void
11301dissect_hs20_anqp_osu_providers_list(proto_tree *tree, tvbuff_t *tvb,
11302 packet_info *pinfo, int offset, int end)
11303{
11304 uint8_t ssid_len = tvb_get_uint8(tvb, offset);
11305 uint8_t osu_prov_count = 0, osu_prov_index = 0;
11306
11307 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_list_ssid_len, tvb, offset, 1,
11308 ENC_NA0x00000000);
11309 offset++;
11310
11311 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_ssid, tvb, offset, ssid_len,
11312 ENC_UTF_80x00000002);
11313 offset += ssid_len;
11314
11315 osu_prov_count = tvb_get_uint8(tvb, offset);
11316 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_count, tvb, offset, 1,
11317 ENC_NA0x00000000);
11318 offset++;
11319
11320 if (osu_prov_count > 0) {
11321 int start_offset = offset;
11322 proto_item *pi = NULL((void*)0);
11323 proto_tree *osu_prov_list = NULL((void*)0);
11324
11325 osu_prov_list = proto_tree_add_subtree(tree, tvb, offset, -1,
11326 ett_hs20_osu_providers_list, &pi,
11327 "OSU Providers List");
11328 while (offset < end && osu_prov_count > osu_prov_index) {
11329 offset = dissect_hs20_osu_provider(osu_prov_list, tvb, pinfo, offset, end,
11330 osu_prov_index);
11331 osu_prov_index++;
11332 }
11333
11334 proto_item_set_len(pi, offset - start_offset);
11335 }
11336}
11337
11338static void
11339dissect_hs20_anqp_icon_request(proto_tree *tree, tvbuff_t *tvb, int offset,
11340 int end)
11341{
11342 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_request_filename, tvb, offset,
11343 end - offset, ENC_UTF_80x00000002);
11344}
11345
11346static const value_string hs20_icon_download_status_vals[] = {
11347 { 0, "Success" },
11348 { 1, "File not found" },
11349 { 2, "Unspecified file error" },
11350 { 0, NULL((void*)0) }
11351};
11352
11353static void
11354dissect_hs20_anqp_icon_binary_file(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset,
11355 int end _U___attribute__((unused)))
11356{
11357 uint8_t icon_download_status = tvb_get_uint8(tvb, offset);
11358 proto_item *pi = NULL((void*)0);
11359 uint8_t icon_type_len = 0;
11360 uint16_t icon_binary_data_len = 0;
11361
11362 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_file_status, tvb, offset, 1,
11363 ENC_NA0x00000000);
11364 offset++;
11365 proto_item_append_text(pi, ": %s",
11366 val_to_str(pinfo->pool, icon_download_status,
11367 hs20_icon_download_status_vals,
11368 "Reserved (%u)"));
11369
11370 icon_type_len = tvb_get_uint8(tvb, offset);
11371 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_type_length, tvb, offset, 1, ENC_NA0x00000000);
11372 offset++;
11373
11374 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_type, tvb, offset, icon_type_len,
11375 ENC_UTF_80x00000002);
11376 offset += icon_type_len;
11377
11378 icon_binary_data_len = tvb_get_letohs(tvb, offset);
11379 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_data_len, tvb, offset, 2,
11380 ENC_BIG_ENDIAN0x00000000);
11381 offset += 2;
11382
11383 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_data, tvb, offset,
11384 icon_binary_data_len, ENC_NA0x00000000);
11385}
11386
11387static void
11388dissect_hs20_anqp_operator_icon_metadata(proto_tree *tree, tvbuff_t *tvb,
11389 int offset, int end _U___attribute__((unused)))
11390{
11391 proto_item *pi = NULL((void*)0);
11392 int start_offset = offset;
11393 uint8_t icon_type_len = 0, icon_filename_len = 0;
11394
11395 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_width, tvb, offset, 2,
11396 ENC_LITTLE_ENDIAN0x80000000);
11397 offset += 2;
11398
11399 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_height, tvb, offset, 2,
11400 ENC_LITTLE_ENDIAN0x80000000);
11401 offset += 2;
11402
11403 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_lang_code, tvb, offset, 3,
11404 ENC_ASCII0x00000000);
11405 offset += 3;
11406
11407 icon_type_len = tvb_get_uint8(tvb, offset);
11408 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_icon_type_len, tvb, offset,
11409 1, ENC_NA0x00000000);
11410 offset++;
11411
11412 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_icon_type, tvb, offset,
11413 icon_type_len, ENC_ASCII0x00000000);
11414 offset += icon_type_len;
11415
11416 icon_filename_len = tvb_get_uint8(tvb, offset);
11417 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_filename_len, tvb, offset,
11418 1, ENC_NA0x00000000);
11419 offset++;
11420
11421 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_filename, tvb, offset,
11422 icon_filename_len, ENC_ASCII0x00000000);
11423 offset += icon_filename_len;
11424
11425 proto_item_set_len(pi, offset - start_offset);
11426}
11427
11428static void
11429dissect_anqp_venue_url(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
11430{
11431 uint16_t url_duple_index = 0;
11432
11433 while (offset < end) {
11434 proto_tree *venue_url = NULL((void*)0);
11435 proto_item *url_pi = NULL((void*)0);
11436 uint8_t url_duple_len = tvb_get_uint8(tvb, offset);
11437
11438 venue_url = proto_tree_add_subtree_format(tree, tvb, offset,
11439 url_duple_len + 1, ett_hs20_venue_url, NULL((void*)0),
11440 "Venue URL Duple %d", url_duple_index);
11441
11442 proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_url_length, tvb, offset,
11443 1, ENC_NA0x00000000);
11444 offset++;
11445
11446 proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_number, tvb, offset, 1,
11447 ENC_NA0x00000000);
11448 offset++;
11449
11450 url_pi = proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_url, tvb, offset,
11451 url_duple_len -1, ENC_ASCII0x00000000);
11452 proto_item_set_url(url_pi);
11453
11454 offset += (url_duple_len - 1);
11455
11456 url_duple_index++;
11457 }
11458}
11459
11460static const value_string advice_of_charge_type_vals[] = {
11461 { 0, "Time-based" },
11462 { 1, "Data-volume-based" },
11463 { 2, "Time-and-data-volume-based" },
11464 { 3, "Unlimited" },
11465 { 0, NULL((void*)0) }
11466};
11467
11468static void
11469dissect_hs20_anqp_advice_of_charge(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset,
11470 int end _U___attribute__((unused)))
11471{
11472 uint16_t toc_index = 0;
11473
11474 while (offset < end) {
11475 uint16_t adv_charge_len = tvb_get_letohs(tvb, offset);
11476 proto_tree *aoc_tree = NULL((void*)0);
11477 proto_tree *plan_info_tree = NULL((void*)0);
11478 proto_item *pi = NULL((void*)0), *tpi = NULL((void*)0);
11479 int start_offset = offset;
11480 uint8_t aoc_type = 0, nai_realm_len = 0;
11481 uint8_t plan_index = 0;
11482 uint16_t plan_tot_len = 0;
11483 int plan_offset = 0;
11484
11485 aoc_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11486 ett_hs20_advice_of_charge, &pi,
11487 "Advice of Charge Duple %d", toc_index);
11488 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_advice_of_charge_length, tvb,
11489 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11490 offset += 2;
11491
11492 aoc_type = tvb_get_uint8(tvb, offset);
11493 tpi = proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_advice_of_charge_type, tvb,
11494 offset, 1, ENC_NA0x00000000);
11495 offset++;
11496 proto_item_append_text(tpi, ": %s",
11497 val_to_str(pinfo->pool, aoc_type,
11498 advice_of_charge_type_vals,
11499 "Reserved (%u)"));
11500
11501 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding, tvb,
11502 offset, 1, ENC_NA0x00000000);
11503 offset++;
11504
11505 nai_realm_len = tvb_get_uint8(tvb, offset);
11506 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm_len, tvb, offset,
11507 1, ENC_NA0x00000000);
11508 offset++;
11509
11510 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm, tvb, offset,
11511 nai_realm_len, ENC_UTF_80x00000002);
11512 offset += nai_realm_len;
11513
11514 plan_tot_len = adv_charge_len - 3 - nai_realm_len;
11515 plan_offset = offset;
11516
11517 while (offset < (plan_offset + plan_tot_len)) {
11518 uint16_t plan_len = tvb_get_letohs(tvb, offset);
11519
11520 plan_info_tree = proto_tree_add_subtree_format(aoc_tree, tvb, offset,
11521 plan_len + 2, ett_hs20_aoc_plan, NULL((void*)0),
11522 "Plan #%u", plan_index);
11523
11524 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_len, tvb,
11525 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11526 offset += 2;
11527
11528 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_lang, tvb,
11529 offset, 3, ENC_ASCII0x00000000);
11530 offset += 3;
11531
11532 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_curcy, tvb,
11533 offset, 3, ENC_ASCII0x00000000);
11534 offset += 3;
11535
11536 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_information,
11537 tvb, offset, plan_len - 6, ENC_UTF_80x00000002);
11538 offset += plan_len - 6;
11539
11540 plan_index++;
11541 }
11542
11543 proto_item_set_len(pi, offset - start_offset);
11544
11545 toc_index++;
11546 }
11547}
11548
11549static int
11550dissect_hs20_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11551{
11552 uint8_t subtype;
11553 int ofn_hf_array[3] = {hf_ieee80211_hs20_anqp_ofn_length,
11554 hf_ieee80211_hs20_anqp_ofn_language,
11555 hf_ieee80211_hs20_anqp_ofn_name };
11556
11557 int end = tvb_reported_length(tvb);
11558 int offset = 0;
11559 anqp_info_dissector_data_t* anqp_data = (anqp_info_dissector_data_t*)data;
11560
11561 DISSECTOR_ASSERT(anqp_data)((void) ((anqp_data) ? (void)0 : (proto_report_dissector_bug(
"%s:%u: failed assertion \"%s\"", "epan/dissectors/packet-ieee80211.c"
, 11561, "anqp_data"))))
;
11562
11563 subtype = tvb_get_uint8(tvb, offset);
11564 proto_item_append_text(tree, " - HS 2.0 %s",
11565 val_to_str(pinfo->pool, subtype, hs20_anqp_subtype_vals,
11566 "Reserved (%u)"));
11567 if (anqp_data->idx == 0) {
11568 col_append_fstr(pinfo->cinfo, COL_INFO, " HS 2.0 %s",
11569 val_to_str(pinfo->pool, subtype, hs20_anqp_subtype_vals,
11570 "Reserved (%u)"));
11571 } else if (anqp_data->idx == 1) {
11572 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
11573 }
11574 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_subtype, tvb, offset, 1,
11575 ENC_LITTLE_ENDIAN0x80000000);
11576 offset++;
11577
11578 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_reserved, tvb, offset, 1,
11579 ENC_LITTLE_ENDIAN0x80000000);
11580 offset++;
11581
11582 switch (subtype) {
11583 case HS20_ANQP_HS_QUERY_LIST1:
11584 dissect_hs20_anqp_hs_query_list(tree, tvb, offset, end);
11585 break;
11586 case HS20_ANQP_HS_CAPABILITY_LIST2:
11587 dissect_hs20_anqp_hs_capability_list(tree, tvb, offset, end);
11588 break;
11589 case HS20_ANQP_OPERATOR_FRIENDLY_NAME3:
11590 dissect_hs20_anqp_operator_friendly_name(tree, tvb, pinfo, offset, end,
11591 ofn_hf_array, ett_hs20_ofn_tree);
11592 break;
11593 case HS20_ANQP_WAN_METRICS4:
11594 dissect_hs20_anqp_wan_metrics(tree, tvb, offset, anqp_data->request);
11595 break;
11596 case HS20_ANQP_CONNECTION_CAPABILITY5:
11597 dissect_hs20_anqp_connection_capability(tree, pinfo, tvb, offset, end);
11598 break;
11599 case HS20_ANQP_NAI_HOME_REALM_QUERY6:
11600 dissect_hs20_anqp_nai_home_realm_query(tree, tvb, pinfo, offset, end);
11601 break;
11602 case HS20_ANQP_OPERATING_CLASS_INDICATION7:
11603 dissect_hs20_anqp_oper_class_indic(tree, tvb, offset, end);
11604 break;
11605 case HS20_ANQP_OSU_PROVIDERS_LIST8:
11606 dissect_hs20_anqp_osu_providers_list(tree, tvb, pinfo, offset, end);
11607 break;
11608 case HS20_ANQP_ICON_REQUEST10:
11609 dissect_hs20_anqp_icon_request(tree, tvb, offset, end);
11610 break;
11611 case HS20_ANQP_ICON_BINARY_FILE11:
11612 dissect_hs20_anqp_icon_binary_file(tree, pinfo, tvb, offset, end);
11613 break;
11614 case HS20_ANQP_OPERATOR_ICON_METADATA12:
11615 dissect_hs20_anqp_operator_icon_metadata(tree, tvb, offset, end);
11616 break;
11617 case HS20_ANQP_ADVICE_OF_CHARGE13:
11618 dissect_hs20_anqp_advice_of_charge(tree, pinfo, tvb, offset, end);
11619 break;
11620 default:
11621 if (offset == end)
11622 break;
11623 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_payload, tvb, offset,
11624 end - offset, ENC_NA0x00000000);
11625 break;
11626 }
11627
11628 return tvb_captured_length(tvb);
11629}
11630
11631// MBO ANQP element subtypes
11632#define MBO_ANQP_QUERY_LIST1 1
11633#define MBO_ANQP_CELLULAR_DATA_PREFERENCE2 2
11634
11635static const value_string mbo_anqp_subtype_vals[] = {
11636 { MBO_ANQP_QUERY_LIST1, "MBO Query List" },
11637 { MBO_ANQP_CELLULAR_DATA_PREFERENCE2, "Cellular Data Connection Preference" },
11638 { 0, NULL((void*)0) }
11639};
11640
11641static int
11642dissect_mbo_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
11643{
11644 uint8_t subtype;
11645 int len = tvb_reported_length(tvb);
11646 int offset = 0;
11647
11648 if (len < 2) {
11649 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
11650 return offset;
11651 }
11652
11653 subtype = tvb_get_uint8(tvb, offset);
11654 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_subtype, tvb, offset, 1, ENC_NA0x00000000);
11655 offset++;
11656 len--;
11657
11658 switch (subtype) {
11659 case MBO_ANQP_QUERY_LIST1:
11660 while (len > 0) {
11661 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_query, tvb, offset, 1, ENC_NA0x00000000);
11662 offset++;
11663 len--;
11664 }
11665 break;
11666 case MBO_ANQP_CELLULAR_DATA_PREFERENCE2:
11667 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_cellular_pref, tvb, offset,
11668 1, ENC_NA0x00000000);
11669 offset++;
11670 len--;
11671 break;
11672 default:
11673 break;
11674 }
11675
11676 return offset;
11677}
11678
11679static int
11680dissect_vendor_wifi_alliance_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11681{
11682 uint8_t subtype;
11683 int offset = 0;
11684 tvbuff_t *subtvb;
11685
11686 subtype = tvb_get_uint8(tvb, offset);
11687 proto_tree_add_item(tree, hf_ieee80211_anqp_wfa_subtype, tvb, offset, 1, ENC_NA0x00000000);
11688 offset += 1;
11689
11690 subtvb = tvb_new_subset_remaining(tvb, offset);
11691 if (!dissector_try_uint_with_data(wifi_alliance_anqp_info_table, subtype, subtvb, pinfo, tree, false0, data))
11692 call_data_dissector(subtvb, pinfo, tree);
11693
11694 return tvb_captured_length(tvb);
11695}
11696
11697
11698static int
11699dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data);
11700
11701static int
11702dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11703 bool_Bool request, int idx)
11704{
11705 uint16_t id, len;
11706 uint32_t oui;
11707 proto_item *item;
11708 tvbuff_t *vendor_tvb;
11709 anqp_info_dissector_data_t anqp_info;
11710
11711 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_id,
11712 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11713 id = tvb_get_letohs(tvb, offset);
11714 if (id != ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797) {
11715 if (idx == 0) {
11716 proto_item_append_text(tree, " - %s",
11717 val_to_str_ext(pinfo->pool, id, &anqp_info_id_vals_ext, "Unknown (%u)"));
11718 col_append_fstr(pinfo->cinfo, COL_INFO, " %s",
11719 val_to_str_ext(pinfo->pool, id, &anqp_info_id_vals_ext, "Unknown (%u)"));
11720 } else if (idx == 1) {
11721 proto_item_append_text(tree, ", ..");
11722 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
11723 }
11724 }
11725 tree = proto_item_add_subtree(item, ett_gas_anqp);
11726 offset += 2;
11727 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_length,
11728 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11729 len = tvb_get_letohs(tvb, offset);
11730 offset += 2;
11731 if (tvb_reported_length_remaining(tvb, offset) < len) {
11732 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_info_length);
11733 return 4 + len;
11734 }
11735 switch (id)
11736 {
11737 case ANQP_INFO_ANQP_QUERY_LIST256:
11738 dissect_anqp_query_list(tree, tvb, pinfo, offset, offset + len);
11739 break;
11740 case ANQP_INFO_ANQP_CAPAB_LIST257:
11741 dissect_anqp_capab_list(tree, tvb, pinfo, offset, offset + len);
11742 break;
11743 case ANQP_INFO_VENUE_NAME_INFO258:
11744 dissect_venue_name_info(tree, tvb, pinfo, offset, offset + len);
11745 break;
11746 case ANQP_INFO_NETWORK_AUTH_TYPE_INFO260:
11747 dissect_network_auth_type(tree, tvb, offset, offset + len);
11748 break;
11749 case ANQP_INFO_ROAMING_CONSORTIUM_LIST261:
11750 dissect_roaming_consortium_list(tree, tvb, pinfo, offset, offset + len);
11751 break;
11752 case ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262:
11753 dissect_ip_addr_type_availability_info(tree, tvb, offset);
11754 break;
11755 case ANQP_INFO_NAI_REALM_LIST263:
11756 dissect_nai_realm_list(tree, tvb, pinfo, offset, offset + len);
11757 break;
11758 case ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264:
11759 dissect_3gpp_cellular_network_info(tree, tvb, pinfo, offset);
11760 break;
11761 case ANQP_INFO_DOMAIN_NAME_LIST268:
11762 dissect_domain_name_list(tree, tvb, offset, offset + len);
11763 break;
11764 case ANQP_INFO_NEIGHBOR_REPORT272:
11765 {
11766 tvbuff_t *report_tvb;
11767 static const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52 };
11768
11769 report_tvb = tvb_new_subset_length(tvb, offset, len);
11770 int report_offset = 0;
11771 /* Cf. IEEE 802.11-2020 9.4.5.19 Neighbor Report ANQP-element with
11772 * IEEE 802.11-2016 9.4.5.19 and IEEE 802.11-2012 8.4.4.19.
11773 * The line "The Element ID and the Length fields of the Neighbor Report
11774 * element... are not included" was removed as it made it impossible
11775 * to include more than one Neighbor Element (using the overall ANQP
11776 * Info length could not distinguish between extra length due to a second
11777 * Neighbor Report and extra length due to optional subelements.)
11778 * The headerless version was apparently never deployed so use the new
11779 * specification (though we could test to see if the next octet is
11780 * TAG_NEIGHBOR_REPORT and dissect with the older method if not.)
11781 */
11782 while (tvb_reported_length_remaining(report_tvb, report_offset)) {
11783 report_offset += add_tagged_field(pinfo, tree, report_tvb, report_offset, 0,
11784 ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
11785 }
11786 }
11787 break;
11788 case ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797:
11789 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
11790 offset += 3;
11791 vendor_tvb = tvb_new_subset_length(tvb, offset, len - 3);
11792
11793 anqp_info.request = request;
11794 anqp_info.idx = idx;
11795 if (!dissector_try_uint_with_data(vendor_specific_anqp_info_table, oui, vendor_tvb, pinfo, tree, false0, &anqp_info))
11796 {
11797 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info, tvb, offset, len, ENC_NA0x00000000);
11798 }
11799 break;
11800 case ANQP_INFO_VENUE_URL277:
11801 dissect_anqp_venue_url(tree, tvb, offset, offset + len);
11802 break;
11803 case ANQP_INFO_ADVICE_OF_CHARGE278:
11804 dissect_hs20_anqp_advice_of_charge(tree, pinfo, tvb, offset, offset + len);
11805 break;
11806 case ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280:
11807 dissect_anqp_network_auth_type_timestamp(tree, tvb, offset, offset + len);
11808 break;
11809 default:
11810 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
11811 tvb, offset, len, ENC_NA0x00000000);
11812 break;
11813 }
11814
11815 return 4 + len;
11816}
11817
11818static void
11819dissect_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, bool_Bool request)
11820{
11821 int idx = 0;
11822
11823 proto_item_append_text(tree, ": ANQP ");
11824 proto_item_append_text(tree, request ? "Request" : "Response");
11825 if (tvb_reported_length_remaining(tvb, offset) < 4) {
11826 expert_add_info(pinfo, tree, &ei_ieee80211_not_enough_room_for_anqp_header);
11827 return;
11828 }
11829 col_append_fstr(pinfo->cinfo, COL_INFO, ", ANQP %s",
11830 request ? "Req" : "Resp");
11831 while (tvb_reported_length_remaining(tvb, offset) > 0) {
11832 offset += dissect_anqp_info(tree, tvb, pinfo, offset, request, idx);
11833 idx += 1;
11834 }
11835}
11836
11837static unsigned
11838dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11839 unsigned type, unsigned subtype)
11840{
11841 uint16_t req_len;
11842 int start = offset;
11843 proto_item *item;
11844 proto_tree *query;
11845
11846 /* Query Request Length (2 octets) */
11847 req_len = tvb_get_letohs(tvb, offset);
11848
11849 query = proto_tree_add_subtree(tree, tvb, offset, 2 + req_len, ett_gas_query, &item, "Query Request");
11850 if (tvb_reported_length_remaining(tvb, offset) < 2 + req_len) {
11851 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_request_length);
11852 return tvb_reported_length_remaining(tvb, offset);
11853 }
11854
11855 proto_tree_add_item(query, hf_ieee80211_ff_query_request_length,
11856 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11857 offset += 2;
11858 /*
11859 * Query Request (GAS query; formatted per protocol specified in the
11860 * Advertisement Protocol IE)
11861 */
11862 switch (type) {
11863 case ADV_PROTO_ID_ANQP0:
11864 dissect_anqp(query, tvb, pinfo, offset, true1);
11865 break;
11866 case ADV_PROTO_ID_VS221:
11867 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) | WFA_SUBTYPE_DPP26)) {
11868 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
11869 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals, "Unknown (%u)"));
11870 dissect_wifi_dpp_config_proto(pinfo, query, tvb, offset);
11871 }
11872 break;
11873 default:
11874 proto_tree_add_item(query, hf_ieee80211_ff_query_request,
11875 tvb, offset, req_len, ENC_NA0x00000000);
11876 }
11877 offset += req_len;
11878
11879 return offset - start;
11880}
11881
11882static unsigned
11883dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11884 unsigned type, unsigned subtype)
11885{
11886 uint16_t resp_len;
11887 int start = offset;
11888 proto_item *item;
11889 proto_tree *query;
11890
11891 /* Query Response Length (2 octets) */
11892 resp_len = tvb_get_letohs(tvb, offset);
11893
11894 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
11895 ett_gas_query, &item, "Query Response");
11896 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
11897 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
11898 return tvb_reported_length_remaining(tvb, offset);
11899 }
11900
11901 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
11902 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11903 offset += 2;
11904 /* Query Response (optional) */
11905 if (resp_len) {
11906 switch (type) {
11907 case ADV_PROTO_ID_ANQP0:
11908 dissect_anqp(query, tvb, pinfo, offset, false0);
11909 break;
11910 case ADV_PROTO_ID_VS221:
11911 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) | WFA_SUBTYPE_DPP26)) {
11912 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
11913 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals, "Unknown (%u)"));
11914 dissect_wifi_dpp_config_proto(pinfo, query, tvb, offset);
11915 }
11916 break;
11917 default:
11918 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
11919 tvb, offset, resp_len, ENC_NA0x00000000);
11920 }
11921 offset += resp_len;
11922 }
11923
11924 return offset - start;
11925}
11926
11927static reassembly_table gas_reassembly_table;
11928
11929static int ett_gas_resp_fragment;
11930static int ett_gas_resp_fragments;
11931
11932static int hf_ieee80211_gas_resp_fragments;
11933static int hf_ieee80211_gas_resp_fragment;
11934static int hf_ieee80211_gas_resp_fragment_overlap;
11935static int hf_ieee80211_gas_resp_fragment_overlap_conflict;
11936static int hf_ieee80211_gas_resp_fragment_multiple_tails;
11937static int hf_ieee80211_gas_resp_fragment_too_long_fragment;
11938static int hf_ieee80211_gas_resp_fragment_error;
11939static int hf_ieee80211_gas_resp_fragment_count;
11940static int hf_ieee80211_gas_resp_reassembled_in;
11941static int hf_ieee80211_gas_resp_reassembled_length;
11942
11943static const fragment_items gas_resp_frag_items = {
11944 &ett_gas_resp_fragment,
11945 &ett_gas_resp_fragments,
11946 &hf_ieee80211_gas_resp_fragments,
11947 &hf_ieee80211_gas_resp_fragment,
11948 &hf_ieee80211_gas_resp_fragment_overlap,
11949 &hf_ieee80211_gas_resp_fragment_overlap_conflict,
11950 &hf_ieee80211_gas_resp_fragment_multiple_tails,
11951 &hf_ieee80211_gas_resp_fragment_too_long_fragment,
11952 &hf_ieee80211_gas_resp_fragment_error,
11953 &hf_ieee80211_gas_resp_fragment_count,
11954 &hf_ieee80211_gas_resp_reassembled_in,
11955 &hf_ieee80211_gas_resp_reassembled_length,
11956 /* Reassembled data field */
11957 NULL((void*)0),
11958 "GAS Response fragments"
11959};
11960
11961static unsigned
11962dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11963 unsigned type, unsigned subtype _U___attribute__((unused)), uint8_t frag, bool_Bool more,
11964 uint8_t dialog_token)
11965{
11966 uint16_t resp_len;
11967 int start = offset;
11968 proto_item *item;
11969 proto_tree *query;
11970
11971 /* Query Response Length (2 octets) */
11972 resp_len = tvb_get_letohs(tvb, offset);
11973
11974 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
11975 ett_gas_query, &item, "Query Response");
11976 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
11977 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
11978 return tvb_reported_length_remaining(tvb, offset);
11979 }
11980
11981 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
11982 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11983 offset += 2;
11984 /* Query Response (optional) */
11985 if (resp_len) {
11986 if (type == ADV_PROTO_ID_ANQP0 && (frag == 0) && !more)
11987 dissect_anqp(query, tvb, pinfo, offset, false0);
11988 else {
11989 fragment_head *frag_msg;
11990 bool_Bool save_fragmented;
11991 tvbuff_t *new_tvb;
11992
11993 save_fragmented = pinfo->fragmented;
11994 pinfo->fragmented = true1;
11995 frag_msg = fragment_add_seq_check(&gas_reassembly_table, tvb, offset,
11996 pinfo, dialog_token, NULL((void*)0),
11997 frag, resp_len, more);
11998 new_tvb = process_reassembled_data(tvb, offset, pinfo,
11999 "Reassembled GAS Query Response",
12000 frag_msg, &gas_resp_frag_items,
12001 NULL((void*)0), tree);
12002 if (new_tvb) {
12003 switch (type) {
12004 case ADV_PROTO_ID_ANQP0:
12005 dissect_anqp(query, new_tvb, pinfo, 0, false0);
12006 break;
12007 case ADV_PROTO_ID_VS221:
12008 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) |
12009 WFA_SUBTYPE_DPP26)) {
12010 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
12011 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals,
12012 "Unknown (%u)"));
12013 dissect_wifi_dpp_config_proto(pinfo, query, new_tvb, 0);
12014 } else {
12015 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
12016 new_tvb, 0,
12017 tvb_reported_length_remaining(new_tvb, 0),
12018 ENC_NA0x00000000);
12019 }
12020 break;
12021 default:
12022 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
12023 new_tvb, 0,
12024 tvb_reported_length_remaining(new_tvb, 0),
12025 ENC_NA0x00000000);
12026 }
12027 }
12028
12029 /* The old tvb cannot be used anymore */
12030 ieee80211_tvb_invalid = true1;
12031
12032 pinfo->fragmented = save_fragmented;
12033 }
12034 offset += resp_len;
12035 }
12036
12037 return offset - start;
12038}
12039
12040/* ************************************************************************* */
12041/* Dissect and add fixed mgmt fields to protocol tree */
12042/* ************************************************************************* */
12043
12044static uint64_t last_timestamp;
12045
12046static unsigned
12047add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12048{
12049 last_timestamp = tvb_get_letoh64(tvb, offset);
12050 proto_tree_add_item(tree, hf_ieee80211_ff_timestamp, tvb, offset, 8,
12051 ENC_LITTLE_ENDIAN0x80000000);
12052 return 8;
12053}
12054
12055static unsigned
12056add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
12057{
12058 proto_tree_add_item(tree, hf_ieee80211_ff_beacon_interval, tvb, offset, 2,
12059 ENC_LITTLE_ENDIAN0x80000000);
12060 col_append_fstr(pinfo->cinfo, COL_INFO, ", BI=%d",
12061 tvb_get_letohs(tvb, offset));
12062 return 2;
12063}
12064
12065static unsigned
12066add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset);
12067
12068static unsigned
12069add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12070{
12071 static int * const ieee80211_cap_info_fields[] = {
12072 &hf_ieee80211_ff_cf_ess,
12073 &hf_ieee80211_ff_cf_ibss,
12074 &hf_ieee80211_ff_cf_reserved1,
12075 &hf_ieee80211_ff_cf_reserved2,
12076 &hf_ieee80211_ff_cf_privacy,
12077 &hf_ieee80211_ff_cf_preamble,
12078 &hf_ieee80211_ff_cf_critical_update_flag,
12079 &hf_ieee80211_ff_cf_nontran_bss_critical_update_flag,
12080 &hf_ieee80211_ff_cf_spec_man,
12081 &hf_ieee80211_ff_cf_qos,
12082 &hf_ieee80211_ff_cf_short_slot_time,
12083 &hf_ieee80211_ff_cf_apsd,
12084 &hf_ieee80211_ff_cf_radio_measurement,
12085 &hf_ieee80211_ff_cf_epd,
12086 &hf_ieee80211_ff_cf_reserved5,
12087 &hf_ieee80211_ff_cf_reserved6,
12088 NULL((void*)0)
12089 };
12090
12091 /* The capability information includes DMG parameters whenever it is transmitted by
12092 a DMG STA/AP (802.11ad-2012, 8.4.1.4) */
12093
12094 bool_Bool isDMG = GPOINTER_TO_INT(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY))((gint) (glong) (p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan
, IS_DMG_KEY)))
;
12095
12096 if (isDMG) {
12097 proto_item *cap_item;
12098 proto_tree *cap_tree;
12099 cap_item = proto_tree_add_item(tree, hf_ieee80211_ff_capture, tvb, offset, 2,
12100 ENC_LITTLE_ENDIAN0x80000000);
12101 cap_tree = proto_item_add_subtree(cap_item, ett_cap_tree);
12102 add_ff_dmg_params(cap_tree, tvb, pinfo, offset);
12103 } else {
12104 /*
12105 * We can only interpret the ESS and IBSS fields to be an AP if the
12106 * frame is a BEACON or PROBE_RESPONSE
12107 */
12108 uint32_t l_frame_type = GPOINTER_TO_UINT(p_get_proto_data(wmem_file_scope(),((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
12109 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
12110 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
12111 if (((tvb_get_letohs(tvb, offset) & 0x0003) == 0x1 &&
12112 (l_frame_type == MGT_BEACON0x08 || l_frame_type == MGT_PROBE_RESP0x05)) ||
12113 l_frame_type == MGT_ASSOC_RESP0x01 || l_frame_type == MGT_REASSOC_RESP0x03) {
12114 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_AP_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
12115 }
12116
12117 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
12118 hf_ieee80211_ff_capture,
12119 ett_cap_tree, ieee80211_cap_info_fields,
12120 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12121 }
12122 return 2;
12123}
12124
12125static unsigned
12126add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12127{
12128 proto_tree_add_item(tree, hf_ieee80211_ff_auth_alg, tvb, offset, 2,
12129 ENC_LITTLE_ENDIAN0x80000000);
12130 return 2;
12131}
12132
12133static unsigned
12134add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12135{
12136 proto_tree_add_item(tree, hf_ieee80211_ff_auth_seq, tvb, offset, 2,
12137 ENC_LITTLE_ENDIAN0x80000000);
12138 return 2;
12139}
12140
12141static unsigned
12142add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12143{
12144 proto_tree_add_item(tree, hf_ieee80211_ff_current_ap, tvb, offset, 6,
12145 ENC_NA0x00000000);
12146 return 6;
12147}
12148
12149static unsigned
12150add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12151{
12152 proto_tree_add_item(tree, hf_ieee80211_ff_listen_ival, tvb, offset, 2,
12153 ENC_LITTLE_ENDIAN0x80000000);
12154 return 2;
12155}
12156
12157static unsigned
12158add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12159{
12160 proto_tree_add_item(tree, hf_ieee80211_ff_reason, tvb, offset, 2,
12161 ENC_LITTLE_ENDIAN0x80000000);
12162 return 2;
12163}
12164
12165static unsigned
12166add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12167{
12168 proto_tree_add_item(tree, hf_ieee80211_ff_assoc_id, tvb, offset, 2,
12169 ENC_LITTLE_ENDIAN0x80000000);
12170 return 2;
12171}
12172
12173static unsigned
12174add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12175{
12176 proto_tree_add_item(tree, hf_ieee80211_ff_status_code, tvb, offset, 2,
12177 ENC_LITTLE_ENDIAN0x80000000);
12178 return 2;
12179}
12180
12181static unsigned
12182add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12183{
12184 proto_tree_add_item(tree, hf_ieee80211_ff_category_code, tvb, offset, 1,
12185 ENC_LITTLE_ENDIAN0x80000000);
12186 return 1;
12187}
12188
12189static unsigned
12190add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12191{
12192 proto_tree_add_item(tree, hf_ieee80211_ff_action_code, tvb, offset, 1,
12193 ENC_LITTLE_ENDIAN0x80000000);
12194 return 1;
12195}
12196
12197static unsigned
12198add_ff_trigger(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12199{
12200 uint8_t trigger = tvb_get_uint8(tvb, offset);
12201 col_append_fstr(pinfo->cinfo, COL_INFO, ", Trigger=%d (%s)", trigger,
12202 val_to_str_const(trigger, ftm_trigger_vals, "Unknown"));
12203 proto_tree_add_item(tree, hf_ieee80211_ff_trigger, tvb, offset, 1,
12204 ENC_LITTLE_ENDIAN0x80000000);
12205 return 1;
12206}
12207
12208static unsigned
12209add_ff_ftm_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12210{
12211 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_tod, tvb, offset, 6,
12212 ENC_LITTLE_ENDIAN0x80000000);
12213 return 6;
12214}
12215
12216static unsigned
12217add_ff_ftm_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12218{
12219 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_toa, tvb, offset, 6,
12220 ENC_LITTLE_ENDIAN0x80000000);
12221 return 6;
12222}
12223
12224static unsigned
12225add_ff_ftm_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12226{
12227 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_tod_err, tvb, offset, 2,
12228 ENC_LITTLE_ENDIAN0x80000000);
12229 return 2;
12230}
12231
12232static unsigned
12233add_ff_ftm_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12234{
12235 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_toa_err, tvb, offset, 2,
12236 ENC_LITTLE_ENDIAN0x80000000);
12237 return 2;
12238}
12239
12240static unsigned
12241add_ff_ftm_tod_err1(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12242{
12243 static int * const fields[] = {
12244 &hf_ieee80211_ff_ftm_max_tod_error_exponent,
12245 &hf_ieee80211_ff_ftm_tod_err_reserved,
12246 &hf_ieee80211_ff_ftm_tod_not_continuous,
12247 NULL((void*)0)
12248 };
12249
12250 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ftm_tod_err1,
12251 ett_ff_ftm_tod_err1, fields,
12252 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12253 return 1;
12254}
12255
12256static unsigned
12257add_ff_ftm_toa_err1(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12258{
12259 static int * const fields[] = {
12260 &hf_ieee80211_ff_ftm_max_toa_error_exponent,
12261 &hf_ieee80211_ff_ftm_toa_err_reserved,
12262 &hf_ieee80211_ff_ftm_invalid_measurement,
12263 &hf_ieee80211_ff_ftm_toa_type,
12264 NULL((void*)0)
12265 };
12266
12267 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ftm_toa_err1,
12268 ett_ff_ftm_toa_err1, fields,
12269 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12270 return 1;
12271}
12272
12273static unsigned
12274add_ff_ftm_cfo_parameter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12275{
12276 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_cfo, tvb, offset, 2,
12277 ENC_LITTLE_ENDIAN0x80000000);
12278 return 2;
12279}
12280
12281static unsigned
12282add_ff_ftm_r2i_ndp_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12283{
12284 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_r2i_ndp_tx_power, tvb, offset, 1,
12285 ENC_LITTLE_ENDIAN0x80000000);
12286 return 1;
12287}
12288
12289static unsigned
12290add_ff_ftm_i2r_ndp_target_rssi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12291{
12292 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_i2r_ndp_target_rssi, tvb, offset, 1,
12293 ENC_LITTLE_ENDIAN0x80000000);
12294 return 1;
12295}
12296
12297static int
12298dissect_ftm_params(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
12299{
12300 int offset = 0;
12301 int len = 0;
12302 proto_tree *ftm_param_tree = tree;
12303 static int * const ieee80211_ftm_params_fields1[] = {
12304 &hf_ieee80211_ff_ftm_param_status_indication,
12305 &hf_ieee80211_ff_ftm_param_value,
12306 &hf_ieee80211_ff_ftm_param_reserved1,
12307 &hf_ieee80211_ff_ftm_param_burst_exponent,
12308 &hf_ieee80211_ff_ftm_param_burst_duration,
12309 NULL((void*)0)};
12310
12311 static int * const ieee80211_ftm_params_fields2[] = {
12312 &hf_ieee80211_ff_ftm_param_min_delta_ftm,
12313 &hf_ieee80211_ff_ftm_param_partial_tsf_timer,
12314 &hf_ieee80211_ff_ftm_param_partial_tsf_no_pref,
12315 &hf_ieee80211_ff_ftm_param_asap_capable,
12316 &hf_ieee80211_ff_ftm_param_asap,
12317 &hf_ieee80211_ff_ftm_param_ftm_per_burst,
12318 NULL((void*)0)};
12319
12320 static int * const ieee80211_ftm_params_fields3[] = {
12321 &hf_ieee80211_ff_ftm_param_reserved2,
12322 &hf_ieee80211_ff_ftm_param_format_and_bw,
12323 &hf_ieee80211_ff_ftm_param_burst_period,
12324 NULL((void*)0)};
12325
12326 len = tvb_captured_length(tvb);
12327 if (len != 9)
12328 return 0;
12329
12330 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim1,
12331 ett_ff_ftm_param_delim1, ieee80211_ftm_params_fields1,
12332 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12333 offset += 2;
12334 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim2,
12335 ett_ff_ftm_param_delim2, ieee80211_ftm_params_fields2,
12336 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12337 offset += 4;
12338 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim3,
12339 ett_ff_ftm_param_delim3, ieee80211_ftm_params_fields3,
12340 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12341 offset += 3;
12342
12343 return offset;
12344}
12345
12346static unsigned
12347add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12348{
12349 uint8_t value = tvb_get_uint8(tvb, offset);
12350 col_append_fstr(pinfo->cinfo, COL_INFO, ", Dialog Token=%d", value);
12351 proto_tree_add_item(tree, hf_ieee80211_ff_dialog_token, tvb, offset, 1,
12352 ENC_LITTLE_ENDIAN0x80000000);
12353 return 1;
12354}
12355
12356static unsigned
12357add_ff_followup_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12358{
12359 proto_tree_add_item(tree, hf_ieee80211_ff_followup_dialog_token, tvb, offset, 1,
12360 ENC_LITTLE_ENDIAN0x80000000);
12361 return 1;
12362}
12363
12364static unsigned
12365add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12366{
12367 proto_tree_add_item(tree, hf_ieee80211_ff_wme_action_code, tvb, offset, 1,
12368 ENC_LITTLE_ENDIAN0x80000000);
12369 return 1;
12370}
12371
12372static unsigned
12373add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12374{
12375 proto_tree_add_item(tree, hf_ieee80211_ff_wme_status_code, tvb, offset, 1,
12376 ENC_LITTLE_ENDIAN0x80000000);
12377 return 1;
12378}
12379
12380static unsigned
12381add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12382{
12383 proto_tree_add_item(tree, hf_ieee80211_ff_qos_action_code, tvb, offset, 1,
12384 ENC_LITTLE_ENDIAN0x80000000);
12385 return 1;
12386}
12387
12388static unsigned
12389add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12390{
12391 proto_tree_add_item(tree, hf_ieee80211_ff_ba_action, tvb, offset, 1,
12392 ENC_LITTLE_ENDIAN0x80000000);
12393 return 1;
12394}
12395
12396static unsigned
12397add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12398{
12399 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_params,
12400 ett_ff_ba_param_tree,
12401 ieee80211_ff_block_ack_params_fields,
12402 ENC_LITTLE_ENDIAN0x80000000);
12403 return 2;
12404}
12405
12406static unsigned
12407add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12408{
12409 proto_tree_add_item(tree, hf_ieee80211_ff_block_ack_timeout, tvb, offset, 2,
12410 ENC_LITTLE_ENDIAN0x80000000);
12411 return 2;
12412}
12413
12414static unsigned
12415add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12416{
12417 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_ssc,
12418 ett_ff_ba_ssc_tree, ieee80211_ff_block_ack_ssc_fields,
12419 ENC_LITTLE_ENDIAN0x80000000);
12420 return 2;
12421}
12422
12423static unsigned
12424add_ff_qos_ts_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12425{
12426 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_tsinfo,
12427 ett_tsinfo_tree, ieee80211_tsinfo_fields,
12428 ENC_LITTLE_ENDIAN0x80000000);
12429 return 3;
12430}
12431
12432static unsigned
12433add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12434{
12435 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_action, tvb, offset, 1,
12436 ENC_LITTLE_ENDIAN0x80000000);
12437 return 1;
12438}
12439
12440static unsigned
12441add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12442{
12443 proto_tree_add_item(tree, hf_ieee80211_ff_multihop_action, tvb, offset, 1,
12444 ENC_LITTLE_ENDIAN0x80000000);
12445 return 1;
12446}
12447
12448static unsigned
12449add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12450{
12451 int start = offset;
12452 uint8_t flags;
12453
12454 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_flags, tvb, offset, 1,
12455 ENC_LITTLE_ENDIAN0x80000000);
12456 flags = tvb_get_uint8(tvb, offset);
12457 offset += 1;
12458 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_ttl, tvb, offset, 1,
12459 ENC_LITTLE_ENDIAN0x80000000);
12460 offset += 1;
12461 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_sequence, tvb, offset, 4,
12462 ENC_LITTLE_ENDIAN0x80000000);
12463 offset += 4;
12464
12465 switch (flags & 0x03) {
12466 case 1:
12467 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr4, tvb, offset, 6,
12468 ENC_NA0x00000000);
12469 offset += 6;
12470 break;
12471 case 2:
12472 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr5, tvb, offset, 6,
12473 ENC_NA0x00000000);
12474 offset += 6;
12475 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr6, tvb, offset, 6,
12476 ENC_NA0x00000000);
12477 offset += 6;
12478 break;
12479 case 3:
12480 proto_item_append_text(tree, " Unknown Address Extension Mode");
12481 break;
12482 default:
12483 /* no default action */
12484 break;
12485 }
12486
12487 return offset - start;
12488}
12489
12490static unsigned
12491add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12492{
12493 proto_tree_add_item(tree, hf_ieee80211_ff_selfprot_action, tvb, offset, 1,
12494 ENC_LITTLE_ENDIAN0x80000000);
12495 return 1;
12496}
12497
12498static unsigned
12499add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12500{
12501 proto_tree_add_item(tree, hf_ieee80211_ff_dls_action_code, tvb, offset, 1,
12502 ENC_LITTLE_ENDIAN0x80000000);
12503 return 1;
12504}
12505
12506static unsigned
12507add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12508{
12509 proto_tree_add_item(tree, hf_ieee80211_ff_dst_mac_addr, tvb, offset, 6,
12510 ENC_NA0x00000000);
12511 return 6;
12512}
12513
12514static unsigned
12515add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12516{
12517 proto_tree_add_item(tree, hf_ieee80211_ff_src_mac_addr, tvb, offset, 6,
12518 ENC_NA0x00000000);
12519 return 6;
12520}
12521
12522static unsigned
12523add_ff_req_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12524{
12525 proto_tree_add_item(tree, hf_ieee80211_ff_req_ap_addr, tvb, offset, 6,
12526 ENC_NA0x00000000);
12527 return 6;
12528}
12529
12530static unsigned
12531add_ff_res_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12532{
12533 proto_tree_add_item(tree, hf_ieee80211_ff_res_ap_addr, tvb, offset, 6,
12534 ENC_NA0x00000000);
12535 return 6;
12536}
12537
12538static unsigned
12539add_ff_check_beacon(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12540{
12541 proto_tree_add_item(tree, hf_ieee80211_ff_check_beacon, tvb, offset, 1,
12542 ENC_NA0x00000000);
12543 return 1;
12544}
12545
12546static unsigned
12547add_ff_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12548{
12549 proto_tree_add_item(tree, hf_ieee80211_ff_tod, tvb, offset, 4,
12550 ENC_LITTLE_ENDIAN0x80000000);
12551 return 4;
12552}
12553
12554static unsigned
12555add_ff_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12556{
12557 proto_tree_add_item(tree, hf_ieee80211_ff_toa, tvb, offset, 4,
12558 ENC_LITTLE_ENDIAN0x80000000);
12559 return 4;
12560}
12561
12562static unsigned
12563add_ff_max_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12564{
12565 proto_tree_add_item(tree, hf_ieee80211_ff_max_tod_err, tvb, offset, 1,
12566 ENC_NA0x00000000);
12567 return 1;
12568}
12569
12570static unsigned
12571add_ff_max_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12572{
12573 proto_tree_add_item(tree, hf_ieee80211_ff_max_toa_err, tvb, offset, 1,
12574 ENC_NA0x00000000);
12575 return 1;
12576}
12577
12578static unsigned
12579add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12580{
12581 proto_tree_add_item(tree, hf_ieee80211_ff_dls_timeout, tvb, offset, 2,
12582 ENC_LITTLE_ENDIAN0x80000000);
12583 return 2;
12584}
12585
12586static unsigned
12587add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12588{
12589 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_delba_param,
12590 ett_ff_ba_param_tree, ieee80211_ff_delba_param_fields,
12591 ENC_LITTLE_ENDIAN0x80000000);
12592 return 2;
12593}
12594
12595static unsigned
12596add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12597{
12598 proto_tree_add_item(tree, hf_ieee80211_ff_max_reg_pwr, tvb, offset, 2,
12599 ENC_LITTLE_ENDIAN0x80000000);
12600 return 2;
12601}
12602
12603static unsigned
12604add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12605{
12606 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
12607 1, ENC_NA0x00000000);
12608 return 1;
12609}
12610
12611static unsigned
12612add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12613{
12614 proto_tree_add_item(tree, hf_ieee80211_ff_country_str, tvb, offset, 2,
12615 ENC_ASCII0x00000000);
12616 offset += 2;
12617
12618 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
12619 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12620 return 3;
12621}
12622
12623static unsigned
12624add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12625{
12626 proto_tree_add_item(tree, hf_ieee80211_ff_max_tx_pwr, tvb, offset, 1,
12627 ENC_LITTLE_ENDIAN0x80000000);
12628 return 1;
12629}
12630
12631static unsigned
12632add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12633{
12634 proto_tree_add_item(tree, hf_ieee80211_ff_tx_pwr_used, tvb, offset, 1,
12635 ENC_LITTLE_ENDIAN0x80000000);
12636 return 1;
12637}
12638
12639static unsigned
12640add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12641{
12642 proto_tree_add_item(tree, hf_ieee80211_ff_transceiver_noise_floor, tvb,
12643 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12644 return 1;
12645}
12646
12647static unsigned
12648add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12649{
12650 proto_tree_add_item(tree, hf_ieee80211_ff_channel_width, tvb, offset, 1,
12651 ENC_LITTLE_ENDIAN0x80000000);
12652 return 1;
12653}
12654
12655/* QoS Info: 802.11-2012 8.4.1.17 */
12656static unsigned
12657add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12658{
12659 /* From AP so decode as AP: Figure 8-51-QoS Info field when sent by a AP */
12660 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
12661 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
12662 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12663 return 1;
12664}
12665
12666
12667/* QoS Info: 802.11-2012 8.4.1.17 */
12668static unsigned
12669add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12670{
12671 /* To AP so decode as STA: Figure 8-52-QoS Info field when set by a non-AP STA */
12672 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_sta,
12673 ett_ff_qos_info, ieee80211_ff_qos_info_sta_fields,
12674 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12675 return 1;
12676}
12677
12678static unsigned
12679add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12680{
12681 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_sm_pwr_save,
12682 ett_ff_sm_pwr_save, ieee80211_ff_sw_pwr_save_fields,
12683 ENC_LITTLE_ENDIAN0x80000000);
12684 return 1;
12685}
12686
12687static unsigned
12688add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12689{
12690 proto_tree_add_item(tree, hf_ieee80211_ff_pco_phase_cntrl, tvb, offset, 1,
12691 ENC_LITTLE_ENDIAN0x80000000);
12692 return 1;
12693}
12694
12695static unsigned
12696add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12697{
12698 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_psmp_param_set,
12699 ett_ff_psmp_param_set,
12700 ieee80211_ff_psmp_param_set_fields,
12701 ENC_LITTLE_ENDIAN0x80000000);
12702 return 2;
12703}
12704
12705static unsigned
12706add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12707{
12708 proto_item *mimo_item;
12709 proto_tree *mimo_tree;
12710 static int * const ieee80211_mimo_fields[] = {
12711 &hf_ieee80211_ff_mimo_cntrl_nc_index,
12712 &hf_ieee80211_ff_mimo_cntrl_nr_index,
12713 &hf_ieee80211_ff_mimo_cntrl_channel_width,
12714 &hf_ieee80211_ff_mimo_cntrl_grouping,
12715 &hf_ieee80211_ff_mimo_cntrl_coefficient_size,
12716 &hf_ieee80211_ff_mimo_cntrl_codebook_info,
12717 &hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
12718 &hf_ieee80211_ff_mimo_cntrl_reserved,
12719 NULL((void*)0)
12720 };
12721
12722 mimo_item = proto_tree_add_item(tree, hf_ieee80211_ff_mimo_cntrl, tvb,
12723 offset, 6, ENC_NA0x00000000);
12724 mimo_tree = proto_item_add_subtree(mimo_item, ett_ff_mimo_cntrl);
12725
12726 proto_tree_add_bitmask_list(mimo_tree, tvb, offset, 2, ieee80211_mimo_fields, ENC_LITTLE_ENDIAN0x80000000);
12727 offset += 2;
12728 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
12729 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12730
12731 return 6;
12732}
12733
12734static unsigned
12735add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12736{
12737 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ant_selection,
12738 ett_ff_ant_sel, ieee80211_ff_ant_selection_fields,
12739 ENC_LITTLE_ENDIAN0x80000000);
12740 return 1;
12741}
12742
12743static unsigned
12744add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
12745 packet_info *pinfo _U___attribute__((unused)), int offset)
12746{
12747 proto_tree_add_bitmask(tree, tvb, offset,
12748 hf_ieee80211_ff_ext_channel_switch_announcement,
12749 ett_ff_chan_switch_announce,
12750 ieee80211_ff_ext_channel_switch_announcement_fields,
12751 ENC_LITTLE_ENDIAN0x80000000);
12752 return 4;
12753}
12754
12755static unsigned
12756add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12757{
12758 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ht_info,
12759 ett_ff_ht_info, ieee80211_ff_ht_info_fields,
12760 ENC_LITTLE_ENDIAN0x80000000);
12761 return 1;
12762}
12763static unsigned
12764add_ff_lmr_report(proto_tree *tree, tvbuff_t *tvb,
12765 packet_info *pinfo _U___attribute__((unused)), int offset)
12766{
12767 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
12768 offset += add_ff_ftm_tod(tree, tvb, pinfo, offset);
12769 offset += add_ff_ftm_toa(tree, tvb, pinfo, offset);
12770 offset += add_ff_ftm_tod_err1(tree, tvb, pinfo, offset);
12771 offset += add_ff_ftm_toa_err1(tree, tvb, pinfo, offset);
12772 offset += add_ff_ftm_cfo_parameter(tree, tvb, pinfo, offset);
12773 offset += add_ff_ftm_r2i_ndp_tx_power(tree, tvb, pinfo, offset);
12774 offset += add_ff_ftm_i2r_ndp_target_rssi(tree, tvb, pinfo, offset);
12775 /* Secure LTF parameters (optional) */
12776 /* AOA feedback (optional) */
12777 return offset;
12778}
12779
12780static unsigned
12781add_ff_ftm_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12782{
12783 return add_ff_trigger(tree, tvb, pinfo, offset);
12784}
12785
12786static unsigned
12787add_ff_ftm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12788{
12789 unsigned start = offset;
12790 uint8_t dialog_token = tvb_get_uint8(tvb, offset);
12791 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
12792 if (dialog_token == 0) {
12793 col_append_str(pinfo->cinfo, COL_INFO, " (Termination)");
12794 }
12795 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
12796 offset += add_ff_ftm_tod(tree, tvb, pinfo, offset);
12797 offset += add_ff_ftm_toa(tree, tvb, pinfo, offset);
12798 offset += add_ff_ftm_tod_err(tree, tvb, pinfo, offset);
12799 offset += add_ff_ftm_toa_err(tree, tvb, pinfo, offset);
12800 return offset - start;
12801}
12802
12803static unsigned
12804add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12805{
12806 proto_tree_add_item(tree, hf_ieee80211_ff_ht_action, tvb, offset, 1,
12807 ENC_LITTLE_ENDIAN0x80000000);
12808 return 1;
12809}
12810
12811static unsigned
12812add_ff_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12813{
12814 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_action_code, tvb, offset, 1,
12815 ENC_LITTLE_ENDIAN0x80000000);
12816 return 1;
12817}
12818
12819static unsigned
12820add_ff_dmg_pwr_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12821{
12822 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_pwr_mgmt, tvb, offset, 1,
12823 ENC_LITTLE_ENDIAN0x80000000);
12824 return 1;
12825}
12826
12827static unsigned
12828add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12829{
12830 proto_item *psmp_item;
12831 proto_tree *psmp_tree;
12832
12833 psmp_item = proto_tree_add_item(tree, hf_ieee80211_ff_psmp_sta_info, tvb,
12834 offset, 8, ENC_LITTLE_ENDIAN0x80000000);
12835 psmp_tree = proto_item_add_subtree(psmp_item, ett_ff_psmp_sta_info);
12836
12837 proto_tree_add_item(psmp_item, hf_ieee80211_ff_psmp_sta_info_type, tvb,
12838 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12839
12840 switch (tvb_get_letohl(tvb, offset) & PSMP_STA_INFO_FLAG_TYPE0x00000003) {
12841 case PSMP_STA_INFO_BROADCAST0:
12842 proto_tree_add_item(psmp_tree,
12843 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
12844 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12845 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
12846 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12847 /* Missing 64 bit bitmask... */
12848 proto_tree_add_uint64(psmp_tree,
12849 hf_ieee80211_ff_psmp_sta_info_reserved_large,
12850 tvb, offset, 8,
12851 (tvb_get_letoh64(tvb, offset) &
12852 UINT64_C(0xFFFFFFFFFFE00000)0xFFFFFFFFFFE00000UL) >> 21);
12853 break;
12854 case PSMP_STA_INFO_MULTICAST1:
12855 proto_tree_add_item(psmp_tree,
12856 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
12857 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12858 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
12859 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12860 /* Missing 64 bit bitmask... */
12861 proto_tree_add_uint64(psmp_tree,
12862 hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
12863 tvb, offset, 6,
12864 (tvb_get_letoh64(tvb, offset) &
12865 UINT64_C(0xFFFFFFFFFFE00000)0xFFFFFFFFFFE00000UL) >> 21);
12866 break;
12867 case PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2:
12868 proto_tree_add_item(psmp_tree,
12869 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
12870 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12871 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
12872 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12873 offset += 2;
12874 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_sta_id, tvb,
12875 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12876 offset += 2;
12877
12878 proto_tree_add_item(psmp_tree,
12879 hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
12880 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12881 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_utt_duration,
12882 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12883 proto_tree_add_item(psmp_tree,
12884 hf_ieee80211_ff_psmp_sta_info_reserved_small, tvb,
12885 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12886 break;
12887 }
12888
12889 return 8;
12890}
12891
12892static unsigned
12893add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12894{
12895 static int * const ieee80211_schedule_info_fields1[] = {
12896 &hf_ieee80211_sched_info_agg,
12897 NULL((void*)0)
12898 };
12899 static int * const ieee80211_schedule_info_fields2[] = {
12900 &hf_ieee80211_sched_info_agg,
12901 &hf_ieee80211_sched_info_tsid,
12902 &hf_ieee80211_sched_info_dir,
12903 NULL((void*)0)
12904 };
12905
12906 if (tvb_get_letohs(tvb, offset) & 0x0001) {
12907 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_sched_info,
12908 ett_sched_tree, ieee80211_schedule_info_fields2,
12909 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12910 } else {
12911 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_sched_info,
12912 ett_sched_tree, ieee80211_schedule_info_fields1,
12913 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12914 }
12915
12916 return 2;
12917}
12918
12919static unsigned
12920add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12921{
12922 proto_tree_add_item(tree, hf_ieee80211_ff_public_action, tvb, offset, 1,
12923 ENC_LITTLE_ENDIAN0x80000000);
12924 return 1;
12925}
12926
12927static unsigned
12928add_ff_ppa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12929{
12930 proto_tree_add_item(tree, hf_ieee80211_ff_protected_public_action, tvb, offset, 1,
12931 ENC_LITTLE_ENDIAN0x80000000);
12932 return 1;
12933}
12934
12935static unsigned
12936add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12937{
12938 proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1,
12939 ENC_LITTLE_ENDIAN0x80000000);
12940 return 1;
12941}
12942
12943static unsigned
12944add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12945{
12946 proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6,
12947 ENC_NA0x00000000);
12948 return 6;
12949}
12950
12951static unsigned
12952add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12953{
12954 proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6,
12955 ENC_NA0x00000000);
12956 return 6;
12957}
12958
12959static unsigned
12960add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12961{
12962 proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2,
12963 ENC_LITTLE_ENDIAN0x80000000);
12964 return 2;
12965}
12966
12967static unsigned
12968add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12969{
12970 proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1,
12971 ENC_LITTLE_ENDIAN0x80000000);
12972 proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1,
12973 ENC_LITTLE_ENDIAN0x80000000);
12974 return 1;
12975}
12976
12977static unsigned
12978add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12979{
12980 proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset,
12981 1, ENC_LITTLE_ENDIAN0x80000000);
12982 return 1;
12983}
12984
12985static unsigned
12986add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12987{
12988 proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2,
12989 ENC_LITTLE_ENDIAN0x80000000);
12990 return 2;
12991}
12992
12993static unsigned
12994add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
12995{
12996 uint8_t code;
12997 code = tvb_get_uint8(tvb, offset);
12998 col_set_str(pinfo->cinfo, COL_INFO,
12999 val_to_str_ext_const(code, &tdls_action_codes_ext,
13000 "Unknown TDLS Action"));
13001 proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1,
13002 ENC_LITTLE_ENDIAN0x80000000);
13003 return 1;
13004}
13005
13006static unsigned
13007add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13008{
13009 proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1,
13010 ENC_LITTLE_ENDIAN0x80000000);
13011 return 1;
13012}
13013
13014static unsigned
13015add_ff_operating_class(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13016{
13017 proto_tree_add_item(tree, hf_ieee80211_ff_operating_class, tvb, offset, 1,
13018 ENC_LITTLE_ENDIAN0x80000000);
13019 return 1;
13020}
13021
13022static unsigned
13023add_ff_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13024{
13025 proto_tree_add_item(tree, hf_ieee80211_ff_channel, tvb, offset, 1,
13026 ENC_LITTLE_ENDIAN0x80000000);
13027 return 1;
13028}
13029
13030static unsigned
13031add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13032{
13033 uint8_t code;
13034
13035 code = tvb_get_uint8(tvb, offset);
13036 col_set_str(pinfo->cinfo, COL_INFO,
13037 val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action"));
13038 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13039 return 1;
13040}
13041
13042static unsigned
13043add_ff_unprotected_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13044{
13045 uint8_t code;
13046
13047 code = tvb_get_uint8(tvb, offset);
13048 col_set_str(pinfo->cinfo, COL_INFO,
13049 val_to_str_ext_const(code, &unprotected_wnm_action_codes_ext, "Unknown Unprotected WNM Action"));
13050 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13051 return 1;
13052}
13053
13054static unsigned
13055add_ff_unprotected_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13056{
13057 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_dmg_action_code, tvb, offset, 1, ENC_NA0x00000000);
13058 return 1;
13059}
13060
13061static unsigned
13062add_ff_key_data_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13063{
13064 proto_tree_add_item(tree, hf_ieee80211_ff_key_data_length, tvb, offset, 2,
13065 ENC_LITTLE_ENDIAN0x80000000);
13066 return 2;
13067}
13068
13069static unsigned
13070add_ff_wnm_notification_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13071{
13072 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_type,
13073 tvb, offset, 1, ENC_NA0x00000000);
13074 return 1;
13075}
13076
13077/* Action frame: Radio Measurement actions */
13078static unsigned
13079add_ff_rm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13080{
13081 proto_tree_add_item(tree, hf_ieee80211_ff_rm_action_code, tvb, offset, 1, ENC_NA0x00000000);
13082 return 1;
13083}
13084
13085static unsigned
13086add_ff_rm_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13087{
13088 proto_tree_add_item(tree, hf_ieee80211_ff_rm_dialog_token, tvb, offset, 1, ENC_NA0x00000000);
13089 return 1;
13090}
13091
13092/* Radio Measurement Request frame, Action fields */
13093static unsigned
13094add_ff_rm_repetitions(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13095{
13096 /* Note: 65535 means repeated until cancelled or superseded */
13097 proto_tree_add_item(tree, hf_ieee80211_ff_rm_repetitions, tvb, offset, 2,
13098 ENC_BIG_ENDIAN0x00000000);
13099 return 2;
13100}
13101
13102/* Link Measurement Request frame, Action fields*/
13103static unsigned
13104add_ff_rm_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13105{
13106 /* In dBm, see 8.4.1.20 */
13107 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_power, tvb, offset, 1, ENC_NA0x00000000);
13108 return 1;
13109}
13110
13111static unsigned
13112add_ff_rm_max_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13113{
13114 /* In dBm, see 8.4.1.19 */
13115 proto_tree_add_item(tree, hf_ieee80211_ff_rm_max_tx_power, tvb, offset, 1, ENC_NA0x00000000);
13116 return 1;
13117}
13118
13119/* Link Measurement Report frame, Action fields */
13120static unsigned
13121add_ff_rm_tpc_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13122{
13123 proto_tree *tpc_tree;
13124 proto_item *tpc_item;
13125
13126 /* 8.4.2.19 TPC Report element */
13127 /* XXX - The TPC Report element is exactly the same as that dissected
13128 * by ieee80211_tag_tpc_report(), so some of these fixed fields duplicate
13129 * tagged fields.
13130 */
13131 tpc_item = proto_tree_add_item(tree, hf_ieee80211_ff_tpc, tvb, offset, 4, ENC_NA0x00000000);
13132 tpc_tree = proto_item_add_subtree(tpc_item, ett_tpc);
13133 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_element_id, tvb, offset, 1, ENC_NA0x00000000);
13134 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_length, tvb, offset + 1, 1, ENC_NA0x00000000);
13135 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_tx_power, tvb, offset + 2, 1, ENC_NA0x00000000);
13136 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_link_margin, tvb, offset + 3, 1, ENC_NA0x00000000);
13137 return 4;
13138}
13139
13140static unsigned
13141add_ff_rm_rx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13142{
13143 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
13144 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rx_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
13145 return 1;
13146}
13147
13148static unsigned
13149add_ff_rm_tx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13150{
13151 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
13152 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
13153 return 1;
13154}
13155
13156static unsigned
13157add_ff_rm_rcpi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13158{
13159 /* 8.4.2.40: RCPI as specified for certain PHYs */
13160 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rcpi, tvb, offset, 1, ENC_NA0x00000000);
13161 return 1;
13162}
13163
13164static unsigned
13165add_ff_rm_rsni(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13166{
13167 /* 8.4.2.43: RSNI in steps of 0.5 dB, calculated as:
13168 * RSNI = (10 * log10((RCPI_{power} - ANPI_{power}) / ANPI_{power}) + 20)*2 */
13169 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rsni, tvb, offset, 1, ENC_NA0x00000000);
13170 return 1;
13171}
13172
13173static unsigned
13174add_ff_bss_transition_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13175{
13176 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_status_code, tvb, offset, 1,
13177 ENC_LITTLE_ENDIAN0x80000000);
13178 return 1;
13179}
13180
13181static unsigned
13182add_ff_bss_termination_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13183{
13184 proto_tree_add_item(tree, hf_ieee80211_ff_bss_termination_delay, tvb, offset, 1,
13185 ENC_LITTLE_ENDIAN0x80000000);
13186 return 1;
13187}
13188
13189static unsigned
13190add_ff_fils_discovery(proto_tree *tree, tvbuff_t *tvb,
13191 packet_info *pinfo _U___attribute__((unused)), int offset)
13192{
13193
13194 uint16_t fc, ssid_length;
13195 static int * const ieee80211_ff_fils_discovery_frame_control[] = {
13196 &hf_ieee80211_ff_fils_discovery_frame_control_ssid_length,
13197 &hf_ieee80211_ff_fils_discovery_frame_control_capability,
13198 &hf_ieee80211_ff_fils_discovery_frame_control_short_ssid,
13199 &hf_ieee80211_ff_fils_discovery_frame_control_ap_csn,
13200 &hf_ieee80211_ff_fils_discovery_frame_control_ano,
13201 &hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency,
13202 &hf_ieee80211_ff_fils_discovery_frame_control_primary_channel,
13203 &hf_ieee80211_ff_fils_discovery_frame_control_rsn_info,
13204 &hf_ieee80211_ff_fils_discovery_frame_control_length,
13205 &hf_ieee80211_ff_fils_discovery_frame_control_md,
13206 &hf_ieee80211_ff_fils_discovery_frame_control_reserved,
13207 NULL((void*)0)
13208 };
13209
13210 proto_tree_add_bitmask(tree, tvb, offset,
13211 hf_ieee80211_ff_fils_discovery_frame_control,
13212 ett_ff_fils_discovery_frame_control,
13213 ieee80211_ff_fils_discovery_frame_control,
13214 ENC_LITTLE_ENDIAN0x80000000);
13215 fc = tvb_get_letohs(tvb, offset);
13216 offset += 2;
13217
13218 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
13219
13220 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
13221
13222 if(fc & PA_FILS_FC_SHORT_SSID0x0040) {
13223 /* Always 4 bytes for Short SSID */
13224 /* TODO add check of SSID Length */
13225 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13226 offset += 4;
13227 } else {
13228 ssid_length = (fc & PA_FILS_FC_SSID_LENGTH0x001F) + 1;
13229 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ssid, tvb, offset, ssid_length, ENC_ASCII0x00000000);
13230 offset += ssid_length;
13231 }
13232
13233 if(fc & PA_FILS_FC_LENGTH0x1000){
13234 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_length, tvb, offset, 1, ENC_NA0x00000000);
13235 offset += 1;
13236 }
13237
13238 if(fc & PA_FILS_FC_CAPABILITY0x0020) {
13239 proto_tree *fdc_tree;
13240 proto_item *fdc_item;
13241 uint32_t fdc;
13242 fdc_item = proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_fils_discovery_capability, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &fdc);
13243 fdc_tree = proto_item_add_subtree(fdc_item, ett_ff_fils_discovery_capability);
13244 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_ess, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13245 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_privacy, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13246 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13247 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13248 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13249 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_multiple_bssid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13250 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_phy_index, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13251 switch((fdc & 0x1C00) >> 10){
13252 case 0:
13253 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13254 break;
13255 case 1:
13256 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13257 break;
13258 case 2:
13259 case 3:
13260 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13261 break;
13262 case 4:
13263 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13264 break;
13265 default:
13266 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13267 break;
13268 }
13269 offset += 2;
13270 }
13271
13272 if(fc & PA_FILS_FC_PC0x0400) {
13273 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_operating_class, tvb, offset, 1, ENC_NA0x00000000);
13274 offset += 1;
13275 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_primary_channel, tvb, offset, 1, ENC_NA0x00000000);
13276 offset += 1;
13277 }
13278
13279 if(fc & PA_FILS_FC_AP_CSN0x0080) {
13280 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ap_csn, tvb, offset, 1, ENC_NA0x00000000);
13281 offset += 1;
13282 }
13283
13284 if(fc & PA_FILS_FC_ANO0x0100) {
13285 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ano, tvb, offset, 1, ENC_NA0x00000000);
13286 offset += 1;
13287 }
13288
13289 if(fc & PA_FILS_FC_RSN_INFO0x0800) {
13290 /*TODO Dissect RSN info */
13291 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_rsn_info, tvb, offset, 5, ENC_NA0x00000000);
13292 offset += 5;
13293 }
13294
13295 if(fc & PA_FILS_FC_CCFS10x0200){
13296 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ccfs1, tvb, offset, 1, ENC_NA0x00000000);
13297 offset += 1;
13298 }
13299
13300 if(fc & PA_FILS_FC_MD0x2000) {
13301 /*TODO Dissect Mobility Domain */
13302 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_md, tvb, offset, 3, ENC_NA0x00000000);
13303 offset += 3;
13304 }
13305
13306 return offset;
13307}
13308
13309
13310static unsigned
13311add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13312{
13313 switch (tvb_get_uint8(tvb, offset + 1)) {
13314 case SM_ACTION_MEASUREMENT_REQUEST0:
13315 case SM_ACTION_MEASUREMENT_REPORT1:
13316 case SM_ACTION_TPC_REQUEST2:
13317 case SM_ACTION_TPC_REPORT3:
13318 add_ff_category_code(tree, tvb, pinfo, offset);
13319 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13320 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13321 return 3;
13322 case SM_ACTION_CHAN_SWITCH_ANNC4:
13323 case SM_ACTION_EXT_CHAN_SWITCH_ANNC5:
13324 add_ff_category_code(tree, tvb, pinfo, offset);
13325 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13326 return 2;
13327 default:
13328 add_ff_category_code(tree, tvb, pinfo, offset);
13329 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13330 return 2;
13331 }
13332}
13333
13334static unsigned
13335add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13336{
13337 switch (tvb_get_uint8(tvb, offset + 1)) {
13338 case QOS_ACTION_ADDTS_REQUEST0:
13339 add_ff_category_code(tree, tvb, pinfo, offset);
13340 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13341 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13342 return 3;
13343 case QOS_ACTION_ADDTS_RESPONSE1:
13344 add_ff_category_code(tree, tvb, pinfo, offset);
13345 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13346 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13347 add_ff_status_code(tree, tvb, pinfo, offset + 3);
13348 return 5;
13349 case QOS_ACTION_DELTS2:
13350 add_ff_category_code(tree, tvb, pinfo, offset);
13351 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13352 add_ff_qos_ts_info(tree, tvb, pinfo, offset + 2);
13353 add_ff_reason_code(tree, tvb, pinfo, offset + 5);
13354 return 7;
13355 case QOS_ACTION_SCHEDULE3:
13356 add_ff_category_code(tree, tvb, pinfo, offset);
13357 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13358 return 2;
13359 case QOS_ACTION_MAP_CONFIGURE4:
13360 add_ff_category_code(tree, tvb, pinfo, offset);
13361 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13362 return 2;
13363 default:
13364 add_ff_category_code(tree, tvb, pinfo, offset);
13365 return 2;
13366 }
13367}
13368
13369static unsigned
13370add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13371{
13372 switch (tvb_get_uint8(tvb, offset + 1)) {
13373 case DLS_ACTION_REQUEST0:
13374 add_ff_category_code(tree, tvb, pinfo, offset);
13375 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13376 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
13377 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
13378 add_ff_cap_info(tree, tvb, pinfo, offset + 14);
13379 add_ff_dls_timeout(tree, tvb, pinfo, offset + 16);
13380 return 18;
13381 case DLS_ACTION_RESPONSE1:
13382 add_ff_category_code(tree, tvb, pinfo, offset);
13383 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13384 add_ff_status_code(tree, tvb, pinfo, offset + 2);
13385 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 4);
13386 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 10);
13387 if (!hf_ieee80211_ff_status_code) {
13388 add_ff_cap_info(tree, tvb, pinfo, offset + 16);
13389 }
13390 return 16;
13391 case DLS_ACTION_TEARDOWN2:
13392 add_ff_category_code(tree, tvb, pinfo, offset);
13393 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13394 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
13395 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
13396 add_ff_reason_code(tree, tvb, pinfo, offset + 14);
13397 return 16;
13398 default:
13399 add_ff_category_code(tree, tvb, pinfo, offset);
13400 return 2;
13401 }
13402}
13403
13404static unsigned
13405add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13406{
13407 unsigned start = offset;
13408
13409 switch (tvb_get_uint8(tvb, offset + 1)) {
13410 case BA_ADD_BLOCK_ACK_REQUEST0:
13411 case BA_NDP_ADD_BLOCK_ACK_REQUEST128:
13412 case BA_BAT_ADD_BLOCK_ACK_REQUEST132:
13413 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13414 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13415 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13416 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
13417 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
13418 offset += add_ff_block_ack_ssc(tree, tvb, pinfo, offset);
13419 break;
13420 case BA_ADD_BLOCK_ACK_RESPONSE1:
13421 case BA_NDP_ADD_BLOCK_ACK_RESPONSE129:
13422 case BA_BAT_ADD_BLOCK_ACK_RESPONSE133:
13423 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13424 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13425 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13426 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13427 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
13428 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
13429 break;
13430 case BA_DELETE_BLOCK_ACK2:
13431 case BA_NDP_DELETE_BLOCK_ACK130:
13432 case BA_BAT_DELETE_BLOCK_ACK134:
13433 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13434 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13435 offset += add_ff_delba_param_set(tree, tvb, pinfo, offset);
13436 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
13437 break;
13438 }
13439
13440 return offset - start; /* Size of fixed fields */
13441}
13442
13443unsigned
13444add_ff_action_public_fields(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, uint8_t code)
13445{
13446 uint32_t oui;
13447 unsigned type;
13448 unsigned subtype;
13449 uint8_t dialog_token;
13450 uint8_t frag;
13451 bool_Bool more;
13452 tvbuff_t *vendor_tvb;
13453 int dissected;
13454
13455 unsigned start = offset;
13456
13457 switch (code) {
13458 case PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4:
13459 offset += add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
13460 break;
13461 case PA_VENDOR_SPECIFIC9:
13462 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
13463 offset += 3;
13464 switch (oui) {
13465 case OUI_WFA0x506F9A:
13466 subtype = tvb_get_uint8(tvb, offset);
13467 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_subtype, tvb, offset, 1, ENC_NA0x00000000);
13468 offset += 1;
13469 vendor_tvb = tvb_new_subset_remaining(tvb, offset);
13470 dissected = dissector_try_uint_with_data(wifi_alliance_public_action_table, subtype, vendor_tvb, pinfo, tree, false0, NULL((void*)0));
13471 offset += dissected;
13472 break;
13473 default:
13474 /* Don't know how to handle this vendor */
13475 break;
13476 }
13477 break;
13478 case PA_GAS_INITIAL_REQUEST10:
13479 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13480 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13481 &type, &subtype);
13482 offset += dissect_gas_initial_request(tree, tvb, pinfo, offset, type,
13483 subtype);
13484 break;
13485 case PA_GAS_INITIAL_RESPONSE11:
13486 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13487 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13488 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
13489 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13490 &type, &subtype);
13491 offset += dissect_gas_initial_response(tree, tvb, pinfo, offset, type,
13492 subtype);
13493 break;
13494 case PA_GAS_COMEBACK_REQUEST12:
13495 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13496 break;
13497 case PA_GAS_COMEBACK_RESPONSE13:
13498 dialog_token = tvb_get_uint8(tvb, offset);
13499 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13500 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13501 frag = tvb_get_uint8(tvb, offset) & 0x7f;
13502 more = (tvb_get_uint8(tvb, offset) & 0x80) != 0;
13503 offset += add_ff_gas_fragment_id(tree, tvb, pinfo, offset);
13504 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
13505 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13506 &type, &subtype);
13507 offset += dissect_gas_comeback_response(tree, tvb, pinfo, offset, type,
13508 subtype, frag, more, dialog_token);
13509 break;
13510 case PA_TDLS_DISCOVERY_RESPONSE14:
13511 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
13512 col_set_str(pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
13513 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13514 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13515 break;
13516 case PA_QAB_REQUEST16:
13517 case PA_QAB_RESPONSE17:
13518 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13519 offset += add_ff_req_ap_addr(tree, tvb, pinfo, offset);
13520 offset += add_ff_res_ap_addr(tree, tvb, pinfo, offset);
13521 break;
13522 case PA_FTM_REQUEST32:
13523 col_set_str(pinfo->cinfo, COL_INFO, "FTM Request");
13524 offset += add_ff_ftm_request(tree, tvb, pinfo, offset);
13525 break;
13526 case PA_FTM33:
13527 col_set_str(pinfo->cinfo, COL_INFO, "FTM");
13528 offset += add_ff_ftm(tree, tvb, pinfo, offset);
13529 break;
13530 case PA_FILS_DISCOVERY34:
13531 col_set_str(pinfo->cinfo, COL_INFO, "FILS Discovery");
13532 offset = add_ff_fils_discovery(tree, tvb, pinfo, offset);
13533 break;
13534 case PA_LOCATION_MEASUREMENT_REPORT47:
13535 col_set_str(pinfo->cinfo, COL_INFO, "Location Measurement Report");
13536 offset = add_ff_lmr_report(tree, tvb, pinfo, offset);
13537 break;
13538 }
13539
13540 return offset - start; /* Size of fixed fields */
13541}
13542
13543static unsigned
13544add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13545{
13546 uint8_t code;
13547 unsigned start = offset;
13548 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13549 code = tvb_get_uint8(tvb, offset);
13550 offset += add_ff_pa_action_code(tree, tvb, pinfo, offset);
13551 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
13552 return offset - start;
13553}
13554
13555static unsigned
13556add_ff_action_protected_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13557{
13558 uint8_t code;
13559 unsigned start = offset;
13560 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13561 code = tvb_get_uint8(tvb, offset);
13562 offset += add_ff_ppa_action_code(tree, tvb, pinfo, offset);
13563 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
13564 return offset - start;
13565}
13566
13567static unsigned
13568add_ff_action_radio_measurement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13569{
13570 unsigned start = offset;
13571 uint8_t code;
13572
13573 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13574 code = tvb_get_uint8(tvb, offset);
13575 offset += add_ff_rm_action_code(tree, tvb, pinfo, offset);
13576
13577 switch (code) {
13578 case RM_ACTION_RADIO_MEASUREMENT_REQUEST0:
13579 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13580 offset += add_ff_rm_repetitions(tree, tvb, pinfo, offset);
13581 /* Followed by Measurement Request Elements */
13582 break;
13583 case RM_ACTION_RADIO_MEASUREMENT_REPORT1:
13584 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13585 /* Followed by Measurement Report Elements */
13586 break;
13587 case RM_ACTION_LINK_MEASUREMENT_REQUEST2:
13588 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13589 offset += add_ff_rm_tx_power(tree, tvb, pinfo, offset);
13590 offset += add_ff_rm_max_tx_power(tree, tvb, pinfo, offset);
13591 /* Followed by Optional Subelements */
13592 break;
13593 case RM_ACTION_LINK_MEASUREMENT_REPORT3:
13594 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13595 offset += add_ff_rm_tpc_report(tree, tvb, pinfo, offset);
13596 offset += add_ff_rm_rx_antenna_id(tree, tvb, pinfo, offset);
13597 offset += add_ff_rm_tx_antenna_id(tree, tvb, pinfo, offset);
13598 offset += add_ff_rm_rcpi(tree, tvb, pinfo, offset);
13599 offset += add_ff_rm_rsni(tree, tvb, pinfo, offset);
13600 /* Followed by Optional Subelements */
13601 break;
13602 case RM_ACTION_NEIGHBOR_REPORT_REQUEST4:
13603 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13604 /* Followed by Optional Subelements */
13605 break;
13606 case RM_ACTION_NEIGHBOR_REPORT_RESPONSE5:
13607 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13608 /* Followed by Neighbor Report Elements */
13609 break;
13610 }
13611
13612 return offset - start; /* Size of fixed fields */
13613}
13614
13615static unsigned
13616add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13617{
13618 unsigned start = offset;
13619 uint8_t code;
13620
13621 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13622 code = tvb_get_uint8(tvb, offset);
13623 offset += add_ff_ft_action_code(tree, tvb, pinfo, offset);
13624
13625 switch (code) {
13626 case FT_ACTION_REQUEST1:
13627 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13628 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13629 /* Followed by FT Request frame body (IEs) */
13630 break;
13631 case FT_ACTION_RESPONSE2:
13632 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13633 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13634 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13635 /* Followed by FT Response frame body (IEs) */
13636 break;
13637 case FT_ACTION_CONFIRM3:
13638 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13639 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13640 /* Followed by FT Confirm frame body (IEs) */
13641 break;
13642 case FT_ACTION_ACK4:
13643 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13644 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13645 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13646 /* Followed by FT Ack frame body (IEs) */
13647 break;
13648 }
13649
13650 return offset - start; /* Size of fixed fields */
13651}
13652
13653static unsigned
13654add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13655{
13656 unsigned start = offset;
13657 uint8_t code;
13658
13659 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13660 code = tvb_get_uint8(tvb, offset);
13661 offset += add_ff_sa_query_action_code(tree, tvb, pinfo, offset);
13662
13663 switch (code) {
13664 case SA_QUERY_REQUEST0:
13665 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
13666 break;
13667 case SA_QUERY_RESPONSE1:
13668 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
13669 break;
13670 }
13671
13672 return offset - start; /* Size of fixed fields */
13673}
13674
13675static unsigned
13676add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13677{
13678 unsigned length;
13679
13680 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13681 offset += add_ff_mesh_action(tree, tvb, pinfo, offset);
13682 /* The only fixed fields are the category and mesh action. The rest are IEs.
13683 */
13684 length = 2;
13685 if (tvb_get_uint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE10) {
13686 /* ..except for the TBTT Adjustment Response, which has a status code field
13687 */
13688 length += add_ff_status_code(tree, tvb, pinfo, offset);
13689 }
13690 return length;
13691}
13692
13693static unsigned
13694add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13695{
13696 unsigned start = offset;
13697
13698 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13699 offset += add_ff_multihop_action(tree, tvb, pinfo, offset);
13700 offset += add_ff_mesh_control(tree, tvb, pinfo, offset);
13701 return offset - start;
13702}
13703
13704static unsigned
13705add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
13706 association_sanity_check_t *association_sanity_check)
13707{
13708 unsigned start = offset;
13709 uint8_t self_protected_action = tvb_get_uint8(tvb, start + 1);
13710
13711 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13712 offset += add_ff_selfprot_action(tree, tvb, pinfo, offset);
13713
13714 switch (self_protected_action) {
13715 case SELFPROT_ACTION_MESH_PEERING_OPEN1:
13716 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13717 if (association_sanity_check)
13718 association_sanity_check->ampe_frame = self_protected_action;
13719 break;
13720 case SELFPROT_ACTION_MESH_PEERING_CONFIRM2:
13721 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13722 offset += add_ff_assoc_id(tree, tvb, pinfo, offset);
13723 if (association_sanity_check)
13724 association_sanity_check->ampe_frame = self_protected_action;
13725 break;
13726 case SELFPROT_ACTION_MESH_PEERING_CLOSE3:
13727 if (association_sanity_check)
13728 association_sanity_check->ampe_frame = self_protected_action;
13729 break;
13730 }
13731
13732 return offset - start;
13733}
13734
13735static unsigned
13736add_ff_vht_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13737{
13738 proto_tree_add_item(tree, hf_ieee80211_ff_vht_action, tvb, offset, 1,
13739 ENC_LITTLE_ENDIAN0x80000000);
13740 return 1;
13741}
13742
13743static unsigned
13744add_ff_s1g_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13745{
13746 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_timestamp, tvb, offset,
13747 4, ENC_LITTLE_ENDIAN0x80000000);
13748 return 4;
13749}
13750
13751static unsigned
13752add_ff_change_sequence(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13753{
13754 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_change_sequence, tvb, offset,
13755 1, ENC_NA0x00000000);
13756 return 1;
13757}
13758
13759static unsigned
13760add_ff_next_tbtt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13761{
13762 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_next_tbtt, tvb, offset,
13763 3, ENC_LITTLE_ENDIAN0x80000000);
13764 return 3;
13765}
13766
13767static unsigned
13768add_ff_compressed_ssid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13769{
13770 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_compressed_ssid, tvb, offset,
13771 4, ENC_LITTLE_ENDIAN0x80000000);
13772 return 4;
13773}
13774
13775/* This should not be S1G specific because 802.11-2016 defines it as well. */
13776static unsigned
13777add_ff_access_network_options(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13778{
13779 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_access_network_options, tvb,
13780 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13781 return 1;
13782}
13783
13784static unsigned
13785add_ff_s1g_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13786{
13787 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_action, tvb, offset, 1,
13788 ENC_LITTLE_ENDIAN0x80000000);
13789 return 1;
13790}
13791
13792static unsigned
13793add_ff_prot_s1g_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13794{
13795 proto_tree_add_item(tree, hf_ieee80211_ff_prot_s1g_action, tvb, offset, 1,
13796 ENC_LITTLE_ENDIAN0x80000000);
13797 return 1;
13798}
13799
13800static conversation_t *find_or_create_wlan_conversation(packet_info *pinfo)
13801{
13802 /* HACK to avoid collision with conversation in EAP dissector */
13803 pinfo->srcport = GPOINTER_TO_UINT(((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
13804 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
;
13805 pinfo->destport = pinfo->srcport;
13806 return find_or_create_conversation(pinfo);
13807}
13808
13809static ieee80211_conversation_data_t* get_or_create_conversation_data(conversation_t *conversation) {
13810 ieee80211_conversation_data_t *conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
13811 if (!conversation_data) {
13812 conversation_data = wmem_new(wmem_file_scope(), ieee80211_conversation_data_t)((ieee80211_conversation_data_t*)wmem_alloc((wmem_file_scope(
)), sizeof(ieee80211_conversation_data_t)))
;
13813 conversation_add_proto_data(conversation, proto_wlan, conversation_data);
13814 memset(conversation_data, 0, sizeof(ieee80211_conversation_data_t));
13815 }
13816 return conversation_data;
13817}
13818
13819static unsigned get_group_element_len(unsigned group) {
13820 switch (group) {
13821 /* Diffie-Hellman groups */
13822 case 1:
13823 return 96;
13824 case 2:
13825 case 22:
13826 return 128;
13827 case 5:
13828 return 192;
13829 case 14:
13830 case 23:
13831 case 24:
13832 return 256;
13833 case 15:
13834 return 384;
13835 case 16:
13836 return 512;
13837 case 17:
13838 return 768;
13839 case 18:
13840 return 1024;
13841 /* ECC groups */
13842 case 19:
13843 case 28:
13844 return 64;
13845 case 20:
13846 case 29:
13847 return 96;
13848 case 21:
13849 return 132;
13850 case 25:
13851 return 48;
13852 case 26:
13853 return 56;
13854 case 30:
13855 return 128;
13856 default:
13857 return 0;
13858 }
13859}
13860
13861static unsigned get_scalar_len(unsigned group) {
13862 switch (group) {
13863 /* Diffie-Hellman groups */
13864 case 1:
13865 return 96;
13866 case 2:
13867 return 128;
13868 case 5:
13869 return 192;
13870 case 14:
13871 return 256;
13872 case 15:
13873 return 384;
13874 case 16:
13875 return 512;
13876 case 17:
13877 return 768;
13878 case 18:
13879 return 1024;
13880 case 22:
13881 return 20;
13882 case 23:
13883 return 28;
13884 case 24:
13885 return 32;
13886 /* ECC groups */
13887 case 19:
13888 case 28:
13889 return 32;
13890 case 20:
13891 case 29:
13892 return 48;
13893 case 21:
13894 return 66;
13895 case 25:
13896 return 24;
13897 case 26:
13898 return 28;
13899 case 30:
13900 return 64;
13901 default:
13902 return 0;
13903 }
13904}
13905
13906static unsigned
13907find_fixed_field_len(tvbuff_t *tvb, unsigned offset)
13908{
13909 unsigned start_offset = offset;
13910 unsigned len = tvb_reported_length(tvb);
13911
13912 if (offset >= len) {
13913 return 0;
13914 }
13915
13916 while (offset < len) {
13917 if (tvb_get_uint8(tvb, offset) == 0xFF) {
13918 /*
13919 * Check if we have a len followed by either ETAG_REJECTED_GROUPS
13920 * or ETAG_PASSWORD_IDENTIFIER or ETAG_ANTI_CLOGGING_TOKEN
13921 */
13922 /* The length of SAE Confirm or Scalar Fixed parameter >= 32 */
13923 if ((offset < len - 3) && (offset - start_offset >= 32)) {
13924 uint8_t etag_len = tvb_get_uint8(tvb, offset + 1);
13925 uint8_t check_byte = tvb_get_uint8(tvb, offset + 2);
13926 if (check_byte == ETAG_REJECTED_GROUPS92 ||
13927 check_byte == ETAG_PASSWORD_IDENTIFIER33 ||
13928 check_byte == ETAG_ANTI_CLOGGING_TOKEN93 ||
13929 check_byte == ETAG_MULTI_LINK107 ||
13930 check_byte == ETAG_AKM_SUITE_SELECTOR114) {
13931 /* Add length check to avoid false detection */
13932 if (offset + etag_len + 2 <= len) {
13933 break;
13934 }
13935 }
13936 }
13937 }
13938 offset++;
13939 }
13940
13941 return offset - start_offset;
13942}
13943
13944static const value_string ff_sae_message_type_vals[] = {
13945 {1, "Commit" },
13946 {2, "Confirm" },
13947 {0, NULL((void*)0) }
13948};
13949
13950/*
13951 * We have to deal with the issue that an anti-clogging token may be in this
13952 * thing.
13953 */
13954static unsigned
13955add_ff_auth_sae(proto_tree *tree, tvbuff_t *tvb,
13956 packet_info *pinfo _U___attribute__((unused)), unsigned offset)
13957{
13958 unsigned alg, seq, status_code, len;
13959 alg = tvb_get_letohs(tvb, 0);
13960
13961 if (alg != AUTH_ALG_SAE3)
13962 return offset;
13963
13964 seq = tvb_get_letohs(tvb, 2);
13965 status_code = tvb_get_letohs(tvb, 4);
13966
13967 proto_tree_add_uint(tree, hf_ieee80211_ff_sae_message_type, tvb, 2, 2, seq);
13968
13969 if (seq == 1)
13970 {
13971 uint16_t group;
13972 unsigned sc_len, elt_len;
13973 int is_ap = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool,((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
13974 pinfo, proto_wlan, IS_AP_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
;
13975
13976 /*
13977 * Order is: Status code,
13978 * Finite Cyclic Group,
13979 * Anti-Clogging Token in some cases
13980 * Send-Confirm in some cases
13981 * Scalar in some cases
13982 * FFE in some cases
13983 * Confirm in some cases
13984 * Challenge Text in some cases
13985 * RSNE in some cases.
13986 * MDE in some cases.
13987 * Fast BSS TRansition ... in some cases.
13988 */
13989
13990 /* 76: Authentication is rejected because an Anti-Clogging Token is required (cf ieee80211_status_code) */
13991 /* These are present if status code is 0, 76, 77 or 126 */
13992 if (status_code == 0 || status_code == 76 || status_code == 77 ||
13993 status_code == 126)
13994 {
13995 group = tvb_get_letohs(tvb, offset);
13996 proto_tree_add_item(tree, hf_ieee80211_ff_finite_cyclic_group, tvb,
13997 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13998 offset += 2;
13999
14000
14001 /*
14002 * Now, get the fixed field length remaining. It will be divided up into
14003 * Anti-Clogging token, Scalar, FFE and some IEs.
14004 */
14005 len = find_fixed_field_len(tvb, offset);
14006 sc_len = get_scalar_len(group);
14007 elt_len = get_group_element_len(group);
14008
14009 /*
14010 * The first conditional captures the case where we have an error and
14011 * an anti-clogging token with Scalar Field and FFE.
14012 * The second handles the case where we have an error with only an
14013 * anti-clogging token.
14014 * The third conditional below is a way to avoid keeping state about
14015 * what was in a previous response!
14016 */
14017 if (((status_code == 76 || status_code == 126) &&
14018 ((len > (sc_len + elt_len)))) ||
14019 ((status_code == 76) && (len > 0) && (len < (sc_len + elt_len))) ||
14020 ((status_code == 0) && (len > (sc_len + elt_len)))) {
14021 unsigned anti_clogging_len;
14022 /*
14023 * Handle the anti-clogging field. There is an anti-clogging token
14024 * before the other two.
14025 */
14026 if (len > (sc_len + elt_len))
14027 anti_clogging_len = len - (sc_len + elt_len);
14028 else
14029 anti_clogging_len = len;
14030
14031 proto_tree_add_item(tree, hf_ieee80211_ff_sae_anti_clogging_token, tvb,
14032 offset, anti_clogging_len, ENC_NA0x00000000);
14033 offset += anti_clogging_len;
14034 }
14035
14036 if (sc_len == 0) {
14037 /* assume no anti-clogging token */
14038 if (!(len % 3))
14039 {
14040 sc_len = len / 3;
14041 }
14042 else
14043 {
14044 sc_len = len / 2;
14045 }
14046 elt_len = len - sc_len;
14047 }
14048
14049 /* Only present if status = 0 or 126 */
14050 if (status_code == 0 || status_code == 126) {
14051 proto_tree_add_item(tree, hf_ieee80211_ff_scalar, tvb, offset,
14052 sc_len, ENC_NA0x00000000);
14053 offset += sc_len;
14054
14055 proto_tree_add_item(tree, hf_ieee80211_ff_finite_field_element, tvb,
14056 offset, elt_len, ENC_NA0x00000000);
14057 offset += elt_len;
14058
14059 /* Create conversation when AP accept SAE commit */
14060 if (is_ap) {
14061 conversation_t *conversation;
14062 ieee80211_conversation_data_t *conversation_data;
14063 if (!pinfo->fd->visited) {
14064 association_counter++;
14065 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
14066 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
14067 assoc_counter_in_auth = 1;
14068 }
14069 conversation = find_or_create_wlan_conversation(pinfo);
14070 conversation_data = get_or_create_conversation_data(conversation);
14071 conversation_data->sae_group = group;
14072 }
14073 }
14074 }
14075 }
14076 else if ((seq == 2) && (status_code == 0))
14077 {
14078 proto_tree_add_item(tree, hf_ieee80211_ff_send_confirm, tvb, 6, 2,
14079 ENC_LITTLE_ENDIAN0x80000000);
14080 offset += 2;
14081
14082 /* Check if there are additional elements */
14083 len = find_fixed_field_len(tvb, offset);
14084 proto_tree_add_item(tree, hf_ieee80211_ff_confirm, tvb, offset, len,
14085 ENC_NA0x00000000);
14086 offset += len;
14087 }
14088
14089 return offset;
14090}
14091
14092static unsigned
14093add_ff_auth_fils(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14094 unsigned offset)
14095{
14096 unsigned alg, seq, status_code;
14097 alg = tvb_get_letohs(tvb, 0);
14098
14099 if ((alg != AUTH_ALG_FILS_SK_WITH_PFS5) && (alg != AUTH_ALG_FILS_PK6))
14100 return offset;
14101
14102 seq = tvb_get_letohs(tvb, 2);
14103 status_code = tvb_get_letohs(tvb, 4);
14104
14105 if ((seq == 1) || (seq == 2 && status_code == 0)) {
14106 unsigned group = tvb_get_letohs(tvb, 6);
14107 unsigned elt_len;
14108 proto_tree_add_item(tree, hf_ieee80211_ff_finite_cyclic_group, tvb, 6, 2,
14109 ENC_LITTLE_ENDIAN0x80000000);
14110 offset = 8;
14111 elt_len = get_group_element_len(group);
14112
14113 proto_tree_add_item(tree, hf_ieee80211_ff_finite_field_element, tvb, offset,
14114 elt_len, ENC_NA0x00000000);
14115
14116 offset += elt_len;
14117 }
14118
14119 /* What about the other FILS case? */
14120
14121 return offset;
14122}
14123
14124/*
14125 * We handle different elements depending on whether the sequence number is
14126 * 1, 2 or 3.
14127 */
14128typedef struct ieee80211_pasn_data {
14129 unsigned pasn_seq;
14130 unsigned pasn_status_code;
14131} ieee80211_pasn_data_t;
14132
14133static ieee80211_pasn_data_t*
14134create_pasn_data(packet_info *pinfo, unsigned seq, unsigned status)
14135{
14136 ieee80211_pasn_data_t *pasn_data = NULL((void*)0);
14137
14138 pasn_data = wmem_new(pinfo->pool, ieee80211_pasn_data_t)((ieee80211_pasn_data_t*)wmem_alloc((pinfo->pool), sizeof(
ieee80211_pasn_data_t)))
;
14139
14140 if(pasn_data) {
14141 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, PASN_DATA_KEY, pasn_data);
14142 pasn_data->pasn_seq = seq;
14143 pasn_data->pasn_status_code = status;
14144 }
14145
14146 return pasn_data;
14147}
14148
14149static unsigned
14150add_ff_auth_pasn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14151 unsigned offset)
14152{
14153 unsigned seq, status_code;
14154 ieee80211_pasn_data_t *pasn_data = NULL((void*)0);
14155
14156 seq = tvb_get_letohs(tvb, 2);
14157 status_code = tvb_get_letohs(tvb, 4);
14158
14159 pasn_data = create_pasn_data(pinfo, seq, status_code);
14160 if (!pasn_data) {
14161 /* Leave it undissected if we cannot get memory. */
14162 return offset + tvb_captured_length_remaining(tvb, offset);
14163 }
14164
14165 if (seq == 1) {
14166 /*
14167 * Contains RSN Info,
14168 * PASN field,
14169 * Wrapped Data may be present if the PASN element says so,
14170 * RSNXE may be present
14171 * Timeout Interval element may be present
14172 * Fragment element may be present if it was fragmented.
14173 */
14174 while (tvb_captured_length_remaining(tvb, offset)) {
14175 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14176 }
14177 } else if (seq == 2) {
14178 /* This test might not be needed */
14179 if (status_code != 0) {
14180 offset += tvb_captured_length_remaining(tvb, offset);
14181 return offset;
14182 }
14183 /*
14184 * RSN element is present.
14185 * PASN element is present if status == 0.
14186 * Wrapped Data element present if the PASN element says so.
14187 * ...
14188 */
14189 while (tvb_captured_length_remaining(tvb, offset)) {
14190 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14191 }
14192 } else if (seq == 3) {
14193 /*
14194 * Contains PASN element if status == 0
14195 * Contains Wrapped Data element if PASN element says so and status is 0.
14196 * Contains MC element
14197 * May contain fragment elements.
14198 */
14199 while (tvb_captured_length_remaining(tvb, offset)) {
14200 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14201 }
14202 }
14203
14204 offset += tvb_captured_length_remaining(tvb, offset);
14205
14206 return offset;
14207}
14208
14209/*
14210 * Handle an Auth Frame. We need to be able to call this from several places.
14211 *
14212 * We should also handle the different auth types more correctly.
14213 */
14214static int
14215dissect_auth_frame(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb)
14216{
14217 int offset = 0;
14218 uint16_t auth_algorithm = tvb_get_letohs(tvb, offset);
14219
14220 add_ff_auth_alg(tree, tvb, pinfo, offset);
14221 offset += 2;
14222
14223 add_ff_auth_trans_seq(tree, tvb, pinfo, offset);
14224 offset += 2;
14225
14226 add_ff_status_code(tree, tvb, pinfo, offset);
14227 offset += 2;
14228
14229 switch (auth_algorithm) {
14230 case AUTH_ALG_SAE3:
14231 offset = add_ff_auth_sae(tree, tvb, pinfo, offset);
14232 break;
14233 case AUTH_ALG_FILS_PK6:
14234 case AUTH_ALG_FILS_SK_WITH_PFS5:
14235 offset = add_ff_auth_fils(tree, tvb, pinfo, offset);
14236 break;
14237 case AUTH_ALG_PASN7:
14238 offset = add_ff_auth_pasn(tree, tvb, pinfo, offset);
14239 break;
14240 }
14241
14242 return offset;
14243}
14244
14245/*
14246 * If it is PASN wrapped data, handle it correctly, else defer to fils
14247 * wrapped data.
14248 */
14249static void
14250dissect_wrapped_data(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb,
14251 int offset, uint8_t ext_tag_len _U___attribute__((unused)))
14252{
14253 ieee80211_pasn_data_t *pasn_data =
14254 (ieee80211_pasn_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan,
14255 PASN_DATA_KEY);
14256
14257 if (pasn_data) {
14258 proto_tree *auth_tree = NULL((void*)0);
14259 proto_item *ai = NULL((void*)0);
14260 uint16_t frame_len = 0;
14261 tvbuff_t *new_tvb = NULL((void*)0);
14262
14263 switch (pasn_data->pasn_seq) {
14264 case 1:
14265 auth_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
14266 ett_pasn_auth_frame, &ai,
14267 "Authentication Frame");
14268 new_tvb = tvb_new_subset_remaining(tvb, offset);
14269 offset = dissect_auth_frame(auth_tree, pinfo, new_tvb);
14270 proto_item_set_len(ai, offset); /* This is correct */
14271 break;
14272
14273 case 2:
14274 /* This has two auth frames in it. */
14275 frame_len = tvb_get_letohs(tvb, offset);
14276 proto_tree_add_item(tree, hf_ieee80211_pasn_auth1_frame_len, tvb, offset,
14277 2, ENC_LITTLE_ENDIAN0x80000000);
14278 offset += 2;
14279 auth_tree = proto_tree_add_subtree(tree, tvb, offset, frame_len,
14280 ett_pasn_auth_frame, NULL((void*)0),
14281 "Authentication Frame 1");
14282 new_tvb = tvb_new_subset_length(tvb, offset, frame_len);
14283 offset += dissect_auth_frame(auth_tree, pinfo, new_tvb);
14284
14285 /* Second frame */
14286 frame_len = tvb_get_letohs(tvb, offset);
14287 proto_tree_add_item(tree, hf_ieee80211_pasn_auth2_frame_len, tvb, offset,
14288 2, ENC_LITTLE_ENDIAN0x80000000);
14289 offset += 2;
14290 auth_tree = proto_tree_add_subtree(tree, tvb, offset, frame_len,
14291 ett_pasn_auth_frame, NULL((void*)0),
14292 "Authentication Frame 2");
14293 new_tvb = tvb_new_subset_length(tvb, offset, frame_len);
14294 dissect_auth_frame(auth_tree, pinfo, new_tvb);
14295 break;
14296
14297 case 3:
14298 auth_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
14299 ett_pasn_auth_frame, &ai,
14300 "Authentication Frame");
14301 new_tvb = tvb_new_subset_remaining(tvb, offset);
14302 offset = dissect_auth_frame(auth_tree, pinfo, new_tvb);
14303 proto_item_set_len(ai, offset);
14304 break;
14305 }
14306 }
14307}
14308
14309#define FILS_REQ_PARAMS_FILS_CRITERIA0x01 0x01
14310#define FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02 0x02
14311#define FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04 0x04
14312#define FILS_REQ_PARAMS_RCPI_LIMIT0x08 0x08
14313#define FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10 0x10
14314#define FILS_REQ_PARAMS_RESERVED0xE0 0xE0
14315
14316#define FILS_REQ_PARAMS_FILS_CRITERIA_BSS_DELAY0x07 0x07
14317#define FILS_REQ_PARAMS_FILS_CRITERIA_PHY_SUPPORT0x38 0x38
14318#define FILS_REQ_PARAMS_FILS_CRITERIA_RESERVED0xC0 0xC0
14319
14320static void
14321dissect_fils_req_params(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)), tvbuff_t *tvb,
14322 int offset, uint8_t ext_tag_len _U___attribute__((unused)))
14323{
14324 uint8_t bitmap;
14325
14326 static int * const ieee80211_fils_req_params_paramter_control_bitmap[] = {
14327 &hf_ieee80211_fils_req_params_fils_criteria_present,
14328 &hf_ieee80211_fils_req_params_max_delay_limit_present,
14329 &hf_ieee80211_fils_req_params_minimum_data_rate_present,
14330 &hf_ieee80211_fils_req_params_rcpi_limit_present,
14331 &hf_ieee80211_fils_req_params_oui_response_criteria_present,
14332 &hf_ieee80211_fils_req_params_reserved,
14333 NULL((void*)0)
14334 };
14335
14336 static int * const ieee80211_fils_req_params_fils_criteria[] = {
14337 &hf_ieee80211_fils_req_params_fils_criteria_bss_delay,
14338 &hf_ieee80211_fils_req_params_fils_criteria_phy_support,
14339 &hf_ieee80211_fils_req_params_fils_criteria_reserved,
14340 NULL((void*)0)
14341 };
14342
14343 bitmap = tvb_get_uint8(tvb, offset);
14344 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_fils_req_params_parameter_control_bitmap,
14345 ett_ff_fils_req_params, ieee80211_fils_req_params_paramter_control_bitmap, ENC_LITTLE_ENDIAN0x80000000);
14346 offset += 1;
14347
14348 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_max_channel_time,
14349 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14350 offset +=1;
14351
14352 if(bitmap & FILS_REQ_PARAMS_FILS_CRITERIA0x01) {
14353 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_fils_req_params_fils_criteria,
14354 ett_ff_fils_req_params_fils_criteria, ieee80211_fils_req_params_fils_criteria, ENC_LITTLE_ENDIAN0x80000000);
14355 offset += 1;
14356 }
14357
14358 if(bitmap & FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02) {
14359 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_max_delay_limit,
14360 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14361 offset += 1;
14362 }
14363
14364 if(bitmap & FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04) {
14365 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_minimum_data_rate,
14366 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
14367 offset += 3;
14368 }
14369
14370 if(bitmap & FILS_REQ_PARAMS_RCPI_LIMIT0x08) {
14371 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_rcpi_limit,
14372 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14373 offset += 1;
14374 }
14375
14376 if(bitmap & FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10) {
14377 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_oui_response_criteria,
14378 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14379 //offset += 2;
14380 }
14381
14382}
14383
14384static unsigned
14385wnm_bss_trans_mgmt_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14386{
14387 int start = offset;
14388 int left;
14389 int tmp_sublen;
14390 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52 };
14391
14392
14393 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14394
14395 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_query_reason, tvb, offset, 1,
14396 ENC_NA0x00000000);
14397 offset += 1;
14398
14399 left = tvb_reported_length_remaining(tvb, offset);
14400 if (left > 0) {
14401 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14402 tvb, offset, left, ENC_NA0x00000000);
14403
14404 while (left > 0){
14405 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14406 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14407 break;
14408 }
14409 left -= (tmp_sublen + 2);
14410 offset += (tmp_sublen + 2);
14411 }
14412 }
14413
14414 return offset - start;
14415}
14416
14417
14418static unsigned
14419wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14420{
14421 int start = offset;
14422 uint8_t mode;
14423 int left = tvb_reported_length_remaining(tvb, offset);
14424 int tmp_sublen;
14425 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52, TAG_VENDOR_SPECIFIC_IE221};
14426
14427 static int * const ieee80211_ff_request_flags[] = {
14428 &hf_ieee80211_ff_request_mode_pref_cand,
14429 &hf_ieee80211_ff_request_mode_abridged,
14430 &hf_ieee80211_ff_request_mode_disassoc_imminent,
14431 &hf_ieee80211_ff_request_mode_bss_term_included,
14432 &hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
14433 &hf_ieee80211_ff_request_mode_link_removal_imminent,
14434 &hf_ieee80211_ff_request_mode_reserved,
14435 NULL((void*)0)
14436 };
14437
14438 if (left < 5) {
14439 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14440 return offset - start;
14441 }
14442
14443 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14444
14445 mode = tvb_get_uint8(tvb, offset);
14446 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_ff_request_flags, ENC_LITTLE_ENDIAN0x80000000);
14447 offset += 1;
14448
14449 proto_tree_add_item(tree, hf_ieee80211_ff_disassoc_timer, tvb, offset, 2,
14450 ENC_LITTLE_ENDIAN0x80000000);
14451 offset += 2;
14452
14453 proto_tree_add_item(tree, hf_ieee80211_ff_validity_interval, tvb, offset, 1,
14454 ENC_LITTLE_ENDIAN0x80000000);
14455 offset += 1;
14456 left -= 5;
14457
14458 if (mode & 0x08) {
14459 proto_item *item;
14460 proto_tree *sub_tree;
14461 uint8_t sub_id, sub_len;
14462
14463 // BSS termination Duration sub element is the same as the neighbor report sub element
14464 if (left < 12) {
14465 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14466 return offset - start;
14467 }
14468
14469 sub_tree = proto_tree_add_subtree(tree, tvb, offset, 12, ett_tag_neighbor_report_subelement_tree,
14470 NULL((void*)0), "BSS Termination Duration");
14471
14472 sub_id = tvb_get_uint8(tvb, offset);
14473 item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_id,
14474 tvb, offset, 1, ENC_NA0x00000000);
14475 offset += 1;
14476 if (sub_id != NR_SUB_ID_BSS_TER_DUR4) {
14477 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
14478 "Incorrect BSS Termination Duration subelement ID");
14479 }
14480
14481 sub_len = tvb_get_uint8(tvb, offset);
14482 item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_length,
14483 tvb, offset, 1, ENC_NA0x00000000);
14484 offset += 1;
14485 if (sub_len != 10) {
14486 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
14487 "Incorrect BSS Termination Duration subelement length");
14488 }
14489
14490 proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf,
14491 tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14492 offset += 8;
14493 proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_dur,
14494 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14495 offset += 2;
14496 left -= 12;
14497 }
14498
14499 if (mode & 0x10) {
14500 uint8_t url_len;
14501
14502 url_len = tvb_get_uint8(tvb, offset);
14503 if (left < url_len) {
14504 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14505 return offset - start;
14506 }
14507
14508 proto_tree_add_item(tree, hf_ieee80211_ff_url_len, tvb, offset, 1,
14509 ENC_LITTLE_ENDIAN0x80000000);
14510 offset += 1;
14511 proto_tree_add_item(tree, hf_ieee80211_ff_url, tvb, offset, url_len,
14512 ENC_ASCII0x00000000);
14513 offset += url_len;
14514 left -= url_len + 1;
14515 }
14516
14517 if (left > 0) {
14518 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14519 tvb, offset, left, ENC_NA0x00000000);
14520
14521 while (left > 0){
14522 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14523 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14524 break;
14525 }
14526 left -= (tmp_sublen + 2);
14527 offset += (tmp_sublen + 2);
14528 }
14529 }
14530
14531 return offset - start;
14532}
14533
14534
14535static unsigned
14536wnm_bss_trans_mgmt_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14537{
14538 int start = offset;
14539 uint8_t code;
14540 int left;
14541 int tmp_sublen;
14542 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52, TAG_VENDOR_SPECIFIC_IE221 };
14543
14544 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14545 code = tvb_get_uint8(tvb, offset);
14546 offset += add_ff_bss_transition_status_code(tree, tvb, pinfo, offset);
14547 offset += add_ff_bss_termination_delay(tree, tvb, pinfo, offset);
14548 if (!code) {
14549 proto_tree_add_item(tree, hf_ieee80211_ff_target_bss,
14550 tvb, offset, 6, ENC_NA0x00000000);
14551 offset += 6;
14552 }
14553 left = tvb_reported_length_remaining(tvb, offset);
14554 if (left > 0) {
14555 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14556 tvb, offset, left, ENC_NA0x00000000);
14557 while (left > 0){
14558 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14559 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14560 break;
14561 }
14562 left -= (tmp_sublen + 2);
14563 offset += (tmp_sublen + 2);
14564 }
14565 }
14566
14567 return offset - start;
14568}
14569
14570static unsigned
14571wnm_sleep_mode_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14572{
14573 int start = offset;
14574 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14575 return offset - start;
14576}
14577
14578static unsigned
14579wnm_sleep_mode_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14580{
14581 int start = offset;
14582 uint16_t key_data_len;
14583 int left;
14584
14585 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14586 key_data_len = tvb_get_letohs(tvb, offset);
14587 offset += add_ff_key_data_length(tree, tvb, pinfo, offset);
14588 left = tvb_reported_length_remaining(tvb, offset);
14589 if (left < key_data_len) {
14590 expert_add_info(pinfo, tree, &ei_ieee80211_tag_wnm_sleep_mode_no_key_data);
14591 return offset - start;
14592 }
14593 proto_tree_add_item(tree, hf_ieee80211_ff_key_data, tvb, offset,
14594 key_data_len, ENC_NA0x00000000);
14595 offset += key_data_len;
14596 return offset - start;
14597}
14598
14599static unsigned
14600wnm_tfs_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14601{
14602 int start = offset;
14603 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14604 return offset - start;
14605}
14606
14607static unsigned
14608wnm_tfs_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14609{
14610 int start = offset;
14611 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14612 return offset - start;
14613}
14614
14615#define AP_DESCRIPTOR0 0
14616#define FIRMWARE_VERSION_CURRENT1 1
14617#define FIRMWARE_VERSION_NEW2 2
14618
14619static unsigned
14620dissect_wnm_subelements(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14621 int offset) {
14622 unsigned sub_elt_id = tvb_get_uint8(tvb, offset);
14623 unsigned sub_elt_len = tvb_get_uint8(tvb, offset + 1);
14624
14625 proto_tree_add_item(tree, hf_ieee80211_wnm_sub_elt_id, tvb, offset, 1, ENC_NA0x00000000);
14626 offset++;
14627
14628 proto_tree_add_item(tree, hf_ieee80211_wnm_sub_elt_len, tvb, offset, 1, ENC_NA0x00000000);
14629 offset++;
14630
14631 switch (sub_elt_id) {
14632 case AP_DESCRIPTOR0:
14633
14634 break;
14635
14636 case FIRMWARE_VERSION_CURRENT1:
14637
14638 break;
14639
14640 case FIRMWARE_VERSION_NEW2:
14641
14642 break;
14643 }
14644
14645 offset += sub_elt_len;
14646 return offset;
14647}
14648
14649static unsigned
14650wnm_channel_usage_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14651{
14652 int start = offset;
14653
14654 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14655
14656 return offset - start;
14657}
14658
14659static unsigned
14660wnm_channel_usage_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14661{
14662 int start = offset, i;
14663 uint8_t id, len;
14664 proto_tree *subtree;
14665
14666 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14667
14668 /* Parse multiple chan usage elements */
14669 id = tvb_get_uint8(tvb, offset);
14670 while (id == TAG_CHANNEL_USAGE97){
14671 len = tvb_get_uint8(tvb, offset + 1);
14672 subtree = proto_tree_add_subtree(tree, tvb, offset, len + 2,
14673 ett_chan_usage,
14674 NULL((void*)0), "Channel Usage");
14675 proto_tree_add_item(subtree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_NA0x00000000);
14676 offset += 1;
14677 proto_tree_add_item(subtree, hf_ieee80211_tag_length, tvb, offset, 1, ENC_NA0x00000000);
14678 offset += 1;
14679 proto_tree_add_item(subtree, hf_ieee80211_tag_channel_usage_mode, tvb, offset, 1, ENC_NA0x00000000);
14680 offset += 1;
14681 len -= 1;
14682
14683 for (i = 0; i < (len / 2); i++) {
14684 offset += add_ff_operating_class(subtree, tvb, pinfo, offset);
14685 offset += add_ff_channel(subtree, tvb, pinfo, offset);
14686 }
14687 id = tvb_get_uint8(tvb, offset);
14688 }
14689 offset += add_ff_country_str(tree, tvb, pinfo, offset);
14690
14691 return offset - start;
14692}
14693
14694static unsigned
14695wnm_notification_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14696{
14697 int start = offset;
14698 int len = 0;
14699 uint8_t wnm_type = 0;
14700 uint8_t wnm_sub_elt = 0;
14701
14702 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14703 wnm_type = tvb_get_uint8(tvb, offset);
14704 offset += add_ff_wnm_notification_type(tree, tvb, pinfo, offset);
14705 len = tvb_reported_length_remaining(tvb, offset);
14706
14707 if (wnm_type == 0) {
14708 int offset_end = offset + len;
14709 while (offset < offset_end) {
14710 int start_offset = offset;
14711 proto_tree *wnm_list = NULL((void*)0);
14712 proto_item *wnm_item = NULL((void*)0);
14713 wnm_list = proto_tree_add_subtree_format(tree, tvb, offset, -1,
14714 ett_wnm_notif_subelt,
14715 &wnm_item, "WNM Subelement %d", wnm_sub_elt);
14716 offset = dissect_wnm_subelements(wnm_list, tvb, pinfo, offset);
14717 proto_item_set_len(wnm_item, offset - start_offset);
14718 }
14719 }
14720 return offset - start;
14721}
14722
14723static unsigned
14724wnm_notification_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14725{
14726 int start = offset;
14727
14728 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14729 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_response_status,
14730 tvb, offset, 1, ENC_NA0x00000000);
14731 offset += 1;
14732
14733 return offset - start;
14734}
14735
14736static unsigned
14737add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14738{
14739 uint8_t code;
14740 unsigned start = offset;
14741
14742 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14743 code = tvb_get_uint8(tvb, offset);
14744 offset += add_ff_wnm_action_code(tree, tvb, pinfo, offset);
14745 switch (code) {
14746 case WNM_EVENT_REQ:
14747 case WNM_EVENT_REPORT:
14748 case WNM_DIAGNOSTIC_REQ:
14749 case WNM_DIAGNOSTIC_REPORT:
14750 case WNM_LOCATION_CFG_REQ:
14751 case WNM_LOCATION_CFG_RESP:
14752 case WNM_FMS_REQ:
14753 case WNM_FMS_RESP:
14754 case WNM_DMS_REQ:
14755 case WNM_DMS_RESP:
14756 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14757 break;
14758 case WNM_BSS_TRANS_MGMT_QUERY:
14759 offset += wnm_bss_trans_mgmt_query(tree, tvb, pinfo, offset);
14760 break;
14761 case WNM_BSS_TRANS_MGMT_REQ:
14762 offset += wnm_bss_trans_mgmt_req(tree, tvb, pinfo, offset);
14763 break;
14764 case WNM_BSS_TRANS_MGMT_RESP:
14765 offset += wnm_bss_trans_mgmt_resp(tree, tvb, pinfo, offset);
14766 break;
14767 case WNM_TFS_REQ:
14768 offset += wnm_tfs_req(tree, tvb, pinfo, offset);
14769 break;
14770 case WNM_TFS_RESP:
14771 offset += wnm_tfs_resp(tree, tvb, pinfo, offset);
14772 break;
14773 case WNM_SLEEP_MODE_REQ:
14774 offset += wnm_sleep_mode_req(tree, tvb, pinfo, offset);
14775 break;
14776 case WNM_SLEEP_MODE_RESP:
14777 offset += wnm_sleep_mode_resp(tree, tvb, pinfo, offset);
14778 break;
14779 case WNM_CHANNEL_USAGE_REQ:
14780 offset += wnm_channel_usage_req(tree, tvb, pinfo, offset);
14781 break;
14782 case WNM_CHANNEL_USAGE_RESP:
14783 offset += wnm_channel_usage_resp(tree, tvb, pinfo, offset);
14784 break;
14785 case WNM_NOTIFICATION_REQ:
14786 offset += wnm_notification_req(tree, tvb, pinfo, offset);
14787 break;
14788 case WNM_NOTIFICATION_RESP:
14789 offset += wnm_notification_resp(tree, tvb, pinfo, offset);
14790 break;
14791 }
14792
14793 return offset - start; /* Size of fixed fields */
14794}
14795
14796static unsigned
14797add_ff_action_unprotected_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14798{
14799 uint8_t code;
14800 unsigned start = offset;
14801
14802 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14803 code = tvb_get_uint8(tvb, offset);
14804 offset += add_ff_unprotected_wnm_action_code(tree, tvb, pinfo, offset);
14805
14806 switch (code) {
14807 case UNPROTECTED_WNM_TIM:
14808 offset += add_ff_check_beacon(tree, tvb, pinfo, offset);
14809 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
14810 offset += add_ff_tod(tree, tvb, pinfo, offset);
14811 offset += add_ff_toa(tree, tvb, pinfo, offset);
14812 offset += add_ff_max_tod_err(tree, tvb, pinfo, offset);
14813 offset += add_ff_max_toa_err(tree, tvb, pinfo, offset);
14814 break;
14815 case UNPROTECTED_WNM_TIMING_MEASUREMENT:
14816 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14817 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
14818 break;
14819 }
14820
14821 return offset - start; /* Size of fixed fields */
14822}
14823
14824static unsigned
14825add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14826{
14827 uint8_t code;
14828 uint16_t status;
14829 unsigned start = offset;
14830
14831 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14832 code = tvb_get_uint8(tvb, offset);
14833
14834 /* Extract keys for dot11decrypt engine */
14835 try_scan_tdls_keys(tvb, pinfo, offset);
14836
14837 offset += add_ff_tdls_action_code(tree, tvb, pinfo, offset);
14838 switch (code) {
14839 case TDLS_SETUP_REQUEST0:
14840 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14841 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
14842 break;
14843 case TDLS_SETUP_RESPONSE1:
14844 status = tvb_get_letohs(tvb, offset);
14845 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14846 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14847 if (tvb_reported_length_remaining(tvb, offset) < 2) {
14848 if (status == 0) {
14849 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_response_malformed);
14850 }
14851 break;
14852 }
14853 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
14854 break;
14855 case TDLS_SETUP_CONFIRM2:
14856 status = tvb_get_letohs(tvb, offset);
14857 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14858 if (tvb_reported_length_remaining(tvb, offset) < 1) {
14859 if (status == 0) {
14860 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_confirm_malformed);
14861 }
14862 break;
14863 }
14864 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14865 break;
14866 case TDLS_TEARDOWN3:
14867 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
14868 break;
14869 case TDLS_PEER_TRAFFIC_INDICATION4:
14870 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14871 break;
14872 case TDLS_CHANNEL_SWITCH_REQUEST5:
14873 offset += add_ff_target_channel(tree, tvb, pinfo, offset);
14874 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
14875 break;
14876 case TDLS_CHANNEL_SWITCH_RESPONSE6:
14877 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14878 break;
14879 case TDLS_PEER_PSM_REQUEST7:
14880 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14881 break;
14882 case TDLS_PEER_PSM_RESPONSE8:
14883 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14884 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14885 break;
14886 case TDLS_PEER_TRAFFIC_RESPONSE9:
14887 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14888 break;
14889 case TDLS_DISCOVERY_REQUEST10:
14890 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14891 break;
14892 }
14893
14894 return offset - start; /* Size of fixed fields */
14895}
14896
14897static unsigned
14898add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14899{
14900 unsigned start = offset;
14901
14902 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14903 offset += add_ff_wme_action_code(tree, tvb, pinfo, offset);
14904 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14905 offset += add_ff_wme_status_code(tree, tvb, pinfo, offset);
14906
14907 return offset - start; /* Size of fixed fields */
14908}
14909
14910static unsigned
14911add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14912{
14913 unsigned start = offset;
14914 uint32_t oui;
14915 tvbuff_t *vendor_tvb;
14916 int dissected;
14917
14918 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14919 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
14920 offset += 3;
14921
14922 vendor_tvb = tvb_new_subset_remaining(tvb, offset);
14923 dissected = dissector_try_uint_with_data(vendor_specific_action_table, oui, vendor_tvb, pinfo, tree, false0, NULL((void*)0));
14924 if (dissected <= 0)
14925 {
14926 call_data_dissector(vendor_tvb, pinfo, tree);
14927 /* Skip the whole TVB because we don't know its format */
14928 dissected = tvb_reported_length_remaining(vendor_tvb, 0);
14929 }
14930
14931 offset += dissected;
14932
14933 return offset - start; /* Size of fixed fields */
14934}
14935
14936static unsigned
14937add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14938{
14939 unsigned start = offset;
14940 uint8_t n_sta, i;
14941 mimo_control_t mimo_cntrl;
14942
14943 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14944 offset += add_ff_ht_action_code(tree, tvb, pinfo, offset);
14945
14946 switch (tvb_get_uint8(tvb, offset - 1)) {
14947 case HT_ACTION_NOTIFY_CHAN_WIDTH0:
14948 offset += add_ff_channel_width(tree, tvb, pinfo, offset);
14949 break;
14950 case HT_ACTION_SM_PWR_SAVE1:
14951 offset += add_ff_sm_pwr_cntrl(tree, tvb, pinfo, offset);
14952 break;
14953 case HT_ACTION_PSMP_ACTION2:
14954 n_sta = tvb_get_uint8(tvb, offset);
14955 offset += add_ff_psmp_param_set(tree, tvb, pinfo, offset);
14956 for (i = 0; i < (n_sta & 0x0F); i++) {
14957 offset += add_ff_psmp_sta_info(tree, tvb, pinfo, offset);
14958 }
14959 break;
14960 case HT_ACTION_SET_PCO_PHASE3:
14961 offset += add_ff_pco_phase_cntrl(tree, tvb, pinfo, offset);
14962 break;
14963 case HT_ACTION_MIMO_CSI4:
14964 mimo_cntrl = get_mimo_control(tvb, offset);
14965 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
14966 offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl);
14967 break;
14968 case HT_ACTION_MIMO_BEAMFORMING5:
14969 mimo_cntrl = get_mimo_control(tvb, offset);
14970 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
14971 offset += add_mimo_beamforming_feedback_report(tree, tvb, offset,
14972 mimo_cntrl);
14973 break;
14974 case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6:
14975 mimo_cntrl = get_mimo_control(tvb, offset);
14976 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
14977 offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb,
14978 offset,
14979 mimo_cntrl);
14980 break;
14981 case HT_ACTION_ANT_SEL_FEEDBACK7:
14982 offset += add_ff_ant_selection(tree, tvb, pinfo, offset);
14983 break;
14984 case HT_ACTION_HT_INFO_EXCHANGE8:
14985 offset += add_ff_ht_information(tree, tvb, pinfo, offset);
14986 break;
14987 }
14988
14989 return offset - start;
14990}
14991
14992static unsigned
14993add_ff_beacon_interval_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
14994{
14995 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bic,
14996 ett_bic_tree, ieee80211_ff_bic_fields,
14997 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
14998
14999 return 6;
15000}
15001
15002static unsigned
15003add_ff_beamforming_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset, bool_Bool isGrant)
15004{
15005 uint16_t bf_field = tvb_get_letohs(tvb, offset);
15006 bool_Bool isInit = (bf_field & 0x2) >> 1;
15007 bool_Bool isResp = (bf_field & 0x4) >> 2;
15008 static int * const ieee80211_ff_beamforming_ctrl[] = {
15009 &hf_ieee80211_ff_bf_train,
15010 &hf_ieee80211_ff_bf_is_init,
15011 &hf_ieee80211_ff_bf_is_resp,
15012 &hf_ieee80211_ff_bf_rxss_len,
15013 &hf_ieee80211_ff_bf_rxss_rate,
15014 &hf_ieee80211_ff_bf_b10b15,
15015 NULL((void*)0)
15016 };
15017
15018 static int * const ieee80211_ff_beamforming_ctrl_grant[] = {
15019 &hf_ieee80211_ff_bf_train,
15020 &hf_ieee80211_ff_bf_is_init,
15021 &hf_ieee80211_ff_bf_is_resp,
15022 &hf_ieee80211_ff_bf_num_sectors,
15023 &hf_ieee80211_ff_bf_num_rx_dmg_ants,
15024 &hf_ieee80211_ff_bf_b12b15,
15025 NULL((void*)0)
15026 };
15027
15028 if((isInit==true1) && (isResp==true1) && isGrant) {
15029 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bf,
15030 ett_bf_tree, ieee80211_ff_beamforming_ctrl_grant,
15031 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15032 } else {
15033 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bf,
15034 ett_bf_tree, ieee80211_ff_beamforming_ctrl,
15035 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15036 }
15037 return 2;
15038}
15039
15040static unsigned
15041add_ff_dynamic_allocation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15042{
15043 static int * const ieee80211_ff_dynamic_allocation[] = {
15044 &hf_ieee80211_ff_TID,
15045 &hf_ieee80211_ff_alloc_type,
15046 &hf_ieee80211_ff_src_aid,
15047 &hf_ieee80211_ff_dest_aid,
15048 &hf_ieee80211_ff_alloc_duration,
15049 &hf_ieee80211_ff_b39,
15050 NULL((void*)0)
15051 };
15052
15053 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_dynamic_allocation,
15054 ett_dynamic_alloc_tree, ieee80211_ff_dynamic_allocation,
15055 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15056
15057 return 5;
15058}
15059
15060static unsigned
15061add_ff_beamformed_link(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15062{
15063 static int * const ieee80211_ff_beamformed_link[] = {
15064 &hf_ieee80211_ff_blm_unit_index,
15065 &hf_ieee80211_ff_blm_maint_value,
15066 &hf_ieee80211_ff_blm_is_master,
15067 NULL((void*)0)
15068 };
15069
15070 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_blm,
15071 ett_blm_tree, ieee80211_ff_beamformed_link,
15072 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15073 return 1;
15074}
15075
15076static unsigned
15077add_ff_BRP_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15078{
15079 static int * const ieee80211_ff_BRP_request[] = {
15080 &hf_ieee80211_ff_brp_L_RX,
15081 &hf_ieee80211_ff_brp_TX_TRN_REQ,
15082 &hf_ieee80211_ff_brp_MID_REQ,
15083 &hf_ieee80211_ff_brp_BC_REQ,
15084 &hf_ieee80211_ff_brp_MID_GRANT,
15085 &hf_ieee80211_ff_brp_BC_GRANT,
15086 &hf_ieee80211_ff_brp_chan_FBCK_CAP,
15087 &hf_ieee80211_ff_brp_tx_sector,
15088 &hf_ieee80211_ff_brp_other_aid,
15089 &hf_ieee80211_ff_brp_tx_antenna,
15090 &hf_ieee80211_ff_brp_reserved,
15091 NULL((void*)0)
15092 };
15093
15094 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_brp,
15095 ett_brp_tree, ieee80211_ff_BRP_request,
15096 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15097 return 4;
15098}
15099
15100static unsigned
15101add_ff_sector_sweep_feedback_from_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15102{
15103 static int * const ieee80211_ff_sector_sweep_feedback_from_iss[] = {
15104 &hf_ieee80211_ff_sswf_total_sectors,
15105 &hf_ieee80211_ff_sswf_num_rx_dmg_ants,
15106 &hf_ieee80211_ff_sswf_reserved1,
15107 &hf_ieee80211_ff_sswf_poll_required,
15108 &hf_ieee80211_ff_sswf_reserved2,
15109 NULL((void*)0)
15110 };
15111
15112 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_sswf,
15113 ett_sswf_tree, ieee80211_ff_sector_sweep_feedback_from_iss,
15114 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15115 return 3;
15116}
15117
15118static unsigned
15119add_ff_sector_sweep_feedback_to_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15120{
15121 static int * const ieee80211_ff_sector_sweep_feedback_to_iss[] = {
15122 &hf_ieee80211_ff_sswf_sector_select,
15123 &hf_ieee80211_ff_sswf_dmg_antenna_select,
15124 &hf_ieee80211_ff_sswf_snr_report,
15125 &hf_ieee80211_ff_sswf_poll_required,
15126 &hf_ieee80211_ff_sswf_reserved2,
15127 NULL((void*)0)
15128 };
15129
15130 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_sswf,
15131 ett_sswf_tree, ieee80211_ff_sector_sweep_feedback_to_iss,
15132 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15133 return 3;
15134}
15135
15136static unsigned
15137add_ff_sector_sweep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15138{
15139 static int * const ieee80211_ff_sector_sweep[] = {
15140 &hf_ieee80211_ff_ssw_direction,
15141 &hf_ieee80211_ff_ssw_cdown,
15142 &hf_ieee80211_ff_ssw_sector_id,
15143 &hf_ieee80211_ff_ssw_dmg_ant_id,
15144 &hf_ieee80211_ff_ssw_rxss_len,
15145 NULL((void*)0)
15146 };
15147
15148 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ssw,
15149 ett_ssw_tree, ieee80211_ff_sector_sweep,
15150 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15151 return 3;
15152}
15153
15154static unsigned
15155add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15156{
15157 static int * const ieee80211_ff_dmg_params[] = {
15158 &hf_ieee80211_ff_dmg_params_bss,
15159 &hf_ieee80211_ff_dmg_params_cbap_only,
15160 &hf_ieee80211_ff_dmg_params_cbap_src,
15161 &hf_ieee80211_ff_dmg_params_privacy,
15162 &hf_ieee80211_ff_dmg_params_policy,
15163 &hf_ieee80211_ff_dmg_params_spec_mgmt,
15164 &hf_ieee80211_ff_dmg_params_radio_measure,
15165 NULL((void*)0)
15166 };
15167
15168 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_dmg_params,
15169 ett_dmg_params_tree, ieee80211_ff_dmg_params,
15170 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15171 return 1;
15172}
15173
15174static unsigned
15175add_ff_cc_field(proto_tree *tree, tvbuff_t *tvb, int offset, bool_Bool dis)
15176{
15177 proto_item *cc_item = proto_tree_add_item(tree, hf_ieee80211_ff_cc, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
15178 proto_tree *cc_tree = proto_item_add_subtree(cc_item, ett_cc_tree);
15179 uint64_t cc_field;
15180 if(dis) {
15181 proto_tree_add_item(cc_tree, hf_ieee80211_ff_cc_abft_resp_addr, tvb, offset, 6, ENC_NA0x00000000);
15182 } else {
15183 cc_field = tvb_get_letoh64(tvb, offset);
15184 /*TODO : Add support of bitmask for FT_(U)INT64 */
15185 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_sp_duration, tvb, offset, 1, (uint32_t)(cc_field & 0xff));
15186 proto_tree_add_uint64(cc_tree, hf_ieee80211_ff_cc_cluster_id, tvb, offset+1, 6, (uint64_t)((cc_field & UINT64_C(0x00ffffffffffff00)0x00ffffffffffff00UL) >> 8));
15187 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_role, tvb, offset+7, 1, (uint32_t)((cc_field & UINT64_C(0x0300000000000000)0x0300000000000000UL) >> 56));
15188 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_max_mem, tvb, offset+7, 1, (uint32_t)((cc_field & UINT64_C(0x7c00000000000000)0x7c00000000000000UL) >> 58));
15189 }
15190 return 8;
15191}
15192
15193
15194static unsigned
15195add_ff_band_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15196{
15197 proto_tree_add_item(tree, hf_ieee80211_ff_band_id, tvb, offset, 1, ENC_NA0x00000000);
15198 return 1;
15199}
15200
15201static unsigned
15202add_ff_subject_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15203{
15204 proto_tree_add_item(tree, hf_ieee80211_ff_subject_address, tvb, offset, 6, ENC_NA0x00000000);
15205 return 6;
15206}
15207
15208static unsigned
15209add_ff_handover_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15210{
15211 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reason, tvb, offset, 1, ENC_NA0x00000000);
15212 return 1;
15213}
15214
15215static unsigned
15216add_ff_handover_remaining_bi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15217{
15218 proto_tree_add_item(tree, hf_ieee80211_ff_handover_remaining_bi, tvb, offset, 1, ENC_NA0x00000000);
15219 return 1;
15220}
15221
15222static unsigned
15223add_ff_handover_result(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15224{
15225 proto_tree_add_item(tree, hf_ieee80211_ff_handover_result, tvb, offset, 1, ENC_NA0x00000000);
15226 return 1;
15227}
15228
15229static unsigned
15230add_ff_handover_reject_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15231{
15232 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reject_reason, tvb, offset, 1, ENC_NA0x00000000);
15233 return 1;
15234}
15235
15236static unsigned
15237add_ff_destination_reds_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15238{
15239 proto_tree_add_item(tree, hf_ieee80211_ff_destination_reds_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15240 return 2;
15241}
15242
15243static unsigned
15244add_ff_destination_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15245{
15246 proto_tree_add_item(tree, hf_ieee80211_ff_destination_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15247 return 2;
15248}
15249
15250static unsigned
15251add_ff_relay_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15252{
15253 proto_tree_add_item(tree, hf_ieee80211_ff_relay_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15254 return 2;
15255}
15256
15257static unsigned
15258add_ff_source_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15259{
15260 proto_tree_add_item(tree, hf_ieee80211_ff_source_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15261 return 2;
15262}
15263
15264static unsigned
15265add_ff_timing_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15266{
15267 proto_tree_add_item(tree, hf_ieee80211_ff_timing_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15268 return 2;
15269}
15270
15271static unsigned
15272add_ff_sampling_frequency_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15273{
15274 proto_tree_add_item(tree, hf_ieee80211_ff_sampling_frequency_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15275 return 2;
15276}
15277
15278static unsigned
15279add_ff_relay_operation_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15280{
15281 proto_tree_add_item(tree, hf_ieee80211_ff_relay_operation_type, tvb, offset, 1, ENC_NA0x00000000);
15282 return 1;
15283}
15284
15285static unsigned
15286add_ff_fst_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15287{
15288 proto_tree_add_item(tree, hf_ieee80211_ff_fst_action_code, tvb, offset, 1, ENC_NA0x00000000);
15289 return 1;
15290}
15291
15292static unsigned
15293add_ff_robust_av_streaming_action_code(proto_tree *tree, tvbuff_t *tvb,
15294 packet_info *pinfo _U___attribute__((unused)), int offset)
15295{
15296 proto_tree_add_item(tree, hf_ieee80211_ff_robust_av_streaming_action_code,
15297 tvb, offset, 1, ENC_NA0x00000000);
15298 return 1;
15299}
15300
15301static unsigned
15302add_ff_llt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15303{
15304 proto_tree_add_item(tree, hf_ieee80211_ff_llt, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15305 return 4;
15306}
15307
15308static unsigned
15309add_ff_fsts_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15310{
15311 proto_tree_add_item(tree, hf_ieee80211_ff_fsts_id, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15312 return 4;
15313}
15314
15315static unsigned
15316add_ff_oct_mmpdu(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15317{
15318 unsigned start = offset;
15319 unsigned len = tvb_get_letohs(tvb, offset);
15320 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_len, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15321 offset += 2;
15322 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_ctrl, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15323 offset += 2;
15324 proto_tree_add_item(tree, hf_ieee80211_ff_oct_mmpdu, tvb, offset, len, ENC_NA0x00000000);
15325 offset += len;
15326 return offset - start;
15327}
15328
15329static int * const eht_eml_control_field_mode_headers[] = {
15330 &hf_ieee80211_eht_eml_control_emlsr_mode,
15331 &hf_ieee80211_eht_eml_control_emlmr_mode,
15332 &hf_ieee80211_eht_eml_control_emlsr_para_update_control,
15333 &hf_ieee80211_eht_eml_control_device_coexist_activities,
15334 &hf_ieee80211_eht_eml_control_reserved,
15335 NULL((void*)0)
15336};
15337
15338static int * const eht_emlsr_para_update_headers[] = {
15339 &hf_ieee80211_eht_emlsr_para_update_padding_delay,
15340 &hf_ieee80211_eht_emlsr_para_update_tran_delay,
15341 &hf_ieee80211_eht_emlsr_para_update_reserved,
15342 NULL((void*)0)
15343};
15344
15345static int * const eht_eml_control_mcs_map_count_headers[] = {
15346 &hf_ieee80211_eht_eml_control_mcs_map_count_bw,
15347 &hf_ieee80211_eht_eml_control_mcs_map_count_reserved,
15348 NULL((void*)0)
15349};
15350
15351static const value_string eht_eml_control_mcs_map_count_bw[] = {
15352 {0x00, "80 MHz"},
15353 {0x01, "160 MHz"},
15354 {0x02, "320 MHz"},
15355 {0, NULL((void*)0)}
15356};
15357
15358static int * const eht_le_80_mcs_map_hdrs[] = {
15359 &hf_ieee80211_eht_le_80_rx_max_nss_0_9,
15360 &hf_ieee80211_eht_le_80_tx_max_nss_0_9,
15361 &hf_ieee80211_eht_le_80_rx_max_nss_10_11,
15362 &hf_ieee80211_eht_le_80_tx_max_nss_10_11,
15363 &hf_ieee80211_eht_le_80_rx_max_nss_12_13,
15364 &hf_ieee80211_eht_le_80_tx_max_nss_12_13,
15365 NULL((void*)0)
15366};
15367
15368static int * const eht_160_mcs_map_hdrs[] = {
15369 &hf_ieee80211_eht_160_rx_max_nss_0_9,
15370 &hf_ieee80211_eht_160_tx_max_nss_0_9,
15371 &hf_ieee80211_eht_160_rx_max_nss_10_11,
15372 &hf_ieee80211_eht_160_tx_max_nss_10_11,
15373 &hf_ieee80211_eht_160_rx_max_nss_12_13,
15374 &hf_ieee80211_eht_160_tx_max_nss_12_13,
15375 NULL((void*)0)
15376};
15377
15378static int * const eht_320_mcs_map_hdrs[] = {
15379 &hf_ieee80211_eht_320_rx_max_nss_0_9,
15380 &hf_ieee80211_eht_320_tx_max_nss_0_9,
15381 &hf_ieee80211_eht_320_rx_max_nss_10_11,
15382 &hf_ieee80211_eht_320_tx_max_nss_10_11,
15383 &hf_ieee80211_eht_320_rx_max_nss_12_13,
15384 &hf_ieee80211_eht_320_tx_max_nss_12_13,
15385 NULL((void*)0)
15386};
15387
15388static unsigned
15389dissect_eht_eml_control_field(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15390{
15391 unsigned start = offset;
15392 unsigned len = tvb_captured_length_remaining(tvb, offset);
15393 uint8_t mode = tvb_get_uint8(tvb, offset);
15394 uint8_t mcs_map_count;
15395 proto_item *link_map_item;
15396 proto_tree *link_map_tree;
15397 uint16_t bmap, f;
15398
15399 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15400 hf_ieee80211_eht_eml_control_field,
15401 ett_eht_eml_control,
15402 eht_eml_control_field_mode_headers,
15403 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15404 offset += 1;
15405
15406 if (mode & 0x03) { /* EMLSR or EMLMR*/
15407 if (len < 3) {
15408 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_action, "EMLSR or EMLMR length %u is wrong", len);
15409 return len;
15410 }
15411 link_map_item = proto_tree_add_item(tree,
15412 hf_ieee80211_eht_eml_control_link_bitmap,
15413 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15414 link_map_tree = proto_item_add_subtree(link_map_item,
15415 ett_eht_eml_control_link_map);
15416 bmap = tvb_get_letohs(tvb, offset);
15417 for (f = 0; f < 16; f++) {
15418 if (bmap & (1 << f)) {
15419 proto_tree_add_uint_format_value(link_map_tree,
15420 hf_ieee80211_eht_eml_control_link_enable_id,
15421 tvb, offset + (f/8), 1, f, "%u", f);
15422 }
15423 }
15424 offset += 2;
15425 }
15426 if (mode & 0x02) { /* EMLMR */
15427 if (len < 7) {
15428 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_action, "EMLMR length %u is wrong", len);
15429 return len;
15430 }
15431 mcs_map_count = tvb_get_uint8(tvb, offset) & 0x03;
15432 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15433 hf_ieee80211_eht_eml_control_mcs_map_count,
15434 ett_eht_eml_control_mcs_map_count,
15435 eht_eml_control_mcs_map_count_headers, ENC_LITTLE_ENDIAN0x80000000,
15436 BMT_NO_APPEND0x01);
15437 offset++;
15438
15439 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15440 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
15441 ett_eht_phy_mcs_nss_set,
15442 eht_le_80_mcs_map_hdrs,
15443 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15444 offset += 3;
15445 if (mcs_map_count >= 1) {
15446 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15447 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
15448 ett_eht_phy_mcs_nss_set,
15449 eht_160_mcs_map_hdrs,
15450 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15451 offset += 3;
15452 }
15453 if (mcs_map_count >= 2) {
15454 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15455 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
15456 ett_eht_phy_mcs_nss_set,
15457 eht_320_mcs_map_hdrs,
15458 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15459 offset += 3;
15460 }
15461 }
15462
15463 if (mode & 0x04) { /* EMLSR Parameter Update */
15464 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15465 hf_ieee80211_eht_emlsr_para_update, ett_eht_emlsr_para_update,
15466 eht_emlsr_para_update_headers, ENC_LITTLE_ENDIAN0x80000000,
15467 BMT_NO_APPEND0x01);
15468 offset++;
15469 }
15470
15471 return offset - start;
15472}
15473
15474static int
15475add_tag_relay_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15476{
15477 int tag_len = tvb_reported_length(tvb);
15478 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15479 int offset = 0;
15480 static int * const ieee80211_tag_relay_capabilities[] = {
15481 &hf_ieee80211_tag_relay_support,
15482 &hf_ieee80211_tag_relay_use,
15483 &hf_ieee80211_tag_relay_permission,
15484 &hf_ieee80211_tag_AC_power,
15485 &hf_ieee80211_tag_relay_prefer,
15486 &hf_ieee80211_tag_duplex,
15487 &hf_ieee80211_tag_cooperation,
15488 NULL((void*)0)
15489 };
15490
15491 if (tag_len < 2) {
15492 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length must be 2");
15493 return 1;
15494 }
15495
15496 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_relay_capabilities, ENC_NA0x00000000);
15497 return tvb_captured_length(tvb);
15498}
15499
15500#if 0
15501static unsigned
15502add_ff_relay_capable_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15503{
15504 proto_item *rcsi_item = proto_tree_add_item(tree, hf_ieee80211_ff_rcsi, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15505 proto_tree *rcsi_tree = proto_item_add_subtree(rcsi_item, ett_rcsi_tree);
15506 proto_tree_add_item(rcsi_tree, hf_ieee80211_ff_rcsi_aid, tvb, offset, 1, ENC_NA0x00000000);
15507 offset += 1;
15508 add_tag_relay_capabilities(pinfo, rcsi_item, 2, rcsi_tree, tvb, &offset);
15509 return 3;
15510}
15511#endif
15512
15513#define NEXT_TBTT_PRESENT0x01 0x01
15514#define COMPRESSED_SSID_PRESENT0x02 0x02
15515#define ANO_PRESENT0x04 0x04
15516
15517static void
15518dissect_ieee80211_extension(uint16_t fcf, tvbuff_t *tvb, packet_info *pinfo,
15519 proto_tree *tree, uint16_t flags)
15520{
15521 proto_item *ti;
15522 proto_tree *ext_tree;
15523 proto_tree *fixed_tree;
15524 proto_tree *tagged_tree;
15525
15526 int offset = 0;
15527 int tagged_parameter_tree_len;
15528
15529 ti = proto_tree_add_item(tree, proto_wlan_ext, tvb, offset, -1, ENC_NA0x00000000);
15530 ext_tree = proto_item_add_subtree(ti, ett_80211_ext);
15531
15532 switch (COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
)
15533 {
15534 case EXTENSION_DMG_BEACON0x30:
15535 {
15536 bool_Bool cc, dis;
15537 uint16_t bic_field;
15538 fixed_tree = get_fixed_parameter_tree(ext_tree, tvb, offset, 20, false0);
15539 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
15540 offset += add_ff_sector_sweep(fixed_tree, tvb, pinfo, offset);
15541 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
15542 bic_field = tvb_get_letohs(tvb, offset);
15543 cc = (bic_field & 0x1);
15544 dis = (bic_field & 0x2) >> 1;
15545 offset += add_ff_beacon_interval_ctrl(fixed_tree, tvb, pinfo, offset);
15546 offset += add_ff_dmg_params(fixed_tree, tvb, pinfo, offset);
15547 if(cc) {
15548 offset += add_ff_cc_field(fixed_tree, tvb, offset, dis);
15549 }
15550 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
15551
15552 /*
15553 * The tagged params are optional here. See Table 8.33a of the 2012
15554 * version of the standard.
15555 */
15556 if (tagged_parameter_tree_len) {
15557 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
15558 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_DMG_BEACON0x30, NULL((void*)0));
15559 }
15560 break;
15561 }
15562 case EXTENSION_S1G_BEACON0x31:
15563 {
15564 int params_size = 5;
15565
15566 if (flags & NEXT_TBTT_PRESENT0x01) params_size += 3;
15567 if (flags & COMPRESSED_SSID_PRESENT0x02) params_size += 4;
15568 if (flags & ANO_PRESENT0x04) params_size += 1;
15569
15570 fixed_tree = get_fixed_parameter_tree( ext_tree, tvb, offset, params_size, false0);
15571 offset += add_ff_s1g_timestamp(fixed_tree, tvb, pinfo, offset);
15572 offset += add_ff_change_sequence(fixed_tree, tvb, pinfo, offset);
15573 if (flags & NEXT_TBTT_PRESENT0x01)
15574 offset += add_ff_next_tbtt(fixed_tree, tvb, pinfo, offset);
15575 if (flags & COMPRESSED_SSID_PRESENT0x02)
15576 offset += add_ff_compressed_ssid(fixed_tree, tvb, pinfo, offset);
15577 if (flags & ANO_PRESENT0x04)
15578 offset += add_ff_access_network_options(fixed_tree, tvb, pinfo, offset);
15579
15580 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
15581
15582 if (tagged_parameter_tree_len) {
15583 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
15584 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_S1G_BEACON0x31, NULL((void*)0));
15585 }
15586 }
15587 }
15588}
15589
15590static unsigned
15591add_ff_action_unprotected_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
15592{
15593 uint8_t code;
15594 unsigned start = offset;
15595
15596 offset += add_ff_category_code(tree, tvb, pinfo, offset);
15597 code = tvb_get_uint8(tvb, offset);
15598 offset += add_ff_unprotected_dmg_action_code(tree, tvb, pinfo, offset);
15599 switch (code) {
15600 case UNPROTECTED_DMG_ANNOUNCE0:
15601 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
15602 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
15603 break;
15604 case UNPROTECTED_DMG_BRP1:
15605 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
15606 offset += add_ff_BRP_request(tree, tvb, pinfo, offset);
15607 break;
15608 }
15609 return offset - start;
15610}
15611
15612/* There is no easy way to skip all these subcarrier indices that must not
15613 * be displayed when showing compressed beamforming feedback matrices
15614 * Table 8-53g IEEE Std 802.11ac-2013 amendment.
15615 *
15616 * The irregular use of case statements in this function is to improve
15617 * readability in what is otherwise a large function that does very little.
15618 */
15619static inline int
15620vht_compressed_skip_scidx(uint8_t nchan_width, uint8_t ng, int scidx)
15621{
15622 switch(nchan_width) {
15623 /* 20 MHz */
15624 case 0:
15625 /* No Grouping */
15626 if (ng == 0)
15627 switch (scidx) {
15628 /* Pilot subcarriers */
15629 case -21: case -7: case 7: case 21:
15630 /* DC subcarrier */
15631 case 0:
15632 scidx++;
15633 default:
15634 break;
15635 }
15636 break;
15637 /* 40 MHz */
15638 case 1:
15639 /* No Grouping */
15640 if (ng == 0)
15641 switch (scidx) {
15642 /* Pilot subcarriers */
15643 case -53: case -25: case -11: case 11: case 25: case 53:
15644 scidx++;
15645 break;
15646 /* DC subcarriers */
15647 case -1: case 0: case 1:
15648 scidx = 2;
15649 default:
15650 break;
15651 }
15652 break;
15653 /* 80 MHz */
15654 case 2:
15655 /* No Grouping */
15656 if (ng == 0)
15657 switch (scidx) {
15658 /* Pilot subcarriers */
15659 case -103: case -75: case -39: case -11: case 11: case 39: case 75: case 103:
15660 scidx++;
15661 break;
15662 /* DC subcarriers, skip -1, 0, 1 */
15663 case -1:
15664 scidx = 2;
15665 default:
15666 break;
15667 }
15668 break;
15669 /* 160 MHz / 80+80 Mhz
15670 * Skip values here assume 160 MHz, as vht_mimo_control does not let us differentiate
15671 * between 160 MHz & 80-80MHz */
15672 case 3:
15673 switch (ng) {
15674 /* No Grouping */
15675 case 0:
15676 /* DC subcarriers, skip -5 to 5*/
15677 if (scidx == -5) {
15678 scidx = 6;
15679 break;
15680 }
15681 switch (scidx) {
15682 /* Pilot subcarriers */
15683 case -231: case -203: case -167: case -139: case -117: case -89: case -53: case -25:
15684 case 25: case 53: case 89: case 117: case 139: case 167: case 203: case 231:
15685 scidx++;
15686 break;
15687 /* Other subcarriers, skip -129 to -127, 127 to 129 */
15688 case -129:
15689 scidx = -126;
15690 break;
15691 case 127:
15692 scidx = 130;
15693 break;
15694 default:
15695 break;
15696 }
15697 break;
15698 /* Grouping of 2 */
15699 case 1:
15700 switch (scidx) {
15701 /* DC subcarriers */
15702 case -128: case -4: case -2: case 0: case 2: case 4: case 128:
15703 scidx++;
15704 default:
15705 break;
15706 }
15707 break;
15708 /* Grouping of 4 */
15709 case 2:
15710 if (scidx == -2 || scidx == 2)
15711 scidx++;
15712 break;
15713 }
15714 break;
15715 default:
15716 break;
15717 }
15718
15719 return scidx;
15720}
15721
15722static inline int vht_exclusive_skip_scidx(uint8_t nchan_width, uint8_t ng, int scidx)
15723{
15724 switch (nchan_width) {
15725 /* 20 MHz */
15726 case 0:
15727 switch (ng) {
15728 /* No Grouping */
15729 case 0:
15730 if (scidx == -2 || scidx == 1)
15731 scidx++;
15732 else
15733 scidx = scidx + 2;
15734 break;
15735 case 1:
15736 switch (scidx) {
15737 case -4: case 1:
15738 scidx = scidx + 3;
15739 break;
15740 case -1:
15741 scidx = 1;
15742 break;
15743 default:
15744 scidx = scidx + 4;
15745 break;
15746 }
15747 break;
15748 default:
15749 switch (scidx) {
15750 case -4: case 1:
15751 scidx = scidx + 3;
15752 break;
15753 case -1:
15754 scidx = 1;
15755 break;
15756 default:
15757 scidx = scidx + 8;
15758 break;
15759 }
15760 break;
15761 }
15762 break;
15763 /* 40 MHz */
15764 case 1:
15765 /* 80 MHz */
15766 case 2:
15767 switch (ng) {
15768 /* No Grouping */
15769 case 0:
15770 if (scidx == -2)
15771 scidx = 2;
15772 else
15773 scidx = scidx + 2;
15774 break;
15775 case 1:
15776 scidx = scidx + 4;
15777 break;
15778 default:
15779 if (scidx == -2)
15780 scidx = 2;
15781 else
15782 scidx = scidx + 8;
15783 break;
15784 }
15785 break;
15786 /* 160 MHz / 80+80 Mhz */
15787 case 3:
15788 switch (ng) {
15789 /* No Grouping */
15790 case 0:
15791 switch (scidx) {
15792 /* DC subcarriers, skip -4 to 4*/
15793 case -6:
15794 scidx = 6;
15795 break;
15796 /* Other subcarriers, skip -128, 128 */
15797 case -130:
15798 scidx = -126;
15799 break;
15800 case 126:
15801 scidx = 130;
15802 break;
15803 default:
15804 scidx = scidx + 2;
15805 break;
15806 }
15807 break;
15808 case 1:
15809 switch (scidx) {
15810 /* DC subcarriers, skip -4 to 4*/
15811 case -6:
15812 scidx = 6;
15813 break;
15814 default:
15815 scidx = scidx + 4;
15816 break;
15817 }
15818 break;
15819 default:
15820 switch (scidx) {
15821 case -6:
15822 scidx = 6;
15823 break;
15824 case -130:
15825 scidx = -126;
15826 break;
15827 case 126:
15828 scidx = 130;
15829 break;
15830 default:
15831 scidx = scidx + 8;
15832 break;
15833 }
15834 break;
15835 }
15836 break;
15837 default:
15838 break;
15839 }
15840 return scidx;
15841}
15842
15843static int
15844dissect_he_feedback_matrix(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
15845 int offset, int bit_offset, int scidx,
15846 int nr, int nc,
15847 int phi_bits, int psi_bits,
15848 int hf);
15849
15850static unsigned
15851add_ff_vht_compressed_beamforming_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15852{
15853 uint32_t vht_mimo;
15854 uint8_t nc;
15855 uint8_t nr;
15856 uint8_t chan_width;
15857 uint8_t grouping;
15858 bool_Bool codebook_info;
15859 bool_Bool feedback_type;
15860 proto_item *vht_beam_item, *vht_excl_beam_item;
15861 proto_tree *vht_beam_tree, *subtree, *vht_excl_beam_tree;
15862 int i, len, pos, ns, scidx = 0;
15863 uint8_t phi, psi, carry;
15864 int j, ic, off_len = 0, sscidx = 0, xnsc;
15865 int bit_offset = 0;
15866 int start_offset = 0;
15867 /* Table 8-53g Subcarriers for which a Compressed Beamforming Feedback Matrix
15868 * subfield is sent back. IEEE Std 802.11ac-2013 amendment */
15869 static const int ns_arr[4][3] = { { 52, 30, 16 },
15870 { 108, 58, 30 },
15871 { 234, 122, 62 },
15872 { 468, 244, 124 }
15873 };
15874
15875 /* Table 8-53j, no of Subcarriers for which the Delta SNR subfield is sent back to the beamformer.
15876 * IEEE Std 802.11ac-2013 amendment */
15877 static const int delta_ns_arr[4][3] = { { 30, 16, 10 },
15878 { 58, 30, 16 },
15879 { 122, 62, 32 },
15880 { 244, 124, 64 }
15881 };
15882
15883 vht_mimo = tvb_get_letoh24(tvb, offset);
15884 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_vht_mimo_cntrl,
15885 ett_ff_vhtmimo_cntrl, hf_ieee80211_ff_vht_mimo_cntrl_fields, ENC_LITTLE_ENDIAN0x80000000);
15886 offset += 3;
15887
15888 /* Extract values for beamforming use */
15889 nc = (vht_mimo & 0x7) + 1;
15890 nr = ((vht_mimo & 0x38) >> 3) + 1;
15891 chan_width = (vht_mimo & 0xC0) >> 6;
15892 grouping = ((vht_mimo & 0x300) >> 8);
15893 codebook_info = (vht_mimo & 0x400) >> 10;
15894 feedback_type = (vht_mimo & 0x800) >> 11;
15895
15896 if (feedback_type) {
15897 if (codebook_info) {
15898 psi = 7; phi = 9;
15899 } else {
15900 psi = 5; phi = 7;
15901 }
15902 } else {
15903 if (codebook_info) {
15904 psi = 4; phi = 6;
15905 } else {
15906 psi = 2; phi = 4;
15907 }
15908 }
15909
15910 vht_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_compressed_beamforming_report, tvb,
15911 offset, -1, ENC_NA0x00000000);
15912 vht_beam_tree = proto_item_add_subtree(vht_beam_item, ett_ff_vhtmimo_beamforming_report);
15913
15914 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, nc,
15915 ett_ff_vhtmimo_beamforming_report_snr, NULL((void*)0), "Average Signal to Noise Ratio");
15916
15917 for (i = 1; i <= nc; i++)
15918 {
15919 int8_t snr;
15920 char edge_sign;
15921
15922 snr = tvb_get_int8(tvb, offset);
15923
15924 switch(snr) {
15925 case -128:
15926 edge_sign = '<';
15927 break;
15928 case 127:
15929 edge_sign = '>';
15930 break;
15931 default:
15932 edge_sign = ' ';
15933 break;
15934 }
15935
15936 proto_tree_add_int_format(subtree, hf_ieee80211_vht_compressed_beamforming_report_snr, tvb, offset, 1,
15937 snr, "Stream %d - Signal to Noise Ratio: %c%3.2fdB", i, edge_sign,snr/4.0+22.0);
15938
15939 offset += 1;
15940 }
15941
15942 /* Table 8-53c Subfields of the VHT MIMO Control field (802.11ac-2013)
15943 * reserves value 3 of the Grouping subfield. */
15944 if (grouping == 3) {
15945 expert_add_info_format(pinfo, vht_beam_item, &ei_ieee80211_inv_val,
15946 "Grouping subfield value 3 is reserved");
15947 return offset;
15948 }
15949
15950 start_offset = offset;
15951 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, -1,
15952 ett_ff_vhtmimo_beamforming_report_feedback_matrices,
15953 NULL((void*)0), "Feedback Matrices");
15954
15955 ns = ns_arr[chan_width][grouping];
15956 switch(chan_width) {
15957 case 0:
15958 scidx = -28;
15959 break;
15960 case 1:
15961 scidx = -58;
15962 break;
15963 case 2:
15964 scidx = -122;
15965 break;
15966 case 3:
15967 /* This is -122 for 80+80MHz Channel Width but vht_mimo_control does not allow us
15968 * to differentiate between 160MHz and 80+80Mhz */
15969 scidx = -250;
15970 break;
15971 }
15972
15973 bit_offset = offset * 8;
15974 for (i = 0; i < ns; i++) {
15975
15976 scidx = vht_compressed_skip_scidx(chan_width, grouping, scidx);
15977
15978 bit_offset = dissect_he_feedback_matrix(subtree, tvb, pinfo, offset,
15979 bit_offset, scidx++, nr, nc, phi, psi,
15980 hf_ieee80211_vht_compressed_beamform_scidx);
15981 offset = bit_offset / 8;
15982 }
15983
15984 proto_item_set_len(subtree, offset - start_offset);
15985
15986 if (feedback_type) {
15987 xnsc = delta_ns_arr[chan_width][grouping];
15988 if ((nc * xnsc *4) % 8)
15989 off_len = (nc * xnsc *4) / 8 + 1;
15990 else
15991 off_len = (nc * xnsc *4) / 8;
15992 switch(chan_width) {
15993 case 0:
15994 sscidx = -28;
15995 break;
15996 case 1:
15997 sscidx = -58;
15998 break;
15999 case 2:
16000 sscidx = -122;
16001 break;
16002 case 3:
16003 sscidx = -250;
16004 break;
16005 }
16006 vht_excl_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_mu_exclusive_beamforming_report, tvb, offset, off_len, ENC_NA0x00000000);
16007 vht_excl_beam_tree = proto_item_add_subtree(vht_excl_beam_item, ett_ff_vhtmu_exclusive_beamforming_report_matrices);
16008
16009 carry = 1;
16010 for (j = 1; j <= xnsc; j++) {
16011 for (ic = 1; ic <= nc; ic++) {
16012 if (carry % 2){
16013 pos = 0;
16014 len = 1;
16015 }
16016 else
16017 {
16018 pos = 1;
16019 len = 0;
16020 }
16021 proto_tree_add_none_format(vht_excl_beam_tree, hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr, tvb,
16022 offset - pos, 1, "Delta SNR for space-time stream %d for subcarrier %d", ic, sscidx);
16023 offset += len;
16024 carry ++;
16025 }
16026 sscidx = vht_exclusive_skip_scidx(chan_width, grouping, sscidx);
16027 }
16028 }
16029
16030 return offset;
16031}
16032
16033static unsigned
16034add_ff_action_vht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16035{
16036 unsigned start = offset;
16037 uint8_t vht_action, field_val;
16038 uint64_t msa_value;
16039 uint64_t upa_value;
16040 int m, half, msa_index;
16041 proto_item *ti;
16042 proto_tree *ti_tree;
16043 proto_item *msa, *upa;
16044 proto_tree *msa_tree, *upa_tree;
16045
16046 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16047
16048 vht_action = tvb_get_uint8(tvb, offset);
16049 offset += add_ff_vht_action(tree, tvb, pinfo, offset);
16050
16051 switch(vht_action){
16052 case VHT_ACT_VHT_COMPRESSED_BEAMFORMING0:{
16053 offset = add_ff_vht_compressed_beamforming_report(tree, tvb, pinfo, offset);
16054 offset += tvb_reported_length_remaining(tvb, offset);
16055 }
16056 break;
16057 case VHT_ACT_GROUP_ID_MANAGEMENT1:{
16058 ti = proto_tree_add_item(tree, hf_ieee80211_vht_group_id_management, tvb,
16059 offset, -1, ENC_NA0x00000000);
16060 ti_tree = proto_item_add_subtree(ti, ett_vht_grpidmgmt);
16061
16062 msa_value = tvb_get_letoh64(tvb, offset);
16063 msa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_membership_status_array, tvb,
16064 offset, 8, ENC_NA0x00000000);
16065 msa_tree = proto_item_add_subtree(msa, ett_vht_msa);
16066 for (m = 0; m < 64; m++) {
16067 if (msa_value & (INT64_C(1)1L << m))
16068 proto_tree_add_uint_format(msa_tree, hf_ieee80211_vht_membership_status_field,
16069 tvb, offset + (m/8), 1, 1, "Membership Status in Group ID %d: 1", m);
16070 }
16071 offset += 8;
16072
16073 upa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_user_position_array, tvb,
16074 offset, 16, ENC_NA0x00000000);
16075 upa_tree = proto_item_add_subtree(upa, ett_vht_upa);
16076
16077 for (half = 0, msa_index = 0; half < 2; half++) {
16078 upa_value = tvb_get_letoh64(tvb, offset);
16079 for (m = 0; m < 64; m += 2, msa_index++) {
16080 if (msa_value & (INT64_C(1)1L << msa_index)) {
16081 field_val = (uint8_t)((upa_value >> m) & 0x3);
16082 proto_tree_add_uint_format(upa_tree, hf_ieee80211_vht_user_position_field,
16083 tvb, offset + (m / 8), 1, field_val, "User Position in Group ID %d: %u", msa_index, field_val);
16084 }
16085 }
16086 offset += 8;
16087 }
16088
16089 offset += tvb_reported_length_remaining(tvb, offset);
16090 }
16091 break;
16092 case VHT_ACT_OPERATION_MODE_NOTIFICATION2:{
16093 ti = proto_tree_add_item(tree, hf_ieee80211_vht_operation_mode_notification, tvb,
16094 offset, -1, ENC_NA0x00000000);
16095 expert_add_info(pinfo, ti, &ei_ieee80211_vht_action);
16096 offset += tvb_reported_length_remaining(tvb, offset);
16097 }
16098 break;
16099 default:
16100 break;
16101 }
16102
16103
16104 return offset - start;
16105}
16106
16107static int * const s1g_sync_control_headers[] = {
16108 &hf_ieee80211_s1g_sync_control_uplink_sync_request,
16109 &hf_ieee80211_s1g_sync_control_time_slot_protection_request,
16110 &hf_ieee80211_s1g_sync_control_reserved,
16111 NULL((void*)0)
16112};
16113
16114static int
16115add_ff_sync_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16116{
16117 int start = offset;
16118
16119 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16120 hf_ieee80211_s1g_sync_control,
16121 ett_s1g_sync_control_tree,
16122 s1g_sync_control_headers,
16123 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16124 offset += 1;
16125
16126 return offset - start;
16127}
16128
16129static int * const s1g_sector_id_index_headers[] = {
16130 &hf_ieee80211_s1g_sector_id_preferred_sector_id,
16131 &hf_ieee80211_s1g_sector_id_snr,
16132 &hf_ieee80211_s1g_sector_id_receive_sector_bitmap,
16133 NULL((void*)0)
16134};
16135
16136static void
16137s1g_sector_id_index_snr_custom(char *result, uint16_t snr)
16138{
16139 switch (snr) {
16140 case 0:
16141 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Less than or equal to -3dB");
16142 break;
16143 case 30:
16144 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Greater than or equal to 27dB");
16145 break;
16146 case 31:
16147 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "No Feedback");
16148 break;
16149 default:
16150 snprintf(result, ITEM_LABEL_LENGTH240, "%ddB", snr - 3);
16151 }
16152}
16153
16154static int
16155add_ff_sector_id_index(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16156{
16157 int start = offset;
16158
16159 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16160 hf_ieee80211_s1g_sector_id_index,
16161 ett_s1g_sector_id_index,
16162 s1g_sector_id_index_headers,
16163 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16164 offset += 2;
16165
16166 return offset - start;
16167}
16168
16169static int * const s1g_twt_information_control_headers[] = {
16170 &hf_ieee80211_s1g_twt_flow_identifier,
16171 &hf_ieee80211_s1g_twt_response_required,
16172 &hf_ieee80211_s1g_twt_next_twt_request,
16173 &hf_ieee80211_s1g_twt_next_twt_subfield_size,
16174 &hf_ieee80211_s1g_twt_reserved,
16175 NULL((void*)0)
16176};
16177
16178static int
16179add_ff_twt_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16180{
16181 int start = offset;
16182 uint8_t control = tvb_get_uint8(tvb, offset);
16183
16184 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16185 hf_ieee80211_s1g_twt_information_control,
16186 ett_s1g_twt_information_control,
16187 s1g_twt_information_control_headers,
16188 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16189 offset += 1;
16190
16191 if (control & 0x60) {
16192 int len_bits = ((control >> 5) & 0x03);
16193 int len = 0;
16194
16195 switch (len_bits) {
16196 case 0:
16197 len = 0; /* Should not happen! */
16198 break;
16199 case 1:
16200 len = 4;
16201 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_32, tvb, offset,
16202 len, ENC_LITTLE_ENDIAN0x80000000);
16203 break;
16204 case 2:
16205 len = 6;
16206 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_48, tvb, offset,
16207 len, ENC_LITTLE_ENDIAN0x80000000);
16208 break;
16209 case 3:
16210 len = 8;
16211 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_64, tvb, offset,
16212 len, ENC_LITTLE_ENDIAN0x80000000);
16213 break;
16214 }
16215
16216 offset += len;
16217 }
16218
16219 return offset - start;
16220}
16221
16222static unsigned
16223add_ff_s1g_twt_setup(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16224{
16225 const uint8_t ids[] = { TAG_TWT216 };
16226 unsigned start = offset;
16227
16228 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
16229
16230 return offset - start;
16231}
16232
16233static int * const ieee80211_twt_individual_flow[] = {
16234 &hf_ieee80211_twt_individual_flow_id,
16235 &hf_ieee80211_twt_individual_reserved,
16236 &hf_ieee80211_twt_neg_type,
16237 &hf_ieee80211_twt_bcast_teardown_all_twt,
16238 NULL((void*)0),
16239};
16240static int * const ieee80211_twt_bcast_flow[] = {
16241 &hf_ieee80211_twt_bcast_id,
16242 &hf_ieee80211_twt_neg_type,
16243 &hf_ieee80211_twt_bcast_teardown_all_twt,
16244 NULL((void*)0),
16245};
16246static int * const ieee80211_twt_neg_type2[] = {
16247 &hf_ieee80211_twt_neg_type2_reserved1,
16248 &hf_ieee80211_twt_neg_type,
16249 &hf_ieee80211_twt_neg_type2_reserved2,
16250 NULL((void*)0),
16251};
16252static int * const ieee80211_twt_teardown_all[] = {
16253 &hf_ieee80211_twt_bcast_twt_id_reserved,
16254 &hf_ieee80211_twt_bcast_neg_type_reserved,
16255 &hf_ieee80211_twt_bcast_teardown_all_twt,
16256 NULL((void*)0),
16257};
16258
16259static unsigned
16260add_ff_s1g_twt_teardown(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16261{
16262 uint8_t twt_flow_id = tvb_get_uint8(tvb, offset);
16263
16264 // Bit 7 is means Teardown All TWT, and the other fields are reserved
16265 if (twt_flow_id & 0x80) {
16266 proto_tree_add_bitmask(tree, tvb, offset,
16267 hf_ieee80211_twt_bcast_teardown_all,
16268 ett_twt_tear_down_tree,
16269 ieee80211_twt_teardown_all,
16270 ENC_NA0x00000000);
16271 return 1;
16272 }
16273
16274 // Bits 5 and 6 are the negotiation type - See ieee80211.ax/D3.0 9.6.25.9
16275 switch ((twt_flow_id & 0x60) >> 5) {
16276 case 2:
16277 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16278 hf_ieee80211_twt_bcast_flow,
16279 ett_twt_tear_down_tree, ieee80211_twt_neg_type2,
16280 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16281 break;
16282
16283 case 3:
16284 // According to 11ax, first 5 bits are the BCAST TWT flow ID
16285 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16286 hf_ieee80211_twt_bcast_flow,
16287 ett_twt_tear_down_tree, ieee80211_twt_bcast_flow,
16288 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16289 break;
16290 case 0:
16291 case 1:
16292 // According to 11ah / 11ax, first 3 bits are the UCAST TWT flow ID
16293 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16294 hf_ieee80211_twt_individual_flow,
16295 ett_twt_tear_down_tree, ieee80211_twt_individual_flow,
16296 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16297 break;
16298 default:
16299 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_twt_tear_down_bad_neg_type,
16300 tvb, offset, tvb_reported_length_remaining(tvb, offset));
16301 }
16302
16303 // The TWT Flow ID size
16304 return 1;
16305}
16306
16307static unsigned
16308add_ff_action_s1g(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16309{
16310 unsigned start = offset;
16311 uint8_t s1g_action;
16312
16313 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16314
16315 s1g_action = tvb_get_uint8(tvb, offset);
16316 offset += add_ff_s1g_action(tree, tvb, pinfo, offset);
16317
16318 switch(s1g_action) {
16319 case S1G_ACT_AID_SWITCH_REQUEST0:
16320 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16321 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16322 break;
16323 case S1G_ACT_AID_SWITCH_RESPONSE1:
16324 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16325 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16326 break;
16327 case S1G_ACT_SYNC_CONTROL2:
16328 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16329 offset += add_ff_sync_control(tree, tvb, pinfo, offset);
16330 break;
16331 case S1G_ACT_STA_INFO_ANNOUNCE3:
16332 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16333 break;
16334 case S1G_ACT_EDCA_PARAM_SET4:
16335 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16336 break;
16337 case S1G_ACT_EL_OPERATION5:
16338 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16339 break;
16340 case S1G_ACT_TWT_SETUP6:
16341 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16342 offset += add_ff_s1g_twt_setup(tree, tvb, pinfo, offset);
16343 break;
16344 case S1G_ACT_TWT_TEARDOWN7:
16345 offset += add_ff_s1g_twt_teardown(tree, tvb, pinfo, offset);
16346 break;
16347 case S1G_ACT_SECT_GROUP_ID_LIST8:
16348 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16349 break;
16350 case S1G_ACT_SECT_ID_FEEDBACK9:
16351 offset += add_ff_sector_id_index(tree, tvb, pinfo, offset);
16352 break;
16353 case S1G_ACT_TWT_INFORMATION11:
16354 offset += add_ff_twt_information(tree, tvb, pinfo, offset);
16355 break;
16356 default:
16357 break;
16358 }
16359
16360 return offset - start;
16361}
16362
16363static unsigned
16364add_ff_action_protected_s1g(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16365{
16366 unsigned start = offset;
16367 uint8_t s1g_action;
16368
16369 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16370
16371 s1g_action = tvb_get_uint8(tvb, offset);
16372 offset += add_ff_prot_s1g_action(tree, tvb, pinfo, offset);
16373
16374 switch(s1g_action) {
16375 case PROT_S1G_ACT_REACH_ADDR_UPDATE0:
16376 case PROT_S1G_ACT_RELAY_ACTIVATE_REQ1:
16377 case PROT_S1G_ACT_RELAY_ACTIVATE_RESP2:
16378 case PROT_S1G_ACT_HEADER_COMPRESSION3:
16379 // TODO
16380 break;
16381 case PROT_S1G_ACT_TWT_SETUP4:
16382 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16383 offset += add_ff_s1g_twt_setup(tree, tvb, pinfo, offset);
16384 break;
16385 case PROT_S1G_ACT_TWT_TEARDOWN5:
16386 offset += add_ff_s1g_twt_teardown(tree, tvb, pinfo, offset);
16387 break;
16388 case PROT_S1G_ACT_TWT_INFORMATION6:
16389 offset += add_ff_twt_information(tree, tvb, pinfo, offset);
16390 break;
16391 case PROT_S1G_ACT_AID_SWITCH_REQUEST7:
16392 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16393 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16394 break;
16395 case PROT_S1G_ACT_AID_SWITCH_RESPONSE8:
16396 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16397 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16398 break;
16399 case PROT_S1G_ACT_SYNC_CONTROL9:
16400 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16401 offset += add_ff_sync_control(tree, tvb, pinfo, offset);
16402 break;
16403 case PROT_S1G_ACT_STA_INFO_ANNOUNCE10:
16404 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16405 break;
16406 case PROT_S1G_ACT_EDCA_PARAM_SET11:
16407 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16408 break;
16409 case PROT_S1G_ACT_EL_OPERATION12:
16410 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16411 break;
16412 case PROT_S1G_ACT_SECT_GROUP_ID_LIST13:
16413 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16414 break;
16415 case PROT_S1G_ACT_SECT_ID_FEEDBACK14:
16416 offset += add_ff_sector_id_index(tree, tvb, pinfo, offset);
16417 break;
16418 default:
16419 break;
16420 }
16421
16422 return offset - start;
16423}
16424
16425#define HE_COMPRESSED_BEAMFORMING_AND_CQI0 0
16426#define HE_QUIET_TIME_PERIOD1 1
16427
16428static const range_string he_action_rvals[] = {
16429 { HE_COMPRESSED_BEAMFORMING_AND_CQI0, HE_COMPRESSED_BEAMFORMING_AND_CQI0,
16430 "HE Compressed Beamforming And CQI" },
16431 { HE_QUIET_TIME_PERIOD1, HE_QUIET_TIME_PERIOD1,
16432 "Quiet Time Period" },
16433 { HE_QUIET_TIME_PERIOD1 + 1, 255, "Reserved" },
16434 { 0, 0, NULL((void*)0) }
16435};
16436
16437#define HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0 0
16438
16439static const range_string protected_he_action_rvals[] = {
16440 { HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0, HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0,
16441 "HE BSS Color Change Announcement" },
16442 { HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0 + 1, 255, "Reserved" },
16443 { 0, 0, NULL((void*)0) }
16444};
16445
16446#define EHT_TID_LINK_MAP_REQ0 0
16447#define EHT_TID_LINK_MAP_RESP1 1
16448#define EHT_TID_LINK_MAP_TEAR_DOWN2 2
16449#define EHT_EPCS_PRIO_ACCESS_REQ3 3
16450#define EHT_EPCS_PRIO_ACCESS_RESP4 4
16451#define EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5 5
16452#define EHT_EML_OP_MODE_NOTIFICATION6 6
16453#define EHT_LINK_RECOMMENDATION7 7
16454#define EHT_MULTI_LINK_OP_UPDATE_REQ8 8
16455#define EHT_MULTI_LINK_OP_UPDATE_RESP9 9
16456#define EHT_LINK_RECONFIG_NOTIFY10 10
16457#define EHT_LINK_RECONFIG_REQ11 11
16458#define EHT_LINK_RECONFIG_RESP12 12
16459
16460static const range_string protected_eht_action_rvals[] = {
16461 { EHT_TID_LINK_MAP_REQ0, EHT_TID_LINK_MAP_REQ0,
16462 "EHT TID-to-Link Mapping Request" },
16463 { EHT_TID_LINK_MAP_RESP1, EHT_TID_LINK_MAP_RESP1,
16464 "EHT TID-to-Link Mapping Response" },
16465 { EHT_TID_LINK_MAP_TEAR_DOWN2, EHT_TID_LINK_MAP_TEAR_DOWN2,
16466 "EHT TID-to-Link Mapping Teardown" },
16467 { EHT_EPCS_PRIO_ACCESS_REQ3, EHT_EPCS_PRIO_ACCESS_REQ3,
16468 "EHT EPCS Priority Access Request" },
16469 { EHT_EPCS_PRIO_ACCESS_RESP4, EHT_EPCS_PRIO_ACCESS_RESP4,
16470 "EHT EPCS Priority Access Response" },
16471 { EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5, EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5,
16472 "EHT EPCS Priority Access Teardown" },
16473 { EHT_EML_OP_MODE_NOTIFICATION6, EHT_EML_OP_MODE_NOTIFICATION6,
16474 "EHT EML Operating Mode Notification" },
16475 { EHT_LINK_RECOMMENDATION7, EHT_LINK_RECOMMENDATION7,
16476 "EHT Link Recommendation" },
16477 { EHT_MULTI_LINK_OP_UPDATE_REQ8, EHT_MULTI_LINK_OP_UPDATE_REQ8,
16478 "EHT Multi-Link Operation Update Request" },
16479 { EHT_MULTI_LINK_OP_UPDATE_RESP9, EHT_MULTI_LINK_OP_UPDATE_RESP9,
16480 "EHT Multi-Link Operation Update Response" },
16481 { EHT_LINK_RECONFIG_NOTIFY10, EHT_LINK_RECONFIG_NOTIFY10,
16482 "EHT Link Reconfiguration Notify" },
16483 { EHT_LINK_RECONFIG_REQ11, EHT_LINK_RECONFIG_REQ11,
16484 "EHT Link Reconfiguration Request" },
16485 { EHT_LINK_RECONFIG_RESP12, EHT_LINK_RECONFIG_RESP12,
16486 "EHT Link Reconfiguration Response" },
16487 { EHT_LINK_RECONFIG_RESP12 + 1, 255, "Reserved" },
16488 { 0, 0, NULL((void*)0) }
16489};
16490
16491/*
16492 * This currently only works for SU, 20MHz, 40MHz and 80MHz and grouping 4 and 16.
16493 */
16494struct scidx_start_end {
16495 int start;
16496 int end;
16497};
16498
16499#define N_SCIDX_20MHZ_NG49 9
16500static const struct scidx_start_end scidx_20MHz_Ng4[N_SCIDX_20MHZ_NG49] = {
16501 { -122, -96 },
16502 { -96, -68 },
16503 { -68, -40 },
16504 { -44, -16 },
16505 { -16, 16 },
16506 { 16, 44 },
16507 { 40, 68 },
16508 { 68, 96 },
16509 { 96, 122 }
16510};
16511
16512#define N_SCIDX_20MHZ_NG169 9
16513static const struct scidx_start_end scidx_20MHz_Ng16[9] = {
16514 { -122, -84 },
16515 { -96, -64 },
16516 { -80, -32 },
16517 { -52, -4 },
16518 { -20, 20 },
16519 { 4, 52 },
16520 { 32, 80 },
16521 { 64, 96 },
16522 { 84, 122 }
16523};
16524
16525#define N_SCIDX_40MHZ_NG418 18
16526static const struct scidx_start_end scidx_40MHz_Ng4[N_SCIDX_40MHZ_NG418] = {
16527 { -500 + 256, -472 + 256 },
16528 { -476 + 256, -448 + 256 },
16529 { -488 + 256, -420 + 256 },
16530 { -420 + 256, -392 + 256 },
16531 { -392 + 256, -364 + 256 },
16532 { -368 + 256, -340 + 256 },
16533 { -340 + 256, -312 + 256 },
16534 { -312 + 256, -284 + 256 },
16535 { -288 + 256, -260 + 256 },
16536 { 260 - 256, 288 - 256 },
16537 { 284 - 256, 312 - 256 },
16538 { 312 - 256, 340 - 256 },
16539 { 340 - 256, 368 - 256 },
16540 { 364 - 256, 392 - 256 },
16541 { 392 - 256, 420 - 256 },
16542 { 420 - 256, 448 - 256 },
16543 { 448 - 256, 476 - 256 },
16544 { 472 - 256, 500 - 256 }
16545};
16546
16547#define N_SCIDX_40MHZ_NG1618 18
16548static const struct scidx_start_end scidx_40MHz_Ng16[N_SCIDX_40MHZ_NG1618] = {
16549 { -500 + 256, -468 + 256 },
16550 { -484 + 256, -436 + 256 },
16551 { -452 + 256, -420 + 256 },
16552 { -420 + 256, -388 + 256 },
16553 { -404 + 256, -356 + 256 },
16554 { -372 + 256, -340 + 256 },
16555 { -340 + 256, -308 + 256 },
16556 { -324 + 256, -276 + 256 },
16557 { -292 + 256, -260 + 245 },
16558 { 260 - 256, 292 - 256 },
16559 { 276 - 256, 324 - 256 },
16560 { 308 - 256, 340 - 256 },
16561 { 340 - 256, 322 - 256 },
16562 { 356 - 256, 404 - 256 },
16563 { 388 - 256, 420 - 256 },
16564 { 420 - 256, 452 - 256 },
16565 { 436 - 256, 484 - 256 },
16566 { 468 - 256, 500 - 256 }
16567};
16568
16569#define N_SCIDX_80MHZ_NG437 37
16570static const struct scidx_start_end scidx_80MHz_Ng4[N_SCIDX_80MHZ_NG437] = {
16571 { -500, -472 },
16572 { -476, -448 },
16573 { -448, -420 },
16574 { -420, -392 },
16575 { -392, -364 },
16576 { -368, -340 },
16577 { -340, -312 },
16578 { -312, -284 },
16579 { -288, -260 },
16580 { -260, -232 },
16581 { -232, -204 },
16582 { -204, -176 },
16583 { -180, -152 },
16584 { -152, -124 },
16585 { -124, -96 },
16586 { -100, -72 },
16587 { -72, -44 },
16588 { -44, -16 },
16589 { -16, 16 },
16590 { 16, 44 },
16591 { 44, 72 },
16592 { 72, 100 },
16593 { 96, 124 },
16594 { 124, 152 },
16595 { 152, 180 },
16596 { 176, 204 },
16597 { 204, 232 },
16598 { 232, 260 },
16599 { 260, 288 },
16600 { 284, 312 },
16601 { 312, 340 },
16602 { 340, 368 },
16603 { 364, 392 },
16604 { 392, 420 },
16605 { 420, 448 },
16606 { 448, 476 },
16607 { 472, 500 }
16608};
16609
16610#define N_SCIDX_80MHZ_NG1637 37
16611static const struct scidx_start_end scidx_80MHz_Ng16[N_SCIDX_80MHZ_NG1637] = {
16612 { -500, -468 },
16613 { -484, -436 },
16614 { -452, -420 },
16615 { -420, -388 },
16616 { -404, -356 },
16617 { -372, -340 },
16618 { -340, -308 },
16619 { -324, -276 },
16620 { -292, -260 },
16621 { -260, -228 },
16622 { -244, -196 },
16623 { -212, -164 },
16624 { -180, -148 },
16625 { -164, -116 },
16626 { -132, -84 },
16627 { -100, -68 },
16628 { -84, -36 },
16629 { -52, -4 },
16630 { -20, 20 },
16631 { 4, 52 },
16632 { 36, 84 },
16633 { 68, 100 },
16634 { 84, 132 },
16635 { 116, 164 },
16636 { 148, 180 },
16637 { 164, 212 },
16638 { 196, 244 },
16639 { 228, 260 },
16640 { 260, 292 },
16641 { 276, 324 },
16642 { 308, 340 },
16643 { 340, 372 },
16644 { 356, 404 },
16645 { 388, 420 },
16646 { 420, 452 },
16647 { 436, 484 },
16648 { 468, 500 },
16649};
16650
16651#define SU_FEEDBACK(0) (0)
16652#define MU_FEEDBACK(1) (1)
16653#define CQI_FEEDBACK(2) (2)
16654#define RESERVED_FEEDBACK(3) (3)
16655
16656#define BW_20MHz(0) (0)
16657#define BW_40MHz(1) (1)
16658#define BW_80MHz(2) (2)
16659#define BW_160MHz(3) (3)
16660
16661#define SCIDX_END_SENTINAL(0x80000000) (0x80000000)
16662
16663static int
16664next_he_scidx(int scidx, int bw _U___attribute__((unused)), int grouping _U___attribute__((unused)), int feedback _U___attribute__((unused)),
16665 int ru_start_index, int ru_end_index)
16666{
16667 int incr = 4;
16668
16669 /*
16670 * We need to check the correct bw value to determine if we have hit
16671 * the end of the range of SCIDXes.
16672 */
16673 switch (bw) {
16674 case BW_20MHz(0):
16675 if (grouping == 0) {
16676 if (ru_end_index >= N_SCIDX_20MHZ_NG49 ||
16677 scidx == scidx_20MHz_Ng4[ru_end_index].end) /* we returned the max */
16678 return SCIDX_END_SENTINAL(0x80000000);
16679 } else {
16680 if (ru_end_index >= N_SCIDX_20MHZ_NG169 ||
16681 scidx == scidx_20MHz_Ng16[ru_end_index].end)
16682 return SCIDX_END_SENTINAL(0x80000000);
16683 }
16684 break;
16685 case BW_40MHz(1):
16686 if (grouping == 0) {
16687 if (ru_end_index >= N_SCIDX_40MHZ_NG418 ||
16688 scidx == scidx_40MHz_Ng4[ru_end_index].end)
16689 return SCIDX_END_SENTINAL(0x80000000);
16690 } else {
16691 if (ru_end_index >= N_SCIDX_40MHZ_NG1618 ||
16692 scidx == scidx_40MHz_Ng16[ru_end_index].end)
16693 return SCIDX_END_SENTINAL(0x80000000);
16694 }
16695 break;
16696 case BW_80MHz(2):
16697 if (grouping == 0) {
16698 if (ru_end_index >= N_SCIDX_80MHZ_NG437 ||
16699 scidx == scidx_80MHz_Ng4[ru_end_index].end)
16700 return SCIDX_END_SENTINAL(0x80000000);
16701 } else {
16702 if (ru_end_index >= N_SCIDX_80MHZ_NG1637 ||
16703 scidx == scidx_80MHz_Ng16[ru_end_index].end)
16704 return SCIDX_END_SENTINAL(0x80000000);
16705 }
16706 break;
16707 case BW_160MHz(3):
16708 return SCIDX_END_SENTINAL(0x80000000);
16709 }
16710
16711 /*
16712 * Check if this is the first time though and figure out the starting
16713 * SCIDX.
16714 */
16715 if (scidx == (int)SCIDX_END_SENTINAL(0x80000000))
16716 switch (bw) {
16717 case BW_20MHz(0):
16718 if (grouping == 0) {
16719 if (ru_start_index >= N_SCIDX_20MHZ_NG49)
16720 return SCIDX_END_SENTINAL(0x80000000);
16721 else
16722 return scidx_20MHz_Ng4[ru_start_index].start;
16723 } else {
16724 if (ru_start_index >= N_SCIDX_20MHZ_NG169)
16725 return SCIDX_END_SENTINAL(0x80000000);
16726 else
16727 return scidx_20MHz_Ng16[ru_start_index].start;
16728 }
16729 case BW_40MHz(1):
16730 if (grouping == 0) {
16731 if (ru_start_index >= N_SCIDX_40MHZ_NG418)
16732 return SCIDX_END_SENTINAL(0x80000000);
16733 else
16734 return scidx_40MHz_Ng4[ru_start_index].start;
16735 } else {
16736 if (ru_start_index >= N_SCIDX_40MHZ_NG1618)
16737 return SCIDX_END_SENTINAL(0x80000000);
16738 else
16739 return scidx_40MHz_Ng16[ru_start_index].start;
16740 }
16741 case BW_80MHz(2):
16742 if (grouping == 0) {
16743 if (ru_start_index >= N_SCIDX_80MHZ_NG437)
16744 return SCIDX_END_SENTINAL(0x80000000);
16745 else
16746 return scidx_80MHz_Ng4[ru_start_index].start;
16747 } else {
16748 if (ru_start_index >= N_SCIDX_80MHZ_NG1637)
16749 return SCIDX_END_SENTINAL(0x80000000);
16750 else
16751 return scidx_80MHz_Ng16[ru_start_index].start;
16752 }
16753 case BW_160MHz(3):
16754 return SCIDX_END_SENTINAL(0x80000000);
16755 }
16756
16757 /*
16758 * for BW_20MHz it is more complex, and the start and end sets have an
16759 * increment of 2, and around zero they go -4, -2, 2, 4 as well.
16760 */
16761 if (bw == BW_20MHz(0)) {
16762 if (grouping == 0) {
16763 if (scidx == -122)
16764 return -120;
16765 if (scidx == -4)
16766 return -2;
16767 if (scidx == 2)
16768 return 4;
16769 if (scidx == 120)
16770 return 122;
16771 } else {
16772 if (scidx == -122)
16773 return -116;
16774 if (scidx == -4)
16775 return -2;
16776 if (scidx == -2)
16777 return 2;
16778 if (scidx == 2)
16779 return 4;
16780 if (scidx == 116)
16781 return 122;
16782 }
16783 }
16784
16785 if (grouping == 1)
16786 incr = 16;
16787
16788 scidx += incr;
16789
16790 if (scidx == 0) /* Not sure if this is needed */
16791 scidx += incr;
16792
16793 return scidx;
16794}
16795
16796/*
16797 * This might have a problem if there are not enough bits in the TVB.
16798 * Will only handle a limited number of bits.
16799 */
16800static uint16_t
16801he_get_bits(tvbuff_t *tvb, int bit_offset, int bit_len)
16802{
16803 uint32_t bits;
16804 int byte_offset = bit_offset / 8;
16805 int bit_start = bit_offset % 8;
16806 int bit_mask = (1 << bit_len) - 1; /* Select that many bits */
16807 int remaining_length = tvb_reported_length_remaining(tvb, byte_offset);
16808
16809 if (remaining_length >= 3)
16810 bits = tvb_get_letoh24(tvb, byte_offset);
16811 else if (remaining_length == 2)
16812 bits = tvb_get_letohs(tvb, byte_offset);
16813 else
16814 bits = tvb_get_uint8(tvb, byte_offset);
16815
16816 bits = bits >> bit_start;
16817
16818 return bits & bit_mask;
16819}
16820
16821static int
16822dissect_he_feedback_matrix(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
16823 int offset, int bit_offset, int scidx,
16824 int nr, int nc, int phi_bits, int psi_bits,
16825 int hf)
16826{
16827 int ri, ci;
16828 int start_bit_offset = bit_offset;
16829 int start_offset = offset;
16830 wmem_strbuf_t *angles = wmem_strbuf_new(pinfo->pool, NULL((void*)0));
16831
16832 if (nc == nr) /* If they are the same, reduce Nc by one */
16833 nc -= 1;
16834
16835 wmem_strbuf_append_printf(angles, "%d", scidx);
16836 /* Reset to the start bit offset */
16837 bit_offset = start_bit_offset;
16838
16839 for (ci = 1; ci <= nc; ci++) {
16840 for (ri = ci; ri < nr; ri++) {
16841 int angle = he_get_bits(tvb, bit_offset, phi_bits);
16842 wmem_strbuf_append_printf(angles, ", φ%d%d:%d", ri, ci, angle);
16843 bit_offset += phi_bits;
16844 }
16845 for (ri = ci + 1; ri <= nr; ri++) {
16846 int angle = he_get_bits(tvb, bit_offset, psi_bits);
16847 wmem_strbuf_append_printf(angles, ", ψ%d%d:%d", ri, ci, angle);
16848 bit_offset += psi_bits;
16849 }
16850 }
16851
16852 /* Update this */
16853 proto_tree_add_string(tree, hf, tvb, offset,
16854 ((start_bit_offset + 7) / 8) - start_offset,
16855 wmem_strbuf_get_str(angles));
16856
16857 return bit_offset;
16858}
16859
16860static int * const he_mimo_control_headers[] = {
16861 &hf_ieee80211_he_mimo_control_nc_index,
16862 &hf_ieee80211_he_mimo_control_nr_index,
16863 &hf_ieee80211_he_mimo_control_bw,
16864 &hf_ieee80211_he_mimo_control_grouping,
16865 &hf_ieee80211_he_mimo_control_codebook_info,
16866 &hf_ieee80211_he_mimo_control_feedback_type,
16867 &hf_ieee80211_he_mimo_control_remaining_feedback_segs,
16868 &hf_ieee80211_he_mimo_control_first_feedback_seg,
16869 &hf_ieee80211_he_mimo_control_ru_start_index,
16870 &hf_ieee80211_he_mimo_control_ru_end_index,
16871 &hf_ieee80211_he_mimo_control_sounding_dialog_token_num,
16872 &hf_ieee80211_he_mimo_control_reserved,
16873 NULL((void*)0)
16874};
16875
16876/*
16877 * Handle compressed beamforming matrices and CQI
16878 */
16879static unsigned
16880dissect_compressed_beamforming_and_cqi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16881{
16882 int byte_count = 0;
16883 uint64_t mimo_cntl = tvb_get_letoh40(tvb, offset);
16884 int nc = 0, nr = 0, i;
16885 int bw, grouping, codebook, feedback, bit_offset, scidx;
16886 int phi_bits = 0, psi_bits = 0;
16887 proto_tree *snr_tree = NULL((void*)0), *feedback_tree = NULL((void*)0);
16888 int start_offset;
16889 int ru_start_index, ru_end_index;
16890
16891 nc = (int)((mimo_cntl & 0x07) + 1);
16892 nr = (int)(((mimo_cntl >> 3) & 0x07) + 1);
16893 bw = (int)((mimo_cntl >> 6) & 0x03);
16894 grouping = (int)((mimo_cntl >> 8) & 0x01);
16895 codebook = (int)((mimo_cntl >> 9) & 0x01);
16896 feedback = (int)((mimo_cntl >> 10) & 0x03);
16897 ru_start_index = (int)((mimo_cntl >> 16) & 0x7F);
16898 ru_end_index = (int)((mimo_cntl >> 23) & 0x7F);
16899
16900 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16901 hf_ieee80211_he_mimo_control_field, ett_ff_he_mimo_control,
16902 he_mimo_control_headers, ENC_LITTLE_ENDIAN0x80000000,
16903 BMT_NO_APPEND0x01);
16904 offset += 5;
16905
16906 snr_tree = proto_tree_add_subtree(tree, tvb, offset, nc,
16907 ett_ff_he_mimo_beamforming_report_snr, NULL((void*)0),
16908 "Average Signal to Noise Ratio");
16909
16910 for (i = 0; i < nc; i++) {
16911 int8_t snr = tvb_get_int8(tvb, offset);
16912
16913 proto_tree_add_int_format(snr_tree,
16914 hf_ieee80211_he_compressed_beamforming_report_snr, tvb, offset, 1,
16915 snr, "Stream %d: %s%0.2fdB (0x%02x)", i, (snr == 127 ? ">=" :
16916 (snr == -128 ? "<=" : "")),
16917 (float)((float)88 + snr)/4,
16918 (uint8_t)snr);
16919 offset++;
16920 }
16921
16922 /*
16923 * The rest of the data consists of the compressed beamforming matrices, one
16924 * for each SCIDX per group. Each matrix consists of phi and psi angles
16925 * encoded using the number of bits specified using the codebook field.
16926 *
16927 * The matrices contain a number entries related to Nr -1 & Nc except when
16928 * Nr == Nc, and then it is Nr -1 x Nc -1, with Nr - 1 phi angles, Nc - 1
16929 * psi angles, Nr - 2 phi angles, Nc - 2 psi angles ...
16930 */
16931 if (feedback == 0) { /* SU */
16932 if (codebook == 0) {
16933 psi_bits = 2; phi_bits = 4;
16934 } else {
16935 psi_bits = 4; phi_bits = 6;
16936 }
16937 } else if (feedback == 1) { /* MU */
16938 if (grouping == 1) {
16939 psi_bits = 9; phi_bits = 7;
16940 } else {
16941 if (codebook == 0) {
16942 psi_bits = 5; phi_bits = 7;
16943 } else {
16944 psi_bits = 7; phi_bits = 9;
16945 }
16946 }
16947 } /* DO something about CQI etc. */
16948
16949 feedback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
16950 ett_ff_he_mimo_feedback_matrices, NULL((void*)0),
16951 "Feedback Matrices");
16952
16953 start_offset = offset;
16954 bit_offset = offset * 8;
16955 scidx = SCIDX_END_SENTINAL(0x80000000);
16956 while ((scidx = next_he_scidx(scidx, bw, grouping, feedback,
16957 ru_start_index, ru_end_index)) != (int)SCIDX_END_SENTINAL(0x80000000)) {
16958 int prev_bit_offset = bit_offset;
16959 bit_offset = dissect_he_feedback_matrix(feedback_tree, tvb, pinfo, offset,
16960 bit_offset, scidx, nr, nc, phi_bits, psi_bits,
16961 hf_ieee80211_he_compressed_beamform_scidx);
16962 if (bit_offset <= prev_bit_offset) {
16963 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
16964 break;
16965 }
16966
16967 offset = bit_offset / 8;
16968 }
16969
16970 offset = (bit_offset + 7) / 8;
16971 proto_item_set_len(feedback_tree, offset - start_offset);
16972
16973 /* Sometimes the FCS is in the buffer as well ... */
16974 byte_count = tvb_reported_length_remaining(tvb, offset);
16975 if (byte_count > 0)
16976 offset += byte_count; /* Should fix the real problem */
16977
16978 return offset;
16979}
16980
16981enum quiet_time_period_control {
16982 QTP_CONTROL_SETUP = 0,
16983 QTP_CONTROL_REQUEST = 1,
16984 QTP_CONTROL_RESPONSE = 2,
16985};
16986
16987static const range_string quiet_time_period_control_rvals[] = {
16988 { QTP_CONTROL_SETUP, QTP_CONTROL_SETUP, "Quiet Time Period Setup" },
16989 { QTP_CONTROL_REQUEST, QTP_CONTROL_REQUEST, "Quiet Time Period Request" },
16990 { QTP_CONTROL_RESPONSE, QTP_CONTROL_RESPONSE, "Quiet Time Period Response" },
16991 { QTP_CONTROL_RESPONSE +1 , 255, "Reserved" },
16992 { 0, 0, NULL((void*)0) }
16993};
16994
16995static void
16996dissect_bss_color_change(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
16997proto_tree *tree, int offset, int len _U___attribute__((unused)));
16998
16999static unsigned
17000dissect_quiet_time_period(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17001proto_tree *tree, int offset, int len _U___attribute__((unused)))
17002{
17003 uint8_t control = tvb_get_uint8(tvb, offset);
17004
17005 proto_tree_add_item(tree, hf_ieee80211_he_qtp_control, tvb, offset, 1, ENC_NA0x00000000);
17006 offset += 1;
17007
17008 switch (control)
17009 {
17010 case QTP_CONTROL_SETUP:
17011 proto_tree_add_item(tree, hf_ieee80211_he_qtp_setup_quiet_period_duration, tvb, offset,
17012 1, ENC_NA0x00000000);
17013 offset += 1;
17014 proto_tree_add_item(tree, hf_ieee80211_he_qtp_setup_srv_specific_identif, tvb, offset,
17015 2, ENC_LITTLE_ENDIAN0x80000000);
17016 offset += 2;
17017 break;
17018
17019 case QTP_CONTROL_REQUEST:
17020 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_dialog_token, tvb, offset, 2,
17021 ENC_LITTLE_ENDIAN0x80000000);
17022 offset += 2;
17023 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_offset, tvb, offset,
17024 1, ENC_NA0x00000000);
17025 offset += 1;
17026 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_duration, tvb, offset,
17027 2, ENC_LITTLE_ENDIAN0x80000000);
17028 offset += 2;
17029 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_interval, tvb, offset,
17030 1, ENC_NA0x00000000);
17031 offset += 1;
17032 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_repetition_count, tvb, offset, 1,
17033 ENC_NA0x00000000);
17034 offset += 1;
17035 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_srv_specific_identif, tvb, offset,
17036 2, ENC_LITTLE_ENDIAN0x80000000);
17037 offset += 2;
17038 break;
17039
17040 case QTP_CONTROL_RESPONSE:
17041 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_dialog_token, tvb, offset, 2,
17042 ENC_LITTLE_ENDIAN0x80000000);
17043 offset += 2;
17044 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_status_code, tvb, offset, 1,
17045 ENC_NA0x00000000);
17046 offset += 1;
17047 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_offset, tvb, offset,
17048 1, ENC_NA0x00000000);
17049 offset += 1;
17050 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_duration, tvb, offset,
17051 2, ENC_LITTLE_ENDIAN0x80000000);
17052 offset += 2;
17053 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_interval, tvb, offset,
17054 1, ENC_NA0x00000000);
17055 offset += 1;
17056 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_repetition_count, tvb, offset,
17057 1, ENC_NA0x00000000);
17058 offset += 1;
17059 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_srv_specific_identif, tvb, offset,
17060 2, ENC_LITTLE_ENDIAN0x80000000);
17061 offset += 2;
17062 break;
17063
17064 default:
17065 /* Reserved */
17066 break;
17067 }
17068
17069 return offset;
17070}
17071
17072static unsigned
17073add_ff_action_he(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17074{
17075 unsigned start = offset;
17076 uint8_t he_action;
17077 uint8_t length;
17078 //uint8_t elem_id, elem_id_extension;
17079 proto_item *item;
17080 proto_tree *subtree;
17081 unsigned int len = tvb_reported_length_remaining(tvb, offset);
17082
17083 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17084
17085 he_action = tvb_get_uint8(tvb, offset);
17086
17087 item = proto_tree_add_item(tree, hf_ieee80211_ff_he_action, tvb, offset, 1, ENC_NA0x00000000);
17088 offset += 1;
17089
17090 subtree = proto_item_add_subtree(item, ett_ff_he_action);
17091
17092
17093 switch (he_action) {
17094 case HE_COMPRESSED_BEAMFORMING_AND_CQI0:
17095 proto_tree_add_uint_format(subtree, hf_ieee80211_he_beamforming_report_len,
17096 tvb, offset, 0, len, "Total length: %u", len);
17097 offset = dissect_compressed_beamforming_and_cqi(subtree, tvb, pinfo, offset);
17098 break;
17099
17100 case HE_QUIET_TIME_PERIOD1:
17101 //elem_id = tvb_get_uint8(tvb, offset);
17102 length = tvb_get_uint8(tvb, offset + 1);
17103 //elem_id_extension = tvb_get_uint8(tvb, offset + 2);
17104 /* Should check following condition?
17105 * elem_id == TAG_ELEMENT_ID_EXTENSION && elem_id_extension == ETAG_QUIET_TIME_PERIOD
17106 */
17107 offset = dissect_quiet_time_period(tvb, pinfo, subtree, offset + 3, length);
17108 break;
17109
17110 default:
17111 break;
17112 }
17113 return offset - start;
17114}
17115
17116static unsigned
17117add_ff_action_protected_he(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17118{
17119 unsigned start = offset;
17120 uint8_t protected_he_action;
17121 uint8_t length;
17122 //uint8_t elem_id, elem_id_extension;
17123 proto_item *item;
17124 proto_tree *subtree;
17125
17126 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17127
17128 protected_he_action = tvb_get_uint8(tvb, offset);
17129
17130 item = proto_tree_add_item(tree, hf_ieee80211_ff_protected_he_action, tvb, offset,
17131 1, ENC_NA0x00000000);
17132 offset += 1;
17133
17134 subtree = proto_item_add_subtree(item, ett_ff_protected_he_action);
17135
17136
17137 switch (protected_he_action) {
17138 case HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0:
17139 //elem_id = tvb_get_uint8(tvb, offset);
17140 length = tvb_get_uint8(tvb, offset + 1);
17141 //elem_id_extension = tvb_get_uint8(tvb, offset + 2);
17142 /* Should check following condition?
17143 * elem_id == TAG_ELEMENT_ID_EXTENSION && elem_id_extension == ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT
17144 */
17145 dissect_bss_color_change(tvb, pinfo, subtree, offset + 3, length);
17146 offset += 5;
17147 break;
17148
17149 default:
17150 break;
17151 }
17152
17153 return offset - start;
17154}
17155
17156static unsigned
17157add_ff_action_protected_ftm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17158{
17159 unsigned start = offset;
17160 uint8_t action;
17161
17162 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17163 action = tvb_get_uint8(tvb, offset);
17164 proto_tree_add_item(tree, hf_ieee80211_ff_protected_ftm_action, tvb, offset, 1, ENC_NA0x00000000);
17165 offset += 1;
17166
17167 col_set_str(pinfo->cinfo, COL_INFO, val_to_str_const(action, protected_ftm_action_vals, "Unknown"));
17168
17169 switch (action) {
17170 case 1:
17171 offset += add_ff_ftm_request(tree, tvb, pinfo, offset);
17172 break;
17173 case 2:
17174 offset += add_ff_ftm(tree, tvb, pinfo, offset);
17175 break;
17176 case 3:
17177 offset += add_ff_lmr_report(tree, tvb, pinfo, offset);
17178 break;
17179 default: /* reserved */
17180 break;
17181 }
17182
17183 return offset - start;
17184}
17185
17186static int * const eht_reconfig_link_id_hdrs[] = {
17187 &hf_ieee80211_eht_reconfig_link_id,
17188 &hf_ieee80211_eht_reconfig_link_id_reserved,
17189 NULL((void*)0)
17190};
17191
17192static unsigned
17193add_ff_count(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
17194{
17195 proto_tree_add_item(tree, hf_ieee80211_ff_count, tvb, offset, 1,
17196 ENC_LITTLE_ENDIAN0x80000000);
17197 return 1;
17198}
17199
17200static unsigned
17201add_ff_action_protected_eht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17202{
17203 unsigned start = offset;
17204 uint8_t protected_eht_action;
17205 proto_item *item;
17206 int len = 0, count, i, id;
17207 uint16_t status;
17208 bool_Bool invalid = false0;
17209 /* Default Extension Element is Multi-Link */
17210 uint8_t ext_ids[1] = {ETAG_MULTI_LINK107};
17211 proto_tree *sub_tree;
17212
17213 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17214
17215 protected_eht_action = tvb_get_uint8(tvb, offset);
17216
17217 item = proto_tree_add_item(tree, hf_ieee80211_ff_protected_eht_action, tvb,
17218 offset, 1, ENC_NA0x00000000);
17219 offset += 1;
17220
17221 switch (protected_eht_action) {
17222 case EHT_TID_LINK_MAP_REQ0:
17223 ext_ids[0] = ETAG_TID_TO_LINK_MAPPING109;
17224 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17225
17226 /*
17227 * Next contains one or two TID-To-Link mappings. We have to look into
17228 * the elements to verify them because we don't have the length of this
17229 * element and there might be other IEs after us.
17230 */
17231 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17232 len = tvb_get_uint8(tvb, offset + 1);
17233 } else {
17234 invalid = true1;
17235 }
17236 if (!invalid && (len >= 1) &&
17237 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17238 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17239 offset += len + 2;
17240 } else {
17241 invalid = true1;
17242 }
17243 if (invalid) {
17244 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17245 "Invalid TID_TO_LINK_MAPPING_REQUEST. "
17246 "There should be one or two Tid-To-Link IEs "
17247 "but none found");
17248 break;
17249 }
17250
17251 len = 0;
17252 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17253 len = tvb_get_uint8(tvb, offset + 1);
17254 }
17255 if ((len >= 1) &&
17256 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17257 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17258 offset += len + 2;
17259 }
17260 break;
17261 case EHT_TID_LINK_MAP_RESP1:
17262 ext_ids[0] = ETAG_TID_TO_LINK_MAPPING109;
17263 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17264
17265 status = tvb_get_ntohs(tvb, offset);
17266 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17267 if (status == 134) {
17268 /* There should be one or two TID-To-Link mappings. */
17269 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17270 len = tvb_get_uint8(tvb, offset + 1);
17271 } else {
17272 invalid = true1;
17273 }
17274 if (!invalid && (len >= 1) &&
17275 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17276 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17277 offset += len + 2;
17278 } else {
17279 invalid = true1;
17280 }
17281 if (invalid) {
17282 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17283 "Invalid TID_TO_LINK_MAPPING_RESPONSE. "
17284 "There should be one or two Tid-To-Link IEs "
17285 "but none found");
17286 break;
17287 }
17288
17289 len = 0;
17290 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17291 len = tvb_get_uint8(tvb, offset + 1);
17292 }
17293 if ((len >= 1) &&
17294 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17295 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17296 offset += len + 2;
17297 }
17298 }
17299 break;
17300 case EHT_TID_LINK_MAP_TEAR_DOWN2:
17301 /* Seems to be nothing to do here */
17302 break;
17303 case EHT_EPCS_PRIO_ACCESS_REQ3:
17304 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17305 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17306 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17307 NULL((void*)0), 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0));
17308 }
17309 break;
17310 case EHT_EPCS_PRIO_ACCESS_RESP4:
17311 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17312 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17313 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17314 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17315 NULL((void*)0), 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0));
17316 }
17317 break;
17318 case EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5:
17319 break;
17320 case EHT_EML_OP_MODE_NOTIFICATION6:
17321 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17322 offset += dissect_eht_eml_control_field(tree, tvb, pinfo, offset);
17323 break;
17324 case EHT_LINK_RECOMMENDATION7:
17325 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
17326 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17327 len = tvb_get_uint8(tvb, offset + 1);
17328 } else {
17329 invalid = true1;
17330 }
17331 ext_ids[0] = ETAG_AID_BITMAP134;
17332 if (!invalid && (len >= 1) &&
17333 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17334 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17335 offset += len + 2;
17336 } else {
17337 invalid = true1;
17338 }
17339 if (invalid) {
17340 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17341 "Invalid LINK_RECOMMENDATION. "
17342 "There should be AID_BITMAP element "
17343 "but none found");
17344 break;
17345 }
17346
17347 invalid = false0;
17348 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17349 len = tvb_get_uint8(tvb, offset + 1);
17350 } else {
17351 invalid = true1;
17352 }
17353 ext_ids[0] = ETAG_MULTI_LINK_TRAFFIC110;
17354 if (!invalid && (len >= 1) &&
17355 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17356 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17357 offset += len + 2;
17358 } else {
17359 invalid = true1;
17360 }
17361 if (invalid) {
17362 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17363 "Invalid LINK_RECOMMENDATION. "
17364 "There should be MULTI_LINK_TRAFFIC element "
17365 "but none found");
17366 break;
17367 }
17368 break;
17369 case EHT_MULTI_LINK_OP_UPDATE_REQ8:
17370 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17371 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17372 len = tvb_get_uint8(tvb, offset + 1);
17373 } else {
17374 invalid = true1;
17375 }
17376 if (!invalid && (len >= 1)) {
17377 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17378 NULL((void*)0), 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0));
17379 } else {
17380 invalid = true1;
17381 }
17382 if (invalid) {
17383 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17384 "Invalid Multi-Link Operation Update Request. "
17385 "There should be Reconf Multi-Link element "
17386 "but none found");
17387 break;
17388 }
17389 break;
17390 case EHT_MULTI_LINK_OP_UPDATE_RESP9:
17391 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17392 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17393 break;
17394 case EHT_LINK_RECONFIG_NOTIFY10:
17395 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17396 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17397 len = tvb_get_uint8(tvb, offset + 1);
17398 } else {
17399 invalid = TRUE(!(0));
17400 }
17401 if (!invalid && (len >= 1)) {
17402 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17403 NULL((void*)0), 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0));
17404 } else {
17405 invalid = TRUE(!(0));
17406 }
17407 if (invalid) {
17408 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17409 "Invalid Link Reconfiguration Notify. "
17410 "There should be Reconf Multi-Link element "
17411 "but none found");
17412 break;
17413 }
17414 break;
17415 case EHT_LINK_RECONFIG_REQ11:
17416 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17417 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17418 len = tvb_get_uint8(tvb, offset + 1);
17419 } else {
17420 invalid = TRUE(!(0));
17421 }
17422 if (!invalid && (len >= 1)) {
17423 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17424 NULL((void*)0), 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0));
17425 } else {
17426 invalid = TRUE(!(0));
17427 }
17428 if (invalid) {
17429 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17430 "Invalid Link Reconfiguration Req. "
17431 "There should be Reconf Multi-Link element "
17432 "but none found");
17433 break;
17434 }
17435 ext_ids[0] = ETAG_OCI54;
17436 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17437 len = tvb_get_uint8(tvb, offset + 1);
17438 } else {
17439 /* OCI element field is optionally present */
17440 break;
17441 }
17442 if (!invalid && (len >= 1) &&
17443 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17444 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0)) > 0)) {
17445 offset += len + 2;
17446 } else {
17447 invalid = TRUE(!(0));
17448 }
17449 if (invalid) {
17450 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17451 "Invalid Link Reconfiguration Req. "
17452 "There should be OCI element but none found");
17453 break;
17454 }
17455 break;
17456 case EHT_LINK_RECONFIG_RESP12:
17457 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17458 count = tvb_get_uint8(tvb, offset);
17459 offset += add_ff_count(tree, tvb, pinfo, offset);
17460 if (count == 0)
17461 break;
17462
17463 sub_tree = proto_tree_add_subtree(tree, tvb, offset, count * 3,
17464 ett_eht_reconfig_status_list, NULL((void*)0),
17465 "Reconfiguration Status List");
17466 for (i = 0; i < count; i++) {
17467 proto_tree_add_bitmask(sub_tree, tvb, offset,
17468 hf_ieee80211_eht_reconfig_link_id_info,
17469 ett_eht_multi_link_common_info_link_id,
17470 eht_reconfig_link_id_hdrs, ENC_NA0x00000000);
17471 offset += 1;
17472 proto_tree_add_item(sub_tree, hf_ieee80211_eht_reconfig_status_code, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17473 offset += 2;
17474 }
17475
17476 if (tvb_captured_length_remaining(tvb, offset) <= 0)
17477 break;
17478
17479 /* Check next is Group Key Data */
17480 id = tvb_get_uint8(tvb, offset);
17481 if (id != 0xdd && id != 0xff) {
17482 sub_tree = proto_tree_add_subtree(tree, tvb, offset, id,
17483 ett_eht_group_key_data, NULL((void*)0),
17484 "Group Key Data");
17485 proto_tree_add_item(sub_tree, hf_ieee80211_eht_group_key_data_length, tvb, offset, 1, ENC_NA0x00000000);
17486 offset += 1;
17487 while (tvb_reported_length_remaining(tvb, offset)) {
17488 id = tvb_get_uint8(tvb, offset);
17489 /* Key Data should be MLO KDEs */
17490 if (id != 0xdd)
17491 break;
17492 offset += add_tagged_field(pinfo, sub_tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
17493 }
17494 }
17495 break;
17496 default:
17497 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17498 "Reserved Protected EHT Action %u",
17499 protected_eht_action);
17500
17501 break;
17502 }
17503
17504 return offset - start;
17505}
17506
17507/*
17508 * Structure for handling the EHT scidx info. Allows for a compact
17509 * representation.
17510 */
17511struct scidx_part {
17512 unsigned start_val; /* What we start at */
17513 bool_Bool use_ng; /* Should we use Ng or the inc next */
17514 unsigned inc; /* The increment when not using Ng */
17515 unsigned stop_val; /* When we should stop */
17516 bool_Bool last_ent; /* This is the last one in the list */
17517};
17518
17519struct scidx_ctx {
17520 uint8_t ru_index;
17521 const struct scidx_part *scidx_array;
17522 uint8_t ng;
17523 bool_Bool just_inited;
17524 unsigned last_val;
17525};
17526
17527static const struct scidx_part ru_242_tone_1_20MHz_ng4[] = {
17528 { -122, false0, 2, -120, false0 },
17529 { -120, true1, 0, -4, false0 },
17530 { -2, false0, 4, 2, false0 },
17531 { 4, true1, 0, 120, false0 },
17532 { 120, false0, 2, 122, true1 }
17533};
17534
17535static const struct scidx_part ru_242_tone_1_20MHz_ng16[] = {
17536 { -122, false0, 6, -116, false0 },
17537 { -116, true1, 0, -4, false0 },
17538 { -2, false0, 4, 2, false0 },
17539 { 4, true1, 0, 116, false0 },
17540 { 116, false0, 6, 122, true1 }
17541};
17542
17543/* Here, there is one per RU index */
17544/*Start, UseNg, Inc,End, last */
17545static const struct scidx_part ru_242_tone_40MHz[] = {
17546 { -244, true1, 0, -4, true1 },
17547 { 4, true1, 0, 244, true1 }
17548};
17549
17550static const struct scidx_part ru_242_tone_80MHz[] = {
17551 { -500, true1, 0, -260, true1 },
17552 { -252, true1, 0, -12, true1 },
17553 { 12, true1, 0, 252, true1 },
17554 { 260, true1, 0, 500, true1 }
17555};
17556
17557static const struct scidx_part ru_242_tone_160MHz[] = {
17558 { -1012, true1, 0, -772, true1 },
17559 { -764, true1, 0, -524, true1 },
17560 { -500, true1, 0, -260, true1 },
17561 { -252, true1, 0, -12, true1 },
17562 { 12, true1, 0, 252, true1 },
17563 { 260, true1, 0, 500, true1 },
17564 { 524, true1, 0, 764, true1 },
17565 { 772, true1, 0, 1012, true1 }
17566};
17567
17568static const struct scidx_part ru_242_tone_320MHz[] = {
17569 { -2036, true1, 0, -1796, true1 },
17570 { -1788, true1, 0, -1548, true1 },
17571 { -1524, true1, 0, -1284, true1 },
17572 { -1276, true1, 0, -1036, true1 },
17573 { -1012, true1, 0, -772, true1 },
17574 { -764, true1, 0, -524, true1 },
17575 { -500, true1, 0, -260, true1 },
17576 { -252, true1, 0, -12, true1 },
17577 { 12, true1, 0, 252, true1 },
17578 { 260, true1, 0, 500, true1 },
17579 { 524, true1, 0, 764, true1 },
17580 { 772, true1, 0, 1012, true1 },
17581 { 1036, true1, 0, 1276, true1 },
17582 { 1284, true1, 0, 1524, true1 },
17583 { 1548, true1, 0, 1788, true1 },
17584 { 1796, true1, 0, 2036, true1 }
17585};
17586
17587/* All these ru_96 tone sets for NG=4 go in pairs. */
17588static const struct scidx_part ru_996_tone_80MHz_ng4[] = {
17589 { -500, false0, 4, -4, false0 },
17590 { 4, false0, 4, 500, true1 }
17591};
17592
17593static const struct scidx_part ru_996_tone_80MHz_ng16[] = {
17594 { -500, true1, 0, -260, false0 },
17595 { -252, true1, 0, -12, false0 },
17596 { -4, false0, 8, 4, false0 },
17597 { 12, true1, 0, 252, false0 },
17598 { 260, true1, 0, 500, true1 }
17599};
17600
17601static const struct scidx_part ru_996_tone_160MHz_ng4[] = {
17602 { -1012, true1, 0, -516, false0 },
17603 { -508, true1, 0, -12, true1 },
17604
17605 { 12, true1, 0, 508, false0 },
17606 { 516, true1, 0, 1012, true1 }
17607};
17608
17609static const struct scidx_part ru_996_tone_160MHz_ng16[] = {
17610 { -1012, true1, 0, -772, false0 },
17611 { -764, true1, 0, -524, false0 },
17612 { -516, false0, 8, -508, false0 },
17613 { -500, true1, 0, -260, false0 },
17614 { -252, true1, 0, -12 , true1 },
17615
17616 { 12, true1, 0, 252, false0 },
17617 { 260, true1, 0, 500, false0 },
17618 { 508, false0, 8, 516, false0 },
17619 { 524, true1, 0, 764, false0 },
17620 { 772, true1, 0, 1012, true1 }
17621};
17622
17623static const struct scidx_part ru_996_tone_320MHz_ng4[] = {
17624 { -2036, true1, 0, -1540, false0 },
17625 { -1532, true1, 0, -1036, true1 },
17626
17627 { -1012, true1, 0, -516, false0 },
17628 { -508, true1, 0, -12, true1 },
17629
17630 { 12, true1, 0, 508, false0 },
17631 { 516, true1, 0, 1012, true1 },
17632
17633 { 1036, true1, 0, 1532, false0 },
17634 { 1540, true1, 0, 2036, true1 }
17635};
17636
17637static const struct scidx_part ru_996_tone_320MHz_ng16[] = {
17638 { -2036, true1, 0, -1796, false0 },
17639 { -1788, true1, 0, -1548, false0 },
17640 { -1540, false0, 8, -1532, false0 },
17641 { -1524, true1, 0, -1284, false0 },
17642 { -1276, true1, 0, -1036, true1 },
17643
17644 { -1012, true1, 0, -772, false0 },
17645 { -764, true1, 0, -524, false0 },
17646 { -516, false0, 8, -508, false0 },
17647 { -500, true1, 0, -260, false0 },
17648 { -252, true1, 0, -12, true1 },
17649
17650 { 12, true1, 0, 252, false0 },
17651 { 260, true1, 0, 500, false0 },
17652 { 508, false0, 8, 516, false0 },
17653 { 524, true1, 0, 764, false0 },
17654 { 772, true1, 0, 1012, true1 },
17655
17656 { 1036, true1, 0, 1276, false0 },
17657 { 1284, true1, 0, 1524, false0 },
17658 { 1532, false0, 8, 1540, false0 },
17659 { 1548, true1, 0, 1788, false0 },
17660 { 1796, true1, 0, 2036, true1 }
17661};
17662
17663
17664static void
17665init_eht_scidx(struct scidx_ctx *ctx, uint8_t ru_index,
17666 const struct scidx_part *scidx_array, uint8_t ng)
17667{
17668 ctx->ru_index = ru_index;
17669 ctx->scidx_array = scidx_array;
17670 ctx->ng = ng;
17671 ctx->just_inited = true1;
17672}
17673
17674/* What about the special 20MHz ones? */
17675/* Figure out the next SCIDX */
17676static bool_Bool
17677next_eht_scidx(struct scidx_ctx *ctx, unsigned *scidx)
17678{
17679 if (ctx->just_inited) {
17680 ctx->last_val = ctx->scidx_array->start_val;
17681 ctx->just_inited = false0;
17682 *scidx = ctx->last_val;
17683 return true1;
17684 }
17685
17686 /* Move to the next val ... but check if it is a short seg first */
17687 if (ctx->last_val == ctx->scidx_array->stop_val) {
17688 if (ctx->scidx_array->last_ent) {
17689 return false0;
17690 } else {
17691 /* Pretend like we just started again */
17692 /* Also, note that the arrays need to be set up correctly */
17693 ctx->scidx_array++;
17694 if (ctx->last_val == ctx->scidx_array->start_val) {
17695 if (ctx->scidx_array->use_ng) {
17696 ctx->last_val += ctx->ng;
17697 } else {
17698 ctx->last_val += ctx->scidx_array->inc;
17699 }
17700 } else {
17701 ctx->last_val = ctx->scidx_array->start_val;
17702 }
17703 *scidx = ctx->last_val;
17704 return true1;
17705 }
17706 }
17707
17708 /*
17709 * If the increment is not ng, then handle that.
17710 */
17711 if (ctx->scidx_array->use_ng) {
17712 ctx->last_val += ctx->ng;
17713 } else {
17714 ctx->last_val += ctx->scidx_array->inc;
17715 }
17716 *scidx = ctx->last_val;
17717
17718 return true1;
17719}
17720
17721static int
17722add_ff_eht_mu_exclusive_20MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17723 int offset, uint8_t nc_index,
17724 uint8_t grouping, uint16_t partial_bw_info _U___attribute__((unused)))
17725{
17726 int start_offset = offset;
17727 unsigned scidx;
17728 struct scidx_ctx scidx_ctx;
17729 uint8_t ng = grouping == 0 ? 4 : 16;
17730 proto_tree *ru_index_tree = NULL((void*)0);
17731 proto_item *ruii = NULL((void*)0);
17732 unsigned ss = 0, get_snr = 1;
17733 int8_t snr = 0, value;
17734
17735 if (ng == 4) {
17736 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng4[0], ng);
17737 } else {
17738 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng16[0], ng);
17739 }
17740
17741 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17742 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17743 &ruii,
17744 "RU Index %d for 20MHz, Partial BW "
17745 "not all one.", 1);
17746 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17747 for (ss = 1; ss <= nc_index; ss++) {
17748 if (get_snr) {
17749 snr = tvb_get_int8(tvb, offset);
17750 offset += 1;
17751 value = snr & 0x0f;
17752 get_snr = 0;
17753 } else {
17754 value = snr >> 4;
17755 get_snr = 1;
17756 }
17757 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17758 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17759 ss, scidx, value);
17760 }
17761 }
17762 proto_item_set_len(ruii, offset - start_offset);
17763 return offset - start_offset;
17764}
17765
17766static int
17767add_ff_eht_mu_exclusive_40MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17768 int offset, uint8_t nc_index,
17769 uint8_t grouping, uint16_t partial_bw_info)
17770{
17771 int start_offset = offset;
17772 int i = 0;
17773 struct scidx_ctx scidx_ctx;
17774 unsigned scidx;
17775 uint8_t ng = grouping == 0 ? 4 : 16;
17776 proto_tree *ru_index_tree = NULL((void*)0);
17777 proto_item *ruii = NULL((void*)0);
17778 unsigned ss = 0, get_snr = 1;
17779 int8_t snr = 0, value;
17780
17781 /* Add each of the RU index groups set */
17782 for (i = 1; i <= 2; i++) {
17783 int tree_offset = offset;
17784 if ((partial_bw_info & (1 << i)) == 0x0) {
17785 continue; /* Only dissect those with the bit set */
17786 }
17787
17788 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_40MHz[i - 1], ng);
17789 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17790 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17791 &ruii,
17792 "RU Index %d for 40MHz, Partial BW "
17793 "not all one.", i);
17794 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17795 for (ss = 1; ss <= nc_index; ss++) {
17796 if (get_snr) {
17797 snr = tvb_get_int8(tvb, offset);
17798 offset += 1;
17799 value = snr & 0x0f;
17800 get_snr = 0;
17801 } else {
17802 value = snr >> 4;
17803 get_snr = 1;
17804 }
17805 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17806 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17807 ss, scidx, value);
17808 }
17809 }
17810 proto_item_set_len(ruii, offset - tree_offset);
17811 }
17812
17813 return offset - start_offset;
17814}
17815
17816static int
17817add_ff_eht_mu_exclusive_80MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17818 int offset, uint8_t nc_index,
17819 uint8_t grouping, uint16_t partial_bw_info)
17820{
17821 int start_offset = offset;
17822 int i = 0;
17823 struct scidx_ctx scidx_ctx;
17824 unsigned scidx;
17825 uint8_t ng = grouping == 0 ? 4 : 16;
17826 proto_tree *ru_index_tree = NULL((void*)0);
17827 proto_item *ruii = NULL((void*)0);
17828 unsigned ss = 0, get_snr = 1;
17829 int8_t snr = 0, value;
17830
17831 if (partial_bw_info == 0x1E) { /* Uses 996-tone RU indices */
17832 if (ng == 4) {
17833 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng4[0], ng);
17834 } else {
17835 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng16[0], ng);
17836 }
17837 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17838 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17839 &ruii,
17840 "996-tone RU Index %d for 80MHz", 1);
17841 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17842 for (ss = 1; ss <= nc_index; ss++) {
17843 if (get_snr) {
17844 snr = tvb_get_int8(tvb, offset);
17845 offset += 1;
17846 value = snr & 0x0f;
17847 get_snr = 0;
17848 } else {
17849 value = snr >> 4;
17850 get_snr = 1;
17851 }
17852 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17853 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17854 ss, scidx, value);
17855 }
17856 }
17857 proto_item_set_len(ruii, offset - start_offset);
17858
17859 return offset - start_offset;
17860 }
17861
17862 /* Add each of the RU index groups */
17863 for (i = 1; i <= 4; i++) {
17864 int tree_offset = offset;
17865 if ((partial_bw_info & (1 << i)) == 0x0) {
17866 continue; /* Only dissect those with the bit set */
17867 }
17868
17869 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_80MHz[i - 1], ng);
17870 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17871 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17872 &ruii,
17873 "RU Index %d for 80MHz, Partial BW "
17874 "not all one.", i);
17875 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17876 for (ss = 1; ss <= nc_index; ss++) {
17877 if (get_snr) {
17878 snr = tvb_get_int8(tvb, offset);
17879 offset += 1;
17880 value = snr & 0x0f;
17881 get_snr = 0;
17882 } else {
17883 value = snr >> 4;
17884 get_snr = 1;
17885 }
17886 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17887 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17888 ss, scidx, value);
17889 }
17890 }
17891 proto_item_set_len(ruii, offset - tree_offset);
17892 }
17893
17894 return offset - start_offset;
17895}
17896
17897static int
17898add_ff_eht_mu_exclusive_160MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17899 int offset, uint8_t nc_index,
17900 uint8_t grouping, uint16_t partial_bw_info)
17901{
17902 int start_offset = offset;
17903 int tree_offset;
17904 int i = 0;
17905 struct scidx_ctx scidx_ctx;
17906 unsigned scidx;
17907 uint8_t ng = grouping == 0 ? 4 : 16;
17908 proto_tree *ru_index_tree = NULL((void*)0);
17909 proto_item *ruii = NULL((void*)0);
17910 unsigned ss = 0, get_snr = 1;
17911 int8_t snr = 0, value;
17912
17913 /* Is the first lot a 996-tone RU? */
17914 if ((partial_bw_info & 0x1E) == 0x1E) { /* Uses 996-tone RU indices */
17915 tree_offset = offset;
17916 if (ng == 4) {
17917 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[0], ng);
17918 } else {
17919 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[0], ng);
17920 }
17921 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17922 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17923 &ruii,
17924 "996-tone RU Index %d for 160MHz", 1);
17925 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17926 for (ss = 1; ss <= nc_index; ss++) {
17927 if (get_snr) {
17928 snr = tvb_get_int8(tvb, offset);
17929 offset += 1;
17930 value = snr & 0x0f;
17931 get_snr = 0;
17932 } else {
17933 value = snr >> 4;
17934 get_snr = 1;
17935 }
17936 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17937 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17938 ss, scidx, value);
17939 }
17940 }
17941 proto_item_set_len(ruii, offset - tree_offset);
17942 } else {
17943 /* Add each of the RU index groups for the lower 80MHz */
17944 for (i = 1; i <= 4; i++) {
17945 if ((partial_bw_info & (1 << i)) == 0x0) {
17946 continue; /* Only dissect those with the bit set */
17947 }
17948
17949 tree_offset = offset;
17950 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
17951 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17952 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17953 &ruii,
17954 "RU Index %d for 160MHz, Partial BW "
17955 "not all one, lower 80MHz.", i);
17956 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17957 for (ss = 1; ss <= nc_index; ss++) {
17958 if (get_snr) {
17959 snr = tvb_get_int8(tvb, offset);
17960 offset += 1;
17961 value = snr & 0x0f;
17962 get_snr = 0;
17963 } else {
17964 value = snr >> 4;
17965 get_snr = 1;
17966 }
17967 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17968 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17969 ss, scidx, value);
17970 }
17971 }
17972 proto_item_set_len(ruii, offset - tree_offset);
17973 }
17974 }
17975
17976 /* Is the second lot a 996-tone RU? */
17977 get_snr = 1;
17978 if ((partial_bw_info & 0x1E0) == 0x1E0) { /* Uses 996-tone RU indices */
17979 tree_offset = offset;
17980 if (ng == 4) {
17981 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[2], ng);
17982 } else {
17983 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[5], ng);
17984 }
17985 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17986 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17987 &ruii,
17988 "996-tone RU Index %d for 160MHz", 2);
17989 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17990 for (ss = 1; ss <= nc_index; ss++) {
17991 if (get_snr) {
17992 snr = tvb_get_int8(tvb, offset);
17993 offset += 1;
17994 value = snr & 0x0f;
17995 get_snr = 0;
17996 } else {
17997 value = snr >> 4;
17998 get_snr = 1;
17999 }
18000 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18001 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18002 ss, scidx, value);
18003 }
18004 }
18005 proto_item_set_len(ruii, offset - tree_offset);
18006 } else {
18007 /* Add each of the RU index groups for the lower 80MHz */
18008 for (i = 5; i <= 8; i++) {
18009 if ((partial_bw_info & (1 << i)) == 0x0) {
18010 continue; /* Only dissect those with the bit set */
18011 }
18012
18013 tree_offset = offset;
18014 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18015 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18016 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18017 &ruii,
18018 "RU Index %d for 160MHz, Partial BW "
18019 "not all one, upper 80MHz.", i);
18020 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18021 for (ss = 1; ss <= nc_index; ss++) {
18022 if (get_snr) {
18023 snr = tvb_get_int8(tvb, offset);
18024 offset += 1;
18025 value = snr & 0x0f;
18026 get_snr = 0;
18027 } else {
18028 value = snr >> 4;
18029 get_snr = 1;
18030 }
18031 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18032 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18033 ss, scidx, value);
18034 }
18035 }
18036 proto_item_set_len(ruii, offset - tree_offset);
18037 }
18038 }
18039
18040 return offset - start_offset;
18041}
18042
18043static int
18044add_ff_eht_mu_exclusive_320MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
18045 int offset, uint8_t nc_index,
18046 uint8_t grouping, uint16_t partial_bw_info)
18047{
18048 int start_offset = offset;
18049 int tree_offset = offset;
18050 int i = 0, j = 0, k = 0;
18051 struct scidx_ctx scidx_ctx;
18052 unsigned scidx;
18053 uint8_t ng = grouping == 0 ? 4 : 16;
18054 proto_tree *ru_index_tree = NULL((void*)0);
18055 proto_item *ruii = NULL((void*)0);
18056 unsigned ss = 0, get_snr = 1;
18057 int8_t snr = 0, value;
18058
18059 for ( i = 0; i < 4; i++) {
18060 if (((partial_bw_info >> (2*i+1)) & 0x03) == 0x03) { /* Uses 996-tone RU indices */
18061 if (ng == 4) {
18062 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng4[i * 2], ng);
18063 } else {
18064 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng16[i * 5], ng);
18065 }
18066 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18067 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18068 &ruii,
18069 "996-tone RU Index %d for 320MHz",
18070 i+1);
18071 tree_offset = offset;
18072 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18073 for (ss = 1; ss <= nc_index; ss++) {
18074 if (get_snr) {
18075 snr = tvb_get_int8(tvb, offset);
18076 offset += 1;
18077 value = snr & 0x0f;
18078 get_snr = 0;
18079 } else {
18080 value = snr >> 4;
18081 get_snr = 1;
18082 }
18083 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18084 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18085 ss, scidx, value);
18086 }
18087 }
18088 proto_item_set_len(ruii, offset - tree_offset);
18089 } else {
18090 for (j = 2*i; j <= 2*i+1; j++) {
18091 if ((partial_bw_info & (1 << (j+1))) == 0x0) {
18092 continue; /* Only dissect those with the bit set */
18093 }
18094 /* Each 484-tone RU contains two 242-tone RUs */
18095 for (k = 2*j;k <= 2*j+1;k++) {
18096 init_eht_scidx(&scidx_ctx, k+1, &ru_242_tone_320MHz[k], ng);
18097 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18098 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18099 &ruii,
18100 "RU Index %d for 320MHz, Partial BW "
18101 "not all one.", k+1);
18102 tree_offset = offset;
18103 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18104 for (ss = 1; ss <= nc_index; ss++) {
18105 if (get_snr) {
18106 snr = tvb_get_int8(tvb, offset);
18107 offset += 1;
18108 value = snr & 0x0f;
18109 get_snr = 0;
18110 } else {
18111 value = snr >> 4;
18112 get_snr = 1;
18113 }
18114 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18115 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18116 ss, scidx, value);
18117 }
18118 }
18119 proto_item_set_len(ruii, offset - tree_offset);
18120 }
18121 }
18122 }
18123 }
18124
18125 return offset - start_offset;
18126}
18127
18128static unsigned
18129add_ff_eht_mu_exclusive_beamforming_rpt(proto_tree *tree, tvbuff_t *tvb,
18130 packet_info *pinfo, int offset,
18131 uint64_t mimo_control)
18132{
18133 uint8_t nc_index = mimo_control & 0x0F;
18134 uint8_t bw = (mimo_control >> 8) & 0x07;
18135 uint8_t grouping = (mimo_control >> 11) & 0x01;
18136 uint16_t partial_bw_info = (mimo_control >> 21) & 0x01FF;
18137 proto_tree *exclusive_tree = NULL((void*)0);
18138 proto_item *fti = NULL((void*)0);
18139 unsigned start_offset = offset;
18140 unsigned tree_len = 0, byte_count = 0;
18141
18142 exclusive_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
18143 ett_ff_eht_mimo_mu_exclusive_report, &fti,
18144 "EHT MU Exclusive Beamforming Report");
18145
18146 switch (bw) {
18147 case 0: /* 20 MHz */
18148 tree_len = add_ff_eht_mu_exclusive_20MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18149 nc_index, grouping, partial_bw_info);
18150 proto_item_set_len(fti, tree_len);
18151 offset += tree_len;
18152 break;
18153 case 1: /* 40 MHz */
18154 tree_len = add_ff_eht_mu_exclusive_40MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18155 nc_index, grouping, partial_bw_info);
18156 proto_item_set_len(fti, tree_len);
18157 offset += tree_len;
18158 break;
18159 case 2: /* 80 MHz */
18160 tree_len = add_ff_eht_mu_exclusive_80MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18161 nc_index, grouping, partial_bw_info);
18162 proto_item_set_len(fti, tree_len);
18163 offset += tree_len;
18164 break;
18165 case 3: /* 160 MHz */
18166 tree_len = add_ff_eht_mu_exclusive_160MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18167 nc_index, grouping, partial_bw_info);
18168 proto_item_set_len(fti, tree_len);
18169 offset += tree_len;
18170 break;
18171 case 4: /* 320 MHz */
18172 tree_len = add_ff_eht_mu_exclusive_320MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18173 nc_index, grouping, partial_bw_info);
18174 proto_item_set_len(fti, tree_len);
18175 offset += tree_len;
18176 break;
18177 default:
18178 /* Add EI about invalid BW setting */
18179 break;
18180 }
18181
18182 byte_count = tvb_reported_length_remaining(tvb, offset);
18183 if (byte_count > 0)
18184 offset += byte_count; /* Should fix the real problem. */
18185
18186 return offset - start_offset;
18187}
18188
18189static int
18190add_ff_eht_su_20MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18191 int offset, uint8_t nc_index, uint8_t nr_index,
18192 uint8_t grouping, uint16_t partial_bw_info _U___attribute__((unused)),
18193 uint8_t phi_bits, uint8_t psi_bits)
18194{
18195 int start_offset = offset;
18196 unsigned scidx;
18197 struct scidx_ctx scidx_ctx;
18198 uint8_t ng = grouping == 0 ? 4 : 16;
18199 unsigned bit_offset = offset * 8;
18200 proto_tree *ru_index_tree = NULL((void*)0);
18201 proto_item *ruii = NULL((void*)0);
18202
18203 if (ng == 4) {
18204 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng4[0], ng);
18205 } else {
18206 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng16[0], ng);
18207 }
18208
18209 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18210 ett_eht_beamforming_rpt_ru_index,
18211 &ruii,
18212 "RU Index %d for 20MHz, Partial BW "
18213 "not all one.", 1);
18214 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18215 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18216 bit_offset, scidx, nr_index + 1,
18217 nc_index + 1, phi_bits, psi_bits,
18218 hf_ieee80211_eht_compressed_beamform_scidx);
18219 offset = bit_offset / 8;
18220 }
18221 proto_item_set_len(ruii, offset - start_offset);
18222
18223 return offset - start_offset;
18224}
18225
18226static int
18227add_ff_eht_su_40MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18228 int offset, uint8_t nc_index, uint8_t nr_index,
18229 uint8_t grouping, uint16_t partial_bw_info,
18230 uint8_t phi_bits, uint8_t psi_bits)
18231{
18232 int start_offset = offset;
18233 int i = 0;
18234 struct scidx_ctx scidx_ctx;
18235 unsigned scidx;
18236 uint8_t ng = grouping == 0 ? 4 : 16;
18237 unsigned bit_offset = offset * 8;
18238 proto_tree *ru_index_tree = NULL((void*)0);
18239 proto_item *ruii = NULL((void*)0);
18240
18241 /* Add each of the RU index groups set */
18242 for (i = 1; i <= 2; i++) {
18243 int tree_offset = offset;
18244 if ((partial_bw_info & (1 << i)) == 0x0) {
18245 continue; /* Only dissect those with the bit set */
18246 }
18247
18248 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_40MHz[i - 1], ng);
18249 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18250 ett_eht_beamforming_rpt_ru_index,
18251 &ruii,
18252 "RU Index %d for 40MHz, Partial BW "
18253 "not all one.", i);
18254 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18255 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18256 bit_offset, scidx, nr_index + 1,
18257 nc_index + 1, phi_bits, psi_bits,
18258 hf_ieee80211_eht_compressed_beamform_scidx);
18259 offset = bit_offset / 8;
18260 }
18261 proto_item_set_len(ruii, offset - tree_offset);
18262 }
18263
18264 return offset - start_offset;
18265}
18266
18267static int
18268add_ff_eht_su_80MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18269 int offset, uint8_t nc_index, uint8_t nr_index,
18270 uint8_t grouping, uint16_t partial_bw_info,
18271 uint8_t phi_bits, uint8_t psi_bits)
18272{
18273 int start_offset = offset;
18274 int i = 0;
18275 struct scidx_ctx scidx_ctx;
18276 unsigned scidx;
18277 uint8_t ng = grouping == 0 ? 4 : 16;
18278 unsigned bit_offset = offset * 8;
18279 proto_tree *ru_index_tree = NULL((void*)0);
18280 proto_item *ruii = NULL((void*)0);
18281
18282 if (partial_bw_info == 0x1E) { /* Uses 996-tone RU indices */
18283 if (ng == 4) {
18284 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng4[0], ng);
18285 } else {
18286 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng16[0], ng);
18287 }
18288 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18289 ett_eht_beamforming_rpt_ru_index,
18290 &ruii,
18291 "996-tone RU Index %d for 80MHz", 1);
18292 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18293 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18294 bit_offset, scidx, nr_index + 1,
18295 nc_index + 1, phi_bits, psi_bits,
18296 hf_ieee80211_eht_compressed_beamform_scidx);
18297 offset = bit_offset / 8;
18298 }
18299 proto_item_set_len(ruii, offset - start_offset);
18300
18301 return offset - start_offset;
18302 }
18303
18304 /* Add each of the RU index groups */
18305 for (i = 1; i <= 4; i++) {
18306 int tree_offset = offset;
18307 if ((partial_bw_info & (1 << i)) == 0x0) {
18308 continue; /* Only dissect those with the bit set */
18309 }
18310
18311 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_80MHz[i - 1], ng);
18312 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18313 ett_eht_beamforming_rpt_ru_index,
18314 &ruii,
18315 "RU Index %d for 80MHz, Partial BW "
18316 "not all one.", i);
18317 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18318 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18319 bit_offset, scidx, nr_index + 1,
18320 nc_index + 1, phi_bits, psi_bits,
18321 hf_ieee80211_eht_compressed_beamform_scidx);
18322 offset = bit_offset / 8;
18323 }
18324 proto_item_set_len(ruii, offset - tree_offset);
18325 }
18326
18327 return offset - start_offset;
18328}
18329
18330static int
18331add_ff_eht_su_160MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18332 int offset, uint8_t nc_index, uint8_t nr_index,
18333 uint8_t grouping, uint16_t partial_bw_info,
18334 uint8_t phi_bits, uint8_t psi_bits)
18335{
18336 int start_offset = offset;
18337 int tree_offset;
18338 int i = 0;
18339 struct scidx_ctx scidx_ctx;
18340 unsigned scidx;
18341 uint8_t ng = grouping == 0 ? 4 : 16;
18342 unsigned bit_offset = offset * 8;
18343 proto_tree *ru_index_tree = NULL((void*)0);
18344 proto_item *ruii = NULL((void*)0);
18345
18346 /* Is the first lot a 996-tone RU? */
18347 if ((partial_bw_info & 0x1E) == 0x1E) { /* Uses 996-tone RU indices */
18348 tree_offset = offset;
18349 if (ng == 4) {
18350 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[0], ng);
18351 } else {
18352 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[0], ng);
18353 }
18354 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18355 ett_eht_beamforming_rpt_ru_index,
18356 &ruii,
18357 "996-tone RU Index %d for 160MHz", 1);
18358 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18359 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18360 bit_offset, scidx, nr_index + 1,
18361 nc_index + 1, phi_bits, psi_bits,
18362 hf_ieee80211_eht_compressed_beamform_scidx);
18363 offset = bit_offset / 8;
18364 }
18365 proto_item_set_len(ruii, offset - tree_offset);
18366 } else {
18367 /* Add each of the RU index groups for the lower 80MHz */
18368 for (i = 1; i <= 4; i++) {
18369 if ((partial_bw_info & (1 << i)) == 0x0) {
18370 continue; /* Only dissect those with the bit set */
18371 }
18372
18373 tree_offset = offset;
18374 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18375 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18376 ett_eht_beamforming_rpt_ru_index,
18377 &ruii,
18378 "RU Index %d for 160MHz, Partial BW "
18379 "not all one, lower 80MHz.", i);
18380 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18381 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18382 offset, bit_offset, scidx,
18383 nr_index + 1, nc_index + 1,
18384 phi_bits, psi_bits,
18385 hf_ieee80211_eht_compressed_beamform_scidx);
18386 offset = bit_offset / 8;
18387 }
18388 proto_item_set_len(ruii, offset - tree_offset);
18389 }
18390 }
18391
18392 /* Is the second lot a 996-tone RU? */
18393 if ((partial_bw_info & 0x1E0) == 0x1E0) { /* Uses 996-tone RU indices */
18394 tree_offset = offset;
18395 if (ng == 4) {
18396 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[2], ng);
18397 } else {
18398 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[5], ng);
18399 }
18400 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18401 ett_eht_beamforming_rpt_ru_index,
18402 &ruii,
18403 "996-tone RU Index %d for 160MHz", 2);
18404 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18405 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18406 bit_offset, scidx, nr_index + 1,
18407 nc_index + 1, phi_bits, psi_bits,
18408 hf_ieee80211_eht_compressed_beamform_scidx);
18409 offset = bit_offset / 8;
18410 }
18411 proto_item_set_len(ruii, offset - tree_offset);
18412 } else {
18413 /* Add each of the RU index groups for the lower 80MHz */
18414 for (i = 5; i <= 8; i++) {
18415 if ((partial_bw_info & (1 << i)) == 0x0) {
18416 continue; /* Only dissect those with the bit set */
18417 }
18418
18419 tree_offset = offset;
18420 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18421 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18422 ett_eht_beamforming_rpt_ru_index,
18423 &ruii,
18424 "RU Index %d for 160MHz, Partial BW "
18425 "not all one, upper 80MHz.", i);
18426 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18427 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18428 offset, bit_offset, scidx,
18429 nr_index + 1, nc_index + 1,
18430 phi_bits, psi_bits,
18431 hf_ieee80211_eht_compressed_beamform_scidx);
18432 offset = bit_offset / 8;
18433 }
18434 proto_item_set_len(ruii, offset - tree_offset);
18435 }
18436 }
18437
18438 return offset - start_offset;
18439}
18440
18441static int
18442add_ff_eht_su_320MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18443 int offset, uint8_t nc_index, uint8_t nr_index,
18444 uint8_t grouping, uint16_t partial_bw_info,
18445 uint8_t phi_bits, uint8_t psi_bits)
18446{
18447 int start_offset = offset;
18448 int tree_offset = offset;
18449 int i = 0, j = 0, k = 0;
18450 struct scidx_ctx scidx_ctx;
18451 unsigned scidx;
18452 uint8_t ng = grouping == 0 ? 4 : 16;
18453 unsigned bit_offset = offset * 8;
18454 proto_tree *ru_index_tree = NULL((void*)0);
18455 proto_item *ruii = NULL((void*)0);
18456
18457 /* Resolution is 40 MHz */
18458 for (i = 0; i < 4; i++) {
18459 if (((partial_bw_info >> (2*i+1)) & 0x03) == 0x03) { /* Uses 996-tone RU indices */
18460 if (ng == 4) {
18461 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng4[i * 2], ng);
18462 } else {
18463 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng16[i * 5], ng);
18464 }
18465 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18466 ett_eht_beamforming_rpt_ru_index,
18467 &ruii,
18468 "996-tone RU Index %d for 320MHz",
18469 i+1);
18470 tree_offset = offset;
18471 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18472 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18473 offset, bit_offset, scidx,
18474 nr_index + 1, nc_index + 1,
18475 phi_bits, psi_bits,
18476 hf_ieee80211_eht_compressed_beamform_scidx);
18477 offset = bit_offset / 8;
18478 }
18479 proto_item_set_len(ruii, offset - tree_offset);
18480 } else {
18481 for (j = 2*i; j <= 2*i+1; j++) {
18482 if ((partial_bw_info & (1 << (j+1))) == 0x0) {
18483 continue; /* Only dissect those with the bit set */
18484 }
18485 /* Each 484-tone RU contains two 242-tone RUs */
18486 for (k = 2*j;k <= 2*j+1;k++) {
18487 init_eht_scidx(&scidx_ctx, k+1, &ru_242_tone_320MHz[k], ng);
18488 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18489 ett_eht_beamforming_rpt_ru_index,
18490 &ruii,
18491 "RU Index %d for 320MHz, Partial BW "
18492 "not all one.", k+1);
18493 tree_offset = offset;
18494 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18495 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18496 bit_offset, scidx, nr_index + 1,
18497 nc_index + 1, phi_bits, psi_bits,
18498 hf_ieee80211_eht_compressed_beamform_scidx);
18499 offset = bit_offset / 8;
18500 }
18501 proto_item_set_len(ruii, offset - tree_offset);
18502 }
18503 }
18504 }
18505 }
18506
18507 return offset - start_offset;
18508}
18509
18510static unsigned
18511add_ff_eht_su_beamforming_rpt(proto_tree *tree, tvbuff_t *tvb,
18512 packet_info *pinfo, int offset,
18513 uint64_t mimo_control)
18514{
18515 uint8_t nc_index = mimo_control & 0x0F;
18516 uint8_t nr_index = (mimo_control >> 4) & 0x0F;
18517 uint8_t bw = (mimo_control >> 8) & 0x07;
18518 uint8_t grouping = (mimo_control >> 11) & 0x01;
18519 uint16_t partial_bw_info = (mimo_control >> 21) & 0x01FF;
18520 uint8_t codebook_info = (mimo_control >> 36) & 0x01;
18521 proto_tree *snr_tree = NULL((void*)0), *feedback_tree = NULL((void*)0);
18522 proto_item *fti = NULL((void*)0);
18523 uint8_t i = 0, phi_bits, psi_bits;
18524 unsigned start_offset = offset;
18525 unsigned tree_len = 0, byte_count = 0;
18526
18527 snr_tree = proto_tree_add_subtree(tree, tvb, offset, nc_index + 1,
18528 ett_ff_eht_mimo_beamforming_report_snr, NULL((void*)0),
18529 "Average Signal to Noise Ratio");
18530
18531 for (i = 0; i < nc_index + 1; i++) {
18532 int8_t snr = tvb_get_int8(tvb, offset);
18533
18534 proto_tree_add_int_format(snr_tree,
18535 hf_ieee80211_eht_compressed_beamforming_report_snr, tvb, offset, 1,
18536 snr, "Stream %d: %s%0.2fdB (0x%02x)", i,
18537 (snr == 127 ? ">=" : (snr == -128 ? "<=" : "")),
18538 (float)((float)88 + snr)/4, (uint8_t)snr);
18539 offset++;
18540 }
18541
18542 if (codebook_info == 0) {
18543 phi_bits = 4;
18544 psi_bits = 2;
18545 } else {
18546 phi_bits = 6;
18547 psi_bits = 4;
18548 }
18549
18550 feedback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
18551 ett_eht_beamforming_feedback_tree,
18552 &fti, "Feedback Matrices");
18553 switch (bw) {
18554 case 0: /* 20 MHz */
18555 tree_len = add_ff_eht_su_20MHz_rpt(feedback_tree, tvb, pinfo, offset,
18556 nc_index, nr_index, grouping,
18557 partial_bw_info, phi_bits, psi_bits);
18558 proto_item_set_len(fti, tree_len);
18559 offset += tree_len;
18560 break;
18561 case 1: /* 40 MHz */
18562 tree_len = add_ff_eht_su_40MHz_rpt(feedback_tree, tvb, pinfo, offset,
18563 nc_index, nr_index, grouping,
18564 partial_bw_info, phi_bits, psi_bits);
18565 proto_item_set_len(fti, tree_len);
18566 offset += tree_len;
18567 break;
18568 case 2: /* 80 MHz */
18569 tree_len = add_ff_eht_su_80MHz_rpt(feedback_tree, tvb, pinfo, offset,
18570 nc_index, nr_index, grouping,
18571 partial_bw_info, phi_bits, psi_bits);
18572 proto_item_set_len(fti, tree_len);
18573 offset += tree_len;
18574 break;
18575 case 3: /* 160 MHz */
18576 tree_len = add_ff_eht_su_160MHz_rpt(feedback_tree, tvb, pinfo, offset,
18577 nc_index, nr_index, grouping,
18578 partial_bw_info, phi_bits, psi_bits);
18579 proto_item_set_len(fti, tree_len);
18580 offset += tree_len;
18581 break;
18582 case 4: /* 320 MHz */
18583 tree_len = add_ff_eht_su_320MHz_rpt(feedback_tree, tvb, pinfo, offset,
18584 nc_index, nr_index, grouping,
18585 partial_bw_info, phi_bits, psi_bits);
18586 proto_item_set_len(fti, tree_len);
18587 offset += tree_len;
18588 break;
18589 default:
18590 /* Add EI about invalid BW setting */
18591 break;
18592 }
18593
18594 byte_count = tvb_reported_length_remaining(tvb, offset);
18595 if (byte_count > 0)
18596 offset += byte_count; /* Should fix the real problem. */
18597
18598 return offset - start_offset;
18599}
18600
18601static const val64_string eht_mimo_bw_vals[] = {
18602 { 0, "20 MHz" },
18603 { 1, "40 MHz" },
18604 { 2, "80 MHz" },
18605 { 3, "160 MHz" },
18606 { 4, "320 MHz" },
18607 { 5, "Reserved" },
18608 { 6, "Reserved" },
18609 { 7, "Reserved" },
18610 { 0, NULL((void*)0) }
18611};
18612
18613static const val64_string eht_mimo_grouping_vals[] = {
18614 { 0, "Ng = 4" },
18615 { 1, "Ng = 16" },
18616 { 0, NULL((void*)0) }
18617};
18618
18619static const val64_string eht_feedback_type_vals[] = {
18620 { 0, "SU" },
18621 { 1, "MU" },
18622 { 2, "CQI" },
18623 { 3, "Reserved" },
18624 { 0, NULL((void*)0) }
18625};
18626
18627static int * const eht_mimo_ctrl_hdrs[] = {
18628 &hf_ieee80211_eht_mimo_ctrl_nc_index,
18629 &hf_ieee80211_eht_mimo_ctrl_nr_index,
18630 &hf_ieee80211_eht_mimo_ctrl_bw,
18631 &hf_ieee80211_eht_mimo_ctrl_grouping,
18632 &hf_ieee80211_eht_mimo_ctrl_feedback_type,
18633 &hf_ieee80211_eht_mimo_ctrl_reserved1,
18634 &hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments,
18635 &hf_ieee80211_eht_mimo_ctrl_first_feedback_segment,
18636 &hf_ieee80211_eht_mimo_ctrl_partial_bw_info,
18637 &hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number,
18638 &hf_ieee80211_eht_mimo_ctrl_codebook_info,
18639 &hf_ieee80211_eht_mimo_ctrl_reserved2,
18640 NULL((void*)0)
18641};
18642
18643static unsigned
18644add_ff_eht_mimo_control_etc(proto_tree *tree _U___attribute__((unused)), tvbuff_t *tvb _U___attribute__((unused)),
18645 packet_info *pinfo _U___attribute__((unused)),
18646 int offset _U___attribute__((unused)))
18647{
18648 unsigned start = offset;
18649 uint64_t mimo_control = tvb_get_uint40(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
18650 uint8_t feedback_type = (mimo_control >> 12) & 0x03;
18651 uint8_t nc_index = mimo_control & 0x0F;
18652 uint8_t nr_index = (mimo_control >> 4) & 0x0F;
18653 proto_item *mci = NULL((void*)0);
18654
18655 mci = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
18656 hf_ieee80211_eht_mimo_ctrl_field,
18657 ett_eht_mimo_ctrl, eht_mimo_ctrl_hdrs,
18658 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
18659
18660 /*
18661 * Validate nc_index and nr_index and go no further if they exceed the
18662 * limits.
18663 *
18664 * 802.11be D3.0
18665 */
18666 if (nc_index > 7) {
18667 expert_add_info_format(pinfo, mci, &ei_ieee80211_eht_invalid_nc_nr,
18668 "Nc indices (%d) > 7 are reserved", nc_index);
18669 return offset;
18670 }
18671 if (nr_index == 0 || nr_index > 7) {
18672 expert_add_info_format(pinfo, mci, &ei_ieee80211_eht_invalid_nc_nr,
18673 "Nr indices (%d) 0 and > 7 are reserved", nr_index);
18674 return offset;
18675 }
18676 offset += 5;
18677
18678 switch (feedback_type) {
18679 case SU_FEEDBACK(0):
18680 offset += add_ff_eht_su_beamforming_rpt(tree, tvb, pinfo, offset,
18681 mimo_control);
18682 break;
18683 case MU_FEEDBACK(1):
18684 offset += add_ff_eht_su_beamforming_rpt(tree, tvb, pinfo, offset,
18685 mimo_control);
18686 offset += add_ff_eht_mu_exclusive_beamforming_rpt(tree, tvb, pinfo, offset,
18687 mimo_control);
18688 break;
18689 case CQI_FEEDBACK(2):
18690 /* TODO */
18691 break;
18692 default:
18693 break;
18694 }
18695
18696 return offset - start;
18697}
18698
18699static const range_string eht_action_rvals[] = {
18700 { 0, 0, "EHT Compressed Beamforming/CQI" },
18701 { 1, 255, "Reserved" },
18702 { 0, 0, NULL((void*)0) }
18703};
18704
18705static unsigned
18706add_ff_action_eht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18707 int offset)
18708{
18709 unsigned start = offset;
18710 uint8_t eht_action;
18711 proto_item *item = NULL((void*)0);
18712
18713 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18714
18715 eht_action = tvb_get_uint8(tvb, offset);
18716
18717 item = proto_tree_add_item(tree, hf_ieee80211_ff_eht_action, tvb, offset, 1,
18718 ENC_NA0x00000000);
18719 offset += 1;
18720
18721 switch (eht_action) {
18722 case 0:
18723 offset += add_ff_eht_mimo_control_etc(tree, tvb, pinfo, offset);
18724 break;
18725 default:
18726 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
18727 "Reserved EHT Action %u", eht_action);
18728 }
18729
18730 return offset - start;
18731}
18732
18733static unsigned
18734add_ff_action_fst(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
18735{
18736 uint8_t code;
18737 unsigned start = offset;
18738
18739 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18740 code = tvb_get_uint8(tvb, offset);
18741 offset += add_ff_fst_action_code(tree, tvb, pinfo, offset);
18742 switch (code) {
18743 case FST_SETUP_REQUEST0:
18744 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18745 offset += add_ff_llt(tree, tvb, pinfo, offset);
18746 break;
18747 case FST_SETUP_RESPONSE1:
18748 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18749 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18750 break;
18751 case FST_TEAR_DOWN2:
18752 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18753 break;
18754 case FST_ACK_REQUEST3:
18755 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18756 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18757 break;
18758 case FST_ACK_RESPONSE4:
18759 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18760 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18761 break;
18762 case FST_ON_CHANNEL_TUNNEL_REQUEST5:
18763 offset += add_ff_oct_mmpdu(tree, tvb, pinfo, offset);
18764 break;
18765 }
18766 return offset - start;
18767}
18768
18769static int
18770add_ff_scs_descriptor_list(proto_tree *tree, tvbuff_t *tvb,
18771 packet_info *pinfo _U___attribute__((unused)), int offset)
18772{
18773 unsigned start = offset;
18774
18775 /*
18776 * This is could be a list, so it needs change.
18777 */
18778 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
18779 return offset - start;
18780}
18781
18782static int
18783add_ff_scs_response_count(proto_tree *tree, tvbuff_t *tvb,
18784 packet_info *pinfo _U___attribute__((unused)), int offset)
18785{
18786 proto_tree_add_item(tree, hf_ieee80211_ff_scs_response_count, tvb, offset, 1,
18787 ENC_NA0x00000000);
18788
18789 return 1;
18790}
18791
18792static int
18793add_ff_scs_status_list(proto_tree *tree, tvbuff_t *tvb,
18794 packet_info *pinfo _U___attribute__((unused)), int offset, uint8_t count)
18795{
18796 unsigned start = offset;
18797
18798 while (count > 0) {
18799 if (tvb_reported_length_remaining(tvb, offset) >= 3) {
18800 proto_tree_add_item(tree, hf_ieee80211_ff_scs_scsid, tvb, offset, 1,
18801 ENC_NA0x00000000);
18802 offset += 1;
18803
18804 proto_tree_add_item(tree, hf_ieee80211_ff_scs_status, tvb, offset, 2,
18805 ENC_LITTLE_ENDIAN0x80000000);
18806 offset += 2;
18807 }
18808 count--;
18809 }
18810
18811 return offset - start;
18812}
18813
18814static int
18815add_ff_mscs_descriptor_elt(proto_tree *tree, tvbuff_t *tvb,
18816 packet_info *pinfo _U___attribute__((unused)), int offset)
18817{
18818 unsigned start = offset;
18819
18820 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
18821 return offset - start;
18822}
18823
18824static unsigned
18825add_ff_action_robust_av_streaming(proto_tree *tree, tvbuff_t *tvb,
18826 packet_info *pinfo, int offset)
18827{
18828 uint8_t code, count;
18829 unsigned start = offset;
18830
18831 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18832 code = tvb_get_uint8(tvb, offset);
18833 offset += add_ff_robust_av_streaming_action_code(tree, tvb, pinfo, offset);
18834
18835 switch (code) {
18836 case ROBUST_AV_STREAMING_SCS_REQUEST0:
18837 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18838 offset += add_ff_scs_descriptor_list(tree, tvb, pinfo, offset);
18839 break;
18840 case ROBUST_AV_STREAMING_SCS_RESPONSE1:
18841 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18842 count = tvb_get_uint8(tvb, offset);
18843 offset += add_ff_scs_response_count(tree, tvb, pinfo, offset);
18844 offset += add_ff_scs_status_list(tree, tvb, pinfo, offset, count);
18845 break;
18846 case ROBUST_AV_STREAMING_MSCS_REQUEST4:
18847 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18848 offset += add_ff_mscs_descriptor_elt(tree, tvb, pinfo, offset);
18849 break;
18850 case ROBUST_AV_STREAMING_MSCS_RESPONSE5:
18851 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18852 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18853 /* If there is any more data it is probably an mscs descriptor */
18854 if (tvb_reported_length_remaining(tvb, offset) > 0)
18855 offset += add_ff_mscs_descriptor_elt(tree, tvb, pinfo, offset);
18856 break;
18857 }
18858 return offset - start;
18859}
18860
18861static unsigned
18862add_ff_action_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
18863{
18864 uint8_t code;
18865 unsigned start = offset;
18866 int left_offset;
18867
18868 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18869 code = tvb_get_uint8(tvb, offset);
18870 offset += add_ff_dmg_action_code(tree, tvb, pinfo, offset);
18871 switch (code) {
18872 case DMG_ACTION_PWR_SAVE_CONFIG_REQ0:
18873 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18874 offset += add_ff_dmg_pwr_mgmt(tree, tvb, pinfo, offset);
18875 break;
18876 case DMG_ACTION_PWR_SAVE_CONFIG_RES1:
18877 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18878 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18879 break;
18880 case DMG_ACTION_INFO_REQ2:
18881 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
18882 break;
18883 case DMG_ACTION_INFO_RES3:
18884 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
18885 break;
18886 case DMG_ACTION_HANDOVER_REQ4:
18887 offset += add_ff_handover_reason(tree, tvb, pinfo, offset);
18888 offset += add_ff_handover_remaining_bi(tree, tvb, pinfo, offset);
18889 break;
18890 case DMG_ACTION_HANDOVER_RES5:
18891 offset += add_ff_handover_result(tree, tvb, pinfo, offset);
18892 offset += add_ff_handover_reject_reason(tree, tvb, pinfo, offset);
18893 break;
18894 case DMG_ACTION_DTP_REQ6:
18895 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18896 break;
18897 case DMG_ACTION_DTP_RES7:
18898 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18899 break;
18900 case DMG_ACTION_RELAY_SEARCH_REQ8:
18901 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18902 offset += add_ff_destination_reds_aid(tree, tvb, pinfo, offset);
18903 break;
18904 case DMG_ACTION_RELAY_SEARCH_RES9:
18905 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18906 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18907 break;
18908 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10:
18909 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18910 break;
18911 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11:
18912 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18913 left_offset =
18914 tvb_reported_length_remaining(tvb, offset);
18915 while(left_offset > 0) {
18916 proto_tree_add_item(tree, hf_ieee80211_ff_peer_sta_aid, tvb, offset, 1, ENC_NA0x00000000);
18917 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset+1, 1, ENC_NA0x00000000);
18918 proto_tree_add_item(tree, hf_ieee80211_ff_internal_angle, tvb, offset+2, 1, ENC_NA0x00000000);
18919 proto_tree_add_item(tree, hf_ieee80211_ff_recommend, tvb, offset+2, 1, ENC_NA0x00000000);
18920 /* another reserved byte */
18921 offset += 4;
18922 left_offset -= 4;
18923 }
18924 break;
18925 case DMG_ACTION_RLS_REQ12:
18926 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18927 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
18928 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
18929 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
18930 break;
18931 case DMG_ACTION_RLS_RES13:
18932 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18933 break;
18934 case DMG_ACTION_RLS_ANNOUNCE14:
18935 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18936 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18937 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
18938 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
18939 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
18940 break;
18941 case DMG_ACTION_RLS_TEARDOWN15:
18942 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
18943 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
18944 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
18945 break;
18946 case DMG_ACTION_RELAY_ACK_REQ16:
18947 case DMG_ACTION_RELAY_ACK_RES17:
18948 break;
18949 case DMG_ACTION_TPA_REQ18:
18950 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18951 offset += add_ff_timing_offset(tree, tvb, pinfo, offset);
18952 offset += add_ff_sampling_frequency_offset(tree, tvb, pinfo, offset);
18953 break;
18954 case DMG_ACTION_TPA_RES19:
18955 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18956 break;
18957 case DMG_ACTION_TPA_REP20:
18958 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18959 break;
18960 case DMG_ACTION_ROC_REQ21:
18961 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18962 offset += add_ff_relay_operation_type(tree, tvb, pinfo, offset);
18963 break;
18964 case DMG_ACTION_ROC_RES22:
18965 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18966 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18967 break;
18968 }
18969 return offset - start;
18970}
18971
18972unsigned
18973add_ff_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
18974 association_sanity_check_t *association_sanity_check)
18975{
18976 switch (tvb_get_uint8(tvb, offset) & 0x7f) {
18977 case CAT_SPECTRUM_MGMT0: /* 0 */
18978 return add_ff_action_spectrum_mgmt(tree, tvb, pinfo, offset);
18979 case CAT_QOS1: /* 1 */
18980 return add_ff_action_qos(tree, tvb, pinfo, offset);
18981 case CAT_DLS2: /* 2 */
18982 return add_ff_action_dls(tree, tvb, pinfo, offset);
18983 case CAT_BLOCK_ACK3: /* 3 */
18984 return add_ff_action_block_ack(tree, tvb, pinfo, offset);
18985 case CAT_PUBLIC4: /* 4 */
18986 return add_ff_action_public(tree, tvb, pinfo, offset);
18987 case CAT_RADIO_MEASUREMENT5: /* 5 */
18988 return add_ff_action_radio_measurement(tree, tvb, pinfo, offset);
18989 case CAT_FAST_BSS_TRANSITION6: /* 6 */
18990 return add_ff_action_fast_bss_transition(tree, tvb, pinfo, offset);
18991 case CAT_HT7: /* 7 */
18992 return add_ff_action_ht(tree, tvb, pinfo, offset);
18993 case CAT_SA_QUERY8: /* 8 */
18994 return add_ff_action_sa_query(tree, tvb, pinfo, offset);
18995 case CAT_PUBLIC_PROTECTED9: /* 9 */
18996 return add_ff_action_protected_public(tree, tvb, pinfo, offset);
18997 case CAT_WNM10: /* 10 */
18998 return add_ff_action_wnm(tree, tvb, pinfo, offset);
18999 case CAT_UNPROTECTED_WNM11: /* 11 */
19000 return add_ff_action_unprotected_wnm(tree, tvb, pinfo, offset);
19001 case CAT_TDLS12: /* 12 */
19002 return add_ff_action_tdls(tree, tvb, pinfo, offset);
19003 case CAT_MESH13: /* 13 */
19004 return add_ff_action_mesh(tree, tvb, pinfo, offset);
19005 case CAT_MULTIHOP14: /* 14 */
19006 return add_ff_action_multihop(tree, tvb, pinfo, offset);
19007 case CAT_SELF_PROTECTED15: /* 15 */
19008 return add_ff_action_self_protected(tree, tvb, pinfo, offset, association_sanity_check);
19009 case CAT_DMG16: /* 16 */
19010 return add_ff_action_dmg(tree, tvb, pinfo, offset);
19011 case CAT_MGMT_NOTIFICATION17: /* Management notification frame - 17 */
19012 return add_ff_action_mgmt_notification(tree, tvb, pinfo, offset);
19013 case CAT_FAST_SESSION_TRANSFER18: /* 18 */
19014 return add_ff_action_fst(tree, tvb, pinfo, offset);
19015 case CAT_ROBUST_AV_STREAMING19: /* 19 */
19016 return add_ff_action_robust_av_streaming(tree, tvb, pinfo, offset);
19017 case CAT_UNPROTECTED_DMG20: /* 20 */
19018 return add_ff_action_unprotected_dmg(tree, tvb, pinfo, offset);
19019 case CAT_VHT21: /* 21 */
19020 return add_ff_action_vht(tree, tvb, pinfo, offset);
19021 case CAT_S1G22: /* 22 */
19022 return add_ff_action_s1g(tree, tvb, pinfo, offset);
19023 case CAT_PROTECTED_S1G23: /* 23 */
19024 return add_ff_action_protected_s1g(tree, tvb, pinfo, offset);
19025 case CAT_HE30:
19026 return add_ff_action_he(tree, tvb, pinfo, offset);
19027 case CAT_PROTECTED_HE31:
19028 return add_ff_action_protected_he(tree, tvb, pinfo, offset);
19029 case CAT_PROTECTED_EHT37:
19030 return add_ff_action_protected_eht(tree, tvb, pinfo, offset);
19031 case CAT_PROTECTED_FTM34:
19032 return add_ff_action_protected_ftm(tree, tvb, pinfo, offset);
19033 case CAT_EHT36:
19034 return add_ff_action_eht(tree, tvb, pinfo, offset);
19035 case CAT_VENDOR_SPECIFIC_PROTECTED126: /* Same as below for now */
19036 case CAT_VENDOR_SPECIFIC127: /* Vendor Specific Protected Category - 127 */
19037 return add_ff_action_vendor_specific(tree, tvb, pinfo, offset);
19038 default:
19039 add_ff_category_code(tree, tvb, pinfo, offset);
19040 return 1;
19041 }
19042}
19043
19044static const value_string ieee80211_rsn_cipher_vals[] = {
19045 {0, "NONE"},
19046 {1, "WEP (40-bit)"},
19047 {2, "TKIP"},
19048 {3, "AES (OCB)"},
19049 {4, "AES (CCM)"},
19050 {5, "WEP (104-bit)"},
19051 {6, "BIP (128)"},
19052 {7, "Group addressed traffic not allowed"},
19053 {8, "GCMP (128)" },
19054 {9, "GCMP (256)" },
19055 {10, "CCMP (256)" },
19056 {11, "BIP (GMAC-128)" },
19057 {12, "BIP (GMAC-256)" },
19058 {13, "BIP (CMAC-256)" },
19059 {0, NULL((void*)0)}
19060};
19061
19062#define AKMS_NONE0x000FAC00 0x000FAC00
19063#define AKMS_WPA0x000FAC01 0x000FAC01
19064#define AKMS_PSK0x000FAC02 0x000FAC02
19065#define AKMS_FT_IEEE802_1X0x000FAC03 0x000FAC03
19066#define AKMS_FT_PSK0x000FAC04 0x000FAC04
19067#define AKMS_WPA_SHA2560x000FAC05 0x000FAC05
19068#define AKMS_PSK_SHA2560x000FAC06 0x000FAC06
19069#define AKMS_TDLS0x000FAC07 0x000FAC07
19070#define AKMS_SAE0x000FAC08 0x000FAC08
19071#define AKMS_FT_SAE0x000FAC09 0x000FAC09
19072#define AKMS_AP_PEER_KEY0x000FAC0A 0x000FAC0A
19073#define AKMS_WPA_SHA256_SUITEB0x000FAC0B 0x000FAC0B
19074#define AKMS_WPA_SHA384_SUITEB0x000FAC0C 0x000FAC0C
19075#define AKMS_FT_IEEE802_1X_SHA3840x000FAC0D 0x000FAC0D
19076#define AKMS_FILS_SHA2560x000FAC0E 0x000FAC0E
19077#define AKMS_FILS_SHA3840x000FAC0F 0x000FAC0F
19078#define AKMS_FT_FILS_SHA2560x000FAC10 0x000FAC10
19079#define AKMS_FT_FILS_SHA3840x000FAC11 0x000FAC11
19080#define AKMS_OWE0x000FAC12 0x000FAC12
19081#define AKMS_SAE_GROUP_DEPEND0x000FAC18 0x000FAC18
19082#define AKMS_FT_SAE_GROUP_DEPEND0x000FAC19 0x000FAC19
19083
19084static const value_string ieee80211_rsn_keymgmt_vals[] = {
19085 {0, "NONE"},
19086 {1, "WPA"},
19087 {2, "PSK"},
19088 {3, "FT over IEEE 802.1X"},
19089 {4, "FT using PSK"},
19090 {5, "WPA (SHA256)"},
19091 {6, "PSK (SHA256)"},
19092 {7, "TDLS / TPK Handshake (SHA256)"},
19093 {8, "SAE (SHA256)" },
19094 {9, "FT using SAE (SHA256)" },
19095 {10, "APPeerKey (SHA256)" },
19096 {11, "WPA (SHA256-SuiteB)" },
19097 {12, "WPA (SHA384-SuiteB)" },
19098 {13, "FT over IEEE 802.1X (SHA384)" },
19099 {14, "FILS (SHA256 and AES-SIV-256)" },
19100 {15, "FILS (SHA384 and AES-SIV-512)" },
19101 {16, "FT over FILS (SHA256 and AES-SIV-256)" },
19102 {17, "FT over FILS (SHA384 and AES-SIV-512)" },
19103 {18, "Opportunistic Wireless Encryption"},
19104 {19, "FT using PSK (SHA384)"},
19105 {20, "PSK (SHA384)"},
19106 {21, "PASN"},
19107 {24, "SAE (GROUP-DEPEND)"},
19108 {25, "FT using SAE (GROUP-DEPEND)"},
19109 {0, NULL((void*)0)}
19110};
19111
19112#define OUIBASELEN(64 + 20) (MAXNAMELEN64 + 20)
19113
19114static void
19115oui_base_custom(char *result, uint32_t oui)
19116{
19117 uint8_t p_oui[3];
19118 const char *manuf_name;
19119
19120 p_oui[0] = oui >> 16 & 0xFF;
19121 p_oui[1] = oui >> 8 & 0xFF;
19122 p_oui[2] = oui & 0xFF;
19123
19124 static_assert_Static_assert(OUIBASELEN(64 + 20) <= ITEM_LABEL_LENGTH240, "Buffer size mismatch!");
19125 /* Attempt an OUI lookup. */
19126 manuf_name = uint_get_manuf_name_if_known(oui);
19127 if (manuf_name == NULL((void*)0)) {
19128 /* Could not find an OUI. */
19129 snprintf(result, OUIBASELEN(64 + 20), "%02x:%02x:%02x", p_oui[0], p_oui[1], p_oui[2]);
19130 }
19131 else {
19132 char name[MAXNAMELEN64+2];
19133 snprintf(name, MAXNAMELEN64+1, "%.*s", MAXNAMELEN64, manuf_name);
19134 /* Found an address string. */
19135 snprintf(result, OUIBASELEN(64 + 20), "%02x:%02x:%02x (%s)", p_oui[0], p_oui[1], p_oui[2], name);
19136 }
19137}
19138
19139static void
19140rsn_gcs_base_custom(char *result, uint32_t gcs)
19141{
19142 char oui_result[OUIBASELEN(64 + 20)];
19143 char *tmp_str;
19144
19145 oui_result[0] = '\0';
19146 oui_base_custom(oui_result, gcs >> 8);
19147 tmp_str = val_to_str(NULL((void*)0), gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19148 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19149 wmem_free(NULL((void*)0), tmp_str);
19150}
19151
19152static void
19153rsn_pcs_base_custom(char *result, uint32_t pcs)
19154{
19155 char oui_result[OUIBASELEN(64 + 20)];
19156 char *tmp_str;
19157
19158 oui_result[0] = '\0';
19159 oui_base_custom(oui_result, pcs >> 8);
19160 tmp_str = val_to_str(NULL((void*)0), pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19161 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19162 wmem_free(NULL((void*)0), tmp_str);
19163
19164}
19165static void
19166rsn_akms_base_custom(char *result, uint32_t akms)
19167{
19168 char oui_result[OUIBASELEN(64 + 20)];
19169 char *tmp_str;
19170
19171 oui_result[0] = '\0';
19172 oui_base_custom(oui_result, akms >> 8);
19173 tmp_str = val_to_str(NULL((void*)0), akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d");
19174 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19175 wmem_free(NULL((void*)0), tmp_str);
19176}
19177
19178static char *
19179rsn_pcs_return(wmem_allocator_t *scope, uint32_t pcs)
19180{
19181 char *result;
19182
19183 result = (char *)wmem_alloc(scope, SHORT_STR256);
19184 result[0] = '\0';
19185 rsn_pcs_base_custom(result, pcs);
19186
19187 return result;
19188}
19189
19190static char *
19191rsn_akms_return(wmem_allocator_t *scope, uint32_t akms)
19192{
19193 char *result;
19194
19195 result = (char *)wmem_alloc(scope, SHORT_STR256);
19196 result[0] = '\0';
19197 rsn_akms_base_custom(result, akms);
19198
19199 return result;
19200}
19201
19202static void
19203rsn_gmcs_base_custom(char *result, uint32_t gmcs)
19204{
19205 char oui_result[OUIBASELEN(64 + 20)];
19206 char *tmp_str;
19207
19208 oui_result[0] = '\0';
19209 oui_base_custom(oui_result, gmcs >> 8);
19210 tmp_str = val_to_str(NULL((void*)0), gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19211 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19212 wmem_free(NULL((void*)0), tmp_str);
19213}
19214
19215static void
19216rsni_base_custom(char *result, uint8_t rsni)
19217{
19218 double temp_double;
19219
19220 if (rsni < 255) {
19221 temp_double = (double)rsni - 20;
19222 snprintf(result, ITEM_LABEL_LENGTH240, "%.1f dB", (temp_double / 2));
19223 } else
19224 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Measurement not available)", rsni);
19225}
19226
19227static void
19228vht_tpe_custom(char *result, uint8_t txpwr)
19229{
19230 int8_t txpwr_db;
19231
19232 txpwr_db = (int8_t)(txpwr);
19233 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dBm", (txpwr_db/2.0));
19234}
19235
19236static void
19237tpe_psd_custom(char *result, uint8_t txpwr)
19238{
19239 int8_t txpwr_db;
19240
19241 txpwr_db = (int8_t)(txpwr);
19242 if (txpwr_db == -128) {
19243 snprintf(result, ITEM_LABEL_LENGTH240, "Channel cannot be used for transmission");
19244 } else if (txpwr_db == 127) {
19245 snprintf(result, ITEM_LABEL_LENGTH240, "No maximum PSD is specified for channel");
19246 } else {
19247 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dBm/MHz", (txpwr_db/2.0));
19248 }
19249}
19250
19251static void
19252channel_number_custom(char *result, uint8_t channel_number)
19253{
19254 switch(channel_number){
19255 case 0:
19256 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on all supported channels in the specified Operating Class)", channel_number);
19257 break;
19258 case 255:
19259 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on all supported channels listed in the AP Channel Report)", channel_number);
19260 break;
19261 default :
19262 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on that Channel Number)", channel_number);
19263 break;
19264 }
19265}
19266
19267/* WPA / WME */
19268static const value_string ieee802111_wfa_ie_type_vals[] = {
19269 { 1, "WPA Information Element" },
19270 { 2, "WMM/WME" },
19271 { 4, "WPS" },
19272 { 17, "Network Cost" },
19273 { 18, "Tethering" },
19274 { 0, NULL((void*)0) }
19275};
19276
19277static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] = {
19278 { 0, "NONE" },
19279 { 1, "WEP (40-bit)" },
19280 { 2, "TKIP" },
19281 { 3, "AES (OCB)" },
19282 { 4, "AES (CCM)" },
19283 { 5, "WEP (104-bit)" },
19284 { 6, "BIP" },
19285 { 7, "Group addressed traffic not allowed" },
19286 { 0, NULL((void*)0) }
19287};
19288
19289static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] = {
19290 { 0, "NONE" },
19291 { 1, "WPA" },
19292 { 2, "PSK" },
19293 { 3, "FT over IEEE 802.1X" },
19294 { 4, "FT using PSK" },
19295 { 5, "WPA (SHA256)" },
19296 { 6, "PSK (SHA256)" },
19297 { 7, "TDLS / TPK Handshake" },
19298 { 0, NULL((void*)0) }
19299};
19300
19301static const value_string ieee80211_wfa_ie_wme_acs_vals[] = {
19302 { 0, "Best Effort" },
19303 { 1, "Background" },
19304 { 2, "Video" },
19305 { 3, "Voice" },
19306 { 0, NULL((void*)0) }
19307};
19308
19309static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals[] = {
19310 { 0, "Uplink" },
19311 { 1, "Downlink" },
19312 { 2, "Direct link" },
19313 { 3, "Bidirectional link" },
19314 { 0, NULL((void*)0) }
19315};
19316
19317static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals[] = {
19318 { 0, "Legacy" },
19319 { 1, "U-APSD" },
19320 { 0, NULL((void*)0) }
19321};
19322
19323static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals[] = {
19324 { 0, "Best Effort" },
19325 { 1, "Background" },
19326 { 2, "Spare" },
19327 { 3, "Excellent Effort" },
19328 { 4, "Controlled Load" },
19329 { 5, "Video" },
19330 { 6, "Voice" },
19331 { 7, "Network Control" },
19332 { 0, NULL((void*)0) }
19333};
19334
19335/* Cost Level https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/24b04427-4ed6-4d12-a73d-c89ea72c7a94 */
19336static const value_string ieee80211_wfa_ie_nc_cost_level_vals[] = {
19337 { 0x0, "Unknown / The connection cost is unknown" },
19338 { 0x01, "Unrestricted / The connection is unlimited and has unrestricted usage constraints" },
19339 { 0x02, "Fixed / Usage counts toward a fixed allotment of data which the user has already paid for (or agreed to pay for)" },
19340 { 0x04, "Variable / The connection cost is on a per-byte basis" },
19341 {0, NULL((void*)0)}
19342};
19343
19344/* Cost Flags https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/b601a6a0-a4ff-4527-bf43-2eeee8c5796b */
19345static const value_string ieee80211_wfa_ie_nc_cost_flags_vals[] = {
19346 { 0x0, "Unknown / The usage is unknown or unrestricted" },
19347 { 0x01, "Over Data Limit / Usage has exceeded the data limit of the metered network; different network costs or conditions might apply" },
19348 { 0x02, "Congested / The network operator is experiencing or expecting heavy load" },
19349 { 0x04, "Roaming / The tethering connection is roaming outside the provider's home network or affiliates" },
19350 { 0x08, "Approaching Data Limit / Usage is near the data limit of the metered network; different network costs or conditions might apply once the limit is reached" },
19351 {0, NULL((void*)0)}
19352};
19353
19354
19355static const value_string ieee80211_wfa_ie_tethering_type_vals[] = {
19356 { 0x2B, "Broadcasted" },
19357 {0, NULL((void*)0)}
19358};
19359
19360
19361static const value_string ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals[] = {
19362 { 0, "WMM AP may deliver all buffered frames (MSDUs and MMPDUs)" },
19363 { 1, "WMM AP may deliver a maximum of 2 buffered frames (MSDUs and MMPDUs) per USP" },
19364 { 2, "WMM AP may deliver a maximum of 4 buffered frames (MSDUs and MMPDUs) per USP" },
19365 { 3, "WMM AP may deliver a maximum of 6 buffered frames (MSDUs and MMPDUs) per USP" },
19366 { 0, NULL((void*)0)}
19367};
19368static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = {
19369 "WMM delivery and trigger enabled",
19370 "non-WMM PS"
19371};
19372
19373/* az: Ranging Parameters */
19374static const val64_string ieee80211_ranging_status_vals[] = {
19375 { 0, "Reserved" },
19376 { 1, "Successful; measurement exchanges are about to begin" },
19377 { 2, "Request incapable; do not send same request again; FTM session ends" },
19378 { 3, "Request failed; do not send new request for Value seconds; FTM session ends" },
19379 { 0, NULL((void*)0) }
19380};
19381
19382static const val64_string ieee80211_ranging_fmt_bw_vals[] = {
19383 { 0, "HE 20 MHz" },
19384 { 1, "HE 40 MHz" },
19385 { 2, "HE 80 MHz" },
19386 { 3, "HE 80+80 MHz" },
19387 { 4, "HE 160 MHz (two separate RF LOs)" },
19388 { 5, "HE 160 MHz (single RF LO)" },
19389 /* values 6-63 reserved */
19390 { 0, NULL((void*)0) }
19391};
19392
19393static const val64_string ieee80211_ranging_ltf_total_vals[] = {
19394 { 0, "4 LTFs" },
19395 { 1, "8 LTFs" },
19396 { 2, "16 LTFs" },
19397 { 3, "No max LTFs specified" },
19398 { 0, NULL((void*)0) }
19399};
19400
19401static void
19402wpa_mcs_base_custom(char *result, uint32_t mcs)
19403{
19404 char oui_result[OUIBASELEN(64 + 20)];
19405 char *tmp_str;
19406
19407 oui_result[0] = '\0';
19408 oui_base_custom(oui_result, mcs >> 8);
19409 tmp_str = val_to_str(NULL((void*)0), mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
19410 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19411 wmem_free(NULL((void*)0), tmp_str);
19412}
19413
19414static void
19415wpa_ucs_base_custom(char *result, uint32_t ucs)
19416{
19417 char oui_result[OUIBASELEN(64 + 20)];
19418 char *tmp_str;
19419
19420 oui_result[0] = '\0';
19421 oui_base_custom(oui_result, ucs >> 8);
19422 tmp_str = val_to_str(NULL((void*)0), ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
19423 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19424 wmem_free(NULL((void*)0), tmp_str);
19425}
19426static void
19427wpa_akms_base_custom(char *result, uint32_t akms)
19428{
19429 char oui_result[OUIBASELEN(64 + 20)];
19430 char *tmp_str;
19431
19432 oui_result[0] = '\0';
19433 oui_base_custom(oui_result, akms >> 8);
19434 tmp_str = val_to_str(NULL((void*)0), akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d");
19435 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19436 wmem_free(NULL((void*)0), tmp_str);
19437}
19438
19439static char *
19440wpa_ucs_return(wmem_allocator_t *scope, uint32_t ucs)
19441{
19442 char *result;
19443
19444 result = (char *)wmem_alloc(scope, SHORT_STR256);
19445 result[0] = '\0';
19446 wpa_ucs_base_custom(result, ucs);
19447
19448 return result;
19449}
19450
19451static char *
19452wpa_akms_return(wmem_allocator_t *scope, uint32_t akms)
19453{
19454 char *result;
19455
19456 result = (char *)wmem_alloc(scope, SHORT_STR256);
19457 result[0] = '\0';
19458 wpa_akms_base_custom(result, akms);
19459
19460 return result;
19461}
19462
19463/* For each Field */
19464static const value_string ieee80211_wapi_suite_type[] = {
19465 {0, "Reserved"},
19466 {1, "WAI Certificate Authentication and Key Management"},
19467 {2, "WAI Preshared Key Authentication and Key Management"},
19468 {0, NULL((void*)0)},
19469};
19470/* For Summary Tag Information */
19471static const value_string ieee80211_wapi_suite_type_short[] = {
19472 {0, "Reserved"},
19473 {1, "WAI-CERT"},
19474 {2, "WAI-PSK"},
19475 {0, NULL((void*)0)},
19476};
19477
19478static const value_string ieee80211_wapi_cipher_type[] = {
19479 {0, "Reserved"},
19480 {1, "WPI-SMS4"},
19481 {0, NULL((void*)0)},
19482};
19483
19484static const value_string ieee802111_wfa_ie_wme_type[] = {
19485 { 0, "Information Element" },
19486 { 1, "Parameter Element" },
19487 { 2, "TSPEC Element" },
19488 { 0, NULL((void*)0)}
19489};
19490
19491static const value_string ft_subelem_id_vals[] = {
19492 {0, "Reserved"},
19493 {1, "PMK-R1 key holder identifier (R1KH-ID)"},
19494 {2, "GTK subelement"},
19495 {3, "PMK-R0 key holder identifier (R0KH-ID)"},
19496 {4, "IGTK"},
19497 {5, "Operating Channel Information (OCI)"},
19498 {6, "BIGTK"},
19499 {7, "WIGTK"},
19500 {8, "MLO GTK"},
19501 {9, "MLO IGTK"},
19502 {10, "MLO BIGTK"},
19503 {0, NULL((void*)0)}
19504};
19505
19506static int
19507dissect_wme_qos_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
19508{
19509 proto_item *wme_qos_info_item;
19510
19511 static int * const ieee80211_mgt_req[] = {
19512 &hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
19513 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
19514 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
19515 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
19516 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
19517 &hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
19518 NULL((void*)0)
19519 };
19520
19521 static int * const ieee80211_mgt_resp[] = {
19522 &hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
19523 &hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
19524 &hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
19525 NULL((void*)0)
19526 };
19527
19528 switch (ftype) {
19529 case MGT_ASSOC_REQ0x00:
19530 case MGT_PROBE_REQ0x04:
19531 case MGT_REASSOC_REQ0x02:
19532 {
19533 /* To AP so decode as per WMM standard Figure 7 QoS Info field when sent from WMM STA*/
19534 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_qos_info,
19535 ett_wme_qos_info, ieee80211_mgt_req,
19536 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19537 break;
19538 }
19539 case MGT_BEACON0x08:
19540 case MGT_PROBE_RESP0x05:
19541 case MGT_ASSOC_RESP0x01:
19542 case MGT_REASSOC_RESP0x03:
19543 case MGT_ACTION0x0D:
19544 {
19545 /* From AP so decode as per WMM standard Figure 6 QoS Info field when sent from WMM AP */
19546 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_qos_info,
19547 ett_wme_qos_info, ieee80211_mgt_resp,
19548 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19549 break;
19550 }
19551 default:
19552 wme_qos_info_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_qos_info, tvb, offset, 1, ENC_NA0x00000000);
19553 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);
19554 break;
19555 }
19556
19557 offset += 1;
19558 return offset;
19559}
19560
19561static int * const update_edca_info_headers[] = {
19562 &hf_ieee80211_s1g_update_edca_override,
19563 &hf_ieee80211_s1g_update_edca_ps_poll_aci,
19564 &hf_ieee80211_s1g_update_edca_raw_aci,
19565 &hf_ieee80211_s1g_update_edca_sta_type,
19566 &hf_ieee80211_s1g_update_edca_reserved,
19567 NULL((void*)0)
19568};
19569
19570static const value_string sta_field_type_vals[] = {
19571 { 0, "Valid for both sensor and non-sensor STAs" },
19572 { 1, "Valid for sensor STAs" },
19573 { 2, "Valid for non-sensor STAs" },
19574 { 3, "Reserved" },
19575 { 0, NULL((void*)0) }
19576};
19577
19578static int
19579decode_qos_parameter_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
19580{
19581 int i;
19582 bool_Bool is_s1g = sta_is_s1g(pinfo);
19583 /* WME QoS Info Field */
19584 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
19585 /* WME Reserved Field or EDCA Update */
19586 if (is_s1g) {
19587 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
19588 hf_ieee80211_s1g_update_edca_info,
19589 ett_update_edca_info, update_edca_info_headers,
19590 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19591
19592 } else {
19593 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_reserved, tvb, offset, 1, ENC_NA0x00000000);
19594 }
19595
19596 offset += 1;
19597 /* AC Parameters */
19598 for (i = 0; i < 4; i++)
19599 {
19600 proto_item *ac_item, *aci_aifsn_item, *ecw_item, *cw_item;
19601 proto_tree *ac_tree, *ecw_tree;
19602 uint8_t aci_aifsn, ecw, ecwmin, ecwmax;
19603 uint16_t cwmin, cwmax;
19604 static int * const ieee80211_wfa_ie_wme_be[] = {
19605 &hf_ieee80211_wfa_ie_wme_acp_aci_be,
19606 &hf_ieee80211_wfa_ie_wme_acp_acm_be,
19607 &hf_ieee80211_wfa_ie_wme_acp_aifsn_be,
19608 &hf_ieee80211_wfa_ie_wme_acp_reserved_be,
19609 NULL((void*)0)
19610 };
19611
19612 static int * const ieee80211_wfa_ie_wme_bk[] = {
19613 &hf_ieee80211_wfa_ie_wme_acp_aci_bk,
19614 &hf_ieee80211_wfa_ie_wme_acp_acm_bk,
19615 &hf_ieee80211_wfa_ie_wme_acp_aifsn_bk,
19616 &hf_ieee80211_wfa_ie_wme_acp_reserved_bk,
19617 NULL((void*)0)
19618 };
19619
19620 static int * const ieee80211_wfa_ie_wme_vi[] = {
19621 &hf_ieee80211_wfa_ie_wme_acp_aci_vi,
19622 &hf_ieee80211_wfa_ie_wme_acp_acm_vi,
19623 &hf_ieee80211_wfa_ie_wme_acp_aifsn_vi,
19624 &hf_ieee80211_wfa_ie_wme_acp_reserved_vi,
19625 NULL((void*)0)
19626 };
19627
19628 static int * const ieee80211_wfa_ie_wme_vo[] = {
19629 &hf_ieee80211_wfa_ie_wme_acp_aci_vo,
19630 &hf_ieee80211_wfa_ie_wme_acp_acm_vo,
19631 &hf_ieee80211_wfa_ie_wme_acp_aifsn_vo,
19632 &hf_ieee80211_wfa_ie_wme_acp_reserved_vo,
19633 NULL((void*)0)
19634 };
19635
19636 static int * const * ie_wme_hdrs[] = {
19637 ieee80211_wfa_ie_wme_be,
19638 ieee80211_wfa_ie_wme_bk,
19639 ieee80211_wfa_ie_wme_vi,
19640 ieee80211_wfa_ie_wme_vo
19641 };
19642
19643 static int * const ecw_max_hf[] = {
19644 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_be,
19645 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk,
19646 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi,
19647 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo
19648 };
19649
19650 static int * const ecw_min_hf[] = {
19651 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_be,
19652 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk,
19653 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi,
19654 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo
19655 };
19656
19657 static int * const txop_limit_hf[] = {
19658 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_be,
19659 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk,
19660 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi,
19661 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo
19662 };
19663
19664 ac_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_ac_parameters, tvb, offset, 4, ENC_NA0x00000000);
19665 ac_tree = proto_item_add_subtree(ac_item, ett_wme_ac);
19666
19667 /* ACI/AIFSN Field */
19668 aci_aifsn_item = proto_tree_add_bitmask_with_flags(ac_tree, tvb, offset, hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
19669 ett_wme_aci_aifsn, ie_wme_hdrs[i],
19670 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19671 aci_aifsn = tvb_get_uint8(tvb, offset);
19672 /* 802.11-2012, 8.4.2.31 EDCA Parameter Set element */
19673 if (aci_aifsn < 2) {
19674 expert_add_info_format(pinfo, aci_aifsn_item, &ei_ieee80211_qos_bad_aifsn,
19675 "The minimum value for the AIFSN subfield is 2 (found %u).", aci_aifsn);
19676 }
19677 proto_item_append_text(ac_item, " ACI %u (%s), ACM %s, AIFSN %u",
19678 (aci_aifsn & 0x60) >> 5, try_val_to_str((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
19679 (aci_aifsn & 0x10) ? "yes" : "no", aci_aifsn & 0x0f);
19680 offset += 1;
19681
19682 /* ECWmin/ECWmax field */
19683 ecw_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_ecw, tvb, offset, 1, ENC_NA0x00000000);
19684 ecw_tree = proto_item_add_subtree(ecw_item, ett_wme_ecw);
19685 ecw = tvb_get_uint8(tvb, offset);
19686 ecwmin = ecw & 0x0f;
19687 ecwmax = (ecw & 0xf0) >> 4;
19688 cwmin= (1 << ecwmin) - 1;
19689 cwmax= (1 << ecwmax) - 1;
19690 cw_item = proto_tree_add_item(ecw_tree, *ecw_max_hf[i], tvb, offset, 1, ENC_NA0x00000000);
19691 proto_item_append_text(cw_item, " (CW Max: %u)", cwmax);
19692 cw_item = proto_tree_add_item(ecw_tree, *ecw_min_hf[i], tvb, offset, 1, ENC_NA0x00000000);
19693 proto_item_append_text(cw_item, " (CW Min: %u)", cwmin);
19694 proto_item_append_text(ac_item, ", ECWmin/max %u/%u (CWmin/max %u/%u)", ecwmin, ecwmax, cwmin, cwmax);
19695 offset += 1;
19696
19697 /* TXOP Limit */
19698 proto_tree_add_item(ac_tree, *txop_limit_hf[i], tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19699 proto_item_append_text(ac_item, ", TXOP %u", tvb_get_letohs(tvb, offset));
19700 offset += 2;
19701 }
19702
19703 return offset;
19704}
19705
19706static int
19707dissect_vendor_ie_wpawme(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, uint32_t tag_len, int ftype)
19708{
19709 uint8_t type;
19710
19711 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_type, tvb, offset, 1, ENC_NA0x00000000);
19712 type = tvb_get_uint8(tvb, offset);
19713 proto_item_append_text(tree, ": %s", val_to_str(pinfo->pool, type, ieee802111_wfa_ie_type_vals, "Unknown %d"));
19714 offset += 1;
19715
19716 switch (type) {
19717 case 1: /* Wi-Fi Protected Access (WPA) */
19718 {
19719 proto_item *wpa_mcs_item, *wpa_ucs_item, *wpa_akms_item;
19720 proto_item *wpa_sub_ucs_item, *wpa_sub_akms_item;
19721 proto_tree *wpa_mcs_tree, *wpa_ucs_tree, *wpa_akms_tree;
19722 proto_tree *wpa_sub_ucs_tree, *wpa_sub_akms_tree;
19723 uint16_t ucs_count, akms_count;
19724 unsigned ii;
19725
19726 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19727 offset += 2;
19728
19729 /* Multicast Cipher Suite */
19730 wpa_mcs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_mcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19731 wpa_mcs_tree = proto_item_add_subtree(wpa_mcs_item, ett_wpa_mcs_tree);
19732 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19733
19734 /* Check if OUI is 00:50:F2 (WFA) */
19735 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19736 {
19737 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_wfa_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
19738 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), GROUP_CIPHER_KEY);
19739 } else {
19740 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
19741 }
19742 offset += 4;
19743
19744 /* Unicast Cipher Suites */
19745 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19746 ucs_count = tvb_get_letohs(tvb, offset);
19747 offset += 2;
19748
19749 wpa_ucs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_list, tvb, offset, ucs_count * 4, ENC_NA0x00000000);
19750 wpa_ucs_tree = proto_item_add_subtree(wpa_ucs_item, ett_wpa_ucs_tree);
19751 for (ii = 0; ii < ucs_count; ii++)
19752 {
19753 wpa_sub_ucs_item = proto_tree_add_item(wpa_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19754 wpa_sub_ucs_tree = proto_item_add_subtree(wpa_sub_ucs_item, ett_wpa_sub_ucs_tree);
19755 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19756
19757 /* Check if OUI is 00:50:F2 (WFA) */
19758 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19759 {
19760 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19761 proto_item_append_text(wpa_ucs_item, " %s", wpa_ucs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
19762 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), CIPHER_KEY);
19763 } else {
19764 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19765 }
19766 offset += 4;
19767 }
19768
19769 /* Authenticated Key Management Suites */
19770 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19771 akms_count = tvb_get_letohs(tvb, offset);
19772 offset += 2;
19773
19774 wpa_akms_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_list, tvb, offset, akms_count * 4, ENC_NA0x00000000);
19775 wpa_akms_tree = proto_item_add_subtree(wpa_akms_item, ett_wpa_akms_tree);
19776 for (ii = 0; ii < akms_count; ii++)
19777 {
19778 wpa_sub_akms_item = proto_tree_add_item(wpa_akms_tree, hf_ieee80211_wfa_ie_wpa_akms, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19779 wpa_sub_akms_tree = proto_item_add_subtree(wpa_sub_akms_item, ett_wpa_sub_akms_tree);
19780 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19781
19782 /* Check if OUI is 00:50:F2 (WFA) */
19783 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19784 {
19785 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19786 proto_item_append_text(wpa_akms_item, " %s", wpa_akms_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
19787 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), AKM_KEY);
19788 } else {
19789 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19790 }
19791 offset += 4;
19792 }
19793 break;
19794 }
19795 case 2: /* Wireless Multimedia Enhancements (WME) */
19796 {
19797 uint8_t subtype;
19798
19799 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_subtype, tvb, offset, 1, ENC_NA0x00000000);
19800 subtype = tvb_get_uint8(tvb, offset);
19801 proto_item_append_text(tree, ": %s", val_to_str(pinfo->pool, subtype, ieee802111_wfa_ie_wme_type, "Unknown %d"));
19802 offset += 1;
19803 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA0x00000000);
19804 offset += 1;
19805 switch (subtype) {
19806 case 0: /* WME Information Element */
19807 {
19808 /* WME QoS Info Field */
19809 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
19810 break;
19811 }
19812 case 1: /* WME Parameter Element */
19813 {
19814 offset = decode_qos_parameter_set(tree, tvb, pinfo, offset, ftype);
19815 break;
19816 }
19817 case 2: /* WME TSPEC Element */
19818 {
19819 static int * const ieee80211_wfa_ie_wme_tspec_tsinfo[] = {
19820 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
19821 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
19822 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
19823 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
19824 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
19825 NULL((void*)0)
19826 };
19827
19828 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
19829 ett_tsinfo_tree, ieee80211_wfa_ie_wme_tspec_tsinfo,
19830 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19831 offset += 3;
19832
19833 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19834 offset += 2;
19835
19836 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19837 offset += 2;
19838
19839 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19840 offset += 4;
19841
19842 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19843 offset += 4;
19844
19845 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19846 offset += 4;
19847
19848 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19849 offset += 4;
19850
19851 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19852 offset += 4;
19853
19854 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19855 offset += 4;
19856
19857 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19858 offset += 4;
19859
19860 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19861 offset += 4;
19862
19863 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19864 offset += 4;
19865
19866 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19867 offset += 4;
19868
19869 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19870 offset += 4;
19871
19872 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19873 offset += 2;
19874
19875 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19876 offset += 2;
19877
19878 break;
19879 }
19880 default:
19881 /* No default Action */
19882 break;
19883 } /* End switch (subtype) */
19884 break;
19885 }
19886 case 4: /* WPS: Wifi Protected Setup */
19887 {
19888 dissect_wps_tlvs(tree, tvb, offset, tag_len-1, pinfo, false0);
19889 }
19890 break;
19891 case 17: /* Network Cost: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/88f0cdf4-cdf2-4455-b849-4abf1e5c11ac */
19892 {
19893 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_cost_level, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19894 offset += 1;
19895
19896 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19897 offset += 1;
19898
19899 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_cost_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19900 offset += 1;
19901
19902 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
19903 offset += 1;
19904 }
19905 break;
19906 case 18: /* Tethering: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/a097f5bb-6eca-44ad-9a02-20d46ad30d6d */
19907 {
19908 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19909 offset += 2;
19910
19911 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_mac_length, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19912 offset += 2;
19913
19914 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_mac, tvb, offset, 6, ENC_NA0x00000000);
19915 offset += 6;
19916
19917 }
19918 break;
19919 default:
19920 /* No default Action...*/
19921 break;
19922 } /* End switch (type) */
19923
19924 return offset;
19925}
19926
19927/*
19928 * Dissect a group data cipher suite which consists of an OUI and a one-byte
19929 * selector: IEEE802.11 2012 Figure 9-256.
19930 *
19931 * Accepts a two entry array of header fields so we can use this elsewhere.
19932 */
19933static int dissect_group_data_cipher_suite(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
19934 proto_tree *tree, int offset, int *hf_array, int ett_val, char *label)
19935{
19936 proto_tree *gdcs_tree = NULL((void*)0);
19937
19938 gdcs_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_val, NULL((void*)0),
19939 label);
19940 proto_tree_add_item(gdcs_tree, hf_array[0], tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19941 offset += 3;
19942 proto_tree_add_item(gdcs_tree, hf_array[1], tvb, offset, 1, ENC_NA0x00000000);
19943 offset += 1;
19944
19945 return offset;
19946}
19947
19948static int
19949dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
19950 int offset, uint32_t tag_len, association_sanity_check_t *association_sanity_check);
19951
19952static int
19953dissect_wfa_rsn_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
19954{
19955 int tag_len = tvb_reported_length(tvb);
19956
19957 if (tag_len > 0)
19958 dissect_rsn_ie(pinfo, tree, tvb, 0, tag_len, NULL((void*)0));
19959
19960 return tag_len;
19961}
19962
19963static int
19964dissect_wfa_rsn_override_2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
19965{
19966 int tag_len = tvb_reported_length(tvb);
19967
19968 if (tag_len > 0)
19969 dissect_rsn_ie(pinfo, tree, tvb, 0, tag_len, NULL((void*)0));
19970
19971 return tag_len;
19972}
19973
19974static int
19975dissect_rsnx_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int tag_len);
19976
19977static int
19978dissect_wfa_rsnx_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
19979{
19980 int tag_len = tvb_reported_length(tvb);
19981
19982 if (tag_len > 0)
19983 dissect_rsnx_ie(tvb, pinfo, tree, tag_len);
19984
19985 return tag_len;
19986}
19987
19988static int
19989dissect_wfa_rsn_selection(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
19990{
19991 int tag_len = tvb_reported_length(tvb);
19992
19993 proto_tree_add_item(tree, hf_ieee80211_wfa_rsn_selection, tvb, 0,
19994 1, ENC_NA0x00000000);
19995
19996 return tag_len;
19997}
19998
19999static int
20000dissect_wfa_rsn_override_link_kde(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20001{
20002 int tag_len = tvb_reported_length(tvb);
20003 int offset = 0;
20004
20005 proto_tree_add_item(tree, hf_ieee80211_wfa_rsn_or_link_kde_link_id, tvb, offset,
20006 1, ENC_NA0x00000000);
20007 offset++;
20008 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tree,
20009 tag_len - 1, -1, NULL((void*)0));
20010
20011 return tag_len;
20012}
20013
20014static const range_string qos_mgmt_attributes[] = {
20015 { 0, 0, "Reserved" },
20016 { 1, 1, "Port Range" },
20017 { 2, 2, "DSCP Policy" },
20018 { 3, 3, "TCLAS" },
20019 { 4, 4, "Domain Name" },
20020 { 5, 255, "Reserved" },
20021 { 0, 0, NULL((void*)0) }
20022};
20023
20024static int
20025ieee80211_frame_classifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
20026 proto_tree *tree, int offset, int tag_len);
20027
20028static int
20029dissect_qos_mgmt(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20030{
20031 int offset = 0;
20032 uint8_t attr_id;
20033 uint8_t attr_len;
20034 uint8_t attr_num = 0;
20035 proto_tree *sub_tree = NULL((void*)0);
20036
20037 while (tvb_captured_length_remaining(tvb, offset)) {
20038 attr_id = tvb_get_uint8(tvb, offset);
20039 attr_len = tvb_get_uint8(tvb, offset + 1);
20040 proto_tree *attr = NULL((void*)0);
20041
20042 attr = proto_tree_add_subtree_format(tree, tvb, offset, attr_len + 2,
20043 ett_qos_mgmt_attributes, NULL((void*)0),
20044 "QoS Management Attribute %d", attr_num++);
20045 proto_tree_add_item(attr, hf_ieee80211_qos_mgmt_attribute_id, tvb, offset,
20046 1, ENC_NA0x00000000);
20047 offset += 1;
20048
20049 proto_tree_add_item(attr, hf_ieee80211_qos_mgmt_attribute_len, tvb, offset,
20050 1, ENC_NA0x00000000);
20051 offset += 1;
20052
20053 switch (attr_id) {
20054 case 1:
20055 sub_tree = proto_tree_add_subtree(attr, tvb, offset, 1,
20056 ett_qos_mgmt_dscp_policy_capabilities, NULL((void*)0),
20057 "Port Range");
20058 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_start_port_range,
20059 tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
20060 offset += 2;
20061
20062 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_end_port_range, tvb,
20063 offset, 2, ENC_BIG_ENDIAN0x00000000);
20064 offset += 2;
20065 break;
20066 case 2:
20067 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20068 ett_qos_mgmt_dscp_policy, NULL((void*)0),
20069 "DSCP Policy");
20070
20071 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_id, tvb,
20072 offset, 1, ENC_NA0x00000000);
20073 offset += 1;
20074
20075 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_req_type,
20076 tvb, offset, 1, ENC_NA0x00000000);
20077 offset += 1;
20078
20079 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_dscp, tvb,
20080 offset, 1, ENC_NA0x00000000);
20081 offset += 1;
20082 break;
20083 case 3:
20084 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20085 ett_qos_mgmt_tclas, NULL((void*)0),
20086 "TCLAS");
20087
20088 ieee80211_frame_classifier(tvb, pinfo, sub_tree, offset, attr_len);
20089 offset += attr_len;
20090 break;
20091 case 4:
20092 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20093 ett_qos_mgmt_domain_name, NULL((void*)0),
20094 "Domain Name");
20095 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_domain_name, tvb,
20096 offset, attr_len, ENC_ASCII0x00000000);
20097 offset += attr_len;
20098 break;
20099 default:
20100 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20101 ett_qos_mgmt_unknown_attribute, NULL((void*)0),
20102 "Unknown attribute");
20103 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_unknown_attr, tvb,
20104 offset, attr_len, ENC_NA0x00000000);
20105 offset += attr_len;
20106 break;
20107 }
20108 }
20109
20110 return offset;
20111}
20112
20113/*
20114 * Handle the HS 2.0 rev 2 OSU Server-only authenticated layer 2 Encryption
20115 * Network element. This is almost the same format as the RSNE so maybe some
20116 * common code can be used.
20117 */
20118static int
20119dissect_hs20_osen(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20120{
20121 int offset = 0;
20122 int hf_array[2] = { hf_ieee80211_group_data_cipher_suite_oui,
20123 hf_ieee80211_group_data_cipher_suite_type };
20124 proto_tree *pwc_list = NULL((void*)0);
20125 proto_item *pwcsi = NULL((void*)0);
20126 uint16_t pwc_count = 0, pwc_index = 0;
20127 uint16_t akms_count = 0, akms_index = 0;
20128 static int * const osen_rsn_cap[] = {
20129 &hf_ieee80211_osen_rsn_cap_preauth,
20130 &hf_ieee80211_osen_rsn_cap_no_pairwise,
20131 &hf_ieee80211_osen_rsn_cap_ptksa_replay_counter,
20132 &hf_ieee80211_osen_rsn_cap_gtksa_replay_counter,
20133 &hf_ieee80211_osen_rsn_cap_mfpr,
20134 &hf_ieee80211_osen_rsn_cap_mfpc,
20135 &hf_ieee80211_osen_rsn_cap_jmr,
20136 &hf_ieee80211_osen_rsn_cap_peerkey,
20137 &hf_ieee80211_osen_rsn_spp_a_msdu_capable,
20138 &hf_ieee80211_osen_rsn_spp_a_msdu_required,
20139 &hf_ieee80211_osen_rsn_pbac,
20140 &hf_ieee80211_osen_extended_key_id_iaf,
20141 &hf_ieee80211_osen_reserved,
20142 NULL((void*)0)
20143 };
20144 uint16_t pmkid_count = 0, pmkid_index = 0;
20145 int gmcs_array[2] = { hf_ieee80211_osen_group_management_cipher_suite_oui,
20146 hf_ieee80211_osen_group_management_cipher_suite_type };
20147
20148 offset = dissect_group_data_cipher_suite(tvb, pinfo, tree, offset, hf_array,
20149 ett_osen_group_data_cipher_suite,
20150 "OSEN Group Data Cipher Suite");
20151
20152 pwc_count = tvb_get_letohs(tvb, offset);
20153 proto_tree_add_item(tree, hf_ieee80211_osen_pcs_count, tvb, offset,
20154 2, ENC_LITTLE_ENDIAN0x80000000);
20155 offset += 2;
20156
20157 if (pwc_count > 0) {
20158 int start_offset = offset;
20159 pwc_list = proto_tree_add_subtree(tree, tvb, offset, -1,
20160 ett_osen_pairwise_cipher_suites, &pwcsi,
20161 "OSEN Pairwise Cipher Suite List");
20162
20163 while (pwc_count > 0) {
20164 if (tvb_reported_length_remaining(tvb, offset) >= 4) {
20165 int hf_array2[2] = { hf_ieee80211_osen_pairwise_cipher_suite_oui,
20166 hf_ieee80211_osen_pairwise_cipher_suite_type };
20167 char label[128];
20168
20169 snprintf(label, sizeof(label), "OSEN Pairwise Cipher Suite %d", pwc_index);
20170 offset = dissect_group_data_cipher_suite(tvb, pinfo, pwc_list,
20171 offset, hf_array2, ett_osen_pairwise_cipher_suite,
20172 label);
20173 pwc_index++;
20174 pwc_count--;
20175 } else {
20176 /* Insert the remaining? Expert Info? */
20177 offset += tvb_reported_length_remaining(tvb, offset);
20178 break;
20179 }
20180 }
20181
20182 proto_item_set_len(pwcsi, offset - start_offset);
20183 }
20184
20185 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20186 return tvb_captured_length(tvb);
20187 }
20188
20189 /* Now handle the AKM Suites */
20190 akms_count = tvb_get_letohs(tvb, offset);
20191 proto_tree_add_item(tree, hf_ieee80211_osen_akm_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20192 offset += 2;
20193
20194 if (akms_count > 0) {
20195 int start_offset = offset;
20196 proto_tree *akm_list = NULL((void*)0);
20197 proto_item *akmcsi = NULL((void*)0);
20198
20199 akm_list = proto_tree_add_subtree(tree, tvb, offset, -1,
20200 ett_osen_akm_cipher_suites, &akmcsi,
20201 "OSEN AKM Cipher Suite List");
20202
20203 while (akms_count > 0) {
20204 if (tvb_reported_length_remaining(tvb, offset) >= 4) {
20205 int hf_array3[2] = { hf_ieee80211_osen_akm_cipher_suite_oui,
20206 hf_ieee80211_osen_akm_cipher_suite_type};
20207 char label[128];
20208
20209 snprintf(label, sizeof(label), "OSEN AKM Cipher Suite %d", akms_index);
20210 offset = dissect_group_data_cipher_suite(tvb, pinfo, akm_list,
20211 offset, hf_array3, ett_osen_akm_cipher_suite,
20212 label);
20213 akms_index++;
20214 akms_count--;
20215 } else {
20216 /* Expert info? */
20217 offset += tvb_reported_length_remaining(tvb, offset);
20218 break;
20219 }
20220 }
20221 proto_item_set_len(akmcsi, offset - start_offset);
20222 }
20223
20224 /* Any more? */
20225 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20226 return tvb_captured_length(tvb);
20227 }
20228
20229 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_osen_rsn_cap_flags,
20230 ett_osen_rsn_cap_tree, osen_rsn_cap,
20231 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
20232 offset += 2;
20233
20234 /* Any more? */
20235 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20236 return tvb_captured_length(tvb);
20237 }
20238
20239 pmkid_count = tvb_get_letohs(tvb, offset);
20240 proto_tree_add_item(tree, hf_ieee80211_osen_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20241 offset += 2;
20242
20243 if (pmkid_count > 0) {
20244 proto_tree *pmkid_list = NULL((void*)0);
20245
20246 pmkid_list = proto_tree_add_subtree(tree, tvb, offset, pmkid_count * 16,
20247 ett_osen_pmkid_list, NULL((void*)0),
20248 "OSEN PKMID List");
20249
20250 while (pmkid_count > 0) {
20251 proto_tree *pmkid_tree = NULL((void*)0);
20252
20253 pmkid_tree = proto_tree_add_subtree_format(pmkid_list, tvb,offset, 16,
20254 ett_osen_pmkid_tree, NULL((void*)0),
20255 "OSEN PKMID %d", pmkid_index);
20256 proto_tree_add_item(pmkid_tree, hf_ieee80211_osen_pmkid, tvb, offset, 16,
20257 ENC_NA0x00000000);
20258 offset += 16;
20259 pmkid_index++;
20260 pmkid_count--;
20261 }
20262 }
20263
20264 offset = dissect_group_data_cipher_suite(tvb, pinfo, tree, offset, gmcs_array,
20265 ett_osen_group_management_cipher_suite,
20266 "OSEN Group Management Cipher Suite");
20267
20268 return offset;
20269}
20270
20271static const value_string hs20_indication_version_number_vals[] = {
20272 { 0, "1.x" },
20273 { 1, "2.x" },
20274 { 2, "3.x" },
20275 { 0, NULL((void*)0) }
20276};
20277
20278static int
20279dissect_hs20_indication(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20280{
20281 static int * const ieee80211_hs20_indication[] = {
20282 &hf_ieee80211_hs20_indication_dgaf_disabled,
20283 &hf_ieee80211_hs20_indication_pps_mo_id_present,
20284 &hf_ieee80211_hs20_indication_anqp_domain_id_present,
20285 &hf_ieee80211_hs20_reserved,
20286 &hf_ieee80211_hs20_indication_version_number,
20287 NULL((void*)0)
20288 };
20289 int len = tvb_captured_length(tvb);
20290 int offset = 0;
20291 uint8_t indic = tvb_get_uint8(tvb, offset);
20292
20293 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_hs20_indication,
20294 ENC_NA0x00000000);
20295 offset++;
20296
20297 if (len >= 3 && (indic & 0x02)) { /* Contains a PPS MO ID field ... display it. */
20298 proto_tree_add_item(tree, hf_ieee80211_hs20_indication_pps_mo_id, tvb, offset,
20299 2, ENC_LITTLE_ENDIAN0x80000000);
20300 offset += 2;
20301 }
20302
20303 if ((len >= (offset + 2)) && (indic & 0x04)) {
20304 proto_tree_add_item(tree, hf_ieee80211_hs20_indication_anqp_domain_id, tvb, offset,
20305 2, ENC_LITTLE_ENDIAN0x80000000);
20306 offset += 2;
20307 }
20308
20309 return offset;
20310}
20311
20312enum ieee80211_wfa_60g_attr {
20313 /* 0 Reserved */
20314 WIFI_60G_ATTR_CAPABILITY = 1,
20315 /* 2 - 225 Reserved */
20316};
20317
20318static const value_string ieee80211_wfa_60g_attr_ids[] = {
20319 { WIFI_60G_ATTR_CAPABILITY, "60GHz Capability" },
20320 { 0, NULL((void*)0) }
20321};
20322
20323static int
20324dissect_wfa_60g_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
20325{
20326 int end = tvb_reported_length(tvb);
20327 int offset = 0;
20328 uint8_t id;
20329 uint16_t len;
20330 proto_tree *wf60g_tree;
20331 proto_item *attrs;
20332
20333 while (offset < end) {
20334 if (end - offset < 2) {
20335 expert_add_info_format(pinfo, tree, &ei_ieee80211_wfa_60g_attr_len_invalid, "Packet too short for Wi-Fi 60G attribute");
20336 break;
20337 }
20338
20339 id = tvb_get_uint8(tvb, offset);
20340 len = tvb_get_ntohs(tvb, offset + 1);
20341 attrs = proto_tree_add_item(tree, hf_ieee80211_wfa_60g_attr, tvb, offset, 0, ENC_NA0x00000000);
20342 proto_item_append_text(attrs, ": %s", val_to_str(pinfo->pool, id, ieee80211_wfa_60g_attr_ids,
20343 "Unknown attribute ID (%u)"));
20344 wf60g_tree = proto_item_add_subtree(attrs, ett_ieee80211_wfa_60g_attr);
20345 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20346 offset += 1;
20347 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20348 offset += 1;
20349
20350
20351 switch (id) {
20352 case WIFI_60G_ATTR_CAPABILITY:
20353 if (len - offset < 7) {
20354 expert_add_info_format(pinfo, tree, &ei_ieee80211_wfa_60g_attr_len_invalid, "Packet too short for 60G capability attribute");
20355 break;
20356 }
20357
20358 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
20359 offset += 6;
20360 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20361 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_reserved, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20362 offset += 1;
20363 break;
20364 default:
20365 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_wfa_60g_unknown_attribute, tvb,
20366 offset, len+2, "Unknown attribute ID (%u)", id);
20367 }
20368
20369 offset += len;
20370 }
20371 return offset;
20372}
20373
20374static int
20375dissect_owe_transition_mode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20376{
20377 uint8_t ssid_len;
20378
20379 int len = tvb_captured_length(tvb);
20380 int offset = 0;
20381
20382 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_bssid, tvb, offset, 6, ENC_NA0x00000000);
20383 offset += 6;
20384 len -= 6;
20385
20386 ssid_len = tvb_get_uint8(tvb, offset);
20387
20388 proto_tree_add_uint(tree, hf_ieee80211_wfa_ie_owe_ssid_length, tvb, offset, 1, ssid_len);
20389 offset += 1;
20390 len -= 1;
20391
20392 if (len < ssid_len) {
20393 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20394 return offset;
20395 }
20396
20397 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_ssid, tvb, offset, ssid_len, ENC_ASCII0x00000000);
20398 offset += len;
20399 len -= len;
20400
20401 if (len >= 2) {
20402 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_band_info, tvb, offset, 1, ENC_NA0x00000000);
20403 offset += 1;
20404
20405 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_channel_info, tvb, offset, 1, ENC_NA0x00000000);
20406 offset += 1;
20407 }
20408
20409 return offset;
20410}
20411
20412static int
20413dissect_transition_disable_kde(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20414{
20415 int tag_len = tvb_captured_length(tvb);
20416 int offset = 0;
20417 static int * const ieee80211_wfa_transition_disable_flags[] = {
20418 &hf_ieee80211_wfa_ie_transition_disable_wpa3_personal,
20419 &hf_ieee80211_wfa_ie_transition_disable_sae_pk,
20420 &hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise,
20421 &hf_ieee80211_wfa_ie_transition_disable_enhanced_open,
20422 &hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7,
20423 NULL((void*)0)
20424 };
20425
20426 if (tag_len < 1) {
20427 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20428 return 0;
20429 }
20430
20431 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_transition_disable_bitmap,
20432 ett_ieee80211_wfa_transition_disable_tree,
20433 ieee80211_wfa_transition_disable_flags,
20434 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
20435 offset++;
20436
20437 if (offset < tag_len)
20438 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_transition_disable_reserved, tvb, offset, tag_len-offset, ENC_NA0x00000000);
20439 offset = tag_len;
20440
20441 return offset;
20442}
20443
20444static int
20445dissect_mbo_oce(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20446{
20447 int len = tvb_reported_length(tvb);
20448 int offset = 0;
20449
20450 while (len >= 2) {
20451 proto_item *attr_item;
20452 proto_tree *attr_tree;
20453 uint8_t attr_id = tvb_get_uint8(tvb, offset);
20454 uint8_t attr_len = tvb_get_uint8(tvb, offset + 1);
20455
20456 if (len < (attr_len + 2)) {
20457 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20458 return offset;
20459 }
20460
20461 attr_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_oce_attr, tvb, offset, attr_len + 2, ENC_NA0x00000000);
20462 attr_tree = proto_item_add_subtree(attr_item, ett_mbo_oce_attr);
20463 proto_item_append_text(attr_item, " (%s)", val_to_str_const(attr_id, wfa_mbo_oce_attr_id_vals, "Unknown"));
20464
20465 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_oce_attr_id, tvb, offset, 1, ENC_NA0x00000000);
20466 offset += 1;
20467 len -= 1;
20468
20469 proto_tree_add_uint(attr_tree, hf_ieee80211_wfa_ie_mbo_oce_attr_len, tvb, offset, 1, attr_len);
20470 offset += 1;
20471 len -= 1;
20472
20473 switch (attr_id) {
20474 case MBO_AP_CAPABILITY_INDICATION1:
20475 {
20476 proto_item *cap_item;
20477 proto_tree *cap_tree;
20478
20479 if (attr_len != 1) {
20480 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20481 return offset;
20482 }
20483 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_ap_cap, tvb, offset, 1, ENC_NA0x00000000);
20484 cap_tree = proto_item_add_subtree(cap_item, ett_mbo_ap_cap);
20485 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_mbo_ap_cap_cell, tvb, offset, 1, ENC_NA0x00000000);
20486 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_mbo_ap_cap_reserved, tvb, offset, 1, ENC_NA0x00000000);
20487 break;
20488 }
20489 case MBO_NON_PREF_CHANNEL_REPORT2:
20490 if (attr_len == 0)
20491 break;
20492
20493 if (attr_len < 3) {
20494 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20495 return offset;
20496 }
20497 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class, tvb, offset, 1, ENC_NA0x00000000);
20498 offset += 1;
20499 len -= 1;
20500 attr_len -= 1;
20501 while (attr_len > 2) {
20502 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan, tvb, offset, 1, ENC_NA0x00000000);
20503 offset += 1;
20504 len -= 1;
20505 attr_len -= 1;
20506 }
20507
20508 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref, tvb, offset, 1, ENC_NA0x00000000);
20509 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason, tvb, offset + 1, 1, ENC_NA0x00000000);
20510 break;
20511 case MBO_CELLULAR_DATA_CAPABILITIES3:
20512 if (attr_len != 1) {
20513 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20514 return offset;
20515 }
20516 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_cellular_cap, tvb, offset, 1, ENC_NA0x00000000);
20517 break;
20518 case MBO_ASSOCIATION_DISALLOWED4:
20519 if (attr_len != 1) {
20520 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20521 return offset;
20522 }
20523 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason, tvb, offset, 1, ENC_NA0x00000000);
20524 break;
20525 case MBO_CELLULAR_DATA_PREFERENCE5:
20526 if (attr_len != 1) {
20527 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20528 return offset;
20529 }
20530 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_cellular_pref, tvb, offset, 1, ENC_NA0x00000000);
20531 break;
20532 case MBO_TRANSITION_REASON6:
20533 if (attr_len != 1) {
20534 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20535 return offset;
20536 }
20537 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_transition_reason, tvb, offset, 1, ENC_NA0x00000000);
20538 break;
20539 case MBO_TRANSITION_REJECTION_REASON7:
20540 if (attr_len != 1) {
20541 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20542 return offset;
20543 }
20544 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_transition_rej_reason, tvb, offset, 1, ENC_NA0x00000000);
20545 break;
20546 case MBO_ASSOCIATION_RETRY_DELAY8:
20547 {
20548 if (attr_len != 2) {
20549 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20550 return offset;
20551 }
20552 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_assoc_retry_delay, tvb, offset,
20553 2, ENC_LITTLE_ENDIAN0x80000000);
20554 break;
20555 }
20556 case OCE_CAPABILITY_INDICATION101:
20557 {
20558 proto_item *cap_item;
20559 proto_tree *cap_tree;
20560
20561 if (attr_len != 1) {
20562 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20563 return offset;
20564 }
20565 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_cap_ctrl, tvb, offset, 1, ENC_NA0x00000000);
20566 cap_tree = proto_item_add_subtree(cap_item, ett_oce_cap);
20567 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_release, tvb, offset, 1, ENC_NA0x00000000);
20568 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_sta_cfon, tvb, offset, 1, ENC_NA0x00000000);
20569 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_11b_only_ap, tvb, offset, 1, ENC_NA0x00000000);
20570 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_hlp, tvb, offset, 1, ENC_NA0x00000000);
20571 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_non_oce_ap, tvb, offset, 1, ENC_NA0x00000000);
20572 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_reserved, tvb, offset, 1, ENC_NA0x00000000);
20573 break;
20574 }
20575 case OCE_RSSI_ASSOCIATION_REJECTION102:
20576 {
20577 if (attr_len != 2) {
20578 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20579 return offset;
20580 }
20581 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta, tvb,
20582 offset, 1, ENC_NA0x00000000);
20583 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay, tvb,
20584 offset + 1, 1, ENC_NA0x00000000);
20585 break;
20586 }
20587 case OCE_REDUCED_WAN_METRICS103:
20588 {
20589 proto_item *cap_item;
20590 proto_tree *cap_tree;
20591 uint8_t capacity;
20592
20593 if (attr_len != 1) {
20594 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20595 return offset;
20596 }
20597 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap,
20598 tvb, offset, 1, ENC_NA0x00000000);
20599 cap_tree = proto_item_add_subtree(cap_item, ett_oce_metrics_cap);
20600
20601 capacity = tvb_get_uint8(tvb, offset);
20602 cap_item = proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink,
20603 tvb, offset, 1, ENC_NA0x00000000);
20604 proto_item_append_text(cap_item, " (%d kbit/s)", (1 << (capacity & 0xF)) * 100);
20605 cap_item = proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink,
20606 tvb, offset, 1, ENC_NA0x00000000);
20607 capacity >>= 4;
20608 proto_item_append_text(cap_item, " (%d kbit/s)", (1 << (capacity & 0xF)) * 100);
20609 break;
20610 }
20611 case OCE_RNR_COMPLETENESS104:
20612 while (attr_len >= 4) {
20613 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid,
20614 tvb, offset, 4, ENC_ASCII0x00000000);
20615 offset += 4;
20616 attr_len -= 4;
20617 len -= 4;
20618 }
20619 break;
20620 case OCE_PROBE_SUPPR_BSSID105:
20621 while (attr_len >= 6) {
20622 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_probe_suppr_bssid,
20623 tvb, offset, 6, ENC_NA0x00000000);
20624 offset += 6;
20625 attr_len -= 6;
20626 len -= 6;
20627 }
20628 break;
20629 case OCE_PROBE_SUPPR_SSID106:
20630 if (attr_len < 4) {
20631 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20632 return offset;
20633 }
20634 while (attr_len >= 4) {
20635 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_probe_suppr_ssid,
20636 tvb, offset, 4, ENC_ASCII0x00000000);
20637 offset += 4;
20638 attr_len -= 4;
20639 len -= 4;
20640 }
20641 break;
20642 default:
20643 break;
20644 }
20645
20646 offset += attr_len;
20647 len -= attr_len;
20648 }
20649
20650 if (len != 0) {
20651 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20652 }
20653
20654 return offset;
20655}
20656
20657static int
20658dissect_wfa_wnm_non_pref_chan(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20659{
20660 int len = tvb_reported_length(tvb);
20661 int offset = 0;
20662
20663 if (len == 0)
20664 return 0;
20665
20666 if (len < 3) {
20667 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20668 return 0;
20669 }
20670
20671 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class, tvb, offset, 1, ENC_NA0x00000000);
20672 offset ++;
20673 len --;
20674 while (len > 2) {
20675 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan, tvb, offset, 1, ENC_NA0x00000000);
20676 offset ++;
20677 len --;
20678 }
20679
20680 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref, tvb, offset, 1, ENC_NA0x00000000);
20681 offset ++;
20682 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason, tvb, offset, 1, ENC_NA0x00000000);
20683 offset ++;
20684 return offset;
20685}
20686
20687static int
20688dissect_wfa_wnm_cell_cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20689{
20690 int len = tvb_reported_length(tvb);
20691
20692 if (len != 1) {
20693 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20694 return 0;
20695 }
20696
20697 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_cellular_cap, tvb, 0, 1, ENC_NA0x00000000);
20698 return len;
20699}
20700
20701static void
20702dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
20703{
20704 int tag_len = tvb_reported_length(tag_tvb);
20705 int dissect;
20706 uint8_t subtype;
20707 int offset = 0;
20708 tvbuff_t *vendor_tvb;
20709
20710 if (tag_len < 4)
20711 return;
20712
20713 subtype = tvb_get_uint8(tag_tvb, 3);
20714 proto_item_append_text(item, ": %s", val_to_str_const(subtype, wfa_subtype_vals, "Unknown"));
20715 vendor_tvb = tvb_new_subset_length(tag_tvb, offset + 4, tag_len - 4);
20716 dissect = dissector_try_uint_with_data(wifi_alliance_ie_table, subtype, vendor_tvb, pinfo, item, false0, NULL((void*)0));
20717 if (dissect <= 0) {
20718 proto_tree_add_item(item, hf_ieee80211_tag_vendor_data, vendor_tvb, 0, tag_len - 4, ENC_NA0x00000000);
20719 }
20720}
20721
20722static const range_string kde_selectors_rvals[] = {
20723 { 0, 0, "Reserved" },
20724 { 1, 1, "GTK KDE" },
20725 { 2, 2, "Reserved" },
20726 { 3, 3, "MAC address KDE" },
20727 { 4, 4, "PMKID KDE" },
20728 { 5, 5, "Reserved" },
20729 { 6, 6, "Nonce KDE" },
20730 { 7, 7, "Lifetime KDE" },
20731 { 8, 8, "Error KDE" },
20732 { 9, 9, "IGTK KDE" },
20733 { 10, 10, "Key ID KDE" },
20734 { 11, 11, "Multi-band GTK KDE" },
20735 { 12, 12, "Multi-band Key ID KDE" },
20736 { 13, 13, "OCI KDE" },
20737 { 14, 14, "BIGTK KDE" },
20738 { 15, 15, "Reserved" },
20739 { 16, 16, "MLO GTK KDE" },
20740 { 17, 17, "MLO IGTK KDE" },
20741 { 18, 18, "MLO BIGTK KDE" },
20742 { 19, 19, "MLO LINK KDE" },
20743 { 20, 255, "Reserved" },
20744 { 0, 0, NULL((void*)0) }
20745};
20746
20747static const true_false_string tfs_rsn_gtk_kde_tx = {
20748 "Temporal key used for both transmission and reception",
20749 "Temporal key used only for reception"
20750};
20751
20752static int * const mlo_kde_link_hdrs[] = {
20753 &hf_ieee80211_rsn_ie_mlo_linkid,
20754 &hf_ieee80211_rsn_ie_mlo_rnse_present,
20755 &hf_ieee80211_rsn_ie_mlo_rnsxe_present,
20756 &hf_ieee80211_rsn_ie_mlo_reserved,
20757 NULL((void*)0)
20758};
20759
20760static void
20761dissect_rsn_ie_mlo_link(proto_item *item, proto_tree *tree, tvbuff_t *tvb,
20762 int offset, uint32_t tag_len _U___attribute__((unused)), packet_info *pinfo)
20763{
20764 uint8_t info = tvb_get_uint8(tvb, offset);
20765
20766 proto_tree_add_bitmask(tree, tvb, offset,
20767 hf_ieee80211_rsn_ie_mlo_link_info,
20768 ett_kde_mlo_link_info, mlo_kde_link_hdrs,
20769 ENC_NA0x00000000);
20770 offset += 1;
20771
20772 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_mac_addr, tvb, offset, 6,
20773 ENC_NA0x00000000);
20774 offset += 6;
20775 if ((info & 0x10) == 0x10) { /* Add the RSNE if present */
20776 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
20777 }
20778
20779 if ((info & 0x20) == 0x20) { /* Add the RSNXE if present */
20780 add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
20781 }
20782
20783 proto_item_append_text(item, ": MLO Link KDE");
20784}
20785
20786static void
20787dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tvb,
20788 int offset, uint32_t tag_len, packet_info *pinfo)
20789{
20790 uint8_t data_type = tvb_get_uint8(tvb, offset);
20791 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_data_type, tvb,
20792 offset, 1, ENC_NA0x00000000);
20793 offset += 1;
20794
20795 switch(data_type) {
20796 case 1:
20797 {
20798 /* IEEE 802.11i / Key Data Encapsulation / Data Type=1 - GTK.
20799 * This is only used within EAPOL-Key frame Key Data. */
20800 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_key_id, tvb,
20801 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20802 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_tx, tvb, offset,
20803 1, ENC_LITTLE_ENDIAN0x80000000);
20804 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_reserved1, tvb,
20805 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20806 offset += 1;
20807 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_reserved2, tvb,
20808 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20809 offset += 1;
20810 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_gtk, tvb, offset,
20811 tag_len - 3, ENC_NA0x00000000);
20812 proto_item_append_text(item, ": RSN GTK");
20813 save_proto_data(tvb, pinfo, offset, tag_len - 3, GTK_KEY);
20814 save_proto_data_value(pinfo, tag_len - 3, GTK_LEN_KEY);
20815 break;
20816 }
20817 case 3: /* MAC Address KDE */
20818 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mac_address_kde_mac, tvb,
20819 offset, 6, ENC_NA0x00000000);
20820 proto_item_append_text(item, ": MAC Address KDE");
20821 break;
20822 case 4:
20823 {
20824 /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
20825 * This is only used within EAPOL-Key frame Key Data. */
20826 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_pmkid, tvb, offset, 16, ENC_NA0x00000000);
20827 proto_item_append_text(item, ": RSN PMKID");
20828 break;
20829 }
20830 case 6:
20831 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_nonce, tvb, offset,
20832 32, ENC_NA0x00000000);
20833 proto_item_append_text(item, ": NONCE KDE");
20834 break;
20835 case 7: /* Lifetime KDE */
20836 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_lifetime, tvb,
20837 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
20838 proto_item_append_text(item, ": Lifetime KDE");
20839 break;
20840 case 8: /* Error KDE */
20841 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_error_kde_res, tvb, offset,
20842 2, ENC_LITTLE_ENDIAN0x80000000);
20843 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_error_kde_error_type, tvb,
20844 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20845 proto_item_append_text(item, ": Error KDE");
20846 break;
20847 case 9: /* IGTK KDE */
20848 {
20849 /* IEEE 802.11i / Key Data Encapsulation / Data Type=9 - IGTK.
20850 * This is only used within EAPOL-Key frame Key Data. */
20851 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_keyid, tvb,
20852 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20853 offset += 2;
20854 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_ipn, tvb, offset,
20855 6, ENC_LITTLE_ENDIAN0x80000000);
20856 offset += 6;
20857 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_igtk, tvb, offset,
20858 tag_len - 9, ENC_NA0x00000000);
20859 proto_item_append_text(item, ": RSN IGTK");
20860 break;
20861 }
20862 case 10:
20863 {
20864 /* IEEE 802.11 - 2016 / Key Data Encapsulation / Data Type=10 - KeyID
20865 * This is only used within EAPOL-Key frame Key Data when using Extended Key ID */
20866 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_ptk_keyid, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20867 proto_item_append_text(item, ": RSN PTK");
20868 break;
20869 }
20870 case 13: /* OCI KDE */
20871 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_operating_class, tvb,
20872 offset, 1, ENC_NA0x00000000);
20873 offset += 1;
20874 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_primary_channel_number,
20875 tvb, offset, 1, ENC_NA0x00000000);
20876 offset += 1;
20877 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_frequency_segment_1,
20878 tvb, offset, 1, ENC_NA0x00000000);
20879 proto_item_append_text(item, ": OCI KDE");
20880 break;
20881 case 14: /* BIGTK KDE */
20882 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_key_id, tvb, offset,
20883 2, ENC_LITTLE_ENDIAN0x80000000);
20884 offset += 2;
20885 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_bipn, tvb, offset,
20886 6, ENC_LITTLE_ENDIAN0x80000000);
20887 offset += 6;
20888 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_bigtk, tvb, offset,
20889 tag_len - 9, ENC_NA0x00000000);
20890 proto_item_append_text(item, ": BIGTK KDE");
20891 break;
20892 case 16: /* MLO GTK KDE */
20893 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id, tvb,
20894 offset, 1, ENC_NA0x00000000);
20895 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_tx, tvb,
20896 offset, 1, ENC_NA0x00000000);
20897 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved, tvb,
20898 offset, 1, ENC_NA0x00000000);
20899 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid, tvb,
20900 offset, 1, ENC_NA0x00000000);
20901 offset += 1;
20902
20903 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_pn, tvb,
20904 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
20905 offset += 6;
20906
20907 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk, tvb,
20908 offset, tag_len - 8, ENC_NA0x00000000);
20909
20910 proto_item_append_text(item, ": MLO GTK KDE");
20911 break;
20912 case 17: /* MLO IGTK KDE */
20913 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id, tvb,
20914 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20915 offset += 2;
20916
20917 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn, tvb,
20918 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
20919 offset += 6;
20920
20921 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved, tvb,
20922 offset, 1, ENC_NA0x00000000);
20923 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid, tvb,
20924 offset, 1, ENC_NA0x00000000);
20925 offset += 1;
20926
20927 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk, tvb,
20928 offset, tag_len - 10, ENC_NA0x00000000);
20929
20930 proto_item_append_text(item, ": MLO IGTK KDE");
20931 break;
20932 case 18: /* MLO BIGTK KDE */
20933 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id, tvb,
20934 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20935 offset += 2;
20936
20937 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn, tvb,
20938 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
20939 offset += 6;
20940
20941 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved, tvb,
20942 offset, 1, ENC_NA0x00000000);
20943 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid, tvb,
20944 offset, 1, ENC_NA0x00000000);
20945 offset += 1;
20946
20947 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk, tvb,
20948 offset, tag_len - 10, ENC_NA0x00000000);
20949
20950 proto_item_append_text(item, ": MLO BIGTK KDE");
20951 break;
20952 case 19: /*
20953 * MLO Link KDE, contains Link info, MAC Addr and possibly
20954 * RSNE and RSNXE
20955 */
20956 dissect_rsn_ie_mlo_link(item, tree, tvb, offset, tag_len, pinfo);
20957 break;
20958 default:
20959 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_unknown, tvb, offset,
20960 tag_len - 1, ENC_NA0x00000000);
20961 proto_item_append_text(item, ": RSN UNKNOWN");
20962 break;
20963 }
20964}
20965
20966typedef enum {
20967 MARVELL_IE_MESH = 4
20968} marvell_ie_type_t;
20969
20970static void
20971dissect_vendor_ie_marvell(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
20972 tvbuff_t *tvb, int offset, uint32_t tag_len)
20973{
20974 uint8_t type;
20975
20976 type = tvb_get_uint8(tvb, offset);
20977 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20978 offset += 1;
20979
20980 switch (type) {
20981 case MARVELL_IE_MESH:
20982 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_subtype, tvb,
20983 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
20984 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_version, tvb,
20985 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
20986 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_proto_id, tvb,
20987 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
20988 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_metric_id, tvb,
20989 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
20990 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_cap, tvb,
20991 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
20992 break;
20993
20994 default:
20995 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_data, tvb, offset,
20996 tag_len - 1, ENC_NA0x00000000);
20997 break;
20998 }
20999}
21000
21001typedef enum {
21002 ATHEROS_IE_ADVCAP = 1,
21003 ATHEROS_IE_XR = 3
21004} atheros_ie_type_t;
21005
21006typedef enum {
21007 ATHEROS_IE_ADVCAP_S = 1
21008} atheros_ie_advcap_subtype_t;
21009
21010typedef enum {
21011 ATHEROS_IE_XR_S = 1
21012} atheros_ie_xr_subtype_t;
21013
21014typedef enum {
21015 ATHEROS_IE_CAP_TURBOP = 0x01,
21016 ATHEROS_IE_CAP_COMP = 0x02,
21017 ATHEROS_IE_CAP_FF = 0x04,
21018 ATHEROS_IE_CAP_XR = 0x08,
21019 ATHEROS_IE_CAP_AR = 0x10,
21020 ATHEROS_IE_CAP_BURST = 0x20,
21021 ATHEROS_IE_CAP_WME = 0x40,
21022 ATHEROS_IE_CAP_BOOST = 0x80
21023} atheros_ie_cap_t;
21024
21025static const value_string atheros_ie_type_vals[] = {
21026 { ATHEROS_IE_ADVCAP, "Advanced Capability"},
21027 { ATHEROS_IE_XR, "eXtended Range"},
21028 { 0, NULL((void*)0) }
21029};
21030
21031static int * const ieee80211_atheros_ie_cap[] = {
21032 &hf_ieee80211_atheros_ie_cap_f_turbop,
21033 &hf_ieee80211_atheros_ie_cap_f_comp,
21034 &hf_ieee80211_atheros_ie_cap_f_ff,
21035 &hf_ieee80211_atheros_ie_cap_f_xr,
21036 &hf_ieee80211_atheros_ie_cap_f_ar,
21037 &hf_ieee80211_atheros_ie_cap_f_burst,
21038 &hf_ieee80211_atheros_ie_cap_f_wme,
21039 &hf_ieee80211_atheros_ie_cap_f_boost,
21040 NULL((void*)0)
21041};
21042
21043static int * const ieee80211_extreme_mesh_ie_hello[] = {
21044 &hf_ieee80211_extreme_mesh_ie_hello_f_root,
21045 &hf_ieee80211_extreme_mesh_ie_hello_f_proxy,
21046 &hf_ieee80211_extreme_mesh_ie_hello_f_geo,
21047 &hf_ieee80211_extreme_mesh_ie_hello_f_path_pref,
21048 &hf_ieee80211_extreme_mesh_ie_hello_f_mobile,
21049 NULL((void*)0)
21050};
21051
21052typedef enum {
21053 EXTREME_MESH_IE_SERVICES_ROOT = 0x01,
21054 EXTREME_MESH_IE_SERVICES_PROXY = 0x02,
21055 EXTREME_MESH_IE_SERVICES_GEO = 0x04,
21056 EXTREME_MESH_IE_SERVICES_PATH_PREF = 0x08,
21057 EXTREME_MESH_IE_SERVICES_MOBILE = 0x10,
21058} extreme_mesh_ie_services;
21059
21060/* Mesh Fields found in Management Frames KJG */
21061static const value_string extreme_mesh_ie_type_vals[] = {
21062 {1, "Hello"},
21063 {2, "Mesh ID"},
21064 {3, "MPID"},
21065 {0, NULL((void*)0)}
21066};
21067
21068static void
21069dissect_vendor_ie_extreme_mesh(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21070 tvbuff_t *tvb, int offset, unsigned tag_len,
21071 packet_info *pinfo, proto_item *ti_len)
21072{
21073 uint8_t type;
21074
21075 if (tag_len <= 3) {
21076 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 6", tag_len+3);
21077 /* Add length of OUI to tag_length */
21078 return;
21079 }
21080 type = tvb_get_uint8(tvb, offset);
21081 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21082 proto_item_append_text(item, ": %s", val_to_str_const(type, extreme_mesh_ie_type_vals, "Unknown"));
21083 offset += 1;
21084 tag_len -= 1;
21085
21086 switch (type) {
21087 case 1:
21088 {
21089 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_extreme_mesh_ie_services,
21090 ett_extreme_mesh_services_tree, ieee80211_extreme_mesh_ie_hello, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21091 offset += 1;
21092
21093 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_htr, tvb, offset, 1, ENC_NA0x00000000);
21094 offset += 1;
21095
21096 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mtr, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21097 offset += 2;
21098
21099 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_root, tvb, offset, 6, ENC_NA0x00000000);
21100 offset += 6;
21101
21102 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_nh, tvb, offset, 6, ENC_NA0x00000000);
21103 }
21104 break;
21105 case 2:
21106 {
21107 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mesh_id, tvb, offset, tag_len, ENC_ASCII0x00000000);
21108 }
21109 break;
21110 case 3:
21111 {
21112 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mp_id, tvb, offset, 6, ENC_NA0x00000000);
21113 }
21114 break;
21115 default:
21116 break;
21117 }
21118}
21119
21120static void
21121dissect_vendor_ie_atheros(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21122 tvbuff_t *tvb, int offset, unsigned tag_len,
21123 packet_info *pinfo, proto_item *ti_len)
21124{
21125 uint8_t type;
21126 uint8_t subtype;
21127 uint8_t version;
21128
21129 if (tag_len <= 3) {
21130 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 */
21131 return;
21132 }
21133 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_type, tvb, offset, 1, ENC_NA0x00000000);
21134 type = tvb_get_uint8(tvb, offset);
21135 proto_item_append_text(item, ": %s", val_to_str_const(type, atheros_ie_type_vals, "Unknown"));
21136 offset += 1;
21137 tag_len -= 1;
21138
21139 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_subtype, tvb, offset, 1, ENC_NA0x00000000);
21140 subtype = tvb_get_uint8(tvb, offset);
21141 offset += 1;
21142 tag_len -= 1;
21143
21144 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_version, tvb, offset, 1, ENC_NA0x00000000);
21145 version = tvb_get_uint8(tvb, offset);
21146 offset += 1;
21147 tag_len -= 1;
21148
21149 if (version == 0)
21150 {
21151 switch (type) {
21152 case ATHEROS_IE_ADVCAP:
21153 {
21154 switch (subtype) {
21155 case ATHEROS_IE_ADVCAP_S:
21156 {
21157 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_advcap_cap,
21158 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21159 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21160 offset += 1;
21161 tag_len -= 1;
21162
21163 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_defkey, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21164 offset += 2;
21165 tag_len -= 2;
21166 break;
21167 }
21168 default:
21169 /* No default Action */
21170 break;
21171 } /* End switch (subtype) */
21172 break;
21173 }
21174 case ATHEROS_IE_XR:
21175 {
21176 switch (subtype) {
21177 case ATHEROS_IE_XR_S:
21178 {
21179 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_info, tvb, offset, 1, ENC_NA0x00000000);
21180 offset += 1;
21181 tag_len -= 1;
21182
21183 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_bssid, tvb, offset, 6, ENC_NA0x00000000);
21184 offset += 6;
21185 tag_len -= 6;
21186
21187 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_bssid, tvb, offset, 6, ENC_NA0x00000000);
21188 offset += 6;
21189 tag_len -= 6;
21190
21191 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21192 offset += 2;
21193 tag_len -= 2;
21194
21195 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_xr_base_cap,
21196 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21197 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21198 offset += 1;
21199 tag_len -= 1;
21200
21201 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_xr_xr_cap,
21202 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21203 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21204 offset += 1;
21205 tag_len -= 1;
21206 break;
21207 }
21208 default:
21209 /* No default Action */
21210 break;
21211 } /* End switch (subtype) */
21212 break;
21213 default:
21214 /* No default Action */
21215 break;
21216 } /* End switch (type) */
21217
21218 }
21219 }
21220 if (tag_len > 0) {
21221 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA0x00000000);
21222 }
21223}
21224
21225typedef enum {
21226 AIRONET_IE_DTPC = 0,
21227 AIRONET_IE_UNKNOWN1 = 1,
21228 AIRONET_IE_VERSION = 3,
21229 AIRONET_IE_QOS,
21230 AIRONET_IE_UNKNOWN11 = 11,
21231 AIRONET_IE_QBSS_V2 = 14,
21232 AIRONET_IE_CLIENT_MFP = 20,
21233 AIRONET_IE_APNAME_V2 = 47
21234} aironet_ie_type_t;
21235
21236static const value_string aironet_ie_type_vals[] = {
21237 { AIRONET_IE_DTPC, "DTPC"},
21238 { AIRONET_IE_UNKNOWN1, "Unknown (1)"},
21239 { AIRONET_IE_VERSION, "CCX version"},
21240 { AIRONET_IE_QOS, "Qos"},
21241 { AIRONET_IE_UNKNOWN11, "Unknown (11)"},
21242 { AIRONET_IE_QBSS_V2, "QBSS V2 - CCA"},
21243 { AIRONET_IE_CLIENT_MFP, "Client MFP"},
21244 { AIRONET_IE_APNAME_V2, "AP NAME v2"},
21245 { 0, NULL((void*)0) }
21246};
21247
21248static const value_string aironet_mfp_vals[] = {
21249 { 0, "Disabled"},
21250 { 1, "Enabled"},
21251 { 0, NULL((void*)0) }
21252};
21253
21254static void
21255dissect_vendor_ie_aironet(proto_item *aironet_item, proto_tree *ietree,
21256 tvbuff_t *tvb, int offset, uint32_t tag_len,packet_info *pinfo)
21257{
21258 uint8_t type,length;
21259 int i;
21260 bool_Bool dont_change = false0; /* Don't change the IE item text to default */
21261 const uint8_t* apname;
21262
21263 type = tvb_get_uint8(tvb, offset);
21264 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21265 offset += 1;
21266
21267 switch (type) {
21268 case AIRONET_IE_DTPC:
21269 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc, tvb, offset, 1, ENC_NA0x00000000);
21270 proto_item_append_text(aironet_item, ": Aironet DTPC Powerlevel %ddBm", tvb_get_uint8(tvb, offset));
21271 offset += 1;
21272 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc_unknown, tvb, offset, 1, ENC_NA0x00000000);
21273 dont_change = true1;
21274 break;
21275 case AIRONET_IE_VERSION:
21276 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_version, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21277 proto_item_append_text(aironet_item, ": Aironet CCX version = %d", tvb_get_uint8(tvb, offset));
21278 dont_change = true1;
21279 break;
21280 case AIRONET_IE_QOS:
21281 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21282 offset += 1;
21283 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_paramset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21284 offset += 1;
21285
21286 /* XXX: just copied over from WME. Maybe "Best Effort" and "Background"
21287 * need to be swapped. Also, the "TXOP" may be TXOP - or not.
21288 */
21289 for (i = 0; i < 4; i++) {
21290 uint8_t byte1, byte2;
21291 uint16_t txop;
21292 byte1 = tvb_get_uint8(tvb, offset);
21293 byte2 = tvb_get_uint8(tvb, offset + 1);
21294 txop = tvb_get_letohs(tvb, offset + 2);
21295 proto_tree_add_bytes_format(ietree, hf_ieee80211_aironet_ie_qos_val, tvb, offset, 4, NULL((void*)0),
21296 "CCX QoS Parameters: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
21297 (byte1 & 0x60) >> 5, val_to_str(pinfo->pool, (byte1 & 0x60) >> 5, wme_acs, "(Unknown: %d)"),
21298 (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
21299 byte2 & 0x0f, (byte2 & 0xf0) >> 4,
21300 txop);
21301 offset += 4;
21302 }
21303 break;
21304 case AIRONET_IE_QBSS_V2:
21305 /* Extract Values */
21306 proto_tree_add_item(ietree, hf_ieee80211_qbss2_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21307 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
21308 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cal, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
21309 proto_tree_add_item(ietree, hf_ieee80211_qbss2_gl, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
21310 break;
21311 case AIRONET_IE_CLIENT_MFP:
21312 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_clientmfp, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21313 proto_item_append_text(aironet_item, ": Aironet Client MFP %s",
21314 val_to_str_const(1 & tvb_get_uint8(tvb, offset), aironet_mfp_vals, "Unknown"));
21315 dont_change = true1;
21316 break;
21317 case AIRONET_IE_APNAME_V2:
21318 /* Adds support for the new AP name v2 format;
21319this supports:
21320- 32 character long AP names (vs 16 in v1/ccx)
21321- is used on both WLC and Meraki
21322- does not require CCX to be enabled.
21323 */
21324 tag_len -= 1;
21325 length = tag_len;
21326
21327 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_cisco_ap_name_v2, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool,&apname);
21328 proto_item_append_text(ietree, ": AP name v2: %s", apname);
21329 // Set to true, so we don't append "Aironet type"
21330 dont_change = true1;
21331 break;
21332
21333 default:
21334 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_data, tvb, offset,
21335 tag_len - 1, ENC_NA0x00000000);
21336 break;
21337 }
21338 if (!dont_change) {
21339 proto_item_append_text(aironet_item, ": Aironet %s (%d)",
21340 val_to_str_const(type, aironet_ie_type_vals, "Unknown"), type);
21341 }
21342}
21343
21344/* info from lswifi https://github.com/joshschmelzle/lswifi/blob/v0.1.49/lswifi/elements.py#L1526 */
21345#define ARUBA_CAC1 1
21346#define ARUBA_MESH2 2
21347#define ARUBA_APNAME3 3
21348#define ARUBA_ARM4 4
21349#define ARUBA_SLB5 5
21350#define ARUBA_SJ_LOOP_PROTECT6 6
21351#define ARUBA_AUTO_MESH7 7
21352#define ARUBA_LCI8 8
21353#define ARUBA_GPS9 9
21354#define ARUBA_AP_HEALTH10 10
21355
21356static const value_string ieee80211_vs_aruba_subtype_vals[] = {
21357 { ARUBA_CAC1, "CAC"},
21358 { ARUBA_MESH2, "Mesh"},
21359 { ARUBA_APNAME3, "AP Name"},
21360 { ARUBA_ARM4, "ARM"},
21361 { ARUBA_SLB5, "SLB"},
21362 { ARUBA_SJ_LOOP_PROTECT6, "SJ Loop Protect"},
21363 { ARUBA_AUTO_MESH7, "Auto Mesh"},
21364 { ARUBA_LCI8, "LCI"},
21365 { ARUBA_GPS9, "GPS Ellipse"},
21366 { ARUBA_AP_HEALTH10, "AP Health"},
21367 { 0, NULL((void*)0) }
21368};
21369static void
21370dissect_vendor_ie_aruba(proto_item *item, proto_tree *ietree,
21371 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21372{
21373 uint8_t type;
21374 const uint8_t* name;
21375
21376 offset += 1; /* VS OUI Type */
21377 tag_len -= 1;
21378
21379 type = tvb_get_uint8(tvb, offset);
21380 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_subtype, tvb, offset, 1, ENC_NA0x00000000);
21381 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aruba_subtype_vals, "Unknown"));
21382 offset += 1;
21383 tag_len -= 1;
21384
21385 switch (type) {
21386 case ARUBA_APNAME3:
21387 offset += 1;
21388 tag_len -= 1;
21389
21390 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aruba_apname, tvb,
21391 offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
21392 proto_item_append_text(item, " (%s)", name);
21393 break;
21394
21395 case ARUBA_GPS9:
21396 {
21397 double latitude, longitude, major_axis, minor_axis, orientation, distance;
21398 offset += 1;
21399 tag_len -= 1;
21400 if (tag_len < 1) {
21401 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21402 "Malformed Aruba GPS data (insufficient data)");
21403 break;
21404 }
21405
21406 uint32_t gps_ie_length = tvb_get_uint8(tvb, offset);
21407 offset += 1;
21408 tag_len -= 1;
21409 gps_ie_length -= 1;
21410
21411 if (tag_len < gps_ie_length) {
21412 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21413 "Truncated Aruba GPS data (IE needs %u bytes but got %u)",
21414 gps_ie_length, tag_len);
21415 break;
21416 }
21417
21418 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_gps_subversion, tvb,
21419 offset, 1, ENC_NA0x00000000);
21420 offset += 1;
21421 tag_len -= 1;
21422
21423 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_gps_hop, tvb,
21424 offset, 1, ENC_NA0x00000000);
21425 offset += 1;
21426 tag_len -= 1;
21427
21428 latitude = tvb_get_ntohieee_double(tvb, offset);
21429 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_latitude, tvb,
21430 offset, 8, latitude, "%.6f", latitude);
21431 offset += 8;
21432 tag_len -= 8;
21433
21434 longitude = tvb_get_ntohieee_double(tvb, offset);
21435 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_longitude, tvb,
21436 offset, 8, longitude, "%.6f", longitude);
21437 offset += 8;
21438 tag_len -= 8;
21439
21440 major_axis = tvb_get_ntohieee_double(tvb, offset);
21441 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_major_axis, tvb,
21442 offset, 8, major_axis, "%.6f", major_axis);
21443 offset += 8;
21444 tag_len -= 8;
21445
21446 minor_axis = tvb_get_ntohieee_double(tvb, offset);
21447 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_minor_axis, tvb,
21448 offset, 8, minor_axis, "%.6f", minor_axis);
21449 offset += 8;
21450 tag_len -= 8;
21451
21452 orientation = tvb_get_ntohieee_double(tvb, offset);
21453 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_orientation, tvb,
21454 offset, 8, orientation, "%.6f", orientation);
21455 offset += 8;
21456 tag_len -= 8;
21457
21458 distance = tvb_get_ntohieee_double(tvb, offset);
21459 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_distance, tvb,
21460 offset, 8, distance, "%.6f", distance);
21461 tag_len -= 8;
21462
21463 if (tag_len > 0) {
21464 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21465 "Aruba GPS data contains additional %u bytes of unexpected data",
21466 tag_len);
21467 }
21468
21469 proto_item_append_text(item, " (coords: [%.6f, %.6f], ellipse: [%.2fm x %.2fm, %.2f°], distance: %.2fm)",
21470 latitude, longitude, major_axis, minor_axis, orientation, distance);
21471 }
21472 break;
21473
21474 default:
21475 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_data, tvb, offset,
21476 tag_len, ENC_NA0x00000000);
21477 if (tag_len > 0)
21478 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
21479 break;
21480 }
21481}
21482
21483static void
21484dissect_vendor_ie_routerboard(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21485 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21486{
21487 uint8_t type, length;
21488 proto_item *subitem;
21489 proto_tree *subtree;
21490
21491 offset += 1; /* VS OUI Type */
21492 tag_len -= 1;
21493 /* FIXME: Make sure we have at least 2 bytes left */
21494 proto_tree_add_item(ietree, hf_ieee80211_vs_routerboard_unknown, tvb, offset, 2, ENC_NA0x00000000);
21495
21496 offset += 2;
21497 tag_len -= 2;
21498
21499 while (tag_len >= 2) {
21500 type = tvb_get_uint8(tvb, offset);
21501 length = tvb_get_uint8(tvb, offset+1);
21502 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_routerboard_subitem, tvb, offset, length+2, ENC_NA0x00000000);
21503 subtree = proto_item_add_subtree(subitem, ett_routerboard);
21504 proto_item_set_text(subitem, "Sub IE (T/L: %d/%d)", type, length);
21505
21506 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype, tvb, offset, 1, ENC_NA0x00000000);
21507 offset += 1;
21508 tag_len -= 1;
21509
21510 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_sublength, tvb, offset, 1, ENC_NA0x00000000);
21511 offset += 1;
21512 tag_len -= 1;
21513
21514 if (tag_len < length)
21515 length = tag_len;
21516 if (length == 0) {
21517 expert_add_info(pinfo, subitem, &ei_ieee80211_vs_routerboard_unexpected_len);
21518 break;
21519 }
21520
21521 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subdata, tvb, offset, length, ENC_NA0x00000000);
21522
21523 if(type == 1){
21524 if(length == 30){
21525 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype1_prefix, tvb, offset, 10, ENC_NA0x00000000);
21526 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype1_data, tvb, offset + 10, length - 10, ENC_ASCII0x00000000);
21527 }else{
21528 expert_add_info(pinfo, subitem, &ei_ieee80211_vs_routerboard_unexpected_len);
21529 }
21530 }
21531
21532 offset += length;
21533 tag_len -= length;
21534 }
21535}
21536
21537#define AEROHIVE_HOSTNAME33 33
21538static const value_string ieee80211_vs_aerohive_type_vals[] = {
21539 { AEROHIVE_HOSTNAME33, "Host Name"},
21540 { 0, NULL((void*)0) }
21541};
21542static void
21543dissect_vendor_ie_aerohive(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21544 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21545{
21546 uint32_t type, length;
21547 const uint8_t* hostname;
21548 proto_item *ti_len;
21549
21550 /* VS OUI Type */
21551 type = tvb_get_uint8(tvb, offset);
21552 offset += 1;
21553 tag_len -= 1;
21554
21555 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_version, tvb, offset, 1, ENC_NA0x00000000);
21556 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aerohive_type_vals, "Unknown"));
21557 offset += 1;
21558 tag_len -= 1;
21559
21560 switch(type){
21561 case AEROHIVE_HOSTNAME33: /* Subtype (1 byte) + Host Name Length (1 byte) + Host Name */
21562
21563 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_subtype, tvb, offset, 1, ENC_NA0x00000000);
21564 offset += 1;
21565 tag_len -= 1;
21566
21567 ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_aerohive_hostname_length, tvb, offset, 1, ENC_NA0x00000000, &length);
21568 offset += 1;
21569 tag_len -= 1;
21570
21571 if (tag_len < length) {
21572 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < Host Name Length");
21573 length = tag_len;
21574 }
21575
21576 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aerohive_hostname, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &hostname);
21577 proto_item_append_text(item, " (%s)", hostname);
21578
21579 break;
21580
21581 default:
21582 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_data, tvb, offset, tag_len, ENC_NA0x00000000);
21583 break;
21584 }
21585}
21586
21587#define MIST_APNAME1 1
21588static const value_string ieee80211_vs_mist_type_vals[] = {
21589 { MIST_APNAME1, "AP Name"},
21590 { 0, NULL((void*)0) }
21591};
21592static void
21593dissect_vendor_ie_mist(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21594 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21595{
21596 uint32_t type, length;
21597 const uint8_t* apname;
21598
21599 /* VS OUI Type */
21600 type = tvb_get_uint8(tvb, offset);
21601 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_mist_type_vals, "Unknown"));
21602 offset += 1;
21603 tag_len -= 1;
21604
21605 switch(type){
21606 case MIST_APNAME1:
21607 length = tag_len;
21608 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_mist_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21609 proto_item_append_text(item, " (%s)", apname);
21610 break;
21611
21612 default:
21613 proto_tree_add_item(ietree, hf_ieee80211_vs_mist_data, tvb, offset, tag_len, ENC_NA0x00000000);
21614 break;
21615 }
21616}
21617
21618#define UBIQUITI_APNAME0x01 0x01
21619static const value_string ieee80211_vs_ubiquiti_type_vals[] = {
21620 { UBIQUITI_APNAME0x01, "AP Name"},
21621 { 0, NULL((void*)0) }
21622};
21623static void
21624dissect_vendor_ie_ubiquiti(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21625 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21626{
21627 uint32_t type, length;
21628 const uint8_t* apname;
21629
21630 /* VS OUI Type */
21631 type = tvb_get_uint8(tvb, offset);
21632 proto_tree_add_item(ietree, hf_ieee80211_vs_ubiquiti_type, tvb, offset, 1, ENC_NA0x00000000);
21633 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_ubiquiti_type_vals, "Unknown"));
21634 offset += 1;
21635 tag_len -= 1;
21636
21637 switch(type){
21638 case UBIQUITI_APNAME0x01:
21639 length = tag_len;
21640 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_ubiquiti_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21641 proto_item_append_text(item, " (%s)", apname);
21642 break;
21643
21644 default:
21645 proto_tree_add_item(ietree, hf_ieee80211_vs_ubiquiti_data, tvb, offset, tag_len, ENC_NA0x00000000);
21646 break;
21647 }
21648}
21649
21650#define RUCKUS_APNAME3 3
21651static const value_string ieee80211_vs_ruckus_type_vals[] = {
21652 { RUCKUS_APNAME3, "AP Name"},
21653 { 0, NULL((void*)0) }
21654};
21655static void
21656dissect_vendor_ie_ruckus(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21657 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21658{
21659 uint32_t type, length;
21660 const uint8_t* apname;
21661
21662 /* VS OUI Type */
21663 type = tvb_get_uint8(tvb, offset);
21664 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_ruckus_type_vals, "Unknown"));
21665 offset += 1;
21666 tag_len -= 1;
21667
21668 switch(type){
21669 case RUCKUS_APNAME3:
21670 length = tag_len;
21671 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_ruckus_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21672 proto_item_append_text(item, " (%s)", apname);
21673 break;
21674
21675 default:
21676 proto_tree_add_item(ietree, hf_ieee80211_vs_ruckus_data, tvb, offset, tag_len, ENC_NA0x00000000);
21677 break;
21678 }
21679}
21680
21681#define ALCATEL_APNAME1 1
21682static const value_string ieee80211_vs_alcatel_type_vals[] = {
21683 { ALCATEL_APNAME1, "AP Name"},
21684 { 0, NULL((void*)0) }
21685};
21686static void
21687dissect_vendor_ie_alcatel(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21688 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21689{
21690 uint32_t type, length;
21691 const uint8_t* apname;
21692
21693 /* VS OUI Type */
21694 type = tvb_get_uint8(tvb, offset);
21695 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_alcatel_type_vals, "Unknown"));
21696 offset += 1;
21697 tag_len -= 1;
21698
21699 switch(type){
21700 case ALCATEL_APNAME1:
21701 length = tag_len;
21702 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_alcatel_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21703 proto_item_append_text(item, " (%s)", apname);
21704 break;
21705
21706 default:
21707 proto_tree_add_item(ietree, hf_ieee80211_vs_alcatel_data, tvb, offset, tag_len, ENC_NA0x00000000);
21708 break;
21709 }
21710}
21711
21712enum vs_sgdsn_type {
21713 SGDSN_VERSION = 0x01,
21714 SGDSN_IDFR = 0x02,
21715 SGDSN_IDANSI = 0x03,
21716 SGDSN_LATITUDE = 0x04,
21717 SGDSN_LONGITUDE = 0x05,
21718 SGDSN_ALTITUDE_ABS = 0x06,
21719 SGDSN_ALTITUDE_REL = 0x07,
21720 SGDSN_LATITUDE_TAKEOFF = 0x08,
21721 SGDSN_LONGITUDE_TAKEOFF = 0x09,
21722 SGDSN_H_SPEED = 0x0a,
21723 SGDSN_HEADING = 0x0b,
21724};
21725
21726static const value_string ieee80211_vs_sgdsn_type_vals[] = {
21727 { SGDSN_VERSION, "Version"},
21728 { SGDSN_IDFR, "ID FR"},
21729 { SGDSN_IDANSI, "ID ANSI"},
21730 { SGDSN_LATITUDE, "Latitude"},
21731 { SGDSN_LONGITUDE, "Longitude"},
21732 { SGDSN_ALTITUDE_ABS, "Altitude AMSL"},
21733 { SGDSN_ALTITUDE_REL, "Altitude AGL"},
21734 { SGDSN_LATITUDE_TAKEOFF, "Latitude Takeoff"},
21735 { SGDSN_LONGITUDE_TAKEOFF, "Longitude Takeoff"},
21736 { SGDSN_H_SPEED, "Horizontal Speed"},
21737 { SGDSN_HEADING, "Heading"},
21738 { 0, NULL((void*)0) }
21739};
21740
21741static void
21742dissect_vendor_ie_sgdsn(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21743 tvbuff_t *tvb, int offset, uint32_t tag_len,
21744 packet_info *pinfo)
21745{
21746 // Technical specification defined in French law "NOR: ECOI1934044A"
21747 // https://www.legifrance.gouv.fr/eli/arrete/2019/12/27/ECOI1934044A/jo/texte
21748
21749 uint8_t type = tvb_get_uint8(tvb, offset);
21750 offset += 1;
21751 tag_len -= 1;
21752
21753 if (type == 1) {
21754
21755 while (tag_len > 2) {
21756
21757 uint8_t tlv_type = tvb_get_uint8(tvb, offset);
21758 uint8_t tlv_len = tvb_get_uint8(tvb, offset+1);
21759
21760 if (tag_len < tlv_len) {
21761 break;
21762 }
21763
21764 proto_item *item_tlv = proto_tree_add_item(ietree, hf_ieee80211_vs_sgdsn_tag, tvb, offset, tlv_len + 2, ENC_NA0x00000000);
21765 proto_item *tree = proto_item_add_subtree(item_tlv, ett_sgdsn);
21766
21767 proto_tree_add_item(tree, hf_ieee80211_vs_sgdsn_type, tvb, offset, 1, ENC_NA0x00000000);
21768 proto_tree_add_item(tree, hf_ieee80211_vs_sgdsn_length, tvb, offset + 1, 1, ENC_NA0x00000000);
21769
21770 offset += 2;
21771 tag_len -= 2;
21772
21773 proto_item_append_text(tree, ": %s", val_to_str_const(tlv_type, ieee80211_vs_sgdsn_type_vals, "Unknown"));
21774
21775 switch(tlv_type) {
21776 case SGDSN_VERSION:
21777 if (tlv_len == 1) {
21778 uint32_t value;
21779 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_version, tvb, offset, 1, ENC_NA0x00000000, &value);
21780 proto_item_append_text(tree, ": %d", value);
21781 } else {
21782 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 1");
21783 }
21784 break;
21785 case SGDSN_IDFR:
21786 if (tlv_len == 30) {
21787 const uint8_t* string1;
21788 const uint8_t* string2;
21789 const uint8_t* string3;
21790 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_manufacturer, tvb, offset, 3, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &string1);
21791 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_model, tvb, offset+3, 3, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &string2);
21792 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_serialnumber, tvb, offset+6, tlv_len-6, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &string3);
21793 proto_item_append_text(tree, ": %s %s %s", string1, string2, string3);
21794 } else {
21795 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 30");
21796 }
21797 break;
21798 case SGDSN_IDANSI:
21799 if (tlv_len >= 6 && tlv_len <= 20) {
21800 // ANSI/CTA-2063 Small UAS Serial Number.
21801 // Doc (free): https://shop.cta.tech/products/small-unmanned-aerial-systems-serial-numbers
21802 const uint8_t* icao_mfr_code;
21803 uint32_t sn_len;
21804 const uint8_t* serial_number;
21805 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_icaomfrcode, tvb, offset, 4, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &icao_mfr_code);
21806 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_serialnumber_len, tvb, offset+4, 1, ENC_NA0x00000000, &sn_len);
21807 if(sn_len < 0x30 || (sn_len > 0x39 && sn_len < 0x41) || sn_len > 0x46) {
21808 expert_add_info_format(pinfo, tree, &ei_ieee80211_vs_sgdsn_serialnumber_invalid_len_val, "Serial Number Length must be '0' to '9', or 'A' to 'F'");
21809 } else if (sn_len != (uint32_t)tlv_len+(sn_len>0x39 ? 0x32 : 0x2A)) {
21810 // Check that sn_len equals tlv_len - 5 + ( 0x37 if sn_len is 'A' to 'F', 0x30 otherwise).
21811 // We suppressed the minus 5 in the check above to avoid a compilation warning
21812 expert_add_info_format(pinfo, tree, &ei_ieee80211_vs_sgdsn_serialnumber_unexpected_len_val, "Expected %d byte(s), got %d byte(s)", tlv_len-5, (sn_len>0x39?sn_len-0x37:sn_len-0x30));
21813 }
21814 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_serialnumber, tvb, offset+5, tlv_len-5, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &serial_number);
21815 proto_item_append_text(tree, ": %s %s", icao_mfr_code, serial_number);
21816 } else {
21817 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be between 6 and 20");
21818 }
21819 break;
21820 case SGDSN_LATITUDE_TAKEOFF:
21821 case SGDSN_LATITUDE:
21822 case SGDSN_LONGITUDE_TAKEOFF:
21823 case SGDSN_LONGITUDE:
21824 if (tlv_len == 4) {
21825 int32_t value;
21826 proto_tree_add_item_ret_int(tree, hf_ieee80211_vs_sgdsn_gpscoord, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000, &value);
21827 proto_item_append_text(tree, ": %.5f", value / 100000.0);
21828 } else {
21829 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 4");
21830 }
21831 break;
21832 case SGDSN_ALTITUDE_ABS:
21833 case SGDSN_ALTITUDE_REL:
21834 if (tlv_len == 2) {
21835 int32_t value;
21836 proto_tree_add_item_ret_int(tree, hf_ieee80211_vs_sgdsn_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
21837 proto_item_append_text(tree, ": %d m", value);
21838 } else {
21839 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 4");
21840 }
21841 break;
21842 case SGDSN_H_SPEED:
21843 if (tlv_len == 1) {
21844 uint32_t value;
21845 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_speed, tvb, offset, 1, ENC_NA0x00000000, &value);
21846 proto_item_append_text(tree, ": %d m/s", value);
21847 } else {
21848 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 1");
21849 }
21850 break;
21851 case SGDSN_HEADING:
21852 if (tlv_len == 2) {
21853 uint32_t value;
21854 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_heading, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
21855 proto_item_append_text(tree, ": %d deg", value);
21856 } else {
21857 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 2");
21858 }
21859 break;
21860 default:
21861 expert_add_info_format(pinfo, tree, &ei_ieee80211_extra_data, "Unknown type");
21862 break;
21863 }
21864
21865 offset += tlv_len;
21866 tag_len -= tlv_len;
21867 }
21868
21869 if (tag_len) {
21870 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length, "Remaining bytes, TLV structure error");
21871 }
21872 }
21873}
21874
21875enum vs_nintendo_type {
21876 NINTENDO_SERVICES = 0x11,
21877 NINTENDO_CONSOLEID = 0xF0
21878};
21879
21880static const value_string ieee80211_vs_nintendo_type_vals[] = {
21881 { NINTENDO_SERVICES, "Services"},
21882 { NINTENDO_CONSOLEID, "ConsoleID"},
21883 { 0, NULL((void*)0) }
21884};
21885
21886static proto_tree*
21887dissect_vendor_ie_nintendo_tlv(const int hfindex, proto_tree *ietree,
21888 tvbuff_t *tvb, int offset, uint32_t sublen)
21889{
21890 proto_item *nintendo_item;
21891 proto_tree *nintendo_tree;
21892
21893 nintendo_item = proto_tree_add_item(ietree, hfindex, tvb, offset, sublen, ENC_NA0x00000000);
21894 nintendo_tree = proto_item_add_subtree(nintendo_item, ett_nintendo);
21895
21896 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_type, tvb, offset, 1, ENC_NA0x00000000);
21897 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_length, tvb, offset + 1, 1, ENC_NA0x00000000);
21898
21899 return nintendo_tree;
21900}
21901
21902static void
21903dissect_vendor_ie_nintendo(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21904 tvbuff_t *tvb, int offset, uint32_t tag_len)
21905{
21906 proto_tree *nintendo_tree;
21907
21908 uint8_t subtype;
21909 uint8_t sublength;
21910 uint32_t length = tag_len;
21911
21912 /* Skip OUI type for now - the code is for type 1 (StreetPass) only */
21913 /* http://3dbrew.org/wiki/StreetPass */
21914 offset += 1;
21915 length -= 1;
21916
21917 while(length > 0 && length < 256) { /* otherwise we are < 0 but on unsigned */
21918 subtype = tvb_get_uint8(tvb, offset);
21919 sublength = tvb_get_uint8(tvb, offset + 1);
21920
21921 switch(subtype) {
21922 case NINTENDO_SERVICES:
21923 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_servicelist, ietree, tvb, offset, sublength + 2);
21924 offset += 2;
21925 length -= 2;
21926
21927 while (sublength > 4) {
21928
21929 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_service, tvb, offset, 5, ENC_NA0x00000000);
21930 offset += 5;
21931 length -= 5;
21932 sublength -= 5;
21933 }
21934 break;
21935 case NINTENDO_CONSOLEID:
21936 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_consoleid, ietree, tvb, offset, sublength + 2);
21937 offset += + 2;
21938 length -= + 2;
21939
21940 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_consoleid, tvb, offset, sublength, ENC_NA0x00000000);
21941 offset += sublength;
21942 length -= sublength;
21943 break;
21944 default:
21945 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_unknown, ietree, tvb, offset, sublength + 2);
21946 offset += + 2;
21947 length -= + 2;
21948
21949 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_unknown, tvb, offset, sublength, ENC_NA0x00000000);
21950 offset += sublength;
21951 length -= sublength;
21952 break;
21953 }
21954 }
21955}
21956
21957static void
21958dissect_vendor_ie_meru(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21959 tvbuff_t *tvb, int offset, uint32_t tag_len,
21960 packet_info *pinfo)
21961{
21962 uint32_t type, length;
21963 proto_item *subitem, *ti_len;
21964 proto_tree *subtree;
21965
21966 while (tag_len >= 2) {
21967 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_meru_subitem, tvb, offset, 2, ENC_NA0x00000000);
21968 subtree = proto_item_add_subtree(subitem, ett_meru);
21969
21970 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_subtype, tvb, offset, 1, ENC_NA0x00000000, &type);
21971 offset += 1;
21972 tag_len -= 1;
21973
21974 ti_len = proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_sublength, tvb, offset, 1, ENC_NA0x00000000, &length);
21975 offset += 1;
21976 tag_len -= 1;
21977
21978 if (tag_len < length) {
21979 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < Sub Length");
21980 length = tag_len;
21981 }
21982
21983 proto_item_append_text(subitem, " (t=%d, l=%d)", type, length);
21984 proto_item_set_len(subitem, 2+length);
21985
21986 proto_tree_add_item(subtree, hf_ieee80211_vs_meru_subdata, tvb, offset, length, ENC_NA0x00000000);
21987 offset += length;
21988 tag_len -= length;
21989
21990 }
21991}
21992
21993static const value_string ieee80211_vs_extreme_subtype_vals[] = {
21994 { 1, "AP Name"},
21995 { 0, NULL((void*)0) }
21996};
21997
21998static void
21999dissect_vendor_ie_extreme(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
22000 tvbuff_t *tvb, int offset, uint32_t tag_len,
22001 packet_info *pinfo)
22002{
22003 uint32_t type, length;
22004 proto_item *ti_len;
22005
22006 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_subtype, tvb, offset, 1, ENC_NA0x00000000, &type);
22007 offset += 1;
22008 tag_len -= 1;
22009
22010 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_subdata, tvb, offset, tag_len, ENC_NA0x00000000);
22011
22012 switch(type){
22013 case 1: /* Unknown (7 bytes) + AP Name Length (1 byte) + AP Name */
22014
22015 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_unknown, tvb, offset, 7, ENC_NA0x00000000);
22016 offset += 7;
22017 tag_len -= 1;
22018
22019 ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_ap_length, tvb, offset, 1, ENC_NA0x00000000, &length);
22020 offset += 1;
22021 tag_len -= 1;
22022
22023 if (tag_len < length) {
22024 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < AP Length");
22025 length = tag_len;
22026 }
22027
22028 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_ap_name, tvb, offset, length, ENC_ASCII0x00000000);
22029
22030 break;
22031 default:
22032 /* Expert info ? */
22033 break;
22034 }
22035}
22036
22037#define FORTINET_SYSTEM10 10
22038static const value_string ieee80211_vs_fortinet_subtype_vals[] = {
22039 { FORTINET_SYSTEM10, "SYSTEM"},
22040 { 0, NULL((void*)0) }
22041};
22042
22043#define FORTINET_SYSTEM_APNAME1 1
22044#define FORTINET_SYSTEM_APMODEL2 2
22045#define FORTINET_SYSTEM_APSERIAL3 3
22046static const value_string ieee80211_vs_fortinet_system_type_vals[] = {
22047 { FORTINET_SYSTEM_APNAME1, "AP NAME"},
22048 { FORTINET_SYSTEM_APMODEL2, "AP MODEL"},
22049 { FORTINET_SYSTEM_APSERIAL3, "AP SERIAL"},
22050 { 0, NULL((void*)0) }
22051};
22052
22053static void
22054dissect_vendor_ie_fortinet(proto_item *item, proto_tree *ietree,
22055 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22056{
22057 uint32_t type;
22058
22059
22060 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_subtype, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &type);
22061 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_fortinet_subtype_vals, "Unknown"));
22062 offset += 2;
22063 tag_len -= 2;
22064
22065 switch (type) {
22066 case FORTINET_SYSTEM10:
22067 while (tag_len > 2) {
22068 uint32_t system_type, system_length;
22069
22070 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_system_type, tvb, offset, 1, ENC_NA0x00000000, &system_type);
22071 proto_item_append_text(item, " - %s:", val_to_str_const(system_type, ieee80211_vs_fortinet_system_type_vals, "Unknown"));
22072 offset += 1;
22073 tag_len -= 1;
22074
22075 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_system_length, tvb, offset, 1, ENC_NA0x00000000, &system_length);
22076 offset += 1;
22077 tag_len -= 1;
22078
22079 switch (system_type) {
22080 case FORTINET_SYSTEM_APNAME1:{
22081 const uint8_t* name;
22082 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apname, tvb,
22083 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
22084 proto_item_append_text(item, " %s", name);
22085 }
22086 break;
22087 case FORTINET_SYSTEM_APMODEL2:{
22088 const uint8_t* model;
22089 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apmodel, tvb,
22090 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &model);
22091 proto_item_append_text(item, " %s", model);
22092 }
22093 break;
22094 case FORTINET_SYSTEM_APSERIAL3:{
22095 const uint8_t* serial;
22096 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apserial, tvb,
22097 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &serial);
22098 proto_item_append_text(item, " %s", serial);
22099 }
22100 break;
22101 }
22102 offset += system_length;
22103 tag_len -= system_length;
22104 }
22105 break;
22106
22107 default:
22108 proto_tree_add_item(ietree, hf_ieee80211_vs_fortinet_data, tvb, offset,
22109 tag_len, ENC_NA0x00000000);
22110 if (tag_len > 0)
22111 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22112 break;
22113 }
22114}
22115
22116#define ARISTA_APNAME6 6
22117static const value_string ieee80211_vs_arista_subtype_vals[] = {
22118 { ARISTA_APNAME6, "AP Name"},
22119 { 0, NULL((void*)0) }
22120};
22121static void
22122dissect_vendor_ie_arista(proto_item *item, proto_tree *ietree,
22123 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22124{
22125 uint8_t type;
22126 const uint8_t* name;
22127
22128 offset += 1; /* VS OUI Type */
22129 tag_len -= 1;
22130
22131 type = tvb_get_uint8(tvb, offset);
22132 proto_tree_add_item(ietree, hf_ieee80211_vs_arista_subtype, tvb, offset, 1, ENC_NA0x00000000);
22133 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_arista_subtype_vals, "Unknown"));
22134 offset += 1;
22135 tag_len -= 1;
22136
22137 switch (type) {
22138 case ARISTA_APNAME6:
22139 offset += 1;
22140 tag_len -= 1;
22141
22142 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_arista_apname, tvb,
22143 offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
22144 proto_item_append_text(item, " (%s)", name);
22145 break;
22146
22147 default:
22148 proto_tree_add_item(ietree, hf_ieee80211_vs_arista_data, tvb, offset,
22149 tag_len, ENC_NA0x00000000);
22150 if (tag_len > 0)
22151 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22152 break;
22153 }
22154}
22155
22156#define WISUN_PTKID1 1
22157#define WISUN_GTKL2 2
22158#define WISUN_NR3 3
22159#define WISUN_LGTKL4 4
22160#define WISUN_LGTK5 5
22161
22162static const value_string ieee80211_vs_wisun_type_vals[] = {
22163 { WISUN_PTKID1, "PTKID" },
22164 { WISUN_GTKL2, "GTKL" },
22165 { WISUN_NR3, "NR" },
22166 { WISUN_LGTKL4, "LGTKL" },
22167 { WISUN_LGTK5, "LGTK" },
22168 { 0, NULL((void*)0) }
22169};
22170
22171#define WISUN_GTKL_GTK00x01 0x01
22172#define WISUN_GTKL_GTK10x02 0x02
22173#define WISUN_GTKL_GTK20x04 0x04
22174#define WISUN_GTKL_GTK30x08 0x08
22175
22176#define WISUN_NR_BR0 0
22177#define WISUN_NR_ROUTER1 1
22178#define WISUN_NR_LFN2 2
22179
22180static const value_string ieee80211_vs_wisun_nr_vals[] = {
22181 { WISUN_NR_BR0, "Border Router" },
22182 { WISUN_NR_ROUTER1, "Router" },
22183 { WISUN_NR_LFN2, "LFN" },
22184 { 0, NULL((void*)0) }
22185};
22186
22187#define WISUN_LGTKL_LGTK00x01 0x01
22188#define WISUN_LGTKL_LGTK10x02 0x02
22189#define WISUN_LGTKL_LGTK20x04 0x04
22190
22191static void
22192dissect_vendor_ie_wisun(proto_item *item, proto_tree *ietree,
22193 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22194{
22195 uint32_t type;
22196
22197 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_wisun_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
22198 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_wisun_type_vals, "Unknown"));
22199 offset += 1;
22200 tag_len -= 1;
22201
22202 switch(type) {
22203 case WISUN_PTKID1:
22204 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_ptkid, tvb, offset, 16, ENC_NA0x00000000);
22205 break;
22206 case WISUN_GTKL2: {
22207 static int * const wisun_gtkl[] = {
22208 &hf_ieee80211_vs_wisun_gtkl_gtk0,
22209 &hf_ieee80211_vs_wisun_gtkl_gtk1,
22210 &hf_ieee80211_vs_wisun_gtkl_gtk2,
22211 &hf_ieee80211_vs_wisun_gtkl_gtk3,
22212 NULL((void*)0),
22213 };
22214
22215 proto_tree_add_bitmask(ietree, tvb, offset, hf_ieee80211_vs_wisun_gtkl,
22216 ett_wisun_gtkl, wisun_gtkl, ENC_LITTLE_ENDIAN0x80000000);
22217 break;
22218 }
22219 case WISUN_NR3:
22220 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_nr, tvb,
22221 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
22222 break;
22223 case WISUN_LGTKL4: {
22224 static int * const wisun_lgtkl[] = {
22225 &hf_ieee80211_vs_wisun_lgtkl_lgtk0,
22226 &hf_ieee80211_vs_wisun_lgtkl_lgtk1,
22227 &hf_ieee80211_vs_wisun_lgtkl_lgtk2,
22228 NULL((void*)0),
22229 };
22230
22231 proto_tree_add_bitmask(ietree, tvb, offset, hf_ieee80211_vs_wisun_lgtkl,
22232 ett_wisun_lgtkl, wisun_lgtkl, ENC_LITTLE_ENDIAN0x80000000);
22233 break;
22234 }
22235 case WISUN_LGTK5:
22236 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_lgtk_key_id, tvb,
22237 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
22238 offset += 2;
22239 tag_len -= 2;
22240 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_lgtk_lgtk, tvb,
22241 offset, tag_len, ENC_NA0x00000000);
22242 break;
22243 default:
22244 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_data, tvb, offset, tag_len, ENC_NA0x00000000);
22245 if (tag_len > 0)
22246 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22247 break;
22248 }
22249}
22250
22251static const value_string ieee80211_vs_apple_subtype_vals[] = {
22252 { 0, NULL((void*)0) }
22253};
22254
22255static void
22256dissect_vendor_ie_apple(proto_item *item, proto_tree *ietree,
22257 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22258{
22259 uint32_t subtype, type, length;
22260
22261 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
22262 offset += 1;
22263 tag_len -= 1;
22264
22265 if(type == 6) { /* when type is 6, there is some subtype...*/
22266 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_subtype, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &subtype);
22267 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_apple_subtype_vals, "Unknown"));
22268 offset += 2;
22269 tag_len -= 2;
22270
22271 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_length, tvb, offset, 1, ENC_NA0x00000000, &length);
22272 offset += 1;
22273 tag_len -= 1;
22274
22275 switch (subtype) {
22276 default:
22277 proto_tree_add_item(ietree, hf_ieee80211_vs_apple_data, tvb, offset, tag_len, ENC_NA0x00000000);
22278 if (tag_len > 0)
22279 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22280 break;
22281 }
22282 } else{
22283 proto_tree_add_item(ietree, hf_ieee80211_vs_apple_data, tvb, offset, tag_len, ENC_NA0x00000000);
22284 if (tag_len > 0)
22285 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22286 }
22287
22288}
22289
22290/* 802.11-2012 8.4.2.37 QoS Capability element */
22291static int
22292dissect_qos_capability(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
22293{
22294 switch (ftype) {
22295 case MGT_ASSOC_REQ0x00:
22296 case MGT_PROBE_REQ0x04:
22297 case MGT_REASSOC_REQ0x02:
22298 {
22299 /* To AP so decode Qos Info as STA */
22300 offset += add_ff_qos_info_sta(tree, tvb, pinfo, offset);
22301 break;
22302 }
22303
22304 case MGT_BEACON0x08:
22305 case MGT_PROBE_RESP0x05:
22306 case MGT_ASSOC_RESP0x01:
22307 case MGT_REASSOC_RESP0x03:
22308 {
22309 /* From AP so decode QoS Info as AP */
22310 offset += add_ff_qos_info_ap(tree, tvb, pinfo, offset);
22311 break;
22312 }
22313
22314 default:
22315 expert_add_info_format(pinfo, proto_tree_get_parent(tree), &ei_ieee80211_qos_info_bad_ftype,
22316 "Could not deduce direction to decode correctly, ftype %u", ftype);
22317 break;
22318 }
22319
22320 return offset;
22321}
22322
22323static ieee80211_packet_data_t* get_or_create_packet_data(packet_info *pinfo) {
22324 ieee80211_packet_data_t *packet_data =
22325 (ieee80211_packet_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY);
22326 if (!packet_data) {
22327 packet_data = wmem_new(pinfo->pool, ieee80211_packet_data_t)((ieee80211_packet_data_t*)wmem_alloc((pinfo->pool), sizeof
(ieee80211_packet_data_t)))
;
22328 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY, packet_data);
22329 memset(packet_data, 0, sizeof(ieee80211_packet_data_t));
22330 }
22331 return packet_data;
22332}
22333
22334/* See ieee80211_rsn_keymgmt_vals */
22335static bool_Bool is_ft_akm_suite(uint32_t akm_suite)
22336{
22337 switch (akm_suite) {
22338 case AKMS_FT_IEEE802_1X0x000FAC03:
22339 case AKMS_FT_PSK0x000FAC04:
22340 case AKMS_FT_SAE0x000FAC09:
22341 case AKMS_FT_IEEE802_1X_SHA3840x000FAC0D:
22342 case AKMS_FT_FILS_SHA2560x000FAC10:
22343 case AKMS_FT_FILS_SHA3840x000FAC11:
22344 return true1;
22345 default:
22346 return false0;
22347 }
22348}
22349
22350static void
22351save_proto_data(tvbuff_t *tvb, packet_info *pinfo, int offset, size_t size, int key)
22352{
22353 uint8_t *data;
22354
22355 if (!enable_decryption) {
22356 return;
22357 }
22358 data = (uint8_t *)wmem_alloc(pinfo->pool, size);
22359 tvb_memcpy(tvb, data, offset, size);
22360 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, key, data);
22361}
22362
22363static void
22364save_proto_data_value(packet_info *pinfo, unsigned value, int key)
22365{
22366 if (!enable_decryption) {
22367 return;
22368 }
22369 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, key, GUINT_TO_POINTER(value)((gpointer) (gulong) (value)));
22370}
22371
22372static void
22373save_tag_for_dot11decrypt(tvbuff_t *tvb, packet_info *pinfo, int offset)
22374{
22375 uint8_t tag_no;
22376 uint8_t tag_len;
22377
22378 if (!enable_decryption) {
22379 return;
22380 }
22381 tag_no = tvb_get_uint8(tvb, offset);
22382 tag_len = tvb_get_uint8(tvb, offset + 1);
22383
22384 switch (tag_no) {
22385 case TAG_MOBILITY_DOMAIN54:
22386 save_proto_data(tvb, pinfo, offset, tag_len + 2, MDE_TAG_KEY);
22387 break;
22388 case TAG_FAST_BSS_TRANSITION55:
22389 save_proto_data(tvb, pinfo, offset, tag_len + 2, FTE_TAG_KEY);
22390 break;
22391 case TAG_RIC_DATA57:
22392 save_proto_data(tvb, pinfo, offset, tag_len + 2, RDE_TAG_KEY);
22393 break;
22394 case TAG_RSN_IE48:
22395 save_proto_data(tvb, pinfo, offset, tag_len + 2, RSNE_TAG_KEY);
22396 break;
22397 case TAG_RSNX244:
22398 save_proto_data(tvb, pinfo, offset, tag_len + 2, RSNXE_TAG_KEY);
22399 break;
22400 default:
22401 break;
22402 }
22403}
22404
22405static void
22406set_packet_data_last_akm_suite(ieee80211_packet_data_t *packet_data,
22407 uint32_t last_akm_suite)
22408{
22409 packet_data->last_akm_suite_set = true1;
22410 packet_data->last_akm_suite = last_akm_suite;
22411}
22412
22413static void
22414set_conversation_last_akm_suite(ieee80211_conversation_data_t *conv,
22415 uint32_t last_akm_suite)
22416{
22417 conv->last_akm_suite_set = true1;
22418 conv->last_akm_suite = last_akm_suite;
22419}
22420
22421/*
22422 * 7.3.2.25 RSNE information element. Common format with OSEN except the
22423 * version... should refactor
22424 */
22425static int
22426dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
22427 int offset, uint32_t tag_len, association_sanity_check_t *association_sanity_check)
22428{
22429 proto_item *rsn_gcs_item, *rsn_pcs_item, *rsn_akms_item, *rsn_pmkid_item, *rsn_gmcs_item;
22430 proto_item *rsn_sub_pcs_item, *rsn_sub_akms_item;
22431 proto_item *rsn_pcs_count, *rsn_akms_count, *rsn_pmkid_count;
22432 proto_tree *rsn_gcs_tree, *rsn_pcs_tree, *rsn_akms_tree, *rsn_pmkid_tree, *rsn_gmcs_tree;
22433 proto_tree *rsn_sub_pcs_tree, *rsn_sub_akms_tree;
22434 uint16_t pcs_count, akms_count, pmkid_count;
22435 unsigned ii;
22436 int tag_end = offset + tag_len;
22437 static int * const ieee80211_rsn_cap[] = {
22438 &hf_ieee80211_rsn_cap_preauth,
22439 &hf_ieee80211_rsn_cap_no_pairwise,
22440 &hf_ieee80211_rsn_cap_ptksa_replay_counter,
22441 &hf_ieee80211_rsn_cap_gtksa_replay_counter,
22442 &hf_ieee80211_rsn_cap_mfpr,
22443 &hf_ieee80211_rsn_cap_mfpc,
22444 &hf_ieee80211_rsn_cap_jmr,
22445 &hf_ieee80211_rsn_cap_peerkey,
22446 &hf_ieee80211_rsn_cap_spp_amsdu_cap,
22447 &hf_ieee80211_rsn_cap_spp_amsdu_req,
22448 &hf_ieee80211_rsn_cap_pbac,
22449 &hf_ieee80211_rsn_cap_extended_key_id_iaf,
22450 &hf_ieee80211_rsn_cap_ocvc,
22451 NULL((void*)0)
22452 };
22453
22454 proto_tree_add_item(tree, hf_ieee80211_rsn_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22455 offset += 2;
22456
22457 if (offset >= tag_end)
22458 return offset;
22459
22460 /* 7.3.2.25.1 Group Cipher suites */
22461 rsn_gcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22462 rsn_gcs_tree = proto_item_add_subtree(rsn_gcs_item, ett_rsn_gcs_tree);
22463 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22464
22465 /* Check if OUI is 00:0F:AC (ieee80211) */
22466 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22467 {
22468 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22469 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), GROUP_CIPHER_KEY);
22470 } else {
22471 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22472 }
22473 offset += 4;
22474
22475 if (offset >= tag_end)
22476 return offset;
22477
22478 /* 7.3.2.25.2 Pairwise Cipher suites */
22479 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22480 pcs_count = tvb_get_letohs(tvb, offset);
22481 offset += 2;
22482
22483 if (offset + (pcs_count * 4) > tag_end)
22484 {
22485 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
22486 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
22487 pcs_count = (tag_end - offset) / 4;
22488 }
22489
22490 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA0x00000000);
22491 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
22492 for (ii = 0; ii < pcs_count; ii++)
22493 {
22494 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22495 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
22496 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22497
22498 /* Check if OUI is 00:0F:AC (ieee80211) */
22499 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22500 {
22501 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22502 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
22503 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), CIPHER_KEY);
22504 } else {
22505 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22506 }
22507 offset += 4;
22508 }
22509
22510 if (offset >= tag_end)
22511 {
22512 return offset;
22513 }
22514
22515 /* 7.3.2.25.2 AKM suites */
22516 rsn_akms_count = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22517 akms_count = tvb_get_letohs(tvb, offset);
22518 offset += 2;
22519
22520 if (offset + (akms_count * 4) > tag_end)
22521 {
22522 expert_add_info_format(pinfo, rsn_akms_count, &ei_ieee80211_rsn_pmkid_count,
22523 "Auth Key Management (AKM) Suite Count too large, 4*%u > %d", akms_count, tag_end - offset);
22524 akms_count = (tag_end - offset) / 4;
22525 }
22526
22527 rsn_akms_item = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_list, tvb, offset, akms_count * 4, ENC_NA0x00000000);
22528 rsn_akms_tree = proto_item_add_subtree(rsn_akms_item, ett_rsn_akms_tree);
22529
22530 ieee80211_packet_data_t *packet_data = get_or_create_packet_data(pinfo);
22531
22532 for (ii = 0; ii < akms_count; ii++)
22533 {
22534 rsn_sub_akms_item = proto_tree_add_item(rsn_akms_tree, hf_ieee80211_rsn_akms, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22535 rsn_sub_akms_tree = proto_item_add_subtree(rsn_sub_akms_item, ett_rsn_sub_akms_tree);
22536 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22537
22538 /* Check if OUI is 00:0F:AC (ieee80211) */
22539 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22540 {
22541 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22542 proto_item_append_text(rsn_akms_item, " %s", rsn_akms_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
22543 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), AKM_KEY);
22544
22545 set_packet_data_last_akm_suite(packet_data, tvb_get_ntohl(tvb, offset));
22546 if (association_sanity_check) {
22547 uint32_t akm_suite = tvb_get_ntohl(tvb, offset);
22548 association_sanity_check->last_akm_suite = akm_suite;
22549
22550 if (is_ft_akm_suite(akm_suite)) {
22551 /* This is an FT AKM suite */
22552 association_sanity_check->has_ft_akm_suite = true1;
22553 if (association_sanity_check->rsn_first_ft_akm_suite == NULL((void*)0) && rsn_sub_akms_tree != NULL((void*)0)) {
22554 association_sanity_check->rsn_first_ft_akm_suite = rsn_sub_akms_tree->last_child;
22555 }
22556 } else {
22557 /* This is a non-FT AKM suite */
22558 association_sanity_check->has_non_ft_akm_suite = true1;
22559 if (association_sanity_check->rsn_first_non_ft_akm_suite == NULL((void*)0) && rsn_sub_akms_tree != NULL((void*)0)) {
22560 association_sanity_check->rsn_first_non_ft_akm_suite = rsn_sub_akms_tree->last_child;
22561 }
22562 }
22563 }
22564 } else {
22565 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22566 }
22567 offset += 4;
22568 }
22569
22570 /* 7.3.2.25.3 RSN capabilities */
22571 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_rsn_cap,
22572 ett_rsn_cap_tree, ieee80211_rsn_cap,
22573 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22574 offset += 2;
22575 if (offset >= tag_end)
22576 {
22577 return offset;
22578 }
22579 /* 7.3.2.25.4 PMKID */
22580 rsn_pmkid_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22581 pmkid_count = tvb_get_letohs(tvb, offset);
22582 offset += 2;
22583
22584 if (offset + (pmkid_count * 16) > tag_end)
22585 {
22586 expert_add_info_format(pinfo, rsn_pmkid_count, &ei_ieee80211_pmkid_count_too_large,
22587 "PMKID Count too large, 16*%u > %d", pmkid_count, tag_end - offset);
22588 pmkid_count = (tag_end - offset) / 16;
22589 }
22590
22591 rsn_pmkid_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_list, tvb, offset, pmkid_count * 16, ENC_NA0x00000000);
22592 rsn_pmkid_tree = proto_item_add_subtree(rsn_pmkid_item, ett_rsn_pmkid_tree);
22593 for (ii = 0; ii < pmkid_count; ii++)
22594 {
22595 proto_tree_add_item(rsn_pmkid_tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA0x00000000);
22596 offset += 16;
22597 }
22598
22599 if (offset >= tag_end)
22600 {
22601 return offset;
22602 }
22603 /* Group Management Cipher Suite (802.11w)*/
22604 rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22605 rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
22606 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22607 /* Check if OUI is 00:0F:AC (ieee80211) */
22608 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22609 {
22610 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22611 } else {
22612 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22613 }
22614 offset += 4;
22615
22616 return offset;
22617}
22618
22619/* 7.3.2.27 Extended Capabilities information element (127) */
22620static int
22621dissect_extended_capabilities_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
22622{
22623 int tag_len = tvb_reported_length(tvb);
22624 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
22625 int offset = 0;
22626 proto_item *ti_ex_cap;
22627 static int * const ieee80211_tag_extended_capabilities_byte1[] = {
22628 &hf_ieee80211_tag_extended_capabilities_b0,
22629 &hf_ieee80211_tag_extended_capabilities_b1,
22630 &hf_ieee80211_tag_extended_capabilities_b2,
22631 &hf_ieee80211_tag_extended_capabilities_b3,
22632 &hf_ieee80211_tag_extended_capabilities_b4,
22633 &hf_ieee80211_tag_extended_capabilities_b5,
22634 &hf_ieee80211_tag_extended_capabilities_b6,
22635 &hf_ieee80211_tag_extended_capabilities_b7,
22636 NULL((void*)0)
22637 };
22638 static int * const ieee80211_tag_extended_capabilities_byte2[] = {
22639 &hf_ieee80211_tag_extended_capabilities_b8,
22640 &hf_ieee80211_tag_extended_capabilities_b9,
22641 &hf_ieee80211_tag_extended_capabilities_b10,
22642 &hf_ieee80211_tag_extended_capabilities_b11,
22643 &hf_ieee80211_tag_extended_capabilities_b12,
22644 &hf_ieee80211_tag_extended_capabilities_b13,
22645 &hf_ieee80211_tag_extended_capabilities_b14,
22646 &hf_ieee80211_tag_extended_capabilities_b15,
22647 NULL((void*)0)
22648 };
22649 static int * const ieee80211_tag_extended_capabilities_byte3[] = {
22650 &hf_ieee80211_tag_extended_capabilities_b16,
22651 &hf_ieee80211_tag_extended_capabilities_b17,
22652 &hf_ieee80211_tag_extended_capabilities_b18,
22653 &hf_ieee80211_tag_extended_capabilities_b19,
22654 &hf_ieee80211_tag_extended_capabilities_b20,
22655 &hf_ieee80211_tag_extended_capabilities_b21,
22656 &hf_ieee80211_tag_extended_capabilities_b22,
22657 &hf_ieee80211_tag_extended_capabilities_b23,
22658 NULL((void*)0)
22659 };
22660 static int * const ieee80211_tag_extended_capabilities_byte4[] = {
22661 &hf_ieee80211_tag_extended_capabilities_b24,
22662 &hf_ieee80211_tag_extended_capabilities_b25,
22663 &hf_ieee80211_tag_extended_capabilities_b26,
22664 &hf_ieee80211_tag_extended_capabilities_b27,
22665 &hf_ieee80211_tag_extended_capabilities_b28,
22666 &hf_ieee80211_tag_extended_capabilities_b29,
22667 &hf_ieee80211_tag_extended_capabilities_b30,
22668 &hf_ieee80211_tag_extended_capabilities_b31,
22669 NULL((void*)0)
22670 };
22671 static int * const ieee80211_tag_extended_capabilities_byte5[] = {
22672 &hf_ieee80211_tag_extended_capabilities_b32,
22673 &hf_ieee80211_tag_extended_capabilities_b33,
22674 &hf_ieee80211_tag_extended_capabilities_b34,
22675 &hf_ieee80211_tag_extended_capabilities_b35,
22676 &hf_ieee80211_tag_extended_capabilities_b36,
22677 &hf_ieee80211_tag_extended_capabilities_b37,
22678 &hf_ieee80211_tag_extended_capabilities_b38,
22679 &hf_ieee80211_tag_extended_capabilities_b39,
22680 NULL((void*)0)
22681 };
22682 static int * const ieee80211_tag_extended_capabilities_byte6[] = {
22683 &hf_ieee80211_tag_extended_capabilities_b40,
22684 &hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
22685 &hf_ieee80211_tag_extended_capabilities_b44,
22686 &hf_ieee80211_tag_extended_capabilities_b45,
22687 &hf_ieee80211_tag_extended_capabilities_b46,
22688 &hf_ieee80211_tag_extended_capabilities_b47,
22689 NULL((void*)0)
22690 };
22691 static int * const ieee80211_tag_extended_capabilities_byte7[] = {
22692 &hf_ieee80211_tag_extended_capabilities_b48,
22693 &hf_ieee80211_tag_extended_capabilities_b49,
22694 &hf_ieee80211_tag_extended_capabilities_b50,
22695 &hf_ieee80211_tag_extended_capabilities_b51,
22696 &hf_ieee80211_tag_extended_capabilities_b52,
22697 &hf_ieee80211_tag_extended_capabilities_b53,
22698 &hf_ieee80211_tag_extended_capabilities_b54,
22699 &hf_ieee80211_tag_extended_capabilities_b55,
22700 NULL((void*)0)
22701 };
22702
22703 static int * const ieee80211_tag_extended_capabilities_byte8[] = {
22704 &hf_ieee80211_tag_extended_capabilities_b56,
22705 &hf_ieee80211_tag_extended_capabilities_b57,
22706 &hf_ieee80211_tag_extended_capabilities_b58,
22707 &hf_ieee80211_tag_extended_capabilities_b59,
22708 &hf_ieee80211_tag_extended_capabilities_b60,
22709 &hf_ieee80211_tag_extended_capabilities_b61,
22710 &hf_ieee80211_tag_extended_capabilities_b62,
22711 &hf_ieee80211_tag_extended_capabilities_b63,
22712 NULL((void*)0)
22713 };
22714
22715 static int * const ieee80211_tag_extended_capabilities_bytes89[] = {
22716 &hf_ieee80211_tag_extended_capabilities_b56_2,
22717 &hf_ieee80211_tag_extended_capabilities_b57_2,
22718 &hf_ieee80211_tag_extended_capabilities_b58_2,
22719 &hf_ieee80211_tag_extended_capabilities_b59_2,
22720 &hf_ieee80211_tag_extended_capabilities_b60_2,
22721 &hf_ieee80211_tag_extended_capabilities_b61_2,
22722 &hf_ieee80211_tag_extended_capabilities_b62_2,
22723 &hf_ieee80211_tag_extended_capabilities_max_num_msdus,
22724 &hf_ieee80211_tag_extended_capabilities_b65_2,
22725 &hf_ieee80211_tag_extended_capabilities_b66_2,
22726 &hf_ieee80211_tag_extended_capabilities_b67_2,
22727 &hf_ieee80211_tag_extended_capabilities_b68_2,
22728 &hf_ieee80211_tag_extended_capabilities_b69_2,
22729 &hf_ieee80211_tag_extended_capabilities_b70_2,
22730 &hf_ieee80211_tag_extended_capabilities_b71_2,
22731 NULL((void*)0)
22732 };
22733
22734 static int * const ieee80211_tag_extended_capabilities_byte10[] = {
22735 &hf_ieee80211_tag_extended_capabilities_b72,
22736 &hf_ieee80211_tag_extended_capabilities_b73,
22737 &hf_ieee80211_tag_extended_capabilities_b74,
22738 &hf_ieee80211_tag_extended_capabilities_b75,
22739 &hf_ieee80211_tag_extended_capabilities_b76,
22740 &hf_ieee80211_tag_extended_capabilities_b77,
22741 &hf_ieee80211_tag_extended_capabilities_b78,
22742 &hf_ieee80211_tag_extended_capabilities_b79,
22743 NULL((void*)0)
22744 };
22745
22746 static int * const ieee80211_tag_extended_capabilities_byte11[] = {
22747 &hf_ieee80211_tag_extended_capabilities_b80,
22748 &hf_ieee80211_tag_extended_capabilities_b81,
22749 &hf_ieee80211_tag_extended_capabilities_b82,
22750 &hf_ieee80211_tag_extended_capabilities_b83,
22751 &hf_ieee80211_tag_extended_capabilities_b84,
22752 &hf_ieee80211_tag_extended_capabilities_b85,
22753 &hf_ieee80211_tag_extended_capabilities_b86,
22754 &hf_ieee80211_tag_extended_capabilities_b87,
22755 NULL((void*)0)
22756 };
22757
22758 static int * const ieee80211_tag_extended_capabilities_byte12[] = {
22759 &hf_ieee80211_tag_extended_capabilities_b88,
22760 &hf_ieee80211_tag_extended_capabilities_b89,
22761 &hf_ieee80211_tag_extended_capabilities_b90,
22762 &hf_ieee80211_tag_extended_capabilities_b91,
22763 &hf_ieee80211_tag_extended_capabilities_b92,
22764 &hf_ieee80211_tag_extended_capabilities_b93,
22765 &hf_ieee80211_tag_extended_capabilities_b94,
22766 &hf_ieee80211_tag_extended_capabilities_b95,
22767 NULL((void*)0)
22768 };
22769
22770 static int * const ieee80211_tag_extended_capabilities_byte13[] = {
22771 &hf_ieee80211_tag_extended_capabilities_b96,
22772 &hf_ieee80211_tag_extended_capabilities_b97,
22773 &hf_ieee80211_tag_extended_capabilities_b98,
22774 &hf_ieee80211_tag_extended_capabilities_b99,
22775 &hf_ieee80211_tag_extended_capabilities_b100,
22776 &hf_ieee80211_tag_extended_capabilities_b101,
22777 &hf_ieee80211_tag_extended_capabilities_b102,
22778 &hf_ieee80211_tag_extended_capabilities_b103,
22779 NULL((void*)0)
22780 };
22781
22782 static int * const ieee80211_tag_extended_capabilities_byte14[] = {
22783 &hf_ieee80211_tag_extended_capabilities_b104,
22784 &hf_ieee80211_tag_extended_capabilities_b105,
22785 &hf_ieee80211_tag_extended_capabilities_reserved2,
22786 NULL((void*)0)
22787 };
22788
22789 if (tag_len < 1)
22790 {
22791 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);
22792 return 1;
22793 }
22794 proto_item_append_text(field_data->item_tag, " (%u octet%s)", tag_len, plurality(tag_len, "", "s")((tag_len) == 1 ? ("") : ("s")));
22795
22796 /* Extended Capability octet 1 */
22797 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22798 ett_tag_ex_cap1, ieee80211_tag_extended_capabilities_byte1,
22799 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22800 proto_item_append_text(ti_ex_cap, " (octet 1)");
22801 offset += 1;
22802
22803 /* Extended Capability octet 2 */
22804 if (offset >= tag_len) {
22805 return offset;
22806 }
22807 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22808 ett_tag_ex_cap2, ieee80211_tag_extended_capabilities_byte2,
22809 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22810 proto_item_append_text(ti_ex_cap, " (octet 2)");
22811 offset += 1;
22812
22813 /* Extended Capability octet 3 */
22814 if (offset >= tag_len) {
22815 return offset;
22816 }
22817 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22818 ett_tag_ex_cap3, ieee80211_tag_extended_capabilities_byte3,
22819 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22820 proto_item_append_text(ti_ex_cap, " (octet 3)");
22821 offset += 1;
22822
22823 /* Extended Capability octet 4 */
22824 if (offset >= tag_len) {
22825 return offset;
22826 }
22827 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22828 ett_tag_ex_cap4, ieee80211_tag_extended_capabilities_byte4,
22829 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22830 proto_item_append_text(ti_ex_cap, " (octet 4)");
22831 offset += 1;
22832
22833 /* Extended Capability octet 5 */
22834 if (offset >= tag_len) {
22835 return offset;
22836 }
22837 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22838 ett_tag_ex_cap5, ieee80211_tag_extended_capabilities_byte5,
22839 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22840 proto_item_append_text(ti_ex_cap, " (octet 5)");
22841 offset += 1;
22842
22843 /* Extended Capability octet 6 */
22844 if (offset >= tag_len) {
22845 return offset;
22846 }
22847
22848 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22849 ett_tag_ex_cap6, ieee80211_tag_extended_capabilities_byte6,
22850 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22851 proto_item_append_text(ti_ex_cap, " (octet 6)");
22852 offset += 1;
22853
22854
22855 /* Extended Capability octet 7 */
22856 if (offset >= tag_len) {
22857 return offset;
22858 }
22859 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22860 ett_tag_ex_cap7, ieee80211_tag_extended_capabilities_byte7,
22861 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22862 proto_item_append_text(ti_ex_cap, " (octet 7)");
22863 offset += 1;
22864
22865 /* Extended Capability octet 8 & 9 since two bits cross the boundary */
22866 if (offset >= tag_len) {
22867 return offset;
22868 }
22869
22870 /* If only the first of the two bytes is present, do the best we can */
22871 if (offset == tag_len - 1) {
22872 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22873 ett_tag_ex_cap8, ieee80211_tag_extended_capabilities_byte8,
22874 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22875 proto_item_append_text(ti_ex_cap, " (octet 8)");
22876 offset += 1;
22877 } else { /* Both bytes are there */
22878 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities_2,
22879 ett_tag_ex_cap89, ieee80211_tag_extended_capabilities_bytes89,
22880 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22881 proto_item_append_text(ti_ex_cap, " (octets 8 & 9)");
22882 offset += 2;
22883 }
22884
22885 if (offset >= tag_len) {
22886 return offset;
22887 }
22888
22889 /* Extended Capability octet 10 */
22890 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22891 ett_tag_ex_cap10, ieee80211_tag_extended_capabilities_byte10,
22892 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22893 proto_item_append_text(ti_ex_cap, " (octet 10)");
22894 offset += 1;
22895
22896 if (offset >= tag_len) {
22897 return offset;
22898 }
22899
22900 /* Extended Capability octet 11 */
22901#if 0
22902 /* Added for SAE support */
22903 sae_byte = tvb_get_uint8(tvb, offset);
22904 /*
22905 * If one of the SAE bits is set, assume we will see Password identifiers
22906 */
22907 if (sae_byte & 0x6) {
22908 bool_Bool sae_val = true1;
22909 uint64_t *key = NULL((void*)0);
22910
22911 /* Must be for the source of the request */
22912 key = (uint64_t *)wmem_new(wmem_file_scope(), uint64_t)((uint64_t*)wmem_alloc((wmem_file_scope()), sizeof(uint64_t))
)
;
22913 *key = *(uint64_t *)pinfo->src.data;
22914 wmem_map_insert(sae_prop_hash, key, GINT_TO_POINTER(sae_val)((gpointer) (glong) (sae_val)));
22915 }
22916#endif
22917 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
22918 ett_tag_ex_cap11, ieee80211_tag_extended_capabilities_byte11,
22919 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22920 proto_item_append_text(ti_ex_cap, " (octet 11)");
22921 offset += 1;
22922
22923 if (offset >= tag_len) {
22924 return offset;
22925 }
22926
22927 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
22928 hf_ieee80211_tag_extended_capabilities,
22929 ett_tag_ex_cap12,
22930 ieee80211_tag_extended_capabilities_byte12,
22931 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22932 proto_item_append_text(ti_ex_cap, " (octet 12)");
22933 offset += 1;
22934
22935 if (offset >= tag_len) {
22936 return offset;
22937 }
22938
22939 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
22940 hf_ieee80211_tag_extended_capabilities,
22941 ett_tag_ex_cap13,
22942 ieee80211_tag_extended_capabilities_byte13,
22943 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22944 proto_item_append_text(ti_ex_cap, " (octet 13)");
22945 offset += 1;
22946
22947 if (offset >= tag_len) {
22948 return offset;
22949 }
22950
22951 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
22952 hf_ieee80211_tag_extended_capabilities,
22953 ett_tag_ex_cap14,
22954 ieee80211_tag_extended_capabilities_byte14,
22955 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22956 proto_item_append_text(ti_ex_cap, " (octet 14)");
22957 offset += 1;
22958
22959 return offset;
22960}
22961
22962static int
22963dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset)
22964{
22965 proto_item *ti;
22966 proto_tree *mcs_tree;
22967 static int * const ieee80211_vht_mcsset_rx_max_mcs[] = {
22968 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
22969 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
22970 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
22971 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
22972 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
22973 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
22974 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
22975 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
22976 NULL((void*)0)
22977 };
22978 static int * const ieee80211_vht_mcsset_tx_max_mcs[] = {
22979 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
22980 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
22981 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
22982 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
22983 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
22984 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
22985 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
22986 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
22987 NULL((void*)0)
22988 };
22989
22990 /* 8 byte Supported MCS set */
22991 ti = proto_tree_add_item(tree, hf_ieee80211_vht_mcsset, tvb, offset, 8, ENC_NA0x00000000);
22992
22993 mcs_tree = proto_item_add_subtree(ti, ett_vht_mcsset_tree);
22994
22995 /* B0 - B15 */
22996 proto_tree_add_bitmask_with_flags(mcs_tree, tvb, offset, hf_ieee80211_vht_mcsset_rx_mcs_map,
22997 ett_vht_rx_mcsbit_tree, ieee80211_vht_mcsset_rx_max_mcs,
22998 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22999 offset += 2;
23000
23001 /* B16 - B28 13 bits*/
23002 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23003
23004 /* B29 - B31 2 Max NSTS, total*/
23005
23006 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_max_nsts_total, tvb, offset,
23007 2, ENC_LITTLE_ENDIAN0x80000000);
23008 offset += 2;
23009
23010 /* B32 - B47 */
23011 proto_tree_add_bitmask_with_flags(mcs_tree, tvb, offset, hf_ieee80211_vht_mcsset_tx_mcs_map,
23012 ett_vht_tx_mcsbit_tree, ieee80211_vht_mcsset_tx_max_mcs,
23013 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23014 offset += 2;
23015 /* B48 - B60 13 bits */
23016 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23017 /* B61 */
23018 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_extended_nss_bw_capable,
23019 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23020
23021 /* B62 - B63 2 reserved bits*/
23022 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_reserved, tvb, offset, 2,
23023 ENC_LITTLE_ENDIAN0x80000000);offset += 2;
23024
23025 return offset;
23026}
23027
23028static int
23029dissect_vht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23030{
23031 int tag_len = tvb_reported_length(tvb);
23032 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23033 int offset = 0;
23034 static int * const ieee80211_vht_caps[] = {
23035 &hf_ieee80211_vht_max_mpdu_length,
23036 &hf_ieee80211_vht_supported_chan_width_set,
23037 &hf_ieee80211_vht_rx_ldpc,
23038 &hf_ieee80211_vht_short_gi_for_80,
23039 &hf_ieee80211_vht_short_gi_for_160,
23040 &hf_ieee80211_vht_tx_stbc,
23041 /* End of first byte */
23042 &hf_ieee80211_vht_rx_stbc,
23043 &hf_ieee80211_vht_su_beamformer_cap,
23044 &hf_ieee80211_vht_su_beamformee_cap,
23045 &hf_ieee80211_vht_beamformer_antennas,
23046 /* End of second byte */
23047 &hf_ieee80211_vht_sounding_dimensions,
23048 &hf_ieee80211_vht_mu_beamformer_cap,
23049 &hf_ieee80211_vht_mu_beamformee_cap,
23050 &hf_ieee80211_vht_txop_ps,
23051 &hf_ieee80211_vht_var_htc_field,
23052 &hf_ieee80211_vht_max_ampdu,
23053 &hf_ieee80211_vht_link_adaptation_cap,
23054 &hf_ieee80211_vht_rx_pattern,
23055 &hf_ieee80211_vht_tx_pattern,
23056 &hf_ieee80211_vht_ext_nss_bw_support,
23057 NULL((void*)0)
23058 };
23059
23060 if (tag_len != 12) {
23061 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23062 "VHT Capabilities IE length %u wrong, must be = 12", tag_len);
23063 return 1;
23064 }
23065
23066 /* 4 byte VHT Capabilities Info*/
23067 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_cap,
23068 ett_vht_cap_tree, ieee80211_vht_caps,
23069 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23070 offset += 4;
23071
23072 /* 8 byte MCS set */
23073 offset = dissect_vht_mcs_set(tree, tvb, offset);
23074
23075 return offset;
23076}
23077
23078static int
23079dissect_vht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23080{
23081 int tag_len = tvb_reported_length(tvb);
23082 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23083 int offset = 0;
23084 proto_item *op_item;
23085 proto_tree *op_tree;
23086 static int * const ieee80211_vht_op_max_basic_mcs[] = {
23087 &hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
23088 &hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
23089 &hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
23090 &hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
23091 &hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
23092 &hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
23093 &hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
23094 &hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
23095 NULL((void*)0)
23096 };
23097
23098 if (tag_len != 5) {
23099 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23100 "VHT Operation IE length %u wrong, must be = 5", tag_len);
23101 return 1;
23102 }
23103
23104 /* 3 byte VHT Operation Info*/
23105 op_item = proto_tree_add_item(tree, hf_ieee80211_vht_op, tvb, offset, 3, ENC_NA0x00000000);
23106 op_tree = proto_item_add_subtree(op_item, ett_vht_op_tree);
23107 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23108 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center0, tvb, offset+1, 1, ENC_LITTLE_ENDIAN0x80000000);
23109 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center1, tvb, offset+2, 1, ENC_LITTLE_ENDIAN0x80000000);
23110
23111 offset += 3;
23112 /* VHT Basic MCS Set */
23113 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_op_basic_mcs_map,
23114 ett_vht_basic_mcsbit_tree, ieee80211_vht_op_max_basic_mcs,
23115 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23116 offset += 2;
23117
23118 return offset;
23119}
23120
23121static int
23122dissect_vht_tx_pwr_envelope(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23123{
23124 int tag_len = tvb_reported_length(tvb);
23125 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23126 int offset = 0;
23127 proto_item *tx_pwr_item, *ti, *unit_ti;
23128 proto_tree *tx_pwr_info_tree;
23129 uint8_t opt_ie_cnt=0;
23130 uint8_t i;
23131 unsigned mtpi;
23132
23133 if (tag_len < 2 || tag_len > 18) {
23134 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23135 "VHT TX PWR Envelope IE length %u wrong, must be >= 2 and <= 18", tag_len);
23136 return 1;
23137 }
23138
23139 mtpi = (tvb_get_uint8(tvb, offset) >> 3) & 0x7;
23140 tx_pwr_item = proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_info, tvb, offset, 1, ENC_NA0x00000000);
23141 tx_pwr_info_tree = proto_item_add_subtree(tx_pwr_item, ett_vht_tpe_info_tree);
23142
23143 ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23144 unit_ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_unit, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23145 proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_category, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23146
23147 opt_ie_cnt = tvb_get_uint8(tvb, offset) & 0x07;
23148
23149 offset += 1;
23150
23151 switch (mtpi) {
23152
23153 case 1:
23154 case 3:
23155 case 5:
23156 /* Is it a power spectral density? */
23157 /* Handle the zero case */
23158 if (opt_ie_cnt == 0) {
23159 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_any_bw_psd, tvb, offset,
23160 1, ENC_NA0x00000000);
23161 offset += 1;
23162 return offset;
23163 }
23164 switch (opt_ie_cnt) {
23165 case 0:
23166 opt_ie_cnt = 0;
23167 break;
23168 case 1:
23169 opt_ie_cnt = 1;
23170 break;
23171 case 2:
23172 opt_ie_cnt = 2;
23173 break;
23174 case 3:
23175 opt_ie_cnt = 4;
23176 break;
23177 case 4:
23178 opt_ie_cnt = 8;
23179 break;
23180 default:
23181 opt_ie_cnt = 1; /* Add an expert info here ... */
23182 break;
23183 }
23184 for (i = 0; i < opt_ie_cnt; i++) {
23185 proto_tree *psd_tree;
23186 psd_tree = proto_tree_add_subtree_format(tree, tvb, offset, 1,
23187 ett_tpe_psd, NULL((void*)0),
23188 "20 MHz Channel #%u", i);
23189 proto_tree_add_item(psd_tree, hf_ieee80211_vht_tpe_psd,
23190 tvb, offset, 1, ENC_NA0x00000000);
23191 offset += 1;
23192 }
23193 /* Extension Max Tx Power */
23194 if (offset < tag_len) {
23195 proto_tree *psd_tree;
23196 uint8_t j;
23197 uint8_t ext_cnt = tvb_get_uint8(tvb, offset) & 0x0f;
23198
23199 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_ext_count, tvb, offset, 1, ENC_NA0x00000000);
23200 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_ext_reserved, tvb, offset, 1, ENC_NA0x00000000);
23201 offset += 1;
23202 for (j = 0; j < ext_cnt; j++) {
23203 psd_tree = proto_tree_add_subtree_format(tree, tvb, offset, 1,
23204 ett_tpe_psd, NULL((void*)0),
23205 "20 MHz Channel #%u", i+j);
23206 proto_tree_add_item(psd_tree, hf_ieee80211_vht_tpe_psd,
23207 tvb, offset, 1, ENC_NA0x00000000);
23208 offset += 1;
23209 }
23210 }
23211 break;
23212
23213 case 0:
23214 case 2:
23215 case 4:
23216 /* Power Constraint info is mandatory only for 20MHz, others are optional*/
23217 /* Power is expressed in terms of 0.5dBm from -64 to 63 and is encoded
23218 * as 8-bit 2's complement */
23219 for (i = 0; i <= opt_ie_cnt; i++) {
23220 switch(i) {
23221 case 0:
23222 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_20, tvb, offset, 1, ENC_NA0x00000000);
23223 offset += 1;
23224 break;
23225 case 1:
23226 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_40, tvb, offset, 1, ENC_NA0x00000000);
23227 offset += 1;
23228 break;
23229 case 2:
23230 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_80, tvb, offset, 1, ENC_NA0x00000000);
23231 offset += 1;
23232 break;
23233 case 3:
23234 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_160, tvb, offset, 1, ENC_NA0x00000000);
23235 offset += 1;
23236 break;
23237 default:
23238 expert_add_info(pinfo, ti, &ei_ieee80211_vht_tpe_pwr_info_count);
23239 offset += 1;
23240 break;
23241 }
23242 }
23243 /* Extension Max Tx Power */
23244 if (offset < tag_len) {
23245 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_320, tvb, offset, 1, ENC_NA0x00000000);
23246 offset += 1;
23247 }
23248 break;
23249 default:
23250 /* Reserved in 802.11ax-2021. 802.11be? */
23251 expert_add_info(pinfo, unit_ti, &ei_ieee80211_vht_tpe_pwr_info_unit);
23252 }
23253
23254 return offset;
23255}
23256
23257static int
23258dissect_mobility_domain(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23259{
23260 int tag_len = tvb_reported_length(tvb);
23261 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23262 int offset = 0;
23263
23264 if (field_data->sanity_check != NULL((void*)0)) {
23265 field_data->sanity_check->association_has_mobility_domain_element = true1;
23266 }
23267
23268 if (tag_len < 3) {
23269 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23270 "MDIE content length must be at least 3 bytes");
23271 return 1;
23272 }
23273
23274 save_proto_data(tvb, pinfo, offset, 2, MDID_KEY);
23275 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_mdid,
23276 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23277 proto_tree_add_bitmask_with_flags(tree, tvb, offset + 2,
23278 hf_ieee80211_tag_mobility_domain_ft_capab,
23279 ett_tag_mobility_domain_ft_capab_tree,
23280 ieee80211_tag_mobility_domain_ft_capab_fields,
23281 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23282 return tvb_captured_length(tvb);
23283}
23284
23285static uint16_t get_mic_len_owe(uint16_t group) {
23286 switch(group) {
23287 // FFC, len(p) <= 2048
23288 case 1:
23289 case 2:
23290 case 5:
23291 case 14:
23292 case 22:
23293 case 23:
23294 case 24:
23295 // ECC, len(p) <= 256
23296 case 19:
23297 case 25:
23298 case 26:
23299 case 27:
23300 case 28:
23301 case 31:
23302 // HMAC-SHA-256
23303 return 16;
23304
23305 // FFC, 2048 < len(p) <= 3072
23306 case 15:
23307 // ECC, 256 < len(p) <= 384
23308 case 20:
23309 case 29:
23310 // HMAC-SHA-384
23311 return 24;
23312
23313 // FCC, 3072 < len(p)
23314 case 16:
23315 case 17:
23316 case 18:
23317 // ECC, 384 < len(p)
23318 case 21:
23319 case 30:
23320 case 32:
23321 // HMAC-SHA-512
23322 return 32;
23323
23324 default:
23325 return 16;
23326 }
23327}
23328
23329static uint16_t get_mic_len(uint32_t akm_suite) {
23330 switch(akm_suite) {
23331 case AKMS_WPA_SHA384_SUITEB0x000FAC0C:
23332 case AKMS_FT_IEEE802_1X_SHA3840x000FAC0D:
23333 case AKMS_FT_FILS_SHA3840x000FAC11:
23334 // HMAC-SHA-384
23335 return 24;
23336
23337 case AKMS_FILS_SHA2560x000FAC0E:
23338 case AKMS_FILS_SHA3840x000FAC0F:
23339 // AES-SIV-256 and AES-SIV-512
23340 return 0;
23341
23342 default:
23343 // HMAC-SHA-1-128, AES-128-CMAC, HMAC-SHA-256, AKMS_FT_FILS_SHA256
23344 return 16;
23345 }
23346}
23347
23348static conversation_t *find_wlan_conversation_pinfo(packet_info *pinfo)
23349{
23350 /* HACK to avoid collision with conversation in EAP dissector */
23351 pinfo->srcport = GPOINTER_TO_UINT(((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
23352 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
;
23353 pinfo->destport = pinfo->srcport;
23354 return find_conversation_pinfo(pinfo, 0);
23355}
23356
23357static bool_Bool determine_nonce_is_set(tvbuff_t *tvb) {
23358 int offset;
23359
23360 for (offset = 12; offset < 12 + 32; offset++)
23361 if (tvb_get_uint8(tvb, offset))
23362 return true1;
23363 return false0;
23364}
23365
23366static uint16_t determine_mic_len(packet_info *pinfo, bool_Bool assoc_frame,
23367 bool_Bool *defaulted) {
23368 uint16_t eapol_key_mic_len = 16; /* Default MIC length */
23369 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
23370 ieee80211_conversation_data_t *conversation_data = NULL((void*)0);
23371 ieee80211_packet_data_t *packet_data =
23372 (ieee80211_packet_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY);
23373 if (conversation) {
23374 conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
23375 }
23376
23377 if (wlan_key_mic_len_enable) {
23378 /* 1st - Use user overridden MIC length setting */
23379 eapol_key_mic_len = wlan_key_mic_len;
23380 }
23381 else if (!assoc_frame && conversation_data &&
23382 conversation_data->discovered_key_mic_len) {
23383 /*
23384 * 2nd - Use the discovered key mic len.
23385 * We will only set the discovered key mic len if it was defaulted
23386 * in an earlier call to determine_mic_len, so it should be tested second.
23387 */
23388 eapol_key_mic_len = conversation_data->discovered_key_mic_len;
23389 }
23390 else if (!assoc_frame && conversation_data &&
23391 conversation_data->last_akm_suite_set) {
23392 /* 3rd - Use AKMS negotiated during association to determine MIC length */
23393 if (conversation_data->last_akm_suite == AKMS_OWE0x000FAC12) {
23394 /* For OWE the length of MIC depends on the selected group */
23395 eapol_key_mic_len = get_mic_len_owe(conversation_data->owe_group);
23396 } else if (conversation_data->last_akm_suite == AKMS_SAE_GROUP_DEPEND0x000FAC18 ||
23397 conversation_data->last_akm_suite == AKMS_FT_SAE_GROUP_DEPEND0x000FAC19) {
23398 *defaulted = true1;
23399 }
23400 else {
23401 eapol_key_mic_len = get_mic_len(conversation_data->last_akm_suite);
23402 }
23403 }
23404 else if (packet_data && packet_data->last_akm_suite_set) {
23405 /* 3rd - Use AKMS from current packet to determine MIC length */
23406 if (packet_data->last_akm_suite == AKMS_OWE0x000FAC12) {
23407 /* For OWE the length of MIC depends on the selected group */
23408 eapol_key_mic_len = get_mic_len_owe(packet_data->owe_group);
23409 } else if (packet_data->last_akm_suite == AKMS_SAE_GROUP_DEPEND0x000FAC18 ||
23410 packet_data->last_akm_suite == AKMS_FT_SAE_GROUP_DEPEND0x000FAC19) {
23411 *defaulted = true1;
23412 }
23413 else {
23414 eapol_key_mic_len = get_mic_len(packet_data->last_akm_suite);
23415 }
23416 } else {
23417 /*
23418 * We used the default so say so.
23419 */
23420 *defaulted = true1;
23421 }
23422 return eapol_key_mic_len;
23423}
23424
23425static int
23426dissect_fast_bss_transition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23427{
23428 int tag_len = tvb_reported_length(tvb);
23429 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23430 bool_Bool assoc_frame = field_data->sanity_check != NULL((void*)0);
23431 int offset = 0;
23432 if (tag_len < 82) {
23433 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23434 "FTIE content length must be at least 82 bytes");
23435 return 1;
23436 }
23437
23438 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ft_mic_control,
23439 ett_tag_ft_mic_control_tree,
23440 ieee80211_tag_ft_mic_control_fields,
23441 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23442 offset += 2;
23443
23444 bool_Bool defaulted_mic_len = false0;
23445 int mic_len = determine_mic_len(pinfo, assoc_frame, &defaulted_mic_len);
23446 save_proto_data(tvb, pinfo, offset, mic_len, FTE_MIC_KEY);
23447 save_proto_data_value(pinfo, mic_len, FTE_MIC_LEN_KEY);
23448 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic,
23449 tvb, offset, mic_len, ENC_NA0x00000000);
23450 offset += mic_len;
23451
23452 save_proto_data(tvb, pinfo, offset, 32, FTE_ANONCE_KEY);
23453 proto_tree_add_item(tree, hf_ieee80211_tag_ft_anonce,
23454 tvb, offset, 32, ENC_NA0x00000000);
23455 offset += 32;
23456
23457 save_proto_data(tvb, pinfo, offset, 32, FTE_SNONCE_KEY);
23458 proto_tree_add_item(tree, hf_ieee80211_tag_ft_snonce,
23459 tvb, offset, 32, ENC_NA0x00000000);
23460 offset += 32;
23461
23462 while (offset + 2 <= tag_len) {
23463 uint8_t id, len;
23464 int s_end;
23465 proto_item *ti;
23466 proto_tree *subtree;
23467 const char *subtree_name;
23468 proto_keydata_t *proto;
23469
23470 id = tvb_get_uint8(tvb, offset);
23471 len = tvb_get_uint8(tvb, offset + 1);
23472 subtree_name = val_to_str_const(id, ft_subelem_id_vals, "Unknown");
23473 subtree = proto_tree_add_subtree_format(tree, tvb, offset, len + 2,
23474 ett_tag_ft_subelem_tree, NULL((void*)0),
23475 "Subelement: %s", subtree_name);
23476
23477 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_id,
23478 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23479 offset += 1;
23480
23481 ti = proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_len,
23482 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23483 offset += 1;
23484
23485 if (offset + len > tag_len) {
23486 expert_add_info_format(pinfo, ti, &ei_ieee80211_tag_length,
23487 "FTIE subelement length is too large for the FTIE content length");
23488 return offset;
23489 }
23490
23491 s_end = offset + len;
23492 switch (id) {
23493 case 1:
23494 save_proto_data(tvb, pinfo, offset, len, FTE_R1KH_ID_KEY);
23495 save_proto_data_value(pinfo, len, FTE_R1KH_ID_LEN_KEY);
23496 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_r1kh_id,
23497 tvb, offset, len, ENC_NA0x00000000);
23498 break;
23499 case 2:
23500 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_info,
23501 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23502 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_id,
23503 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23504 offset += 2;
23505 if (offset > s_end)
23506 break;
23507 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset), GTK_SUBELEM_KEY_LEN_KEY);
23508 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_length,
23509 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23510 offset += 1;
23511 if (offset > s_end)
23512 break;
23513 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_rsc,
23514 tvb, offset, 8, ENC_NA0x00000000);
23515 offset += 8;
23516 if (offset > s_end)
23517 break;
23518 save_proto_data_value(pinfo, s_end - offset, GTK_LEN_KEY);
23519 save_proto_data(tvb, pinfo, offset, s_end - offset, GTK_KEY);
23520
23521 proto = (proto_keydata_t *)
23522 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_GTK_KEY);
23523 if (proto) {
23524 unsigned keydata_len = proto->keydata_len;
23525 tvbuff_t *next_tvb = tvb_new_child_real_data(tvb, proto->keydata,
23526 keydata_len, keydata_len);
23527 add_new_data_source(pinfo, next_tvb, "Decrypted GTK");
23528 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key,
23529 next_tvb, 0, keydata_len, ENC_NA0x00000000);
23530 add_ptk_analysis(tvb, subtree, &proto->used_key);
23531 } else {
23532 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_encrypted,
23533 tvb, offset, s_end - offset, ENC_NA0x00000000);
23534 }
23535 break;
23536 case 3:
23537 save_proto_data(tvb, pinfo, offset, len, FTE_R0KH_ID_KEY);
23538 save_proto_data_value(pinfo, len, FTE_R0KH_ID_LEN_KEY);
23539 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_r0kh_id,
23540 tvb, offset, len, ENC_NA0x00000000);
23541 break;
23542 case 4:
23543 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key_id,
23544 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23545 offset += 2;
23546 if (offset > s_end)
23547 break;
23548 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_ipn,
23549 tvb, offset, 6, ENC_NA0x00000000);
23550 offset += 6;
23551 if (offset > s_end)
23552 break;
23553 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key_length,
23554 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23555 offset += 1;
23556 if (offset > s_end)
23557 break;
23558 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key,
23559 tvb, offset, 24, ENC_NA0x00000000);
23560 break;
23561 case 5:
23562 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_op_class,
23563 tvb, offset, 1, ENC_NA0x00000000);
23564 offset += 1;
23565 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_prim_chan_num,
23566 tvb, offset, 1, ENC_NA0x00000000);
23567 offset += 1;
23568 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_freq_seg_1,
23569 tvb, offset, 1, ENC_NA0x00000000);
23570 offset += 1;
23571 if (offset >= s_end)
23572 break;
23573 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_op_class,
23574 tvb, offset, 1, ENC_NA0x00000000);
23575 offset += 1;
23576 if (offset >= s_end)
23577 break;
23578 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num,
23579 tvb, offset, 1, ENC_NA0x00000000);
23580 offset += 1;
23581 if (offset >= s_end)
23582 break;
23583 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1,
23584 tvb, offset, 1, ENC_NA0x00000000);
23585 break;
23586 case 6:
23587 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key_id,
23588 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23589 offset += 2;
23590 if (offset > s_end)
23591 break;
23592 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_bipn,
23593 tvb, offset, 6, ENC_NA0x00000000);
23594 offset += 6;
23595 if (offset > s_end)
23596 break;
23597 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key_length,
23598 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23599 offset += 1;
23600 if (offset > s_end)
23601 break;
23602 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key,
23603 tvb, offset, s_end - offset, ENC_NA0x00000000);
23604 break;
23605 case 8: /* MLO GTK */
23606 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info,
23607 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23608 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id,
23609 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23610 offset += 2;
23611 if (offset > s_end)
23612 break;
23613 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info,
23614 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23615 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id,
23616 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23617 offset += 1;
23618 if (offset > s_end)
23619 break;
23620 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length,
23621 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23622 offset += 1;
23623 if (offset > s_end)
23624 break;
23625 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc,
23626 tvb, offset, 8, ENC_NA0x00000000);
23627 offset += 8;
23628 if (offset > s_end)
23629 break;
23630 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key,
23631 tvb, offset, s_end - offset, ENC_NA0x00000000);
23632 break;
23633 case 9: /* MLO IGTK */
23634 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id,
23635 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23636 offset += 2;
23637 if (offset > s_end)
23638 break;
23639 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn,
23640 tvb, offset, 6, ENC_NA0x00000000);
23641 offset += 6;
23642 if (offset > s_end)
23643 break;
23644 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info,
23645 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23646 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id,
23647 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23648 offset += 1;
23649 if (offset > s_end)
23650 break;
23651 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length,
23652 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23653 offset += 1;
23654 if (offset > s_end)
23655 break;
23656 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key,
23657 tvb, offset, s_end - offset, ENC_NA0x00000000);
23658 break;
23659 case 10: /* MLO BIGTK */
23660 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id,
23661 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23662 offset += 2;
23663 if (offset > s_end)
23664 break;
23665 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_bipn,
23666 tvb, offset, 6, ENC_NA0x00000000);
23667 offset += 6;
23668 if (offset > s_end)
23669 break;
23670 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info,
23671 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23672 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id,
23673 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23674 offset += 1;
23675 if (offset > s_end)
23676 break;
23677 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length,
23678 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23679 offset += 1;
23680 if (offset > s_end)
23681 break;
23682 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key,
23683 tvb, offset, s_end - offset, ENC_NA0x00000000);
23684 break;
23685 default:
23686 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_data,
23687 tvb, offset, len, ENC_NA0x00000000);
23688 break;
23689 }
23690 offset = s_end;
23691 }
23692
23693 return tvb_captured_length(tvb);
23694}
23695
23696static int
23697dissect_mmie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23698{
23699 int tag_len = tvb_reported_length(tvb);
23700 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23701 int offset = 0;
23702 int mic_len = 8;
23703
23704 if (!(tag_len == 16 || tag_len == 24)) {
23705 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23706 "MMIE content length must be 16 or 24 bytes");
23707 return 1;
23708 }
23709
23710 if (tag_len == 24) {
23711 mic_len = 16;
23712 }
23713 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_keyid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23714 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_ipn, tvb, offset + 2, 6,
23715 ENC_LITTLE_ENDIAN0x80000000);
23716 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_mic, tvb, offset + 8, mic_len,
23717 ENC_NA0x00000000);
23718 return tvb_captured_length(tvb);
23719}
23720
23721static int
23722ieee80211_tag_dmg_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data);
23723
23724static int
23725dissect_no_bssid_capability(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data)
23726{
23727 int tag_len = tvb_reported_length(tvb);
23728 int offset = 0;
23729
23730 static int * const ieee80211_tag_no_bssid_capability_dmg_bss_control[] = {
23731 &hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type,
23732 &hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved,
23733 NULL((void*)0)
23734 };
23735
23736 add_ff_cap_info(tree, tvb, pinfo, offset);
23737 offset += 2;
23738 tag_len -= 2;
23739
23740 /* On nontransmitted BSSID, there is only DMG Capability Info */
23741 if (tag_len) {
23742 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_no_bssid_capability_dmg_bss_control,
23743 ett_tag_no_bssid_capability_dmg_bss_control_tree,
23744 ieee80211_tag_no_bssid_capability_dmg_bss_control,
23745 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23746 /* offset += 1; */
23747
23748 ieee80211_tag_dmg_capabilities(tvb, pinfo, tree, data);
23749 }
23750
23751 return tvb_captured_length(tvb);
23752}
23753
23754static int
23755dissect_ssid_list(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
23756{
23757 int tag_len = tvb_reported_length(tvb);
23758 int offset = 0;
23759 proto_tree *entry;
23760 bool_Bool first = true1;
23761
23762 while (offset + 1 <= tag_len) {
23763 uint8_t len = tvb_get_uint8(tvb, offset + 1);
23764 char *str;
23765
23766 if (offset + 2 + len > tag_len)
23767 break;
23768
23769 str = tvb_format_text(pinfo->pool, tvb, offset + 2, len);
23770 proto_item_append_text(tree, "%c %s", (first ? ':' : ','), str);
23771 first = false0;
23772 entry = proto_tree_add_subtree_format(tree, tvb, offset, 2 + len, ett_ssid_list, NULL((void*)0), "SSID: %s", str);
23773 proto_tree_add_item(entry, hf_ieee80211_tag_number, tvb, offset, 1,
23774 ENC_LITTLE_ENDIAN0x80000000);
23775 offset++;
23776 proto_tree_add_uint(entry, hf_ieee80211_tag_length, tvb, offset, 1, len);
23777 offset++;
23778 /* XXX: IEEE 802.11-2020 seems to say that these SSIDs are also affected
23779 * by the UTF-8 Encoding bit in the Extended Capabilities element
23780 * (though at least SSID List comes after Extended Capabilities).
23781 */
23782 proto_tree_add_item(entry, hf_ieee80211_tag_ssid, tvb, offset, len,
23783 ENC_NA0x00000000);
23784 offset += len;
23785 }
23786
23787 return tvb_captured_length(tvb);
23788}
23789
23790static int
23791dissect_multiple_bssid_index(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
23792{
23793 int tag_len = tvb_reported_length(tvb);
23794 int offset = 0;
23795
23796 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_bssid_index, tvb, offset, 1, ENC_NA0x00000000);
23797 offset += 1;
23798 tag_len -= 1;
23799
23800 if (tag_len) {
23801 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_dtim_period, tvb, offset, 1, ENC_NA0x00000000);
23802 offset += 1;
23803
23804 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_dtim_count, tvb, offset, 1, ENC_NA0x00000000);
23805 offset += 1;
23806 }
23807
23808 return offset;
23809}
23810
23811static int
23812dissect_link_identifier(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23813{
23814 int tag_len = tvb_reported_length(tvb);
23815 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23816 int offset = 0;
23817
23818 if (tag_len < 18) {
23819 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23820 "Link Identifier content length must be at least "
23821 "18 bytes");
23822 return tvb_captured_length(tvb);
23823 }
23824
23825 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_bssid, tvb,
23826 offset, 6, ENC_NA0x00000000);
23827 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_init_sta, tvb,
23828 offset + 6, 6, ENC_NA0x00000000);
23829 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_resp_sta, tvb,
23830 offset + 12, 6, ENC_NA0x00000000);
23831 return tvb_captured_length(tvb);
23832}
23833
23834static int
23835dissect_wakeup_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23836{
23837 int tag_len = tvb_reported_length(tvb);
23838 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23839 int offset = 0;
23840
23841 if (tag_len < 18) {
23842 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23843 "Wakeup Schedule content length must be at least "
23844 "18 bytes");
23845 return tvb_captured_length(tvb);
23846 }
23847
23848 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_offset, tvb,
23849 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
23850 offset += 4;
23851
23852 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_interval, tvb,
23853 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
23854 offset += 4;
23855
23856 proto_tree_add_item(tree,
23857 hf_ieee80211_tag_wakeup_schedule_awake_window_slots, tvb,
23858 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
23859 offset += 4;
23860
23861 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
23862 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
23863 offset += 4;
23864
23865 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_idle_count, tvb,
23866 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23867 return tvb_captured_length(tvb);
23868}
23869
23870static int
23871dissect_channel_switch_timing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23872{
23873 int tag_len = tvb_reported_length(tvb);
23874 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23875 int offset = 0;
23876
23877 if (tag_len < 4) {
23878 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23879 "Channel Switch Timing content length must be at "
23880 "least 4 bytes");
23881 return tvb_captured_length(tvb);
23882 }
23883
23884 proto_tree_add_item(tree, hf_ieee80211_tag_channel_switch_timing_switch_time,
23885 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23886 offset += 2;
23887
23888 proto_tree_add_item(tree,
23889 hf_ieee80211_tag_channel_switch_timing_switch_timeout,
23890 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23891 return tvb_captured_length(tvb);
23892}
23893
23894static int
23895dissect_pti_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23896{
23897 int tag_len = tvb_reported_length(tvb);
23898 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23899 int offset = 0;
23900
23901 if (tag_len < 3) {
23902 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "PTI Control content length must be at least 3 bytes");
23903 return tvb_captured_length(tvb);
23904 }
23905
23906 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_tid, tvb,
23907 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23908 offset += 1;
23909
23910 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_sequence_control, tvb,
23911 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23912 return tvb_captured_length(tvb);
23913}
23914
23915static int
23916dissect_pu_buffer_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23917{
23918 int tag_len = tvb_reported_length(tvb);
23919 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23920 int offset = 0;
23921 static int * const ieee80211_pu_buffer_status[] = {
23922 &hf_ieee80211_tag_pu_buffer_status_ac_bk,
23923 &hf_ieee80211_tag_pu_buffer_status_ac_be,
23924 &hf_ieee80211_tag_pu_buffer_status_ac_vi,
23925 &hf_ieee80211_tag_pu_buffer_status_ac_vo,
23926 NULL((void*)0)
23927 };
23928
23929 if (tag_len < 1) {
23930 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");
23931 return tvb_captured_length(tvb);
23932 }
23933
23934 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_pu_buffer_status, ENC_LITTLE_ENDIAN0x80000000);
23935 return tvb_captured_length(tvb);
23936}
23937
23938static int
23939dissect_timeout_interval(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
23940{
23941 int tag_len = tvb_reported_length(tvb);
23942 int offset = 0;
23943 proto_item *pi;
23944
23945 pi = proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_type, tvb,
23946 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23947 if (tag_len < 5) {
23948 expert_add_info_format(pinfo, pi, &ei_ieee80211_tag_length,
23949 "Timeout Interval content length must be at least "
23950 "5 bytes");
23951 return 1;
23952 }
23953
23954 proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_value, tvb,
23955 offset + 1, 4, ENC_LITTLE_ENDIAN0x80000000);
23956 return tvb_captured_length(tvb);
23957}
23958
23959static int
23960dissect_ric_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23961{
23962 int tag_len = tvb_reported_length(tvb);
23963 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23964 int offset = 0;
23965 proto_tree *sub_tree;
23966 uint8_t desc_cnt = 0;
23967 uint32_t next_ie;
23968 int offset_r = 0;
23969 const uint8_t ids[] = { TAG_RIC_DESCRIPTOR75 };
23970
23971 if (tag_len != 4) {
23972 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23973 "RIC Data Length must be 4 bytes");
23974 return 0;
23975 }
23976
23977 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_id, tvb,
23978 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23979 offset += 1;
23980
23981 desc_cnt = tvb_get_uint8(tvb, offset);
23982 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_desc_cnt, tvb,
23983 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23984 offset += 1;
23985
23986 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_status_code, tvb,
23987 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23988 offset += 2;
23989
23990 /* Our Design is such that all the Resource request IE's part of the RIC
23991 * must be in the sub tree of RIC for better readability
23992 * Even omnipeek does the same way.
23993 */
23994 sub_tree = proto_item_add_subtree(tree, ett_tag_ric_data_desc_ie);
23995
23996 proto_item_append_text(field_data->item_tag, " :Resource Descriptor List");
23997 if (desc_cnt == 0) {
23998 proto_item_append_text(field_data->item_tag, " :0 (Weird?)");
23999 }
24000
24001 while ( desc_cnt != 0 ) {
24002
24003 next_ie = tvb_get_uint8(tvb, offset);
24004 proto_item_append_text(field_data->item_tag, " :(%d:%s)", desc_cnt, val_to_str_ext(pinfo->pool, next_ie, &tag_num_vals_ext, "Reserved (%d)"));
24005 /* Recursive call to avoid duplication of code*/
24006 offset_r = add_tagged_field(pinfo, sub_tree, tvb, offset, field_data->ftype, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
24007 if (offset_r == 0 )/* should never happen, returns a min of 2*/
24008 break;
24009 /* This will ensure that the IE after RIC is processed
24010 * only once. This gives us a good looking RIC IE :-)
24011 */
24012 tag_len += offset_r;
24013 desc_cnt--;
24014 }
24015
24016 return tvb_captured_length(tvb);
24017}
24018
24019/* Overlapping BSS Scan Parameters (74) */
24020static int
24021dissect_overlap_bss_scan_par(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24022{
24023 int offset = 0;
24024 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24025 int tag_len = tvb_reported_length(tvb);
24026
24027 if (tag_len != 14) {
24028 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24029 "OBSS Length must be 14 bytes");
24030 return 1;
24031 }
24032
24033 proto_tree_add_item(tree, hf_ieee80211_tag_obss_spd, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24034 offset += 2;
24035
24036 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sad, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24037 offset += 2;
24038
24039 proto_tree_add_item(tree, hf_ieee80211_tag_obss_cwtsi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24040 offset += 2;
24041
24042 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sptpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24043 offset += 2;
24044
24045 proto_tree_add_item(tree, hf_ieee80211_tag_obss_satpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24046 offset += 2;
24047
24048 proto_tree_add_item(tree, hf_ieee80211_tag_obss_wctdf, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24049 offset += 2;
24050
24051 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sat, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24052 offset += 2;
24053
24054 return offset;
24055}
24056
24057/* RIC Descriptor (75) */
24058static int
24059dissect_ric_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24060{
24061 int offset = 0;
24062 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24063 int tag_len = tvb_reported_length(tvb);
24064 uint8_t rsrc_type = 0;
24065
24066 if (tag_len < 1) {
24067 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24068 "RIC Data Length must be at least 1 byte");
24069 return 1;
24070 }
24071
24072 rsrc_type = tvb_get_uint8(tvb, offset);
24073 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_rsrc_type, tvb,
24074 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24075 offset += 1;
24076
24077 if (rsrc_type == 1) {
24078 /* Block ACK params
24079 * 802.11-2012: 8.4.2.53 RIC Descriptor element
24080 * Block Ack parameter set as defined in 8.4.1.14,
24081 * Block Ack timeout value as defined in 8.4.1.15, and
24082 * Block Ack starting sequence control as defined in 8.3.1.8
24083 */
24084 /* TODO: Still figuring out how to parse these ones,
24085 * need a sample capture with at least HEX Dump
24086 */
24087 proto_item_append_text(field_data->item_tag, " : Block ACK Params");
24088 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_var_params, tvb,
24089 offset, tag_len-1, ENC_NA0x00000000);
24090 offset += tag_len -1;
24091 }else {
24092 /* 0, 2-255 are reserved*/
24093 proto_item_append_text(field_data->item_tag, " :Reserved (type != 1)");
24094 }
24095
24096 return offset;
24097}
24098
24099static int
24100dissect_ext_bss_load(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24101{
24102 int offset = 0;
24103 proto_tree_add_item(tree, hf_ieee80211_ext_bss_mu_mimo_capable_sta_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24104 offset += 2;
24105 proto_tree_add_item(tree, hf_ieee80211_ext_bss_ss_underutilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24106 offset += 1;
24107 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_20mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24108 offset += 1;
24109 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_40mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24110 offset += 1;
24111 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_80mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24112 offset += 1;
24113
24114 return offset;
24115}
24116
24117static int
24118dissect_wide_bw_channel_switch(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24119{
24120 int offset = 0;
24121
24122 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24123 offset += 1;
24124 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment0, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24125 offset += 1;
24126 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment1, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24127 offset += 1;
24128
24129 return offset;
24130}
24131
24132static int
24133dissect_channel_switch_wrapper(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24134{
24135 int tag_len = tvb_reported_length(tvb);
24136 int offset = 0;
24137 int tmp_sublen;
24138 const uint8_t ids[] = { TAG_COUNTRY_INFO7, TAG_WIDE_BW_CHANNEL_SWITCH194,
24139 TAG_TX_PWR_ENVELOPE195 };
24140 const uint8_t ext_ids[] = {ETAG_BANDWIDTH_INDICATION135};
24141
24142 /*
24143 Decode three subelement in IE-196(Channel Switch Wrapper element):
24144 (1) New Country subelement
24145 (2) Wide Bandwidth Channel Switch subelement
24146 (3) New VHT Transmit Power Envelope subelement
24147 (4) Bandwidth Indication subelement
24148 */
24149 while (tag_len > 0){
24150 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
24151 if (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, ids,
24152 G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) == 0) {
24153 break;
24154 }
24155 tag_len -= (tmp_sublen + 2);
24156 offset += (tmp_sublen + 2);
24157 }
24158 return offset;
24159}
24160
24161static int
24162dissect_operating_mode_notification(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24163{
24164 int offset = 0;
24165 static int * const ieee80211_operat_mode_field[] = {
24166 &hf_ieee80211_operat_mode_field_channel_width,
24167 &hf_ieee80211_operat_mode_field_160_80plus80_bw,
24168 &hf_ieee80211_operat_mode_field_no_ldpc,
24169 &hf_ieee80211_operat_mode_field_rxnss,
24170 &hf_ieee80211_operat_mode_field_rxnsstype,
24171 NULL((void*)0)
24172 };
24173
24174 /* Operating Mode field */
24175 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_operat_notification_mode,
24176 ett_mcsbit_tree, ieee80211_operat_mode_field,
24177 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24178 offset += 1;
24179 return offset;
24180}
24181
24182static const range_string tbtt_info_length[] = {
24183 { 0, 0, "Reserved" },
24184 { 1, 1, "Neighbor AP TBTT Offset subfield" },
24185 { 2, 2, "Neighbor AP TBTT Offset subfield and the BSS Parameters subfield" },
24186 { 3, 4, "Reserved" },
24187 { 5, 5, "Neighbor AP TBTT Offset subfield and the Short-SSID subfield" },
24188 { 6, 6, "Neighbor AP TBTT offset subfield, the Short SSID subfield and the BSS Parameters subfield" },
24189 { 7, 7, "Neighbor AP TBTT Offset subfield and the BSSID subfield" },
24190 { 8, 8, "Neighbor AP TBTT Offset subfield, the BSSID subfield and the BSS Parameters subfield" },
24191 { 9, 9, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the BSS Parameters subfield and the 20 MHz PSD subfield" },
24192 { 10, 10, "Reserved" },
24193 { 11, 11, "Neighbor AP TBTT Offset subfield, the BSSID subfield and the Short-SSID subfield" },
24194 { 12, 12, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the Short SSID subfield and the BSS Parameters subfield" },
24195 { 13, 13, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the Short SSID subfield, the BSS Parameters subfield and the 20 MHz PSD subfield" },
24196 { 14, 15, "Reserved" },
24197 { 16, 16, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the Short SSID subfield, the BSS Parameters subfield, the 20 MHz PSD subfield and the MLD Parameters subfield" },
24198 { 17, 255, "First 16 octets contain Neighbor AP TBTT Offset, the BSSID, the Short SSID, the BSS Parameters, the 20 MHz PSD and the MLD Parameters subfield. The remaining octets are reserved"},
24199 { 0, 0, NULL((void*)0) }
24200};
24201
24202static int * const bss_params_headers[] = {
24203 &hf_ieee80211_rnr_oct_recommended,
24204 &hf_ieee80211_rnr_same_ssid,
24205 &hf_ieee80211_rnr_multiple_bssid,
24206 &hf_ieee80211_rnr_transmitted_bssid,
24207 &hf_ieee80211_rnr_ess_with_colocated_ap,
24208 &hf_ieee80211_rnr_unsolicited_probe_responses,
24209 &hf_ieee80211_rnr_same_colocated_ap,
24210 &hf_ieee80211_rnr_same_reserved,
24211 NULL((void*)0)
24212};
24213
24214static int * const mld_params_headers[] = {
24215 &hf_ieee80211_rnr_mld_id,
24216 &hf_ieee80211_rnr_mld_link_id,
24217 &hf_ieee80211_rnr_mld_bss_params_change_count,
24218 &hf_ieee80211_rnr_mld_all_updates_included,
24219 &hf_ieee80211_rnr_mld_disabled_link_indication,
24220 &hf_ieee80211_rnr_mld_reserved,
24221 NULL((void*)0)
24222};
24223
24224static int
24225dissect_neighbor_ap_info(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
24226 int offset)
24227{
24228 uint16_t tbtt_info_h;
24229 uint16_t tbtt_info_len;
24230 uint16_t tbtt_info_count;
24231 uint16_t len_remain = 0;
24232 int i = 0;
24233 bool_Bool display_tbtt_offset = false0;
24234 bool_Bool display_bssid_subfield = false0;
24235 bool_Bool display_short_bssid_subfield = false0;
24236 bool_Bool display_bss_parameters_subfield = false0;
24237 bool_Bool display_20mhz_psd_subfield = false0;
24238 bool_Bool display_mld_params_subfield = false0;
24239 bool_Bool display_reserved = false0;
24240
24241 proto_item *item;
24242 proto_tree *query;
24243
24244 tbtt_info_h = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
24245 tbtt_info_len = TBTT_INFO_LENGTH(tbtt_info_h)(((tbtt_info_h) & (0xff<<8)) >> 8);
24246 tbtt_info_count = TBTT_INFO_COUNT(tbtt_info_h)(((tbtt_info_h) & (0xf<<4)) >> 4);
24247 switch(tbtt_info_len) {
24248 case 0: case 3: case 4: case 10: case 14: case 15:
24249 /* Reserved cases */
24250 display_reserved = true1;
24251 len_remain = tbtt_info_len;
24252 break;
24253 case 1:
24254 display_tbtt_offset = true1;
24255 break;
24256 case 2:
24257 display_tbtt_offset = true1;
24258 display_bss_parameters_subfield = true1;
24259 break;
24260 case 5:
24261 display_tbtt_offset = true1;
24262 display_short_bssid_subfield = true1;
24263 break;
24264 case 6:
24265 display_tbtt_offset = true1;
24266 display_short_bssid_subfield = true1;
24267 display_bss_parameters_subfield = true1;
24268 break;
24269 case 7:
24270 display_tbtt_offset = true1;
24271 display_bssid_subfield = true1;
24272 break;
24273 case 8:
24274 display_tbtt_offset = true1;
24275 display_bssid_subfield = true1;
24276 display_bss_parameters_subfield = true1;
24277 break;
24278 case 9:
24279 display_tbtt_offset = true1;
24280 display_bssid_subfield = true1;
24281 display_bss_parameters_subfield = true1;
24282 display_20mhz_psd_subfield = true1;
24283 break;
24284 case 11:
24285 display_tbtt_offset = true1;
24286 display_bssid_subfield = true1;
24287 display_short_bssid_subfield = true1;
24288 break;
24289 case 12:
24290 display_tbtt_offset = true1;
24291 display_bssid_subfield = true1;
24292 display_short_bssid_subfield = true1;
24293 display_bss_parameters_subfield = true1;
24294 break;
24295 case 13:
24296 display_tbtt_offset = true1;
24297 display_bssid_subfield = true1;
24298 display_short_bssid_subfield = true1;
24299 display_bss_parameters_subfield = true1;
24300 display_20mhz_psd_subfield = true1;
24301 break;
24302 case 16: /* EHT stuff */
24303 display_tbtt_offset = true1;
24304 display_bssid_subfield = true1;
24305 display_short_bssid_subfield = true1;
24306 display_bss_parameters_subfield = true1;
24307 display_20mhz_psd_subfield = true1;
24308 display_mld_params_subfield = true1;
24309 break;
24310 default: /* 17- 255: Same as 16 but the remaining bytes are reserved. */
24311 display_tbtt_offset = true1;
24312 display_bssid_subfield = true1;
24313 display_short_bssid_subfield = true1;
24314 display_bss_parameters_subfield = true1;
24315 display_20mhz_psd_subfield = true1;
24316 display_mld_params_subfield = true1;
24317 display_reserved = true1;
24318 len_remain = tbtt_info_len - 16;
24319 break;
24320 }
24321
24322 proto_tree_add_item(tree, hf_ieee80211_tbtt_info, tvb, offset, 2,
24323 ENC_LITTLE_ENDIAN0x80000000);
24324 proto_tree_add_item(tree, hf_ieee80211_tbtt_filtered_nap, tvb, offset, 2,
24325 ENC_LITTLE_ENDIAN0x80000000);
24326 item = proto_tree_add_item(tree, hf_ieee80211_tbtt_info_count, tvb, offset, 2,
24327 ENC_LITTLE_ENDIAN0x80000000);
24328 proto_tree_add_item(tree, hf_ieee80211_tbtt_info_length, tvb, offset, 2,
24329 ENC_LITTLE_ENDIAN0x80000000);
24330 offset+=2;
24331
24332 proto_tree_add_item(tree, hf_ieee80211_tbtt_operating_class, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24333 offset+=1;
24334 proto_tree_add_item(tree, hf_ieee80211_tbtt_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24335 offset+=1;
24336
24337 for (i=0; i < tbtt_info_count + 1; i++) {
24338 query = proto_tree_add_subtree(tree, tvb, offset, tbtt_info_len,
24339 ett_tbtt_infos, &item, "TBTT Information");
24340
24341 if (display_tbtt_offset) {
24342 proto_tree_add_item(query, hf_ieee80211_tbtt_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24343 offset+=1;
24344 }
24345 if (display_bssid_subfield) {
24346 proto_tree_add_item(query, hf_ieee80211_tbtt_bssid, tvb, offset, 6, ENC_NA0x00000000);
24347 offset+=6;
24348 }
24349 if (display_short_bssid_subfield) {
24350 proto_tree_add_item(query, hf_ieee80211_tbtt_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24351 offset+=4;
24352 }
24353 if (display_bss_parameters_subfield) {
24354
24355 proto_tree_add_bitmask_with_flags(query, tvb, offset,
24356 hf_ieee80211_rnr_bss_params,
24357 ett_rnr_bss_params_tree,
24358 bss_params_headers,
24359 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24360 offset += 1;
24361 }
24362 if (display_20mhz_psd_subfield) {
24363 proto_tree_add_item(query, hf_ieee80211_rnr_20mhz_psd_subfield, tvb,
24364 offset, 1, ENC_NA0x00000000);
24365 offset += 1;
24366 }
24367 if (display_mld_params_subfield) {
24368
24369 proto_tree_add_bitmask_with_flags(query, tvb, offset,
24370 hf_ieee80211_rnr_mld_params,
24371 ett_rnr_mld_params_tree,
24372 mld_params_headers,
24373 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24374 offset += 3;
24375 }
24376 if (display_reserved) {
24377 proto_tree_add_item(query, hf_ieee80211_rnr_reserved_data, tvb, offset,
24378 len_remain, ENC_NA0x00000000);
24379 }
24380
24381 offset += len_remain;
24382 }
24383
24384 return offset;
24385}
24386
24387static int
24388dissect_reduced_neighbor_report(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24389{
24390 int offset = 0;
24391
24392 while (tvb_reported_length_remaining(tvb, offset)) {
24393 int start_offset;
24394 proto_tree *neighbor_ap_info = NULL((void*)0);
24395 proto_item *naii = NULL((void*)0);
24396
24397 start_offset = offset;
24398 neighbor_ap_info = proto_tree_add_subtree(tree, tvb, offset, -1,
24399 ett_neighbor_ap_info, &naii,
24400 "Neighbor AP Information");
24401 offset = dissect_neighbor_ap_info(tvb, pinfo, neighbor_ap_info, offset);
24402
24403 proto_item_set_len(naii, offset - start_offset);
24404 }
24405
24406 return tvb_reported_length(tvb);
24407}
24408
24409static const value_string s1g_supported_channel_width_vals[] = {
24410 { 0, "STA supports 1MHz and 2MHz operation" },
24411 { 1, "STA supports 1MHz, 2MHz and 4MHz operation" },
24412 { 2, "STA supports 1MHz, 2MHz, 4MHz and 8MHz operation" },
24413 { 3, "STA supports 1MHz, 2MHz, 4MHz, 8MHz and 16MHz operation" },
24414 { 0, NULL((void*)0) }
24415};
24416
24417static const value_string s1g_traveling_pilot_support_vals[] = {
24418 { 0, "Traveling Pilot Support not activated" },
24419 { 1, "Traveling Pilot Support activated for only one space-time stream" },
24420 { 2, "Reserved" },
24421 { 3, "Traveling Pilot Support activated for one and two space-time streams" },
24422 { 0, NULL((void*)0) }
24423};
24424
24425static const value_string s1g_max_mpdu_length_vals[] = {
24426 { 0, "3895" },
24427 { 1, "7991" },
24428 { 0, NULL((void*)0) }
24429};
24430
24431static const value_string s1g_min_mpdu_start_spacing_vals[] = {
24432 { 0, "No restriction" },
24433 { 1, "1/4 uS" },
24434 { 2, "1/2 uS" },
24435 { 3, "1 uS" },
24436 { 4, "2 uS" },
24437 { 5, "4 uS" },
24438 { 6, "8 uS" },
24439 { 7, "16 uS" },
24440 { 0, NULL((void*)0) }
24441};
24442
24443static const value_string s1g_sta_type_support_vals[] = {
24444 { 0, "AP-Only. Supports sensor and non-sensor STAs." },
24445 { 1, "AP supports only sensor STAs. STA is a sensor STA." },
24446 { 2, "AP supports only non-sensor STAs. STA is a non-sensor STA" },
24447 { 3, "Reserved" },
24448 { 0, NULL((void*)0) }
24449};
24450
24451static const value_string s1g_sectorized_beam_capable_vals[] = {
24452 { 0, "AP or non-AP: Not supported" },
24453 { 1, "AP: TXOP-based sectorization only. Non-AP: Both group and TXOP" },
24454 { 2, "AP: Group sectorization only. Non-AP: Reserved" },
24455 { 3, "AP: Both group and TXOP sectorization. Non-AP: Reserved" },
24456 { 0, NULL((void*)0) }
24457};
24458
24459static const value_string s1g_vht_link_adaptation_vals[] = {
24460 { 0, "STA does not provide VHT MFB" },
24461 { 1, "Reserved" },
24462 { 2, "STA can only provide unsolicited VHT MFB" },
24463 { 3, "STA can provide unsolicited and solicited VHT MFB" },
24464 { 0, NULL((void*)0) }
24465};
24466
24467#if 0
24468static const value_string s1g_mcs_map[] = {
24469 { 0, "Support for S1G-MCS 2 for n spatial streams" },
24470 { 1, "Support for S1G-MCS 7 for n spatial streamS" },
24471 { 2, "Support for S1G-MCS 9 for n spatial streams" },
24472 { 3, "n spatial streams not supported" },
24473 { 0, NULL((void*)0) }
24474};
24475#endif
24476
24477static int * const ieee80211_s1g_cap_byte1[] = {
24478 &hf_ieee80211_s1g_cap_s1g_long_support,
24479 &hf_ieee80211_s1g_cap_short_gi_for_1_mhz,
24480 &hf_ieee80211_s1g_cap_short_gi_for_2_mhz,
24481 &hf_ieee80211_s1g_cap_short_gi_for_4_mhz,
24482 &hf_ieee80211_s1g_cap_short_gi_for_8_mhz,
24483 &hf_ieee80211_s1g_cap_short_gi_for_16_mhz,
24484 &hf_ieee80211_s1g_cap_supported_channel_width,
24485 NULL((void*)0)
24486};
24487
24488static int * const ieee80211_s1g_cap_byte2[] = {
24489 &hf_ieee80211_s1g_cap_rx_ldpc,
24490 &hf_ieee80211_s1g_cap_tx_stbc,
24491 &hf_ieee80211_s1g_cap_rx_stbc,
24492 &hf_ieee80211_s1g_cap_su_beamformer_capable,
24493 &hf_ieee80211_s1g_cap_su_beamformee_capable,
24494 &hf_ieee80211_s1g_cap_beamformee_sts_capability, /* Needs global */
24495 NULL((void*)0)
24496};
24497
24498static int * const ieee80211_s1g_cap_byte3[] = {
24499 &hf_ieee80211_s1g_cap_number_sounding_dimensions,
24500 &hf_ieee80211_s1g_cap_mu_beamformer_capable,
24501 &hf_ieee80211_s1g_cap_mu_beamformee_capable,
24502 &hf_ieee80211_s1g_cap_htc_vht_capable,
24503 &hf_ieee80211_s1g_cap_travelling_pilot_support,
24504 NULL((void*)0)
24505};
24506
24507static int * const ieee80211_s1g_cap_byte4[] = {
24508 &hf_ieee80211_s1g_cap_rd_responder,
24509 &hf_ieee80211_s1g_cap_ht_delayed_block_ack,
24510 &hf_ieee80211_s1g_cap_maximum_mpdu_length,
24511 &hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp,
24512 &hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing,
24513 NULL((void*)0)
24514};
24515
24516static int * const ieee80211_s1g_cap_byte5[] = {
24517 &hf_ieee80211_s1g_cap_uplink_sync_capable,
24518 &hf_ieee80211_s1g_cap_dynamic_aid,
24519 &hf_ieee80211_s1g_cap_bat_support,
24520 &hf_ieee80211_s1g_cap_tim_ade_support,
24521 &hf_ieee80211_s1g_cap_non_tim_support,
24522 &hf_ieee80211_s1g_cap_group_aid_support,
24523 &hf_ieee80211_s1g_cap_sta_type_support,
24524 NULL((void*)0)
24525};
24526
24527static int * const ieee80211_s1g_cap_byte6[] = {
24528 &hf_ieee80211_s1g_cap_centralized_authentication_control,
24529 &hf_ieee80211_s1g_cap_distributed_authentication_control,
24530 &hf_ieee80211_s1g_cap_a_msdu_support,
24531 &hf_ieee80211_s1g_cap_a_mpdu_support,
24532 &hf_ieee80211_s1g_cap_asymmetic_block_ack_support,
24533 &hf_ieee80211_s1g_cap_flow_control_support,
24534 &hf_ieee80211_s1g_cap_sectorized_beam_capable,
24535 NULL((void*)0)
24536};
24537
24538static int * const ieee80211_s1g_cap_byte7[] = {
24539 &hf_ieee80211_s1g_cap_obss_mitigation_support,
24540 &hf_ieee80211_s1g_cap_fragment_ba_support,
24541 &hf_ieee80211_s1g_cap_ndp_ps_poll_supported,
24542 &hf_ieee80211_s1g_cap_raw_operation_support,
24543 &hf_ieee80211_s1g_cap_page_slicing_support,
24544 &hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support,
24545 &hf_ieee80211_s1g_cap_vht_link_adaptation_capable,
24546 NULL((void*)0)
24547};
24548
24549static int * const ieee80211_s1g_cap_byte8[] = {
24550 &hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response,
24551 &hf_ieee80211_s1g_cap_duplicate_1_mhz_support,
24552 &hf_ieee80211_s1g_cap_mcs_negotiation_support,
24553 &hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support,
24554 &hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support,
24555 &hf_ieee80211_s1g_cap_unsolicited_dynamic_aid,
24556 &hf_ieee80211_s1g_cap_sector_training_operation_supported,
24557 &hf_ieee80211_s1g_cap_temporary_ps_mode_switch,
24558 NULL((void*)0),
24559};
24560
24561static int * const ieee80211_s1g_cap_byte9[] = {
24562 &hf_ieee80211_s1g_cap_twt_grouping_support,
24563 &hf_ieee80211_s1g_cap_bdt_capable,
24564 &hf_ieee80211_s1g_cap_color,
24565 &hf_ieee80211_s1g_cap_twt_requester_support,
24566 &hf_ieee80211_s1g_cap_twt_responder_support,
24567 &hf_ieee80211_s1g_cap_pv1_frame_support,
24568 NULL((void*)0)
24569};
24570
24571static int * const ieee80211_s1g_cap_byte10[] = {
24572 &hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable,
24573 &hf_ieee80211_s1g_cap_reserved,
24574 NULL((void*)0)
24575};
24576
24577static int * const ieee80211_s1g_mcs_and_nss_set[] = {
24578 &hf_ieee80211_s1g_rx_s1g_mcs_map,
24579 &hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate,
24580 &hf_ieee80211_s1g_tx_s1g_mcs_map,
24581 &hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate,
24582 &hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz,
24583 &hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz,
24584 &hf_ieee80211_s1g_mcs_and_nss_reserved,
24585 NULL((void*)0)
24586};
24587
24588static int
24589dissect_s1g_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24590{
24591 int offset = 0;
24592 proto_tree *s1g_cap_info = NULL((void*)0);
24593 proto_tree *s1g_caps = NULL((void*)0);
24594 proto_tree *sup_mcs_nss_set = NULL((void*)0);
24595
24596 s1g_cap_info = proto_tree_add_subtree(tree, tvb, offset, 15,
24597 ett_ieee80211_s1g_capabilities_info,
24598 NULL((void*)0), "S1G Capabilities Information");
24599
24600 s1g_caps = proto_tree_add_subtree(s1g_cap_info, tvb, offset, 10,
24601 ett_ieee80211_s1g_capabilities,
24602 NULL((void*)0), "S1G Capabilities");
24603
24604 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24605 hf_ieee80211_s1g_cap_byte1,
24606 ett_s1g_cap_byte1,
24607 ieee80211_s1g_cap_byte1,
24608 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24609 offset += 1;
24610
24611 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24612 hf_ieee80211_s1g_cap_byte2,
24613 ett_s1g_cap_byte2,
24614 ieee80211_s1g_cap_byte2,
24615 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24616 offset += 1;
24617
24618 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24619 hf_ieee80211_s1g_cap_byte3,
24620 ett_s1g_cap_byte3,
24621 ieee80211_s1g_cap_byte3,
24622 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24623 offset += 1;
24624
24625 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24626 hf_ieee80211_s1g_cap_byte4,
24627 ett_s1g_cap_byte4,
24628 ieee80211_s1g_cap_byte4,
24629 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24630 offset += 1;
24631
24632 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24633 hf_ieee80211_s1g_cap_byte5,
24634 ett_s1g_cap_byte5,
24635 ieee80211_s1g_cap_byte5,
24636 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24637 offset += 1;
24638
24639 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24640 hf_ieee80211_s1g_cap_byte6,
24641 ett_s1g_cap_byte6,
24642 ieee80211_s1g_cap_byte6,
24643 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24644 offset += 1;
24645
24646 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24647 hf_ieee80211_s1g_cap_byte7,
24648 ett_s1g_cap_byte7,
24649 ieee80211_s1g_cap_byte7,
24650 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24651 offset += 1;
24652
24653 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24654 hf_ieee80211_s1g_cap_byte8,
24655 ett_s1g_cap_byte8,
24656 ieee80211_s1g_cap_byte8,
24657 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24658 offset += 1;
24659
24660 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24661 hf_ieee80211_s1g_cap_byte9,
24662 ett_s1g_cap_byte9,
24663 ieee80211_s1g_cap_byte9,
24664 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24665 offset += 1;
24666
24667 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24668 hf_ieee80211_s1g_cap_byte10,
24669 ett_s1g_cap_byte10,
24670 ieee80211_s1g_cap_byte10,
24671 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24672 offset += 1;
24673
24674 sup_mcs_nss_set = proto_tree_add_subtree(s1g_cap_info, tvb, offset, 5,
24675 ett_ieee80211_s1g_sup_mcs_and_nss_set,
24676 NULL((void*)0), "Supported S1G-MCS and NSS Set");
24677
24678 proto_tree_add_bitmask_with_flags(sup_mcs_nss_set, tvb, offset,
24679 hf_ieee80211_s1g_mcs_and_nss_set,
24680 ett_s1g_mcs_and_mcs_set,
24681 ieee80211_s1g_mcs_and_nss_set,
24682 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24683 offset += 5;
24684
24685 return offset;
24686}
24687
24688static int * const s1g_subchannel_selective_transmission_headers0[] = {
24689 &hf_ieee80211_s1g_sst_sounding_option,
24690 &hf_ieee80211_s1g_channel_activity_bitmap,
24691 &hf_ieee80211_s1g_ul_activity,
24692 &hf_ieee80211_s1g_dl_activity,
24693 &hf_ieee80211_s1g_max_trans_width,
24694 &hf_ieee80211_s1g_activity_start_time,
24695 NULL((void*)0)
24696};
24697
24698static const value_string max_trans_width_vals[] = {
24699 { 0, "channel width unit" },
24700 { 1, "4MHz" },
24701 { 2, "8MHz" },
24702 { 3, "16MHz" },
24703 { 0, NULL((void*)0) }
24704};
24705
24706static int
24707dissect_subchannel_selective_transmission(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24708{
24709 int offset = 0;
24710 uint8_t control = tvb_get_uint8(tvb, offset);
24711
24712 /* Different if sounding option is 0 or 1 */
24713 if ((control & 0x01) == 0x00) {
24714 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
24715 hf_ieee80211_s1g_subchannel_selective_transmission,
24716 ett_s1g_subchannel_selective_transmission,
24717 s1g_subchannel_selective_transmission_headers0,
24718 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24719 offset += 4;
24720 } else {
24721 uint8_t control2 = tvb_get_uint8(tvb, offset + 1);
24722 proto_item *pi = NULL((void*)0);
24723 proto_tree *chan_tree = NULL((void*)0);
24724
24725 chan_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
24726 ett_s1g_subchannel_selective_transmission,
24727 &pi , "Channel Activity Schedule");
24728 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sst_sounding_option1, tvb,
24729 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24730 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_channel_activity_bitmap1,
24731 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24732 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sounding_start_time_present,
24733 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24734 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_channel_activity_reserved,
24735 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24736 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_max_trans_width1, tvb,
24737 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24738 offset += 2;
24739 /* sounding_start_time_present */
24740 if (control2 & 0x02) {
24741 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sounding_start_time, tvb,
24742 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24743 offset += 2;
24744 proto_item_set_len(pi, 4);
24745 } else {
24746 proto_item_set_len(pi, 2);
24747 }
24748 }
24749
24750 return offset;
24751}
24752
24753static void
24754s1g_open_loop_link_margin_custom(char *result, uint8_t ollm_index)
24755{
24756 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dB",
24757 (-128.0 + ollm_index * 0.5));
24758}
24759
24760static int
24761dissect_s1g_open_loop_link_margin_index(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24762{
24763 int offset = 0;
24764
24765 proto_tree_add_item(tree, hf_ieee80211_s1g_open_loop_link_margin, tvb,
24766 offset, 1, ENC_NA0x00000000);
24767 offset += 1;
24768
24769 return offset;
24770}
24771
24772#define RAW_START_TIME_INDICATION0x10 0x10
24773#define RAW_GROUP_INDICATION0x20 0x20
24774#define RAW_CHANNEL_INDICATION_PRESENCE0x40 0x40
24775#define RAW_PERIODIC_RAW_INDICATION0x80 0x80
24776
24777static const value_string s1g_raw_control_raw_type[] = {
24778 { 0, "Generic RAW" },
24779 { 1, "Sounding RAW" },
24780 { 2, "Simplex RAW" },
24781 { 3, "Triggering frame RAW" },
24782 { 0, NULL((void*)0) }
24783};
24784
24785static uint8_t global_s1g_raw_type;
24786
24787static void
24788s1g_raw_type_options_custom(char *result, uint8_t raw_type)
24789{
24790 switch (global_s1g_raw_type) {
24791 case 0x00:
24792 switch (raw_type) {
24793 case 0x00:
24794 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "None");
24795 break;
24796 case 0x01:
24797 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Paged STA");
24798 break;
24799 case 0x02:
24800 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "RA Frame");
24801 break;
24802 case 0x03:
24803 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Paged STA and RA Frame");
24804 break;
24805 }
24806 break;
24807 case 0x01:
24808 switch (raw_type) {
24809 case 0x00:
24810 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "SST sounding RAW");
24811 break;
24812 case 0x01:
24813 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "SST report RAW");
24814 break;
24815 case 0x02:
24816 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Sector sounding RAW");
24817 break;
24818 case 0x03:
24819 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Sector report RAW");
24820 break;
24821 }
24822 break;
24823 case 0x02:
24824 switch (raw_type) {
24825 case 0x00:
24826 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "AP PM RAW");
24827 break;
24828 case 0x01:
24829 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-TIM RAW");
24830 break;
24831 case 0x02:
24832 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Omni RAW");
24833 break;
24834 case 0x03:
24835 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
24836 break;
24837 }
24838 break;
24839 case 0x03:
24840 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
24841 break;
24842 }
24843}
24844
24845static void s1g_raw_slot_duration_custom(char *result, uint16_t slot_def)
24846{
24847 snprintf(result, ITEM_LABEL_LENGTH240, "%u (%u uS)", slot_def, (500 + slot_def * 120));
24848}
24849
24850static int * const s1g_raw_control_headers[] = {
24851 &hf_ieee80211_s1g_raw_type,
24852 &hf_ieee80211_s1g_raw_type_options,
24853 &hf_ieee80211_s1g_raw_start_time_indication,
24854 &hf_ieee80211_s1g_raw_raw_group_indication,
24855 &hf_ieee80211_s1g_raw_channel_indication_preference,
24856 &hf_ieee80211_s1g_raw_periodic_raw_indication,
24857 NULL((void*)0)
24858};
24859
24860static int * const s1g_slot_def_8_bit[] = {
24861 &hf_ieee80211_s1g_slot_def_format_indication,
24862 &hf_ieee80211_s1g_slot_def_cross_slot_boundary,
24863 &hf_ieee80211_s1g_slot_def_slot_duration_count8,
24864 &hf_ieee80211_s1g_slot_def_num_slots6,
24865 NULL((void*)0)
24866};
24867
24868static int * const s1g_slot_def_11_bit[] = {
24869 &hf_ieee80211_s1g_slot_def_format_indication,
24870 &hf_ieee80211_s1g_slot_def_cross_slot_boundary,
24871 &hf_ieee80211_s1g_slot_def_slot_duration_count11,
24872 &hf_ieee80211_s1g_slot_def_num_slots3,
24873 NULL((void*)0)
24874};
24875
24876static int * const s1g_raw_group_fields[] = {
24877 &hf_ieee80211_s1g_raw_group_page_index,
24878 &hf_ieee80211_s1g_raw_group_start_aid,
24879 &hf_ieee80211_s1g_raw_group_end_aid,
24880 NULL((void*)0)
24881};
24882
24883static int * const s1g_raw_channel_indication_fields[] = {
24884 &hf_ieee80211_s1g_raw_ci_channel_activity_bitmap,
24885 &hf_ieee80211_s1g_raw_ci_max_trans_width,
24886 &hf_ieee80211_s1g_raw_ci_ul_activity,
24887 &hf_ieee80211_s1g_raw_ci_dl_activity,
24888 &hf_ieee80211_s1g_raw_ci_reserved,
24889 NULL((void*)0)
24890};
24891
24892static int
24893dissect_rps(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24894{
24895 proto_tree *raw_assignment_tree;
24896 proto_tree *assn_tree;
24897 proto_item *rati;
24898 int offset = 0;
24899 int idx = 0;
24900 uint8_t rps_len = tvb_reported_length_remaining(tvb, offset);
24901
24902 raw_assignment_tree = proto_tree_add_subtree(tree, tvb, offset, rps_len,
24903 ett_s1g_raw_assignment, NULL((void*)0),
24904 "RAW assignments");
24905
24906 while (tvb_reported_length_remaining(tvb, offset) > 0) {
24907
24908 assn_tree = proto_tree_add_subtree_format(raw_assignment_tree, tvb, offset, -1,
24909 ett_s1g_raw_assn_tree, &rati,
24910 "Assignment %d", idx);
24911
24912 uint8_t raw_control = tvb_get_uint8(tvb, offset);
24913 uint8_t raw_slot_def = tvb_get_uint8(tvb, offset + 1);
24914
24915 global_s1g_raw_type = raw_control & 0x03;
24916
24917 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
24918 hf_ieee80211_s1g_raw_control,
24919 ett_s1g_raw_control,
24920 s1g_raw_control_headers,
24921 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24922 offset += 1;
24923
24924 if (((raw_slot_def & 0x01) == 0x00) || (global_s1g_raw_type == 0x01)) {
24925 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
24926 hf_ieee80211_s1g_raw_slot_def,
24927 ett_s1g_raw_slot_def,
24928 s1g_slot_def_8_bit,
24929 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24930 } else {
24931 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
24932 hf_ieee80211_s1g_raw_slot_def,
24933 ett_s1g_raw_slot_def,
24934 s1g_slot_def_11_bit,
24935 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24936 }
24937
24938 offset += 2;
24939
24940 if (raw_control & RAW_START_TIME_INDICATION0x10) {
24941 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_start_time, tvb, offset, 1,
24942 ENC_NA0x00000000);
24943 offset += 1;
24944 }
24945
24946 if (raw_control & RAW_GROUP_INDICATION0x20) {
24947 uint32_t raw_group = tvb_get_letoh24(tvb, offset);
24948
24949 if (raw_group == 0) {
24950 proto_item *it = NULL((void*)0);
24951
24952 it = proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_group_subfield, tvb,
24953 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
24954 proto_item_append_text(it, ": All STAs allowed access within the RAW");
24955 } else {
24956 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
24957 hf_ieee80211_s1g_raw_group_subfield,
24958 ett_s1g_raw_group_subfield,
24959 s1g_raw_group_fields,
24960 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24961 }
24962 offset += 3;
24963 }
24964
24965 if (raw_control & RAW_CHANNEL_INDICATION_PRESENCE0x40) {
24966 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
24967 hf_ieee80211_s1g_raw_channel_indication,
24968 ett_s1g_raw_channel_indication,
24969 s1g_raw_channel_indication_fields,
24970 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24971 offset += 2;
24972 }
24973
24974 if (raw_control & RAW_PERIODIC_RAW_INDICATION0x80) {
24975 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_periodicity, tvb,
24976 offset, 1, ENC_NA0x00000000);
24977 offset += 1;
24978 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_validity, tvb,
24979 offset, 1, ENC_NA0x00000000);
24980 offset += 1;
24981 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_start_offset, tvb,
24982 offset, 1, ENC_NA0x00000000);
24983 offset += 1;
24984 }
24985
24986 idx += 1;
24987 }
24988 return offset;
24989}
24990
24991static int * const s1g_page_slice_headers[] = {
24992 &hf_ieee80211_s1g_page_slice_page_index,
24993 &hf_ieee80211_s1g_page_slice_page_slice_length,
24994 &hf_ieee80211_s1g_page_slice_page_slice_count,
24995 &hf_ieee80211_s1g_page_slice_block_offset,
24996 &hf_ieee80211_s1g_page_slice_tim_offset,
24997 &hf_ieee80211_s1g_page_slice_reserved,
24998 NULL((void*)0)
24999};
25000
25001static int
25002dissect_page_slice(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25003{
25004 int offset = 0;
25005 int len = 0;
25006
25007 proto_tree_add_item(tree, hf_ieee80211_s1g_page_slice_page_period, tvb,
25008 offset, 1, ENC_NA0x00000000);
25009 offset += 1;
25010
25011 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25012 hf_ieee80211_s1g_page_slice_control,
25013 ett_s1g_page_slice_control,
25014 s1g_page_slice_headers,
25015 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25016
25017 offset += 3;
25018
25019 len = tvb_reported_length_remaining(tvb, offset);
25020 if (len > 0) {
25021 proto_tree_add_item(tree, hf_ieee80211_s1g_page_slice_page_bitmap, tvb,
25022 offset, len, ENC_NA0x00000000);
25023 offset += len;
25024 }
25025
25026 return offset;
25027}
25028
25029#define AID_REQUEST_INTERVAL_PRESENT0x01 0x01
25030#define PER_STA_ADDRESS_PRESENT0x02 0x02
25031#define SERVICE_CHARACTERISTIC_PRESENT0x04 0x04
25032#define GROUP_ADDRESS_PRESENT0x20 0x20
25033
25034static int * const s1g_aid_request_mode_headers[] = {
25035 &hf_ieee80211_s1g_aid_request_interval_present,
25036 &hf_ieee80211_s1g_aid_request_per_sta_address_present,
25037 &hf_ieee80211_s1g_aid_request_service_characteristic_present,
25038 &hf_ieee80211_s1g_aid_request_non_tim_mode_switch,
25039 &hf_ieee80211_s1g_aid_request_tim_mode_switch,
25040 &hf_ieee80211_s1g_aid_request_group_address_present,
25041 &hf_ieee80211_s1g_aid_request_reserved,
25042 NULL((void*)0)
25043};
25044
25045static int * const s1g_aid_request_characteristic_headers[] = {
25046 &hf_ieee80211_s1g_aid_request_characteristic_sensor,
25047 &hf_ieee80211_s1g_aid_request_characteristic_offload,
25048 &hf_ieee80211_s1g_aid_request_characteristic_official_service,
25049 &hf_ieee80211_s1g_aid_request_characteristic_reserved,
25050 NULL((void*)0)
25051};
25052
25053static int
25054dissect_aid_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25055{
25056 int offset = 0;
25057 uint8_t mode = tvb_get_uint8(tvb, offset);
25058
25059 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25060 hf_ieee80211_s1g_aid_request_mode,
25061 ett_s1g_aid_request_mode,
25062 s1g_aid_request_mode_headers,
25063 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25064 offset += 1;
25065
25066 if (mode & AID_REQUEST_INTERVAL_PRESENT0x01) {
25067 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_request_interval, tvb,
25068 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25069 offset += 2;
25070 }
25071
25072 if (mode & PER_STA_ADDRESS_PRESENT0x02) {
25073 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_req_peer_sta_addr, tvb,
25074 offset, 6, ENC_NA0x00000000);
25075 offset += 6;
25076 }
25077
25078 if (mode & SERVICE_CHARACTERISTIC_PRESENT0x04) {
25079 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25080 hf_ieee80211_s1g_aid_request_characteristic,
25081 ett_s1g_aid_characteristic,
25082 s1g_aid_request_characteristic_headers,
25083 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25084 offset += 1;
25085 }
25086
25087 if (mode & GROUP_ADDRESS_PRESENT0x20) {
25088 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_req_group_addr, tvb, offset,
25089 6, ENC_NA0x00000000);
25090 offset += 6;
25091 }
25092
25093 return offset;
25094}
25095
25096static int
25097dissect_aid_response(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25098{
25099 int offset = 0;
25100
25101 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_group_aid, tvb,
25102 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25103 offset += 2;
25104
25105 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_switch_count,
25106 tvb, offset, 1, ENC_NA0x00000000);
25107 offset += 1;
25108
25109 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_response_interval,
25110 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25111 offset += 2;
25112
25113 return offset;
25114}
25115
25116static int * const s1g_sector_op_control_headers[] = {
25117 &hf_ieee80211_s1g_sector_op_sectorization_type,
25118 &hf_ieee80211_s1g_sector_op_period,
25119 &hf_ieee80211_s1g_sector_op_omni,
25120 NULL((void*)0)
25121};
25122
25123static int * const s1g_txop_sector_op_control_headers[] = {
25124 &hf_ieee80211_s1g_sector_op_sectorization_type_b16,
25125 &hf_ieee80211_s1g_sector_op_periodic_training_indicator,
25126 &hf_ieee80211_s1g_sector_op_training_period,
25127 &hf_ieee80211_s1g_sector_op_remaining_beacon_interval,
25128 &hf_ieee80211_s1g_sector_op_reserved_b16,
25129 NULL((void*)0)
25130};
25131
25132static const true_false_string sectorization_type_tfs = {
25133 "Reserved",
25134 "Group Sectorization Operation"
25135};
25136
25137static const true_false_string sectorization_omni_tfs = {
25138 "Omnidirectional",
25139 "Sectorized"
25140};
25141
25142static int
25143dissect_s1g_sector_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25144{
25145 int offset = 0;
25146 int len = 0;
25147 uint8_t control = tvb_get_uint8(tvb, offset);
25148
25149 if (control & 0x01) {
25150 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25151 hf_ieee80211_s1g_sector_op_control_16b,
25152 ett_s1g_sector_operation,
25153 s1g_txop_sector_op_control_headers,
25154 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25155
25156 offset += 2;
25157 } else {
25158 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25159 hf_ieee80211_s1g_sector_op_control,
25160 ett_s1g_sector_operation,
25161 s1g_sector_op_control_headers,
25162 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25163 offset += 1;
25164 }
25165
25166 /* Break this out more */
25167 len = tvb_reported_length_remaining(tvb, offset);
25168 proto_tree_add_item(tree, hf_ieee80211_s1g_sector_op_group_info, tvb,
25169 offset, len, ENC_NA0x00000000);
25170 offset += len;
25171
25172 return offset;
25173}
25174
25175static int
25176dissect_s1g_beacon_compatibility(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25177{
25178 int offset = 0;
25179
25180 proto_tree_add_item(tree, hf_ieee80211_s1g_beacon_compatibility_info, tvb,
25181 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25182 offset += 2;
25183
25184 proto_tree_add_item(tree, hf_ieee80211_s1g_beacon_interval, tvb, offset,
25185 2, ENC_LITTLE_ENDIAN0x80000000);
25186 offset += 2;
25187
25188 proto_tree_add_item(tree, hf_ieee80211_s1g_tsf_completion, tvb, offset,
25189 4, ENC_LITTLE_ENDIAN0x80000000);
25190 offset += 4;
25191
25192 return offset;
25193}
25194
25195static int
25196dissect_s1g_short_beacon_interval(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25197{
25198 int offset = 0;
25199
25200 proto_tree_add_item(tree, hf_ieee80211_s1g_short_beacon_interval, tvb,
25201 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25202 offset += 2;
25203
25204 return offset;
25205}
25206
25207static int
25208dissect_s1g_change_sequence(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25209{
25210 int offset = 0;
25211
25212 proto_tree_add_item(tree, hf_ieee80211_s1g_change_sequence, tvb, offset, 1,
25213 ENC_NA0x00000000);
25214 offset += 1;
25215
25216 return offset;
25217}
25218
25219static int
25220dissect_authentication_control(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25221{
25222 int offset = 0;
25223 uint16_t control_params = tvb_get_letohs(tvb, offset);
25224 proto_tree *auth_tree = NULL((void*)0);
25225
25226 if ((control_params & 0x0001) == 0) {
25227 auth_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
25228 ett_ieee80211_s1g_auth_control,
25229 NULL((void*)0),
25230 "Centralized Authentication Control Parameters");
25231 } else {
25232 auth_tree = proto_tree_add_subtree(tree, tvb, offset, 3,
25233 ett_ieee80211_s1g_auth_control,
25234 NULL((void*)0),
25235 "Distributed Authentication Control Parameters");
25236 }
25237
25238 if ((control_params & 0x0001) == 0) { /* This is all there should be here */
25239 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_control,
25240 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25241 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_deferral,
25242 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25243 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_reserved,
25244 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25245
25246 if ((control_params & 0x0002) == 0) { /* Deferral or not */
25247 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_thresh,
25248 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25249 } else {
25250 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_thresh_tus,
25251 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25252 }
25253 offset += 2;
25254 } else {
25255 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_control,
25256 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25257 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_slot_duration, tvb,
25258 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25259 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_max_trans_int, tvb,
25260 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25261 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_min_trans_int, tvb,
25262 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25263 offset += 3;
25264 }
25265 return offset;
25266}
25267
25268static int
25269dissect_tsf_timer_accuracy(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25270{
25271 int offset = 0;
25272
25273 proto_tree_add_item(tree, hf_ieee80211_s1g_tsf_timer_accuracy, tvb, offset,
25274 1, ENC_NA0x00000000);
25275 offset += 1;
25276
25277 return offset;
25278}
25279
25280static int * const relay_control_headers[] = {
25281 &hf_ieee80211_s1g_relay_hierarchy_identifier,
25282 &hf_ieee80211_s1g_relay_no_more_relay_flag,
25283 NULL((void*)0)
25284};
25285
25286static const range_string relay_hierarchy_rstrs[] = {
25287 { 0, 0, "Root AP" },
25288 { 1, 1, "S1G Relay AP" },
25289 { 2, 127, "Reserved" },
25290 { 0, 0, NULL((void*)0) }
25291};
25292
25293static const true_false_string no_more_relay_flag_tfs = {
25294 "AP does not accept any requests for relaying",
25295 "AP does accept requests for relaying"
25296};
25297
25298static int
25299dissect_s1g_relay(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25300{
25301 int offset = 0;
25302 uint8_t relay_control = tvb_get_uint8(tvb, offset);
25303
25304 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25305 hf_ieee80211_s1g_relay_control,
25306 ett_s1g_relay_control,
25307 relay_control_headers,
25308 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25309 offset += 1;
25310 if ((relay_control & 0x7F) == 1) {
25311 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_rootap_bssid,
25312 tvb, offset, 6, ENC_NA0x00000000);
25313 offset += 6;
25314 }
25315
25316 return offset;
25317}
25318
25319static const true_false_string relay_activation_mode_tfs = {
25320 "Relay Activation Request",
25321 "Relay Activation Response"
25322};
25323
25324static const true_false_string relay_direction_tfs = {
25325 "Sent by an AP",
25326 "Sent by a non-AP STA"
25327};
25328
25329static unsigned relay_function_field;
25330
25331static void
25332enable_relay_function_custom(char *result, uint8_t enable_relay_function)
25333{
25334 switch (relay_function_field & 0x03) {
25335 case 0x00: /* Relay Activation Mode == 0 && Direction == 0 */
25336 if (enable_relay_function)
25337 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA activates its relay function");
25338 else
25339 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA terminates its relay function");
25340 break;
25341 case 0x01: /* Relay Activation Mode == 1 && Direction == 0 */
25342 if (enable_relay_function)
25343 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA requests to activate relay function");
25344 else
25345 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA requests to terminate relay function");
25346 break;
25347 case 0x02: /* Relay Activation Mode == 0 && Direction == 1 */
25348 if (enable_relay_function)
25349 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA is allowed to operate as a relay");
25350 else
25351 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA must not operate as a relay");
25352 break;
25353 case 0x03: /* Relay Activation Mode == 1 && Direction == 1 */
25354 if (enable_relay_function)
25355 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-AP STA can operate as a relay");
25356 else
25357 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-AP STA must terminate relay function");
25358 break;
25359 }
25360}
25361
25362static int
25363dissect_s1g_relay_activation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25364{
25365 int offset = 0;
25366 proto_tree *relay_activ = NULL((void*)0);
25367
25368 relay_function_field = tvb_get_uint8(tvb, offset);
25369
25370 relay_activ = proto_tree_add_subtree_format(tree, tvb, offset, 1,
25371 ett_s1g_relay_function,
25372 NULL((void*)0), "Relay Activation: 0x%0x",
25373 relay_function_field);
25374
25375 proto_tree_add_item(relay_activ,
25376 hf_ieee80211_s1g_relay_function_activation_mode, tvb,
25377 offset, 1, ENC_NA0x00000000);
25378 proto_tree_add_item(relay_activ, hf_ieee80211_s1g_relay_function_direction,
25379 tvb, offset, 1, ENC_NA0x00000000);
25380 proto_tree_add_item(relay_activ,
25381 hf_ieee80211_s1g_relay_function_enable_relay_function,
25382 tvb, offset, 1, ENC_NA0x00000000);
25383 proto_tree_add_item(relay_activ,
25384 hf_ieee80211_s1g_relay_function_stas_present_indic,
25385 tvb, offset, 1, ENC_NA0x00000000);
25386 proto_tree_add_item(relay_activ, hf_ieee80211_s1g_relay_function_reserved,
25387 tvb, offset, 1, ENC_NA0x00000000);
25388 offset += 1;
25389
25390 if (relay_function_field & 0x04) {
25391 proto_tree_add_item(tree, hf_ieee80211_s1g_number_of_stas, tvb, offset,
25392 1, ENC_NA0x00000000);
25393 offset += 1;
25394 }
25395
25396 return offset;
25397}
25398
25399static const true_false_string reachable_address_add_remove_tfs = {
25400 "STA joining the relay",
25401 "STA leaving the relay"
25402};
25403
25404static int
25405dissect_reachable_address(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25406{
25407 int offset = 0;
25408 proto_tree *reach_list = NULL((void*)0);
25409 uint8_t addr_count = 0, addr_num = 0;
25410
25411 proto_tree_add_item(tree, hf_ieee80211_s1g_initiator_mac_address, tvb,
25412 offset, 6, ENC_NA0x00000000);
25413 offset += 6;
25414
25415 addr_count = tvb_get_uint8(tvb, offset);
25416 proto_tree_add_item(tree, hf_ieee80211_s1g_address_count, tvb, offset, 1,
25417 ENC_NA0x00000000);
25418 offset++;
25419
25420 reach_list = proto_tree_add_subtree(tree, tvb, offset, 7 * addr_count,
25421 ett_ieee80211_s1g_addr_list,
25422 NULL((void*)0), "Reachable Addresses");
25423 while (addr_count != 0) {
25424 proto_tree *reach_addr = NULL((void*)0);
25425
25426 reach_addr = proto_tree_add_subtree_format(reach_list, tvb, offset, 7,
25427 ett_ieee80211_s1g_reach_addr,
25428 NULL((void*)0), "Reachable Address %u", addr_num);
25429
25430 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_add_remove,
25431 tvb, offset, 1, ENC_NA0x00000000);
25432 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_relay_capable,
25433 tvb, offset, 1, ENC_NA0x00000000);
25434 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_reserved,
25435 tvb, offset, 1, ENC_NA0x00000000);
25436 offset += 1;
25437
25438 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_mac_address,
25439 tvb, offset, 6, ENC_NA0x00000000);
25440 offset += 6;
25441
25442 addr_num++;
25443 addr_count--;
25444 }
25445 return offset;
25446}
25447
25448static int * const relay_discovery_control_headers[] = {
25449 &hf_ieee80211_s1g_min_data_rate_included,
25450 &hf_ieee80211_s1g_mean_data_rate_included,
25451 &hf_ieee80211_s1g_max_data_rate_included,
25452 &hf_ieee80211_s1g_delay_and_min_phy_rate,
25453 &hf_ieee80211_s1g_information_not_available,
25454 &hf_ieee80211_s1g_relay_discovery_reserved,
25455 NULL((void*)0)
25456};
25457
25458static int
25459dissect_s1g_relay_discovery(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25460{
25461 int offset = 0;
25462 uint8_t relay_discovery_control = tvb_get_uint8(tvb, offset);
25463
25464 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25465 hf_ieee80211_s1g_relay_discovery_control,
25466 ett_s1g_relay_discovery_control,
25467 relay_discovery_control_headers,
25468 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25469 offset += 1;
25470
25471 if (relay_discovery_control & 0x01) {
25472 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_min, tvb,
25473 offset, 1, ENC_NA0x00000000);
25474 offset += 1;
25475 }
25476
25477 if (relay_discovery_control & 0x02) {
25478 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_mean, tvb,
25479 offset, 1, ENC_NA0x00000000);
25480 offset += 1;
25481 }
25482
25483 if (relay_discovery_control & 0x04) {
25484 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_max, tvb,
25485 offset, 1, ENC_NA0x00000000);
25486 offset += 1;
25487 }
25488
25489 if (relay_discovery_control & 0x01) {
25490 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_min, tvb,
25491 offset, 1, ENC_NA0x00000000);
25492 offset += 1;
25493 }
25494
25495 if (relay_discovery_control & 0x02) {
25496 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_mean, tvb,
25497 offset, 1, ENC_NA0x00000000);
25498 offset += 1;
25499 }
25500
25501 if (relay_discovery_control & 0x04) {
25502 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_max, tvb,
25503 offset, 1, ENC_NA0x00000000);
25504 offset += 1;
25505 }
25506
25507 if (relay_discovery_control & 0x08) {
25508
25509 }
25510
25511 return offset;
25512}
25513
25514static int
25515dissect_aid_announcement(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25516{
25517 int offset = 0;
25518 int entry_no = 0;
25519
25520 /*
25521 * There should be 8N bytes ...
25522 */
25523 while (tvb_reported_length_remaining(tvb, offset) >= 8) {
25524 proto_tree *aid_entry = NULL((void*)0);
25525
25526 aid_entry = proto_tree_add_subtree_format(tree, tvb, offset, 8,
25527 ett_ieee80211_s1g_aid_entry,
25528 NULL((void*)0), "AID Entry %d", entry_no++);
25529 proto_tree_add_item(aid_entry, hf_ieee80211_s1g_aid_entry_mac_addr,
25530 tvb, offset, 6, ENC_NA0x00000000);
25531 offset += 6;
25532
25533 proto_tree_add_item(aid_entry, hf_ieee80211_s1g_aid_entry_assoc_id,
25534 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25535 offset += 2;
25536 }
25537
25538 /* TODO: EI if bytes remaining. */
25539
25540 return offset;
25541}
25542
25543static int * const subfield_0[] = {
25544 &hf_ieee80211_pv1_probe_response_req_full_ssid,
25545 &hf_ieee80211_pv1_probe_response_req_next_tbtt,
25546 &hf_ieee80211_pv1_probe_response_req_access_network_option,
25547 &hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility,
25548 &hf_ieee80211_pv1_probe_response_req_supported_rates,
25549 &hf_ieee80211_pv1_probe_response_req_s1g_capability,
25550 &hf_ieee80211_pv1_probe_response_req_s1g_operation,
25551 &hf_ieee80211_pv1_probe_response_req_rsn,
25552 NULL((void*)0)
25553};
25554
25555static int
25556dissect_pv1_probe_response_option(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25557{
25558 int offset = 0;
25559
25560 /*
25561 * TODO: Check that the number of bytes matches what the probe response
25562 * group bitmap says should be there.
25563 */
25564 if (tvb_reported_length_remaining(tvb, offset) == 1) {
25565 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25566 hf_ieee80211_s1g_probe_resp_subfield_0,
25567 ett_s1g_probe_resp_subfield_0,
25568 subfield_0,
25569 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25570 offset += 1;
25571 } else if (tvb_reported_length_remaining(tvb, offset) > 1) {
25572 uint8_t opt_bitmaps = tvb_get_uint8(tvb, offset);
25573
25574 proto_tree_add_item(tree, hf_ieee80211_s1g_probe_response_group_bitmap,
25575 tvb, offset, 1, ENC_NA0x00000000);
25576 offset += 1;
25577 if (opt_bitmaps & 0x01) { /* Default Bitmap */
25578 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25579 hf_ieee80211_s1g_probe_resp_subfield_0,
25580 ett_s1g_probe_resp_subfield_0,
25581 subfield_0,
25582 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25583 offset += 1;
25584 }
25585 }
25586
25587 return offset;
25588}
25589
25590static void
25591s1g_max_awake_duration_custom(char *result, uint16_t duration)
25592{
25593 if (duration == 0)
25594 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "No limit applies");
25595 else
25596 snprintf(result, ITEM_LABEL_LENGTH240, "%d uS", (int)duration * 40);
25597}
25598
25599static void
25600s1g_recovery_time_duration_custom(char *result, uint16_t duration)
25601{
25602 snprintf(result, ITEM_LABEL_LENGTH240, "%d uS", (int)duration * 40);
25603}
25604
25605static int
25606dissect_el_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25607{
25608 int offset = 0;
25609
25610 proto_tree_add_item(tree, hf_ieee80211_s1g_el_op_max_awake_duration, tvb,
25611 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25612 offset += 2;
25613
25614 proto_tree_add_item(tree, hf_ieee80211_s1g_el_op_recovery_time_duration, tvb,
25615 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25616 offset += 2;
25617
25618 return offset;
25619}
25620
25621static int
25622dissect_sectorized_group_id_list(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25623{
25624 int offset = 0;
25625 int len = tvb_reported_length_remaining(tvb, offset);
25626
25627 /* Break this out some more */
25628 proto_tree_add_item(tree, hf_ieee80211_s1g_sectorized_group_id_list, tvb,
25629 offset, len, ENC_NA0x00000000);
25630 offset += len;
25631
25632 return offset;
25633}
25634
25635static int * const channel_width_fields[] = {
25636 &hf_ieee80211_s1g_primary_channel_width,
25637 &hf_ieee80211_s1g_bss_operating_channel_width,
25638 &hf_ieee80211_s1g_primary_channel_location,
25639 &hf_ieee80211_s1g_reserved_b6,
25640 &hf_ieee80211_s1g_mcs10_use,
25641 NULL((void*)0)
25642};
25643
25644static const value_string one_mhz_primary_channel_vals[] = {
25645 { 0, "1 MHz BSS operating channel width" },
25646 { 1, "2 MHz BSS operating channel width" },
25647 { 3, "4 MHz BSS operating channel width" },
25648 { 7, "8 MHz BSS operating channel width" },
25649 { 15, "16 MHz BSS operating channel width" },
25650 { 0, NULL((void*)0) },
25651};
25652
25653static const value_string two_mhz_primary_channel_vals[] = {
25654 { 1, "2 MHz BSS operating channel width" },
25655 { 3, "4 MHz BSS operating channel width" },
25656 { 7, "8 MHz BSS operating channel width" },
25657 { 15, "16 MHz BSS operating channel width" },
25658 { 0, NULL((void*)0) },
25659};
25660
25661static const value_string primary_channel_width_vals[] = {
25662 { 0, "2MHz BSS Primary Channel Width" },
25663 { 1, "1MHz BSS Primary Channel Width" },
25664 { 0, NULL((void*)0) }
25665};
25666
25667static const value_string one_mhz_primary_channel_location_vals[] = {
25668 { 0, "Located on lower side of 2MHz primary channel" },
25669 { 1, "Located on upper side of 2MHz primary channel" },
25670 { 0, NULL((void*)0) }
25671};
25672
25673static const value_string mcs10_use_vals[] = {
25674 { 0, "Use of MCS10 possible" },
25675 { 1, "Use of MCS10 not recommended" },
25676 { 0, NULL((void*)0) }
25677};
25678
25679static int
25680dissect_s1g_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25681{
25682 int offset = 0;
25683 proto_tree *s1g_op_info = NULL((void*)0);
25684 proto_item *cw_item = NULL((void*)0);
25685 uint8_t chan_width = 0;
25686
25687 s1g_op_info = proto_tree_add_subtree(tree, tvb, offset, 4,
25688 ett_s1g_operation_info,
25689 NULL((void*)0), "S1G Operation Information");
25690
25691 chan_width = tvb_get_uint8(tvb, offset);
25692 cw_item = proto_tree_add_bitmask_with_flags(s1g_op_info, tvb, offset,
25693 hf_ieee80211_s1g_channel_width,
25694 ett_s1g_channel_width,
25695 channel_width_fields,
25696 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25697 if (chan_width & 0x01) {
25698 proto_item_append_text(cw_item, ": %s",
25699 val_to_str(pinfo->pool, (chan_width >> 1) & 0x0F,
25700 one_mhz_primary_channel_vals,
25701 "Invalid BSS Channel Width value"));
25702 } else {
25703 proto_item_append_text(cw_item, ": %s",
25704 val_to_str(pinfo->pool, (chan_width >> 1) & 0x0F,
25705 two_mhz_primary_channel_vals,
25706 "Invalid BSS Channel Width value"));
25707 }
25708 offset += 1;
25709
25710 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_operating_class, tvb,
25711 offset, 1, ENC_NA0x00000000);
25712 offset += 1;
25713
25714 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_primary_channel_number, tvb,
25715 offset, 1, ENC_NA0x00000000);
25716 offset += 1;
25717
25718 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_channel_center_frequency,
25719 tvb, offset, 1, ENC_NA0x00000000);
25720 offset += 1;
25721
25722 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_basic_mcs_and_nss_set,
25723 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25724 offset += 2;
25725
25726 return offset;
25727}
25728
25729#define HEADER_COMP_STORE_A30x02 0x02
25730#define HEADER_COMP_STORE_A40x04 0x04
25731#define HEADER_COMP_CCMP_UPDATE0x08 0x08
25732
25733static int * const header_compression_control_headers[] = {
25734 &hf_ieee80211_s1g_header_comp_req_resp,
25735 &hf_ieee80211_s1g_header_comp_store_a3,
25736 &hf_ieee80211_s1g_header_comp_store_a4,
25737 &hf_ieee80211_s1g_header_comp_ccmp_update_present,
25738 &hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported,
25739 &hf_ieee80211_s1g_header_comp_reserved,
25740 NULL((void*)0)
25741};
25742
25743static int
25744dissect_header_compression(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25745{
25746 int offset = 0;
25747 uint8_t control = tvb_get_uint8(tvb, offset);
25748
25749 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25750 hf_ieee80211_s1g_header_comp_control,
25751 ett_s1g_header_comp_control,
25752 header_compression_control_headers,
25753 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25754 offset += 1;
25755
25756 if (control & HEADER_COMP_STORE_A30x02) {
25757 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_a3, tvb,
25758 offset, 6, ENC_NA0x00000000);
25759 offset += 6;
25760 }
25761
25762 if (control & HEADER_COMP_STORE_A40x04) {
25763 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_a4, tvb,
25764 offset, 6, ENC_NA0x00000000);
25765 offset += 6;
25766 }
25767
25768 /* TODO: Break this out */
25769 if (control & HEADER_COMP_CCMP_UPDATE0x08) {
25770 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_ccmp_update, tvb,
25771 offset, 5, ENC_NA0x00000000);
25772 offset += 5;
25773 }
25774
25775 return offset;
25776}
25777
25778static const value_string sst_channel_unit_vals[] = {
25779 { 0, "Channel Width Unit is 2 MHz" },
25780 { 1, "Channel Width Unit is 1 MHz" },
25781 { 0, NULL((void*)0) }
25782};
25783
25784static int
25785dissect_sst_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25786{
25787 int offset = 0;
25788
25789 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_enabled_channel_bitmap, tvb,
25790 offset, 1, ENC_NA0x00000000);
25791 offset += 1;
25792
25793 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_primary_channel_offset, tvb,
25794 offset, 1, ENC_NA0x00000000);
25795 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_channel_unit, tvb, offset,
25796 1, ENC_NA0x00000000);
25797 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_reserved, tvb, offset, 1,
25798 ENC_NA0x00000000);
25799 offset += 1;
25800
25801 return offset;
25802}
25803
25804static int
25805dissect_max_away_duration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25806{
25807 int offset = 0;
25808
25809 proto_tree_add_item(tree, hf_ieee80211_s1g_max_away_duration, tvb, offset,
25810 2, ENC_LITTLE_ENDIAN0x80000000);
25811 offset += 2;
25812
25813 return offset;
25814}
25815
25816static int
25817dissect_mcs_set(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset, bool_Bool basic, bool_Bool vendorspecific)
25818{
25819 proto_item *ti;
25820 proto_tree *mcs_tree, *bit_tree;
25821 uint8_t rx_nss, tx_nss; /* 0-4 for HT and 0-8 for VHT*/
25822 uint32_t value_mcs_0_31, value_mcs_32_52, value_mcs_53_76;
25823 uint16_t tx_mcs_set;
25824 rx_nss = tx_nss = 8;
25825 /* 16 byte Supported MCS set */
25826 if (vendorspecific)
25827 {
25828 ti = proto_tree_add_item(tree, hf_ieee80211_mcsset_vs, tvb, offset, 16, ENC_NA0x00000000);
25829 } else
25830 {
25831 ti = proto_tree_add_item(tree, hf_ieee80211_mcsset, tvb, offset, 16, ENC_NA0x00000000);
25832 }
25833 proto_item_append_text(ti, ": %s", basic ? "Basic MCS Set" : "MCS Set");
25834 mcs_tree = proto_item_add_subtree(ti, ett_mcsset_tree);
25835
25836 /* Rx MCS Bitmask */
25837 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_rx_bitmask, tvb, offset, 10, ENC_NA0x00000000);
25838 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
25839
25840 /* Bits 0 - 31 */
25841 value_mcs_0_31 = tvb_get_letohl(tvb, offset);
25842
25843 /* Handle all zeroes/ff's case..*/
25844 if (value_mcs_0_31 != 0x0)
25845 {
25846 if (!(value_mcs_0_31 & (0xffffff00))) {
25847 /*
25848 * At least one MCS from 0-7 is supported, but no MCS from 8-31 are
25849 * supported, so only 1 spatial stream is supported.
25850 */
25851 rx_nss = 0;
25852 } else if (!(value_mcs_0_31 & (0xffff0000))) {
25853 /*
25854 * At least one MCS from 8-15 is supported, but no MCS from 16-31 are
25855 * supported, so only 2 spatial streams are supported.
25856 */
25857 rx_nss = 1;
25858 } else if (!(value_mcs_0_31 & (0xff000000))) {
25859 /*
25860 * At least one MCS from 16-23 is supported, but no MCS from 24-31 are
25861 * supported, so only 3 spatial streams are supported.
25862 */
25863 rx_nss = 2;
25864 } else {
25865 /*
25866 * At least one MCS from 24-31 is supported, so 4 spatial streams
25867 * are supported.
25868 */
25869 rx_nss = 3;
25870 }
25871 }
25872
25873 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_0to7, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25874 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_8to15, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25875 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_16to23, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25876 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_24to31, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25877 offset += 4;
25878
25879 /* Should be we check UEQM Supported?*/
25880 /* Bits 32 - 52 */
25881 value_mcs_32_52 = tvb_get_letohl(tvb, offset);
25882 if (!(value_mcs_32_52 & (0x1ffffe))) {
25883 /*
25884 * MCS 33-52 aren't supported, so the number of spatial streams we get
25885 * from whichever MCSes from 0-31 that we support is the total number
25886 * of spatial streams we support.
25887 */
25888 ;
25889 } else if (!(value_mcs_32_52 & (0x1fff80))) {
25890 /*
25891 * At least one MCS from 33-38 is supported, but no MCS from 39-52 is
25892 * supported, so we have at least 2 spatial streams, but none of the
25893 * MCSs in that range give us any more.
25894 */
25895 rx_nss = MAX(1, rx_nss)(((1) > (rx_nss)) ? (1) : (rx_nss));
25896 } else {
25897 /*
25898 * At least one MCS from 39-52 is supported, so we have at least 3
25899 * spatial streams.
25900 */
25901 rx_nss = MAX(2, rx_nss)(((2) > (rx_nss)) ? (2) : (rx_nss));
25902 }
25903
25904 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_32, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25905 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_33to38, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25906 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_39to52, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25907 offset += 2;
25908
25909 /* Bits 53 - 76 */
25910 value_mcs_53_76 = tvb_get_letohl(tvb, offset);
25911 if ((value_mcs_53_76 & (0x1fffffe0))) {
25912 /*
25913 * At least one MCS from 53-76 is supported, so we have at least 4
25914 * spatial streams.
25915 */
25916 rx_nss = MAX(3, rx_nss)(((3) > (rx_nss)) ? (3) : (rx_nss));
25917 }
25918
25919 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_53to76, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
25920 offset += 4;
25921
25922 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_highest_data_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25923 offset += 2;
25924
25925 /* Follow table 8-126 from 802.11-2012 */
25926 tx_mcs_set = tvb_get_letohs(tvb, offset);
25927
25928 if (!(tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
25929 {
25930 /* TX MCS Set is not defined
25931 * so there is no interpretation for Max Tx Spatial Streams
25932 */
25933 tx_nss = 4; /* Not Defined*/
25934 }
25935
25936 if ((tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
25937 {
25938 /* TX MCS Set is defined to be equal to Rx MCS Set
25939 * So, get the Max Spatial Streams from Rx
25940 * MCS set
25941 */
25942 tx_nss = rx_nss;
25943 }
25944 proto_item_append_text(ti, ": %s", val_to_str(pinfo->pool, rx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
25945
25946 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_mcs_set_defined, tvb, offset, 1,
25947 ENC_LITTLE_ENDIAN0x80000000);
25948 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal, tvb, offset, 1,
25949 ENC_LITTLE_ENDIAN0x80000000);
25950 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_max_spatial_streams, tvb, offset, 1,
25951 ENC_LITTLE_ENDIAN0x80000000);
25952 proto_item_append_text(ti, ", %s", val_to_str(pinfo->pool, tx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
25953 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_unequal_modulation, tvb, offset, 1,
25954 ENC_LITTLE_ENDIAN0x80000000);
25955 offset += 1;
25956
25957 offset += 3;
25958 return offset;
25959}
25960
25961/* 802.11n - HT Operation IE */
25962static int
25963dissect_ht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
25964{
25965 int tag_len = tvb_reported_length(tvb);
25966 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
25967 int offset = 0;
25968 static int * const ieee80211_ht_operation_info1_field[] = {
25969 &hf_ieee80211_ht_operation_info_secondary_channel_offset,
25970 &hf_ieee80211_ht_operation_info_sta_channel_width,
25971 &hf_ieee80211_ht_operation_info_rifs_mode,
25972 &hf_ieee80211_ht_operation_info_reserved_b4_b7,
25973 NULL((void*)0)
25974 };
25975
25976 static int * const ieee80211_ht_operation_info2_field[] = {
25977 &hf_ieee80211_ht_operation_info_protection,
25978 &hf_ieee80211_ht_operation_info_non_greenfield_sta_present,
25979 &hf_ieee80211_ht_operation_info_reserved_b11,
25980 &hf_ieee80211_ht_operation_info_obss_non_ht_stas_present,
25981 &hf_ieee80211_ht_operation_info_channel_center_freq_seg_2,
25982 &hf_ieee80211_ht_operation_info_reserved_b21_b23,
25983 NULL((void*)0)
25984 };
25985
25986 static int * const ieee80211_ht_operation_info3_field[] = {
25987 &hf_ieee80211_ht_operation_info_reserved_b24_b29,
25988 &hf_ieee80211_ht_operation_info_dual_beacon,
25989 &hf_ieee80211_ht_operation_info_dual_cts_protection,
25990 &hf_ieee80211_ht_operation_info_stbc_beacon,
25991 &hf_ieee80211_ht_operation_info_reserved_b33_b39,
25992 NULL((void*)0)
25993 };
25994
25995 if (tag_len < 22) {
25996 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
25997 "HT Operation IE content length %u wrong, must be at least 22 bytes", tag_len);
25998 return 1;
25999 }
26000
26001 proto_tree_add_item(tree, hf_ieee80211_ht_operation_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26002 offset += 1;
26003
26004 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter1,
26005 ett_ht_operation_info_delimiter1_tree, ieee80211_ht_operation_info1_field,
26006 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26007 offset += 1;
26008
26009
26010 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter2,
26011 ett_ht_operation_info_delimiter2_tree, ieee80211_ht_operation_info2_field,
26012 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26013 offset += 2;
26014
26015 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter3,
26016 ett_ht_operation_info_delimiter3_tree, ieee80211_ht_operation_info3_field,
26017 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26018 offset += 2;
26019
26020 /* Basic HT-MCS Set present in Beacon, Probe Response, Mesh Peering Open and Mesh Peering
26021 * Confirm frames. Otherwise reserved.
26022 */
26023 if ((field_data->ftype && (field_data->ftype == MGT_BEACON0x08 || field_data->ftype == MGT_PROBE_RESP0x05)) ||
26024 (field_data->sanity_check && field_data->sanity_check->ampe_frame &&
26025 (field_data->sanity_check->ampe_frame == SELFPROT_ACTION_MESH_PEERING_OPEN1 ||
26026 field_data->sanity_check->ampe_frame == SELFPROT_ACTION_MESH_PEERING_CONFIRM2))) {
26027 offset = dissect_mcs_set(tree, pinfo, tvb, offset, true1, false0);
26028 } else {
26029 proto_tree_add_item(tree, hf_ieee80211_ht_operation_mcsset_reserved,
26030 tvb, offset, 16, ENC_NA0x00000000);
26031 offset += 16;
26032 }
26033
26034 return offset;
26035}
26036
26037static int
26038dissect_wapi_param_set(tvbuff_t *tvb, packet_info *pinfo,
26039 proto_tree *tree, int offset, uint32_t tag_len, proto_item *ti_len,
26040 proto_item *ti, int ftype)
26041{
26042 /* Parse the WAPI Parameter Set IE Here*/
26043 proto_item *item;
26044 proto_tree *subtree;
26045 uint16_t loop_cnt, version, akm_cnt = 1, ucast_cnt = 1, bkid_cnt = 1;
26046 uint8_t akm_suite_type = 0, ucast_cipher_type = 0, mcast_cipher_type = 0;
26047 static int * const ieee80211_tag_wapi_param_set[] = {
26048 &hf_ieee80211_tag_wapi_param_set_capab_preauth,
26049 &hf_ieee80211_tag_wapi_param_set_capab_rsvd,
26050 NULL((void*)0)
26051 };
26052
26053 version = tvb_get_letohs(tvb, offset);
26054 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26055 offset += 2;
26056
26057 /*MIN: 2 + (2+4)+ (2+4) + 4 + 2 + 0 (BKID CNT and LIST) =20*/
26058 if (tag_len < 20) {
26059 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26060 "tag_len is %d, it's neither WAPI not BSS-AC-Access-Delay", tag_len);
26061 return offset;
26062 }
26063
26064 if (version != 1) {
26065 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26066 "Version of WAPI protocol is %d, must be = 1", version);
26067 return offset;
26068 }
26069
26070 /* AKM Suites: list can't be 0*/
26071 akm_cnt = tvb_get_letohs(tvb, offset);
26072 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_akm_suite_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26073 offset += 2;
26074 if (akm_cnt != 0) {
26075 proto_item_append_text(ti, " : AKM Suite List:");
26076 for (loop_cnt = 0; loop_cnt < akm_cnt; loop_cnt++) {
26077 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_akm_tree);
26078 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26079 offset += 3;
26080 akm_suite_type = tvb_get_uint8(tvb, offset);
26081 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26082 offset += 1;
26083 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(pinfo->pool, akm_suite_type,
26084 ieee80211_wapi_suite_type_short, "Reserved: %d"));
26085 }
26086 proto_item_append_text(ti, " /");
26087 } else {
26088 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of AKM suites is 0, must be min 1");
26089 return offset;
26090
26091 }
26092 /* Unicast Cipher Suites: list can't be 0*/
26093 ucast_cnt = tvb_get_letohs(tvb, offset);
26094 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
26095 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26096 offset += 2;
26097 if (ucast_cnt != 0) {
26098 proto_item_append_text(ti, " Unicast Cipher List:");
26099 for (loop_cnt = 0; loop_cnt < ucast_cnt; loop_cnt++) {
26100 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_ucast_tree);
26101 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26102 offset += 3;
26103 ucast_cipher_type = tvb_get_uint8(tvb, offset);
26104 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26105 offset += 1;
26106 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(pinfo->pool, ucast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
26107 }
26108 proto_item_append_text(ti, " /");
26109 } else {
26110 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of Unicast Cipher suites is 0, must be min 1");
26111 return offset;
26112
26113 }
26114
26115 /* Multicast Cipher Suites*/
26116 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26117 offset += 3;
26118 mcast_cipher_type = tvb_get_uint8(tvb, offset);
26119 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26120 offset += 1;
26121 proto_item_append_text(ti, " Multicast Cipher: %s", val_to_str(pinfo->pool, mcast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
26122
26123 /* WAPI capability */
26124 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_wapi_param_set_capab,
26125 ett_tag_wapi_param_set_preauth_tree, ieee80211_tag_wapi_param_set,
26126 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26127 offset += 2;
26128
26129 /* BKID List: The list can be 0
26130 * Applicable only for assoc/re-assoc
26131 */
26132 if (ftype == MGT_ASSOC_REQ0x00 || ftype == MGT_REASSOC_REQ0x02 ) {
26133 bkid_cnt = tvb_get_letohs(tvb, offset);
26134 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26135 offset += 2;
26136 if (bkid_cnt != 0) {
26137 for (loop_cnt = 0; loop_cnt < bkid_cnt; loop_cnt++) {
26138 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_list, tvb, offset, 16, ENC_NA0x00000000);
26139 offset += 16;
26140 }
26141 }
26142 }
26143 return offset;
26144}
26145
26146static int * const ieee80211_bss_max_idle_options[] = {
26147 &hf_ieee80211_tag_bss_max_idle_options_protected,
26148 &hf_ieee80211_tag_bss_idle_options_reserved,
26149 NULL((void*)0)
26150};
26151
26152static int
26153dissect_bss_max_idle_period(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26154{
26155 int offset = 0;
26156
26157 proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_period,
26158 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26159 offset += 2;
26160
26161 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
26162 hf_ieee80211_tag_bss_max_idle_options,
26163 ett_max_idle_period_options,
26164 ieee80211_bss_max_idle_options,
26165 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26166 offset++;
26167
26168 return offset;
26169}
26170
26171enum tfs_request_subelem_id {
26172 TFS_REQ_SUBELEM_TFS = 1,
26173 TFS_REQ_SUBELEM_VENDOR_SPECIFIC = 221
26174};
26175
26176static const value_string tfs_request_subelem_ids[] = {
26177 { TFS_REQ_SUBELEM_TFS, "TFS subelement" },
26178 { TFS_REQ_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
26179 { 0, NULL((void*)0) }
26180};
26181
26182static int
26183dissect_tfs_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26184{
26185 int tag_len = tvb_reported_length(tvb);
26186 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26187 int offset = 0;
26188 const uint8_t ids[] = {
26189 1, /* TFS Subelement */
26190 TAG_VENDOR_SPECIFIC_IE221
26191 };
26192
26193 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_id,
26194 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26195 offset++;
26196 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_delete_after_match,
26197 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26198 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_notify,
26199 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26200 offset++;
26201 if (offset + 1 >= tag_len) {
26202 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
26203 "No TFS Request subelements in TFS Request");
26204 return tvb_captured_length(tvb);
26205 }
26206
26207 while (offset + 1 < tag_len) {
26208 uint8_t id, len;
26209 int s_offset, s_end;
26210
26211 id = tvb_get_uint8(tvb, offset);
26212 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_id,
26213 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26214 offset++;
26215 len = tvb_get_uint8(tvb, offset);
26216 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_len,
26217 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26218 offset++;
26219 if (offset + len > tag_len) {
26220 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
26221 "Not enough data for TFS Request subelement");
26222 return tvb_captured_length(tvb);
26223 }
26224 switch (id) {
26225 case TFS_REQ_SUBELEM_TFS:
26226 s_offset = offset;
26227 s_end = offset + len;
26228 while (s_offset < s_end) {
26229 /* TODO 1 is interpreted as TAG_SUPP_RATES, fix this! */
26230 int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, field_data->ftype, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
26231 if (tlen==0)
26232 break;
26233 s_offset += tlen;
26234 }
26235 break;
26236 default:
26237 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem,
26238 tvb, offset, len, ENC_NA0x00000000);
26239 break;
26240 }
26241 offset += len;
26242 }
26243
26244 if (offset < tag_len) {
26245 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
26246 tvb, offset, tag_len - offset, "Extra data after TFS Subelements");
26247 }
26248
26249 return tvb_captured_length(tvb);
26250}
26251
26252enum tfs_response_subelem_id {
26253 TFS_RESP_SUBELEM_TFS_STATUS = 1,
26254 TFS_RESP_SUBELEM_TFS = 2,
26255 TFS_RESP_SUBELEM_VENDOR_SPECIFIC = 221
26256};
26257
26258static const value_string tfs_response_subelem_ids[] = {
26259 { TFS_RESP_SUBELEM_TFS_STATUS, "TFS Status subelement" },
26260 { TFS_RESP_SUBELEM_TFS, "TFS subelement" },
26261 { TFS_RESP_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
26262 { 0, NULL((void*)0) }
26263};
26264
26265static int
26266dissect_tfs_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26267{
26268 int tag_len = tvb_reported_length(tvb);
26269 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26270 int offset = 0;
26271 const uint8_t ids[] = {
26272 1, /* TFS Status subelement*/
26273 2, /* TFS subelement */
26274 TAG_VENDOR_SPECIFIC_IE221
26275 };
26276
26277 while (offset + 3 <= tag_len) {
26278 uint8_t id, len;
26279 int s_offset, s_end;
26280
26281 id = tvb_get_uint8(tvb, offset);
26282 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_id,
26283 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26284 offset++;
26285 len = tvb_get_uint8(tvb, offset);
26286 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_len,
26287 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26288 offset++;
26289 if (offset + len > tag_len) {
26290 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
26291 "Not enough data for TFS Request subelement");
26292 return tvb_captured_length(tvb);
26293 }
26294 switch (id) {
26295 case TFS_RESP_SUBELEM_TFS_STATUS:
26296 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_status,
26297 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26298 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_id,
26299 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
26300 break;
26301 case TFS_RESP_SUBELEM_TFS:
26302 s_offset = offset;
26303 s_end = offset + len;
26304 while (s_offset < s_end) {
26305 /* TODO Element IDs 1 and 2 are misinterpreted! */
26306 int tlen = add_tagged_field(pinfo, tree, tvb, s_offset, field_data->ftype, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
26307 if (tlen==0)
26308 break;
26309 s_offset += tlen;
26310 }
26311 break;
26312 default:
26313 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem,
26314 tvb, offset, len, ENC_NA0x00000000);
26315 break;
26316 }
26317
26318 offset += len;
26319 }
26320
26321 if (offset < tag_len) {
26322 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
26323 tvb, offset, tag_len - offset, "Extra data after TFS Subelements");
26324 }
26325
26326 return tvb_captured_length(tvb);
26327}
26328
26329static const value_string wnm_sleep_mode_action_types[] = {
26330 { 0, "Enter WNM-Sleep Mode" },
26331 { 1, "Exit WNM-Sleep Mode" },
26332 { 0, NULL((void*)0) }
26333};
26334
26335static const value_string wnm_sleep_mode_response_status_vals[] = {
26336 { 0, "Enter/Exit WNM-Sleep Mode Accept" },
26337 { 1, "Exit WNM-Sleep Mode Accept, GTK/IGTK update required" },
26338 { 2, "Denied. The AP is unable to perform the requested action." },
26339 { 3, "Denied temporarily. The AP is unable to perform the requested action "
26340 "at the current time. The request can be submitted again at a later time."
26341 },
26342 { 4, "Denied. Due to the pending key expiration." },
26343 { 5, "Denied. The requested action was not granted due to other WNM services "
26344 "in use by the requesting STA." },
26345 { 0, NULL((void*)0) }
26346};
26347
26348static int
26349dissect_wnm_sleep_mode(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26350{
26351 int offset = 0;
26352 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_action_type,
26353 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26354 offset++;
26355 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_response_status,
26356 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26357 offset++;
26358 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_interval,
26359 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26360 offset += 2;
26361 return offset;
26362}
26363
26364static const value_string time_adv_timing_capab_vals[] = {
26365 { 0, "No standardized external time source" },
26366 { 1, "Timestamp offset based on UTC" },
26367 { 2, "UTC time at which the TSF timer is 0" },
26368 { 0, NULL((void*)0) }
26369};
26370
26371static int
26372dissect_time_adv(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26373{
26374 int offset = 0;
26375 uint8_t capab;
26376 proto_item *item;
26377 proto_tree *subtree;
26378 struct tm tm, *now;
26379 time_t t;
26380
26381 capab = tvb_get_uint8(tvb, offset);
26382 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_timing_capab,
26383 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26384 offset += 1;
26385
26386 switch (capab) {
26387 case 1:
26388 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
26389 tvb, offset, 10, ENC_NA0x00000000);
26390 offset += 10;
26391
26392 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
26393 tvb, offset, 5, ENC_NA0x00000000);
26394 offset += 5;
26395 break;
26396 case 2:
26397 item = proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
26398 tvb, offset, 10, ENC_NA0x00000000);
26399 subtree = proto_item_add_subtree(item, ett_tag_time_adv_tree);
26400 memset(&tm, 0, sizeof(tm));
26401 tm.tm_year = tvb_get_letohs(tvb, offset) - 1900;
26402 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_year,
26403 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26404 offset += 2;
26405 tm.tm_mon = tvb_get_uint8(tvb, offset) - 1;
26406 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_month,
26407 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26408 offset += 1;
26409 tm.tm_mday = tvb_get_uint8(tvb, offset);
26410 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_day,
26411 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26412 offset += 1;
26413 tm.tm_hour = tvb_get_uint8(tvb, offset);
26414 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_hours,
26415 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26416 offset += 1;
26417 tm.tm_min = tvb_get_uint8(tvb, offset);
26418 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_minutes,
26419 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26420 offset += 1;
26421 tm.tm_sec = tvb_get_uint8(tvb, offset);
26422 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_seconds,
26423 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26424 offset += 1;
26425 proto_tree_add_item(subtree,
26426 hf_ieee80211_tag_time_adv_time_value_milliseconds,
26427 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26428 offset += 2;
26429 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
26430 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26431 offset += 1;
26432
26433 tm.tm_isdst = -1;
26434 t = mktime(&tm);
26435 if (t != -1) {
26436 t += (time_t)(last_timestamp / 1000000);
26437 now = localtime(&t);
26438 if (now)
26439 proto_item_append_text(item,
26440 ": current time=%u-%02u-%02u %02u:%02u:%02u",
26441 now->tm_year + 1900, now->tm_mon + 1,
26442 now->tm_mday, now->tm_hour, now->tm_min,
26443 now->tm_sec);
26444 }
26445
26446 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
26447 tvb, offset, 5, ENC_NA0x00000000);
26448 offset += 5;
26449
26450 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
26451 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26452 offset += 1;
26453 break;
26454 }
26455
26456 return offset;
26457}
26458
26459static int
26460dissect_time_zone(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26461{
26462 int tag_len = tvb_reported_length(tvb);
26463 int offset = 0;
26464
26465 proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
26466 ENC_ASCII0x00000000);
26467 return tvb_captured_length(tvb);
26468}
26469
26470static int
26471dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26472{
26473 int tag_len = tvb_reported_length(tvb);
26474 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26475 int offset = 0;
26476
26477 if (tag_len < 1) {
26478 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26479 "AP Channel Report length %u wrong, must be > 1", tag_len);
26480 return tvb_captured_length(tvb);
26481 }
26482
26483 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_operating_class, tvb,
26484 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26485 proto_item_append_text(field_data->item_tag, ": Operating Class %u, Channel List :", tvb_get_uint8(tvb, offset));
26486 offset += 1;
26487
26488 while (offset < tag_len)
26489 {
26490 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA0x00000000);
26491 proto_item_append_text(field_data->item_tag, " %u,", tvb_get_uint8(tvb, offset));
26492 offset += 1;
26493 }
26494 return tvb_captured_length(tvb);
26495}
26496
26497static int
26498dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26499{
26500 int tag_len = tvb_reported_length(tvb);
26501 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26502 int offset = 0;
26503 if (tag_len != 1) {
26504 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26505 "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
26506 return 1;
26507 }
26508
26509 proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
26510 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26511 return tvb_captured_length(tvb);
26512}
26513
26514/* RCPI (53) */
26515static int
26516dissect_rcpi_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26517{
26518 int tag_len = tvb_reported_length(tvb);
26519 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26520 int offset = 0;
26521
26522 if (tag_len != 1)
26523 {
26524 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26525 "RCPI length %u wrong, must = 1", tag_len);
26526 return 1;
26527 }
26528
26529 proto_tree_add_item(tree, hf_ieee80211_tag_rcpi, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26530 offset += 1;
26531
26532 return offset;
26533}
26534
26535/* BSS Average Access Delay element (63) */
26536static int
26537dissect_bss_avg_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26538{
26539 int tag_len = tvb_reported_length(tvb);
26540 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26541 int offset = 0;
26542 if (tag_len != 1) {
26543 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26544 "BSS Average Access Delay length %u wrong, must be = 1", tag_len);
26545 return 1;
26546 }
26547
26548 proto_tree_add_item(tree, hf_ieee80211_tag_bss_ap_avg_access_delay, tvb,
26549 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26550 return tvb_captured_length(tvb);
26551}
26552
26553static int
26554dissect_antenna_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26555{
26556 int tag_len = tvb_reported_length(tvb);
26557 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26558 int offset = 0;
26559
26560 if (tag_len != 1) {
26561 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26562 "Antenna length %u wrong, must be = 1", tag_len);
26563 return 1;
26564 }
26565
26566 proto_tree_add_item(tree, hf_ieee80211_tag_antenna_id, tvb,
26567 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26568
26569 return tvb_captured_length(tvb);
26570}
26571
26572static int
26573dissect_rsni_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26574{
26575 int tag_len = tvb_reported_length(tvb);
26576 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26577 int offset = 0;
26578
26579 if (tag_len != 1) {
26580 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26581 "RSNI length %u wrong, must be = 1", tag_len);
26582 return 1;
26583 }
26584
26585 proto_tree_add_item(tree, hf_ieee80211_tag_rsni, tvb,
26586 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26587
26588 return tvb_captured_length(tvb);
26589}
26590
26591static int
26592dissect_measurement_pilot_trans_ie(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26593{
26594 int tag_len = tvb_reported_length(tvb);
26595 int offset = 0;
26596 const uint8_t ids[] = { TAG_VENDOR_SPECIFIC_IE221 };
26597
26598 /* The tag len can be 1 or more if there are sub-elements */
26599
26600 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
26601 1, ENC_NA0x00000000);
26602
26603 tag_len--;
26604 offset++;
26605
26606 /* Also handle the optional sub-elements */
26607
26608 if (tag_len > 0) {
26609 while (tag_len > 0) {
26610 uint8_t elt_len;
26611
26612 if (tvb_reported_length_remaining(tvb, offset) < 2) {
26613 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_bad_length,
26614 tvb, offset, tag_len - offset,
26615 "Remaining data does not include the tag length");
26616 break;
26617 }
26618 elt_len = tvb_get_uint8(tvb, offset + 1);
26619
26620 if(add_tagged_field(pinfo, tree, tvb, offset + 2, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
26621 /* TODO: Add an expert info here and skip the field. */
26622 break;
26623 }
26624
26625 tag_len -= elt_len + 2;
26626 offset += elt_len + 2;
26627 }
26628 }
26629
26630 return tvb_captured_length(tvb);
26631}
26632
26633static int
26634dissect_bss_available_admission_capacity_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26635{
26636 int tag_len = tvb_reported_length(tvb);
26637 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26638 int offset = 0;
26639 uint16_t bitmask;
26640 static int * const ieee80211_tag_bss_avb_adm_cap_bitmask[] = {
26641 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
26642 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
26643 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
26644 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
26645 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
26646 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
26647 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
26648 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
26649 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
26650 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
26651 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
26652 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
26653 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
26654 NULL((void*)0)
26655 };
26656
26657 if (tag_len < 2) {
26658 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26659 "BSS Available Admission Capacity length %u wrong, must > = 2", tag_len);
26660 return offset;
26661 }
26662
26663 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
26664 ett_tag_bss_bitmask_tree, ieee80211_tag_bss_avb_adm_cap_bitmask,
26665 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26666 bitmask = tvb_get_letohs(tvb, offset);
26667 offset += 2;
26668
26669 if(bitmask & BSS_BITMASK_UP00x0001)
26670 {
26671 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26672 offset += 2;
26673 }
26674 if(bitmask & BSS_BITMASK_UP10x0002)
26675 {
26676 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26677 offset += 2;
26678 }
26679 if(bitmask & BSS_BITMASK_UP20x0004)
26680 {
26681 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26682 offset += 2;
26683 }
26684 if(bitmask & BSS_BITMASK_UP30x0008)
26685 {
26686 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26687 offset += 2;
26688 }
26689 if(bitmask & BSS_BITMASK_UP40x0010)
26690 {
26691 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26692 offset += 2;
26693 }
26694 if(bitmask & BSS_BITMASK_UP50x0020)
26695 {
26696 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26697 offset += 2;
26698 }
26699 if(bitmask & BSS_BITMASK_UP60x0040)
26700 {
26701 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26702 offset += 2;
26703 }
26704 if(bitmask & BSS_BITMASK_UP70x0080)
26705 {
26706 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26707 offset += 2;
26708 }
26709 if(bitmask & BSS_BITMASK_AC00x0100)
26710 {
26711 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26712 offset += 2;
26713 }
26714 if(bitmask & BSS_BITMASK_AC10x0200)
26715 {
26716 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26717 offset += 2;
26718 }
26719 if(bitmask & BSS_BITMASK_AC20x0400)
26720 {
26721 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26722 offset += 2;
26723 }
26724 if(bitmask & BSS_BITMASK_AC30x0800)
26725 {
26726 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26727 offset += 2;
26728 }
26729 return offset;
26730}
26731
26732static int
26733dissect_bss_ac_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
26734 proto_tree *tree, int offset, uint32_t tag_len, proto_item *ti_len)
26735{
26736
26737 if (tag_len != 4) {
26738 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26739 "BSS AC Access Delay length %u wrong, must = 4", tag_len);
26740 return offset;
26741 }
26742
26743 /* TODO: Display the scaled representation of the average
26744 medium access delay (a big (precalculated) value_string ?)
26745 See 8.4.2.46 BSS AC Access Delay element ... */
26746
26747 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_be, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26748 offset += 1;
26749 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_bk, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26750 offset += 1;
26751 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vi, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26752 offset += 1;
26753 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vo, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26754 offset += 1;
26755
26756 return offset;
26757}
26758
26759/* RM Enabled Capabilities (70) */
26760static int
26761dissect_rm_enabled_capabilities_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26762{
26763 int tag_len = tvb_reported_length(tvb);
26764 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26765 int offset = 0;
26766 proto_item *ti_ex_cap;
26767 static int * const ieee80211_tag_rm_enabled_capabilities_octet1[] = {
26768 &hf_ieee80211_tag_rm_enabled_capabilities_b0,
26769 &hf_ieee80211_tag_rm_enabled_capabilities_b1,
26770 &hf_ieee80211_tag_rm_enabled_capabilities_b2,
26771 &hf_ieee80211_tag_rm_enabled_capabilities_b3,
26772 &hf_ieee80211_tag_rm_enabled_capabilities_b4,
26773 &hf_ieee80211_tag_rm_enabled_capabilities_b5,
26774 &hf_ieee80211_tag_rm_enabled_capabilities_b6,
26775 &hf_ieee80211_tag_rm_enabled_capabilities_b7,
26776 NULL((void*)0)
26777 };
26778
26779 static int * const ieee80211_tag_rm_enabled_capabilities_octet2[] = {
26780 &hf_ieee80211_tag_rm_enabled_capabilities_b8,
26781 &hf_ieee80211_tag_rm_enabled_capabilities_b9,
26782 &hf_ieee80211_tag_rm_enabled_capabilities_b10,
26783 &hf_ieee80211_tag_rm_enabled_capabilities_b11,
26784 &hf_ieee80211_tag_rm_enabled_capabilities_b12,
26785 &hf_ieee80211_tag_rm_enabled_capabilities_b13,
26786 &hf_ieee80211_tag_rm_enabled_capabilities_b14,
26787 &hf_ieee80211_tag_rm_enabled_capabilities_b15,
26788 NULL((void*)0)
26789 };
26790
26791 static int * const ieee80211_tag_rm_enabled_capabilities_octet3[] = {
26792 &hf_ieee80211_tag_rm_enabled_capabilities_b16,
26793 &hf_ieee80211_tag_rm_enabled_capabilities_b17,
26794 &hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
26795 &hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
26796 NULL((void*)0)
26797 };
26798
26799 static int * const ieee80211_tag_rm_enabled_capabilities_octet4[] = {
26800 &hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
26801 &hf_ieee80211_tag_rm_enabled_capabilities_b27,
26802 &hf_ieee80211_tag_rm_enabled_capabilities_b28,
26803 &hf_ieee80211_tag_rm_enabled_capabilities_b29,
26804 &hf_ieee80211_tag_rm_enabled_capabilities_b30,
26805 &hf_ieee80211_tag_rm_enabled_capabilities_b31,
26806 NULL((void*)0)
26807 };
26808
26809 static int * const ieee80211_tag_rm_enabled_capabilities_octet5[] = {
26810 &hf_ieee80211_tag_rm_enabled_capabilities_b32,
26811 &hf_ieee80211_tag_rm_enabled_capabilities_b33,
26812 &hf_ieee80211_tag_rm_enabled_capabilities_b34,
26813 &hf_ieee80211_tag_rm_enabled_capabilities_b35,
26814 &hf_ieee80211_tag_rm_enabled_capabilities_o5,
26815 NULL((void*)0)
26816 };
26817
26818 if (tag_len != 5)
26819 {
26820 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "RM Enabled Capabilities length %u wrong, must = 5", tag_len);
26821 return 1;
26822 }
26823 proto_item_append_text(field_data->item_tag, " (%d octets)", tag_len);
26824
26825 /* RM Enabled Capability octet 1 */
26826 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26827 ett_tag_rm_cap1, ieee80211_tag_rm_enabled_capabilities_octet1,
26828 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26829 proto_item_append_text(ti_ex_cap, " (octet 1)");
26830 offset += 1;
26831
26832 /* RM Enabled Capability octet 2 */
26833 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26834 ett_tag_rm_cap2, ieee80211_tag_rm_enabled_capabilities_octet2,
26835 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26836 proto_item_append_text(ti_ex_cap, " (octet 2)");
26837 offset += 1;
26838
26839 /* RM Enabled Capability octet 3 */
26840 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26841 ett_tag_rm_cap3, ieee80211_tag_rm_enabled_capabilities_octet3,
26842 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26843 proto_item_append_text(ti_ex_cap, " (octet 3)");
26844 offset += 1;
26845
26846 /* RM Enabled Capability octet 4 */
26847 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26848 ett_tag_rm_cap4, ieee80211_tag_rm_enabled_capabilities_octet4,
26849 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26850 proto_item_append_text(ti_ex_cap, " (octet 4)");
26851 offset += 1;
26852
26853 /* RM Enabled Capability octet 5 */
26854 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
26855 ett_tag_rm_cap5, ieee80211_tag_rm_enabled_capabilities_octet5,
26856 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26857 proto_item_append_text(ti_ex_cap, " (octet 5)");
26858 offset += 1;
26859
26860 return offset;
26861}
26862
26863/* Multiple BSSID (71) */
26864enum multiple_bssid_subelem_id {
26865 MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE = 0,
26866 MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC = 221
26867};
26868
26869static const value_string multiple_bssid_subelem_ids[] = {
26870 { MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE, "Nontransmitted BSSID Profile" },
26871 { MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific" },
26872 { 0, NULL((void*)0) }
26873};
26874
26875static int
26876dissect_multiple_bssid_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26877{
26878 unsigned tag_len = tvb_reported_length(tvb);
26879 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26880 unsigned offset = 0;
26881 uint8_t sub_tag_id, sub_tag_len;
26882 const char *sub_tag_name;
26883 proto_tree *sub_tag_tree;
26884 const uint8_t valid_ids[] = { TAG_VENDOR_SPECIFIC_IE221 };
26885 const uint8_t invalid_ids[] = { TAG_TIM5, TAG_DS_PARAMETER3, TAG_IBSS_PARAMETER6,
26886 TAG_COUNTRY_INFO7, TAG_CHANNEL_SWITCH_ANN37, TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60,
26887 TAG_WIDE_BW_CHANNEL_SWITCH194, TAG_TX_PWR_ENVELOPE195, TAG_SUPPORTED_OPERATING_CLASSES59, TAG_IBSS_DFS41,
26888 TAG_ERP_INFO42, TAG_ERP_INFO_OLD47, TAG_HT_CAPABILITY45, TAG_HT_OPERATION61, TAG_VHT_CAPABILITY191,
26889 TAG_VHT_OPERATION192, TAG_S1G_BEACON_COMPATIBILITY213, TAG_SHORT_BEACON_INTERVAL214,
26890 TAG_S1G_CAPABILITIES217, TAG_S1G_OPERATION232 };
26891 const uint8_t invalid_ext_ids[] = { ETAG_HE_CAPABILITIES35, ETAG_HE_OPERATION36,
26892 ETAG_HE_6GHZ_BAND_CAPABILITIES59, ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42, ETAG_SPATIAL_REUSE_PARAMETER_SET39 };
26893 uint32_t s_offset, s_end;
26894
26895 if (tag_len < 1)
26896 {
26897 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Multiple BSSID length %u wrong, must be at least 1", tag_len);
26898 return 1;
26899 }
26900
26901 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26902 offset++;
26903
26904 /* Optional sub-elements */
26905
26906 while (offset + 1 < tag_len) {
26907 sub_tag_id = tvb_get_uint8(tvb, offset);
26908 sub_tag_len = tvb_get_uint8(tvb, offset + 1);
26909 sub_tag_name = val_to_str_const(sub_tag_id, multiple_bssid_subelem_ids, "Unknown");
26910
26911 sub_tag_tree = proto_tree_add_subtree_format(tree, tvb, offset, sub_tag_len + 2, ett_tag_multiple_bssid_subelem_tree, NULL((void*)0), "Subelement: %s", sub_tag_name);
26912
26913 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26914 offset += 1;
26915
26916 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_len, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26917 offset += 1;
26918
26919 if (offset + sub_tag_len > tag_len) {
26920 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Not enough data for subelement");
26921 break;
26922 }
26923
26924 switch (sub_tag_id)
26925 {
26926 case MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE:
26927 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile, tvb, offset, sub_tag_len, ENC_NA0x00000000);
26928
26929 s_offset = offset;
26930 s_end = offset + sub_tag_len;
26931 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
26932 while (s_offset < s_end) {
26933 int tlen = add_tagged_field_with_validation(pinfo, sub_tag_tree, tvb, s_offset, 0,
26934 invalid_ids, G_N_ELEMENTS(invalid_ids)(sizeof (invalid_ids) / sizeof ((invalid_ids)[0])), true1,
26935 invalid_ext_ids, G_N_ELEMENTS(invalid_ext_ids)(sizeof (invalid_ext_ids) / sizeof ((invalid_ext_ids)[0])), true1, NULL((void*)0));
26936 if (tlen==0)
26937 break;
26938 s_offset += tlen;
26939 }
26940
26941 break;
26942
26943 case MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC:
26944 /*
26945 * add_tagged_field will insert expert info if there is a problem so
26946 * we ignore the return value.
26947 */
26948 add_tagged_field(pinfo, sub_tag_tree, tvb, offset, 0, valid_ids, G_N_ELEMENTS(valid_ids)(sizeof (valid_ids) / sizeof ((valid_ids)[0])), NULL((void*)0));
26949 break;
26950
26951 default:
26952 /* RESERVED */
26953 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_reserved, tvb, offset, sub_tag_len, ENC_NA0x00000000);
26954 break;
26955 }
26956
26957 offset += sub_tag_len;
26958
26959 }
26960
26961 if (offset < tag_len) {
26962 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
26963 tvb, offset, tag_len - offset, "Extra data after subelements");
26964 }
26965
26966 return tvb_captured_length(tvb);
26967}
26968
26969/* 20/40 BSS Coexistence (72) */
26970static int
26971dissect_20_40_bss_coexistence(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26972{
26973 int tag_len = tvb_reported_length(tvb);
26974 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26975 int offset = 0;
26976 static int * const ieee80211_20_40_bss_coexistence_fields[] = {
26977 &hf_ieee80211_tag_20_40_bc_information_request,
26978 &hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
26979 &hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request,
26980 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
26981 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
26982 &hf_ieee80211_tag_20_40_bc_reserved,
26983 NULL((void*)0)
26984 };
26985
26986 if (tag_len != 1)
26987 {
26988 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);
26989 return 1;
26990 }
26991
26992 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_20_40_bc,
26993 ett_tag_20_40_bc, ieee80211_20_40_bss_coexistence_fields,
26994 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26995
26996 offset += 1;
26997
26998 return offset;
26999}
27000
27001/* 20/40 BSS Intolerant Channel Report (73) */
27002static int
27003dissect_20_40_bss_intolerant(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27004{
27005 proto_item *intolerant_item;
27006 proto_tree *intolerant_tree;
27007 int tag_len = tvb_reported_length(tvb);
27008 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27009 int offset = 0;
27010 int channel_report_size = tag_len - 1; // minus regulator_class field
27011 int i;
27012
27013 if (tag_len < 2) {
27014 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
27015 "20/40 BSS Intolerant Channel Report length %u wrong, must > 1", tag_len);
27016 }
27017
27018 proto_tree_add_item(tree, hf_ieee80211_tag_intolerant_operating_class, tvb, offset, 1, ENC_NA0x00000000);
27019 offset += 1;
27020
27021 intolerant_item = proto_tree_add_item(tree, hf_ieee80211_tag_intolerant_channel_list, tvb, offset, channel_report_size, ENC_NA0x00000000);
27022 intolerant_tree = proto_item_add_subtree(intolerant_item, ett_tag_intolerant_tree);
27023 for (i = 0; i < channel_report_size; i++)
27024 {
27025 proto_tree_add_item(intolerant_tree, hf_ieee80211_tag_intolerant_channel, tvb, offset, 1, ENC_NA0x00000000);
27026 offset += 1;
27027 }
27028
27029 return offset;
27030}
27031
27032static int
27033dissect_ht_capability_ie_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
27034 uint32_t tag_len, proto_item *ti_len, bool_Bool vendorspecific)
27035{
27036 proto_item *cap_item, *ti;
27037 proto_tree *cap_tree;
27038 static int * const ieee80211_ht[] = {
27039 &hf_ieee80211_ht_ldpc_coding,
27040 &hf_ieee80211_ht_chan_width,
27041 &hf_ieee80211_ht_sm_pwsave,
27042 &hf_ieee80211_ht_green,
27043 &hf_ieee80211_ht_short20,
27044 &hf_ieee80211_ht_short40,
27045 &hf_ieee80211_ht_tx_stbc,
27046 &hf_ieee80211_ht_rx_stbc,
27047 &hf_ieee80211_ht_reserved_b10,
27048 &hf_ieee80211_ht_max_amsdu,
27049 &hf_ieee80211_ht_dss_cck_40,
27050 &hf_ieee80211_ht_reserved_b13,
27051 &hf_ieee80211_ht_40_mhz_intolerant,
27052 &hf_ieee80211_ht_reserved_b15,
27053 NULL((void*)0)
27054 };
27055
27056 static int * const ieee80211_htex[] = {
27057 &hf_ieee80211_htex_reserved_b0_b7,
27058 &hf_ieee80211_htex_mcs,
27059 &hf_ieee80211_htex_htc_support,
27060 &hf_ieee80211_htex_rd_responder,
27061 &hf_ieee80211_htex_reserved_b12_b15,
27062 NULL((void*)0)
27063 };
27064
27065 static int * const ieee80211_txbf[] = {
27066 &hf_ieee80211_txbf_cap,
27067 &hf_ieee80211_txbf_rcv_ssc,
27068 &hf_ieee80211_txbf_tx_ssc,
27069 &hf_ieee80211_txbf_rcv_ndp,
27070 &hf_ieee80211_txbf_tx_ndp,
27071 &hf_ieee80211_txbf_impl_txbf,
27072 &hf_ieee80211_txbf_calib,
27073 &hf_ieee80211_txbf_expl_csi,
27074 &hf_ieee80211_txbf_expl_uncomp_fm,
27075 &hf_ieee80211_txbf_expl_comp_fm,
27076 &hf_ieee80211_txbf_expl_bf_csi,
27077 &hf_ieee80211_txbf_expl_uncomp_fm_feed,
27078 &hf_ieee80211_txbf_expl_comp_fm_feed,
27079 &hf_ieee80211_txbf_min_group,
27080 &hf_ieee80211_txbf_csi_num_bf_ant,
27081 &hf_ieee80211_txbf_uncomp_sm_bf_ant,
27082 &hf_ieee80211_txbf_comp_sm_bf_ant,
27083 &hf_ieee80211_txbf_csi_max_rows_bf,
27084 &hf_ieee80211_txbf_chan_est,
27085 &hf_ieee80211_txbf_resrv,
27086 NULL((void*)0)
27087 };
27088
27089 static int * const ieee80211_antsel[] = {
27090 &hf_ieee80211_antsel_b0,
27091 &hf_ieee80211_antsel_b1,
27092 &hf_ieee80211_antsel_b2,
27093 &hf_ieee80211_antsel_b3,
27094 &hf_ieee80211_antsel_b4,
27095 &hf_ieee80211_antsel_b5,
27096 &hf_ieee80211_antsel_b6,
27097 &hf_ieee80211_antsel_b7,
27098 NULL((void*)0)
27099 };
27100
27101 if (tag_len != 26) {
27102 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
27103 "HT Capabilities IE length %u wrong, must be = 26", tag_len);
27104 return (offset > 0) ? offset : 1;
27105 }
27106
27107 if (wlan_ignore_draft_ht && vendorspecific)
27108 return (offset > 0) ? offset : 1;
27109
27110 /* 2 byte HT Capabilities Info*/
27111 if (vendorspecific)
27112 {
27113 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_vs_cap,
27114 ett_ht_cap_tree, ieee80211_ht,
27115 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27116 }
27117 else
27118 {
27119 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_cap,
27120 ett_ht_cap_tree, ieee80211_ht,
27121 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27122 }
27123 offset += 2;
27124
27125 /* 1 byte A-MPDU Parameters */
27126 if (vendorspecific)
27127 {
27128 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27129 } else
27130 {
27131 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27132 }
27133 cap_tree = proto_item_add_subtree(cap_item, ett_ampduparam_tree);
27134 ti = proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27135 proto_item_append_text(ti, " (%04.0f[Bytes])", pow(2, 13+(tvb_get_uint8(tvb, offset) & 0x3))-1);
27136 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu_start_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27137 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27138 offset += 1;
27139
27140 /* 16 byte MCS set */
27141 offset = dissect_mcs_set(tree, pinfo, tvb, offset, false0, vendorspecific);
27142
27143
27144 /* 2 byte HT Extended Capabilities */
27145 if (vendorspecific)
27146 {
27147 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_htex_vs_cap,
27148 ett_htex_cap_tree, ieee80211_htex,
27149 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27150 } else {
27151 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_htex_cap,
27152 ett_htex_cap_tree, ieee80211_htex,
27153 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27154 }
27155 offset += 2;
27156
27157
27158 /* 4 byte TxBF capabilities */
27159 if (vendorspecific)
27160 {
27161 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_txbf_vs,
27162 ett_txbf_tree, ieee80211_txbf,
27163 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27164 } else {
27165 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_txbf,
27166 ett_txbf_tree, ieee80211_txbf,
27167 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27168 }
27169 offset += 4;
27170
27171 /* 1 byte Antenna Selection (ASEL) capabilities */
27172 if (vendorspecific)
27173 {
27174 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_antsel_vs,
27175 ett_antsel_tree, ieee80211_antsel,
27176 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27177 }
27178 else
27179 {
27180 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_antsel,
27181 ett_antsel_tree, ieee80211_antsel,
27182 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27183 }
27184 offset += 1;
27185
27186 return offset;
27187}
27188
27189static int
27190dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27191{
27192 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27193
27194 return dissect_ht_capability_ie_common(tvb, pinfo, tree, 0, tvb_reported_length(tvb),
27195 field_data->item_tag_length, false0);
27196}
27197
27198static int
27199dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
27200 uint32_t tag_len, proto_item *ti_len)
27201{
27202 static int * const ieee80211_hta1[] = {
27203 &hf_ieee80211_hta_ext_chan_offset,
27204 &hf_ieee80211_hta_rec_tx_width,
27205 &hf_ieee80211_hta_rifs_mode,
27206 &hf_ieee80211_hta_controlled_access,
27207 &hf_ieee80211_hta_service_interval,
27208 NULL((void*)0)
27209 };
27210
27211 static int * const ieee80211_hta2[] = {
27212 &hf_ieee80211_hta_operating_mode,
27213 &hf_ieee80211_hta_non_gf_devices,
27214 NULL((void*)0)
27215 };
27216
27217 static int * const ieee80211_hta3[] = {
27218 &hf_ieee80211_hta_basic_stbc_mcs,
27219 &hf_ieee80211_hta_dual_stbc_protection,
27220 &hf_ieee80211_hta_secondary_beacon,
27221 &hf_ieee80211_hta_lsig_txop_protection,
27222 &hf_ieee80211_hta_pco_active,
27223 &hf_ieee80211_hta_pco_phase,
27224 NULL((void*)0)
27225 };
27226
27227 if (tag_len != 22) {
27228 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
27229 "Tag length %u wrong, must be = 22", tag_len);
27230 return offset;
27231 }
27232
27233 if (wlan_ignore_draft_ht)
27234 return offset;
27235
27236 /* 1 HT Control Channel */
27237 proto_tree_add_item(tree, hf_ieee80211_hta_cc, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27238 offset += 1;
27239
27240 /* 1 byte HT additional capabilities */
27241 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap1,
27242 ett_hta_cap_tree, ieee80211_hta1,
27243 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27244 offset += 1;
27245
27246 /* 2 byte HT additional capabilities */
27247 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap2,
27248 ett_hta_cap1_tree, ieee80211_hta2,
27249 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27250 offset += 2;
27251
27252 /* 2 byte HT additional capabilities */
27253 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap2,
27254 ett_hta_cap2_tree, ieee80211_hta3,
27255 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27256 offset += 2;
27257
27258 /* 16 byte Supported MCS set */
27259 offset = dissect_mcs_set(tree, pinfo, tvb, offset, false0, true1);
27260
27261 return offset;
27262}
27263
27264/* 802.11n-D1.10 and 802.11n-D2.0, 7.1.3.5a */
27265
27266/*
27267 * IEEE 802.11-2016 section 9.2.4.6 "HT Control field" says that B0 of
27268 * the field is 0 for HT and 1 for VHT, bits B1 through B29 are the
27269 * "HT Control Middle" subfield, the format of which differs between
27270 * HT and VHT, bit B30 is the "AC Constraint" subfield, and bit B31
27271 * is the "RDG/More PPDU" subfield.
27272 *
27273 * 802.11ax changes the meaning of the first two bits:
27274 *
27275 * B0 = 0 means High Throughput
27276 * B0 = 1, B1 = 0 means Very High Throughput
27277 * B0 = 1, B1 = 1 means High Efficiency
27278 *
27279 * taking a reserved bit from the VHT version of the "HT Control Middle"
27280 * field.
27281 */
27282#define A_CONTROL_TRS0 0
27283#define A_CONTROL_OM1 1
27284#define A_CONTROL_HLA2 2
27285#define A_CONTROL_BSR3 3
27286#define A_CONTROL_UPH4 4
27287#define A_CONTROL_BQR5 5
27288#define A_CONTROL_CCI6 6
27289#define A_CONTROL_EHT_OM7 7
27290#define A_CONTROL_SRS8 8
27291#define A_CONTROL_AAR9 9
27292#define A_CONTROL_ONES15 15
27293
27294static const value_string a_control_control_id_vals[] = {
27295 { A_CONTROL_TRS0, "Triggered response scheduling" },
27296 { A_CONTROL_OM1, "Operating mode" },
27297 { A_CONTROL_HLA2, "HE link adaptation" },
27298 { A_CONTROL_BSR3, "Buffer status report" },
27299 { A_CONTROL_UPH4, "UL power headroom" },
27300 { A_CONTROL_BQR5, "Bandwidth query report" },
27301 { A_CONTROL_CCI6, "Command Control Indication" },
27302 { A_CONTROL_EHT_OM7, "EHT operating mode" },
27303 { A_CONTROL_SRS8, "Single response scheduling" },
27304 { A_CONTROL_AAR9, "AP assistance request" },
27305 { A_CONTROL_ONES15, "Ones need expansion surely" },
27306 { 0, NULL((void*)0) }
27307};
27308
27309/*
27310 * Print the UL target RSSI field as per the spec.
27311 * 0->30 map to -90 to -30 dBm.
27312 * 31 maps to Max ransmit power
27313 */
27314static void
27315ul_target_rssi_base_custom(char *result, uint32_t target_rssi)
27316{
27317 if (target_rssi <= 30) {
27318 snprintf(result, ITEM_LABEL_LENGTH240, "%ddBm", -90 + (2 * target_rssi));
27319 } else if (target_rssi == 31) {
27320 snprintf(result, ITEM_LABEL_LENGTH240, "Max transmit power");
27321 }
27322}
27323
27324static void
27325dissect_a_control_padding(proto_tree *tree, tvbuff_t *tvb, int offset,
27326 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27327{
27328 proto_tree *trs_tree = NULL((void*)0);
27329 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27330 unsigned offset_in_bits = (offset << 3) + start_bit;
27331
27332 /*
27333 * We isolated the bits and moved them to the bottom ... so display them
27334 */
27335 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27336 ett_ieee80211_a_control_padding,
27337 NULL((void*)0), "Padding: 0x%x(%u bits)", the_bits, 32 - start_bit);
27338
27339 proto_tree_add_bits_item(trs_tree, hf_ieee80211_he_a_control_padding, tvb, offset_in_bits,
27340 32 - start_bit, ENC_LITTLE_ENDIAN0x80000000);
27341}
27342
27343static void
27344dissect_a_control_ones(proto_tree *tree, tvbuff_t *tvb, int offset,
27345 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27346{
27347 proto_tree *trs_tree = NULL((void*)0);
27348 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27349
27350 /*
27351 * We isolated the bits and moved them to the bottom ... so display them
27352 */
27353 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27354 ett_ieee80211_a_control_ones,
27355 NULL((void*)0), "ONES: 0x%0x", the_bits);
27356
27357 proto_tree_add_uint(trs_tree, hf_ieee80211_he_a_control_ones, tvb,
27358 offset, 4, the_bits);
27359}
27360
27361static void
27362dissect_a_control_trs(proto_tree *tree, tvbuff_t *tvb, int offset,
27363 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27364{
27365 proto_tree *trs_tree = NULL((void*)0);
27366 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27367
27368 /*
27369 * We isolated the bits and moved them to the bottom ... so display them
27370 */
27371 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27372 ett_ieee80211_triggered_response_schedule,
27373 NULL((void*)0), "TRS Control: 0x%08x", the_bits);
27374
27375 proto_tree_add_uint(trs_tree, hf_ieee80211_he_trs_he_tb_ppdu_len, tvb,
27376 offset, 4, the_bits);
27377 proto_tree_add_uint(trs_tree, hf_ieee80211_he_trs_ru_allocation, tvb,
27378 offset, 4, the_bits);
27379 proto_tree_add_uint(trs_tree, hf_ieee80211_he_dl_tx_power, tvb,
27380 offset, 4, the_bits);
27381 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_target_rssi, tvb,
27382 offset, 4, the_bits);
27383 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_mcs, tvb,
27384 offset, 4, the_bits);
27385 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_reserved, tvb,
27386 offset, 4, the_bits);
27387}
27388
27389static void
27390dissect_a_control_om(proto_tree *tree, tvbuff_t *tvb, int offset,
27391 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27392{
27393 proto_tree *om_tree = NULL((void*)0);
27394 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x00000FFF;
27395
27396 /*
27397 * We isolated the bits and moved them to the bottom ... so display them
27398 */
27399 om_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27400 ett_ieee80211_control_om,
27401 NULL((void*)0), "OM Control: 0x%04x", the_bits);
27402
27403 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_rx_nss, tvb,
27404 offset, 4, the_bits);
27405 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_channel_width, tvb,
27406 offset, 4, the_bits);
27407 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_ul_mu_disable, tvb,
27408 offset, 4, the_bits);
27409 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_tx_nsts, tvb,
27410 offset, 4, the_bits);
27411 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_er_su_disable, tvb,
27412 offset, 4, the_bits);
27413 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_dl_mu_mimo_resound, tvb,
27414 offset, 4, the_bits);
27415 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_ul_mu_data_disable, tvb,
27416 offset, 4, the_bits);
27417}
27418
27419static const true_false_string he_hla_tx_bf_tfs = {
27420 "beamformed PPDU",
27421 "non-beamformed PPDU"
27422};
27423
27424static void
27425dissect_a_control_hla(proto_tree *tree, tvbuff_t *tvb, int offset,
27426 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27427{
27428 proto_tree *hla_tree = NULL((void*)0);
27429 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27430
27431 /*
27432 * We isolated the bits and moved them to the bottom ... so display them
27433 */
27434 hla_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27435 ett_ieee80211_hla_control,
27436 NULL((void*)0), "HLA Control: 0x%08x", the_bits);
27437
27438 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_unsolicited_mfb, tvb,
27439 offset, 4, the_bits);
27440 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_mrq, tvb,
27441 offset, 4, the_bits);
27442 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_nss, tvb,
27443 offset, 4, the_bits);
27444 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_he_mcs, tvb,
27445 offset, 4, the_bits);
27446 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_dcm, tvb,
27447 offset, 4, the_bits);
27448 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_ru, tvb,
27449 offset, 4, the_bits);
27450 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_bw, tvb,
27451 offset, 4, the_bits);
27452 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_msi_ppdu_type, tvb,
27453 offset, 4, the_bits);
27454 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_tx_bf, tvb,
27455 offset, 4, the_bits);
27456 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_reserved, tvb,
27457 offset, 4, the_bits);
27458}
27459
27460static void
27461dissect_a_control_bsr(proto_tree *tree, tvbuff_t *tvb, int offset,
27462 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27463{
27464 proto_tree *bsr_tree = NULL((void*)0);
27465 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27466
27467 /*
27468 * We isolated the bits and moved them to the bottom ... so display them
27469 */
27470 bsr_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27471 ett_ieee80211_buffer_status_report,
27472 NULL((void*)0), "Buffer Status Report: 0x%08x", the_bits);
27473
27474 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_aci_bitmap, tvb,
27475 offset, 4, the_bits);
27476 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_delta_tid, tvb,
27477 offset, 4, the_bits);
27478 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_aci_high, tvb,
27479 offset, 4, the_bits);
27480 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_scaling_factor, tvb,
27481 offset, 4, the_bits);
27482 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_queue_size_high, tvb,
27483 offset, 4, the_bits);
27484 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_queue_size_all, tvb,
27485 offset, 4, the_bits);
27486}
27487
27488static void
27489dissect_a_control_uph(proto_tree *tree, tvbuff_t *tvb, int offset,
27490 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27491{
27492 proto_tree *uph_tree = NULL((void*)0);
27493 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000000FF;
27494
27495 /*
27496 * We isolated the bits and moved them to the bottom ... so display them
27497 */
27498 uph_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27499 ett_ieee80211_control_uph,
27500 NULL((void*)0), "UPH Control: 0x%02x", the_bits);
27501
27502 proto_tree_add_uint(uph_tree, hf_ieee80211_he_uph_ul_power_headroom, tvb,
27503 offset, 4, the_bits);
27504 proto_tree_add_boolean(uph_tree, hf_ieee80211_he_uph_ul_min_transmit_power_flag,
27505 tvb, offset, 4, the_bits);
27506 proto_tree_add_uint(uph_tree, hf_ieee80211_he_uph_reserved,
27507 tvb, offset, 4, the_bits);
27508}
27509
27510static void
27511dissect_a_control_bqr(proto_tree *tree, tvbuff_t *tvb, int offset,
27512 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27513{
27514 proto_tree *bqr_tree = NULL((void*)0);
27515 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FF;
27516
27517 /*
27518 * We isolated the bits and moved them to the bottom ... so display them
27519 */
27520 bqr_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27521 ett_ieee80211_buffer_control_bqr,
27522 NULL((void*)0), "BQR Control: 0x%04x", the_bits);
27523
27524 proto_tree_add_uint(bqr_tree, hf_ieee80211_he_btc_avail_chan, tvb,
27525 offset, 4, the_bits);
27526 proto_tree_add_uint(bqr_tree, hf_ieee80211_he_btc_reserved, tvb,
27527 offset, 4, the_bits);
27528}
27529
27530static void
27531dissect_a_control_cci(proto_tree *tree, tvbuff_t *tvb, int offset,
27532 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27533{
27534 proto_tree *cci_tree = NULL((void*)0);
27535 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000000FF;
27536
27537 /*
27538 * We isolated the bits and moved them to the bottom ... so display them
27539 */
27540 cci_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27541 ett_ieee80211_control_cci,
27542 NULL((void*)0), "Command and status: 0x%02x", the_bits);
27543
27544 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_ac_constraint, tvb,
27545 offset, 4, the_bits);
27546 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_rdg_more_ppdu, tvb,
27547 offset, 4, the_bits);
27548 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_sr_ppdu_indic, tvb,
27549 offset, 4, the_bits);
27550 proto_tree_add_uint(cci_tree, hf_ieee80211_he_cci_reserved, tvb,
27551 offset, 4, the_bits);
27552}
27553
27554static void
27555dissect_a_control_eht_om(proto_tree *tree, tvbuff_t *tvb, int offset,
27556 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27557{
27558 proto_tree *eht_om_tree = NULL((void*)0);
27559 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x0000003F;
27560
27561 /*
27562 * We isolated the bits and moved them to the bottom ... so display them
27563 */
27564 eht_om_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27565 ett_ieee80211_control_eht_om,
27566 NULL((void*)0), "EHT operating mode: 0x%02x", the_bits);
27567 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_rx_nss_ext, tvb,
27568 offset, 4, the_bits);
27569 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_chan_w_ext, tvb,
27570 offset, 4, the_bits);
27571 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_tx_nsts_ext, tvb,
27572 offset, 4, the_bits);
27573 proto_tree_add_uint(eht_om_tree, hf_ieee80211_he_eht_om_reserved, tvb,
27574 offset, 4, the_bits);
27575
27576}
27577
27578static void
27579dissect_a_control_srs(proto_tree *tree, tvbuff_t *tvb, int offset,
27580 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27581{
27582 proto_tree *srs_tree = NULL((void*)0);
27583 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000003FF;
27584
27585 srs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27586 ett_ieee80211_control_srs,
27587 NULL((void*)0), "Simple response scheduling: 0x%02x",
27588 the_bits);
27589 proto_tree_add_uint(srs_tree, hf_ieee80211_he_srs_ppdu_resp_dur, tvb,
27590 offset, 4, the_bits);
27591 proto_tree_add_uint(srs_tree, hf_ieee80211_he_srs_reserved, tvb, offset, 4,
27592 the_bits);
27593}
27594
27595static void
27596dissect_a_control_aar(proto_tree *tree, tvbuff_t *tvb, int offset,
27597 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27598{
27599 proto_tree *aar_tree = NULL((void*)0);
27600 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000FFFFF;
27601
27602 aar_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27603 ett_ieee80211_control_aar,
27604 NULL((void*)0), "AP assistance request: 0x%02x",
27605 the_bits);
27606 proto_tree_add_uint(aar_tree, hf_ieee80211_he_aar_assisted_ap_bitmap, tvb,
27607 offset, 4, the_bits);
27608 proto_tree_add_uint(aar_tree, hf_ieee80211_he_aar_reserved, tvb, offset, 4,
27609 the_bits);
27610}
27611
27612static void
27613dissect_ht_control(packet_info* pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
27614{
27615 proto_item *ti;
27616 proto_tree *htc_tree, *lac_subtree, *mfb_subtree;
27617 uint32_t htc;
27618 bool_Bool is_s1g = sta_is_s1g(pinfo);
27619
27620 htc = tvb_get_letohl(tvb, offset);
27621
27622 ti = proto_tree_add_item(tree, hf_ieee80211_htc, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27623 htc_tree = proto_item_add_subtree(ti, ett_htc_tree);
27624
27625 /* Check the HT vs. VHT bit. */
27626 proto_tree_add_item(htc_tree, hf_ieee80211_htc_vht, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27627 if (htc & HTC_VHT0x00000001) {
27628 /* VHT or HE */
27629 proto_tree_add_item(htc_tree, hf_ieee80211_htc_he, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27630 if (htc & HTC_HE0x00000002) {
27631 /*
27632 * We have a 30-bit field, of which the first is a 4-bit Control ID which
27633 * determines how the rest is handled. There can be multiple fields.
27634 */
27635 proto_tree *a_control_tree = NULL((void*)0);
27636 proto_item *pi = NULL((void*)0);
27637 uint8_t start_bit_offset = 2;
27638
27639 a_control_tree = proto_tree_add_subtree_format(htc_tree, tvb, offset, 4,
27640 ett_htc_he_a_control, NULL((void*)0),
27641 "Aggregate Control: 0x%0x", htc >> 2);
27642 while (start_bit_offset < 32) {
27643 /* No enough space for Control ID */
27644 if (start_bit_offset >= 28) {
27645 dissect_a_control_padding(a_control_tree, tvb, offset, htc,
27646 start_bit_offset);
27647 break;
27648 }
27649 uint8_t control_id = (htc >> start_bit_offset) & 0x0F;
27650 start_bit_offset += 4;
27651 if (control_id != 0 || start_bit_offset == 6) {
27652 pi = proto_tree_add_uint(a_control_tree, hf_ieee80211_htc_he_ctrl_id,
27653 tvb, offset, 4, control_id);
27654 proto_item_append_text(pi, ": %s",
27655 val_to_str(pinfo->pool, control_id, a_control_control_id_vals,
27656 "Reserved (%u)"));
27657 }
27658 if (start_bit_offset > 31) {
27659 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_word);
27660 break;
27661 }
27662 switch (control_id) {
27663 case A_CONTROL_TRS0:
27664 /*
27665 * Padding looks like TRS ... so distinguish. If there are not
27666 * enough bits left it must be padding
27667 */
27668 if (start_bit_offset == 6)
27669 dissect_a_control_trs(a_control_tree, tvb, offset, htc,
27670 start_bit_offset);
27671 else
27672 dissect_a_control_padding(a_control_tree, tvb, offset, htc,
27673 start_bit_offset - 4);
27674 start_bit_offset += 26;
27675 break;
27676 case A_CONTROL_OM1:
27677 dissect_a_control_om(a_control_tree, tvb, offset, htc,
27678 start_bit_offset);
27679 start_bit_offset += 12;
27680 break;
27681 case A_CONTROL_HLA2:
27682 dissect_a_control_hla(a_control_tree, tvb, offset, htc,
27683 start_bit_offset);
27684 start_bit_offset += 26;
27685 break;
27686 case A_CONTROL_BSR3:
27687 dissect_a_control_bsr(a_control_tree, tvb, offset, htc,
27688 start_bit_offset);
27689 start_bit_offset += 26;
27690 break;
27691 case A_CONTROL_UPH4:
27692 dissect_a_control_uph(a_control_tree, tvb, offset, htc,
27693 start_bit_offset);
27694 start_bit_offset += 8;
27695 break;
27696 case A_CONTROL_BQR5:
27697 dissect_a_control_bqr(a_control_tree, tvb, offset, htc,
27698 start_bit_offset);
27699 start_bit_offset += 10;
27700 break;
27701 case A_CONTROL_CCI6:
27702 dissect_a_control_cci(a_control_tree, tvb, offset, htc,
27703 start_bit_offset);
27704 start_bit_offset += 8;
27705 break;
27706 case A_CONTROL_EHT_OM7:
27707 dissect_a_control_eht_om(a_control_tree, tvb, offset, htc,
27708 start_bit_offset);
27709 start_bit_offset += 6;
27710 break;
27711 case A_CONTROL_SRS8:
27712 dissect_a_control_srs(a_control_tree, tvb, offset, htc,
27713 start_bit_offset);
27714 start_bit_offset += 10;
27715 break;
27716 case A_CONTROL_AAR9:
27717 dissect_a_control_aar(a_control_tree, tvb, offset, htc,
27718 start_bit_offset);
27719 start_bit_offset += 20;
27720 break;
27721 case A_CONTROL_ONES15:
27722 if (start_bit_offset == 6) {
27723 dissect_a_control_ones(a_control_tree, tvb, offset, htc,
27724 start_bit_offset);
27725 } else {
27726 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_length);
27727 }
27728 start_bit_offset += 26;
27729 break;
27730 default:
27731 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_id);
27732 start_bit_offset += 32; /* Abandon */
27733 break;
27734 }
27735 }
27736 } else {
27737 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mrq, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27738 if (!(htc & HTC_UNSOLICITED_MFB0x20000000)) {
27739 if (htc & HTC_MRQ0x00000004) {
27740 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27741 } else {
27742 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27743 }
27744 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfsi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27745 } else {
27746 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))((((((htc) >> 9) & 0x7FFF)) & 0x7F) == 0x7F)) {
27747 proto_tree_add_item(htc_tree, hf_ieee80211_htc_compressed_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27748 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ppdu_stbc_encoded, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27749 } else {
27750 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27751 }
27752 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_l, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27753 }
27754 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27755 mfb_subtree = proto_item_add_subtree(ti, ett_mfb_subtree);
27756 if (is_s1g) {
27757 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27758 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27759 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27760 } else {
27761 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27762 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27763 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27764 }
27765 /* This should be converted to dB by adding 22 */
27766 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_snr, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27767 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))((((((htc) >> 9) & 0x7FFF)) & 0x7F) == 0x7F)) {
27768 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_h, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27769 proto_tree_add_item(htc_tree, hf_ieee80211_htc_coding_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27770 proto_tree_add_item(htc_tree, hf_ieee80211_htc_fb_tx_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27771 } else {
27772 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved3, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27773 }
27774 proto_tree_add_item(htc_tree, hf_ieee80211_htc_unsolicited_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27775 }
27776 } else {
27777 /* Start: Link Adaptation Control */
27778 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_ht_lac, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27779 lac_subtree = proto_item_add_subtree(ti, ett_lac_subtree);
27780 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27781
27782 if (HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE)) {
27783 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27784 } else {
27785 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27786 if (HTC_LAC_MAI_MRQ(htc)(((((htc) >> 2) & 0xF)) & 0x1)) {
27787 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27788 } else {
27789 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27790 }
27791 }
27792
27793 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27794
27795 if (HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE)) {
27796 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27797 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27798 } else {
27799 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27800 }
27801 /* End: Link Adaptation Control */
27802
27803 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27804 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27805 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27806 proto_tree_add_item(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27807
27808 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27809 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27810 }
27811
27812 /*
27813 * These bits are part of the Aggregate Control field for 802.11ax
27814 */
27815 if (!(htc & HTC_HE0x00000002)) {
27816 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27817 proto_tree_add_item(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27818 }
27819
27820 /* offset += 2; */
27821}
27822
27823#define IEEE80211_COMMON_OPT_BROKEN_FC0x00000001 0x00000001
27824#define IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002 0x00000002
27825#define IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004 0x00000004
27826
27827static void
27828dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, uint32_t option_flags,
27829 uint32_t offset, packet_info *pinfo, bool_Bool isDMG)
27830{
27831 uint16_t fcf, flags, frame_type_subtype;
27832 proto_tree *fc_tree, *flag_tree;
27833 proto_item *fc_item, *flag_item, *hidden_item, *ti;
27834 uint32_t swap_offset = 0;
27835 bool_Bool is_s1g = sta_is_s1g(pinfo);
27836 bool_Bool s1g_has_protected_htc_order;
27837
27838 fcf = FETCH_FCF(offset)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, offset)) >> 8) | (guint16
) ((guint16) (tvb_get_letohs(tvb, offset)) << 8)))) : tvb_get_letohs
(tvb, offset))
;
27839
27840 flags = FCF_FLAGS(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))
;
27841 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
;
27842
27843 /* Swap offset... */
27844 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001)
27845 {
27846 swap_offset += 1;
27847 }
27848
27849 proto_tree_add_uint(tree, hf_ieee80211_fc_frame_type_subtype, tvb, offset + swap_offset, 1, frame_type_subtype);
27850
27851 fc_item = proto_tree_add_item(tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
27852
27853 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
27854
27855 /* at this point, we can permanently fix the offset, so that it will be used to parse the fcf first 8 bits */
27856 offset += swap_offset;
27857
27858 proto_tree_add_item(fc_tree, hf_ieee80211_fc_proto_version, tvb, offset, 1, ENC_NA0x00000000);
27859 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_type, tvb, offset, 1, ENC_NA0x00000000);
27860 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_subtype, tvb, offset, 1, ENC_NA0x00000000);
27861 /* Changing control frame extension for extension frames */
27862 if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 1) {
27863 proto_tree_add_uint(fc_tree, hf_ieee80211_fc_frame_extension, tvb, offset, 1, FCF_FRAME_EXTENSION(fcf)(((fcf) & 0xF00) >> 8));
27864 }
27865
27866 /* Reswap offset...*/
27867 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001)
27868 {
27869 offset -= 1;
27870 proto_item_append_text(fc_item, "(Swapped)");
27871 } else {
27872 offset += 1;
27873 }
27874
27875 /*
27876 * S1G has a different format in the flags portion.
27877 */
27878 if (frame_type_subtype == EXTENSION_S1G_BEACON0x31) {
27879 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_next_tbtt_present, tvb,
27880 offset, 1, ENC_NA0x00000000);
27881 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_compressed_ssid_present,
27882 tvb, offset, 1, ENC_NA0x00000000);
27883 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_ano_present, tvb,
27884 offset, 1, ENC_NA0x00000000);
27885 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_bss_bw, tvb, offset, 1,
27886 ENC_NA0x00000000);
27887 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_security, tvb, offset, 1,
27888 ENC_NA0x00000000);
27889 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_ap_pm, tvb, offset, 1,
27890 ENC_NA0x00000000);
27891
27892 return;
27893 }
27894
27895 /* Flags */
27896 flag_item = proto_tree_add_item(fc_tree, hf_ieee80211_fc_flags, tvb, offset, 1, ENC_NA0x00000000);
27897 flag_tree = proto_item_add_subtree(flag_item, ett_proto_flags);
27898 if (is_s1g && FCF_FRAME_TYPE(fcf)(((fcf) & 0xC) >> 2) == CONTROL_FRAME0x01) {
27899 proto_tree_add_item(flag_tree, hf_ieee80211_fc_s1g_bw_indication, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27900 proto_tree_add_item(flag_tree, hf_ieee80211_fc_s1g_dynamic_indication, tvb, offset, 1, ENC_NA0x00000000);
27901 } else if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 0) {
27902 /* Changing control frame flags for extension frames */
27903 proto_tree_add_item(flag_tree, hf_ieee80211_fc_data_ds, tvb, offset, 1, ENC_NA0x00000000);
27904 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_to_ds, tvb, offset, 1, ENC_NA0x00000000);
27905 proto_item_set_hidden(hidden_item);
27906 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_from_ds, tvb, offset, 1, ENC_NA0x00000000);
27907 proto_item_set_hidden(hidden_item);
27908 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_frag, tvb, offset, 1, ENC_NA0x00000000);
27909 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_retry, tvb, offset, 1, ENC_NA0x00000000);
27910 if( IS_RETRY(flags)((flags) & 0x08) )
27911 {
27912 expert_add_info(pinfo, ti, &ei_ieee80211_fc_retry);
27913 wlan_stats.fc_retry = 1;
27914 }
27915 }
27916 proto_tree_add_item(flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, offset, 1, ENC_NA0x00000000);
27917 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_data, tvb, offset, 1, ENC_NA0x00000000);
27918 /* Changing control frame flags for extension frames */
27919 /* TODO: add support for S1G subtypes 3 and 10 fields: flow control, next TWT
27920 info present, more data, poll type */
27921 /* All S1G frames have the Protected Frame and +HTC/Order subfields except for
27922 Control frames with subtypes 3 and 10 */
27923 s1g_has_protected_htc_order = is_s1g && (FCF_FRAME_TYPE(fcf)(((fcf) & 0xC) >> 2) != CONTROL_FRAME0x01
27924 || (FCF_FRAME_SUBTYPE(fcf)(((fcf) & 0xF0) >> 4) != 3 && FCF_FRAME_SUBTYPE(fcf)(((fcf) & 0xF0) >> 4) != 10));
27925 if (s1g_has_protected_htc_order || (!is_s1g && IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 0)) {
27926 proto_tree_add_item(flag_tree, hf_ieee80211_fc_protected, tvb, offset, 1, ENC_NA0x00000000);
27927 }
27928 if (s1g_has_protected_htc_order || !is_s1g) {
27929 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_order, tvb, offset, 1, ENC_NA0x00000000);
27930 if (option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) {
27931 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
27932 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
27933 /*
27934 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
27935 *
27936 * The +HTC/Order subfield is 1 bit in length. It is used for two
27937 * purposes:
27938 *
27939 * -- It is set to 1 in a non-QoS Data frame transmitted by a
27940 * non-QoS STA to indicate that the frame contains an MSDU,
27941 * or fragment thereof, that is being transferred using the
27942 * StrictlyOrdered service class.
27943 *
27944 * -- It is set to 1 in a QoS Data or Management frame transmitted
27945 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
27946 * of the TXVECTOR to indicate that the frame contains an
27947 * HT Control field.
27948 *
27949 * Otherwise, the +HTC/Order subfield is set to 0.
27950 *
27951 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
27952 * transmitted by a DMG STA.
27953 *
27954 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
27955 * QoS frames, also indicates that there's an HT Control field.
27956 *
27957 * For DMG frames, we flag this as an error.
27958 *
27959 * XXX - as I read the above, this shouldn't be set except for
27960 * HT, VHT, or HE PHYs; however, some QoS frames appear to have
27961 * it set, and have an HT Control field, even though they don't
27962 * have HT/VHT/HE radiotap fields. That might be because the
27963 * code that provided the header didn't provide those radiotap
27964 * fields, or because there is no radiotap header, meaning that
27965 * they might still be HT/VHT/HE frames, so we don't report it
27966 * as an error.
27967 */
27968 if (isDMG) {
27969 /*
27970 * DMG, so flag this as having +HTC/Order set, as it's not supposed
27971 * to be set.
27972 */
27973 expert_add_info(pinfo, ti, &ei_ieee80211_htc_in_dmg_packet);
27974 }
27975 }
27976 }
27977 }
27978 }
27979}
27980
27981static void
27982dissect_durid(proto_tree *hdr_tree, tvbuff_t *tvb, uint16_t fts, int offset)
27983{
27984 uint16_t durid = tvb_get_letohs(tvb, offset);
27985
27986 if (durid < 0x8000) {
27987 proto_tree_add_uint_format_value(hdr_tree, hf_ieee80211_did_duration, tvb,
27988 offset, 2, durid, "%u microseconds", durid);
27989 } else if (((durid & 0xC000) == 0xC000) &&
27990 ((durid & 0x3FFF) > 0) && ((durid & 0x3FFF) <= 2007) &&
27991 (fts == CTRL_PS_POLL0x1A)) {
27992 proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, offset, 2,
27993 ENC_LITTLE_ENDIAN0x80000000);
27994 } else if (durid == 0x8000) {
27995 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
27996 offset, 2, durid, "Duration/ID: %u", durid);
27997 } else {
27998 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
27999 offset, 2, durid, "Duration/ID: %u (reserved)", durid & 0x3FFF);
28000 }
28001}
28002
28003
28004static void
28005dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
28006 unsigned offset, proto_item *item, proto_item *ti_len, int tag_len)
28007{
28008
28009 uint8_t type;
28010
28011 proto_tree_add_item(tree, hf_ieee80211_ht_pren_type, tvb, offset, 1, ENC_NA0x00000000);
28012 type = tvb_get_uint8(tvb, offset);
28013 offset += 1;
28014 tag_len -= 1;
28015
28016
28017 switch(type){
28018 case 51:
28019 dissect_ht_capability_ie_common(tvb, pinfo, tree, offset, tag_len, ti_len, true1);
28020 proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
28021 break;
28022
28023 case 52:
28024 dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset, tag_len, ti_len);
28025 proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
28026 break;
28027
28028 default:
28029 proto_tree_add_item(tree, hf_ieee80211_ht_pren_unknown, tvb, offset, tag_len, ENC_NA0x00000000);
28030 break;
28031 }
28032
28033}
28034
28035static int
28036dissect_interworking(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28037{
28038 int tag_len = tvb_reported_length(tvb);
28039 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28040 int offset = 0;
28041 static int * const ieee80211_tag_interworking[] = {
28042 &hf_ieee80211_tag_interworking_access_network_type,
28043 &hf_ieee80211_tag_interworking_internet,
28044 &hf_ieee80211_tag_interworking_asra,
28045 &hf_ieee80211_tag_interworking_esr,
28046 &hf_ieee80211_tag_interworking_uesa,
28047 NULL((void*)0)
28048 };
28049
28050 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_interworking, ENC_LITTLE_ENDIAN0x80000000);
28051 offset += 1;
28052
28053 if ((tag_len == (1 + 2)) || (tag_len == (1 + 2 + 6))) {
28054 dissect_venue_info(tree, tvb, offset);
28055 offset += 2;
28056 }
28057
28058 if ((tag_len == (1 + 6)) || (tag_len == (1 + 2 + 6))) {
28059 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_hessid,
28060 tvb, offset, 6, ENC_NA0x00000000);
28061 offset += 6;
28062 }
28063
28064 if ((tag_len != 1) && (tag_len != (1 + 2)) && (tag_len != (1 + 6)) && (tag_len != (1 + 2 + 6))) {
28065 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28066 "Invalid Interworking element length");
28067 }
28068
28069 return offset;
28070}
28071
28072static int
28073dissect_qos_map_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28074{
28075 int tag_len = tvb_reported_length(tvb);
28076 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28077 int offset = 0;
28078 uint8_t left;
28079 uint8_t val, val2;
28080 int i;
28081 proto_item *dscp_item, *item;
28082 proto_tree *dscp_tree;
28083
28084 if (tag_len < 16 || tag_len & 1) {
28085 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_bad_length,
28086 "Truncated QoS Map Set element");
28087 return tvb_captured_length(tvb);
28088 }
28089
28090 left = tag_len - 16;
28091 while (left >= 2) {
28092 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_dscp_exc,
28093 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28094 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
28095
28096 item = proto_tree_add_item(dscp_tree,
28097 hf_ieee80211_tag_qos_map_set_dscp_exc_val,
28098 tvb, offset, 1, ENC_NA0x00000000);
28099 val = tvb_get_uint8(tvb, offset);
28100 if (val > 63 && val != 255) {
28101 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28102 "Invalid DSCP Value");
28103 }
28104 offset++;
28105
28106 item = proto_tree_add_item(dscp_tree,
28107 hf_ieee80211_tag_qos_map_set_dscp_exc_up,
28108 tvb, offset, 1, ENC_NA0x00000000);
28109 val2 = tvb_get_uint8(tvb, offset);
28110 if (val2 > 7) {
28111 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28112 "Invalid User Priority");
28113 }
28114 offset++;
28115
28116 proto_item_append_text(dscp_item, " (0x%02x: UP %u)", val, val2);
28117
28118 left -= 2;
28119 }
28120
28121 for (i = 0; i < 8; i++) {
28122 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_range,
28123 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28124 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
28125
28126 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_low,
28127 tvb, offset, 1, ENC_NA0x00000000);
28128 val = tvb_get_uint8(tvb, offset);
28129 if (val > 63 && val != 255) {
28130 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28131 "Invalid DSCP Value");
28132 }
28133 offset++;
28134
28135 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_high,
28136 tvb, offset, 1, ENC_NA0x00000000);
28137 val2 = tvb_get_uint8(tvb, offset);
28138 if ((val2 > 63 && val2 != 255) || val2 < val ||
28139 (val == 255 && val2 != 255) || (val != 255 && val2 == 255)) {
28140 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28141 "Invalid DSCP Value");
28142 }
28143 offset++;
28144
28145 if (val == 255 && val2 == 255) {
28146 proto_item_append_text(dscp_item, " (UP %u not in use)", i);
28147 } else {
28148 proto_item_append_text(dscp_item, " (0x%02x-0x%02x: UP %u)",
28149 val, val2, i);
28150 }
28151 }
28152
28153 return tvb_captured_length(tvb);
28154}
28155
28156static int
28157dissect_roaming_consortium(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28158{
28159 int tag_len = tvb_reported_length(tvb);
28160 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28161 int offset = 0;
28162 proto_item* item;
28163 uint8_t oi_lens, oi1_len, oi2_len;
28164
28165 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
28166 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28167 offset += 1;
28168
28169 oi_lens = tvb_get_uint8(tvb, offset);
28170 oi1_len = oi_lens & 0x0f;
28171 oi2_len = (oi_lens & 0xf0) >> 4;
28172 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1_len,
28173 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28174 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2_len,
28175 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28176 offset += 1;
28177
28178 if (offset + oi1_len > tag_len) {
28179 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28180 "Truncated Roaming Consortium element");
28181 return tvb_captured_length(tvb);
28182 }
28183
28184 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1,
28185 tvb, offset, oi1_len, ENC_NA0x00000000);
28186 add_manuf(item, tvb, offset);
28187 offset += oi1_len;
28188
28189 if (offset + oi2_len > tag_len) {
28190 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28191 "Truncated Roaming Consortium element");
28192 return tvb_captured_length(tvb);
28193 }
28194
28195 if (oi2_len > 0) {
28196 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2,
28197 tvb, offset, oi2_len, ENC_NA0x00000000);
28198 add_manuf(item, tvb, offset);
28199 offset += oi2_len;
28200 }
28201
28202 if (tag_len > offset) {
28203 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi3,
28204 tvb, offset, tag_len - offset, ENC_NA0x00000000);
28205 }
28206
28207 return tvb_captured_length(tvb);
28208}
28209
28210static void
28211dissect_extended_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28212{
28213 if (len < 2) {
28214 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28215 "Extended Request must be at least 2 octets long");
28216 return;
28217 }
28218
28219 proto_tree_add_item(tree, hf_ieee80211_tag_extended_request_id, tvb, offset, 1, ENC_NA0x00000000);
28220 offset += 1;
28221 len -= 1;
28222
28223 while (len--) {
28224 proto_tree_add_item(tree, hf_ieee80211_tag_extended_request_extension, tvb, offset, 1, ENC_NA0x00000000);
28225 offset += 1;
28226 }
28227}
28228
28229static void
28230dissect_he_6ghz_band_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28231{
28232 if (len != 2) {
28233 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28234 "HE 6 GHz Band Capabilities must be at 2 octets long");
28235 return;
28236 }
28237
28238 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_he_6ghz_cap_inf,
28239 ett_tag_he_6ghz_cap_inf_tree,
28240 ieee80211_tag_he_6ghz_cap_inf,
28241 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
28242}
28243
28244static void
28245dissect_secure_ltf_parameters(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28246 proto_tree *tree, int offset, int len _U___attribute__((unused)))
28247{
28248 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_params_counter, tvb,
28249 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
28250 offset += 6;
28251
28252 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_generation_sac, tvb,
28253 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28254 offset += 2;
28255
28256 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_management_sac, tvb,
28257 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28258 offset += 2;
28259
28260 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_result_ltf_ofs, tvb,
28261 offset, 1, ENC_NA0x00000000);
28262}
28263
28264static void
28265dissect_ista_availability_window(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, int offset, int len)
28266{
28267 uint16_t count = tvb_get_letohs(tvb, offset) & 0x1FF;
28268 char avail_string[513];
28269 char pad_string[8];
28270 int i = 0, j;
28271 int avail_bits_offset;
28272 int8_t bits;
28273
28274 memset(avail_string, 0x0, sizeof(avail_string));
28275 memset(pad_string, 0x0, sizeof(pad_string));
28276
28277 /* These are at the same level as the avail bits */
28278 proto_tree_add_item(tree, hf_ieee80211_ftm_ista_availability_count,
28279 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28280 proto_tree_add_item(tree, hf_ieee80211_ftm_ista_availability_reserved,
28281 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28282 offset += 2;
28283
28284 avail_bits_offset = offset;
28285
28286 /* Now, extract count bits and set up the string 8-bits at a time */
28287 for (i = 1; i <= (count / 8); i++) {
28288 bits = tvb_get_uint8(tvb, offset);
28289
28290 for (j = 0; j < 8; j++) {
28291 avail_string[(i - 1) * 8 + j] = (bits & 0x01) ? '1' : '0';
28292 bits = bits >> 1;
28293 }
28294
28295 offset += 1;
28296 }
28297
28298 avail_string[i * 8] = 0;
28299
28300 if (count % 8) {
28301 /* Deal with the remaining bits */
28302 bits = tvb_get_uint8(tvb, offset);
28303
28304 for (j = (i - 1) * 8; j < count; j++) {
28305 avail_string[j] = (bits & 0x01) ? '1' : '0';
28306 bits = bits >> 1;
28307 }
28308
28309 avail_string[j] = 0;
28310
28311 /* Deal with the padding */
28312 for (j = 0; j < 8 - (count % 8); j++) {
28313 pad_string[j] = (bits & 0x01) ? '1' : '0';
28314 bits = bits >> 1;
28315 }
28316
28317 pad_string[j] = 0;
28318 }
28319
28320 proto_tree_add_string(tree, hf_ieee80211_ftm_ista_avail_bits, tvb,
28321 avail_bits_offset, (count + 7) / 8, avail_string);
28322
28323 if (((len - 2) * 8) != count) {
28324 proto_tree_add_string(tree, hf_ieee80211_ftm_ista_avail_pad, tvb,
28325 offset, 1, pad_string);
28326 }
28327}
28328
28329static int * const rsta_avail_info_header[] = {
28330 &hf_ieee80211_ftm_rsta_count,
28331 &hf_ieee80211_ftm_rsta_avail_window_bcast_fmt,
28332 NULL((void*)0)
28333};
28334
28335static int * const rsta_availability_subfield_hdr1[] = {
28336 &hf_ieee80211_ftm_rsta_partial_tsf_timer1,
28337 &hf_ieee80211_ftm_rsta_duration1,
28338 &hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1,
28339 &hf_ieee80211_ftm_rsta_periodicity1,
28340 NULL((void*)0)
28341};
28342
28343static int * const rsta_availability_subfield_hdr2[] = {
28344 &hf_ieee80211_ftm_rsta_partial_tsf_timer,
28345 &hf_ieee80211_ftm_rsta_duration,
28346 &hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved,
28347 &hf_ieee80211_ftm_rsta_periodicity,
28348 &hf_ieee80211_ftm_rsta_format_and_bandwidth,
28349 &hf_ieee80211_ftm_rsta_reserved,
28350 NULL((void*)0)
28351};
28352
28353static void
28354dissect_rsta_availability_window(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28355 proto_tree *tree, int offset, int len _U___attribute__((unused)))
28356{
28357 uint8_t count = tvb_get_uint8(tvb, offset) &0x7F;
28358 int i;
28359
28360 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ftm_rsta_header,
28361 ett_rsta_avail_header, rsta_avail_info_header, ENC_NA0x00000000);
28362
28363 offset += 1;
28364
28365 for (i = 0; i < count; i++) {
28366 proto_tree *subfield_tree = NULL((void*)0);
28367 bool_Bool has_passive_ranging_params =
28368 (tvb_get_letohl(tvb, offset) >> 23) & 1;
28369
28370 subfield_tree = proto_tree_add_subtree_format(tree, tvb, offset,
28371 has_passive_ranging_params ? 5 : 4,
28372 ett_rsta_avail_tree, NULL((void*)0),
28373 "Availability Window Information %d",
28374 i);
28375 if (has_passive_ranging_params) {
28376 proto_tree_add_bitmask(subfield_tree, tvb, offset,
28377 hf_ieee80211_ftm_rsta_avail_subfield_long,
28378 ett_rsta_avail_subfield,
28379 rsta_availability_subfield_hdr2,
28380 ENC_LITTLE_ENDIAN0x80000000);
28381 offset += 5;
28382 } else {
28383 proto_tree_add_bitmask(subfield_tree, tvb, offset,
28384 hf_ieee80211_ftm_rsta_avail_subfield_short,
28385 ett_rsta_avail_subfield,
28386 rsta_availability_subfield_hdr1,
28387 ENC_LITTLE_ENDIAN0x80000000);
28388 offset += 4;
28389 }
28390 }
28391}
28392
28393/*
28394 * "Comeback after subfield shall not be present (ie, zero octets) in PASN
28395 * authentication frames from a non-AP STA."
28396 *
28397 * Attempt to figure out if the Comeback After field is present.
28398 */
28399#define PASN_COMEBACK_INFO_PRESENT0x01 0x01
28400#define PASN_GROUP_KEY_PRESENT0x02 0x02
28401
28402static bool_Bool
28403has_comeback_after(uint8_t flags, tvbuff_t *tvb, int offset, int len _U___attribute__((unused)))
28404{
28405 int tvb_left = tvb_captured_length_remaining(tvb, offset);
28406 bool_Bool comeback_after = false0;
28407 //int cookie_len = 0;
28408 int fixed_len = 0;
28409
28410 if (flags & PASN_GROUP_KEY_PRESENT0x02) { /* Group and Key present */
28411 fixed_len += 2;
28412 }
28413
28414 /*
28415 * If there is a comeback field and the comeback_after is present ...
28416 */
28417 if (flags & 0x01) {
28418 /* Check if the comeback_after field is there? */
28419 if (tvb_get_letohs(tvb, offset) <= (tvb_left - fixed_len)) {
28420 comeback_after = true1;
28421 }
28422 }
28423
28424 return comeback_after;
28425}
28426
28427static int * const pasn_params_fields[] = {
28428 &hf_ieee80211_tag_pasn_params_comeback_info_present,
28429 &hf_ieee80211_tag_pasn_params_group_and_key_present,
28430 &hf_ieee80211_tag_pasn_parameters_reserved,
28431 NULL((void*)0)
28432};
28433
28434static const range_string wrapped_data_fmt_rvals[] = {
28435 { 0, 0, "No wrapped data" },
28436 { 1, 1, "Fast BSS Transition Wrapped Data" },
28437 { 2, 2, "FILS Shared Key authentication without PFS Wrapped Data" },
28438 { 3, 3, "SAE Wrapped Data" },
28439 { 4, 255, "Reserved" },
28440 { 0, 0, NULL((void*)0) }
28441};
28442
28443static void
28444dissect_pasn_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28445{
28446 int public_key_len = 0;
28447 unsigned pasn_control = tvb_get_uint8(tvb, offset);
28448
28449 if (len < 2) {
28450 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28451 "PASN Parameters must be at least 2 octets long");
28452 return;
28453 }
28454
28455 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
28456 hf_ieee80211_tag_pasn_parameters_control,
28457 ett_pasn_parameters, pasn_params_fields,
28458 ENC_LITTLE_ENDIAN0x80000000,
28459 BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
28460 offset += 1;
28461
28462 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_parameters_wrapped_fmt,
28463 tvb, offset, 1, ENC_NA0x00000000);
28464 offset += 1;
28465
28466 /*
28467 * If the Comeback field is present, it might not have a Comeback After
28468 * field. Use the following heuristic function to check.
28469 */
28470 if (pasn_control & PASN_COMEBACK_INFO_PRESENT0x01) {
28471 proto_tree *comeback_tree = NULL((void*)0);
28472 proto_item *cbi = NULL((void*)0);
28473 uint8_t cookie_len;
28474
28475 comeback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
28476 ett_pasn_comeback_tree, &cbi, "Comeback field");
28477
28478 if (has_comeback_after(pasn_control, tvb, offset, len)) {
28479 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_comeback_after,
28480 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28481 offset += 2;
28482 }
28483
28484 cookie_len = tvb_get_uint8(tvb, offset);
28485
28486 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_cookie_length,
28487 tvb, offset, 1, ENC_NA0x00000000);
28488 offset += 1;
28489
28490 if (cookie_len) {
28491 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_cookie,
28492 tvb, offset, cookie_len, ENC_NA0x00000000);
28493 offset += cookie_len;
28494 }
28495 }
28496
28497 if (pasn_control & PASN_GROUP_KEY_PRESENT0x02) {
28498 public_key_len = tvb_get_uint8(tvb, offset + 2);
28499
28500 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_finite_cyclic_group_id, tvb,
28501 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28502 offset += 2;
28503
28504 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_ephemeral_public_key_len,
28505 tvb, offset, 1, ENC_NA0x00000000);
28506 offset += 1;
28507
28508 if (public_key_len) {
28509 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_ephemeral_public_key, tvb,
28510 offset, public_key_len, ENC_NA0x00000000);
28511 }
28512 }
28513}
28514
28515static int * const sta_control_hdrs[] = {
28516 &hf_ieee80211_eht_profile_link_id,
28517 &hf_ieee80211_eht_profile_complete_profile,
28518 &hf_ieee80211_eht_profile_mac_address_present,
28519 &hf_ieee80211_eht_profile_beacon_interval_present,
28520 &hf_ieee80211_eht_profile_tsf_offset_present,
28521 &hf_ieee80211_eht_profile_dtim_info_present,
28522 &hf_ieee80211_eht_profile_nstr_link_pair_present,
28523 &hf_ieee80211_eht_profile_nstr_bitmap_size,
28524 &hf_ieee80211_eht_profile_bss_params_change_count_present,
28525 &hf_ieee80211_eht_profile_reserved,
28526 NULL((void*)0)
28527};
28528
28529static int * const probe_sta_control_hdrs[] = {
28530 &hf_ieee80211_eht_profile_link_id,
28531 &hf_ieee80211_eht_profile_complete_profile,
28532 &hf_ieee80211_eht_profile_probe_reserved,
28533 NULL((void*)0)
28534};
28535
28536static const range_string eht_reconfig_op_type_rvals[] = {
28537 { 0, 0, "AP Removal" },
28538 { 1, 1, "Operation Parameter Update" },
28539 { 2, 2, "Add Link" },
28540 { 3, 3, "Delete Link" },
28541 { 4, 15, "Reserved" },
28542 { 0, 0, NULL((void*)0) }
28543};
28544
28545static int * const reconfig_sta_control_hdrs[] = {
28546 &hf_ieee80211_eht_profile_link_id,
28547 &hf_ieee80211_eht_profile_complete_profile,
28548 &hf_ieee80211_eht_profile_mac_address_present,
28549 &hf_ieee80211_eht_profile_removal_timer_present,
28550 &hf_ieee80211_eht_profile_reconfig_operation_type,
28551 &hf_ieee80211_eht_profile_operation_para_present,
28552 &hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size,
28553 &hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present,
28554 &hf_ieee80211_eht_profile_reconfig_reserved,
28555 NULL((void*)0)
28556};
28557
28558static int * const prio_access_sta_control_hdrs[] = {
28559 &hf_ieee80211_eht_profile_link_id,
28560 &hf_ieee80211_eht_profile_prio_acc_reserved,
28561 NULL((void*)0)
28562};
28563
28564static int * const reconfig_presence_indi_hdrs[] = {
28565 &hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present,
28566 &hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present,
28567 &hf_ieee80211_eht_sta_profile_presence_indi_reserved,
28568 NULL((void*)0)
28569};
28570
28571static int * const reconfig_operation_para_info_hdrs[] = {
28572 &hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length,
28573 &hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length,
28574 &hf_ieee80211_eht_sta_profile_operation_para_info_pad,
28575 NULL((void*)0)
28576};
28577
28578/* Presence Bitmap in ML Control */
28579/* Basic */
28580#define EHT_LINK_ID0x01 0x01
28581#define EHT_BSS_PARAMS0x02 0x02
28582#define EHT_MEDIUM_SYNC0x04 0x04
28583#define EHT_EML_CAPA0x08 0x08
28584#define EHT_MLD_CAPA0x10 0x10
28585#define EHT_MLD_ID0x20 0x20
28586#define EHT_EXT_MLD_CAPA0x40 0x40
28587/* Probe */
28588#define EHT_PML_MLD_ID0x01 0x01
28589#define EHT_PML_MLD_MAC0x02 0x02
28590/* Reconf */
28591#define EHT_RECONF_MLD_MAC0x01 0x01
28592#define EHT_RECONF_EML_CAPA0x02 0x02
28593#define EHT_RECONF_MLD_CAPA0x04 0x04
28594#define EHT_RECONF_EXT_MLD_CAPA0x08 0x08
28595
28596#define BASIC_MULTI_LINK0 0
28597#define PROBE_MULTI_LINK1 1
28598#define RECONFIGURATION_MULTI_LINK2 2
28599#define TDLS_MULTI_LINK3 3
28600#define PRIORITY_ACCESS_MULTI_LINK4 4
28601
28602/* Bits from the STA Control field */
28603/* Basic */
28604#define STA_CTRL_LINK_ID0x000F 0x000F
28605#define STA_CTRL_COMPLETE_PROFILE0x0010 0x0010
28606#define STA_CTRL_MAC_ADDR_PRESENT0x0020 0x0020
28607#define STA_CTRL_BEACON_INT_PRESENT0x0040 0x0040
28608#define STA_CTRL_TSF_OFFSET_PRESENT0x0080 0x0080
28609#define STA_CTRL_DTIM_INFO_PRESENT0x0100 0x0100
28610#define STA_CTRL_NSTR_LINK_PAIR_PRESENT0x0200 0x0200
28611#define STA_CTRL_NSTR_BITMAP_SIZE0x0400 0x0400
28612#define STA_CTRL_BSS_PARAMS_CHANGE_CNT_PRESENT0x0800 0x0800
28613#define STA_CTRL_RESERVED0xF000 0xF000
28614
28615/* Reconf */
28616#define AP_REMOVAL_TIMER_PRESENT0x0040 0x0040
28617#define OPERATION_PARAMS_PRESENT0x0800 0x0800
28618#define RECONF_NSTR_BITMAP_SIZE0x1000 0x1000
28619#define RECONF_NSTR_BITMAP_PRESENT0x2000 0x2000
28620
28621static int
28622dissect_multi_link_per_sta(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28623 proto_tree *tree,
28624 uint8_t multi_link_type,
28625 int *found_link_id)
28626{
28627 proto_tree *subelt_tree = NULL((void*)0), *sta_info_tree = NULL((void*)0);
28628 int offset = 0;
28629 int len = tvb_captured_length_remaining(tvb, offset);
28630 uint16_t sta_control = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
28631 uint8_t sta_info_len = 0;
28632 int start_offset = offset;
28633 uint8_t link_id;
28634
28635 subelt_tree = proto_tree_add_subtree(tree, tvb, offset, len,
28636 ett_eht_multi_link_per_sta,
28637 NULL((void*)0), "Per-STA Profile");
28638
28639 switch (multi_link_type) {
28640 case BASIC_MULTI_LINK0:
28641 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28642 *found_link_id = link_id;
28643 proto_item_append_text(subelt_tree, ", Link-ID = %d", link_id);
28644
28645 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28646 hf_ieee80211_eht_profile_sta_control,
28647 ett_eht_multi_link_sta_control,
28648 sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28649 offset += 2;
28650
28651 /* Check the length of STA Info is 0 */
28652 if (offset >= start_offset + len) {
28653 return len;
28654 }
28655
28656 sta_info_len = tvb_get_uint8(tvb, offset);
28657 sta_info_tree = proto_tree_add_subtree(subelt_tree, tvb, offset,
28658 sta_info_len,
28659 ett_eht_multi_link_per_sta_info,
28660 NULL((void*)0), "STA Info");
28661
28662 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_len,
28663 tvb, offset, 1, ENC_NA0x00000000);
28664 offset += 1;
28665
28666 if (sta_control & STA_CTRL_MAC_ADDR_PRESENT0x0020) {
28667 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_mac,
28668 tvb, offset, 6, ENC_NA0x00000000);
28669 offset += 6;
28670 }
28671
28672 if (sta_control & STA_CTRL_BEACON_INT_PRESENT0x0040) {
28673 proto_tree_add_item(sta_info_tree,
28674 hf_ieee80211_eht_sta_profile_info_beacon,
28675 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28676 offset += 2;
28677 }
28678
28679 if (sta_control & STA_CTRL_TSF_OFFSET_PRESENT0x0080) {
28680 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_tsf_offset,
28681 tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
28682 offset += 8;
28683 }
28684
28685 if (sta_control & STA_CTRL_DTIM_INFO_PRESENT0x0100) {
28686 proto_tree * dtim_tree;
28687
28688 dtim_tree = proto_tree_add_subtree(sta_info_tree, tvb, offset, 2,
28689 ett_eht_multi_link_sta_dtim, NULL((void*)0), "DTIM Info");
28690
28691 proto_tree_add_item(dtim_tree,
28692 hf_ieee80211_eht_sta_profile_info_dtim_count,
28693 tvb, offset, 1, ENC_NA0x00000000);
28694 offset += 1;
28695
28696 proto_tree_add_item(dtim_tree,
28697 hf_ieee80211_eht_sta_profile_info_dtim_period,
28698 tvb, offset, 1, ENC_NA0x00000000);
28699 offset += 1;
28700 }
28701
28702 if (sta_control & STA_CTRL_NSTR_LINK_PAIR_PRESENT0x0200) {
28703 int bitmap_size = (sta_control & STA_CTRL_NSTR_BITMAP_SIZE0x0400) ? 2 : 1;
28704
28705 proto_tree_add_item(sta_info_tree,
28706 hf_ieee80211_eht_sta_profile_info_bitmap,
28707 tvb, offset, bitmap_size, ENC_NA0x00000000);
28708 offset += bitmap_size;
28709 }
28710
28711 if (sta_control & STA_CTRL_BSS_PARAMS_CHANGE_CNT_PRESENT0x0800) {
28712 proto_tree_add_item(sta_info_tree,
28713 hf_ieee80211_eht_sta_profile_bss_params_change_count,
28714 tvb, offset, 1, ENC_NA0x00000000);
28715 offset += 1;
28716 }
28717 break;
28718 case PROBE_MULTI_LINK1:
28719 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28720 *found_link_id = link_id;
28721
28722 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28723 hf_ieee80211_eht_profile_sta_control,
28724 ett_eht_multi_link_sta_control,
28725 probe_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28726 offset += 2;
28727
28728 /*
28729 * Now there will be some elements if complete profile is 0
28730 *
28731 * There can be one Request element, one Extended Request Element or
28732 * one of both.
28733 */
28734 if ((sta_control & STA_CTRL_COMPLETE_PROFILE0x0010) == 0) {
28735 bool_Bool seen_request = false0, seen_ext_request = false0;
28736
28737 while (tvb_captured_length_remaining(tvb, offset) >= 2) {
28738 static const uint8_t ids[] = { TAG_TSPEC13 };
28739 uint8_t elt_type = 0;
28740
28741 if (tvb_captured_length_remaining(tvb, offset) < 2) {
28742 expert_add_info_format(pinfo, subelt_tree,
28743 &ei_ieee80211_eht_invalid_multi_link,
28744 "Invalid Probe Request Multi-Link element "
28745 "STA Control field, should contain a Request "
28746 "element or an Extended Request element or both "
28747 "but there are insufficient bytes");
28748
28749 return len;
28750 }
28751
28752 elt_type = tvb_get_uint8(tvb, offset);
28753
28754 if ((elt_type != TAG_REQUEST10 && elt_type != TAG_ELEMENT_ID_EXTENSION255) ||
28755 (elt_type == TAG_ELEMENT_ID_EXTENSION255 &&
28756 (tvb_get_uint8(tvb, offset + 1) < 3 ||
28757 tvb_get_uint8(tvb, offset + 2) != ETAG_EXTENDED_REQUEST10))) {
28758 /* Add an expert Info */
28759
28760 expert_add_info_format(pinfo, subelt_tree,
28761 &ei_ieee80211_eht_invalid_multi_link,
28762 "Invalid Probe Request Multi-Link element "
28763 "STA Control field, should contain a Request "
28764 "element or an Extended Request element or both "
28765 "but it contains other elements or there are "
28766 "insufficient bytes for an extended element");
28767 return len;
28768 }
28769
28770 if (elt_type == TAG_REQUEST10) {
28771 if (!seen_request) {
28772 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, ids,
28773 G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
28774 seen_request = true1;
28775 } else {
28776 expert_add_info_format(pinfo, subelt_tree,
28777 &ei_ieee80211_eht_invalid_multi_link,
28778 "Invalid Probe Request Multi-Link element "
28779 "STA Control field. May only contain one Request "
28780 "element");
28781
28782 return len;
28783 }
28784 } else { /* It can only be a ETAG_EXTENDED_REQUEST */
28785 if (!seen_ext_request) {
28786 uint8_t ext_tag_len = tvb_get_uint8(tvb, offset + 1);
28787
28788 offset += 3;
28789 dissect_extended_request(tvb, pinfo, tree, offset, ext_tag_len);
28790
28791 offset += ext_tag_len;
28792 seen_ext_request = true1;
28793 } else {
28794 expert_add_info_format(pinfo, subelt_tree,
28795 &ei_ieee80211_eht_invalid_multi_link,
28796 "Invalid Probe Request Multi-Link element "
28797 "STA Control field. May only contain one Extended "
28798 "Request element");
28799
28800 return len;
28801 }
28802 }
28803 }
28804 }
28805 break;
28806 case RECONFIGURATION_MULTI_LINK2:
28807 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28808 *found_link_id = link_id;
28809
28810 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28811 hf_ieee80211_eht_profile_sta_control,
28812 ett_eht_multi_link_sta_control,
28813 reconfig_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28814 offset += 2;
28815
28816 /* Check the length of STA Info is 0 */
28817 if (offset >= start_offset + len) {
28818 return len;
28819 }
28820
28821 sta_info_len = tvb_get_uint8(tvb, offset);
28822 sta_info_tree = proto_tree_add_subtree(subelt_tree, tvb, offset, sta_info_len,
28823 ett_eht_multi_link_per_sta_info,
28824 NULL((void*)0), "STA Info");
28825
28826 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_len,
28827 tvb, offset, 1, ENC_NA0x00000000);
28828 offset += 1;
28829
28830 if (sta_control & STA_CTRL_MAC_ADDR_PRESENT0x0020) {
28831 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_mac,
28832 tvb, offset, 6, ENC_NA0x00000000);
28833 offset += 6;
28834 }
28835
28836 if (sta_control & AP_REMOVAL_TIMER_PRESENT0x0040) {
28837 proto_tree_add_item(sta_info_tree,
28838 hf_ieee80211_eht_sta_profile_removal_timer,
28839 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28840 offset += 2;
28841 }
28842
28843 if (sta_control & OPERATION_PARAMS_PRESENT0x0800) {
28844 proto_tree * oper_tree;
28845
28846 oper_tree = proto_tree_add_subtree(sta_info_tree, tvb, offset, 3,
28847 ett_eht_multi_link_reconf_oper_param, NULL((void*)0), "Operation Parameters");
28848
28849 proto_tree_add_bitmask_with_flags(oper_tree, tvb, offset,
28850 hf_ieee80211_eht_sta_profile_presence_indi,
28851 ett_eht_multi_link_reconfig_presence_indi,
28852 reconfig_presence_indi_hdrs, ENC_LITTLE_ENDIAN0x80000000,
28853 BMT_NO_APPEND0x01);
28854 offset += 1;
28855
28856 proto_tree_add_bitmask_with_flags(oper_tree, tvb, offset,
28857 hf_ieee80211_eht_sta_profile_operation_para_info,
28858 ett_eht_multi_link_reconfig_operation_para_info,
28859 reconfig_operation_para_info_hdrs, ENC_LITTLE_ENDIAN0x80000000,
28860 BMT_NO_APPEND0x01);
28861 offset += 2;
28862 }
28863
28864 if (sta_control & RECONF_NSTR_BITMAP_PRESENT0x2000) {
28865 int bitmap_size = (sta_control & RECONF_NSTR_BITMAP_SIZE0x1000) ? 2 : 1;
28866
28867 proto_tree_add_item(sta_info_tree,
28868 hf_ieee80211_eht_sta_profile_info_bitmap,
28869 tvb, offset, bitmap_size, ENC_NA0x00000000);
28870 offset += bitmap_size;
28871 }
28872 break;
28873 case TDLS_MULTI_LINK3:
28874 expert_add_info_format(pinfo, subelt_tree,
28875 &ei_ieee80211_eht_invalid_multi_link,
28876 "Invalid TDLS Multi-Link element. There should not "
28877 "be any Link Info fields.");
28878
28879 break;
28880 case PRIORITY_ACCESS_MULTI_LINK4:
28881 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28882 *found_link_id = link_id;
28883 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28884 hf_ieee80211_eht_profile_sta_control,
28885 ett_eht_multi_link_sta_control,
28886 prio_access_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28887 offset += 2;
28888
28889 /*
28890 * Could contain the EDCA Parameter Set elt or the MU EDCA Parameter Set
28891 * elt, or none.
28892 */
28893 if (tvb_captured_length_remaining(tvb, offset) > 2) {
28894
28895 }
28896 break;
28897 default:
28898 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 28898))
;
28899 break;
28900 }
28901
28902 // Sta Profile
28903 // Save HE capa settings
28904 {
28905 unsigned *p_channel_width_set =
28906 (unsigned *)p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan,
28907 HE_CHANNEL_WIDTH_KEY);
28908 unsigned channel_width_set = GPOINTER_TO_INT(p_channel_width_set)((gint) (glong) (p_channel_width_set));
28909 uint32_t ftype = GPOINTER_TO_UINT(p_get_proto_data(wmem_file_scope(),((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
28910 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
28911 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
28912
28913 int end_offset = start_offset + len;
28914 if (offset < end_offset) {
28915 /* Check CSA, EX CSA or MAX CST elements to skip parsing cap info */
28916 uint8_t elem = tvb_get_uint8(tvb, offset);
28917 uint8_t elem_len = tvb_get_uint8(tvb, offset+1);
28918 uint8_t ext_elem = 0;
28919 if (elem == TAG_ELEMENT_ID_EXTENSION255) {
28920 ext_elem = tvb_get_uint8(tvb, offset+2);
28921 }
28922 if (multi_link_type == PRIORITY_ACCESS_MULTI_LINK4) {
28923 } else if ((elem == TAG_CHANNEL_SWITCH_ANN37 && elem_len == 3) ||
28924 (elem == TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60 && elem_len == 4) ||
28925 (ext_elem == ETAG_MAX_CHANNEL_SWITCH_TIME52 && elem_len == 4)) {
28926 } else {
28927 offset += add_ff_cap_info(subelt_tree, tvb, pinfo, offset);
28928 }
28929 /*
28930 * If it is an association or re-association response, deal with the
28931 * status code.
28932 */
28933 if ((ftype == MGT_ASSOC_RESP0x01 || ftype == MGT_REASSOC_RESP0x03) &&
28934 multi_link_type == BASIC_MULTI_LINK0) {
28935 offset += add_ff_status_code(subelt_tree, tvb, pinfo, offset);
28936 }
28937 }
28938 while (offset < end_offset) {
28939 int tag_len = tvb_get_uint8(tvb, offset+1);
28940 if (offset + 1 + tag_len >= end_offset) {
28941 /* Detect wrong format to avoid from corrupting default_context */
28942 expert_add_info_format(pinfo, subelt_tree, &ei_ieee80211_eht_invalid_subelement,
28943 "Per-STA Profile subelements had wrong element/length");
28944 *found_link_id = -1;
28945 return len;
28946 }
28947 offset += add_tagged_field(pinfo, subelt_tree, tvb, offset, ftype, NULL((void*)0), 0, NULL((void*)0));
28948 }
28949
28950 // Set he capa settings back
28951 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, HE_CHANNEL_WIDTH_KEY,
28952 GINT_TO_POINTER(channel_width_set | (1<<31))((gpointer) (glong) (channel_width_set | (1<<31))));
28953 }
28954 return len;
28955}
28956
28957static const value_string multi_link_type_vals[] = {
28958 { BASIC_MULTI_LINK0, "Basic" },
28959 { PROBE_MULTI_LINK1, "Probe Request" },
28960 { RECONFIGURATION_MULTI_LINK2, "Reconfiguration" },
28961 { TDLS_MULTI_LINK3, "TDLS" },
28962 { PRIORITY_ACCESS_MULTI_LINK4, "Priority Access" },
28963 { 5, "Reserved" },
28964 { 6, "Reserved" },
28965 { 7, "Reserved" },
28966 { 0, NULL((void*)0) }
28967};
28968
28969static const range_string multi_link_sub_elt_string[] = {
28970 { 0, 0, "Per-STA Profile" },
28971 { 1, 220, "Reserved" },
28972 { 221, 221, "Vendor Specific" },
28973 { 222, 255, "Reserved" },
28974 { 0, 0, NULL((void*)0) }
28975};
28976
28977static int * const eht_link_id_hdrs[] = {
28978 &hf_ieee80211_eht_common_info_link_id,
28979 &hf_ieee80211_eht_common_info_link_id_reserved,
28980 NULL((void*)0)
28981};
28982
28983static int * const eht_medium_sync_delay_hdrs[] = {
28984 &hf_ieee80211_eht_common_info_medium_sync_duration,
28985 &hf_ieee80211_eht_common_info_medium_sync_threshold,
28986 &hf_ieee80211_eht_common_info_medium_sync_max_txops,
28987 NULL((void*)0)
28988};
28989
28990static int * const eht_eml_capabilities_hdrs[] = {
28991 &hf_ieee80211_eht_common_info_eml_capa_emlsr_support,
28992 &hf_ieee80211_eht_common_info_eml_capa_emlsr_padding_delay,
28993 &hf_ieee80211_eht_common_info_eml_capa_emlsr_transition_delay,
28994 &hf_ieee80211_eht_common_info_eml_capa_emlmr_support,
28995 &hf_ieee80211_eht_common_info_eml_capa_emlmr_delay,
28996 &hf_ieee80211_eht_common_info_eml_capa_transition_timeout,
28997 &hf_ieee80211_eht_common_info_eml_capa_reserved,
28998 NULL((void*)0)
28999};
29000
29001static int * const eht_mld_capabilities_hdrs[] = {
29002 &hf_ieee80211_eht_common_info_mld_max_simul_links,
29003 &hf_ieee80211_eht_common_info_mld_srs_support,
29004 &hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg,
29005 &hf_ieee80211_eht_common_info_mld_freq_sep_for_str,
29006 &hf_ieee80211_eht_common_info_mld_aar_support,
29007 &hf_ieee80211_eht_common_info_mld_link_reconf_op_support,
29008 &hf_ieee80211_eht_common_info_mld_aligned_twt_support,
29009 &hf_ieee80211_eht_common_info_mld_reserved,
29010 NULL((void*)0)
29011};
29012
29013static int * const eht_ext_mld_capabilities_hdrs[] = {
29014 &hf_ieee80211_eht_common_info_ext_mld_op_update_support,
29015 &hf_ieee80211_eht_common_info_ext_mld_max_simul_links,
29016 &hf_ieee80211_eht_common_info_ext_mld_nstr_status_support,
29017 &hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support,
29018 &hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support,
29019 &hf_ieee80211_eht_common_info_ext_mld_reserved,
29020 NULL((void*)0)
29021};
29022
29023/*
29024 * Build a TVB containing the sub-elt. Offset will point to the subelt id in
29025 * tvb, and the sub-elt might span several fragments. Subsequent fragments
29026 * will have an id of 254.
29027 */
29028static tvbuff_t *
29029get_subelt_tvb(tvbuff_t *tvb, packet_info *pinfo, int offset, int *overhead)
29030{
29031 uint8_t subelt_len = tvb_get_uint8(tvb, offset + 1);
29032 tvbuff_t *tmp_tvb;
29033 int ohead = 0;
29034
29035 if (subelt_len == 255 &&
29036 tvb_captured_length_remaining(tvb, offset) > 259 &&
29037 tvb_get_uint8(tvb, offset + 255 + 2) == 0xfe) {
29038 tvbuff_t *tvb_comp;
29039 uint8_t frag_len;
29040
29041 tvb_comp = tvb_new_composite();
29042
29043 do {
29044 offset += 1;
29045 frag_len = tvb_get_uint8(tvb, offset);
29046 offset += 1;
29047 tmp_tvb = tvb_new_subset_length(tvb, offset, frag_len);
29048 /* Insert this fragment ... */
29049 tvb_composite_append(tvb_comp, tmp_tvb);
29050 offset += frag_len;
29051 ohead += 2;
29052 } while (frag_len == 255 &&
29053 tvb_captured_length_remaining(tvb, offset) > 2 &&
29054 tvb_get_uint8(tvb, offset) == 0xfe);
29055
29056 tvb_composite_finalize(tvb_comp);
29057
29058 *overhead = ohead - 2;
29059 add_new_data_source(pinfo, tvb_comp, "Reassembled Subelt");
29060 return tvb_comp;
29061 } else {
29062 *overhead = 0;
29063 return tvb_new_subset_length(tvb, offset + 2, subelt_len);
29064 }
29065}
29066
29067static void
29068dissect_multi_link(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
29069 int offset, int len _U___attribute__((unused)))
29070{
29071 proto_item *control = NULL((void*)0), *type = NULL((void*)0);
29072 proto_tree *ctl_tree = NULL((void*)0), *common_tree = NULL((void*)0), *subelt_tree = NULL((void*)0);
29073 uint8_t common_info_len = 0;
29074 uint16_t multi_link_control = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
29075 uint8_t multi_link_type = multi_link_control & 0x0007;
29076 uint16_t present = multi_link_control >> 4;
29077 int elt = 0, hf_index;
29078 int local_link_ids[16];
29079 int is_ap;
29080
29081 control = proto_tree_add_item(tree, hf_ieee80211_eht_multi_link_control, tvb,
29082 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29083 ctl_tree = proto_item_add_subtree(control, ett_eht_multi_link_control);
29084
29085 type = proto_tree_add_item(ctl_tree, hf_ieee80211_eht_multi_link_control_type,
29086 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29087 proto_tree_add_item(ctl_tree, hf_ieee80211_eht_multi_link_control_reserved,
29088 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29089
29090 /* Handle the control elt here, separate items */
29091 if (multi_link_type == BASIC_MULTI_LINK0) {
29092 proto_item_append_text(control, " Basic");
29093 proto_tree_add_item(ctl_tree,
29094 hf_ieee80211_eht_multi_link_control_link_id_present,
29095 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29096 proto_tree_add_item(ctl_tree,
29097 hf_ieee80211_eht_multi_link_control_bss_parms_ch_count,
29098 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29099 proto_tree_add_item(ctl_tree,
29100 hf_ieee80211_eht_multi_link_control_medium_sync_delay,
29101 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29102 proto_tree_add_item(ctl_tree,
29103 hf_ieee80211_eht_multi_link_control_eml_capa,
29104 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29105 proto_tree_add_item(ctl_tree,
29106 hf_ieee80211_eht_multi_link_control_mld_capa,
29107 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29108 proto_tree_add_item(ctl_tree,
29109 hf_ieee80211_eht_multi_link_control_basic_mld_id_present,
29110 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29111 proto_tree_add_item(ctl_tree,
29112 hf_ieee80211_eht_multi_link_control_ext_mld_capa,
29113 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29114 proto_tree_add_item(ctl_tree,
29115 hf_ieee80211_eht_multi_link_control_bitmap_reserved,
29116 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29117 hf_index = hf_ieee80211_eht_multi_link_type_0_link_count;
29118 } else if (multi_link_type == PROBE_MULTI_LINK1) {
29119 proto_item_append_text(control, " Probe Request");
29120 proto_tree_add_item(ctl_tree,
29121 hf_ieee80211_eht_multi_link_control_probe_mld_id_present,
29122 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29123 proto_tree_add_item(ctl_tree,
29124 hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present,
29125 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29126 proto_tree_add_item(ctl_tree,
29127 hf_ieee80211_eht_multi_link_control_probe_reserved,
29128 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29129 hf_index = hf_ieee80211_eht_multi_link_type_1_link_count;
29130 } else if (multi_link_type == RECONFIGURATION_MULTI_LINK2) {
29131 proto_item_append_text(control, " Reconfiguration");
29132 proto_tree_add_item(ctl_tree,
29133 hf_ieee80211_eht_multi_link_control_reconfig_mld_mac,
29134 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29135 proto_tree_add_item(ctl_tree,
29136 hf_ieee80211_eht_multi_link_control_reconfig_eml_capa,
29137 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29138 proto_tree_add_item(ctl_tree,
29139 hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper,
29140 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29141 proto_tree_add_item(ctl_tree,
29142 hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper,
29143 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29144 proto_tree_add_item(ctl_tree,
29145 hf_ieee80211_eht_multi_link_control_reconfig_reserved,
29146 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29147 hf_index = hf_ieee80211_eht_multi_link_type_2_link_count;
29148 } else if (multi_link_type == TDLS_MULTI_LINK3) {
29149 proto_item_append_text(control, " TDLS");
29150 /* Presence bitmap is reserved */
29151 proto_tree_add_item(ctl_tree,
29152 hf_ieee80211_eht_multi_link_control_tdls_reserved, tvb,
29153 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29154 hf_index = hf_ieee80211_eht_multi_link_type_3_link_count;
29155 } else if (multi_link_type == PRIORITY_ACCESS_MULTI_LINK4) {
29156 proto_item_append_text(control, " Priority Access");
29157 proto_tree_add_item(ctl_tree,
29158 hf_ieee80211_eht_multi_link_control_prio_access_reserved,
29159 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29160 hf_index = hf_ieee80211_eht_multi_link_type_4_link_count;
29161 } else {
29162 expert_add_info_format(pinfo, type, &ei_ieee80211_eht_invalid_multi_link,
29163 "Invalid Multi-Link Control type, value is %u",
29164 multi_link_type);
29165 return;
29166 }
29167 offset += 2;
29168
29169 switch (multi_link_type) {
29170 case BASIC_MULTI_LINK0:
29171 /* Handle common info for basic element */
29172 common_info_len = tvb_get_uint8(tvb, offset);
29173 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29174 ett_eht_multi_link_common_info,
29175 NULL((void*)0), "Common Info");
29176 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29177 offset, 1, ENC_NA0x00000000);
29178 offset += 1;
29179
29180 is_ap = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool,((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
29181 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
29182 IS_AP_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, IS_AP_KEY)))
;
29183 if (assoc_counter_in_auth) {
29184 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
29185 if (conversation) {
29186 ieee80211_conversation_data_t *conversation_data =
29187 (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
29188 if (is_ap) {
29189 tvb_memcpy(tvb, conversation_data->ap_mld, offset, 6);
29190 conversation_data->mld_set = TRUE(!(0));
29191 } else {
29192 tvb_memcpy(tvb, conversation_data->sta_mld, offset, 6);
29193 conversation_data->mld_set = TRUE(!(0));
29194 }
29195 }
29196 }
29197
29198 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29199 tvb, offset, 6, ENC_NA0x00000000);
29200 offset += 6;
29201
29202 if (present & EHT_LINK_ID0x01) {
29203 proto_tree_add_bitmask(common_tree, tvb, offset,
29204 hf_ieee80211_eht_common_field_link_id_field,
29205 ett_eht_multi_link_common_info_link_id,
29206 eht_link_id_hdrs, ENC_NA0x00000000);
29207 offset += 1;
29208 }
29209
29210 if (present & EHT_BSS_PARAMS0x02) {
29211 proto_tree_add_item(common_tree,
29212 hf_ieee80211_eht_common_field_bss_param_change_count,
29213 tvb, offset, 1, ENC_NA0x00000000);
29214 offset += 1;
29215 }
29216
29217 if (present & EHT_MEDIUM_SYNC0x04) {
29218 proto_tree_add_bitmask(common_tree, tvb, offset,
29219 hf_ieee80211_eht_common_field_medium_sync_field,
29220 ett_eht_multi_link_common_info_medium_sync,
29221 eht_medium_sync_delay_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29222 offset += 2;
29223 }
29224
29225 if (present & EHT_EML_CAPA0x08) {
29226 proto_tree_add_bitmask(common_tree, tvb, offset,
29227 hf_ieee80211_eht_common_field_eml_capabilities,
29228 ett_eht_multi_link_common_info_eml_capa,
29229 eht_eml_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29230 offset += 2;
29231 }
29232
29233 if (present & EHT_MLD_CAPA0x10) {
29234 proto_tree_add_bitmask(common_tree, tvb, offset,
29235 hf_ieee80211_eht_common_field_mld_capabilities,
29236 ett_eht_multi_link_common_info_mld_capa,
29237 eht_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29238 offset += 2;
29239 }
29240
29241 if (present & EHT_MLD_ID0x20) {
29242 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_id,
29243 tvb, offset, 1, ENC_NA0x00000000);
29244 offset += 1;
29245 }
29246
29247 if (present & EHT_EXT_MLD_CAPA0x40) {
29248 proto_tree_add_bitmask(common_tree, tvb, offset,
29249 hf_ieee80211_eht_common_field_ext_mld_capabilities,
29250 ett_eht_multi_link_common_info_ext_mld_capa,
29251 eht_ext_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29252 offset += 2;
29253 }
29254 break;
29255 case PROBE_MULTI_LINK1:
29256 /* Handle common info for probe request element */
29257 common_info_len = tvb_get_uint8(tvb, offset);
29258 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29259 ett_eht_multi_link_common_info,
29260 NULL((void*)0), "Common Info");
29261 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29262 offset, 1, ENC_NA0x00000000);
29263 offset += 1;
29264
29265 if (present & EHT_PML_MLD_ID0x01) {
29266 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_id,
29267 tvb, offset, 1, ENC_NA0x00000000);
29268 offset += 1;
29269 }
29270
29271 if (present & EHT_PML_MLD_MAC0x02) {
29272 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29273 tvb, offset, 6, ENC_NA0x00000000);
29274 offset += 6;
29275 }
29276 break;
29277 case RECONFIGURATION_MULTI_LINK2:
29278 common_info_len = tvb_get_uint8(tvb, offset);
29279 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29280 ett_eht_multi_link_common_info,
29281 NULL((void*)0), "Common Info");
29282 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29283 offset, 1, ENC_NA0x00000000);
29284 offset += 1;
29285
29286 if (present & EHT_RECONF_MLD_MAC0x01) {
29287 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29288 tvb, offset, 6, ENC_NA0x00000000);
29289 offset += 6;
29290 }
29291
29292 if (present & EHT_RECONF_EML_CAPA0x02) {
29293 proto_tree_add_bitmask(common_tree, tvb, offset,
29294 hf_ieee80211_eht_common_field_eml_capabilities,
29295 ett_eht_multi_link_common_info_eml_capa,
29296 eht_eml_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29297 offset += 2;
29298 }
29299
29300 if (present & EHT_RECONF_MLD_CAPA0x04) {
29301 proto_tree_add_bitmask(common_tree, tvb, offset,
29302 hf_ieee80211_eht_common_field_mld_capabilities,
29303 ett_eht_multi_link_common_info_mld_capa,
29304 eht_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29305 offset += 2;
29306 }
29307 if (present & EHT_RECONF_EXT_MLD_CAPA0x08) {
29308 proto_tree_add_bitmask(common_tree, tvb, offset,
29309 hf_ieee80211_eht_common_field_ext_mld_capabilities,
29310 ett_eht_multi_link_common_info_ext_mld_capa,
29311 eht_ext_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29312 offset += 2;
29313 }
29314 break;
29315 case TDLS_MULTI_LINK3:
29316 common_info_len = tvb_get_uint8(tvb, offset);
29317 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29318 ett_eht_multi_link_common_info,
29319 NULL((void*)0), "Common Info");
29320 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29321 offset, 1, ENC_NA0x00000000);
29322 offset += 1;
29323 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_ap_mld_mac,
29324 tvb, offset, 6, ENC_NA0x00000000);
29325 offset += 6;
29326 break;
29327 case PRIORITY_ACCESS_MULTI_LINK4:
29328 common_info_len = tvb_get_uint8(tvb, offset);
29329 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29330 ett_eht_multi_link_common_info,
29331 NULL((void*)0), "Common Info");
29332 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29333 offset, 1, ENC_NA0x00000000);
29334 offset += 1;
29335
29336 proto_tree_add_item(common_tree,
29337 hf_ieee80211_eht_common_field_ap_mld_mac, tvb,
29338 offset, 6, ENC_NA0x00000000);
29339 offset += 6;
29340 break;
29341 default:
29342 /* We should not reach here as we filtered out non-valid values above */
29343 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 29343))
;
29344 }
29345
29346 /* Handle the link info. It is 0 or more subelements */
29347 while (tvb_reported_length_remaining(tvb, offset)) {
29348 uint8_t tag, subelt_len;
29349 int link_id = -1;
29350
29351 if (tvb_reported_length_remaining(tvb, offset) < 2) {
29352 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_subelement,
29353 "Per-STA Profile subelements must contain at least 2 bytes");
29354 return;
29355 }
29356
29357 tag = tvb_get_uint8(tvb, offset);
29358 subelt_len = tvb_get_uint8(tvb, offset + 1);
29359
29360 tvbuff_t *new_tvb;
29361 int overhead = 0;
29362 int full_subelt_len;
29363
29364 switch (tag) {
29365 case 0:
29366 /*
29367 * We have to assemble the sub-elt if there is a continuations. And
29368 * it will have to be a composite TVB etc.
29369 */
29370 new_tvb = get_subelt_tvb(tvb, pinfo, offset, &overhead);
29371 full_subelt_len = tvb_captured_length_remaining(new_tvb, 0);
29372
29373 proto_tree_add_item(tree,
29374 hf_ieee80211_eht_multi_link_subelt_tag, tvb,
29375 offset, 1, ENC_NA0x00000000);
29376 offset += 1;
29377 if (full_subelt_len <= 255) {
29378 proto_tree_add_item(tree,
29379 hf_ieee80211_eht_multi_link_subelt_len, tvb,
29380 offset, 1, ENC_NA0x00000000);
29381 } else {
29382 proto_tree_add_uint(tree, hf_ieee80211_eht_multi_link_subelt_len, tvb,
29383 0, 0, full_subelt_len);
29384 }
29385 offset += 1;
29386
29387 subelt_tree = proto_tree_add_subtree_format(tree, new_tvb, 0,
29388 full_subelt_len,
29389 ett_eht_multi_link_subelt,
29390 NULL((void*)0), "Per-STA Profile %d", elt + 1);
29391 /*
29392 * There might be some per-STA elements that do not contain link IDs.
29393 */
29394
29395 /*
29396 * We use the sta profile num here. But we need to ensure it is not
29397 * seen as NULL and we send it in zero based. Will be incremented
29398 * before use.
29399 */
29400
29401 offset += dissect_multi_link_per_sta(new_tvb, pinfo, subelt_tree,
29402 multi_link_type, &link_id);
29403
29404 offset += overhead; /* Account for the overhead in the subelt */
29405 if (link_id != -1) {
29406 local_link_ids[elt] = link_id;
29407 }
29408 break;
29409 case 221:
29410 /* Add an expert info saying there are none so far? */
29411 offset += subelt_len + 2;
29412 break;
29413 default:
29414 offset += subelt_len + 2;
29415 break;
29416 }
29417 if (link_id != -1) {
29418 elt++;
29419 }
29420 }
29421 proto_tree_add_uint(tree, hf_index, tvb, 0, 0, elt);
29422
29423 if (elt) {
29424 wmem_strbuf_t *link_id_list = wmem_strbuf_new_sized(pinfo->pool, elt * 2);
29425 for (int i = 0; i < elt; i++) {
29426 if (local_link_ids[i] != -1) {
29427 wmem_strbuf_append_printf(link_id_list, (i == 0) ? "%d" : "_%d", local_link_ids[i]);
29428 }
29429 }
29430 proto_tree_add_string(tree, hf_ieee80211_eht_multi_link_link_id_list, tvb,
29431 0, 0, link_id_list->str);
29432 }
29433}
29434
29435static int * const eht_operation_hdrs[] = {
29436 &hf_ieee80211_eht_operation_info_present,
29437 &hf_ieee80211_eht_operation_subchannel_bitmap_present,
29438 &hf_ieee80211_eht_operation_default_pe_duration,
29439 &hf_ieee80211_eht_operation_group_addressed_bu_indication_limit,
29440 &hf_ieee80211_eht_operation_group_addressed_bu_indication_exp,
29441 &hf_ieee80211_eht_operation_mcs15_disable,
29442 &hf_ieee80211_eht_operation_reserved,
29443 NULL((void*)0)
29444};
29445
29446static int *const eht_op_control_hdrs[] = {
29447 &hf_ieee80211_eht_operation_control_chan_width,
29448 &hf_ieee80211_eht_operation_control_reserved,
29449 NULL((void*)0)
29450};
29451
29452static const value_string eht_operation_control_chan_wid_vals[] = {
29453 { 0, "20 MHz EHT BSS bandwidth" },
29454 { 1, "40 MHz EHT BSS bandwidth" },
29455 { 2, "80 MHz EHT BSS bandwidth" },
29456 { 3, "160 MHz EHT BSS bandwidth" },
29457 { 4, "320 MHz EHT BSS bandwidth" },
29458 { 5, "Reserved" },
29459 { 6, "Reserved" },
29460 { 7, "Reserved" },
29461 { 0, NULL((void*)0) },
29462};
29463
29464static void
29465dissect_eht_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
29466 int offset, int len _U___attribute__((unused)))
29467{
29468 uint8_t params = tvb_get_uint8(tvb, offset);
29469
29470 proto_tree_add_bitmask(tree, tvb, offset,
29471 hf_ieee80211_eht_operation_parameters,
29472 ett_eht_operation_params, eht_operation_hdrs,
29473 ENC_LITTLE_ENDIAN0x80000000);
29474 offset++;
29475
29476 if (len < 5) {
29477 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
29478 "This IE appears to conform to an earlier draft than D2.0 and lacks the Basic EHT MCS And MSS Set, len=%d", len);
29479 return;
29480
29481 } else {
29482 proto_tree_add_item(tree, hf_ieee80211_eht_basic_eht_mcs_nss_set, tvb,
29483 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29484
29485 offset += 4;
29486 }
29487
29488 if (params & 0x01) { /* EHT Operations Info present */
29489 proto_tree_add_bitmask(tree, tvb, offset,
29490 hf_ieee80211_eht_operation_control,
29491 ett_eht_operation_control,
29492 eht_op_control_hdrs,
29493 ENC_NA0x00000000);
29494 offset++;
29495
29496 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs0, tvb, offset, 1,
29497 ENC_NA0x00000000);
29498 offset++;
29499
29500 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs1, tvb, offset, 1,
29501 ENC_NA0x00000000);
29502 offset++;
29503 }
29504
29505 if (params & 0x02) { /* Disabled subchannel bitmap present */
29506 proto_tree_add_item(tree, hf_ieee80211_eht_operation_disabled_bitmap, tvb,
29507 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29508 }
29509}
29510
29511static const value_string eht_link_adaptation_vals[] = {
29512 { 0, "No feedback" },
29513 { 1, "Reserved" },
29514 { 2, "Unsolicited" },
29515 { 3, "Solicited and unsolicited" },
29516 { 0, NULL((void*)0) },
29517};
29518
29519static int * const eht_mac_capa_hdrs[] = {
29520 &hf_ieee80211_eht_mac_capa_epcs_prio_access_support,
29521 &hf_ieee80211_eht_mac_capa_eht_om_control_support,
29522 &hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support,
29523 &hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support,
29524 &hf_ieee80211_eht_mac_capa_restricted_twt_support,
29525 &hf_ieee80211_eht_mac_capa_scs_traffic_description_support,
29526 &hf_ieee80211_eht_mac_capa_maximum_mpdu_length,
29527 &hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext,
29528 &hf_ieee80211_eht_mac_capa_eht_trs_support,
29529 &hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode,
29530 &hf_ieee80211_eht_mac_capa_two_bqrs_support,
29531 &hf_ieee80211_eht_mac_capa_eht_link_adaptation_support,
29532 &hf_ieee80211_eht_mac_capa_unsolicited_epcs_update,
29533 &hf_ieee80211_eht_mac_capa_reserved,
29534 NULL((void*)0)
29535};
29536
29537static int * const eht_phy_bits_0_15[] = {
29538 &hf_ieee80211_eht_phy_bits_0_15_reserved,
29539 &hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz,
29540 &hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz,
29541 &hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi,
29542 &hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo,
29543 &hf_ieee80211_eht_phy_bits_0_15_su_beamformer,
29544 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee,
29545 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz,
29546 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz,
29547 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz,
29548 NULL((void*)0)
29549};
29550
29551static int * const eht_phy_bits_16_31[] = {
29552 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz,
29553 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz,
29554 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz,
29555 &hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback,
29556 &hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback,
29557 &hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck,
29558 &hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck,
29559 &hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck,
29560 &hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck,
29561 &hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback,
29562 NULL((void*)0)
29563};
29564
29565static int * const eht_phy_bits_32_39[] = {
29566 &hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo,
29567 &hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support,
29568 &hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support,
29569 &hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi,
29570 &hf_ieee80211_eht_phy_bits_32_39_max_nc,
29571 NULL((void*)0)
29572};
29573
29574static int * const eht_phy_bits_40_63[] = {
29575 &hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck,
29576 &hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support,
29577 &hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support,
29578 &hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present,
29579 &hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding,
29580 &hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs,
29581 &hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15,
29582 &hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz,
29583 &hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw,
29584 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz,
29585 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz,
29586 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz,
29587 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz,
29588 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz,
29589 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz,
29590 &hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit,
29591 NULL((void*)0)
29592};
29593
29594static int * const eht_phy_bits_64_71[] = {
29595 &hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup,
29596 &hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup,
29597 &hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support,
29598 &hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo,
29599 &hf_ieee80211_eht_phy_bits_64_71_20m_mru_support,
29600 &hf_ieee80211_eht_phy_bits_64_71_reserved,
29601 NULL((void*)0)
29602};
29603
29604static int * const eht_mcs_20mhz_map_hdrs[] = {
29605 &hf_ieee80211_eht_rx_max_nss_20mhz_0_7,
29606 &hf_ieee80211_eht_tx_max_nss_20mhz_0_7,
29607 &hf_ieee80211_eht_rx_max_nss_20mhz_8_9,
29608 &hf_ieee80211_eht_tx_max_nss_20mhz_8_9,
29609 &hf_ieee80211_eht_rx_max_nss_20mhz_10_11,
29610 &hf_ieee80211_eht_tx_max_nss_20mhz_10_11,
29611 &hf_ieee80211_eht_rx_max_nss_20mhz_12_13,
29612 &hf_ieee80211_eht_tx_max_nss_20mhz_12_13,
29613 NULL((void*)0)
29614};
29615
29616static void
29617dissect_eht_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
29618 proto_tree *tree, int offset, int len _U___attribute__((unused)))
29619{
29620 proto_tree *eht_phy_capa = NULL((void*)0), *eht_mcs_nss = NULL((void*)0);
29621 bool_Bool ch_320mhz_in_6ghz = false0;
29622 bool_Bool ppe_thresholds_present = false0;
29623
29624 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_eht_mac_capabilities,
29625 ett_eht_mac_capa, eht_mac_capa_hdrs,
29626 ENC_LITTLE_ENDIAN0x80000000);
29627 offset += 2;
29628
29629 ch_320mhz_in_6ghz = tvb_get_uint8(tvb, offset) & 0x02;
29630
29631 eht_phy_capa = proto_tree_add_subtree(tree, tvb, offset, 9,
29632 ett_eht_phy_capa, NULL((void*)0),
29633 "EHT PHY Capabilities Information");
29634 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29635 hf_ieee80211_eht_phy_bits_0_15,
29636 ett_eht_phy_bits_0_15, eht_phy_bits_0_15,
29637 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29638 offset += 2;
29639
29640 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29641 hf_ieee80211_eht_phy_bits_16_31,
29642 ett_eht_phy_bits_16_31, eht_phy_bits_16_31,
29643 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29644 offset += 2;
29645
29646 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29647 hf_ieee80211_eht_phy_bits_32_39,
29648 ett_eht_phy_bits_32_39, eht_phy_bits_32_39,
29649 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29650 offset += 1;
29651
29652 ppe_thresholds_present = tvb_get_uint8(tvb, offset) & 0x08;
29653 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29654 hf_ieee80211_eht_phy_bits_40_63,
29655 ett_eht_phy_bits_40_63, eht_phy_bits_40_63,
29656 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29657 offset += 3;
29658
29659 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29660 hf_ieee80211_eht_phy_bits_64_71,
29661 ett_eht_phy_bits_64_71, eht_phy_bits_64_71,
29662 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29663 offset += 1;
29664
29665 /*
29666 * We need to figure out the channel width set and frequency for this but it
29667 * is only possible if we got the frequency info and the channel width set
29668 * was added to the pinfo. If we don't have that simply add the rest as
29669 * uninterpreted bytes.
29670 */
29671 eht_mcs_nss = proto_tree_add_subtree(tree, tvb, offset,
29672 tvb_captured_length_remaining(tvb, offset),
29673 ett_eht_phy_mcs_nss, NULL((void*)0),
29674 "Supported EHT-MCS and NSS Set");
29675
29676 if (pinfo->pseudo_header->ieee_802_11.has_frequency) {
29677 unsigned *p_channel_width_set =
29678 (unsigned *)p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan,
29679 HE_CHANNEL_WIDTH_KEY);
29680 unsigned channel_width_set = 0;
29681 /*
29682 * If we got it, we can handle the rest, otherwise not. Note,
29683 * we can determine if it was ever set by checking for non-zero because
29684 * we set at least one bit when saving it..
29685 */
29686 if (p_channel_width_set) {
29687 bool_Bool is_ap = GPOINTER_TO_UINT(p_get_proto_data(wmem_file_scope(),((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, IS_AP_KEY)))
29688 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, IS_AP_KEY)))
29689 IS_AP_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, IS_AP_KEY)))
;
29690 channel_width_set = GPOINTER_TO_UINT(p_channel_width_set)((guint) (gulong) (p_channel_width_set));
29691
29692 /* Distinguish between the AP and the non-AP cases as the logis is easier
29693 * even if that means some duplicate code.
29694 */
29695 if (is_ap) {
29696 /* The EHT-MCS and NSS set for BW <= 80MHz Ap etc */
29697 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29698 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29699 "Insufficient bytes for EHT Capabilities. Need 3. "
29700 "Perhaps the EHT Capabilities field is malformed.");
29701 return;
29702 }
29703 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29704 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
29705 ett_eht_phy_mcs_nss_set,
29706 eht_le_80_mcs_map_hdrs,
29707 ENC_LITTLE_ENDIAN0x80000000);
29708 offset += 3;
29709
29710 if (channel_width_set & 0x04) { /* B2 is set */
29711 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29712 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29713 "Insufficient bytes for EHT Capabilities. Need 3 for AP 160MHz. "
29714 "Perhaps the EHT Capabilities field is malformed.");
29715 return;
29716 }
29717 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29718 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
29719 ett_eht_phy_mcs_nss_set,
29720 eht_160_mcs_map_hdrs,
29721 ENC_LITTLE_ENDIAN0x80000000);
29722 offset += 3;
29723 }
29724 if (ch_320mhz_in_6ghz &&
29725 IS_6_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 5955
)
) {
29726 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29727 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29728 "Insufficient bytes for EHT Capabilities. Need 3. "
29729 "Perhaps the EHT Capabilities field is malformed.");
29730 return;
29731 }
29732 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29733 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
29734 ett_eht_phy_mcs_nss_set,
29735 eht_320_mcs_map_hdrs,
29736 ENC_LITTLE_ENDIAN0x80000000);
29737 offset += 3;
29738 }
29739 } else {
29740 /* Add the info for a 20MHz-Only Non-AP. But have to check both
29741 * frequency sets for some cases */
29742 if ((channel_width_set & 0x07) == 0) {
29743 if (tvb_captured_length_remaining(tvb, offset) < 4) {
29744 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29745 "Insufficient bytes for EHT Capabilities. Need 4. "
29746 "Perhaps the EHT Capabilities field is malformed.");
29747 return;
29748 }
29749 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29750 hf_ieee80211_eht_mcs_and_nss_non_ap,
29751 ett_eht_phy_mcs_nss_set,
29752 eht_mcs_20mhz_map_hdrs,
29753 ENC_LITTLE_ENDIAN0x80000000);
29754 offset += 4;
29755 }
29756 /* Now, the next set BW <= 80MHz except ...
29757 * If 2.4GHz and B0 is 1, or 5GHz or 6GHz and B1 */
29758 if ((IS_2_4_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 2400
&& pinfo->pseudo_header->ieee_802_11.frequency
<= 2500)
&&
29759 channel_width_set & 0x01) ||
29760 (channel_width_set & 0x02)) {
29761 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29762 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29763 "Insufficient bytes for EHT Capabilities. Need 3 for le 80MHz. "
29764 "Perhaps the EHT Capabilities field is malformed.");
29765 return;
29766 }
29767 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29768 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
29769 ett_eht_phy_mcs_nss_set,
29770 eht_le_80_mcs_map_hdrs,
29771 ENC_LITTLE_ENDIAN0x80000000);
29772 offset += 3;
29773
29774 }
29775 if (!IS_2_4_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 2400
&& pinfo->pseudo_header->ieee_802_11.frequency
<= 2500)
&&
29776 channel_width_set & 0x04) { /* B2 is set */
29777 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29778 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29779 "Insufficient bytes for EHT Capabilities. Need 3 for 160MHz. "
29780 "Perhaps the EHT Capabilities field is malformed.");
29781 return;
29782 }
29783 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29784 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
29785 ett_eht_phy_mcs_nss_set,
29786 eht_160_mcs_map_hdrs,
29787 ENC_LITTLE_ENDIAN0x80000000);
29788 offset += 3;
29789 }
29790 if (ch_320mhz_in_6ghz &&
29791 IS_6_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 5955
)
) {
29792 if (tvb_captured_length_remaining(tvb, offset) < 3) {
29793 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
29794 "Insufficient bytes for EHT Capabilities. Need 3 for 320MHz. "
29795 "Perhaps the EHT Capabilities field is malformed.");
29796 return;
29797 }
29798 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
29799 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
29800 ett_eht_phy_mcs_nss_set,
29801 eht_320_mcs_map_hdrs,
29802 ENC_LITTLE_ENDIAN0x80000000);
29803 offset += 3;
29804 }
29805 }
29806 } else {
29807 proto_tree_add_item(eht_mcs_nss, hf_ieee80211_eht_supported_mcs_nss_bytes,
29808 tvb, offset,
29809 tvb_captured_length_remaining(tvb, offset), ENC_NA0x00000000);
29810 offset += tvb_captured_length_remaining(tvb, offset);
29811 }
29812 }
29813
29814 /*
29815 * If the PPE thresholds are present, add them.
29816 */
29817 if (ppe_thresholds_present) {
29818 proto_tree_add_item(tree, hf_ieee80211_eht_ppe_thresholds, tvb, offset,
29819 tvb_captured_length_remaining(tvb, offset), ENC_NA0x00000000);
29820 }
29821}
29822
29823static const value_string tid_to_link_mapping_dirn_vals[] = {
29824 { 0, "Uplink" },
29825 { 1, "Downlink" },
29826 { 2, "Bidirectional link" },
29827 { 0, NULL((void*)0) }
29828};
29829
29830static const value_string ttl_link_mapping_size_vals[] = {
29831 { 0, "2 octets" },
29832 { 1, "1 octet" },
29833 { 0, NULL((void*)0) }
29834};
29835
29836static int * const eht_ttl_mapping_control_hdrs[] = {
29837 &hf_ieee80211_eht_ttl_mapping_direction,
29838 &hf_ieee80211_eht_ttl_default_link_mapping,
29839 &hf_ieee80211_eht_ttl_mapping_switch_time_pres,
29840 &hf_ieee80211_eht_ttl_expected_dura_pres,
29841 &hf_ieee80211_eht_ttl_link_mapping_size,
29842 &hf_ieee80211_eht_ttl_mapping_reserved,
29843 NULL((void*)0)
29844};
29845
29846static void
29847dissect_tid_to_link_mapping(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
29848 proto_tree *tree, int offset, int len _U___attribute__((unused)))
29849{
29850 proto_item *control = NULL((void*)0);
29851 uint8_t presence;
29852 uint8_t control_byte = tvb_get_uint8(tvb, offset);
29853 uint8_t map_size = 2;
29854 int hf_array[8] = {hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping,
29855 hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping,
29856 hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping,
29857 hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping,
29858 hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping,
29859 hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping,
29860 hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping,
29861 hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping};
29862 int hf_index = 0;
29863
29864 /*
29865 * If the Default Link Mapping bit is set, we only have 1 byte, otherwise 2
29866 */
29867 control = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
29868 hf_ieee80211_eht_ttl_mapping_control,
29869 ett_eht_ttl_mapping,
29870 eht_ttl_mapping_control_hdrs,
29871 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29872 offset += 1;
29873
29874 if (len == 1) {
29875 return;
29876 }
29877
29878 presence = tvb_get_uint8(tvb, offset);
29879
29880 proto_tree_add_item(control, hf_ieee80211_eht_ttl_mapping_presence, tvb,
29881 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
29882 offset += 1;
29883
29884 if (control_byte & 0x08) {
29885 proto_tree_add_item(tree, hf_ieee80211_eht_ttl_mapping_switch_time, tvb,
29886 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29887 offset += 2;
29888 }
29889
29890 if (control_byte & 0x10) {
29891 proto_tree_add_item(tree, hf_ieee80211_eht_ttl_mapping_expected_duration, tvb,
29892 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
29893 offset += 3;
29894 }
29895
29896 if (control_byte & 0x20) {
29897 map_size = 1;
29898 }
29899 while (presence) {
29900 if (presence & 0x01) {
29901 proto_tree_add_item(tree, hf_array[hf_index], tvb,
29902 offset, map_size, ENC_LITTLE_ENDIAN0x80000000);
29903 offset += map_size;
29904 }
29905 hf_index++;
29906 presence = presence >> 1;
29907 }
29908}
29909
29910static int * const ml_traffic_control_hdrs[] = {
29911 &hf_ieee80211_eht_multi_link_tc_bitmap_size,
29912 &hf_ieee80211_eht_multi_link_tc_aid_offset,
29913 &hf_ieee80211_eht_multi_link_tc_reserved,
29914 NULL((void*)0)
29915};
29916
29917static void
29918dissect_multi_link_traffic(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
29919 proto_tree *tree, int offset, int len _U___attribute__((unused)))
29920{
29921 proto_tree_add_bitmask(tree, tvb, offset,
29922 hf_ieee80211_eht_multi_link_traffic_control,
29923 ett_eht_eht_multi_link_tc,
29924 ml_traffic_control_hdrs,
29925 ENC_LITTLE_ENDIAN0x80000000);
29926 offset += 2;
29927 len -= 2;
29928
29929 /* If there is nothing more, bail. */
29930 if (len <= 0)
29931 return;
29932
29933 /* Now, add the traffic indication list as a byte string for the moment */
29934 proto_tree_add_item(tree, hf_ieee80211_eht_multi_link_traffic_indication,
29935 tvb, offset, tvb_captured_length_remaining(tvb, offset),
29936 ENC_NA0x00000000);
29937}
29938
29939#define MAX_MSDU_SIZE_PRESENT0x0001 0x0001
29940#define SERVICE_START_TIME_PRESENT0x0002 0x0002
29941#define SERVICE_START_TIME_LID_PRESENT0x0004 0x0004
29942#define MEAN_DATA_RATE_PRESENT0x0008 0x0008
29943#define BURST_SIZE_PRESENT0x0010 0x0010
29944#define MSDU_LIFETIME_PRESENT0x0020 0x0020
29945#define MSDU_DELIVERY_INFO_PRESENT0x0040 0x0040
29946#define MEDIUM_TIME_PRESENT0x0080 0x0080
29947
29948static const value_string qos_chars_dirn_vals[] = {
29949 { 0, "Uplink" },
29950 { 1, "Downlink" },
29951 { 2, "Direct link" },
29952 { 3, "Reserved" },
29953 { 0, NULL((void*)0) }
29954};
29955
29956static void
29957dissect_qos_characteristics(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
29958 proto_tree *tree, int offset, int len _U___attribute__((unused)))
29959{
29960 proto_tree *control_tree = NULL((void*)0);
29961 uint16_t presence_bitmap = (tvb_get_letohl(tvb, offset) >> 9) & 0xFFFF;
29962
29963 control_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
29964 ett_eht_qos_characteristics,
29965 NULL((void*)0), "Control Info");
29966
29967 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_dirn, tvb,
29968 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29969 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_tid, tvb,
29970 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29971 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_user_prio, tvb,
29972 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29973 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_bitmap, tvb,
29974 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29975 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_linkid, tvb,
29976 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29977 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_resrvd, tvb,
29978 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29979 offset += 4;
29980
29981 /* Now add the fields, including the optional ones. */
29982 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_min_svc_interval, tvb,
29983 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29984 offset += 4;
29985
29986 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_max_svc_interval, tvb,
29987 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29988 offset += 4;
29989
29990 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_min_data_rate, tvb,
29991 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
29992 offset += 3;
29993
29994 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_delay_bound, tvb,
29995 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
29996 offset += 3;
29997
29998 /* Now the optional ones */
29999 if (presence_bitmap & MAX_MSDU_SIZE_PRESENT0x0001) {
30000 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_max_msdu_size, tvb,
30001 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30002 offset += 2;
30003 }
30004
30005 if (presence_bitmap & SERVICE_START_TIME_PRESENT0x0002) {
30006 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_service_start_time,
30007 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30008 offset += 4;
30009 }
30010
30011 if (presence_bitmap & SERVICE_START_TIME_LID_PRESENT0x0004) {
30012 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_service_start_time_linkid,
30013 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30014 offset += 1;
30015 }
30016
30017 if (presence_bitmap & MEAN_DATA_RATE_PRESENT0x0008) {
30018 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_mean_data_rate, tvb,
30019 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
30020 offset += 3;
30021 }
30022
30023 if (presence_bitmap & BURST_SIZE_PRESENT0x0010) {
30024 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_burst_size, tvb,
30025 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30026 offset += 4;
30027 }
30028
30029 if (presence_bitmap & MSDU_LIFETIME_PRESENT0x0020) {
30030 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_lifetime, tvb,
30031 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30032 offset += 2;
30033 }
30034
30035 if (presence_bitmap & MSDU_DELIVERY_INFO_PRESENT0x0040) {
30036 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_delivery_ratio,
30037 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30038 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_count_exponent,
30039 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30040 offset += 1;
30041 }
30042
30043 if (presence_bitmap & MEDIUM_TIME_PRESENT0x0080) {
30044 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_medium_time, tvb,
30045 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30046 }
30047}
30048
30049static void
30050dissect_akm_suite_selector(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30051 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30052{
30053 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
30054 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
30055 {
30056 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
30057 } else {
30058 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
30059 }
30060}
30061
30062static void
30063dissect_mlo_link_information(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30064 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30065{
30066 proto_tree_add_item(tree, hf_ieee80211_eht_link_id_bitmap, tvb, offset, 2,
30067 ENC_LITTLE_ENDIAN0x80000000);
30068}
30069
30070static int * const ieee80211_eht_aid_bmapctl[] = {
30071 &hf_ieee80211_eht_aid_bitmap_control_reserved,
30072 &hf_ieee80211_eht_aid_bitmap_control_offset,
30073 NULL((void*)0)
30074};
30075
30076static void
30077dissect_aid_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30078 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30079{
30080 unsigned aid, pab_len, n1, i, j, byte;
30081
30082 pab_len = tvb_get_uint8(tvb, offset);
30083 proto_tree_add_item(tree, hf_ieee80211_eht_aid_bitmap_length, tvb, offset, 1,
30084 ENC_LITTLE_ENDIAN0x80000000);
30085 offset += 1;
30086
30087 n1 = tvb_get_uint8(tvb, offset) & 0xFE;
30088 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
30089 hf_ieee80211_eht_aid_bitmap_control,
30090 ett_eht_aid_bmapctl_tree,
30091 ieee80211_eht_aid_bmapctl,
30092 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30093 offset += 1;
30094
30095 proto_tree_add_item(tree, hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap,
30096 tvb, offset, pab_len, ENC_NA0x00000000);
30097 for (i = 0; i < pab_len; i++) {
30098 byte = tvb_get_uint8(tvb, offset + i);
30099 for (j = 0; j < 8; j++) {
30100 if (byte & (1 << j)) {
30101 aid = 8*n1 + 8*i + j;
30102 proto_tree_add_uint(tree, hf_ieee80211_eht_aid_bitmap_aid, tvb,
30103 offset + i, 1, aid);
30104 }
30105 }
30106 }
30107}
30108
30109static int *const eht_bw_indi_param_hdrs[] = {
30110 &hf_ieee80211_eht_bw_indi_param_reserved,
30111 &hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap,
30112 &hf_ieee80211_eht_bw_indi_param_reserved1,
30113 NULL((void*)0)
30114};
30115
30116static void
30117dissect_bandwidth_indication(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30118 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30119{
30120 uint8_t params;
30121
30122 params = tvb_get_uint8(tvb, offset);
30123 proto_tree_add_bitmask(tree, tvb, offset,
30124 hf_ieee80211_eht_bw_indi_param,
30125 ett_eht_bw_indication_param,
30126 eht_bw_indi_param_hdrs,
30127 ENC_NA0x00000000);
30128 offset++;
30129
30130 proto_tree_add_bitmask(tree, tvb, offset,
30131 hf_ieee80211_eht_operation_control,
30132 ett_eht_operation_control,
30133 eht_op_control_hdrs,
30134 ENC_NA0x00000000);
30135 offset++;
30136
30137 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs0, tvb, offset, 1,
30138 ENC_NA0x00000000);
30139 offset++;
30140
30141 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs1, tvb, offset, 1,
30142 ENC_NA0x00000000);
30143 offset++;
30144
30145 if (params & 0x02) { /* Disabled subchannel bitmap present */
30146 proto_item *item;
30147 int8_t i;
30148 char bitmap_binary[32];
30149 uint16_t bitmap = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
30150 item = proto_tree_add_item(tree, hf_ieee80211_eht_bw_indi_diabled_bitmap, tvb,
30151 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30152 memset(bitmap_binary, 0 ,sizeof(bitmap_binary));
30153 for (i = 15; i >= 0; i--) {
30154 if (bitmap & (1 << i))
30155 bitmap_binary[15-i] = '1';
30156 else
30157 bitmap_binary[15-i] = '0';
30158 }
30159 proto_item_append_text(item, " (%s)", bitmap_binary);
30160 }
30161}
30162
30163static int *const eht_nonap_sta_regu_conn_hdrs[] = {
30164 &hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid,
30165 &hf_ieee80211_nonap_sta_regu_conn_indoor_ap,
30166 &hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid,
30167 &hf_ieee80211_nonap_sta_regu_conn_sp_ap,
30168 &hf_ieee80211_nonap_sta_regu_conn_reserved,
30169 NULL((void*)0)
30170};
30171
30172static void
30173dissect_nonap_sta_regulatory_connect(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30174 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30175{
30176 proto_tree_add_bitmask(tree, tvb, offset,
30177 hf_ieee80211_nonap_sta_regulatory_conn,
30178 ett_nonap_sta_regulatory_conn,
30179 eht_nonap_sta_regu_conn_hdrs,
30180 ENC_NA0x00000000);
30181}
30182
30183static void
30184add_min_max_time_between_measurements(proto_item *item, tvbuff_t *tvb, packet_info *pinfo, int offset, int sub_length)
30185{
30186 uint64_t ntb_specific, min, max;
30187
30188 if (sub_length < 6) {
30189 return;
30190 }
30191
30192 ntb_specific = tvb_get_int48(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
30193
30194 min = (ntb_specific >> 1) & GENMASK(22, 0)(((1U << ((22) - (0) + 1)) - 1) << (0));
30195 max = (ntb_specific >> 24) & GENMASK(19, 0)(((1U << ((19) - (0) + 1)) - 1) << (0));
30196
30197 /* convert to microseconds */
30198 min *= 100; /* min time is in units of 100 microseconds */
30199 max *= 10 * 1000; /* max time is in units of 10 milliseconds */
30200
30201 float minf = (float)(min / 1E6);
30202 float maxf = (float)(max / 1E6);
30203
30204 proto_item_append_text(item, " (Min=%.6gs, Max=%.6gs)", minf, maxf);
30205 col_append_fstr(pinfo->cinfo, COL_INFO, ", Min=%.6gs, Max=%.6gs", minf, maxf);
30206}
30207
30208static void
30209dissect_ntb_specific(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int sub_length)
30210{
30211 static int * const nontb_fields[] = {
30212 &hf_ieee80211_tag_ranging_ntb_reserved1,
30213 &hf_ieee80211_tag_ranging_ntb_min_time_msmts,
30214 &hf_ieee80211_tag_ranging_ntb_max_time_msmts,
30215 &hf_ieee80211_tag_ranging_ntb_r2i_tx_power,
30216 &hf_ieee80211_tag_ranging_ntb_i2r_tx_power,
30217 &hf_ieee80211_tag_ranging_ntb_reserved2,
30218 NULL((void*)0)};
30219 proto_tree *item;
30220
30221 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ranging_ntb,
30222 ett_tag_ranging_ntb, nontb_fields,
30223 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30224 col_append_str(pinfo->cinfo, COL_INFO, ", NTB");
30225 add_min_max_time_between_measurements(item, tvb, pinfo, offset, sub_length);
30226}
30227
30228static const range_string ranging_subelt_types[] = {
30229 { 0, 0, "Non-TB specific" },
30230 { 1, 1, "TB-specific" },
30231 { 2, 2, "Secure HE-LTF" },
30232 { 3, 220, "Reserved" },
30233 { 221, 221, "Vendor Specific" },
30234 { 222, 255, "Reserved" },
30235 { 0, 0, NULL((void*)0) }
30236};
30237
30238static int
30239dissect_tb_specific(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
30240 int offset, int sub_length _U___attribute__((unused)))
30241{
30242
30243 /* Now add the extra 32-bits of items */
30244 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_aid_rsid, tvb,
30245 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30246 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_device_class, tvb,
30247 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30248 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo, tvb,
30249 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30250 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_trigger_frame_paddur,
30251 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30252 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_max_sess_exp, tvb,
30253 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30254 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_passive_tb_ranging, tvb,
30255 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30256 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_tb_specific_reserved,
30257 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30258 offset += 4;
30259
30260 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
30261
30262 return offset;
30263}
30264
30265static int * const ranging_subelement_secure_he_ltf_fields[] = {
30266 &hf_ieee80211_tag_ranging_secure_he_ltf_version,
30267 &hf_ieee80211_tag_ranging_secure_he_ltf_req,
30268 &hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window,
30269 &hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window,
30270 &hf_ieee80211_tag_ranging_secure_he_ltf_reserved,
30271 NULL((void*)0)};
30272
30273static void
30274dissect_ranging_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
30275{
30276 int tag_len = tvb_reported_length(tvb);
30277 unsigned subelt = 0;
30278 static int * const ranging_params_fields[] = {
30279 &hf_ieee80211_tag_ranging_status_indication,
30280 &hf_ieee80211_tag_ranging_value,
30281 &hf_ieee80211_tag_ranging_i2r_lmr_feedback,
30282 &hf_ieee80211_tag_ranging_secure_ltf_required,
30283 &hf_ieee80211_tag_ranging_secure_ltf_support,
30284 &hf_ieee80211_tag_ranging_ranging_priority,
30285 &hf_ieee80211_tag_ranging_r2i_toa_type,
30286 &hf_ieee80211_tag_ranging_i2r_toa_type,
30287 &hf_ieee80211_tag_ranging_r2i_aoa_requested,
30288 &hf_ieee80211_tag_ranging_i2r_aoa_requested,
30289 &hf_ieee80211_tag_ranging_format_and_bandwidth,
30290 &hf_ieee80211_tag_ranging_immediate_r2i_feedback,
30291 &hf_ieee80211_tag_ranging_immediate_i2r_feedback,
30292 &hf_ieee80211_tag_ranging_max_i2r_repetition,
30293 &hf_ieee80211_tag_ranging_max_r2i_repetition,
30294 &hf_ieee80211_tag_ranging_reserved1,
30295 &hf_ieee80211_tag_ranging_reserved2,
30296 &hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz,
30297 &hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz,
30298 &hf_ieee80211_tag_ranging_max_r2i_ltf_total,
30299 &hf_ieee80211_tag_ranging_max_i2r_ltf_total,
30300 &hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz,
30301 &hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz,
30302 &hf_ieee80211_tag_ranging_bss_color_info,
30303 NULL((void*)0)};
30304 static const value_string short_status[] = {
30305 { 0, "Reserved" },
30306 { 1, "Successful" },
30307 { 2, "Request incapable" },
30308 { 3, "Request failed" },
30309 { 0, NULL((void*)0) }
30310 };
30311
30312 if (len < 6) {
30313 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
30314 "Ranging Parameters must be at least 6 octets long");
30315 return;
30316 }
30317
30318 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ranging_parameters,
30319 ett_tag_ranging, ranging_params_fields,
30320 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30321 uint8_t status = tvb_get_uint8(tvb, offset) & GENMASK(1, 0)(((1U << ((1) - (0) + 1)) - 1) << (0));
30322 if (status != 0) {
30323 col_append_fstr(pinfo->cinfo, COL_INFO, ", Status=%d (%s)", status,
30324 val_to_str_const(status, short_status, "Unknown"));
30325 }
30326
30327 offset += 7;
30328
30329 while (offset < len) {
30330 uint8_t sub_id, sub_length;
30331 proto_item *sub_elt_len, *rsti;
30332 proto_tree *sub_tree;
30333 unsigned start_offset = offset;
30334
30335 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
30336 ett_ranging_subelement_tree, &rsti,
30337 "Ranging Subelement %d", subelt);
30338
30339
30340 sub_id = tvb_get_uint8(tvb, offset);
30341 proto_item_append_text(sub_tree, ": %s",
30342 rval_to_str_const(sub_id, ranging_subelt_types, "Reserved"));
30343 proto_tree_add_item(sub_tree, hf_ieee80211_tag_ranging_subelt_tag, tvb,
30344 offset, 1, ENC_NA0x00000000);
30345 offset += 1;
30346
30347 sub_length = tvb_get_uint8(tvb, offset);
30348 sub_elt_len = proto_tree_add_item(sub_tree,
30349 hf_ieee80211_tag_ranging_subelt_len,
30350 tvb, offset, 1, ENC_NA0x00000000);
30351 offset += 1;
30352
30353 if (offset + sub_length > tag_len) {
30354 expert_add_info_format(pinfo, sub_elt_len, &ei_ieee80211_tag_length,
30355 "Subelement length (%u) exceeds remaining tag length (%u)",
30356 sub_length, tvb_captured_length_remaining(tvb, offset));
30357 proto_item_set_len(rsti, offset - start_offset);
30358 return;
30359 }
30360
30361 switch (sub_id) {
30362 case 0: /* non-TB specific */
30363 dissect_ntb_specific(tvb, pinfo, tree, offset, sub_length);
30364 break;
30365 case 1: /* Ranging SUB_TB_SPECIFIC */
30366 /* TODO: Specify the acceptable tagged elements */
30367 offset = dissect_tb_specific(tvb, pinfo, tree, offset, sub_length);
30368 break;
30369 case 2: /* Secure HE-LTF */
30370 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset,
30371 hf_ieee80211_tag_ranging_secure_he_ltf,
30372 ett_tag_ranging_secure_he_ltf,
30373 ranging_subelement_secure_he_ltf_fields,
30374 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30375 break;
30376 default: /* skip unknown elements which may be defined in the future */
30377 break;
30378 }
30379
30380 offset += sub_length;
30381 subelt++;
30382 proto_item_set_len(rsti, offset - start_offset);
30383 }
30384}
30385
30386static int * const aoa_results_fields[] = {
30387 &hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth,
30388 &hf_ieee80211_tag_ftm_aoa_results_aoa_elevation,
30389 &hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy,
30390 &hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy,
30391 &hf_ieee80211_tag_ftm_aoa_results_best_awv_id,
30392 &hf_ieee80211_tag_ftm_aoa_results_aoa_reference,
30393 &hf_ieee80211_tag_ftm_aoa_results_reserved,
30394 NULL((void*)0)
30395};
30396
30397static const true_false_string aoa_reference_tfs = {
30398 "Earth coordinates",
30399 "STA-relative coordinated"
30400};
30401
30402static void
30403aoa_azimuth_custom(char *result, uint32_t aoa_azimuth)
30404{
30405 float az = aoa_azimuth * (360.0f / 2048.0f);
30406
30407 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", az);
30408}
30409
30410static void
30411aoa_elevation_custom(char *result, uint32_t aoa_elevation)
30412{
30413 float el = (aoa_elevation - 512) * (180.0f / 1024.0f);
30414
30415 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", el);
30416}
30417
30418static void
30419aoa_accuracy_custom(char *result, uint32_t aoa_accuracy)
30420{
30421 float ac = aoa_accuracy * (360.0f / 1024.0f);
30422
30423 if (aoa_accuracy == 127) {
30424 snprintf(result, ITEM_LABEL_LENGTH240, "No ability to estimate accuracy");
30425 } else if (aoa_accuracy == 126) {
30426 snprintf(result, ITEM_LABEL_LENGTH240, "No measurement");
30427 } else if (aoa_accuracy == 125) {
30428 snprintf(result, ITEM_LABEL_LENGTH240, "Larger than %7.3f", ac);
30429 } else {
30430 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", ac);
30431 }
30432}
30433
30434static void
30435dissect_direction_measurement_results(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30436 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30437{
30438 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
30439 hf_ieee80211_tag_dirn_meas_results_aoa_results,
30440 ett_tag_direct_meas_results,
30441 aoa_results_fields,
30442 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30443}
30444
30445/* ************************************************************************* */
30446/* Dissect and add tagged (optional) fields to proto tree */
30447/* ************************************************************************* */
30448
30449static int
30450ieee80211_tag_ssid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30451{
30452 int tag_len = tvb_reported_length(tvb);
30453 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30454 int offset = 0;
30455 /* 7.3.2.1 SSID element (0) */
30456 char ssid[MAX_SSID_LEN32]; /* The SSID may consist of arbitrary bytes */
30457 int ssid_len;
30458
30459 if (beacon_padding != 0) /* padding bug */
30460 return offset;
30461
30462 if (tag_len > MAX_SSID_LEN32) {
30463 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30464 "SSID length (%u) greater than maximum (%u)",
30465 tag_len, MAX_SSID_LEN32);
30466 }
30467
30468 /*
30469 * XXX - the 802.11 specs aren't particularly clear on how the SSID
30470 * is to be interpreted.
30471 *
30472 * IEEE Std 802.11-1999, section 7.3.2.2 "Service Set Identity (SSID)
30473 * element" says just
30474 *
30475 * The length of the SSID information field is between 0 and 32
30476 * octets. A 0 length information field indicates the broadcast SSID.
30477 *
30478 * with no indication that those octets encode a string.
30479 *
30480 * IEEE Std 802.11-2012, section 8.4.2.2 "SSID element", says that *but*
30481 * says after it
30482 *
30483 * When the UTF-8 SSID subfield of the Extended Capabilities element
30484 * is equal to 1 in the frame that includes the SSID element, the
30485 * SSID is interpreted using UTF-8 encoding.
30486 *
30487 * NOTE -- This is true for Beacon and Probe Response frames when the
30488 * MLME-START.request primitive was issued with the SSIDEncoding
30489 * parameter equal to UTF-8.
30490 *
30491 * and the SSIDEncoding parameter can either be UNSPECIFIED or UTF-8.
30492 *
30493 * IEEE Std 802.11-2020, section 9.4.2.2 "SSID element" changes the
30494 * wording to:
30495 *
30496 * When the UTF-8 SSID subfield of the Extended Capabilities element is
30497 * equal to 1 in the frame that includes the SSID element, or the Extended
30498 * Capabilities of the source of the SSID information is known to include
30499 * the UTF-8 SSID capability based on a previously received Extended
30500 * Capabilities element, the SSID is a sequence of UTF-8 encoded code
30501 * points. Otherwise, the character encoding of the octets in this SSID
30502 * element is unspecified.
30503 *
30504 * NOTE—If the SSID is a sequence of UTF-8 encoded code points, a
30505 * terminating null might or might not be present.
30506 *
30507 * So I *guess* that means that, if the UTF-8 SSID subfield isn't
30508 * equal to 1, the SSID is, in theory, just a bunch of octets, but
30509 * in practice, *probably* UTF-8 as that's the typical convention,
30510 * and, if it is equal to 1, it's a possibly null-terminated UTF-8
30511 * string. (Of course, a host can put anything there it wants to,
30512 * so we shouldn't just assume that it's *valid* ASCII or *valid* UTF-8.)
30513 *
30514 * So we really should extract it as an array of ssid_len bytes,
30515 * pass those bytes to Dot11DecryptSetLastSSID(), and:
30516 *
30517 * If the UTF-8 SSID subfield isn't set to 1, put the SSID in
30518 * a FT_BYTES as BASE_SHOW_UTF_8_PRINTABLE;
30519 *
30520 * If the UTF-8 SSID subfield is set to 1, put it in as an
30521 * ENC_UTF_8 string;
30522 *
30523 * XXX: Note that the Extended Capabilities tagged parameter is specified
30524 * to come *after* the SSID parameter (and "Fields and elements appear
30525 * in the specified, relative order" per 9.3.3.1 of IEEE 802.11 2020),
30526 * isn't sent with Response frames, and isn't guaranteed to appear with
30527 * Request frames (if none of the bits would be set, then it isn't
30528 * mandatory). We could store the bit if it appears in the conversation
30529 * data, which would handle Response frames and subsequent passes, but
30530 * for the first pass we don't know the value of the subfield until later.
30531 * We could store the proto_item with the ssid and add the string version
30532 * later, or add the string always as a hidden item and make it visible
30533 * later, or something else.
30534 *
30535 * Addendum: 802.11 2012 points out that a Zero-length SSID means
30536 * the Wildcard SSID. Make it so. From 8.4.2.2 of 802.11 2012:
30537 *
30538 * "The length of the SSID field is between 0 and 32 octets. A SSID
30539 * field of length 0 is used within Probe Request management frames to
30540 * indicate the wildcard SSID. The wildcard SSID is also used in
30541 * Beacon and Probe Response frames transmitted by mesh STAs."
30542 *
30543 * Also, we have to return a non-zero value here to prevent an ugly
30544 * undissected field warning. Since this code is only called from
30545 * one place and is used in call to dissector_try_uint_with_data, it is
30546 * OK to do so.
30547 */
30548 ssid_len = tvb_get_raw_bytes_as_string(tvb_new_subset_length(tvb, offset, tag_len), offset, ssid, MAX_SSID_LEN32);
30549 if (ssid_len == (int)tag_len) {
30550 Dot11DecryptSetLastSSID(&dot11decrypt_ctx, (char *) ssid, ssid_len);
30551 }
30552 char *s;
30553 /* XXX: 802.11-2020 9.4.2.2 notes that it might or might not include
30554 * a terminating null when the UTF-8 SSID bit is set; if we handle
30555 * that properly and add it as a ENC_UTF_8 FT_STRING, that will work,
30556 * but the FT_BYTES BASE_SHOW_*_PRINTABLE doesn't handle an optional
30557 * terminating null. (Maybe it should?) */
30558 proto_tree_add_item_ret_display_string(tree, hf_ieee80211_tag_ssid, tvb,
30559 offset, tag_len, ENC_NA0x00000000, pinfo->pool, &s);
30560
30561 if (ssid_len > 0) {
30562 proto_item_append_text(field_data->item_tag, ": %s", s);
30563 col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID=%s", s);
30564
30565 /* Wlan Stats */
30566 memcpy(wlan_stats.ssid, ssid, MIN(ssid_len, MAX_SSID_LEN)(((ssid_len) < (32)) ? (ssid_len) : (32)));
30567 wlan_stats.ssid_len = ssid_len;
30568 } else {
30569 proto_item_append_text(field_data->item_tag, ": Wildcard SSID");
30570
30571 col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Wildcard (Broadcast)");
30572 offset += 1; // Make sure we return non-zero
30573 }
30574
30575 beacon_padding += 1; /* padding bug */
30576
30577 return offset + tag_len;
30578}
30579
30580static void
30581dissect_he_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
30582 int offset, int len);
30583
30584static void
30585dissect_he_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
30586 int offset, int len _U___attribute__((unused)));
30587
30588static const value_string phy_type_vals[] = {
30589 { 2, "DSSS 2.4 GHz" },
30590 { 4, "OFDM" },
30591 { 5, "HRDSSS" },
30592 { 6, "ERP" },
30593 { 7, "HT" },
30594 { 8, "DMG" },
30595 { 9, "VHT" },
30596 { 10, "TVHT" },
30597 { 11, "S1G" },
30598 { 12, "CDMG" },
30599 { 13, "CMMG" },
30600 { 14, "HE" },
30601 { 15, "EDMG" },
30602 { 17, "NGV" },
30603 { 18, "EHT" },
30604 { 0, NULL((void*)0) }
30605};
30606
30607static int
30608dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30609{
30610 int tag_len = tvb_reported_length(tvb);
30611 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30612 int offset = 0;
30613 uint8_t sub_tag_id;
30614 uint32_t sub_tag_len;
30615 const char *sub_tag_name;
30616 proto_item *parent_item;
30617 proto_tree *bssid_info_subtree, *bssid_info_cap_subtree, *sub_tag_tree;
30618 tvbuff_t *sub_tag_tvb = NULL((void*)0);
30619
30620 if (tag_len < 13) {
30621 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30622 "Neighbor Report length %u wrong, must be > 13", tag_len);
30623 return tvb_captured_length(tvb);
30624 }
30625
30626 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid, tvb, offset, 6, ENC_NA0x00000000);
30627 offset += 6;
30628
30629 /*** Begin: BSSID Information ***/
30630
30631 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid_info, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30632 bssid_info_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_tree);
30633
30634 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reachability, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30635 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_security, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30636 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_key_scope, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30637 parent_item = proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30638 bssid_info_cap_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_capability_tree);
30639 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30640 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30641 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30642 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30643 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30644 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30645 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30646 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30647 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30648 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_ftm, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30649 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30650 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_er_bss, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30651 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30652 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30653 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30654 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_oct_supported_with_reporting_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30655 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30656 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_eht, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30657 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30658 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30659 offset += 4;
30660
30661 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_ope_class, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30662 offset += 1;
30663
30664 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30665 offset += 1;
30666
30667 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_phy_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30668 offset += 1;
30669
30670 /* The Optional Subelements field format contains zero or more subelements */
30671 if (tag_len == 13){ /* tag_len == 13 => no Subelements */
30672 return tvb_captured_length(tvb);
30673 }
30674
30675 while (offset < tag_len)
30676 {
30677 sub_tag_id = tvb_get_uint8(tvb, offset);
30678 sub_tag_len = tvb_get_uint8(tvb, offset + 1);
30679 sub_tag_name = val_to_str_const(sub_tag_id, ieee80211_neighbor_report_subelement_id_vals, "Unknown");
30680
30681 sub_tag_tree = proto_tree_add_subtree_format(tree, tvb, offset, sub_tag_len + 2, ett_tag_neighbor_report_subelement_tree, NULL((void*)0), "Subelement: %s", sub_tag_name);
30682
30683 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30684 offset += 1;
30685
30686 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30687 offset += 1;
30688
30689 sub_tag_tvb = tvb_new_subset_length(tvb, offset, sub_tag_len);
30690
30691 switch (sub_tag_id) {
30692 case NR_SUB_ID_TSF_INFO1:
30693 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_tsf_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30694 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_beacon_interval, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN0x80000000);
30695 break;
30696 case NR_SUB_ID_MEASUREMENT_PILOT_INFO66:
30697 dissect_measurement_pilot_trans_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30698 break;
30699 case NR_SUB_ID_CON_COU_STR2:
30700 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_country_code, tvb, offset, 2, ENC_ASCII0x00000000);
30701 break;
30702 case NR_SUB_ID_BSS_TRN_CAN_PREF3:
30703 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref, tvb, offset, 1, ENC_NA0x00000000);
30704 break;
30705 case NR_SUB_ID_BSS_TER_DUR4:
30706 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
30707 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_dur, tvb, offset + 8, 2, ENC_LITTLE_ENDIAN0x80000000);
30708 break;
30709 case NR_SUB_ID_HT_CAPABILITIES45:
30710 dissect_ht_capability_ie_common(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len, field_data->item_tag_length, false0);
30711 break;
30712 case NR_SUB_ID_HT_OPERATION61:
30713 dissect_ht_operation_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30714 break;
30715 case NR_SUB_ID_SEC_CHANNEL_OFFSET62:
30716 dissect_secondary_channel_offset_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30717 break;
30718 case NR_SUB_ID_HT_MULTIPLE_BSSID71:
30719 dissect_multiple_bssid_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
30720 break;
30721 case NR_SUB_ID_HE_CAPABILITIES193:
30722 dissect_he_capabilities(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30723 break;
30724 case NR_SUB_ID_HE_OPERATION194:
30725 dissect_he_operation(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30726 break;
30727 case NR_SUB_ID_EHT_CAPABILITIES199:
30728 dissect_eht_capabilities(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30729 break;
30730 case NR_SUB_ID_EHT_OPERATION200:
30731 dissect_eht_operation(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30732 break;
30733 case NR_SUB_ID_BASIC_MULTI_LINK201:
30734 dissect_multi_link(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
30735 break;
30736 case NR_SUB_ID_VENDOR_SPECIFIC221:
30737 default:
30738 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_data, tvb, offset, sub_tag_len, ENC_NA0x00000000);
30739 break;
30740 }
30741
30742 offset += sub_tag_len;
30743 }
30744
30745 return offset;
30746}
30747
30748static int
30749ieee80211_tag_supp_rates(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30750{
30751 int tag_len = tvb_reported_length(tvb);
30752 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30753 int offset = 0;
30754 /* 7.3.2.2 Supported Rates element (1) */
30755 if (tag_len < 1) {
30756 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30757 "Tag length %u too short, must be greater than 0",
30758 tag_len);
30759 return offset;
30760 }
30761
30762 while (offset < tag_len) {
30763 proto_tree_add_item(tree, hf_ieee80211_tag_supp_rates, tvb, offset, 1,
30764 ENC_LITTLE_ENDIAN0x80000000);
30765 proto_item_append_text(field_data->item_tag, " %s,",
30766 val_to_str_ext_const(tvb_get_uint8(tvb, offset),
30767 &ieee80211_supported_rates_vals_ext,
30768 "Unknown Rate"));
30769 offset += 1;
30770 }
30771
30772 proto_item_append_text(field_data->item_tag, " [Mbit/sec]");
30773
30774 return offset;
30775}
30776
30777static int
30778ieee80211_tag_fh_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30779{
30780 int tag_len = tvb_reported_length(tvb);
30781 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30782 int offset = 0;
30783 /* 7.3.2.3 FH Parameter Set element (2) */
30784 if (tag_len < 5) {
30785 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30786 "Tag length %u too short, must be >= 5", tag_len);
30787 return 1;
30788 }
30789
30790 proto_tree_add_item(tree, hf_ieee80211_tag_fh_dwell_time,
30791 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30792 offset += 2;
30793
30794 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_set,
30795 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30796 offset += 1;
30797
30798 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_pattern,
30799 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30800 offset += 1;
30801
30802 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_index,
30803 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30804 offset += 1;
30805
30806 return offset;
30807}
30808
30809static int
30810ieee80211_tag_ds_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30811{
30812 int tag_len = tvb_reported_length(tvb);
30813 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30814 int offset = 0;
30815 /* 7.3.2.4 DS Parameter Set element (3) */
30816 if (tag_len != 1) {
30817 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30818 "Tag length %u wrong, must be = 1", tag_len);
30819 return 1;
30820 }
30821
30822 proto_tree_add_item(tree, hf_ieee80211_tag_ds_param_channel,
30823 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30824
30825 proto_item_append_text(field_data->item_tag, ": Current Channel: %u",
30826 tvb_get_uint8(tvb, offset));
30827
30828 wlan_stats.channel = tvb_get_uint8(tvb, offset);
30829 offset += 1;
30830
30831 return offset;
30832}
30833
30834static int
30835ieee80211_tag_cf_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30836{
30837 int tag_len = tvb_reported_length(tvb);
30838 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30839 int offset = 0;
30840 /* 7.3.2.5 CF Parameter Set element (4) */
30841 if (tag_len != 6) {
30842 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30843 "Tag length %u wrong, must be = 6", tag_len);
30844 return offset;
30845 }
30846
30847 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_count,
30848 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30849 proto_item_append_text(field_data->item_tag, ": CFP count %u", tvb_get_uint8(tvb, offset));
30850 offset += 1;
30851
30852 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_period,
30853 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30854 proto_item_append_text(field_data->item_tag, ": CFP Period %u", tvb_get_uint8(tvb, offset));
30855 offset += 1;
30856
30857 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_max_duration,
30858 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30859 proto_item_append_text(field_data->item_tag, ": CFP Max Duration %u",
30860 tvb_get_letohs(tvb, offset));
30861 offset += 2;
30862
30863 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_dur_remaining,
30864 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30865 proto_item_append_text(field_data->item_tag, ": CFP Dur Remaining %u",
30866 tvb_get_letohs(tvb, offset));
30867 offset += 1;
30868
30869 return offset;
30870}
30871
30872static int
30873dissect_pvb_encoded_block_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30874 proto_tree *tree, int offset,
30875 bool_Bool inverse_bm _U___attribute__((unused)),
30876 uint8_t block_offset _U___attribute__((unused)),
30877 uint8_t page_index _U___attribute__((unused)))
30878{
30879 uint8_t block_bitmap = tvb_get_uint8(tvb, offset);
30880 proto_tree *bb_tree;
30881 proto_item *bbi;
30882 proto_item *bb;
30883 int start_offset = offset;
30884 uint8_t subblock = 0;
30885
30886 /*
30887 * Walk the block bitmap to figure out how many subblocks there are an
30888 * handle each of them.
30889 */
30890 bb_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
30891 ett_s1g_pvb_block_bitmap_tree, &bbi,
30892 "Block Bitmap");
30893
30894 bb = proto_tree_add_item(bb_tree, hf_ieee80211_s1g_block_bitmap, tvb, offset,
30895 1, ENC_NA0x00000000);
30896 offset += 1;
30897
30898 while (block_bitmap) {
30899 bool_Bool subblock_present = block_bitmap & 0x01;
30900 proto_tree *sb_tree;
30901 uint8_t bit_pos = 0;
30902
30903 if (subblock_present) {
30904 uint8_t subblock_val = tvb_get_uint8(tvb, offset);
30905
30906 sb_tree = proto_tree_add_subtree_format(bb_tree, tvb, offset, 1,
30907 ett_s1g_pvb_subblock_tree, NULL((void*)0),
30908 "Subblock %u", subblock);
30909 while (subblock_val) {
30910
30911 if (subblock_val & 0x01) {
30912 proto_item_append_text(bb, ", Subblock %d present", bit_pos);
30913 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
30914 (subblock << 3) | bit_pos;
30915 proto_tree_add_uint_bits_format_value(sb_tree,
30916 hf_ieee80211_s1g_block_bitmap_sta_aid13,
30917 tvb, offset * 8 + (7 - bit_pos), 1, 1,
30918 ENC_BIG_ENDIAN0x00000000, " 0x%0x", aid13);
30919 }
30920
30921 bit_pos += 1;
30922 subblock_val = subblock_val >> 1;
30923 }
30924
30925 offset += 1;
30926 }
30927
30928 block_bitmap = block_bitmap >> 1;
30929 subblock += 1;
30930 }
30931
30932 proto_item_set_len(bbi, offset - start_offset);
30933 return offset;
30934}
30935
30936static int
30937dissect_pvb_encoded_single_aid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30938 proto_tree *tree, int offset,
30939 bool_Bool inverse_bm _U___attribute__((unused)),
30940 uint8_t block_offset,
30941 uint8_t page_index)
30942{
30943 uint8_t single_aid = tvb_get_uint8(tvb, offset);
30944 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
30945 (single_aid & 0x3F);
30946
30947 proto_tree_add_uint_format(tree, hf_ieee80211_s1g_block_bitmap_single_aid,
30948 tvb, offset, 1, single_aid,
30949 "Single AID13: 0x%0x", aid13);
30950 offset += 1;
30951
30952 return offset;
30953}
30954
30955static int
30956dissect_pvb_encoded_olb(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30957 proto_tree *tree, int offset,
30958 bool_Bool inverse_bm _U___attribute__((unused)),
30959 uint8_t block_offset _U___attribute__((unused)),
30960 uint8_t page_index _U___attribute__((unused)))
30961{
30962 uint8_t length = tvb_get_uint8(tvb, offset);
30963 proto_tree *olb_tree;
30964 int k;
30965
30966 olb_tree = proto_tree_add_subtree(tree, tvb, offset, length + 1,
30967 ett_s1g_pvb_olb_tree, NULL((void*)0),
30968 "OLB Mode");
30969
30970 proto_tree_add_item(olb_tree, hf_ieee80211_s1g_block_bitmap_olb_length,
30971 tvb, offset, 1, ENC_NA0x00000000);
30972 offset += 1;
30973
30974 for (k = 0; k < length; k++) {
30975 uint8_t subblock_val = tvb_get_uint8(tvb, offset);
30976 proto_tree *sb_tree;
30977 uint8_t bit_pos = 0;
30978
30979 sb_tree = proto_tree_add_subtree_format(olb_tree, tvb, offset, 1,
30980 ett_s1g_pvb_olb_subblock, NULL((void*)0),
30981 "Subblock %u", k);
30982 while (subblock_val) {
30983
30984 if (subblock_val & 0x01) {
30985 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
30986 (k << 3) | bit_pos;
30987 proto_tree_add_uint_bits_format_value(sb_tree,
30988 hf_ieee80211_s1g_block_bitmap_sta_aid13,
30989 tvb, offset * 8 + (7 - bit_pos), 1, 1,
30990 ENC_BIG_ENDIAN0x00000000, " 0x%0x", aid13);
30991 }
30992
30993 bit_pos += 1;
30994 subblock_val = subblock_val >> 1;
30995 }
30996
30997 offset += 1;
30998 }
30999
31000 offset += length;
31001
31002 return offset;
31003}
31004
31005static int
31006dissect_pvb_encoded_ade(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31007 proto_tree *tree, int offset,
31008 bool_Bool inverse_bm _U___attribute__((unused)),
31009 uint8_t block_offset _U___attribute__((unused)),
31010 uint8_t page_index _U___attribute__((unused)))
31011{
31012 uint8_t ade_control = tvb_get_uint8(tvb, offset);
31013 uint8_t ewl = (ade_control & 0x03) + 1;
31014 uint8_t ade_bytes = ade_control >> 3;
31015 proto_tree *ade_tree;
31016 proto_item *cntl_item;
31017 proto_tree *cntl_tree;
31018
31019 ade_tree = proto_tree_add_subtree(tree, tvb, offset, ade_bytes + 1,
31020 ett_s1g_pvb_ade_tree, NULL((void*)0),
31021 "ADE Mode");
31022
31023 cntl_item = proto_tree_add_item(ade_tree, hf_ieee80211_s1g_block_bitmap_ade,
31024 tvb, offset, 1, ENC_NA0x00000000);
31025
31026 cntl_tree = proto_item_add_subtree(cntl_item, ett_s1g_pvb_ade_control);
31027
31028 proto_tree_add_uint_bits_format_value(cntl_tree,
31029 hf_ieee80211_s1g_block_bitmap_ewl,
31030 tvb, offset *8, 3, ewl,
31031 ENC_BIG_ENDIAN0x00000000, "EWL: %u", ewl);
31032 proto_tree_add_uint_bits_format_value(cntl_tree,
31033 hf_ieee80211_s1g_block_bitmap_len,
31034 tvb, offset * 8 + 3, 5, ade_bytes,
31035 ENC_BIG_ENDIAN0x00000000, "Length: %u", ade_bytes);
31036 offset += 1;
31037
31038 /* TODO: Add each subblock */
31039 proto_tree_add_item(ade_tree, hf_ieee80211_s1g_block_bitmap_ade_bytes, tvb,
31040 offset, ade_bytes, ENC_NA0x00000000);
31041
31042 offset += ade_bytes;
31043
31044 return offset;
31045}
31046
31047static int * const s1g_pvb_encoded_block_control[] = {
31048 &hf_ieee80211_s1g_pvb_encoding_mode,
31049 &hf_ieee80211_s1g_pvb_inverse_bitmap,
31050 &hf_ieee80211_s1g_pvb_block_offset,
31051 NULL((void*)0)
31052};
31053
31054#define PVB_BLOCK_BITMAP0x0 0x0
31055#define PVB_SINGLE_AID0x1 0x1
31056#define PVB_OLB0x2 0x2
31057#define PVB_ADE0x3 0x3
31058
31059static const value_string s1g_block_control_encoding_mode_vals[] = {
31060 { 0, "Block Bitmap" },
31061 { 1, "Single AID" },
31062 { 2, "OLB" },
31063 { 3, "ADE" },
31064 { 0, NULL((void*)0) }
31065};
31066
31067static int
31068dissect_pvb_encoded_block(tvbuff_t *tvb, packet_info *pinfo,
31069 proto_tree *tree, int offset, int idx,
31070 uint8_t page_index)
31071{
31072 uint8_t block_control = tvb_get_uint8(tvb, offset);
31073 uint8_t enc_mode = block_control & 0x03;
31074 uint8_t inverse_bm = (enc_mode >> 2) & 0x01;
31075 uint8_t block_offset = block_control >> 3;
31076 proto_tree *eb_tree;
31077 proto_item *ebti;
31078
31079 eb_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
31080 ett_s1g_pvb_eb_tree, &ebti,
31081 "Encoded Block %d", idx);
31082
31083 proto_tree_add_bitmask_with_flags(eb_tree, tvb, offset,
31084 hf_ieee80211_s1g_pvb_block_control_byte,
31085 ett_s1g_pvb_block_control_byte,
31086 s1g_pvb_encoded_block_control,
31087 ENC_NA0x00000000, BMT_NO_APPEND0x01);
31088 offset += 1;
31089
31090 /*
31091 * If there are no bytes, add an EI and get out of here
31092 */
31093 switch (enc_mode) {
31094 case PVB_BLOCK_BITMAP0x0:
31095 offset = dissect_pvb_encoded_block_bitmap(tvb, pinfo, eb_tree, offset,
31096 inverse_bm, block_offset,
31097 page_index);
31098 break;
31099 case PVB_SINGLE_AID0x1:
31100 offset = dissect_pvb_encoded_single_aid(tvb, pinfo, eb_tree, offset,
31101 inverse_bm, block_offset,
31102 page_index);
31103 break;
31104 case PVB_OLB0x2:
31105 offset = dissect_pvb_encoded_olb(tvb, pinfo, eb_tree, offset,
31106 inverse_bm, block_offset, page_index);
31107 break;
31108 case PVB_ADE0x3:
31109 offset = dissect_pvb_encoded_ade(tvb, pinfo, eb_tree, offset, inverse_bm,
31110 block_offset, page_index);
31111 break;
31112 }
31113
31114 return offset;
31115}
31116
31117static int
31118dissect_partial_virtual_bitmap(tvbuff_t *tvb, packet_info *pinfo,
31119 proto_tree *tree, int offset, int pvb_len,
31120 uint8_t page_index)
31121{
31122 proto_tree *pvb_tree;
31123 int idx = 0;
31124
31125 pvb_tree = proto_tree_add_subtree(tree, tvb, offset, pvb_len,
31126 ett_s1g_pvb_tree, NULL((void*)0),
31127 "Partial Virtual Bitmap");
31128
31129 while (tvb_reported_length_remaining(tvb, offset) > 0) {
31130 offset = dissect_pvb_encoded_block(tvb, pinfo, pvb_tree, offset, idx,
31131 page_index);
31132 idx++;
31133 }
31134
31135 return offset;
31136}
31137
31138static int
31139ieee80211_tag_tim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31140{
31141 int tag_len = tvb_reported_length(tvb);
31142 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31143 int offset = 0;
31144 unsigned aid, pvb_len, n1, i, j, byte;
31145 bool_Bool is_s1g = sta_is_s1g(pinfo);
31146 static int * const ieee80211_tim_bmapctl[] = {
31147 &hf_ieee80211_tim_bmapctl_mcast,
31148 &hf_ieee80211_tim_bmapctl_offset,
31149 NULL((void*)0)
31150 };
31151 static int * const ieee80211_s1g_bmapctl[] = {
31152 &hf_ieee80211_s1g_tim_bmapctl_traffic_indicator,
31153 &hf_ieee80211_s1g_tim_page_slice_number,
31154 &hf_ieee80211_s1g_tim_page_index,
31155 NULL((void*)0)
31156 };
31157
31158 /*
31159 * 802.11-2012: 8.4.2.7 TIM element (5), however, if this is an S1G frame
31160 * then it is different. S1G TIM elements can be 2, 3, or longer bytes.
31161 */
31162 if (is_s1g) {
31163 if (tag_len < 2) {
31164 expert_add_info_format(pinfo, field_data->item_tag_length,
31165 &ei_ieee80211_tag_length,
31166 "Tag length %u too short for S1G frame, must be >= 3",
31167 tag_len);
31168 return tag_len;
31169 }
31170 } else {
31171 if (tag_len < 4) {
31172 expert_add_info_format(pinfo, field_data->item_tag_length,
31173 &ei_ieee80211_tag_length,
31174 "Tag length %u too short for Non-S1G frame, must be >= 4",
31175 tag_len);
31176 return tag_len;
31177 }
31178 }
31179
31180 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_count,
31181 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31182 proto_item_append_text(field_data->item_tag, ": DTIM %u of",
31183 tvb_get_uint8(tvb, offset));
31184 offset += 1;
31185
31186 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_period,
31187 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31188 proto_item_append_text(field_data->item_tag, " %u bitmap",
31189 tvb_get_uint8(tvb, offset));
31190 offset += 1;
31191
31192 if (offset >= tag_len)
31193 return offset;
31194
31195 if (is_s1g) {
31196 unsigned bitmap_len = 0;
31197
31198 if (tag_len >= 3) {
31199 uint8_t page_index = tvb_get_uint8(tvb, offset) >> 6;
31200
31201 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
31202 hf_ieee80211_s1g_tim_bmapctrl,
31203 ett_tag_bmapctl_tree,
31204 ieee80211_s1g_bmapctl,
31205 ENC_NA0x00000000, BMT_NO_APPEND0x01);
31206 offset += 1;
31207 bitmap_len = tvb_reported_length_remaining(tvb, offset);
31208 if (bitmap_len > 0) {
31209 offset = dissect_partial_virtual_bitmap(tvb, pinfo, tree, offset,
31210 bitmap_len, page_index);
31211 }
31212 }
31213 } else {
31214 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
31215 hf_ieee80211_tim_bmapctl,
31216 ett_tag_bmapctl_tree,
31217 ieee80211_tim_bmapctl,
31218 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
31219 pvb_len = tag_len - 3;
31220 n1 = tvb_get_uint8(tvb, offset) & 0xFE;
31221 offset += 1;
31222 proto_tree_add_item(tree, hf_ieee80211_tim_partial_virtual_bitmap,
31223 tvb, offset, pvb_len, ENC_NA0x00000000);
31224 /* FIXME: Handles dot11MgmtOptionMultiBSSIDActivated = false only */
31225 for (i = 0; i < pvb_len; i++) {
31226 byte = tvb_get_uint8(tvb, offset + i);
31227 for (j = 0; j < 8; j++) {
31228 if (byte & (1 << j)) {
31229 aid = 8*n1 + 8*i + j;
31230 proto_tree_add_uint(tree, hf_ieee80211_tim_aid, tvb, offset + i,
31231 1, aid);
31232 }
31233 }
31234 }
31235 offset += pvb_len;
31236 }
31237
31238 return offset;
31239}
31240
31241static int
31242ieee80211_tag_ibss_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31243{
31244 int tag_len = tvb_reported_length(tvb);
31245 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31246 int offset = 0;
31247 /* 7.3.2.7 IBSS Parameter Set element (6) */
31248
31249 if (tag_len != 2) {
31250 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31251 "Tag length %u wrong, must be = 2", tag_len);
31252 return 1;
31253 }
31254
31255 proto_tree_add_item(tree, hf_ieee80211_tag_ibss_atim_window,
31256 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31257 proto_item_append_text(field_data->item_tag, ": ATIM window 0x%x",
31258 tvb_get_letohs(tvb, offset));
31259 offset += 2;
31260
31261 return offset;
31262}
31263
31264/* IEEE 802.11-2020, C.3 MIB detail, dot11CountryString */
31265static const value_string environment_vals[] = {
31266 { 0x1, "Operating classes in the United States" }, /* Table E-1 */
31267 { 0x2, "Operating classes in Europe" }, /* Table E-2 */
31268 { 0x3, "Operating classes in Japan" }, /* Table E-3 */
31269 { 0x4, "Global operating classes" }, /* Table E-4 */
31270 { 0x5, "S1G operating classes" }, /* Table E-5 */
31271 { 0x6, "Operating classes in China" }, /* Table E-6 */
31272 { ' ', "All" }, /* All environments for this band */
31273 { 'I', "Indoor" },
31274 { 'O', "Outdoor" },
31275 { 'X', "Non Country Entity" },
31276 { 0, NULL((void*)0) }
31277};
31278
31279static int
31280ieee80211_tag_country_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31281{
31282 int tag_len = tvb_reported_length(tvb);
31283 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31284 int offset = 0;
31285 /* 7.3.2.9 Country information element (7) */
31286 proto_tree *sub_tree;
31287 proto_item *sub_item;
31288 const uint8_t* country_code;
31289
31290 if (tag_len < 6) {
31291 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31292 "Tag length %u too short, must be >= 6", tag_len);
31293 return 1;
31294 }
31295
31296 /* FIXME: If environment is 'X', the only allowed CC is "XX" */
31297 proto_tree_add_item_ret_string(tree, hf_ieee80211_tag_country_info_code,
31298 tvb, offset, 2, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &country_code);
31299 proto_item_append_text(field_data->item_tag, ": Country Code %s", country_code);
31300 offset += 2;
31301
31302 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
31303 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31304 proto_item_append_text(field_data->item_tag, ", Environment %s",
31305 val_to_str(pinfo->pool, tvb_get_uint8(tvb, offset),
31306 environment_vals, "0x%02x"));
31307 offset += 1;
31308
31309 while (offset < tag_len) {
31310 /* Padding ? */
31311 if ((tag_len - offset) < 3) {
31312 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_pad,
31313 tvb, offset, 1, ENC_NA0x00000000);
31314 offset += 1;
31315 continue;
31316 }
31317 if (tvb_get_uint8(tvb, offset) <= 200) { /* 802.11d */
31318 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_fnm,
31319 tvb, offset, 3, ENC_NA0x00000000);
31320 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_fnm_tree);
31321
31322 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_fcn,
31323 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31324 proto_item_append_text(sub_item, ": First Channel Number: %u",
31325 tvb_get_uint8(tvb, offset));
31326 offset += 1;
31327 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_nc,
31328 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31329 proto_item_append_text(sub_item, ", Number of Channels: %u",
31330 tvb_get_uint8(tvb, offset));
31331 offset += 1;
31332 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_mtpl,
31333 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31334 proto_item_append_text(sub_item,
31335 ", Maximum Transmit Power Level: %d dBm",
31336 tvb_get_uint8(tvb, offset));
31337 offset += 1;
31338 } else { /* 802.11j */
31339 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_rrc,
31340 tvb, offset, 3, ENC_NA0x00000000);
31341 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_rcc_tree);
31342
31343 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oei,
31344 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31345 proto_item_append_text(sub_item,
31346 ": Operating Extension Identifier: %u",
31347 tvb_get_uint8(tvb, offset));
31348 offset += 1;
31349 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oc,
31350 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31351 proto_item_append_text(sub_item, ", Operating Class: %u",
31352 tvb_get_uint8(tvb, offset));
31353 offset += 1;
31354 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_cc,
31355 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31356 proto_item_append_text(sub_item, ", Coverage Class: %u",
31357 tvb_get_uint8(tvb, offset));
31358 offset += 1;
31359 }
31360 }
31361
31362 return offset;
31363}
31364
31365static int
31366ieee80211_tag_fh_hopping_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31367{
31368 int tag_len = tvb_reported_length(tvb);
31369 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31370 int offset = 0;
31371
31372 /* 7.3.2.10 Hopping Pattern Parameters information element (8) */
31373 if (tag_len < 2) {
31374 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31375 "Tag length %u too short, must be >= 2", tag_len);
31376 return 1;
31377 }
31378
31379 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
31380 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31381 proto_item_append_text(field_data->item_tag, ": Prime Radix: %u", tvb_get_uint8(tvb, offset));
31382 offset += 1;
31383
31384 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
31385 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31386 proto_item_append_text(field_data->item_tag, ", Number of Channels: %u",
31387 tvb_get_uint8(tvb, offset));
31388 offset += 1;
31389
31390 return offset;
31391}
31392
31393static int
31394ieee80211_tag_fh_hopping_table(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31395{
31396 int tag_len = tvb_reported_length(tvb);
31397 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31398 int offset = 0;
31399
31400 /* 7.3.2.11 Hopping Pattern Table information element (9) */
31401 if (tag_len < 4) {
31402 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31403 "Tag length %u too short, must be >= 4", tag_len);
31404 return 1;
31405 }
31406
31407 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_flag,
31408 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31409 offset += 1;
31410
31411 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_number_of_sets,
31412 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31413 offset += 1;
31414
31415 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_modulus,
31416 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31417 offset += 1;
31418
31419 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_offset,
31420 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31421 offset += 1;
31422
31423 while (offset < tag_len) {
31424 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_random_table,
31425 tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
31426 offset += 2;
31427 }
31428
31429 return offset;
31430}
31431
31432int
31433add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
31434 const uint8_t *valid_element_ids, unsigned valid_element_ids_count,
31435 association_sanity_check_t *association_sanity_check)
31436{
31437 return add_tagged_field_with_validation(pinfo, tree, tvb, offset, ftype, valid_element_ids,
31438 valid_element_ids_count, false0, NULL((void*)0), 0, false0, association_sanity_check);
31439}
31440
31441/*
31442 * Build a composite TVB from the current TVB and the next ones that are
31443 * fragment elements.
31444 *
31445 * We also add the fragments to the tree. And add an expert info if there are
31446 * problems.
31447 *
31448 * When called we know we have two fragments, at least.
31449 */
31450static tvbuff_t *
31451build_defrag_tvb(packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)), tvbuff_t *tvb,
31452 int offset, uint32_t *tag_len, uint32_t *tag_overhead)
31453{
31454 tvbuff_t *new_tvb = tvb_new_composite();
31455 tvbuff_t *tmp_tvb = NULL((void*)0);
31456 uint32_t new_len = 0, overhead = 0;
31457 uint8_t frag_len = 0;
31458
31459 /*
31460 * We come in here pointing to the first fragment and on each iteration
31461 * We are pointing to the next fragment
31462 */
31463 do {
31464 offset += 1;
31465 frag_len = tvb_get_uint8(tvb, offset);
31466 offset += 1;
31467 tmp_tvb = tvb_new_subset_length(tvb, offset, frag_len);
31468 /* Insert this fragment ... */
31469 tvb_composite_append(new_tvb, tmp_tvb);
31470 new_len += frag_len;
31471 offset += frag_len;
31472 overhead += 2;
31473 } while (frag_len == 255 &&
31474 tvb_captured_length_remaining(tvb, offset) > 2 &&
31475 tvb_get_uint8(tvb, offset) == TAG_FRAGMENT242);
31476
31477 *tag_len = new_len;
31478 *tag_overhead = overhead;
31479 tvb_composite_finalize(new_tvb);
31480
31481 return new_tvb;
31482}
31483
31484int
31485add_tagged_field_with_validation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
31486 const uint8_t *element_ids, unsigned element_ids_count, bool_Bool element_ids_assume_invalid,
31487 const uint8_t *ext_element_ids, unsigned ext_element_ids_count, bool_Bool ext_element_ids_assume_invalid,
31488 association_sanity_check_t *association_sanity_check)
31489{
31490 tvbuff_t *tag_tvb;
31491 uint32_t tag_no, tag_len, tag_overhead;
31492 uint32_t ext_tag_no = 0;
31493 proto_tree *orig_tree = tree;
31494 proto_item *ti = NULL((void*)0);
31495 proto_item *ti_len, *ti_tag;
31496 bool_Bool isDMG;
31497
31498 isDMG = GPOINTER_TO_INT(p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY))((gint) (glong) (p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan
, IS_DMG_KEY)))
;
31499
31500 tag_no = tvb_get_uint8(tvb, offset);
31501 tag_len = tvb_get_uint8(tvb, offset + 1);
31502 save_tag_for_dot11decrypt(tvb, pinfo, offset);
31503
31504 /*
31505 * If we have element fragmentation, construct a composite TVB with the
31506 * fragments. Rules are:
31507 * 1. Must be in the one MMPDU (so cannot exceed the TVB we are given.)
31508 * 2. If the next element is a fragment, this one must have a length of 255.
31509 * 3. We don't care about extensions here.
31510 * 4. The fragment element has an id of 254.
31511 */
31512 if (tag_len == 255 &&
31513 tvb_captured_length_remaining(tvb, offset) > (255 + 2) &&
31514 tvb_get_uint8(tvb, offset + 255 + 2) == TAG_FRAGMENT242) {
31515 tag_tvb = build_defrag_tvb(pinfo, tree, tvb, offset, &tag_len,
31516 &tag_overhead);
31517 add_new_data_source(pinfo, tag_tvb, "Reassembled IE");
31518 } else {
31519 tag_tvb = tvb_new_subset_length(tvb, offset+2, tag_len);
31520 tag_overhead = 2;
31521 }
31522
31523 if (tree) {
31524 if (tag_no == TAG_ELEMENT_ID_EXTENSION255) {
31525 ext_tag_no = tvb_get_uint8(tvb, offset + 2);
31526 ti = proto_tree_add_item(orig_tree, hf_ieee80211_ext_tag, tvb, offset + 2, tag_len + tag_overhead - 2, ENC_NA0x00000000);
31527 proto_item_append_text(ti, ": %s", val_to_str_ext(pinfo->pool, ext_tag_no, &tag_num_vals_eid_ext_ext, "Unknown (%d)"));
31528 } else {
31529 ti = proto_tree_add_item(orig_tree, hf_ieee80211_tag, tvb, offset, 2 + tag_len + tag_overhead - 2, ENC_NA0x00000000);
31530 proto_item_append_text(ti, ": %s", val_to_str_ext(pinfo->pool, tag_no, &tag_num_vals_ext, "Unknown (%d)"));
31531 }
31532
31533 tree = proto_item_add_subtree(ti, ett_80211_mgt_ie);
31534
31535 }
31536
31537 if (tag_no == TAG_ELEMENT_ID_EXTENSION255) {
31538 ti_len = proto_tree_add_uint(tree, hf_ieee80211_ext_tag_length, tvb, offset + 1, 1, tag_len - 1);
31539 ti_tag = proto_tree_add_item(tree, hf_ieee80211_ext_tag_number, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31540 proto_item_append_text(ti_len, " (Tag len: %u)", tag_len);
31541 } else {
31542 ti_tag = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31543 ti_len = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
31544 }
31545 if (tag_len > (unsigned)tvb_reported_length_remaining(tvb, offset)) {
31546 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
31547 "Tag Length is longer than remaining payload");
31548 }
31549
31550 /* If the list enumerates valid element IDs, require the Element ID to be
31551 * present in that list, otherwise, if the list enumerates invalid element IDs,
31552 * check the Element ID is not in the list. If either check fails, stop decoding
31553 * the value to prevent possible infinite recursions due to unexpected elements. */
31554 if (element_ids_count) {
31555 bool_Bool current_tag_no = false0;
31556 unsigned i;
31557
31558 for (i = 0; i < element_ids_count; i++) {
31559 current_tag_no = element_ids[i] == tag_no;
31560 if (current_tag_no)
31561 break;
31562 }
31563
31564 if ((!current_tag_no && !element_ids_assume_invalid && !(ext_tag_no && ext_element_ids_count)) ||
31565 (current_tag_no && element_ids_assume_invalid)) {
31566 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
31567 "Unexpected Element ID %d", tag_no);
31568 return tag_len + 1 + 1;
31569 }
31570 }
31571
31572 /* Same as above, but for Extended Element IDs */
31573 if (ext_tag_no && ext_element_ids_count) {
31574 bool_Bool current_ext_tag_no = false0;
31575 unsigned i;
31576
31577 for (i = 0; i < ext_element_ids_count; i++) {
31578 current_ext_tag_no = ext_element_ids[i] == ext_tag_no;
31579 if (current_ext_tag_no)
31580 break;
31581 }
31582
31583 if ((!current_ext_tag_no && !ext_element_ids_assume_invalid) ||
31584 (current_ext_tag_no && ext_element_ids_assume_invalid)) {
31585 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
31586 "Unexpected Extended Element ID %d", ext_tag_no);
31587 return tag_len + tag_overhead;
31588 }
31589 }
31590
31591 ieee80211_tagged_field_data_t field_data = {
31592 .ftype = ftype,
31593 .sanity_check = association_sanity_check,
31594 .isDMG = isDMG,
31595 .item_tag = ti,
31596 .item_tag_length = ti_len
31597 };
31598 if (!dissector_try_uint_with_data(tagged_field_table, tag_no, tag_tvb, pinfo, tree, false0, &field_data))
31599 {
31600 proto_tree_add_item(tree, hf_ieee80211_tag_data, tvb, offset + 2, tag_len, ENC_NA0x00000000);
31601 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_data,
31602 "Dissector for 802.11 IE Tag"
31603 " (%s) code not implemented, Contact"
31604 " Wireshark developers if you want this supported", val_to_str_ext(pinfo->pool, tag_no,
31605 &tag_num_vals_ext, "(%d)"));
31606 proto_item_append_text(ti, ": Undecoded");
31607 }
31608
31609 return tag_len + tag_overhead;
31610}
31611
31612/* 7.3.2.12 Request information element (10) */
31613static int
31614ieee80211_tag_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
31615{
31616 int tag_len = tvb_reported_length(tvb);
31617 int offset = 0;
31618
31619 while (offset < tag_len)
31620 {
31621 proto_tree_add_item(tree, hf_ieee80211_tag_request, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31622 offset += 1;
31623 }
31624 return ((tag_len > 0) ? tag_len : 1);
31625}
31626
31627/* 7.3.2.28 BSS Load element (11) */
31628/* 8.4.2.30 in 802.11-2012 */
31629static int
31630ieee80211_tag_qbss_load(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31631{
31632 int tag_len = tvb_reported_length(tvb);
31633 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31634 int offset = 0;
31635
31636 if ((tag_len < 4) || (tag_len > 5))
31637 {
31638 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);
31639 return tvb_captured_length(tvb);
31640 }
31641
31642 if (tag_len == 4)
31643 {
31644 /* QBSS Version 1 */
31645 proto_item_append_text(field_data->item_tag, " Cisco QBSS Version 1 - non CCA");
31646
31647 /* Extract Values */
31648 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset, tag_len, 1);
31649 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31650 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31651 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
31652 }
31653 else if (tag_len == 5)
31654 {
31655 proto_item *base_item;
31656
31657 /* QBSS Version 2 */
31658 proto_item_append_text(field_data->item_tag, " 802.11e CCA Version");
31659
31660 /* Extract Values */
31661 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset, tag_len, 2);
31662 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31663 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31664 proto_item_append_text(base_item, " (%d%%)", 100*tvb_get_uint8(tvb, offset + 2)/255);
31665 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 3, 2, ENC_LITTLE_ENDIAN0x80000000);
31666 proto_item_append_text(base_item, " (%d us/s)", tvb_get_letohs(tvb, offset + 3)*32);
31667 }
31668
31669 return tvb_captured_length(tvb);
31670}
31671
31672/* 8.4.2.31 in 802-11-2012 */
31673static int
31674ieee80211_tag_edca_param_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31675{
31676 int tag_len = tvb_reported_length(tvb);
31677 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31678 int offset = 0;
31679
31680 if ((tag_len != 18))
31681 {
31682 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 18", tag_len);
31683 return tvb_captured_length(tvb);
31684 }
31685
31686 decode_qos_parameter_set(tree, tvb, pinfo, offset, field_data->ftype);
31687
31688 return tvb_captured_length(tvb);
31689}
31690
31691/* TSPEC element (13) */
31692static int
31693ieee80211_tag_tspec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31694{
31695 int tag_len = tvb_reported_length(tvb);
31696 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31697 int offset = 0;
31698
31699 if (field_data->isDMG == false0 && tag_len != 55)
31700 {
31701 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 55", tag_len);
31702 return tvb_captured_length(tvb);
31703 }
31704 if (field_data->isDMG == true1 && tag_len != 57)
31705 {
31706 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 57", tag_len);
31707 return tvb_captured_length(tvb);
31708 }
31709
31710 add_ff_qos_ts_info(tree, tvb, pinfo, offset);
31711 offset += 3;
31712
31713 proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31714 offset += 2;
31715
31716 proto_tree_add_item(tree, hf_ieee80211_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31717 offset += 2;
31718
31719 proto_tree_add_item(tree, hf_ieee80211_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31720 offset += 4;
31721
31722 proto_tree_add_item(tree, hf_ieee80211_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31723 offset += 4;
31724
31725 proto_tree_add_item(tree, hf_ieee80211_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31726 offset += 4;
31727
31728 proto_tree_add_item(tree, hf_ieee80211_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31729 offset += 4;
31730
31731 proto_tree_add_item(tree, hf_ieee80211_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31732 offset += 4;
31733
31734 proto_tree_add_item(tree, hf_ieee80211_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31735 offset += 4;
31736
31737 proto_tree_add_item(tree, hf_ieee80211_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31738 offset += 4;
31739
31740 proto_tree_add_item(tree, hf_ieee80211_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31741 offset += 4;
31742
31743 proto_tree_add_item(tree, hf_ieee80211_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31744 offset += 4;
31745
31746 proto_tree_add_item(tree, hf_ieee80211_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31747 offset += 4;
31748
31749 proto_tree_add_item(tree, hf_ieee80211_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
31750 offset += 4;
31751
31752 proto_tree_add_item(tree, hf_ieee80211_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31753 offset += 2;
31754
31755 proto_tree_add_item(tree, hf_ieee80211_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31756 offset += 2;
31757
31758 if(field_data->isDMG == true1) {
31759 proto_tree_add_item(tree, hf_ieee80211_tspec_dmg, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31760 /*offset +=2;*/
31761 }
31762
31763 return tvb_captured_length(tvb);
31764}
31765
31766/* 7.3.2.31 TCLAS element (14) */
31767static const range_string user_prio_rvals[] = {
31768 { 0, 7, "The User Priority value of an MSDU" },
31769 { 8, 8, "The AC value of an MPDU is AC-VO" },
31770 { 9, 9, "The AC value of an MPDU is AC-VI" },
31771 { 10, 10, "The AC value of an MPDU is AC-BE" },
31772 { 11, 11, "The AC value of an MPDU is AC-BK" },
31773 { 0, 0, NULL((void*)0) }
31774};
31775
31776static int * const ieee80211_tclas_class_mask0[] = {
31777 &hf_ieee80211_tclas_class_mask0_src_addr,
31778 &hf_ieee80211_tclas_class_mask0_dst_addr,
31779 &hf_ieee80211_tclas_class_mask0_type,
31780 NULL((void*)0)
31781};
31782
31783static int * const ieee80211_tclas_class_mask1[] = {
31784 &hf_ieee80211_tclas_class_mask1_ver,
31785 &hf_ieee80211_tclas_class_mask1_src_ip,
31786 &hf_ieee80211_tclas_class_mask1_dst_ip,
31787 &hf_ieee80211_tclas_class_mask1_src_port,
31788 &hf_ieee80211_tclas_class_mask1_dst_port,
31789 &hf_ieee80211_tclas_class_mask1_ipv6_flow,
31790 NULL((void*)0)
31791};
31792
31793static int * const ieee80211_tclas_class_mask1_4[] = {
31794 &hf_ieee80211_tclas_class_mask1_ver,
31795 &hf_ieee80211_tclas_class_mask1_src_ip,
31796 &hf_ieee80211_tclas_class_mask1_dst_ip,
31797 &hf_ieee80211_tclas_class_mask1_src_port,
31798 &hf_ieee80211_tclas_class_mask1_dst_port,
31799 &hf_ieee80211_tclas_class_mask1_ipv4_dscp,
31800 &hf_ieee80211_tclas_class_mask1_ipv4_proto,
31801 &hf_ieee80211_tclas_class_mask1_reserved,
31802 NULL((void*)0)
31803};
31804
31805static int * const ieee80211_tclas_class_mask2[] = {
31806 &hf_ieee80211_tclas_class_mask2_tci,
31807 NULL((void*)0)
31808};
31809
31810static int * const ieee80211_tclas_class_mask4_4[] = {
31811 &hf_ieee80211_tclas_class_mask4_ver,
31812 &hf_ieee80211_tclas_class_mask4_4_src_ip,
31813 &hf_ieee80211_tclas_class_mask4_4_dst_ip,
31814 &hf_ieee80211_tclas_class_mask4_src_port,
31815 &hf_ieee80211_tclas_class_mask4_dst_port,
31816 &hf_ieee80211_tclas_class_mask4_dscp,
31817 &hf_ieee80211_tclas_class_mask4_ipv4_proto,
31818 &hf_ieee80211_tclas_class_mask4_reserved,
31819 NULL((void*)0)
31820};
31821
31822static int * const ieee80211_tclas_class_mask4_6[] = {
31823 &hf_ieee80211_tclas_class_mask4_ver,
31824 &hf_ieee80211_tclas_class_mask4_6_src_ip,
31825 &hf_ieee80211_tclas_class_mask4_6_dst_ip,
31826 &hf_ieee80211_tclas_class_mask4_src_port,
31827 &hf_ieee80211_tclas_class_mask4_dst_port,
31828 &hf_ieee80211_tclas_class_mask4_dscp,
31829 &hf_ieee80211_tclas_class_mask4_next_hdr,
31830 &hf_ieee80211_tclas_class_mask4_flow_label,
31831 NULL((void*)0)
31832};
31833
31834static int * const ieee80211_tclas_class_mask5[] = {
31835 &hf_ieee80211_tclas_class_mask5_up_prio,
31836 &hf_ieee80211_tclas_class_mask5_dei,
31837 &hf_ieee80211_tclas_class_mask5_vid,
31838 &hf_ieee80211_tclas_class_mask5_reserved,
31839 NULL((void*)0)
31840};
31841
31842/*
31843 * Two control bits in the next few. Lower bit specifies if the classifier
31844 * uses the field (the match value is present, upper bit specifies is a
31845 * mask is present.
31846 */
31847static const value_string frame_control_mask_vals[] = {
31848 { 0x0 , "Frame Control is not included in the Classifier" },
31849 { 0x1 , "Frame Control is included in the Classifier. A Match Spec is not included" },
31850 { 0x2 , "Invalid Frame Control Classifier Mask Control value" },
31851 { 0x3 , "Frame Control is included in the Classifier. A Match Spec is included" },
31852 { 0, NULL((void*)0) }
31853};
31854
31855static const value_string duration_id_mask_vals[] = {
31856 { 0x0 , "Duration/ID is not included in the Classifier" },
31857 { 0x1 , "Duration/ID is included in the Classifier. A Match Spec is not included" },
31858 { 0x2 , "Invalid Duration/ID Classifier Mask Control value" },
31859 { 0x3 , "Duration/ID is included in the Classifier. A Match Spec is included" },
31860 { 0, NULL((void*)0) }
31861};
31862
31863static const value_string address_1_mask_vals[] = {
31864 { 0x0 , "Address 1 is not included in the Classifier" },
31865 { 0x1 , "Address 1 is included in the Classifier. A Match Spec is not included" },
31866 { 0x2 , "Invalid Address 1 Classifier Mask Control value" },
31867 { 0x3 , "Address 1 is included in the Classifier. A Match Spec is included" },
31868 { 0, NULL((void*)0) }
31869};
31870
31871static const value_string address_2_mask_vals[] = {
31872 { 0x0 , "Address 2 is not included in the Classifier" },
31873 { 0x1 , "Address 2 is included in the Classifier. A Match Spec is not included" },
31874 { 0x2 , "Invalid Address 2 Classifier Mask Control value" },
31875 { 0x3 , "Address 2 is included in the Classifier. A Match Spec is included" },
31876 { 0, NULL((void*)0) }
31877};
31878
31879static const value_string address_3_mask_vals[] = {
31880 { 0x0 , "Address 3 is not included in the Classifier" },
31881 { 0x1 , "Address 3 is included in the Classifier. A Match Spec is not included" },
31882 { 0x2 , "Invalid Address 3 Classifier Mask Control value" },
31883 { 0x3 , "Address 3 is included in the Classifier. A Match Spec is included" },
31884 { 0, NULL((void*)0) }
31885};
31886
31887static const value_string sequence_control_mask_vals[] = {
31888 { 0x0 , "Sequence Control is not included in the Classifier" },
31889 { 0x1 , "Sequence Control is included in the Classifier. A Match Spec is not included" },
31890 { 0x2 , "Invalid Sequence Control Classifier Mask Control value" },
31891 { 0x3 , "Sequence Control is included in the Classifier. A Match Spec is included" },
31892 { 0, NULL((void*)0) }
31893};
31894
31895static const value_string address_4_mask_vals[] = {
31896 { 0x0 , "Address 4 is not included in the Classifier" },
31897 { 0x1 , "Address 4 is included in the Classifier. A Match Spec is not included" },
31898 { 0x2 , "Invalid Address 4 Classifier Mask Control value" },
31899 { 0x3 , "Address 4 is included in the Classifier. A Match Spec is included" },
31900 { 0, NULL((void*)0) }
31901};
31902
31903static const value_string qos_control_mask_vals[] = {
31904 { 0x0 , "QoS Control is not included in the Classifier" },
31905 { 0x1 , "QoS Control is included in the Classifier. A Match Spec is not included" },
31906 { 0x2 , "Invalid QoS Control Classifier Mask Control value" },
31907 { 0x3 , "QoS Control is included in the Classifier. A Match Spec is included" },
31908 { 0, NULL((void*)0) }
31909};
31910
31911static const value_string ht_control_mask_vals[] = {
31912 { 0x0 , "HT Control is not included in the Classifier" },
31913 { 0x1 , "HT Control is included in the Classifier. A Match Spec is not included" },
31914 { 0x2 , "Invalid HT Control Classifier Mask Control value" },
31915 { 0x3 , "HT Control is included in the Classifier. A Match Spec is included" },
31916 { 0, NULL((void*)0) }
31917};
31918
31919static const value_string address_1_sid_mask_vals[] = {
31920 { 0x0 , "Address 1 (SID) is not included in the Classifier" },
31921 { 0x1 , "Address 1 (SID) is included in the Classifier. A Match Spec is not included" },
31922 { 0x2 , "Invalid Address 1 (SID) Classifier Mask Control value" },
31923 { 0x3 , "Address 1 (SID) is included in the Classifier. A match spec is included" },
31924 { 0, NULL((void*)0) }
31925};
31926
31927static const value_string address_1_bssid_mask_vals[] = {
31928 { 0x0 , "Address 1 (BSSID) is not included in the Classifier" },
31929 { 0x1 , "Address 1 (BSSID) is included in the Classifier. A Match Spec is not included" },
31930 { 0x2 , "Invalid Address 1 (SID) Classifier Mask Control value" },
31931 { 0x3 , "Address 1 (BSSID) is included in the Classifier. A match spec is included" },
31932 { 0, NULL((void*)0) }
31933};
31934
31935static int * const ieee80211_tclas_class_mask6[] = {
31936 &hf_ieee80211_tclas_class_mask6_frame_control_match_spec,
31937 &hf_ieee80211_tclas_class_mask6_duration_id_match_spec,
31938 &hf_ieee80211_tclas_class_mask6_address_1_match_spec,
31939 &hf_ieee80211_tclas_class_mask6_address_2_match_spec,
31940 &hf_ieee80211_tclas_class_mask6_address_3_match_spec,
31941 &hf_ieee80211_tclas_class_mask6_sequence_control_spec,
31942 &hf_ieee80211_tclas_class_mask6_address_4_match_spec,
31943 &hf_ieee80211_tclas_class_mask6_qos_control_spec,
31944 &hf_ieee80211_tclas_class_mask6_ht_control_spec,
31945 &hf_ieee80211_tclas_class_mask6_reserved,
31946 NULL((void*)0)
31947};
31948
31949static int * const ieee80211_tclas_class_mask7[] = {
31950 &hf_ieee80211_tclas_class_mask7_frame_control_match_spec,
31951 &hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec,
31952 &hf_ieee80211_tclas_class_mask7_address_2_match_spec,
31953 &hf_ieee80211_tclas_class_mask7_sequence_control_spec,
31954 &hf_ieee80211_tclas_class_mask7_address_3_match_spec,
31955 &hf_ieee80211_tclas_class_mask7_address_4_match_spec,
31956 &hf_ieee80211_tclas_class_mask7_reserved,
31957 NULL((void*)0)
31958};
31959
31960static int * const ieee80211_tclas_class_mask8[] = {
31961 &hf_ieee80211_tclas_class_mask8_frame_control_match_spec,
31962 &hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec,
31963 &hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec,
31964 &hf_ieee80211_tclas_class_mask8_sequence_control_spec,
31965 &hf_ieee80211_tclas_class_mask8_address_3_match_spec,
31966 &hf_ieee80211_tclas_class_mask8_address_4_match_spec,
31967 &hf_ieee80211_tclas_class_mask8_reserved,
31968 NULL((void*)0)
31969};
31970
31971/* TODO: the masks for these items are clearly wrong! */
31972static int * const ieee80211_tclas_class_mask9[] = {
31973 &hf_ieee80211_tclas_class_mask9_frame_control_match_spec,
31974 &hf_ieee80211_tclas_class_mask9_address_1_match_spec,
31975 &hf_ieee80211_tclas_class_mask9_address_2_match_spec,
31976 &hf_ieee80211_tclas_class_mask9_sequence_control_spec,
31977 &hf_ieee80211_tclas_class_mask9_reserved,
31978 NULL((void*)0)
31979};
31980
31981static int
31982ieee80211_frame_classifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31983 proto_tree *tree, int offset, int tag_len)
31984{
31985 uint8_t type;
31986 uint8_t version;
31987 uint8_t filter_field_len;
31988 uint32_t class_mask;
31989
31990 type = tvb_get_uint8(tvb, offset);
31991 proto_tree_add_item(tree, hf_ieee80211_tclas_class_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31992 offset += 1;
31993
31994 switch (type)
31995 {
31996 case 0:
31997 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
31998 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask0,
31999 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32000 offset++;
32001
32002 proto_tree_add_item(tree, hf_ieee80211_tclas_src_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
32003 offset += 6;
32004
32005 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
32006 offset += 6;
32007
32008 proto_tree_add_item(tree, hf_ieee80211_tclas_ether_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32009 /*offset += 2;*/
32010 break;
32011
32012 case 1:
32013 version = tvb_get_uint8(tvb, offset+1);
32014 if (version == 4) {
32015 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32016 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask1_4,
32017 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32018 } else {
32019 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32020 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask1,
32021 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32022 }
32023 offset += 1;
32024
32025 proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32026 offset += 1;
32027 if (version == 4)
32028 {
32029 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32030 offset += 4;
32031 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32032 offset += 4;
32033 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32034 offset += 2;
32035 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32036 offset += 2;
32037 proto_tree_add_item(tree, hf_ieee80211_tclas_dscp, tvb, offset, 1, ENC_NA0x00000000);
32038 offset += 1;
32039 proto_tree_add_item(tree, hf_ieee80211_tclas_protocol, tvb, offset, 1, ENC_NA0x00000000);
32040 /*offset += 1;*/
32041 }
32042 else if (version == 6)
32043 {
32044 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_src, tvb, offset, 16, ENC_NA0x00000000);
32045 offset += 16;
32046 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_dst, tvb, offset, 16, ENC_NA0x00000000);
32047 offset += 16;
32048 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32049 offset += 2;
32050 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32051 offset += 2;
32052 proto_tree_add_item(tree, hf_ieee80211_tclas_flow, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
32053 /*offset += 3;*/
32054 }
32055 break;
32056
32057 case 2:
32058 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32059 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask2,
32060 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32061 offset++;
32062
32063 proto_tree_add_item(tree, hf_ieee80211_tclas_tag_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32064 /*offset += 2;*/
32065 break;
32066
32067 case 3:
32068 proto_tree_add_item(tree, hf_ieee80211_tclas_mask_reserved, tvb, offset,
32069 1, ENC_NA0x00000000);
32070 offset += 1;
32071
32072 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_offset, tvb, offset,
32073 2, ENC_LITTLE_ENDIAN0x80000000);
32074 offset += 2;
32075
32076 filter_field_len = (tag_len - 4) / 2;
32077
32078 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_value, tvb, offset,
32079 filter_field_len, ENC_NA0x00000000);
32080 offset += filter_field_len;
32081
32082 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_mask, tvb, offset,
32083 filter_field_len, ENC_NA0x00000000);
32084 /*offset += filter_field_len;*/
32085 break;
32086
32087 case 4:
32088 version = tvb_get_uint8(tvb, offset+1);
32089 if (version == 4) {
32090 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32091 hf_ieee80211_tclas_class_mask,
32092 ett_tag_tclas_mask_tree,
32093 ieee80211_tclas_class_mask4_4,
32094 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
32095 } else if (version == 6) {
32096 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32097 hf_ieee80211_tclas_class_mask,
32098 ett_tag_tclas_mask_tree,
32099 ieee80211_tclas_class_mask4_6,
32100 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
32101 } else {
32102 proto_tree_add_item(tree, hf_ieee80211_tclas_class_mask, tvb, offset, 1,
32103 ENC_NA0x00000000);
32104 offset += 1;
32105
32106 proto_tree_add_item(tree, hf_ieee80211_tclas_reserved_bytes, tvb, offset,
32107 tag_len - offset + 1, ENC_NA0x00000000);
32108 break;
32109 }
32110
32111 offset += 1;
32112
32113 proto_tree_add_item(tree, hf_ieee80211_tclas4_version, tvb, offset, 1, ENC_NA0x00000000);
32114 offset += 1;
32115
32116 if (version == 4)
32117 {
32118 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32119 offset += 4;
32120 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32121 offset += 4;
32122 proto_tree_add_item(tree, hf_ieee80211_tclas4_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32123 offset += 2;
32124 proto_tree_add_item(tree, hf_ieee80211_tclas4_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32125 offset += 2;
32126 proto_tree_add_item(tree, hf_ieee80211_tclas4_dscp, tvb, offset, 1, ENC_NA0x00000000);
32127 offset += 1;
32128 proto_tree_add_item(tree, hf_ieee80211_tclas4_protocol, tvb, offset, 1, ENC_NA0x00000000);
32129 offset += 1;
32130 proto_tree_add_item(tree, hf_ieee80211_tclas4_reserved, tvb, offset, 1, ENC_NA0x00000000);
32131 /*offset += 1;*/
32132 }
32133 else if (version == 6)
32134 {
32135 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv6_src, tvb, offset, 16, ENC_NA0x00000000);
32136 offset += 16;
32137 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv6_dst, tvb, offset, 16, ENC_NA0x00000000);
32138 offset += 16;
32139 proto_tree_add_item(tree, hf_ieee80211_tclas4_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32140 offset += 2;
32141 proto_tree_add_item(tree, hf_ieee80211_tclas4_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32142 offset += 2;
32143 proto_tree_add_item(tree, hf_ieee80211_tclas4_dscp, tvb, offset, 1, ENC_NA0x00000000);
32144 offset += 1;
32145 proto_tree_add_item(tree, hf_ieee80211_tclas4_next_hdr, tvb, offset, 1, ENC_NA0x00000000);
32146 proto_tree_add_item(tree, hf_ieee80211_tclas4_flow, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
32147 /*offset += 3;*/
32148 }
32149 break;
32150
32151 case 5:
32152 /* Note, BIG Endian where more than one byte. */
32153 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32154 hf_ieee80211_tclas_class_mask,
32155 ett_tag_tclas_mask_tree,
32156 ieee80211_tclas_class_mask5,
32157 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32158 offset++;
32159
32160 proto_tree_add_item(tree, hf_ieee80211_tclas_tclas_8021d_up_pcp, tvb,
32161 offset, 1, ENC_NA0x00000000);
32162 offset += 1;
32163
32164 proto_tree_add_item(tree, hf_ieee80211_tclas_8021q_dei, tvb, offset, 1,
32165 ENC_NA0x00000000);
32166 offset += 1;
32167
32168 proto_tree_add_item(tree, hf_ieee80211_tclas_8021q_vid, tvb, offset, 2,
32169 ENC_BIG_ENDIAN0x00000000);
32170 break;
32171
32172 case 6:
32173 class_mask = tvb_get_letoh24(tvb, offset);
32174 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32175 hf_ieee80211_tclas_class_mask6_a_above,
32176 ett_tag_tclas_mask_tree,
32177 ieee80211_tclas_class_mask6,
32178 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32179 offset += 3;
32180
32181 /* Is the Frame Control info there? */
32182 if (class_mask & 0x01) {
32183 proto_tree_add_item(tree, hf_ieee80211_tclas6_frame_control_spec, tvb,
32184 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32185 offset += 2;
32186
32187 if (class_mask & 0x02) {
32188 proto_tree_add_item(tree, hf_ieee80211_tclas6_frame_control_mask, tvb,
32189 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32190 offset += 2;
32191 }
32192 }
32193 class_mask = class_mask >> 2; /* Get the next two bits */
32194
32195 /* Is the Duration info there? */
32196 if (class_mask & 0x01) {
32197 proto_tree_add_item(tree, hf_ieee80211_tclas6_duration_spec, tvb,
32198 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32199 offset += 2;
32200
32201 if (class_mask & 0x02) {
32202 proto_tree_add_item(tree, hf_ieee80211_tclas6_duration_mask, tvb,
32203 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32204 offset += 2;
32205 }
32206 }
32207 class_mask = class_mask >> 2; /* Get the next two bits */
32208
32209 /* Is the Address 1 info there? */
32210 if (class_mask & 0x01) {
32211 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_1_spec, tvb,
32212 offset, 6, ENC_NA0x00000000);
32213 offset += 6;
32214
32215 if (class_mask & 0x02) {
32216 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_1_mask, tvb,
32217 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32218 offset += 6;
32219 }
32220 }
32221 class_mask = class_mask >> 2; /* Get the next two bits */
32222
32223 /* Is the Address 2 info there? */
32224 if (class_mask & 0x01) {
32225 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_2_spec, tvb,
32226 offset, 6, ENC_NA0x00000000);
32227 offset += 6;
32228
32229 if (class_mask & 0x02) {
32230 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_2_mask, tvb,
32231 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32232 offset += 6;
32233 }
32234 }
32235 class_mask = class_mask >> 2; /* Get the next two bits */
32236
32237 /* Is the Address 3 info there? */
32238 if (class_mask & 0x01) {
32239 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_3_spec, tvb,
32240 offset, 6, ENC_NA0x00000000);
32241 offset += 6;
32242
32243 if (class_mask & 0x02) {
32244 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_3_mask, tvb,
32245 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32246 offset += 6;
32247 }
32248 }
32249 class_mask = class_mask >> 2; /* Get the next two bits */
32250
32251 /* Is the Sequence Control info there? */
32252 if (class_mask & 0x01) {
32253 proto_tree_add_item(tree, hf_ieee80211_tclas6_sequence_control_spec, tvb,
32254 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32255 offset += 2;
32256
32257 if (class_mask & 0x02) {
32258 proto_tree_add_item(tree, hf_ieee80211_tclas6_sequence_control_mask,
32259 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32260 offset += 2;
32261 }
32262 }
32263 class_mask = class_mask >> 2; /* Get the next two bits */
32264
32265 /* Is the Address 4 info there? */
32266 if (class_mask & 0x01) {
32267 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_4_spec, tvb,
32268 offset, 6, ENC_NA0x00000000);
32269 offset += 6;
32270
32271 if (class_mask & 0x02) {
32272 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_4_mask, tvb,
32273 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32274 offset += 6;
32275 }
32276 }
32277 class_mask = class_mask >> 2; /* Get the next two bits */
32278
32279 /* Is the QoS Control info there? */
32280 if (class_mask & 0x01) {
32281 proto_tree_add_item(tree, hf_ieee80211_tclas6_qos_control_spec, tvb,
32282 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32283 offset += 2;
32284
32285 if (class_mask & 0x02) {
32286 proto_tree_add_item(tree, hf_ieee80211_tclas6_qos_control_mask, tvb,
32287 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32288 offset += 2;
32289 }
32290 }
32291 class_mask = class_mask >> 2; /* Get the next two bits */
32292
32293 /* Is the HT Control info there? */
32294 if (class_mask & 0x01) {
32295 proto_tree_add_item(tree, hf_ieee80211_tclas6_ht_control_spec, tvb,
32296 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32297 offset += 4;
32298
32299 if (class_mask & 0x02) {
32300 proto_tree_add_item(tree, hf_ieee80211_tclas6_ht_control_mask, tvb,
32301 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32302 }
32303 }
32304 /* class_mask = class_mask >> 2; Get the next two bits */
32305
32306 break;
32307
32308 case 7:
32309 class_mask = tvb_get_letohs(tvb, offset);
32310 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32311 hf_ieee80211_tclas_class_mask6_a_above,
32312 ett_tag_tclas_mask_tree,
32313 ieee80211_tclas_class_mask7,
32314 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32315 offset += 3;
32316
32317 /* Is the Frame Control info there */
32318 if (class_mask & 0x01) {
32319 proto_tree_add_item(tree, hf_ieee80211_tclas7_frame_control_spec, tvb,
32320 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32321 offset += 2;
32322 if (class_mask & 0x02) {
32323 proto_tree_add_item(tree, hf_ieee80211_tclas7_frame_control_mask, tvb,
32324 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32325 offset += 2;
32326 }
32327 }
32328 class_mask = class_mask >> 2; /* Get the next two bits */
32329
32330 /* Is the Address 1 (SID) info there */
32331 if (class_mask & 0x01) {
32332 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_1_sid_spec, tvb,
32333 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32334 offset += 2;
32335 if (class_mask & 0x02) {
32336 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_1_sid_mask, tvb,
32337 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32338 offset += 2;
32339 }
32340 }
32341 class_mask = class_mask >> 2; /* Get the next two bits */
32342
32343 /* Is the Address 2 info there */
32344 if (class_mask & 0x01) {
32345 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_2_spec, tvb,
32346 offset, 6, ENC_NA0x00000000);
32347 offset += 6;
32348 if (class_mask & 0x02) {
32349 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_2_mask, tvb,
32350 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32351 offset += 6;
32352 }
32353 }
32354 class_mask = class_mask >> 2; /* Get the next two bits */
32355
32356 /* Is the Sequence Control info there */
32357 if (class_mask & 0x01) {
32358 proto_tree_add_item(tree, hf_ieee80211_tclas7_sequence_control_spec, tvb,
32359 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32360 offset += 2;
32361 if (class_mask & 0x02) {
32362 proto_tree_add_item(tree, hf_ieee80211_tclas7_sequence_control_mask,
32363 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32364 offset += 2;
32365 }
32366 }
32367 class_mask = class_mask >> 2; /* Get the next two bits */
32368
32369 /* Is the Address 3 info there */
32370 if (class_mask & 0x01) {
32371 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_3_spec, tvb,
32372 offset, 6, ENC_NA0x00000000);
32373 offset += 6;
32374 if (class_mask & 0x02) {
32375 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_3_mask, tvb,
32376 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32377 offset += 6;
32378 }
32379 }
32380 class_mask = class_mask >> 2; /* Get the next two bits */
32381
32382 /* Is the Address 4 info there */
32383 if (class_mask & 0x01) {
32384 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_4_spec, tvb,
32385 offset, 6, ENC_NA0x00000000);
32386 offset += 6;
32387 if (class_mask & 0x02) {
32388 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_4_mask, tvb,
32389 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32390 }
32391 }
32392 /*class_mask = class_mask >> 2; Get the next two bits */
32393
32394 break;
32395
32396 case 8:
32397 class_mask = tvb_get_letohs(tvb, offset);
32398 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32399 hf_ieee80211_tclas_class_mask6_a_above,
32400 ett_tag_tclas_mask_tree,
32401 ieee80211_tclas_class_mask8,
32402 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32403 offset += 3;
32404
32405 /* Is the Frame Control info there */
32406 if (class_mask & 0x01) {
32407 proto_tree_add_item(tree, hf_ieee80211_tclas8_frame_control_spec, tvb,
32408 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32409 offset += 2;
32410 if (class_mask & 0x02) {
32411 proto_tree_add_item(tree, hf_ieee80211_tclas8_frame_control_mask, tvb,
32412 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32413 offset += 2;
32414 }
32415 }
32416 class_mask = class_mask >> 2; /* Get the next two bits */
32417
32418 /* Is the Address 1 (BSSID) info there */
32419 if (class_mask & 0x01) {
32420 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_1_bssid_spec, tvb,
32421 offset, 6, ENC_NA0x00000000);
32422 offset += 6;
32423 if (class_mask & 0x02) {
32424 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_1_bssid_mask, tvb,
32425 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32426 offset += 6;
32427 }
32428 }
32429 class_mask = class_mask >> 2; /* Get the next two bits */
32430
32431 /* Is the Address 2 (SID) info there */
32432 if (class_mask & 0x01) {
32433 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_2_sid_spec, tvb,
32434 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32435 offset += 2;
32436 if (class_mask & 0x02) {
32437 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_2_sid_mask, tvb,
32438 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32439 offset += 2;
32440 }
32441 }
32442 class_mask = class_mask >> 2; /* Get the next two bits */
32443
32444 /* Is the Sequence Control info there */
32445 if (class_mask & 0x01) {
32446 proto_tree_add_item(tree, hf_ieee80211_tclas8_sequence_control_spec, tvb,
32447 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32448 offset += 2;
32449 if (class_mask & 0x02) {
32450 proto_tree_add_item(tree, hf_ieee80211_tclas8_sequence_control_mask,
32451 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32452 offset += 2;
32453 }
32454 }
32455 class_mask = class_mask >> 2; /* Get the next two bits */
32456
32457 /* Is the Address 3 info there */
32458 if (class_mask & 0x01) {
32459 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_3_spec, tvb,
32460 offset, 6, ENC_NA0x00000000);
32461 offset += 6;
32462 if (class_mask & 0x02) {
32463 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_3_mask, tvb,
32464 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32465 offset += 6;
32466 }
32467 }
32468 class_mask = class_mask >> 2; /* Get the next two bits */
32469
32470 /* Is the Address 4 info there */
32471 if (class_mask & 0x01) {
32472 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_4_spec, tvb,
32473 offset, 6, ENC_NA0x00000000);
32474 offset += 6;
32475 if (class_mask & 0x02) {
32476 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_4_mask, tvb,
32477 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32478 }
32479 }
32480 /* class_mask = class_mask >> 2; Get the next two bits */
32481
32482 break;
32483
32484 case 9:
32485 class_mask = tvb_get_letohs(tvb, offset);
32486 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32487 hf_ieee80211_tclas_class_mask6_a_above,
32488 ett_tag_tclas_mask_tree,
32489 ieee80211_tclas_class_mask9,
32490 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32491 offset += 3;
32492
32493 /* Is the Frame Control info there */
32494 if (class_mask & 0x01) {
32495 proto_tree_add_item(tree, hf_ieee80211_tclas9_frame_control_spec, tvb,
32496 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32497 offset += 2;
32498 if (class_mask & 0x02) {
32499 proto_tree_add_item(tree, hf_ieee80211_tclas9_frame_control_mask, tvb,
32500 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32501 offset += 2;
32502 }
32503 }
32504 class_mask = class_mask >> 2; /* Get the next two bits */
32505
32506 /* Is the Address 1 info there */
32507 if (class_mask & 0x01) {
32508 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_1_spec, tvb,
32509 offset, 6, ENC_NA0x00000000);
32510 offset += 6;
32511 if (class_mask & 0x02) {
32512 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_1_mask, tvb,
32513 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32514 offset += 6;
32515 }
32516 }
32517 class_mask = class_mask >> 2; /* Get the next two bits */
32518
32519 /* Is the Address 2 info there */
32520 if (class_mask & 0x01) {
32521 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_2_spec, tvb,
32522 offset, 6, ENC_NA0x00000000);
32523 offset += 6;
32524 if (class_mask & 0x02) {
32525 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_2_mask, tvb,
32526 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32527 offset += 6;
32528 }
32529 }
32530 class_mask = class_mask >> 2; /* Get the next two bits */
32531
32532 /* Is the Sequence Control info there */
32533 if (class_mask & 0x01) {
32534 proto_tree_add_item(tree, hf_ieee80211_tclas9_sequence_control_spec, tvb,
32535 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32536 offset += 2;
32537 if (class_mask & 0x02) {
32538 proto_tree_add_item(tree, hf_ieee80211_tclas9_sequence_control_mask,
32539 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32540 }
32541 }
32542 /* class_mask = class_mask >> 2; Get the next two bits */
32543
32544 break;
32545
32546 case 0x0A:
32547 proto_tree_add_item(tree, hf_ieee80211_tclas10_protocol_instance, tvb,
32548 offset, 1, ENC_NA0x00000000);
32549 offset += 1;
32550
32551 proto_tree_add_item(tree, hf_ieee80211_tclas10_protocol_num_next_hdr, tvb,
32552 offset, 1, ENC_NA0x00000000);
32553 offset += 1;
32554
32555 filter_field_len = (tag_len - 4) / 2;
32556
32557 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_value, tvb, offset,
32558 filter_field_len, ENC_NA0x00000000);
32559 offset += filter_field_len;
32560
32561 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_mask, tvb, offset,
32562 filter_field_len, ENC_NA0x00000000);
32563 /*offset += filter_field_len;*/
32564 break;
32565
32566 default:
32567 break;
32568 }
32569
32570 return tvb_captured_length(tvb);
32571}
32572
32573static int
32574ieee80211_tag_tclas(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32575{
32576 int tag_len = tvb_reported_length(tvb);
32577 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32578 int offset = 0;
32579
32580 if (tag_len < 5)
32581 {
32582 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 5", tag_len);
32583 return 1;
32584 }
32585
32586 proto_tree_add_item(tree, hf_ieee80211_tclas_up, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32587 offset += 1;
32588
32589 return ieee80211_frame_classifier(tvb, pinfo, tree, offset, tag_len);
32590}
32591
32592/* 7.3.2.34 Schedule element (15) */
32593static int
32594ieee80211_tag_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32595{
32596 int tag_len = tvb_reported_length(tvb);
32597 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32598 int offset = 0;
32599 if (tag_len != 14)
32600 {
32601 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 14", tag_len);
32602 return 1;
32603 }
32604
32605 add_ff_schedule_info(tree, tvb, pinfo, offset);
32606 offset += 2;
32607
32608 proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32609 offset += 4;
32610
32611 proto_tree_add_item(tree, hf_ieee80211_sched_srv_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32612 offset += 4;
32613
32614 proto_tree_add_item(tree, hf_ieee80211_sched_spec_int, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32615 return tvb_captured_length(tvb);
32616}
32617
32618/* 7.3.2.8 Challenge Text element (16) */
32619static int
32620ieee80211_tag_challenge_text(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
32621{
32622 int tag_len = tvb_reported_length(tvb);
32623 int offset = 0;
32624
32625 proto_tree_add_item(tree, hf_ieee80211_tag_challenge_text, tvb, offset, tag_len, ENC_NA0x00000000);
32626
32627 return ((tag_len > 0) ? tag_len : 1);
32628}
32629
32630/* 7.3.2.15 Power Constraint element (32) */
32631static int
32632ieee80211_tag_power_constraint(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32633{
32634 int tag_len = tvb_reported_length(tvb);
32635 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32636 int offset = 0;
32637 if (tag_len != 1)
32638 {
32639 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
32640 return 1;
32641 }
32642
32643 proto_tree_add_item(tree, hf_ieee80211_tag_power_constraint_local, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32644 proto_item_append_text(field_data->item_tag, ": %d", tvb_get_uint8(tvb, offset));
32645 return tvb_captured_length(tvb);
32646}
32647
32648/* 7.3.2.16 Power Capability element (33) */
32649static int
32650ieee80211_tag_power_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32651{
32652 int tag_len = tvb_reported_length(tvb);
32653 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32654 int offset = 0;
32655 if (tag_len != 2)
32656 {
32657 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
32658 return 1;
32659 }
32660
32661 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_min, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32662 proto_item_append_text(field_data->item_tag, " Min: %d", tvb_get_int8(tvb, offset));
32663 offset += 1;
32664
32665 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_max, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32666 proto_item_append_text(field_data->item_tag, ", Max: %d", tvb_get_int8(tvb, offset));
32667 return tvb_captured_length(tvb);
32668}
32669
32670/* 7.3.2.18 TPC Request element (34) */
32671static int
32672ieee80211_tag_tpc_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U___attribute__((unused)), void* data)
32673{
32674 int tag_len = tvb_reported_length(tvb);
32675 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32676 if (tag_len != 0)
32677 {
32678 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 0", tag_len);
32679 return 1; /* Even with no data, we can't return 0 */
32680 }
32681
32682 return 1; /* Even with no data, we can't return 0 */
32683}
32684
32685/* TPC Report element (35)
32686 * 7.3.2.18 (Std 802.11-2007), 8.4.2.19 (Std 802.11-2012),
32687 * 9.4.2.17 (Std 802.11-2016), 9.4.2.16 (Std 802.11-2020)
32688 */
32689static int
32690ieee80211_tag_tpc_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32691{
32692 int tag_len = tvb_reported_length(tvb);
32693 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32694 int offset = 0;
32695
32696 if (tag_len != 2)
32697 {
32698 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
32699 return 1;
32700 }
32701
32702 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_trsmt_pow, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32703 proto_item_append_text(field_data->item_tag, " Transmit Power: %d dBm", tvb_get_uint8(tvb, offset));
32704 offset += 1;
32705
32706 /*
32707 * "The Link Margin field is reserved when a TPC Report element is
32708 * included in a Beacon frame or Probe Response frame." - 2012 and later
32709 */
32710
32711 uint32_t ftype = GPOINTER_TO_UINT(p_get_proto_data(wmem_file_scope(),((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
32712 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
32713 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
32714
32715 if (ftype == MGT_BEACON0x08 || ftype == MGT_PROBE_RESP0x05) {
32716 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_reserved, tvb, offset, 1, ENC_NA0x00000000);
32717 } else {
32718 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_link_mrg, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32719
32720 proto_item_append_text(field_data->item_tag, ", Link Margin: %d dBm", tvb_get_uint8(tvb, offset));
32721 }
32722 return tvb_captured_length(tvb);
32723}
32724
32725/* 7.3.2.19 Supported Channels element (36) */
32726static int
32727ieee80211_tag_supported_channels(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32728{
32729 int tag_len = tvb_reported_length(tvb);
32730 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32731 int offset = 0;
32732
32733 proto_item *chan_item;
32734 proto_tree *chan_tree;
32735 unsigned i = 1;
32736
32737 if (tag_len % 2 == 1) {
32738 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u must be even", tag_len);
32739 return tvb_captured_length(tvb);
32740 }
32741
32742 while (offset < tag_len)
32743 {
32744 chan_item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_channels, tvb, offset, 2, ENC_NA0x00000000);
32745 proto_item_append_text(chan_item, " #%d", i);
32746 i += 1;
32747
32748 chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
32749
32750 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_first, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32751 proto_item_append_text(chan_item, " First: %d", tvb_get_uint8(tvb, offset));
32752 offset += 1;
32753
32754 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_range, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32755 proto_item_append_text(chan_item, ", Range: %d ", tvb_get_uint8(tvb, offset));
32756 offset += 1;
32757
32758 }
32759 return tvb_captured_length(tvb);
32760}
32761
32762/* 7.3.2.20 Channel Switch Announcement element (37) */
32763static int
32764ieee80211_tag_switch_ann(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32765{
32766 int tag_len = tvb_reported_length(tvb);
32767 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32768 int offset = 0;
32769 if (tag_len != 3)
32770 {
32771 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 3", tag_len);
32772 return 1;
32773 }
32774
32775 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32776 proto_item_append_text(field_data->item_tag, " Mode: %d", tvb_get_uint8(tvb, offset));
32777 offset += 1;
32778
32779 proto_tree_add_item(tree, hf_ieee80211_csa_new_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32780 proto_item_append_text(field_data->item_tag, ", Number: %d ", tvb_get_uint8(tvb, offset));
32781 offset += 1;
32782
32783 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32784 proto_item_append_text(field_data->item_tag, ", Count: %d ", tvb_get_uint8(tvb, offset));
32785 return tvb_captured_length(tvb);
32786}
32787
32788/* 7.3.2.21 Measurement Request element (38) with update from 802.11k-2008 */
32789static int
32790ieee80211_tag_measure_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32791{
32792 int tag_len = tvb_reported_length(tvb);
32793 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32794 int offset = 0;
32795 uint8_t request_type;
32796 proto_item *parent_item;
32797 proto_tree *sub_tree;
32798 static int * const ieee80211_tag_measure_request_mode[] = {
32799 &hf_ieee80211_tag_measure_request_mode_parallel,
32800 &hf_ieee80211_tag_measure_request_mode_enable,
32801 &hf_ieee80211_tag_measure_request_mode_request,
32802 &hf_ieee80211_tag_measure_request_mode_report,
32803 &hf_ieee80211_tag_measure_request_mode_duration_mandatory,
32804 &hf_ieee80211_tag_measure_request_mode_reserved,
32805 NULL((void*)0)
32806 };
32807
32808 if (tag_len < 3)
32809 {
32810 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
32811 return tvb_captured_length(tvb);
32812 }
32813 proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_token, tvb, offset, 1, ENC_NA0x00000000);
32814 offset += 1;
32815
32816 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_request_mode,
32817 ett_tag_measure_request_mode_tree, ieee80211_tag_measure_request_mode,
32818 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32819 offset += 1;
32820
32821 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_type, tvb, offset, 1, ENC_NA0x00000000);
32822 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_type_tree);
32823 request_type = tvb_get_uint8(tvb, offset);
32824 offset += 1;
32825
32826 switch (request_type) {
32827 case 0: /* Basic Request */
32828 case 1: /* Clear channel assessment (CCA) request */
32829 case 2: /* Receive power indication (RPI) histogram request */
32830 {
32831 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
32832 offset += 1;
32833
32834 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
32835 offset += 8;
32836
32837 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32838 offset += 2;
32839 break;
32840 }
32841 case 3: /* Channel Load Request */
32842 {
32843 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
32844 offset += 1;
32845
32846 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
32847 offset += 1;
32848
32849 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32850 offset += 2;
32851
32852 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32853 offset += 2;
32854
32855 while (offset < tag_len)
32856 {
32857 uint8_t sub_id;
32858 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_id, tvb, offset, 1, ENC_NA0x00000000);
32859 sub_id = tvb_get_uint8(tvb, offset);
32860 offset += 1;
32861
32862 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
32863 offset += 1;
32864
32865 switch (sub_id) {
32866 case MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1: /* Channel Load Reporting Information (1) */
32867 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition, tvb, offset, 1, ENC_NA0x00000000);
32868 offset += 1;
32869 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref, tvb, offset, 1, ENC_NA0x00000000);
32870 offset += 1;
32871 break;
32872 default:
32873 /* no default action */
32874 break;
32875 }
32876 }
32877 break;
32878 }
32879 case 4: /* Noise Histogram Request */
32880 {
32881 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
32882 offset += 1;
32883
32884 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
32885 offset += 1;
32886
32887 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32888 offset += 2;
32889
32890 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32891 offset += 2;
32892
32893 while (offset < tag_len)
32894 {
32895 uint8_t sub_id;
32896 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_id, tvb, offset, 1, ENC_NA0x00000000);
32897 sub_id = tvb_get_uint8(tvb, offset);
32898 offset += 1;
32899
32900 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
32901 offset += 1;
32902
32903 switch (sub_id) {
32904 case MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1: /* Noise Histogram Reporting Information (1) */
32905 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition, tvb, offset, 1, ENC_NA0x00000000);
32906 offset += 1;
32907 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref, tvb, offset, 1, ENC_NA0x00000000);
32908 offset += 1;
32909 break;
32910 default:
32911 /* no default action */
32912 break;
32913 }
32914 }
32915 break;
32916 }
32917 case 5: /* Beacon Request */
32918 {
32919 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
32920 offset += 1;
32921
32922 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
32923 offset += 1;
32924
32925 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32926 offset += 2;
32927
32928 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32929 offset += 2;
32930
32931 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_measurement_mode, tvb, offset, 1, ENC_NA0x00000000);
32932 offset += 1;
32933
32934 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_bssid, tvb, offset, 6, ENC_NA0x00000000);
32935 offset += 6;
32936
32937 while (offset < tag_len)
32938 {
32939 uint8_t sub_id, sub_length, sub_tag_end;
32940 proto_item *sub_elem_item, *sub_elem_len_item;
32941 proto_tree *sub_elem_tree;
32942
32943 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_id, tvb, offset, 1, ENC_NA0x00000000);
32944 sub_id = tvb_get_uint8(tvb, offset);
32945 offset += 1;
32946
32947 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_request_sub_element_tree);
32948
32949 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_subelement_length,
32950 tvb, offset, 1, ENC_NA0x00000000);
32951 sub_length = tvb_get_uint8(tvb, offset);
32952 offset += 1;
32953 sub_tag_end = offset + sub_length;
32954
32955 if (sub_tag_end > tag_len)
32956 {
32957 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
32958 return tvb_captured_length(tvb);
32959 }
32960
32961 switch (sub_id) {
32962 case MEASURE_REQ_BEACON_SUB_SSID0: /* SSID (0) */
32963 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_ssid, tvb, offset, sub_length, ENC_ASCII0x00000000);
32964 offset += sub_length;
32965 break;
32966 case MEASURE_REQ_BEACON_SUB_BRI1: /* Beacon Reporting Information (1) */
32967 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32968 offset += 1;
32969 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32970 offset += 1;
32971 break;
32972 case MEASURE_REQ_BEACON_SUB_RD2: /* Reporting Detail (2) */
32973 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32974 offset += 1;
32975 break;
32976 case MEASURE_REQ_BEACON_SUB_REQUEST10: /* Request (10) */
32977 {
32978 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
32979 offset += ieee80211_tag_request(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
32980 break;
32981 }
32982 case MEASURE_REQ_BEACON_SUB_REQUEST_EXT11: /* Extended Request (11) */
32983 dissect_extended_request(tvb, pinfo, sub_elem_tree, offset, sub_length);
32984 offset += sub_length;
32985 break;
32986 case MEASURE_REQ_BEACON_SUB_APCP51: /* AP Channel Report (51) */
32987 {
32988 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
32989 ieee80211_tagged_field_data_t sub_data = {
32990 .ftype = 0,
32991 .sanity_check = NULL((void*)0),
32992 .isDMG = false0,
32993 .item_tag_length = sub_elem_len_item,
32994 .item_tag = sub_elem_item};
32995 offset += dissect_ap_channel_report(sub_tvb, pinfo, sub_elem_tree, &sub_data);
32996 break;
32997 }
32998 case MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163:
32999 {
33000 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33001 offset += dissect_wide_bw_channel_switch(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
33002 break;
33003 }
33004 case MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164:
33005 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request,
33006 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33007 offset += 1;
33008 break;
33009 default:
33010 /* no default action */
33011 break;
33012 }
33013 if (offset < sub_tag_end)
33014 {
33015 proto_item *tix;
33016 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33017 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_beacon_unknown);
33018 offset = sub_tag_end;
33019 }
33020 }
33021
33022 break;
33023 }
33024 case 6: /* Frame Request */
33025 {
33026 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33027 offset += 1;
33028
33029 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33030 offset += 1;
33031
33032 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33033 offset += 2;
33034
33035 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33036 offset += 2;
33037
33038 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_frame_request_type, tvb, offset, 1, ENC_NA0x00000000);
33039 offset += 1;
33040
33041 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mac_address, tvb, offset, 6, ENC_NA0x00000000);
33042 offset += 6;
33043
33044 /* TODO Add Optional Subelements */
33045 break;
33046 }
33047 case 7: /* BSTA Statistics Request */
33048 {
33049 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_peer_mac_address, tvb, offset, 6, ENC_NA0x00000000);
33050 offset += 6;
33051
33052 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33053 offset += 2;
33054
33055 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33056 offset += 2;
33057
33058 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_group_id, tvb, offset, 1, ENC_NA0x00000000);
33059 offset += 1;
33060
33061 /* TODO Add Optional Subelements */
33062 break;
33063 }
33064 case 8: /* Location Configuration Indication (LCI) Request */
33065 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_subject, tvb, offset, 1, ENC_NA0x00000000);
33066 offset += 1;
33067
33068 /* TODO Add Optional Subelements */
33069 break;
33070 case 9: /* Transmit Stream Measurement Request */
33071 /* TODO */
33072 case 10: /* Multicast Diagnostics Request */
33073 /* TODO */
33074 case 11: /* Location Civic Request */
33075 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_subject, tvb, offset, 1, ENC_NA0x00000000);
33076 offset += 1;
33077
33078 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_civic_location_type, tvb, offset, 1, ENC_NA0x00000000);
33079 offset += 1;
33080
33081 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_service_interval_units, tvb, offset, 1, ENC_NA0x00000000);
33082 offset += 1;
33083
33084 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_service_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33085 offset += 2;
33086 /* TODO Add Optional Subelements */
33087 break;
33088 case 12: /* Location Identifier Request */
33089 /* TODO */
33090 case 13: /* Directional Channel Quality Request */
33091 /* TODO */
33092 case 14: /* Directional Measurement Request */
33093 /* TODO */
33094 case 15: /* Directional Statistics Request */
33095 /* TODO */
33096 case 16: /* Fine Timing Measurement Range Request */
33097 /* TODO */
33098 case 255: /* Measurement Pause Request */
33099 /* TODO */
33100 default: /* unknown */
33101 break;
33102 }
33103 if (offset < tag_len)
33104 {
33105 proto_item *tix;
33106 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_unknown, tvb, offset, tag_len - offset, ENC_NA0x00000000);
33107 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_unknown);
33108 }
33109
33110 return tvb_captured_length(tvb);
33111}
33112
33113/* 7.3.2.22 Measurement Report element (39) with update from 802.11k-2008 */
33114static int
33115ieee80211_tag_measure_rep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33116{
33117 int tag_len = tvb_reported_length(tvb);
33118 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33119 int offset = 0;
33120 proto_item *parent_item;
33121 proto_tree *sub_tree;
33122 uint8_t report_type;
33123 static int * const ieee80211_tag_measure_report_mode[] = {
33124 &hf_ieee80211_tag_measure_report_mode_late,
33125 &hf_ieee80211_tag_measure_report_mode_incapable,
33126 &hf_ieee80211_tag_measure_report_mode_refused,
33127 &hf_ieee80211_tag_measure_report_mode_reserved,
33128 NULL((void*)0)
33129 };
33130 static int * const ieee80211_tag_measure_map_field[] = {
33131 &hf_ieee80211_tag_measure_map_field_bss,
33132 &hf_ieee80211_tag_measure_map_field_ofdm,
33133 &hf_ieee80211_tag_measure_map_field_unident_signal,
33134 &hf_ieee80211_tag_measure_map_field_radar,
33135 &hf_ieee80211_tag_measure_map_field_unmeasured,
33136 &hf_ieee80211_tag_measure_map_field_reserved,
33137 NULL((void*)0)
33138 };
33139 static int * const ieee80211_tag_measure_report_frame_info[] = {
33140 &hf_ieee80211_tag_measure_report_frame_info_phy_type,
33141 &hf_ieee80211_tag_measure_report_frame_info_frame_type,
33142 NULL((void*)0)
33143 };
33144
33145 if (tag_len < 3)
33146 {
33147 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
33148 return tvb_captured_length(tvb);
33149 }
33150 proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_measurement_token, tvb, offset, 1, ENC_NA0x00000000);
33151 offset += 1;
33152
33153 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_report_mode,
33154 ett_tag_measure_report_mode_tree, ieee80211_tag_measure_report_mode,
33155 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33156 offset += 1;
33157
33158 report_type = tvb_get_uint8(tvb, offset);
33159 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33160 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_type_tree);
33161 offset += 1;
33162
33163 if (tag_len == 3)
33164 return tvb_captured_length(tvb);
33165
33166 switch (report_type) {
33167 case 0: /* Basic Report */
33168 {
33169 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33170 offset += 1;
33171
33172 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33173 offset += 8;
33174
33175 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33176 offset += 2;
33177
33178 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_basic_map_field,
33179 ett_tag_measure_report_basic_map_tree, ieee80211_tag_measure_map_field,
33180 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33181 break;
33182 }
33183 case 1: /* Clear channel assessment (CCA) report */
33184 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33185 offset += 1;
33186
33187 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33188 offset += 8;
33189
33190 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33191 offset += 2;
33192
33193 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_cca_busy_fraction, tvb, offset, 1, ENC_NA0x00000000);
33194 offset += 1;
33195 break;
33196 case 2: /* Receive power indication (RPI) histogram report */
33197 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33198 offset += 1;
33199
33200 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33201 offset += 8;
33202
33203 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33204 offset += 2;
33205
33206 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report, tvb, offset, 8, ENC_NA0x00000000);
33207 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_rpi_tree);
33208
33209 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_0, tvb, offset, 1, ENC_NA0x00000000);
33210 offset += 1;
33211
33212 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_1, tvb, offset, 1, ENC_NA0x00000000);
33213 offset += 1;
33214
33215 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_2, tvb, offset, 1, ENC_NA0x00000000);
33216 offset += 1;
33217
33218 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_3, tvb, offset, 1, ENC_NA0x00000000);
33219 offset += 1;
33220
33221 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_4, tvb, offset, 1, ENC_NA0x00000000);
33222 offset += 1;
33223
33224 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_5, tvb, offset, 1, ENC_NA0x00000000);
33225 offset += 1;
33226
33227 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_6, tvb, offset, 1, ENC_NA0x00000000);
33228 offset += 1;
33229
33230 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_7, tvb, offset, 1, ENC_NA0x00000000);
33231 offset += 1;
33232 break;
33233 case 3: /* Channel Load Report */
33234 {
33235 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33236 offset += 1;
33237
33238 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33239 offset += 1;
33240
33241 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33242 offset += 8;
33243
33244 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33245 offset += 2;
33246
33247 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_load, tvb, offset, 1, ENC_NA0x00000000);
33248 offset += 1;
33249
33250 /* TODO Add Optional Subelements */
33251 break;
33252 }
33253 case 4: /* Noise Histogram Report */
33254 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33255 offset += 1;
33256
33257 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33258 offset += 1;
33259
33260 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33261 offset += 8;
33262
33263 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33264 offset += 2;
33265
33266 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA0x00000000);
33267 offset += 1;
33268
33269 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_anpi, tvb, offset, 1, ENC_NA0x00000000);
33270 offset += 1;
33271
33272 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_0, tvb, offset, 1, ENC_NA0x00000000);
33273 offset += 1;
33274
33275 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_1, tvb, offset, 1, ENC_NA0x00000000);
33276 offset += 1;
33277
33278 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_2, tvb, offset, 1, ENC_NA0x00000000);
33279 offset += 1;
33280
33281 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_3, tvb, offset, 1, ENC_NA0x00000000);
33282 offset += 1;
33283
33284 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_4, tvb, offset, 1, ENC_NA0x00000000);
33285 offset += 1;
33286
33287 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_5, tvb, offset, 1, ENC_NA0x00000000);
33288 offset += 1;
33289
33290 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_6, tvb, offset, 1, ENC_NA0x00000000);
33291 offset += 1;
33292
33293 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_7, tvb, offset, 1, ENC_NA0x00000000);
33294 offset += 1;
33295
33296 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_8, tvb, offset, 1, ENC_NA0x00000000);
33297 offset += 1;
33298
33299 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_9, tvb, offset, 1, ENC_NA0x00000000);
33300 offset += 1;
33301
33302 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_10, tvb, offset, 1, ENC_NA0x00000000);
33303 offset += 1;
33304
33305 /* TODO Add Optional Subelements */
33306 break;
33307 case 5: /* Beacon Report */
33308 {
33309 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33310 offset += 1;
33311
33312 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33313 offset += 1;
33314
33315 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33316 offset += 8;
33317
33318 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33319 offset += 2;
33320
33321 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset, hf_ieee80211_tag_measure_report_frame_info,
33322 ett_tag_measure_report_frame_tree, ieee80211_tag_measure_report_frame_info,
33323 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33324 offset += 1;
33325
33326 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rcpi, tvb, offset, 1, ENC_NA0x00000000);
33327 offset += 1;
33328
33329 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rsni, tvb, offset, 1, ENC_NA0x00000000);
33330 offset += 1;
33331
33332 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_bssid, tvb, offset, 6, ENC_NA0x00000000);
33333 offset += 6;
33334
33335 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA0x00000000);
33336 offset += 1;
33337
33338 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
33339 offset += 4;
33340
33341 while (offset < tag_len)
33342 {
33343 uint8_t sub_id, sub_length, sub_tag_end;
33344 proto_item *sub_elem_item, *sub_elem_len_item;
33345 proto_tree *sub_elem_tree;
33346
33347 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_beacon_sub_id,
33348 tvb, offset, 1, ENC_NA0x00000000);
33349 sub_id = tvb_get_uint8(tvb, offset);
33350 offset += 1;
33351
33352 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33353
33354 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33355 tvb, offset, 1, ENC_NA0x00000000);
33356 sub_length = tvb_get_uint8(tvb, offset);
33357 offset += 1;
33358 sub_tag_end = offset + sub_length;
33359
33360 if (sub_tag_end > tag_len)
33361 {
33362 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33363 return tvb_captured_length(tvb);
33364 }
33365
33366 switch (sub_id) {
33367 case MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1: /* Reported Frame Body (1) */
33368 {
33369 proto_tree *rep_tree;
33370 bool_Bool fixed_fields = true1;
33371
33372 rep_tree = proto_tree_add_subtree(sub_elem_tree, tvb, offset, sub_length,
33373 ett_tag_measure_reported_frame_tree, NULL((void*)0), "Reported Frame Body");
33374
33375 /* If reported frame body fragment ID sub element is present and this is not
33376 the first fragment then there are no fixed size fields */
33377 if (((tag_len - sub_tag_end) >= 4) &&
33378 (tvb_get_uint8(tvb, sub_tag_end) == MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2) &&
33379 ((tvb_get_uint8(tvb, sub_tag_end + 3) & 0x7f) > 0))
33380 fixed_fields = false0;
33381
33382 if (fixed_fields) {
33383 add_ff_timestamp(rep_tree, tvb, pinfo, offset);
33384 offset += 8;
33385 add_ff_beacon_interval(rep_tree, tvb, pinfo, offset);
33386 offset += 2;
33387 add_ff_cap_info(rep_tree, tvb, pinfo, offset);
33388 offset += 2;
33389 sub_length -= 12;
33390 }
33391
33392 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, rep_tree, sub_length, MGT_PROBE_RESP0x05, NULL((void*)0));
33393 offset += sub_length;
33394 break;
33395 }
33396 case MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2:
33397 {
33398 static int * const ieee80211_tag_measure_reported_frame_frag_id[] = {
33399 &hf_ieee80211_tag_measure_reported_frame_frag_rep_id,
33400 &hf_ieee80211_tag_measure_reported_frame_frag_number,
33401 &hf_ieee80211_tag_measure_reported_frame_frag_more,
33402 NULL((void*)0)
33403 };
33404 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33405 hf_ieee80211_tag_measure_reported_frame_frag_id,
33406 ett_tag_measure_reported_frame_frag_id_tree,
33407 ieee80211_tag_measure_reported_frame_frag_id,
33408 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33409 offset += 2;
33410 break;
33411 }
33412 case MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163:
33413 {
33414 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33415 offset += dissect_wide_bw_channel_switch(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
33416 break;
33417 }
33418 case MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164:
33419 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication,
33420 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33421 offset += 1;
33422 break;
33423 default:
33424 /* no default action */
33425 break;
33426 }
33427
33428 if (offset < sub_tag_end)
33429 {
33430 proto_item *tix;
33431 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_beacon_unknown,
33432 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33433 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_beacon_unknown);
33434 offset = sub_tag_end;
33435 }
33436 }
33437 break;
33438 }
33439 case 6: /* Frame Report */
33440 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33441 offset += 1;
33442
33443 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33444 offset += 1;
33445
33446 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33447 offset += 8;
33448
33449 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33450 offset += 2;
33451
33452 /* TODO Add Optional Subelements */
33453 break;
33454 case 7: /* BSTA Statistics Report */
33455 /* TODO */
33456 case 8: /* Location Configuration Information Report element */
33457 //proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
33458 //offset += 4;
33459
33460 while (offset < tag_len)
33461 {
33462 uint8_t sub_id, sub_length, sub_tag_end;
33463 proto_item *sub_elem_item, *sub_elem_len_item;
33464 proto_tree *sub_elem_tree;
33465
33466 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_lci_sub_id,
33467 tvb, offset, 1, ENC_NA0x00000000);
33468 sub_id = tvb_get_uint8(tvb, offset);
33469 offset += 1;
33470
33471 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33472
33473 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33474 tvb, offset, 1, ENC_NA0x00000000);
33475 sub_length = tvb_get_uint8(tvb, offset);
33476 offset += 1;
33477 sub_tag_end = offset + sub_length;
33478
33479 if (sub_tag_end > tag_len)
33480 {
33481 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33482 return tvb_captured_length(tvb);
33483 }
33484
33485 switch (sub_id) {
33486 case MEASURE_REP_LCI_SUB_REPORTED_LCI0: /* Location Configuration Information (0) */
33487 {
33488 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_lci,
33489 tvb, offset, 16, ENC_NA0x00000000);
33490 offset += 16;
33491 break;
33492 }
33493 case MEASURE_REP_LCI_SUB_REPORTED_Z4: /* Z (4) */
33494 {
33495 static int * const ieee80211_tag_measure_reported_lci_z_sta_floor_info[] = {
33496 &hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move,
33497 &hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number,
33498 NULL((void*)0)
33499 };
33500 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33501 hf_ieee80211_tag_measure_report_lci_z_sta_floor_info,
33502 ett_tag_measure_reported_lci_z_tree,
33503 ieee80211_tag_measure_reported_lci_z_sta_floor_info,
33504 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33505 offset += 2;
33506
33507 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor,
33508 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
33509 offset += 3;
33510
33511 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty,
33512 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33513 offset += 1;
33514 break;
33515 }
33516 case MEASURE_REP_LCI_SUB_REPORTED_URP6: /* Usage Rules/Policy (6) */
33517 {
33518 static int * const ieee80211_tag_measure_reported_lci_urp[] = {
33519 &hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed,
33520 &hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present,
33521 &hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy,
33522 &hf_ieee80211_tag_measure_report_lci_urp_reserved,
33523 NULL((void*)0)
33524 };
33525 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33526 hf_ieee80211_tag_measure_report_lci_urp,
33527 ett_tag_measure_reported_lci_urp_tree,
33528 ieee80211_tag_measure_reported_lci_urp,
33529 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33530 offset += 1;
33531
33532 /* Retention Expires Relative (optional) */
33533 if ((sub_tag_end - 1) == 2 ) {
33534 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative,
33535 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33536 offset += 1;
33537 }
33538 break;
33539 }
33540 default:
33541 /* no default action */
33542 break;
33543 }
33544
33545 if (offset < sub_tag_end)
33546 {
33547 proto_item *tix;
33548 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_unknown,
33549 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33550 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_lci_unknown);
33551 offset = sub_tag_end;
33552 }
33553 }
33554 break;
33555 case 9: /* Transmit Stream Measurement Report */
33556 /* TODO */
33557 case 10: /* Multicast Diagnostics Report */
33558 /* TODO */
33559 case 11: /* Location Civic Report */
33560 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_civic_location_type, tvb, offset, 1, ENC_NA0x00000000);
33561 offset += 1;
33562
33563 while (offset < tag_len)
33564 {
33565 uint8_t sub_id, sub_length, sub_tag_end;
33566 proto_item *sub_elem_item, *sub_elem_len_item;
33567 proto_tree *sub_elem_tree;
33568
33569 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_civic_sub_id,
33570 tvb, offset, 1, ENC_NA0x00000000);
33571 sub_id = tvb_get_uint8(tvb, offset);
33572 offset += 1;
33573
33574 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33575
33576 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33577 tvb, offset, 1, ENC_NA0x00000000);
33578 sub_length = tvb_get_uint8(tvb, offset);
33579 offset += 1;
33580 sub_tag_end = offset + sub_length;
33581
33582 if (sub_tag_end > tag_len)
33583 {
33584 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33585 return tvb_captured_length(tvb);
33586 }
33587
33588 switch (sub_id) {
33589 case MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0: /* Location Civic (0) */
33590 {
33591 uint32_t length;
33592 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_country,
33593 tvb, offset, 2, ENC_ASCII0x00000000);
33594 offset += 2;
33595
33596 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_type,
33597 tvb, offset, 1, ENC_NA0x00000000);
33598 offset += 1;
33599
33600 proto_tree_add_item_ret_uint(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_length,
33601 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &length);
33602 offset += 1;
33603
33604 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic,
33605 tvb, offset, length, ENC_ASCII0x00000000);
33606 offset += length;
33607 break;
33608 }
33609 default:
33610 /* no default action */
33611 break;
33612 }
33613
33614 if (offset < sub_tag_end)
33615 {
33616 proto_item *tix;
33617 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_unknown,
33618 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33619 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_lci_unknown);
33620 offset = sub_tag_end;
33621 }
33622 }
33623 break;
33624 case 12: /* Location Identifier Report */
33625 /* TODO */
33626 case 13: /* Directional Channel Quality Report */
33627 /* TODO */
33628 case 14: /* Directional Measurement Report */
33629 /* TODO */
33630 case 15: /* Directional Statistics Report */
33631 /* TODO */
33632 case 16: /* Fine Timing Measurement range Report */
33633 /* TODO */
33634 default: /* unknown */
33635 break;
33636 }
33637 if (offset < tag_len)
33638 {
33639 proto_item *tix;
33640 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_unknown, tvb, offset, tag_len - offset, ENC_NA0x00000000);
33641 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_unknown);
33642 }
33643 return tvb_captured_length(tvb);
33644}
33645
33646/* 7.3.2.23 Quiet element (40) */
33647static int
33648ieee80211_tag_quiet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33649{
33650 int tag_len = tvb_reported_length(tvb);
33651 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33652 int offset = 0;
33653 if (tag_len != 6)
33654 {
33655 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
33656 return tvb_captured_length(tvb);
33657 }
33658
33659 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_count, tvb, offset, 1, ENC_NA0x00000000);
33660 proto_item_append_text(field_data->item_tag, " Count: %d", tvb_get_uint8(tvb, offset));
33661 offset += 1;
33662
33663 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_period, tvb, offset, 1, ENC_NA0x00000000);
33664 proto_item_append_text(field_data->item_tag, " Period: %d", tvb_get_uint8(tvb, offset));
33665 offset += 1;
33666
33667 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33668 proto_item_append_text(field_data->item_tag, " Duration: %d", tvb_get_letohs(tvb, offset));
33669 offset += 2;
33670
33671 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33672 proto_item_append_text(field_data->item_tag, " Offset: %d", tvb_get_letohs(tvb, offset));
33673
33674 return tvb_captured_length(tvb);
33675}
33676
33677/* 7.3.2.24 IBSS DFS element (41) */
33678static int
33679ieee80211_tag_ibss_dfs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33680{
33681 int tag_len = tvb_reported_length(tvb);
33682 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33683 int offset = 0;
33684 proto_item *ti_sup_map;
33685 proto_tree *sub_map_tree;
33686 if (tag_len < 7)
33687 {
33688 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 7", tag_len);
33689 return tvb_captured_length(tvb);
33690 }
33691
33692 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_owner, tvb, offset, 6, ENC_NA0x00000000);
33693 proto_item_append_text(field_data->item_tag, " Owner: %s", tvb_ether_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_ETHER, offset));
33694 offset += 6;
33695
33696 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_recovery_interval, tvb, offset, 1, ENC_NA0x00000000);
33697 offset += 1;
33698
33699 while (offset < tag_len)
33700 {
33701 ti_sup_map = proto_tree_add_item(tree, hf_ieee80211_tag_dfs_channel_map, tvb, offset, 2, ENC_NA0x00000000);
33702 sub_map_tree = proto_item_add_subtree(ti_sup_map, ett_tag_dfs_map_tree);
33703 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33704 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_map, tvb, offset, 1, ENC_NA0x00000000);
33705 offset += 2;
33706 }
33707 return tvb_captured_length(tvb);
33708}
33709
33710/* 7.3.2.13 ERP Information element (42) */
33711static int
33712ieee80211_tag_erp_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33713{
33714 int tag_len = tvb_reported_length(tvb);
33715 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33716 int offset = 0;
33717 static int * const ieee80211_tag_erp_info_flags[] = {
33718 &hf_ieee80211_tag_erp_info_erp_present,
33719 &hf_ieee80211_tag_erp_info_use_protection,
33720 &hf_ieee80211_tag_erp_info_barker_preamble_mode,
33721 &hf_ieee80211_tag_erp_info_reserved,
33722 NULL((void*)0)
33723 };
33724
33725 if (tag_len != 1)
33726 {
33727 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
33728 return tvb_captured_length(tvb);
33729 }
33730
33731 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_erp_info,
33732 ett_tag_erp_info_tree, ieee80211_tag_erp_info_flags,
33733 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33734
33735 return tvb_captured_length(tvb);
33736}
33737
33738/* 7.3.2.32 TS Delay element (43) */
33739static int
33740ieee80211_tag_ts_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33741{
33742 int tag_len = tvb_reported_length(tvb);
33743 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33744 int offset = 0;
33745 if (tag_len != 4)
33746 {
33747 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
33748 return tvb_captured_length(tvb);
33749 }
33750
33751 proto_tree_add_item(tree, hf_ieee80211_ts_delay, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
33752 proto_item_append_text(field_data->item_tag, " : %d", tvb_get_ntohl(tvb, offset));
33753 return tvb_captured_length(tvb);
33754}
33755
33756/* 7.3.2.33 TCLAS Processing element (44) */
33757static int
33758ieee80211_tag_tclas_process(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33759{
33760 int tag_len = tvb_reported_length(tvb);
33761 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33762 int offset = 0;
33763 if (tag_len != 1)
33764 {
33765 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
33766 return tvb_captured_length(tvb);
33767 }
33768
33769 proto_tree_add_item(tree, hf_ieee80211_tclas_process, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33770 proto_item_append_text(field_data->item_tag, " : %s", val_to_str(pinfo->pool, tvb_get_uint8(tvb, offset), ieee80211_tclas_process_flag, "Unknown %d"));
33771 return tvb_captured_length(tvb);
33772}
33773
33774/* 802.11-2012 8.4.2.37 QoS Capability element (46) */
33775static int
33776ieee80211_tag_qos_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33777{
33778 int tag_len = tvb_reported_length(tvb);
33779 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33780 int offset = 0;
33781 if (tag_len != 1)
33782 {
33783 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
33784 return tvb_captured_length(tvb);
33785 }
33786 dissect_qos_capability(tree, tvb, pinfo, offset, field_data->ftype);
33787 return tvb_captured_length(tvb);
33788}
33789
33790static int
33791ieee80211_tag_rsn_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33792{
33793 int tag_len = tvb_reported_length(tvb);
33794 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33795 int offset = 0;
33796 if (tag_len < 2)
33797 {
33798 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
33799 return tvb_captured_length(tvb);
33800 }
33801
33802 dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len, field_data->sanity_check);
33803 return tvb_captured_length(tvb);
33804}
33805
33806/* 7.3.2.14 Extended Supported Rates element (50) */
33807static int
33808ieee80211_tag_ext_supp_rates(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33809{
33810 int tag_len = tvb_reported_length(tvb);
33811 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33812 int offset = 0;
33813 if (tag_len < 1)
33814 {
33815 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);
33816 return tvb_captured_length(tvb);
33817 }
33818
33819 while (offset < tag_len)
33820 {
33821 proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA0x00000000);
33822 proto_item_append_text(field_data->item_tag, " %s,", val_to_str_ext_const(tvb_get_uint8(tvb, offset), &ieee80211_supported_rates_vals_ext, "Unknown Rate"));
33823 offset += 1;
33824 }
33825 proto_item_append_text(field_data->item_tag, " [Mbit/sec]");
33826 return tvb_captured_length(tvb);
33827}
33828
33829static int
33830ieee80211_tag_cisco_ccx1_ckip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33831{
33832 int tag_len = tvb_reported_length(tvb);
33833 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33834 int offset = 0;
33835 /* From WCS manual:
33836 * If Aironet IE support is enabled, the access point sends an Aironet
33837 * IE 0x85 (which contains the access point name, load, number of
33838 * associated clients, and so on) in the beacon and probe responses of
33839 * this WLAN, and the controller sends Aironet IEs 0x85 and 0x95
33840 * (which contains the management IP address of the controller and
33841 * the IP address of the access point) in the reassociation response
33842 * if it receives Aironet IE 0x85 in the reassociation request.
33843 */
33844
33845 if (tag_len < 26)
33846 {
33847 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u too short, must be >= 26", tag_len);
33848 return tvb_captured_length(tvb);
33849 }
33850 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown, tvb, offset, 10, ENC_NA0x00000000);
33851 offset += 10;
33852
33853 /* The Name of the sending device starts at offset 10 and is up to
33854 15 or 16 bytes in length, \0 padded */
33855 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_name, tvb, offset, 16, ENC_ASCII0x00000000);
33856 offset += 16;
33857
33858 /* Total number off associated clients and repeater access points */
33859 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_clients, tvb, offset, 1, ENC_NA0x00000000);
33860 offset += 1;
33861 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown2, tvb, offset, 3, ENC_NA0x00000000);
33862 return tvb_captured_length(tvb);
33863}
33864
33865static int
33866ieee80211_tag_vendor_specific_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33867{
33868 int tag_len = tvb_reported_length(tvb);
33869 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33870 int offset = 0;
33871 uint32_t tag_vs_len = tag_len;
33872 uint32_t oui;
33873
33874 if (tag_len < 3)
33875 {
33876 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
33877 return tvb_captured_length(tvb);
33878 }
33879
33880 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
33881 proto_item_append_text(field_data->item_tag, ": %s", uint_get_manuf_name_if_known(oui));
33882
33883 offset += 3;
33884 tag_vs_len -= 3;
33885
33886 if (tag_len > 0) {
33887 proto_tree_add_item(field_data->item_tag, hf_ieee80211_tag_vendor_oui_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33888 }
33889
33890 switch (oui) {
33891 /* 802.11 specific vendor ids */
33892 case OUI_WPAWME0x0050F2:
33893 dissect_vendor_ie_wpawme(tree, tvb, pinfo, offset, tag_vs_len, field_data->ftype);
33894 break;
33895 case OUI_RSN0x000FAC:
33896 dissect_vendor_ie_rsn(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33897 break;
33898 case OUI_PRE11N0x00904C:
33899 dissect_vendor_ie_ht(tvb, pinfo, tree, offset, field_data->item_tag, field_data->item_tag_length, tag_vs_len);
33900 break;
33901 case OUI_WFA0x506F9A:
33902 dissect_vendor_ie_wfa(pinfo, field_data->item_tag, tvb);
33903 break;
33904
33905 /* Normal IEEE vendor ids (from oui.h) */
33906 case OUI_CISCOWL0x004096: /* Cisco Wireless (Aironet) */
33907 dissect_vendor_ie_aironet(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33908 break;
33909 case OUI_MARVELL0x005043:
33910 dissect_vendor_ie_marvell(field_data->item_tag, tree, tvb, offset, tag_vs_len);
33911 break;
33912 case OUI_ATHEROS0x00037F:
33913 dissect_vendor_ie_atheros(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo, field_data->item_tag_length);
33914 break;
33915 case OUI_EXTREME_MESH0x000512:
33916 dissect_vendor_ie_extreme_mesh(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo, field_data->item_tag_length);
33917 break;
33918 case OUI_ARUBA0x000B86:
33919 dissect_vendor_ie_aruba(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33920 break;
33921 case OUI_NINTENDO0x001F32:
33922 dissect_vendor_ie_nintendo(field_data->item_tag, tree, tvb, offset, tag_vs_len);
33923 break;
33924 case OUI_ROUTERBOARD0x000C42:
33925 dissect_vendor_ie_routerboard(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33926 break;
33927 case OUI_MERU0x000CE6:
33928 dissect_vendor_ie_meru(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33929 break;
33930 case OUI_ZEBRA_EXTREME0x00A0F8:
33931 dissect_vendor_ie_extreme(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33932 break;
33933 case OUI_AEROHIVE0x001977:
33934 dissect_vendor_ie_aerohive(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33935 break;
33936 case OUI_MIST0x5C5B35:
33937 dissect_vendor_ie_mist(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33938 break;
33939 case OUI_UBIQUITI0x00156D:
33940 dissect_vendor_ie_ubiquiti(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33941 break;
33942 case OUI_RUCKUS0x001392:
33943 dissect_vendor_ie_ruckus(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33944 break;
33945 case OUI_ALCATEL_LUCENT0xDC0856:
33946 dissect_vendor_ie_alcatel(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33947 break;
33948 case OUI_SGDSN0x6A5C35:
33949 dissect_vendor_ie_sgdsn(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33950 break;
33951 case OUI_FORTINET0x00090F:
33952 dissect_vendor_ie_fortinet(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33953 break;
33954 case OUI_MOJO_ARISTA0x001174:
33955 dissect_vendor_ie_arista(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33956 break;
33957 case OUI_WISUN0x0C5A9E:
33958 dissect_vendor_ie_wisun(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33959 break;
33960 case OUI_APPLE0x0017f2:
33961 dissect_vendor_ie_apple(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
33962 break;
33963 default:
33964 proto_tree_add_item(tree, hf_ieee80211_tag_vendor_data, tvb, offset + 1, tag_vs_len - 1, ENC_NA0x00000000);
33965 break;
33966 }
33967
33968 return tvb_captured_length(tvb);
33969}
33970
33971static void
33972dissect_symbol_proprietary_ie_extreme(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
33973 tvbuff_t *tvb, int offset, uint32_t tag_len _U___attribute__((unused)),
33974 packet_info *pinfo _U___attribute__((unused)))
33975{
33976 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_assoc_clients, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33977 offset += 2;
33978
33979 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_load_kbps, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33980 offset += 2;
33981
33982 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_load_pps, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33983 offset += 2;
33984
33985 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_client_tx_power, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33986 offset += 2;
33987
33988 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_timestamp, tvb, offset, 4, ENC_TIME_SECS0x00000012|ENC_LITTLE_ENDIAN0x80000000);
33989}
33990
33991static int
33992ieee80211_tag_symbol_proprietary_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33993{
33994 int tag_len = tvb_reported_length(tvb);
33995 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33996 int offset = 0;
33997 uint32_t tag_vs_len = tag_len;
33998 uint32_t oui;
33999
34000 if (tag_len < 3)
34001 {
34002 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
34003 return tvb_captured_length(tvb);
34004 }
34005
34006 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_symbol_proprietary_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
34007 proto_item_append_text(field_data->item_tag, ": %s", uint_get_manuf_name_if_known(oui));
34008
34009 offset += 3;
34010 tag_vs_len -= 3;
34011
34012 switch (oui) {
34013 /* 802.11 specific vendor ids */
34014 case OUI_ZEBRA_EXTREME0x00A0F8:
34015 dissect_symbol_proprietary_ie_extreme(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34016 break;
34017 default:
34018 proto_tree_add_item(tree, hf_ieee80211_tag_symbol_proprietary_data, tvb, offset, tag_vs_len, ENC_NA0x00000000);
34019 break;
34020 }
34021
34022 return tvb_captured_length(tvb);
34023}
34024
34025#define HE_HTC_HE_SUPPORT0x00000001 0x00000001
34026#define HE_DYNAMIC_FRAGMENTATION_SUPPORT0x00000018 0x00000018
34027#define HE_ALL_ACK_SUPPORT0x00000200 0x00000200
34028#define HE_UMRS_SUPPORT0x00000400 0x00000400
34029#define HE_BSR_SUPPORT0x00000800 0x00000800
34030
34031static const val64_string he_dynamic_fragmentation_support_vals[] = {
34032 { 0, "No support for dynamic fragmentation" },
34033 { 1, "Level 1 dynamic fragmentation support" },
34034 { 2, "Level 2 dynamic fragmentation support" },
34035 { 3, "Level 3 dynamic fragmentation support" },
34036 { 0, NULL((void*)0) }
34037};
34038
34039static const val64_string he_minimum_fragmentation_size_vals[] = {
34040 { 0, "No restriction on minimum payload size" },
34041 { 1, "Minimum payload size of 128 bytes" },
34042 { 2, "Minimum payload size of 256 bytes" },
34043 { 3, "Minimum payload size of 512 bytes" },
34044 { 0, NULL((void*)0) }
34045};
34046
34047static const val64_string he_trigger_mac_padding_dur_vals[] = {
34048 { 0, "0" },
34049 { 1, "8 uS" },
34050 { 2, "16 uS" },
34051 { 3, "Reserved" },
34052 { 0, NULL((void*)0) }
34053};
34054
34055static void
34056max_frag_msdus_base_custom(char *result, uint32_t max_frag_msdus_value)
34057{
34058 if (max_frag_msdus_value == 7)
34059 snprintf(result, ITEM_LABEL_LENGTH240, "No restriction");
34060 else
34061 snprintf(result, ITEM_LABEL_LENGTH240, "%u", 1 << max_frag_msdus_value);
34062}
34063
34064static const val64_string he_link_adaptation_support_vals[] = {
34065 { 0, "No feedback if the STA does not provide HE MFB" },
34066 { 1, "Reserved" },
34067 { 2, "Unsolicited if the STA can receive and provide only unsolicited HE MFB" },
34068 { 3, "Both" },
34069 { 0, NULL((void*)0) }
34070};
34071
34072static const val64_string he_mimo_cntrl_nc_index_vals[] = {
34073 {0x00, "1 Column"},
34074 {0x01, "2 Columns"},
34075 {0x02, "3 Columns"},
34076 {0x03, "4 Columns"},
34077 {0x04, "5 Columns"},
34078 {0x05, "6 Columns"},
34079 {0x06, "7 Columns"},
34080 {0x07, "8 Columns"},
34081 {0, NULL((void*)0)}
34082};
34083
34084static const val64_string he_mimo_cntrl_nr_index_vals[] = {
34085 {0x00, "1 Row"},
34086 {0x01, "2 Rows"},
34087 {0x02, "3 Rows"},
34088 {0x03, "4 Rows"},
34089 {0x04, "5 Rows"},
34090 {0x05, "6 Rows"},
34091 {0x06, "7 Rows"},
34092 {0x07, "8 Rows"},
34093 {0, NULL((void*)0)}
34094};
34095
34096static const val64_string he_mimo_cntrl_grouping_flags[] = {
34097 { 0x00, "Carrier Groups of 4" },
34098 { 0x01, "Carrier Groups of 16" },
34099 { 0, NULL((void*)0) }
34100};
34101
34102static const val64_string he_mimo_cntrl_feedback_vals[] = {
34103 { 0x00, "SU" },
34104 { 0x01, "MU" },
34105 { 0x02, "CQI feedback" },
34106 { 0x03, "Reserved" },
34107 { 0, NULL((void*)0) }
34108};
34109
34110static int * const he_phy_first_byte_headers[] = {
34111 &hf_ieee80211_he_phy_cap_reserved_b0,
34112 NULL((void*)0),
34113};
34114
34115static int * const he_phy_b8_to_b23_headers[] = {
34116 &hf_ieee80211_he_phy_cap_punctured_preamble_rx,
34117 &hf_ieee80211_he_phy_cap_device_class,
34118 &hf_ieee80211_he_phy_cap_ldpc_coding_in_payload,
34119 &hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us,
34120 &hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts,
34121 &hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us,
34122 &hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz,
34123 &hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz,
34124 &hf_ieee80211_he_phy_cap_doppler_tx,
34125 &hf_ieee80211_he_phy_cap_doppler_rx,
34126 &hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo,
34127 &hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo,
34128 NULL((void*)0)
34129};
34130
34131static int * const he_phy_b24_to_b39_headers[] = {
34132 &hf_ieee80211_he_phy_cap_dcm_max_constellation_tx,
34133 &hf_ieee80211_he_phy_cap_dcm_max_nss_tx,
34134 &hf_ieee80211_he_phy_cap_dcm_max_constellation_rx,
34135 &hf_ieee80211_he_phy_cap_dcm_max_nss_rx,
34136 &hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu,
34137 &hf_ieee80211_he_phy_cap_su_beamformer,
34138 &hf_ieee80211_he_phy_cap_su_beamformee,
34139 &hf_ieee80211_he_phy_cap_mu_beamformer,
34140 &hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz,
34141 &hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz,
34142 NULL((void*)0)
34143};
34144
34145static int * const he_phy_b40_to_b55_headers[] = {
34146 &hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80,
34147 &hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80,
34148 &hf_ieee80211_he_phy_cap_ng_eq_16_su_fb,
34149 &hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb,
34150 &hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb,
34151 &hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb,
34152 &hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb,
34153 &hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb,
34154 &hf_ieee80211_he_phy_cap_triggered_cqi_fb,
34155 &hf_ieee80211_he_phy_cap_partial_bw_extended_range,
34156 &hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo,
34157 &hf_ieee80211_he_phy_cap_ppe_threshold_present,
34158 NULL((void*)0)
34159};
34160
34161static int * const he_phy_b56_to_b71_headers[] = {
34162 &hf_ieee80211_he_phy_cap_psr_based_sr_support,
34163 &hf_ieee80211_he_phy_cap_power_boost_factor_ar_support,
34164 &hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi,
34165 &hf_ieee80211_he_phy_cap_max_nc,
34166 &hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz,
34167 &hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz,
34168 &hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi,
34169 &hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band,
34170 &hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu,
34171 &hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu,
34172 &hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi,
34173 &hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf,
34174 &hf_ieee80211_he_phy_cap_dcm_max_ru,
34175 NULL((void*)0)
34176};
34177
34178static int * const he_phy_b72_to_b87_headers[] = {
34179 &hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support,
34180 &hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback,
34181 &hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support,
34182 &hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support,
34183 &hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb,
34184 &hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb,
34185 &hf_ieee80211_he_phy_cap_nominal_packet_padding,
34186 &hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max,
34187 &hf_ieee80211_he_phy_cap_b81_b87_reserved,
34188 NULL((void*)0)
34189};
34190
34191static int * const he_mcs_map_80_rx_headers [] = {
34192 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss,
34193 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss,
34194 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss,
34195 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss,
34196 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss,
34197 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss,
34198 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss,
34199 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss,
34200 NULL((void*)0)
34201};
34202
34203static int * const he_mcs_map_80_tx_headers [] = {
34204 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss,
34205 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss,
34206 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss,
34207 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss,
34208 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss,
34209 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss,
34210 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss,
34211 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss,
34212 NULL((void*)0)
34213};
34214
34215static int * const he_mcs_map_80p80_rx_headers [] = {
34216 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss,
34217 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss,
34218 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss,
34219 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss,
34220 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss,
34221 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss,
34222 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss,
34223 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss,
34224 NULL((void*)0)
34225};
34226
34227static int * const he_mcs_map_80p80_tx_headers [] = {
34228 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss,
34229 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss,
34230 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss,
34231 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss,
34232 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss,
34233 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss,
34234 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss,
34235 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss,
34236 NULL((void*)0)
34237};
34238
34239static int * const he_mcs_map_160_rx_headers [] = {
34240 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss,
34241 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss,
34242 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss,
34243 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss,
34244 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss,
34245 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss,
34246 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss,
34247 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss,
34248 NULL((void*)0)
34249};
34250
34251static int * const he_mcs_map_160_tx_headers [] = {
34252 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss,
34253 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss,
34254 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss,
34255 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss,
34256 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss,
34257 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss,
34258 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss,
34259 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss,
34260 NULL((void*)0)
34261};
34262
34263static const value_string ru_alloc_vals[] = {
34264 { 0, "242" },
34265 { 1, "484" },
34266 { 2, "996" },
34267 { 3, "2x996" },
34268 { 0, NULL((void*)0) }
34269};
34270
34271static const value_string constellation_vals[] = {
34272 { 0, "BPSK" },
34273 { 1, "QPSK" },
34274 { 2, "16-QAM" },
34275 { 3, "64-QAM" },
34276 { 4, "256-QAM" },
34277 { 5, "1024-QAM" },
34278 { 6, "Reserved" },
34279 { 7, "None" },
34280 { 0, NULL((void*)0) }
34281};
34282
34283#define HE_CHANNEL_WIDTH_SET_B20x04 0x04
34284#define HE_CHANNEL_WIDTH_SET_B30x08 0x08
34285
34286static void
34287dissect_he_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34288 int offset, int len)
34289{
34290 int *he_mac_headers[] = {
34291 &hf_ieee80211_he_htc_he_support, /* 0 */
34292 &hf_ieee80211_he_twt_requester_support, /* 1 */
34293 &hf_ieee80211_he_twt_responder_support, /* 2 */
34294 &hf_ieee80211_he_dynamic_fragmentation_support, /* 3 */
34295 &hf_ieee80211_he_max_number_fragmented_msdus, /* 4 */
34296 &hf_ieee80211_he_min_fragment_size, /* 5 */
34297 &hf_ieee80211_he_trigger_frame_mac_padding_dur, /* 6 */
34298 &hf_ieee80211_he_multi_tid_aggregation_rx_support, /* 7 */
34299 &hf_ieee80211_he_he_link_adaptation_support, /* 8 */
34300 &hf_ieee80211_he_all_ack_support, /* 9 */
34301 &hf_ieee80211_he_trs_support, /* 10 */
34302 &hf_ieee80211_he_bsr_support, /* 11 */
34303 &hf_ieee80211_he_broadcast_twt_support, /* 12 */
34304 &hf_ieee80211_he_32_bit_ba_bitmap_support, /* 13 */
34305 &hf_ieee80211_he_mu_cascading_support, /* 14 */
34306 &hf_ieee80211_he_ack_enabled_aggregation_support, /* 15 */
34307 &hf_ieee80211_he_reserved_b24, /* 16 */
34308 &hf_ieee80211_he_om_control_support, /* 17 */
34309 &hf_ieee80211_he_ofdma_ra_support, /* 18 */
34310 &hf_ieee80211_he_max_a_mpdu_length_exponent_ext, /* 19 */
34311 &hf_ieee80211_he_a_msdu_fragmentation_support, /* 20 */
34312 &hf_ieee80211_he_flexible_twt_schedule_support, /* 21 */
34313 &hf_ieee80211_he_rx_control_frame_to_multibss, /* 22 */
34314 &hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation, /* 23 */
34315 &hf_ieee80211_he_qtp_support, /* 24 */
34316 &hf_ieee80211_he_bqr_support, /* 25 */
34317 &hf_ieee80211_he_psr_responder, /* 26 */
34318 &hf_ieee80211_he_ndp_feedback_report_support, /* 27 */
34319 &hf_ieee80211_he_ops_support, /* 28 */
34320 &hf_ieee80211_he_a_msdu_in_a_mpdu_support, /* 29 */
34321 &hf_ieee80211_he_multi_tid_aggregation_tx_support, /* 30 */
34322 &hf_ieee80211_he_subchannel_selective_trans_support, /* 31 */
34323 &hf_ieee80211_he_2_996_tone_ru_support, /* 32 */
34324 &hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support, /* 33 */
34325 &hf_ieee80211_he_dynamic_sm_power_save, /* 34 */
34326 &hf_ieee80211_he_punctured_sounding_support, /* 35 */
34327 &hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support, /* 36 */
34328 NULL((void*)0)
34329 };
34330 int * he_phy_channel_width_set_headers[] = {
34331 &hf_ieee80211_he_40mhz_channel_2_4ghz,
34332 &hf_ieee80211_he_40_and_80_mhz_5ghz,
34333 &hf_ieee80211_he_160_mhz_5ghz,
34334 &hf_ieee80211_he_160_80_plus_80_mhz_5ghz,
34335 &hf_ieee80211_he_242_tone_rus_in_2_4ghz,
34336 &hf_ieee80211_he_242_tone_rus_in_5ghz,
34337 &hf_ieee80211_he_chan_width_reserved,
34338 NULL((void*)0)
34339 };
34340
34341 uint64_t he_mac_caps = tvb_get_letoh40(tvb, offset);
34342 uint8_t phy_channel_width_set = 0;
34343 proto_tree *phy_cap_tree = NULL((void*)0);
34344 unsigned he_mcs_and_nss_len = 4;
34345 proto_tree *sup_he_mcs_and_nss_tree = NULL((void*)0);
34346 proto_tree *rx_tx_he_mcs_map_80 = NULL((void*)0);
34347 proto_tree *rx_tx_he_mcs_map_160 = NULL((void*)0);
34348 proto_tree *rx_tx_he_mcs_map_80_80 = NULL((void*)0);
34349
34350 /* Is this 2.4GHz or 5GHz? */
34351 if (pinfo->pseudo_header->ieee_802_11.has_frequency) {
34352 if (IS_2_4_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 2400
&& pinfo->pseudo_header->ieee_802_11.frequency
<= 2500)
) {
34353 he_phy_channel_width_set_headers[1] = &hf_ieee80211_he_24ghz_b1_reserved;
34354 he_phy_channel_width_set_headers[2] = &hf_ieee80211_he_24ghz_b2_reserved;
34355 he_phy_channel_width_set_headers[3] = &hf_ieee80211_he_24ghz_b3_reserved;
34356 he_phy_channel_width_set_headers[5] = &hf_ieee80211_he_24ghz_b5_reserved;
34357 } else {
34358 he_phy_channel_width_set_headers[0] = &hf_ieee80211_he_5ghz_b0_reserved;
34359 he_phy_channel_width_set_headers[4] = &hf_ieee80211_he_5ghz_b4_reserved;
34360 }
34361 }
34362
34363 /* Change some header fields depending on HE_HTC_HE_SUPPORT and FRAGMENTATION */
34364 if (!(he_mac_caps & HE_HTC_HE_SUPPORT0x00000001)) {
34365 he_mac_headers[8] = &hf_ieee80211_he_reserved_bits_15_16;
34366 he_mac_headers[10] = &hf_ieee80211_he_reserved_bit_18;
34367 he_mac_headers[11] = &hf_ieee80211_he_reserved_bit_19;
34368 he_mac_headers[17] = &hf_ieee80211_he_reserved_bit_25;
34369 he_mac_headers[25] = &hf_ieee80211_he_reserved_bit_34;
34370 }
34371 if (!(he_mac_caps & HE_DYNAMIC_FRAGMENTATION_SUPPORT0x00000018)) {
34372 he_mac_headers[4] = &hf_ieee80211_he_reserved_bits_5_7;
34373 he_mac_headers[5] = &hf_ieee80211_he_reserved_bits_8_9;
34374 he_mac_headers[20] = &hf_ieee80211_he_reserved_bit_29;
34375 }
34376
34377 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_mac_capabilities,
34378 ett_he_mac_capabilities, he_mac_headers,
34379 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34380 offset += 6;
34381
34382 /* Get and isolate the phy channel width set */
34383 phy_channel_width_set = tvb_get_uint8(tvb, offset) >> 1;
34384 /* Save this info so we can refer to it later. It might need to be global */
34385 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, HE_CHANNEL_WIDTH_KEY,
34386 GINT_TO_POINTER(phy_channel_width_set | (1<<31))((gpointer) (glong) (phy_channel_width_set | (1<<31))));
34387
34388 phy_cap_tree = proto_tree_add_subtree(tree, tvb, offset, 11, ett_he_phy_capabilities,
34389 NULL((void*)0),
34390 "HE PHY Capabilities Information");
34391
34392 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34393 hf_ieee80211_he_phy_reserved_b0, ett_he_phy_cap_first_byte,
34394 he_phy_first_byte_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34395 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34396 hf_ieee80211_he_phy_chan_width_set, ett_he_phy_cap_chan_width_set,
34397 he_phy_channel_width_set_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34398 offset++;
34399 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34400 hf_ieee80211_he_phy_b8_to_b23, ett_he_phy_cap_b8_to_b23,
34401 he_phy_b8_to_b23_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34402 offset += 2;
34403 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34404 hf_ieee80211_he_phy_b24_to_b39, ett_he_phy_cap_b24_to_b39,
34405 he_phy_b24_to_b39_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34406 offset += 2;
34407 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34408 hf_ieee80211_he_phy_b40_to_b55, ett_he_phy_cap_b40_to_b55,
34409 he_phy_b40_to_b55_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34410 offset += 2;
34411 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34412 hf_ieee80211_he_phy_b56_to_b71, ett_he_phy_cap_b56_to_b71,
34413 he_phy_b56_to_b71_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34414 offset += 2;
34415 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34416 hf_ieee80211_he_phy_b72_to_b87, ett_he_phy_cap_b72_to_b87,
34417 he_phy_b72_to_b87_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34418 offset += 2;
34419
34420 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34421 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34422 "Insufficient bytes for Phy Capabilities "
34423 "Rx and Tx Maps 80MHz!");
34424 return;
34425 }
34426
34427 /* Need the length first */
34428 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B20x04)
34429 he_mcs_and_nss_len += 4;
34430
34431 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B30x08)
34432 he_mcs_and_nss_len += 4;
34433
34434 sup_he_mcs_and_nss_tree = proto_tree_add_subtree(tree, tvb, offset,
34435 he_mcs_and_nss_len, ett_he_mcs_and_nss_set, NULL((void*)0),
34436 "Supported HE-MCS and NSS Set");
34437 rx_tx_he_mcs_map_80 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree, tvb,
34438 offset, 4, ett_he_rx_tx_he_mcs_map_lte_80, NULL((void*)0),
34439 "Rx and Tx MCS Maps <= 80 MHz");
34440 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80, tvb, offset,
34441 hf_ieee80211_he_rx_he_mcs_map_lte_80,
34442 ett_he_rx_mcs_map_lte_80, he_mcs_map_80_rx_headers,
34443 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34444 offset += 2;
34445
34446 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34447 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34448 "Insufficient bytes for Phy Capabilities "
34449 "Tx Maps 80MHz!");
34450 return;
34451 }
34452
34453 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80, tvb, offset,
34454 hf_ieee80211_he_tx_he_mcs_map_lte_80,
34455 ett_he_tx_mcs_map_lte_80, he_mcs_map_80_tx_headers,
34456 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34457 offset += 2;
34458
34459 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B20x04) {
34460 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34461 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34462 "Insufficient bytes for Phy Capabilities "
34463 "Rx and Tx MCS Maps 160MHz!");
34464 return;
34465 }
34466 rx_tx_he_mcs_map_160 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree,
34467 tvb, offset, 4, ett_he_rx_tx_he_mcs_map_160, NULL((void*)0),
34468 "Rx and Tx MCS Maps 160 MHz");
34469 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_160, tvb, offset,
34470 hf_ieee80211_he_rx_he_mcs_map_160,
34471 ett_he_rx_mcs_map_160, he_mcs_map_160_rx_headers,
34472 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34473 offset += 2;
34474
34475 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34476 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34477 "Insufficient bytes for Phy Capabilities "
34478 "Tx MCS Maps 160MHz!");
34479 return;
34480 }
34481
34482 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_160, tvb, offset,
34483 hf_ieee80211_he_tx_he_mcs_map_160,
34484 ett_he_tx_mcs_map_160, he_mcs_map_160_tx_headers,
34485 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34486 offset += 2;
34487 }
34488
34489 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B30x08) {
34490 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34491 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34492 "Insufficient bytes for Phy Capabilities "
34493 "Rx and Tx MCS Maps 80+80 MHz!");
34494 return;
34495 }
34496
34497 rx_tx_he_mcs_map_80_80 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree,
34498 tvb, offset, 4, ett_he_rx_tx_he_mcs_map_80_80, NULL((void*)0),
34499 "Rx and Tx MCS Maps 80+80 MHz");
34500 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80_80, tvb, offset,
34501 hf_ieee80211_he_rx_he_mcs_map_80_80,
34502 ett_he_rx_mcs_map_80_80, he_mcs_map_80p80_rx_headers,
34503 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34504 offset += 2;
34505 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80_80, tvb, offset,
34506 hf_ieee80211_he_tx_he_mcs_map_80_80,
34507 ett_he_tx_mcs_map_80_80, he_mcs_map_80p80_tx_headers,
34508 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34509 offset += 2;
34510 }
34511
34512 if (offset < len) {
34513 uint8_t ppe_thresholds_field = tvb_get_uint8(tvb, offset);
34514 uint8_t nss_count = ppe_thresholds_field & 0x07, nss_index = 0;
34515 uint8_t ru_index_bitmask = (ppe_thresholds_field >> 3) & 0x0F;
34516 proto_tree *ppe_tree = NULL((void*)0);
34517 int i = 0;
34518 int bit_offset = 7; /* How many bits we are into the bytes */
34519
34520 ppe_tree = proto_tree_add_subtree(tree, tvb, offset, len - offset + 1,
34521 ett_he_ppe_threshold, NULL((void*)0),
34522 "PPE Thresholds");
34523 proto_tree_add_item(ppe_tree, hf_ieee80211_he_ppe_thresholds_nss, tvb, offset,
34524 1, ENC_NA0x00000000);
34525 proto_tree_add_item(ppe_tree, hf_ieee80211_he_ppe_thresholds_ru_index_bitmask, tvb,
34526 offset, 1, ENC_NA0x00000000);
34527
34528 /*
34529 * Now, for each of the nss values, add a sub-tree with its thresholds.
34530 * The actual count is one more than the number in the first three bits.
34531 */
34532 while (nss_index < nss_count + 1) {
34533 int start_offset = 0;
34534 proto_tree *nss_tree = NULL((void*)0);
34535 proto_item *nssti = NULL((void*)0);
34536 uint8_t l_ru_bitmask = ru_index_bitmask;
34537
34538 nss_tree = proto_tree_add_subtree_format(ppe_tree, tvb, offset, -1,
34539 ett_he_ppe_nss, &nssti, "NSS %d", nss_index);
34540 start_offset = offset;
34541
34542 for (i = 0; i < 4; i++) {
34543 if (l_ru_bitmask & 0x01) {
34544 int bits_avail = 8 - bit_offset, bits_needed = 6 - bits_avail;
34545 uint8_t the_bits = 0;
34546 int ru_start_offset = offset;
34547 proto_tree *ru_alloc_tree = NULL((void*)0);
34548 proto_item *rualti = NULL((void*)0);
34549
34550 ru_alloc_tree = proto_tree_add_subtree_format(nss_tree, tvb, offset,
34551 -1, ett_he_ppe_ru_alloc, &rualti,
34552 "RU allocation: %s",
34553 val_to_str_const(i, ru_alloc_vals, "Unk"));
34554
34555 /*
34556 * Assemble the bits we require ... we need 6, or 2x3
34557 */
34558 if (bits_avail >= 6) { /* We can use the current byte */
34559 the_bits = (tvb_get_uint8(tvb, offset) >> bit_offset) & 0x3F;
34560 } else { /* We need two adjacent bytes */
34561 the_bits = (tvb_get_uint8(tvb, offset) >> bit_offset);
34562 offset++;
34563 the_bits = the_bits |
34564 ((tvb_get_uint8(tvb, offset) &
34565 ((1 << bits_needed) - 1)) << bits_avail);
34566 }
34567 /*
34568 * Now we have two three bit fields, use them.
34569 */
34570 proto_tree_add_uint(ru_alloc_tree, hf_ieee80211_he_ppe_ppet16, tvb, ru_start_offset,
34571 offset - ru_start_offset + 1, the_bits & 0x07);
34572 proto_tree_add_uint(ru_alloc_tree, hf_ieee80211_he_ppe_ppet8, tvb, ru_start_offset,
34573 offset - ru_start_offset + 1, the_bits >> 3);
34574
34575 bit_offset = (bit_offset + 6) % 8;
34576 proto_item_set_len(rualti, offset - ru_start_offset + 1);
34577 }
34578 l_ru_bitmask = l_ru_bitmask >> 1;
34579 }
34580
34581
34582 proto_item_set_len(nssti, offset - start_offset);
34583 nss_index++;
34584 }
34585 }
34586
34587 /* Add an Expert Info about extra bytes ... */
34588
34589}
34590
34591static int * const he_operation_headers[] = {
34592 &hf_ieee80211_he_operation_default_pe_duration,
34593 &hf_ieee80211_he_operation_twt_required,
34594 &hf_ieee80211_he_operation_txop_duration_rts_threshold,
34595 &hf_ieee80211_he_operation_vht_operation_information_present,
34596 &hf_ieee80211_he_operation_co_hosted_bss,
34597 &hf_ieee80211_he_operation_er_su_disable,
34598 &hf_ieee80211_he_operation_6ghz_operation_information_present,
34599 &hf_ieee80211_he_operation_reserved_b16_b23,
34600 NULL((void*)0)
34601};
34602
34603static int * const he_bss_color_info_headers[] = {
34604 &hf_ieee80211_he_bss_color_info_bss_color,
34605 &hf_ieee80211_he_bss_color_partial_bss_color,
34606 &hf_ieee80211_he_bss_color_bss_color_disabled,
34607 NULL((void*)0)
34608};
34609
34610static int * const he_operation_6ghz_control[] = {
34611 &hf_ieee80211_he_operation_6ghz_control_channel_width,
34612 &hf_ieee80211_he_operation_6ghz_control_duplicate_beacon,
34613 &hf_ieee80211_he_operation_6ghz_control_regulatory_info,
34614 &hf_ieee80211_he_operation_6ghz_control_reserved,
34615 NULL((void*)0)
34616};
34617
34618static const value_string he_mcs_map_vals[] = {
34619 { 0, "Support for HE-MCS 0-7" },
34620 { 1, "Support for HE-MCS 0-9" },
34621 { 2, "Support for HE-MCS 0-11" },
34622 { 3, "Not supported for HE PPDUs" },
34623 { 0, NULL((void*)0) }
34624};
34625
34626static int * const he_basic_he_mcs_header[] = {
34627 &hf_ieee80211_he_oper_max_he_mcs_for_1_ss,
34628 &hf_ieee80211_he_oper_max_he_mcs_for_2_ss,
34629 &hf_ieee80211_he_oper_max_he_mcs_for_3_ss,
34630 &hf_ieee80211_he_oper_max_he_mcs_for_4_ss,
34631 &hf_ieee80211_he_oper_max_he_mcs_for_5_ss,
34632 &hf_ieee80211_he_oper_max_he_mcs_for_6_ss,
34633 &hf_ieee80211_he_oper_max_he_mcs_for_7_ss,
34634 &hf_ieee80211_he_oper_max_he_mcs_for_8_ss,
34635 NULL((void*)0)
34636};
34637
34638#define VHT_OPERATION_INFORMATION_PRESENT0x004000 0x004000
34639#define CO_HOSTED_BSS0x008000 0x008000
34640#define SIXGHZ_OPERATION_INFORMATION_PRESENT0x020000 0x020000
34641
34642static const value_string channel_width_vals[] = {
34643 { 0, "20 MHz or 40 MHz BSS Bandwidth" },
34644 { 1, "80 MHz, 160 MHz or 80+80 MHz BSS Bandwidth" },
34645 { 2, "160 MHz BSS Bandwidth (deprecated)" },
34646 { 3, "Non-contiguous 80+80 MHz BSS Bandwidth (deprecated)" },
34647 { 0, NULL((void*)0) }
34648};
34649
34650static void
34651dissect_he_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34652 int offset, int len _U___attribute__((unused)))
34653{
34654 uint32_t op_params = tvb_get_letoh24(tvb, offset);
34655
34656 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34657 hf_ieee80211_he_operation_parameter, ett_he_operation_params,
34658 he_operation_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34659 offset += 3;
34660
34661 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34662 hf_ieee80211_he_bss_color_information, ett_he_bss_color_information,
34663 he_bss_color_info_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34664 offset += 1;
34665
34666 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34667 hf_ieee80211_he_operation_basic_mcs, ett_he_oper_basic_mcs,
34668 he_basic_he_mcs_header, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34669 offset += 2;
34670
34671 if (op_params & VHT_OPERATION_INFORMATION_PRESENT0x004000) {
34672 proto_tree *vht_op_info = NULL((void*)0);
34673
34674 vht_op_info = proto_tree_add_subtree(tree, tvb, offset, 3,
34675 ett_he_operation_vht_op_info, NULL((void*)0),
34676 "VHT Operation Information");
34677 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_width, tvb,
34678 offset, 1, ENC_NA0x00000000);
34679 offset++;
34680
34681 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_center_freq_0,
34682 tvb, offset, 1, ENC_NA0x00000000);
34683 offset++;
34684
34685 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_center_freq_1,
34686 tvb, offset, 1, ENC_NA0x00000000);
34687 offset++;
34688 }
34689
34690 if (op_params & CO_HOSTED_BSS0x008000) {
34691 proto_tree_add_item(tree, hf_ieee80211_he_operation_max_co_hosted_bssid_indicator,
34692 tvb, offset, 1, ENC_NA0x00000000);
34693 offset++;
34694 }
34695
34696 if (op_params & SIXGHZ_OPERATION_INFORMATION_PRESENT0x020000) {
34697 proto_tree *sixghz_tree = NULL((void*)0);
34698
34699 sixghz_tree = proto_tree_add_subtree(tree, tvb, offset, 5,
34700 ett_he_operation_6ghz, NULL((void*)0),
34701 "6 GHz Operation Information");
34702 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_primary_channel, tvb,
34703 offset, 1, ENC_NA0x00000000);
34704 offset++;
34705
34706 proto_tree_add_bitmask_with_flags(sixghz_tree, tvb, offset,
34707 hf_ieee80211_he_operation_6ghz_control, ett_he_operation_6ghz_control,
34708 he_operation_6ghz_control, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34709 offset++;
34710
34711 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_channel_center_freq_0,
34712 tvb, offset, 1, ENC_NA0x00000000);
34713 offset++;
34714
34715 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_channel_center_freq_1,
34716 tvb, offset, 1, ENC_NA0x00000000);
34717 offset++;
34718
34719 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_minimum_rate,
34720 tvb, offset, 1, ENC_NA0x00000000);
34721 offset++;
34722 }
34723}
34724
34725static int * const uora_headers[] = {
34726 &hf_ieee80211_he_uora_eocwmin,
34727 &hf_ieee80211_he_uora_owcwmax,
34728 &hf_ieee80211_he_uora_reserved,
34729 NULL((void*)0)
34730};
34731
34732static void
34733dissect_uora_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34734 int offset)
34735{
34736 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34737 hf_ieee80211_he_uora_field, ett_he_uora_tree, uora_headers,
34738 ENC_NA0x00000000, BMT_NO_APPEND0x01);
34739 offset++;
34740}
34741
34742static int * const muac_aci_aifsn_headers[] = {
34743 &hf_ieee80211_he_muac_aifsn,
34744 &hf_ieee80211_he_muac_acm,
34745 &hf_ieee80211_he_muac_aci,
34746 &hf_ieee80211_he_muac_reserved,
34747 NULL((void*)0)
34748};
34749
34750static int
34751dissect_muac_param_record(tvbuff_t *tvb, proto_tree *tree, int offset)
34752{
34753 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34754 hf_ieee80211_he_muac_aci_aifsn, ett_he_aic_aifsn,
34755 muac_aci_aifsn_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34756 offset++;
34757
34758 proto_tree_add_item(tree, hf_ieee80211_he_muac_ecwmin_ecwmax, tvb, offset, 1, ENC_NA0x00000000);
34759 offset++;
34760
34761 proto_tree_add_item(tree, hf_ieee80211_he_mu_edca_timer, tvb, offset, 1, ENC_NA0x00000000);
34762 offset++;
34763
34764 return offset;
34765}
34766
34767static int
34768dissect_mu_edca_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34769 int offset, int len _U___attribute__((unused)))
34770{
34771 proto_tree *param_tree = NULL((void*)0);
34772
34773 /* Is this from an AP or an STA? */
34774 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
34775 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
34776 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34777 offset++;
34778
34779 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34780 NULL((void*)0), "MUAC_BE Parameter Record");
34781 offset = dissect_muac_param_record(tvb, param_tree, offset);
34782
34783 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34784 NULL((void*)0), "MUAC_BK Parameter Record");
34785 offset = dissect_muac_param_record(tvb, param_tree, offset);
34786
34787 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34788 NULL((void*)0), "MUAC_VI Parameter Record");
34789 offset = dissect_muac_param_record(tvb, param_tree, offset);
34790
34791 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
34792 NULL((void*)0), "MUAC_VO Parameter Record");
34793 offset = dissect_muac_param_record(tvb, param_tree, offset);
34794
34795 return offset;
34796}
34797
34798#define SRP_DISALLOWED0x01 0x01
34799#define NON_SRG_OBSS_PD_SR_DISALLOWED0x02 0x02
34800#define NON_SRG_OFFSET_PRESENT0x04 0x04
34801#define SRG_INFORMATION_PRESENT0x08 0x08
34802#define HESIGA_SPATIAL_REUSE_VAL15_ALLOWED0x10 0x10
34803
34804static int * const sr_control_field_headers[] = {
34805 &hf_ieee80211_he_srp_disallowed,
34806 &hf_ieee80211_he_non_srg_obss_pd_sr_disallowed,
34807 &hf_ieee80211_he_non_srg_offset_present,
34808 &hf_ieee80211_he_srg_information_present,
34809 &hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed,
34810 &hf_ieee80211_he_sr_control_reserved,
34811 NULL((void*)0)
34812};
34813
34814static int
34815dissect_spatial_reuse_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34816 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34817{
34818 uint8_t sr_control = tvb_get_uint8(tvb, offset);
34819
34820 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_spatial_reuse_sr_control,
34821 ett_he_spatial_reuse_control,
34822 sr_control_field_headers,
34823 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34824 offset++;
34825
34826 if (sr_control & NON_SRG_OFFSET_PRESENT0x04) {
34827 proto_tree_add_item(tree, hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset,
34828 tvb, offset, 1, ENC_NA0x00000000);
34829 offset++;
34830 }
34831
34832 if (sr_control & SRG_INFORMATION_PRESENT0x08) {
34833 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_obss_pd_min_offset, tvb,
34834 offset, 1, ENC_NA0x00000000);
34835 offset++;
34836 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_obss_pd_max_offset, tvb,
34837 offset, 1, ENC_NA0x00000000);
34838 offset++;
34839 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_bss_color_bitmap, tvb,
34840 offset, 8, ENC_NA0x00000000);
34841 offset += 8;
34842 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_partial_bssid_bitmap,
34843 tvb, offset, 8, ENC_NA0x00000000);
34844 offset += 8;
34845 }
34846
34847 return offset;
34848}
34849
34850static void
34851dissect_ndp_feedback_report_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34852 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34853{
34854 proto_tree_add_item(tree, hf_ieee80211_he_resource_request_buffer_thresh, tvb, offset,
34855 1, ENC_NA0x00000000);
34856}
34857
34858static int * const bss_new_color_headers[] = {
34859 &hf_ieee80211_he_new_bss_color_info_color,
34860 &hf_ieee80211_he_new_bss_color_info_reserved,
34861 NULL((void*)0)
34862};
34863
34864static void
34865dissect_bss_color_change(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34866 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34867{
34868 proto_tree_add_item(tree, hf_ieee80211_he_bss_color_change_switch_countdown, tvb, offset,
34869 1, ENC_NA0x00000000);
34870 offset++;
34871
34872 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34873 hf_ieee80211_he_bss_color_change_new_color_info,
34874 ett_he_bss_new_color_info, bss_new_color_headers,
34875 ENC_NA0x00000000, BMT_NO_APPEND0x01);
34876}
34877
34878static int * const ess_info_field_headers[] = {
34879 &hf_ieee80211_he_ess_report_planned_ess,
34880 &hf_ieee80211_he_ess_report_edge_of_ess,
34881 NULL((void*)0)
34882};
34883
34884static void
34885dissect_ess_report(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34886 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34887{
34888 uint8_t bss_trans_thresh = tvb_get_uint8(tvb, offset) >> 2;
34889
34890
34891 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_ess_report_info_field,
34892 ett_he_ess_report_info_field,
34893 ess_info_field_headers,
34894 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34895 if (bss_trans_thresh == 63)
34896 proto_tree_add_int_format(tree, hf_ieee80211_he_ess_report_recommend_transition_thresh,
34897 tvb, offset, 1, bss_trans_thresh,
34898 "Recommended BSS Transition Threshold: %d (No recommendation)",
34899 bss_trans_thresh);
34900 else
34901 proto_tree_add_int_format(tree, hf_ieee80211_he_ess_report_recommend_transition_thresh, tvb,
34902 offset, 1, bss_trans_thresh,
34903 "Recommended BSS Transition Threshold: %d (%ddBm)",
34904 bss_trans_thresh, -100 + bss_trans_thresh);
34905}
34906
34907static void
34908dissect_ops(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34909 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34910{
34911 proto_tree_add_item(tree, hf_ieee80211_he_ops_duration, tvb, offset, 1,
34912 ENC_NA0x00000000);
34913}
34914
34915static void
34916dissect_max_channel_switch_time(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34917 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34918{
34919 proto_tree_add_item(tree, hf_ieee80211_max_channel_switch_time, tvb, offset,
34920 3, ENC_LITTLE_ENDIAN0x80000000);
34921}
34922
34923static void
34924dissect_oci(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34925 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34926{
34927 proto_tree_add_item(tree, hf_ieee80211_oci_operating_class, tvb, offset,
34928 1, ENC_NA0x00000000);
34929 offset += 1;
34930
34931 proto_tree_add_item(tree, hf_ieee80211_oci_primary_channel_number, tvb,
34932 offset, 1, ENC_NA0x00000000);
34933 offset += 1;
34934
34935 proto_tree_add_item(tree, hf_ieee80211_oci_frequency_segment_1, tvb,
34936 offset, 1, ENC_NA0x00000000);
34937 offset += 1;
34938
34939 /* Does it have the OCT fields? */
34940 if (len > 3) {
34941 if (len != 6) {
34942 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
34943 "OCI element with OCT field length must be 6 bytes");
34944 }
34945
34946 proto_tree_add_item(tree, hf_ieee80211_oci_oct_operating_class, tvb,
34947 offset, 1, ENC_NA0x00000000);
34948 offset += 1;
34949
34950 proto_tree_add_item(tree, hf_ieee80211_oci_oct_primary_channel_number, tvb,
34951 offset, 1, ENC_NA0x00000000);
34952 offset += 1;
34953
34954 proto_tree_add_item(tree, hf_ieee80211_oci_oct_frequency_segment_1, tvb,
34955 offset, 1, ENC_NA0x00000000);
34956 }
34957}
34958
34959static void
34960dissect_multiple_bssid_configuration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34961 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34962{
34963
34964 proto_tree_add_item(tree, hf_ieee80211_multiple_bssid_configuration_bssid_count, tvb, offset, 1, ENC_NA0x00000000);
34965 offset += 1;
34966
34967 proto_tree_add_item(tree, hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity, tvb, offset, 1, ENC_NA0x00000000);
34968 /*offset += 1;*/
34969
34970}
34971
34972static void
34973dissect_non_inheritance(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
34974 proto_tree *tree, int offset, int len _U___attribute__((unused)))
34975{
34976 proto_tree *element_id_list = NULL((void*)0);
34977 proto_tree *element_id_ext_list = NULL((void*)0);
34978
34979 uint8_t element_id_list_length = tvb_get_uint8(tvb, offset);
34980
34981 element_id_list = proto_tree_add_subtree(tree, tvb, offset, element_id_list_length + 1,
34982 ett_non_inheritance_element_id_list,
34983 NULL((void*)0), "Element ID List");
34984
34985 proto_tree_add_item(element_id_list, hf_ieee80211_non_inheritance_element_id_list_length,
34986 tvb, offset, 1, ENC_NA0x00000000);
34987 offset += 1;
34988
34989 while (element_id_list_length > 0) {
34990 proto_tree_add_item(element_id_list, hf_ieee80211_non_inheritance_element_id_list_element_id,
34991 tvb, offset, 1, ENC_NA0x00000000);
34992 element_id_list_length--;
34993 offset++;
34994 }
34995
34996 uint8_t element_id_ext_list_length = tvb_get_uint8(tvb, offset);
34997
34998 element_id_ext_list = proto_tree_add_subtree(tree, tvb, offset, element_id_ext_list_length + 1,
34999 ett_non_inheritance_element_id_ext_list,
35000 NULL((void*)0), "Element ID Extension List");
35001
35002 proto_tree_add_item(element_id_ext_list, hf_ieee80211_non_inheritance_element_id_ext_list_length,
35003 tvb, offset, 1, ENC_NA0x00000000);
35004 offset += 1;
35005
35006 while (element_id_ext_list_length > 0) {
35007 proto_tree_add_item(element_id_ext_list, hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext,
35008 tvb, offset, 1, ENC_NA0x00000000);
35009 element_id_ext_list_length--;
35010 offset++;
35011 }
35012}
35013
35014static void
35015dissect_known_bssid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35016 proto_tree *tree, int offset, int len)
35017{
35018
35019 proto_tree_add_item(tree, hf_ieee80211_known_bssid_bitmap, tvb, offset, len, ENC_NA0x00000000);
35020
35021}
35022
35023static void
35024dissect_short_ssid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35025 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35026{
35027
35028 while(len > 0){
35029
35030 proto_tree_add_item(tree, hf_ieee80211_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35031 offset += 4;
35032 len -=4;
35033 }
35034}
35035
35036static int
35037dissect_password_identifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35038 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35039{
35040 proto_tree_add_item(tree, hf_ieee80211_sae_password_identifier, tvb, offset,
35041 len, ENC_ASCII0x00000000);
35042 offset += len;
35043
35044 return offset;
35045}
35046
35047#define SCS_ADD0 0
35048#define SCS_REMOVE1 1
35049#define SCS_CHANGE2 2
35050
35051static const range_string scs_request_type_rvals[] = {
35052 { SCS_ADD0, SCS_ADD0, "Add" },
35053 { SCS_REMOVE1, SCS_REMOVE1, "Remove" },
35054 { SCS_CHANGE2, SCS_CHANGE2, "Change" },
35055 { 3, 255, "Reserved" },
35056 { 0, 0, NULL((void*)0) }
35057};
35058
35059static int * const user_prio_bitmap_headers[] = {
35060 &hf_ieee80211_user_prio_bitmap_bit0,
35061 &hf_ieee80211_user_prio_bitmap_bit1,
35062 &hf_ieee80211_user_prio_bitmap_bit2,
35063 &hf_ieee80211_user_prio_bitmap_bit3,
35064 &hf_ieee80211_user_prio_bitmap_bit4,
35065 &hf_ieee80211_user_prio_bitmap_bit5,
35066 &hf_ieee80211_user_prio_bitmap_bit6,
35067 &hf_ieee80211_user_prio_bitmap_bit7,
35068 NULL((void*)0)
35069};
35070
35071static void
35072dissect_mscs_descriptor_element(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35073 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35074{
35075 uint8_t request_type = tvb_get_uint8(tvb, offset);
35076
35077 proto_tree_add_item(tree, hf_ieee80211_mscs_descriptor_type, tvb, offset, 1,
35078 ENC_NA0x00000000);
35079 offset += 1;
35080
35081 if (request_type == SCS_REMOVE1) {
35082 proto_tree_add_item(tree, hf_ieee80211_mscs_user_prio_control_reserved,
35083 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35084 offset += 2;
35085 } else {
35086 proto_tree *user_prio_tree = NULL((void*)0);
35087
35088 user_prio_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
35089 ett_mscs_user_prio, NULL((void*)0),
35090 "User Priority Control");
35091 proto_tree_add_bitmask_with_flags(user_prio_tree, tvb, offset,
35092 hf_ieee80211_user_prio_bitmap,
35093 ett_ieee80211_user_prio_bitmap,
35094 user_prio_bitmap_headers,
35095 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35096 offset += 1;
35097
35098 proto_tree_add_item(user_prio_tree, hf_ieee80211_user_prio_limit, tvb,
35099 offset, 1, ENC_NA0x00000000);
35100 proto_tree_add_item(user_prio_tree, hf_ieee80211_user_prio_reserved, tvb,
35101 offset, 1, ENC_NA0x00000000);
35102 offset += 1;
35103 }
35104
35105 if (request_type == SCS_REMOVE1) {
35106 proto_tree_add_item(tree, hf_ieee80211_stream_timeout_reserved, tvb,
35107 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35108 } else {
35109 proto_tree_add_item(tree, hf_ieee80211_stream_timeout, tvb,
35110 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35111 }
35112 offset += 4;
35113
35114 /*
35115 * If there is nothing more in the TVB we are done.
35116 */
35117 if (tvb_reported_length_remaining(tvb, offset) == 0)
35118 return;
35119
35120 /*
35121 * There may be tclas elements following and optional MSCS elements.
35122 * A TCLAS Mask element will start with 0xFF <len> 0x89
35123 */
35124 while (tvb_reported_length_remaining(tvb, offset) &&
35125 tvb_get_uint8(tvb, offset) == 0xFF) {
35126 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35127 }
35128
35129 /*
35130 * Any optional MSCS elements come next. Should be 1 byte ID, 1 byte len
35131 * and len bytes.
35132 */
35133 if (offset < len) {
35134 uint8_t sub_elt_len;
35135
35136 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_id, tvb, offset, 1,
35137 ENC_NA0x00000000);
35138 offset += 1;
35139
35140 sub_elt_len = tvb_get_uint8(tvb, offset);
35141 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_len, tvb, offset, 1,
35142 ENC_NA0x00000000);
35143 offset += 1;
35144
35145 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_data, tvb, offset,
35146 sub_elt_len, ENC_NA0x00000000);
35147 }
35148}
35149
35150static void
35151dissect_tclas_mask_element(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35152 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35153{
35154 ieee80211_frame_classifier(tvb, pinfo, tree, offset, len);
35155}
35156
35157static int * const intra_access_prio_headers[] = {
35158 &hf_ieee80211_intra_access_prio_user_prio,
35159 &hf_ieee80211_intra_access_prio_alt_queue,
35160 &hf_ieee80211_intra_access_prio_drop_elig,
35161 &hf_ieee80211_intra_access_prio_reserved,
35162 NULL((void*)0)
35163};
35164
35165static int
35166ieee80211_tag_intra_access_cat_prio(tvbuff_t *tvb, packet_info *pinfo,
35167 proto_tree *tree, void *data)
35168{
35169 int tag_len = tvb_reported_length(tvb);
35170 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t *)data;
35171 int offset = 0;
35172
35173 if (tag_len != 1) {
35174 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
35175 return tvb_captured_length(tvb);
35176 }
35177
35178 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35179 hf_ieee80211_intra_access_prio,
35180 ett_ieee80211_intra_access_prio,
35181 intra_access_prio_headers,
35182 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35183
35184 return tvb_captured_length(tvb);
35185}
35186
35187static int
35188ieee80211_tag_scs_descriptor(tvbuff_t *tvb, packet_info *pinfo,
35189 proto_tree *tree, void *data _U___attribute__((unused)))
35190{
35191 int offset = 0;
35192 uint8_t request_type = tvb_get_uint8(tvb, offset + 1);
35193
35194 proto_tree_add_item(tree, hf_ieee80211_scs_descriptor_scsid, tvb, offset, 1,
35195 ENC_NA0x00000000);
35196 offset += 1;
35197
35198 proto_tree_add_item(tree, hf_ieee80211_scs_descriptor_type, tvb, offset, 1,
35199 ENC_NA0x00000000);
35200 offset += 1;
35201
35202 if (request_type == SCS_ADD0 || request_type == SCS_CHANGE2) {
35203 /* There will only be one intra access priority */
35204 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35205
35206 /* There will be at least one tclass element ... */
35207 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35208 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
35209 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35210 }
35211 /* There could be a TCLAS PROCESS element ... */
35212 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35213 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
35214 add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35215 }
35216
35217 /* There could be one QoS Char element ... */
35218 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35219 tvb_get_uint8(tvb, offset) == TAG_ELEMENT_ID_EXTENSION255 &&
35220 tvb_get_uint8(tvb, offset+2) == ETAG_QOS_CHARACTERISTICS113) {
35221 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35222 }
35223
35224 /* There can be zero or one TSPEC elements */
35225 if (tvb_captured_length_remaining(tvb, offset) > 0) {
35226 static const uint8_t ids[] = { TAG_TSPEC13 };
35227 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
35228 /* Add an expert info */
35229 }
35230 }
35231
35232 }
35233
35234 /* There could be Optional subelements here too ... */
35235
35236 return tvb_captured_length(tvb);
35237}
35238
35239/*
35240 * Just a list of finite cyclic group numbers as 16-bit uints.
35241 */
35242static void
35243dissect_rejected_groups(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35244 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35245{
35246 while (tvb_reported_length_remaining(tvb, offset)) {
35247 proto_tree_add_item(tree, hf_ieee80211_rejected_groups_group, tvb, offset,
35248 2, ENC_LITTLE_ENDIAN0x80000000);
35249 offset += 2;
35250 }
35251}
35252
35253/*
35254 * Just a string of bytes
35255 */
35256static void
35257dissect_anti_clogging_token(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35258 proto_tree *tree, int offset, int len)
35259{
35260 proto_tree_add_item(tree, hf_ieee80211_sae_anti_clogging_token, tvb, offset,
35261 len, ENC_NA0x00000000);
35262}
35263
35264/*
35265 * There will be from 1 to 4 24-bit fields in the order of AC=BK, AC=BE,
35266 * AC=VI and AC=VO.
35267 */
35268
35269static int * const esp_headers[] = {
35270 &hf_ieee80211_esp_access_category,
35271 &hf_ieee80211_esp_reserved,
35272 &hf_ieee80211_esp_data_format,
35273 &hf_ieee80211_esp_ba_windows_size,
35274 &hf_ieee80211_esp_est_air_time_frac,
35275 &hf_ieee80211_esp_data_ppdu_duration_target,
35276 NULL((void*)0)
35277};
35278
35279static const value_string esp_access_category_vals[] = {
35280 { 0, "AC=BK" },
35281 { 1, "AC=BE" },
35282 { 2, "AC=VI" },
35283 { 3, "AC=VO" },
35284 { 0, NULL((void*)0) }
35285};
35286
35287static const value_string esp_data_format_vals[] = {
35288 { 0, "No aggregation is expected to be performed" },
35289 { 1, "A-MSDU aggregation is expected but not A-MPDUs when type is data" },
35290 { 2, "A-MSDU aggregation is NOT expected but A-MPDUs aggregation is when type is data" },
35291 { 3, "A-MSDU aggregation is expected and A-MPDU aggregation is when type is data" },
35292 { 0, NULL((void*)0) }
35293};
35294
35295static const value_string esp_ba_window_size_vals[] = {
35296 { 0, "Block Ack not expected to be used" },
35297 { 1, "2" },
35298 { 2, "4" },
35299 { 3, "6" },
35300 { 4, "8" },
35301 { 5, "16" },
35302 { 6, "32" },
35303 { 7, "64" },
35304 { 0, NULL((void*)0) }
35305};
35306
35307static int
35308dissect_estimated_service_params(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35309 proto_tree *tree, int offset, int len)
35310{
35311 while (len > 0) {
35312 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35313 hf_ieee80211_estimated_service_params, ett_ieee80211_esp,
35314 esp_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35315 offset += 3;
35316 len -= 3;
35317 }
35318
35319 return offset;
35320}
35321
35322static int
35323dissect_future_channel_guidance(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35324 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35325{
35326 proto_tree_add_item(tree, hf_ieee80211_fcg_new_channel_number, tvb, offset,
35327 4, ENC_LITTLE_ENDIAN0x80000000);
35328 offset += 4;
35329
35330 if (len - 4 > 0) {
35331 proto_tree_add_item(tree, hf_ieee80211_fcg_extra_info, tvb, offset, len - 4,
35332 ENC_NA0x00000000);
35333 offset += len - 4;
35334 }
35335
35336 return offset;
35337}
35338
35339/* IANA, "Transform Type 4 - Diffie-Hellman Group Transform IDs" */
35340static const value_string owe_dh_parameter_group_vals[] = {
35341 { 0, "None" },
35342 { 1, "768-bit MODP Group" },
35343 { 2, "1024-bit MODP Group" },
35344 { 5, "1536-bit MODP Group" },
35345 { 14, "2048-bit MODP Group"},
35346 { 15, "3072-bit MODP Group"},
35347 { 16, "4096-bit MODP Group"},
35348 { 17, "6144-bit MODP Group"},
35349 { 18, "8192-bit MODP Group"},
35350 { 19, "256-bit random ECP group"},
35351 { 20, "384-bit random ECP group"},
35352 { 21, "521-bit random ECP group"},
35353 { 22, "1024-bit MODP Group with 160-bit Prime Order Subgroup"},
35354 { 23, "2048-bit MODP Group with 224-bit Prime Order Subgroup"},
35355 { 24, "2048-bit MODP Group with 256-bit Prime Order Subgroup"},
35356 { 25, "192-bit Random ECP Group"},
35357 { 26, "224-bit Random ECP Group"},
35358 { 27, "brainpoolP224r1"},
35359 { 28, "brainpoolP256r1"},
35360 { 29, "brainpoolP384r1"},
35361 { 30, "brainpoolP512r1"},
35362 { 31, "Curve25519"},
35363 { 32, "Curve448"},
35364 { 0, NULL((void*)0) }
35365};
35366
35367static int
35368dissect_owe_dh_parameter(tvbuff_t *tvb, packet_info *pinfo,
35369 proto_tree *tree, int offset, int len _U___attribute__((unused)), association_sanity_check_t* sanity_check)
35370{
35371 if (len < 2) {
35372 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
35373 "OWE: Diffie-Hellman Parameter must be at least 2 "
35374 "octets long");
35375 return offset + len;
35376 }
35377
35378 ieee80211_packet_data_t *packet_data = get_or_create_packet_data(pinfo);
35379 packet_data->owe_group = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35380 if (sanity_check != NULL((void*)0)) {
35381 sanity_check->owe_group = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35382 }
35383
35384 proto_tree_add_item(tree, hf_ieee80211_owe_dh_parameter_group, tvb, offset,
35385 2, ENC_LITTLE_ENDIAN0x80000000);
35386 proto_tree_add_item(tree, hf_ieee80211_owe_dh_parameter_public_key, tvb, offset + 2,
35387 len - 2, ENC_NA0x00000000);
35388 offset += len;
35389
35390 return offset;
35391}
35392
35393static int * const ieee80211_twt_ctrl_field[] = {
35394 &hf_ieee80211_tag_twt_ndp_paging_indicator,
35395 &hf_ieee80211_tag_twt_responder_pm_mode,
35396 &hf_ieee80211_tag_twt_neg_type,
35397 &hf_ieee80211_tag_twt_info_frame_disabled,
35398 &hf_ieee80211_tag_twt_wake_duration_unit,
35399 &hf_ieee80211_tag_twt_link_id_bitmap_present,
35400 &hf_ieee80211_tag_twt_aligned_twt,
35401 NULL((void*)0),
35402};
35403
35404static int * const ieee80211_twt_req_type_field[] = {
35405 &hf_ieee80211_tag_twt_req_type_req,
35406 &hf_ieee80211_tag_twt_req_type_setup_cmd,
35407 &hf_ieee80211_tag_twt_req_type_trigger,
35408 &hf_ieee80211_tag_twt_req_type_implicit,
35409 &hf_ieee80211_tag_twt_req_type_flow_type,
35410 &hf_ieee80211_tag_twt_req_type_flow_id,
35411 &hf_ieee80211_tag_twt_req_type_wake_int_exp,
35412 &hf_ieee80211_tag_twt_req_type_prot,
35413 NULL((void*)0),
35414};
35415
35416static int * const ieee80211_bcst_twt_req_type_field[] = {
35417 &hf_ieee80211_tag_twt_req_type_req,
35418 &hf_ieee80211_tag_twt_req_type_setup_cmd,
35419 &hf_ieee80211_tag_twt_req_type_trigger,
35420 &hf_ieee80211_tag_twt_req_type_last_bcst_parm_set,
35421 &hf_ieee80211_tag_twt_req_type_flow_type,
35422 &hf_ieee80211_tag_twt_req_type_bcst_twt_recom,
35423 &hf_ieee80211_tag_twt_req_type_wake_int_exp,
35424 &hf_ieee80211_tag_twt_req_type_aligned,
35425 NULL((void*)0),
35426};
35427
35428static int * const ieee80211_twt_ndp_paging_field[] = {
35429 &hf_ieee80211_tag_twt_ndp_paging_p_id,
35430 &hf_ieee80211_tag_twt_ndp_max_ndp_paging_period,
35431 &hf_ieee80211_tag_twt_ndp_partial_tsf_offset,
35432 &hf_ieee80211_tag_twt_ndp_action,
35433 &hf_ieee80211_tag_twt_ndp_min_sleep_duration,
35434 &hf_ieee80211_tag_twt_ndp_reserved,
35435 NULL((void*)0)
35436};
35437
35438static int * const ieee80211_twt_broadcast_info_field[] = {
35439 &hf_ieee80211_tag_twt_bcast_info_persistence,
35440 &hf_ieee80211_tag_twt_bcast_info_id,
35441 &hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info,
35442 &hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present,
35443 NULL((void*)0)
35444};
35445
35446static int * const ieee80211_twt_traffic_info_control_field[] = {
35447 &hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid,
35448 &hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid,
35449 &hf_ieee80211_tag_twt_traffic_info_reserved,
35450 NULL((void*)0)
35451};
35452
35453static const value_string twt_ndp_action_vals[] = {
35454 { 0, "Send a PD-Poll or uplink trigger frame" },
35455 { 1, "Wake up at the time indicated by Min Sleep Duration" },
35456 { 2, "Wake up to receive the Beacon" },
35457 { 3, "Wake up to receive the DTIM Beacon" },
35458 { 4, "Wake up at the time indicated by the sum of the Min Sleep Duration and the ASD" },
35459 { 5, "Reserved" },
35460 { 6, "Reserved" },
35461 { 7, "Reserved" },
35462 { 0, NULL((void*)0) }
35463};
35464
35465static int
35466ieee80211_tag_twt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35467{
35468 int tag_len;
35469 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35470 int offset = 0;
35471 proto_item *item = NULL((void*)0);
35472 bool_Bool twt_requester;
35473 uint8_t setup_command;
35474 uint8_t ctrl_field;
35475 uint16_t req_type;
35476 uint8_t neg_type;
35477 bool_Bool last_bcast = false0;
35478
35479 ctrl_field = tvb_get_uint8(tvb, offset);
35480 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35481 hf_ieee80211_tag_twt_control_field,
35482 ett_twt_control_field_tree,
35483 ieee80211_twt_ctrl_field,
35484 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35485 offset += 1;
35486 neg_type = (ctrl_field & 0xc) >> 2;
35487
35488 while (!last_bcast) {
35489 tag_len = tvb_captured_length_remaining(tvb, offset);
35490 if (tag_len < 2) {
35491 expert_add_info(pinfo, item ? item : tree,
35492 &ei_ieee80211_twt_bcast_info_no_term);
35493 return tvb_captured_length(tvb);
35494 }
35495 req_type = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35496 if (neg_type & 0x2) { /* If a bcast TWT */
35497 // 2 bytes - request type
35498 // 2 bytes - target wake time
35499 // 1 byte - nominal minimum interval TWT wake duration
35500 // 2 bytes - TWT wake interval mantissa
35501 // 2 byte - Broadcast TWT info
35502 // total: 10 bytes.
35503 if (tag_len < 9) {
35504 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
35505 "Tag Length %u wrong, must be >= 9", tag_len);
35506 return tvb_captured_length(tvb);
35507 }
35508 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35509 hf_ieee80211_tag_twt_req_type_field,
35510 ett_twt_req_type_tree,
35511 ieee80211_bcst_twt_req_type_field,
35512 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35513 last_bcast = (req_type & 0x20) >> 5;
35514 } else {
35515 // 2 bytes - request type
35516 // 8 bytes - target wake time
35517 // 1 byte - nominal minimum interval TWT wake duration
35518 // 2 bytes - TWT wake interval mantissa
35519 // 1 byte - channel
35520 // total: 14 bytes.
35521 if (tag_len < 14) {
35522 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
35523 "Tag Length %u wrong, must be >= 14", tag_len);
35524 return tvb_captured_length(tvb);
35525 }
35526 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35527 hf_ieee80211_tag_twt_req_type_field,
35528 ett_twt_req_type_tree,
35529 ieee80211_twt_req_type_field,
35530 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35531 last_bcast = true1;
35532 }
35533
35534 twt_requester = req_type & 0x1;
35535 setup_command = (req_type & 0xe) >> 1;
35536
35537 switch (setup_command) {
35538 case REQUEST_TWT0:
35539 case SUGGEST_TWT1:
35540 case DEMAND_TWT2:
35541 // we must be TWT requester
35542 if (!twt_requester) {
35543 expert_add_info_format(pinfo, item,
35544 &ei_ieee80211_twt_setup_bad_command,
35545 "Command %d is not allowed if TWT Request is not set",
35546 setup_command);
35547 return tvb_captured_length(tvb);
35548 }
35549 break;
35550 case TWT_GROUPING3:
35551 // TODO: There are more tests needed here
35552 // Fall through since we can't be requester here as well.
35553 case ACCEPT_TWT4:
35554 case ALTERNATE_TWT5:
35555 // we can't be TWT requester
35556 if (twt_requester) {
35557 expert_add_info_format(pinfo, item,
35558 &ei_ieee80211_twt_setup_bad_command,
35559 "Command %d is not allowed if TWT Request is set",
35560 setup_command);
35561 return tvb_captured_length(tvb);
35562 }
35563 break;
35564 case DICTATE_TWT6:
35565 case REJECT_TWT7:
35566 // TODO: Unclear what to do here. Looks like we can't be Requester, OTOH
35567 // the spec doesn't say anything
35568 break;
35569 default:
35570 break;
35571 }
35572
35573 offset += 2;
35574
35575 if (neg_type & 0x2) { /* If a bcast TWT */
35576 uint16_t twt_info;
35577
35578 proto_tree_add_item(tree, hf_ieee80211_tag_twt_target_wake_time_short,
35579 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35580 offset += 2;
35581
35582 proto_tree_add_item(tree, hf_ieee80211_tag_twt_nom_min_twt_wake_dur, tvb,
35583 offset, 1, ENC_NA0x00000000);
35584 offset += 1;
35585
35586 proto_tree_add_item(tree, hf_ieee80211_tag_twt_wake_interval_mantissa,
35587 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35588 offset += 2;
35589
35590 twt_info = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35591 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35592 hf_ieee80211_tag_twt_broadcast_info,
35593 ett_twt_broadcast_info_tree,
35594 ieee80211_twt_broadcast_info_field,
35595 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35596 offset += 2;
35597 if (twt_info & 0x01) { /* RTWT Traffic Info */
35598 proto_tree *info_tree;
35599 info_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_twt_traffic_info_tree,
35600 NULL((void*)0), "Restricted TWT Traffic Info");
35601 proto_tree_add_bitmask_with_flags(info_tree, tvb, offset,
35602 hf_ieee80211_tag_twt_traffic_info_control,
35603 ett_twt_traffic_info_control_tree,
35604 ieee80211_twt_traffic_info_control_field,
35605 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35606 offset += 1;
35607
35608 proto_tree_add_item(info_tree, hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap,
35609 tvb, offset, 1, ENC_NA0x00000000);
35610 offset += 1;
35611
35612 proto_tree_add_item(info_tree, hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap,
35613 tvb, offset, 1, ENC_NA0x00000000);
35614 offset += 1;
35615 }
35616 } else {
35617 proto_tree_add_item(tree, hf_ieee80211_tag_twt_target_wake_time, tvb,
35618 offset, 8, ENC_LITTLE_ENDIAN0x80000000);
35619 offset += 8;
35620
35621 proto_tree_add_item(tree, hf_ieee80211_tag_twt_nom_min_twt_wake_dur, tvb,
35622 offset, 1, ENC_NA0x00000000);
35623 offset += 1;
35624
35625 item = proto_tree_add_item(tree,
35626 hf_ieee80211_tag_twt_wake_interval_mantissa,
35627 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35628 offset += 2;
35629
35630 proto_tree_add_item(tree, hf_ieee80211_tag_twt_channel, tvb, offset, 1,
35631 ENC_NA0x00000000);
35632 offset += 1;
35633
35634 if (ctrl_field & 0x01) { /* NDP Paging */
35635 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35636 hf_ieee80211_tag_twt_ndp_paging_field,
35637 ett_twt_ndp_paging_field_tree,
35638 ieee80211_twt_ndp_paging_field,
35639 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35640 offset += 4;
35641 }
35642
35643 if (ctrl_field & 0x40) { /* Link ID Bitmap */
35644 proto_tree_add_item(tree, hf_ieee80211_tag_twt_link_id_bitmap, tvb, offset, 2,
35645 ENC_LITTLE_ENDIAN0x80000000);
35646 offset += 2;
35647 }
35648
35649 if (ctrl_field & 0x80) { /* Aligned TWT Link Bitmap */
35650 proto_tree_add_item(tree, hf_ieee80211_tag_twt_aligned_twt_link_bitmap, tvb, offset, 2,
35651 ENC_LITTLE_ENDIAN0x80000000);
35652 offset += 2;
35653 }
35654 }
35655 }
35656
35657 return tvb_captured_length(tvb);
35658}
35659
35660static int
35661dissect_rsnx_ie(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, int tag_len)
35662{
35663 int offset = 0;
35664 proto_item *octet;
35665 static int * const octet1[] = {
35666 &hf_ieee80211_tag_rsnx_length,
35667 &hf_ieee80211_tag_rsnx_protected_twt_operations_support,
35668 &hf_ieee80211_tag_rsnx_sae_hash_to_element,
35669 &hf_ieee80211_tag_rsnx_sae_pk,
35670 &hf_ieee80211_tag_rsnx_protected_wur_frame_support,
35671 NULL((void*)0)
35672 };
35673 static int * const octet2[] = {
35674 &hf_ieee80211_tag_rsnx_secure_ltf_support,
35675 &hf_ieee80211_tag_rsnx_secure_rtt_supported,
35676 &hf_ieee80211_tag_rsnx_urnm_mfpr_x20,
35677 &hf_ieee80211_tag_rsnx_protected_announce_support,
35678 &hf_ieee80211_tag_rsnx_pbac,
35679 &hf_ieee80211_tag_rsnx_extended_s1g_action_protection,
35680 &hf_ieee80211_tag_rsnx_spp_amsdu_capable,
35681 &hf_ieee80211_tag_rsnx_urnm_mfpr,
35682 NULL((void*)0)
35683 };
35684
35685 /* octet 1 */
35686 octet = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rsnx, ett_tag_rsnx_octet1, octet1, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35687 proto_item_append_text(octet, " (octet %d)", offset + 1);
35688
35689 offset += 1;
35690 if (offset >= tag_len) {
35691 return offset;
35692 }
35693
35694 /* octet 2 */
35695 octet = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rsnx, ett_tag_rsnx_octet2, octet2, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35696 proto_item_append_text(octet, " (octet %d)", offset + 1);
35697
35698 offset += 1;
35699 if (offset >= tag_len) {
35700 return offset;
35701 }
35702
35703 /* all rest of payload is reserved... */
35704 while (offset < tag_len) {
35705 proto_tree_add_item(tree, hf_ieee80211_tag_rsnx_reserved, tvb, offset, 1,
35706 ENC_LITTLE_ENDIAN0x80000000);
35707 offset += 1;
35708 }
35709
35710 return offset;
35711}
35712
35713static int
35714ieee80211_tag_rsnx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35715{
35716 int tag_len = tvb_reported_length(tvb);
35717 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35718
35719 if (tag_len < 1) {
35720 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 1", tag_len);
35721 return 0;
35722 }
35723 proto_item_append_text(field_data->item_tag, " (%u octet%s)", tag_len, plurality(tag_len, "", "s")((tag_len) == 1 ? ("") : ("s")));
35724
35725 dissect_rsnx_ie(tvb, pinfo, tree, tag_len);
35726
35727 return tvb_captured_length(tvb);
35728}
35729
35730static int
35731ieee80211_tag_fils_indication(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35732{
35733 int tag_len = tvb_reported_length(tvb);
35734 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35735 int offset = 0;
35736 uint16_t info;
35737 uint8_t nr_realm, nr_pk, i, len;
35738 proto_item *item;
35739 proto_tree *subtree;
35740
35741 if (tag_len < 2)
35742 {
35743 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
35744 return tvb_captured_length(tvb);
35745 }
35746
35747 static int * const ieee80211_tag_fils_indication_info[] = {
35748 &hf_ieee80211_tag_fils_indication_info_nr_pk,
35749 &hf_ieee80211_tag_fils_indication_info_nr_realm,
35750 &hf_ieee80211_tag_fils_indication_info_ip_config,
35751 &hf_ieee80211_tag_fils_indication_info_cache_id_included,
35752 &hf_ieee80211_tag_fils_indication_info_hessid_included,
35753 &hf_ieee80211_tag_fils_indication_info_ska_without_pfs,
35754 &hf_ieee80211_tag_fils_indication_info_ska_with_pfs,
35755 &hf_ieee80211_tag_fils_indication_info_pka,
35756 &hf_ieee80211_tag_fils_indication_info_reserved,
35757 NULL((void*)0)
35758 };
35759
35760 info = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35761 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_fils_indication_info, ENC_LITTLE_ENDIAN0x80000000);
35762 offset += 2;
35763
35764 nr_pk = info & 0x07;
35765 nr_realm = (info >> 3) & 0x07;
35766
35767 /* Cache identifier */
35768 if (info & (1 << 7)) {
35769 proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_cache_identifier, tvb, offset, 2, ENC_NA0x00000000);
35770 offset += 2;
35771 }
35772
35773 /* HESSID */
35774 if (info & (1 << 8)) {
35775 proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_hessid, tvb, offset, 6, ENC_NA0x00000000);
35776 offset += 6;
35777 }
35778
35779 /* Realm identifiers */
35780 if (nr_realm > 0) {
35781 item = proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_realm_list, tvb, offset, nr_realm * 2, ENC_NA0x00000000);
35782 subtree = proto_item_add_subtree(item, ett_fils_indication_realm_list);
35783 proto_item_append_text(item, ": %u", nr_realm);
35784
35785 for (i = 0; i < nr_realm; i++) {
35786 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_realm_identifier, tvb, offset, 2, ENC_NA0x00000000);
35787 offset += 2;
35788 }
35789 }
35790
35791 /* PK identifiers */
35792 if (nr_pk > 0) {
35793 item = proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_public_key_list, tvb, offset, tag_len - offset, ENC_NA0x00000000);
35794 subtree = proto_item_add_subtree(item, ett_fils_indication_public_key_list);
35795 proto_item_append_text(item, ": %u", nr_pk);
35796
35797 for (i = 0; i < nr_pk; i++) {
35798 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_type, tvb, offset, 1, ENC_NA0x00000000);
35799 offset += 1;
35800
35801 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_length, tvb, offset, 1, ENC_NA0x00000000);
35802 len = tvb_get_uint8(tvb, offset);
35803 offset += 1;
35804
35805 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_indicator, tvb, offset, len, ENC_NA0x00000000);
35806 offset += len;
35807 }
35808 }
35809
35810 return tvb_captured_length(tvb);
35811}
35812
35813static int
35814ieee80211_tag_element_id_extension(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35815{
35816 int tag_len = tvb_reported_length(tvb);
35817 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35818 int offset = 0;
35819 int ext_tag_len;
35820 uint8_t ext_tag_no;
35821
35822 if (tag_len < 1)
35823 {
35824 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 1", tag_len);
35825 return tvb_captured_length(tvb);
35826 }
35827 ext_tag_no = tvb_get_uint8(tvb, offset++);
35828 ext_tag_len = tag_len - 1;
35829
35830 switch (ext_tag_no) {
35831 case ETAG_FILS_REQ_PARAMS2:
35832 dissect_fils_req_params(tree, pinfo, tvb, offset, ext_tag_len);
35833 break;
35834 case ETAG_FILS_SESSION4:
35835 proto_tree_add_item(tree, hf_ieee80211_fils_session, tvb, offset, ext_tag_len, ENC_NA0x00000000);
35836 if (field_data->sanity_check != NULL((void*)0)) {
35837 field_data->sanity_check->has_fils_session = true1;
35838 }
35839 break;
35840 case ETAG_FILS_WRAPPED_DATA8:
35841 dissect_wrapped_data(tree, pinfo, tvb, offset, ext_tag_len);
35842 break;
35843 case ETAG_FILS_NONCE13:
35844 proto_tree_add_item(tree, hf_ieee80211_fils_nonce, tvb, offset, ext_tag_len, ENC_NA0x00000000);
35845 break;
35846 case ETAG_ESTIMATED_SERVICE_PARAM11:
35847 dissect_estimated_service_params(tvb, pinfo, tree, offset, ext_tag_len);
35848 break;
35849 case ETAG_FUTURE_CHANNEL_GUIDANCE14:
35850 dissect_future_channel_guidance(tvb, pinfo, tree, offset, ext_tag_len);
35851 break;
35852 case ETAG_OWE_DH_PARAMETER32:
35853 dissect_owe_dh_parameter(tvb, pinfo, tree, offset, ext_tag_len, field_data->sanity_check);
35854 break;
35855 case ETAG_PASSWORD_IDENTIFIER33:
35856 dissect_password_identifier(tvb, pinfo, tree, offset, ext_tag_len);
35857 break;
35858 case ETAG_HE_CAPABILITIES35:
35859 dissect_he_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
35860 break;
35861 case ETAG_HE_OPERATION36:
35862 dissect_he_operation(tvb, pinfo, tree, offset, ext_tag_len);
35863 break;
35864 case ETAG_UORA_PARAMETER_SET37:
35865 dissect_uora_parameter_set(tvb, pinfo, tree, offset);
35866 break;
35867 case ETAG_MU_EDCA_PARAMETER_SET38:
35868 dissect_mu_edca_parameter_set(tvb, pinfo, tree, offset, ext_tag_len);
35869 break;
35870 case ETAG_SPATIAL_REUSE_PARAMETER_SET39:
35871 dissect_spatial_reuse_parameter_set(tvb, pinfo, tree, offset, ext_tag_len);
35872 break;
35873 case ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41:
35874 dissect_ndp_feedback_report_set(tvb, pinfo, tree, offset, ext_tag_len);
35875 break;
35876 case ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42:
35877 dissect_bss_color_change(tvb, pinfo, tree, offset, ext_tag_len);
35878 break;
35879 case ETAG_QUIET_TIME_PERIOD_SETUP43:
35880 dissect_quiet_time_period(tvb, pinfo, tree, offset, ext_tag_len);
35881 break;
35882 case ETAG_ESS_REPORT45:
35883 dissect_ess_report(tvb, pinfo, tree, offset, ext_tag_len);
35884 break;
35885 case ETAG_OPS46:
35886 dissect_ops(tvb, pinfo, tree, offset, ext_tag_len);
35887 break;
35888 case ETAG_MAX_CHANNEL_SWITCH_TIME52:
35889 dissect_max_channel_switch_time(tvb, pinfo, tree, offset, ext_tag_len);
35890 break;
35891 case ETAG_OCI54:
35892 dissect_oci(tvb, pinfo, tree, offset, ext_tag_len);
35893 break;
35894 case ETAG_MULTIPLE_BSSID_CONFIGURATION55:
35895 dissect_multiple_bssid_configuration(tvb, pinfo, tree, offset, ext_tag_len);
35896 break;
35897 case ETAG_NON_INHERITANCE56:
35898 dissect_non_inheritance(tvb, pinfo, tree, offset, ext_tag_len);
35899 break;
35900 case ETAG_KNOWN_BSSID57:
35901 dissect_known_bssid(tvb, pinfo, tree, offset, ext_tag_len);
35902 break;
35903 case ETAG_SHORT_SSID58:
35904 dissect_short_ssid(tvb, pinfo, tree, offset, ext_tag_len);
35905 break;
35906 case ETAG_MSCS_DESCRIPTOR_ELEMENT88:
35907 dissect_mscs_descriptor_element(tvb, pinfo, tree, offset, ext_tag_len);
35908 break;
35909 case ETAG_TCLAS_MASK89:
35910 dissect_tclas_mask_element(tvb, pinfo, tree, offset, ext_tag_len);
35911 break;
35912 case ETAG_REJECTED_GROUPS92:
35913 dissect_rejected_groups(tvb, pinfo, tree, offset, ext_tag_len);
35914 break;
35915 case ETAG_ANTI_CLOGGING_TOKEN93:
35916 dissect_anti_clogging_token(tvb, pinfo, tree, offset, ext_tag_len);
35917 break;
35918 case ETAG_EXTENDED_REQUEST10:
35919 dissect_extended_request(tvb, pinfo, tree, offset, ext_tag_len);
35920 break;
35921 case ETAG_HE_6GHZ_BAND_CAPABILITIES59:
35922 dissect_he_6ghz_band_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
35923 break;
35924 case ETAG_RANGING_PARAMETERS101:
35925 dissect_ranging_parameters(tvb, pinfo, tree, offset, ext_tag_len);
35926 break;
35927 case ETAG_DIRECTION_MEASUREMENT_RESULTS102:
35928 dissect_direction_measurement_results(tvb, pinfo, tree, offset, ext_tag_len);
35929 break;
35930 case ETAG_FTM_SYNC_INFO9:
35931 proto_tree_add_item(tree, hf_ieee80211_tag_ftm_tsf_sync_info, tvb, offset, ext_tag_len, ENC_NA0x00000000);
35932 break;
35933 case ETAG_SECURE_LTF_PARAMETERS94:
35934 dissect_secure_ltf_parameters(tvb, pinfo, tree, offset, ext_tag_len);
35935 break;
35936 case ETAG_ISTA_AVAILABILITY_WINDOW98:
35937 dissect_ista_availability_window(tvb, pinfo, tree, offset, ext_tag_len);
35938 break;
35939 case ETAG_RSTA_AVAILABILITY_WINDOW99:
35940 dissect_rsta_availability_window(tvb, pinfo, tree, offset, ext_tag_len);
35941 break;
35942 case ETAG_PASN_PARAMETERS100:
35943 dissect_pasn_parameters(tvb, pinfo, tree, offset, ext_tag_len);
35944 break;
35945 case ETAG_MULTI_LINK107:
35946 dissect_multi_link(tvb, pinfo, tree, offset, ext_tag_len);
35947 break;
35948 case ETAG_EHT_OPERATION106:
35949 dissect_eht_operation(tvb, pinfo, tree, offset, ext_tag_len);
35950 break;
35951 case ETAG_EHT_CAPABILITIES108:
35952 dissect_eht_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
35953 break;
35954 case ETAG_TID_TO_LINK_MAPPING109:
35955 dissect_tid_to_link_mapping(tvb, pinfo, tree, offset, ext_tag_len);
35956 break;
35957 case ETAG_MULTI_LINK_TRAFFIC110:
35958 dissect_multi_link_traffic(tvb, pinfo, tree, offset, ext_tag_len);
35959 break;
35960 case ETAG_QOS_CHARACTERISTICS113:
35961 dissect_qos_characteristics(tvb, pinfo, tree, offset, ext_tag_len);
35962 break;
35963 case ETAG_AKM_SUITE_SELECTOR114:
35964 dissect_akm_suite_selector(tvb, pinfo, tree, offset, ext_tag_len);
35965 break;
35966 case ETAG_MLO_LINK_INFORMATION133:
35967 dissect_mlo_link_information(tvb, pinfo, tree, offset, ext_tag_len);
35968 break;
35969 case ETAG_AID_BITMAP134:
35970 dissect_aid_bitmap(tvb, pinfo, tree, offset, ext_tag_len);
35971 break;
35972 case ETAG_BANDWIDTH_INDICATION135:
35973 dissect_bandwidth_indication(tvb, pinfo, tree, offset, ext_tag_len);
35974 break;
35975 case ETAG_NONAP_STA_REGULATORY_CONNECT137:
35976 dissect_nonap_sta_regulatory_connect(tvb, pinfo, tree, offset, ext_tag_len);
35977 break;
35978 default:
35979 proto_tree_add_item(tree, hf_ieee80211_ext_tag_data, tvb, offset, ext_tag_len, ENC_NA0x00000000);
35980 expert_add_info_format(pinfo, field_data->item_tag, &ei_ieee80211_tag_data,
35981 "Dissector for 802.11 Extension Tag"
35982 " (%s) code not implemented, Contact"
35983 " Wireshark developers if you want this supported", val_to_str_ext(pinfo->pool, ext_tag_no,
35984 &tag_num_vals_eid_ext_ext, "%d"));
35985 proto_item_append_text(field_data->item_tag, ": Undecoded");
35986 break;
35987 }
35988
35989 return tvb_captured_length(tvb);
35990}
35991
35992/* Conflict: WAPI Vs. IEEE */
35993static int
35994ieee80211_tag_ie_68_conflict(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35995{
35996 int tag_len = tvb_reported_length(tvb);
35997 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35998 if (tag_len >= 20) { /* It Might be WAPI*/
35999 dissect_wapi_param_set(tvb, pinfo, tree, 0, tag_len, field_data->item_tag_length, field_data->item_tag, field_data->ftype);
36000 }
36001 else { /* BSS AC Access Delay (68) */
36002 dissect_bss_ac_access_delay_ie(tvb, pinfo, tree, 0, tag_len, field_data->item_tag_length);
36003 }
36004 return tvb_captured_length(tvb);
36005}
36006
36007static int
36008ieee80211_tag_mesh_peering_mgmt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36009{
36010 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36011 int tag_len = tvb_reported_length(tvb);
36012 int offset = 0;
36013 int ampe_frame = 0;
36014
36015 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_proto, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36016 offset += 2;
36017 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_local_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36018 offset += 2;
36019
36020 if (field_data && field_data->sanity_check)
36021 ampe_frame = field_data->sanity_check->ampe_frame;
36022
36023 switch (ampe_frame)
36024 { /* Self-protected action field */
36025 case SELFPROT_ACTION_MESH_PEERING_OPEN1:
36026 break;
36027
36028 case SELFPROT_ACTION_MESH_PEERING_CONFIRM2:
36029 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36030 break;
36031
36032 case SELFPROT_ACTION_MESH_PEERING_CLOSE3:
36033 if ((tag_len == 8) || (tag_len == 24))
36034 {
36035 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36036 offset += 2;
36037 }
36038 add_ff_reason_code(tree, tvb, pinfo, offset);
36039 break;
36040
36041 /* unexpected values */
36042 default:
36043 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_mesh_peering_unexpected , tvb, offset, tag_len);
36044 break;
36045 }
36046 if (tag_len - offset == 16)
36047 {
36048 proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA0x00000000);
36049 }
36050 return tvb_captured_length(tvb);
36051}
36052
36053static int
36054ieee80211_tag_mesh_configuration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36055{
36056
36057 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36058 int tag_len = tvb_reported_length(tvb);
36059 if (tag_len != 7)
36060 {
36061 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
36062 return tvb_captured_length(tvb);
36063 }
36064
36065 int offset = 0;
36066 proto_item *item;
36067 proto_tree *subtree;
36068 static int * const ieee80211_mesh_config_cap[] = {
36069 &hf_ieee80211_mesh_config_cap_accepting,
36070 &hf_ieee80211_mesh_config_cap_mcca_support,
36071 &hf_ieee80211_mesh_config_cap_mcca_enabled,
36072 &hf_ieee80211_mesh_config_cap_forwarding,
36073 &hf_ieee80211_mesh_config_cap_mbca_enabled,
36074 &hf_ieee80211_mesh_config_cap_tbtt_adjusting,
36075 &hf_ieee80211_mesh_config_cap_power_save_level,
36076 &hf_ieee80211_mesh_config_cap_reserved,
36077 NULL((void*)0)
36078 };
36079
36080 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36081 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_metric, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
36082 proto_tree_add_item(tree, hf_ieee80211_mesh_config_congestion_control, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
36083 proto_tree_add_item(tree, hf_ieee80211_mesh_config_sync_method, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
36084 proto_tree_add_item(tree, hf_ieee80211_mesh_config_auth_protocol, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
36085 item = proto_tree_add_item(tree, hf_ieee80211_mesh_config_formation_info, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36086 subtree = proto_item_add_subtree(item, ett_mesh_formation_info_tree);
36087 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_conn_to_mesh_gate, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36088 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_num_of_peerings, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36089 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_conn_to_as, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36090
36091 proto_tree_add_bitmask_with_flags(tree, tvb, offset + 6, hf_ieee80211_mesh_config_capability,
36092 ett_mesh_config_cap_tree, ieee80211_mesh_config_cap,
36093 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36094 return tvb_captured_length(tvb);
36095}
36096
36097static int
36098ieee80211_tag_mesh_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36099{
36100 int offset = 0;
36101 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36102 int tag_len = tvb_reported_length(tvb);
36103 const uint8_t* mesh_id;
36104
36105 proto_tree_add_item_ret_string(tree, hf_ieee80211_mesh_id, tvb, offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &mesh_id);
36106 if (tag_len > 0) {
36107 char* s = format_text(pinfo->pool, (const char*)mesh_id, tag_len);
36108 col_append_fstr(pinfo->cinfo, COL_INFO, ", MESHID=%s", s);
36109 proto_item_append_text(field_data->item_tag, ": %s", s);
36110 }
36111 /* Make sure dissector is accepted */
36112 return ((tag_len > 0) ? tag_len : 1);
36113}
36114
36115static int
36116ieee80211_tag_beacon_timing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36117{
36118 int tag_len = tvb_reported_length(tvb);
36119 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36120 int offset = 0;
36121 uint32_t value;
36122 proto_item *item;
36123 proto_tree *subtree;
36124
36125 static int * const ieee80211_beacon_timing_rctrl_byte[] = {
36126 &hf_ieee80211_bcn_timing_rctrl_more,
36127 &hf_ieee80211_bcn_timing_rctrl_element_num,
36128 &hf_ieee80211_bcn_timing_rctrl_status_num,
36129 NULL((void*)0),
36130 };
36131
36132 /* Beacon timing element (120) */
36133 if (tag_len < 1) {
36134 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36135 "Tag length %u too short, must be greater than 1", tag_len);
36136 return tvb_captured_length(tvb);
36137 }
36138
36139 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_bcn_timing_rctrl,
36140 ett_bcn_timing_rctrl_tree, ieee80211_beacon_timing_rctrl_byte,
36141 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36142 offset += 1;
36143
36144 while (offset < tag_len) {
36145 item = proto_tree_add_item(tree, hf_ieee80211_bcn_timing_info, tvb, offset, 6, ENC_NA0x00000000);
36146 subtree = proto_item_add_subtree(item, ett_bcn_timing_info_tree);
36147 proto_item_append_text(item, " %u", ((offset / 6) + 1));
36148
36149 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &value);
36150 proto_item_append_text(item, ": STA ID: %u", value);
36151 offset += 1;
36152
36153 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_tbtt, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000, &value);
36154 proto_item_append_text(item, ", STA TBTT: %u", value);
36155 offset += 3;
36156
36157 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_bi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
36158 proto_item_append_text(item, ", STA BI: %u", value);
36159 offset += 2;
36160 }
36161
36162 proto_item_append_text(field_data->item_tag, " (%d entr%s)", offset / 6, plurality(offset / 6, "y", "ies")((offset / 6) == 1 ? ("y") : ("ies")));
36163
36164 return tvb_captured_length(tvb);
36165}
36166
36167static int
36168ieee80211_tag_gann(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36169{
36170 int tag_len = tvb_reported_length(tvb);
36171 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36172 int offset = 0;
36173
36174 static int * const ieee80211_gann_flags_byte[] = {
36175 &hf_ieee80211_gann_flags_reserved,
36176 NULL((void*)0),
36177 };
36178
36179 /* Gate Announcement (125) */
36180 if (tag_len != 15) {
36181 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36182 "Tag length %u wrong, must be = 15", tag_len);
36183 return tvb_captured_length(tvb);
36184 }
36185
36186 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_gann_flags,
36187 ett_gann_flags_tree, ieee80211_gann_flags_byte,
36188 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36189 offset += 1;
36190
36191 proto_tree_add_item(tree, hf_ieee80211_gann_hop_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36192 offset += 1;
36193 proto_tree_add_item(tree, hf_ieee80211_gann_elem_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36194 offset += 1;
36195 proto_tree_add_item(tree, hf_ieee80211_gann_mesh_gate_addr, tvb, offset, 6, ENC_NA0x00000000);
36196 offset += 6;
36197 proto_tree_add_item(tree, hf_ieee80211_gann_seq_num, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36198 offset += 4;
36199 proto_tree_add_item(tree, hf_ieee80211_gann_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36200
36201 return tvb_captured_length(tvb);
36202}
36203
36204static int
36205ieee80211_tag_mesh_preq(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36206{
36207 int offset = 0;
36208
36209 uint32_t flags;
36210 uint8_t targs, i;
36211
36212 proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &flags);
36213 offset += 1;
36214 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36215 offset += 1;
36216 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36217 offset += 1;
36218 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_pdid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36219 offset += 4;
36220 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA0x00000000);
36221 offset += 6;
36222 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36223 offset += 4;
36224
36225 if (flags & (1<<6)) {
36226 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_ext, tvb, offset, 6, ENC_NA0x00000000);
36227 offset += 6;
36228 }
36229 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36230 offset += 4;
36231 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36232 offset += 4;
36233 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36234 targs = tvb_get_uint8(tvb, offset);
36235 offset += 1;
36236 for (i = 0; i < targs; i++) {
36237 static int * const targ_flags[] = {
36238 &hf_ieee80211_ff_hwmp_targ_to_flags,
36239 &hf_ieee80211_ff_hwmp_targ_usn_flags,
36240 NULL((void*)0)
36241 };
36242
36243 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_hwmp_targ_flags,
36244 ett_hwmp_targ_flags_tree, targ_flags, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36245
36246 offset += 1;
36247 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36248 offset += 6;
36249 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36250 offset += 4;
36251 }
36252
36253 return tvb_captured_length(tvb);
36254}
36255
36256static int
36257ieee80211_tag_mesh_prep(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36258{
36259 int offset = 0;
36260
36261 uint32_t flags;
36262 proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &flags);
36263 offset += 1;
36264 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36265 offset += 1;
36266 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset , 1, ENC_LITTLE_ENDIAN0x80000000);
36267 offset += 1;
36268 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36269 offset += 6;
36270 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36271 offset += 4;
36272 if (flags & (1<<6)) {
36273 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA0x00000000);
36274 offset += 6;
36275 }
36276 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36277 offset += 4;
36278 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36279 offset += 4;
36280 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA0x00000000);
36281 offset += 6;
36282 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36283 return tvb_captured_length(tvb);
36284}
36285
36286static int
36287ieee80211_tag_mesh_perr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36288{
36289 int offset = 0;
36290 uint8_t targs, i;
36291
36292 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36293 offset += 1;
36294 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36295 targs = tvb_get_uint8(tvb, offset);
36296 offset += 1;
36297 for (i = 0; i < targs; i++) {
36298 uint8_t flags = tvb_get_uint8(tvb, offset);
36299
36300 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36301 offset += 1;
36302 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36303 offset += 6;
36304 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36305 offset += 4;
36306 if (flags & (1<<6)) {
36307 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA0x00000000);
36308 offset += 6;
36309 }
36310 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
36311 }
36312 return tvb_captured_length(tvb);
36313}
36314
36315static int
36316ieee80211_tag_pxu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36317{
36318 int tag_len = tvb_reported_length(tvb);
36319 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36320 int offset = 0;
36321 uint32_t pxu_count = 0, i, proxy_info_len;
36322 uint8_t pxu_flag;
36323 proto_item *item;
36324 proto_tree *subtree;
36325
36326 static int * const ieee80211_pxu_proxy_info_flags_byte[] = {
36327 &hf_ieee80211_pxu_proxy_info_flags_delete,
36328 &hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy,
36329 &hf_ieee80211_pxu_proxy_info_flags_lifetime,
36330 &hf_ieee80211_pxu_proxy_info_flags_reserved,
36331 NULL((void*)0),
36332 };
36333
36334 /* PXU element (137) */
36335 if (tag_len < 8) {
36336 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36337 "Tag length %u wrong, must be at least 8", tag_len);
36338 return tvb_captured_length(tvb);
36339 }
36340
36341 proto_tree_add_item(tree, hf_ieee80211_pxu_pxu_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36342 offset += 1;
36343 proto_tree_add_item(tree, hf_ieee80211_pxu_pxu_origin_mac, tvb, offset, 6, ENC_NA0x00000000);
36344 offset += 6;
36345 proto_tree_add_item_ret_uint(tree, hf_ieee80211_pxu_no_proxy_info, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &pxu_count);
36346 offset += 1;
36347
36348 for (i = 0; i < pxu_count; i++) {
36349 pxu_flag = tvb_get_uint8(tvb, offset);
36350 proxy_info_len = 1 + 6 + 4 + ((pxu_flag & 0x2) ? 0 : 6) + ((pxu_flag & 0x4) ? 4 : 0);
36351
36352 item = proto_tree_add_item(tree, hf_ieee80211_pxu_proxy_info, tvb, offset, proxy_info_len, ENC_NA0x00000000);
36353 subtree = proto_item_add_subtree(item, ett_pxu_proxy_info_tree);
36354 proto_item_append_text(item, " #%u", (i + 1));
36355
36356 proto_tree_add_bitmask_with_flags(subtree, tvb, offset, hf_ieee80211_pxu_proxy_info_flags,
36357 ett_pxu_proxy_info_flags_tree, ieee80211_pxu_proxy_info_flags_byte,
36358 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36359 offset += 1;
36360
36361 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_ext_mac, tvb, offset, 6, ENC_NA0x00000000);
36362 offset += 6;
36363
36364 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_seq_num, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36365 offset += 4;
36366
36367 if (!(pxu_flag & 0x2)) {
36368 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_proxy_mac, tvb, offset, 6, ENC_NA0x00000000);
36369 offset += 6;
36370 }
36371
36372 if (pxu_flag & 0x4) {
36373 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36374 offset += 4;
36375 }
36376 }
36377
36378 proto_item_append_text(field_data->item_tag, " (%d entr%s)", pxu_count, plurality(pxu_count, "y", "ies")((pxu_count) == 1 ? ("y") : ("ies")));
36379 return tvb_captured_length(tvb);
36380}
36381
36382static int
36383ieee80211_tag_pxuc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36384{
36385 int tag_len = tvb_reported_length(tvb);
36386 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36387 int offset = 0;
36388
36389 /* PXUC element (138) */
36390 if (tag_len != 7) {
36391 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36392 "Tag length %u wrong, must be = 7", tag_len);
36393 return tvb_captured_length(tvb);
36394 }
36395
36396 proto_tree_add_item(tree, hf_ieee80211_pxuc_pxu_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36397 offset += 1;
36398 proto_tree_add_item(tree, hf_ieee80211_pxuc_pxu_recip_mac, tvb, offset, 6, ENC_NA0x00000000);
36399
36400 return tvb_captured_length(tvb);
36401}
36402
36403static int
36404ieee80211_tag_mic(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36405{
36406 int tag_len = tvb_reported_length(tvb);
36407 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36408
36409 if ((tag_len != 16) && (tag_len != 24))
36410 {
36411 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36412 "MIC Tag Length %u wrong, must be 16 or 24", tag_len);
36413 return tvb_captured_length(tvb);
36414 }
36415
36416 proto_tree_add_item(tree, hf_ieee80211_mesh_mic, tvb, 0, tag_len, ENC_NA0x00000000);
36417 return tvb_captured_length(tvb);
36418}
36419
36420static int
36421ieee80211_tag_rann(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36422{
36423 int offset = 0;
36424 proto_tree_add_item(tree, hf_ieee80211_rann_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36425 offset += 1;
36426 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36427 offset += 1;
36428 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36429 offset += 1;
36430 proto_tree_add_item(tree, hf_ieee80211_rann_root_sta, tvb, offset, 6, ENC_NA0x00000000);
36431 offset += 6;
36432 proto_tree_add_item(tree, hf_ieee80211_rann_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36433 offset += 4;
36434 proto_tree_add_item(tree, hf_ieee80211_rann_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36435 offset += 4;
36436 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36437 return tvb_captured_length(tvb);
36438}
36439
36440/* Mesh Channel Switch Parameters (118) */
36441static int
36442ieee80211_tag_mesh_channel_switch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36443{
36444 int tag_len = tvb_reported_length(tvb);
36445 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36446 int offset = 0;
36447 static int * const ieee80211_mesh_chswitch_flag[] = {
36448 &hf_ieee80211_mesh_chswitch_flag_initiator,
36449 &hf_ieee80211_mesh_chswitch_flag_txrestrict,
36450 NULL((void*)0)
36451 };
36452
36453 if (tag_len != 6)
36454 {
36455 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
36456 return tvb_captured_length(tvb);
36457 }
36458
36459 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36460 proto_item_append_text(field_data->item_tag, " TTL: %d", tvb_get_uint8(tvb, offset));
36461 offset += 1;
36462
36463 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_mesh_channel_switch_flag,
36464 ett_mesh_chswitch_flag_tree, ieee80211_mesh_chswitch_flag, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36465 offset += 1;
36466
36467 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_reason_code, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36468 offset += 2;
36469
36470 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_precedence_value, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36471 return tvb_captured_length(tvb);
36472}
36473
36474/* Mesh Awake Window Parameters (119) */
36475static int
36476ieee80211_tag_mesh_awake_window(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36477{
36478 int tag_len = tvb_reported_length(tvb);
36479 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36480 int offset = 0;
36481
36482 if (tag_len != 2) {
36483 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36484 "Tag length %u wrong, must be = 2", tag_len);
36485 return tvb_captured_length(tvb);
36486 }
36487
36488 proto_tree_add_item(tree, hf_ieee80211_mesh_awake_window, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36489 return tvb_captured_length(tvb);
36490}
36491
36492static int
36493ieee80211_tag_channel_switch_announcement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36494{
36495 int tag_len = tvb_reported_length(tvb);
36496 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36497 int offset = 0;
36498 if (tag_len != 4)
36499 {
36500 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
36501 return tvb_captured_length(tvb);
36502 }
36503
36504 add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
36505 return tvb_captured_length(tvb);
36506}
36507
36508static int
36509ieee80211_tag_supported_operating_classes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36510{
36511 int tag_len = tvb_reported_length(tvb);
36512 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36513 int offset = 0;
36514 proto_item* item = NULL((void*)0);
36515 uint8_t field_len = 0;
36516 uint8_t alt_op_class_field[256];
36517
36518 if (tag_len < 2) {
36519 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
36520 return tvb_captured_length(tvb);
36521 } else if (tag_len > 255) {
36522 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, uint8 <= 255", tag_len);
36523 return tvb_captured_length(tvb);
36524 }
36525
36526 proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_current, tvb, offset++, 1, ENC_NA0x00000000);
36527
36528 for (int i = offset; i < tag_len; i++) {
36529 uint8_t op_class = tvb_get_uint8(tvb, i);
36530 /* Field terminates immediately before OneHundredAndThirty or Zero delimiter */
36531 if (op_class == 130 || op_class == 0) {
36532 break;
36533 }
36534 alt_op_class_field[field_len++] = op_class;
36535 }
36536 if (field_len) {
36537 item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_alternate, tvb, offset, field_len, ENC_NA0x00000000);
36538 }
36539 for (int i = 0; i < field_len; i++) {
36540 proto_item_append_text(item, i == 0 ? ": %d":", %d", alt_op_class_field[i]);
36541 }
36542
36543 /* TODO parse optional Current Operating Class Extension Sequence field */
36544 /* TODO parse optional Operating Class Duple Sequence field */
36545 return tvb_captured_length(tvb);
36546}
36547
36548static int
36549ieee80211_tag_bss_parameter_change(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36550{
36551 int tag_len = tvb_reported_length(tvb);
36552 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36553 int offset = 0;
36554 bool_Bool size;
36555 if (tag_len != 7)
36556 {
36557 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
36558 return tvb_captured_length(tvb);
36559 }
36560 size = (tvb_get_uint8(tvb, offset) & 0x02) >> 1;
36561 proto_tree_add_item(tree, hf_ieee80211_tag_move, tvb, offset, 1, ENC_NA0x00000000);
36562 proto_tree_add_item(tree, hf_ieee80211_tag_size, tvb, offset, 1, ENC_NA0x00000000);
36563 offset += 1;
36564 proto_tree_add_item(tree, hf_ieee80211_tag_tbtt_offset, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36565 offset += 4;
36566 if(size == true1) { /* if size bit is 0, the field is reserved. */
36567 proto_tree_add_item(tree, hf_ieee80211_tag_bi_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36568 }
36569 return tvb_captured_length(tvb);
36570}
36571
36572static int
36573ieee80211_tag_dmg_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36574{
36575 int tag_len = tvb_reported_length(tvb);
36576 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36577 int offset = 0;
36578 static int * const ieee80211_tag_dmg_cap1[] = {
36579 &hf_ieee80211_tag_reverse_direction,
36580 &hf_ieee80211_tag_hlts,
36581 &hf_ieee80211_tag_tpc,
36582 &hf_ieee80211_tag_spsh,
36583 &hf_ieee80211_tag_rx_antenna,
36584 &hf_ieee80211_tag_fast_link,
36585 &hf_ieee80211_tag_num_sectors,
36586 &hf_ieee80211_tag_rxss_length,
36587 &hf_ieee80211_tag_reciprocity,
36588 &hf_ieee80211_tag_max_ampdu_exp,
36589 NULL((void*)0)
36590 };
36591
36592 static int * const ieee80211_tag_dmg_cap2[] = {
36593 &hf_ieee80211_tag_min_mpdu_spacing,
36594 &hf_ieee80211_tag_ba_flow_control,
36595 &hf_ieee80211_tag_max_sc_rx_mcs,
36596 &hf_ieee80211_tag_max_ofdm_rx_mcs,
36597 &hf_ieee80211_tag_max_sc_tx_mcs,
36598 &hf_ieee80211_tag_max_ofdm_tx_mcs,
36599 NULL((void*)0)
36600 };
36601
36602 static int * const ieee80211_tag_dmg_cap3[] = {
36603 &hf_ieee80211_tag_low_power_supported,
36604 &hf_ieee80211_tag_code_rate,
36605 &hf_ieee80211_tag_dtp,
36606 &hf_ieee80211_tag_appdu_supp,
36607 &hf_ieee80211_tag_heartbeat,
36608 &hf_ieee80211_tag_other_aid,
36609 &hf_ieee80211_tag_pattern_recip,
36610 &hf_ieee80211_tag_heartbeat_elapsed,
36611 &hf_ieee80211_tag_grant_ack_supp,
36612 &hf_ieee80211_tag_RXSSTxRate_supp,
36613 NULL((void*)0)
36614 };
36615
36616 static int * const ieee80211_tag_dmg_cap4[] = {
36617 &hf_ieee80211_tag_pcp_tddti,
36618 &hf_ieee80211_tag_pcp_PSA,
36619 &hf_ieee80211_tag_pcp_handover,
36620 &hf_ieee80211_tag_pcp_max_assoc,
36621 &hf_ieee80211_tag_pcp_power_src,
36622 &hf_ieee80211_tag_pcp_decenter,
36623 &hf_ieee80211_tag_pcp_forwarding,
36624 &hf_ieee80211_tag_pcp_center,
36625 NULL((void*)0)
36626 };
36627
36628 static int * const ieee80211_tag_dmg_cap5[] = {
36629 &hf_ieee80211_tag_ext_sc_mcs_max_tx,
36630 &hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8,
36631 &hf_ieee80211_tag_ext_sc_mcs_max_rx,
36632 &hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8,
36633 NULL((void*)0)
36634 };
36635
36636 /*
36637 * Plenty of devices still do not conform to the older version of this
36638 * field. So, it must be at least 17 bytes in length.
36639 */
36640 if (tag_len < 17)
36641 {
36642 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must contain at least 17 bytes", tag_len);
36643 return tvb_captured_length(tvb);
36644 }
36645
36646 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_sta_addr, tvb, offset, 6, ENC_NA0x00000000);
36647 offset += 6;
36648 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_aid, tvb, offset, 1, ENC_NA0x00000000);
36649 offset += 1;
36650 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_dmg_cap1, ENC_LITTLE_ENDIAN0x80000000);
36651 offset += 3;
36652 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_dmg_cap2, ENC_LITTLE_ENDIAN0x80000000);
36653 offset += 3;
36654 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_dmg_cap3, ENC_LITTLE_ENDIAN0x80000000);
36655 offset += 2;
36656 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_dmg_cap4, ENC_LITTLE_ENDIAN0x80000000);
36657 offset += 2;
36658
36659 /*
36660 * There are many captures out there that do not conform to the 2016
36661 * version, so give them a malformed IE message now after we have dissected
36662 * the above
36663 */
36664 if (tag_len != 22)
36665 {
36666 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u does not conform to IEEE802.11-2016, should contain 22 bytes", tag_len);
36667 return tvb_captured_length(tvb);
36668 }
36669
36670 proto_tree_add_item(tree, hf_ieee80211_tag_sta_beam_track, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36671 offset += 2;
36672 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_dmg_cap5, ENC_LITTLE_ENDIAN0x80000000);
36673 offset += 1;
36674 proto_tree_add_item(tree, hf_ieee80211_tag_max_basic_sf_amsdu, tvb, offset, 1, ENC_NA0x00000000);
36675 offset += 1;
36676 proto_tree_add_item(tree, hf_ieee80211_tag_max_short_sf_amsdu, tvb, offset, 1, ENC_NA0x00000000);
36677
36678 return tvb_captured_length(tvb);
36679}
36680
36681static int
36682ieee80211_tag_dmg_operation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36683{
36684 int tag_len = tvb_reported_length(tvb);
36685 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36686 int offset = 0;
36687 static int * const ieee80211_tag_dmg_operation_flags[] = {
36688 &hf_ieee80211_tag_pcp_tddti,
36689 &hf_ieee80211_tag_pcp_PSA,
36690 &hf_ieee80211_tag_pcp_handover,
36691 NULL((void*)0)
36692 };
36693
36694 if (tag_len != 10)
36695 {
36696 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 10", tag_len);
36697 return tvb_captured_length(tvb);
36698 }
36699 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_dmg_operation_flags, ENC_LITTLE_ENDIAN0x80000000);
36700 offset += 2;
36701 proto_tree_add_item(tree, hf_ieee80211_tag_PSRSI, tvb, offset, 1, ENC_NA0x00000000);
36702 offset += 1;
36703 proto_tree_add_item(tree, hf_ieee80211_tag_min_BHI_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36704 offset += 2;
36705 proto_tree_add_item(tree, hf_ieee80211_tag_brdct_sta_info_dur, tvb, offset, 1, ENC_NA0x00000000);
36706 offset += 1;
36707 proto_tree_add_item(tree, hf_ieee80211_tag_assoc_resp_confirm_time, tvb, offset, 1, ENC_NA0x00000000);
36708 offset += 1;
36709 proto_tree_add_item(tree, hf_ieee80211_tag_min_pp_duration, tvb, offset, 1, ENC_NA0x00000000);
36710 offset += 1;
36711 proto_tree_add_item(tree, hf_ieee80211_tag_SP_idle_timeout, tvb, offset, 1, ENC_NA0x00000000);
36712 offset += 1;
36713 proto_tree_add_item(tree, hf_ieee80211_tag_max_lost_beacons, tvb, offset, 1, ENC_NA0x00000000);
36714 return tvb_captured_length(tvb);
36715}
36716
36717static int
36718ieee80211_tag_antenna_section_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36719{
36720 int tag_len = tvb_reported_length(tvb);
36721 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36722 int offset = 0;
36723 static int * const ieee80211_tag_antenna[] = {
36724 &hf_ieee80211_tag_type,
36725 &hf_ieee80211_tag_tap1,
36726 &hf_ieee80211_tag_state1,
36727 &hf_ieee80211_tag_tap2,
36728 &hf_ieee80211_tag_state2,
36729 NULL((void*)0)
36730 };
36731
36732 if (tag_len != 4)
36733 {
36734 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
36735 return tvb_captured_length(tvb);
36736 }
36737 proto_tree_add_bitmask_list(tree, tvb, offset, 4, ieee80211_tag_antenna, ENC_LITTLE_ENDIAN0x80000000);
36738 return tvb_captured_length(tvb);
36739}
36740
36741static int
36742ieee80211_tag_extended_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36743{
36744 int tag_len = tvb_reported_length(tvb);
36745 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36746 int offset = 0;
36747 int i;
36748 bool_Bool isGrant;
36749 proto_tree * alloc_tree;
36750 if ((tag_len%15) != 0)
36751 {
36752 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);
36753 return tvb_captured_length(tvb);
36754 }
36755 isGrant = ((field_data->ftype==CTRL_GRANT0x164)||(field_data->ftype==CTRL_GRANT_ACK0x167));
36756 for(i=0; i < tag_len; i+=15) {
36757 alloc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 15, ett_allocation_tree, NULL((void*)0), "Allocation %d", i/15);
36758 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36759 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36760 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pseudo_static, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36761 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_truncatable, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36762 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_extendable, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36763 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pcp_active, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36764 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_lp_sc_used, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36765 offset += 2;
36766 offset += add_ff_beamforming_ctrl(alloc_tree, tvb, pinfo, offset, isGrant);
36767 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_src_aid, tvb, offset, 1, ENC_NA0x00000000);
36768 offset += 1;
36769 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_dest_aid, tvb, offset, 1, ENC_NA0x00000000);
36770 offset += 1;
36771 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36772 offset += 4;
36773 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36774 offset += 2;
36775 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_num_blocks, tvb, offset, 1, ENC_NA0x00000000);
36776 offset += 1;
36777 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36778 offset += 2;
36779 }
36780 return tvb_captured_length(tvb);
36781}
36782
36783static int
36784ieee80211_tag_sta_availability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36785{
36786 int tag_len = tvb_reported_length(tvb);
36787 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36788 int offset = 0;
36789 int i;
36790 proto_tree * sta_info_tree;
36791 if ((tag_len%2) != 0)
36792 {
36793 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);
36794 return tvb_captured_length(tvb);
36795 }
36796 for(i=0; i < tag_len; i+=2) {
36797 sta_info_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2, ett_sta_info, NULL((void*)0), "STA Info %d", i/2);
36798 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36799 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_cbap, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36800 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_pp_avail, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36801 offset += 2;
36802 }
36803 return tvb_captured_length(tvb);
36804}
36805
36806static int
36807ieee80211_tag_next_dmg_ati(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36808{
36809 int tag_len = tvb_reported_length(tvb);
36810 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36811 int offset = 0;
36812 if (tag_len != 6)
36813 {
36814 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
36815 return tvb_captured_length(tvb);
36816 }
36817 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36818 offset += 4;
36819 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36820 return tvb_captured_length(tvb);
36821}
36822
36823static int
36824ieee80211_tag_nextpcp_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36825{
36826 int tag_len = tvb_reported_length(tvb);
36827 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36828 int offset = 0;
36829 int i;
36830 if (tag_len < 1)
36831 {
36832 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);
36833 return tvb_captured_length(tvb);
36834 }
36835 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_token, tvb, offset, 1, ENC_NA0x00000000);
36836 offset += 1;
36837 for(i=0; i < tag_len-1; i+=1) {
36838 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_list, tvb, offset, 1, ENC_NA0x00000000);
36839 offset += 1;
36840 }
36841 return tvb_captured_length(tvb);
36842}
36843
36844static int
36845ieee80211_tag_pcp_handover(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36846{
36847 int tag_len = tvb_reported_length(tvb);
36848 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36849 int offset = 0;
36850 if (tag_len != 13)
36851 {
36852 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 13", tag_len);
36853 return tvb_captured_length(tvb);
36854 }
36855 proto_tree_add_item(tree, hf_ieee80211_tag_old_bssid, tvb, offset, 6, ENC_NA0x00000000);
36856 offset += 6;
36857 proto_tree_add_item(tree, hf_ieee80211_tag_new_pcp_addr, tvb, offset, 6, ENC_NA0x00000000);
36858 offset += 6;
36859 proto_tree_add_item(tree, hf_ieee80211_tag_remaining_BI, tvb, offset, 1, ENC_NA0x00000000);
36860 return tvb_captured_length(tvb);
36861}
36862
36863static int
36864ieee80211_tag_beamlink_maintenance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36865{
36866 int tag_len = tvb_reported_length(tvb);
36867 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36868 int offset = 0;
36869 if (tag_len != 1)
36870 {
36871 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
36872 return tvb_captured_length(tvb);
36873 }
36874 add_ff_beamformed_link(tree, tvb, pinfo, offset);
36875 return tvb_captured_length(tvb);
36876}
36877
36878static int
36879ieee80211_tag_quiet_period_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36880{
36881 int tag_len = tvb_reported_length(tvb);
36882 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36883 int offset = 0;
36884 if (tag_len != 10)
36885 {
36886 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 10", tag_len);
36887 return tvb_captured_length(tvb);
36888 }
36889 proto_tree_add_item(tree, hf_ieee80211_tag_request_token, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36890 offset += 2;
36891 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA0x00000000);
36892 offset += 6;
36893 add_ff_sta_address(tree, tvb, pinfo, offset);
36894 return tvb_captured_length(tvb);
36895}
36896
36897static int
36898ieee80211_tag_relay_transfer_param(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36899{
36900 int tag_len = tvb_reported_length(tvb);
36901 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36902 int offset = 0;
36903
36904 if (tag_len != 8)
36905 {
36906 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
36907 return tvb_captured_length(tvb);
36908 }
36909 proto_tree_add_item(tree, hf_ieee80211_tag_duplex_relay, tvb, offset, 1, ENC_NA0x00000000);
36910 proto_tree_add_item(tree, hf_ieee80211_tag_cooperation_relay, tvb, offset, 1, ENC_NA0x00000000);
36911 proto_tree_add_item(tree, hf_ieee80211_tag_tx_mode, tvb, offset, 1, ENC_NA0x00000000);
36912 proto_tree_add_item(tree, hf_ieee80211_tag_link_change_interval, tvb, offset+1, 1, ENC_NA0x00000000);
36913 proto_tree_add_item(tree, hf_ieee80211_tag_data_sensing_time, tvb, offset+2, 1, ENC_NA0x00000000);
36914 proto_tree_add_item(tree, hf_ieee80211_tag_first_period, tvb, offset+3, 2, ENC_LITTLE_ENDIAN0x80000000);
36915 proto_tree_add_item(tree, hf_ieee80211_tag_second_period, tvb, offset+5, 2, ENC_LITTLE_ENDIAN0x80000000);
36916 return tvb_captured_length(tvb);
36917}
36918
36919static int
36920ieee80211_tag_dmg_beam_refinement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36921{
36922 int tag_len = tvb_reported_length(tvb);
36923 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36924 int offset = 0;
36925 static int * const ieee80211_dmg_beam_refinement_fields[] = {
36926 &hf_ieee80211_tag_initiator,
36927 &hf_ieee80211_tag_tx_train_res,
36928 &hf_ieee80211_tag_rx_train_res,
36929 &hf_ieee80211_tag_tx_trn_ok,
36930 &hf_ieee80211_tag_txss_fbck_req,
36931 &hf_ieee80211_tag_bs_fbck,
36932 &hf_ieee80211_tag_bs_fbck_antenna_id,
36933 &hf_ieee80211_tag_snr_requested,
36934 &hf_ieee80211_tag_channel_measurement_requested,
36935 &hf_ieee80211_tag_number_of_taps_requested,
36936 &hf_ieee80211_tag_sector_id_order_req,
36937 &hf_ieee80211_tag_snr_present,
36938 &hf_ieee80211_tag_channel_measurement_present,
36939 &hf_ieee80211_tag_tap_delay_present,
36940 &hf_ieee80211_tag_number_of_taps_present,
36941 &hf_ieee80211_tag_number_of_measurement,
36942 &hf_ieee80211_tag_sector_id_order_present,
36943 &hf_ieee80211_tag_number_of_beams,
36944 &hf_ieee80211_tag_mid_extension,
36945 &hf_ieee80211_tag_capability_request,
36946 &hf_ieee80211_tag_beam_refine_reserved,
36947 NULL((void*)0)
36948 };
36949
36950 if (tag_len != 5)
36951 {
36952 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
36953 return tvb_captured_length(tvb);
36954 }
36955
36956 proto_tree_add_bitmask_list(tree, tvb, offset, 5, ieee80211_dmg_beam_refinement_fields, ENC_LITTLE_ENDIAN0x80000000);
36957 return tvb_captured_length(tvb);
36958}
36959
36960static int
36961ieee80211_tag_wakeup_schedule_ad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36962{
36963 int tag_len = tvb_reported_length(tvb);
36964 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36965 int offset = 0;
36966
36967 if (tag_len != 8)
36968 {
36969 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
36970 return tvb_captured_length(tvb);
36971 }
36972 proto_tree_add_item(tree, hf_ieee80211_tag_bi_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36973 offset += 4;
36974 proto_tree_add_item(tree, hf_ieee80211_tag_sleep_cycle, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36975 offset += 2;
36976 proto_tree_add_item(tree, hf_ieee80211_tag_num_awake_bis, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36977 return tvb_captured_length(tvb);
36978}
36979
36980static int
36981ieee80211_tag_dmg_tspec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36982{
36983 int tag_len = tvb_reported_length(tvb);
36984 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36985 int offset = 0;
36986
36987 bool_Bool isGrant;
36988 int num_constraints;
36989 if (tag_len < 14)
36990 {
36991 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);
36992 return tvb_captured_length(tvb);
36993 }
36994 static int * const ieee80211_tag_tspec_flags[] = {
36995 &hf_ieee80211_tag_tspec_allocation_id,
36996 &hf_ieee80211_tag_tspec_allocation_type,
36997 &hf_ieee80211_tag_tspec_allocation_format,
36998 &hf_ieee80211_tag_tspec_pseudo_static,
36999 &hf_ieee80211_tag_tspec_truncatable,
37000 &hf_ieee80211_tag_tspec_extendable,
37001 &hf_ieee80211_tag_tspec_lp_sc_used,
37002 &hf_ieee80211_tag_tspec_up,
37003 &hf_ieee80211_tag_tap2,
37004 &hf_ieee80211_tag_tspec_dest_aid,
37005 NULL((void*)0)
37006 };
37007
37008 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_tspec_flags, ENC_LITTLE_ENDIAN0x80000000);
37009 offset += 3;
37010 isGrant = ((field_data->ftype==CTRL_GRANT0x164)||(field_data->ftype==CTRL_GRANT_ACK0x167));
37011 offset += add_ff_beamforming_ctrl(tree, tvb, pinfo, 2, isGrant);
37012 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37013 offset += 2;
37014 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37015 offset += 2;
37016 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_max_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37017 offset += 2;
37018 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37019 offset += 2;
37020 num_constraints = tvb_get_uint8(tvb, offset);
37021 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_num_of_constraints, tvb, offset, 1, ENC_NA0x00000000);
37022 offset += 1;
37023 while(num_constraints > 0) {
37024 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
37025 offset += 4;
37026 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37027 offset += 2;
37028 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37029 offset += 2;
37030 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_interferer_mac, tvb, offset, 2, ENC_NA0x00000000);
37031 offset += 6;
37032 num_constraints--;
37033 }
37034 return tvb_captured_length(tvb);
37035}
37036
37037static int
37038ieee80211_tag_channel_measurement_fb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37039{
37040 int tag_len = tvb_reported_length(tvb);
37041 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37042 int offset = 0;
37043
37044 int num_measurement;
37045 if (tag_len%5 != 0)
37046 {
37047 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);
37048 return tvb_captured_length(tvb);
37049 }
37050 num_measurement = tvb_get_uint8(tvb, offset+1);
37051 offset += 2;
37052 while(num_measurement > 0) {
37053 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA0x00000000);
37054 offset += 1;
37055 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_relative_I, tvb, offset, 1, ENC_NA0x00000000);
37056 offset += 1;
37057 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_relative_Q, tvb, offset, 1, ENC_NA0x00000000);
37058 offset += 1;
37059 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_tap_delay, tvb, offset, 1, ENC_NA0x00000000);
37060 offset += 1;
37061 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_sector_id, tvb, offset, 1, ENC_NA0x00000000);
37062 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
37063 offset += 1;
37064 num_measurement--;
37065 }
37066 return tvb_captured_length(tvb);
37067}
37068
37069static int
37070ieee80211_tag_awake_window(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37071{
37072 int tag_len = tvb_reported_length(tvb);
37073 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37074
37075 if (tag_len != 2)
37076 {
37077 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 2", tag_len);
37078 }
37079 else
37080 {
37081 proto_tree_add_item(tree, hf_ieee80211_tag_awake_window, tvb, 0, 2, ENC_LITTLE_ENDIAN0x80000000);
37082 }
37083 return tvb_captured_length(tvb);
37084}
37085
37086static int
37087ieee80211_tag_addba_ext(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37088{
37089 int tag_len = tvb_reported_length(tvb);
37090 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37091
37092 if (tag_len != 1)
37093 {
37094 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
37095 }
37096 else
37097 {
37098 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_no_frag, tvb, 0, 1, ENC_NA0x00000000);
37099 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_he_fragmentation_operation, tvb, 0, 1, ENC_NA0x00000000);
37100 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_reserved, tvb, 0, 1, ENC_NA0x00000000);
37101 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_buffer_size, tvb, 0, 1, ENC_NA0x00000000);
37102 }
37103 return tvb_captured_length(tvb);
37104}
37105
37106static int
37107ieee80211_tag_multi_band(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37108{
37109 int tag_len = tvb_reported_length(tvb);
37110 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37111 int offset = 0;
37112 bool_Bool chiper_present, addr_present;
37113 static int * const ieee80211_tag_multi_band_ctrl[] = {
37114 &hf_ieee80211_tag_multi_band_ctrl_sta_role,
37115 &hf_ieee80211_tag_multi_band_ctrl_addr_present,
37116 &hf_ieee80211_tag_multi_band_ctrl_cipher_present,
37117 NULL((void*)0)
37118 };
37119 static int * const ieee80211_tag_multi_band_conn[] = {
37120 &hf_ieee80211_tag_multi_band_conn_ap,
37121 &hf_ieee80211_tag_multi_band_conn_pcp,
37122 &hf_ieee80211_tag_multi_band_conn_dls,
37123 &hf_ieee80211_tag_multi_band_conn_tdls,
37124 &hf_ieee80211_tag_multi_band_conn_ibss,
37125 NULL((void*)0)
37126 };
37127
37128 if (tag_len < 22)
37129 {
37130 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);
37131 return tvb_captured_length(tvb);
37132 }
37133 chiper_present = (tvb_get_letohs(tvb, offset) & 0x08) >> 3;
37134 addr_present = (tvb_get_letohs(tvb, offset) & 0x10) >> 4;
37135 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_multi_band_ctrl, ENC_NA0x00000000);
37136 offset += 1;
37137 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37138 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_oper_class, tvb, offset, 1, ENC_NA0x00000000);
37139 offset += 1;
37140 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_channel_number, tvb, offset, 1, ENC_NA0x00000000);
37141 offset += 1;
37142 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA0x00000000);
37143 offset += 6;
37144 offset += add_ff_beacon_interval(tree, tvb, pinfo, 2);
37145 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_tsf_offset, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
37146 offset += 8;
37147
37148 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_multi_band_conn, ENC_NA0x00000000);
37149 offset += 1;
37150 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_fst_timeout, tvb, offset, 1, ENC_NA0x00000000);
37151 offset += 1;
37152 if(addr_present)
37153 {
37154 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_sta_mac, tvb, offset, 6, ENC_NA0x00000000);
37155 offset += 6;
37156 }
37157 if(chiper_present)
37158 {
37159 proto_item *rsn_pcs_count, *rsn_pcs_item, *rsn_sub_pcs_item;
37160 proto_tree *rsn_pcs_tree, *rsn_sub_pcs_tree;
37161 int ii;
37162 uint16_t pcs_count;
37163 int tag_end = tvb_reported_length(tvb);
37164 rsn_pcs_count = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37165 pcs_count = tvb_get_letohs(tvb, offset);
37166 offset += 2;
37167
37168 if (offset + (pcs_count * 4) > tag_end)
37169 {
37170 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
37171 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
37172 pcs_count = (tag_end - offset) / 4;
37173 }
37174
37175 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA0x00000000);
37176 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
37177 for (ii = 0; ii < pcs_count; ii++)
37178 {
37179 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
37180 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
37181 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
37182
37183 /* Check if OUI is 00:0F:AC (ieee80211) */
37184 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
37185 {
37186 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
37187 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
37188 } else {
37189 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
37190 }
37191 offset += 4;
37192 }
37193 }
37194
37195 return tvb_captured_length(tvb);
37196}
37197
37198static int
37199ieee80211_tag_dmg_link_margin(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37200{
37201 int tag_len = tvb_reported_length(tvb);
37202 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37203 int offset = 0;
37204
37205 if (tag_len != 8)
37206 {
37207 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
37208 return tvb_captured_length(tvb);
37209 }
37210 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA0x00000000);
37211 offset += 1;
37212 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_mcs, tvb, offset, 1, ENC_NA0x00000000);
37213 offset += 1;
37214 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_link_margin, tvb, offset, 1, ENC_NA0x00000000);
37215 offset += 1;
37216 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA0x00000000);
37217 offset += 1;
37218 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
37219 return tvb_captured_length(tvb);
37220}
37221
37222static int
37223ieee80211_tag_dmg_link_adaption_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37224{
37225 int tag_len = tvb_reported_length(tvb);
37226 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37227 int offset = 0;
37228
37229 if (tag_len != 5)
37230 {
37231 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
37232 return tvb_captured_length(tvb);
37233 }
37234 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA0x00000000);
37235 offset += 1;
37236 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
37237 return tvb_captured_length(tvb);
37238}
37239
37240static int
37241ieee80211_tag_switching_stream(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37242{
37243 int tag_len = tvb_reported_length(tvb);
37244 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37245 int offset = 0;
37246 static int * const ieee80211_tag_switching_stream_flags[] = {
37247 &hf_ieee80211_tag_switching_stream_old_tid,
37248 &hf_ieee80211_tag_switching_stream_old_direction,
37249 &hf_ieee80211_tag_switching_stream_new_tid,
37250 &hf_ieee80211_tag_switching_stream_new_direction,
37251 &hf_ieee80211_tag_switching_stream_new_valid_id,
37252 &hf_ieee80211_tag_switching_stream_llt_type,
37253 NULL((void*)0)
37254 };
37255
37256 int param_num;
37257 if (tag_len < 4)
37258 {
37259 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);
37260 return tvb_captured_length(tvb);
37261 }
37262 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37263 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37264 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_non_qos, tvb, offset, 1, ENC_NA0x00000000);
37265 offset += 1;
37266 param_num = tvb_get_letohs(tvb, offset);
37267 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_param_num, tvb, offset, 1, ENC_NA0x00000000);
37268 offset += 1;
37269 while(param_num > 0)
37270 {
37271 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_switching_stream_flags, ENC_NA0x00000000);
37272 param_num--;
37273 offset += 2;
37274 }
37275 return tvb_captured_length(tvb);
37276}
37277
37278static const range_string channel_usage_mode[] = {
37279 { 0, 0, "Channel-usage-aidable BSS" },
37280 { 1, 1, "Off-channel TDLS Direct Link" },
37281 { 2, 2, "Channel-usage-aidable BSS in which none of the channel-usage-aiding BSSs that belong to the same ESS" },
37282 { 3, 3, "Unavailability Indication" },
37283 { 4, 4, "Channel-usage-aidable BSS Channel Switch Request" },
37284 { 5, 5, "Capability Notification" },
37285 { 6, 254, "Reserved" },
37286 { 255, 255, "Unknown Request" },
37287 { 0, 0, NULL((void*)0) }
37288};
37289
37290static int
37291ieee80211_tag_channel_usage(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37292{
37293 int tag_len = tvb_reported_length(tvb);
37294 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37295 int offset = 0;
37296
37297 if (tag_len < 1)
37298 {
37299 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);
37300 return tvb_captured_length(tvb);
37301 }
37302
37303 proto_tree_add_item(tree, hf_ieee80211_tag_channel_usage_mode, tvb, offset, 1, ENC_NA0x00000000);
37304 offset += 1;
37305
37306 while (offset < tag_len) {
37307 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
37308 offset += add_ff_channel(tree, tvb, pinfo, offset);
37309 }
37310
37311 return tvb_captured_length(tvb);
37312}
37313
37314static const range_string dms_req_type[] = {
37315 { 0, 0, "Add" },
37316 { 1, 1, "Remove" },
37317 { 2, 2, "Change" },
37318 { 3, 255, "Reserved" },
37319 { 0, 0, NULL((void*)0) }
37320};
37321
37322static int
37323ieee80211_tag_dms_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37324{
37325 int tag_len = tvb_reported_length(tvb);
37326 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37327 int offset = 0;
37328
37329 if (tag_len < 3)
37330 {
37331 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 3", tag_len);
37332 return tvb_captured_length(tvb);
37333 }
37334
37335 proto_tree_add_item(tree, hf_ieee80211_tag_dms_id, tvb, offset, 1, ENC_NA0x00000000);
37336 offset += 1;
37337
37338 proto_tree_add_item(tree, hf_ieee80211_tag_dms_length, tvb, offset, 1, ENC_NA0x00000000);
37339 offset += 1;
37340
37341 proto_tree_add_item(tree, hf_ieee80211_tag_dms_req_type, tvb, offset, 1, ENC_NA0x00000000);
37342 offset += 1;
37343
37344 /* There will be at least one tclass element ... */
37345 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37346 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
37347 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37348 }
37349 /* There could be a TCLAS PROCESS element ... */
37350 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37351 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
37352 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37353 }
37354 /* There could be a TSPEC element ... */
37355 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37356 tvb_get_uint8(tvb, offset) == TAG_TSPEC13) {
37357 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
Value stored to 'offset' is never read
37358 }
37359 /* Subelements? */
37360
37361 return tvb_captured_length(tvb);
37362}
37363
37364static const range_string dms_resp_type[] = {
37365 { 0, 0, "Accept" },
37366 { 1, 1, "Denied" },
37367 { 2, 2, "Terminate" },
37368 { 3, 3, "GCR Advertise" },
37369 { 4, 255, "Reserved" },
37370 { 0, 0, NULL((void*)0) }
37371};
37372
37373static int
37374ieee80211_tag_dms_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37375{
37376 int tag_len = tvb_reported_length(tvb);
37377 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37378 int offset = 0;
37379
37380 if (tag_len < 5)
37381 {
37382 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be at least 5", tag_len);
37383 return tvb_captured_length(tvb);
37384 }
37385
37386 proto_tree_add_item(tree, hf_ieee80211_tag_dms_id, tvb, offset, 1, ENC_NA0x00000000);
37387 offset += 1;
37388
37389 proto_tree_add_item(tree, hf_ieee80211_tag_dms_length, tvb, offset, 1, ENC_NA0x00000000);
37390 offset += 1;
37391
37392 proto_tree_add_item(tree, hf_ieee80211_tag_dms_resp_type, tvb, offset, 1, ENC_NA0x00000000);
37393 offset += 1;
37394
37395 proto_tree_add_item(tree, hf_ieee80211_tag_dms_last_seq_control, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37396 offset += 2;
37397
37398 /* There will be at least one tclass element ... */
37399 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37400 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
37401 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37402 }
37403 /* There could be a TCLAS PROCESS element ... */
37404 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37405 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
37406 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37407 }
37408 /* There could be a TSPEC element ... */
37409 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37410 tvb_get_uint8(tvb, offset) == TAG_TSPEC13) {
37411 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37412 }
37413 /* Subelements? */
37414
37415 return tvb_captured_length(tvb);
37416}
37417
37418static void
37419ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
37420 proto_tree *tree, int tagged_parameters_len, int ftype,
37421 association_sanity_check_t *association_sanity_check)
37422{
37423 int next_len;
37424 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
37425 while (tagged_parameters_len > 0) {
37426 uint8_t tag_no = tvb_get_uint8(tvb, offset);
37427
37428 /* TODO make callers optionally specify the list of valid IE IDs? */
37429 if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype, NULL((void*)0), 0, association_sanity_check)) == 0)
37430 break;
37431 if (next_len > tagged_parameters_len) {
37432 /* XXX - flag this as an error? */
37433 next_len = tagged_parameters_len;
37434 }
37435 offset += next_len;
37436 tagged_parameters_len -= next_len;
37437
37438 /* If FILS is used, all data after the FILS Session tag in a (re)association message is encrypted */
37439 if (association_sanity_check != NULL((void*)0) && association_sanity_check->has_fils_session) {
37440 proto_tree_add_item(tree, hf_ieee80211_fils_encrypted_data, tvb, offset, tagged_parameters_len, ENC_NA0x00000000);
37441 break;
37442 }
37443
37444 /* In an AMPE frame the data following the MIC element is encrypted */
37445 if ((tag_no == TAG_MIC140) && (association_sanity_check != NULL((void*)0)) && association_sanity_check->ampe_frame) {
37446 proto_tree_add_item(tree, hf_ieee80211_mesh_ampe_encrypted_data, tvb, offset, tagged_parameters_len, ENC_NA0x00000000);
37447 break;
37448 }
37449 }
37450}
37451
37452static void
37453ieee_80211_do_association_sanity_check(packet_info *pinfo, association_sanity_check_t *sanity_check)
37454{
37455 /* Given a [re-]association request frame, consider it in its totality and
37456 add expert information as appropriate */
37457
37458 if (sanity_check->association_has_mobility_domain_element) {
37459 /* This is an FT association, warn about any non-FT AKM suites */
37460 if (sanity_check->has_non_ft_akm_suite) {
37461 expert_add_info_format(pinfo, sanity_check->rsn_first_non_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
37462 "Non-FT AKM suite is prohibited for FT association request");
37463 }
37464 } else {
37465 /* This is a non-FT association, warn about any FT AKM suites */
37466 if (sanity_check->has_ft_akm_suite) {
37467 expert_add_info_format(pinfo, sanity_check->rsn_first_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
37468 "FT AKM suite is prohibited for non-FT association request");
37469 }
37470 }
37471}
37472
37473/* ************************************************************************* */
37474/* Dissect 802.11 management frame */
37475/* ************************************************************************* */
37476static void dissect_mgt_action(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset, association_sanity_check_t *sanity_check)
37477{
37478 proto_item *lcl_fixed_hdr;
37479 proto_tree *lcl_fixed_tree;
37480 proto_tree *tagged_tree;
37481 int tagged_parameter_tree_len;
37482
37483 lcl_fixed_tree = proto_tree_add_subtree(tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
37484 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0, sanity_check);
37485
37486 proto_item_set_len(lcl_fixed_hdr, offset);
37487 if (ieee80211_tvb_invalid)
37488 return; /* Buffer not available for further processing */
37489 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37490 if (tagged_parameter_tree_len > 0) {
37491 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
37492 tagged_parameter_tree_len);
37493 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37494 tagged_parameter_tree_len, MGT_ACTION0x0D,
37495 sanity_check);
37496 }
37497}
37498
37499static void
37500dissect_ieee80211_mgt(uint16_t fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
37501{
37502 proto_item *ti;
37503 proto_tree *mgt_tree;
37504 proto_tree *fixed_tree;
37505 proto_tree *tagged_tree;
37506 int offset = 0;
37507 int tagged_parameter_tree_len;
37508 bool_Bool is_s1g = sta_is_s1g(pinfo);
37509
37510 conversation_t *conversation;
37511 ieee80211_conversation_data_t *conversation_data;
37512
37513 association_sanity_check_t association_sanity_check;
37514 memset(&association_sanity_check, 0, sizeof(association_sanity_check));
37515
37516
37517 ieee80211_tvb_invalid = false0;
37518
37519 ti = proto_tree_add_item(tree, hf_ieee80211_mgt, tvb, 0, -1, ENC_NA0x00000000);
37520 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
37521 /*
37522 * Add the frame type to the pinfo for those cases where it is needed
37523 * to determine other things.
37524 * XXX - Is there any reason why this is file scoped? Couldn't this
37525 * be pinfo->pool?
37526 */
37527 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, FRAME_TYPE_KEY, GINT_TO_POINTER(COMPOSE_FRAME_TYPE(fcf))((gpointer) (glong) ((((((fcf) & 0xC) >> 2) == 0x1 &&
(((fcf) & 0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)
<< 6) + ((fcf) & 0xF0) + (((fcf) & 0xF00) >>
8)) : (((fcf & 0x0C)<< 2)+(((fcf) & 0xF0) >>
4)))))
);
37528
37529 switch (COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
)
37530 {
37531
37532 case MGT_ASSOC_REQ0x00:
37533 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 4, false0);
37534 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37535 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
37536 offset = 4; /* Size of fixed fields */
37537
37538 tagged_parameter_tree_len =
37539 tvb_reported_length_remaining(tvb, offset);
37540 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37541 tagged_parameter_tree_len);
37542 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37543 tagged_parameter_tree_len, MGT_ASSOC_REQ0x00, &association_sanity_check);
37544 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
37545
37546 if (!pinfo->fd->visited) {
37547 if (!assoc_counter_in_auth) {
37548 association_counter++;
37549 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
37550 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
37551 } else {
37552 assoc_counter_in_auth = 0;
37553 }
37554 }
37555 conversation = find_or_create_wlan_conversation(pinfo);
37556 conversation_data = get_or_create_conversation_data(conversation);
37557 set_conversation_last_akm_suite(conversation_data,
37558 association_sanity_check.last_akm_suite);
37559 conversation_data->owe_group = association_sanity_check.owe_group;
37560 break;
37561
37562
37563 case MGT_ASSOC_RESP0x01:
37564 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, is_s1g ? 4 : 6,
37565 false0);
37566 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37567 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
37568 if (!is_s1g) {
37569 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
37570 offset = 6; /* Size of fixed fields */
37571 } else {
37572 offset = 4;
37573 }
37574
37575 tagged_parameter_tree_len =
37576 tvb_reported_length_remaining(tvb, offset);
37577 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37578 tagged_parameter_tree_len);
37579 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37580 tagged_parameter_tree_len, MGT_ASSOC_RESP0x01, &association_sanity_check);
37581 break;
37582
37583
37584 case MGT_REASSOC_REQ0x02:
37585 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 10, false0);
37586 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37587 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
37588 add_ff_current_ap_addr(fixed_tree, tvb, pinfo, 4);
37589 offset = 10; /* Size of fixed fields */
37590
37591 tagged_parameter_tree_len =
37592 tvb_reported_length_remaining(tvb, offset);
37593 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37594 tagged_parameter_tree_len);
37595 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37596 tagged_parameter_tree_len, MGT_REASSOC_REQ0x02, &association_sanity_check);
37597 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
37598
37599 if (!pinfo->fd->visited) {
37600 if (!assoc_counter_in_auth) {
37601 association_counter++;
37602 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
37603 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
37604 } else {
37605 assoc_counter_in_auth = 0;
37606 }
37607 }
37608 conversation = find_or_create_wlan_conversation(pinfo);
37609 conversation_data = get_or_create_conversation_data(conversation);
37610 set_conversation_last_akm_suite(conversation_data,
37611 association_sanity_check.last_akm_suite);
37612 conversation_data->owe_group = association_sanity_check.owe_group;
37613 break;
37614
37615 case MGT_REASSOC_RESP0x03:
37616 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6, false0);
37617 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37618 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
37619 if (!is_s1g) {
37620 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
37621 offset = 6; /* Size of fixed fields */
37622 } else {
37623 offset = 4;
37624 }
37625
37626 tagged_parameter_tree_len =
37627 tvb_reported_length_remaining(tvb, offset);
37628 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37629 tagged_parameter_tree_len);
37630 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37631 tagged_parameter_tree_len, MGT_REASSOC_RESP0x03, &association_sanity_check);
37632 break;
37633
37634
37635 case MGT_PROBE_REQ0x04:
37636 offset = 0;
37637 tagged_parameter_tree_len =
37638 tvb_reported_length_remaining(tvb, offset);
37639 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37640 tagged_parameter_tree_len);
37641 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37642 tagged_parameter_tree_len, MGT_PROBE_REQ0x04, NULL((void*)0));
37643 break;
37644
37645 case MGT_PROBE_RESP0x05:
37646 {
37647 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
37648 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
37649 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
37650 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
37651 offset = 12; /* Size of fixed fields */
37652
37653 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37654 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
37655 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_PROBE_RESP0x05, NULL((void*)0));
37656 break;
37657 }
37658 case MGT_MEASUREMENT_PILOT0x06:
37659 {
37660 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
37661 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
37662 offset += add_ff_measurement_pilot_int(fixed_tree, tvb, pinfo, offset);
37663 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
37664 offset += add_ff_cap_info(fixed_tree, tvb, pinfo, offset);
37665 offset += add_ff_country_str(fixed_tree, tvb, pinfo, offset);
37666 offset += add_ff_max_reg_pwr(fixed_tree, tvb, pinfo, offset);
37667 offset += add_ff_max_tx_pwr(fixed_tree, tvb, pinfo, offset);
37668 offset += add_ff_tx_pwr_used(fixed_tree, tvb, pinfo, offset);
37669 offset += add_ff_transceiver_noise_floor(fixed_tree, tvb, pinfo, offset);
37670 /* TODO DS Parameter Set ??? */
37671
37672 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37673 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
37674 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_MEASUREMENT_PILOT0x06, NULL((void*)0));
37675 break;
37676 }
37677 case MGT_BEACON0x08: /* Dissect protocol payload fields */
37678 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
37679 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
37680 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
37681 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
37682 offset = 12; /* Size of fixed fields */
37683
37684 tagged_parameter_tree_len =
37685 tvb_reported_length_remaining(tvb, offset);
37686 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37687 tagged_parameter_tree_len);
37688 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37689 tagged_parameter_tree_len, MGT_BEACON0x08, NULL((void*)0));
37690 break;
37691
37692 case MGT_ATIM0x09:
37693 break;
37694
37695 case MGT_DISASS0x0A:
37696 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2, false0);
37697 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
37698 offset = 2; /* Size of fixed fields */
37699 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37700 if (tagged_parameter_tree_len > 0) {
37701 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37702 tagged_parameter_tree_len);
37703 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37704 tagged_parameter_tree_len, MGT_DISASS0x0A, NULL((void*)0));
37705 }
37706
37707 conversation = find_wlan_conversation_pinfo(pinfo);
37708 if (conversation) {
37709 conversation_delete_proto_data(conversation, proto_wlan);
37710 }
37711 break;
37712
37713 case MGT_AUTHENTICATION0x0B:
37714 offset = 6; /* Size of fixed fields */
37715
37716 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, offset, true1);
37717 offset = dissect_auth_frame(fixed_tree, pinfo, tvb);
37718 proto_item_append_text(fixed_tree, " (%d bytes)", offset);
37719 proto_item_set_len(fixed_tree, offset);
37720
37721 tagged_parameter_tree_len =
37722 tvb_reported_length_remaining(tvb, offset);
37723 if (tagged_parameter_tree_len > 0)
37724 {
37725 tagged_tree = get_tagged_parameter_tree(mgt_tree,
37726 tvb,
37727 offset,
37728 tagged_parameter_tree_len);
37729 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37730 tagged_parameter_tree_len, MGT_AUTHENTICATION0x0B, NULL((void*)0));
37731 }
37732 break;
37733
37734 case MGT_DEAUTHENTICATION0x0C:
37735 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2, false0);
37736 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
37737 offset = 2; /* Size of fixed fields */
37738 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37739 if (tagged_parameter_tree_len > 0) {
37740 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37741 tagged_parameter_tree_len);
37742 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37743 tagged_parameter_tree_len, MGT_DEAUTHENTICATION0x0C, NULL((void*)0));
37744 }
37745
37746 conversation = find_wlan_conversation_pinfo(pinfo);
37747 if (conversation) {
37748 conversation_delete_proto_data(conversation, proto_wlan);
37749 }
37750 break;
37751
37752 case MGT_ACTION0x0D:
37753 dissect_mgt_action(tvb, pinfo, mgt_tree, offset, &association_sanity_check);
37754 break;
37755
37756 case MGT_ACTION_NO_ACK0x0E:
37757 {
37758 proto_item *lcl_fixed_hdr;
37759 proto_tree *lcl_fixed_tree;
37760 lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
37761
37762 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0, NULL((void*)0));
37763
37764 proto_item_set_len(lcl_fixed_hdr, offset);
37765 if (ieee80211_tvb_invalid)
37766 break; /* Buffer not available for further processing */
37767 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37768 if (tagged_parameter_tree_len > 0)
37769 {
37770 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37771 tagged_parameter_tree_len);
37772 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37773 tagged_parameter_tree_len, MGT_ACTION_NO_ACK0x0E, NULL((void*)0));
37774 }
37775 break;
37776 }
37777 case MGT_ARUBA_WLAN0x0F:
37778 {
37779 proto_tree *aruba_tree;
37780 uint16_t type;
37781 type = tvb_get_ntohs(tvb, offset);
37782
37783 aruba_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, NULL((void*)0), "Aruba Management");
37784
37785 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
37786 offset += 2;
37787 switch(type){
37788 case 0x0003: /* MTU Size */
37789 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_mtu, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
37790 break;
37791 case 0x0005: /* HeartBeat Sequence */
37792 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_hb_seq, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
37793 break;
37794 }
37795 break;
37796 }
37797 }
37798}
37799
37800/*
37801 * Dissect a Block Ack request (which is also used in Trigger frames).
37802 */
37803static int * const block_ack_control_headers[] = {
37804 &hf_ieee80211_block_ack_control_ack_policy,
37805 &hf_ieee80211_block_ack_control_type,
37806 &hf_ieee80211_block_ack_control_reserved,
37807 &hf_ieee80211_block_ack_control_tid_info,
37808 NULL((void*)0)
37809};
37810
37811static int * const multi_sta_aid_tid_headers[] = {
37812 &hf_ieee80211_block_ack_multi_sta_aid11,
37813 &hf_ieee80211_block_ack_multi_sta_ack_type,
37814 &hf_ieee80211_block_ack_multi_sta_tid,
37815 NULL((void*)0)
37816};
37817
37818/*
37819 * These bits are shown in reverse order in the spec.
37820 */
37821#define BASIC_BLOCK_ACK0x0 0x0
37822#define EXTENDED_COMPRESSED_BLOCK_ACK0x1 0x1
37823#define COMPRESSED_BLOCK_ACK0x2 0x2
37824#define MULTI_TID_BLOCK_ACK0x3 0x3
37825#define GCR_BLOCK_ACK0x6 0x6
37826#define GLK_GCR_BLOCK_ACK0xA 0xA
37827#define MULTI_STA_BLOCK_ACK0xB 0xB
37828
37829static const value_string block_ack_type_vals[] = {
37830 { BASIC_BLOCK_ACK0x0, "Basic BlockAck" },
37831 { EXTENDED_COMPRESSED_BLOCK_ACK0x1, "Extended Compressed BlockAck" },
37832 { COMPRESSED_BLOCK_ACK0x2, "Compressed BlockAck" },
37833 { MULTI_TID_BLOCK_ACK0x3, "Multi-TID BlockAck" },
37834 { GCR_BLOCK_ACK0x6, "GCR BlockAck" },
37835 { GLK_GCR_BLOCK_ACK0xA, "GLK-GCR BlockAck" },
37836 { MULTI_STA_BLOCK_ACK0xB, "Multi-STA BlockAck" },
37837 { 0, NULL((void*)0) }
37838};
37839
37840static int
37841dissect_ieee80211_block_ack_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
37842 proto_tree *tree, int offset, uint16_t ssn, unsigned bitmap_size)
37843{
37844 uint64_t bitmap;
37845 uint16_t last_ack_frame_pos = 0;
37846 int f;
37847 int i;
37848 unsigned j;
37849
37850 proto_item *ba_bitmap_item = proto_tree_add_item(tree,
37851 hf_ieee80211_block_ack_bitmap,
37852 tvb, offset, bitmap_size, ENC_NA0x00000000);
37853 proto_item *ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item,
37854 ett_block_ack_bitmap);
37855 proto_item * last_ack_frame_item;
37856
37857 /* Handle bitmap_size = 4 for Multi-STA block ack */
37858 if (bitmap_size == 4)
37859 {
37860 bitmap = tvb_get_letohl(tvb, offset);
37861
37862 if (bitmap != 0)
37863 last_ack_frame_pos = ws_ilog2(bitmap);
37864
37865 for (f = 0; f < last_ack_frame_pos && f < 32; f++) {
37866 if (bitmap & (UINT64_C(1)1UL << f))
37867 continue;
37868 proto_tree_add_uint_format_value(ba_bitmap_tree,
37869 hf_ieee80211_block_ack_bitmap_missing_frame,
37870 tvb, offset + (f/8), 1, ssn + f, "%u",
37871 (ssn + f) & 0x0fff);
37872 }
37873
37874 } else {
37875 /* Browse the bitmap backwards to find the last acknowledged frame */
37876 for (i = bitmap_size - 8; i >= 0; i -= 8) {
37877 bitmap = tvb_get_letoh64(tvb, offset + i);
37878
37879 if (bitmap == 0)
37880 continue;
37881
37882 last_ack_frame_pos = i * 8 + ws_ilog2(bitmap);
37883 break;
37884 }
37885
37886 /* Browse the bitmap up to the last the last acknowledged frame */
37887 for (j = 0; j < bitmap_size * 8; j += 64) {
37888 bitmap = tvb_get_letoh64(tvb, offset + j/8);
37889 for (f = 0; f < 64 && (f + j) < last_ack_frame_pos; f++) {
37890 if (bitmap & (UINT64_C(1)1UL << f))
37891 continue;
37892 proto_tree_add_uint_format_value(ba_bitmap_tree,
37893 hf_ieee80211_block_ack_bitmap_missing_frame,
37894 tvb, offset + ((f + j)/8), 1, ssn + f + j, "%u",
37895 (ssn + f + j) & 0x0fff);
37896 }
37897 }
37898 }
37899
37900 last_ack_frame_item = proto_tree_add_uint_format_value(ba_bitmap_tree,
37901 hf_ieee80211_block_ack_bitmap_last_ack_frame,
37902 tvb, offset + (last_ack_frame_pos/8), 1, ssn + last_ack_frame_pos, "%u",
37903 (ssn + last_ack_frame_pos) & 0x0fff);
37904 proto_item_set_generated(last_ack_frame_item);
37905
37906 return offset + bitmap_size;
37907}
37908
37909static int
37910dissect_ieee80211_block_ack_details(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
37911 proto_tree *tree, int offset, bool_Bool isDMG, bool_Bool is_req, bool_Bool has_fcs)
37912{
37913 proto_item *pi;
37914 uint16_t ba_control;
37915 uint8_t block_ack_type;
37916 proto_tree *ba_tree;
37917 uint8_t tid_count, frag_num;
37918 unsigned i;
37919 proto_tree *ba_mtid_tree, *ba_mtid_sub_tree;
37920 uint16_t ssn;
37921 uint16_t aid_tid;
37922 proto_tree *ba_multi_sta_tree;
37923 int ba_start = offset;
37924
37925 ba_control = tvb_get_letohs(tvb, offset);
37926 block_ack_type = (ba_control & 0x001E) >> 1;
37927 ba_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_block_ack,
37928 &pi, is_req ? "%s Request" : "%s Response",
37929 val_to_str(pinfo->pool, block_ack_type, block_ack_type_vals,
37930 "Reserved (%d)"));
37931 proto_tree_add_bitmask_with_flags(ba_tree, tvb, offset,
37932 hf_ieee80211_block_ack_control,
37933 ett_block_ack_request_control,
37934 block_ack_control_headers,
37935 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
37936 offset += 2;
37937
37938 switch (block_ack_type) {
37939 case BASIC_BLOCK_ACK0x0:
37940 if (isDMG == true1) {
37941 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
37942 "DMG STAs shouldn't transmit BlockAckReq frames "
37943 "with Basic BlockAckReqs");
37944 }
37945
37946 /* Both request and response have an SSC */
37947 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
37948
37949 if (!is_req) {
37950 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_bitmap, tvb, offset,
37951 128, ENC_NA0x00000000);
37952 offset += 128;
37953 }
37954 break;
37955
37956 case COMPRESSED_BLOCK_ACK0x2:
37957 ssn = tvb_get_letohs(tvb, offset);
37958 frag_num = ssn & 0x0F;
37959 ssn >>= 4;
37960 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
37961
37962 if (!is_req) {
37963 unsigned bytes = 0;
37964 if (((frag_num & 0x06) >> 1) == 2) {
37965 bytes = 32;
37966 } else if ((frag_num & 0x0f) == 0x08) {
37967 bytes = 64;
37968 } else if ((frag_num & 0x0f) == 0x0A) {
37969 bytes = 128;
37970 } else { /* Default length */
37971 bytes = 8;
37972 }
37973
37974 offset = dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_tree, offset, ssn, bytes);
37975 }
37976 break;
37977
37978 case EXTENDED_COMPRESSED_BLOCK_ACK0x1:
37979 if (isDMG == false0) {
37980 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
37981 "Non-DMG STAs shouldn't transmit BlockAckReq "
37982 "frames with Extended Compressed BlockAckReqs");
37983 }
37984
37985 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
37986
37987 if (!is_req) {
37988 ssn = tvb_get_letohs(tvb, offset);
37989 ssn >>= 4;
37990
37991 dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_tree, offset, ssn, 8);
37992 offset += 8;
37993 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_RBUFCAP, tvb, offset,
37994 1, ENC_LITTLE_ENDIAN0x80000000);
37995 offset += 1;
37996 }
37997 break;
37998
37999 case MULTI_TID_BLOCK_ACK0x3:
38000
38001 if (isDMG == true1) {
38002 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
38003 "DMG STAs shouldn't transmit BlockAckReq frames "
38004 "with Multi-TID BlockAckReqs");
38005 }
38006
38007 tid_count = ((ba_control & 0xF000) >> 12) + 1;
38008 if (is_req) {
38009 ba_mtid_tree = proto_tree_add_subtree(ba_tree, tvb, offset, tid_count*4,
38010 ett_block_ack, NULL((void*)0), "TID List");
38011 for (i = 0; i < tid_count; i++) {
38012 uint8_t tid = tvb_get_uint8(tvb, offset) & 0x0F;
38013 ba_mtid_sub_tree = proto_tree_add_subtree_format(ba_mtid_tree, tvb,
38014 offset, 4, ett_block_ack_tid, NULL((void*)0),
38015 "TID %u details", tid);
38016
38017 proto_tree_add_item(ba_mtid_sub_tree,
38018 hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2,
38019 ENC_LITTLE_ENDIAN0x80000000);
38020 proto_tree_add_item(ba_mtid_sub_tree,
38021 hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2,
38022 ENC_LITTLE_ENDIAN0x80000000);
38023 offset += 2;
38024
38025 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
38026 }
38027 } else {
38028 ba_mtid_tree = proto_tree_add_subtree(ba_tree, tvb, offset, tid_count*4,
38029 ett_block_ack, NULL((void*)0), "TID List");
38030 for (i = 0; i < tid_count; i++) {
38031 uint8_t tid = tvb_get_uint8(tvb, offset) & 0x0F;
38032 ba_mtid_sub_tree = proto_tree_add_subtree_format(ba_mtid_tree, tvb,
38033 offset, 4, ett_block_ack_tid, NULL((void*)0),
38034 "TID %u details", tid);
38035
38036 proto_tree_add_item(ba_mtid_sub_tree,
38037 hf_ieee80211_block_ack_multi_tid_reserved,
38038 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38039 proto_tree_add_item(ba_mtid_sub_tree,
38040 hf_ieee80211_block_ack_multi_tid_value, tvb,
38041 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38042 offset += 2;
38043
38044 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
38045 proto_tree_add_item(ba_mtid_sub_tree,
38046 hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
38047 offset += 8;
38048 }
38049 }
38050 break;
38051
38052 case GCR_BLOCK_ACK0x6:
38053 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
38054
38055 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_gcr_addr, tvb,
38056 offset, 6, ENC_NA0x00000000);
38057 offset += 6;
38058
38059 if (!is_req) {
38060 proto_tree_add_item(ba_tree,
38061 hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
38062 offset += 8;
38063 }
38064 break;
38065
38066 case MULTI_STA_BLOCK_ACK0xB:
38067 while (tvb_reported_length_remaining(tvb, offset) > (has_fcs ? 4 : 0)) {
38068 int start = offset;
38069 proto_item *msta_ti = NULL((void*)0);
38070 aid_tid = tvb_get_letohs(tvb, offset);
38071 ba_multi_sta_tree = proto_tree_add_subtree_format(ba_tree, tvb, offset, -1,
38072 ett_multi_sta_block_ack, &msta_ti,
38073 "Per AID TID Info: 0x%0x", aid_tid & 0x07ff);
38074 proto_tree_add_bitmask_with_flags(ba_multi_sta_tree, tvb, offset,
38075 hf_ieee80211_block_ack_multi_sta_aid_tid,
38076 ett_block_ack_request_multi_sta_aid_tid,
38077 multi_sta_aid_tid_headers,
38078 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38079 offset += 2;
38080
38081 if ((aid_tid & 0x07ff) != 2045) {
38082 if (((aid_tid & 0x0800) == 0) && ((aid_tid & 0xf000) >> 12) <= 7) {
38083 unsigned bitmap_size;
38084 ssn = tvb_get_letohs(tvb, offset);
38085 frag_num = ssn & 0x0F;
38086 ssn >>= 4;
38087 offset += add_ff_block_ack_ssc(ba_multi_sta_tree, tvb, pinfo, offset);
38088 if ((frag_num & 0x0f) == 0x8 || (frag_num & 0x0f) == 0xA) {
38089 bitmap_size = (frag_num & 0x0f) == 8 ? 64 : 128;
38090 } else {
38091 bitmap_size = ((frag_num + 2) & 0x6) >> 1; /* Turn into an exponent */
38092 bitmap_size = 4 << bitmap_size; /* It goes 4, 8, 16, 32 */
38093 }
38094 offset = dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_multi_sta_tree, offset, ssn, bitmap_size);
38095 }
38096 } else {
38097 offset += add_ff_block_ack_ssc(ba_multi_sta_tree, tvb, pinfo, offset);
38098 proto_tree_add_item(ba_multi_sta_tree, hf_ieee80211_block_ack_multi_sta_reserved,
38099 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38100 offset += 2;
38101 proto_tree_add_item(ba_multi_sta_tree, hf_ieee80211_block_ack_multi_sta_ra,
38102 tvb, offset, 6, ENC_NA0x00000000);
38103 offset += 6;
38104 }
38105 proto_item_set_len(msta_ti, offset - start);
38106 }
38107 break;
38108 }
38109 proto_item_set_len(pi, offset - ba_start);
38110
38111 return offset;
38112}
38113
38114static void
38115dissect_ieee80211_block_ack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
38116 proto_tree *tree, int offset, bool_Bool isDMG, bool_Bool is_req, bool_Bool has_fcs)
38117{
38118 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
38119 offset += 6;
38120
38121 dissect_ieee80211_block_ack_details(tvb, pinfo, tree, offset, isDMG, is_req, has_fcs);
38122}
38123
38124/*
38125 * Dissect an 802.11ax HE Trigger frame and return the actual len including
38126 * padding!
38127 */
38128
38129typedef enum he_trigger_type {
38130 TRIGGER_TYPE_BASIC = 0,
38131 TRIGGER_TYPE_BRP,
38132 TRIGGER_TYPE_MU_BAR,
38133 TRIGGER_TYPE_MU_RTS,
38134 TRIGGER_TYPE_BSRP,
38135 TRIGGER_TYPE_GCR_MU_BAR,
38136 TRIGGER_TYPE_BQRP,
38137 TRIGGER_TYPE_NFRP,
38138 TRIGGER_TYPE_RANGING,
38139 TRIGGER_TYPE_MIN_RESERVED,
38140} he_trigger_type_t;
38141
38142typedef enum he_trigger_subtype {
38143 TRIGGER_SUBTYPE_POLL = 0,
38144 TRIGGER_SUBTYPE_SOUNDING,
38145 TRIGGER_SUBTYPE_SECURE_SOUNDING,
38146 TRIGGER_SUBTYPE_REPORT,
38147 TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE,
38148 TRIGGER_SUBTYPE_MIN_RESERVED,
38149} he_trigger_subtype_t;
38150
38151static const val64_string trigger_type_vals[] = {
38152 { 0, "Basic" },
38153 { 1, "Beamforming Report Poll (BRP)" },
38154 { 2, "MU-BAR" },
38155 { 3, "MU-RTS" },
38156 { 4, "Buffer Status Report Poll (BSRP)" },
38157 { 5, "GCR MU-BAR" },
38158 { 6, "Bandwidth Query Report Poll (BQRP)" },
38159 { 7, "NDP Feedback Report Poll (NFRP)" },
38160 { 8, "Ranging" },
38161 /* 9-15 reserved */
38162 { 0, NULL((void*)0) }
38163};
38164
38165static const val64_string bw_subfield_vals[] = {
38166 { 0, "20 MHz" },
38167 { 1, "40 MHz" },
38168 { 2, "80 MHz" },
38169 { 3, "80+80 MHz or 160 MHz" },
38170 { 0, NULL((void*)0) }
38171};
38172
38173static const val64_string gi_and_ltf_type_subfield_vals[] = {
38174 { 0, "1x LTF + 1.6 us GI" },
38175 { 1, "2x LTF + 1.6 us GI" },
38176 { 2, "4x LTF + 3.2 us GI" },
38177 { 3, "Reserved" },
38178 { 0, NULL((void*)0) }
38179};
38180
38181static const true_false_string mu_mimo_ltf_mode_tfs = {
38182 "HE masked HE LTF sequence mode",
38183 "HE single stream pilot HE LTF mode"
38184};
38185
38186static int * const he_trig_frm_bar_ctrl_fields[] = {
38187 &hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy,
38188 &hf_ieee80211_he_trigger_bar_ctrl_ba_type,
38189 &hf_ieee80211_he_trigger_bar_ctrl_reserved,
38190 &hf_ieee80211_he_trigger_bar_ctrl_tid_info,
38191 NULL((void*)0)
38192};
38193
38194static int * const he_trig_frm_bar_info_fields[] = {
38195 &hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl,
38196 NULL((void*)0)
38197};
38198
38199#define PRE_FEC_PADDING_FACTOR0x3 0x3
38200#define PE_DISAMBIGUITY0x4 0x4
38201
38202static void
38203ap_tx_power_custom(char *result, uint32_t ap_tx_power)
38204{
38205 if (ap_tx_power > 60)
38206 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
38207 else
38208 snprintf(result, ITEM_LABEL_LENGTH240, "%d dBm", -20 + ap_tx_power);
38209}
38210
38211static void
38212add_gcr_mu_bar_trigger_frame_common_info(proto_tree *tree, tvbuff_t *tvb,
38213 int offset)
38214{
38215
38216 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38217 hf_ieee80211_he_trigger_bar_ctrl,
38218 ett_he_trigger_bar_ctrl,
38219 he_trig_frm_bar_ctrl_fields,
38220 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38221 offset += 2;
38222
38223 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38224 hf_ieee80211_he_trigger_bar_info,
38225 ett_he_trigger_bar_info,
38226 he_trig_frm_bar_info_fields,
38227 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38228}
38229
38230static int * const common_info_headers[] = {
38231 &hf_ieee80211_he_trigger_type,
38232 &hf_ieee80211_he_trigger_ul_length,
38233 &hf_ieee80211_he_trigger_more_tf,
38234 &hf_ieee80211_he_trigger_cs_required,
38235 &hf_ieee80211_he_trigger_ul_bw,
38236 &hf_ieee80211_he_trigger_gi_and_ltf_type,
38237 &hf_ieee80211_he_trigger_mu_mimo_ltf_mode,
38238 &hf_ieee80211_he_trigger_num_he_ltf_syms_etc,
38239 &hf_ieee80211_he_trigger_ul_stbc,
38240 &hf_ieee80211_he_trigger_ldpc_extra_sym_seg,
38241 &hf_ieee80211_he_trigger_ap_tx_power,
38242 &hf_ieee80211_he_trigger_pre_fec_padding_factor,
38243 &hf_ieee80211_he_trigger_pe_disambiguity,
38244 &hf_ieee80211_he_trigger_ul_spatial_reuse,
38245 &hf_ieee80211_he_trigger_doppler,
38246 &hf_ieee80211_he_trigger_ul_he_sig_a_reserved,
38247 &hf_ieee80211_he_trigger_reserved,
38248 NULL((void*)0)
38249};
38250
38251static int * const eht_common_info_headers[] = {
38252 &hf_ieee80211_eht_trigger_type,
38253 &hf_ieee80211_eht_trigger_ul_length,
38254 &hf_ieee80211_eht_trigger_more_tf,
38255 &hf_ieee80211_eht_trigger_cs_required,
38256 &hf_ieee80211_eht_trigger_ul_bw,
38257 &hf_ieee80211_eht_trigger_gi_and_eht_ltf_type,
38258 &hf_ieee80211_eht_trigger_reserved2,
38259 &hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc,
38260 &hf_ieee80211_eht_trigger_reserved3,
38261 &hf_ieee80211_eht_trigger_ldpc_extra_sym_seg,
38262 &hf_ieee80211_eht_trigger_ap_tx_power,
38263 &hf_ieee80211_eht_trigger_pre_fec_padding_factor,
38264 &hf_ieee80211_eht_trigger_pe_disambiguity,
38265 &hf_ieee80211_eht_trigger_ul_spatial_reuse,
38266 &hf_ieee80211_eht_trigger_reserved4,
38267 &hf_ieee80211_eht_trigger_he_eht_p160,
38268 &hf_ieee80211_eht_trigger_special_user_info_flag,
38269 &hf_ieee80211_eht_trigger_eht_reserved,
38270 &hf_ieee80211_eht_trigger_reserved,
38271 NULL((void*)0)
38272};
38273
38274static int* const uhr_common_info_headers[] = {
38275 &hf_ieee80211_uhr_trigger_type,
38276 &hf_ieee80211_uhr_trigger_ul_length,
38277 &hf_ieee80211_uhr_trigger_more_tf,
38278 &hf_ieee80211_uhr_trigger_cs_required,
38279 &hf_ieee80211_uhr_trigger_ul_bw,
38280 &hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type,
38281 &hf_ieee80211_uhr_trigger_reserved2,
38282 &hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc,
38283 &hf_ieee80211_uhr_trigger_reserved3,
38284 &hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg,
38285 &hf_ieee80211_uhr_trigger_ap_tx_power,
38286 &hf_ieee80211_uhr_trigger_pre_fec_padding_factor,
38287 &hf_ieee80211_uhr_trigger_pe_disambiguity,
38288 &hf_ieee80211_uhr_trigger_ul_spatial_reuse,
38289 &hf_ieee80211_uhr_trigger_reserved4,
38290 &hf_ieee80211_uhr_trigger_he_uhr_p160,
38291 &hf_ieee80211_uhr_trigger_special_user_info_flag,
38292 &hf_ieee80211_uhr_trigger_dru_rru,
38293 &hf_ieee80211_uhr_trigger_ifcs,
38294 &hf_ieee80211_uhr_trigger_uhr_reserved,
38295 &hf_ieee80211_uhr_trigger_reserved,
38296 NULL((void*)0)
38297};
38298
38299static const val64_string pre_fec_padding_factor_vals[] = {
38300 { 0, "pre-FEC Padding Factor of 4" },
38301 { 1, "pre-FEC Padding Factor of 1" },
38302 { 2, "pre-FEC Padding Factor of 2" },
38303 { 3, "pre-FEC Padding Factor of 3" },
38304 { 0, NULL((void*)0) }
38305};
38306
38307static const true_false_string pe_disambiguity_tfs = {
38308 "PE Disambiguity",
38309 "no PE Disambiguity"
38310 };
38311
38312static int
38313add_trigger_common_info(proto_tree *tree, tvbuff_t *tvb, int offset,
38314 packet_info *pinfo _U___attribute__((unused)), uint8_t trigger_type, int *frame_len,
38315 proto_tree **common_tree)
38316{
38317 proto_item *pi = NULL((void*)0);
38318 proto_tree *common_info = NULL((void*)0);
38319 int length = 0;
38320 int start_offset = offset;
38321 uint64_t bw_etc = tvb_get_letoh64(tvb, offset);
38322 uint64_t special_user = tvb_get_letoh64(tvb, offset+8);
38323 bool_Bool is_uhr = (((bw_etc >> 54) & 0x03) != 0x03) && (((special_user >> 12) & 0x01) == 0x01);
38324 bool_Bool is_eht = (((bw_etc >> 54) & 0x03) != 0x03) && (((special_user >> 12) & 0x01) == 0x00);
38325
38326 global_he_trigger_bw = (bw_etc >> 18) & 0x03;
38327
38328 common_info = proto_tree_add_subtree(tree, tvb, offset, -1,
38329 ett_he_trigger_common_info, &pi, "Common Info");
38330 *common_tree = common_info;
38331
38332 if (is_eht) {
38333 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38334 hf_ieee80211_eht_trigger_common_info,
38335 ett_he_trigger_base_common_info,
38336 eht_common_info_headers,
38337 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38338 } else if (is_uhr) {
38339 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38340 hf_ieee80211_uhr_trigger_common_info,
38341 ett_he_trigger_base_common_info,
38342 uhr_common_info_headers,
38343 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38344 } else {
38345 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38346 hf_ieee80211_he_trigger_common_info,
38347 ett_he_trigger_base_common_info,
38348 common_info_headers,
38349 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38350 }
38351 offset += 8;
38352 length += 8;
38353
38354 /*
38355 * Handle the trigger dependent common info
38356 */
38357 switch (trigger_type) {
38358 case TRIGGER_TYPE_GCR_MU_BAR: /* Actually two uint16 fields */
38359 add_gcr_mu_bar_trigger_frame_common_info(common_info, tvb, offset);
38360 offset += 4;
38361 length += 4;
38362 break;
38363 default: /* No other type has a trigger dependent common info subfield */
38364 break;
38365 }
38366 proto_item_set_len(pi, offset - start_offset);
38367
38368 *frame_len += length;
38369 return length;
38370}
38371
38372static const char * const he_trigger_ru_allocation_region_values[] = {
38373 "primary 80MHz channel for 80+80 and 160MHz",
38374 "secondary 80MHz channel for 80+80 and 160MHz",
38375};
38376
38377/*
38378 * Format the ru allocation region bit
38379 */
38380static void
38381he_trigger_ru_allocation_region_custom(char *result, uint32_t ru_alloc_val)
38382{
38383 if (global_he_trigger_bw == 3) {
38384 snprintf(result, ITEM_LABEL_LENGTH240, "%s",
38385 he_trigger_ru_allocation_region_values[ru_alloc_val & 0x01]);
38386 } else {
38387 snprintf(result, ITEM_LABEL_LENGTH240, "Not used for 20, 40 or 80MHz");
38388 }
38389}
38390
38391static void
38392he_trigger_minus_one_custom(char *result, unsigned ss_alloc_value)
38393{
38394 snprintf(result, ITEM_LABEL_LENGTH240, "%d", ss_alloc_value + 1);
38395}
38396
38397static const true_false_string he_trigger_ul_fec_coding_type_tfs = {
38398 "LDPC",
38399 "BCC"
38400};
38401
38402static const value_string preferred_ac_vals[] = {
38403 { 0, "AC_BE" },
38404 { 1, "AC_BK" },
38405 { 2, "AC_VI" },
38406 { 3, "AC_VO" },
38407 { 0, NULL((void*)0) }
38408};
38409
38410static int * const basic_trigger_dependent_user_headers[] = {
38411 &hf_ieee80211_he_trigger_mpdu_mu_spacing,
38412 &hf_ieee80211_he_trigger_tid_aggregation_limit,
38413 &hf_ieee80211_he_trigger_dependent_reserved1,
38414 &hf_ieee80211_he_trigger_preferred_ac,
38415 NULL((void*)0)
38416};
38417
38418static void
38419add_basic_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38420 int offset)
38421{
38422 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38423 hf_ieee80211_he_trigger_dep_basic_user_info,
38424 ett_he_trigger_dep_basic_user_info,
38425 basic_trigger_dependent_user_headers,
38426 ENC_NA0x00000000, BMT_NO_APPEND0x01);
38427}
38428
38429static void
38430add_brp_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38431 int offset)
38432{
38433 proto_tree_add_item(tree, hf_ieee80211_he_trigger_feedback_seg_retrans_bm,
38434 tvb, offset, 1, ENC_NA0x00000000);
38435}
38436
38437static int
38438add_mu_bar_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38439 int offset, packet_info *pinfo, int *frame_len)
38440{
38441 int start_offset = offset;
38442
38443 /*
38444 * It's a request and not DMG, I think. Also, it is only supposed to be
38445 * a compressed block ack or a multi-tid block ack request.
38446 */
38447 offset = dissect_ieee80211_block_ack_details(tvb, pinfo, tree, offset,
38448 false0, true1, false0);
38449
38450 *frame_len += offset - start_offset;
38451
38452 return offset;
38453}
38454
38455
38456static int * const nfrp_trigger_dependent_user_headers[] = {
38457 &hf_ieee80211_he_trigger_starting_aid,
38458 &hf_ieee80211_he_trigger_dependent_reserved2,
38459 &hf_ieee80211_he_trigger_feedback_type,
38460 &hf_ieee80211_he_trigger_dependent_reserved3,
38461 &hf_ieee80211_he_trigger_nfrp_target_rssi,
38462 &hf_ieee80211_he_trigger_multiplexing_flag,
38463 NULL((void*)0)
38464};
38465
38466static void
38467add_nfrp_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38468 int offset)
38469{
38470 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38471 hf_ieee80211_he_trigger_dep_nfrp_user_info,
38472 ett_he_trigger_dep_nfrp_user_info,
38473 nfrp_trigger_dependent_user_headers,
38474 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38475}
38476
38477/*
38478 * Dissect one of the ranging trigger types ...
38479 */
38480static int * const poll_rpt_hdrs[] = {
38481 &hf_ieee80211_ranging_pol_rpt_aid12_rsid12,
38482 &hf_ieee80211_ranging_pol_rpt_ru_alloc_region,
38483 &hf_ieee80211_ranging_pol_rpt_ru_alloc,
38484 &hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type,
38485 &hf_ieee80211_ranging_pol_rpt_ulmcs,
38486 &hf_ieee80211_ranging_pol_rpt_uldcm,
38487 &hf_ieee80211_ranging_pol_rpt_starting_spatial_stream,
38488 &hf_ieee80211_ranging_pol_rpt_number_spatial_streams,
38489 &hf_ieee80211_ranging_pol_rpt_ul_target_rssi,
38490 &hf_ieee80211_ranging_pol_rpt_reserved,
38491 NULL((void*)0)
38492};
38493
38494static int * const sounding_hdrs[] = {
38495 &hf_ieee80211_ranging_sounding_aid12_rsid12,
38496 &hf_ieee80211_ranging_sounding_reserved1,
38497 &hf_ieee80211_ranging_sounding_i2r_rep,
38498 &hf_ieee80211_ranging_sounding_reserved2,
38499 &hf_ieee80211_ranging_sounding_starting_spatial_stream,
38500 &hf_ieee80211_ranging_sounding_number_spatial_streams,
38501 &hf_ieee80211_ranging_sounding_ul_target_rssi,
38502 &hf_ieee80211_ranging_sounding_reserved3,
38503 NULL((void*)0)
38504};
38505
38506static int * const sec_sound_hdrs[] = {
38507 &hf_ieee80211_ranging_sec_sound_aid12_rsid12,
38508 &hf_ieee80211_ranging_sec_sound_reserved1,
38509 &hf_ieee80211_ranging_sec_sound_i2r_rep,
38510 &hf_ieee80211_ranging_sec_sound_reserved2,
38511 &hf_ieee80211_ranging_sec_sound_starting_spatial_stream,
38512 &hf_ieee80211_ranging_sec_sound_number_spatial_streams,
38513 &hf_ieee80211_ranging_sec_sound_ul_target_rssi,
38514 &hf_ieee80211_ranging_sec_sound_reserved3,
38515 NULL((void*)0)
38516};
38517
38518static int
38519dissect_ieee80211_ranging_trigger_variant(proto_tree *tree, tvbuff_t *tvb,
38520 int offset, packet_info *pinfo _U___attribute__((unused)),
38521 uint8_t subtype)
38522{
38523 int saved_offset = offset;
38524
38525 switch (subtype) {
38526 case TRIGGER_SUBTYPE_POLL:
38527 case TRIGGER_SUBTYPE_REPORT:
38528 proto_tree_add_bitmask(tree, tvb, offset,
38529 hf_ieee80211_he_trigger_ranging_trigger_poll_rpt,
38530 ett_he_trigger_ranging_poll, poll_rpt_hdrs,
38531 ENC_LITTLE_ENDIAN0x80000000);
38532 offset += 5;
38533 break;
38534 case TRIGGER_SUBTYPE_SOUNDING: /* Sounding subvariant */
38535 proto_tree_add_bitmask(tree, tvb, offset,
38536 hf_ieee80211_he_trigger_ranging_trigger_sounding,
38537 ett_he_trigger_ranging_poll, sounding_hdrs,
38538 ENC_LITTLE_ENDIAN0x80000000);
38539 offset += 5;
38540 break;
38541 case TRIGGER_SUBTYPE_SECURE_SOUNDING:
38542 proto_tree_add_bitmask(tree, tvb, offset,
38543 hf_ieee80211_he_trigger_ranging_trigger_sec_sound,
38544 ett_he_trigger_ranging_poll, sec_sound_hdrs,
38545 ENC_LITTLE_ENDIAN0x80000000);
38546 offset += 5;
38547
38548 proto_tree_add_item(tree, hf_ieee80211_he_trigger_ranging_user_info_sac,
38549 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38550 offset += 2;
38551 break;
38552 case TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE:
38553 /* This is much the same as SOUNDING subtype */
38554 proto_tree_add_bitmask(tree, tvb, offset,
38555 hf_ieee80211_he_trigger_ranging_trigger_sounding,
38556 ett_he_trigger_ranging_poll, sounding_hdrs,
38557 ENC_LITTLE_ENDIAN0x80000000);
38558 offset += 5;
38559 break;
38560 default:
38561 /* Unknown subtypes are filtered out above us. Should not get here! */
38562 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 38562))
;
38563 break;
38564 }
38565
38566 return offset - saved_offset;
38567}
38568
38569/*
38570 * Print the target RSSI field as per the spec.
38571 * 0->90 map to -110 to -20 dBm.
38572 * 127 maps to Max ransmit power for assigned MCS
38573 * rest are reserved.
38574 */
38575static void
38576target_rssi_base_custom(char *result, uint32_t target_rssi)
38577{
38578 if (target_rssi <= 90) {
38579 snprintf(result, ITEM_LABEL_LENGTH240, "%ddBm", -110 + target_rssi);
38580 } else if (target_rssi == 127) {
38581 snprintf(result, ITEM_LABEL_LENGTH240, "Max transmit power");
38582 } else {
38583 snprintf(result, ITEM_LABEL_LENGTH240, "Reserved");
38584 }
38585}
38586
38587static int * const user_info_headers_no_2045[] = {
38588 &hf_ieee80211_he_trigger_aid12,
38589 &hf_ieee80211_he_trigger_ru_allocation_region,
38590 &hf_ieee80211_he_trigger_ru_allocation,
38591 &hf_ieee80211_he_trigger_ul_fec_coding_type,
38592 &hf_ieee80211_he_trigger_ul_mcs,
38593 &hf_ieee80211_he_trigger_ul_dcm,
38594 &hf_ieee80211_he_trigger_ru_starting_spatial_stream,
38595 &hf_ieee80211_he_trigger_ru_number_spatial_streams,
38596 &hf_ieee80211_he_trigger_ul_target_rssi,
38597 &hf_ieee80211_he_trigger_user_reserved,
38598 NULL((void*)0)
38599};
38600
38601static int * const user_info_headers_2045[] = {
38602 &hf_ieee80211_he_trigger_aid12,
38603 &hf_ieee80211_he_trigger_ru_allocation_region,
38604 &hf_ieee80211_he_trigger_ru_allocation,
38605 &hf_ieee80211_he_trigger_ul_fec_coding_type,
38606 &hf_ieee80211_he_trigger_ul_mcs,
38607 &hf_ieee80211_he_trigger_ul_dcm,
38608 &hf_ieee80211_he_trigger_ru_number_ra_ru,
38609 &hf_ieee80211_he_trigger_ru_no_more_ra_ru,
38610 &hf_ieee80211_he_trigger_ul_target_rssi,
38611 &hf_ieee80211_he_trigger_user_reserved,
38612 NULL((void*)0)
38613};
38614
38615static int * const user_info_headers_eht[] = {
38616 &hf_ieee80211_eht_trigger_aid12,
38617 &hf_ieee80211_eht_trigger_ru_allocation_region,
38618 &hf_ieee80211_eht_trigger_ru_allocation,
38619 &hf_ieee80211_eht_trigger_ul_fec_coding_type,
38620 &hf_ieee80211_eht_trigger_ul_eht_mcs,
38621 &hf_ieee80211_eht_trigger_user_info_reserved,
38622 &hf_ieee80211_eht_trigger_ru_starting_spatial_stream,
38623 &hf_ieee80211_eht_trigger_ru_number_spatial_streams,
38624 &hf_ieee80211_eht_trigger_ul_target_recv_power,
38625 &hf_ieee80211_eht_trigger_ps160,
38626 NULL((void*)0)
38627};
38628
38629static int * const special_user_info_headers_eht[] = {
38630 &hf_ieee80211_eht_trigger_aid12,
38631 &hf_ieee80211_eht_trigger_phy_version_identifier,
38632 &hf_ieee80211_eht_trigger_ul_bw_extenstion,
38633 &hf_ieee80211_eht_trigger_eht_spatial_reuse_1,
38634 &hf_ieee80211_eht_trigger_eht_spatial_reuse_2,
38635 &hf_ieee80211_eht_trigger_disregard_u_sig_1,
38636 &hf_ieee80211_eht_trigger_validate_u_sig_2,
38637 &hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb,
38638 &hf_ieee80211_eht_trigger_disregard_u_sig_2_msb,
38639 &hf_ieee80211_eht_trigger_special_reserved,
38640 NULL((void*)0)
38641};
38642
38643static int* const user_info_headers_uhr_rru[] = {
38644 &hf_ieee80211_uhr_trigger_aid12,
38645 &hf_ieee80211_uhr_trigger_ru_allocation_region,
38646 &hf_ieee80211_uhr_trigger_ru_allocation,
38647 &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
38648 &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
38649 &hf_ieee80211_uhr_trigger_2xldpc,
38650 &hf_ieee80211_uhr_trigger_ru_starting_spatial_stream,
38651 &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
38652 &hf_ieee80211_uhr_trigger_ul_target_recv_power,
38653 &hf_ieee80211_uhr_trigger_ps160,
38654 NULL((void*)0)
38655};
38656
38657static int* const user_info_headers_uhr_dru[] = {
38658 &hf_ieee80211_uhr_trigger_aid12,
38659 &hf_ieee80211_uhr_trigger_ru_allocation_region,
38660 &hf_ieee80211_uhr_trigger_ru_allocation,
38661 &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
38662 &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
38663 &hf_ieee80211_uhr_trigger_2xldpc,
38664 &hf_ieee80211_uhr_trigger_dru_distribution_bw,
38665 &hf_ieee80211_uhr_trigger_dru_reserved,
38666 &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
38667 &hf_ieee80211_uhr_trigger_ul_target_recv_power,
38668 &hf_ieee80211_uhr_trigger_ps160,
38669 NULL((void*)0)
38670};
38671
38672#define HE_USER_INFO0 0
38673#define EHT_USER_INFO1 1
38674#define SPECIAL_USER_INFO2 2
38675
38676static int
38677add_trigger_user_info(proto_tree *tree, tvbuff_t *tvb, int offset,
38678 packet_info *pinfo, uint8_t trigger_type, uint8_t subtype,
38679 uint8_t common_info_b54_55 _U___attribute__((unused)), int *frame_len, unsigned fcs_len)
38680{
38681 proto_item *pi = NULL((void*)0);
38682 proto_tree *user_info = NULL((void*)0);
38683 int length = 0, range_len = 0;
38684 int start_offset = offset;
38685 uint16_t aid12_subfield = 0;
38686 uint16_t phy_version_subfield = 0;
38687 unsigned len_remaining = 0;
38688 bool_Bool special_user_info;
38689 uint8_t user_info_b39;
38690 bool_Bool eht_variant = false0;
38691 uint8_t ddru_indication;
38692
38693 /*
38694 * If the AID12 subfield has the value 4095 it indicates the start of
38695 * the padding field.
38696 *
38697 * If the AID12 subfield has the value 2007, it indicates a special user
38698 * info field and combined with the common_info_b54_55 and B39 of the user
38699 * info field determines whether this field is an HE User Info field or an
38700 * EHT User Info field.
38701 */
38702 user_info = proto_tree_add_subtree(tree, tvb, offset, -1,
38703 ett_he_trigger_user_info, &pi, "User Info");
38704 aid12_subfield = tvb_get_letohs(tvb, offset) & 0x0FFF;
38705 phy_version_subfield = (tvb_get_letohs(tvb, offset) >> 12) & 0x01;
38706 /*9.3.1.22.2 of 802.11bn and Figure 9-90e1—DRU/RRU Indication subfield format*/
38707 ddru_indication = (tvb_get_letohs(tvb, offset - 1)) & 0x0F;
38708
38709 while (aid12_subfield != 4095) {
38710 /* Compute the special user info and EHT Variant for each one. */
38711 special_user_info = aid12_subfield == 2007;
38712 user_info_b39 = tvb_get_uint8(tvb, offset + 4) >> 7;
38713
38714 /* 9.3.1.22.4 of 802.11be and table 9-45a */
38715 if ((common_info_b54_55 == 0x01 && special_user_info && user_info_b39) ||
38716 (common_info_b54_55 == 0x00 && special_user_info))
38717 eht_variant = true1;
38718
38719 switch (trigger_type) {
38720 case TRIGGER_TYPE_BASIC:
38721 case TRIGGER_TYPE_BRP:
38722 case TRIGGER_TYPE_MU_BAR:
38723 case TRIGGER_TYPE_MU_RTS:
38724 case TRIGGER_TYPE_BSRP:
38725 case TRIGGER_TYPE_GCR_MU_BAR:
38726 case TRIGGER_TYPE_BQRP:
38727 if (!eht_variant) {
38728 if (aid12_subfield != 0 && aid12_subfield != 2045) {
38729 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38730 hf_ieee80211_he_trigger_user_info,
38731 ett_he_trigger_base_user_info,
38732 user_info_headers_no_2045,
38733 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38734 } else {
38735 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38736 hf_ieee80211_he_trigger_user_info,
38737 ett_he_trigger_base_user_info,
38738 user_info_headers_2045,
38739 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38740 }
38741 } else {
38742 /* Is it a special user info? */
38743 if (special_user_info) {
38744 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38745 hf_ieee80211_eht_trigger_special_user_info,
38746 ett_he_trigger_base_user_info,
38747 special_user_info_headers_eht,
38748 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38749 } else {
38750 if (!phy_version_subfield) {
38751 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38752 hf_ieee80211_eht_trigger_user_info,
38753 ett_he_trigger_base_user_info,
38754 user_info_headers_eht,
38755 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38756 } else {
38757 /* 9.3.1.22.6 of 802.11bn and Figure 9-90j2 and Figure 9-90j3 */
38758 if(ddru_indication != 0) {
38759 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38760 hf_ieee80211_uhr_trigger_user_info,
38761 ett_he_trigger_base_user_info,
38762 user_info_headers_uhr_rru,
38763 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38764 } else {
38765 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
38766 hf_ieee80211_uhr_trigger_user_info,
38767 ett_he_trigger_base_user_info,
38768 user_info_headers_uhr_dru,
38769 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38770 }
38771 }
38772 }
38773 }
38774 offset += 5;
38775 length += 5;
38776 break;
38777 case TRIGGER_TYPE_NFRP:
38778 add_nfrp_trigger_dependent_user_info(user_info, tvb, offset);
38779 offset += 5;
38780 length += 5;
38781 break;
38782 case TRIGGER_TYPE_RANGING:
38783 range_len = dissect_ieee80211_ranging_trigger_variant(user_info, tvb,
38784 offset, pinfo, subtype);
38785 if (range_len == 0) {
38786 /* XXX - unknown subtype, report this somehow */
38787 goto out;
38788 }
38789 offset += range_len;
38790 length += range_len;
38791 break;
38792 default:
38793 /* Should never get here */
38794 break;
38795 }
38796
38797
38798 /*
38799 * Handle the trigger dependent user info
38800 */
38801 switch (trigger_type) {
38802 case TRIGGER_TYPE_BASIC:
38803 add_basic_trigger_dependent_user_info(user_info, tvb, offset);
38804 offset++;
38805 length++;
38806 break;
38807 case TRIGGER_TYPE_BRP:
38808 add_brp_trigger_dependent_user_info(user_info, tvb, offset);
38809 offset++;
38810 length++;
38811 break;
38812 case TRIGGER_TYPE_MU_BAR:
38813 /* This is variable length so we need it to update the length */
38814 offset = add_mu_bar_trigger_dependent_user_info(user_info, tvb,
38815 offset, pinfo, &length);
38816 break;
38817 default:
38818 break;
38819 }
38820
38821 len_remaining = tvb_reported_length_remaining(tvb, offset);
38822 if (len_remaining < 5)
38823 aid12_subfield = 4095;
38824 else
38825 aid12_subfield = tvb_get_letohs(tvb, offset) & 0xFFF;
38826 }
38827
38828out:
38829
38830 if (aid12_subfield == 4095 && len_remaining >= 5) {
38831 /* Show the Start of Padding field. */
38832 proto_tree_add_item(user_info,
38833 hf_ieee80211_he_trigger_user_info_padding_start,
38834 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38835 offset += 2;
38836
38837 }
38838
38839 proto_item_set_len(pi, offset - start_offset);
38840
38841 /* Now, treat all the rest of the frame as padding */
38842 if (aid12_subfield == 4095 && len_remaining >= 5) {
38843 proto_tree_add_item(tree, hf_ieee80211_he_trigger_padding, tvb, offset,
38844 tvb_reported_length_remaining(tvb, offset) - fcs_len,
38845 ENC_NA0x00000000);
38846 }
38847
38848 *frame_len += length;
38849 return length;
38850}
38851
38852static const range_string ranging_trigger_subtype_vals[] = {
38853 { 0, 0, "Poll" },
38854 { 1, 1, "Sounding" },
38855 { 2, 2, "Secured Sounding" },
38856 { 3, 3, "Report" },
38857 { 4, 4, "Passive TB Measurement Exchange" },
38858 { 5, 15, "Reserved" },
38859 { 0, 0, NULL((void*)0)},
38860};
38861
38862static int * const ranging_headers1[] = {
38863 &hf_ieee80211_ranging_trigger_subtype1,
38864 &hf_ieee80211_ranging_trigger_reserved1,
38865 &hf_ieee80211_ranging_trigger_token,
38866 NULL((void*)0)
38867};
38868
38869static int * const ranging_headers2[] = {
38870 &hf_ieee80211_ranging_trigger_subtype2,
38871 &hf_ieee80211_ranging_trigger_reserved2,
38872 &hf_ieee80211_ranging_trigger_sounding_dialog_token,
38873 NULL((void*)0)
38874};
38875
38876static int
38877dissect_ieee80211_he_eht_trigger(tvbuff_t *tvb, packet_info *pinfo,
38878 proto_tree *tree, int offset, unsigned fcs_len)
38879{
38880 proto_tree *common_tree = NULL((void*)0);
38881 uint8_t trigger_type;
38882 uint8_t phy_version;
38883 uint8_t subtype = 0;
38884 int length = 0;
38885 uint8_t common_info_b54_55;
38886 bool_Bool eht_trigger = true1;
38887
38888 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
38889
38890 offset += 6;
38891 length += 6;
38892
38893 if (tvb_captured_length_remaining(tvb, offset) < 8) {
38894 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
38895 "Invalid Trigger frame, not enough data for the "
38896 "Common Info field.");
38897 return tvb_captured_length(tvb);
38898 }
38899
38900 trigger_type = tvb_get_uint8(tvb, offset) & 0x0F;
38901 common_info_b54_55 = tvb_get_uint8(tvb, offset + 6);
38902 phy_version = (tvb_get_letohs(tvb, offset + 8) >> 12) & 0x01;
38903 if ((common_info_b54_55 >> 6) == 0x03)
38904 eht_trigger = false0;
38905
38906 col_append_fstr(pinfo->cinfo, COL_INFO, " %s %s",
38907 eht_trigger ? (phy_version ? "UHR": "EHT") : "HE",
38908 val64_to_str_wmem(pinfo->pool, trigger_type, trigger_type_vals, "Reserved"));
38909
38910 if (trigger_type >= TRIGGER_TYPE_MIN_RESERVED) {
38911 /* Add an Expert Info and forget it */
38912 proto_item *item;
38913
38914 item = proto_tree_add_item(tree, hf_ieee80211_he_trigger_type, tvb, offset,
38915 1, ENC_NA0x00000000);
38916 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
38917 "Trigger type too large: %u", trigger_type);
38918 return tvb_captured_length_remaining(tvb, offset) + length;
38919 }
38920
38921 /*
38922 * Deal with the common Info and then any user info after that.
38923 */
38924 offset += add_trigger_common_info(tree, tvb, offset, pinfo,
38925 trigger_type, &length, &common_tree);
38926
38927 /*
38928 * If the trigger type is Ranging Trigger type, then deal with it separately.
38929 */
38930 if (trigger_type == TRIGGER_TYPE_RANGING) {
38931 subtype = tvb_get_uint8(tvb, offset) & 0x0f;
38932
38933 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s",
38934 rval_to_str_const(subtype, ranging_trigger_subtype_vals, "Reserved"));
38935
38936 if (subtype >= TRIGGER_SUBTYPE_MIN_RESERVED) {
38937 proto_item *item;
38938
38939 item = proto_tree_add_item(tree, hf_ieee80211_ranging_trigger_subtype1,
38940 tvb, offset, 1, ENC_NA0x00000000);
38941 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
38942 "Ranging trigger subtype too large: %u", subtype);
38943 return tvb_captured_length_remaining(tvb, offset) + length;
38944 }
38945
38946 switch (subtype) {
38947 case TRIGGER_SUBTYPE_POLL:
38948 case TRIGGER_SUBTYPE_SOUNDING:
38949 case TRIGGER_SUBTYPE_SECURE_SOUNDING:
38950 case TRIGGER_SUBTYPE_REPORT:
38951 proto_tree_add_bitmask(common_tree, tvb, offset,
38952 hf_ieee80211_he_trigger_ranging_common_info_1,
38953 ett_he_trigger_ranging, ranging_headers1,
38954 ENC_NA0x00000000);
38955 offset += 1;
38956 break;
38957 case TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE:
38958 proto_tree_add_bitmask(common_tree, tvb, offset,
38959 hf_ieee80211_he_trigger_ranging_common_info_2,
38960 ett_he_trigger_ranging, ranging_headers2,
38961 ENC_LITTLE_ENDIAN0x80000000);
38962 offset += 2;
38963 break;
38964 default:
38965 /* We should never get here! */
38966 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 38966))
;
38967 break;
38968 }
38969 }
38970
38971 add_trigger_user_info(tree, tvb, offset, pinfo, trigger_type, subtype,
38972 common_info_b54_55, &length, fcs_len);
38973
38974 /*
38975 * Padding should commence here ... TODO, deal with it.
38976 */
38977
38978 return length;
38979}
38980
38981static int * const tack_headers[] = {
38982 &hf_ieee80211_tack_next_twt,
38983 &hf_ieee80211_tack_flow_identifier,
38984 NULL((void*)0)
38985};
38986
38987static int
38988dissect_ieee80211_s1g_tack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
38989 proto_tree *tree, int offset, uint16_t flags)
38990{
38991 int length = 0;
38992
38993 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
38994
38995 offset += 6;
38996 length += 6;
38997
38998 proto_tree_add_item(tree, hf_ieee80211_beacon_sequence, tvb, offset, 1,
38999 ENC_NA0x00000000);
39000 offset += 1;
39001 length += 1;
39002
39003 proto_tree_add_item(tree, hf_ieee80211_pentapartial_timestamp, tvb, offset,
39004 5, ENC_LITTLE_ENDIAN0x80000000);
39005 offset += 5;
39006 length += 5;
39007
39008 if ((flags & 0xC0) == 0xC0) {
39009 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39010 hf_ieee80211_tack_next_twt_info, ett_tack_info,
39011 tack_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39012 length += 6;
39013 }
39014
39015 return length;
39016}
39017
39018/*
39019 * Dissect a VHT or an HE NDP announcement frame. They differ past
39020 * the sounding dialog token with a bit in the SDT indicating VHT vs HE.
39021 */
39022#define NDP_ANNC_VHT_HE0x02 0x02
39023
39024static const value_string ndp_annc_variant_vals[] = {
39025 { 0, "VHT NDP Announcement" },
39026 { 1, "Ranging NDP Announcement" },
39027 { 2, "HE NDP Announcement" },
39028 { 3, "EHT NDP Announcement" },
39029 { 0, NULL((void*)0) }
39030};
39031
39032static int * const sta_info_ranging_2008[] = {
39033 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11,
39034 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset,
39035 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts,
39036 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep,
39037 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts,
39038 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1,
39039 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation,
39040 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep,
39041 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2,
39042 NULL((void*)0)
39043};
39044
39045static int * const sta_info_ranging_2043[] = {
39046 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11,
39047 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac,
39048 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation,
39049 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved,
39050 NULL((void*)0)
39051};
39052
39053static int * const sta_info_ranging_2044[] = {
39054 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11,
39055 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf,
39056 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation,
39057 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved,
39058 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token,
39059 NULL((void*)0)
39060};
39061
39062static int * const sta_info_ranging_2045[] = {
39063 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11,
39064 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power,
39065 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi,
39066 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation,
39067 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved,
39068 NULL((void*)0)
39069};
39070
39071static int
39072dissect_ieee80211_ranging_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39073 proto_tree *tree, int offset, bool_Bool has_fcs)
39074{
39075 uint8_t len_fcs = 0;
39076 proto_tree *sta_list;
39077 proto_item *sta_info_item, *pi;
39078 int saved_offset = 0;
39079 int sta_index = 0;
39080
39081 if (has_fcs){
39082 len_fcs = 4;
39083 }
39084
39085 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39086 ett_ndp_ranging_annc_sta_list, &pi, "STA list");
39087 saved_offset = offset;
39088
39089 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39090 uint16_t aid11;
39091
39092 sta_info_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 2,
39093 ett_ndp_ranging_annc_sta_info, NULL((void*)0), "STA %d",
39094 sta_index++);
39095
39096 aid11 = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000) & 0x7ff;
39097 if (aid11 < 2008) {
39098 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39099 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008,
39100 ett_vht_ranging_annc, sta_info_ranging_2008,
39101 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39102 } else if (aid11 == 2043) {
39103 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39104 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043,
39105 ett_vht_ranging_annc, sta_info_ranging_2043,
39106 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39107 } else if (aid11 == 2044) {
39108 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39109 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044,
39110 ett_vht_ranging_annc, sta_info_ranging_2044,
39111 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39112 } else if (aid11 == 2045) {
39113 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39114 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045,
39115 ett_vht_ranging_annc, sta_info_ranging_2045,
39116 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39117 }
39118 offset += 4;
39119 }
39120
39121 proto_item_set_len(pi, offset - saved_offset);
39122 return offset;
39123}
39124
39125static int
39126dissect_ieee80211_vht_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39127 proto_tree *tree, int offset, bool_Bool has_fcs)
39128{
39129 uint16_t sta_info;
39130 uint8_t len_fcs = 0;
39131 proto_tree *sta_list;
39132 proto_item *sta_info_item, *pi;
39133 int saved_offset = 0;
39134 int sta_index = 0;
39135
39136 if (has_fcs){
39137 len_fcs = 4;
39138 }
39139
39140 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39141 ett_ndp_vht_annc_sta_list, &pi, "STA list");
39142 saved_offset = offset;
39143
39144 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39145 sta_info_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 2,
39146 ett_ndp_vht_annc_sta_info_tree, NULL((void*)0), "STA %d",
39147 sta_index++);
39148
39149 proto_tree_add_item(sta_info_item, hf_ieee80211_vht_ndp_annc_sta_info_aid12,
39150 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39151 proto_tree_add_item(sta_info_item,
39152 hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
39153 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39154
39155 sta_info = tvb_get_letohs(tvb, offset);
39156
39157 if (sta_info & 0x1000)
39158 proto_tree_add_uint(sta_info_item,
39159 hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
39160 tvb, offset, 2, sta_info);
39161 else
39162 proto_tree_add_item(sta_info_item,
39163 hf_ieee80211_vht_ndp_annc_sta_info_reserved,
39164 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39165 offset += 2;
39166 }
39167
39168 proto_item_set_len(pi, offset - saved_offset);
39169 return offset;
39170}
39171
39172static int * const he_ndp_sta_headers[] = {
39173 &hf_ieee80211_he_ndp_annc_aid11,
39174 &hf_ieee80211_he_ndp_annc_ru_start,
39175 &hf_ieee80211_he_ndp_annc_ru_end,
39176 &hf_ieee80211_he_ndp_annc_feedback_type_and_ng,
39177 &hf_ieee80211_he_ndp_annc_disambiguation,
39178 &hf_ieee80211_he_ndp_annc_codebook_size,
39179 &hf_ieee80211_he_ndp_annc_nc,
39180 NULL((void*)0)
39181};
39182
39183static int * const he_ndp_annc_2047_hdrs[] = {
39184 &hf_ieee80211_he_ndp_annc_aid11,
39185 &hf_ieee80211_he_ndp_annc_disallowed_bitmap,
39186 &hf_ieee80211_he_ndp_annc_reserved1,
39187 &hf_ieee80211_he_ndp_annc_disambiguation,
39188 &hf_ieee80211_he_ndp_annc_reserved2,
39189 NULL((void*)0)
39190};
39191
39192static int
39193dissect_ieee80211_he_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39194 proto_tree *tree, int offset, bool_Bool has_fcs)
39195{
39196 uint8_t len_fcs = 0;
39197 proto_tree *sta_list;
39198 proto_item *pi;
39199 int saved_offset;
39200 int sta_index = 0;
39201
39202 if (has_fcs){
39203 len_fcs = 4;
39204 }
39205
39206 saved_offset = offset;
39207 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39208 ett_ndp_he_annc_sta_list, &pi, "STA list");
39209
39210 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39211 proto_tree *sta_item;
39212 uint32_t sta_info = tvb_get_letohl(tvb, offset);
39213
39214 sta_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 4,
39215 ett_ndp_he_annc_sta_item, NULL((void*)0), "STA %d", sta_index++);
39216 if ((sta_info & 0x000007ff) < 2047) {
39217 proto_tree_add_bitmask_with_flags(sta_item, tvb, offset,
39218 hf_ieee80211_he_ndp_annc_sta,
39219 ett_ndp_he_annc_sta_info,
39220 he_ndp_sta_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39221 } else {
39222 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39223 hf_ieee80211_he_ndp_annc_sta,
39224 ett_ndp_he_annc_sta_info,
39225 he_ndp_annc_2047_hdrs, ENC_LITTLE_ENDIAN0x80000000,
39226 BMT_NO_APPEND0x01);
39227 }
39228
39229 offset += 4;
39230 }
39231
39232 proto_item_set_len(pi, offset - saved_offset);
39233 return offset;
39234}
39235
39236static int * const eht_ndp_annc_hdrs[] = {
39237 &hf_ieee80211_ndp_eht_annc_aid11,
39238 &hf_ieee80211_ndp_eht_annc_resolution,
39239 &hf_ieee80211_ndp_eht_annc_feedback_map,
39240 &hf_ieee80211_ndp_eht_annc_reserved1,
39241 &hf_ieee80211_ndp_eht_annc_nc_index,
39242 &hf_ieee80211_ndp_eht_annc_feedback_type,
39243 &hf_ieee80211_ndp_eht_annc_disambiguation,
39244 &hf_ieee80211_ndp_eht_annc_codebook_size,
39245 &hf_ieee80211_ndp_eht_annc_reserved2,
39246 NULL((void*)0)
39247};
39248
39249static int
39250dissect_ieee80211_eht_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39251 proto_tree *tree, int offset, bool_Bool has_fcs)
39252{
39253 uint8_t len_fcs = 0;
39254 proto_tree *sta_list;
39255 proto_item *pi;
39256 int saved_offset;
39257
39258 if (has_fcs){
39259 len_fcs = 4;
39260 }
39261
39262 saved_offset = offset;
39263 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39264 ett_ndp_eht_annc_sta_list, &pi, "STA list");
39265
39266 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39267
39268 proto_tree_add_bitmask_with_flags(sta_list, tvb, offset,
39269 hf_ieee80211_ndp_eht_annc_sta_info,
39270 ett_ndp_eht_annc_sta_info,
39271 eht_ndp_annc_hdrs, ENC_LITTLE_ENDIAN0x80000000,
39272 BMT_NO_APPEND0x01);
39273 offset += 4;
39274 }
39275
39276 proto_item_set_len(pi, offset - saved_offset);
39277 return offset;
39278}
39279
39280static int * const ndp_annc_headers[] = {
39281 &hf_ieee80211_ndp_annc_variant,
39282 &hf_ieee80211_ndp_annc_token_number,
39283 NULL((void*)0)
39284};
39285
39286static int
39287dissect_ieee80211_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39288 proto_tree *tree, int offset, bool_Bool has_fcs)
39289{
39290 proto_item *dialog;
39291 uint8_t dialog_token;
39292
39293 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
39294 offset += 6;
39295
39296 dialog_token = tvb_get_uint8(tvb, offset);
39297 col_append_fstr(pinfo->cinfo, COL_INFO, ", Sounding Dialog Token=%d",
39298 dialog_token);
39299
39300 dialog = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39301 hf_ieee80211_ndp_annc_token, ett_ndp_annc,
39302 ndp_annc_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
39303
39304 offset++;
39305
39306 if ((dialog_token & 0x03) == 0x00) {
39307 proto_item_append_text(dialog, " VHT NDP Announcement");
39308 return dissect_ieee80211_vht_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39309 } else if ((dialog_token & 0x03) == 0x01) {
39310 proto_item_append_text(dialog, " Ranging NDP Announcement");
39311 return dissect_ieee80211_ranging_ndp_annc(tvb, pinfo, tree, offset,
39312 has_fcs);
39313 } else if ((dialog_token & 0x03) == 0x02) {
39314 proto_item_append_text(dialog, " HE NDP Announcement");
39315 return dissect_ieee80211_he_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39316 } else if ((dialog_token & 0x03) == 0x03) {
39317 proto_item_append_text(dialog, " EHT NDP Announcement");
39318 return dissect_ieee80211_eht_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39319 } else {
39320 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 39320))
;
39321 }
39322
39323 return offset;
39324}
39325
39326static void
39327set_src_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, int type)
39328{
39329 set_address_tvb(&pinfo->dl_src, type, 6, tvb, offset);
39330 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
39331 // Should we call proto_tree_add_mac48_detail here?
39332}
39333
39334static void
39335set_dst_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, int type)
39336{
39337 set_address_tvb(&pinfo->dl_dst, type, 6, tvb, offset);
39338 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
39339 // Should we call proto_tree_add_mac48_detail here?
39340}
39341
39342static uint32_t
39343crc32_802_tvb_padded(tvbuff_t *tvb, unsigned hdr_len, unsigned hdr_size, unsigned len)
39344{
39345 uint32_t c_crc;
39346
39347 c_crc = crc32_ccitt_tvb(tvb, hdr_len);
39348 c_crc = crc32_ccitt_tvb_offset_seed(tvb, hdr_size, len, ~c_crc);
39349
39350 return (c_crc);
39351}
39352
39353/*
39354 * Check if the SA at offset is that of an S1G STA, and if so, and the
39355 * IS_S1G_KEY with true.
39356 */
39357static void
39358check_s1g_setting(packet_info *pinfo, tvbuff_t *tvb, int offset)
39359{
39360 uint8_t *src_addr[6];
39361 tvb_memcpy(tvb, src_addr, offset, 6);
39362 unsigned result = GPOINTER_TO_UINT(wmem_map_lookup(sta_prop_hash, &src_addr))((guint) (gulong) (wmem_map_lookup(sta_prop_hash, &src_addr
)))
;
39363 if (result == STA_IS_S1G0x00000001) {
39364 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
39365 }
39366}
39367
39368typedef enum {
39369 ENCAP_802_2,
39370 ENCAP_IPX,
39371 ENCAP_ETHERNET,
39372 ENCAP_EPD
39373} encap_t;
39374
39375/*
39376 * Dissect a Protocol Version 1 frame
39377 */
39378
39379static const value_string pv1_frame_type_vals[] = {
39380 { 0, "PV1 QoS Data - with one SID" },
39381 { 1, "PV1 Management" },
39382 { 2, "PV1 Control" } ,
39383 { 3, "PV1 QoS Data - no SIDs" },
39384 { 4, "PV1 Reserved" },
39385 { 5, "PV1 Reserved" },
39386 { 6, "PV1 Reserved" },
39387 { 7, "PV1 Extension (currently reserved)" },
39388 { 0, NULL((void*)0) }
39389};
39390
39391static const value_string pv1_control_frame_type_vals[] = {
39392 { 0, "STACK" },
39393 { 1, "BAT" },
39394 { 2, "Reserved" },
39395 { 3, "Reserved" },
39396 { 4, "Reserved" },
39397 { 5, "Reserved" },
39398 { 6, "Reserved" },
39399 { 7, "Reserved" },
39400 { 0, NULL((void*)0) }
39401};
39402
39403static const value_string pv1_management_frame_type_vals[] = {
39404 { 0, "Action" },
39405 { 1, "Action No Ack" },
39406 { 2, "PV1 Probe Response" },
39407 { 3, "Resource Allocation" },
39408 { 4, "Reserved" },
39409 { 5, "Reserved" },
39410 { 6, "Reserved" },
39411 { 7, "Reserved" },
39412 { 0, NULL((void*)0) }
39413};
39414
39415/* Also used for S1G PV0 */
39416static const value_string pv1_bandwidth_indic_vals[] = {
39417 { 0, "1 MHz" },
39418 { 1, "2 MHz" },
39419 { 2, "4 MHz" },
39420 { 3, "8 MHz" },
39421 { 4, "16 MHz" },
39422 { 5, "Reserved" },
39423 { 6, "Reserved" },
39424 { 7, "Reserved" },
39425 { 0, NULL((void*)0) },
39426};
39427
39428/*
39429 * Extract the three interesting flags from an SID, however, only set
39430 * the respective booleans if the flag is set in the SID.
39431 */
39432static void
39433extract_a3_a4_amsdu(uint16_t sid, bool_Bool *a3_present, bool_Bool *a4_present,
39434 bool_Bool *a_msdu)
39435{
39436 if (sid & SID_A3_PRESENT0x2000)
39437 *a3_present = true1;
39438 if (sid & SID_A4_PRESENT0x4000)
39439 *a4_present = true1;
39440 if (sid & SID_A_MSDU0x8000)
39441 *a_msdu = true1;
39442}
39443
39444static int
39445wlan_aid_to_str(const address* addr, char* buf, int buf_len)
39446{
39447 int ret;
39448
39449 ret = snprintf(buf, buf_len, "0x%04"PRIx16"x", *(uint16_t *)addr->data);
39450
39451 return ret + 1;
39452}
39453
39454static int
39455wlan_aid_str_len(const address* addr _U___attribute__((unused)))
39456{
39457 return sizeof("0x0000");
39458}
39459
39460#if 0
39461/* The length is 2 bytes, but tvb_address_to_str() etc. don't have a way of
39462 * dealing with addresses that need to mask out bits in the tvb. */
39463static int
39464wlan_aid_len(void)
39465{
39466 return 2;
39467}
39468#endif
39469
39470/*
39471 * If we know the AID, then translated it to an Ethernet addr, otherwise
39472 * just place the AID in the correct col
39473 */
39474static void
39475set_sid_addr_cols(packet_info *pinfo, uint16_t sid, bool_Bool dst)
39476{
39477 uint16_t* aid = wmem_new0(pinfo->pool, uint16_t)((uint16_t*)wmem_alloc0((pinfo->pool), sizeof(uint16_t)));
39478 *aid = sid & SID_AID_MASK0x1FFF;
39479 if (dst) {
39480 set_address(&pinfo->dl_dst, wlan_aid_address_type, (int)sizeof(*aid), aid);
39481 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
39482 } else {
39483 set_address(&pinfo->dl_src, wlan_aid_address_type, (int)sizeof(*aid), aid);
39484 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
39485 }
39486}
39487
39488static int * const sid_headers[] = {
39489 &hf_ieee80211_pv1_sid_association_id,
39490 &hf_ieee80211_pv1_sid_a3_present,
39491 &hf_ieee80211_pv1_sid_a4_present,
39492 &hf_ieee80211_pv1_sid_a_msdu,
39493 NULL((void*)0)
39494};
39495
39496static void
39497dissect_pv1_sid(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)), tvbuff_t *tvb,
39498 unsigned offset)
39499{
39500 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_pv1_sid,
39501 ett_pv1_sid_field, sid_headers, ENC_LITTLE_ENDIAN0x80000000);
39502
39503}
39504
39505static void
39506dissect_pv1_sequence_control(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)),
39507 tvbuff_t *tvb, unsigned offset)
39508{
39509 proto_tree *seq_ctrl_tree = NULL((void*)0);
39510
39511 seq_ctrl_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
39512 ett_pv1_seq_control, NULL((void*)0),
39513 "Sequence Control");
39514 proto_tree_add_item(seq_ctrl_tree, hf_ieee80211_frag_number, tvb, offset, 2,
39515 ENC_LITTLE_ENDIAN0x80000000);
39516 proto_tree_add_item(seq_ctrl_tree, hf_ieee80211_seq_number, tvb, offset, 2,
39517 ENC_LITTLE_ENDIAN0x80000000);
39518}
39519
39520static int
39521dissect_pv1_data(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)),
39522 int offset, bool_Bool a_msdu _U___attribute__((unused)), struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39523 unsigned len_no_fcs _U___attribute__((unused)))
39524{
39525
39526 return offset;
39527}
39528
39529static int
39530dissect_pv1_mgmt_action(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39531 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39532 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39533 unsigned len _U___attribute__((unused)))
39534{
39535 proto_tree *mgmt_action_tree = NULL((void*)0);
39536
39537 mgmt_action_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
39538 ett_pv1_mgmt_action, NULL((void*)0),
39539 "Action");
39540 dissect_mgt_action(tvb, pinfo, mgmt_action_tree, offset, NULL((void*)0));
39541
39542 return offset;
39543}
39544
39545static int
39546dissect_pv1_mgmt_action_no_ack(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39547 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39548 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39549 unsigned len _U___attribute__((unused)))
39550{
39551 proto_tree *mgmt_action_tree = NULL((void*)0);
39552
39553 mgmt_action_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
39554 ett_pv1_mgmt_action, NULL((void*)0),
39555 "Action No Ack");
39556 dissect_mgt_action(tvb, pinfo, mgmt_action_tree, offset, NULL((void*)0));
39557
39558 return offset;
39559}
39560
39561#define PV1_NEXT_TBTT_PRESENT0x0100 0x0100
39562#define PV1_FULL_SSID_PRESENT0x0200 0x0200
39563#define PV1_ANO_PRESENT0x0400 0x0400
39564
39565static int
39566dissect_pv1_mgmt_probe_response(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39567 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39568 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39569 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39570{
39571
39572 return offset;
39573}
39574
39575static int
39576dissect_pv1_mgmt_resource_alloc(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39577 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39578 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39579 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39580{
39581
39582 return offset;
39583}
39584
39585static int
39586dissect_pv1_management(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)),
39587 int offset, struct ieee_802_11_phdr *phdr _U___attribute__((unused)), uint8_t subtype,
39588 unsigned len_no_fcs, uint16_t frame_control _U___attribute__((unused)))
39589{
39590
39591 /*
39592 * XXX - We add COMPOSE_FRAME_TYPE(fcf) (which doesn't work for PV1) as
39593 * proto_data FRAME_TYPE_KEY for PV0. Do we need to put something here?
39594 */
39595 switch (subtype) {
39596 case PV1_MANAGEMENT_ACTION0x00:
39597 offset = dissect_pv1_mgmt_action(tvb, pinfo, tree, offset, phdr, len_no_fcs);
39598 break;
39599 case PV1_MANAGEMENT_ACTION_NO_ACK0x01:
39600 offset = dissect_pv1_mgmt_action_no_ack(tvb, pinfo, tree, offset, phdr, len_no_fcs);
39601 break;
39602 case PV1_MANAGEMENT_PROBE_RESPONSE0x02:
39603 offset = dissect_pv1_mgmt_probe_response(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39604 break;
39605 case PV1_MANAGEMENT_RESOURCE_ALLOC0x03:
39606 offset = dissect_pv1_mgmt_resource_alloc(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39607 break;
39608 default:
39609 proto_tree_add_item(tree, hf_ieee80211_pv1_mgmt_reserved, tvb, offset,
39610 len_no_fcs, ENC_NA0x00000000);
39611 offset = len_no_fcs;
39612 }
39613
39614 return offset;
39615}
39616
39617static int
39618dissect_pv1_control_stack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39619 proto_tree *tree, int offset,
39620 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39621 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39622{
39623 proto_tree *stack_tree = NULL((void*)0);
39624
39625 stack_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_pv1_cntl_stack,
39626 NULL((void*)0), "STACK");
39627 proto_tree_add_item(stack_tree, hf_ieee80211_pv1_cnt_stack_tetra_timest,
39628 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
39629 offset += 4;
39630
39631 return offset;
39632}
39633
39634static int
39635dissect_pv1_control_bat(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39636 proto_tree *tree, int offset,
39637 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39638 unsigned len _U___attribute__((unused)),
39639 uint16_t frame_control _U___attribute__((unused)))
39640{
39641 proto_tree *bat_tree = NULL((void*)0);
39642
39643 bat_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_pv1_cntl_stack,
39644 NULL((void*)0), "BAT");
39645
39646 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_beacon_seq, tvb,
39647 offset, 1, ENC_NA0x00000000);
39648 offset += 1;
39649
39650 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_penta_timest, tvb,
39651 offset, 5, ENC_LITTLE_ENDIAN0x80000000);
39652 offset += 5;
39653
39654 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_next_twt_info, tvb,
39655 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
39656 offset += 6;
39657
39658 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_stating_seq_cntl, tvb,
39659 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39660 offset += 6;
39661
39662 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_bitmap, tvb, offset,
39663 4, ENC_LITTLE_ENDIAN0x80000000);
39664 offset += 4;
39665
39666 return offset;
39667}
39668
39669static int
39670dissect_pv1_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
39671 int offset, struct ieee_802_11_phdr *phdr, uint8_t subtype,
39672 unsigned len_no_fcs, uint16_t frame_control)
39673{
39674 switch (subtype) {
39675 case PV1_CONTROL_STACK0x00:
39676 offset = dissect_pv1_control_stack(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39677 break;
39678
39679 case PV1_CONTROL_BAT0x01:
39680 offset = dissect_pv1_control_bat(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39681 break;
39682
39683 default:
39684 proto_tree_add_item(tree, hf_ieee80211_pv1_cntl_reserved, tvb, offset,
39685 len_no_fcs, ENC_NA0x00000000);
39686 offset = len_no_fcs;
39687 }
39688
39689 return offset;
39690}
39691
39692static int
39693dissect_ieee80211_pv1(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
39694 struct ieee_802_11_phdr *phdr)
39695{
39696 uint16_t fcf;
39697 uint8_t type, subtype, from_ds;
39698 unsigned offset = 0;
39699 const char *fts_str = NULL((void*)0);
39700 proto_item *ti;
39701 proto_tree *hdr_tree;
39702 proto_item *fc_item = NULL((void*)0);
39703 proto_tree *fc_tree = NULL((void*)0);
39704 bool_Bool a1_is_sid = false0;
39705 bool_Bool a2_is_sid = false0;
39706 bool_Bool a3_present = false0;
39707 bool_Bool a4_present = false0;
39708 bool_Bool a_msdu = false0;
39709 unsigned len = tvb_reported_length_remaining(tvb, offset);
39710 unsigned len_no_fcs = len;
39711 proto_tree *mgt_tree;
39712
39713 fcf = tvb_get_letohs(tvb, offset);
39714
39715 type = FCF_PV1_TYPE(fcf)(((fcf) >> 2) & 0x7);
39716 subtype = FCF_PV1_SUBTYPE(fcf)(((fcf) >> 5) & 0x7);
39717
39718 fts_str = val_to_str(pinfo->pool, type, pv1_frame_type_vals, "Unrecognized frame type (%d)");
39719 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
39720
39721 /* Create the protocol tree */
39722 ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, -1,
39723 "IEEE 802.11 %s", fts_str);
39724 hdr_tree = proto_item_add_subtree(ti, ett_80211);
39725
39726 /* Add the FC and duration/id to the current tree */
39727 fc_item = proto_tree_add_item(hdr_tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39728
39729 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
39730
39731 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_proto_version, tvb, offset,
39732 2, ENC_LITTLE_ENDIAN0x80000000);
39733 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_type, tvb, offset, 2,
39734 ENC_LITTLE_ENDIAN0x80000000);
39735 /*
39736 * PDID/Subtype depends on ... whether it is a QoS data frame or Control
39737 * or Management frames
39738 */
39739 switch (type) {
39740 case PV1_QOS_DATA_1MAC0x00:
39741 case PV1_QOS_DATA_2MAC0x03:
39742 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_ptid, tvb, offset, 2,
39743 ENC_LITTLE_ENDIAN0x80000000);
39744 break;
39745
39746 case PV1_MANAGEMENT0x01:
39747 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_subtype, tvb, offset,
39748 2, ENC_LITTLE_ENDIAN0x80000000);
39749 break;
39750
39751 case PV1_CONTROL0x02:
39752 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_subtype, tvb, offset,
39753 2, ENC_LITTLE_ENDIAN0x80000000);
39754 break;
39755
39756 default: /* Assume all else just a 3-bit field */
39757 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_unk_field, tvb, offset, 2,
39758 ENC_LITTLE_ENDIAN0x80000000);
39759 break;
39760 }
39761
39762 from_ds = (fcf >> 8) & 0x01; /* It's also the slot assignment field */
39763
39764 switch (type) {
39765 case PV1_CONTROL0x02:
39766 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_bw_indication, tvb,
39767 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39768 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_dynamic_indication, tvb,
39769 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39770 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_power_mgmt, tvb,
39771 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39772 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_more_data, tvb,
39773 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39774 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_flow_control, tvb,
39775 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39776 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_next_twt_info, tvb,
39777 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39778 break;
39779 case PV1_MANAGEMENT0x01:
39780 if (subtype == PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
39781 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_next_tbt, tvb,
39782 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39783 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_full_ssid, tvb,
39784 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39785 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_ano, tvb,
39786 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39787 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_bss_bw, tvb,
39788 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39789 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_security, tvb,
39790 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39791 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc, tvb,
39792 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39793 } else if (subtype == PV1_MANAGEMENT_RESOURCE_ALLOC0x03) {
39794 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_slot_assign, tvb,
39795 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39796 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_more_frag, tvb,
39797 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39798 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt, tvb,
39799 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39800 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_grp_indic, tvb,
39801 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39802 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_protected, tvb,
39803 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39804 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc, tvb,
39805 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39806 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm, tvb,
39807 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39808 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_ack_policy, tvb,
39809 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39810 } else {
39811 // TODO: What about the rest
39812 }
39813 break;
39814
39815 default:
39816 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_from_ds, tvb, offset, 2,
39817 ENC_LITTLE_ENDIAN0x80000000);
39818 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_more_fragments, tvb,
39819 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39820 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_power_mgmt, tvb, offset, 2,
39821 ENC_LITTLE_ENDIAN0x80000000);
39822 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_more_data, tvb, offset, 2,
39823 ENC_LITTLE_ENDIAN0x80000000);
39824 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_protected_frame, tvb,
39825 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39826 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_end_service_per, tvb,
39827 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39828 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_relayed_frame, tvb, offset,
39829 2, ENC_LITTLE_ENDIAN0x80000000);
39830 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_ack_policy, tvb, offset, 2,
39831 ENC_LITTLE_ENDIAN0x80000000);
39832 }
39833
39834 offset += 2;
39835
39836 /*
39837 * Now, handle the MAC addresses or SIDs, which is dependent on the
39838 * Type and From DS etc.
39839 */
39840
39841 if (from_ds == 0x0) {
39842 a2_is_sid = true1;
39843 } else {
39844 a1_is_sid = true1;
39845 }
39846
39847 /* Now override where needed */
39848 switch (type) {
39849 case PV1_MANAGEMENT0x01:
39850 if (subtype == PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
39851 a1_is_sid = false0;
39852 a2_is_sid = false0;
39853 }
39854 break;
39855 case PV1_CONTROL0x02:
39856 a1_is_sid = true1;
39857 break;
39858 case PV1_QOS_DATA_2MAC0x03:
39859 a1_is_sid = false0;
39860 a2_is_sid = false0;
39861 break;
39862 }
39863
39864 /*
39865 * Now handle the address fields.
39866 * If one of them is a SID, then it tells us if A3 and/or A4 is there.
39867 *
39868 * Also, add the SID (with MAC address if we know it), or the MAC
39869 * addr depending on type.
39870 *
39871 * XXX - For PV1_CONTROL frames (IEEE 802.11-2020 9.8.4), the A3 Present,
39872 * A4 Present, and A-MSDU subfields of the SID are reserved. Should
39873 * they be dissected differently, and ignored / expert info if set?
39874 *
39875 * For PV1_MANAGEMENT frames (9.8.5), A4 and A-MSDU cannot be present.
39876 * Ignore / expert info if set?
39877 */
39878 if (a1_is_sid) {
39879 uint16_t a1 = tvb_get_letohs(tvb, offset);
39880 proto_tree *dst_sid = NULL((void*)0);
39881
39882 extract_a3_a4_amsdu(a1, &a3_present, &a4_present, &a_msdu);
39883 set_sid_addr_cols(pinfo, a1, true1); /* Set the R SID address from A1 */
39884
39885 dst_sid = proto_tree_add_subtree(hdr_tree, tvb, offset, 2, ett_pv1_sid,
39886 NULL((void*)0), "Receiver SID");
39887 dissect_pv1_sid(dst_sid, pinfo, tvb, offset);
39888 offset += 2;
39889 } else {
39890 set_dst_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
39891 proto_tree_add_mac48_detail(&mac_ra, &mac_addr, ett_addr, tvb, hdr_tree, offset);
39892 offset += 6;
39893 }
39894
39895 if (a2_is_sid) {
39896 uint16_t a2 = tvb_get_letohs(tvb, offset);
39897 proto_tree *src_sid = NULL((void*)0);
39898
39899 extract_a3_a4_amsdu(a2, &a3_present, &a4_present, &a_msdu);
39900 set_sid_addr_cols(pinfo, a2, false0); /* Set the T SID address from A2 */
39901
39902 src_sid = proto_tree_add_subtree(hdr_tree, tvb, offset, 2, ett_pv1_sid,
39903 NULL((void*)0), "Transmitter SID");
39904 dissect_pv1_sid(src_sid, pinfo, tvb, offset);
39905 offset += 2;
39906 } else {
39907 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
39908 proto_tree_add_mac48_detail(&mac_ta, NULL((void*)0), ett_addr, tvb, hdr_tree, offset);
39909 offset += 6;
39910 }
39911
39912 /* Now, add the sequence control field if present */
39913 switch (type) {
39914 case PV1_QOS_DATA_1MAC0x00:
39915 case PV1_QOS_DATA_2MAC0x03:
39916 dissect_pv1_sequence_control(hdr_tree, pinfo, tvb, offset);
39917 offset += 2;
39918 break;
39919 case PV1_MANAGEMENT0x01:
39920 if (subtype != PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
39921 dissect_pv1_sequence_control(hdr_tree, pinfo, tvb, offset);
39922 offset += 2;
39923 }
39924 break;
39925 }
39926 /* Now, add A3 and A4 if present */
39927 if (a3_present) {
39928 set_dst_addr_cols(pinfo, tvb, offset, wlan_address_type);
39929 proto_tree_add_mac48_detail(&mac_da, &mac_addr, ett_addr, tvb, hdr_tree, offset);
39930 offset += 6;
39931 }
39932
39933 if (a4_present) {
39934 set_src_addr_cols(pinfo, tvb, offset, wlan_address_type);
39935 proto_tree_add_mac48_detail(&mac_sa, &mac_addr, ett_addr, tvb, hdr_tree, offset);
39936 offset += 6;
39937 }
39938
39939 /* TODO: Properly handle the FCS len */
39940 if (phdr->fcs_len == 4)
39941 len_no_fcs -= 4;
39942
39943 /* Now, handle the body */
39944 switch (type) {
39945 case PV1_QOS_DATA_1MAC0x00:
39946 case PV1_QOS_DATA_2MAC0x03:
39947 offset = dissect_pv1_data(tvb, pinfo, tree, offset, a_msdu, phdr, len_no_fcs);
39948 break;
39949 case PV1_MANAGEMENT0x01:
39950 ti = proto_tree_add_item(tree, hf_ieee80211_mgt, tvb, 0, -1, ENC_NA0x00000000);
39951 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
39952 offset = dissect_pv1_management(tvb, pinfo, mgt_tree, offset, phdr, subtype, len_no_fcs, fcf);
39953 break;
39954 case PV1_CONTROL0x02:
39955 offset = dissect_pv1_control(tvb, pinfo, fc_tree, offset, phdr, subtype, len_no_fcs, fcf);
39956 break;
39957 default:
39958 /* Invalid so far. Insert as data and add an Expert Info */
39959 break;
39960 }
39961
39962 /* Now, handle the FCS, if present */
39963 if (phdr->fcs_len == 4) {
39964 proto_tree_add_checksum(hdr_tree, tvb, len - 4, hf_ieee80211_fcs, hf_ieee80211_fcs_status, &ei_ieee80211_fcs, pinfo, 0, ENC_LITTLE_ENDIAN0x80000000, PROTO_CHECKSUM_NO_FLAGS0x00);
39965 }
39966
39967 return offset;
39968}
39969
39970static int
39971dissect_ieee80211_pv0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
39972 uint32_t option_flags, wlan_hdr_t *whdr,
39973 struct ieee_802_11_phdr *phdr)
39974{
39975 uint16_t fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
39976 uint16_t cw_fcf;
39977 uint16_t seq_control;
39978 uint32_t seq_number, frag_number;
39979 bool_Bool more_frags;
39980 proto_item *ti = NULL((void*)0);
39981 proto_item *cw_item = NULL((void*)0);
39982 proto_tree *flags_item;
39983 proto_item *hidden_item;
39984 proto_tree *cw_tree = NULL((void*)0);
39985 uint16_t hdr_len, ohdr_len;
39986 uint16_t htc_len = 0;
39987 bool_Bool has_fcs;
39988 int len, reported_len, ivlen;
39989 int sta_addr_offset = 0;
39990 bool_Bool is_amsdu = 0;
39991 bool_Bool save_fragmented;
39992 uint32_t addr_type;
39993 uint8_t octet1, octet2;
39994 uint16_t etype;
39995 char out_buff[SHORT_STR256];
39996 int is_iv_bad;
39997 unsigned char iv_buff[4];
39998 int addr1_type = wlan_ra_ta_address_type;
39999 unsigned offset = 0;
40000 const char *fts_str;
40001 char flag_str[] = "opmPRMFTC";
40002 int ii;
40003 uint16_t qosoff = 0;
40004 uint16_t qos_control = 0;
40005 int meshctl_len = 0;
40006 uint8_t mesh_flags;
40007 uint16_t meshoff = 0;
40008 bool_Bool retransmitted;
40009 bool_Bool isDMG = (phdr->phy == PHDR_802_11_PHY_11AD9);
40010
40011 encap_t encap_type;
40012 proto_tree *hdr_tree = NULL((void*)0);
40013 tvbuff_t *next_tvb = NULL((void*)0);
40014
40015#define PROTECTION_ALG_WEP DOT11DECRYPT_KEY_TYPE_WEP0
40016#define PROTECTION_ALG_TKIP DOT11DECRYPT_KEY_TYPE_TKIP100
40017#define PROTECTION_ALG_CCMP DOT11DECRYPT_KEY_TYPE_CCMP101
40018#define PROTECTION_ALG_CCMP_256102 DOT11DECRYPT_KEY_TYPE_CCMP_256102
40019#define PROTECTION_ALG_GCMP103 DOT11DECRYPT_KEY_TYPE_GCMP103
40020#define PROTECTION_ALG_GCMP_256104 DOT11DECRYPT_KEY_TYPE_GCMP_256104
40021#define PROTECTION_ALG_RSNAPROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP PROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP
40022#define IS_TKIP(tvb, hdr_len) (tvb_get_uint8(tvb, hdr_len + 1) == \
40023 ((tvb_get_uint8(tvb, hdr_len) | 0x20) & 0x7f))
40024#define IS_CCMP(tvb, hdr_len) (tvb_get_uint8(tvb, hdr_len + 2) == 0)
40025 uint8_t algorithm=UINT8_MAX(255);
40026 uint32_t sec_trailer=0;
40027
40028 fcf = FETCH_FCF(0)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, 0)) >> 8) | (guint16) ((guint16
) (tvb_get_letohs(tvb, 0)) << 8)))) : tvb_get_letohs(tvb
, 0))
;
40029
40030 frame_type_subtype = COMPOSE_FRAME_TYPE(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf & 0x0C)<< 6) + (
(fcf) & 0xF0) + (((fcf) & 0xF00) >> 8)) : (((fcf
& 0x0C)<< 2)+(((fcf) & 0xF0) >> 4)))
;
40031 whdr->type = frame_type_subtype;
40032 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17)
40033 ctrl_fcf = FETCH_FCF(10)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) >> 8) | (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) << 8)))) : tvb_get_letohs
(tvb, 10))
;
40034 else
40035 ctrl_fcf = 0;
40036
40037 fts_str = val_to_str_ext_const(frame_type_subtype, &frame_type_subtype_vals_ext,
40038 "Unrecognized (Reserved frame)");
40039 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
40040
40041
40042# define FROM_TO_DS3 3
40043 flags = FCF_FLAGS(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))
;
40044 more_frags = HAVE_FRAGMENTS(flags)((flags) & 0x04);
40045
40046 for (ii = 0; ii < 8; ii++) {
40047 if (! (flags & 0x80 >> ii)) {
40048 flag_str[ii] = '.';
40049 }
40050 }
40051
40052 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2)) {
40053
40054 case MGT_FRAME0x00:
40055 hdr_len = MGT_FRAME_HDR_LEN24;
40056
40057 /*
40058 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
40059 *
40060 * The +HTC/Order subfield is 1 bit in length. It is used for two
40061 * purposes:
40062 *
40063 * -- It is set to 1 in a non-QoS Data frame transmitted by a
40064 * non-QoS STA to indicate that the frame contains an MSDU,
40065 * or fragment thereof, that is being transferred using the
40066 * StrictlyOrdered service class.
40067 *
40068 * -- It is set to 1 in a QoS Data or Management frame transmitted
40069 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
40070 * of the TXVECTOR to indicate that the frame contains an
40071 * HT Control field.
40072 *
40073 * Otherwise, the +HTC/Order subfield is set to 0.
40074 *
40075 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
40076 * transmitted by a DMG STA.
40077 *
40078 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
40079 * QoS frames, also indicates that there's an HT Control field.
40080 */
40081 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
40082 /*
40083 * For the DMG PHY, do *not* treat the +HTC field as an indication
40084 * that there's an HT Control field, because, in the ns-3 capture
40085 * in issue 11277, it's set in packets with a channel frequency
40086 * in the 60 GHz band, meaning DMG (802.11ad), but it's not
40087 * supposed to be set, and those packets lack an HT Control
40088 * field, so they would be dissected incorrectly if we treated
40089 * them as if they had an HT Control field.
40090 */
40091 if (!isDMG) {
40092 /*
40093 * Non-DMG PHY; treat this field as having an HT Control field.
40094 *
40095 * XXX - as I read the above, this shouldn't be set except for
40096 * HT, VHT, or HE PHYs; however, in the capture in issue 11351,
40097 * a frame with an HT Control field, with a radiotap header,
40098 * has no MCS, VHT, or HE field in that header, so Wireshark
40099 * has no clue that it's an HT, VHT, or HE field. assumed that
40100 * this meant that it wouldn't have an HT Control field even
40101 * if it's a QoS field with +HTC/Order set, and misdissected
40102 * it. Omnipeek, which also appeared to have no clue that it
40103 * was an HT or VHT field - it called it an 802.11b frame - *did*
40104 * dissect the HT Control field. Therefore, we must not require
40105 * an indication that a QoS frame is an HT, VHT, or HE frame
40106 * in order to dissect it a having an HT Control field.
40107 */
40108 hdr_len += 4;
40109 htc_len = 4;
40110 }
40111 }
40112 break;
40113
40114 case CONTROL_FRAME0x01:
40115 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40116 hdr_len = 6;
40117 cw_fcf = ctrl_fcf;
40118 } else {
40119 hdr_len = 0;
40120 cw_fcf = fcf;
40121 }
40122 switch (COMPOSE_FRAME_TYPE (cw_fcf)(((((cw_fcf) & 0xC) >> 2) == 0x1 && (((cw_fcf
) & 0xF0) >> 4) == 0x6) ? (((cw_fcf & 0x0C)<<
6) + ((cw_fcf) & 0xF0) + (((cw_fcf) & 0xF00) >>
8)) : (((cw_fcf & 0x0C)<< 2)+(((cw_fcf) & 0xF0
) >> 4)))
) {
40123
40124 case CTRL_TRIGGER0x12:
40125 /*
40126 * This is a variable length frame ... we set the real length below
40127 * and since the common info is variable, just set the hdr len to
40128 * the fixed portion, 16. There can also be one or more user-info
40129 * sections, followed by padding.
40130 */
40131 hdr_len = 16;
40132 break;
40133
40134 case CTRL_TACK0x13:
40135 /*
40136 * This also is a variable length frame. Set to 22, the common portion
40137 */
40138 hdr_len = 22;
40139 break;
40140
40141 case CTRL_BEAMFORM_RPT_POLL0x14:
40142 hdr_len += 17;
40143 break;
40144
40145 case CTRL_VHT_NDP_ANNC0x15:
40146 hdr_len += 17;
40147 /* TODO: for now we only consider a single STA, add support for more */
40148 hdr_len += 2;
40149 break;
40150
40151 case CTRL_CTS0x1C:
40152 case CTRL_ACKNOWLEDGEMENT0x1D:
40153 hdr_len += 10;
40154 break;
40155
40156 case CTRL_POLL0x162:
40157 hdr_len += 18;
40158 break;
40159
40160 case CTRL_SPR0x163:
40161 case CTRL_GRANT0x164:
40162 case CTRL_GRANT_ACK0x167:
40163 hdr_len += 23;
40164 break;
40165
40166 case CTRL_DMG_CTS0x165:
40167 hdr_len += 16;
40168 break;
40169
40170 case CTRL_DMG_DTS0x166:
40171 case CTRL_SSW0x168:
40172 hdr_len += 22;
40173 break;
40174
40175 case CTRL_SSW_FEEDBACK0x169:
40176 case CTRL_SSW_ACK0x16A:
40177 hdr_len += 24;
40178 break;
40179
40180 case CTRL_RTS0x1B:
40181 case CTRL_PS_POLL0x1A:
40182 case CTRL_CFP_END0x1E:
40183 case CTRL_CFP_ENDACK0x1F:
40184 case CTRL_BLOCK_ACK_REQ0x18:
40185 case CTRL_BLOCK_ACK0x19:
40186 hdr_len += 16;
40187 break;
40188
40189 default:
40190 hdr_len += 4; /* XXX */
40191 break;
40192 }
40193 break;
40194
40195 case DATA_FRAME0x02:
40196 hdr_len = (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) ? DATA_LONG_HDR_LEN30 : DATA_SHORT_HDR_LEN24;
40197
40198 if (option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) {
40199 /*
40200 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
40201 *
40202 * The +HTC/Order subfield is 1 bit in length. It is used for two
40203 * purposes:
40204 *
40205 * -- It is set to 1 in a non-QoS Data frame transmitted by a
40206 * non-QoS STA to indicate that the frame contains an MSDU,
40207 * or fragment thereof, that is being transferred using the
40208 * StrictlyOrdered service class.
40209 *
40210 * -- It is set to 1 in a QoS Data or Management frame transmitted
40211 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
40212 * of the TXVECTOR to indicate that the frame contains an
40213 * HT Control field.
40214 *
40215 * Otherwise, the +HTC/Order subfield is set to 0.
40216 *
40217 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
40218 * transmitted by a DMG STA.
40219 *
40220 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
40221 * QoS frames, also indicates that there's an HT Control field.
40222 */
40223 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40224 /* QoS frame */
40225 qosoff = hdr_len;
40226 qos_control = tvb_get_letohs(tvb, qosoff);
40227 hdr_len += 2; /* Include the QoS field in the header length */
40228
40229 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
40230 /*
40231 * For the DMG PHY, do *not* treat the +HTC field as an indication
40232 * that there's an HT Control field, because, in the ns-3 capture
40233 * in issue 11277, it's set in packets with a channel frequency
40234 * in the 60 GHz band, meaning DMG (802.11ad), but it's not
40235 * supposed to be set, and those packets lack an HT Control
40236 * field, so they would be dissected incorrectly if we treated
40237 * them as if they had an HT Control field.
40238 */
40239 if (!isDMG) {
40240 /*
40241 * Non-DMG PHY; treat this field as having an HT Control field.
40242 *
40243 * XXX - as I read the above, this shouldn't be set except for
40244 * HT, VHT, or HE PHYs; however, in the capture in issue 11351,
40245 * a frame with an HT Control field, with a radiotap header,
40246 * has no MCS, VHT, or HE field in that header, so Wireshark
40247 * has no clue that it's an HT, VHT, or HE field. assumed that
40248 * this meant that it wouldn't have an HT Control field even
40249 * if it's a QoS field with +HTC/Order set, and misdissected
40250 * it. Omnipeek, which also appeared to have no clue that it
40251 * was an HT or VHT field - it called it an 802.11b frame - *did*
40252 * dissect the HT Control field. Therefore, we must not require
40253 * an indication that a QoS frame is an HT, VHT, or HE frame
40254 * in order to dissect it a having an HT Control field.
40255 */
40256 hdr_len += 4;
40257 htc_len = 4;
40258 }
40259 }
40260 }
40261 }
40262 break;
40263
40264 case EXTENSION_FRAME0x03:
40265 hdr_len = 10;
40266 break;
40267
40268 default:
40269 hdr_len = 4; /* XXX */
40270 break;
40271 }
40272
40273 /*
40274 * Some portions of this code calculate offsets relative to the end of the
40275 * header. But when the header has been padded to align the data this must
40276 * be done relative to true header size, not the padded/aligned value. To
40277 * simplify this work we stash the original header size in ohdr_len instead
40278 * of recalculating it every time we need it.
40279 */
40280 ohdr_len = hdr_len;
40281 if (phdr->datapad) {
40282 /*
40283 * Add in Atheros padding between the 802.11 header and body.
40284 *
40285 * In the Atheros mesh capture sample we have, the padding
40286 * is before the mesh header, possibly because it doesn't
40287 * recognize the mesh header.
40288 */
40289 hdr_len = WS_ROUNDUP_4(hdr_len)(((hdr_len) + ((unsigned)(4U-1U))) & (~((unsigned)(4U-1U)
)))
;
40290 }
40291
40292 if (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2) == DATA_FRAME0x02) {
40293 /*
40294 * Does it look as if we have a mesh header?
40295 *
40296 * For locally originated mesh frames, the QoS header may be added
40297 * by the hardware, and no present in wireshark captures. This
40298 * poses a problem as the QoS header indicates the presence of the
40299 * mesh control header.
40300 *
40301 * In addition, we have examples of mesh captures where the QoS
40302 * field indicates that there is no mesh control header, yet there
40303 * is one.
40304 *
40305 * Instead of QoS, we use a few heuristics to determine the presence
40306 * of the mesh control header, which is tricky because it can have a
40307 * variable length. We fall back to using the QoS field if it exists
40308 * and the packet isn't long enough (due to truncation or something
40309 * malformed that should be flagged.)
40310 *
40311 * Assume minimal length, and then correct if wrong.
40312 */
40313 if (tvb_bytes_exist(tvb, hdr_len, 1)) {
40314 meshoff = hdr_len;
40315 mesh_flags = tvb_get_uint8(tvb, meshoff);
40316 meshctl_len = find_mesh_control_length(mesh_flags);
40317 /* ... and try to read two bytes of next header */
40318 if (tvb_bytes_exist(tvb, hdr_len, meshctl_len + 2)) {
40319 uint16_t next_header = tvb_get_letohs(tvb, meshoff + meshctl_len);
40320 if (!has_mesh_control_local(fcf, mesh_flags, next_header)) {
40321 meshctl_len = 0;
40322 }
40323 } else {
40324 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40325 /* QoS frame */
40326 /*
40327 * Look at the Mesh Control subfield of the QoS field and at the
40328 * purported mesh flag fields.
40329 */
40330 if (!has_mesh_control(fcf, qos_control, mesh_flags)) {
40331 meshctl_len = 0;
40332 }
40333 } else {
40334 /* Not QoS frame, can't do the other heuristic, so assume no mesh */
40335 meshctl_len = 0;
40336 }
40337 }
40338 }
40339 hdr_len += meshctl_len;
40340 }
40341
40342 /* Create the protocol tree */
40343 ti = proto_tree_add_protocol_format(tree, proto_wlan, tvb, 0, hdr_len,
40344 "IEEE 802.11 %s", fts_str);
40345 hdr_tree = proto_item_add_subtree(ti, ett_80211);
40346
40347 /* Add the FC and duration/id to the current tree */
40348 dissect_frame_control(hdr_tree, tvb, option_flags, 0, pinfo, isDMG);
40349 dissect_durid(hdr_tree, tvb, frame_type_subtype, 2);
40350
40351 switch (phdr->fcs_len)
40352 {
40353 case 0: /* Definitely has no FCS */
40354 has_fcs = false0;
40355 break;
40356
40357 case 4: /* Definitely has an FCS */
40358 has_fcs = true1;
40359 break;
40360
40361 case -2: /* Data frames have no FCS, other frames may have an FCS */
40362 /* XXX: -2 currently used only in wiretap/netmon.c */
40363 if (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2) == DATA_FRAME0x02)
40364 has_fcs = false0;
40365 else /* Management, Control, Extension */
40366 has_fcs = wlan_check_fcs;
40367 break;
40368
40369 default: /* Don't know - use "wlan_check_fcs" */
40370 has_fcs = wlan_check_fcs;
40371 break;
40372 }
40373
40374 /*
40375 * Decode the part of the frame header that isn't the same for all
40376 * frame types.
40377 */
40378 seq_control = 0;
40379 frag_number = 0;
40380 seq_number = 0;
40381
40382 /* all frames have address 1 = RA */
40383 proto_tree_add_mac48_detail(&mac_ra, &mac_addr, ett_addr, tvb, hdr_tree, 4);
40384
40385 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
40386 {
40387
40388 case MGT_FRAME0x00:
40389 /*
40390 * All management frame types have the same header.
40391 */
40392 set_dst_addr_cols(pinfo, tvb, 4, wlan_address_type);
40393 set_src_addr_cols(pinfo, tvb, 10, wlan_address_type);
40394
40395 /* for tap */
40396 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, 16);
40397 copy_address_shallow(&whdr->src, &pinfo->dl_src);
40398 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
40399 if (addresses_data_equal(&whdr->bssid, &whdr->src)) {
40400 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, IS_AP_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
40401 }
40402
40403 seq_control = tvb_get_letohs(tvb, 22);
40404 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control)((seq_control) & 0x000F);
40405 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control)(((seq_control) & 0xFFF0) >> 4);
40406
40407 col_append_fstr(pinfo->cinfo, COL_INFO,
40408 ", SN=%d", seq_number);
40409
40410 col_append_fstr(pinfo->cinfo, COL_INFO,
40411 ", FN=%d", frag_number);
40412
40413 if (tree)
40414 {
40415 proto_tree_add_mac48_detail(&mac_da, NULL((void*)0), ett_addr, tvb, hdr_tree, 4);
40416 proto_tree_add_mac48_detail(&mac_ta, NULL((void*)0), ett_addr, tvb, hdr_tree, 10);
40417 proto_tree_add_mac48_detail(&mac_sa, NULL((void*)0), ett_addr, tvb, hdr_tree, 10);
40418 check_s1g_setting(pinfo, tvb, 10);
40419 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 16);
40420
40421 /* FIXME: With mgmt frames FROM_TO_DS is always 0, perhaps compare address to bssid instead? */
40422 if ((flags & FROM_TO_DS3) == FLAG_FROM_DS0x02) { /* Receiver address */
40423 sta_addr_offset = 4;
40424 } else if ((flags & FROM_TO_DS3) == FLAG_TO_DS0x01) { /* Transmitter address */
40425 sta_addr_offset = 10;
40426 }
40427 if (sta_addr_offset > 0) {
40428 proto_tree_add_mac48_detail(&mac_staa, NULL((void*)0), ett_addr, tvb, hdr_tree, sta_addr_offset);
40429 }
40430 /* add items for wlan.addr filter */
40431 hidden_item = proto_tree_add_mac48_detail(&mac_addr_hidden, NULL((void*)0), -1, tvb, hdr_tree, 10);
40432 proto_item_set_hidden(hidden_item);
40433 hidden_item = proto_tree_add_mac48_detail(&mac_addr_hidden, NULL((void*)0), -1, tvb, hdr_tree, 16);
40434 proto_item_set_hidden(hidden_item);
40435 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40436 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40437 }
40438 break;
40439
40440 case CONTROL_FRAME0x01:
40441 {
40442 /*
40443 * Control Wrapper frames insert themselves between address 1
40444 * and address 2 in a normal control frame. Process address 1
40445 * first, then handle the rest of the frame in dissect_control.
40446 */
40447 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40448 offset = 10; /* FC + D/ID + Address 1 + CFC + HTC */
40449 ctrl_fcf = FETCH_FCF(10)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) >> 8) | (guint16) ((
guint16) (tvb_get_letohs(tvb, 10)) << 8)))) : tvb_get_letohs
(tvb, 10))
;
40450 ctrl_type_subtype = COMPOSE_FRAME_TYPE(ctrl_fcf)(((((ctrl_fcf) & 0xC) >> 2) == 0x1 && (((ctrl_fcf
) & 0xF0) >> 4) == 0x6) ? (((ctrl_fcf & 0x0C)<<
6) + ((ctrl_fcf) & 0xF0) + (((ctrl_fcf) & 0xF00) >>
8)) : (((ctrl_fcf & 0x0C)<< 2)+(((ctrl_fcf) & 0xF0
) >> 4)))
;
40451 } else {
40452 offset = 10; /* FC + D/ID + Address 1 */
40453 ctrl_type_subtype = frame_type_subtype;
40454 }
40455 /* Added to disallow DMG STA to transfer packets of certain forbidden types. */
40456 switch (ctrl_type_subtype)
40457 {
40458 case CTRL_PS_POLL0x1A:
40459 case CTRL_CTS0x1C:
40460 case CTRL_CFP_ENDACK0x1F:
40461 if(isDMG == true1) {
40462 expert_add_info_format(pinfo, hdr_tree, &ei_ieee80211_dmg_subtype,
40463 "DMG STA shouldn't transmit control frame of type contention-free period end+ack");
40464 }
40465 break;
40466 default:
40467 break;
40468 }
40469
40470 if (ctrl_type_subtype == CTRL_PS_POLL0x1A) {
40471 addr1_type = wlan_bssid_address_type;
40472 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 4);
40473 }
40474
40475 /* Add address 1 */
40476 set_dst_addr_cols(pinfo, tvb, 4, addr1_type);
40477
40478 /*
40479 * Start shoving in other fields if needed.
40480 */
40481 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40482 /* if (tree) */
40483 {
40484 cw_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
40485 ett_cntrl_wrapper_fc, NULL((void*)0), "Contained Frame Control");
40486 dissect_frame_control(cw_tree, tvb, 0, offset, pinfo, isDMG);
40487 dissect_ht_control(pinfo, hdr_tree, tvb, offset + 2);
40488 offset += 6;
40489 hdr_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
40490 ett_cntrl_wrapper_fc, &cw_item, "Carried Frame");
40491 if (isDMG) {
40492 expert_add_info_format(pinfo, cw_item, &ei_ieee80211_dmg_subtype,
40493 "DMG STA shouldn't transmit Control Wrapper frame");
40494 }
40495 }
40496 }
40497
40498 switch (ctrl_type_subtype)
40499 {
40500 case CTRL_PS_POLL0x1A:
40501 case CTRL_CFP_ENDACK0x1F:
40502 {
40503 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40504 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40505 offset += 6;
40506 break;
40507 }
40508
40509 case CTRL_CFP_END0x1E:
40510 {
40511 if (isDMG)
40512 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40513 else
40514 set_src_addr_cols(pinfo, tvb, offset, wlan_bssid_address_type);
40515 /* if (tree) */
40516 {
40517 if (isDMG) {
40518 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40519 } else {
40520 proto_tree_add_mac48_detail(&mac_bssid, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40521 }
40522 offset += 6;
40523 }
40524 break;
40525 }
40526
40527 case CTRL_TRIGGER0x12:
40528 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40529 /*
40530 * The len returned will be adjusted to include any padding required
40531 */
40532 hdr_len = dissect_ieee80211_he_eht_trigger(tvb, pinfo, hdr_tree, offset,
40533 phdr->fcs_len);
40534 ohdr_len = hdr_len;
40535 break;
40536
40537 case CTRL_TACK0x13:
40538 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40539 hdr_len = dissect_ieee80211_s1g_tack(tvb, pinfo, hdr_tree, offset,
40540 flags);
40541 break;
40542
40543 case CTRL_BEAMFORM_RPT_POLL0x14:
40544 {
40545 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40546 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40547 offset += 6;
40548 proto_tree_add_item(hdr_tree, hf_ieee80211_beamform_feedback_seg_retrans_bitmap, tvb, offset, 1, ENC_NA0x00000000);
40549 break;
40550 }
40551
40552 case CTRL_VHT_NDP_ANNC0x15:
40553 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40554
40555 dissect_ieee80211_ndp_annc(tvb, pinfo, hdr_tree, offset, has_fcs);
40556 break;
40557
40558 case CTRL_GRANT_ACK0x167:
40559 case CTRL_SSW0x168:
40560 case CTRL_SSW_FEEDBACK0x169:
40561 case CTRL_SSW_ACK0x16A:
40562 case CTRL_DMG_CTS0x165:
40563 case CTRL_GRANT0x164:
40564 case CTRL_SPR0x163:
40565 case CTRL_POLL0x162:
40566 case CTRL_RTS0x1B:
40567 {
40568 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40569 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40570 offset += 6;
40571 break;
40572 }
40573
40574 case CTRL_CONTROL_WRAPPER0x17:
40575 /* XXX - We shouldn't see this. Should we throw an error? */
40576 break;
40577
40578 case CTRL_BLOCK_ACK_REQ0x18:
40579 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40580
40581 dissect_ieee80211_block_ack(tvb, pinfo, hdr_tree, offset, isDMG, true1, has_fcs);
40582 break;
40583
40584 case CTRL_BLOCK_ACK0x19:
40585 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40586
40587 dissect_ieee80211_block_ack(tvb, pinfo, hdr_tree, offset, isDMG, false0, has_fcs);
40588 break;
40589 }
40590/*
40591 * 802.11ad : Used for extension types.
40592 */
40593 switch (ctrl_type_subtype) {
40594 case CTRL_POLL0x162: {
40595 proto_tree_add_item(hdr_tree, hf_ieee80211_cf_response_offset,
40596 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40597
40598 break;
40599 }
40600 case CTRL_GRANT0x164:
40601 case CTRL_GRANT_ACK0x167:
40602 case CTRL_SPR0x163: {
40603 bool_Bool isGrant;
40604 if(ctrl_type_subtype != CTRL_GRANT_ACK0x167) {
40605 offset += add_ff_dynamic_allocation(hdr_tree, tvb, pinfo, offset);
40606 } else { /* CTRL_GRANT_ACK have 5 octets that are reserved*/
40607 proto_tree_add_item(hdr_tree, hf_ieee80211_grant_ack_reserved, tvb, offset, 5, ENC_NA0x00000000);
40608 offset += 5;
40609 }
40610 isGrant = ((ctrl_type_subtype==CTRL_GRANT0x164)||(ctrl_type_subtype==CTRL_GRANT_ACK0x167));
40611 add_ff_beamforming_ctrl(hdr_tree, tvb, pinfo, offset, isGrant);
40612 /* offset += 2; */
40613 break;
40614 }
40615 case CTRL_SSW0x168: {
40616 uint32_t sector_sweep;
40617
40618 sector_sweep = tvb_get_letoh24(tvb, offset);
40619 offset += add_ff_sector_sweep(hdr_tree, tvb, pinfo, offset);
40620 /* if Sector Sweep Direction = Responder, use SW Feedback field format when not transmitted as part of an ISS */
40621 if(sector_sweep & 0x00001) {
40622 add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
40623 } else {
40624 add_ff_sector_sweep_feedback_from_iss(hdr_tree, tvb, pinfo, offset);
40625 }
40626 /* offset += 3; */
40627 break;
40628 }
40629 case CTRL_SSW_ACK0x16A:
40630 case CTRL_SSW_FEEDBACK0x169: {
40631 offset += add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
40632 offset += add_ff_BRP_request(hdr_tree, tvb, pinfo, offset);
40633 add_ff_beamformed_link(hdr_tree, tvb, pinfo, offset);
40634 /* offset += 1; */
40635 break;
40636 }
40637 case CTRL_DMG_DTS0x166: {
40638 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_sa, tvb, offset, 6, ENC_NA0x00000000);
40639 offset += 6;
40640 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_da, tvb, offset, 6, ENC_NA0x00000000);
40641 /* offset += 6; */
40642 break;
40643 }
40644 default:
40645 break;
40646 }
40647 break;
40648 }
40649
40650 case DATA_FRAME0x02:
40651 {
40652 uint32_t src_offset, dst_offset, da_offset, sa_offset, ta_offset = 10, bssid_offset;
40653 addr_type = FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8));
40654 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40655 if (!phdr->no_a_msdus && !DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
40656 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
40657 }
40658 }
40659
40660 /* In order to show src/dst address we must always do the following */
40661 switch (addr_type)
40662 {
40663
40664 case DATA_ADDR_T10:
40665 da_offset = 4;
40666 sa_offset = 10;
40667 bssid_offset = 16;
40668 dst_offset = da_offset;
40669 src_offset = sa_offset;
40670 break;
40671
40672 case DATA_ADDR_T2(0x02 << 8):
40673 da_offset = 4;
40674 sa_offset = !is_amsdu ? 16 : 0;
40675 bssid_offset = 10;
40676 dst_offset = da_offset;
40677 src_offset = sa_offset;
40678 break;
40679
40680 case DATA_ADDR_T3(0x01 << 8):
40681 da_offset = !is_amsdu ? 16 : 0;
40682 sa_offset = 10;
40683 bssid_offset = 4;
40684 dst_offset = da_offset;
40685 src_offset = sa_offset;
40686 break;
40687
40688 case DATA_ADDR_T4((0x01|0x02) << 8):
40689 if (!is_amsdu) {
40690 da_offset = 16;
40691 sa_offset = 24;
40692 bssid_offset = 0;
40693 dst_offset = da_offset;
40694 src_offset = sa_offset;
40695 } else {
40696 da_offset = 0;
40697 sa_offset = 0;
40698 // The second BSSID (Addr4) is handled below.
40699 bssid_offset = 16;
40700 dst_offset = 4; // RA
40701 src_offset = 10; // TA
40702 }
40703 break;
40704
40705 default:
40706 /* All four cases are covered above. */
40707 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 40707))
;
40708 }
40709
40710 if (src_offset) {
40711 set_address_tvb(&pinfo->dl_src, wlan_address_type, 6, tvb, src_offset);
40712 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
40713 }
40714 if (dst_offset) {
40715 set_address_tvb(&pinfo->dl_dst, wlan_address_type, 6, tvb, dst_offset);
40716 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
40717 }
40718
40719 if (bssid_offset) {
40720 /* for tap */
40721 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, bssid_offset);
40722 /* for dot11decrypt */
40723 save_proto_data(tvb, pinfo, bssid_offset, 6, BSSID_KEY);
40724 }
40725
40726 if (src_offset) {
40727 copy_address_shallow(&whdr->src, &pinfo->dl_src);
40728 }
40729 if (dst_offset) {
40730 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
40731 }
40732
40733 if ((flags & FROM_TO_DS3) == FLAG_FROM_DS0x02) { /* Receiver address */
40734 sta_addr_offset = 4;
40735 } else if ((flags & FROM_TO_DS3) == FLAG_TO_DS0x01) { /* Transmitter address */
40736 sta_addr_offset = ta_offset;
40737 }
40738
40739 /* for dot11decrypt */
40740 if (sta_addr_offset > 0) {
40741 save_proto_data(tvb, pinfo, sta_addr_offset, 6, STA_KEY);
40742 }
40743
40744 seq_control = tvb_get_letohs(tvb, 22);
40745 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control)((seq_control) & 0x000F);
40746 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control)(((seq_control) & 0xFFF0) >> 4);
40747
40748 col_append_fstr(pinfo->cinfo, COL_INFO,
40749 ", SN=%d, FN=%d", seq_number, frag_number);
40750
40751 /* Now if we have a tree we start adding stuff */
40752 if (tree)
40753 {
40754 switch (addr_type)
40755 {
40756 case DATA_ADDR_T10:
40757 case DATA_ADDR_T2(0x02 << 8):
40758 case DATA_ADDR_T3(0x01 << 8):
40759 case DATA_ADDR_T4((0x01|0x02) << 8):
40760 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, ta_offset);
40761
40762 if (da_offset) {
40763 bool_Bool add_mac = (da_offset >= 16 && da_offset != sa_offset);
40764 proto_tree_add_mac48_detail(&mac_da, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, da_offset);
40765 }
40766
40767 if (sa_offset) {
40768 bool_Bool add_mac = (sa_offset >= 16);
40769 proto_tree_add_mac48_detail(&mac_sa, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, sa_offset);
40770 }
40771
40772 if (bssid_offset) {
40773 bool_Bool add_mac = (bssid_offset >= 16 && bssid_offset != sa_offset && bssid_offset != da_offset);
40774 proto_tree_add_mac48_detail(&mac_bssid, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, bssid_offset);
40775 }
40776
40777 if (addr_type == DATA_ADDR_T4((0x01|0x02) << 8) && is_amsdu) {
40778 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 24);
40779 }
40780
40781 if (sta_addr_offset > 0) {
40782 proto_tree_add_mac48_detail(&mac_staa, NULL((void*)0), ett_addr, tvb, hdr_tree, sta_addr_offset);
40783 }
40784 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40785 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40786
40787 break;
40788 }
40789
40790 }
40791 break;
40792 }
40793 case EXTENSION_FRAME0x03: {
40794 switch (frame_type_subtype) {
40795 case EXTENSION_DMG_BEACON0x30: {
40796 set_dst_addr_cols(pinfo, tvb, 4, wlan_bssid_address_type);
40797 proto_tree_add_mac48_detail(&mac_bssid, &mac_addr, ett_addr, tvb, hdr_tree, 4);
40798 break;
40799 }
40800 case EXTENSION_S1G_BEACON0x31: {
40801 uint8_t *src_addr[6];
40802 tvb_memcpy(tvb, src_addr, 4, 6);
40803
40804 /* Insert this src_addr into the s1g sta hash */
40805 if (!wmem_map_lookup(sta_prop_hash, src_addr)) {
40806 wmem_map_insert(sta_prop_hash, wmem_memdup(wmem_file_scope(), src_addr, 6), GUINT_TO_POINTER(STA_IS_S1G)((gpointer) (gulong) (0x00000001)));
40807 }
40808
40809 check_s1g_setting(pinfo, tvb, 4);
40810
40811 set_src_addr_cols(pinfo, tvb, 4, wlan_address_type);
40812 proto_tree_add_mac48_detail(&mac_sa, &mac_addr, ett_addr, tvb, hdr_tree, 4);
40813 break;
40814 }
40815 }
40816 }
40817 }
40818
40819 len = tvb_captured_length_remaining(tvb, hdr_len);
40820 reported_len = tvb_reported_length_remaining(tvb, hdr_len);
40821
40822 if (has_fcs)
40823 {
40824 /*
40825 * Well, this packet should, in theory, have an FCS.
40826 * Do we have the entire packet, and does it have enough data for
40827 * the FCS?
40828 */
40829 if (reported_len < 4)
40830 {
40831 /*
40832 * The packet is claimed not to even have enough data for a 4-byte
40833 * FCS.
40834 * Pretend it doesn't have an FCS.
40835 */
40836 ;
40837 }
40838 else if (len < reported_len)
40839 {
40840 /*
40841 * The packet is claimed to have enough data for a 4-byte FCS, but
40842 * we didn't capture all of the packet.
40843 * Slice off the 4-byte FCS from the reported length, and trim the
40844 * captured length so it's no more than the reported length; that
40845 * will slice off what of the FCS, if any, is in the captured
40846 * length.
40847 */
40848 reported_len -= 4;
40849 if (len > reported_len)
40850 len = reported_len;
40851 }
40852 else
40853 {
40854 /*
40855 * We have the entire packet, and it includes a 4-byte FCS.
40856 * Slice it off, and put it into the tree.
40857 */
40858 len -= 4;
40859 reported_len -= 4;
40860 if (wlan_check_checksum)
40861 {
40862 uint32_t sent_fcs = tvb_get_letohl(tvb, hdr_len + len);
40863 uint32_t fcs;
40864
40865 if (phdr->datapad)
40866 fcs = crc32_802_tvb_padded(tvb, ohdr_len, hdr_len, len);
40867 else
40868 fcs = crc32_ccitt_tvb(tvb, hdr_len + len);
40869 if (fcs != sent_fcs) {
40870 flag_str[8] = '.';
40871 }
40872
40873 proto_tree_add_checksum(hdr_tree, tvb, hdr_len + len, hf_ieee80211_fcs, hf_ieee80211_fcs_status, &ei_ieee80211_fcs, pinfo, fcs, ENC_LITTLE_ENDIAN0x80000000, PROTO_CHECKSUM_VERIFY0x01);
40874 } else {
40875 proto_tree_add_checksum(hdr_tree, tvb, hdr_len + len, hf_ieee80211_fcs, hf_ieee80211_fcs_status, &ei_ieee80211_fcs, pinfo, 0, ENC_LITTLE_ENDIAN0x80000000, PROTO_CHECKSUM_NO_FLAGS0x00);
40876 }
40877 }
40878 }
40879 else
40880 {
40881 flag_str[8] = '\0';
40882 }
40883
40884 proto_item_append_text(ti, ", Flags: %s", flag_str);
40885 col_append_fstr(pinfo->cinfo, COL_INFO, ", Flags=%s", flag_str);
40886
40887 flags_item = proto_tree_add_string(hdr_tree, hf_ieee80211_fc_flags_str, tvb, 0, 0, flag_str);
40888 proto_item_set_generated(flags_item);
40889
40890 /*
40891 * Only management and data frames have a body, so we don't have
40892 * anything more to do for other types of frames.
40893 */
40894 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
40895 {
40896
40897 case MGT_FRAME0x00:
40898 if (htc_len == 4) {
40899 dissect_ht_control(pinfo, hdr_tree, tvb, ohdr_len - 4);
40900 }
40901 break;
40902
40903 case DATA_FRAME0x02:
40904 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && tree && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08))
40905 {
40906 proto_item *qos_fields, *qos_ti;
40907 proto_tree *qos_tree;
40908
40909 uint16_t qos_eosp;
40910 uint16_t qos_field_content;
40911
40912 qos_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_qos, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40913 qos_tree = proto_item_add_subtree(qos_fields, ett_qos_parameters);
40914
40915 qos_eosp = QOS_EOSP(qos_control)(((qos_control) & 0x0010) >> 4);
40916 qos_field_content = QOS_FIELD_CONTENT(qos_control)(((qos_control) & 0xFF00) >> 8);
40917
40918 proto_tree_add_item(qos_tree, hf_ieee80211_qos_tid, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40919
40920 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_priority, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40921 proto_item_set_generated(qos_ti);
40922
40923 if (FLAGS_DS_STATUS(flags)((flags) & (0x02|0x01)) == (FLAG_FROM_DS0x02|FLAG_TO_DS0x01)) {
40924 /* mesh frame */
40925 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40926 } else {
40927 /*
40928 * Table 9-3 from IEEE802.11-2016 tells us that FROM DS means from
40929 * an AP. And Table 9-6 tells us that we should treat bit 4 as
40930 * EOSP if from an AP otherwise as simply bit 4.
40931 */
40932 if (flags & FLAG_FROM_DS0x02) {
40933 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40934 } else {
40935 proto_tree_add_item(qos_tree, hf_ieee80211_qos_bit4, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40936 }
40937 }
40938
40939 proto_tree_add_item(qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40940
40941 if (!DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
40942 proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40943 if (!phdr->no_a_msdus)
40944 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
40945 }
40946
40947 if (meshctl_len) {
40948 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ctl_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40949 if (POWER_MGT_STATUS(flags)((flags) & 0x10)) {
40950 if (tvb_get_uint8(tvb, 4) & 0x1)
40951 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_multicast, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40952 else
40953 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_unicast, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40954 } else {
40955 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_rsvd, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40956 }
40957 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_rspi, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40958 } else if (flags & FLAG_FROM_DS0x02) {
40959 if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)((frame_type_subtype) & 0x02)) {
40960 /* txop limit */
40961 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_limit, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40962 if (qos_field_content == 0) {
40963 proto_item_append_text(qos_ti, " (transmit one frame immediately)");
40964 }
40965 } else {
40966 /* qap ps buffer state */
40967 proto_item *qos_ps_buf_state_fields;
40968 proto_tree *qos_ps_buf_state_tree;
40969
40970 qos_ps_buf_state_fields = proto_tree_add_item(qos_tree, hf_ieee80211_qos_ps_buf_state, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40971 qos_ps_buf_state_tree = proto_item_add_subtree(qos_ps_buf_state_fields, ett_qos_ps_buf_state);
40972
40973 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40974
40975 if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)(((qos_field_content) & 0x02) >> 1)) {
40976 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40977 qos_ti = proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
40978 switch (QOS_PS_QAP_BUF_LOAD(qos_field_content)(((qos_field_content) & 0xF0) >> 4)) {
40979
40980 case 0:
40981 proto_item_append_text(qos_ti, " (no buffered traffic)");
40982 break;
40983
40984 default:
40985 proto_item_append_text(qos_ti, " (%d octets)", QOS_PS_QAP_BUF_LOAD(qos_field_content)(((qos_field_content) & 0xF0) >> 4)*4096);
40986 break;
40987
40988 case 15:
40989 proto_item_append_text(qos_ti, " (greater than 57344 octets)");
40990 break;
40991 }
40992
40993 }
40994 }
40995 } else {
40996 /*
40997 * Only QoS Data, Qos CF-ACK and NULL frames To-DS have a Queue Size
40998 * field.
40999 */
41000 uint16_t scaling_factor = QOS_SCALING_FACTOR(qos_field_content)(((qos_field_content) & 0xD0) >> 6);
41001 uint16_t unscaled_value = QOS_UNSCALED_VALUE(qos_field_content)((qos_field_content) & 0x3F);
41002
41003 if ((DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04) ||
41004 (frame_type_subtype & 0x7) == 0 ||
41005 DATA_FRAME_IS_CF_ACK(frame_type_subtype)((frame_type_subtype) & 0x01))) {
41006 if (qos_eosp) {
41007 /* queue size */
41008 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_queue_size, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41009 switch (qos_field_content) {
41010 case 0:
41011 proto_item_append_text(qos_ti, " (no buffered traffic in the queue)");
41012 break;
41013
41014 case 254:
41015 proto_item_append_text(qos_ti, " (more than 64768 octets)");
41016 break;
41017
41018 case 255:
41019 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41020 break;
41021
41022 default:
41023 switch (scaling_factor) {
41024 case 0:
41025 proto_item_append_text(qos_ti, " (%u bytes)", 16 * unscaled_value);
41026 break;
41027 case 1:
41028 proto_item_append_text(qos_ti, " (%u bytes)", (1024 + (256 * unscaled_value)));
41029 break;
41030 case 2:
41031 proto_item_append_text(qos_ti, " (%u bytes)", (17408 + (2048 * unscaled_value)));
41032 break;
41033 case 3:
41034 if (unscaled_value < 62)
41035 proto_item_append_text(qos_ti, " (%u bytes)", (148480 + (32768 * unscaled_value)));
41036 else if (unscaled_value == 62)
41037 proto_item_append_text(qos_ti, " (> 2147328)");
41038 else if (unscaled_value == 63)
41039 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41040 break;
41041 default:
41042 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41043 break;
41044 }
41045 break;
41046 }
41047 } else {
41048 /* txop duration requested */
41049 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_dur_req,
41050 tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41051 if (qos_field_content == 0) {
41052 proto_item_append_text(qos_ti, " (no TXOP requested)");
41053 }
41054 }
41055 }
41056 }
41057
41058 /* Do we have +HTC? */
41059 if (htc_len == 4) {
41060 dissect_ht_control(pinfo, hdr_tree, tvb, ohdr_len - 4);
41061 }
41062
41063 } /* end of qos control field */
41064
41065 if (meshctl_len != 0) {
41066 proto_item *msh_fields;
41067 proto_tree *msh_tree;
41068
41069 msh_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_mesh_control_field, tvb, meshoff, meshctl_len, ENC_NA0x00000000);
41070 msh_tree = proto_item_add_subtree(msh_fields, ett_msh_control);
41071 add_ff_mesh_control(msh_tree, tvb, pinfo, meshoff);
41072 }
41073
41074 /*
41075 * No-data frames don't have a body.
41076 */
41077 if (DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04))
41078 goto end_of_wlan;
41079
41080 if (!wlan_subdissector) {
41081 unsigned fnum = 0;
41082
41083 /* key: bssid:src
41084 * data: last seq_control seen and frame number
41085 */
41086 retransmitted = false0;
41087 if (!pinfo->fd->visited) {
41088 retransmit_key key;
41089 retransmit_key *result;
41090
41091 if (whdr->bssid.type == wlan_bssid_address_type) {
41092 memcpy(key.bssid, whdr->bssid.data, 6);
41093 } else {
41094 memset(key.bssid, 0, 6);
41095 }
41096 if (whdr->src.type != AT_NONE) {
41097 memcpy(key.src, whdr->src.data, 6);
41098 } else {
41099 memset(key.src, 0, 6);
41100 }
41101 key.seq_control = 0;
41102 result = (retransmit_key *)g_hash_table_lookup(fc_analyse_retransmit_table, &key);
41103 if (result && (result->seq_control == seq_control)) {
41104 /* keep a pointer to the first seen frame, could be done with proto data? */
41105 fnum = result->fnum;
41106 g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER(pinfo->num)((gpointer) (glong) (pinfo->num)),
41107 GINT_TO_POINTER(fnum)((gpointer) (glong) (fnum)));
41108 retransmitted = true1;
41109 } else {
41110 /* first time or new seq*/
41111 if (!result) {
41112 result = wmem_new(wmem_file_scope(), retransmit_key)((retransmit_key*)wmem_alloc((wmem_file_scope()), sizeof(retransmit_key
)))
;
41113 *result = key;
41114 g_hash_table_insert(fc_analyse_retransmit_table, result, result);
41115 }
41116 result->seq_control = seq_control;
41117 result->fnum = pinfo->num;
41118 }
41119 }
41120 else if ((fnum = GPOINTER_TO_UINT(g_hash_table_lookup(fc_first_frame_table, GINT_TO_POINTER(pinfo->num)))((guint) (gulong) (g_hash_table_lookup(fc_first_frame_table, (
(gpointer) (glong) (pinfo->num)))))
)) {
41121 retransmitted = true1;
41122 }
41123
41124 if (retransmitted) {
41125 col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
41126 if (tree) {
41127 proto_item *item;
41128
41129 item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0,
41130 "Retransmitted frame");
41131 proto_item_set_generated(item);
41132 item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame, tvb, 0, 0, fnum);
41133 proto_item_set_generated(item);
41134 }
41135 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
41136 call_data_dissector(next_tvb, pinfo, tree);
41137 goto end_of_wlan;
41138 }
41139 }
41140 break;
41141
41142 case CONTROL_FRAME0x01:
41143 goto end_of_wlan;
41144
41145 case EXTENSION_FRAME0x03:
41146 break;
41147
41148 default:
41149 goto end_of_wlan;
41150 }
41151
41152 if (IS_PROTECTED(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x40)
41153 && (frame_type_subtype != EXTENSION_S1G_BEACON0x31)
41154 && !phdr->decrypted
41155 && (wlan_ignore_prot != WLAN_IGNORE_PROT_WO_IV1)) {
41156 /*
41157 * It's a WEP or WPA encrypted frame, and it hasn't already been
41158 * decrypted; dissect the protections parameters and decrypt the data,
41159 * if we have a matching key. Otherwise display it as data.
41160 */
41161 bool_Bool can_decrypt = false0;
41162 proto_tree *wep_tree = NULL((void*)0);
41163 uint32_t iv;
41164 uint8_t wep_key, keybyte;
41165 DOT11DECRYPT_KEY_ITEM used_key = { 0 };
41166
41167 if (len == reported_len) {
41168 next_tvb = try_decrypt(tvb, pinfo, hdr_len, reported_len,
41169 &algorithm, &sec_trailer, &used_key);
41170 }
41171
41172 keybyte = tvb_get_uint8(tvb, hdr_len + 3);
41173 wep_key = KEY_OCTET_WEP_KEY(keybyte)(((keybyte) & 0xC0) >> 6);
41174 if ((keybyte & KEY_EXTIV0x20) && (len >= EXTIV_LEN8)) {
41175 /* Extended IV; this frame is likely encrypted with TKIP or CCMP */
41176 if (tree) {
41177 if (algorithm==PROTECTION_ALG_TKIP)
41178 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41179 ett_wep_parameters, NULL((void*)0), "TKIP parameters");
41180 else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102)
41181 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41182 ett_wep_parameters, NULL((void*)0), "CCMP parameters");
41183 else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104)
41184 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41185 ett_wep_parameters, NULL((void*)0), "GCMP parameters");
41186 else {
41187 if (IS_TKIP(tvb, hdr_len)) {
41188 algorithm=PROTECTION_ALG_TKIP;
41189 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41190 ett_wep_parameters, NULL((void*)0), "TKIP parameters");
41191 } else if (IS_CCMP(tvb, hdr_len)) {
41192 algorithm=PROTECTION_ALG_CCMP;
41193 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41194 ett_wep_parameters, NULL((void*)0), "CCMP parameters");
41195 } else
41196 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41197 ett_wep_parameters, NULL((void*)0), "TKIP/CCMP parameters");
41198 }
41199 proto_item_set_len(ti, hdr_len + 8);
41200
41201 if (algorithm==PROTECTION_ALG_TKIP) {
41202 snprintf(out_buff, SHORT_STR256, "0x%08X%02X%02X",
41203 tvb_get_letohl(tvb, hdr_len + 4),
41204 tvb_get_uint8(tvb, hdr_len),
41205 tvb_get_uint8(tvb, hdr_len + 2));
41206 proto_tree_add_string(wep_tree, hf_ieee80211_tkip_extiv, tvb, hdr_len,
41207 EXTIV_LEN8, out_buff);
41208 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102 ||
41209 algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41210 snprintf(out_buff, SHORT_STR256, "0x%08X%02X%02X",
41211 tvb_get_letohl(tvb, hdr_len + 4),
41212 tvb_get_uint8(tvb, hdr_len + 1),
41213 tvb_get_uint8(tvb, hdr_len));
41214 proto_tree_add_string(wep_tree, hf_ieee80211_ccmp_extiv, tvb, hdr_len,
41215 EXTIV_LEN8, out_buff);
41216 }
41217
41218 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, wep_key);
41219 }
41220
41221 /* Subtract out the length of the IV. */
41222 len -= EXTIV_LEN8;
41223 reported_len -= EXTIV_LEN8;
41224 ivlen = EXTIV_LEN8;
41225 /* It is unknown whether this is TKIP or CCMP, so let's not even try to
41226 * parse TKIP Michael MIC+ICV or CCMP MIC. */
41227
41228 const uint8_t *key = NULL((void*)0);
41229 int key_len;
41230
41231 /* checking for the trailer */
41232 if (next_tvb!=NULL((void*)0)) {
41233 if (reported_len < (int) sec_trailer) {
41234 /* There is no space for a trailer, ignore it and don't decrypt */
41235 ;
41236 } else if (len < reported_len) {
41237 /* There is space for a trailer, but we haven't capture all the */
41238 /* packet. Slice off the trailer, but don't try to decrypt */
41239 reported_len -= sec_trailer;
41240 if (len > reported_len)
41241 len = reported_len;
41242 } else {
41243 /* Ok, we have a trailer and the whole packet. Decrypt it! */
41244 /* TODO: At the moment we won't add the trailer to the tree, */
41245 /* so don't remove the trailer from the packet */
41246 len -= sec_trailer;
41247 reported_len -= sec_trailer;
41248 can_decrypt = true1;
41249
41250 /* Add Key information to packet */
41251 if (!tvb_get_bits8(tvb, 39, 1)) { /* RA is unicast, encrypted with pairwise key */
41252 key_len = Dot11DecryptGetTK(&used_key, &key);
41253 bytes_to_hexstr(out_buff, key, key_len);
41254 out_buff[2 * key_len] = '\0';
41255 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_tk, tvb, 0, 0, out_buff);
41256 proto_item_set_generated(ti);
41257
41258 /* Also add the PMK used to decrypt the packet. (PMK==PSK) */
41259 if (used_key.KeyData.Wpa.PskLen > 0) {
41260
41261 bytes_to_hexstr(out_buff, used_key.KeyData.Wpa.Psk, used_key.KeyData.Wpa.PskLen);
41262 out_buff[2*used_key.KeyData.Wpa.PskLen] = '\0';
41263 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_pmk, tvb, 0, 0, out_buff);
41264 proto_item_set_generated(ti);
41265 }
41266
41267 } else { /* Encrypted with Group Key */
41268 key_len = Dot11DecryptGetGTK(&used_key, &key);
41269 bytes_to_hexstr(out_buff, key, key_len);
41270 out_buff[2 * key_len] = '\0';
41271 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_gtk, tvb, 0, 0, out_buff);
41272 proto_item_set_generated(ti);
41273 }
41274 }
41275 }
41276 } else {
41277 /* No Ext. IV - WEP packet */
41278 /*
41279 * XXX - pass the IV and key to "try_decrypt_wep()", and have it pass
41280 * them to "wep_decrypt()", rather than having "wep_decrypt()" extract
41281 * them itself.
41282 *
41283 * Also, just pass the data *following* the WEP parameters as the
41284 * buffer to decrypt.
41285 */
41286 iv = tvb_get_ntoh24(tvb, hdr_len);
41287 if (tree) {
41288 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 4,
41289 ett_wep_parameters, NULL((void*)0), "WEP parameters");
41290
41291 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_iv, tvb, hdr_len, 3, iv);
41292 tvb_memcpy(tvb, iv_buff, hdr_len, 3);
41293 is_iv_bad = weak_iv(iv_buff);
41294 if (is_iv_bad != -1) {
41295 proto_tree_add_boolean_format (wep_tree, hf_ieee80211_wep_iv_weak,
41296 tvb, 0, 0, true1,
41297 "Weak IV for key byte %d",
41298 is_iv_bad);
41299 }
41300 }
41301 if (tree)
41302 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, wep_key);
41303
41304 /* Subtract out the length of the IV. */
41305 len -= 4;
41306 reported_len -= 4;
41307 ivlen = 4;
41308
41309 /* Even if the decryption was not successful, set the algorithm */
41310 algorithm=PROTECTION_ALG_WEP;
41311
41312 /*
41313 * Well, this packet should, in theory, have an ICV.
41314 * Do we have the entire packet, and does it have enough data for
41315 * the ICV?
41316 */
41317 if (reported_len < 4) {
41318 /*
41319 * The packet is claimed not to even have enough data for a
41320 * 4-byte ICV.
41321 * Pretend it doesn't have an ICV.
41322 */
41323 ;
41324 } else if (len < reported_len) {
41325 /*
41326 * The packet is claimed to have enough data for a 4-byte ICV,
41327 * but we didn't capture all of the packet.
41328 * Slice off the 4-byte ICV from the reported length, and trim
41329 * the captured length so it's no more than the reported length;
41330 * that will slice off what of the ICV, if any, is in the
41331 * captured length.
41332 */
41333 reported_len -= 4;
41334 if (len > reported_len)
41335 len = reported_len;
41336 } else {
41337 /*
41338 * We have the entire packet, and it includes a 4-byte ICV.
41339 * Slice it off, and put it into the tree.
41340 *
41341 * We only support decrypting if we have the ICV.
41342 *
41343 * XXX - the ICV is encrypted; we're putting the encrypted
41344 * value, not the decrypted value, into the tree.
41345 */
41346 len -= 4;
41347 reported_len -= 4;
41348 can_decrypt = true1;
41349 }
41350 }
41351
41352 if (algorithm == PROTECTION_ALG_WEP) {
41353 (void) g_strlcpy(wlan_stats.protection, "WEP", MAX_PROTECT_LEN10);
41354 } else if (algorithm == PROTECTION_ALG_TKIP) {
41355 (void) g_strlcpy(wlan_stats.protection, "TKIP", MAX_PROTECT_LEN10);
41356 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102) {
41357 (void) g_strlcpy(wlan_stats.protection, "CCMP", MAX_PROTECT_LEN10);
41358 } else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41359 (void) g_strlcpy(wlan_stats.protection, "GCMP", MAX_PROTECT_LEN10);
41360 } else {
41361 (void) g_strlcpy(wlan_stats.protection, "Unknown", MAX_PROTECT_LEN10);
41362 }
41363
41364 /* protection header */
41365 if (!can_decrypt || (next_tvb == NULL((void*)0))) {
41366 /*
41367 * WEP decode impossible or failed, treat payload as raw data
41368 * and don't attempt fragment reassembly or further dissection.
41369 */
41370 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len + ivlen, len, reported_len);
41371
41372 if (tree) {
41373 if (algorithm == PROTECTION_ALG_WEP) {
41374 if (can_decrypt)
41375 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
41376 hdr_len + ivlen + len, 4,
41377 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
41378 "0x%08x (not verified)",
41379 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
41380 } else if (algorithm == PROTECTION_ALG_CCMP) {
41381 } else if (algorithm == PROTECTION_ALG_TKIP) {
41382 }
41383 }
41384
41385 if ((!(option_flags & IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002)) && (wlan_ignore_prot == WLAN_IGNORE_PROT_NO0)) {
41386 /* Some wireless drivers (such as Centrino) WEP payload already decrypted */
41387 call_data_dissector(next_tvb, pinfo, tree);
41388 goto end_of_wlan;
41389 }
41390 } else {
41391 if (algorithm == PROTECTION_ALG_WEP) {
41392 if (tree)
41393 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
41394 hdr_len + ivlen + len, 4,
41395 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
41396 "0x%08x (correct)",
41397 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
41398
41399 add_new_data_source(pinfo, next_tvb, "Decrypted WEP data");
41400 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102) {
41401 add_new_data_source(pinfo, next_tvb, "Decrypted CCMP data");
41402 } else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41403 add_new_data_source(pinfo, next_tvb, "Decrypted GCMP data");
41404 } else if (algorithm==PROTECTION_ALG_TKIP) {
41405 add_new_data_source(pinfo, next_tvb, "Decrypted TKIP data");
41406 }
41407#undef IS_TKIP
41408#undef IS_CCMP
41409#undef PROTECTION_ALG_CCMP
41410#undef PROTECTION_ALG_TKIP
41411#undef PROTECTION_ALG_WEP
41412 }
41413
41414 /*
41415 * WEP decryption successful!
41416 *
41417 * Use the tvbuff we got back from the decryption; the data starts at
41418 * the beginning. The lengths are already correct for the decoded WEP
41419 * payload.
41420 */
41421 hdr_len = 0;
41422
41423 } else {
41424 /*
41425 * Not a WEP-encrypted frame; just use the data from the tvbuff
41426 * handed to us.
41427 *
41428 * The payload starts at "hdr_len" (i.e., just past the 802.11
41429 * MAC header), the length of data in the tvbuff following the
41430 * 802.11 header is "len", and the length of data in the packet
41431 * following the 802.11 header is "reported_len".
41432 */
41433 next_tvb = tvb;
41434 }
41435
41436 /*
41437 * Do defragmentation if "wlan_defragment" is true, and we have more
41438 * fragments or this isn't the first fragment.
41439 *
41440 * We have to do some special handling to catch frames that
41441 * have the "More Fragments" indicator not set but that
41442 * don't show up as reassembled and don't have any other
41443 * fragments present. Some networking interfaces appear
41444 * to do reassembly even when you're capturing raw packets
41445 * *and* show the reassembled packet without the "More
41446 * Fragments" indicator set *but* with a non-zero fragment
41447 * number.
41448 *
41449 * "fragment_add_seq_802_11()" handles that; we want to call it
41450 * even if we have a short frame, so that it does those checks - if
41451 * the frame is short, it doesn't do reassembly on it.
41452 *
41453 * (This could get some false positives if we really *did* only
41454 * capture the last fragment of a fragmented packet, but that's
41455 * life.)
41456 */
41457 save_fragmented = pinfo->fragmented;
41458 if (wlan_defragment && (more_frags || (frag_number != 0))) {
41459 fragment_head *fd_head;
41460
41461 /*
41462 * If we've already seen this frame, look it up in the
41463 * table of reassembled packets, otherwise add it to
41464 * whatever reassembly is in progress, if any, and see
41465 * if it's done.
41466 */
41467 if (reported_len < 0)
41468 THROW(ReportedBoundsError)except_throw(1, (3), ((void*)0));
41469 fd_head = fragment_add_seq_802_11(&wlan_reassembly_table,
41470 next_tvb, hdr_len, pinfo, seq_number, NULL((void*)0),
41471 frag_number,
41472 reported_len,
41473 more_frags);
41474 next_tvb = process_reassembled_data(tvb, hdr_len, pinfo,
41475 "Reassembled 802.11", fd_head,
41476 &frag_items, NULL((void*)0), hdr_tree);
41477 } else {
41478 /*
41479 * If this is the first fragment, dissect its contents, otherwise
41480 * just show it as a fragment.
41481 */
41482 if (frag_number != 0) {
41483 /* Not the first fragment - don't dissect it. */
41484 next_tvb = NULL((void*)0);
41485 } else {
41486 /* First fragment, or not fragmented. Dissect what we have here. */
41487
41488 /* Get a tvbuff for the payload. */
41489 next_tvb = tvb_new_subset_length_caplen(next_tvb, hdr_len, len, reported_len);
41490
41491 /*
41492 * If this is the first fragment, but not the only fragment,
41493 * tell the next protocol that.
41494 */
41495 if (more_frags)
41496 pinfo->fragmented = true1;
41497 else
41498 pinfo->fragmented = false0;
41499 }
41500 }
41501
41502 if (next_tvb == NULL((void*)0)) {
41503 /* Just show this as an incomplete fragment. */
41504 col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
41505 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
41506 call_data_dissector(next_tvb, pinfo, tree);
41507 pinfo->fragmented = save_fragmented;
41508 goto end_of_wlan;
41509 }
41510
41511 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
41512 {
41513
41514 case MGT_FRAME0x00:
41515 dissect_ieee80211_mgt(fcf, next_tvb, pinfo, tree);
41516 try_scan_ft_assoc_keys(pinfo, whdr);
41517 break;
41518
41519 case DATA_FRAME0x02:
41520 if (is_amsdu && (tvb_reported_length_remaining(next_tvb, 0) > 4)) {
41521 proto_item *parent_item;
41522 proto_tree *mpdu_tree;
41523 uint32_t msdu_offset = 0;
41524 unsigned i = 1;
41525
41526 parent_item = proto_tree_add_protocol_format(tree, proto_aggregate, next_tvb, 0,
41527 tvb_reported_length_remaining(next_tvb, 0), "IEEE 802.11 Aggregate MSDU");
41528 mpdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_parent_tree);
41529
41530 do {
41531 tvbuff_t *msdu_tvb;
41532 uint16_t msdu_length;
41533 proto_tree *subframe_tree;
41534 bool_Bool last_subframe = false0;
41535 uint16_t subframe_length;
41536
41537 /*
41538 * IEEE Std 802.11-2012 says, in section 8.3.2.2 "A-MSDU format":
41539 *
41540 * The A-MSDU subframe header contains three fields: DA, SA, and
41541 * Length. The order of these fields and the bits within these
41542 * fields are the same as the IEEE 802.3 frame format.
41543 *
41544 * which means that the length field is big-endian, not
41545 * little-endian.
41546 */
41547 msdu_length = tvb_get_ntohs(next_tvb, msdu_offset+12);
41548
41549 if (tvb_reported_length_remaining(next_tvb, msdu_offset+14+msdu_length) <= 14)
41550 last_subframe = true1;
41551
41552 /* The last A-MSDU subframe has no padding. */
41553 if (last_subframe)
41554 subframe_length = 14+msdu_length;
41555 else
41556 subframe_length = WS_ROUNDUP_4(14+msdu_length)(((14+msdu_length) + ((unsigned)(4U-1U))) & (~((unsigned)
(4U-1U))))
;
41557
41558 parent_item = proto_tree_add_item(mpdu_tree, hf_ieee80211_amsdu_subframe, next_tvb,
41559 msdu_offset, subframe_length, ENC_NA0x00000000);
41560 proto_item_append_text(parent_item, " #%u", i);
41561 subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
41562 i += 1;
41563
41564 proto_tree_add_mac48_detail(&mac_da, NULL((void*)0), ett_addr, next_tvb, subframe_tree, msdu_offset);
41565 proto_tree_add_mac48_detail(&mac_sa, NULL((void*)0), ett_addr, next_tvb, subframe_tree, msdu_offset+6);
41566 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_length, next_tvb, msdu_offset+12, 2, ENC_BIG_ENDIAN0x00000000);
41567
41568 msdu_offset += 14;
41569 msdu_tvb = tvb_new_subset_length(next_tvb, msdu_offset, msdu_length);
41570 call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
41571 if (!last_subframe) {
41572 uint8_t padding = (4-((msdu_offset+msdu_length)&3))&3;
41573 if (padding > 0)
41574 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_padding, next_tvb, msdu_offset+msdu_length, padding, ENC_NA0x00000000);
41575 }
41576
41577 msdu_offset = WS_ROUNDUP_4(msdu_offset+msdu_length)(((msdu_offset+msdu_length) + ((unsigned)(4U-1U))) & (~((
unsigned)(4U-1U))))
;
41578 } while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
41579 } else {
41580 /* I guess some bridges take Netware Ethernet_802_3 frames,
41581 which are 802.3 frames (with a length field rather than
41582 a type field, but with no 802.2 header in the payload),
41583 and just stick the payload into an 802.11 frame. I've seen
41584 captures that show frames of that sort.
41585
41586 We also handle some odd form of encapsulation in which a
41587 complete Ethernet frame is encapsulated within an 802.11
41588 data frame, with no 802.2 header. This has been seen
41589 from some hardware.
41590
41591 On top of that, at least at some point it appeared that
41592 the OLPC XO sent out frames with two bytes of 0 between
41593 the "end" of the 802.11 header and the beginning of
41594 the payload. Something similar has also been observed
41595 with Atheros chipsets. There the sequence control field
41596 seems repeated.
41597
41598 And, on top of *that*, IEEE Std 802.11-2018 section
41599 5.1.4 "MSDU format" says:
41600
41601 Logical Link Control (LLC) sublayer entities use the MAC
41602 sublayer service to exchange PDUs with peer LLC sublayer
41603 entities. These PDUs are termed MAC sublayer SDUs (MSDUs)
41604 when sent to the MAC sublayer. There are two LLC sublayer
41605 protocols used (see IEEE Std 802-2014); LLC Protocol
41606 Discrimination (LPD) (see ISO/IEC 8802-2:1998) and EtherType
41607 Protocol Discrimination (EPD) (see IEEE Std 802.3-2012).
41608 LPD is used for transmission of all IEEE 802.11 MSDUs with
41609 the exception of the 5.9 GHz bands where EPD is used
41610 (see E.2.3 and E.2.4).
41611
41612 and IEEE Std 1609.3-2016, section 5.2 "Logical link control",
41613 subsection 5.2.1 "General", says:
41614
41615 A Networking Services implementation shall use EPD in the
41616 LLC sublayer as described in IEEE Std 802, using an EtherType
41617 in the LLC sublayer header Type9 field (see Figure 5 and
41618 Figure 28). The LLC sublayer header consists solely of a
41619 2-octet field that contains an EtherType that identifies
41620 the higher layer protocol.
41621
41622 and ISO 21215, second edition, 2018-06, "Intelligent transport
41623 systems -- Localized communications -- ITS-M5", section 6.3
41624 "Logical link control sub-layer" says:
41625
41626 IEEE Std 802.11TM-2016 does not specify a logical link control
41627 sub-layer protocol. Related functionality is part of the
41628 communication adaptation sub-layer specified in 6.4.
41629
41630 The Length/Type field specified in IEEE 802.3-2015 contains
41631 a 2-octet unsigned Integer number. Dependent on the value,
41632 the field provides either length information or EtherType
41633 information. If the value contained in this field is equal
41634 to or larger than 1 536 = 0x06.00, the field contains an
41635 EtherType address. Ethertype addresses are assigned by the
41636 IEEE Registration Authority, and are used to identify the
41637 protocol employed directly above the ITS-S access layer.
41638 This method of addressing is named "EtherType Protocol
41639 Discrimination" (EPD). An ITS-M5 CI shall support EPD
41640 specified in IEEE Std 802.
41641
41642 ...
41643
41644 NOTE 2 EPD replaces LLC Protocol Discrimination (LPD).
41645 ETSI ITS-G5 is the only known ITS access technology still
41646 using LPD.
41647
41648 Different to the information in IEEE Std 802.11-2016, 5.1.4,
41649 EPD is applicable in all frequency bands as long as
41650 dot11OCBActivated is set to true, i.e. activating the operation
41651 mode "outside the context of a BSS" (OCB).
41652
41653 meaning that a packet might just begin with an Ethertype.
41654
41655 So, if the packet doesn't start with 0xaa 0xaa:
41656
41657 we first use the same scheme that linux-wlan-ng does to detect
41658 those encapsulated Ethernet frames, namely looking to see whether
41659 the frame either starts with 6 octets that match the destination
41660 address from the 802.11 header or has 6 octets that match the
41661 source address from the 802.11 header following the first 6 octets,
41662 and, if so, treat it as an encapsulated Ethernet frame;
41663
41664 otherwise, we use the same scheme that we use in the Ethernet
41665 dissector to recognize Netware 802.3 frames, namely checking
41666 whether the packet starts with 0xff 0xff and, if so, treat it
41667 as an encapsulated IPX frame;
41668
41669 otherwise, we check whether the packet starts with 0x00 0x00
41670 or with a copy of the sequence control field and, if so, treat
41671 those two octets as mysterious extra stuff preceding the
41672 payload (possibly OLPC stuff, possibly Ruckus Wireless stuff,
41673 possibly Atheros stuff), and treat what follows as a frame
41674 using LPD;
41675
41676 otherwise, we check whether the first two octets, treated
41677 as an Ethertype, has a dissector and, if so, treat this as
41678 a frame using EPD;
41679
41680 otherwise, we treat this as a frame using LPD. */
41681 heur_dtbl_entry_t *hdtbl_entry;
41682 if (dissector_try_heuristic(heur_subdissector_list, next_tvb, pinfo, tree, &hdtbl_entry, NULL((void*)0))) {
41683 pinfo->fragmented = save_fragmented;
41684 goto end_of_wlan; /* heuristics dissector handled it. */
41685 }
41686 encap_type = ENCAP_802_2;
41687 if (tvb_bytes_exist(next_tvb, 0, 2)) {
41688 octet1 = tvb_get_uint8(next_tvb, 0);
41689 octet2 = tvb_get_uint8(next_tvb, 1);
41690 if ((octet1 != 0xaa) || (octet2 != 0xaa)) {
41691 if ((tvb_memeql(next_tvb, 6, (const uint8_t *)pinfo->dl_src.data, 6) == 0) ||
41692 (tvb_memeql(next_tvb, 0, (const uint8_t *)pinfo->dl_dst.data, 6) == 0))
41693 encap_type = ENCAP_ETHERNET;
41694 else if ((octet1 == 0xff) && (octet2 == 0xff))
41695 encap_type = ENCAP_IPX;
41696 else if (((octet1 == 0x00) && (octet2 == 0x00)) &&
41697 tvb_bytes_exist(next_tvb, 0, 18) &&
41698 (tvb_memeql(next_tvb, 6, (const uint8_t*)pinfo->dl_dst.data, 6) == 0) &&
41699 (tvb_memeql(next_tvb, 12, (const uint8_t*)pinfo->dl_src.data, 6) == 0)) {
41700 proto_tree_add_item(tree, hf_ieee80211_mysterious_extra_stuff, next_tvb, 0, 6, ENC_NA0x00000000);
41701 next_tvb = tvb_new_subset_remaining(next_tvb, 6);
41702 encap_type = ENCAP_ETHERNET;
41703 } else if (((octet1 == 0x00) && (octet2 == 0x00)) ||
41704 (((octet2 << 8) | octet1) == seq_control)) {
41705 proto_tree_add_item(tree, hf_ieee80211_mysterious_extra_stuff, next_tvb, 0, 2, ENC_NA0x00000000);
41706 next_tvb = tvb_new_subset_remaining(next_tvb, 2);
41707 } else if ((etype = ((octet1 << 8) | octet2)) > ETHERNET_II_MIN_LEN1536) {
41708 /*
41709 * This might be an Ethertype, so maybe this is 802.11
41710 * using EPD rather than LPD. Is this a *known* Ethertype?
41711 */
41712 if (dissector_get_uint_handle(ethertype_subdissector_table,
41713 etype) != NULL((void*)0)) {
41714 /* Yes. */
41715 encap_type = ENCAP_EPD;
41716 }
41717 }
41718 }
41719 }
41720
41721 switch (encap_type) {
41722
41723 case ENCAP_802_2:
41724 /* 802.2 LPD */
41725 call_dissector(llc_handle, next_tvb, pinfo, tree);
41726 break;
41727
41728 case ENCAP_ETHERNET:
41729 call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
41730 break;
41731
41732 case ENCAP_IPX:
41733 call_dissector(ipx_handle, next_tvb, pinfo, tree);
41734 break;
41735
41736 case ENCAP_EPD:
41737 /* EPD */
41738 call_dissector(epd_llc_handle, next_tvb, pinfo, tree);
41739 break;
41740 }
41741 }
41742 break;
41743
41744 case EXTENSION_FRAME0x03:
41745 {
41746 dissect_ieee80211_extension(fcf, next_tvb, pinfo, tree, flags);
41747 break;
41748 }
41749 }
41750 pinfo->fragmented = save_fragmented;
41751
41752end_of_wlan:
41753 whdr->stats = wlan_stats;
41754 tap_queue_packet(wlan_tap, pinfo, whdr);
41755 memset(&wlan_stats, 0, sizeof wlan_stats);
41756
41757 return tvb_captured_length(tvb);
41758}
41759
41760static int
41761dissect_ieee80211_unknown_pv(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
41762 proto_tree *tree, uint8_t pv,
41763 struct ieee_802_11_phdr *phdr)
41764{
41765 proto_item *ti;
41766 int len;
41767 unsigned offset = 0;
41768 proto_tree *hdr_tree;
41769 tvbuff_t *next_tvb;
41770
41771 col_add_fstr(pinfo->cinfo, COL_INFO, "Unknown protocol version: %u", pv);
41772
41773 /* Create the protocol tree */
41774 len = tvb_reported_length_remaining(tvb, offset);
41775 ti = proto_tree_add_protocol_format(tree, proto_wlan, tvb, offset, len,
41776 "IEEE 802.11 Unknown Protocol Version:"
41777 "%d", pv);
41778 hdr_tree = proto_item_add_subtree(ti, ett_80211);
41779 proto_tree_add_item(hdr_tree, hf_ieee80211_fc_proto_version, tvb, offset, 1, ENC_NA0x00000000);
41780 if (phdr->fcs_len == 4)
41781 len -= 4;
41782 len -= 2; /* We have already dealt with two bytes */
41783 next_tvb = tvb_new_subset_length(tvb, 2, len);
41784 call_data_dissector(next_tvb, pinfo, hdr_tree);
41785 proto_tree_add_checksum(hdr_tree, tvb, len + 2, hf_ieee80211_fcs, hf_ieee80211_fcs_status, &ei_ieee80211_fcs, pinfo, 0, ENC_LITTLE_ENDIAN0x80000000, PROTO_CHECKSUM_NO_FLAGS0x00);
41786
41787 return tvb_captured_length(tvb);
41788}
41789
41790/* ************************************************************************* */
41791/* Dissect 802.11 frame */
41792/* ************************************************************************* */
41793/*
41794 * The 802.11n specification makes some fairly significant changes to the
41795 * layout of the MAC header. The first two bits of the MAC header are the
41796 * protocol version. You'd think that the 802.11 committee would have
41797 * bumped the version to indicate a different MAC layout, but NOOOO -- we
41798 * have to go digging for bits in various locations instead.
41799 */
41800static int
41801dissect_ieee80211_common(tvbuff_t *tvb, packet_info *pinfo,
41802 proto_tree *tree, uint32_t option_flags,
41803 struct ieee_802_11_phdr *phdr)
41804{
41805 uint8_t pv = 0;
41806 bool_Bool isDMG = (phdr->phy == PHDR_802_11_PHY_11AD9);
41807 bool_Bool isS1G = (phdr->phy == PHDR_802_11_PHY_11AH10);
41808 uint16_t fcf;
41809 static wlan_hdr_t whdrs[4];
41810 wlan_hdr_t *whdr;
41811
41812 /* Update these so the info is available down the line */
41813 if (pinfo->pseudo_header) {
41814 pinfo->pseudo_header->ieee_802_11.has_frequency = phdr->has_frequency;
41815 pinfo->pseudo_header->ieee_802_11.frequency = phdr->frequency;
41816 }
41817
41818 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY, GINT_TO_POINTER(isDMG)((gpointer) (glong) (isDMG)));
41819
41820 memset(&whdrs[0], 0, sizeof(wlan_hdr_t) * 4);
41821 whdr= &whdrs[0];
41822
41823 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY, GINT_TO_POINTER(isS1G)((gpointer) (glong) (isS1G)));
41824
41825 /* Handling for one-one mapping between associations and conversations */
41826 if (!pinfo->fd->visited) {
41827 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
41828 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
41829 }
41830
41831 col_set_str(pinfo->cinfo, COL_PROTOCOL, "802.11");
41832 col_clear(pinfo->cinfo, COL_INFO);
41833
41834 fcf = FETCH_FCF(0)((option_flags & 0x00000001) ? (((guint16) ( (guint16) ((
guint16) (tvb_get_letohs(tvb, 0)) >> 8) | (guint16) ((guint16
) (tvb_get_letohs(tvb, 0)) << 8)))) : tvb_get_letohs(tvb
, 0))
;
41835
41836 /*
41837 * Handle PV0 and PV1 in separate functions.
41838 */
41839 pv = FCF_PROT_VERSION(fcf)((fcf) & 0x3);
41840 switch (pv) {
41841 case PV00x0:
41842 dissect_ieee80211_pv0(tvb, pinfo, tree, option_flags, whdr, phdr);
41843 break;
41844 case PV10x1:
41845 dissect_ieee80211_pv1(tvb, pinfo, tree, phdr);
41846 break;
41847 default: /* Unknown protocol version */
41848 dissect_ieee80211_unknown_pv(tvb, pinfo, tree, pv, phdr);
41849 break;
41850 }
41851 return tvb_captured_length(tvb);
41852}
41853
41854/*
41855 * Dissect 802.11 with a variable-length link-layer header and with the FCS
41856 * presence or absence indicated by the pseudo-header, if there is one.
41857 */
41858static int
41859dissect_ieee80211(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
41860{
41861 struct ieee_802_11_phdr *phdr = (struct ieee_802_11_phdr *)data;
41862 struct ieee_802_11_phdr ourphdr;
41863
41864 if (phdr == NULL((void*)0)) {
41865 /*
41866 * Fake a pseudo-header.
41867 * XXX - what are we supposed to do if the FCS length is unknown?
41868 */
41869 memset(&ourphdr, 0, sizeof(ourphdr));
41870 ourphdr.fcs_len = -1;
41871 ourphdr.decrypted = false0;
41872 ourphdr.datapad = false0;
41873 ourphdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41874 phdr = &ourphdr;
41875 }
41876 return dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, phdr);
41877}
41878
41879/*
41880 * Dissect 802.11 with a variable-length link-layer header and with an
41881 * FCS, but no pseudo-header.
41882 */
41883static int
41884dissect_ieee80211_withfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
41885{
41886 struct ieee_802_11_phdr phdr;
41887
41888 /* Construct a pseudo-header to hand to the common code. */
41889 memset(&phdr, 0, sizeof(phdr));
41890 phdr.fcs_len = 4;
41891 phdr.decrypted = false0;
41892 phdr.datapad = false0;
41893 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41894 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
41895 return tvb_captured_length(tvb);
41896}
41897
41898/*
41899 * Dissect 802.11 with a variable-length link-layer header and without an
41900 * FCS, but no pseudo-header.
41901 */
41902static int
41903dissect_ieee80211_withoutfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
41904{
41905 struct ieee_802_11_phdr phdr;
41906
41907 /* Construct a pseudo-header to hand to the common code. */
41908 memset(&phdr, 0, sizeof(phdr));
41909 phdr.decrypted = false0;
41910 phdr.datapad = false0;
41911 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41912 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
41913 return tvb_captured_length(tvb);
41914}
41915
41916/*
41917 * Dissect 802.11 from an Intel 2200BG adapter in a Centrino laptop
41918 * running Windows XP.
41919 *
41920 * From
41921 *
41922 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00184.html
41923 *
41924 * and
41925 *
41926 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00393.html:
41927 *
41928 * I tried capturing from a Centrino laptop with the Intel 2200BG 802.11g
41929 * chipset. I saw a lot of "Ethernet II" frames with 0x2452 as ethertype.
41930 *
41931 * ...
41932 *
41933 * This behaviour has been observed on Windows XP. In my opinion it is
41934 * a "proprietary" behaviour of either the Centrino driver or the Centrino
41935 * hardware. Currently I have no Linux distro installed on the machine to
41936 * verify whether it is also the case.
41937 *
41938 * These packets are seen only in a promiscuous capture:
41939 * - Packets normally received by the Centrino computer have the normal
41940 * structure (no 802.11/LLC header but directly IP header).
41941 * - Packets that are supposed to be received by another computer have
41942 * the 802.11/LLC headers. ... Also I noticed that when WEP is enabled,
41943 * the 802.11 header has the flag "WEP" set to true, but the packet
41944 * is already decrypted. I added a test in the code to accommodate this.
41945 * For TKIP it seems to stay encrypted.
41946 */
41947static int
41948dissect_ieee80211_centrino(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
41949{
41950 struct ieee_802_11_phdr phdr;
41951
41952 /* Construct a pseudo-header to hand to the common code. */
41953 memset(&phdr, 0, sizeof(phdr));
41954 phdr.decrypted = false0;
41955 phdr.datapad = false0;
41956 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41957 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002|IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
41958 return tvb_captured_length(tvb);
41959}
41960
41961/*
41962 * Dissect 802.11 with a variable-length link-layer header and a byte-swapped
41963 * control field and with no FCS (some hardware sends out LWAPP-encapsulated
41964 * 802.11 packets with the control field byte swapped).
41965 */
41966static int
41967dissect_ieee80211_bsfc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
41968{
41969 struct ieee_802_11_phdr phdr;
41970
41971 /* Construct a pseudo-header to hand to the common code. */
41972 memset(&phdr, 0, sizeof(phdr));
41973 phdr.decrypted = false0;
41974 phdr.datapad = false0;
41975 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41976 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_BROKEN_FC0x00000001|IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
41977 return tvb_captured_length(tvb);
41978}
41979
41980/*
41981 * Dissect 802.11 with a variable-length link-layer header without qos elements
41982 * in data+qos frames and with no FCS (sent as WIDS frames by Cisco standalone
41983 * APs).
41984 */
41985static int
41986dissect_ieee80211_noqos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
41987{
41988 struct ieee_802_11_phdr phdr;
41989
41990 /* Construct a pseudo-header to hand to the common code. */
41991 memset(&phdr, 0, sizeof(phdr));
41992 phdr.decrypted = false0;
41993 phdr.datapad = false0;
41994 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
41995 dissect_ieee80211_common(tvb, pinfo, tree, 0, &phdr);
41996 return tvb_captured_length(tvb);
41997}
41998
41999
42000/* ------------- */
42001static unsigned
42002retransmit_hash(const void *k)
42003{
42004 const retransmit_key *key = (const retransmit_key *)k;
42005 unsigned hash_val;
42006 int i;
42007
42008 hash_val = 0;
42009 for (i = 0; i < 6; i++)
42010 hash_val += key->bssid[i];
42011
42012 for (i = 0; i < 6; i++)
42013 hash_val += key->src[i];
42014
42015 return hash_val;
42016}
42017
42018static int
42019retransmit_equal(const void *k1, const void *k2)
42020{
42021 const retransmit_key *key1 = (const retransmit_key *)k1;
42022 const retransmit_key *key2 = (const retransmit_key *)k2;
42023
42024 return ((!memcmp(key1->bssid, key2->bssid, 6) && !memcmp(key1->src, key2->src, 6)) ? true1:false0);
42025}
42026
42027static unsigned
42028frame_hash(const void *k)
42029{
42030 uint32_t frame = GPOINTER_TO_UINT(k)((guint) (gulong) (k));
42031
42032 return frame;
42033}
42034
42035static int
42036frame_equal(const void *k1, const void *k2)
42037{
42038 uint32_t frame1 = GPOINTER_TO_UINT(k1)((guint) (gulong) (k1));
42039 uint32_t frame2 = GPOINTER_TO_UINT(k2)((guint) (gulong) (k2));
42040
42041 return frame1==frame2;
42042}
42043
42044/*
42045 * EAPOL key description dissectors.
42046 */
42047#define KEY_INFO_KEYDES_VERSION_MASK0x0007 0x0007
42048#define KEY_INFO_KEY_TYPE_MASK0x0008 0x0008
42049#define KEY_INFO_KEY_INDEX_MASK0x0030 0x0030
42050#define KEY_INFO_INSTALL_MASK0x0040 0x0040
42051#define KEY_INFO_KEY_ACK_MASK0x0080 0x0080
42052#define KEY_INFO_KEY_MIC_MASK0x0100 0x0100
42053#define KEY_INFO_SECURE_MASK0x0200 0x0200
42054#define KEY_INFO_ERROR_MASK0x0400 0x0400
42055#define KEY_INFO_REQUEST_MASK0x0800 0x0800
42056#define KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000 0x1000
42057#define KEY_INFO_SMK_MESSAGE_MASK0x2000 0x2000
42058
42059#define KEYDES_VER_TYPE10x01 0x01
42060#define KEYDES_VER_TYPE20x02 0x02
42061#define KEYDES_VER_TYPE30x03 0x03
42062
42063static const value_string keydes_version_vals[] = {
42064 { KEYDES_VER_TYPE10x01, "RC4 Cipher, HMAC-MD5 MIC" },
42065 { KEYDES_VER_TYPE20x02, "AES Cipher, HMAC-SHA1 MIC" },
42066 { KEYDES_VER_TYPE30x03, "AES Cipher, AES-128-CMAC MIC" },
42067 { 0, NULL((void*)0) }
42068};
42069
42070static int proto_wlan_rsna_eapol;
42071
42072static int hf_wlan_rsna_eapol_wpa_keydes_msgnr;
42073static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo;
42074static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version;
42075static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type;
42076static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index;
42077static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install;
42078static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack;
42079static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic;
42080static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure;
42081static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error;
42082static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request;
42083static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data;
42084static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message;
42085static int hf_wlan_rsna_eapol_keydes_key_len;
42086static int hf_wlan_rsna_eapol_keydes_replay_counter;
42087static int hf_wlan_rsna_eapol_keydes_key_iv;
42088static int hf_wlan_rsna_eapol_wpa_keydes_nonce;
42089static int hf_wlan_rsna_eapol_wpa_keydes_rsc;
42090static int hf_wlan_rsna_eapol_wpa_keydes_id;
42091static int hf_wlan_rsna_eapol_wpa_keydes_mic;
42092static int hf_wlan_rsna_eapol_wpa_keydes_data_len;
42093static int hf_wlan_rsna_eapol_wpa_keydes_data;
42094static int hf_wlan_rsna_eapol_wpa_keydes_padding;
42095static int hf_wlan_rsna_eapol_wpa_extraneous;
42096
42097static int ett_keyinfo;
42098static int ett_wlan_rsna_eapol_keydes_data;
42099
42100static const true_false_string keyinfo_key_type_tfs = { "Pairwise Key", "Group Key" };
42101
42102static int
42103keydata_padding_len(tvbuff_t *tvb)
42104{
42105 int keydata_len = tvb_reported_length(tvb);
42106 int len_no_padding = keydata_len;
42107 const uint8_t *keydata = tvb_get_ptr(tvb, 0, keydata_len);
42108 while (len_no_padding > 0 && (keydata[len_no_padding - 1] == 0x00)) {
42109 len_no_padding--;
42110 }
42111 if (len_no_padding > 0 && keydata[len_no_padding - 1] == 0xdd) {
42112 len_no_padding--;
42113 return keydata_len - len_no_padding;
42114 }
42115 return 0;
42116}
42117
42118static void
42119get_eapol_parsed(packet_info *pinfo, PDOT11DECRYPT_EAPOL_PARSED eapol_parsed,
42120 ieee80211_conversation_data_t *conv_data)
42121{
42122 if (!eapol_parsed) {
42123 return;
42124 }
42125
42126 proto_eapol_key_frame_t *eapol_key =
42127 (proto_eapol_key_frame_t *)p_get_proto_data(pinfo->pool, pinfo, proto_eapol,
42128 EAPOL_KEY_FRAME_KEY0);
42129 if (!eapol_key) {
42130 return;
42131 }
42132 eapol_parsed->len = eapol_key->len;
42133 eapol_parsed->key_type = eapol_key->type;
42134 eapol_parsed->key_version = (uint8_t)
42135 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_VERSION_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, KEY_VERSION_KEY)))
;
42136 eapol_parsed->key_len = (uint16_t)
42137 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, KEY_LEN_KEY)))
;
42138 eapol_parsed->key_iv = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_IV_KEY);
42139 eapol_parsed->key_data = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_DATA_KEY);
42140 eapol_parsed->key_data_len = (uint16_t)
42141 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_DATA_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, KEY_DATA_LEN_KEY)))
;
42142 eapol_parsed->nonce = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, NONCE_KEY);
42143 eapol_parsed->group_cipher = (uint8_t)
42144 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GROUP_CIPHER_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, GROUP_CIPHER_KEY)))
;
42145 eapol_parsed->cipher = (uint8_t)
42146 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, CIPHER_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, CIPHER_KEY)))
;
42147 eapol_parsed->akm = (uint8_t)
42148 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, AKM_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, AKM_KEY)))
;
42149 eapol_parsed->mic = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MIC_KEY);
42150 eapol_parsed->mic_len =
42151 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MIC_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, MIC_LEN_KEY)))
;
42152 eapol_parsed->gtk = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_KEY);
42153 eapol_parsed->gtk_len = (uint16_t)
42154 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, GTK_LEN_KEY)))
;
42155
42156 /* For fast bss transition akms */
42157 eapol_parsed->mdid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDID_KEY);
42158 eapol_parsed->fte.r0kh_id =
42159 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R0KH_ID_KEY);
42160 eapol_parsed->fte.r0kh_id_len = (uint8_t)
42161 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R0KH_ID_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, FTE_R0KH_ID_LEN_KEY)))
;
42162 eapol_parsed->fte.r1kh_id =
42163 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R1KH_ID_KEY);
42164 eapol_parsed->fte.r1kh_id_len = (uint8_t)
42165 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R1KH_ID_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, FTE_R1KH_ID_LEN_KEY)))
;
42166
42167 if (conv_data) {
42168 eapol_parsed->dh_group = conv_data->sae_group;
42169 }
42170}
42171
42172static void
42173get_assoc_parsed(packet_info *pinfo, PDOT11DECRYPT_ASSOC_PARSED assoc_parsed)
42174{
42175 if (!assoc_parsed) {
42176 return;
42177 }
42178
42179 assoc_parsed->group_cipher = (uint8_t)
42180 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GROUP_CIPHER_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, GROUP_CIPHER_KEY)))
;
42181 assoc_parsed->cipher = (uint8_t)
42182 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, CIPHER_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, CIPHER_KEY)))
;
42183 assoc_parsed->akm = (uint8_t)
42184 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, AKM_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, AKM_KEY)))
;
42185 assoc_parsed->fte.mic = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_MIC_KEY);
42186 assoc_parsed->fte.mic_len =
42187 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_MIC_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, FTE_MIC_LEN_KEY)))
;
42188 assoc_parsed->mdid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDID_KEY);
42189 assoc_parsed->fte.anonce =
42190 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_ANONCE_KEY);
42191 assoc_parsed->fte.snonce =
42192 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_SNONCE_KEY);
42193 assoc_parsed->fte.r0kh_id =
42194 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R0KH_ID_KEY);
42195 assoc_parsed->fte.r0kh_id_len = (uint8_t)
42196 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R0KH_ID_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, FTE_R0KH_ID_LEN_KEY)))
;
42197 assoc_parsed->fte.r1kh_id =
42198 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R1KH_ID_KEY);
42199 assoc_parsed->fte.r1kh_id_len = (uint8_t)
42200 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R1KH_ID_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, FTE_R1KH_ID_LEN_KEY)))
;
42201 assoc_parsed->rsne_tag =
42202 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RSNE_TAG_KEY);
42203 assoc_parsed->rsnxe_tag =
42204 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RSNXE_TAG_KEY);
42205 assoc_parsed->mde_tag =
42206 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDE_TAG_KEY);
42207 assoc_parsed->fte_tag =
42208 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_TAG_KEY);
42209 assoc_parsed->rde_tag =
42210 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RDE_TAG_KEY);
42211 assoc_parsed->gtk = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_KEY);
42212 assoc_parsed->gtk_len = (uint16_t)
42213 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, GTK_LEN_KEY)))
;
42214 assoc_parsed->gtk_subelem_key_len = (uint16_t)
42215 GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_SUBELEM_KEY_LEN_KEY))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, GTK_SUBELEM_KEY_LEN_KEY)))
;
42216}
42217
42218static void
42219try_decrypt_keydata(packet_info *pinfo)
42220{
42221 uint32_t dec_caplen;
42222 unsigned char dec_data[DOT11DECRYPT_EAPOL_MAX_LEN1024U];
42223 DOT11DECRYPT_EAPOL_PARSED eapol_parsed;
42224 DOT11DECRYPT_KEY_ITEM used_key;
42225
42226 if (!enable_decryption) {
42227 return;
42228 }
42229
42230 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42231 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42232 if (!bssid || !sta) {
42233 return;
42234 }
42235
42236 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
42237 ieee80211_conversation_data_t *conversation_data = NULL((void*)0);
42238 if (conversation) {
42239 conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
42240 /* Use MLD MAC in EAPOL */
42241 if (conversation_data && conversation_data->mld_set) {
42242 bssid = conversation_data->ap_mld;
42243 sta = conversation_data->sta_mld;
42244 }
42245 }
42246
42247 memset(&eapol_parsed, 0, sizeof(eapol_parsed));
42248 get_eapol_parsed(pinfo, &eapol_parsed, conversation_data);
42249
42250 int ret = Dot11DecryptDecryptKeyData(&dot11decrypt_ctx,
42251 &eapol_parsed,
42252 bssid, sta,
42253 dec_data, &dec_caplen,
42254 &used_key);
42255 if (ret == DOT11DECRYPT_RET_SUCCESS0 && dec_caplen > 0) {
42256 proto_keydata_t *eapol = wmem_new(wmem_file_scope(), proto_keydata_t)((proto_keydata_t*)wmem_alloc((wmem_file_scope()), sizeof(proto_keydata_t
)))
;
42257 eapol->used_key = used_key;
42258 eapol->keydata_len = dec_caplen;
42259 eapol->keydata = (uint8_t *)wmem_memdup(wmem_file_scope(), dec_data, dec_caplen);
42260
42261 /* Save decrypted eapol keydata for rsna dissector */
42262 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_EAPOL_KEY, eapol);
42263 }
42264}
42265
42266static void
42267try_scan_eapol_keys(packet_info *pinfo, DOT11DECRYPT_HS_MSG_TYPE msg_type)
42268{
42269 DOT11DECRYPT_EAPOL_PARSED eapol_parsed;
42270
42271 if (!enable_decryption) {
42272 return;
42273 }
42274
42275 proto_eapol_key_frame_t *eapol_key =
42276 (proto_eapol_key_frame_t *)p_get_proto_data(pinfo->pool, pinfo, proto_eapol,
42277 EAPOL_KEY_FRAME_KEY0);
42278 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42279 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42280
42281 if (!eapol_key || !bssid || !sta) {
42282 return;
42283 }
42284
42285 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
42286 ieee80211_conversation_data_t *conversation_data = NULL((void*)0);
42287 if (conversation) {
42288 conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
42289 /* Use MLD MAC in EAPOL */
42290 if (conversation_data && conversation_data->mld_set) {
42291 bssid = conversation_data->ap_mld;
42292 sta = conversation_data->sta_mld;
42293 }
42294 }
42295
42296 memset(&eapol_parsed, 0, sizeof(eapol_parsed));
42297 get_eapol_parsed(pinfo, &eapol_parsed, conversation_data);
42298 eapol_parsed.msg_type = msg_type;
42299
42300 Dot11DecryptScanEapolForKeys(&dot11decrypt_ctx,
42301 &eapol_parsed,
42302 eapol_key->data, eapol_key->len,
42303 bssid, sta);
42304}
42305
42306static void
42307try_scan_ft_assoc_keys(packet_info *pinfo, const wlan_hdr_t *whdr)
42308{
42309 DOT11DECRYPT_ASSOC_PARSED assoc_parsed;
42310 uint8_t decrypted_buf[DOT11DECRYPT_WPA_PTK_MAX_LEN88];
42311 size_t decrypted_len = 0;
42312 DOT11DECRYPT_KEY_ITEM used_key;
42313 int ret;
42314
42315 if (!enable_decryption || pinfo->fd->visited || !whdr) {
42316 return;
42317 }
42318 if (whdr->type != MGT_ASSOC_REQ0x00 && whdr->type != MGT_ASSOC_RESP0x01 &&
42319 whdr->type != MGT_REASSOC_REQ0x02 && whdr->type != MGT_REASSOC_RESP0x03) {
42320 return;
42321 }
42322
42323 memset(&assoc_parsed, 0, sizeof(assoc_parsed));
42324 get_assoc_parsed(pinfo, &assoc_parsed);
42325 /* Implicit conversion from MGT_ASSOC_xxx to DOT11DECRYPT_SUBTYPE_xxx */
42326 assoc_parsed.frame_subtype = (uint8_t)whdr->type;
42327 memcpy(assoc_parsed.bssid, whdr->bssid.data, 6);
42328 memcpy(assoc_parsed.sa, whdr->src.data, 6);
42329 memcpy(assoc_parsed.da, whdr->dst.data, 6);
42330
42331 ret = Dot11DecryptScanFtAssocForKeys(&dot11decrypt_ctx, &assoc_parsed,
42332 decrypted_buf, &decrypted_len,
42333 &used_key);
42334 if (ret == DOT11DECRYPT_RET_SUCCESS_HANDSHAKE-1 && decrypted_len > 0) {
42335 proto_keydata_t *proto = wmem_new(wmem_file_scope(), proto_keydata_t)((proto_keydata_t*)wmem_alloc((wmem_file_scope()), sizeof(proto_keydata_t
)))
;
42336 proto->used_key = used_key;
42337 proto->keydata_len = (unsigned)decrypted_len;
42338 proto->keydata = (uint8_t *)wmem_memdup(wmem_file_scope(), decrypted_buf, decrypted_len);
42339
42340 /* Save decrypted GTK keydata for tag dissector */
42341 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_GTK_KEY, proto);
42342 }
42343}
42344
42345/*
42346 * In some cases we do not know the key mic len from other sources, however
42347 * we can figure it out from the first frame in the four-way handshake.
42348 *
42349 * It defaults to 16 bytes, but if there are more than 16 bytes of zeros before
42350 * the eapol data len, then we can adjust upwards. We used steps of 8 bytes
42351 * because the MIC len is usually a multiple of 8 in length.
42352 *
42353 * If we find it, set it in the conversation data for the wlan conversation
42354 * found via the pinfo.
42355 */
42356static void
42357discover_key_mic_len1(tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
42358{
42359 conversation_t *conversation = find_or_create_wlan_conversation(pinfo);
42360 ieee80211_conversation_data_t *conversation_data = get_or_create_conversation_data(conversation);
42361 uint16_t mic_len = 16;
42362
42363 /*
42364 * The first sixteen bytes at offset should 0. If not, get out of here
42365 */
42366 if (tvb_get_letoh64(tvb, offset) != 0 ||
42367 tvb_get_letoh64(tvb, offset + 8) != 0) {
42368 return;
42369 }
42370
42371 offset += 16;
42372 /*
42373 * Do we have another 8 bytes of zeros? But do not fall off the end!
42374 */
42375 while ((tvb_captured_length(tvb) > (offset + 8)) &&
42376 tvb_get_letoh64(tvb, offset) == 0) {
42377 /*
42378 * equal to the rest of the data.
42379 */
42380 mic_len += 8;
42381 offset += 8;
42382
42383 }
42384
42385 /*
42386 * Do the next two bytes give us the length of the remainder?
42387 */
42388 if (tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) + 2 ==
42389 tvb_reported_length_remaining(tvb, offset)) {
42390 conversation_data->discovered_key_mic_len = mic_len;
42391 }
42392}
42393
42394/*
42395 * Sometimes we cannot discover it from the first frame of the four-way
42396 * handshake, however, we can still determine it from the second frame.
42397 */
42398static void
42399discover_key_mic_len2(tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
42400{
42401 conversation_t *conversation = find_or_create_wlan_conversation(pinfo);
42402 ieee80211_conversation_data_t *conversation_data = get_or_create_conversation_data(conversation);
42403 uint16_t mic_len = 16;
42404
42405 /*
42406 * The KeyMIC should have a 2-byte length field following it, and that
42407 * should cover the rest of the captured data ...
42408 */
42409 offset += 16;
42410
42411 while ((tvb_captured_length(tvb) > (offset + 2)) &&
42412 tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) !=
42413 tvb_reported_length_remaining(tvb, offset + 2)) {
42414
42415 /*
42416 * Add 8 more bytes.
42417 */
42418 mic_len +=8;
42419 offset+= 8;
42420 }
42421
42422 /*
42423 * Check that we are correct ... ie, the two bytes where we are is the length
42424 * of the remaining data, because we might have walked off the end of the
42425 * tvb.
42426 *
42427 * We check against the reported length remaining because the capture might
42428 * have been truncated beyond the key data length field.
42429 */
42430 if (tvb_captured_length_remaining(tvb, offset) >= 2 &&
42431 tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) + 2 ==
42432 tvb_reported_length_remaining(tvb, offset)) {
42433 conversation_data->discovered_key_mic_len = mic_len;
42434 }
42435}
42436
42437static int
42438dissect_wlan_rsna_eapol_wpa_or_rsn_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
42439{
42440 unsigned offset = 0;
42441 uint16_t keyinfo;
42442 uint16_t eapol_data_len;
42443 proto_tree *keydes_tree;
42444 proto_tree *ti = NULL((void*)0);
42445 static int * const wlan_rsna_eapol_wpa_keydes_keyinfo[] = {
42446 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
42447 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
42448 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
42449 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
42450 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
42451 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
42452 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
42453 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
42454 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
42455 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
42456 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
42457 NULL((void*)0)
42458 };
42459
42460 keyinfo = tvb_get_ntohs(tvb, offset);
42461 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
42462 /* Use link address to get correct conversation in MLD case */
42463 if (conversation == NULL((void*)0)) {
42464 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42465 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42466 /* bssid and sta might not be present if this is Bluetooth AMP (removed
42467 * in Bluetooth v5.3), because all data packets have ToDS and FromDS set.
42468 * XXX - Decryption might not work properly with AMP as a result. */
42469 if (bssid && sta) {
42470 if (keyinfo & KEY_INFO_KEY_ACK_MASK0x0080) { /* From AP */
42471 set_address(&pinfo->src, wlan_address_type, 6, bssid);
42472 set_address(&pinfo->dst, wlan_address_type, 6, sta);
42473
42474 } else {
42475 set_address(&pinfo->src, wlan_address_type, 6, sta);
42476 set_address(&pinfo->dst, wlan_address_type, 6, bssid);
42477 }
42478 }
42479 }
42480
42481 uint16_t eapol_data_offset = 76; /* 92 - 16 */
42482 bool_Bool has_nonce = determine_nonce_is_set(tvb);
42483 bool_Bool defaulted_mic_len = false0;
42484 uint16_t eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42485 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42486 eapol_data_offset += eapol_key_mic_len;
42487 DOT11DECRYPT_HS_MSG_TYPE msg_type = DOT11DECRYPT_HS_MSG_TYPE_INVALID;
42488
42489 /*
42490 * RSNA key descriptors.
42491 */
42492 eapol_data_len = tvb_get_ntohs(tvb, offset+eapol_data_offset);
42493 if (keyinfo & KEY_INFO_REQUEST_MASK0x0800) {
42494 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request)");
42495 if (keyinfo & KEY_INFO_ERROR_MASK0x0400)
42496 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request, Error)");
42497 } else if (keyinfo & KEY_INFO_KEY_TYPE_MASK0x0008) {
42498 uint16_t masked;
42499 /* Windows is setting the Secure Bit on message 2 when rekeying, so we'll ignore it */
42500 /* When an AEAD cipher is used no MIC is included, so we cannot rely on the MIC flag */
42501 masked = keyinfo &
42502 (KEY_INFO_INSTALL_MASK0x0040 | KEY_INFO_KEY_ACK_MASK0x0080);
42503
42504 switch (masked) {
42505 case KEY_INFO_KEY_ACK_MASK0x0080:
42506 {
42507 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 1);
42508
42509 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 1 of 4)");
42510 /*
42511 * If we defaulted it, then try to determine the mic len and update
42512 * structures.
42513 */
42514 if (defaulted_mic_len) {
42515 discover_key_mic_len1(tvb, pinfo, 76);
42516 /* Must reset the MIC len */
42517 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42518 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42519 eapol_data_offset = 76 + eapol_key_mic_len;
42520 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42521 }
42522 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_1;
42523 break;
42524 }
42525
42526 case (KEY_INFO_INSTALL_MASK0x0040 | KEY_INFO_KEY_ACK_MASK0x0080):
42527 {
42528 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 3);
42529
42530 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 3 of 4)");
42531 /* Get correct MIC LEN if there is no M1 and M2 */
42532 if (defaulted_mic_len) {
42533 discover_key_mic_len2(tvb, pinfo, 76);
42534 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42535 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42536 eapol_data_offset = 76 + eapol_key_mic_len;
42537 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42538 }
42539 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_3;
42540 break;
42541 }
42542
42543 default:
42544 /* We check the key length to differentiate between message 2 and 4 and just hope that
42545 there are no strange implementations with key data and non-zero key length in message 4.
42546 According to the IEEE specification, sections 11.6.6.3 and 11.6.6.5 we should
42547 use the Secure Bit and/or the Nonce, but there are implementations ignoring the spec.
42548 The Secure Bit is incorrectly set on rekeys for Windows clients for Message 2 and the Nonce is non-zero
42549 in Message 4 in Bug 11994 (Apple?) */
42550 /* In Wi-SUN protocol, message 2 does not contains any data. However, all the implementations
42551 * respect 802.11X, so Secure Bit is set only on message 2 and Nonce is set only on message 4
42552 * (see section 6.5.2.3 of Wi-SUN specification) */
42553 /* When using AES-SIV without plaintext (i.e. only for integrity), the ciphertext has length 16 */
42554 /* With MLO message 4 will have 12 bytes of data */
42555 if (((eapol_key_mic_len == 0) && (eapol_data_len > 16)) ||
42556 ((eapol_key_mic_len > 0) && (eapol_data_len == 0) && !(keyinfo & KEY_INFO_SECURE_MASK0x0200) && has_nonce) ||
42557 ((eapol_key_mic_len > 0) && (eapol_data_len != 0) && (eapol_data_len != 12))) {
42558 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 2);
42559
42560 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 2 of 4)");
42561 if (defaulted_mic_len) {
42562 discover_key_mic_len2(tvb, pinfo, 76);
42563 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len);
42564 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42565 eapol_data_offset = 76 + eapol_key_mic_len;
42566 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42567 }
42568 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_2;
42569 } else {
42570 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 4);
42571
42572 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 4 of 4)");
42573 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_4;
42574 }
42575 break;
42576 }
42577 } else {
42578 if (keyinfo & KEY_INFO_KEY_ACK_MASK0x0080) {
42579 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 1);
42580
42581 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 1 of 2)");
42582 msg_type = DOT11DECRYPT_HS_MSG_TYPE_GHS_1;
42583 } else {
42584 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 2);
42585
42586 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 2 of 2)");
42587 msg_type = DOT11DECRYPT_HS_MSG_TYPE_GHS_2;
42588 }
42589 }
42590 proto_item_set_generated(ti);
42591
42592 uint16_t keydes_version = tvb_get_ntohs(tvb, offset) & KEY_INFO_KEYDES_VERSION_MASK0x0007;
42593 save_proto_data_value(pinfo, keydes_version, KEY_VERSION_KEY);
42594 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
42595 ett_keyinfo, wlan_rsna_eapol_wpa_keydes_keyinfo,
42596 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
42597 offset += 2;
42598
42599 uint16_t key_len = tvb_get_ntohs(tvb, offset);
42600 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_len, tvb, offset,
42601 2, ENC_BIG_ENDIAN0x00000000);
42602 save_proto_data_value(pinfo, tvb_get_ntohs(tvb, offset), KEY_LEN_KEY);
42603 offset += 2;
42604 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_replay_counter, tvb,
42605 offset, 8, ENC_BIG_ENDIAN0x00000000);
42606 offset += 8;
42607 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_nonce, tvb, offset,
42608 32, ENC_NA0x00000000);
42609 save_proto_data(tvb, pinfo, offset, 32, NONCE_KEY);
42610
42611 offset += 32;
42612 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_iv, tvb,
42613 offset, 16, ENC_NA0x00000000);
42614 save_proto_data(tvb, pinfo, offset, 16, KEY_IV_KEY);
42615 offset += 16;
42616 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_rsc, tvb, offset,
42617 8, ENC_NA0x00000000);
42618 offset += 8;
42619 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_id, tvb, offset, 8,
42620 ENC_NA0x00000000);
42621 offset += 8;
42622
42623 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_mic, tvb, offset,
42624 eapol_key_mic_len, ENC_NA0x00000000);
42625 save_proto_data(tvb, pinfo, offset, eapol_key_mic_len, MIC_KEY);
42626 offset += eapol_key_mic_len;
42627
42628 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data_len, tvb,
42629 offset, 2, ENC_BIG_ENDIAN0x00000000);
42630 save_proto_data_value(pinfo, tvb_get_ntohs(tvb, offset), KEY_DATA_LEN_KEY);
42631 offset += 2;
42632
42633 if (eapol_data_len != 0) {
42634 save_proto_data(tvb, pinfo, offset, eapol_data_len, KEY_DATA_KEY);
42635 ti = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data,
42636 tvb, offset, eapol_data_len, ENC_NA0x00000000);
42637 if ((keyinfo & KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000) ||
42638 (!(keyinfo & KEY_INFO_KEY_TYPE_MASK0x0008) && key_len)) {
42639 /* RSN: EAPOL-Key Key Data is encrypted.
42640 * WPA: Group Keys use encrypted Key Data.
42641 * IEEE 802.11i-2004 8.5.2.
42642 * Having an encrypted data field without the Encrypted Key Data set
42643 * is not standard, but there are WPA implementation which assume
42644 * encryption when Key Type = 0. In Wi-SUN, the EAPOL-Key frame has
42645 * Key Type = 0 and Encrypted Key Data = 0, but the Key Data is not
42646 * encrypted. To differentiate this case from non standard WPA, we
42647 * check the Key Length, which is 0 for Wi-SUN.
42648 * Let decryption engine try to decrypt this and if successful it's
42649 * stored in EAPOL_KEY proto data.
42650 */
42651 if (!pinfo->fd->visited) {
42652 try_decrypt_keydata(pinfo);
42653 }
42654
42655 proto_keydata_t *eapol;
42656 eapol = (proto_keydata_t*)
42657 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_EAPOL_KEY);
42658
42659 if (eapol) {
42660 int keydata_len = eapol->keydata_len;
42661 tvbuff_t *next_tvb = tvb_new_child_real_data(tvb, eapol->keydata,
42662 keydata_len, keydata_len);
42663 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
42664
42665 if (keydes_version == KEYDES_VER_TYPE10x01) {
42666 add_new_data_source(pinfo, next_tvb, "Decrypted RC4 keydata");
42667 save_proto_data(next_tvb, pinfo, 0, keydata_len, GTK_KEY);
42668 save_proto_data_value(pinfo, keydata_len, GTK_LEN_KEY);
42669 } else {
42670 add_new_data_source(pinfo, next_tvb, "Decrypted AES keydata");
42671 int padding_len = keydata_padding_len(next_tvb);
42672 ieee_80211_add_tagged_parameters(next_tvb, 0, pinfo, keydes_tree,
42673 keydata_len - padding_len,
42674 -1, NULL((void*)0));
42675 if (padding_len) {
42676 proto_tree_add_item(keydes_tree, hf_wlan_rsna_eapol_wpa_keydes_padding,
42677 next_tvb, keydata_len - padding_len,
42678 padding_len, ENC_NA0x00000000);
42679 }
42680 }
42681 /* Also add the PTK used to decrypt and validate the keydata. */
42682 add_ptk_analysis(tvb, keydes_tree, &eapol->used_key);
42683 }
42684 } else {
42685 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
42686 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, keydes_tree,
42687 tvb_reported_length_remaining(tvb, offset),
42688 -1, NULL((void*)0));
42689 }
42690
42691 offset += eapol_data_len;
42692 }
42693 if (!pinfo->fd->visited && msg_type != DOT11DECRYPT_HS_MSG_TYPE_INVALID) {
42694 /* Key data at this pointer was either not encrypted or dot11decrypt
42695 * engine has tried to decrypt keydata. Try to extract the keys now that
42696 * all fields from the EAPOL frame have been parsed.
42697 */
42698 try_scan_eapol_keys(pinfo, msg_type);
42699 }
42700
42701 /*
42702 * Do we have extraneous data at the end?
42703 */
42704 if (offset < (tvb_captured_length(tvb) - 1)) {
42705 proto_item *extra;
42706 extra = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_extraneous, tvb,
42707 offset,
42708 tvb_captured_length_remaining(tvb, offset),
42709 ENC_NA0x00000000);
42710 expert_add_info_format(pinfo, extra, &ei_ieee80211_inv_val,
42711 "Extraneous and invalid data in EAPOL frame");
42712 }
42713 return tvb_captured_length(tvb);
42714}
42715
42716static void try_scan_tdls_keys(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
42717{
42718 if (!enable_decryption) {
42719 return;
42720 }
42721 int len = tvb_captured_length(tvb) - offset;
42722 const uint8_t *action = tvb_get_ptr(tvb, offset, len);
42723 if (action) {
42724 Dot11DecryptScanTdlsForKeys(&dot11decrypt_ctx, action, len);
42725 }
42726}
42727
42728/* It returns the algorithm used for decryption and trailer length. */
42729static tvbuff_t *
42730try_decrypt(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, unsigned len,
42731 uint8_t *algorithm, uint32_t *sec_trailer,
42732 PDOT11DECRYPT_KEY_ITEM used_key)
42733{
42734 const uint8_t *enc_data;
42735 tvbuff_t *decr_tvb = NULL((void*)0);
42736 uint32_t dec_caplen;
42737 unsigned char dec_data[DOT11DECRYPT_MAX_CAPLEN(12 * 1024)];
42738
42739 if (!enable_decryption)
42740 return NULL((void*)0);
42741
42742 /* get the entire packet */
42743 enc_data = tvb_get_ptr(tvb, 0, len+offset);
42744
42745 /* decrypt packet with Dot11Decrypt */
42746 int ret = Dot11DecryptDecryptPacket(&dot11decrypt_ctx, enc_data, offset, offset+len,
42747 dec_data, &dec_caplen, used_key);
42748 if (ret == DOT11DECRYPT_RET_SUCCESS0) {
42749 uint8_t *tmp;
42750 *algorithm=used_key->KeyType;
42751 switch (*algorithm) {
42752 case DOT11DECRYPT_KEY_TYPE_WEP0:
42753 *sec_trailer=DOT11DECRYPT_WEP_TRAILER4;
42754 break;
42755 case DOT11DECRYPT_KEY_TYPE_CCMP101:
42756 *sec_trailer=DOT11DECRYPT_CCMP_TRAILER8;
42757 break;
42758 case DOT11DECRYPT_KEY_TYPE_CCMP_256102:
42759 *sec_trailer = DOT11DECRYPT_CCMP_256_TRAILER16;
42760 break;
42761 case DOT11DECRYPT_KEY_TYPE_GCMP103:
42762 case DOT11DECRYPT_KEY_TYPE_GCMP_256104:
42763 *sec_trailer = DOT11DECRYPT_GCMP_TRAILER16;
42764 break;
42765 case DOT11DECRYPT_KEY_TYPE_TKIP100:
42766 *sec_trailer=DOT11DECRYPT_TKIP_TRAILER8 + 4;
42767 break;
42768 default:
42769 return NULL((void*)0);
42770 }
42771 if (dec_caplen > offset) {
42772 /* allocate buffer for decrypted payload */
42773 tmp = (uint8_t *)wmem_memdup(pinfo->pool, dec_data+offset, dec_caplen-offset);
42774 len = dec_caplen-offset;
42775
42776 /* decrypt successful, let's set up a new data tvb. */
42777 decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
42778 }
42779 }
42780 return decr_tvb;
42781}
42782
42783/* Collect our WEP and WPA keys */
42784static void
42785set_dot11decrypt_keys(void)
42786{
42787 unsigned i;
42788 DOT11DECRYPT_KEYS_COLLECTION *keys = g_new(DOT11DECRYPT_KEYS_COLLECTION, 1)((DOT11DECRYPT_KEYS_COLLECTION *) g_malloc_n ((1), sizeof (DOT11DECRYPT_KEYS_COLLECTION
)))
;
42789
42790 keys->nKeys = 0;
42791
42792 for (i = 0; (uat_wep_key_records != NULL((void*)0)) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS64); i++)
42793 {
42794 decryption_key_t *dk;
42795 dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key, NULL((void*)0));
42796
42797 if (dk != NULL((void*)0))
42798 {
42799 /* parse_key_string() does validation, so if it doesn't
42800 * return NULL, we can just copy the results.
42801 */
42802 DOT11DECRYPT_KEY_ITEM key = { 0 };
42803 if (dk->type == DOT11DECRYPT_KEY_TYPE_WEP0)
42804 {
42805 key.KeyType = DOT11DECRYPT_KEY_TYPE_WEP0;
42806
42807 /*
42808 * WEP key is correct (well, at least no longer than
42809 * DOT11DECRYPT_WEP_KEY_MAXLEN)
42810 */
42811 memcpy(key.KeyData.Wep.WepKey, dk->key->data, dk->key->len);
42812 key.KeyData.Wep.WepKeyLen = dk->key->len;
42813 keys->Keys[keys->nKeys] = key;
42814 keys->nKeys += 1;
42815 }
42816 else if (dk->type == DOT11DECRYPT_KEY_TYPE_WPA_PWD3)
42817 {
42818 key.KeyType = DOT11DECRYPT_KEY_TYPE_WPA_PWD3;
42819
42820 /*
42821 * dk->key has a valid length, because otherwise
42822 * parse_key_string() would have returned NULL.
42823 */
42824 memcpy(key.UserPwd.Passphrase, dk->key->data, dk->key->len);
42825 key.UserPwd.PassphraseLen = dk->key->len;
42826
42827 key.UserPwd.SsidLen = 0;
42828 if ((dk->ssid != NULL((void*)0)) && (dk->ssid->len <= DOT11DECRYPT_WPA_SSID_MAX_LEN32))
42829 {
42830 memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
42831 key.UserPwd.SsidLen = dk->ssid->len;
42832 }
42833
42834 keys->Keys[keys->nKeys] = key;
42835 keys->nKeys += 1;
42836 }
42837 else if (dk->type == DOT11DECRYPT_KEY_TYPE_WPA_PSK4)
42838 {
42839 key.KeyType = DOT11DECRYPT_KEY_TYPE_WPA_PSK4;
42840
42841 memcpy(key.KeyData.Wpa.Psk, dk->key->data, dk->key->len);
42842 key.KeyData.Wpa.PskLen = dk->key->len;
42843 keys->Keys[keys->nKeys] = key;
42844 keys->nKeys += 1;
42845 }
42846 else if (dk->type == DOT11DECRYPT_KEY_TYPE_TK6)
42847 {
42848 key.KeyType = DOT11DECRYPT_KEY_TYPE_TK6;
42849
42850 memcpy(key.Tk.Tk, dk->key->data, dk->key->len);
42851 key.Tk.Len = dk->key->len;
42852 keys->Keys[keys->nKeys] = key;
42853 keys->nKeys += 1;
42854 }
42855 else if (dk->type == DOT11DECRYPT_KEY_TYPE_MSK7)
42856 {
42857 key.KeyType = DOT11DECRYPT_KEY_TYPE_MSK7;
42858
42859 memcpy(key.Msk.Msk, dk->key->data, dk->key->len);
42860 key.Msk.Len = dk->key->len;
42861 keys->Keys[keys->nKeys] = key;
42862 keys->nKeys += 1;
42863 }
42864 free_key_string(dk);
42865 }
42866 }
42867
42868 /* Now set the keys */
42869 Dot11DecryptSetKeys(&dot11decrypt_ctx, keys->Keys, keys->nKeys);
42870 g_free(keys);
42871}
42872
42873static void
42874init_wepkeys(void)
42875{
42876
42877 /*
42878 * XXX - Dot11Decrypt - That God sends it to us beautiful (che dio ce la mandi bona)
42879 * The next lines will add a key to the Dot11Decrypt context. The keystring will be added
42880 * to the old WEP array too, but we don't care, because the packets will come here
42881 * already decrypted... One of these days we will fix this too
42882 */
42883 set_dot11decrypt_keys();
42884}
42885
42886/*
42887 * This code had been taken from AirSnort crack.c function classify()
42888 * Permission granted by snax <at> shmoo dot com
42889 * weak_iv - determine which key byte an iv is useful in resolving
42890 * parm - p, pointer to the first byte of an IV
42891 * return - n - this IV is weak for byte n of a WEP key
42892 * -1 - this IV is not weak for any key bytes
42893 *
42894 * This function tests for IVs that are known to satisfy the criteria
42895 * for a weak IV as specified in FMS section 7.1
42896 *
42897 */
42898static int
42899weak_iv(unsigned char *iv)
42900{
42901 unsigned char sum, k;
42902
42903 if ((iv[1] == 255) && (iv[0] > 2) && (iv[0] < 16)) {
42904 return iv[0] -3;
42905 }
42906
42907 sum = iv[0] + iv[1];
42908 if (sum == 1) {
42909 if (iv[2] <= 0x0a) {
42910 return iv[2] +2;
42911 }
42912 else if (iv[2] == 0xff) {
42913 return 0;
42914 }
42915 }
42916 k = 0xfe - iv[2];
42917 if ((sum == k) && ((iv[2] >= 0xf2) && (iv[2] <= 0xfe) && (iv[2] != 0xfd))) {
42918 return k;
42919 }
42920 return -1;
42921}
42922
42923static void
42924wlan_retransmit_init(void)
42925{
42926 if (fc_analyse_retransmit_table) {
42927 g_hash_table_destroy(fc_analyse_retransmit_table);
42928 fc_analyse_retransmit_table = NULL((void*)0);
42929 }
42930
42931 if (fc_first_frame_table) {
42932 g_hash_table_destroy(fc_first_frame_table);
42933 fc_first_frame_table = NULL((void*)0);
42934 }
42935
42936 if (wlan_subdissector)
42937 return;
42938
42939 fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
42940 fc_first_frame_table = g_hash_table_new(frame_hash, frame_equal);
42941
42942}
42943
42944static int
42945dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42946{
42947 int offset = 0;
42948 uint8_t type;
42949 int tagged_parameter_tree_len;
42950 proto_tree *tagged_tree;
42951
42952 type = tvb_get_uint8(tvb, offset);
42953 proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
42954 1, ENC_LITTLE_ENDIAN0x80000000);
42955 offset += 1;
42956 switch (type) {
42957 case 1:
42958 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
42959 /* TODO: IEEE 802.11r */
42960 break;
42961 case 2:
42962 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
42963 col_clear(pinfo->cinfo, COL_INFO);
42964 offset += add_ff_action(tree, tvb, pinfo, offset, NULL((void*)0));
42965 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
42966 if (tagged_parameter_tree_len > 0) {
42967 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
42968 tagged_parameter_tree_len);
42969 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
42970 tagged_parameter_tree_len, -1, NULL((void*)0));
42971 }
42972 break;
42973 }
42974 return tvb_captured_length(tvb);
42975}
42976
42977void
42978proto_register_ieee80211(void)
42979{
42980
42981 static hf_register_info hf[] = {
42982 {&hf_ieee80211_fc_field,
42983 {"Frame Control Field", "wlan.fc",
42984 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
42985 "MAC Frame control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
42986
42987 {&hf_ieee80211_fc_proto_version,
42988 {"Version", "wlan.fc.version",
42989 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
42990 "MAC Protocol version", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 0 */
42991
42992 {&hf_ieee80211_fc_frame_type,
42993 {"Type", "wlan.fc.type",
42994 FT_UINT8, BASE_DEC, VALS(frame_type)((0 ? (const struct _value_string*)0 : ((frame_type)))), 0x0C,
42995 "Frame type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
42996
42997 {&hf_ieee80211_fc_frame_subtype,
42998 {"Subtype", "wlan.fc.subtype",
42999 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
43000 "Frame subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 2 */
43001
43002 {&hf_ieee80211_fc_frame_type_subtype,
43003 {"Type/Subtype", "wlan.fc.type_subtype",
43004 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &frame_type_subtype_vals_ext, 0x0,
43005 "Type and subtype combined (as bytes (for Control Frame Extension subtypes) or nibbles)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43006
43007 {&hf_ieee80211_fc_frame_extension,
43008 {"Control Frame Extension", "wlan.fc.extension",
43009 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
43010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43011
43012 {&hf_ieee80211_fc_flags,
43013 {"Flags", "wlan.flags",
43014 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
43015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43016
43017 {&hf_ieee80211_fc_flags_str,
43018 {"WLAN Flags", "wlan.flags.str",
43019 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43021
43022 {&hf_ieee80211_fc_data_ds,
43023 {"DS status", "wlan.fc.ds",
43024 FT_UINT8, BASE_HEX, VALS(tofrom_ds)((0 ? (const struct _value_string*)0 : ((tofrom_ds)))), (FLAG_FROM_DS0x02|FLAG_TO_DS0x01),
43025 "Data-frame DS-traversal status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 3 */
43026
43027 {&hf_ieee80211_fc_to_ds,
43028 {"To DS", "wlan.fc.tods",
43029 FT_BOOLEAN, 8, TFS(&tods_flag)((0 ? (const struct true_false_string*)0 : ((&tods_flag))
))
, FLAG_TO_DS0x01,
43030 "To DS flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 4 */
43031
43032 {&hf_ieee80211_fc_from_ds,
43033 {"From DS", "wlan.fc.fromds",
43034 FT_BOOLEAN, 8, TFS(&fromds_flag)((0 ? (const struct true_false_string*)0 : ((&fromds_flag
))))
, FLAG_FROM_DS0x02,
43035 "From DS flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 5 */
43036
43037 {&hf_ieee80211_fc_more_frag,
43038 {"More Fragments", "wlan.fc.frag",
43039 FT_BOOLEAN, 8, TFS(&more_fragments)((0 ? (const struct true_false_string*)0 : ((&more_fragments
))))
, FLAG_MORE_FRAGMENTS0x04,
43040 "More Fragments flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 6 */
43041
43042 {&hf_ieee80211_fc_retry,
43043 {"Retry", "wlan.fc.retry",
43044 FT_BOOLEAN, 8, TFS(&retry_flags)((0 ? (const struct true_false_string*)0 : ((&retry_flags
))))
, FLAG_RETRY0x08,
43045 "Retransmission flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43046
43047 {&hf_ieee80211_fc_analysis_retransmission,
43048 {"Retransmission", "wlan.analysis.retransmission",
43049 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
43050 "This frame is a suspected wireless retransmission", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43051
43052 {&hf_ieee80211_fc_analysis_retransmission_frame,
43053 {"Retransmission of frame", "wlan.analysis.retransmission_frame",
43054 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43055 "This is a retransmission of frame #", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43056
43057 {&hf_ieee80211_fc_pwr_mgt,
43058 {"PWR MGT", "wlan.fc.pwrmgt",
43059 FT_BOOLEAN, 8, TFS(&pm_flags)((0 ? (const struct true_false_string*)0 : ((&pm_flags)))
)
, FLAG_POWER_MGT0x10,
43060 "Power management status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43061
43062 {&hf_ieee80211_fc_more_data,
43063 {"More Data", "wlan.fc.moredata",
43064 FT_BOOLEAN, 8, TFS(&md_flags)((0 ? (const struct true_false_string*)0 : ((&md_flags)))
)
, FLAG_MORE_DATA0x20,
43065 "More data flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43066
43067 {&hf_ieee80211_fc_protected,
43068 {"Protected flag", "wlan.fc.protected",
43069 FT_BOOLEAN, 8, TFS(&protected_flags)((0 ? (const struct true_false_string*)0 : ((&protected_flags
))))
, FLAG_PROTECTED0x40,
43070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43071
43072 {&hf_ieee80211_fc_order,
43073 {"+HTC/Order flag", "wlan.fc.order",
43074 FT_BOOLEAN, 8, TFS(&order_flags)((0 ? (const struct true_false_string*)0 : ((&order_flags
))))
, FLAG_ORDER0x80,
43075 "HT Control present/strictly ordered flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43076
43077 {&hf_ieee80211_fc_s1g_bw_indication,
43078 {"Bandwidth Indication", "wlan.fc.control.bandwidth_indication",
43079 FT_UINT8, BASE_DEC, VALS(pv1_bandwidth_indic_vals)((0 ? (const struct _value_string*)0 : ((pv1_bandwidth_indic_vals
))))
,
43080 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43081
43082 {&hf_ieee80211_fc_s1g_dynamic_indication,
43083 {"Dynamic Indication", "wlan.fc.control.dynamic_indication",
43084 FT_BOOLEAN, 8, TFS(&s1g_dynamic_indication_flags)((0 ? (const struct true_false_string*)0 : ((&s1g_dynamic_indication_flags
))))
, FLAG_RETRY0x08,
43085 "Static/dynamic bandwidth negotiation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43086
43087 {&hf_ieee80211_fc_pv1_proto_version,
43088 {"Version", "wlan.fc.version",
43089 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43090
43091 {&hf_ieee80211_fc_pv1_type,
43092 {"Type", "wlan.fc.type",
43093 FT_UINT16, BASE_HEX, VALS(pv1_frame_type_vals)((0 ? (const struct _value_string*)0 : ((pv1_frame_type_vals)
)))
, 0x001C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43094
43095 {&hf_ieee80211_fc_pv1_ptid,
43096 {"PTID", "wlan.fc.ptid",
43097 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43098
43099 {&hf_ieee80211_fc_pv1_mgmt_subtype,
43100 {"Subtype", "wlan.fc.subtype",
43101 FT_UINT16, BASE_HEX, VALS(pv1_management_frame_type_vals)((0 ? (const struct _value_string*)0 : ((pv1_management_frame_type_vals
))))
,
43102 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43103
43104 {&hf_ieee80211_fc_pv1_cntl_subtype,
43105 {"Subtype", "wlan.fc.subtype",
43106 FT_UINT16, BASE_HEX, VALS(pv1_control_frame_type_vals)((0 ? (const struct _value_string*)0 : ((pv1_control_frame_type_vals
))))
,
43107 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43108
43109 {&hf_ieee80211_fc_pv1_unk_field,
43110 {"Unknown Subtype", "wlan.fc.unknown_subtype",
43111 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43112
43113 {&hf_ieee80211_fc_pv1_bw_indication,
43114 {"Bandwidth Indication", "wlan.fc.control.bandwidth_indication",
43115 FT_UINT16, BASE_DEC, VALS(pv1_bandwidth_indic_vals)((0 ? (const struct _value_string*)0 : ((pv1_bandwidth_indic_vals
))))
,
43116 0x0700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43117
43118 {&hf_ieee80211_fc_pv1_dynamic_indication,
43119 {"Dynamic Indication", "wlan.fc.control.dynamic_indication",
43120 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43121
43122 {&hf_ieee80211_fc_pv1_cntl_power_mgmt,
43123 {"Power Management", "wlan.fc.control.power_management",
43124 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43125
43126 {&hf_ieee80211_fc_pv1_cntl_more_data,
43127 {"More Data", "wlan.fc.control.more_data",
43128 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43129
43130 {&hf_ieee80211_fc_pv1_cntl_flow_control,
43131 {"Flow Control", "wlan.fc.control.flow_control",
43132 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43133
43134 {&hf_ieee80211_fc_pv1_cntl_next_twt_info,
43135 {"Next TWT Info Present", "wlan.fc.control.next_twt_info_present",
43136 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43137
43138 {&hf_ieee80211_fc_pv1_mgmt_pr_next_tbt,
43139 {"Next TBTT Present", "wlan.fc.mgmt.next_tbtt_present",
43140 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43141 {&hf_ieee80211_fc_pv1_mgmt_pr_full_ssid,
43142 {"Full SSID Present", "wlan.fc.mgmt.full_ssid_present",
43143 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43144
43145 {&hf_ieee80211_fc_pv1_mgmt_pr_ano,
43146 {"AMO Present", "wlan.fc.mgmt.amo_present",
43147 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43148
43149 {&hf_ieee80211_fc_pv1_mgmt_pr_bss_bw,
43150 {"BSS BW", "wlan.fc.mgmt.bss_bw",
43151 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43152
43153 {&hf_ieee80211_fc_pv1_mgmt_pr_security,
43154 {"Security", "wlan.fc.mgmt.security",
43155 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43156
43157 {&hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc,
43158 {"1MHz Primary Channel Location",
43159 "wlan.fc.mgmt.1mhz_primary_channel_location",
43160 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43161
43162 {&hf_ieee80211_fc_pv1_mgmt_pr_slot_assign,
43163 {"Slot Assignment Mode", "wlan.fc.mgmt.slot_assignment_mode",
43164 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43165
43166 {&hf_ieee80211_fc_pv1_mgmt_pr_more_frag,
43167 {"More Fragments", "wlan.fc.mgmt.more_fragments",
43168 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43169
43170 {&hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt,
43171 {"Power Management", "wlan.fc.mgmt.power_management",
43172 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43173
43174 {&hf_ieee80211_fc_pv1_mgmt_pr_grp_indic,
43175 {"Group Indication", "wlan.fc.mgmt.group_indication",
43176 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43177
43178 {&hf_ieee80211_fc_pv1_mgmt_pr_protected,
43179 {"Protected Frame", "wlan.fc.mgmt.protected_frame",
43180 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43181
43182 {&hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc,
43183 {"End of Service Period", "wlan.fc.mgmt.end_of_service_period",
43184 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43185
43186 {&hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm,
43187 {"Relayed Frame", "wlan.fc.mgmt.relayed_frame",
43188 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43189
43190 {&hf_ieee80211_fc_pv1_mgmt_pr_ack_policy,
43191 {"Ack Policy", "wlan.fc.mgmt.ack_policy",
43192 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43193
43194 {&hf_ieee80211_fc_pv1_from_ds,
43195 {"From DS", "wlan.fc.from_ds",
43196 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43197
43198 {&hf_ieee80211_fc_pv1_more_fragments,
43199 {"More Fragments", "wlan.fc.more_fragments",
43200 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43201
43202 {&hf_ieee80211_fc_pv1_power_mgmt,
43203 {"Power Management", "wlan.fc.power_management",
43204 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43205
43206 {&hf_ieee80211_fc_pv1_more_data,
43207 {"More Data", "wlan.fc.more_data",
43208 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43209
43210 {&hf_ieee80211_fc_pv1_protected_frame,
43211 {"Protected Frame", "wlan.fc.protected_frame",
43212 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43213
43214 {&hf_ieee80211_fc_pv1_end_service_per,
43215 {"End of Service Period", "wlan.fc.end_of_service_period",
43216 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43217
43218 {&hf_ieee80211_fc_pv1_relayed_frame,
43219 {"Relayed Frame", "wlan.fc.relayed_frame",
43220 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43221
43222 {&hf_ieee80211_fc_pv1_ack_policy,
43223 {"Ack Policy", "wlan.fc.ack_policy",
43224 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43225
43226 {&hf_ieee80211_pv1_sid,
43227 {"SID", "wlan.fc.sid",
43228 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43229
43230 {&hf_ieee80211_pv1_sid_association_id,
43231 {"Association ID", "wlan.fc.sid.association_id",
43232 FT_UINT16, BASE_HEX, NULL((void*)0), SID_AID_MASK0x1FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43233
43234 {&hf_ieee80211_pv1_sid_a3_present,
43235 {"A3 Present", "wlan.fc.sid.a3_present",
43236 FT_BOOLEAN, 16, NULL((void*)0), SID_A3_PRESENT0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43237
43238 {&hf_ieee80211_pv1_sid_a4_present,
43239 {"A4 Present", "wlan.fc.sid.a4_present",
43240 FT_BOOLEAN, 16, NULL((void*)0), SID_A4_PRESENT0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43241
43242 {&hf_ieee80211_pv1_sid_a_msdu,
43243 {"A MSDU", "wlan.fc.sid.a_msdu",
43244 FT_BOOLEAN, 16, NULL((void*)0), SID_A_MSDU0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43245
43246 {&hf_ieee80211_pv1_cnt_stack_tetra_timest,
43247 {"Tetrapartial Timestamp", "wlan.pv1.control.stack.tetrapartial_timestamp",
43248 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43249
43250 {&hf_ieee80211_pv1_cnt_bat_beacon_seq,
43251 {"Beacon Sequence", "wlan.pv1.control.bat.beacon_sequence",
43252 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43253
43254 {&hf_ieee80211_pv1_cnt_bat_penta_timest,
43255 {"Pentapartial Timestamp", "wlan.pv1.control.bat.pentapartial_timestamp",
43256 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43257
43258 {&hf_ieee80211_pv1_cnt_bat_next_twt_info,
43259 {"Next TWT Info", "wlan.pv1.control.bat.next_twt_info",
43260 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43261
43262 {&hf_ieee80211_pv1_cnt_bat_stating_seq_cntl,
43263 {"Starting Sequence Control", "wlan.pv1.control.bat.starting_sequence_control",
43264 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43265
43266 {&hf_ieee80211_pv1_cnt_bat_bitmap,
43267 {"BAT Bitmap", "wlan.pv1.control.bat.bat_bitmap",
43268 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43269
43270 {&hf_ieee80211_pv1_mgmt_reserved,
43271 {"PV1 Reserved Management frame", "wlan.pv1.management.reserved",
43272 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43273
43274 {&hf_ieee80211_pv1_cntl_reserved,
43275 {"PV1 Reserved Control frame", "wlan.pv1.control.reserved",
43276 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43277
43278 {&hf_ieee80211_fc_s1g_next_tbtt_present,
43279 {"Next TBTT Present", "wlan.fc.s1g.next_tbtt_present",
43280 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43281
43282 {&hf_ieee80211_fc_s1g_compressed_ssid_present,
43283 {"Compressed SSID Present", "wlan.fc.s1g.compressed_ssid_present",
43284 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43285
43286 {&hf_ieee80211_fc_s1g_ano_present,
43287 {"ANO Present", "wlan.fc.s1g.ano_present",
43288 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43289
43290 {&hf_ieee80211_fc_s1g_bss_bw,
43291 {"BSS BW", "wlan.fc.s1g.bss_bw",
43292 FT_UINT8, BASE_DEC, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43293
43294 {&hf_ieee80211_fc_s1g_security,
43295 {"Security", "wlan.fc.s1g.security",
43296 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43297
43298 {&hf_ieee80211_fc_s1g_ap_pm,
43299 {"AP PM", "wlan.fc.s1g.ap_pm",
43300 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43301
43302 {&hf_ieee80211_assoc_id,
43303 {"Association ID", "wlan.aid",
43304 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3FFF,
43305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43306
43307 {&hf_ieee80211_did_duration,
43308 {"Duration", "wlan.duration",
43309 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7FFF,
43310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43311
43312 {&hf_ieee80211_addr_da,
43313 {"Destination address", "wlan.da",
43314 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43315 "Destination Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43316
43317 {&hf_ieee80211_addr_da_resolved,
43318 {"Destination address (resolved)", "wlan.da_resolved", FT_STRING,
43319 BASE_NONE, NULL((void*)0), 0x0,
43320 "Destination Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43321
43322 {&hf_ieee80211_addr_da_oui,
43323 {"Destination OUI", "wlan.da.oui",
43324 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43325 "Destination Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43326
43327 {&hf_ieee80211_addr_da_oui_resolved,
43328 {"Destination OUI (resolved)", "wlan.da.oui_resolved",
43329 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43330 "Destination Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43331
43332 { &hf_ieee80211_addr_da_lg,
43333 { "LG bit", "wlan.da.lg",
43334 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43335 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43336
43337 { &hf_ieee80211_addr_da_ig,
43338 { "IG bit", "wlan.da.ig",
43339 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43340 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43341
43342 {&hf_ieee80211_addr_sa,
43343 {"Source address", "wlan.sa",
43344 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43345 "Source Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43346
43347 {&hf_ieee80211_addr_sa_resolved,
43348 {"Source address (resolved)", "wlan.sa_resolved", FT_STRING,
43349 BASE_NONE, NULL((void*)0), 0x0,
43350 "Source Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43351
43352 {&hf_ieee80211_addr_sa_oui,
43353 {"Source OUI", "wlan.sa.oui",
43354 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43355 "Source Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43356
43357 {&hf_ieee80211_addr_sa_oui_resolved,
43358 {"Source OUI (resolved)", "wlan.sa.oui_resolved",
43359 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43360 "Source Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43361
43362 { &hf_ieee80211_addr_sa_lg,
43363 { "LG bit", "wlan.sa.lg",
43364 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43365 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43366
43367 { &hf_ieee80211_addr_sa_ig,
43368 { "IG bit", "wlan.sa.ig",
43369 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43370 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43371
43372 {&hf_ieee80211_addr,
43373 {"Hardware address", "wlan.addr",
43374 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43375 "SA, DA, BSSID, RA or TA Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43376
43377 {&hf_ieee80211_addr_resolved,
43378 { "Hardware address (resolved)", "wlan.addr_resolved", FT_STRING,
43379 BASE_NONE, NULL((void*)0), 0x0,
43380 "SA, DA, BSSID, RA or TA Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43381
43382 {&hf_ieee80211_addr_oui,
43383 {"Hardware OUI", "wlan.oui",
43384 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43385 "Hardware Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43386
43387 {&hf_ieee80211_addr_oui_resolved,
43388 {"Hardware OUI (resolved)", "wlan.oui_resolved",
43389 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43390 "Hardware Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43391
43392 { &hf_ieee80211_addr_lg,
43393 { "LG bit", "wlan.addr.lg",
43394 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43395 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43396
43397 { &hf_ieee80211_addr_ig,
43398 { "IG bit", "wlan.addr.ig",
43399 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43400 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43401
43402 {&hf_ieee80211_addr_ra,
43403 {"Receiver address", "wlan.ra",
43404 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43405 "Receiving Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43406
43407 {&hf_ieee80211_addr_ra_resolved,
43408 {"Receiver address (resolved)", "wlan.ra_resolved", FT_STRING, BASE_NONE,
43409 NULL((void*)0), 0x0, "Receiving Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43410
43411 {&hf_ieee80211_addr_ra_oui,
43412 {"Receiver OUI", "wlan.ra.oui",
43413 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43414 "Receiver Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43415
43416 {&hf_ieee80211_addr_ra_oui_resolved,
43417 {"Receiver OUI (resolved)", "wlan.ra.oui_resolved",
43418 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43419 "Receiver Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43420
43421 { &hf_ieee80211_addr_ra_lg,
43422 { "LG bit", "wlan.ra.lg",
43423 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43424 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43425
43426 { &hf_ieee80211_addr_ra_ig,
43427 { "IG bit", "wlan.ra.ig",
43428 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43429 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43430
43431 {&hf_ieee80211_addr_ta,
43432 {"Transmitter address", "wlan.ta",
43433 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43434 "Transmitting Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43435
43436 {&hf_ieee80211_addr_ta_resolved,
43437 {"Transmitter address (resolved)", "wlan.ta_resolved", FT_STRING,
43438 BASE_NONE, NULL((void*)0), 0x0,
43439 "Transmitting Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43440
43441 {&hf_ieee80211_addr_ta_oui,
43442 {"Transmitter OUI", "wlan.ta.oui",
43443 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43444 "Transmitter Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43445
43446 {&hf_ieee80211_addr_ta_oui_resolved,
43447 {"Transmitter OUI (resolved)", "wlan.ta.oui_resolved",
43448 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43449 "Transmitter Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43450
43451 { &hf_ieee80211_addr_ta_lg,
43452 { "LG bit", "wlan.ta.lg",
43453 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43454 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43455
43456 { &hf_ieee80211_addr_ta_ig,
43457 { "IG bit", "wlan.ta.ig",
43458 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43459 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43460
43461 {&hf_ieee80211_addr_bssid,
43462 {"BSS Id", "wlan.bssid",
43463 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43464 "Basic Service Set ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43465
43466 {&hf_ieee80211_addr_bssid_resolved,
43467 {"BSS Id (resolved)", "wlan.bssid_resolved", FT_STRING, BASE_NONE, NULL((void*)0),
43468 0x0, "Basic Service Set ID (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43469
43470 {&hf_ieee80211_addr_bssid_oui,
43471 {"BSS Id OUI", "wlan.bssid.oui",
43472 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43473 "BSS Id Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43474
43475 {&hf_ieee80211_addr_bssid_oui_resolved,
43476 {"BSS Id OUI (resolved)", "wlan.bssid.oui_resolved",
43477 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43478 "BSS Id Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43479
43480 { &hf_ieee80211_addr_bssid_lg,
43481 { "LG bit", "wlan.bssid.lg",
43482 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43483 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43484
43485 { &hf_ieee80211_addr_bssid_ig,
43486 { "IG bit", "wlan.bssid.ig",
43487 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43488 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43489
43490 {&hf_ieee80211_addr_staa,
43491 {"STA address", "wlan.staa",
43492 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43493 "Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43494
43495 {&hf_ieee80211_addr_staa_resolved,
43496 {"STA address (resolved)", "wlan.staa_resolved", FT_STRING, BASE_NONE, NULL((void*)0),
43497 0x0, "Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43498
43499 {&hf_ieee80211_addr_staa_oui,
43500 {"STA OUI", "wlan.staa.oui",
43501 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43502 "STA Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43503
43504 {&hf_ieee80211_addr_staa_oui_resolved,
43505 {"STA OUI (resolved)", "wlan.staa.oui_resolved",
43506 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43507 "STA Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43508
43509 { &hf_ieee80211_addr_staa_lg,
43510 { "LG bit", "wlan.staa.lg",
43511 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43512 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43513
43514 { &hf_ieee80211_addr_staa_ig,
43515 { "IG bit", "wlan.staa.ig",
43516 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43517 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43518
43519 {&hf_ieee80211_frag_number,
43520 {"Fragment number", "wlan.frag",
43521 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F,
43522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43523
43524 {&hf_ieee80211_seq_number,
43525 {"Sequence number", "wlan.seq",
43526 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFF0,
43527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43528
43529 {&hf_ieee80211_mesh_control_field,
43530 {"Mesh Control Field", "wlan.mesh.control_field",
43531 FT_NONE, BASE_NONE, NULL((void*)0), 0,
43532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43533
43534 {&hf_ieee80211_qos,
43535 {"Qos Control", "wlan.qos",
43536 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
43537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43538
43539 {&hf_ieee80211_qos_tid,
43540 {"TID", "wlan.qos.tid",
43541 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F,
43542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43543
43544 {&hf_ieee80211_qos_priority,
43545 {"Priority", "wlan.qos.priority",
43546 FT_UINT16, BASE_DEC, VALS(ieee80211_qos_tags_acs)((0 ? (const struct _value_string*)0 : ((ieee80211_qos_tags_acs
))))
, 0x0007,
43547 "802.1D Tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43548
43549 {&hf_ieee80211_qos_eosp,
43550 {"EOSP", "wlan.qos.eosp",
43551 FT_BOOLEAN, 16, TFS(&eosp_flag)((0 ? (const struct true_false_string*)0 : ((&eosp_flag))
))
, QOS_FLAG_EOSP0x0010,
43552 "EOSP Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43553
43554 {&hf_ieee80211_qos_bit4,
43555 {"QoS bit 4", "wlan.qos.bit4",
43556 FT_BOOLEAN, 16, TFS(&bit4_flag)((0 ? (const struct true_false_string*)0 : ((&bit4_flag))
))
, QOS_FLAG_EOSP0x0010,
43557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43558
43559 {&hf_ieee80211_qos_ack_policy,
43560 {"Ack Policy", "wlan.qos.ack",
43561 FT_UINT16, BASE_HEX, VALS(ack_policy)((0 ? (const struct _value_string*)0 : ((ack_policy)))), 0x0060,
43562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43563
43564 {&hf_ieee80211_qos_amsdu_present,
43565 {"Payload Type", "wlan.qos.amsdupresent",
43566 FT_BOOLEAN, 16, TFS(&ieee80211_qos_amsdu_present_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_qos_amsdu_present_flag
))))
, 0x0080,
43567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43568
43569 {&hf_ieee80211_qos_txop_limit,
43570 {"TXOP Limit", "wlan.qos.txop_limit",
43571 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43573
43574 {&hf_ieee80211_qos_ps_buf_state,
43575 {"QAP PS Buffer State", "wlan.qos.ps_buf_state",
43576 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00,
43577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43578
43579 {&hf_ieee80211_qos_buf_state_indicated,
43580 {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
43581 FT_BOOLEAN, 16, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x0200,
43582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43583
43584 {&hf_ieee80211_qos_highest_pri_buf_ac,
43585 {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
43586 FT_UINT16, BASE_DEC, VALS(wme_acs)((0 ? (const struct _value_string*)0 : ((wme_acs)))), 0x0C00,
43587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43588
43589 {&hf_ieee80211_qos_qap_buf_load,
43590 {"QAP Buffered Load", "wlan.qos.qap_buf_load",
43591 FT_UINT16, BASE_DEC, NULL((void*)0), 0xF000,
43592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43593
43594 {&hf_ieee80211_qos_txop_dur_req,
43595 {"TXOP Duration Requested", "wlan.qos.txop_dur_req",
43596 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43598
43599 {&hf_ieee80211_qos_queue_size,
43600 {"Queue Size", "wlan.qos.queue_size",
43601 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43603
43604 {&hf_ieee80211_qos_mesh_ctl_present,
43605 {"Mesh Control Present", "wlan.qos.mesh_ctl_present",
43606 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100,
43607 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43608
43609 {&hf_ieee80211_qos_mesh_ps_rsvd,
43610 {"Mesh Power Save Level (reserved)", "wlan.qos.mesh_ps.reserved",
43611 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0200,
43612 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43613
43614 {&hf_ieee80211_qos_mesh_ps_unicast,
43615 {"Mesh Power Save Level (for the receiving peer)", "wlan.qos.mesh_ps.unicast",
43616 FT_BOOLEAN, 16, TFS(&ieee80211_qos_mesh_ps)((0 ? (const struct true_false_string*)0 : ((&ieee80211_qos_mesh_ps
))))
, 0x0200,
43617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43618
43619 {&hf_ieee80211_qos_mesh_ps_multicast,
43620 {"Mesh Power Save Level (for all receiving peers)", "wlan.qos.mesh_ps.multicast",
43621 FT_BOOLEAN, 16, TFS(&mesh_config_cap_power_save_level_flags)((0 ? (const struct true_false_string*)0 : ((&mesh_config_cap_power_save_level_flags
))))
, 0x0200,
43622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43623
43624 {&hf_ieee80211_qos_mesh_rspi,
43625 {"Receiver Service Period Initiated (RSPI)", "wlan.qos.mesh_rspi",
43626 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0400,
43627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43628
43629 {&hf_ieee80211_fcs,
43630 {"Frame check sequence", "wlan.fcs",
43631 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43632 "Frame Check Sequence (FCS)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43633
43634 {&hf_ieee80211_fcs_status,
43635 {"FCS Status", "wlan.fcs.status",
43636 FT_UINT8, BASE_NONE, VALS(proto_checksum_vals)((0 ? (const struct _value_string*)0 : ((proto_checksum_vals)
)))
, 0x0,
43637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43638
43639 {&hf_ieee80211_fragment_overlap,
43640 {"Fragment overlap", "wlan.fragment.overlap",
43641 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43642 "Fragment overlaps with other fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43643
43644 {&hf_ieee80211_fragment_overlap_conflict,
43645 {"Conflicting data in fragment overlap", "wlan.fragment.overlap.conflict",
43646 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43647 "Overlapping fragments contained conflicting data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43648
43649 {&hf_ieee80211_fragment_multiple_tails,
43650 {"Multiple tail fragments found", "wlan.fragment.multipletails",
43651 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43652 "Several tails were found when defragmenting the packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43653
43654 {&hf_ieee80211_fragment_too_long_fragment,
43655 {"Fragment too long", "wlan.fragment.toolongfragment",
43656 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43657 "Fragment contained data past end of packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43658
43659 {&hf_ieee80211_fragment_error,
43660 {"Defragmentation error", "wlan.fragment.error",
43661 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43662 "Defragmentation error due to illegal fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43663
43664 {&hf_ieee80211_fragment_count,
43665 {"Fragment count", "wlan.fragment.count",
43666 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
43667 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43668
43669 {&hf_ieee80211_fragment,
43670 {"802.11 Fragment", "wlan.fragment",
43671 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43672 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43673
43674 {&hf_ieee80211_fragments,
43675 {"802.11 Fragments", "wlan.fragments",
43676 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
43677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43678
43679 {&hf_ieee80211_reassembled_in,
43680 {"Reassembled 802.11 in frame", "wlan.reassembled_in",
43681 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43682 "This 802.11 packet is reassembled in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43683
43684 {&hf_ieee80211_reassembled_length,
43685 {"Reassembled 802.11 length", "wlan.reassembled.length",
43686 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
43687 "The total length of the reassembled payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43688
43689 {&hf_ieee80211_wep_iv,
43690 {"Initialization Vector", "wlan.wep.iv",
43691 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
43692 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43693
43694 {&hf_ieee80211_wep_iv_weak,
43695 {"Weak IV", "wlan.wep.weakiv",
43696 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43697 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
43698
43699 {&hf_ieee80211_tkip_extiv,
43700 {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv",
43701 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43702 "TKIP Extended Initialization Vector", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43703
43704 {&hf_ieee80211_ccmp_extiv,
43705 {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv",
43706 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43707 "CCMP Extended Initialization Vector", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43708
43709 {&hf_ieee80211_wep_key,
43710 {"Key Index", "wlan.wep.key",
43711 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
43712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43713
43714 {&hf_ieee80211_wep_icv,
43715 {"WEP ICV", "wlan.wep.icv",
43716 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43717 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43718
43719 {&hf_ieee80211_fc_analysis_pmk,
43720 {"PMK", "wlan.analysis.pmk",
43721 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43722 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43723
43724 {&hf_ieee80211_fc_analysis_kck,
43725 {"KCK", "wlan.analysis.kck",
43726 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43727 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43728
43729 {&hf_ieee80211_fc_analysis_kek,
43730 {"KEK", "wlan.analysis.kek",
43731 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43732 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43733
43734 {&hf_ieee80211_fc_analysis_tk,
43735 {"TK", "wlan.analysis.tk",
43736 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43737 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43738
43739 {&hf_ieee80211_fc_analysis_gtk,
43740 {"GTK", "wlan.analysis.gtk",
43741 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
43742 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43743
43744 {&hf_ieee80211_mgt,
43745 {"IEEE 802.11 Wireless Management", "wlan.mgt",
43746 FT_PROTOCOL, BASE_NONE, NULL((void*)0), 0x0,
43747 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43748
43749 {&hf_ieee80211_block_ack_control,
43750 {"Block Ack Control", "wlan.ba.control",
43751 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
43752 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43753
43754 {&hf_ieee80211_block_ack_control_ack_policy,
43755 {"BA Ack Policy", "wlan.ba.control.ackpolicy",
43756 FT_BOOLEAN, 16, TFS(&ieee80211_block_ack_control_ack_policy_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_block_ack_control_ack_policy_flag
))))
, 0x0001,
43757 "Block Ack Request (BAR) Ack Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43758
43759 {&hf_ieee80211_block_ack_control_type,
43760 {"BA Type", "wlan.ba.control.ba_type",
43761 FT_UINT16, BASE_HEX, VALS(block_ack_type_vals)((0 ? (const struct _value_string*)0 : ((block_ack_type_vals)
)))
, 0x001e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43762
43763 {&hf_ieee80211_block_ack_control_reserved,
43764 {"Reserved", "wlan.ba.control.reserved",
43765 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0fe0,
43766 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43767
43768 {&hf_ieee80211_block_ack_control_tid_info,
43769 {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
43770 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
43771 "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43772
43773 {&hf_ieee80211_block_ack_multi_sta_aid11,
43774 {"AID11", "wlan.ba.multi_sta.aid11",
43775 FT_UINT16, BASE_HEX, NULL((void*)0), 0x07ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43776
43777 {&hf_ieee80211_block_ack_multi_sta_ack_type,
43778 {"Ack Type", "wlan.ba.multi_sta.ack_type",
43779 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43780
43781 {&hf_ieee80211_block_ack_multi_sta_tid,
43782 {"TID", "wlan.ba.multi_sta.tid",
43783 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43784
43785 {&hf_ieee80211_block_ack_multi_sta_aid_tid,
43786 {"AID TID Info", "wlan.ba.multi_sta.aid_tid_info",
43787 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43788
43789 {&hf_ieee80211_block_ack_multi_sta_reserved,
43790 {"Reserved", "wlan.ba.multi_sta.reserved",
43791 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43792
43793 {&hf_ieee80211_block_ack_multi_sta_ra,
43794 {"RA", "wlan.ba.multi_sta.ra",
43795 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43796
43797 {&hf_ieee80211_block_ack_multi_tid_reserved,
43798 {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
43799 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0fff,
43800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43801
43802 {&hf_ieee80211_block_ack_multi_tid_value,
43803 {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
43804 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
43805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43806
43807 {&hf_ieee80211_block_ack_bitmap,
43808 {"Block Ack Bitmap", "wlan.ba.bm",
43809 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
43810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43811
43812 /* Used for Extended compressed BlockAck */
43813 {&hf_ieee80211_block_ack_RBUFCAP,
43814 {"Block Ack RBUFCAP", "wlan.ba.RBUFCAP",
43815 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0,
43816 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43817
43818 {&hf_ieee80211_block_ack_bitmap_missing_frame,
43819 {"Not acknowledged frame", "wlan.ba.bm.missing_frame",
43820 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
43821 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43822
43823 {&hf_ieee80211_block_ack_bitmap_last_ack_frame,
43824 {"Last acknowledged frame", "wlan.ba.bm.last_ack_frame",
43825 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
43826 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43827
43828 {&hf_ieee80211_block_ack_gcr_addr,
43829 {"GCR Group Address", "wlan.ba.gcr_group_addr",
43830 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43831
43832 {&hf_ieee80211_beamform_feedback_seg_retrans_bitmap,
43833 {"Feedback segment Retransmission Bitmap", "wlan.beamform.feedback_seg_retrans_bitmap",
43834 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
43835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43836
43837 {&hf_ieee80211_ndp_annc_token,
43838 {"Sounding Dialog Token", "wlan.ndp.token",
43839 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
43840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43841
43842 {&hf_ieee80211_ndp_annc_variant,
43843 {"NDP Announcement Variant", "wlan.ndp.token.variant",
43844 FT_UINT8, BASE_HEX, VALS(ndp_annc_variant_vals)((0 ? (const struct _value_string*)0 : ((ndp_annc_variant_vals
))))
, 0x03,
43845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43846
43847 {&hf_ieee80211_ndp_annc_token_number,
43848 {"Sounding Dialog Token", "wlan.ndp.token.number",
43849 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
43850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43851
43852 {&hf_ieee80211_vht_ndp_annc_sta_info_aid12,
43853 {"AID12", "wlan.vht_ndp.sta_info.aid12",
43854 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0FFF,
43855 "12 least significant bits of the AID of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43856
43857 {&hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
43858 {"Feedback Type", "wlan.vht_ndp.sta_info.feedback_type",
43859 FT_BOOLEAN, 16, TFS(&vht_ndp_annc_sta_info_feedback_type)((0 ? (const struct true_false_string*)0 : ((&vht_ndp_annc_sta_info_feedback_type
))))
, 0x1000,
43860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43861
43862 {&hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
43863 {"Nc Index", "wlan.vht_ndp.sta_info.nc_index",
43864 FT_UINT16, BASE_DEC, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0xE000,
43865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43866
43867 {&hf_ieee80211_vht_ndp_annc_sta_info_reserved,
43868 {"Reserved", "wlan.vht_ndp.sta_info.reserved",
43869 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE000,
43870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43871
43872 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008,
43873 {"STA Info, AID11 < 2008", "wlan.vht_ndp.sta_info.ranging_2008",
43874 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43876
43877 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11,
43878 {"AID11", "wlan.vht_ndp.sta_info.ranging_2008.aid11",
43879 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 0)(((1U << ((10) - (0) + 1)) - 1) << (0)),
43880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43881
43882 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset,
43883 {"LTF Offset", "wlan.vht_ndp.sta_info.ranging_2008.ltf_offset",
43884 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(16, 11)(((1U << ((16) - (11) + 1)) - 1) << (11)),
43885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43886
43887 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts,
43888 {"R2I N STS", "wlan.vht_ndp.sta_info.ranging_2008.r2i_n_sts",
43889 FT_UINT32, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK(19, 17)(((1U << ((19) - (17) + 1)) - 1) << (17)),
43890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43891
43892 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep,
43893 {"R2I Rep", "wlan.vht_ndp.sta_info.ranging_2008.r2i_rep",
43894 FT_UINT32, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(22, 20)(((1U << ((22) - (20) + 1)) - 1) << (20)),
43895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43896
43897 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts,
43898 {"I2R N STS", "wlan.vht_ndp.sta_info.ranging_2008.i2r_n_sts",
43899 FT_UINT32, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK(25, 23)(((1U << ((25) - (23) + 1)) - 1) << (23)),
43900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43901
43902 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1,
43903 {"Reserved", "wlan.vht_ndp.sta_info.ranging_2008.reserved1",
43904 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 26)(((1U << ((26) - (26) + 1)) - 1) << (26)),
43905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43906
43907 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation,
43908 {"Disambiguation", "wlan.vht_ndp.sta_info.ranging_2008.disambiguation",
43909 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
43910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43911
43912 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep,
43913 {"I2R Rep", "wlan.vht_ndp.sta_info.ranging_2008.i2r_rep",
43914 FT_UINT32, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(30, 28)(((1U << ((30) - (28) + 1)) - 1) << (28)),
43915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43916
43917 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2,
43918 {"Reserved", "wlan.vht_ndp.sta_info.ranging_2008.reserved2",
43919 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(31, 31)(((1U << ((31) - (31) + 1)) - 1) << (31)),
43920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43921
43922 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043,
43923 {"STA Info, AID11 == 2043", "wlan.sta_info_ranging_2043",
43924 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43925 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43926
43927 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11,
43928 {"AID11", "wlan.sta_info_ranging_2043.aid11",
43929 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
43930 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43931
43932 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac,
43933 {"SAC", "wlan.sta_info_ranging_2043.sac",
43934 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 11)(((1U << ((26) - (11) + 1)) - 1) << (11)),
43935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43936
43937 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation,
43938 {"Disambiguation", "wlan.sta_info_ranging_2043.disambiguation",
43939 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
43940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43941
43942 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved,
43943 {"Reserved", "wlan.sta_info_ranging_2043.reserved",
43944 FT_UINT32, BASE_HEX, NULL((void*)0), GENMASK(31, 28)(((1U << ((31) - (28) + 1)) - 1) << (28)),
43945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43946
43947 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044,
43948 {"STA Info, AID11 == 2044", "wlan.sta_info_ranging_2044",
43949 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43951
43952 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11,
43953 {"AID11", "wlan.sta_info_ranging_2044.aid11",
43954 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
43955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43956
43957 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf,
43958 {"Partial TSF", "wlan.sta_info_ranging_2044.partial_tsf",
43959 FT_UINT32, BASE_CUSTOM, CF_FUNC(partial_tsf_custom)((const void *) (size_t) (partial_tsf_custom)), GENMASK(26, 11)(((1U << ((26) - (11) + 1)) - 1) << (11)),
43960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43961
43962 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation,
43963 {"Disambiguation", "wlan.sta_info_ranging_2044.disambiguation",
43964 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
43965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43966
43967 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved,
43968 {"Reserved", "wlan.sta_info_ranging_2044.reserved",
43969 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(28, 28)(((1U << ((28) - (28) + 1)) - 1) << (28)),
43970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43971
43972 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token,
43973 {"Token", "wlan.sta_info_ranging_2044.token",
43974 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(31, 29)(((1U << ((31) - (29) + 1)) - 1) << (29)),
43975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43976
43977 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045,
43978 {"STA Info Ranging, AID11 == 2045", "wlan.sta_info_ranging_2045",
43979 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43981
43982 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11,
43983 {"AID11", "wlan.sta_info_ranging_2045.aid11",
43984 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
43985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43986
43987 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power,
43988 {"I2R NDP Tx Power", "wlan.sta_info_ranging_2045.i2r_ndp_tx_power",
43989 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(18, 11)(((1U << ((18) - (11) + 1)) - 1) << (11)),
43990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43991
43992 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi,
43993 {"R2I NDP Target RSSI", "wlan.sta_info_ranging_2045.r2i_ndp_target_rssi",
43994 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 19)(((1U << ((26) - (19) + 1)) - 1) << (19)),
43995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43996
43997 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation,
43998 {"Disambiguation", "wlan.sta_info_ranging_2045.disambiguation",
43999 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
44000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44001
44002 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved,
44003 {"Reserved", "wlan.sta_info_ranging_2045.reserved",
44004 FT_UINT32, BASE_HEX, NULL((void*)0), GENMASK(31, 28)(((1U << ((31) - (28) + 1)) - 1) << (28)),
44005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44006
44007 {&hf_ieee80211_ndp_eht_annc_sta_info,
44008 {"STA Info", "wlan.ndp_eht.sta_info",
44009 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44010
44011 {&hf_ieee80211_ndp_eht_annc_aid11,
44012 {"AID11", "wlan.ndp_eht.sta_info.aid11",
44013 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000007ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44014
44015 {&hf_ieee80211_ndp_eht_annc_resolution,
44016 {"Resolution", "wlan.ndp_eht.sta_info.resolution",
44017 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44018
44019 {&hf_ieee80211_ndp_eht_annc_feedback_map,
44020 {"Feedback Bitmap", "wlan.ndp_eht.sta_info.feedback_bitmap",
44021 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44022
44023 {&hf_ieee80211_ndp_eht_annc_reserved1,
44024 {"Reserved", "wlan.ndp_eht.sta_info.reserved1",
44025 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44026
44027 {&hf_ieee80211_ndp_eht_annc_nc_index,
44028 {"Nc Index", "wlan.ndp_eht.sta_info.nc_index",
44029 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44030
44031 {&hf_ieee80211_ndp_eht_annc_feedback_type,
44032 {"Feedback Type And Ng", "wlan.ndp_eht.sta_info.feedback_type_and_ng",
44033 FT_UINT32, BASE_HEX, NULL((void*)0), 0x06000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44034
44035 {&hf_ieee80211_ndp_eht_annc_disambiguation,
44036 {"Disambiguation", "wlan.ndp_eht.sta_info.disambiguation",
44037 FT_UINT32, BASE_HEX, NULL((void*)0), 0x08000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44038
44039 {&hf_ieee80211_ndp_eht_annc_codebook_size,
44040 {"Codebook Size", "wlan.ndp_eht.sta_info.codebook_size",
44041 FT_UINT32, BASE_HEX, NULL((void*)0), 0x10000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44042
44043 {&hf_ieee80211_ndp_eht_annc_reserved2,
44044 {"Reserved", "wlan.ndp_eht.sta_info.reserved2",
44045 FT_UINT32, BASE_HEX, NULL((void*)0), 0xe0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44046
44047 {&hf_ieee80211_data_encap_payload_type,
44048 {"Payload Type", "wlan.data_encap.payload_type",
44049 FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types)((0 ? (const struct _value_string*)0 : ((ieee80211_data_encap_payload_types
))))
, 0,
44050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44051
44052 {&hf_ieee80211_ff_tdls_action_code,
44053 {"Action code", "wlan.fixed.action_code",
44054 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tdls_action_codes_ext, 0,
44055 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44056
44057 {&hf_ieee80211_ff_target_channel,
44058 {"Target Channel", "wlan.fixed.target_channel",
44059 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44061
44062 {&hf_ieee80211_ff_operating_class,
44063 {"Operating Class", "wlan.fixed.operating_class",
44064 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44066
44067 {&hf_ieee80211_ff_channel,
44068 {"Channel", "wlan.fixed.channel",
44069 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44071
44072 {&hf_ieee80211_ff_wnm_action_code,
44073 {"Action code", "wlan.fixed.action_code",
44074 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &wnm_action_codes_ext, 0,
44075 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44076
44077 {&hf_ieee80211_ff_unprotected_wnm_action_code,
44078 {"Action code", "wlan.fixed.action_code",
44079 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &unprotected_wnm_action_codes_ext, 0,
44080 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44081
44082 {&hf_ieee80211_ff_key_data,
44083 {"Key Data", "wlan.fixed.key_data",
44084 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44085
44086 {&hf_ieee80211_ff_key_data_length,
44087 {"Key Data Length", "wlan.fixed.key_data_length",
44088 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44089
44090 {&hf_ieee80211_ff_wnm_notification_type,
44091 {"WNM-Notification type", "wlan.fixed.wnm_notification_type",
44092 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &wnm_notification_types_ext, 0,
44093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44094
44095 {&hf_ieee80211_ff_wnm_notification_response_status,
44096 {"Response Status", "wlan.fixed.wnm_notification_response_status",
44097 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(wnm_notification_response_code)((0 ? (const struct _range_string*)0 : ((wnm_notification_response_code
))))
, 0,
44098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44099
44100 {&hf_ieee80211_ff_rm_action_code,
44101 {"Action code", "wlan.fixed.action_code",
44102 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &rm_action_codes_ext, 0,
44103 "Radio Measurement Action", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44104
44105 {&hf_ieee80211_ff_rm_dialog_token,
44106 {"Dialog token", "wlan.rm.dialog_token",
44107 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44108 "Non-zero Dialog Token identifies request/report transaction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44109
44110 {&hf_ieee80211_ff_rm_repetitions,
44111 {"Repetitions", "wlan.rm.repetitions",
44112 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44113 "Number of Repetitions, 65535 indicates repeat until cancellation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44114
44115 {&hf_ieee80211_ff_rm_tx_power,
44116 {"Transmit Power Used", "wlan.rm.tx_power",
44117 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44118 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44119
44120 {&hf_ieee80211_ff_rm_max_tx_power,
44121 {"Max Transmit Power", "wlan.rm.max_tx_power",
44122 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44123 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44124
44125 {&hf_ieee80211_ff_tpc,
44126 {"TPC Report", "wlan.rm.tpc",
44127 FT_NONE, BASE_NONE, NULL((void*)0), 0,
44128 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44129
44130 {&hf_ieee80211_ff_tpc_element_id,
44131 {"TPC Element ID", "wlan.rm.tpc.element_id",
44132 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44133 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44134
44135 {&hf_ieee80211_ff_tpc_length,
44136 {"TPC Length", "wlan.rm.tpc.length",
44137 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44138 "Length of TPC Report element (always 2)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44139
44140 {&hf_ieee80211_ff_tpc_tx_power,
44141 {"TPC Transmit Power", "wlan.rm.tpc.tx_power",
44142 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44143 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44144
44145 {&hf_ieee80211_ff_tpc_link_margin,
44146 {"TPC Link Margin", "wlan.rm.tpc.link_margin",
44147 FT_INT8, BASE_DEC, NULL((void*)0), 0,
44148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44149
44150 {&hf_ieee80211_ff_rm_rx_antenna_id,
44151 {"Receive Antenna ID", "wlan.rm.rx_antenna_id",
44152 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44154
44155 {&hf_ieee80211_ff_rm_tx_antenna_id,
44156 {"Transmit Antenna ID", "wlan.rm.tx_antenna_id",
44157 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44159
44160 {&hf_ieee80211_ff_rm_rcpi,
44161 {"Received Channel Power", "wlan.rm.rcpi",
44162 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44164
44165 {&hf_ieee80211_ff_rm_rsni,
44166 {"Received Signal to noise indication", "wlan.rm.rsni",
44167 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44169
44170 {&hf_ieee80211_ff_request_mode_pref_cand,
44171 {"Preferred Candidate List Included", "wlan.fixed.request_mode.pref_cand",
44172 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
44173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44174
44175 {&hf_ieee80211_ff_request_mode_abridged,
44176 {"Abridged", "wlan.fixed.request_mode.abridged",
44177 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
44178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44179
44180 {&hf_ieee80211_ff_request_mode_disassoc_imminent,
44181 {"Disassociation Imminent", "wlan.fixed.request_mode.disassoc_imminent",
44182 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
44183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44184
44185 {&hf_ieee80211_ff_request_mode_bss_term_included,
44186 {"BSS Termination Included", "wlan.fixed.request_mode.bss_term_included",
44187 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
44188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44189
44190 {&hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
44191 {"ESS Disassociation Imminent", "wlan.fixed.request_mode.ess_disassoc_imminent",
44192 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
44193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44194
44195 {&hf_ieee80211_ff_request_mode_link_removal_imminent,
44196 {"Link Removal Imminent", "wlan.fixed.request_mode.link_removal_imminent",
44197 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
44198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44199
44200 {&hf_ieee80211_ff_request_mode_reserved,
44201 {"Reserved", "wlan.fixed.request_mode.reserved",
44202 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0,
44203 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44204
44205 {&hf_ieee80211_ff_disassoc_timer,
44206 {"Disassociation Timer", "wlan.fixed.disassoc_timer",
44207 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44208 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44209
44210 {&hf_ieee80211_ff_bss_termination_delay,
44211 {"BSS Termination Delay", "wlan.fixed.bss_termination_delay",
44212 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44214
44215 {&hf_ieee80211_ff_bss_transition_status_code,
44216 {"BSS Transition Status Code", "wlan.fixed.bss_transition_status_code",
44217 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44218 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44219
44220 {&hf_ieee80211_ff_validity_interval,
44221 {"Validity Interval", "wlan.fixed.validity_interval",
44222 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44223 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44224
44225 {&hf_ieee80211_ff_url_len,
44226 {"Session Information URL Length",
44227 "wlan.fixed.session_information.url_length",
44228 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44229 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44230
44231 {&hf_ieee80211_ff_url,
44232 {"Session Information URL", "wlan.fixed.session_information.url",
44233 FT_STRING, BASE_NONE, NULL((void*)0), 0,
44234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44235
44236 {&hf_ieee80211_ff_target_bss,
44237 {"BSS Transition Target BSS", "wlan.fixed.bss_transition_target_bss",
44238 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44239 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44240
44241 {&hf_ieee80211_ff_bss_transition_query_reason,
44242 {"BSS Transition Query Reason", "wlan.fixed.bss_transition_query_reason",
44243 FT_UINT8, BASE_DEC, VALS(ieee80211_transition_reasons)((0 ? (const struct _value_string*)0 : ((ieee80211_transition_reasons
))))
, 0,
44244 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44245
44246 {&hf_ieee80211_ff_bss_transition_candidate_list_entries,
44247 {"BSS Transition Candidate List Entries", "wlan.fixed.bss_transition_candidate_list_entries",
44248 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
44249 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44250
44251/* 802.11ai */
44252
44253 {&hf_ieee80211_ff_fils_discovery_frame_control,
44254 {"Frame Control", "wlan.fils_discovery.frame_control",
44255 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
44256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44257
44258 {&hf_ieee80211_ff_fils_discovery_frame_control_ssid_length,
44259 {"SSID Length", "wlan.fils_discovery.frame_control.ssid_length",
44260 FT_UINT16, BASE_HEX, NULL((void*)0), PA_FILS_FC_SSID_LENGTH0x001F,
44261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44262
44263 {&hf_ieee80211_ff_fils_discovery_frame_control_capability,
44264 {"Capability", "wlan.fils_discovery.frame_control.capability",
44265 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_CAPABILITY0x0020,
44266 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44267
44268 {&hf_ieee80211_ff_fils_discovery_frame_control_short_ssid,
44269 {"Short SSID", "wlan.fils_discovery.frame_control.short_ssid",
44270 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_SHORT_SSID0x0040,
44271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44272
44273 {&hf_ieee80211_ff_fils_discovery_frame_control_ap_csn,
44274 {"AP-CSN", "wlan.fils_discovery.frame_control.ap_csn",
44275 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_AP_CSN0x0080,
44276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44277
44278 {&hf_ieee80211_ff_fils_discovery_frame_control_ano,
44279 {"ANO", "wlan.fils_discovery.frame_control.ano",
44280 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_ANO0x0100,
44281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44282
44283 {&hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency,
44284 {"Channel Center Frequency Segment 1", "wlan.fils_discovery.frame_control.channel_center_frequency",
44285 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_CCFS10x0200,
44286 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44287
44288 {&hf_ieee80211_ff_fils_discovery_frame_control_primary_channel,
44289 {"Primary Channel", "wlan.fils_discovery.frame_control.primary_channel",
44290 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_PC0x0400,
44291 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44292
44293 {&hf_ieee80211_ff_fils_discovery_frame_control_rsn_info,
44294 {"RSN Info", "wlan.fils_discovery.frame_control.rsn_info",
44295 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_RSN_INFO0x0800,
44296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44297
44298 {&hf_ieee80211_ff_fils_discovery_frame_control_length,
44299 {"Length", "wlan.fils_discovery.frame_control.length",
44300 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_LENGTH0x1000,
44301 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44302
44303 {&hf_ieee80211_ff_fils_discovery_frame_control_md,
44304 {"MD", "wlan.fils_discovery.frame_control.md",
44305 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_MD0x2000,
44306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44307
44308 {&hf_ieee80211_ff_fils_discovery_frame_control_reserved,
44309 {"Reserved", "wlan.fils_discovery.frame_control.reserved",
44310 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_RESERVED0xC000,
44311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44312
44313 {&hf_ieee80211_ff_fils_discovery_ssid,
44314 {"SSID", "wlan.fils_discovery.ssid_length",
44315 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
44316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44317
44318 {&hf_ieee80211_ff_fils_discovery_capability,
44319 {"Capability", "wlan.fils_discovery.capability",
44320 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
44321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44322
44323 {&hf_ieee80211_ff_fils_discovery_capability_ess,
44324 {"ESS", "wlan.fils_discovery.capability.ess",
44325 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001,
44326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44327
44328 {&hf_ieee80211_ff_fils_discovery_capability_privacy,
44329 {"Privacy", "wlan.fils_discovery.capability.privacy",
44330 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0002,
44331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44332
44333 {&hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width,
44334 {"BSS Operating Channel width", "wlan.fils_discovery.capability.bss_operating_channel_width",
44335 FT_UINT16, BASE_HEX, VALS(fils_discovery_capability_bss_operating_channel_width)((0 ? (const struct _value_string*)0 : ((fils_discovery_capability_bss_operating_channel_width
))))
, 0x001C,
44336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44337
44338 {&hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams,
44339 {"Maximum Number of Spatial Streams", "wlan.fils_discovery.maximum_number_of_spatial_streams",
44340 FT_UINT16, BASE_HEX, VALS(fils_discovery_capability_max_number_of_spatial_streams)((0 ? (const struct _value_string*)0 : ((fils_discovery_capability_max_number_of_spatial_streams
))))
, 0x00E0,
44341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44342
44343 {&hf_ieee80211_ff_fils_discovery_capability_reserved,
44344 {"Reserved", "wlan.fils_discovery.capability.reserved",
44345 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0100,
44346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44347
44348 {&hf_ieee80211_ff_fils_discovery_capability_multiple_bssid,
44349 {"Multiple BSSID", "wlan.fils_discovery.capability.multiple_bssid",
44350 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0200,
44351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44352
44353 {&hf_ieee80211_ff_fils_discovery_capability_phy_index,
44354 {"PHY Index", "wlan.fils_discovery.capability.phy_index",
44355 FT_UINT16, BASE_HEX, VALS(fils_discovery_capability_phy_index)((0 ? (const struct _value_string*)0 : ((fils_discovery_capability_phy_index
))))
, 0x1C00,
44356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44357
44358 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss,
44359 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44360 FT_UINT16, BASE_HEX, VALS(fils_discovery_capability_fils_minimum_rate_dsss)((0 ? (const struct _value_string*)0 : ((fils_discovery_capability_fils_minimum_rate_dsss
))))
, 0xE000,
44361 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44362
44363 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm,
44364 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44365 FT_UINT16, BASE_HEX, VALS(fils_discovery_capability_fils_minimum_rate_ofdm)((0 ? (const struct _value_string*)0 : ((fils_discovery_capability_fils_minimum_rate_ofdm
))))
, 0xE000,
44366 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44367
44368 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht,
44369 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44370 FT_UINT16, BASE_HEX, VALS(fils_discovery_capability_fils_minimum_rate_ht_vht_tvht)((0 ? (const struct _value_string*)0 : ((fils_discovery_capability_fils_minimum_rate_ht_vht_tvht
))))
, 0xE000,
44371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44372
44373 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he,
44374 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44375 FT_UINT16, BASE_HEX, VALS(fils_discovery_capability_fils_minimum_rate_he)((0 ? (const struct _value_string*)0 : ((fils_discovery_capability_fils_minimum_rate_he
))))
, 0xE000,
44376 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44377
44378 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate,
44379 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44380 FT_UINT16, BASE_HEX, NULL((void*)0), 0xE000,
44381 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44382
44383 {&hf_ieee80211_ff_fils_discovery_short_ssid,
44384 {"Short SSID", "wlan.fils_discovery.short_ssid",
44385 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
44386 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44387
44388 {&hf_ieee80211_ff_fils_discovery_ap_csn,
44389 {"AP Configuration Sequence Number", "wlan.fils_discovery.ap_csn",
44390 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44391 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44392
44393 {&hf_ieee80211_ff_fils_discovery_ano,
44394 {"Access Network Options", "wlan.fils_discovery.ano",
44395 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
44396 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44397
44398 {&hf_ieee80211_ff_fils_discovery_ccfs1,
44399 {"Channel Center Frequency Segment 1", "wlan.fils_discovery.channel_center_frequency",
44400 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
44401 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44402
44403 {&hf_ieee80211_ff_fils_discovery_operating_class,
44404 {"Operating Class", "wlan.fils_discovery.operating_class",
44405 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44406 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44407
44408 {&hf_ieee80211_ff_fils_discovery_primary_channel,
44409 {"Primary Channel", "wlan.fils_discovery.primary_channel",
44410 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44411 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44412
44413 {&hf_ieee80211_ff_fils_discovery_rsn_info,
44414 {"RSN Info", "wlan.fils_discovery.rsn_info",
44415 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
44416 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44417
44418 {&hf_ieee80211_ff_fils_discovery_length,
44419 {"Length", "wlan.fils_discovery.length",
44420 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44422
44423 {&hf_ieee80211_ff_fils_discovery_md,
44424 {"MD", "wlan.fils_discovery.md",
44425 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
44426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44427
44428/* 802.11ad */
44429 {&hf_ieee80211_cf_response_offset,
44430 {"Response Offset", "wlan.res_offset",
44431 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44433
44434 {&hf_ieee80211_grant_ack_reserved,
44435 {"Reserved", "wlan.grant_ack.reserved",
44436 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
44437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44438
44439 {&hf_ieee80211_ff_dynamic_allocation,
44440 {"Dynamic Allocation", "wlan.dynamic_allocation",
44441 FT_UINT40, BASE_HEX, NULL((void*)0), 0,
44442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44443
44444 {&hf_ieee80211_ff_TID,
44445 {"TID", "wlan.dynamic_allocation.tid",
44446 FT_UINT40, BASE_DEC, NULL((void*)0), 0x000000000F,
44447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44448
44449 {&hf_ieee80211_ff_alloc_type,
44450 {"Allocation Type", "wlan.dynamic_allocation.alloc_type",
44451 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000070,
44452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44453
44454 {&hf_ieee80211_ff_src_aid,
44455 {"Source AID", "wlan.dynamic_allocation.src_aid",
44456 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000007F80,
44457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44458
44459 {&hf_ieee80211_ff_dest_aid,
44460 {"Destination AID", "wlan.dynamic_allocation.dest_aid",
44461 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00007f8000,
44462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44463
44464 {&hf_ieee80211_ff_alloc_duration,
44465 {"Allocation Duration", "wlan.dynamic_allocation.alloc_duration",
44466 FT_UINT40, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x7FFF800000,
44467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44468
44469 {&hf_ieee80211_ff_b39,
44470 {"Reserved (b39)", "wlan.dynamic_allocation.b39",
44471 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000,
44472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44473
44474 {&hf_ieee80211_ff_ssw,
44475 {"Sector Sweep", "wlan.ssw",
44476 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44478
44479 {&hf_ieee80211_ff_ssw_direction,
44480 {"Sector Sweep Direction", "wlan.ssw.direction",
44481 FT_BOOLEAN, 24, TFS(&ieee80211_cf_ssw_direction)((0 ? (const struct true_false_string*)0 : ((&ieee80211_cf_ssw_direction
))))
, 0x000001,
44482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
44483
44484 {&hf_ieee80211_ff_ssw_cdown,
44485 {"Sector Sweep CDOWN", "wlan.ssw.cdown",
44486 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0003fe,
44487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44488
44489 {&hf_ieee80211_ff_ssw_sector_id,
44490 {"Sector Sweep Sector ID", "wlan.ssw.sector_id",
44491 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00fc00,
44492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44493
44494 {&hf_ieee80211_ff_ssw_dmg_ant_id,
44495 {"Sector Sweep DMG Antenna ID", "wlan.ssw.dmg_ant_id",
44496 FT_UINT24, BASE_DEC, NULL((void*)0), 0x030000,
44497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44498
44499 {&hf_ieee80211_ff_ssw_rxss_len,
44500 {"Sector Sweep RXSS Length", "wlan.ssw.rxss_len",
44501 FT_UINT24, BASE_DEC, NULL((void*)0), 0xfc0000,
44502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44503
44504 {&hf_ieee80211_ff_bf,
44505 {"Beam Forming", "wlan.bf",
44506 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
44507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44508
44509 {&hf_ieee80211_ff_bf_train,
44510 {"Beam Forming Training", "wlan.bf.train",
44511 FT_BOOLEAN, 16, NULL((void*)0), 0x0001,
44512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44513
44514 {&hf_ieee80211_ff_bf_is_init,
44515 {"Beam Forming Is InitiatorTXSS", "wlan.bf.isInit",
44516 FT_BOOLEAN, 16, NULL((void*)0), 0x0002,
44517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44518
44519 {&hf_ieee80211_ff_bf_is_resp,
44520 {"Beam Forming Is ResponderTXSS", "wlan.bf.isResp",
44521 FT_BOOLEAN, 16, NULL((void*)0), 0x0004,
44522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44523
44524 {&hf_ieee80211_ff_bf_rxss_len,
44525 {"Beam Forming RXSS Length", "wlan.bf.rxss_len",
44526 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01f8,
44527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44528
44529 {&hf_ieee80211_ff_bf_rxss_rate,
44530 {"Beam Forming RXSS Rate", "wlan.bf.rxss_rate",
44531 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
44532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44533
44534 {&hf_ieee80211_ff_bf_b10b15,
44535 {"Reserved (B10-B15)", "wlan.bf.reserved",
44536 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFC00,
44537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44538
44539 {&hf_ieee80211_ff_bf_num_sectors,
44540 {"Beam Forming Total Number of Sectors", "wlan.bf.num_sectors",
44541 FT_UINT16, BASE_DEC, NULL((void*)0), 0x03f8,
44542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44543
44544 {&hf_ieee80211_ff_bf_num_rx_dmg_ants,
44545 {"Beam Forming Number of DMG Antennas", "wlan.bf.num_dmg_ants",
44546 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0c00,
44547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44548
44549 {&hf_ieee80211_ff_bf_b12b15,
44550 {"Reserved (B12-B15)", "wlan.bf.reserved",
44551 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
44552 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44553
44554 {&hf_ieee80211_addr_nav_da,
44555 {"Destination address of STA that caused NAV update", "wlan.nav_da",
44556 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44557 "DMG Destination Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44558
44559 {&hf_ieee80211_addr_nav_sa,
44560 {"Source address of STA that caused NAV update", "wlan.nav_sa",
44561 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44562 "DMG Source Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44563
44564 {&hf_ieee80211_ff_sswf,
44565 {"Sector Sweep Feedback", "wlan.sswf",
44566 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44568
44569 {&hf_ieee80211_ff_sswf_total_sectors,
44570 {"Sector Sweep Feedback total number of sectors", "wlan.sswf.num_sectors",
44571 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0001ff,
44572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44573
44574 {&hf_ieee80211_ff_sswf_num_rx_dmg_ants,
44575 {"Sector Sweep Feedback Number of receive DMG Antennas", "wlan.sswf.num_dmg_ants",
44576 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000600,
44577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44578
44579 {&hf_ieee80211_ff_sswf_poll_required,
44580 {"Sector Sweep Feedback Poll required", "wlan.sswf.poll",
44581 FT_BOOLEAN, 24, NULL((void*)0), 0x010000,
44582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44583
44584 {&hf_ieee80211_ff_sswf_reserved1,
44585 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
44586 FT_UINT24, BASE_HEX, NULL((void*)0), 0x00F800,
44587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44588
44589 {&hf_ieee80211_ff_sswf_reserved2,
44590 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
44591 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFE0000,
44592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44593
44594 {&hf_ieee80211_ff_sswf_sector_select,
44595 {"Sector Sweep Feedback Sector Select", "wlan.sswf.sector_select",
44596 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00003F,
44597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44598
44599 {&hf_ieee80211_ff_sswf_dmg_antenna_select,
44600 {"Sector Sweep Feedback DMG Antenna Select", "wlan.sswf.dmg_antenna_select",
44601 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000C0,
44602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44603
44604 {&hf_ieee80211_ff_sswf_snr_report,
44605 {"Sector Sweep Feedback SNR Report", "wlan.sswf.snr_report",
44606 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00FF00,
44607 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44608
44609
44610 {&hf_ieee80211_ff_brp,
44611 {"BRP Request", "wlan.brp",
44612 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44613 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44614
44615 {&hf_ieee80211_ff_brp_L_RX,
44616 {"BRP Request L-RX", "wlan.brp.l_rx",
44617 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f,
44618 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44619
44620 {&hf_ieee80211_ff_brp_TX_TRN_REQ,
44621 {"BRP Request TX-TRN-REQ", "wlan.brp.tx_trn_req",
44622 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
44623 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44624
44625 {&hf_ieee80211_ff_brp_MID_REQ,
44626 {"BRP Request MID-REQ", "wlan.brp.mid_req",
44627 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
44628 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44629
44630 {&hf_ieee80211_ff_brp_BC_REQ,
44631 {"BRP Request BC-REQ", "wlan.brp.bc_req",
44632 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
44633 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44634
44635 {&hf_ieee80211_ff_brp_MID_GRANT,
44636 {"BRP Request MID-GRANT", "wlan.brp.mid_grant",
44637 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
44638 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44639
44640 {&hf_ieee80211_ff_brp_BC_GRANT,
44641 {"BRP Request BC-GRANT", "wlan.brp.bc_grant",
44642 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
44643 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44644
44645 {&hf_ieee80211_ff_brp_chan_FBCK_CAP,
44646 {"BRP Request Chan FBCK-CAP", "wlan.brp.chan_fbck_cap",
44647 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
44648 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44649
44650 {&hf_ieee80211_ff_brp_tx_sector,
44651 {"BRP Request TX Sector ID", "wlan.brp.tx_sector_id",
44652 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0001f800,
44653 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44654
44655 {&hf_ieee80211_ff_brp_other_aid,
44656 {"BRP Request Other AID", "wlan.brp.other_aid",
44657 FT_UINT32, BASE_DEC, NULL((void*)0), 0x01fe0000,
44658 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44659
44660 {&hf_ieee80211_ff_brp_tx_antenna,
44661 {"BRP Request TX Antenna ID", "wlan.brp.tx_antenna_id",
44662 FT_UINT32, BASE_DEC, NULL((void*)0), 0x06000000,
44663 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44664
44665 {&hf_ieee80211_ff_brp_reserved,
44666 {"BRP Request Reserved", "wlan.brp.reserved",
44667 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF8000000,
44668 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44669
44670 {&hf_ieee80211_ff_blm,
44671 {"Beamformed Link Maintenance", "wlan.blm",
44672 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
44673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44674
44675 {&hf_ieee80211_ff_blm_unit_index,
44676 {"BeamLink Maintenance Uint Index", "wlan.blm.uint_index",
44677 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
44678 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44679
44680 {&hf_ieee80211_ff_blm_maint_value,
44681 {"BeamLink Maintenance Value", "wlan.blm.value",
44682 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7e,
44683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44684
44685 {&hf_ieee80211_ff_blm_is_master,
44686 {"BeamLink Is Master", "wlan.blm.is_master",
44687 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
44688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44689
44690 {&hf_ieee80211_ff_bic,
44691 {"Beacon Interval Control", "wlan.bic",
44692 FT_UINT48, BASE_HEX, NULL((void*)0), 0,
44693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44694
44695 {&hf_ieee80211_ff_bic_cc_present,
44696 {"Clustering Control Present", "wlan.bic.cc",
44697 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000001,
44698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44699
44700 {&hf_ieee80211_ff_bic_discovery_mode,
44701 {"Discovery Mode", "wlan.bic.discovery_mode",
44702 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000002,
44703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44704
44705 {&hf_ieee80211_ff_bic_next_beacon,
44706 {"Next Beacon", "wlan.bic.next_beacon",
44707 FT_UINT48, BASE_DEC, NULL((void*)0), 0x00000000003c,
44708
44709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44710
44711 {&hf_ieee80211_ff_bic_ati_present,
44712 {"ATI Present", "wlan.bic.ati",
44713 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000040,
44714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44715
44716 {&hf_ieee80211_ff_bic_abft_len,
44717 {"A-BFT length", "wlan.bic.abft_len",
44718 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000000380,
44719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44720
44721 {&hf_ieee80211_ff_bic_fss,
44722 {"FSS", "wlan.bic.fss",
44723 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000003c00,
44724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44725
44726 {&hf_ieee80211_ff_bic_is_resp,
44727 {"Is TXSS Responder", "wlan.bic.is_responder",
44728 FT_BOOLEAN, 48, NULL((void*)0), 0x000000004000,
44729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44730
44731 {&hf_ieee80211_ff_bic_next_abft,
44732 {"Next A-BFT", "wlan.bic.next_abft",
44733 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000078000,
44734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44735
44736 {&hf_ieee80211_ff_bic_frag_txss,
44737 {"Fragmented TXSS", "wlan.bic.frag_txss",
44738 FT_BOOLEAN, 48, NULL((void*)0), 0x000000080000,
44739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44740
44741 {&hf_ieee80211_ff_bic_txss_span,
44742 {"TXSS span", "wlan.bic.txss_span",
44743 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000007f00000,
44744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44745
44746 {&hf_ieee80211_ff_bic_NBI_abft,
44747 {"Number of Beacon Intervals that are needed to allocate A-BFT", "wlan.bic.NBI_abft",
44748 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000078000000,
44749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44750
44751 {&hf_ieee80211_ff_bic_abft_count,
44752 {"A-BFT Count", "wlan.bic.abft_count",
44753 FT_UINT48, BASE_DEC, NULL((void*)0), 0x001f80000000,
44754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44755
44756 {&hf_ieee80211_ff_bic_nabft,
44757 {"Number of A-BFT's received from each Antenna", "wlan.bic.nabft",
44758 FT_UINT48, BASE_DEC, NULL((void*)0), 0x07e000000000,
44759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44760
44761 {&hf_ieee80211_ff_bic_pcp,
44762 {"PCP Association Ready", "wlan.bic.pcp",
44763 FT_BOOLEAN, 48, NULL((void*)0), 0x080000000000,
44764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44765
44766 {&hf_ieee80211_ff_bic_reserved,
44767 {"Reserved", "wlan.bic.reserved",
44768 FT_UINT48, BASE_HEX, NULL((void*)0), 0xF00000000000,
44769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44770
44771 {&hf_ieee80211_ff_dmg_params,
44772 {"DMG Parameters", "wlan.dmg_params",
44773 FT_UINT8, BASE_HEX , NULL((void*)0), 0,
44774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44775
44776 {&hf_ieee80211_ff_dmg_params_bss,
44777 {"BSS Type", "wlan.dmg_params.bss",
44778 FT_UINT8, BASE_DEC, VALS(bss_type)((0 ? (const struct _value_string*)0 : ((bss_type)))), 0x03,
44779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44780
44781 {&hf_ieee80211_ff_dmg_params_cbap_only,
44782 {"CBAP Only", "wlan.dmg_params.cbap_only",
44783 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
44784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44785
44786 {&hf_ieee80211_ff_dmg_params_cbap_src,
44787 {"CBAP Source", "wlan.dmg_params.cbap_src",
44788 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
44789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44790
44791 {&hf_ieee80211_ff_dmg_params_privacy,
44792 {"DMG Privacy", "wlan.dmg_params.privacy",
44793 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
44794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44795
44796 {&hf_ieee80211_ff_dmg_params_policy,
44797 {"ECAPC Policy Enforced", "wlan.dmg_params.policy",
44798 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
44799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44800
44801 {&hf_ieee80211_ff_dmg_params_spec_mgmt,
44802 {"Spectrum Management", "wlan.dmg_params.spec_mgmt",
44803 FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x40,
44804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44805
44806 {&hf_ieee80211_ff_dmg_params_radio_measure,
44807 {"Radio Measurement", "wlan.dmg_params.radio_measure",
44808 FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x80,
44809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44810
44811 {&hf_ieee80211_ff_cc,
44812 {"Clustering Control", "wlan.cc",
44813 FT_UINT64, BASE_HEX , NULL((void*)0), 0,
44814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44815
44816 {&hf_ieee80211_ff_cc_abft_resp_addr,
44817 {"A-BFT Responder Address", "wlan.cc.abft_resp_addr",
44818 FT_ETHER, BASE_NONE , NULL((void*)0), 0,
44819 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44820
44821 {&hf_ieee80211_ff_cc_sp_duration,
44822 {"Beacon SP Duration", "wlan.cc.sp_duration",
44823 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
44824 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44825
44826 {&hf_ieee80211_ff_cc_cluster_id,
44827 {"Cluster ID", "wlan.cc.cluster_id",
44828 FT_UINT64, BASE_DEC , NULL((void*)0), 0,
44829 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44830
44831 {&hf_ieee80211_ff_cc_role,
44832 {"Cluster Member Role", "wlan.cc.rold",
44833 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
44834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44835
44836 {&hf_ieee80211_ff_cc_max_mem,
44837 {"Cluster MaxMem", "wlan.cc.max_mem",
44838 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
44839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44840
44841 {&hf_ieee80211_tag_relay_support,
44842 {"Relay Supportability", "wlan.relay_capabilities.relay_support",
44843 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
44844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44845
44846 {&hf_ieee80211_tag_relay_use,
44847 {"Relay Usability", "wlan.relay_capabilities.relay_use",
44848 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
44849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44850
44851 {&hf_ieee80211_tag_relay_permission,
44852 {"Relay Permission", "wlan.relay_capabilities.relay_permission",
44853 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
44854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44855
44856 {&hf_ieee80211_tag_AC_power,
44857 {"A/C Power", "wlan.relay_capabilities.AC_power",
44858 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
44859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44860
44861 {&hf_ieee80211_tag_relay_prefer,
44862 {"Relay Preference", "wlan.relay_capabilities.relay_prefer",
44863 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
44864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44865
44866 {&hf_ieee80211_tag_duplex,
44867 {"Duplex", "wlan.relay_capabilities.duplex",
44868 FT_UINT8, BASE_DEC, NULL((void*)0), 0x60,
44869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44870
44871 {&hf_ieee80211_tag_cooperation,
44872 {"Cooperation", "wlan.relay_capabilities.cooperation",
44873 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
44874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44875
44876#if 0
44877 {&hf_ieee80211_ff_rcsi,
44878 {"Relay Capable STA Info", "wlan.rcsi",
44879 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44881
44882 {&hf_ieee80211_ff_rcsi_aid,
44883 {"AID", "wlan.rcsi.aid",
44884 FT_UINT8, BASE_DEC, NULL((void*)0), 0xff,
44885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44886#endif
44887
44888 {&hf_ieee80211_ff_band_id,
44889 {"Band ID", "wlan.band_id",
44890 FT_UINT8, BASE_DEC, VALS(band_id)((0 ? (const struct _value_string*)0 : ((band_id)))), 0x0,
44891 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44892
44893 {&hf_ieee80211_tag_move,
44894 {"Move", "wlan.dmg_bss_param_change.move",
44895 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
44896 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44897
44898 {&hf_ieee80211_tag_size,
44899 {"Size", "wlan.dmg_bss_param_change.size",
44900 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
44901 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44902
44903 {&hf_ieee80211_tag_tbtt_offset,
44904 {"TBTT Offset", "wlan.dmg_bss_param_change.tbtt_offset",
44905 FT_UINT32, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x0,
44906 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44907
44908 {&hf_ieee80211_tag_bi_duration,
44909 {"BI Duration", "wlan.dmg_bss_param_change.bi_duration",
44910 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
44911 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44912
44913 {&hf_ieee80211_tag_dmg_capa_sta_addr,
44914 {"STA Address", "wlan.dmg_capa.sta_addr",
44915 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44916 "STA_Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44917
44918 {&hf_ieee80211_tag_dmg_capa_aid,
44919 {"AID", "wlan.dmg_capa.aid",
44920 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44921 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44922/* 8.4.2.127.2 DMG STA Capability Information field */
44923 {&hf_ieee80211_tag_reverse_direction, /* DMG STA capa, bits [0] */
44924 {"Reverse Direction", "wlan.dmg_capa.reverse_direction",
44925 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
44926 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44927
44928 {&hf_ieee80211_tag_hlts, /* DMG STA capa, bits [1] */
44929 {"Higher Layer Timer Synchronization", "wlan.dmg_capa.htls",
44930 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)),
44931 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44932
44933 {&hf_ieee80211_tag_tpc, /* DMG STA capa, bits [2] */
44934 {"TPC", "wlan.dmg_capa.tpc",
44935 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)),
44936 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44937
44938 {&hf_ieee80211_tag_spsh, /* DMG STA capa, bits [3] */
44939 {"SPSH and Interference Mitigation", "wlan.dmg_capa.spsh",
44940 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(3, 3)(((1U << ((3) - (3) + 1)) - 1) << (3)),
44941 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44942
44943 {&hf_ieee80211_tag_rx_antenna, /* DMG STA capa, bits [4..5] */
44944 {"Number of RX DMG Antennas", "wlan.dmg_capa.num_rx",
44945 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_base_custom)((const void *) (size_t) (extra_one_base_custom)), GENMASK(5, 4)(((1U << ((5) - (4) + 1)) - 1) << (4)),
44946 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44947
44948 {&hf_ieee80211_tag_fast_link, /* DMG STA capa, bits [6] */
44949 {"Fast Link Adaptation", "wlan.dmg_capa.fast_link",
44950 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(6, 6)(((1U << ((6) - (6) + 1)) - 1) << (6)),
44951 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44952
44953 {&hf_ieee80211_tag_num_sectors, /* DMG STA capa, bits [7..13] */
44954 {"Total Number of Sectors", "wlan.dmg_capa.num_sectors",
44955 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_base_custom)((const void *) (size_t) (extra_one_base_custom)), GENMASK(13, 7)(((1U << ((13) - (7) + 1)) - 1) << (7)),
44956 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44957
44958 {&hf_ieee80211_tag_rxss_length, /* DMG STA capa, bits [14..19] */
44959 {"RXSS Length", "wlan.dmg_capa.rxss_len",
44960 FT_UINT24, BASE_CUSTOM, CF_FUNC(extra_one_mul_two_base_custom)((const void *) (size_t) (extra_one_mul_two_base_custom)), GENMASK(19, 14)(((1U << ((19) - (14) + 1)) - 1) << (14)),
44961 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44962
44963 {&hf_ieee80211_tag_reciprocity, /* DMG STA capa, bits [20] */
44964 {"DMG Antenna Reciprocity", "wlan.dmg_capa.reciprocity",
44965 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(20, 20)(((1U << ((20) - (20) + 1)) - 1) << (20)),
44966 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44967/* DMG STA capa, A-MPDU params, bits [21..26] */
44968 {&hf_ieee80211_tag_max_ampdu_exp, /* DMG STA capa, bits [21..23] */
44969 {"Maximum A-MPDU Length Exponent", "wlan.dmg_capa.max_ampdu_exp",
44970 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(23, 21)(((1U << ((23) - (21) + 1)) - 1) << (21)),
44971 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44972
44973 {&hf_ieee80211_tag_min_mpdu_spacing, /* DMG STA capa, bits [24..26] */
44974 {"Minimum MPDU Start Spacing", "wlan.dmg_capa.min_mpdu_spacing",
44975 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(26-24, 24-24)(((1U << ((26-24) - (24-24) + 1)) - 1) << (24-24)
)
,
44976 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44977
44978 {&hf_ieee80211_tag_ba_flow_control , /* DMG STA capa, bits [27] */
44979 {"BA with Flow Control", "wlan.dmg_capa.bs_flow_ctrl",
44980 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(27-24, 27-24)(((1U << ((27-24) - (27-24) + 1)) - 1) << (27-24)
)
,
44981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44982/* DMG STA capa, supported MCS set, bits [28..51] */
44983 {&hf_ieee80211_tag_max_sc_rx_mcs, /* DMG STA capa, bits [28..32] */
44984 {"Maximum SC Rx MCS", "wlan.dmg_capa.max_sc_rx_mcs",
44985 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(32-24, 28-24)(((1U << ((32-24) - (28-24) + 1)) - 1) << (28-24)
)
,
44986 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44987
44988 {&hf_ieee80211_tag_max_ofdm_rx_mcs, /* DMG STA capa, bits [33..37] */
44989 {"Maximum OFDM Rx MCS", "wlan.dmg_capa.max_ofdm_rx_mcs",
44990 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(37-24, 33-24)(((1U << ((37-24) - (33-24) + 1)) - 1) << (33-24)
)
,
44991 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44992
44993 {&hf_ieee80211_tag_max_sc_tx_mcs, /* DMG STA capa, bits [38..42] */
44994 {"Maximum SC Tx MCS", "wlan.dmg_capa.max_sc_tx_mcs",
44995 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(42-24, 38-24)(((1U << ((42-24) - (38-24) + 1)) - 1) << (38-24)
)
,
44996 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44997
44998 {&hf_ieee80211_tag_max_ofdm_tx_mcs, /* DMG STA capa, bits [43..47] */
44999 {"Maximum OFDM Tx MCS", "wlan.dmg_capa.max_ofdm_tx_mcs",
45000 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(47-24, 43-24)(((1U << ((47-24) - (43-24) + 1)) - 1) << (43-24)
)
,
45001 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45002
45003 {&hf_ieee80211_tag_low_power_supported, /* DMG STA capa, bits [48] */
45004 {"Low Power SC PHY Supported", "wlan.dmg_capa.low_power_supported",
45005 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(48-48, 48-48)(((1U << ((48-48) - (48-48) + 1)) - 1) << (48-48)
)
,
45006 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45007
45008 {&hf_ieee80211_tag_code_rate, /* DMG STA capa, bits [49] */
45009 {"Code Rate 13/16", "wlan.dmg_capa.code_rate",
45010 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(49-48, 49-48)(((1U << ((49-48) - (49-48) + 1)) - 1) << (49-48)
)
,
45011 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45012
45013 {&hf_ieee80211_tag_dtp, /* DMG STA capa, bits [52] */
45014 {"DTP Supported", "wlan.dmg_capa.dtp",
45015 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(52-48, 52-48)(((1U << ((52-48) - (52-48) + 1)) - 1) << (52-48)
)
,
45016 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45017
45018 {&hf_ieee80211_tag_appdu_supp, /* DMG STA capa, bits [53] */
45019 {"A-PPDU Supported", "wlan.dmg_capa.appdu_supp",
45020 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(53-48, 53-48)(((1U << ((53-48) - (53-48) + 1)) - 1) << (53-48)
)
,
45021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45022
45023 {&hf_ieee80211_tag_heartbeat, /* DMG STA capa, bits [54] */
45024 {"HeartBeat", "wlan.dmg_capa.heartbeat",
45025 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(54-48, 54-48)(((1U << ((54-48) - (54-48) + 1)) - 1) << (54-48)
)
,
45026 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45027
45028 {&hf_ieee80211_tag_other_aid, /* DMG STA capa, bits [55] */
45029 {"Supports Other_AID", "wlan.dmg_capa.other_aid",
45030 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(55-48, 55-48)(((1U << ((55-48) - (55-48) + 1)) - 1) << (55-48)
)
,
45031 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45032
45033 {&hf_ieee80211_tag_pattern_recip, /* DMG STA capa, bits [56] */
45034 {"Antenna Pattern Reciprocity", "wlan.dmg_capa.pattern_recip",
45035 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(56-48, 56-48)(((1U << ((56-48) - (56-48) + 1)) - 1) << (56-48)
)
,
45036 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45037
45038 {&hf_ieee80211_tag_heartbeat_elapsed, /* DMG STA capa, bits [57..59] */
45039 {"Heartbeat Elapsed Indication", "wlan.dmg_capa.heartbeat_elapsed",
45040 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(59-48, 57-48)(((1U << ((59-48) - (57-48) + 1)) - 1) << (57-48)
)
,
45041 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45042
45043 {&hf_ieee80211_tag_grant_ack_supp, /* DMG STA capa, bits [60] */
45044 {"Grant ACK Supported", "wlan.dmg_capa.grant_ack_supp",
45045 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(60-48, 60-48)(((1U << ((60-48) - (60-48) + 1)) - 1) << (60-48)
)
,
45046 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45047
45048 {&hf_ieee80211_tag_RXSSTxRate_supp, /* DMG STA capa, bits [61] */
45049 {"RXSSTxRate Supported", "wlan.dmg_capa.RXSSTxRate",
45050 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(61-48, 61-48)(((1U << ((61-48) - (61-48) + 1)) - 1) << (61-48)
)
,
45051 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45052/* 8.4.2.127.3 DMG PCP/AP Capability Information field */
45053 {&hf_ieee80211_tag_pcp_tddti, /* DMG PCP/AP capa, bits [0] */
45054 {"TDDTI", "wlan.dmg_capa.pcp_tdtti",
45055 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
45056 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45057
45058 {&hf_ieee80211_tag_pcp_PSA, /* DMG PCP/AP capa, bits [1] */
45059 {"Pseudo-static Allocations", "wlan.dmg_capa.pcp_psa",
45060 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)),
45061 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45062
45063 {&hf_ieee80211_tag_pcp_handover, /* DMG PCP/AP capa, bits [2] */
45064 {"PDP Handover", "wlan.dmg_capa.pcp_handover",
45065 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)),
45066 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45067
45068 {&hf_ieee80211_tag_pcp_max_assoc, /* DMG PCP/AP capa, bits [3..10] */
45069 {"Max Associated STA Number", "wlan.dmg_capa.pcp_max_assoc",
45070 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(10, 3)(((1U << ((10) - (3) + 1)) - 1) << (3)),
45071 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45072
45073 {&hf_ieee80211_tag_pcp_power_src, /* DMG PCP/AP capa, bits [11] */
45074 {"Power Source", "wlan.dmg_capa.pcp_power_src",
45075 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(11, 11)(((1U << ((11) - (11) + 1)) - 1) << (11)),
45076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45077
45078 {&hf_ieee80211_tag_pcp_decenter, /* DMG PCP/AP capa, bits [12] */
45079 {"Decentralized PCP/AP Clustering", "wlan.dmg_capa.pcp_decenter",
45080 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(12, 12)(((1U << ((12) - (12) + 1)) - 1) << (12)),
45081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45082
45083 {&hf_ieee80211_tag_pcp_forwarding, /* DMG PCP/AP capa, bits [13] */
45084 {"PCP Forwarding", "wlan.dmg_capa.pcp_forwarding",
45085 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(13, 13)(((1U << ((13) - (13) + 1)) - 1) << (13)),
45086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45087
45088 {&hf_ieee80211_tag_pcp_center, /* DMG PCP/AP capa, bits [14] */
45089 {"Centralized PCP/AP Clustering", "wlan.dmg_capa.pcp_center",
45090 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(14, 14)(((1U << ((14) - (14) + 1)) - 1) << (14)),
45091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45092
45093 {&hf_ieee80211_tag_sta_beam_track, /* DMG STA beam track capa*/
45094 {"STA Beam Tracking Time Limit", "wlan.dmg_capa.beam_track",
45095 FT_UINT16, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_microseconds)((0 ? (const struct unit_name_string*)0 : ((&units_microseconds
))))
, 0,
45096 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45097
45098 {&hf_ieee80211_tag_ext_sc_mcs_max_tx, /* DMG STA Ext SC MCS Capa: Max TX*/
45099 {"Extended SC Max Tx MCS Name", "wlan.dmg_capa.ext_sc_mcs_capa_max_tx",
45100 FT_UINT8, BASE_DEC, VALS(extended_sc_mcs)((0 ? (const struct _value_string*)0 : ((extended_sc_mcs)))), GENMASK(2, 0)(((1U << ((2) - (0) + 1)) - 1) << (0)),
45101 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45102
45103 {&hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8, /* DMG STA Ext SC MCS Capa: Tx code rate 7/8*/
45104 {"Extended SC Tx MCS code rate 7/8", "wlan.dmg_capa.ext_sc_mcs_tx_code_7_8",
45105 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, GENMASK(3, 3)(((1U << ((3) - (3) + 1)) - 1) << (3)),
45106 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45107
45108 {&hf_ieee80211_tag_ext_sc_mcs_max_rx, /* DMG STA Ext SC MCS Capa: Max RX*/
45109 {"Extended SC Max Rx MCS Name", "wlan.dmg_capa.ext_sc_mcs_capa_max_rx",
45110 FT_UINT8, BASE_DEC, VALS(extended_sc_mcs)((0 ? (const struct _value_string*)0 : ((extended_sc_mcs)))), GENMASK(6, 4)(((1U << ((6) - (4) + 1)) - 1) << (4)),
45111 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45112
45113 {&hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8, /* DMG STA Ext SC MCS Capa: Rx code rate 7/8*/
45114 {"Extended SC Rx MCS code rate 7/8", "wlan.dmg_capa.ext_sc_mcs_rx_code_7_8",
45115 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, GENMASK(7, 7)(((1U << ((7) - (7) + 1)) - 1) << (7)),
45116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45117
45118 {&hf_ieee80211_tag_max_basic_sf_amsdu, /* DMG Max Number of Basic Subframes in an A-MSDU*/
45119 {"Max Number of Basic Subframes in an A-MSDU", "wlan.dmg_capa.max_basic_sf_amsdu",
45120 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(max_basic_sf_amsdu)((0 ? (const struct _range_string*)0 : ((max_basic_sf_amsdu))
))
, 0,
45121 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45122
45123 {&hf_ieee80211_tag_max_short_sf_amsdu, /* DMG Max Number of short Subframes in an A-MSDU*/
45124 {"Max Number of short Subframes in an A-MSDU", "wlan.dmg_capa.max_short_sf_amsdu",
45125 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(max_short_sf_amsdu)((0 ? (const struct _range_string*)0 : ((max_short_sf_amsdu))
))
, 0,
45126 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45127
45128 {&hf_ieee80211_tag_PSRSI,
45129 {"PS Request Suspension Interval", "wlan.dmg_oper.psrsi",
45130 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45131 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45132
45133 {&hf_ieee80211_tag_min_BHI_duration,
45134 {"Min BHI Duration", "wlan.dmg_oper.min_BHI_duration",
45135 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45136 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45137
45138 {&hf_ieee80211_tag_brdct_sta_info_dur,
45139 {"Broadcast STA Info Duration", "wlan.dmg_oper.brdcst_sta_info_dur",
45140 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45141 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45142
45143 {&hf_ieee80211_tag_assoc_resp_confirm_time,
45144 {"Associated Response Confirm Time", "wlan.dmg_oper.assoc_resp_confirm_time",
45145 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45146 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45147
45148 {&hf_ieee80211_tag_min_pp_duration,
45149 {"Min PP Duration", "wlan.dmg_oper.min_pp_duration",
45150 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45151 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45152
45153 {&hf_ieee80211_tag_SP_idle_timeout,
45154 {"SP Idle Timeout", "wlan.dmg_oper.SP_idle_timeout",
45155 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45157
45158 {&hf_ieee80211_tag_max_lost_beacons,
45159 {"Max Lost Beacons", "wlan.dmg_oper.max_lost_beacons",
45160 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45162
45163 {&hf_ieee80211_tag_type,
45164 {"Type", "wlan.sctor_id.type",
45165 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000f,
45166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45167
45168 {&hf_ieee80211_tag_tap1,
45169 {"Tap 1", "wlan.sctor_id.tap1",
45170 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000003f0,
45171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45172
45173 {&hf_ieee80211_tag_state1,
45174 {"State 1", "wlan.sctor_id.state1",
45175 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000fc00,
45176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45177
45178 {&hf_ieee80211_tag_tap2,
45179 {"Tap 2", "wlan.sctor_id.tap2",
45180 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00ff0000,
45181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45182
45183 {&hf_ieee80211_tag_state2,
45184 {"State 2", "wlan.sctor_id.state2",
45185 FT_UINT32, BASE_HEX, NULL((void*)0), 0xff000000,
45186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45187
45188 {&hf_ieee80211_tag_allocation_id,
45189 {"Allocation ID", "wlan.ext_sched.alloc_id",
45190 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000f,
45191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45192
45193 {&hf_ieee80211_tag_allocation_type,
45194 {"Allocation Type", "wlan.ext_sched.alloc_type",
45195 FT_UINT16, BASE_DEC, VALS(allocation_type)((0 ? (const struct _value_string*)0 : ((allocation_type)))), 0x0070,
45196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45197
45198 {&hf_ieee80211_tag_pseudo_static,
45199 {"Pseudo-static", "wlan.ext_sched.p_static",
45200 FT_BOOLEAN, 16, NULL((void*)0), 0x0080,
45201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45202
45203 {&hf_ieee80211_tag_truncatable,
45204 {"Truncatable", "wlan.ext_sched.truncatable",
45205 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
45206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45207
45208 {&hf_ieee80211_tag_extendable,
45209 {"Extendable", "wlan.ext_sched.extendable",
45210 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
45211 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45212
45213 {&hf_ieee80211_tag_pcp_active,
45214 {"PCP Active", "wlan.ext_sched.pcp_active",
45215 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
45216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45217
45218 {&hf_ieee80211_tag_lp_sc_used,
45219 {"LP SC Used", "wlan.ext_sched.lp_sc_used",
45220 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
45221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45222
45223 {&hf_ieee80211_tag_src_aid,
45224 {"Source AID", "wlan.ext_sched.src_id",
45225 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45227
45228 {&hf_ieee80211_tag_dest_aid,
45229 {"Destination AID", "wlan.ext_sched.dest_id",
45230 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45231 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45232
45233 {&hf_ieee80211_tag_alloc_start,
45234 {"Allocation Start", "wlan.ext_sched.alloc_start",
45235 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45236 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45237
45238 {&hf_ieee80211_tag_alloc_block_duration,
45239 {"Allocation Block Duration", "wlan.ext_sched.block_duration",
45240 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45241 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45242
45243 {&hf_ieee80211_tag_num_blocks,
45244 {"Number of Blocks", "wlan.ext_sched.num_blocks",
45245 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45246 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45247
45248 {&hf_ieee80211_tag_alloc_block_period,
45249 {"Allocation Block Period", "wlan.ext_sched.alloc_block_period",
45250 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45251 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45252
45253 {&hf_ieee80211_tag_aid,
45254 {"AID", "wlan.sta_avail.aid",
45255 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00ff,
45256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45257
45258 {&hf_ieee80211_tag_cbap,
45259 {"CBAP", "wlan.sta_avail.cbap",
45260 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
45261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45262
45263 {&hf_ieee80211_tag_pp_avail,
45264 {"PP Available", "wlan.sta_avail.pp_avail",
45265 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
45266 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45267
45268 {&hf_ieee80211_tag_next_ati_start_time,
45269 {"Start Time", "wlan.next_ati.start_time",
45270 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45272
45273 {&hf_ieee80211_tag_next_ati_duration,
45274 {"ATI Duration", "wlan.next_ati.duration",
45275 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45277
45278 {&hf_ieee80211_tag_old_bssid,
45279 {"Old BSSID", "wlan.pcp_handover.old_bssid",
45280 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45281 "OLD_BSSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45282
45283 {&hf_ieee80211_tag_new_pcp_addr,
45284 {"New PCP Address", "wlan.pcp_handover.new_pcp_addr",
45285 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45286 "New_PCP_Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45287
45288 {&hf_ieee80211_tag_bssid,
45289 {"BSSID", "wlan.quiet_res.bssid",
45290 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45291 "BSS-ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45292
45293 {&hf_ieee80211_tag_duplex_relay,
45294 {"Duplex", "wlan.relay_capabilities.duplex",
45295 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45297
45298 {&hf_ieee80211_tag_cooperation_relay,
45299 {"Cooperation", "wlan.relay_capabilities.cooperation",
45300 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
45301 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45302
45303 {&hf_ieee80211_tag_tx_mode,
45304 {"TX-Mode", "wlan.relay_trans_param.tx_mode",
45305 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
45306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45307
45308 {&hf_ieee80211_tag_link_change_interval,
45309 {"Link Change Interval", "wlan.relay_trans_param.link_change_interval",
45310 FT_UINT8, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x0,
45311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45312
45313 {&hf_ieee80211_tag_data_sensing_time,
45314 {"Data Sensing Time", "wlan.relay_trans_param.data_sensing_time",
45315 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45317
45318 {&hf_ieee80211_tag_first_period,
45319 {"First Period", "wlan.relay_trans_param.first_period",
45320 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45322
45323 {&hf_ieee80211_tag_second_period,
45324 {"Second Period", "wlan.relay_trans_param.second_period",
45325 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45327
45328 {&hf_ieee80211_tag_initiator,
45329 {"Initiator", "wlan.beam_refine.initiator",
45330 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000001,
45331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45332
45333 {&hf_ieee80211_tag_tx_train_res,
45334 {"TX-train-response", "wlan.beam_refine.tx_train_res",
45335 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000002,
45336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45337
45338 {&hf_ieee80211_tag_rx_train_res,
45339 {"RX-train-response", "wlan.beam_refine.rx_train_res",
45340 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000004,
45341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45342
45343 {&hf_ieee80211_tag_tx_trn_ok,
45344 {"TX-TRN-OK", "wlan.beam_refine.tx_trn_ok",
45345 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000008,
45346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45347
45348 {&hf_ieee80211_tag_txss_fbck_req,
45349 {"TXSS-FBCK-REQ", "wlan.beam_refine.txss_fbck_req",
45350 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000010,
45351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45352
45353 {&hf_ieee80211_tag_bs_fbck,
45354 {"BS-FBCK", "wlan.beam_refine.bs_fbck",
45355 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000007e0,
45356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45357
45358 {&hf_ieee80211_tag_bs_fbck_antenna_id,
45359 {"BS-FBCK Antenna ID", "wlan.beam_refine.bs_fbck_antenna_id",
45360 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000001800,
45361 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45362
45363 {&hf_ieee80211_tag_snr_requested,
45364 {"SNR Requested", "wlan.beam_refine.snr_req",
45365 FT_BOOLEAN, 40, NULL((void*)0), 0x0000002000,
45366 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45367
45368 {&hf_ieee80211_tag_channel_measurement_requested,
45369 {"Channel Measurement Requested", "wlan.beam_refine.ch_measure_req",
45370 FT_BOOLEAN, 40, NULL((void*)0), 0x0000004000,
45371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45372
45373 {&hf_ieee80211_tag_number_of_taps_requested,
45374 {"Number of Taps Requested", "wlan.beam_refine.taps_req",
45375 FT_UINT40, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(number_of_taps_values)((0 ? (const struct _val64_string*)0 : ((number_of_taps_values
))))
, 0x0000018000,
45376 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45377
45378 {&hf_ieee80211_tag_sector_id_order_req,
45379 {"Sector ID Order Requested", "wlan.beam_refine.sector_id_req",
45380 FT_BOOLEAN, 40, NULL((void*)0), 0x0000020000,
45381 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45382
45383 {&hf_ieee80211_tag_snr_present,
45384 {"SNR Present", "wlan.beam_refine.snr_present",
45385 FT_BOOLEAN, 40, NULL((void*)0), 0x0000040000,
45386 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45387
45388 {&hf_ieee80211_tag_channel_measurement_present,
45389 {"Channel Measurement Present", "wlan.beam_refine.ch_measure_present",
45390 FT_BOOLEAN, 40, NULL((void*)0), 0x0000080000,
45391 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45392
45393 {&hf_ieee80211_tag_tap_delay_present,
45394 {"Tap Delay Present", "wlan.beam_refine.tap_delay_present",
45395 FT_BOOLEAN, 40, NULL((void*)0), 0x0000100000,
45396 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45397
45398 {&hf_ieee80211_tag_number_of_taps_present,
45399 {"Number of Taps Present", "wlan.beam_refine.taps_present",
45400 FT_UINT40, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(number_of_taps_values)((0 ? (const struct _val64_string*)0 : ((number_of_taps_values
))))
, 0x0000600000,
45401 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45402
45403 {&hf_ieee80211_tag_number_of_measurement,
45404 {"Number of Measurements", "wlan.beam_refine.num_measurement",
45405 FT_UINT40, BASE_DEC, NULL((void*)0), 0x003f800000,
45406 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45407
45408 {&hf_ieee80211_tag_sector_id_order_present,
45409 {"Sector ID Order Present", "wlan.beam_refine.sector_id_present",
45410 FT_BOOLEAN, 40, NULL((void*)0), 0x0040000000,
45411 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45412
45413 {&hf_ieee80211_tag_number_of_beams,
45414 {"Number of Beams", "wlan.beam_refine.num_beams",
45415 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0f80000000,
45416 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45417
45418 {&hf_ieee80211_tag_mid_extension,
45419 {"MID Extension", "wlan.beam_refine.mid_ext",
45420 FT_BOOLEAN, 40, NULL((void*)0), 0x1000000000,
45421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45422
45423 {&hf_ieee80211_tag_capability_request,
45424 {"Capability Request", "wlan.beam_refine.cap_req",
45425 FT_BOOLEAN, 40, NULL((void*)0), 0x2000000000,
45426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45427
45428 {&hf_ieee80211_tag_beam_refine_reserved,
45429 {"Reserved", "wlan.beam_refine.reserved",
45430 FT_UINT40, BASE_HEX, NULL((void*)0), 0xc000000000,
45431 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45432
45433 {&hf_ieee80211_tag_nextpcp_list,
45434 {"AID of NextPCP", "wlan.next_pcp.list",
45435 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45436 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45437
45438 {&hf_ieee80211_tag_nextpcp_token,
45439 {"NextPCP List Token", "wlan.next_pcp.token",
45440 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45441 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45442
45443 {&hf_ieee80211_tag_remaining_BI,
45444 {"Remaining BI's", "wlan.pcp_handover.remaining_BIs",
45445 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45447
45448 {&hf_ieee80211_tag_request_token,
45449 {"Request Token", "wlan.request_token",
45450 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45451 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45452
45453 {&hf_ieee80211_tag_bi_start_time,
45454 {"BI Start Time", "wlan.bi_start_time",
45455 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45456 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45457
45458 {&hf_ieee80211_tag_sleep_cycle,
45459 {"Sleep Cycle", "wlan.sleep_cycle",
45460 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45461 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45462
45463 {&hf_ieee80211_tag_num_awake_bis,
45464 {"Number of Awake/Doze BIs", "wlan.num_awake_bis",
45465 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45466 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45467
45468 {&hf_ieee80211_ff_dmg_action_code,
45469 {"DMG Action", "wlan.fixed.dmg_act",
45470 FT_UINT8, BASE_HEX, VALS(ff_dmg_action_flags)((0 ? (const struct _value_string*)0 : ((ff_dmg_action_flags)
)))
, 0,
45471 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45472
45473 {&hf_ieee80211_ff_unprotected_dmg_action_code,
45474 {"Unprotected DMG Action", "wlan.fixed.unprotected_dmg_act",
45475 FT_UINT8, BASE_HEX, VALS(ff_unprotected_dmg_action_flags)((0 ? (const struct _value_string*)0 : ((ff_unprotected_dmg_action_flags
))))
, 0,
45476 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45477
45478 {&hf_ieee80211_ff_dmg_pwr_mgmt,
45479 {"DMG Power Management", "wlan.dmg.pwr_mgmt",
45480 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45482
45483 {&hf_ieee80211_ff_subject_address,
45484 {"Subject Address", "wlan.dmg.subject_addr",
45485 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45486 "MAC address of requested STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45487
45488 {&hf_ieee80211_ff_handover_reason,
45489 {"Handover Reason", "wlan.dmg.handover_reason",
45490 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45492
45493 {&hf_ieee80211_ff_handover_remaining_bi,
45494 {"Handover Remaining BI", "wlan.dmg.handover_remaining_bi",
45495 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45497
45498 {&hf_ieee80211_ff_handover_result,
45499 {"Handover Result", "wlan.dmg.handover_result",
45500 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45501 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45502
45503 {&hf_ieee80211_ff_handover_reject_reason,
45504 {"Handover Reject Reason", "wlan.dmg.handover_reject_reason",
45505 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45506 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45507
45508 {&hf_ieee80211_ff_destination_reds_aid,
45509 {"Destination REDS AID", "wlan.dmg.destination_reds_aid",
45510 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45511 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45512
45513 {&hf_ieee80211_ff_destination_aid,
45514 {"Destination AID", "wlan.dmg.destination_aid",
45515 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45516 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45517
45518 {&hf_ieee80211_ff_relay_aid,
45519 {"Relay AID", "wlan.dmg.relay_aid",
45520 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45521 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45522
45523 {&hf_ieee80211_ff_source_aid,
45524 {"Source AID", "wlan.dmg.source_aid",
45525 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45526 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45527
45528 {&hf_ieee80211_ff_timing_offset,
45529 {"Timing Offset", "wlan.dmg.timing_offset",
45530 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45532
45533 {&hf_ieee80211_ff_sampling_frequency_offset,
45534 {"Sampling Frequency Offset", "wlan.dmg.sampling_frequency_offset",
45535 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45537
45538 {&hf_ieee80211_ff_relay_operation_type,
45539 {"Relay Operation Type", "wlan.dmg.relay_operation_type",
45540 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45542
45543 {&hf_ieee80211_ff_peer_sta_aid,
45544 {"Peer STA AID", "wlan.dmg.peer_sta_aid",
45545 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45547
45548 {&hf_ieee80211_ff_snr,
45549 {"SNR", "wlan.dmg.snr",
45550 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45552
45553 {&hf_ieee80211_ff_internal_angle,
45554 {"Internal Angle", "wlan.dmg.internal_angle",
45555 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfe,
45556 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45557
45558 {&hf_ieee80211_ff_recommend,
45559 {"Recommend", "wlan.dmg.recommend",
45560 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45561 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45562
45563 {&hf_ieee80211_ff_fst_action_code,
45564 {"FST Action Code", "wlan.fst.action_code",
45565 FT_UINT8, BASE_HEX, VALS(ff_fst_action_flags)((0 ? (const struct _value_string*)0 : ((ff_fst_action_flags)
)))
, 0,
45566 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45567
45568 {&hf_ieee80211_ff_robust_av_streaming_action_code,
45569 {"Robust AV Streaming Action Code", "wlan.robust_av_streaming.action_code",
45570 FT_UINT8, BASE_HEX, VALS(ff_robust_av_streaming_action_flags)((0 ? (const struct _value_string*)0 : ((ff_robust_av_streaming_action_flags
))))
, 0,
45571 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45572
45573 {&hf_ieee80211_ff_llt,
45574 {"Link Loss Timeout", "wlan.fst.llt",
45575 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45577
45578 {&hf_ieee80211_ff_fsts_id,
45579 {"FSTS ID", "wlan.session_trans.fsts_id",
45580 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45582
45583 {&hf_ieee80211_ff_mmpdu_len,
45584 {"MMPDU Length", "wlan.fst.mmpdu_length",
45585 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45587
45588 {&hf_ieee80211_ff_mmpdu_ctrl,
45589 {"MMPDU Control", "wlan.fst.mmpdu_ctrl",
45590 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
45591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45592
45593 {&hf_ieee80211_ff_oct_mmpdu,
45594 {"OCT MMPDU", "wlan.fst.oct_mmpdu",
45595 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45597
45598 {&hf_ieee80211_ff_scs_scsid,
45599 {"SCSID", "wlan.scs.scs_status_list.scsid",
45600 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45601
45602 {&hf_ieee80211_ff_scs_status,
45603 {"Status", "wlan.scs.scs_status_list.status",
45604 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
45605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45606
45607 {&hf_ieee80211_ff_scs_response_count,
45608 {"Count", "wlan.scs.scs_response.count",
45609 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45610
45611 {&hf_ieee80211_ff_vht_mimo_cntrl,
45612 {"VHT MIMO Control", "wlan.vht.mimo_control.control",
45613 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
45614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45615
45616 {&hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
45617 {"Nc Index", "wlan.vht.mimo_control.ncindex",
45618 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_nc_index_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_nc_index_vals
))))
, 0x000007,
45619 "Number of Columns Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45620
45621 {&hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
45622 {"Nr Index", "wlan.vht.mimo_control.nrindex",
45623 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_nr_index_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_nr_index_vals
))))
, 0x000038,
45624 "Number of Rows Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45625
45626 {&hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
45627 {"Channel Width", "wlan.vht.mimo_control.chanwidth",
45628 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_channel_width_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_channel_width_vals
))))
, 0x0000C0,
45629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45630
45631 {&hf_ieee80211_ff_vht_mimo_cntrl_grouping,
45632 {"Grouping (Ng)", "wlan.vht.mimo_control.grouping",
45633 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_grouping_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_grouping_vals
))))
, 0x000300,
45634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45635
45636 {&hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
45637 {"Codebook Information", "wlan.vht.mimo_control.codebookinfo",
45638 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000400,
45639 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45640
45641 {&hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
45642 {"Feedback Type", "wlan.vht.mimo_control.feedbacktype",
45643 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_feedback_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_feedback_vals
))))
, 0x000800,
45644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45645
45646 {&hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
45647 {"Remaining Feedback Segments", "wlan.vht.mimo_control.remainingfeedbackseg",
45648 FT_UINT24, BASE_HEX, NULL((void*)0), 0x007000,
45649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45650
45651 {&hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
45652 {"First Feedback Segments", "wlan.vht.mimo_control.firstfeedbackseg",
45653 FT_UINT24, BASE_HEX, NULL((void*)0), 0x008000,
45654 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45655
45656 {&hf_ieee80211_ff_vht_mimo_cntrl_reserved,
45657 {"Reserved", "wlan.vht.mimo_control.reserved",
45658 FT_UINT24, BASE_HEX, NULL((void*)0), 0x030000,
45659 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45660
45661 {&hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
45662 {"Sounding Dialog Token Number", "wlan.vht.mimo_control.sounding_dialog_token_nbr",
45663 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFC0000,
45664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45665
45666 {&hf_ieee80211_ff_vht_action,
45667 {"VHT Action", "wlan.vht.action",
45668 FT_UINT8, BASE_DEC, VALS(vht_action_vals)((0 ? (const struct _value_string*)0 : ((vht_action_vals)))), 0,
45669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45670
45671 {&hf_ieee80211_vht_compressed_beamforming_report,
45672 {"VHT Compressed Beamforming Report", "wlan.vht.compressed_beamforming_report",
45673 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45675
45676 {&hf_ieee80211_vht_mu_exclusive_beamforming_report,
45677 {"VHT MU Exclusive Beamforming Report","wlan.vht.exclusive_beamforming_report",
45678 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45679 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45680
45681 {&hf_ieee80211_vht_compressed_beamforming_report_snr,
45682 {"Signal to Noise Ratio (SNR)", "wlan.vht.compressed_beamforming_report.snr",
45683 FT_INT8, BASE_DEC, NULL((void*)0), 0,
45684 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45685
45686 {&hf_ieee80211_vht_compressed_beamform_scidx,
45687 {"SCIDX", "wlan.vht.compressed_beamforming_report.scidx",
45688 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45689
45690 {&hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr,
45691 {"Delta SNR for space-time stream Nc for subcarrier k", "wlan.vht.exclusive_beamforming_report.delta_snr",
45692 FT_NONE, BASE_NONE, NULL((void*)0), 0,
45693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45694
45695 {&hf_ieee80211_vht_group_id_management,
45696 {"Group ID Management", "wlan.vht.group_id_management",
45697 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45699
45700 {&hf_ieee80211_vht_membership_status_array,
45701 {"Membership Status Array", "wlan.vht.membership_status_array",
45702 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45704
45705 {&hf_ieee80211_vht_user_position_array,
45706 {"User Position Array", "wlan.vht.user_position_array",
45707 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45709
45710 {&hf_ieee80211_vht_membership_status_field,
45711 {"Membership Status Field", "wlan.vht.membership_status_array.field",
45712 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45714
45715 {&hf_ieee80211_vht_user_position_field,
45716 {"User Position Field", "wlan.vht.user_position_array.field",
45717 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45719
45720 {&hf_ieee80211_vht_operation_mode_notification,
45721 {"Operation Mode Notification", "wlan.vht.operation_mode_notification",
45722 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45724
45725 {&hf_ieee80211_ff_he_action,
45726 {"HE Action", "wlan.he.action",
45727 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(he_action_rvals)((0 ? (const struct _range_string*)0 : ((he_action_rvals)))), 0,
45728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45729
45730 {&hf_ieee80211_ff_protected_he_action,
45731 {"Protected HE Action", "wlan.he.protected_action",
45732 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(protected_he_action_rvals)((0 ? (const struct _range_string*)0 : ((protected_he_action_rvals
))))
, 0,
45733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45734
45735 {&hf_ieee80211_ff_protected_eht_action,
45736 {"Protected EHT Action", "wlan.eht.protected_action",
45737 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(protected_eht_action_rvals)((0 ? (const struct _range_string*)0 : ((protected_eht_action_rvals
))))
, 0,
45738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45739
45740 {&hf_ieee80211_ff_protected_ftm_action,
45741 {"Protected FTM Action", "wlan.ftm.protected_action",
45742 FT_UINT8, BASE_DEC, VALS(protected_ftm_action_vals)((0 ? (const struct _value_string*)0 : ((protected_ftm_action_vals
))))
, 0,
45743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45744
45745 {&hf_ieee80211_ff_eht_action,
45746 {"EHT Action", "wlan.eht.action",
45747 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(eht_action_rvals)((0 ? (const struct _range_string*)0 : ((eht_action_rvals)))), 0,
45748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45749
45750 {&hf_ieee80211_he_mimo_control_nc_index,
45751 {"Nc Index", "wlan.he.mimo.nc_index",
45752 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_mimo_cntrl_nc_index_vals)((0 ? (const struct _val64_string*)0 : ((he_mimo_cntrl_nc_index_vals
))))
,
45753 0x0000000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45754
45755 {&hf_ieee80211_he_mimo_control_nr_index,
45756 {"Nr Index", "wlan.he.mimo.nr_index",
45757 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_mimo_cntrl_nr_index_vals)((0 ? (const struct _val64_string*)0 : ((he_mimo_cntrl_nr_index_vals
))))
,
45758 0x0000000038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45759
45760 {&hf_ieee80211_he_mimo_control_bw,
45761 {"BW", "wlan.he.mimo.bw",
45762 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45763
45764 {&hf_ieee80211_he_mimo_control_grouping,
45765 {"Grouping", "wlan.he.mimo.grouping",
45766 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_mimo_cntrl_grouping_flags)((0 ? (const struct _val64_string*)0 : ((he_mimo_cntrl_grouping_flags
))))
,
45767 0x0000000100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45768
45769 {&hf_ieee80211_he_mimo_control_codebook_info,
45770 {"Codebook Information", "wlan.he.mimo.codebook_info",
45771 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45772
45773 {&hf_ieee80211_he_mimo_control_feedback_type,
45774 {"Feedback Type", "wlan.he.mimo.feedback_type",
45775 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_mimo_cntrl_feedback_vals)((0 ? (const struct _val64_string*)0 : ((he_mimo_cntrl_feedback_vals
))))
,
45776 0x0000000C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45777
45778 {&hf_ieee80211_he_mimo_control_remaining_feedback_segs,
45779 {"Remaining Feedback Segments", "wlan.he.mimo.remaining_feedback_segs",
45780 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45781
45782 {&hf_ieee80211_he_mimo_control_first_feedback_seg,
45783 {"First Feedback Segment", "wlan.he.mimo.first_feedback_seg",
45784 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45785
45786 {&hf_ieee80211_he_mimo_control_ru_start_index,
45787 {"RU Start Index", "wlan.he.mimo.ru_start_index",
45788 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00007F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45789
45790 {&hf_ieee80211_he_mimo_control_ru_end_index,
45791 {"RU End Index", "wlan.he.mimo.ru_end_index",
45792 FT_UINT40, BASE_HEX, NULL((void*)0), 0x003F800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45793
45794 {&hf_ieee80211_he_mimo_control_sounding_dialog_token_num,
45795 {"Sounding Dialog Token Number", "wlan.he.mimo.sounding_dialog_token_num",
45796 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0FC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45797
45798 {&hf_ieee80211_he_mimo_control_reserved,
45799 {"Reserved", "wlan.he.mimo.reserved",
45800 FT_UINT40, BASE_HEX, NULL((void*)0), 0xF000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45801
45802 {&hf_ieee80211_he_mimo_control_field,
45803 {"HE MIMO Control", "wlan.he.action.he_mimo_control",
45804 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45805
45806 {&hf_ieee80211_he_compressed_beamforming_report_snr,
45807 {"AvgSNR", "wlan.he.mimo.beamforming_report.avgsnr",
45808 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45809
45810 {&hf_ieee80211_he_compressed_beamform_scidx,
45811 {"SCIDX", "wlan.he.action.he_mimo_control.scidx",
45812 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45813
45814 {&hf_ieee80211_he_beamforming_report_len,
45815 {"Report Len", "wlan.he.action.he_mimo_control.report_len",
45816 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45817
45818 {&hf_ieee80211_tag_tspec_allocation_id,
45819 {"Allocation ID", "wlan.dmg_tspec.allocation_id",
45820 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000f,
45821 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45822
45823 {&hf_ieee80211_tag_tspec_allocation_type,
45824 {"Allocation Type", "wlan.dmg_tspec.allocation_type",
45825 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000070,
45826 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45827
45828 {&hf_ieee80211_tag_tspec_allocation_format,
45829 {"Allocation Format", "wlan.dmg_tspec.allocation_format",
45830 FT_BOOLEAN, 24, NULL((void*)0), 0x000080,
45831 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45832
45833 {&hf_ieee80211_tag_tspec_pseudo_static,
45834 {"Pseudo Static", "wlan.dmg_tspec.pseudo_static",
45835 FT_BOOLEAN, 24, NULL((void*)0), 0x000100,
45836 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45837
45838 {&hf_ieee80211_tag_tspec_truncatable,
45839 {"Truncatable", "wlan.dmg_tspec.truncatable",
45840 FT_BOOLEAN, 24, NULL((void*)0), 0x000200,
45841 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45842
45843 {&hf_ieee80211_tag_tspec_extendable,
45844 {"Extendable", "wlan.dmg_tspec.extendable",
45845 FT_BOOLEAN, 24, NULL((void*)0), 0x000400,
45846 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45847
45848 {&hf_ieee80211_tag_tspec_lp_sc_used,
45849 {"LP SC Usec", "wlan.dmg_tspec.lp_sc_used",
45850 FT_BOOLEAN, 24, NULL((void*)0), 0x000800,
45851 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45852
45853 {&hf_ieee80211_tag_tspec_up,
45854 {"UP", "wlan.dmg_tspec.up",
45855 FT_UINT24, BASE_HEX, NULL((void*)0), 0x007000,
45856 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45857
45858 {&hf_ieee80211_tag_tspec_dest_aid,
45859 {"Destination AID", "wlan.dmg_tspec.dest_aid",
45860 FT_UINT24, BASE_HEX, NULL((void*)0), 0x7f8000,
45861 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45862
45863 {&hf_ieee80211_tag_tspec_allocation_period,
45864 {"Allocation Period", "wlan.dmg_tspec.allocation_period",
45865 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45866 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45867
45868 {&hf_ieee80211_tag_tspec_min_allocation,
45869 {"Minimal Allocation", "wlan.dmg_tspec.min_allocation",
45870 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45871 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45872
45873 {&hf_ieee80211_tag_tspec_max_allocation,
45874 {"Maximal Allocation", "wlan.dmg_tspec.max_allocation",
45875 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45876 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45877
45878 {&hf_ieee80211_tag_tspec_min_duration,
45879 {"Minimal Duration", "wlan.dmg_tspec.min_duration",
45880 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45881 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45882
45883 {&hf_ieee80211_tag_tspec_num_of_constraints,
45884 {"Number Of Constraints", "wlan.dmg_tspec.num_of_constraints",
45885 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45886 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45887
45888 {&hf_ieee80211_tag_tspec_tsconst_start_time,
45889 {"TS Constraint Start Time", "wlan.dmg_tspec.tsconst.start_time",
45890 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45891 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45892
45893 {&hf_ieee80211_tag_tspec_tsconst_duration,
45894 {"TS Constraint Duration", "wlan.dmg_tspec.tsconst.duration",
45895 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45896 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45897
45898 {&hf_ieee80211_tag_tspec_tsconst_period,
45899 {"TS Constraint Period", "wlan.dmg_tspec.tsconst.period",
45900 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45901 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45902
45903 {&hf_ieee80211_tag_tspec_tsconst_interferer_mac,
45904 {"TS Constraint Interferer MAC Address", "wlan.dmg_tspec.tsconst.interferer_mac",
45905 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45906 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45907
45908 {&hf_ieee80211_tag_channel_measurement_feedback_relative_I,
45909 {"Channel Measurement Feedback Relative I", "wlan.ch_meas_fb.relative_I",
45910 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45911 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45912
45913 {&hf_ieee80211_tag_channel_measurement_feedback_relative_Q,
45914 {"Channel Measurement Feedback Relative Q", "wlan.ch_meas_fb.relative_Q",
45915 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45916 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45917
45918 {&hf_ieee80211_tag_channel_measurement_feedback_tap_delay,
45919 {"Channel Measurement Feedback Tap Delay", "wlan.ch_meas_fb.tap_delay",
45920 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45921 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45922
45923 {&hf_ieee80211_tag_channel_measurement_feedback_sector_id,
45924 {"Channel Measurement Feedback Sector ID", "wlan.ch_meas_fb.sector_id",
45925 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfc,
45926 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45927
45928 {&hf_ieee80211_tag_channel_measurement_feedback_antenna_id,
45929 {"Channel Measurement Feedback Antenna ID", "wlan.ch_meas_fb.antenna_id",
45930 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45931 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45932
45933 {&hf_ieee80211_tag_awake_window,
45934 {"Awake Window", "wlan.awake_window",
45935 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45936 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45937
45938 {&hf_ieee80211_tag_addba_ext_no_frag,
45939 {"ADDBA No Fragmentation", "wlan.addba.no_frag",
45940 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45941 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45942
45943 {&hf_ieee80211_tag_addba_ext_he_fragmentation_operation,
45944 {"ADDBA HE Fragmentation Operation", "wlan.addba.he_frag_oper",
45945 FT_UINT8, BASE_HEX, NULL((void*)0), 0x06,
45946 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45947
45948 {&hf_ieee80211_tag_addba_ext_reserved,
45949 {"Reserved", "wlan.addba.reserved",
45950 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18,
45951 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45952
45953 {&hf_ieee80211_tag_addba_ext_buffer_size,
45954 {"Extended Buffer Size", "wlan.addba.extended_buffer_size",
45955 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45956
45957 {&hf_ieee80211_tag_multi_band_ctrl_sta_role,
45958 {"STA Rold", "wlan.multi_band.ctrl_sta_role",
45959 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
45960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45961
45962 {&hf_ieee80211_tag_multi_band_ctrl_addr_present,
45963 {"STA MAC Address Present", "wlan.multi_band.ctrl_addr_present",
45964 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
45965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45966
45967 {&hf_ieee80211_tag_multi_band_ctrl_cipher_present,
45968 {"PCS Present", "wlan.multi_band.ctrl_cipher_present",
45969 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
45970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45971
45972 {&hf_ieee80211_tag_multi_band_oper_class,
45973 {"Operating Class", "wlan.multi_band.oper_class",
45974 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45976
45977 {&hf_ieee80211_tag_multi_band_channel_number,
45978 {"Channel Number", "wlan.multi_band.channel_number",
45979 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45981
45982 {&hf_ieee80211_tag_multi_band_tsf_offset,
45983 {"TSF Offset", "wlan.multi_band.tsf_offset",
45984 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
45985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45986
45987 {&hf_ieee80211_tag_multi_band_conn_ap,
45988 {"Connection Capability AP", "wlan.multi_band.conn_ap",
45989 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
45990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45991
45992 {&hf_ieee80211_tag_multi_band_conn_pcp,
45993 {"Connection Capability PCP", "wlan.multi_band.conn_pcp",
45994 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
45995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45996
45997 {&hf_ieee80211_tag_multi_band_conn_dls,
45998 {"Connection Capability DLS", "wlan.multi_band.conn_dls",
45999 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
46000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46001
46002 {&hf_ieee80211_tag_multi_band_conn_tdls,
46003 {"Connection Capability TDLS", "wlan.multi_band.conn_tdls",
46004 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
46005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46006
46007 {&hf_ieee80211_tag_multi_band_conn_ibss,
46008 {"Connection Capability IBSS", "wlan.multi_band.conn_ibss",
46009 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
46010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46011
46012 {&hf_ieee80211_tag_multi_band_fst_timeout,
46013 {"FST Session Timeout", "wlan.multi_band.fst_timeout",
46014 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46016
46017 {&hf_ieee80211_tag_multi_band_sta_mac,
46018 {"Transmitting STA MAC Address", "wlan.multi_band.sta_mac",
46019 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
46020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46021
46022 {&hf_ieee80211_tag_activity,
46023 {"Activity", "wlan.activity",
46024 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46026
46027 {&hf_ieee80211_tag_dmg_link_adapt_mcs,
46028 {"MCS", "wlan.dmg_link_adapt.mcs",
46029 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46031
46032 {&hf_ieee80211_tag_dmg_link_adapt_link_margin,
46033 {"Link Margin", "wlan.dmg_link_adapt.link_margin",
46034 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46036
46037 {&hf_ieee80211_tag_ref_timestamp,
46038 {"Reference Timestamp", "wlan.ref_timestamp",
46039 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
46040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46041
46042 {&hf_ieee80211_tag_switching_stream_non_qos,
46043 {"Non-Qos Data Frames", "wlan.switching_stream.non_qos",
46044 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0,
46045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46046
46047 {&hf_ieee80211_tag_switching_stream_param_num,
46048 {"Number Of Switching Stream Elements", "wlan.switching_stream.param_num",
46049 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46051
46052 {&hf_ieee80211_tag_switching_stream_old_tid,
46053 {"Old Band TID", "wlan.switching_stream.old_tid",
46054 FT_UINT16, BASE_DEC, NULL((void*)0), 0xf000,
46055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46056
46057 {&hf_ieee80211_tag_switching_stream_old_direction,
46058 {"Old Band Direction", "wlan.switching_stream.old_direction",
46059 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
46060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46061
46062 {&hf_ieee80211_tag_switching_stream_new_tid,
46063 {"New Band TID", "wlan.switching_stream.new_tid",
46064 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0780,
46065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46066
46067 {&hf_ieee80211_tag_switching_stream_new_direction,
46068 {"New Band Direction", "wlan.switching_stream.new_direction",
46069 FT_BOOLEAN, 16, NULL((void*)0), 0x0040,
46070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46071
46072 {&hf_ieee80211_tag_switching_stream_new_valid_id,
46073 {"Stream ID in New Band Valid", "wlan.switching_stream.new_valid_id",
46074 FT_BOOLEAN, 16, NULL((void*)0), 0x0020,
46075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46076
46077 {&hf_ieee80211_tag_switching_stream_llt_type,
46078 {"LLT Type", "wlan.switching_stream.llt_type",
46079 FT_BOOLEAN, 16, NULL((void*)0), 0x0010,
46080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46081
46082 {&hf_ieee80211_ff_timestamp,
46083 {"Timestamp", "wlan.fixed.timestamp",
46084 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
46085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46086
46087 {&hf_ieee80211_ff_auth_alg,
46088 {"Authentication Algorithm", "wlan.fixed.auth.alg",
46089 FT_UINT16, BASE_DEC, VALS(auth_alg)((0 ? (const struct _value_string*)0 : ((auth_alg)))), 0,
46090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46091
46092 {&hf_ieee80211_ff_beacon_interval,
46093 {"Beacon Interval", "wlan.fixed.beacon",
46094 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
46095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46096
46097 {&hf_ieee80211_fixed_parameters,
46098 {"Fixed parameters", "wlan.fixed.all",
46099 FT_NONE, BASE_NONE, NULL((void*)0), 0,
46100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46101
46102 {&hf_ieee80211_tagged_parameters,
46103 {"Tagged parameters", "wlan.tagged.all",
46104 FT_NONE, BASE_NONE, NULL((void*)0), 0,
46105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46106
46107 {&hf_ieee80211_tag_ssid,
46108 {"SSID", "wlan.ssid",
46109 FT_BYTES, BASE_SHOW_UTF_8_PRINTABLE0x00020000, NULL((void*)0), 0,
46110 "Indicates the identity of an ESS or IBSS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46111
46112 {&hf_ieee80211_tag_supp_rates,
46113 {"Supported Rates", "wlan.supported_rates",
46114 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_supported_rates_vals_ext, 0x0,
46115 "In Mbit/sec, (B) for Basic Rates", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46116
46117 {&hf_ieee80211_tag_fh_dwell_time,
46118 {"Dwell Time", "wlan.fh.dwell_time",
46119 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
46120 "In Time Unit (TU)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46121
46122 {&hf_ieee80211_tag_fh_hop_set,
46123 {"Hop Set", "wlan.fh.hop_set",
46124 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46126
46127 {&hf_ieee80211_tag_fh_hop_pattern,
46128 {"Hop Pattern", "wlan.fh.hop_pattern",
46129 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46131
46132 {&hf_ieee80211_tag_fh_hop_index,
46133 {"Hop Index", "wlan.fh.hop_index",
46134 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46136
46137 {&hf_ieee80211_ff_block_ack_params,
46138 {"Block Ack Parameters", "wlan.fixed.baparams",
46139 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46141
46142 {&hf_ieee80211_ff_block_ack_params_amsdu_permitted,
46143 {"A-MSDUs", "wlan.fixed.baparams.amsdu",
46144 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_amsdu_permitted_flag)((0 ? (const struct true_false_string*)0 : ((&ff_block_ack_params_amsdu_permitted_flag
))))
, 0x0001,
46145 "A-MSDU Permitted in QoS Data MPDUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46146
46147 {&hf_ieee80211_ff_block_ack_params_policy,
46148 {"Block Ack Policy", "wlan.fixed.baparams.policy",
46149 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_policy_flag)((0 ? (const struct true_false_string*)0 : ((&ff_block_ack_params_policy_flag
))))
, 0x0002,
46150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46151
46152 {&hf_ieee80211_ff_block_ack_params_tid,
46153 {"Traffic Identifier", "wlan.fixed.baparams.tid",
46154 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C,
46155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46156
46157 {&hf_ieee80211_ff_block_ack_params_buffer_size,
46158 {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan.fixed.baparams.buffersize",
46159 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFC0,
46160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46161
46162 {&hf_ieee80211_ff_block_ack_timeout,
46163 {"Block Ack Timeout", "wlan.fixed.batimeout",
46164 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46166
46167 {&hf_ieee80211_ff_block_ack_ssc,
46168 {"Block Ack Starting Sequence Control (SSC)", "wlan.fixed.ssc",
46169 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46171
46172 {&hf_ieee80211_ff_block_ack_ssc_fragment,
46173 {"Fragment", "wlan.fixed.ssc.fragment",
46174 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000f,
46175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46176
46177 {&hf_ieee80211_ff_block_ack_ssc_sequence,
46178 {"Starting Sequence Number", "wlan.fixed.ssc.sequence",
46179 FT_UINT16, BASE_DEC, NULL((void*)0), 0xfff0,
46180 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46181
46182 {&hf_ieee80211_ff_delba_param,
46183 {"Delete Block Ack (DELBA) Parameter Set", "wlan.fixed.delba.param",
46184 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46186
46187 {&hf_ieee80211_ff_delba_param_reserved,
46188 {"Reserved", "wlan.fixed.delba.param.reserved",
46189 FT_UINT16, BASE_HEX, NULL((void*)0), 0x07ff,
46190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46191
46192 {&hf_ieee80211_ff_delba_param_init,
46193 {"Initiator", "wlan.fixed.delba.param.initiator",
46194 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
46195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46196
46197 {&hf_ieee80211_ff_delba_param_tid,
46198 {"TID", "wlan.fixed.delba.param.tid",
46199 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
46200 "Traffic Identifier (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46201
46202 {&hf_ieee80211_ff_max_reg_pwr,
46203 {"Maximum Regulation Power", "wlan.fixed.maxregpwr",
46204 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46206
46207 {&hf_ieee80211_ff_measurement_pilot_int,
46208 {"Measurement Pilot Interval", "wlan.fixed.msmtpilotint",
46209 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46210 "Measurement Pilot Interval Fixed Field (in TUs)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46211
46212 {&hf_ieee80211_ff_country_str,
46213 {"Country String", "wlan.fixed.country",
46214 FT_STRING, BASE_NONE, NULL((void*)0), 0,
46215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46216
46217 {&hf_ieee80211_ff_max_tx_pwr,
46218 {"Maximum Transmit Power", "wlan.fixed.maxtxpwr",
46219 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46221
46222 {&hf_ieee80211_ff_tx_pwr_used,
46223 {"Transmit Power Used", "wlan.fixed.txpwr",
46224 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46226
46227 {&hf_ieee80211_ff_transceiver_noise_floor,
46228 {"Transceiver Noise Floor", "wlan.fixed.tnoisefloor",
46229 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46231
46232 {&hf_ieee80211_ff_channel_width,
46233 {"Supported Channel Width", "wlan.fixed.chanwidth",
46234 FT_UINT8, BASE_HEX, VALS(ff_channel_width_vals)((0 ? (const struct _value_string*)0 : ((ff_channel_width_vals
))))
, 0,
46235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46236
46237 {&hf_ieee80211_ff_qos_info_ap,
46238 {"QoS Information (AP)", "wlan.fixed.qosinfo.ap",
46239 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46241
46242 {&hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
46243 {"EDCA Parameter Set Update Count", "wlan.fixed.qosinfo.ap.edcaupdate",
46244 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F,
46245 "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46246
46247 {&hf_ieee80211_ff_qos_info_ap_q_ack,
46248 {"Q-Ack", "wlan.fixed.qosinfo.ap.qack",
46249 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_q_ack_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_ap_q_ack_flag
))))
, 0x10,
46250 "QoS Ack", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46251
46252 {&hf_ieee80211_ff_qos_info_ap_queue_req,
46253 {"Queue Request", "wlan.fixed.qosinfo.ap.queue_req",
46254 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_queue_req_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_ap_queue_req_flag
))))
, 0x20,
46255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46256
46257 {&hf_ieee80211_ff_qos_info_ap_txop_request,
46258 {"TXOP Request", "wlan.fixed.qosinfo.ap.txopreq",
46259 FT_BOOLEAN, 8, TFS(&ff_qos_info_ap_txop_request_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_ap_txop_request_flag
))))
, 0x40,
46260 "Transmit Opportunity (TXOP) Request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46261
46262 {&hf_ieee80211_ff_qos_info_ap_more_data_ack,
46263 {"More Data Ack", "wlan.fixed.qosinfo.ap.more_data_ack",
46264 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
46265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46266
46267 {&hf_ieee80211_ff_qos_info_sta,
46268 {"QoS Information (STA)", "wlan.fixed.qosinfo.sta",
46269 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46270 "TCLAS Processing", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46271
46272 {&hf_ieee80211_ff_qos_info_sta_ac_vo,
46273 {"AC_VO U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vo",
46274 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x01,
46275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46276
46277 {&hf_ieee80211_ff_qos_info_sta_ac_vi,
46278 {"AC_VI U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vi",
46279 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x02,
46280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46281
46282 {&hf_ieee80211_ff_qos_info_sta_ac_bk,
46283 {"AC_BK U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_bk",
46284 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x04,
46285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46286
46287 {&hf_ieee80211_ff_qos_info_sta_ac_be,
46288 {"AC_BE U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_be",
46289 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x08,
46290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46291
46292 {&hf_ieee80211_ff_qos_info_sta_q_ack,
46293 {"Q-Ack", "wlan.fixed.qosinfo.sta.qack",
46294 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_q_ack_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_q_ack_flag
))))
, 0x10,
46295 "QoS Ack", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46296
46297 {&hf_ieee80211_ff_qos_info_sta_max_sp_length,
46298 {"Max SP Length", "wlan.fixed.qosinfo.sta.max_sp_length",
46299 FT_UINT8, BASE_HEX, VALS(ff_qos_info_sta_max_sp_len_flags)((0 ? (const struct _value_string*)0 : ((ff_qos_info_sta_max_sp_len_flags
))))
, 0x60,
46300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46301
46302 {&hf_ieee80211_ff_qos_info_sta_more_data_ack,
46303 {"More Data Ack", "wlan.fixed.qosinfo.sta.more_data_ack",
46304 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_more_data_ack_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_more_data_ack_flag
))))
, 0x80,
46305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46306
46307 {&hf_ieee80211_ff_sm_pwr_save,
46308 {"Spatial Multiplexing (SM) Power Control", "wlan.fixed.sm.powercontrol",
46309 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46311
46312 {&hf_ieee80211_ff_sm_pwr_save_enabled,
46313 {"SM Power Save", "wlan.fixed.sm.powercontrol.enabled",
46314 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
46315 "Spatial Multiplexing (SM) Power Save", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46316
46317 {&hf_ieee80211_ff_sm_pwr_save_sm_mode,
46318 {"SM Mode", "wlan.fixed.sm.powercontrol.mode",
46319 FT_BOOLEAN, 8, TFS(&ff_sm_pwr_save_sm_mode_flag)((0 ? (const struct true_false_string*)0 : ((&ff_sm_pwr_save_sm_mode_flag
))))
, 0x02,
46320 "Spatial Multiplexing (SM) Mode", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46321
46322 {&hf_ieee80211_ff_sm_pwr_save_reserved,
46323 {"Reserved", "wlan.fixed.sm.powercontrol.reserved",
46324 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
46325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46326
46327 {&hf_ieee80211_ff_pco_phase_cntrl,
46328 {"Phased Coexistence Operation (PCO) Phase Control", "wlan.fixed.pco.phasecntrl",
46329 FT_BOOLEAN, BASE_NONE, TFS(&ff_pco_phase_cntrl_flag)((0 ? (const struct true_false_string*)0 : ((&ff_pco_phase_cntrl_flag
))))
, 0x0,
46330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46331
46332 {&hf_ieee80211_ff_psmp_param_set,
46333 {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan.fixed.psmp.paramset",
46334 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46336
46337 {&hf_ieee80211_ff_psmp_param_set_n_sta,
46338 {"Number of STA Info Fields Present", "wlan.fixed.psmp.paramset.nsta",
46339 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000F,
46340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46341
46342 {&hf_ieee80211_ff_psmp_param_set_more_psmp,
46343 {"More PSMP", "wlan.fixed.psmp.paramset.more",
46344 FT_BOOLEAN, 16, TFS(&ff_psmp_param_set_more_psmp_flag)((0 ? (const struct true_false_string*)0 : ((&ff_psmp_param_set_more_psmp_flag
))))
, 0x0010,
46345 "More Power Save Multi-Poll (PSMP)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46346
46347 {&hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
46348 {"PSMP Sequence Duration [us]", "wlan.fixed.psmp.paramset.seqduration",
46349 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFE0,
46350 "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46351
46352 {&hf_ieee80211_ff_mimo_cntrl,
46353 {"MIMO Control", "wlan.fixed.mimo.control",
46354 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
46355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46356
46357 {&hf_ieee80211_ff_mimo_cntrl_nc_index,
46358 {"Nc Index", "wlan.fixed.mimo.control.ncindex",
46359 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_nc_index_flags
))))
, 0x0003,
46360 "Number of Columns Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46361
46362 {&hf_ieee80211_ff_mimo_cntrl_nr_index,
46363 {"Nr Index", "wlan.fixed.mimo.control.nrindex",
46364 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_nr_index_flags
))))
, 0x000C,
46365 "Number of Rows Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46366
46367 {&hf_ieee80211_ff_mimo_cntrl_channel_width,
46368 {"Channel Width", "wlan.fixed.mimo.control.chanwidth",
46369 FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag)((0 ? (const struct true_false_string*)0 : ((&ff_mimo_cntrl_channel_width_flag
))))
, 0x0010,
46370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46371
46372 {&hf_ieee80211_ff_mimo_cntrl_grouping,
46373 {"Grouping (Ng)", "wlan.fixed.mimo.control.grouping",
46374 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_grouping_flags
))))
, 0x0060,
46375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46376
46377 {&hf_ieee80211_ff_mimo_cntrl_coefficient_size,
46378 {"Coefficient Size (Nb)", "wlan.fixed.mimo.control.cosize",
46379 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_coefficient_size_flags
))))
, 0x0180,
46380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46381
46382 {&hf_ieee80211_ff_mimo_cntrl_codebook_info,
46383 {"Codebook Information", "wlan.fixed.mimo.control.codebookinfo",
46384 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_codebook_info_flags
))))
, 0x0600,
46385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46386
46387 {&hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
46388 {"Remaining Matrix Segment", "wlan.fixed.mimo.control.matrixseg",
46389 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3800,
46390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46391
46392 {&hf_ieee80211_ff_mimo_cntrl_reserved,
46393 {"Reserved", "wlan.fixed.mimo.control.reserved",
46394 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000,
46395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46396
46397 {&hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
46398 {"Sounding Timestamp", "wlan.fixed.mimo.control.soundingtime",
46399 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
46400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46401
46402 {&hf_ieee80211_ff_ftm_param_delim1,
46403 {"FTM Params (Subset 1 of 3)", "wlan.fixed.ftm.param.delim1",
46404 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
46405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46406
46407 {&hf_ieee80211_ff_ftm_param_status_indication,
46408 {"Status Indication", "wlan.fixed.ftm.param.status_indication",
46409 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0003,
46410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46411
46412 {&hf_ieee80211_ff_ftm_param_value,
46413 {"Value", "wlan.fixed.ftm.param.value",
46414 FT_UINT16, BASE_HEX, NULL((void*)0), 0x007C,
46415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46416
46417 {&hf_ieee80211_ff_ftm_param_reserved1,
46418 {"Reserved1", "wlan.fixed.ftm.param.reserved1",
46419 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0080,
46420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46421
46422 {&hf_ieee80211_ff_ftm_param_burst_exponent,
46423 {"Number of Burst Exponent", "wlan.fixed.ftm.param.burst_exponent",
46424 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0F00,
46425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46426
46427 {&hf_ieee80211_ff_ftm_param_burst_duration,
46428 {"Burst Duration", "wlan.fixed.ftm.param.burst_duration",
46429 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
46430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46431
46432 {&hf_ieee80211_ff_ftm_param_delim2,
46433 {"FTM Params (Subset 2 of 3)", "wlan.fixed.ftm.param.delim2",
46434 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
46435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46436
46437 {&hf_ieee80211_ff_ftm_param_min_delta_ftm,
46438 {"Min Delta FTM", "wlan.fixed.ftm.param.min_delta_ftm",
46439 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000FF,
46440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46441
46442 {&hf_ieee80211_ff_ftm_param_partial_tsf_timer,
46443 {"Partial TSF timer", "wlan.fixed.ftm.param.partial_tsf_timer",
46444 FT_UINT32, BASE_CUSTOM, CF_FUNC(partial_tsf_custom)((const void *) (size_t) (partial_tsf_custom)), 0x00FFFF00,
46445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46446
46447 {&hf_ieee80211_ff_ftm_param_partial_tsf_no_pref,
46448 {"Partial TSF no pref", "wlan.fixed.ftm.param.partial_tsf_no_pref",
46449 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01000000,
46450 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46451
46452 {&hf_ieee80211_ff_ftm_param_asap_capable,
46453 {"ASAP Capable", "wlan.fixed.ftm.param.asap_capable",
46454 FT_UINT32, BASE_HEX, NULL((void*)0), 0x02000000,
46455 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46456
46457 {&hf_ieee80211_ff_ftm_param_asap,
46458 {"ASAP", "wlan.fixed.ftm.param.asap",
46459 FT_UINT32, BASE_HEX, NULL((void*)0), 0x04000000,
46460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46461
46462 {&hf_ieee80211_ff_ftm_param_ftm_per_burst,
46463 {"FTM per burst", "wlan.fixed.ftm.param.ftm_per_burst",
46464 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF8000000,
46465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46466
46467 {&hf_ieee80211_ff_ftm_param_delim3,
46468 {"FTM Params (Subset 3 of 3)", "wlan.fixed.ftm.param.delim3",
46469 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
46470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46471
46472 {&hf_ieee80211_ff_ftm_param_reserved2,
46473 {"Reserved2", "wlan.fixed.ftm.param.reserved2",
46474 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000003,
46475 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46476
46477 {&hf_ieee80211_ff_ftm_param_format_and_bw,
46478 {"Format and Bandwidth", "wlan.fixed.ftm.param.format_and_bw",
46479 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0000FC,
46480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46481
46482 {&hf_ieee80211_ff_ftm_param_burst_period,
46483 {"Burst Period", "wlan.fixed.ftm.param.burst_period",
46484 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFFF00,
46485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46486
46487 {&hf_ieee80211_ff_ftm_tod_err1,
46488 {"FTM TOD Error", "wlan.fixed.ftm.tod_error",
46489 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46490 "Management action FTM LMR TOD Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46491
46492 /* az: Ranging Parameters element */
46493
46494 {&hf_ieee80211_tag_ranging_parameters,
46495 {"Ranging Parameters", "wlan.ranging",
46496 FT_UINT56, BASE_HEX, NULL((void*)0), 0,
46497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46498
46499 {&hf_ieee80211_tag_ranging_subelt_tag,
46500 {"Subelement Tag", "wlan.tag.ranging.subelt_tag",
46501 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46502
46503 {&hf_ieee80211_tag_ranging_subelt_len,
46504 {"Subelement Len", "wlan.tag.ranging.subelt_len",
46505 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46506
46507 {&hf_ieee80211_tag_ranging_status_indication,
46508 {"Status Indication", "wlan.ranging.status",
46509 FT_UINT56, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(ieee80211_ranging_status_vals)((0 ? (const struct _val64_string*)0 : ((ieee80211_ranging_status_vals
))))
, GENMASK(1, 0)(((1U << ((1) - (0) + 1)) - 1) << (0)),
46510 "Status Indication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46511
46512 {&hf_ieee80211_tag_ranging_value,
46513 {"Value", "wlan.ranging.value",
46514 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(6, 2)(((1U << ((6) - (2) + 1)) - 1) << (2)),
46515 "When Status Indication is 3, the Value field contains a duration in units of seconds", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46516
46517 {&hf_ieee80211_tag_ranging_i2r_lmr_feedback,
46518 {"I2R LMR Feedback", "wlan.ranging.i2r_lmr_feedback",
46519 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(7, 7)(((1U << ((7) - (7) + 1)) - 1) << (7)),
46520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46521
46522 {&hf_ieee80211_tag_ranging_secure_ltf_required,
46523 {"Secure LTF Required", "wlan.ranging.secure_ltf_required",
46524 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(8, 8)(((1U << ((8) - (8) + 1)) - 1) << (8)),
46525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46526
46527 {&hf_ieee80211_tag_ranging_secure_ltf_support,
46528 {"Secure LTF Support", "wlan.ranging.secure_ltf_support",
46529 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(9, 9)(((1U << ((9) - (9) + 1)) - 1) << (9)),
46530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46531
46532 {&hf_ieee80211_tag_ranging_ranging_priority,
46533 {"Ranging Priority", "wlan.ranging.priority",
46534 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(11, 10)(((1U << ((11) - (10) + 1)) - 1) << (10)),
46535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46536
46537 {&hf_ieee80211_tag_ranging_r2i_toa_type,
46538 {"R2I TOA Type", "wlan.ranging.r2i_toa_type",
46539 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(12, 12)(((1U << ((12) - (12) + 1)) - 1) << (12)),
46540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46541
46542 {&hf_ieee80211_tag_ranging_i2r_toa_type,
46543 {"I2R TOA Type", "wlan.ranging.i2r_toa_type",
46544 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(13, 13)(((1U << ((13) - (13) + 1)) - 1) << (13)),
46545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46546
46547 {&hf_ieee80211_tag_ranging_r2i_aoa_requested,
46548 {"R2I AOA Requested", "wlan.ranging.r2i_aoa_requested",
46549 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(14, 14)(((1U << ((14) - (14) + 1)) - 1) << (14)),
46550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46551
46552 {&hf_ieee80211_tag_ranging_i2r_aoa_requested,
46553 {"I2R AOA Requested", "wlan.ranging.i2r_aoa_requested",
46554 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(15, 15)(((1U << ((15) - (15) + 1)) - 1) << (15)),
46555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46556
46557 {&hf_ieee80211_tag_ranging_format_and_bandwidth,
46558 {"Format and Bandwidth", "wlan.ranging.format_and_bandwidth",
46559 FT_UINT56, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(ieee80211_ranging_fmt_bw_vals)((0 ? (const struct _val64_string*)0 : ((ieee80211_ranging_fmt_bw_vals
))))
, GENMASK(21, 16)(((1U << ((21) - (16) + 1)) - 1) << (16)),
46560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46561
46562 {&hf_ieee80211_tag_ranging_immediate_r2i_feedback,
46563 {"Immediate R2I Feedback", "wlan.ranging.immediate_r2i_feedback",
46564 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(22, 22)(((1U << ((22) - (22) + 1)) - 1) << (22)),
46565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46566
46567 {&hf_ieee80211_tag_ranging_immediate_i2r_feedback,
46568 {"Immediate I2R Feedback", "wlan.ranging.immediate_i2r_feedback",
46569 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(23, 23)(((1U << ((23) - (23) + 1)) - 1) << (23)),
46570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46571
46572 {&hf_ieee80211_tag_ranging_max_i2r_repetition,
46573 {"Max I2R Repetition", "wlan.ranging.max_i2r_repetition",
46574 FT_UINT56, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(26, 24)(((1U << ((26) - (24) + 1)) - 1) << (24)),
46575 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46576
46577 {&hf_ieee80211_tag_ranging_max_r2i_repetition,
46578 {"Max R2I Repetition", "wlan.ranging.max_r2i_repetition",
46579 FT_UINT56, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(29, 27)(((1U << ((29) - (27) + 1)) - 1) << (27)),
46580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46581
46582 {&hf_ieee80211_tag_ranging_reserved1,
46583 {"Reserved", "wlan.ranging.reserved1",
46584 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(30, 30)(((1U << ((30) - (30) + 1)) - 1) << (30)),
46585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46586
46587 {&hf_ieee80211_tag_ranging_reserved2,
46588 {"Reserved", "wlan.ranging.reserved2",
46589 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(31, 31)(((1U << ((31) - (31) + 1)) - 1) << (31)),
46590 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46591
46592 {&hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz,
46593 {"Max R2I STS <= 80 MHz", "wlan.ranging.max_r2i_sts_le_80_mhz",
46594 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(34, 32)(((1UL << ((34) - (32) + 1)) - 1) << (32)),
46595 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46596
46597 {&hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz,
46598 {"Max R2I STS > 80 MHz", "wlan.ranging.max_r2i_sts_gt_80_mhz",
46599 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(37, 35)(((1UL << ((37) - (35) + 1)) - 1) << (35)),
46600 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46601
46602 {&hf_ieee80211_tag_ranging_max_r2i_ltf_total,
46603 {"Max R2I LTF Total", "wlan.ranging.max_r2i_ltf_total",
46604 FT_UINT56, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(ieee80211_ranging_ltf_total_vals)((0 ? (const struct _val64_string*)0 : ((ieee80211_ranging_ltf_total_vals
))))
, GENMASK64(39, 38)(((1UL << ((39) - (38) + 1)) - 1) << (38)),
46605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46606
46607 {&hf_ieee80211_tag_ranging_max_i2r_ltf_total,
46608 {"Max I2R LTF Total", "wlan.ranging.max_i2r_ltf_total",
46609 FT_UINT56, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(ieee80211_ranging_ltf_total_vals)((0 ? (const struct _val64_string*)0 : ((ieee80211_ranging_ltf_total_vals
))))
, GENMASK64(41, 40)(((1UL << ((41) - (40) + 1)) - 1) << (40)),
46610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46611
46612 {&hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz,
46613 {"Max I2R STS <= 80 MHz", "wlan.ranging.max_i2r_sts_le_80_mhz",
46614 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(44, 42)(((1UL << ((44) - (42) + 1)) - 1) << (42)),
46615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46616
46617 {&hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz,
46618 {"Max I2R STS > 80 MHz", "wlan.ranging.max_i2r_sts_gt_80_mhz",
46619 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(47, 45)(((1UL << ((47) - (45) + 1)) - 1) << (45)),
46620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46621
46622 {&hf_ieee80211_tag_ranging_bss_color_info,
46623 {"BSS Color Information",
46624 "wlan.tag.ftm.param.ranging.bss_color_information",
46625 FT_UINT56, BASE_HEX, NULL((void*)0), GENMASK64(55, 48)(((1UL << ((55) - (48) + 1)) - 1) << (48)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46626
46627 /* az: non-TB-specific subelement */
46628
46629 {&hf_ieee80211_tag_ranging_ntb,
46630 {"Non-TB specific subelement", "wlan.ranging.ntb",
46631 FT_UINT48, BASE_HEX, NULL((void*)0), 0,
46632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46633
46634 {&hf_ieee80211_tag_ranging_ntb_reserved1,
46635 {"Reserved", "wlan.ranging.ntb.reserved1",
46636 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
46637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46638
46639 {&hf_ieee80211_tag_ranging_ntb_min_time_msmts,
46640 {"Min Time Between Measurements", "wlan.ranging.ntb.min_time",
46641 FT_UINT48, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_100_us)((0 ? (const struct unit_name_string*)0 : ((&units_100_us
))))
, GENMASK(23, 1)(((1U << ((23) - (1) + 1)) - 1) << (1)),
46642 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46643
46644 {&hf_ieee80211_tag_ranging_ntb_max_time_msmts,
46645 {"Max Time Between Measurements", "wlan.ranging.ntb.max_time",
46646 FT_UINT48, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_10_ms)((0 ? (const struct unit_name_string*)0 : ((&units_10_ms)
)))
, GENMASK64(43, 24)(((1UL << ((43) - (24) + 1)) - 1) << (24)),
46647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46648
46649 {&hf_ieee80211_tag_ranging_ntb_r2i_tx_power,
46650 {"R2I Tx Power", "wlan.ranging.ntb.r2i_tx_power",
46651 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK64(44, 44)(((1UL << ((44) - (44) + 1)) - 1) << (44)),
46652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46653
46654 {&hf_ieee80211_tag_ranging_ntb_i2r_tx_power,
46655 {"I2R Tx Power", "wlan.ranging.ntb.i2r_tx_power",
46656 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK64(45, 45)(((1UL << ((45) - (45) + 1)) - 1) << (45)),
46657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46658
46659 {&hf_ieee80211_tag_ranging_ntb_reserved2,
46660 {"Reserved", "wlan.ranging.ntb.reserved2",
46661 FT_UINT48, BASE_HEX, NULL((void*)0), GENMASK64(47, 46)(((1UL << ((47) - (46) + 1)) - 1) << (46)),
46662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46663
46664 {&hf_ieee80211_tag_ranging_aid_rsid,
46665 {"AID/RSID", "wlan.ranging.tb.aid_rsid",
46666 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000ffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46667
46668 {&hf_ieee80211_tag_ranging_device_class,
46669 {"Device Class", "wlan.ranging.tb.device_class",
46670 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46671
46672 {&hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo,
46673 {"Full Bandwidth UL MU-MIMO", "wlan.ranging.tb.full_bw_ul_mu_mimo",
46674 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46675
46676 {&hf_ieee80211_tag_ranging_trigger_frame_paddur,
46677 {"Trigger Frame Padding Duration",
46678 "wlan.ranging.tb.trigger_frame_padding_duration",
46679 FT_BOOLEAN, 32, NULL((void*)0), 0x000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46680
46681 {&hf_ieee80211_tag_ranging_max_sess_exp,
46682 {"Max Session Exp", "wlan.ranging.tb.max_session.exp",
46683 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00f00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46684
46685 {&hf_ieee80211_tag_ranging_passive_tb_ranging,
46686 {"Passive TB Ranging", "wlan.ranging.tb.passive_tb_ranging",
46687 FT_BOOLEAN, 32, NULL((void*)0), 0x01000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46688
46689 {&hf_ieee80211_tag_ranging_tb_specific_reserved,
46690 {"Reserved", "wlan.ranging.tb.reserved",
46691 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46692
46693 {&hf_ieee80211_tag_ranging_secure_he_ltf,
46694 {"Secure HE-LTF subelement", "wlan.ranging.secure_he_ltf",
46695 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
46696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46697
46698 {&hf_ieee80211_tag_ranging_secure_he_ltf_version,
46699 {"Protocol Version", "wlan.ranging.secure_he_ltf.version",
46700 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
46701 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46702
46703 {&hf_ieee80211_tag_ranging_secure_he_ltf_req,
46704 {"Secure HE-LTF Req", "wlan.ranging.secure_he_ltf.req",
46705 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
46706 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46707
46708 {&hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window,
46709 {"R2I Tx Window", "wlan.ranging.secure_he_ltf.r2i_tx_window",
46710 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
46711 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46712
46713 {&hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window,
46714 {"I2R Tx Window", "wlan.ranging.secure_he_ltf.i2r_tx_window",
46715 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
46716 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46717
46718 {&hf_ieee80211_tag_ranging_secure_he_ltf_reserved,
46719 {"Reserved", "wlan.ranging.secure_he_ltf.reserved",
46720 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0,
46721 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46722
46723 {&hf_ieee80211_tag_dirn_meas_results_aoa_results,
46724 {"AOA Results", "wlan.etag.direction_measurement_results.aoa_results",
46725 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46726
46727 {&hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth,
46728 {"AOA Azimuth", "wlan.etag.direction_measurement_results.aoa_azimuth",
46729 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_azimuth_custom)((const void *) (size_t) (aoa_azimuth_custom)),
46730 0x0000000007ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46731
46732 {&hf_ieee80211_tag_ftm_aoa_results_aoa_elevation,
46733 {"AOA Elevation", "wlan.etag.direction_measurement_results.aoa_elevation",
46734 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_elevation_custom)((const void *) (size_t) (aoa_elevation_custom)),
46735 0x0000001ff800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46736
46737 {&hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy,
46738 {"AOA Azimuth Accuracy",
46739 "wlan.etag.direction_measurement_results.aoa_azimuth_accuracy",
46740 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_accuracy_custom)((const void *) (size_t) (aoa_accuracy_custom)),
46741 0x00000fe00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46742
46743 {&hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy,
46744 {"AOA Elevation Accuracy",
46745 "wlan.etag.direction_measurement_results.aoa_elevation_accuracy",
46746 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_accuracy_custom)((const void *) (size_t) (aoa_accuracy_custom)),
46747 0x0007f0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46748
46749 {&hf_ieee80211_tag_ftm_aoa_results_best_awv_id,
46750 {"Best AWV ID", "wlan.etag.direction_measurement_results.best_awv_id",
46751 FT_UINT48, BASE_DEC, NULL((void*)0), 0x3ff800000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46752
46753 {&hf_ieee80211_tag_ftm_aoa_results_aoa_reference,
46754 {"AOA Reference", "wlan.etag.direction_measurement_results.aoa_reference",
46755 FT_BOOLEAN, 48, TFS(&aoa_reference_tfs)((0 ? (const struct true_false_string*)0 : ((&aoa_reference_tfs
))))
, 0x400000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46756
46757 {&hf_ieee80211_tag_ftm_aoa_results_reserved,
46758 {"Reserved", "wlan.etag.direction_measurement_results.reserved",
46759 FT_UINT48, BASE_DEC, NULL((void*)0), 0x800000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46760
46761 {&hf_ieee80211_ff_ftm_max_tod_error_exponent,
46762 {"Max TOD Error Exponent", "wlan.fixed.ftm.max_tod_error_exponent",
46763 FT_UINT8, BASE_DEC, NULL((void*)0), GENMASK(4, 0)(((1U << ((4) - (0) + 1)) - 1) << (0)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46764
46765 {&hf_ieee80211_ff_ftm_tod_err_reserved,
46766 {"Reserved", "wlan.fixed.ftm.tod_reserved",
46767 FT_UINT8, BASE_HEX, NULL((void*)0), GENMASK(6, 5)(((1U << ((6) - (5) + 1)) - 1) << (5)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46768
46769 {&hf_ieee80211_ff_ftm_tod_not_continuous,
46770 {"TOD Not Continuous", "wlan.fixed.ftm.tod_not_continuous",
46771 FT_BOOLEAN, 8, NULL((void*)0), GENMASK(7, 7)(((1U << ((7) - (7) + 1)) - 1) << (7)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46772
46773 {&hf_ieee80211_ff_ftm_toa_err1,
46774 {"FTM TOA Error", "wlan.fixed.ftm_toa_err",
46775 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46776 "Management action FTM LMR TOA Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46777
46778 {&hf_ieee80211_ff_ftm_max_toa_error_exponent,
46779 {"Max TOA Error Exponent", "wlan.fixed.ftm_max_toa_error_exponent",
46780 FT_UINT8, BASE_DEC, NULL((void*)0), GENMASK(4, 0)(((1U << ((4) - (0) + 1)) - 1) << (0)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46781
46782 {&hf_ieee80211_ff_ftm_toa_err_reserved,
46783 {"Reserved", "wlan.fixed.ftm_toa_reserved",
46784 FT_UINT8, BASE_HEX, NULL((void*)0), GENMASK(5, 5)(((1U << ((5) - (5) + 1)) - 1) << (5)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46785
46786 {&hf_ieee80211_ff_ftm_invalid_measurement,
46787 {"Invalid Measurement", "wlan.fixed.ftm_invalid_measurement",
46788 FT_BOOLEAN, 8, NULL((void*)0), GENMASK(6, 6)(((1U << ((6) - (6) + 1)) - 1) << (6)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46789
46790 {&hf_ieee80211_ff_ftm_toa_type,
46791 {"TOA Type", "wlan.fixed.ftm_toa_type",
46792 FT_UINT8, BASE_DEC, NULL((void*)0), GENMASK(7, 7)(((1U << ((7) - (7) + 1)) - 1) << (7)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46793
46794 {&hf_ieee80211_ff_ftm_cfo,
46795 {"CFO", "wlan.fixed.ftm.param.cfo",
46796 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46798
46799 {&hf_ieee80211_ff_ftm_r2i_ndp_tx_power,
46800 {"R2I NDP Tx Power", "wlan.fixed.ftm.param.r2i_ndp_tx_power",
46801 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46802 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46803
46804 {&hf_ieee80211_ff_ftm_i2r_ndp_target_rssi,
46805 {"I2R NDP Target RSSI", "wlan.fixed.ftm.param.i2r_ndp_target_rssi",
46806 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46807 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46808
46809 {&hf_ieee80211_tag_secure_ltf_params_counter,
46810 {"Secure LTF Counter", "wlan.etag.secure_ltf_params.secure_ltf_counter",
46811 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46812
46813 {&hf_ieee80211_tag_secure_ltf_generation_sac,
46814 {"LTF Generation SAC", "wlan.etag.secure_ltf_params.ltf_generation_sac",
46815 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46816
46817 {&hf_ieee80211_tag_secure_ltf_management_sac,
46818 {"Ranging Management SAC",
46819 "wlan.etag.secure_ltf_params.ranging_management_sac",
46820 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46821
46822 {&hf_ieee80211_tag_secure_ltf_result_ltf_ofs,
46823 {"Measurement Result LTF Offset",
46824 "wlan.etag.secure_ltf_params.measurement_result_ltf_offset",
46825 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46826
46827 {&hf_ieee80211_ftm_ista_availability_count,
46828 {"ISTA Availability Count", "wlan.ranging.ista.availability_count",
46829 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46830
46831 {&hf_ieee80211_ftm_ista_availability_reserved,
46832 {"Reserved", "wlan.ranging.ista.availability_reserved",
46833 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46834
46835 {&hf_ieee80211_ftm_ista_avail_bits,
46836 {"ISTA Availability", "wlan.ranging.ista.availability_bits",
46837 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46838
46839 {&hf_ieee80211_ftm_ista_avail_pad,
46840 {"Padding", "wlan.ranging.ista.availability_pad",
46841 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46842
46843 {&hf_ieee80211_ftm_rsta_header,
46844 {"Header", "wlan.ftm.rsta.header",
46845 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46846
46847 {&hf_ieee80211_ftm_rsta_count,
46848 {"RSTA Count", "wlan.ranging.rsta.count",
46849 FT_UINT8, BASE_HEX, NULL((void*)0), 0x7F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46850
46851 {&hf_ieee80211_ftm_rsta_avail_window_bcast_fmt,
46852 {"Availability Window Broadcast Format",
46853 "wlan.ftm.rsta.availability_window_broadcast_format",
46854 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46855
46856 {&hf_ieee80211_ftm_rsta_partial_tsf_timer1,
46857 {"Partial TSF Timer", "wlan.ranging.rsta.partial_tsf_timer",
46858 FT_UINT32, BASE_CUSTOM, CF_FUNC(partial_tsf_custom)((const void *) (size_t) (partial_tsf_custom)), 0x0000ffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46859
46860 {&hf_ieee80211_ftm_rsta_duration1,
46861 {"Duration", "wlan.ranging.rsta.duration",
46862 FT_UINT32, BASE_CUSTOM, CF_FUNC(hundred_us_base_custom)((const void *) (size_t) (hundred_us_base_custom)), 0x7f0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46863
46864 {&hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1,
46865 {"Reserved", "wlan.ranging.rsta.reserved1",
46866 FT_BOOLEAN, 32, NULL((void*)0), 0x00800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46867
46868 {&hf_ieee80211_ftm_rsta_periodicity1,
46869 {"Periodicity", "wlan.ranging.rsta.periodicity1",
46870 FT_UINT32, BASE_DEC, NULL((void*)0), 0xff000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46871
46872 {&hf_ieee80211_ftm_rsta_partial_tsf_timer,
46873 {"Partial TSF Timer", "wlan.ranging.rsta.partial_tsf_timer_long",
46874 FT_UINT40, BASE_CUSTOM, CF_FUNC(partial_tsf_custom)((const void *) (size_t) (partial_tsf_custom)), 0xffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46875
46876 {&hf_ieee80211_ftm_rsta_duration,
46877 {"Duration", "wlan.ranging.rsta.duration_long",
46878 FT_UINT40, BASE_CUSTOM, CF_FUNC(hundred_us_base_custom)((const void *) (size_t) (hundred_us_base_custom)), 0x7f0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46879
46880 {&hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved,
46881 {"Reserved", "wlan.ranging.rsta.reserved",
46882 FT_BOOLEAN, 40, NULL((void*)0), 0x0000800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46883
46884 {&hf_ieee80211_ftm_rsta_periodicity,
46885 {"Periodicity", "wlan.ranging.rsta.periodicity",
46886 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00ff000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46887
46888 {&hf_ieee80211_ftm_rsta_format_and_bandwidth,
46889 {"Format and Bandwidth", "wlan.ftm.rsta.format_and_bandwidth",
46890 FT_UINT40, BASE_HEX, NULL((void*)0), 0x3F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46891
46892 {&hf_ieee80211_ftm_rsta_reserved,
46893 {"Reserved", "wlan.ftm.rsta.reserved",
46894 FT_UINT40, BASE_HEX, NULL((void*)0), 0xC000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46895
46896 {&hf_ieee80211_ftm_rsta_avail_subfield_short,
46897 {"RSTA Availability Information", "wlan.ranging.rsta.availability_window",
46898 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46899
46900 {&hf_ieee80211_ftm_rsta_avail_subfield_long,
46901 {"RSTA Availability Information",
46902 "wlan.ranging.rsta.availability_window_long",
46903 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46904
46905 {&hf_ieee80211_ff_psmp_sta_info,
46906 {"Power Save Multi-Poll (PSMP) Station Information", "wlan.fixed.psmp.stainfo",
46907 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
46908 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46909
46910 {&hf_ieee80211_ff_psmp_sta_info_type,
46911 {"Sta Info Type", "wlan.fixed.psmp.stainfo.type",
46912 FT_UINT32, BASE_HEX, VALS(ff_psmp_sta_info_flags)((0 ? (const struct _value_string*)0 : ((ff_psmp_sta_info_flags
))))
, PSMP_STA_INFO_FLAG_TYPE0x00000003,
46913 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46914
46915 {&hf_ieee80211_ff_psmp_sta_info_dtt_start_offset,
46916 {"DTT Start Offset", "wlan.fixed.psmp.stainfo.dttstart",
46917 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_DTT_START0x00001FFC,
46918 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46919
46920 {&hf_ieee80211_ff_psmp_sta_info_dtt_duration,
46921 {"DTT Duration", "wlan.fixed.psmp.stainfo.dttduration",
46922 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_DTT_DURATION0x001FE000,
46923 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46924
46925 {&hf_ieee80211_ff_psmp_sta_info_sta_id,
46926 {"Target Station ID", "wlan.fixed.psmp.stainfo.staid",
46927 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_STA_ID0x001FFFE0,
46928 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46929
46930 {&hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
46931 {"UTT Start Offset", "wlan.fixed.psmp.stainfo.uttstart",
46932 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_UTT_START0x0000FFE0,
46933 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46934
46935 {&hf_ieee80211_ff_psmp_sta_info_utt_duration,
46936 {"UTT Duration", "wlan.fixed.psmp.stainfo.uttduration",
46937 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_UTT_DURATION0x03FF0000,
46938 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46939
46940 {&hf_ieee80211_ff_psmp_sta_info_reserved_small,
46941 {"Reserved", "wlan.fixed.psmp.stainfo.reserved",
46942 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_IA_RESERVED0xFC000000,
46943 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46944
46945 {&hf_ieee80211_ff_psmp_sta_info_reserved_large,
46946 {"Reserved", "wlan.fixed.psmp.stainfo.reserved64",
46947 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
46948 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46949
46950 {&hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
46951 {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan.fixed.psmp.stainfo.multicastid",
46952 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
46953 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46954
46955 {&hf_ieee80211_ff_ant_selection,
46956 {"Antenna Selection", "wlan.fixed.antsel",
46957 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46958 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46959
46960 {&hf_ieee80211_ff_ant_selection_0,
46961 {"Antenna 0", "wlan.fixed.antsel.ant0",
46962 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
46963 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46964
46965 {&hf_ieee80211_ff_ant_selection_1,
46966 {"Antenna 1", "wlan.fixed.antsel.ant1",
46967 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
46968 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46969
46970 {&hf_ieee80211_ff_ant_selection_2,
46971 {"Antenna 2", "wlan.fixed.antsel.ant2",
46972 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04,
46973 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46974
46975 {&hf_ieee80211_ff_ant_selection_3,
46976 {"Antenna 3", "wlan.fixed.antsel.ant3",
46977 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
46978 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46979
46980 {&hf_ieee80211_ff_ant_selection_4,
46981 {"Antenna 4", "wlan.fixed.antsel.ant4",
46982 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10,
46983 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46984
46985 {&hf_ieee80211_ff_ant_selection_5,
46986 {"Antenna 5", "wlan.fixed.antsel.ant5",
46987 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20,
46988 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46989
46990 {&hf_ieee80211_ff_ant_selection_6,
46991 {"Antenna 6", "wlan.fixed.antsel.ant6",
46992 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40,
46993 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46994
46995 {&hf_ieee80211_ff_ant_selection_7,
46996 {"Antenna 7", "wlan.fixed.antsel.ant7",
46997 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
46998 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46999
47000 {&hf_ieee80211_ff_ext_channel_switch_announcement,
47001 {"Extended Channel Switch Announcement", "wlan.fixed.extchansw",
47002 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
47003 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47004
47005 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
47006 {"Channel Switch Mode", "wlan.fixed.extchansw.switchmode",
47007 FT_UINT32, BASE_HEX, VALS(ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags
))))
, 0x000000FF,
47008 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47009
47010 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
47011 {"New Operating Class", "wlan.fixed.extchansw.new.opeclass",
47012 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FF00,
47013 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47014
47015 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
47016 {"New Channel Number", "wlan.fixed.extchansw.new.channumber",
47017 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00FF0000,
47018 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47019
47020 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
47021 {"Channel Switch Count", "wlan.extchansw.switchcount",
47022 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFF000000,
47023 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47024
47025 {&hf_ieee80211_ff_ht_info,
47026 {"HT Information", "wlan.fixed.mimo",
47027 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47028 "HT Information Fixed Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47029
47030 {&hf_ieee80211_ff_ht_info_information_request,
47031 {"Information Request", "wlan.fixed.mimo.control.inforequest",
47032 FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag)((0 ? (const struct true_false_string*)0 : ((&ff_ht_info_information_request_flag
))))
, 0x01,
47033 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47034
47035 {&hf_ieee80211_ff_ht_info_40_mhz_intolerant,
47036 {"40 MHz Intolerant", "wlan.fixed.mimo.control.intolerant",
47037 FT_BOOLEAN, 8, TFS(&ff_ht_info_40_mhz_intolerant_flag)((0 ? (const struct true_false_string*)0 : ((&ff_ht_info_40_mhz_intolerant_flag
))))
, 0x02,
47038 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47039
47040 {&hf_ieee80211_ff_ht_info_sta_chan_width,
47041 {"Station Channel Width", "wlan.fixed.mimo.control.chanwidth",
47042 FT_BOOLEAN, 8, TFS(&ff_ht_info_sta_chan_width_flag)((0 ? (const struct true_false_string*)0 : ((&ff_ht_info_sta_chan_width_flag
))))
, 0x04,
47043 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47044
47045 {&hf_ieee80211_ff_ht_info_reserved,
47046 {"Reserved", "wlan.fixed.reserved",
47047 FT_UINT8, BASE_HEX, 0, 0xF8,
47048 "Reserved Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47049
47050 {&hf_ieee80211_ff_ht_action,
47051 {"HT Action", "wlan.fixed.htact",
47052 FT_UINT8, BASE_HEX, VALS(ff_ht_action_flags)((0 ? (const struct _value_string*)0 : ((ff_ht_action_flags))
))
, 0,
47053 "HT Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47054
47055 {&hf_ieee80211_ff_mimo_csi_snr,
47056 {"Signal to Noise Ratio (SNR)", "wlan.mimo.csimatrices.snr",
47057 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47059
47060 {&hf_ieee80211_ff_mimo_csi_matrices,
47061 {"CSI Matrices", "wlan.mimo.csimatrices",
47062 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47063 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47064
47065 {&hf_ieee80211_ff_mimo_csi_bf_matrices,
47066 {"Beamforming Feedback Matrices", "wlan.mimo.csimatrices.bf",
47067 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47069
47070 {&hf_ieee80211_ff_mimo_csi_cbf_matrices,
47071 {"Compressed Beamforming Feedback Matrices", "wlan.mimo.csimatrices.cbf",
47072 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47073 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47074
47075 {&hf_ieee80211_ff_public_action,
47076 {"Public Action", "wlan.fixed.publicact",
47077 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ff_pa_action_codes_ext, 0,
47078 "Public Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47079
47080 {&hf_ieee80211_ff_protected_public_action,
47081 {"Protected Public Action", "wlan.fixed.protectedpublicact",
47082 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ff_ppa_action_codes_ext, 0,
47083 "Protected Public Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47084
47085 {&hf_ieee80211_ff_capture,
47086 {"Capabilities Information", "wlan.fixed.capabilities",
47087 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47088 "Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47089
47090 {&hf_ieee80211_ff_cf_ess,
47091 {"ESS capabilities", "wlan.fixed.capabilities.ess",
47092 FT_BOOLEAN, 16, TFS(&cf_ess_flags)((0 ? (const struct true_false_string*)0 : ((&cf_ess_flags
))))
, 0x0001,
47093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47094
47095 {&hf_ieee80211_ff_cf_ibss,
47096 {"IBSS status", "wlan.fixed.capabilities.ibss",
47097 FT_BOOLEAN, 16, TFS(&cf_ibss_flags)((0 ? (const struct true_false_string*)0 : ((&cf_ibss_flags
))))
, 0x0002,
47098 "IBSS participation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47099
47100 {&hf_ieee80211_ff_cf_reserved1,
47101 {"Reserved", "wlan.fixed.capabilities.reserved1",
47102 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47103
47104 {&hf_ieee80211_ff_cf_reserved2,
47105 {"Reserved", "wlan.fixed.capabilities.reserved2",
47106 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47107
47108 {&hf_ieee80211_ff_cf_privacy,
47109 {"Privacy", "wlan.fixed.capabilities.privacy",
47110 FT_BOOLEAN, 16, TFS(&cf_privacy_flags)((0 ? (const struct true_false_string*)0 : ((&cf_privacy_flags
))))
, 0x0010,
47111 "Data privacy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47112
47113 {&hf_ieee80211_ff_cf_preamble,
47114 {"Short Preamble", "wlan.fixed.capabilities.short_preamble",
47115 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x0020,
47116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47117
47118 {&hf_ieee80211_ff_cf_critical_update_flag,
47119 {"Critical Update Flag", "wlan.fixed.capabilities.critical_update_flag",
47120 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47121
47122 {&hf_ieee80211_ff_cf_nontran_bss_critical_update_flag,
47123 {"Nontransmitted BSSIDs Critical Update Flag", "wlan.fixed.capabilities.nontran_bss_critical_update_flag",
47124 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47125
47126 {&hf_ieee80211_ff_cf_spec_man,
47127 {"Spectrum Management", "wlan.fixed.capabilities.spec_man",
47128 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0100,
47129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47130
47131 {&hf_ieee80211_ff_cf_qos,
47132 {"QoS", "wlan.fixed.capabilities.qos",
47133 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0200,
47134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47135
47136 {&hf_ieee80211_ff_cf_short_slot_time,
47137 {"Short Slot Time", "wlan.fixed.capabilities.short_slot_time",
47138 FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse)((0 ? (const struct true_false_string*)0 : ((&tfs_inuse_not_inuse
))))
, 0x0400,
47139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47140
47141 {&hf_ieee80211_ff_cf_apsd,
47142 {"Automatic Power Save Delivery", "wlan.fixed.capabilities.apsd",
47143 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0800,
47144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47145
47146 {&hf_ieee80211_ff_cf_radio_measurement,
47147 {"Radio Measurement", "wlan.fixed.capabilities.radio_measurement",
47148 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x1000,
47149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47150
47151 {&hf_ieee80211_ff_cf_epd,
47152 {"EPD", "wlan.fixed.capabilities.epd",
47153 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x2000,
47154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47155
47156 {&hf_ieee80211_ff_cf_reserved5,
47157 {"Reserved", "wlan.fixed.capabilities.reserved5",
47158 FT_UINT16, BASE_DEC, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47159
47160 {&hf_ieee80211_ff_cf_reserved6,
47161 {"Reserved", "wlan.fixed.capabilities.reserved6",
47162 FT_UINT16, BASE_DEC, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47163
47164 {&hf_ieee80211_ff_auth_seq,
47165 {"Authentication SEQ", "wlan.fixed.auth_seq",
47166 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47167 "Authentication Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47168
47169 {&hf_ieee80211_ff_assoc_id,
47170 {"Association ID", "wlan.fixed.aid",
47171 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3FFF,
47172 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47173
47174 {&hf_ieee80211_ff_listen_ival,
47175 {"Listen Interval", "wlan.fixed.listen_ival",
47176 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47177 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47178
47179 {&hf_ieee80211_ff_current_ap,
47180 {"Current AP", "wlan.fixed.current_ap",
47181 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47182 "MAC address of current AP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47183
47184 {&hf_ieee80211_ff_reason,
47185 {"Reason code", "wlan.fixed.reason_code",
47186 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_reason_code_ext, 0,
47187 "Reason for unsolicited notification", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47188
47189 {&hf_ieee80211_ff_status_code,
47190 {"Status code", "wlan.fixed.status_code",
47191 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
47192 "Status of requested event", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47193
47194 {&hf_ieee80211_ff_category_code,
47195 {"Category code", "wlan.fixed.category_code",
47196 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &category_codes_ext, 0,
47197 "Management action category", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47198
47199 {&hf_ieee80211_ff_action_code,
47200 {"Action code", "wlan.fixed.action_code",
47201 FT_UINT16, BASE_DEC, VALS(action_codes)((0 ? (const struct _value_string*)0 : ((action_codes)))), 0,
47202 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47203
47204 {&hf_ieee80211_ff_dialog_token,
47205 {"Dialog token", "wlan.fixed.dialog_token",
47206 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47207 "Management action dialog token", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47208
47209 {&hf_ieee80211_ff_trigger,
47210 {"Trigger", "wlan.fixed.trigger",
47211 FT_UINT8, BASE_DEC, VALS(ftm_trigger_vals)((0 ? (const struct _value_string*)0 : ((ftm_trigger_vals)))), 0,
47212 "FTM action trigger", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47213
47214 {&hf_ieee80211_ff_ftm_tod,
47215 {"FTM TOD", "wlan.fixed.ftm_tod",
47216 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
47217 "Management action FTM TOD", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47218
47219 {&hf_ieee80211_ff_ftm_toa,
47220 {"FTM TOA", "wlan.fixed.ftm_toa",
47221 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
47222 "Management action FTM TOA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47223
47224 {&hf_ieee80211_ff_ftm_tod_err,
47225 {"FTM TOD Error", "wlan.fixed.ftm_tod_err",
47226 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47227 "Management action FTM TOD Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47228
47229 {&hf_ieee80211_ff_ftm_toa_err,
47230 {"FTM TOA Error", "wlan.fixed.ftm_toa_err",
47231 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47232 "Management action FTM TOA Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47233
47234 {&hf_ieee80211_ff_followup_dialog_token,
47235 {"Followup Dialog token", "wlan.fixed.followup_dialog_token",
47236 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47237 "Management action followup dialog token", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47238
47239 {&hf_ieee80211_ff_marvell_action_type,
47240 {"Marvell Action type", "wlan.fixed.mrvl_action_type",
47241 FT_UINT8, BASE_DEC, VALS(vendor_action_types_mrvl)((0 ? (const struct _value_string*)0 : ((vendor_action_types_mrvl
))))
, 0,
47242 "Vendor Specific Action Type (Marvell)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47243
47244 {&hf_ieee80211_ff_marvell_mesh_mgt_action_code,
47245 {"Mesh action(Marvell)", "wlan.fixed.mrvl_mesh_action",
47246 FT_UINT8, BASE_HEX, VALS(mesh_mgt_action_codes_mrvl)((0 ? (const struct _value_string*)0 : ((mesh_mgt_action_codes_mrvl
))))
, 0,
47247 "Mesh action code(Marvell)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47248
47249 {&hf_ieee80211_ff_marvell_mesh_mgt_length,
47250 {"Message Length", "wlan.fixed.length",
47251 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47253
47254 {&hf_ieee80211_ff_marvell_mesh_mgt_mode,
47255 {"Message Mode", "wlan.fixed.mode",
47256 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47258
47259 {&hf_ieee80211_ff_marvell_mesh_mgt_ttl,
47260 {"Message TTL", "wlan.fixed.ttl",
47261 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47263
47264 {&hf_ieee80211_ff_marvell_mesh_mgt_dstcount,
47265 {"Destination Count", "wlan.fixed.dstcount",
47266 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47268
47269 {&hf_ieee80211_ff_marvell_mesh_mgt_hopcount,
47270 {"Hop Count", "wlan.fixed.hopcount",
47271 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47273
47274 {&hf_ieee80211_ff_marvell_mesh_mgt_rreqid,
47275 {"RREQ ID", "wlan.fixed.rreqid",
47276 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47278
47279 {&hf_ieee80211_ff_marvell_mesh_mgt_sa,
47280 {"Source Address", "wlan.fixed.sa",
47281 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47282 "Source MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47283
47284 {&hf_ieee80211_ff_marvell_mesh_mgt_ssn,
47285 {"SSN", "wlan.fixed.ssn",
47286 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47287 "Source Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47288
47289 {&hf_ieee80211_ff_marvell_mesh_mgt_metric,
47290 {"Metric", "wlan.fixed.metric",
47291 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47292 "Route Metric", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47293
47294 {&hf_ieee80211_ff_marvell_mesh_mgt_flags,
47295 {"RREQ Flags", "wlan.fixed.flags",
47296 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47297 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47298
47299 {&hf_ieee80211_ff_marvell_mesh_mgt_da,
47300 {"Destination Address", "wlan.fixed.da",
47301 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47302 "Destination MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47303
47304 {&hf_ieee80211_ff_marvell_mesh_mgt_dsn,
47305 {"DSN", "wlan.fixed.dsn",
47306 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47307 "Destination Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47308
47309 {&hf_ieee80211_ff_marvell_mesh_mgt_lifetime,
47310 {"Lifetime", "wlan.fixed.lifetime",
47311 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47312 "Route Lifetime", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47313
47314 {&hf_ieee80211_ff_wme_action_code,
47315 {"Action code", "wlan.fixed.action_code",
47316 FT_UINT16, BASE_HEX, VALS(wme_action_codes)((0 ? (const struct _value_string*)0 : ((wme_action_codes)))), 0,
47317 "Management notification action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47318
47319 {&hf_ieee80211_ff_wme_status_code,
47320 {"Status code", "wlan.fixed.status_code",
47321 FT_UINT16, BASE_HEX, VALS(wme_status_codes)((0 ? (const struct _value_string*)0 : ((wme_status_codes)))), 0,
47322 "Management notification setup response status code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47323
47324 {&hf_ieee80211_ff_mesh_action,
47325 {"Mesh Action code", "wlan.fixed.mesh_action",
47326 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &mesh_action_ext, 0,
47327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47328
47329 {&hf_ieee80211_ff_multihop_action,
47330 {"Multihop Action code", "wlan.fixed.multihop_action",
47331 FT_UINT8, BASE_HEX, VALS(multihop_action)((0 ? (const struct _value_string*)0 : ((multihop_action)))), 0,
47332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47333
47334 {&hf_ieee80211_ff_mesh_flags,
47335 {"Mesh Flags", "wlan.fixed.mesh_flags",
47336 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47338
47339 {&hf_ieee80211_ff_mesh_ttl,
47340 {"Mesh TTL", "wlan.fixed.mesh_ttl",
47341 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47343
47344 {&hf_ieee80211_ff_mesh_sequence,
47345 {"Sequence Number", "wlan.fixed.mesh_sequence",
47346 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
47347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47348
47349 {&hf_ieee80211_ff_mesh_addr4,
47350 {"Mesh Extended Address 4", "wlan.fixed.mesh_addr4",
47351 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47353
47354 {&hf_ieee80211_ff_mesh_addr5,
47355 {"Mesh Extended Address 5", "wlan.fixed.mesh_addr5",
47356 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47358
47359 {&hf_ieee80211_ff_mesh_addr6,
47360 {"Mesh Extended Address 6", "wlan.fixed.mesh_addr6",
47361 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47363
47364 {&hf_ieee80211_ff_selfprot_action,
47365 {"Self-protected Action code", "wlan.fixed.selfprot_action",
47366 FT_UINT8, BASE_HEX, VALS(selfprot_action)((0 ? (const struct _value_string*)0 : ((selfprot_action)))), 0,
47367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47368
47369 {&hf_ieee80211_mesh_peering_proto,
47370 {"Mesh Peering Protocol ID", "wlan.peering.proto",
47371 FT_UINT16, BASE_HEX, VALS(mesh_peering_proto_ids)((0 ? (const struct _value_string*)0 : ((mesh_peering_proto_ids
))))
, 0,
47372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47373
47374 {&hf_ieee80211_mesh_peering_local_link_id,
47375 {"Local Link ID", "wlan.peering.local_id",
47376 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47377 "Mesh Peering Management Local Link ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47378
47379 {&hf_ieee80211_mesh_peering_peer_link_id,
47380 {"Peer Link ID", "wlan.peering.peer_id",
47381 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47382 "Mesh Peering Management Peer Link ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47383
47384 {&hf_ieee80211_ff_hwmp_flags,
47385 {"HWMP Flags", "wlan.hwmp.flags",
47386 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47387 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47388
47389 {&hf_ieee80211_ff_hwmp_hopcount,
47390 {"HWMP Hop Count", "wlan.hwmp.hopcount",
47391 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47393
47394 {&hf_ieee80211_ff_hwmp_ttl,
47395 {"HWMP TTL", "wlan.hwmp.ttl",
47396 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47397 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47398
47399 {&hf_ieee80211_ff_hwmp_pdid,
47400 {"HWMP Path Discovery ID", "wlan.hwmp.pdid",
47401 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47403
47404 {&hf_ieee80211_ff_hwmp_orig_sta,
47405 {"Originator STA Address", "wlan.hwmp.orig_sta",
47406 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47408
47409 {&hf_ieee80211_ff_hwmp_orig_sn,
47410 {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn",
47411 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
47413
47414 {&hf_ieee80211_ff_hwmp_orig_ext,
47415 {"Originator External Address", "wlan.hwmp.orig_ext",
47416 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47418
47419 {&hf_ieee80211_ff_hwmp_lifetime,
47420 {"HWMP Lifetime", "wlan.hwmp.lifetime",
47421 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47423
47424 {&hf_ieee80211_ff_hwmp_metric,
47425 {"HWMP Metric", "wlan.hwmp.metric",
47426 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47427 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47428
47429 {&hf_ieee80211_ff_hwmp_targ_count,
47430 {"HWMP Target Count", "wlan.hwmp.targ_count",
47431 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47433
47434 {&hf_ieee80211_ff_hwmp_targ_flags,
47435 {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags",
47436 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47438
47439 {&hf_ieee80211_ff_hwmp_targ_to_flags,
47440 {"TO Flag", "wlan.hwmp.to_flag",
47441 FT_BOOLEAN, 8, TFS(&hwmp_targ_to_flags)((0 ? (const struct true_false_string*)0 : ((&hwmp_targ_to_flags
))))
, 0x01,
47442 "Target Only Flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47443
47444 {&hf_ieee80211_ff_hwmp_targ_usn_flags,
47445 {"USN Flag", "wlan.hwmp.usn_flag",
47446 FT_BOOLEAN, 8, TFS(&hwmp_targ_usn_flags)((0 ? (const struct true_false_string*)0 : ((&hwmp_targ_usn_flags
))))
, 0x04,
47447 "Unknown Target HWMP Sequence Number Flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47448
47449 {&hf_ieee80211_ff_hwmp_targ_sta,
47450 {"Target STA Address", "wlan.hwmp.targ_sta",
47451 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47453
47454 {&hf_ieee80211_ff_hwmp_targ_ext,
47455 {"Target External Address", "wlan.hwmp.targ_ext",
47456 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47458
47459 {&hf_ieee80211_ff_hwmp_targ_sn,
47460 {"Target HWMP Sequence Number", "wlan.hwmp.targ_sn",
47461 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47463
47464 {&hf_ieee80211_mesh_config_path_sel_protocol,
47465 {"Path Selection Protocol", "wlan.mesh.config.ps_protocol",
47466 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47467 "Mesh Configuration Path Selection Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47468
47469 {&hf_ieee80211_mesh_config_path_sel_metric,
47470 {"Path Selection Metric", "wlan.mesh.config.ps_metric",
47471 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47472 "Mesh Configuration Path Selection Metric", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47473
47474 {&hf_ieee80211_mesh_config_congestion_control,
47475 {"Congestion Control", "wlan.mesh.config.cong_ctl",
47476 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47477 "Mesh Configuration Congestion Control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47478
47479 {&hf_ieee80211_mesh_config_sync_method,
47480 {"Synchronization Method", "wlan.mesh.config.sync_method",
47481 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47482 "Mesh Configuration Synchronization Method", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47483
47484 {&hf_ieee80211_mesh_config_auth_protocol,
47485 {"Authentication Protocol", "wlan.mesh.config.auth_protocol",
47486 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47487 "Mesh Configuration Authentication Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47488
47489 {&hf_ieee80211_mesh_config_formation_info,
47490 {"Formation Info", "wlan.mesh.config.formation_info",
47491 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47492 "Mesh Configuration Formation Info", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47493
47494 {&hf_ieee80211_mesh_form_info_conn_to_mesh_gate,
47495 {"Connected to Mesh Gate", "wlan.mesh.formation_info.connect_to_mesh_gate",
47496 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
47497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47498
47499 {&hf_ieee80211_mesh_form_info_num_of_peerings,
47500 {"Number of Peerings", "wlan.mesh.config.formation_info.num_peers",
47501 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7E,
47502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47503
47504 {&hf_ieee80211_mesh_form_info_conn_to_as,
47505 {"Connected to AS", "wlan.mesh.formation_info.connect_to_as",
47506 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x80,
47507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47508
47509 {&hf_ieee80211_mesh_config_capability,
47510 {"Capability", "wlan.mesh.config.cap",
47511 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47512 "Mesh Configuration Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47513
47514 {&hf_ieee80211_mesh_config_cap_accepting,
47515 {"Accepting Additional Mesh Peerings", "wlan.mesh.config.cap.accept",
47516 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
47517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47518
47519 {&hf_ieee80211_mesh_config_cap_mcca_support,
47520 {"MCCA Support", "wlan.mesh.config.cap.mcca_support",
47521 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x02,
47522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47523
47524 {&hf_ieee80211_mesh_config_cap_mcca_enabled,
47525 {"MCCA Enabled", "wlan.mesh.config.cap.mcca_enabled",
47526 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x04,
47527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47528
47529 {&hf_ieee80211_mesh_config_cap_forwarding,
47530 {"Mesh Forwarding", "wlan.mesh.config.cap.forwarding",
47531 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x08,
47532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47533
47534 {&hf_ieee80211_mesh_config_cap_mbca_enabled,
47535 {"MBCA Enabled", "wlan.mesh.config.cap.mbca_enabled",
47536 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
47537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47538
47539 {&hf_ieee80211_mesh_config_cap_tbtt_adjusting,
47540 {"TBTT Adjustment", "wlan.mesh.config.cap.tbtt_adjusting",
47541 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x20,
47542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47543
47544 {&hf_ieee80211_mesh_config_cap_power_save_level,
47545 {"Power Save", "wlan.mesh.config.cap.power_save_level",
47546 FT_BOOLEAN, 8, TFS(&mesh_config_cap_power_save_level_flags)((0 ? (const struct true_false_string*)0 : ((&mesh_config_cap_power_save_level_flags
))))
, 0x40,
47547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47548
47549 {&hf_ieee80211_mesh_config_cap_reserved,
47550 {"Reserved", "wlan.mesh.config.cap.reserved",
47551 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
47552 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47553
47554 {&hf_ieee80211_mesh_id,
47555 {"Mesh ID", "wlan.mesh.id",
47556 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47558
47559 {&hf_ieee80211_bcn_timing_rctrl,
47560 {"Report Control", "wlan.bcntime.rctrl",
47561 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47563
47564 {&hf_ieee80211_bcn_timing_rctrl_more,
47565 {"More Beacon Timing Elements", "wlan.bcntime.rctrl.more",
47566 FT_BOOLEAN, 8, TFS(&tfs_more_nomore)((0 ? (const struct true_false_string*)0 : ((&tfs_more_nomore
))))
, 0x01,
47567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47568
47569 {&hf_ieee80211_bcn_timing_rctrl_element_num,
47570 {"Beacon Timing Element Number", "wlan.bcntime.rctrl.elem_num",
47571 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0E,
47572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47573
47574 {&hf_ieee80211_bcn_timing_rctrl_status_num,
47575 {"Status Number", "wlan.bcntime.rctrl.status_num",
47576 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
47577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47578
47579 {&hf_ieee80211_bcn_timing_info,
47580 {"Beacon Timing Info", "wlan.bcntime.info",
47581 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47583
47584 {&hf_ieee80211_bcn_timing_info_nsta_id,
47585 {"Neighbor STA ID", "wlan.bcntime.info.nstaid",
47586 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47588
47589 {&hf_ieee80211_bcn_timing_info_nsta_tbtt,
47590 {"Neighbor STA TBTT", "wlan.bcntime.info.nstatbtt",
47591 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
47592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47593
47594 {&hf_ieee80211_bcn_timing_info_nsta_bi,
47595 {"Neighbor STA Beacon Interval", "wlan.bcntime.info.nstabi",
47596 FT_UINT16, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
47597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47598
47599 {&hf_ieee80211_gann_flags,
47600 {"GANN Flags", "wlan.gann.flags",
47601 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47603
47604 {&hf_ieee80211_gann_flags_reserved,
47605 {"Reserved", "wlan.gann.flags.reserved",
47606 FT_UINT8, BASE_HEX, NULL((void*)0), 0xff,
47607 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47608
47609 {&hf_ieee80211_gann_hop_count,
47610 {"GANN Hop count", "wlan.gann.hop_count",
47611 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47612 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47613
47614 {&hf_ieee80211_gann_elem_ttl,
47615 {"GANN Element TTL", "wlan.gann.elem_ttl",
47616 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47618
47619 {&hf_ieee80211_gann_mesh_gate_addr,
47620 {"GANN Mesh Gate Address", "wlan.gann.gate_addr",
47621 FT_BYTES, SEP_COLON, NULL((void*)0), 0,
47622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47623
47624 {&hf_ieee80211_gann_seq_num,
47625 {"GANN Sequence Number", "wlan.gann.seq_num",
47626 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47628
47629 {&hf_ieee80211_gann_interval,
47630 {"GANN Interval", "wlan.gann.interval",
47631 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47633
47634 {&hf_ieee80211_mesh_mic,
47635 {"Mesh Peering Management MIC", "wlan.mesh.mic",
47636 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47637
47638 {&hf_ieee80211_mesh_ampe_encrypted_data,
47639 {"Authenticated Mesh Peering Exchange Encrypted Data", "wlan.mesh.ampe.encrypted_data",
47640 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47641
47642 {&hf_ieee80211_rann_flags,
47643 {"RANN Flags", "wlan.rann.flags",
47644 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47645 "Root Announcement Flags", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47646
47647 {&hf_ieee80211_rann_root_sta,
47648 {"Root STA Address", "wlan.rann.root_sta", FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47649 "Root Mesh STA Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47650
47651 {&hf_ieee80211_rann_sn,
47652 {"Root STA Sequence Number", "wlan.rann.rann_sn",
47653 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47654 "Root Mesh STA Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47655
47656 {&hf_ieee80211_rann_interval,
47657 {"RANN Interval", "wlan.rann.interval",
47658 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47659 "Root Announcement Interval", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47660
47661 {&hf_ieee80211_pxu_pxu_id,
47662 {"PXU ID", "wlan.pxu.pxu_id",
47663 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47665
47666 {&hf_ieee80211_pxu_pxu_origin_mac,
47667 {"PXU Originator MAC Address", "wlan.pxu.origin_mac",
47668 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47670
47671 {&hf_ieee80211_pxu_no_proxy_info,
47672 {"Number of Proxy Information", "wlan.pxu.no_proxy_info",
47673 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47675
47676 {&hf_ieee80211_pxu_proxy_info,
47677 {"Proxy Information", "wlan.pxu.proxy_info",
47678 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47679 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47680
47681 {&hf_ieee80211_pxu_proxy_info_flags,
47682 {"Flags", "wlan.pxu.pxu_info.flags",
47683 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47684 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47685
47686 {&hf_ieee80211_pxu_proxy_info_flags_delete,
47687 {"Delete", "wlan.pxu.pxu_info.flags.delete",
47688 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
47689 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47690
47691 {&hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy,
47692 {"Originator is Proxy", "wlan.pxu.pxu_info.flags.orig_is_proxy",
47693 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
47694 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47695
47696 {&hf_ieee80211_pxu_proxy_info_flags_lifetime,
47697 {"Lifetime", "wlan.pxu.pxu_info.flags.lifetime",
47698 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
47699 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47700
47701 {&hf_ieee80211_pxu_proxy_info_flags_reserved,
47702 {"Reserved", "wlan.pxu.pxu_info.flags.reserved",
47703 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
47704 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47705
47706 {&hf_ieee80211_pxu_proxy_info_ext_mac,
47707 {"External MAC Address", "wlan.pxu.pxu_info.ext_mac",
47708 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47710
47711 {&hf_ieee80211_pxu_proxy_info_seq_num,
47712 {"Proxy Information Sequence Number", "wlan.pxu.pxu_info.seq_num",
47713 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47715
47716 {&hf_ieee80211_pxu_proxy_info_proxy_mac,
47717 {"Proxy MAC Address", "wlan.pxu.pxu_info.proxy_mac",
47718 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47720
47721 {&hf_ieee80211_pxu_proxy_info_lifetime,
47722 {"Proxy Information Lifetime", "wlan.pxu.pxu_info.lifetime",
47723 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47725
47726 {&hf_ieee80211_pxuc_pxu_id,
47727 {"PXU ID", "wlan.pxuc.pxu_id",
47728 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47730
47731 {&hf_ieee80211_pxuc_pxu_recip_mac,
47732 {"PXU Recipient MAC Address", "wlan.pxuc.recip_mac",
47733 FT_BYTES, SEP_COLON, NULL((void*)0), 0,
47734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47735
47736 {&hf_ieee80211_ff_qos_action_code,
47737 {"Action code", "wlan.fixed.action_code",
47738 FT_UINT16, BASE_HEX, VALS(qos_action_codes)((0 ? (const struct _value_string*)0 : ((qos_action_codes)))), 0,
47739 "QoS management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47740
47741 {&hf_ieee80211_ff_ba_action,
47742 {"Action code", "wlan.fixed.action_code",
47743 FT_UINT8, BASE_HEX, VALS(ba_action_codes)((0 ? (const struct _value_string*)0 : ((ba_action_codes)))), 0,
47744 "Block Ack action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47745
47746 {&hf_ieee80211_ff_check_beacon,
47747 {"Check Beacon", "wlan.fixed.check_beacon",
47748 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47749 "Unprotected WNM Check Beacon", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47750
47751 {&hf_ieee80211_ff_tod,
47752 {"TOD", "wlan.fixed.tod",
47753 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47754 "Previous TS of transmit antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47755
47756 {&hf_ieee80211_ff_toa,
47757 {"TOA", "wlan.fixed.toa",
47758 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47759 "Previous TS of receive antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47760
47761 {&hf_ieee80211_ff_max_tod_err,
47762 {"MAX TOD ERROR", "wlan.fixed.max_tod_err",
47763 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47764 "Maximal Error at Previous TS of transmit antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47765
47766 {&hf_ieee80211_ff_max_toa_err,
47767 {"MAX TOA ERROR", "wlan.fixed.max_toa_err",
47768 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47769 "Maximal Error at Previous TS of receive antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47770
47771 {&hf_ieee80211_ff_dls_action_code,
47772 {"Action code", "wlan.fixed.action_code",
47773 FT_UINT16, BASE_HEX, VALS(dls_action_codes)((0 ? (const struct _value_string*)0 : ((dls_action_codes)))), 0,
47774 "DLS management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47775
47776 {&hf_ieee80211_ff_dst_mac_addr,
47777 {"Destination address", "wlan.fixed.dst_mac_addr",
47778 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47779 "Destination MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47780
47781 {&hf_ieee80211_ff_src_mac_addr,
47782 {"Source address", "wlan.fixed.src_mac_addr",
47783 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47784 "Source MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47785
47786 {&hf_ieee80211_ff_req_ap_addr,
47787 {"RequesterAP address", "wlan.fixed.req_ap_addr",
47788 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47790
47791 {&hf_ieee80211_ff_res_ap_addr,
47792 {"ResponderAP address", "wlan.fixed.res_ap_addr",
47793 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47795
47796 {&hf_ieee80211_ff_ft_action_code,
47797 {"Action code", "wlan.fixed.action_code",
47798 FT_UINT8, BASE_DEC, VALS(ft_action_codes)((0 ? (const struct _value_string*)0 : ((ft_action_codes)))), 0,
47799 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47800
47801 {&hf_ieee80211_ff_sta_address,
47802 {"STA Address", "wlan.fixed.sta_address",
47803 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47805
47806 {&hf_ieee80211_ff_target_ap_address,
47807 {"Target AP Address", "wlan.fixed.target_ap_address",
47808 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47809 "Target AP MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47810
47811 {&hf_ieee80211_ff_gas_comeback_delay,
47812 {"GAS Comeback Delay", "wlan.fixed.gas_comeback_delay",
47813 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47815
47816 {&hf_ieee80211_ff_gas_fragment_id,
47817 {"GAS Query Response Fragment ID", "wlan.fixed.gas_fragment_id",
47818 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7f,
47819 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47820
47821 {&hf_ieee80211_ff_more_gas_fragments,
47822 {"More GAS Fragments", "wlan.fixed.more_gas_fragments",
47823 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
47824 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47825
47826 {&hf_ieee80211_ff_query_request_length,
47827 {"Query Request Length", "wlan.fixed.query_request_length",
47828 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47829 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47830
47831 {&hf_ieee80211_ff_query_request,
47832 {"Query Request", "wlan.fixed.query_request",
47833 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
47834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47835
47836 {&hf_ieee80211_ff_query_response_length,
47837 {"Query Response Length", "wlan.fixed.query_response_length",
47838 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47840
47841 {&hf_ieee80211_ff_query_response,
47842 {"Query Response", "wlan.fixed.query_response",
47843 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
47844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47845
47846 {&hf_ieee80211_gas_resp_fragments,
47847 {"GAS Query Response fragments", "wlan.fixed.fragments",
47848 FT_NONE, BASE_NONE, NULL((void*)0), 0x00,
47849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47850
47851 {&hf_ieee80211_gas_resp_fragment,
47852 {"GAS Query Response fragment", "wlan.fixed.fragment",
47853 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
47854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47855
47856 {&hf_ieee80211_gas_resp_fragment_overlap,
47857 {"GAS Query Response fragment overlap", "wlan.fixed.fragment.overlap",
47858 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
47859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47860
47861 {&hf_ieee80211_gas_resp_fragment_overlap_conflict,
47862 {"GAS Query Response fragment overlapping with conflicting data", "wlan.fixed.fragment.overlap.conflicts",
47863 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
47864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47865
47866 {&hf_ieee80211_gas_resp_fragment_multiple_tails,
47867 {"GAS Query Response has multiple tail fragments", "wlan.fixed.fragment.multiple_tails",
47868 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
47869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47870
47871 {&hf_ieee80211_gas_resp_fragment_too_long_fragment,
47872 {"GAS Query Response fragment too long", "wlan.fixed.fragment.too_long_fragment",
47873 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
47874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47875
47876 {&hf_ieee80211_gas_resp_fragment_error,
47877 {"GAS Query Response reassembly error", "wlan.fixed.fragment.error",
47878 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
47879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47880
47881 {&hf_ieee80211_gas_resp_fragment_count,
47882 {"GAS Query Response fragment count", "wlan.fixed.fragment.count",
47883 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
47884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47885
47886 {&hf_ieee80211_gas_resp_reassembled_in,
47887 {"Reassembled in", "wlan.fixed.reassembled.in",
47888 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
47889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47890
47891 {&hf_ieee80211_gas_resp_reassembled_length,
47892 {"Reassembled length", "wlan.fixed.reassembled.length",
47893 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
47894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
47895
47896 {&hf_ieee80211_ff_anqp_info_id,
47897 {"Info ID", "wlan.fixed.anqp.info_id",
47898 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
47899 "Access Network Query Protocol Info ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47900
47901 {&hf_ieee80211_ff_anqp_info_length,
47902 {"Length", "wlan.fixed.anqp.info_length",
47903 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47904 "Access Network Query Protocol Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47905
47906 {&hf_ieee80211_ff_anqp_info,
47907 {"Information", "wlan.fixed.anqp.info",
47908 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
47909 "Access Network Query Protocol Information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47910
47911 {&hf_ieee80211_ff_anqp_query_id,
47912 {"ANQP Query ID", "wlan.fixed.anqp.query_id",
47913 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
47914 "Access Network Query Protocol Query ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47915
47916 {&hf_ieee80211_ff_anqp_capability,
47917 {"ANQP Capability", "wlan.fixed.anqp.capability",
47918 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
47919 "Access Network Query Protocol Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47920
47921 {&hf_ieee80211_ff_anqp_capability_vlen,
47922 {"Vendor-specific Capability Length", "wlan.fixed.anqp.capability_vlen",
47923 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47925
47926 {&hf_ieee80211_ff_anqp_capability_vendor,
47927 {"Vendor-specific Capability", "wlan.fixed.anqp.capability_vendor",
47928 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
47929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47930
47931 {&hf_ieee80211_ff_venue_info_group,
47932 {"Venue Group", "wlan.fixed.venue_info.group",
47933 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &venue_group_vals_ext, 0,
47934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47935
47936 {&hf_ieee80211_ff_venue_info_type,
47937 {"Venue Type", "wlan.fixed.venue_info.type",
47938 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47940
47941 {&hf_ieee80211_ff_anqp_venue_length,
47942 {"Venue Name Duple Length", "wlan.fixed.anqp.venue.length",
47943 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47945
47946 {&hf_ieee80211_ff_anqp_venue_language,
47947 {"Language Code", "wlan.fixed.anqp.venue.language",
47948 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47949 "Venue Name Language Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47950
47951 {&hf_ieee80211_ff_anqp_venue_name,
47952 {"Venue Name", "wlan.fixed.anqp.venue.name",
47953 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47955
47956 {&hf_ieee80211_ff_anqp_nw_auth_type_indicator,
47957 {"Network Authentication Type Indicator", "wlan.fixed.anqp.nw_auth_type.indicator",
47958 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals)((0 ? (const struct _value_string*)0 : ((nw_auth_type_vals)))
)
, 0,
47959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47960
47961 {&hf_ieee80211_ff_anqp_nw_auth_type_url_len,
47962 {"Re-direct URL Length", "wlan.fixed.anqp.nw_auth_type.url_len",
47963 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47965
47966 {&hf_ieee80211_ff_anqp_nw_auth_type_url,
47967 {"Re-direct URL", "wlan.fixed.anqp.nw_auth_type.url",
47968 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47970
47971 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator,
47972 {"Network Authentication Type w/ Timestamp Indicator",
47973 "wlan.fixed.anqp.nw_auth_type_ts.indicator",
47974 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals)((0 ? (const struct _value_string*)0 : ((nw_auth_type_vals)))
)
, 0,
47975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47976
47977 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len,
47978 {"Re-direct URL Length", "wlan.fixed.anqp.nw_auth_type_ts.url_len",
47979 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47981
47982 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_url,
47983 {"Re-direct URL", "wlan.fixed.anqp.nw_auth_type_ts.url",
47984 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47986
47987 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_year,
47988 {"Timestamp (Year)", "wlan.fixed.anqp.nw_auth_type_ts.year",
47989 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
47990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47991
47992 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_mon,
47993 {"Timestamp (Month)", "wlan.fixed.anqp.nw_auth_type_ts.mon",
47994 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
47995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47996
47997 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_day,
47998 {"Timestamp (Day)", "wlan.fixed.anqp.nw_auth_type_ts.day",
47999 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48001
48002 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_hr,
48003 {"Timestamp (Hours)", "wlan.fixed.anqp.nw_auth_type_ts.hr",
48004 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48006
48007 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_min,
48008 {"Timestamp (Minutes)", "wlan.fixed.anqp.nw_auth_type_ts.min",
48009 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48011
48012 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_sec,
48013 {"Timestamp (Seconds)", "wlan.fixed.anqp.nw_auth_type_ts.sec",
48014 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48016
48017 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_msec,
48018 {"Timestamp (Milliseconds)", "wlan.fixed.anqp.nw_auth_type_ts.msec",
48019 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
48020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48021
48022 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd,
48023 {"Timestamp (Reserved)", "wlan.fixed.anqp.nw_auth_type_ts.rsvd",
48024 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48026
48027 {&hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
48028 {"OI Length", "wlan.fixed.anqp.roaming_consortium.oi_len",
48029 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48030 "Roaming Consortium OI Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48031
48032 {&hf_ieee80211_ff_anqp_roaming_consortium_oi,
48033 {"OI", "wlan.fixed.anqp.roaming_consortium.oi",
48034 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48035 "Roaming Consortium OI", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48036
48037 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
48038 {"IPv6 Address", "wlan.fixed.anqp.ip_addr_availability.ipv6",
48039 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv6_vals)((0 ? (const struct _value_string*)0 : ((ip_addr_avail_ipv6_vals
))))
, 0x03,
48040 "IP Address Type Availability information for IPv6", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48041
48042 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
48043 {"IPv4 Address", "wlan.fixed.anqp.ip_addr_availability.ipv4",
48044 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv4_vals)((0 ? (const struct _value_string*)0 : ((ip_addr_avail_ipv4_vals
))))
, 0xfc,
48045 "IP Address Type Availability information for IPv4", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48046
48047 {&hf_ieee80211_ff_anqp_nai_realm_count,
48048 {"NAI Realm Count", "wlan.fixed.anqp.nai_realm_list.count",
48049 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48051
48052 {&hf_ieee80211_ff_anqp_nai_field_len,
48053 {"NAI Realm Data Field Length", "wlan.fixed.anqp.nai_realm_list.field_len",
48054 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48056
48057 {&hf_ieee80211_ff_anqp_nai_realm_encoding,
48058 {"NAI Realm Encoding", "wlan.fixed.anqp_nai_realm_list.encoding",
48059 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_encoding_vals
))))
, 0x01,
48060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48061
48062 {&hf_ieee80211_ff_anqp_nai_realm_length,
48063 {"NAI Realm Length", "wlan.fixed.anqp_nai_realm_list.realm_length",
48064 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48066
48067 {&hf_ieee80211_ff_anqp_nai_realm,
48068 {"NAI Realm", "wlan.fixed.anqp_nai_realm_list.realm",
48069 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48071
48072 {&hf_ieee80211_ff_anqp_nai_realm_eap_count,
48073 {"EAP Method Count", "wlan.fixed.anqp_nai_realm_list.eap_method_count",
48074 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48076
48077 {&hf_ieee80211_ff_anqp_nai_realm_eap_len,
48078 {"EAP Method subfield Length", "wlan.fixed.anqp_nai_realm_list.eap_method_len",
48079 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48081
48082 {&hf_ieee80211_ff_anqp_nai_realm_eap_method,
48083 {"EAP Method", "wlan.fixed.anqp_nai_realm_list.eap_method",
48084 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &eap_type_vals_ext, 0,
48085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48086
48087 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
48088 {"Authentication Parameter Count", "wlan.fixed.anqp_nai_realm_list.auth_param_count",
48089 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48091
48092 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
48093 {"Authentication Parameter ID", "wlan.fixed.anqp_nai_realm_list.auth_param_id",
48094 FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_auth_param_id_vals
))))
, 0,
48095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48096
48097 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
48098 {"Authentication Parameter Length", "wlan.fixed.anqp_nai_realm_list.auth_param_len",
48099 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48101
48102 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
48103 {"Authentication Parameter Value", "wlan.fixed.anqp_nai_realm_list.auth_param_value",
48104 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48106
48107 {&hf_ieee80211_3gpp_gc_gud,
48108 {"GUD", "wlan.fixed.anqp.3gpp_cellular_info.gud",
48109 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48110 "Generic container User Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48111
48112 {&hf_ieee80211_3gpp_gc_udhl,
48113 {"UDHL", "wlan.fixed.anqp.3gpp_cellular_info.udhl",
48114 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48115 "User Data Header Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48116
48117 {&hf_ieee80211_3gpp_gc_iei,
48118 {"IEI", "wlan.fixed.anqp.3gpp_cellular_info.iei",
48119 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48120 "Information Element Identity", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48121
48122 {&hf_ieee80211_3gpp_gc_plmn_len,
48123 {"PLMN Length", "wlan.fixed.anqp.3gpp_cellular_info.plmn_len",
48124 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48125 "Length of PLMN List value contents", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48126
48127 {&hf_ieee80211_3gpp_gc_num_plmns,
48128 {"Number of PLMNs", "wlan.fixed.anqp.3gpp_cellular_info.num_plmns",
48129 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48131
48132 {&hf_ieee80211_3gpp_gc_plmn,
48133 {"PLMN", "wlan.fixed.anqp.3gpp_cellular_info.plmn_info",
48134 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48135
48136 {&hf_ieee80211_ff_anqp_domain_name_len,
48137 {"Domain Name Length", "wlan.fixed.anqp.domain_name_list.len",
48138 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48140
48141 {&hf_ieee80211_ff_anqp_domain_name,
48142 {"Domain Name", "wlan.fixed.anqp.domain_name_list.name",
48143 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48145
48146 {&hf_ieee80211_ff_dls_timeout,
48147 {"DLS timeout", "wlan.fixed.dls_timeout",
48148 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
48149 "DLS timeout value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48150
48151 {&hf_ieee80211_ff_sa_query_action_code,
48152 {"Action code", "wlan.fixed.action_code",
48153 FT_UINT8, BASE_DEC, VALS(sa_query_action_codes)((0 ? (const struct _value_string*)0 : ((sa_query_action_codes
))))
, 0,
48154 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48155
48156 {&hf_ieee80211_ff_transaction_id,
48157 {"Transaction Id", "wlan.fixed.transaction_id",
48158 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
48159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48160
48161 {&hf_ieee80211_ff_send_confirm,
48162 {"Send-Confirm", "wlan.fixed.send_confirm",
48163 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48165
48166 {&hf_ieee80211_ff_scalar,
48167 {"Scalar", "wlan.fixed.scalar",
48168 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48170
48171 {&hf_ieee80211_ff_finite_field_element,
48172 {"Finite Field Element", "wlan.fixed.finite_field_element",
48173 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48175
48176 {&hf_ieee80211_ff_confirm,
48177 {"Confirm", "wlan.fixed.confirm",
48178 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48180
48181 {&hf_ieee80211_ff_finite_cyclic_group,
48182 {"Group Id", "wlan.fixed.finite_cyclic_group",
48183 FT_UINT16, BASE_DEC, VALS(ff_finite_cyclic_group_vals)((0 ? (const struct _value_string*)0 : ((ff_finite_cyclic_group_vals
))))
, 0,
48184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48185
48186 {&hf_ieee80211_ff_sae_message_type,
48187 {"SAE Message Type", "wlan.fixed.sae_message_type",
48188 FT_UINT16, BASE_DEC, VALS(ff_sae_message_type_vals)((0 ? (const struct _value_string*)0 : ((ff_sae_message_type_vals
))))
, 0,
48189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48190
48191 {&hf_ieee80211_ff_sae_anti_clogging_token,
48192 {"Anti-Clogging Token", "wlan.fixed.anti_clogging_token",
48193 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48194
48195 {&hf_ieee80211_anqp_wfa_subtype,
48196 {"WFA Subtype", "wlan.anqp.wfa.subtype",
48197 FT_UINT8, BASE_DEC, VALS(wfa_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((wfa_anqp_subtype_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48198
48199 {&hf_ieee80211_dpp_subtype,
48200 {"DPP Subtype", "wlan.wfa.dpp.subtype",
48201 FT_UINT8, BASE_DEC, VALS(dpp_subtype_vals)((0 ? (const struct _value_string*)0 : ((dpp_subtype_vals)))), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48202
48203 {&hf_ieee80211_hs20_indication_dgaf_disabled,
48204 {"DGAF Disabled", "wlan.hs20.indication.dgaf_disabled",
48205 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48206
48207 {&hf_ieee80211_hs20_indication_pps_mo_id_present,
48208 {"PPS MO ID Present", "wlan.hs20.indication.pps_mo_id_present",
48209 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48210
48211 {&hf_ieee80211_hs20_indication_anqp_domain_id_present,
48212 {"ANQP Domain ID Present", "wlan.hs20.indication.anqp_domain_id_present",
48213 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48214
48215 {&hf_ieee80211_hs20_reserved,
48216 { "Reserved", "wlan.hs20.indication.reserved",
48217 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48218
48219 {&hf_ieee80211_hs20_indication_version_number,
48220 {"Version Number", "wlan.hs20.indication.version_number",
48221 FT_UINT8, BASE_DEC, VALS(hs20_indication_version_number_vals)((0 ? (const struct _value_string*)0 : ((hs20_indication_version_number_vals
))))
, 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48222
48223 {&hf_ieee80211_hs20_indication_pps_mo_id,
48224 {"PPS MO ID", "wlan.hs20.indication.pps_mo_id",
48225 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48226
48227 {&hf_ieee80211_hs20_indication_anqp_domain_id,
48228 {"ANQP Domain ID", "wlan.hs20.indication.domain_id",
48229 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48230
48231 {&hf_ieee80211_hs20_anqp_subtype,
48232 {"Subtype", "wlan.hs20.anqp.subtype",
48233 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48234 "Hotspot 2.0 ANQP Subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48235
48236 {&hf_ieee80211_hs20_anqp_reserved,
48237 {"Reserved", "wlan.hs20.anqp.reserved",
48238 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48239
48240 {&hf_ieee80211_hs20_anqp_payload,
48241 {"Payload", "wlan.hs20.anqp.payload",
48242 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48243 "Hotspot 2.0 ANQP Payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48244
48245 {&hf_ieee80211_hs20_anqp_hs_query_list,
48246 {"Queried Subtype", "wlan.hs20.anqp.hs_query_list",
48247 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48248 "Queried HS 2.0 Element Subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48249
48250 {&hf_ieee80211_hs20_anqp_hs_capability_list,
48251 {"Capability", "wlan.hs20.anqp.hs_capability_list",
48252 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48253 "Hotspot 2.0 ANQP Subtype Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48254
48255 {&hf_ieee80211_hs20_anqp_ofn_length,
48256 {"Length", "wlan.hs20.anqp.ofn.length",
48257 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48258 "Operator Friendly Name Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48259
48260 {&hf_ieee80211_hs20_anqp_ofn_language,
48261 {"Language Code", "wlan.hs20.anqp.ofn.language",
48262 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48263 "Operator Friendly Name Language Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48264
48265 {&hf_ieee80211_hs20_anqp_ofn_name,
48266 {"Operator Friendly Name", "wlan.hs20.anqp.ofn.name",
48267 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48268 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48269
48270 {&hf_ieee80211_hs20_anqp_wan_metrics_link_status,
48271 {"Link Status", "wlan.hs20.anqp.wan_metrics.link_status",
48272 FT_UINT8, BASE_DEC, VALS(hs20_wm_link_status_vals)((0 ? (const struct _value_string*)0 : ((hs20_wm_link_status_vals
))))
, 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48273
48274 {&hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link,
48275 {"Symmetric Link", "wlan.hs20.anqp.wan_metrics.symmetric_link",
48276 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48277
48278 {&hf_ieee80211_hs20_anqp_wan_metrics_at_capacity,
48279 {"At Capacity", "wlan.hs20.anqp.wan_metrics.at_capacity",
48280 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48281
48282 {&hf_ieee80211_hs20_anqp_wan_metrics_reserved,
48283 {"Reserved", "wlan.hs20.anqp.wan_metrics.reserved",
48284 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48285
48286 {&hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed,
48287 {"Downlink Speed", "wlan.hs20.anqp.wan_metrics.downlink_speed",
48288 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48289
48290 {&hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed,
48291 {"Uplink Speed", "wlan.hs20.anqp.wan_metrics.uplink_speed",
48292 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48293
48294 {&hf_ieee80211_hs20_anqp_wan_metrics_downlink_load,
48295 {"Downlink Load", "wlan.hs20.anqp.wan_metrics.downlink_load",
48296 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48297
48298 {&hf_ieee80211_hs20_anqp_wan_metrics_uplink_load,
48299 {"Uplink Load", "wlan.hs20.anqp.wan_metrics.uplink_load",
48300 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48301
48302 {&hf_ieee80211_hs20_anqp_wan_metrics_lmd,
48303 {"LMD", "wlan.hs20.anqp.wan_metrics.lmd",
48304 FT_UINT16, BASE_DEC, NULL((void*)0), 0, "Load Measurement Duration", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48305
48306 {&hf_ieee80211_hs20_anqp_cc_proto_ip_proto,
48307 {"IP Protocol", "wlan.hs20.anqp.cc.ip_proto",
48308 FT_UINT8, BASE_DEC, VALS(hs20_cc_proto_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_proto_vals))
))
, 0,
48309 "ProtoPort Tuple - IP Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48310
48311 {&hf_ieee80211_hs20_anqp_cc_proto_port_num,
48312 {"Port Number", "wlan.hs20.anqp.cc.port_num",
48313 FT_UINT16, BASE_DEC, VALS(hs20_cc_port_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_port_vals)))
)
, 0,
48314 "ProtoPort Tuple - Port Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48315
48316 {&hf_ieee80211_hs20_anqp_cc_proto_status,
48317 {"Status", "wlan.hs20.anqp.cc.status",
48318 FT_UINT8, BASE_DEC, VALS(hs20_cc_status_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_status_vals)
)))
, 0,
48319 "ProtoPort Tuple - Status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48320
48321 {&hf_ieee80211_hs20_anqp_nai_hrq_count,
48322 {"NAI Home Realm Count", "wlan.hs20.anqp.nai_hrq.count",
48323 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48324
48325 {&hf_ieee80211_hs20_anqp_nai_hrq_encoding_type,
48326 {"NAI Home Realm Encoding Type",
48327 "wlan.hs20.anqp.nai_hrq.encoding_type",
48328 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_encoding_vals
))))
,
48329 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48330
48331 {&hf_ieee80211_hs20_anqp_nai_hrq_length,
48332 {"NAI Home Realm Name Length", "wlan.hs20.anqp.nai_hrq.length",
48333 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48334
48335 {&hf_ieee80211_hs20_anqp_nai_hrq_realm_name,
48336 {"NAI Home Realm Name", "wlan.hs20.anqp.nai_hrq.name",
48337 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48338
48339 {&hf_ieee80211_hs20_anqp_oper_class_indic,
48340 {"Operating Class", "wlan.hs20.anqp.oper_class_indic.oper_class",
48341 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))),
48342 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48343
48344 {&hf_ieee80211_hs20_osu_friendly_names_len,
48345 {"OSU Friendly Name Length", "wlan.hs20.osu_friendly_names_len",
48346 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48347
48348 {&hf_ieee80211_hs20_osu_friendly_name_length,
48349 {"Length", "wlan.hs20.osu_friendly_name.len",
48350 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48351
48352 {&hf_ieee80211_hs20_osu_friendly_name_language,
48353 {"Language Code", "wlan.hs20.osu_friendly_name.language",
48354 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48355
48356 {&hf_ieee80211_hs20_osu_friendly_name_name,
48357 {"OSU Friendly Name", "wlan.hs20.osu_friendly_name.name",
48358 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48359
48360 {&hf_ieee80211_hs20_osu_server_uri_len,
48361 {"OSU Server URI Length", "wlan.hs20.osu_server_uri_len",
48362 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48363
48364 {&hf_ieee80211_hs20_osu_server_uri,
48365 {"OSU Server URI", "wlan.hs20.osu_server_uri",
48366 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48367
48368 {&hf_ieee80211_hs20_osu_method_list_len,
48369 {"OSU Method List Length", "wlan.hs20.osu_method_list_len",
48370 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48371
48372 {&hf_ieee80211_hs20_osu_method_val,
48373 {"OSU Method", "wlan.hs20.osu_method_list.method",
48374 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48375
48376 {&hf_ieee80211_hs20_icons_avail_len,
48377 {"Icons Available Length", "wlan.hs20.osu_icons_avail_len",
48378 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48379
48380 {&hf_ieee80211_hs20_osu_providers_list_ssid_len,
48381 {"SSID Length", "wlan.hs20.anqp_osu_prov_list.ssid_len",
48382 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48383
48384 {&hf_ieee80211_hs20_osu_providers_ssid,
48385 {"SSID", "wlan.hs20.anqp_osu_prov_list.ssid",
48386 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48387
48388 {&hf_ieee80211_hs20_osu_providers_count,
48389 {"Number of OSU Providers", "wlan.hs20.anqp_osu_prov_list.number",
48390 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48391
48392 {&hf_ieee80211_hs20_osu_prov_length,
48393 {"OSU Provider Length", "wlan.hs20.anqp_osu_prov.len",
48394 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48395
48396 {&hf_ieee80211_hs20_icon_request_filename,
48397 {"Icon Filename", "wlan.hs20.anqp_icon_request.icon_filename",
48398 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48399
48400 {&hf_ieee80211_osu_icon_avail_width,
48401 {"Icon Width", "wlan.hs20.osu_icons_avail.icon_width",
48402 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48403
48404 {&hf_ieee80211_osu_icon_avail_height,
48405 {"Icon Height", "wlan.hs20.osu_icons_avail.icon_height",
48406 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48407
48408 {&hf_ieee80211_osu_icon_avail_lang_code,
48409 {"Language Code", "wlan.hs20.osu_icons_avail.lang_code",
48410 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48411
48412 {&hf_ieee80211_osu_icon_avail_icon_type_len,
48413 {"Icon Type Length", "wlan.hs20.osu_icons_avail.icon_type_len",
48414 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48415
48416 {&hf_ieee80211_osu_icon_avail_icon_type,
48417 {"Icon Type", "wlan.hs20.osu_icons_avail.icon_type",
48418 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48419
48420 {&hf_ieee80211_osu_icon_avail_filename_len,
48421 {"Icon Filename Length", "wlan.hs20.osu_icons_avail.icon_filename_len",
48422 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48423
48424 {&hf_ieee80211_osu_icon_avail_filename,
48425 {"Icon Filename", "wlan.hs20.osu_icons_avail.icon_filename",
48426 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48427
48428 {&hf_ieee80211_hs20_osu_nai_len,
48429 {"OSU_NAI Length", "wlan.hs20.osu_nai.len",
48430 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48431
48432 {&hf_ieee80211_hs20_osu_nai,
48433 {"OSU_NAI", "wlan.hs20.osu_nai",
48434 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48435
48436 {&hf_ieee80211_hs20_osu_service_desc_len,
48437 {"OSU Service Description Length", "wlan.hs20.osu_service_desc_len",
48438 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48439
48440 {&hf_ieee80211_hs20_osu_service_desc_duple_len,
48441 {"Length", "wlan.hs20.osu_service_desc.duple.len",
48442 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48443
48444 {&hf_ieee80211_hs20_osu_service_desc_lang,
48445 {"Language Code", "wlan.hs20.osu_service_desc.duple.lang",
48446 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48447
48448 {&hf_ieee80211_hs20_osu_service_desc,
48449 {"OSU Service Description", "wlan.hs20.osu_service_desc.duple.desc",
48450 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48451
48452 {&hf_ieee80211_hs20_icon_binary_file_status,
48453 {"Download Status Code", "wlan.hs20.anqp_icon_request.download_status",
48454 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48455
48456 {&hf_ieee80211_hs20_icon_type_length,
48457 {"Icon Type Length", "wlan.hs20.anqp_icon_request.icon_type_len",
48458 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48459
48460 {&hf_ieee80211_hs20_icon_type,
48461 {"Icon Type", "wlan.hs20.anqp_icon_request.icon_type",
48462 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48463
48464 {&hf_ieee80211_hs20_icon_binary_data_len,
48465 {"Icon Binary Data Length", "wlan.anqp_icon_request.icon_binary_data_len",
48466 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48467
48468 {&hf_ieee80211_hs20_icon_binary_data,
48469 {"Icon Binary Data", "wlan.h220.anqp_icon_request.icon_binary_data",
48470 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48471
48472 {&hf_ieee80211_hs20_subscription_remediation_url_len,
48473 {"Server URL Length", "wlan.hs20.subs_remediation.server_url_len",
48474 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48475
48476 {&hf_ieee80211_hs20_subscription_remediation_server_url,
48477 {"Server URL", "wlan.hs20.subs_remediation.server_url",
48478 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48479
48480 {&hf_ieee80211_hs20_subscription_remediation_server_method,
48481 {"Server Method", "wlan.hs20.subs_remediation.server_method",
48482 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48483
48484 {&hf_ieee80211_hs20_deauth_reason_code,
48485 {"De-Auth Reason Code", "wlan.hs20.deauth.reason_code",
48486 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48487
48488 {&hf_ieee80211_hs20_reauth_delay,
48489 {"Re-Auth Delay", "wlan.hs20.deauth.reauth_delay",
48490 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_seconds)((0 ? (const struct unit_name_string*)0 : ((&units_seconds
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48491
48492 {&hf_ieee80211_hs20_deauth_reason_url_len,
48493 {"Reason URL Length", "wlan.hs20.deauth.reason_url_len",
48494 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48495
48496 {&hf_ieee80211_hs20_deauth_imminent_reason_url,
48497 {"Reason URL", "wlan.hs20.deauth.reason_url",
48498 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48499
48500 {&hf_ieee80211_hs20_anqp_venue_url_length,
48501 {"Length", "wlan.hs20.venue_url.len",
48502 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48503
48504 {&hf_ieee80211_hs20_anqp_venue_number,
48505 {"Venue number", "wlan.hs20.venue_url.venue_num",
48506 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48507
48508 {&hf_ieee80211_hs20_anqp_venue_url,
48509 {"Venue URL", "wlan.hs20.venue_url.url",
48510 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48511
48512 {&hf_ieee80211_hs20_anqp_advice_of_charge_length,
48513 {"Length", "wlan.hs20.advice_of_charge.len",
48514 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48515
48516 {&hf_ieee80211_hs20_anqp_advice_of_charge_type,
48517 {"Advice of Charge Type", "wlan.hs20.advice_of_charge.type",
48518 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48519
48520 {&hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding,
48521 {"NAI Realm Encoding", "wlan.hs20.advice_of_charge.nai_realm_enc",
48522 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48523
48524 {&hf_ieee80211_hs20_anqp_aoc_nai_realm_len,
48525 {"NAI Realm Length", "wlan.hs20.advice_of_charge.nai_realm_len",
48526 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48527
48528 {&hf_ieee80211_hs20_anqp_aoc_nai_realm,
48529 {"NAI Realm", "wlan.hs20.advice_of_charge.nai_realm",
48530 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48531
48532 {&hf_ieee80211_hs20_anqp_aoc_plan_len,
48533 {"Plan length", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_len",
48534 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48535
48536 {&hf_ieee80211_hs20_anqp_aoc_plan_lang,
48537 {"Plan language", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_lang",
48538 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48539
48540 {&hf_ieee80211_hs20_anqp_aoc_plan_curcy,
48541 {"Plan currency", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_curcy",
48542 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48543
48544 {&hf_ieee80211_hs20_anqp_aoc_plan_information,
48545 {"Plan information", "wlan.hs20.advice_of_charge.plan_info_tuples.info",
48546 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48547
48548 {&hf_ieee80211_tag,
48549 {"Tag", "wlan.tag",
48550 FT_NONE, BASE_NONE, NULL((void*)0), 0,
48551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48552
48553 {&hf_ieee80211_tag_number,
48554 {"Tag Number", "wlan.tag.number",
48555 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
48556 "Element ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48557
48558 {&hf_ieee80211_tag_length,
48559 {"Tag length", "wlan.tag.length",
48560 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
48561 "Length of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48562
48563 {&hf_ieee80211_tag_data,
48564 {"Tag Data", "wlan.tag.data",
48565 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48566 "Data Interpretation of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48567
48568 {&hf_ieee80211_tag_oui,
48569 {"OUI", "wlan.tag.oui",
48570 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
48571 "OUI of vendor specific IE", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48572
48573 {&hf_ieee80211_tag_oui_wfa_subtype,
48574 {"WFA Subtype", "wlan.tag.oui.wfa_subtype",
48575 FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals)((0 ? (const struct _value_string*)0 : ((wfa_subtype_vals)))), 0,
48576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48577
48578 {&hf_ieee80211_tag_ds_param_channel,
48579 {"Current Channel", "wlan.ds.current_channel",
48580 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48581 "DS Parameter Set - Current Channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48582
48583 {&hf_ieee80211_tag_cfp_count,
48584 {"CFP Count", "wlan.cfp.count",
48585 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48586 "Indicates how many delivery traffic indication messages (DTIMs)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48587
48588 {&hf_ieee80211_tag_cfp_period,
48589 {"CFP Period", "wlan.cfp.period",
48590 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48591 "Indicates the number of DTIM intervals between the start of CFPs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48592
48593 {&hf_ieee80211_tag_cfp_max_duration,
48594 {"CFP Max Duration", "wlan.cfp.max_duration",
48595 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48596 "Indicates the maximum duration (in TU) of the CFP that may be generated by this PCF", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48597
48598 {&hf_ieee80211_tag_cfp_dur_remaining,
48599 {"CFP Dur Remaining", "wlan.cfp.dur_remaining",
48600 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48601 "Indicates the maximum time (in TU) remaining in the present CFP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48602
48603 {&hf_ieee80211_tag_vendor_oui_type,
48604 {"Vendor Specific OUI Type", "wlan.tag.vendor.oui.type",
48605 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48607
48608 {&hf_ieee80211_tag_vendor_data,
48609 {"Vendor Specific Data", "wlan.tag.vendor.data",
48610 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48611 "Unknown/undecoded Vendor Specific Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48612
48613 {&hf_ieee80211_symbp_extreme_assoc_clients,
48614 {"Associated clients", "wlan.tag.symbol_proprietary.extreme.assoc_clients",
48615 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48617
48618 {&hf_ieee80211_symbp_extreme_load_kbps,
48619 {"Load", "wlan.tag.symbol_proprietary.extreme.load_kbps",
48620 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0,
48621 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48622
48623 {&hf_ieee80211_symbp_extreme_load_pps,
48624 {"Load", "wlan.tag.symbol_proprietary.extreme.load_pps",
48625 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_pkts_per_sec)((0 ? (const struct unit_name_string*)0 : ((&units_pkts_per_sec
))))
, 0,
48626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48627
48628 {&hf_ieee80211_symbp_extreme_client_tx_power,
48629 {"Desired client Tx power", "wlan.tag.symbol_proprietary.extreme.client_txpower",
48630 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48632
48633 {&hf_ieee80211_symbp_extreme_timestamp,
48634 {"Timestamp", "wlan.tag.symbol_proprietary.extreme.timestamp",
48635 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL((void*)0), 0,
48636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48637
48638 {&hf_ieee80211_tag_symbol_proprietary_oui,
48639 {"Symbol Proprietary OUI", "wlan.tag.symbol_proprietary.oui",
48640 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
48641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48642
48643 {&hf_ieee80211_tag_symbol_proprietary_data,
48644 {"Symbol Proprietary Data", "wlan.tag.symbol_proprietary.data",
48645 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48646 "Unknown/undecoded Symbol Proprietary Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48647
48648 {&hf_ieee80211_tim_dtim_count,
48649 {"DTIM count", "wlan.tim.dtim_count",
48650 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48651 "Indicates how many Beacon frames (including the current frame) appear before the next DTIM", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48652
48653 {&hf_ieee80211_tim_dtim_period,
48654 {"DTIM period", "wlan.tim.dtim_period",
48655 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48656 "Indicates the number of beacon intervals between successive DTIMs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48657
48658 {&hf_ieee80211_tim_bmapctl,
48659 {"Bitmap control", "wlan.tim.bmapctl",
48660 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48662
48663 {&hf_ieee80211_tim_bmapctl_mcast,
48664 {"Multicast", "wlan.tim.bmapctl.multicast",
48665 FT_BOOLEAN, 8, NULL((void*)0), 0x1,
48666 "Contains the Traffic Indicator bit associated with Association ID 0", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48667
48668 {&hf_ieee80211_tim_bmapctl_offset,
48669 {"Bitmap Offset", "wlan.tim.bmapctl.offset",
48670 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE,
48671 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48672
48673 {&hf_ieee80211_tim_partial_virtual_bitmap,
48674 {"Partial Virtual Bitmap", "wlan.tim.partial_virtual_bitmap",
48675 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
48676 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48677
48678 {&hf_ieee80211_tim_aid,
48679 {"Association ID", "wlan.tim.aid",
48680 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
48681 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48682
48683 {&hf_ieee80211_tag_ibss_atim_window,
48684 {"Atim Windows", "wlan.ibss.atim_windows",
48685 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
48686 "Contains the ATIM Window length in TU", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48687
48688 {&hf_ieee80211_tag_country_info_code,
48689 {"Code", "wlan.country_info.code",
48690 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
48691 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48692
48693 {&hf_ieee80211_tag_country_info_env,
48694 {"Environment", "wlan.country_info.environment",
48695 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS0x00008000, VALS(environment_vals)((0 ? (const struct _value_string*)0 : ((environment_vals)))), 0x0,
48696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48697
48698 {&hf_ieee80211_tag_country_info_pad,
48699 {"Padding", "wlan.country_info.padding",
48700 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
48701 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48702
48703 {&hf_ieee80211_tag_country_info_fnm,
48704 {"Country Info", "wlan.country_info.fnm",
48705 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
48706 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48707
48708 {&hf_ieee80211_tag_country_info_fnm_fcn,
48709 {"First Channel Number", "wlan.country_info.fnm.fcn",
48710 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48711 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48712
48713 {&hf_ieee80211_tag_country_info_fnm_nc,
48714 {"Number of Channels", "wlan.country_info.fnm.nc",
48715 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48716 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48717
48718 {&hf_ieee80211_tag_country_info_fnm_mtpl,
48719 {"Maximum Transmit Power Level", "wlan.country_info.fnm.mtpl",
48720 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
48721 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48722
48723 {&hf_ieee80211_tag_country_info_rrc,
48724 {"Country Info", "wlan.country_info.rrc",
48725 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
48726 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48727
48728 {&hf_ieee80211_tag_country_info_rrc_oei,
48729 {"Operating Extension Identifier", "wlan.country_info.rrc.oei",
48730 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48731 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48732
48733 {&hf_ieee80211_tag_country_info_rrc_oc,
48734 {"Operating Class", "wlan.country_info.rrc.oc",
48735 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48736 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48737
48738 {&hf_ieee80211_tag_country_info_rrc_cc,
48739 {"Coverage Class", "wlan.country_info.rrc.cc",
48740 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48741 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48742
48743 {&hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
48744 {"Prime Radix", "wlan.fh_hopping.parameter.prime_radix",
48745 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48746 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48747
48748 {&hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
48749 {"Number of Channels", "wlan.fh_hopping.parameter.nb_channels",
48750 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48752
48753 {&hf_ieee80211_tag_fh_hopping_table_flag,
48754 {"Flag", "wlan.fh_hopping.table.flag",
48755 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
48756 "Indicates that a Random Table is present when the value is 1", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48757
48758 {&hf_ieee80211_tag_fh_hopping_table_number_of_sets,
48759 {"Number of Sets", "wlan.fh_hopping.table.number_of_sets",
48760 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48761 "Indicates the total number of sets within the hopping patterns", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48762
48763 {&hf_ieee80211_tag_fh_hopping_table_modulus,
48764 {"Modulus", "wlan.fh_hopping.table.modulus",
48765 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
48766 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48767
48768 {&hf_ieee80211_tag_fh_hopping_table_offset,
48769 {"Offset", "wlan.fh_hopping.table.offset",
48770 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
48771 "Indicate the values to be used in the equations to create a hopping sequence from the Random Table information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48772
48773 {&hf_ieee80211_tag_fh_hopping_random_table,
48774 {"Random Table", "wlan.fh_hopping.table.random_table",
48775 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
48776 "It is a vector of single octet values that indicate the random sequence to be followed during a hopping sequence", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48777
48778 {&hf_ieee80211_tag_request,
48779 {"Requested Element ID", "wlan.tag.request",
48780 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
48781 "The list of elements that are to be included in the responding STA Probe Response frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48782
48783 {&hf_ieee80211_tag_extended_request_id,
48784 {"Requested Element ID", "wlan.tag.extended_request.id",
48785 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
48786 "The Element ID used to indicate an extended element", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48787
48788 {&hf_ieee80211_tag_extended_request_extension,
48789 {"Requested Element ID Extensions", "wlan.tag.extended_request.ext",
48790 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_eid_ext_ext, 0,
48791 "The list of elements extensions that are to be included in the responding STA Probe Response frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48792
48793 {&hf_ieee80211_tclas_up,
48794 {"User Priority", "wlan.tclas.user_priority",
48795 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(user_prio_rvals)((0 ? (const struct _range_string*)0 : ((user_prio_rvals)))), 0,
48796 "Contains the value of the UP of the associated MSDUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48797
48798 {&hf_ieee80211_tclas_class_type,
48799 {"Classifier Type", "wlan.tclas.class_type",
48800 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(classifier_type)((0 ? (const struct _range_string*)0 : ((classifier_type)))), 0,
48801 "Specifies the type of classifier parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48802
48803 {&hf_ieee80211_tclas_class_mask,
48804 {"Classifier Mask", "wlan.tclas.class_mask",
48805 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48806 "Specifies a bitmap where bits that are set to 1 identify a subset of the classifier parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48807
48808 {&hf_ieee80211_tclas_mask_reserved,
48809 {"Reserved", "wlan.tclas.class_mask.reserved",
48810 FT_UINT8, BASE_HEX, NULL((void*)0), 0, "Class mask is reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48811
48812 {&hf_ieee80211_tclas_class_mask0_src_addr,
48813 {"Source Address", "wlan.tclas.class_mask.src_addr",
48814 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48815
48816 {&hf_ieee80211_tclas_class_mask0_dst_addr,
48817 {"Destination Address", "wlan.tclas.class_mask.dst_addr",
48818 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48819
48820 {&hf_ieee80211_tclas_class_mask0_type,
48821 {"Type", "wlan.tclas.class_mask.type",
48822 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48823
48824 {&hf_ieee80211_tclas_class_mask1_ver,
48825 {"Version", "wlan.tclas.class_mask.version",
48826 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48827
48828 {&hf_ieee80211_tclas_class_mask1_src_ip,
48829 {"Source IP Address", "wlan.tclas.class_mask.src_ip",
48830 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48831
48832 {&hf_ieee80211_tclas_class_mask1_dst_ip,
48833 {"Destination IP Address", "wlan.tclas.class_mask.dst_ip",
48834 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48835
48836 {&hf_ieee80211_tclas_class_mask1_src_port,
48837 {"Source Port", "wlan.tclas.class_mask.src_port",
48838 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48839
48840 {&hf_ieee80211_tclas_class_mask1_dst_port,
48841 {"Destination Port", "wlan.tclas.class_mask.dst_port",
48842 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48843
48844 {&hf_ieee80211_tclas_class_mask1_ipv4_dscp,
48845 {"DSCP", "wlan.tclas.class_mask.dscp",
48846 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48847
48848 {&hf_ieee80211_tclas_class_mask1_ipv4_proto,
48849 {"Protocol", "wlan.tclas.class_mask.proto",
48850 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48851
48852 {&hf_ieee80211_tclas_class_mask1_ipv6_flow,
48853 {"Flow Label", "wlan.tclas.class_mask.flow_label",
48854 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48855
48856 {&hf_ieee80211_tclas_class_mask1_reserved,
48857 {"Reserved", "wlan.tclas.class_mask.reserved",
48858 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48859
48860 {&hf_ieee80211_tclas_class_mask2_tci,
48861 {"802.1Q CLAN TCI", "wlan.tclas.class_mask.tci",
48862 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48863
48864 {&hf_ieee80211_tclas_src_mac_addr,
48865 {"Source address", "wlan.tclas.src_mac_addr",
48866 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48867 "Classifier Parameters Ethernet Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48868
48869 {&hf_ieee80211_tclas_dst_mac_addr,
48870 {"Destination address", "wlan.tclas.dat_mac_addr",
48871 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48872 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48873
48874 {&hf_ieee80211_tclas_ether_type,
48875 {"Ethernet Type", "wlan.tclas.ether_type",
48876 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48878
48879 {&hf_ieee80211_tclas_version,
48880 {"IP Version", "wlan.tclas.version",
48881 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48883
48884 {&hf_ieee80211_tclas_ipv4_src,
48885 {"IPv4 Src Addr", "wlan.tclas.ipv4_src",
48886 FT_IPv4, BASE_NONE, NULL((void*)0), 0,
48887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48888
48889 {&hf_ieee80211_tclas_ipv4_dst,
48890 {"IPv4 Dst Addr", "wlan.tclas.ipv4_dst",
48891 FT_IPv4, BASE_NONE, NULL((void*)0), 0,
48892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48893
48894 {&hf_ieee80211_tclas_src_port,
48895 {"Source Port", "wlan.tclas.src_port",
48896 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48898
48899 {&hf_ieee80211_tclas_dst_port,
48900 {"Destination Port", "wlan.tclas.dst_port",
48901 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48903
48904 {&hf_ieee80211_tclas_dscp,
48905 {"IPv4 DSCP", "wlan.tclas.dscp",
48906 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48907 "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48908
48909 {&hf_ieee80211_tclas_protocol,
48910 {"Protocol", "wlan.tclas.protocol",
48911 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48912 "IPv4 Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48913
48914 {&hf_ieee80211_tclas_ipv6_src,
48915 {"IPv6 Src Addr", "wlan.tclas.ipv6_src",
48916 FT_IPv6, BASE_NONE, NULL((void*)0), 0,
48917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48918
48919 {&hf_ieee80211_tclas_ipv6_dst,
48920 {"IPv6 Dst Addr", "wlan.tclas.ipv6_dst",
48921 FT_IPv6, BASE_NONE, NULL((void*)0), 0,
48922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48923
48924 {&hf_ieee80211_tclas_flow,
48925 {"Flow Label", "wlan.tclas.flow",
48926 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
48927 "IPv6 Flow Label", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48928
48929 {&hf_ieee80211_tclas_tag_type,
48930 {"802.1Q Tag Type", "wlan.tclas.tag_type",
48931 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
48932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48933
48934 {&hf_ieee80211_tclas_filter_offset,
48935 {"Filter Offset", "wlan.tclas.filter_offset",
48936 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48937
48938 {&hf_ieee80211_tclas_filter_value,
48939 {"Filter Value", "wlan.tclas.filter_value",
48940 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48941
48942 {&hf_ieee80211_tclas_filter_mask,
48943 {"Filter Mask", "wlan.tclas.filter_mask",
48944 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48945
48946 {&hf_ieee80211_tclas4_version,
48947 {"Version", "wlan.tclas.class4.version",
48948 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48949
48950 {&hf_ieee80211_tclas_class_mask4_ver,
48951 {"Version", "wlan.tclas.class4.mask.version",
48952 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48953
48954 {&hf_ieee80211_tclas_class_mask4_4_src_ip,
48955 {"Source IP (IPv4)", "wlan.tclas.class4.mask.ipv4_src",
48956 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48957
48958 {&hf_ieee80211_tclas_class_mask4_4_dst_ip,
48959 {"Destination IP (IPv4)", "wlan.tclas.class4.mask.ipv4_dst",
48960 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48961
48962 {&hf_ieee80211_tclas_class_mask4_src_port,
48963 {"Source Port", "wlan.tclas.class4.mask.src_port",
48964 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48965
48966 {&hf_ieee80211_tclas_class_mask4_dst_port,
48967 {"Destination Port", "wlan.tclas.class4.mask.dst_port",
48968 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48969
48970 {&hf_ieee80211_tclas_class_mask4_dscp,
48971 {"DSCP", "wlan.tclas.class4.mask.dscp",
48972 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48973
48974 {&hf_ieee80211_tclas_class_mask4_ipv4_proto,
48975 {"Protocol", "wlan.tclas.class4.mask.protocol",
48976 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48977
48978 {&hf_ieee80211_tclas_class_mask4_reserved,
48979 {"Reserved", "wlan.tclas.class4.mask.reserved",
48980 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48981
48982 {&hf_ieee80211_tclas_class_mask4_6_src_ip,
48983 {"Source IP (IPv6)", "wlan.tclas.class4.mask.ipv6_src",
48984 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48985
48986 {&hf_ieee80211_tclas_class_mask4_6_dst_ip,
48987 {"Destination IP (IPv6)", "wlan.tclas.class4.mask.ipv6_dst",
48988 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48989
48990 {&hf_ieee80211_tclas_reserved_bytes,
48991 {"Reserved", "wlan.tclas.reserved",
48992 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48993
48994 {&hf_ieee80211_tclas_class_mask4_next_hdr,
48995 {"Next Header", "wlan.tclas.class4.mask.next_header",
48996 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48997
48998 {&hf_ieee80211_tclas_class_mask4_flow_label,
48999 {"Flow Label", "wlan.tclas.class4.mask.flow_label",
49000 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49001
49002 {&hf_ieee80211_tclas4_ipv4_src,
49003 {"Source IP (IPv4)", "wlan.tclas.class4.ipv4_src_ip",
49004 FT_IPv4, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49005
49006 {&hf_ieee80211_tclas4_ipv4_dst,
49007 {"Destination IP (IPv4)", "wlan.tclas.class4.ipv4_dst_ip",
49008 FT_IPv4, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49009
49010 {&hf_ieee80211_tclas4_src_port,
49011 {"Source Port", "wlan.tclas.class4.src_port",
49012 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49013
49014 {&hf_ieee80211_tclas4_dst_port,
49015 {"Destination Port", "wlan.tclas.class4.dst_port",
49016 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49017
49018 {&hf_ieee80211_tclas4_dscp,
49019 {"DSCP", "wlan.tclas.class4.dscp",
49020 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49021
49022 {&hf_ieee80211_tclas4_protocol,
49023 {"Protocol", "wlan.tclas.class4.protocol",
49024 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49025
49026 {&hf_ieee80211_tclas4_reserved,
49027 {"Reserved", "wlan.tclas.class4.reserved",
49028 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49029
49030 {&hf_ieee80211_tclas4_ipv6_src,
49031 {"Source IP (IPv6)", "wlan.tclas.class4.ipv6_src_ip",
49032 FT_IPv6, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49033
49034 {&hf_ieee80211_tclas4_ipv6_dst,
49035 {"Destination IP (IPv6)", "wlan.tclas.class4.ipv6_dst_ip",
49036 FT_IPv6, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49037
49038 {&hf_ieee80211_tclas4_next_hdr,
49039 {"Next Header", "wlan.tclas.class4.next_header",
49040 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49041
49042 {&hf_ieee80211_tclas4_flow,
49043 {"Flow Label", "wlan.tclas.class4.flow_label",
49044 FT_UINT24, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49045
49046 {&hf_ieee80211_tclas_tclas_8021d_up_pcp,
49047 {"802.1D UP/802.1Q Priority Code Point", "wlan.tclas.class4.8021dq_up_pcp",
49048 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49049
49050 {&hf_ieee80211_tclas_8021q_dei,
49051 {"802.1Q DEI", "wlan.tclas.class4.8021q_dei",
49052 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49053
49054 {&hf_ieee80211_tclas_8021q_vid,
49055 {"802.1Q VID", "wlan.tclas.class4.8021q_vid",
49056 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49057
49058 {&hf_ieee80211_tclas_class_mask5_up_prio,
49059 {"802.1D UP/802.1Q PCP", "wlan.tclas.class5.mask.8021dq_up_prio",
49060 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49061
49062 {&hf_ieee80211_tclas_class_mask5_dei,
49063 {"802.1Q DEI", "wlan.tclas.class4.mask.8021q_dei",
49064 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49065
49066 {&hf_ieee80211_tclas_class_mask5_vid,
49067 {"802.1Q VID", "wlan.tclas.class4.mask.8021q_vid",
49068 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49069
49070 {&hf_ieee80211_tclas_class_mask5_reserved,
49071 {"Reserved", "wlan.tclas.class5.mask.reserved",
49072 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49073
49074 {&hf_ieee80211_tclas_class_mask6_a_above,
49075 {"Classifier Mask", "wlan.tclas.class6-9.mask",
49076 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49077
49078 {&hf_ieee80211_tclas_class_mask6_frame_control_match_spec,
49079 {"Frame Control", "wlan.tclas.class6.mask.frame_control",
49080 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49081 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49082
49083 {&hf_ieee80211_tclas_class_mask6_duration_id_match_spec,
49084 {"Duration ID", "wlan.tclas.class6.mask.duration_id",
49085 FT_UINT24, BASE_HEX, VALS(duration_id_mask_vals)((0 ? (const struct _value_string*)0 : ((duration_id_mask_vals
))))
,
49086 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49087
49088 {&hf_ieee80211_tclas_class_mask6_address_1_match_spec,
49089 {"Address 1", "wlan.tclas.class6.mask.address_1",
49090 FT_UINT24, BASE_HEX, VALS(address_1_mask_vals)((0 ? (const struct _value_string*)0 : ((address_1_mask_vals)
)))
, 0x000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49091
49092 {&hf_ieee80211_tclas_class_mask6_address_2_match_spec,
49093 {"Address 2", "wlan.tclas.class6.mask.address_2",
49094 FT_UINT24, BASE_HEX, VALS(address_2_mask_vals)((0 ? (const struct _value_string*)0 : ((address_2_mask_vals)
)))
, 0x000C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49095
49096 {&hf_ieee80211_tclas_class_mask6_address_3_match_spec,
49097 {"Address 3", "wlan.tclas.class6.mask.address_3",
49098 FT_UINT24, BASE_HEX, VALS(address_3_mask_vals)((0 ? (const struct _value_string*)0 : ((address_3_mask_vals)
)))
, 0x003000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49099
49100 {&hf_ieee80211_tclas_class_mask6_sequence_control_spec,
49101 {"Sequence Control", "wlan.tclas.class6.mask.sequence_control",
49102 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49103 0x00C000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49104
49105 {&hf_ieee80211_tclas_class_mask6_address_4_match_spec,
49106 {"Address 4", "wlan.tclas.class6.mask.address_4",
49107 FT_UINT24, BASE_HEX, VALS(address_4_mask_vals)((0 ? (const struct _value_string*)0 : ((address_4_mask_vals)
)))
, 0x030000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49108
49109 {&hf_ieee80211_tclas_class_mask6_qos_control_spec,
49110 {"QoS Control", "wlan.tclas.class6.mask.qos_control",
49111 FT_UINT24, BASE_HEX, VALS(qos_control_mask_vals)((0 ? (const struct _value_string*)0 : ((qos_control_mask_vals
))))
,
49112 0x0C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49113
49114 {&hf_ieee80211_tclas_class_mask6_ht_control_spec,
49115 {"HT Control", "wlan.tclas.class6.mask.ht_control",
49116 FT_UINT24, BASE_HEX, VALS(ht_control_mask_vals)((0 ? (const struct _value_string*)0 : ((ht_control_mask_vals
))))
, 0x300000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49117
49118 {&hf_ieee80211_tclas_class_mask6_reserved,
49119 {"Reserved", "wlan.tclas.class6.mask.reserved",
49120 FT_UINT24, BASE_HEX, NULL((void*)0), 0xC00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49121
49122 {&hf_ieee80211_tclas6_frame_control_spec,
49123 {"Frame Control Spec", "wlan.tclas.class6.frame_control_spec",
49124 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49125
49126 {&hf_ieee80211_tclas6_frame_control_mask,
49127 {"Frame Control Mask", "wlan.tclas.class6.frame_control_mask",
49128 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49129
49130 {&hf_ieee80211_tclas6_duration_spec,
49131 {"Duration Spec", "wlan.tclas.class6.duration_spec",
49132 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49133
49134 {&hf_ieee80211_tclas6_duration_mask,
49135 {"Duration Mask", "wlan.tclas.class6.duration_mask",
49136 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49137
49138 {&hf_ieee80211_tclas6_address_1_spec,
49139 {"Address 1 Spec", "wlan.tclas.class6.address_1_spec",
49140 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49141
49142 {&hf_ieee80211_tclas6_address_1_mask,
49143 {"Address 1 Mask", "wlan.tclas.class6.address_1_mask",
49144 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49145
49146 {&hf_ieee80211_tclas6_address_2_spec,
49147 {"Address 2 Spec", "wlan.tclas.class6.address_2_spec",
49148 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49149
49150 {&hf_ieee80211_tclas6_address_2_mask,
49151 {"Address 2 Mask", "wlan.tclas.class6.address_2_mask",
49152 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49153
49154 {&hf_ieee80211_tclas6_address_3_spec,
49155 {"Address 3 Spec", "wlan.tclas.class6.address_3_spec",
49156 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49157
49158 {&hf_ieee80211_tclas6_address_3_mask,
49159 {"Address 3 Mask", "wlan.tclas.class6.address_3_mask",
49160 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49161
49162 {&hf_ieee80211_tclas6_sequence_control_spec,
49163 {"Sequence Control Spec", "wlan.tclas.class6.sequence_control_spec",
49164 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49165
49166 {&hf_ieee80211_tclas6_sequence_control_mask,
49167 {"Sequence Control Mask", "wlan.tclas.class6.sequence_control_mask",
49168 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49169
49170 {&hf_ieee80211_tclas6_address_4_spec,
49171 {"Address 4 Spec", "wlan.tclas.class6.address_4_spec",
49172 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49173
49174 {&hf_ieee80211_tclas6_address_4_mask,
49175 {"Address 4 Mask", "wlan.tclas.class6.address_4_mask",
49176 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49177
49178 {&hf_ieee80211_tclas6_qos_control_spec,
49179 {"QoS Control Spec", "wlan.tclas.class6.qos_control_spes",
49180 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49181
49182 {&hf_ieee80211_tclas6_qos_control_mask,
49183 {"QoS Control Mask", "wlan.tclas.class6.qos_control_mask",
49184 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49185
49186 {&hf_ieee80211_tclas6_ht_control_spec,
49187 {"HT Control Spec", "wlan.tclas.class6.ht_control_spec",
49188 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49189
49190 {&hf_ieee80211_tclas6_ht_control_mask,
49191 {"HT Control Mask", "wlan.tclas.class6.ht_control_mask",
49192 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49193
49194 {&hf_ieee80211_tclas_class_mask7_frame_control_match_spec,
49195 {"Frame Control Match", "wlan.tclas.class7.frame_control_spec",
49196 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49197 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49198
49199 {&hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec,
49200 {"Address 1 (SID) Spec", "wlan.tclas.class4.address_1_sid_spec",
49201 FT_UINT24, BASE_HEX, VALS(address_1_sid_mask_vals)((0 ? (const struct _value_string*)0 : ((address_1_sid_mask_vals
))))
,
49202 0x00000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49203
49204 {&hf_ieee80211_tclas_class_mask7_address_2_match_spec,
49205 {"Address 2 Spec", "wlan.tclas.class7.address_2i_match_spec",
49206 FT_UINT24, BASE_HEX, VALS(address_2_mask_vals)((0 ? (const struct _value_string*)0 : ((address_2_mask_vals)
)))
, 0x000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49207
49208 {&hf_ieee80211_tclas_class_mask7_sequence_control_spec,
49209 {"Sequence Control Spec", "wlan.tclas.class7.sequence_control_spec",
49210 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49211 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49212
49213 {&hf_ieee80211_tclas_class_mask7_address_3_match_spec,
49214 {"Address 3 Spec", "wlan.tclas.class7.address_3_match_spec",
49215 FT_UINT24, BASE_HEX, VALS(address_3_mask_vals)((0 ? (const struct _value_string*)0 : ((address_3_mask_vals)
)))
, 0x000c00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49216
49217 {&hf_ieee80211_tclas_class_mask7_address_4_match_spec,
49218 {"Address 4 Spec", "wlan.tclas.class7.address_4_match_spec",
49219 FT_UINT24, BASE_HEX, VALS(address_4_mask_vals)((0 ? (const struct _value_string*)0 : ((address_4_mask_vals)
)))
, 0x003000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49220
49221 {&hf_ieee80211_tclas_class_mask7_reserved,
49222 {"Reserved", "wlan.tclas.class7.reserved",
49223 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49224
49225 {&hf_ieee80211_tclas7_frame_control_spec,
49226 {"Frame Control Spec", "wlan.tclas.class7.frame_control_spec",
49227 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49228
49229 {&hf_ieee80211_tclas7_frame_control_mask,
49230 {"Frame Control Mask", "wlan.tclas.class7.frame_control_mask",
49231 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49232
49233 {&hf_ieee80211_tclas7_address_1_sid_spec,
49234 {"Address 1 (SID) Spec", "wlan.tclas.class7.address_1_sid_spec",
49235 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49236
49237 {&hf_ieee80211_tclas7_address_1_sid_mask,
49238 {"Address 1 (SID) Mask", "wlan.tclas.class7.address_1_sid_mask",
49239 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49240
49241 {&hf_ieee80211_tclas7_address_2_spec,
49242 {"Address 2 Spec", "wlan.tclas.class7.address_2_spec",
49243 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49244
49245 {&hf_ieee80211_tclas7_address_2_mask,
49246 {"Address 2 Mask", "wlan.tclas.class7.address_2_mask",
49247 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49248
49249 {&hf_ieee80211_tclas7_sequence_control_spec,
49250 {"Sequence Control Spec", "wlan.tclas.class7.sequence_control_spec",
49251 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49252
49253 {&hf_ieee80211_tclas7_sequence_control_mask,
49254 {"Sequence Control Mask", "wlan.tclas.class7.sequence_control_mask",
49255 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49256
49257 {&hf_ieee80211_tclas7_address_3_spec,
49258 {"Address 3 Spec", "wlan.tclas.class7.address_3_spec",
49259 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49260
49261 {&hf_ieee80211_tclas7_address_3_mask,
49262 {"Address 3 Mask", "wlan.tclas.class7.address_3_mask",
49263 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49264
49265 {&hf_ieee80211_tclas7_address_4_spec,
49266 {"Address 4 Spec", "wlan.tclas.class4.address_4_spec",
49267 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49268
49269 {&hf_ieee80211_tclas7_address_4_mask,
49270 {"Address 4 Mask", "wlan.tclas.class4.address_4_mask",
49271 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49272
49273 {&hf_ieee80211_tclas_class_mask8_frame_control_match_spec,
49274 {"Frame Control Spec", "wlan.tclas.class8.mask.frame_control_spec",
49275 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49276 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49277
49278 {&hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec,
49279 {"Address 1 (BSSID) Spec", "wlan.tclas.class8.mask.address_1_bssid_spec",
49280 FT_UINT24, BASE_HEX, VALS(address_1_bssid_mask_vals)((0 ? (const struct _value_string*)0 : ((address_1_bssid_mask_vals
))))
,
49281 0x00000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49282
49283 {&hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec,
49284 {"Address 2 (SID) Spec", "wlan.tclas.class8.mask.address_2_sid_spec",
49285 FT_UINT24, BASE_HEX, VALS(address_2_mask_vals)((0 ? (const struct _value_string*)0 : ((address_2_mask_vals)
)))
, 0x000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49286
49287 {&hf_ieee80211_tclas_class_mask8_sequence_control_spec,
49288 {"Sequence Control Spec", "wlan.tclas.class8.mask.sequence_control_spec",
49289 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49290 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49291
49292 {&hf_ieee80211_tclas_class_mask8_address_3_match_spec,
49293 {"Address 3 Spec", "wlan.tclas.class8.mask.address_3_spec",
49294 FT_UINT24, BASE_HEX, VALS(address_3_mask_vals)((0 ? (const struct _value_string*)0 : ((address_3_mask_vals)
)))
, 0x000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49295
49296 {&hf_ieee80211_tclas_class_mask8_address_4_match_spec,
49297 {"Address 4 Spec", "wlan.tclas.class8.mask.address_4_spec",
49298 FT_UINT24, BASE_HEX, VALS(address_4_mask_vals)((0 ? (const struct _value_string*)0 : ((address_4_mask_vals)
)))
, 0x000C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49299
49300 {&hf_ieee80211_tclas_class_mask8_reserved,
49301 {"Reserved", "wlan.tclas.class8.reserved",
49302 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49303
49304 {&hf_ieee80211_tclas8_frame_control_spec,
49305 {"Frame Control Spec", "wlan.tclas.class8.frame_control_spec",
49306 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49307
49308 {&hf_ieee80211_tclas8_frame_control_mask,
49309 {"Frame Control Mask", "wlan.tclas.class8.frame_control_mask",
49310 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49311
49312 {&hf_ieee80211_tclas8_address_1_bssid_spec,
49313 {"Address 1 (BSSID) Spec", "wlan.tclas.class8.address_1_bssid_spec",
49314 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49315
49316 {&hf_ieee80211_tclas8_address_1_bssid_mask,
49317 {"Address 1 (BSSID) Mask", "wlan.tclas.class8.address_1_bssid_mask",
49318 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49319
49320 {&hf_ieee80211_tclas8_address_2_sid_spec,
49321 {"Address 2 (SID) Spec", "wlan.tclas.class8.address_2_sid_spec",
49322 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49323
49324 {&hf_ieee80211_tclas8_address_2_sid_mask,
49325 {"Address 2 (SID) Spec", "wlan.tclas.class8.address_2_sid_spec",
49326 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49327
49328 {&hf_ieee80211_tclas8_sequence_control_spec,
49329 {"Sequence Control Spec", "wlan.tclas.class8.sequence_control_spec",
49330 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49331
49332 {&hf_ieee80211_tclas8_sequence_control_mask,
49333 {"Sequence Control Mask", "wlan.tclas.class8.sequence_control_mask",
49334 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49335
49336 {&hf_ieee80211_tclas8_address_3_spec,
49337 {"Address 3 Spec", "wlan.tclas.class8.address_3_spec",
49338 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49339
49340 {&hf_ieee80211_tclas8_address_3_mask,
49341 {"Address 3 Mask", "wlan.tclas.class8.address_3_mask",
49342 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49343
49344 {&hf_ieee80211_tclas8_address_4_spec,
49345 {"Address 4 Spec", "wlan.tclas.class8.address_4_spec",
49346 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49347
49348 {&hf_ieee80211_tclas8_address_4_mask,
49349 {"Address 4 Mask", "wlan.tclas.class8.address_4_mask",
49350 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49351
49352 {&hf_ieee80211_tclas_class_mask9_frame_control_match_spec,
49353 {"Frame Control Spec", "wlan.tclas.class9.frame_control_spec",
49354 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
, 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49355
49356 {&hf_ieee80211_tclas_class_mask9_address_1_match_spec,
49357 {"Address 1 Spec", "wlan.tclas.class9.mask.address_1_spec",
49358 FT_UINT24, BASE_HEX, VALS(address_1_mask_vals)((0 ? (const struct _value_string*)0 : ((address_1_mask_vals)
)))
, 0x00000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49359
49360 {&hf_ieee80211_tclas_class_mask9_address_2_match_spec,
49361 {"Address 2 Spec", "wlan.tclas.class9.mask.address_2_spec",
49362 FT_UINT24, BASE_HEX, VALS(address_2_mask_vals)((0 ? (const struct _value_string*)0 : ((address_2_mask_vals)
)))
, 0x000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49363
49364 {&hf_ieee80211_tclas_class_mask9_sequence_control_spec,
49365 {"Sequence Control Spec", "wlan.tclas.class9.mask.sequence_control_spec",
49366 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49367 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49368
49369 {&hf_ieee80211_tclas_class_mask9_reserved,
49370 {"Reserved", "wlan.tclas.class9.mask.reserved",
49371 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49372
49373 {&hf_ieee80211_tclas9_frame_control_spec,
49374 {"Frame Control Spec", "wlan.tclas.class9.frame_control_spec",
49375 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49376
49377 {&hf_ieee80211_tclas9_frame_control_mask,
49378 {"Frame Control Mask", "wlan.tclas.class9.frame_control_mask",
49379 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49380
49381 {&hf_ieee80211_tclas9_address_1_spec,
49382 {"Address 1 Spec", "wlan.tclas.class9.address_1_spec",
49383 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49384
49385 {&hf_ieee80211_tclas9_address_1_mask,
49386 {"Address 1 Mask", "wlan.tclas.class9.address_1_mask",
49387 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49388
49389 {&hf_ieee80211_tclas9_address_2_spec,
49390 {"Address 2 Spec", "wlan.tclas.class9.address_2_spec",
49391 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49392
49393 {&hf_ieee80211_tclas9_address_2_mask,
49394 {"Address 2 Mask", "wlan.tclas.class9.address_2_mask",
49395 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49396
49397 {&hf_ieee80211_tclas9_sequence_control_spec,
49398 {"Sequence Control Spec", "wlan.tclas.class9.sequence_control_spec",
49399 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49400
49401 {&hf_ieee80211_tclas9_sequence_control_mask,
49402 {"Sequence Control Mask", "wlan.tclas.class9.sequence_control_mask",
49403 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49404
49405 {&hf_ieee80211_tclas10_protocol_instance,
49406 {"Protocol Instance", "wlan.tclas.class10.protocol_instance",
49407 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49408
49409 {&hf_ieee80211_tclas10_protocol_num_next_hdr,
49410 {"Protocol Number or Next Header",
49411 "wlan.tclas.class10.proto_num_or_next_hdr",
49412 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49413
49414 {&hf_ieee80211_tag_challenge_text,
49415 {"Challenge Text", "wlan.tag.challenge_text",
49416 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49418
49419 {&hf_ieee80211_tag_oui_wfa_action_type,
49420 {"OUI Type", "wlan.action.oui_type",
49421 FT_UINT8, BASE_HEX, VALS(wfa_action_subtype_vals)((0 ? (const struct _value_string*)0 : ((wfa_action_subtype_vals
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49422
49423 {&hf_ieee80211_oui_qos_subtype,
49424 {"OUI Subtype", "wlan.action.dscp_policy.oui_subtype",
49425 FT_UINT8, BASE_HEX, VALS(wfa_qos_subtype_vals)((0 ? (const struct _value_string*)0 : ((wfa_qos_subtype_vals
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49426
49427 {&hf_ieee80211_oui_qos_mgmt_dialog_token,
49428 {"Dialog Token", "wlan.action.dscp_policy.dialog_token",
49429 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49430
49431 {&hf_ieee80211_oui_qos_mgmt_rqst_control,
49432 {"Request Control", "wlan.action.dscp_policy.request.control",
49433 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49434
49435 {&hf_ieee80211_oui_qos_mgmt_rq_ctrl_more,
49436 {"More", "wlan.action.dscp_policy.request.control.more",
49437 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49438
49439 {&hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset,
49440 {"Reset", "wlan.action.dscp_policy.request.control.reset",
49441 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49442
49443 {&hf_ieee80211_oui_qos_mgmt_rq_reserved,
49444 {"Reserved", "wlan.action.dscp_policy.request.control.reserved",
49445 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49446
49447 {&hf_ieee80211_dscp_policy_id,
49448 {"Policy ID", "wlan.action.dscp_policy_response.policy_id",
49449 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49450
49451 {&hf_ieee80211_dscp_policy_status,
49452 {"Status", "wlan.action.dscp_policy_response.policy_status",
49453 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49454
49455 {&hf_ieee80211_oui_qos_mgmt_resp_control,
49456 {"Response Control", "wlan.action.dscp_policy.request.control",
49457 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49458
49459 {&hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more,
49460 {"More", "wlan.action.dscp_policy.response.control.more",
49461 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49462
49463 {&hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset,
49464 {"Reset", "wlan.action.dscp_policy.response.control.reset",
49465 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49466
49467 {&hf_ieee80211_oui_qos_mgmt_rsp_reserved,
49468 {"Reserved", "wlan.action.dscp_policy.response.control.reserved",
49469 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49470
49471 {&hf_ieee80211_dscp_policy_scs_sts_list,
49472 {"Status List", "wlan.action.dscp_policy_response.policy_status_list",
49473 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49474
49475 {&hf_ieee80211_oui_qos_mgmt_count,
49476 {"Count", "wlan.action.dscp_policy.response.count",
49477 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49478
49479 {&hf_ieee80211_tag_he_6ghz_cap_inf,
49480 {"Capabilities Information", "wlan.tag.he_6ghz.cap_inf",
49481 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49483
49484 {&hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2,
49485 {"Minimum MPDU Start Spacing", "wlan.tag.he_6ghz.cap_inf.b0_b2",
49486 FT_UINT16, BASE_HEX, VALS(s1g_min_mpdu_start_spacing_vals)((0 ? (const struct _value_string*)0 : ((s1g_min_mpdu_start_spacing_vals
))))
, 0x0007,
49487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49488
49489 {&hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5,
49490 {"Maximum A-MPDU Length Exponent", "wlan.tag.he_6ghz.cap_inf.b3_b5",
49491 FT_UINT16, BASE_HEX, VALS(vht_max_ampdu_flag)((0 ? (const struct _value_string*)0 : ((vht_max_ampdu_flag))
))
, 0x0038,
49492 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49493
49494 {&hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7,
49495 {"Maximum MPDU Length", "wlan.tag.he_6ghz.cap_inf.b6_b7",
49496 FT_UINT16, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x00C0,
49497 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49498
49499 {&hf_ieee80211_tag_he_6ghz_cap_inf_b8,
49500 {"Reserved", "wlan.tag.he_6ghz.cap_inf.b8",
49501 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0100,
49502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49503
49504 {&hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10,
49505 {"SM Power Save", "wlan.tag.he_6ghz.cap_inf.b9b_b10",
49506 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag)((0 ? (const struct _value_string*)0 : ((ht_sm_pwsave_flag)))
)
, 0x0600,
49507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49508
49509 {&hf_ieee80211_tag_he_6ghz_cap_inf_b11,
49510 {"RD Responder", "wlan.tag.he_6ghz.cap_inf.b11",
49511 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800,
49512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49513
49514 {&hf_ieee80211_tag_he_6ghz_cap_inf_b12,
49515 {"Rx Antenna Pattern Consistency", "wlan.tag.he_6ghz.cap_inf.b12",
49516 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x1000,
49517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49518
49519 {&hf_ieee80211_tag_he_6ghz_cap_inf_b13,
49520 {"Tx Antenna Pattern Consistency", "wlan.tag.he_6ghz.cap_inf.b13",
49521 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x2000,
49522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49523
49524 {&hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15,
49525 {"Reserved", "wlan.tag.he_6ghz.cap_inf.b14_b15",
49526 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000,
49527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49528
49529 {&hf_ieee80211_tag_ftm_tsf_sync_info,
49530 {"TSF Sync Info", "wlan.tag.ftm_tsf_sync_info",
49531 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49533
49534 {&hf_ieee80211_rsn_version,
49535 {"RSN Version", "wlan.rsn.version",
49536 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49537 "Indicates the version number of the RSNA protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49538
49539 {&hf_ieee80211_rsn_gcs,
49540 {"Group Cipher Suite", "wlan.rsn.gcs",
49541 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gcs_base_custom)((const void *) (size_t) (rsn_gcs_base_custom)), 0,
49542 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49543
49544 {&hf_ieee80211_rsn_gcs_oui,
49545 {"Group Cipher Suite OUI", "wlan.rsn.gcs.oui",
49546 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49548
49549 {&hf_ieee80211_rsn_gcs_type,
49550 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
49551 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49552 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49553
49554 {&hf_ieee80211_rsn_gcs_80211_type,
49555 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
49556 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49558
49559 {&hf_ieee80211_rsn_pcs_count,
49560 {"Pairwise Cipher Suite Count", "wlan.rsn.pcs.count",
49561 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49562 "Indicates the number of pairwise cipher suite selectors that are contained in the Pairwise Cipher Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49563
49564 {&hf_ieee80211_rsn_pcs_list,
49565 {"Pairwise Cipher Suite List", "wlan.rsn.pcs.list",
49566 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49567 "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49568
49569 {&hf_ieee80211_rsn_pcs,
49570 {"Pairwise Cipher Suite", "wlan.rsn.pcs",
49571 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_pcs_base_custom)((const void *) (size_t) (rsn_pcs_base_custom)), 0,
49572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49573
49574 {&hf_ieee80211_rsn_pcs_oui,
49575 {"Pairwise Cipher Suite OUI", "wlan.rsn.pcs.oui",
49576 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49578
49579 {&hf_ieee80211_rsn_pcs_type,
49580 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
49581 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49583
49584 {&hf_ieee80211_rsn_pcs_80211_type,
49585 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
49586 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49588
49589 {&hf_ieee80211_rsn_akms_count,
49590 {"Auth Key Management (AKM) Suite Count", "wlan.rsn.akms.count",
49591 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49592 "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49593
49594 {&hf_ieee80211_rsn_akms_list,
49595 {"Auth Key Management (AKM) List", "wlan.rsn.akms.list",
49596 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49597 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49598
49599 {&hf_ieee80211_rsn_akms,
49600 {"Auth Key Management (AKM) Suite", "wlan.rsn.akms",
49601 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_akms_base_custom)((const void *) (size_t) (rsn_akms_base_custom)), 0,
49602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49603
49604 {&hf_ieee80211_rsn_akms_oui,
49605 {"Auth Key Management (AKM) OUI", "wlan.rsn.akms.oui",
49606 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49607 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49608
49609 {&hf_ieee80211_rsn_akms_type,
49610 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
49611 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49612 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49613
49614 {&hf_ieee80211_rsn_akms_80211_type,
49615 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
49616 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_keymgmt_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_keymgmt_vals
))))
, 0,
49617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49618
49619 {&hf_ieee80211_rsn_cap,
49620 {"RSN Capabilities", "wlan.rsn.capabilities",
49621 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49622 "RSN Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49623
49624 {&hf_ieee80211_rsn_cap_preauth,
49625 {"RSN Pre-Auth capabilities", "wlan.rsn.capabilities.preauth",
49626 FT_BOOLEAN, 16, TFS(&rsn_preauth_flags)((0 ? (const struct true_false_string*)0 : ((&rsn_preauth_flags
))))
, 0x0001,
49627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49628
49629 {&hf_ieee80211_rsn_cap_no_pairwise,
49630 {"RSN No Pairwise capabilities", "wlan.rsn.capabilities.no_pairwise",
49631 FT_BOOLEAN, 16, TFS(&rsn_no_pairwise_flags)((0 ? (const struct true_false_string*)0 : ((&rsn_no_pairwise_flags
))))
, 0x0002,
49632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49633
49634 {&hf_ieee80211_rsn_cap_ptksa_replay_counter,
49635 {"RSN PTKSA Replay Counter capabilities", "wlan.rsn.capabilities.ptksa_replay_counter",
49636 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)((0 ? (const struct _value_string*)0 : ((rsn_cap_replay_counter
))))
, 0x000C,
49637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49638
49639 {&hf_ieee80211_rsn_cap_gtksa_replay_counter,
49640 {"RSN GTKSA Replay Counter capabilities", "wlan.rsn.capabilities.gtksa_replay_counter",
49641 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)((0 ? (const struct _value_string*)0 : ((rsn_cap_replay_counter
))))
, 0x0030,
49642 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49643
49644 {&hf_ieee80211_rsn_cap_mfpr,
49645 {"Management Frame Protection Required", "wlan.rsn.capabilities.mfpr",
49646 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0040,
49647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49648
49649 {&hf_ieee80211_rsn_cap_mfpc,
49650 {"Management Frame Protection Capable", "wlan.rsn.capabilities.mfpc",
49651 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x0080,
49652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49653
49654 {&hf_ieee80211_rsn_cap_jmr,
49655 {"Joint Multi-band RSNA", "wlan.rsn.capabilities.jmr",
49656 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0100,
49657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49658
49659 {&hf_ieee80211_rsn_cap_peerkey,
49660 {"PeerKey Enabled", "wlan.rsn.capabilities.peerkey",
49661 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0200,
49662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49663
49664 {&hf_ieee80211_rsn_cap_spp_amsdu_cap,
49665 {"SPP A-MSDU Capable", "wlan.rsn.capabilities.spp_amsdu_cap",
49666 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x0400,
49667 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49668
49669 {&hf_ieee80211_rsn_cap_spp_amsdu_req,
49670 {"SPP A-MSDU Required", "wlan.rsn.capabilities.spp_amsdu_req",
49671 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0800,
49672 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49673
49674 {&hf_ieee80211_rsn_cap_pbac,
49675 {"PBAC (protected block ack agreement capable)", "wlan.rsn.capabilities.pbac",
49676 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x1000,
49677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49678
49679 {&hf_ieee80211_rsn_cap_extended_key_id_iaf,
49680 {"Extended Key ID for Individually Addressed Frames",
49681 "wlan.rsn.capabilities.extended_key_id_iaf",
49682 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49683
49684 {&hf_ieee80211_rsn_cap_ocvc,
49685 {"OCVC", "wlan.rsn.capabilities.ocvc",
49686 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x4000,
49687 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49688
49689 {&hf_ieee80211_rsn_pmkid_count,
49690 {"PMKID Count", "wlan.rsn.pmkid.count",
49691 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49692 "Indicates the number of PMKID selectors that are contained in the PMKID Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49693
49694 {&hf_ieee80211_rsn_pmkid_list,
49695 {"PMKID List", "wlan.rsn.pmkid.list",
49696 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49697 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49698
49699 {&hf_ieee80211_rsn_pmkid,
49700 {"PMKID", "wlan.pmkid.akms",
49701 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49702 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49703
49704 {&hf_ieee80211_rsn_gmcs,
49705 {"Group Management Cipher Suite", "wlan.rsn.gmcs",
49706 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gmcs_base_custom)((const void *) (size_t) (rsn_gmcs_base_custom)), 0,
49707 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49708
49709 {&hf_ieee80211_rsn_gmcs_oui,
49710 {"Group Management Cipher Suite OUI", "wlan.rsn.gmcs.oui",
49711 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49713
49714 {&hf_ieee80211_rsn_gmcs_type,
49715 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
49716 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49717 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49718
49719 {&hf_ieee80211_rsn_gmcs_80211_type,
49720 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
49721 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49722 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49723
49724 {&hf_ieee80211_ht_pren_type,
49725 {"802.11n (Pre) Type", "wlan.vs.pren.type",
49726 FT_UINT8, BASE_DEC, VALS(ieee80211_ht_pren_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_ht_pren_type_vals
))))
, 0,
49727 "Vendor Specific HT Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49728 {&hf_ieee80211_ht_pren_unknown,
49729 {"802.11n (Pre) Unknown Data", "wlan.vs.pren.unknown_data",
49730 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49731 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49732
49733 {&hf_ieee80211_ht_cap,
49734 {"HT Capabilities Info", "wlan.ht.capabilities",
49735 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49736 "HT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49737
49738 {&hf_ieee80211_ht_vs_cap,
49739 {"HT Capabilities Info (VS)", "wlan.vs.ht.capabilities",
49740 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49741 "Vendor Specific HT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49742
49743 {&hf_ieee80211_ht_ldpc_coding,
49744 {"HT LDPC coding capability", "wlan.ht.capabilities.ldpccoding",
49745 FT_BOOLEAN, 16, TFS(&ht_ldpc_coding_flag)((0 ? (const struct true_false_string*)0 : ((&ht_ldpc_coding_flag
))))
, 0x0001,
49746 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49747
49748 {&hf_ieee80211_ht_chan_width,
49749 {"HT Support channel width", "wlan.ht.capabilities.width",
49750 FT_BOOLEAN, 16, TFS(&ht_chan_width_flag)((0 ? (const struct true_false_string*)0 : ((&ht_chan_width_flag
))))
, 0x0002,
49751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49752
49753 {&hf_ieee80211_ht_sm_pwsave,
49754 {"HT SM Power Save", "wlan.ht.capabilities.sm",
49755 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag)((0 ? (const struct _value_string*)0 : ((ht_sm_pwsave_flag)))
)
, 0x000c,
49756 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49757
49758 {&hf_ieee80211_ht_green,
49759 {"HT Green Field", "wlan.ht.capabilities.green",
49760 FT_BOOLEAN, 16, TFS(&ht_green_flag)((0 ? (const struct true_false_string*)0 : ((&ht_green_flag
))))
, 0x0010,
49761 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49762
49763 {&hf_ieee80211_ht_short20,
49764 {"HT Short GI for 20MHz", "wlan.ht.capabilities.short20",
49765 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020,
49766 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49767
49768 {&hf_ieee80211_ht_short40,
49769 {"HT Short GI for 40MHz", "wlan.ht.capabilities.short40",
49770 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040,
49771 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49772
49773 {&hf_ieee80211_ht_tx_stbc,
49774 {"HT Tx STBC", "wlan.ht.capabilities.txstbc",
49775 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0080,
49776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49777
49778 {&hf_ieee80211_ht_rx_stbc,
49779 {"HT Rx STBC", "wlan.ht.capabilities.rxstbc",
49780 FT_UINT16, BASE_HEX, VALS(ht_rx_stbc_flag)((0 ? (const struct _value_string*)0 : ((ht_rx_stbc_flag)))), 0x0300,
49781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49782
49783 {&hf_ieee80211_ht_reserved_b10,
49784 {"Reserved", "wlan.ht.capabilities.info_reserved_b10",
49785 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0400,
49786 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49787
49788 {&hf_ieee80211_ht_max_amsdu,
49789 {"HT Max A-MSDU length", "wlan.ht.capabilities.amsdu",
49790 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag)((0 ? (const struct true_false_string*)0 : ((&ht_max_amsdu_flag
))))
, 0x0800,
49791 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49792
49793 {&hf_ieee80211_ht_dss_cck_40,
49794 {"HT DSSS/CCK mode in 40MHz", "wlan.ht.capabilities.dsscck",
49795 FT_BOOLEAN, 16, TFS(&ht_dss_cck_40_flag)((0 ? (const struct true_false_string*)0 : ((&ht_dss_cck_40_flag
))))
, 0x1000,
49796 "HT DSS/CCK mode in 40MHz", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49797
49798 {&hf_ieee80211_ht_reserved_b13,
49799 {"Reserved", "wlan.ht.capabilities.info_reserved_b13",
49800 FT_UINT16, BASE_HEX, NULL((void*)0), 0x2000,
49801 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49802
49803 {&hf_ieee80211_ht_40_mhz_intolerant,
49804 {"HT Forty MHz Intolerant", "wlan.ht.capabilities.40mhzintolerant",
49805 FT_BOOLEAN, 16, TFS(&ht_40_mhz_intolerant_flag)((0 ? (const struct true_false_string*)0 : ((&ht_40_mhz_intolerant_flag
))))
, 0x4000,
49806 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49807
49808 {&hf_ieee80211_ht_reserved_b15,
49809 {"Reserved", "wlan.ht.capabilities.info_reserved_b15",
49810 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000,
49811 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49812
49813 {&hf_ieee80211_ext_bss_mu_mimo_capable_sta_count,
49814 {"MU-MIMO Capable STA Count", "wlan.ext_bss.mu_mimo_capable_sta_count",
49815 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49816 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49817
49818 {&hf_ieee80211_ext_bss_ss_underutilization,
49819 {"Spatial Stream Underutilization", "wlan.ext_bss.ss_underutilization",
49820 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49821 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49822
49823 {&hf_ieee80211_ext_bss_observable_sec_20mhz_utilization,
49824 {"Observable Secondary 20MHz Utilization", "wlan.ext_bss.observable_sec_20mhz_utilization",
49825 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49826 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49827
49828 {&hf_ieee80211_ext_bss_observable_sec_40mhz_utilization,
49829 {"Observable Secondary 40MHz Utilization", "wlan.ext_bss.observable_sec_40mhz_utilization",
49830 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49831 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49832
49833 {&hf_ieee80211_ext_bss_observable_sec_80mhz_utilization,
49834 {"Observable Secondary 80MHz Utilization", "wlan.ext_bss.observable_sec_80mhz_utilization",
49835 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49836 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49837
49838 {&hf_ieee80211_wide_bw_new_channel_width,
49839 {"New Channel Width", "wlan.wide_bw.new_channel_width",
49840 FT_UINT8, BASE_HEX, VALS(vht_operation_info_channel_width)((0 ? (const struct _value_string*)0 : ((vht_operation_info_channel_width
))))
, 0x0,
49841 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49842
49843 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment0,
49844 {"New Channel Center Frequency Segment 0", "wlan.wide_bw.new_channel_center_freq_segment0",
49845 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
49846 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49847
49848 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment1,
49849 {"New Channel Center Frequency Segment 1", "wlan.wide_bw.new_channel_center_freq_segment1",
49850 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
49851 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49852
49853 {&hf_ieee80211_operat_notification_mode,
49854 {"Operating Mode Notification", "wlan.operat_notification_mode",
49855 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
49856 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49857
49858 {&hf_ieee80211_operat_mode_field_channel_width,
49859 {"Channel Width", "wlan.operat_mode_field.channelwidth",
49860 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03,
49861 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49862
49863 {&hf_ieee80211_operat_mode_field_160_80plus80_bw,
49864 {"160/80+80 BW", "wlan.operat_mode_field.160_80plus80_bw",
49865 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04,
49866 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49867
49868 {&hf_ieee80211_operat_mode_field_no_ldpc,
49869 {"No LDPC", "wlan.operat_mode_field.no_ldpc",
49870 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
49871 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49872
49873 {&hf_ieee80211_operat_mode_field_rxnss,
49874 {"Rx NSS", "wlan.operat_mode_field.rxnss",
49875 FT_UINT8, BASE_HEX, VALS(operat_mode_field_rxnss)((0 ? (const struct _value_string*)0 : ((operat_mode_field_rxnss
))))
, 0x70,
49876 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49877
49878 {&hf_ieee80211_operat_mode_field_rxnsstype,
49879 {"Rx NSS Type", "wlan.operat_mode_field.rxnsstype",
49880 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
49881 "Indicate that the Rx NSS subfield carries the maximum number of spatial streams that the STA can receive", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49882
49883 {&hf_ieee80211_tbtt_info,
49884 {"TBTT Information Field", "wlan.rnr.tbtt_info",
49885 FT_UINT16, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49886
49887 {&hf_ieee80211_tbtt_filtered_nap,
49888 {"TBTT Filtered Neighbor AP", "wlan.rnr.tbtt_info.fna",
49889 FT_UINT16, BASE_DEC, NULL((void*)0), 1<<2, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49890
49891 {&hf_ieee80211_tbtt_info_count,
49892 {"TBTT Information Count", "wlan.rnr.tbtt_info.info_count",
49893 FT_UINT16, BASE_DEC, NULL((void*)0), 0xf<<4, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49894
49895 {&hf_ieee80211_tbtt_info_length,
49896 {"TBTT Information Length", "wlan.rnr.tbtt_info.info_len",
49897 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(tbtt_info_length)((0 ? (const struct _range_string*)0 : ((tbtt_info_length)))),
49898 0xff<<8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49899
49900 {&hf_ieee80211_tbtt_operating_class,
49901 {"Operating Class", "wlan.rnr.tbtt_info.operating_class",
49902 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49903
49904 {&hf_ieee80211_tbtt_channel_number,
49905 {"Channel Number", "wlan.rnr.tbtt_info.channel_num",
49906 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49907
49908 {&hf_ieee80211_tbtt_offset,
49909 {"Neighbor AP TBTT Offset", "wlan.rnr.tbtt_info.tbtt_offset",
49910 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49911
49912 {&hf_ieee80211_tbtt_bssid,
49913 {"BSSID", "wlan.rnr.tbtt_info.bssid",
49914 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49915
49916 {&hf_ieee80211_tbtt_short_ssid,
49917 {"Short SSID", "wlan.rnr.tbtt_info.sh_ssid",
49918 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49919
49920 {&hf_ieee80211_rnr_bss_params,
49921 {"BSS Parameters", "wlan.rnr.tbtt_info.bss_parameters",
49922 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49923
49924 {&hf_ieee80211_rnr_oct_recommended,
49925 {"OCT Recommended", "wlan.rnr.tbtt_info.bss_parameters.oct_recommended",
49926 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49927
49928 {&hf_ieee80211_rnr_same_ssid,
49929 {"Same SSID", "wlan.rnr.tbtt_info.bss_parameters.same_ssid",
49930 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49931
49932 {&hf_ieee80211_rnr_multiple_bssid,
49933 {"Multiple BSSID", "wlan.rnr.tbtt_info.bss_parameters.multiple_bssid",
49934 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49935
49936 {&hf_ieee80211_rnr_transmitted_bssid,
49937 {"Transmitted BSSID", "wlan.rnr.tbtt_info.bss_parameters.transmitted_bssid",
49938 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49939
49940 {&hf_ieee80211_rnr_ess_with_colocated_ap,
49941 {"Member of ESS with 2.4/5 GHz Co-Located AP",
49942 "wlan.rnr.tbtt_info.bss_parameters.member_of_ess_with_2p4_5_ghz_colocated_ap",
49943 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49944
49945 {&hf_ieee80211_rnr_unsolicited_probe_responses,
49946 {"Unsolicited Probe Responses",
49947 "wlan.rnr.tbtt_info.bss_parameters.unsolicited_probe_responses",
49948 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49949
49950 {&hf_ieee80211_rnr_same_colocated_ap,
49951 {"Co-Located AP", "wlan.rnr.tbtt_info.bss_parameters.colocated_ap",
49952 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49953
49954 {&hf_ieee80211_rnr_same_reserved,
49955 {"Reserved", "wlan.rnr.tbtt_info.bss_parameters.reserved",
49956 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49957
49958 {&hf_ieee80211_rnr_20mhz_psd_subfield,
49959 {"PSD Subfield", "wlan.rnr.tbtt_info.psd_subfield",
49960 FT_UINT8, BASE_CUSTOM, CF_FUNC(tpe_psd_custom)((const void *) (size_t) (tpe_psd_custom)), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49961
49962 {&hf_ieee80211_rnr_reserved_data,
49963 {"Reserved", "wlan.rnr.tbtt_info.reserved",
49964 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49965
49966 {&hf_ieee80211_rnr_mld_params,
49967 {"MLD Parameters", "wlan.rnr.tbtt_info.mld_parameters",
49968 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49969
49970 {&hf_ieee80211_rnr_mld_id,
49971 {"MLD ID", "wlan.rnr.tbtt_info.mld_parameters.mld_id",
49972 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49973
49974 {&hf_ieee80211_rnr_mld_link_id,
49975 {"Link ID", "wlan.rnr.tbtt_info.mld_parameters.link_id",
49976 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49977
49978 {&hf_ieee80211_rnr_mld_bss_params_change_count,
49979 {"BSS Parameters Change Count",
49980 "wlan.rnr.tbtt_info.mld_parameters.bss_params_change_count",
49981 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0FF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49982
49983 {&hf_ieee80211_rnr_mld_all_updates_included,
49984 {"All Updates Included",
49985 "wlan.rnr.tbtt_info.mld_parameters.all_updates_included",
49986 FT_BOOLEAN, 24, NULL((void*)0), 0x100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49987
49988 {&hf_ieee80211_rnr_mld_disabled_link_indication,
49989 {"Disabled Link Indication",
49990 "wlan.rnr.tbtt_info.mld_parameters.disabled_link_indication",
49991 FT_BOOLEAN, 24, NULL((void*)0), 0x200000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49992
49993 {&hf_ieee80211_rnr_mld_reserved,
49994 {"Reserved", "wlan.rnr.tbtt_info.mld_parameters.reserved",
49995 FT_UINT24, BASE_HEX, NULL((void*)0), 0xC00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49996
49997 {&hf_ieee80211_s1g_cap_byte1,
49998 {"S1G Capabilities Byte 1", "wlan.s1g.capabilities.byte1",
49999 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50000
50001 {&hf_ieee80211_s1g_cap_byte2,
50002 {"S1G Capabilities Byte 2", "wlan.s1g.capabilities.byte2",
50003 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50004
50005 {&hf_ieee80211_s1g_cap_byte3,
50006 {"S1G Capabilities Byte 3", "wlan.s1g.capabilities.byte3",
50007 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50008
50009 {&hf_ieee80211_s1g_cap_byte4,
50010 {"S1G Capabilities Byte 4", "wlan.s1g.capabilities.byte4",
50011 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50012
50013 {&hf_ieee80211_s1g_cap_byte5,
50014 {"S1G Capabilities Byte 5", "wlan.s1g.capabilities.byte5",
50015 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50016
50017 {&hf_ieee80211_s1g_cap_byte6,
50018 {"S1G Capabilities Byte 6", "wlan.s1g.capabilities.byte6",
50019 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50020
50021 {&hf_ieee80211_s1g_cap_byte7,
50022 {"S1G Capabilities Byte 7", "wlan.s1g.capabilities.byte7",
50023 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50024
50025 {&hf_ieee80211_s1g_cap_byte8,
50026 {"S1G Capabilities Byte 8", "wlan.s1g.capabilities.byte8",
50027 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50028
50029 {&hf_ieee80211_s1g_cap_byte9,
50030 {"S1G Capabilities Byte 9", "wlan.s1g.capabilities.byte9",
50031 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50032
50033 {&hf_ieee80211_beacon_sequence,
50034 {"Beacon Sequence", "wlan.s1g.beacon_sequence",
50035 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50036
50037 {&hf_ieee80211_pentapartial_timestamp,
50038 {"Pentapartial Timestamp", "wlan.s1g.pentapartial_timestamp",
50039 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50040
50041 {&hf_ieee80211_tack_next_twt_info,
50042 {"Next TWT Info/Suspend Duration", "wlan.s1g.next_twt_info",
50043 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50044
50045 {&hf_ieee80211_tack_next_twt,
50046 {"Next TWT", "wlan.s1g.next_twt",
50047 FT_UINT40, BASE_HEX, NULL((void*)0), 0x1FFFFFFFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50048
50049 {&hf_ieee80211_tack_flow_identifier,
50050 {"TWT Flow Identifier", "wlan.s1g.twt_flow_identifier",
50051 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50052
50053 {&hf_ieee80211_s1g_cap_byte10,
50054 {"S1G Capabilities Byte 10", "wlan.s1g.capabilities.byte10",
50055 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50056
50057 {&hf_ieee80211_s1g_cap_s1g_long_support,
50058 {"S1G_LONG Support", "wlan.s1g.capabilities.s1g_long_support",
50059 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50060
50061 {&hf_ieee80211_s1g_cap_short_gi_for_1_mhz,
50062 {"Short GI for 1MHz", "wlan.s1g.capabilities.short_gi_for_1_mhz",
50063 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50064
50065 {&hf_ieee80211_s1g_cap_short_gi_for_2_mhz,
50066 {"Short GI for 2MHz", "wlan.s1g.capabilities.short_gi_for_2_mhz",
50067 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50068
50069 {&hf_ieee80211_s1g_cap_short_gi_for_4_mhz,
50070 {"Short GI for 4MHz", "wlan.s1g.capabilities.short_gi_for_4_mhz",
50071 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50072
50073 {&hf_ieee80211_s1g_cap_short_gi_for_8_mhz,
50074 {"Short GI for 8MHz", "wlan.s1g.capabilities.short_gi_for_8_mhz",
50075 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50076
50077 {&hf_ieee80211_s1g_cap_short_gi_for_16_mhz,
50078 {"Short GI for 16MHz", "wlan.s1g.capabilities.short_gi_for_16_mhz",
50079 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50080
50081 {&hf_ieee80211_s1g_cap_supported_channel_width,
50082 {"Supported Channel Width", "wlan.s1g.capabilities.supported_channel_width",
50083 FT_UINT8, BASE_HEX, VALS(s1g_supported_channel_width_vals)((0 ? (const struct _value_string*)0 : ((s1g_supported_channel_width_vals
))))
, 0xC0,
50084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50085
50086 {&hf_ieee80211_s1g_cap_rx_ldpc,
50087 {"Rx LDPC", "wlan.s1g.capabilities.rx_ldpc",
50088 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50089
50090 {&hf_ieee80211_s1g_cap_tx_stbc,
50091 {"Tx STBC", "wlan.s1g.capabilities.tx_stbc",
50092 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50093
50094 {&hf_ieee80211_s1g_cap_rx_stbc,
50095 {"Rx STBC", "wlan.s1g.capabilities.rx_stbc",
50096 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50097
50098 {&hf_ieee80211_s1g_cap_su_beamformer_capable,
50099 {"SU Beamformer Capable", "wlan.s1g.capabilities.su_beamformer_capable",
50100 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50101
50102 {&hf_ieee80211_s1g_cap_su_beamformee_capable,
50103 {"SU Beamformee Capable", "wlan.s1g.capabilities.su_beamformee_capable",
50104 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50105
50106 {&hf_ieee80211_s1g_cap_beamformee_sts_capability,
50107 {"Beamformee STS Capability", "wlan.s1g.capabilities.sts_beamformee_capability",
50108 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50109
50110 {&hf_ieee80211_s1g_cap_number_sounding_dimensions,
50111 {"Number of Sounding Dimensions", "wlan.s1g.capabilities.number_sounding_dimensions",
50112 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50113
50114 {&hf_ieee80211_s1g_cap_mu_beamformer_capable,
50115 {"MU Beamformer Capable", "wlan.s1g.capabilities.beamformer_capable",
50116 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50117
50118 {&hf_ieee80211_s1g_cap_mu_beamformee_capable,
50119 {"MU Beamformee Capable", "wlan.s1g.capabilities.beamformee_capable",
50120 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50121
50122 {&hf_ieee80211_s1g_cap_htc_vht_capable,
50123 {"+HTC-VHT Capable", "wlan.s1g.capabilities.htc_vht_capable",
50124 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50125
50126 {&hf_ieee80211_s1g_cap_travelling_pilot_support,
50127 {"Traveling Pilot Support", "wlan.s1g.capabilities.traveling_pilot_support",
50128 FT_UINT8, BASE_HEX, VALS(s1g_traveling_pilot_support_vals)((0 ? (const struct _value_string*)0 : ((s1g_traveling_pilot_support_vals
))))
, 0xC0,
50129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50130
50131 {&hf_ieee80211_s1g_cap_rd_responder,
50132 {"RD Responder", "wlan.s1g.capabilities.rd_responder",
50133 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50134
50135 {&hf_ieee80211_s1g_cap_ht_delayed_block_ack,
50136 {"HT Delayed Block Ack", "wlan.s1g.capabilities.ht_delayed_block_ack",
50137 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50138
50139 {&hf_ieee80211_s1g_cap_maximum_mpdu_length,
50140 {"Maximum MPDU Length", "wlan.s1g.capabilities.max_mpdu_length",
50141 FT_UINT8, BASE_DEC, VALS(s1g_max_mpdu_length_vals)((0 ? (const struct _value_string*)0 : ((s1g_max_mpdu_length_vals
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50142
50143 {&hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp,
50144 {"Maximum A-MPDU Length Exponent", "wlan.s1g.capabilities.max_a_mpdu_length_exp",
50145 FT_UINT8, BASE_DEC, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50146
50147 {&hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing,
50148 {"Minimum MPDU Start Spacing", "wlan.s1g.capabilities.min_mpdu_start_spacing",
50149 FT_UINT8, BASE_DEC, VALS(s1g_min_mpdu_start_spacing_vals)((0 ? (const struct _value_string*)0 : ((s1g_min_mpdu_start_spacing_vals
))))
, 0xE0,
50150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50151
50152 {&hf_ieee80211_s1g_cap_uplink_sync_capable,
50153 {"Uplink Sync Capable", "wlan.s1g.capabilities.uplink_sync_capable",
50154 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50155
50156 {&hf_ieee80211_s1g_cap_dynamic_aid,
50157 {"Dynamic AID", "wlan.s1g.capabilities.dynamic_aid",
50158 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50159
50160 {&hf_ieee80211_s1g_cap_bat_support,
50161 {"BAT Support", "wlan.s1g.capabilities.bat_support",
50162 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50163
50164 {&hf_ieee80211_s1g_cap_tim_ade_support,
50165 {"TIM AID Support", "wlan.s1g.capabilities.tim_aid_support",
50166 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50167
50168 {&hf_ieee80211_s1g_cap_non_tim_support,
50169 {"Non TIM Support", "wlan.s1g.capabilities.non_tim_support",
50170 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50171
50172 {&hf_ieee80211_s1g_cap_group_aid_support,
50173 {"Group AID Support", "wlan.s1g.capabilities.group_aid_support",
50174 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50175
50176 {&hf_ieee80211_s1g_cap_sta_type_support,
50177 {"STA Type Support", "wlan.s1g.capabilities.sta_type_support",
50178 FT_UINT8, BASE_HEX, VALS(s1g_sta_type_support_vals)((0 ? (const struct _value_string*)0 : ((s1g_sta_type_support_vals
))))
, 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50179
50180 {&hf_ieee80211_s1g_cap_centralized_authentication_control,
50181 {"Centralized Authentication Control", "wlan.s1g.capabilities.centralized_authentication_control",
50182 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50183
50184 {&hf_ieee80211_s1g_cap_distributed_authentication_control,
50185 {"Distributed Authentication Control", "wlan.s1g.capabilities.distributed_authentication_control",
50186 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50187
50188 {&hf_ieee80211_s1g_cap_a_msdu_support,
50189 {"A-MSDU Supported", "wlan.s1g.capabilities.a_msdu_supported",
50190 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50191
50192 {&hf_ieee80211_s1g_cap_a_mpdu_support,
50193 {"A-MPDU Support", "wlan.s1g.capabilities.a_mpdu_support",
50194 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50195
50196 {&hf_ieee80211_s1g_cap_asymmetic_block_ack_support,
50197 {"Asymmetric Block Ack Supported", "wlan.s1g.capabilities.asymmetric_block_ack_supported",
50198 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50199
50200 {&hf_ieee80211_s1g_cap_flow_control_support,
50201 {"Flow Control Supported", "wlan.s1g.capabilities.flow_control_supported",
50202 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50203
50204 {&hf_ieee80211_s1g_cap_sectorized_beam_capable,
50205 {"Sectorized Beam Capable", "wlan.s1g.capabilities.sectorized_beam_capable",
50206 FT_UINT8, BASE_HEX, VALS(s1g_sectorized_beam_capable_vals)((0 ? (const struct _value_string*)0 : ((s1g_sectorized_beam_capable_vals
))))
, 0xC0,
50207 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50208
50209 {&hf_ieee80211_s1g_cap_obss_mitigation_support,
50210 {"OBSS Mitigation Support", "wlan.s1g.capabilities.obss_mitigation_support",
50211 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50212
50213 {&hf_ieee80211_s1g_cap_fragment_ba_support,
50214 {"Fragment BA Support", "wlan.s1g.capabilities.fragment_ba_support",
50215 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50216
50217 {&hf_ieee80211_s1g_cap_ndp_ps_poll_supported,
50218 {"NDS PS-Poll Supported", "wlan.s1g.capabilities.nds_ps_poll_supported",
50219 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50220
50221 {&hf_ieee80211_s1g_cap_raw_operation_support,
50222 {"Raw Operation Support", "wlan.s1g.capabilities.raw_operation_support",
50223 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50224
50225 {&hf_ieee80211_s1g_cap_page_slicing_support,
50226 {"Page Slicing Support", "wlan.s1g.capabilities.page_slicing_support",
50227 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50228
50229 {&hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support,
50230 {"TXOP Sharing Implicit Ack Support", "wlan.s1g.capabilities.txop_sharing_implicit_ack_support",
50231 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50232
50233 {&hf_ieee80211_s1g_cap_vht_link_adaptation_capable,
50234 {"VHT Link Adaptation Capable", "wlan.s1g.capabilities.vht_link_adaptation_capable",
50235 FT_UINT8, BASE_HEX, VALS(s1g_vht_link_adaptation_vals)((0 ? (const struct _value_string*)0 : ((s1g_vht_link_adaptation_vals
))))
, 0xC0,
50236 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
50237
50238 {&hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response,
50239 {"TACK Support as PS-Poll Response", "wlan.s1g.capabilities.tack_support_as_ps_poll_response",
50240 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50241
50242 {&hf_ieee80211_s1g_cap_duplicate_1_mhz_support,
50243 {"Duplicate 1 MHz Support", "wlan.s1g.capabilities.duplicate_1_mhz_support",
50244 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50245
50246 {&hf_ieee80211_s1g_cap_mcs_negotiation_support,
50247 {"MCS Negotiation Support", "wlan.s1g.capabilities.ms_negotiation_support",
50248 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50249
50250 {&hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support,
50251 {"1 MHz Control Response Preamble Supported",
50252 "wlan.s1g.capabilities.1_mhz_control_response_preamble_supported",
50253 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50254
50255 {&hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support,
50256 {"NDP Beamforming Report Poll Supported",
50257 "wlan.s1g.capabilities.ndp_beamforming_report_poll_supported",
50258 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50259
50260 {&hf_ieee80211_s1g_cap_unsolicited_dynamic_aid,
50261 {"Unsolicited Dynamic AID", "wlan.s1g.capabilities.unsolicited_dynamic_aid",
50262 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50263
50264 {&hf_ieee80211_s1g_cap_sector_training_operation_supported,
50265 {"Sector Training Operation Supported",
50266 "wlan.s1g.capabilities.sector_training_operation_supported",
50267 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50268
50269 {&hf_ieee80211_s1g_cap_temporary_ps_mode_switch,
50270 {"Temporary PS Mode Switch",
50271 "wlan.s1g.capabilities.temporary_ps_mode_switch",
50272 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50273
50274 {&hf_ieee80211_s1g_cap_twt_grouping_support,
50275 {"TWT Grouping Support", "wlan.s1g.capabilities.twt_grouping_support",
50276 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50277
50278 {&hf_ieee80211_s1g_cap_bdt_capable,
50279 {"BDT Capable", "wlan.s1g.capabilities.bdt_capable",
50280 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50281
50282 {&hf_ieee80211_s1g_cap_color,
50283 {"COLOR", "wlan.s1g.capabilities.color",
50284 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50285
50286 {&hf_ieee80211_s1g_cap_twt_requester_support,
50287 {"TWT Requester Support", "wlan.s1g.capabilities.twt_requester_support",
50288 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50289
50290 {&hf_ieee80211_s1g_cap_twt_responder_support,
50291 {"TWT Responder Support", "wlan.s1g.capabilities.twt_responder_support",
50292 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50293
50294 {&hf_ieee80211_s1g_cap_pv1_frame_support,
50295 {"PV1 Frame Support", "wlan.s1g.capabilities.pv1_frame_support",
50296 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50297
50298 {&hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable,
50299 {"Link Adaptation per Normal Control Response Capable",
50300 "wlan.s1g.capabilities.link_adaptation_per_normal_control_response_capable",
50301 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50302
50303 {&hf_ieee80211_s1g_cap_reserved,
50304 {"Reserved", "wlan.s1g.capabilities.reserved",
50305 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50306
50307 {&hf_ieee80211_s1g_mcs_and_nss_set,
50308 {"Supported S1G-MCS and NSS Set", "wlan.s1g.supported_mcs_nss_set",
50309 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50310
50311 {&hf_ieee80211_s1g_rx_s1g_mcs_map,
50312 {"Rx S1G-MCS Map", "wlan.s1g.supported_mcs_nss_set.rx_s1g_mcs_map",
50313 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00000000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50314
50315 {&hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate,
50316 {"Rx Highest Supported Long GI Data Rate",
50317 "wlan.s1g.supported_mcs_nss_set.rx_highest_supported_long_gi_data_rate",
50318 FT_UINT40, BASE_HEX, NULL((void*)0), 0x000001FF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50319
50320 {&hf_ieee80211_s1g_tx_s1g_mcs_map,
50321 {"Tx S1G-MCS Map", "wlan.s1g.supported_mcs_nss_set.tx_s1g_mcs_map",
50322 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001FE0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50323
50324 {&hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate,
50325 {"Tx Highest Supported Long GI Data Rate",
50326 "wlan.s1g.supported_mcs_nss_set.tx_highest_supported_long_gi_data_rate",
50327 FT_UINT40, BASE_HEX, NULL((void*)0), 0x03FE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50328
50329 {&hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz,
50330 {"Rx Single Spatial Stream and S1G-MCS Map for 1MHz",
50331 "wlan.s1g.supported_mcs_nss_set.rx_single_spatial_stream_1_mhz",
50332 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0C00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50333
50334 {&hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz,
50335 {"Tx Single Spatial Stream and S1G-MCS Map for 1MHz",
50336 "wlan.s1g.supported_mcs_nss_set.tx_single_spatial_stream_1_mhz",
50337 FT_UINT40, BASE_HEX, NULL((void*)0), 0x3000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50338
50339 {&hf_ieee80211_s1g_mcs_and_nss_reserved,
50340 {"Reserved", "wlan.s1g.supported_mcs_nss_set.reserved",
50341 FT_UINT40, BASE_HEX, NULL((void*)0), 0xC000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50342
50343 {&hf_ieee80211_s1g_subchannel_selective_transmission,
50344 {"Channel Activity Schedule", "wlan.sst.channel_activity_schedule",
50345 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50346
50347 {&hf_ieee80211_s1g_sst_sounding_option,
50348 {"Sounding Option", "wlan.sst.channel_activity_schedule.sounding_option",
50349 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50350
50351 {&hf_ieee80211_s1g_channel_activity_bitmap,
50352 {"Channel Activity Bitmap", "wlan.sst.channel_activity_schedule.channel_activity_bitmap",
50353 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001FE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50354
50355 {&hf_ieee80211_s1g_ul_activity,
50356 {"UL Activity", "wlan.sst.channel_activity_schedule.ul_activity",
50357 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50358
50359 {&hf_ieee80211_s1g_dl_activity,
50360 {"DL Activity", "wlan.sst.channel_activity_schedule.dl_activity",
50361 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50362
50363 {&hf_ieee80211_s1g_max_trans_width,
50364 {"Maximum Transmission Width", "wlan.sst.channel_activity_schedule.max_trans_width",
50365 FT_UINT32, BASE_DEC, VALS(max_trans_width_vals)((0 ? (const struct _value_string*)0 : ((max_trans_width_vals
))))
,
50366 0x00001800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50367
50368 {&hf_ieee80211_s1g_activity_start_time,
50369 {"Activity Start Time", "wlan.sst.channel_activity_schedule.activity_start_time",
50370 FT_UINT32, BASE_DEC, NULL((void*)0), 0xFFFFE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50371
50372 {&hf_ieee80211_s1g_sst_sounding_option1,
50373 {"Sounding Option", "wlan.sst.channel_activity_schedule.sounding_option",
50374 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50375
50376 {&hf_ieee80211_s1g_channel_activity_bitmap1,
50377 {"Channel Activity Bitmap", "wlan.sst.channel_activity_schedule.channel_activity_bitmap",
50378 FT_UINT16, BASE_HEX, NULL((void*)0), 0x01FE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50379
50380 {&hf_ieee80211_s1g_sounding_start_time_present,
50381 {"Sounding Start Time Present", "wlan.sst.channel_activity_schedule.sounding_start_time_present",
50382 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50383
50384 {&hf_ieee80211_s1g_channel_activity_reserved,
50385 { "Reserved", "wlan.sst.channel_activity_schedule.reserved",
50386 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50387
50388 {&hf_ieee80211_s1g_max_trans_width1,
50389 {"Maximum Transmission Width", "wlan.sst.channel_activity_schedule.max_trans_width",
50390 FT_UINT16, BASE_DEC, VALS(max_trans_width_vals)((0 ? (const struct _value_string*)0 : ((max_trans_width_vals
))))
,
50391 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50392
50393 {&hf_ieee80211_s1g_sounding_start_time,
50394 {"Sounding Start Time",
50395 "wlan.sst.channel_activity_schedule.sounding_start_time",
50396 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50397
50398 {&hf_ieee80211_s1g_open_loop_link_margin,
50399 {"Open-Loop Link Margin Index", "wlan.s1g.open_loop_link_margin_index",
50400 FT_UINT8, BASE_CUSTOM, CF_FUNC(s1g_open_loop_link_margin_custom)((const void *) (size_t) (s1g_open_loop_link_margin_custom)),
50401 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50402
50403 {&hf_ieee80211_s1g_raw_control,
50404 {"RAW Control", "wlan.s1g.rps.raw_control",
50405 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50406
50407 {&hf_ieee80211_s1g_raw_type,
50408 {"RAW Type", "wlan.s1g.rps.raw_control.raw_type",
50409 FT_UINT8, BASE_DEC, VALS(s1g_raw_control_raw_type)((0 ? (const struct _value_string*)0 : ((s1g_raw_control_raw_type
))))
, 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50410
50411 {&hf_ieee80211_s1g_raw_type_options,
50412 {"RAW Type Options", "wlan.s1g.rps.raw_control.raw_type_options",
50413 FT_UINT8, BASE_CUSTOM, CF_FUNC(s1g_raw_type_options_custom)((const void *) (size_t) (s1g_raw_type_options_custom)),
50414 0x0C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50415
50416 {&hf_ieee80211_s1g_raw_start_time_indication,
50417 {"Start Time Indication", "wlan.s1g.rps.raw_control.start_time_indication",
50418 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50419
50420 {&hf_ieee80211_s1g_raw_raw_group_indication,
50421 {"RAW Group Indication", "wlan.s1g.rps.raw_control.raw_group_indication",
50422 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50423
50424 {&hf_ieee80211_s1g_raw_channel_indication_preference,
50425 {"Channel Indication Preference",
50426 "wlan.s1g.rps.raw_control.channel_indication_preference",
50427 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50428
50429 {&hf_ieee80211_s1g_raw_periodic_raw_indication,
50430 {"Periodic RAW Indication",
50431 "wlan.s1g.rps.raw_control.periodic_raw_indication",
50432 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50433
50434 {&hf_ieee80211_s1g_raw_slot_def,
50435 {"RAW Slot Definition", "wlan.s1g.rps.raw_slot_definition",
50436 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50437
50438 {&hf_ieee80211_s1g_slot_def_format_indication,
50439 {"Slot Definition Format Indication",
50440 "wlan.s1g.rps.raw_slot_definition.slot_definition_format_indication",
50441 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50442
50443 {&hf_ieee80211_s1g_slot_def_cross_slot_boundary,
50444 {"Cross Slot Boundary",
50445 "wlan.s1g.rps.raw_slot_definition.cross_slot_boundary",
50446 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50447
50448 {&hf_ieee80211_s1g_slot_def_slot_duration_count8,
50449 {"Slot Duration Count",
50450 "wlan.s1g.rps.raw_slot_definition.slot_duration_count",
50451 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_raw_slot_duration_custom)((const void *) (size_t) (s1g_raw_slot_duration_custom)), 0x03FC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50452
50453 {&hf_ieee80211_s1g_slot_def_num_slots6,
50454 {"Number of Slots",
50455 "wlan.s1g.rps.raw_slot_definition.number_of_slots",
50456 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFC00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50457
50458 {&hf_ieee80211_s1g_slot_def_slot_duration_count11,
50459 {"Slot Duration Count",
50460 "wlan.s1g.rps.raw_slot_definition.slot_duration_count",
50461 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_raw_slot_duration_custom)((const void *) (size_t) (s1g_raw_slot_duration_custom)), 0x1FFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50462
50463 {&hf_ieee80211_s1g_slot_def_num_slots3,
50464 {"Number of Slots",
50465 "wlan.s1g.rps.raw_slot_definition.number_of_slots",
50466 FT_UINT16, BASE_DEC, NULL((void*)0), 0xE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50467
50468 {&hf_ieee80211_s1g_raw_start_time,
50469 {"RAW Start Time", "wlan.s1g.raw_slot_definition.raw_start_time",
50470 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50471
50472 {&hf_ieee80211_s1g_raw_group_subfield,
50473 {"RAW Group", "wlan.s1g.rps.raw_group",
50474 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50475
50476 {&hf_ieee80211_s1g_raw_group_page_index,
50477 {"Page Index", "wlan.s1g.rps.raw_group.page_index",
50478 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50479
50480 {&hf_ieee80211_s1g_raw_group_start_aid,
50481 {"RAW Start AID", "wlan.s1g.rps.raw_group.raw_start_aid",
50482 FT_UINT24, BASE_DEC, NULL((void*)0), 0x001FFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50483
50484 {&hf_ieee80211_s1g_raw_group_end_aid,
50485 {"RAW End AID", "wlan.s1g.rps.raw_group.raw_end_aid",
50486 FT_UINT24, BASE_DEC, NULL((void*)0), 0xFFE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50487
50488 {&hf_ieee80211_s1g_raw_channel_indication,
50489 {"Channel Indication", "wlan.s1g.rps.channel_indication",
50490 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50491
50492 {&hf_ieee80211_s1g_raw_ci_channel_activity_bitmap,
50493 {"Channel Activity Bitmap",
50494 "wlan.s1g.rps.channel_indication.channel_activity_bitmap",
50495 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50496
50497 {&hf_ieee80211_s1g_raw_ci_max_trans_width,
50498 {"Maximum Transmission Width",
50499 "wlan.s1g.rps.channel_indication.maximum_transmission_width",
50500 FT_UINT16, BASE_DEC, VALS(max_trans_width_vals)((0 ? (const struct _value_string*)0 : ((max_trans_width_vals
))))
, 0x0300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50501
50502 {&hf_ieee80211_s1g_raw_ci_ul_activity,
50503 {"UL Activity", "wlan.s1g.rps.channel_indication.ul_activity",
50504 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50505
50506 {&hf_ieee80211_s1g_raw_ci_dl_activity,
50507 {"DL Activity", "wlan.s1g.rps.channel_indication.dl_activity",
50508 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50509
50510 {&hf_ieee80211_s1g_raw_ci_reserved,
50511 {"Reserved", "wlan.s1g.rps.channel_indication.reserved",
50512 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50513
50514 {&hf_ieee80211_s1g_raw_praw_periodicity,
50515 {"PRAW Periodicity",
50516 "wlan.s1g.rps.periodic_operation_parameters.praw_periodicity",
50517 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50518
50519 {&hf_ieee80211_s1g_raw_praw_validity,
50520 {"PRAW Validity",
50521 "wlan.s1g.rps.periodic_operation_parameters.praw_validity",
50522 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50523
50524 {&hf_ieee80211_s1g_raw_praw_start_offset,
50525 {"PRAW Start Offset",
50526 "wlan.s1g.rps.periodic_operation_parameters.praw_start_offset",
50527 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50528
50529
50530 {&hf_ieee80211_s1g_page_slice_page_period,
50531 {"Page Period", "wlan.page_slice.page_period",
50532 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50533
50534 {&hf_ieee80211_s1g_page_slice_control,
50535 {"Page Slice Control", "wlan.page_slice.page_slice_control",
50536 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50537
50538 {&hf_ieee80211_s1g_page_slice_page_index,
50539 {"Page Index", "wlan.page_slice.page_slice_control.page_index",
50540 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50541
50542 {&hf_ieee80211_s1g_page_slice_page_slice_length,
50543 {"Page Slice Length", "wlan.page_slice.page_slice_control.page_slice_len",
50544 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00007C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50545
50546 {&hf_ieee80211_s1g_page_slice_page_slice_count,
50547 {"Page Slice Count", "wlan.page_slice.page_slice_control.page_slice_count",
50548 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50549
50550 {&hf_ieee80211_s1g_page_slice_block_offset,
50551 {"Block Offset", "wlan.page_slice.page_slice_control.block_offset",
50552 FT_UINT24, BASE_DEC, NULL((void*)0), 0x01F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50553
50554 {&hf_ieee80211_s1g_page_slice_tim_offset,
50555 {"TIM Offset", "wlan.page_slice.page_slice_control.tim_offset",
50556 FT_UINT24, BASE_DEC, NULL((void*)0), 0x1E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50557
50558 {&hf_ieee80211_s1g_page_slice_reserved,
50559 {"Reserved", "wlan.page_slice.page_slice_control.reserved",
50560 FT_UINT24, BASE_HEX, NULL((void*)0), 0xE00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50561
50562 {&hf_ieee80211_s1g_page_slice_page_bitmap,
50563 {"Page Bitmap", "wlan.page_slice.page_bitmap",
50564 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50565
50566 {&hf_ieee80211_s1g_aid_request_mode,
50567 {"AID Request Mode", "wlan.s1g.aid_request.aid_request_mode",
50568 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50569
50570 {&hf_ieee80211_s1g_aid_request_interval_present,
50571 {"AID Request Interval Present",
50572 "wlan.s1g.aid_request.aid_request_mode.aid_request_interval_present",
50573 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50574
50575 {&hf_ieee80211_s1g_aid_request_per_sta_address_present,
50576 {"Per STA Address Present",
50577 "wlan.s1g.aid_request.aid_request_mode.per_sta_address_present",
50578 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50579
50580 {&hf_ieee80211_s1g_aid_request_service_characteristic_present,
50581 {"Service Characteristic Present",
50582 "wlan.s1g.aid_request.aid_request_mode.service_characteristic_present",
50583 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50584
50585 {&hf_ieee80211_s1g_aid_request_non_tim_mode_switch,
50586 {"Non-TIM Mode Switch",
50587 "wlan.s1g.aid_request.aid_request_mode.non_tim_mode_switch",
50588 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50589
50590 {&hf_ieee80211_s1g_aid_request_tim_mode_switch,
50591 {"TIM Mode Switch",
50592 "wlan.s1g.aid_request.aid_request_mode.tim_mode_switch",
50593 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50594
50595 {&hf_ieee80211_s1g_aid_request_group_address_present,
50596 {"Group Address Present",
50597 "wlan.s1g.aid_request.aid_request_mode.group_address_present",
50598 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50599
50600 {&hf_ieee80211_s1g_aid_request_reserved,
50601 {"Reserved", "wlan.s1g.aid_request.aid_request_mode.reserved",
50602 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50603
50604 {&hf_ieee80211_s1g_aid_request_interval,
50605 {"AID Request Interval", "wlan.s1g.aid_request.aid_request_interval",
50606 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50607
50608 {&hf_ieee80211_s1g_aid_request_characteristic_sensor,
50609 {"Sensor", "wlan.s1g.aid_request.service_characteristic.sensor",
50610 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50611
50612 {&hf_ieee80211_s1g_aid_request_characteristic_offload,
50613 {"Offload", "wlan.s1g.aid_request.service_characteristic.offload",
50614 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50615
50616 {&hf_ieee80211_s1g_aid_request_characteristic_official_service,
50617 {"Critical Service",
50618 "wlan.s1g.aid_request.service_characteristic.critical_service",
50619 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50620
50621 {&hf_ieee80211_s1g_aid_request_characteristic_reserved,
50622 {"Reserved", "wlan.s1g.aid_request.service_characteristic.reserved",
50623 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50624
50625 {&hf_ieee80211_s1g_aid_req_peer_sta_addr,
50626 {"Peer STA Address", "wlan.s1g.aid_request.peer_sta_address",
50627 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50628
50629 {&hf_ieee80211_s1g_aid_request_characteristic,
50630 {"Service Characteristic", "wlan.s1g.aid_request.service_characteristic",
50631 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50632
50633 {&hf_ieee80211_s1g_aid_req_group_addr,
50634 {"Group Mac Address", "wlan.s1g.aid_request.group_mac_address",
50635 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50636
50637 {&hf_ieee80211_s1g_aid_rsp_aid_group_aid,
50638 {"AID/Group AID", "wlan.s1g.aid_response.aid_group_aid",
50639 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50640
50641 {&hf_ieee80211_s1g_aid_rsp_aid_switch_count,
50642 {"AID Switch Count", "wlan.s1g.aid_response.aid_switch_count",
50643 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50644
50645 {&hf_ieee80211_s1g_aid_rsp_aid_response_interval,
50646 {"AID Response Interval", "wlan.s1g.aid_response.aid_response_interval",
50647 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50648
50649 {&hf_ieee80211_s1g_sector_op_control_16b,
50650 {"Sector Operation Control", "wlan.s1g.sector_operation.control",
50651 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50652
50653 {&hf_ieee80211_s1g_sector_op_sectorization_type_b16,
50654 {"Sectorization Type",
50655 "wlan.s1g.sector_operation.control.sectorization_type",
50656 FT_BOOLEAN, 16, TFS(&sectorization_type_tfs)((0 ? (const struct true_false_string*)0 : ((&sectorization_type_tfs
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50657
50658 {&hf_ieee80211_s1g_sector_op_periodic_training_indicator,
50659 {"Periodic Training Indicator",
50660 "wlan.s1g.sector_operation.control.periodic_training_indicator",
50661 FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50662
50663 {&hf_ieee80211_s1g_sector_op_training_period,
50664 {"Training Period",
50665 "wlan.s1g.sector_operation.control.training_interval",
50666 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00FC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50667
50668 {&hf_ieee80211_s1g_sector_op_remaining_beacon_interval,
50669 {"Remaining Beacon Interval",
50670 "wlan.s1g.sector_operation.control.remaining_beacon_interval",
50671 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50672
50673 {&hf_ieee80211_s1g_sector_op_reserved_b16,
50674 {"Reserved", "wlan.s1g.sector_operation.reserved",
50675 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50676
50677 {&hf_ieee80211_s1g_sector_op_control,
50678 {"Sector Operation Control", "wlan.s1g.sector_operation.control",
50679 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50680
50681 {&hf_ieee80211_s1g_sector_op_sectorization_type,
50682 {"Sectorization Type",
50683 "wlan.s1g.sector_operation.control.sectorization_type",
50684 FT_BOOLEAN, 8, TFS(&sectorization_type_tfs)((0 ? (const struct true_false_string*)0 : ((&sectorization_type_tfs
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50685
50686 {&hf_ieee80211_s1g_sector_op_period,
50687 {"Period", "wlan.s1g.sector_operation.control.period",
50688 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50689
50690 {&hf_ieee80211_s1g_sector_op_omni,
50691 {"Omni", "wlan.s1g.sector_operation.control.omni",
50692 FT_BOOLEAN, 8, TFS(&sectorization_omni_tfs)((0 ? (const struct true_false_string*)0 : ((&sectorization_omni_tfs
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50693
50694 {&hf_ieee80211_s1g_sector_op_group_info,
50695 {"Group Info", "wlan.s1g.sector_operation.group_info",
50696 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50697
50698 {&hf_ieee80211_s1g_short_beacon_interval,
50699 {"Short Beacon Interval", "wlan.sig.short_beacon_interval",
50700 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50701
50702 {&hf_ieee80211_s1g_change_sequence,
50703 {"Change Sequence", "wlan.s1g.change_sequence",
50704 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50705
50706 /* Need to add a TFS for this and perhaps two versions */
50707 {&hf_ieee80211_s1g_auth_control_control,
50708 {"Control", "wlan.s1g.auth_control.control",
50709 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50710
50711 {&hf_ieee80211_s1g_auth_control_deferral,
50712 {"Deferral", "wlan.s1g.auth_control.deferral",
50713 FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50714
50715 {&hf_ieee80211_s1g_auth_control_reserved,
50716 {"Reserved", "wlan.s1g.auth_control.reserved",
50717 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50718
50719 {&hf_ieee80211_s1g_auth_control_thresh,
50720 {"Authentication Control Threshold", "wlan.s1g.auth_control.threshold",
50721 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50722
50723 {&hf_ieee80211_s1g_auth_control_thresh_tus,
50724 {"Authentication Control Threshold", "wlan.s1g.auth_control.threshold",
50725 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
,
50726 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50727
50728 {&hf_ieee80211_s1g_auth_slot_duration,
50729 {"Authentication Slot Duration", "wlan.s1g.auth_control.slot_duration",
50730 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_di_dis)((0 ? (const struct unit_name_string*)0 : ((&units_di_dis
))))
, 0x0000FE,
50731 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50732
50733 {&hf_ieee80211_s1g_auth_max_trans_int,
50734 {"Maximum Transmission Interval",
50735 "wlan.s1g.distributed_auth_control.max_xmit_int",
50736 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0x00FF00,
50737 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50738
50739 {&hf_ieee80211_s1g_auth_min_trans_int,
50740 {"Minimum Transmission Interval",
50741 "wlan.s1g.distributed_auth_control.min_xmit_int",
50742 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0xFF0000,
50743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50744
50745 {&hf_ieee80211_s1g_tsf_timer_accuracy,
50746 {"TSF Timer Accuracy", "wlan.s1g.tsf_timer_accuracy",
50747 FT_UINT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_ppm)((0 ? (const struct unit_name_string*)0 : ((&units_ppm)))
)
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50748
50749 {&hf_ieee80211_s1g_relay_control,
50750 {"Relay Control", "wlan.s1g.relay_control",
50751 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50752
50753 {&hf_ieee80211_s1g_relay_control_rootap_bssid,
50754 {"RootAP BSSID", "wlan.s1g.relay_control.rootap_bssid",
50755 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50756
50757 {&hf_ieee80211_s1g_relay_function_activation_mode,
50758 {"Relay Activation Mode",
50759 "wlan.s1g.relay_activation.relay_activation_mode",
50760 FT_BOOLEAN, 8, TFS(&relay_activation_mode_tfs)((0 ? (const struct true_false_string*)0 : ((&relay_activation_mode_tfs
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50761
50762 {&hf_ieee80211_s1g_relay_function_direction,
50763 {"Direction", "wlan.s1g.relay_activation.direction",
50764 FT_BOOLEAN, 8, TFS(&relay_direction_tfs)((0 ? (const struct true_false_string*)0 : ((&relay_direction_tfs
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50765
50766 {&hf_ieee80211_s1g_relay_function_enable_relay_function,
50767 {"Enable Relay Function",
50768 "wlan.s1g.relay_activation.enable_relay_function",
50769 FT_UINT8, BASE_CUSTOM, CF_FUNC(enable_relay_function_custom)((const void *) (size_t) (enable_relay_function_custom)), 0x04,
50770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50771
50772 {&hf_ieee80211_s1g_relay_function_stas_present_indic,
50773 {"Number of STAs Presence Indicator",
50774 "wlan.s1g.relay_activation.number_of_stas_presence_indicator",
50775 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50776
50777 {&hf_ieee80211_s1g_relay_function_reserved,
50778 {"Reserved", "wlan.s1g.relay_activation.reserved",
50779 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50780
50781 {&hf_ieee80211_s1g_number_of_stas,
50782 {"Number of STAs", "wlan.s1g.relay_activation.number_of_stas",
50783 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50784
50785 {&hf_ieee80211_s1g_initiator_mac_address,
50786 {"Initiator MAC Address",
50787 "wlan.s1g.reachable_address.initiator_mac_address",
50788 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50789
50790 {&hf_ieee80211_s1g_address_count,
50791 {"Address Count", "wlan.s1g.reachable_address.address_count",
50792 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50793
50794 {&hf_ieee80211_s1g_reachable_add_remove,
50795 {"Add/Remove", "wlan.s1g.reachable_address.add_remove",
50796 FT_BOOLEAN, 8, TFS(&reachable_address_add_remove_tfs)((0 ? (const struct true_false_string*)0 : ((&reachable_address_add_remove_tfs
))))
,
50797 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50798
50799 {&hf_ieee80211_s1g_reachable_relay_capable,
50800 {"Relay Capable", "wlan.s1g.reachable_address.relay_capable",
50801 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50802
50803 {&hf_ieee80211_s1g_reachable_reserved,
50804 {"Reserved", "wlan.s1g.reachable_address.reserved",
50805 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50806
50807 {&hf_ieee80211_s1g_reachable_mac_address,
50808 {"MAC Address", "wlan.s1g.reachable_address.mac_address",
50809 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50810
50811 {&hf_ieee80211_s1g_relay_discovery_control,
50812 {"Relay Discovery Control", "wlan.s1g.relay_discovery_control",
50813 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50814
50815 {&hf_ieee80211_s1g_min_data_rate_included,
50816 {"Min Data Rate Included",
50817 "wlan.s1g.relay_discovery_control.min_data_rate_included",
50818 FT_BOOLEAN, 8, TFS(&tfs_included_not_included)((0 ? (const struct true_false_string*)0 : ((&tfs_included_not_included
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50819
50820 {&hf_ieee80211_s1g_mean_data_rate_included,
50821 {"Mean Data Rate Included",
50822 "wlan.s1g.relay_discovery_control.mean_data_rate_included",
50823 FT_BOOLEAN, 8, TFS(&tfs_included_not_included)((0 ? (const struct true_false_string*)0 : ((&tfs_included_not_included
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50824
50825 {&hf_ieee80211_s1g_max_data_rate_included,
50826 {"Max Data Rate Included",
50827 "wlan.s1g.relay_discovery_control.max_data_rate_included",
50828 FT_BOOLEAN, 8, TFS(&tfs_included_not_included)((0 ? (const struct true_false_string*)0 : ((&tfs_included_not_included
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50829
50830 {&hf_ieee80211_s1g_delay_and_min_phy_rate,
50831 {"Delay and Min Phy Rate Included",
50832 "wlan.s1g.relay_discovery_control.delay_and_min_phy_rate_included",
50833 FT_BOOLEAN, 8, TFS(&tfs_included_not_included)((0 ? (const struct true_false_string*)0 : ((&tfs_included_not_included
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50834
50835 {&hf_ieee80211_s1g_information_not_available,
50836 {"Information Not Available",
50837 "wlan.s1g.relay_discovery_control.information_not_available",
50838 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50839
50840 {&hf_ieee80211_s1g_relay_control_ul_min,
50841 {"UL Min Data Rate (100kbps)", "wlan.s1g.relay_discovery.ul_min_data_rate",
50842 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50843
50844 {&hf_ieee80211_s1g_relay_control_ul_mean,
50845 {"UL Mean Data Rate (100kbps)",
50846 "wlan.s1g.relay_discovery.ul_mean_data_rate",
50847 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50848
50849 {&hf_ieee80211_s1g_relay_control_ul_max,
50850 {"UL Max Data Rate (100kbps)", "wlan.s1g.relay_discovery.ul_max_data_rate",
50851 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50852
50853 {&hf_ieee80211_s1g_relay_control_dl_min,
50854 {"DL Min Data Rate (100kbps)", "wlan.s1g.relay_discovery.dl_min_data_rate",
50855 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50856
50857 {&hf_ieee80211_s1g_relay_control_dl_mean,
50858 {"DL Mean Data Rate (100kbps)",
50859 "wlan.s1g.relay_discovery.dl_mean_data_rate",
50860 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50861
50862 {&hf_ieee80211_s1g_relay_control_dl_max,
50863 {"DL Max Data Rate (100kbps)", "wlan.s1g.relay_discovery.dl_max_data_rate",
50864 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50865
50866 {&hf_ieee80211_s1g_relay_discovery_reserved,
50867 {"Reserved", "wlan.s1g.relay_discovery_control.reserved",
50868 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50869
50870 {&hf_ieee80211_s1g_relay_hierarchy_identifier,
50871 {"Relay Hierarchy Identifier",
50872 "wlan.s1g.relay_control.relay_hierarchy_identifier",
50873 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(relay_hierarchy_rstrs)((0 ? (const struct _range_string*)0 : ((relay_hierarchy_rstrs
))))
,
50874 0x7F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50875
50876 {&hf_ieee80211_s1g_relay_no_more_relay_flag,
50877 {"No More Relay Flag", "wlan.s1g.relay_control.no_more_relay_flag",
50878 FT_BOOLEAN, 8, TFS(&no_more_relay_flag_tfs)((0 ? (const struct true_false_string*)0 : ((&no_more_relay_flag_tfs
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50879
50880 {&hf_ieee80211_s1g_aid_entry_mac_addr,
50881 {"STA MAC Address", "wlan.s1g.aid_entry.sta_mac_address",
50882 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50883
50884 {&hf_ieee80211_s1g_aid_entry_assoc_id,
50885 {"Association ID", "wlan.s1g.aid_entry.association_id",
50886 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50887
50888 {&hf_ieee80211_s1g_beacon_compatibility_info,
50889 {"Compatibility Information", "wlan.s1g.beacon_compatibility_info",
50890 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50891
50892 {&hf_ieee80211_s1g_beacon_interval,
50893 {"Beacon Interval", "wlan.s1g.beacon_interval",
50894 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50895
50896 {&hf_ieee80211_s1g_tsf_completion,
50897 {"TSF Completion", "wlan.s1g.tsf_completion",
50898 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50899
50900 {&hf_ieee80211_s1g_channel_width,
50901 {"Channel Width", "wlan.s1g.channel_width",
50902 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50903
50904 {&hf_ieee80211_s1g_primary_channel_width,
50905 {"Primary Channel Width", "wlan.s1g.channel_width.primary_channel_width",
50906 FT_UINT8, BASE_DEC, VALS(primary_channel_width_vals)((0 ? (const struct _value_string*)0 : ((primary_channel_width_vals
))))
,
50907 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50908
50909 {&hf_ieee80211_s1g_bss_operating_channel_width,
50910 {"BSS Operating Channel Width",
50911 "wlan.s1g.channel_width.bss_operating_channel_width",
50912 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50913
50914 {&hf_ieee80211_s1g_primary_channel_location,
50915 {"1MHz Primary Channel Location",
50916 "wlan.s1g.channel_width.1mhz_primary_channel_location",
50917 FT_UINT8, BASE_DEC,
50918 VALS(one_mhz_primary_channel_location_vals)((0 ? (const struct _value_string*)0 : ((one_mhz_primary_channel_location_vals
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50919
50920 {&hf_ieee80211_s1g_reserved_b6,
50921 {"Reserved", "wlan.s1g.channel_width.reserved_b6",
50922 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50923
50924 {&hf_ieee80211_s1g_mcs10_use,
50925 {"MCS10 Use", "wlan.s1g.channel_width.mcs10_use",
50926 FT_UINT8, BASE_DEC, VALS(mcs10_use_vals)((0 ? (const struct _value_string*)0 : ((mcs10_use_vals)))), 0x80,
50927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50928
50929 {&hf_ieee80211_s1g_operating_class,
50930 {"Operating Class", "wlan.s1g.operating_class",
50931 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50932
50933 {&hf_ieee80211_s1g_primary_channel_number,
50934 {"Primary Channel Number", "wlan.s1g.primary_channel_number",
50935 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50936
50937 {&hf_ieee80211_s1g_channel_center_frequency,
50938 {"Channel Center Frequency", "wlan.s1g.channel_center_frequency",
50939 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50940
50941 {&hf_ieee80211_s1g_basic_mcs_and_nss_set,
50942 {"Basic S1G-MCS and NSS Set", "wlan.s1g.basic_s1g_mcs_and_nss",
50943 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50944
50945 {&hf_ieee80211_s1g_sst_enabled_channel_bitmap,
50946 {"SST Enabled Channel Bitmap", "wlan.s1g.sst_enabled_channel_bitmap",
50947 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50948
50949 {&hf_ieee80211_s1g_sst_primary_channel_offset,
50950 {"Primary Channel Offset", "wlan.s1g.primary_channel_offset",
50951 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50952
50953 {&hf_ieee80211_s1g_sst_channel_unit,
50954 {"SST Channel Unit", "wlan.s1g.sst_channel_unit",
50955 FT_UINT8, BASE_DEC, VALS(sst_channel_unit_vals)((0 ? (const struct _value_string*)0 : ((sst_channel_unit_vals
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50956
50957 {&hf_ieee80211_s1g_sst_reserved,
50958 {"Reserved", "wlan.s1g.sst_reserved",
50959 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50960
50961 {&hf_ieee80211_s1g_max_away_duration,
50962 {"Max Away Duration", "wlan.s1g.max_away_duration",
50963 FT_UINT16, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
,
50964 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50965
50966 {&hf_ieee80211_s1g_tim_bmapctrl,
50967 {"Bitmap Control", "wlan.s1g.tim.bitmap_control",
50968 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50969
50970 {&hf_ieee80211_s1g_tim_bmapctl_traffic_indicator,
50971 {"Traffic Indication", "wlan.s1g.tim.traffic_indication",
50972 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50973
50974 {&hf_ieee80211_s1g_tim_page_slice_number,
50975 {"Page Slice Number", "wlan.s1g.tim.page_slice_number",
50976 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50977
50978 {&hf_ieee80211_s1g_tim_page_index,
50979 {"Page Index", "wlan.s1g.tim.page_index",
50980 FT_UINT8, BASE_DEC, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50981
50982 {&hf_ieee80211_s1g_pvb_block_control_byte,
50983 {"Block Control Byte", "wlan.s1g.tim.pvb.block_control",
50984 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50985
50986 {&hf_ieee80211_s1g_pvb_encoding_mode,
50987 {"Encoding Mode", "wlan.s1g.tim.pvb.block_control.encoding_mode",
50988 FT_UINT8, BASE_HEX, VALS(s1g_block_control_encoding_mode_vals)((0 ? (const struct _value_string*)0 : ((s1g_block_control_encoding_mode_vals
))))
,
50989 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50990
50991 {&hf_ieee80211_s1g_pvb_inverse_bitmap,
50992 {"Inverse Bitmap", "wlan.s1g.tim.pvb.block_control.inverse_bitmap",
50993 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50994
50995 {&hf_ieee80211_s1g_pvb_block_offset,
50996 {"Block Offset", "wlan.s1g.tim.pvb.block_offset",
50997 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50998
50999 {&hf_ieee80211_s1g_block_bitmap,
51000 {"Block Bitmap", "wlan.s1g.tim.pvb.block_bitmap.bitmap",
51001 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51002
51003 {&hf_ieee80211_s1g_block_bitmap_sta_aid13,
51004 {"STA AID13", "wlan.s1g.tim.pvb.block_bitmap.subblock.aid13",
51005 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51006
51007 {&hf_ieee80211_s1g_block_bitmap_ade,
51008 {"ADE Control", "wlan.s1g.tim.pvb.block_bitmap.ade.control",
51009 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51010
51011 {&hf_ieee80211_s1g_block_bitmap_ewl,
51012 {"EWL", "wlan.s1g.tim.pvb.block_bitmap.ade.ewl",
51013 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51014
51015 {&hf_ieee80211_s1g_block_bitmap_len,
51016 {"Length", "wlan.s1g.tim.pvb.block_bitmap.ade.length",
51017 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51018
51019 {&hf_ieee80211_s1g_block_bitmap_ade_bytes,
51020 {"Bitmap", "wlan.s1g.tim.pvb.block_bitmap.ade.bitmap",
51021 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51022
51023 {&hf_ieee80211_s1g_block_bitmap_single_aid,
51024 {"Single AID13", "wlan.s1g.tim.pvb.single_aid",
51025 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51026
51027 {&hf_ieee80211_s1g_block_bitmap_olb_length,
51028 {"Length", "wlan.s1g.tim.pvb.olb.length",
51029 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51030
51031 {&hf_ieee80211_s1g_probe_response_group_bitmap,
51032 {"Probe Response Group Bitmap", "wlan.s1g.probe_response_group_bitmap",
51033 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51034
51035 {&hf_ieee80211_s1g_probe_resp_subfield_0,
51036 {"Probe Response Option Default Bitmap",
51037 "wlan.s1g.probe_response_option_default_bitmap",
51038 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51039
51040 {&hf_ieee80211_pv1_probe_response_req_full_ssid,
51041 {"Request Full SSID", "wlan.s1g.probe_response_option_request_full_ssid",
51042 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested)((0 ? (const struct true_false_string*)0 : ((&tfs_requested_not_requested
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51043
51044 {&hf_ieee80211_pv1_probe_response_req_next_tbtt,
51045 {"Request Next TBTT", "wlan.s1g.probe_response_option_request_next_tbtt",
51046 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested)((0 ? (const struct true_false_string*)0 : ((&tfs_requested_not_requested
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51047
51048 {&hf_ieee80211_pv1_probe_response_req_access_network_option,
51049 {"Request Access Network Options",
51050 "wlan.s1g.probe_response_option_request_access_network_options",
51051 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested)((0 ? (const struct true_false_string*)0 : ((&tfs_requested_not_requested
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51052
51053 {&hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility,
51054 {"Request S1G Beacon Compatibility",
51055 "wlan.s1g.probe_response_option_request_s1g_beacon_compatibility",
51056 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested)((0 ? (const struct true_false_string*)0 : ((&tfs_requested_not_requested
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51057
51058 {&hf_ieee80211_pv1_probe_response_req_supported_rates,
51059 {"Request Supported Rates",
51060 "wlan.s1g.probe_response_option_request_supported_rates",
51061 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested)((0 ? (const struct true_false_string*)0 : ((&tfs_requested_not_requested
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51062
51063 {&hf_ieee80211_pv1_probe_response_req_s1g_capability,
51064 {"Request S1G Capability",
51065 "wlan.s1g.probe_response_option_request_s1g_capability",
51066 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested)((0 ? (const struct true_false_string*)0 : ((&tfs_requested_not_requested
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51067
51068 {&hf_ieee80211_pv1_probe_response_req_s1g_operation,
51069 {"Request S1G Operation",
51070 "wlan.s1g.probe_response_option_request_s1g_operation",
51071 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested)((0 ? (const struct true_false_string*)0 : ((&tfs_requested_not_requested
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51072
51073 {&hf_ieee80211_pv1_probe_response_req_rsn,
51074 {"Request RSN", "wlan.s1g.probe_response_option_request_rsn",
51075 FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested)((0 ? (const struct true_false_string*)0 : ((&tfs_requested_not_requested
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51076
51077 {&hf_ieee80211_s1g_el_op_max_awake_duration,
51078 {"Max Awake Duration", "wlan.s1g.el_operation.max_awake_duration",
51079 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_max_awake_duration_custom)((const void *) (size_t) (s1g_max_awake_duration_custom)),
51080 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51081
51082 {&hf_ieee80211_s1g_el_op_recovery_time_duration,
51083 {"Recovery Time Duration", "wlan.s1g.el_operation.recovery_time_duration",
51084 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_recovery_time_duration_custom)((const void *) (size_t) (s1g_recovery_time_duration_custom)),
51085 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51086
51087 {&hf_ieee80211_s1g_sectorized_group_id_list,
51088 {"Sectorized Group List", "wlan.s1g.sectorized_group_list",
51089 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51090
51091 {&hf_ieee80211_s1g_header_comp_control,
51092 {"Header Compression Control",
51093 "wlan.s1g.header_compression.header_compression_control",
51094 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51095
51096 {&hf_ieee80211_s1g_header_comp_req_resp,
51097 {"Request/Response",
51098 "wlan.s1g.header_compression.header_compression_control.request_response",
51099 FT_BOOLEAN, 8, TFS(&tfs_response_request)((0 ? (const struct true_false_string*)0 : ((&tfs_response_request
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51100
51101 {&hf_ieee80211_s1g_header_comp_store_a3,
51102 {"Store A3",
51103 "wlan.s1g.header_compression.header_compression_control.store_a3",
51104 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51105
51106 {&hf_ieee80211_s1g_header_comp_store_a4,
51107 {"Store A4",
51108 "wlan.s1g.header_compression.header_compression_control.store_a4",
51109 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51110
51111 {&hf_ieee80211_s1g_header_comp_ccmp_update_present,
51112 {"CCMP Update Present",
51113 "wlan.s1g.header_compression.header_compression_control.ccmp_update_present",
51114 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51115
51116 {&hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported,
51117 {"PV1 Data Type 3 Supported",
51118 "wlan.s1g.header_compression.header_compression_control.pv1_data_type_3_supported",
51119 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51120
51121 {&hf_ieee80211_s1g_header_comp_reserved,
51122 {"Reserved",
51123 "wlan.s1g.header_compression.header_compression_control.reserved",
51124 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51125
51126 {&hf_ieee80211_s1g_header_comp_a3,
51127 {"A3", "wlan.s1g.header_compression.a3",
51128 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51129
51130 {&hf_ieee80211_s1g_header_comp_a4,
51131 {"A4", "wlan.s1g.header_compression.a4",
51132 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51133
51134 {&hf_ieee80211_s1g_header_comp_ccmp_update,
51135 {"CCMP Update", "wlan.s1g.header_compression.ccmp_update",
51136 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51137
51138 {&hf_ieee80211_ampduparam,
51139 {"A-MPDU Parameters", "wlan.ht.ampduparam",
51140 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51141 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51142
51143 {&hf_ieee80211_ampduparam_vs,
51144 {"A-MPDU Parameters (VS)", "wlan.vs.ht.ampduparam",
51145 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51146 "Vendor Specific A-MPDU Parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51147
51148 {&hf_ieee80211_ampduparam_mpdu,
51149 {"Maximum Rx A-MPDU Length Exponent", "wlan.ht.ampduparam.maxlength",
51150 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03,
51151 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51152
51153 {&hf_ieee80211_ampduparam_mpdu_start_spacing,
51154 {"Minimum MPDU Start Spacing", "wlan.ht.ampduparam.mpdu_start_spacing",
51155 FT_UINT8, BASE_HEX, VALS(ampduparam_mpdu_start_spacing_flags)((0 ? (const struct _value_string*)0 : ((ampduparam_mpdu_start_spacing_flags
))))
, 0x1c,
51156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51157
51158 {&hf_ieee80211_ampduparam_reserved,
51159 {"Reserved", "wlan.ht.ampduparam.reserved",
51160 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
51161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51162
51163 {&hf_ieee80211_mcsset,
51164 {"Rx Supported Modulation and Coding Scheme Set", "wlan.ht.mcsset",
51165 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51167
51168 {&hf_ieee80211_mcsset_vs,
51169 {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan.vs.ht.mcsset",
51170 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51171 "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51172
51173 {&hf_ieee80211_mcsset_rx_bitmask,
51174 {"Rx Modulation and Coding Scheme (One bit per modulation)", "wlan.ht.mcsset.rxbitmask",
51175 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51176 "One bit per modulation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51177
51178 {&hf_ieee80211_mcsset_rx_bitmask_0to7,
51179 {"Rx Bitmask Bits 0-7", "wlan.ht.mcsset.rxbitmask.0to7",
51180 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000ff,
51181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51182
51183 {&hf_ieee80211_mcsset_rx_bitmask_8to15,
51184 {"Rx Bitmask Bits 8-15", "wlan.ht.mcsset.rxbitmask.8to15",
51185 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000ff00,
51186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51187
51188 {&hf_ieee80211_mcsset_rx_bitmask_16to23,
51189 {"Rx Bitmask Bits 16-23", "wlan.ht.mcsset.rxbitmask.16to23",
51190 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00ff0000,
51191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51192
51193 {&hf_ieee80211_mcsset_rx_bitmask_24to31,
51194 {"Rx Bitmask Bits 24-31", "wlan.ht.mcsset.rxbitmask.24to31",
51195 FT_UINT32, BASE_HEX, NULL((void*)0), 0xff000000,
51196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51197
51198 {&hf_ieee80211_mcsset_rx_bitmask_32,
51199 {"Rx Bitmask Bit 32", "wlan.ht.mcsset.rxbitmask.32",
51200 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001,
51201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51202
51203 {&hf_ieee80211_mcsset_rx_bitmask_33to38,
51204 {"Rx Bitmask Bits 33-38", "wlan.ht.mcsset.rxbitmask.33to38",
51205 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00007e,
51206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51207
51208 {&hf_ieee80211_mcsset_rx_bitmask_39to52,
51209 {"Rx Bitmask Bits 39-52", "wlan.ht.mcsset.rxbitmask.39to52",
51210 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1fff80,
51211 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51212
51213 {&hf_ieee80211_mcsset_rx_bitmask_53to76,
51214 {"Rx Bitmask Bits 53-76", "wlan.ht.mcsset.rxbitmask.53to76",
51215 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1fffffe0,
51216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51217
51218 {&hf_ieee80211_mcsset_highest_data_rate,
51219 {"Highest Supported Data Rate", "wlan.ht.mcsset.highestdatarate",
51220 FT_UINT16, BASE_HEX, NULL((void*)0), 0x03ff,
51221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51222
51223 {&hf_ieee80211_mcsset_tx_mcs_set_defined,
51224 {"Tx Supported MCS Set", "wlan.ht.mcsset.txsetdefined",
51225 FT_BOOLEAN, 16, TFS(&tfs_defined_not_defined)((0 ? (const struct true_false_string*)0 : ((&tfs_defined_not_defined
))))
, 0x0001,
51226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51227
51228 {&hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal,
51229 {"Tx and Rx MCS Set", "wlan.ht.mcsset.txrxmcsnotequal",
51230 FT_BOOLEAN, 16, TFS(&mcsset_tx_rx_mcs_set_not_equal_flag)((0 ? (const struct true_false_string*)0 : ((&mcsset_tx_rx_mcs_set_not_equal_flag
))))
, 0x0002,
51231 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51232
51233 {&hf_ieee80211_mcsset_tx_max_spatial_streams,
51234 {"Maximum Number of Tx Spatial Streams Supported", "wlan.ht.mcsset.txmaxss",
51235 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000c,
51236 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51237
51238 {&hf_ieee80211_mcsset_tx_unequal_modulation,
51239 {"Unequal Modulation", "wlan.ht.mcsset.txunequalmod",
51240 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0010,
51241 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51242
51243 {&hf_ieee80211_htex_cap,
51244 {"HT Extended Capabilities", "wlan.htex.capabilities",
51245 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51246 "HT Extended Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51247
51248 {&hf_ieee80211_htex_vs_cap,
51249 {"HT Extended Capabilities (VS)", "wlan.vs.htex.capabilities",
51250 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51251 "Vendor Specific HT Extended Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51252
51253 {&hf_ieee80211_htex_reserved_b0_b7,
51254 {"Reserved", "wlan.htex.capabilities.reserved_b0_b7",
51255 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00ff,
51256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51257
51258 {&hf_ieee80211_htex_mcs,
51259 {"MCS Feedback capability", "wlan.htex.capabilities.mcs",
51260 FT_UINT16, BASE_HEX, VALS(htex_mcs_flags)((0 ? (const struct _value_string*)0 : ((htex_mcs_flags)))), 0x0300,
51261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51262
51263 {&hf_ieee80211_htex_htc_support,
51264 {"HT variant HT Control field", "wlan.htex.capabilities.htc",
51265 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0400,
51266 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51267
51268 {&hf_ieee80211_htex_rd_responder,
51269 {"Reverse Direction Responder", "wlan.htex.capabilities.rdresponder",
51270 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800,
51271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51272
51273 {&hf_ieee80211_htex_reserved_b12_b15,
51274 {"Reserved", "wlan.htex.capabilities.reserved_b12_b15",
51275 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
51276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51277
51278 {&hf_ieee80211_txbf,
51279 {"Transmit Beam Forming (TxBF) Capabilities", "wlan.txbf",
51280 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51282
51283 {&hf_ieee80211_txbf_vs,
51284 {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan.vs.txbf",
51285 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51286 "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51287
51288 {&hf_ieee80211_txbf_cap,
51289 {"Implicit Transmit Beamforming Receiving", "wlan.txbf.txbf",
51290 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000001,
51291 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51292
51293 {&hf_ieee80211_txbf_rcv_ssc,
51294 {"Receive Staggered Sounding", "wlan.txbf.rxss",
51295 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000002,
51296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51297
51298 {&hf_ieee80211_txbf_tx_ssc,
51299 {"Transmit Staggered Sounding", "wlan.txbf.txss",
51300 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000004,
51301 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51302
51303 {&hf_ieee80211_txbf_rcv_ndp,
51304 {"Receive Null Data packet (NDP)", "wlan.txbf.rxndp",
51305 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000008,
51306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51307
51308 {&hf_ieee80211_txbf_tx_ndp,
51309 {"Transmit Null Data packet (NDP)", "wlan.txbf.txndp",
51310 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000010,
51311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51312
51313 {&hf_ieee80211_txbf_impl_txbf,
51314 {"Implicit Transmit Beamforming", "wlan.txbf.impltxbf",
51315 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000020,
51316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51317
51318 {&hf_ieee80211_txbf_calib,
51319 {"Calibration", "wlan.txbf.calibration",
51320 FT_UINT32, BASE_HEX, VALS(txbf_calib_flag)((0 ? (const struct _value_string*)0 : ((txbf_calib_flag)))), 0x000000c0,
51321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51322
51323 {&hf_ieee80211_txbf_expl_csi,
51324 {"Explicit CSI Transmit Beamforming", "wlan.txbf.csi",
51325 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000100,
51326 "Station can apply TxBF using CSI explicit feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51327
51328 {&hf_ieee80211_txbf_expl_uncomp_fm,
51329 {"Explicit Noncompressed Steering", "wlan.txbf.fm.uncompressed.tbf",
51330 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000200,
51331 "Station can apply TxBF using uncompressed beamforming feedback matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51332
51333 {&hf_ieee80211_txbf_expl_comp_fm,
51334 {"Explicit Compressed Steering", "wlan.txbf.fm.compressed.tbf",
51335 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000400,
51336 "Station can apply TxBF using compressed beamforming feedback matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51337
51338 {&hf_ieee80211_txbf_expl_bf_csi,
51339 {"Explicit Transmit Beamforming CSI Feedback", "wlan.txbf.rcsi",
51340 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00001800,
51341 "Receiver can return explicit CSI feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51342
51343 {&hf_ieee80211_txbf_expl_uncomp_fm_feed,
51344 {"Explicit Noncompressed Beamforming Feedback", "wlan.txbf.fm.uncompressed.rbf",
51345 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00006000,
51346 "Receiver can return explicit uncompressed Beamforming Feedback Matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51347
51348 {&hf_ieee80211_txbf_expl_comp_fm_feed,
51349 {"Explicit Noncompressed Beamforming Feedback", "wlan.txbf.fm.compressed.bf",
51350 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00018000,
51351 "Station can compress and use compressed Beamforming Feedback Matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51352
51353 {&hf_ieee80211_txbf_min_group,
51354 {"Minimal Grouping", "wlan.txbf.mingroup",
51355 FT_UINT32, BASE_HEX, VALS(txbf_min_group_flags)((0 ? (const struct _value_string*)0 : ((txbf_min_group_flags
))))
, 0x00060000,
51356 "Minimal grouping used for explicit feedback reports", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51357
51358 {&hf_ieee80211_vht_cap,
51359 {"VHT Capabilities Info", "wlan.vht.capabilities",
51360 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51361 "VHT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51362
51363 {&hf_ieee80211_vht_max_mpdu_length,
51364 {"Maximum MPDU Length", "wlan.vht.capabilities.maxmpdulength",
51365 FT_UINT32, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x00000003,
51366 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51367
51368 {&hf_ieee80211_vht_supported_chan_width_set,
51369 {"Supported Channel Width Set", "wlan.vht.capabilities.supportedchanwidthset",
51370 FT_UINT32, BASE_HEX, VALS(vht_supported_chan_width_set_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_chan_width_set_flag
))))
, 0x0000000c,
51371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51372
51373 {&hf_ieee80211_vht_rx_ldpc,
51374 {"Rx LDPC", "wlan.vht.capabilities.rxldpc",
51375 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000010,
51376 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51377
51378 {&hf_ieee80211_vht_short_gi_for_80,
51379 {"Short GI for 80MHz/TVHT_MODE_4C", "wlan.vht.capabilities.short80",
51380 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000020,
51381 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51382
51383 {&hf_ieee80211_vht_short_gi_for_160,
51384 {"Short GI for 160MHz and 80+80MHz", "wlan.vht.capabilities.short160",
51385 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000040,
51386 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51387
51388 {&hf_ieee80211_vht_tx_stbc,
51389 {"Tx STBC", "wlan.vht.capabilities.txstbc",
51390 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000080,
51391 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51392
51393 {&hf_ieee80211_vht_rx_stbc,
51394 {"Rx STBC", "wlan.vht.capabilities.rxstbc",
51395 FT_UINT32, BASE_HEX, VALS(vht_rx_stbc_flag)((0 ? (const struct _value_string*)0 : ((vht_rx_stbc_flag)))), 0x00000700,
51396 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51397
51398 {&hf_ieee80211_vht_su_beamformer_cap,
51399 {"SU Beamformer Capable", "wlan.vht.capabilities.subeamformer",
51400 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000800,
51401 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51402
51403 {&hf_ieee80211_vht_su_beamformee_cap,
51404 {"SU Beamformee Capable", "wlan.vht.capabilities.subeamformee",
51405 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00001000,
51406 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51407
51408 {&hf_ieee80211_vht_beamformer_antennas,
51409 {"Beamformee STS Capability", "wlan.vht.capabilities.beamformee_sts_cap",
51410 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0x0000e000,
51411 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51412
51413 {&hf_ieee80211_vht_sounding_dimensions,
51414 {"Number of Sounding Dimensions", "wlan.vht.capabilities.soundingdimensions",
51415 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0x00070000,
51416 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51417
51418 {&hf_ieee80211_vht_mu_beamformer_cap,
51419 {"MU Beamformer Capable", "wlan.vht.capabilities.mubeamformer",
51420 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00080000,
51421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51422
51423 {&hf_ieee80211_vht_mu_beamformee_cap,
51424 {"MU Beamformee Capable", "wlan.vht.capabilities.mubeamformee",
51425 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00100000,
51426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51427
51428 {&hf_ieee80211_vht_txop_ps,
51429 {"TXOP PS", "wlan.vht.capabilities.vhttxopps",
51430 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00200000,
51431 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51432
51433 {&hf_ieee80211_vht_var_htc_field,
51434 {"+HTC-VHT Capable", "wlan.vht.capabilities.vhthtc",
51435 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00400000,
51436 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51437
51438 {&hf_ieee80211_vht_max_ampdu,
51439 {"Max A-MPDU Length Exponent", "wlan.vht.capabilities.maxampdu",
51440 FT_UINT32, BASE_HEX, VALS(vht_max_ampdu_flag)((0 ? (const struct _value_string*)0 : ((vht_max_ampdu_flag))
))
, 0x03800000,
51441 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51442
51443 {&hf_ieee80211_vht_link_adaptation_cap,
51444 {"VHT Link Adaptation", "wlan.vht.capabilities.linkadapt",
51445 FT_UINT32, BASE_HEX, VALS(vht_link_adapt_flag)((0 ? (const struct _value_string*)0 : ((vht_link_adapt_flag)
)))
, 0x0c000000,
51446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51447
51448 {&hf_ieee80211_vht_rx_pattern,
51449 {"Rx Antenna Pattern Consistency", "wlan.vht.capabilities.rxpatconsist",
51450 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10000000,
51451 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51452
51453 {&hf_ieee80211_vht_tx_pattern,
51454 {"Tx Antenna Pattern Consistency", "wlan.vht.capabilities.txpatconsist",
51455 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20000000,
51456 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51457
51458 {&hf_ieee80211_vht_ext_nss_bw_support,
51459 {"Extended NSS BW Support", "wlan.vht.capabilities.ext_nss_bw_support",
51460 FT_UINT32, BASE_HEX, NULL((void*)0), 0xc0000000,
51461 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51462
51463 {&hf_ieee80211_vht_mcsset,
51464 {"VHT Supported MCS Set", "wlan.vht.mcsset",
51465 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51466 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51467
51468 {&hf_ieee80211_vht_mcsset_rx_mcs_map,
51469 {"Rx MCS Map", "wlan.vht.mcsset.rxmcsmap",
51470 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51471 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51472
51473 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
51474 {"Rx 1 SS", "wlan.vht.mcsset.rxmcsmap.ss1",
51475 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51476 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51477
51478 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
51479 {"Rx 2 SS", "wlan.vht.mcsset.rxmcsmap.ss2",
51480 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51482
51483 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
51484 {"Rx 3 SS", "wlan.vht.mcsset.rxmcsmap.ss3",
51485 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51486 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51487
51488 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
51489 {"Rx 4 SS", "wlan.vht.mcsset.rxmcsmap.ss4",
51490 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51492
51493 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
51494 {"Rx 5 SS", "wlan.vht.mcsset.rxmcsmap.ss5",
51495 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51497
51498 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
51499 {"Rx 6 SS", "wlan.vht.mcsset.rxmcsmap.ss6",
51500 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51501 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51502
51503 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
51504 {"Rx 7 SS", "wlan.vht.mcsset.rxmcsmap.ss7",
51505 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51506 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51507
51508 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
51509 {"Rx 8 SS", "wlan.vht.mcsset.rxmcsmap.ss8",
51510 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51511 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51512
51513 {&hf_ieee80211_vht_mcsset_max_nsts_total,
51514 {"MaX NSTS Total", "wlan.vht.mcsset.max_nsts_total",
51515 FT_UINT16, BASE_DEC, NULL((void*)0), 0xe000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51516
51517 {&hf_ieee80211_vht_mcsset_rx_highest_long_gi,
51518 {"Rx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.rxhighestlonggirate",
51519 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1fff,
51520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51521
51522 {&hf_ieee80211_vht_mcsset_tx_mcs_map,
51523 {"Tx MCS Map", "wlan.vht.mcsset.txmcsmap",
51524 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51526
51527 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
51528 {"Tx 1 SS", "wlan.vht.mcsset.txmcsmap.ss1",
51529 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51531
51532 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
51533 {"Tx 2 SS", "wlan.vht.mcsset.txmcsmap.ss2",
51534 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51536
51537 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
51538 {"Tx 3 SS", "wlan.vht.mcsset.txmcsmap.ss3",
51539 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51541
51542 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
51543 {"Tx 4 SS", "wlan.vht.mcsset.txmcsmap.ss4",
51544 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51546
51547 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
51548 {"Tx 5 SS", "wlan.vht.mcsset.txmcsmap.ss5",
51549 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51551
51552 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
51553 {"Tx 6 SS", "wlan.vht.mcsset.txmcsmap.ss6",
51554 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51556
51557 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
51558 {"Tx 7 SS", "wlan.vht.mcsset.txmcsmap.ss7",
51559 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51561
51562 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
51563 {"Tx 8 SS", "wlan.vht.mcsset.txmcsmap.ss8",
51564 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51566
51567 {&hf_ieee80211_vht_mcsset_tx_highest_long_gi,
51568 {"Tx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.txhighestlonggirate",
51569 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1fff,
51570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51571
51572 {&hf_ieee80211_vht_mcsset_extended_nss_bw_capable,
51573 {"VHT Extended NSS BW Capable", "wlan.vht.mcsset.vht_ext_nss_bw_capable",
51574 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51575
51576 {&hf_ieee80211_vht_mcsset_reserved,
51577 {"Reserved", "wlan.vht.mcsset.reserved",
51578 FT_UINT16, BASE_HEX, NULL((void*)0), 0xc000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51579
51580 {&hf_ieee80211_vht_op,
51581 {"VHT Operation Info", "wlan.vht.op",
51582 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51583 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51584
51585 {&hf_ieee80211_vht_op_channel_width,
51586 {"Channel Width", "wlan.vht.op.channelwidth",
51587 FT_UINT8, BASE_DEC, VALS(channel_width_vals)((0 ? (const struct _value_string*)0 : ((channel_width_vals))
))
, 0,
51588 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51589
51590 {&hf_ieee80211_vht_op_channel_center0,
51591 {"Channel Center Segment 0", "wlan.vht.op.channelcenter0",
51592 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51593 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51594
51595 {&hf_ieee80211_vht_op_channel_center1,
51596 {"Channel Center Segment 1", "wlan.vht.op.channelcenter1",
51597 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51598 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51599
51600 {&hf_ieee80211_vht_op_basic_mcs_map,
51601 {"Basic MCS Map", "wlan.vht.op.basicmcsmap",
51602 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51603 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51604
51605 {&hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
51606 {"Basic 1 SS", "wlan.vht.op.basicmcsmap.ss1",
51607 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51608 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51609
51610 {&hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
51611 {"Basic 2 SS", "wlan.vht.op.basicmcsmap.ss2",
51612 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51613 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51614
51615 {&hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
51616 {"Basic 3 SS", "wlan.vht.op.basicmcsmap.ss3",
51617 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51618 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51619
51620 {&hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
51621 {"Basic 4 SS", "wlan.vht.op.basicmcsmap.ss4",
51622 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51623 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51624
51625 {&hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
51626 {"Basic 5 SS", "wlan.vht.op.basicmcsmap.ss5",
51627 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51628 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51629
51630 {&hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
51631 {"Basic 6 SS", "wlan.vht.op.basicmcsmap.ss6",
51632 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51633 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51634
51635 {&hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
51636 {"Basic 7 SS", "wlan.vht.op.basicmcsmap.ss7",
51637 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51638 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51639
51640 {&hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
51641 {"Basic 8 SS", "wlan.vht.op.basicmcsmap.ss8",
51642 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51643 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51644
51645 {&hf_ieee80211_vht_tpe_pwr_info,
51646 {"Tx Pwr Info", "wlan.vht.tpe.pwr_info",
51647 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51648 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51649
51650 {&hf_ieee80211_vht_tpe_pwr_info_count,
51651 {"Max Tx Pwr Count", "wlan.vht.tpe.pwr_info.count",
51652 FT_UINT8, BASE_DEC, NULL((void*)0) , 0x07,
51653 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51654
51655 {&hf_ieee80211_vht_tpe_pwr_info_unit,
51656 {"Max Tx Pwr Unit Interpretation", "wlan.vht.tpe.pwr_info.unit",
51657 FT_UINT8, BASE_DEC, VALS(vht_tpe_pwr_units)((0 ? (const struct _value_string*)0 : ((vht_tpe_pwr_units)))
)
, 0x38,
51658 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51659
51660 {&hf_ieee80211_vht_tpe_pwr_info_category,
51661 {"Max Tx Pwr Category", "wlan.vht.tpe.pwr_info.category",
51662 FT_UINT8, BASE_DEC, NULL((void*)0) , 0xC0,
51663 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51664
51665 {&hf_ieee80211_vht_tpe_pwr_constr_20,
51666 {"Local Max Tx Pwr Constraint 20MHz", "wlan.vht.tpe.pwr_constr_20",
51667 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51668 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51669
51670 {&hf_ieee80211_vht_tpe_pwr_constr_40,
51671 {"Local Max Tx Pwr Constraint 40MHz", "wlan.vht.tpe.pwr_constr_40",
51672 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51674
51675 {&hf_ieee80211_vht_tpe_pwr_constr_80,
51676 {"Local Max Tx Pwr Constraint 80MHz", "wlan.vht.tpe.pwr_constr_80",
51677 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51678 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51679
51680 {&hf_ieee80211_vht_tpe_pwr_constr_160,
51681 {"Local Max Tx Pwr Constraint 160MHz/80+80 MHz", "wlan.vht.tpe.pwr_constr_160",
51682 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51684
51685 {&hf_ieee80211_vht_tpe_pwr_constr_320,
51686 {"Local Max Tx Pwr Constraint 320 MHz", "wlan.vht.tpe.pwr_constr_320",
51687 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
51688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51689
51690 {&hf_ieee80211_vht_tpe_any_bw_psd,
51691 {"Max Tx Power Spectral Density", "wlan.vht.tpe.max_tx_psd",
51692 FT_INT8, BASE_CUSTOM, CF_FUNC(tpe_psd_custom)((const void *) (size_t) (tpe_psd_custom)), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51693
51694 {&hf_ieee80211_vht_tpe_psd,
51695 {"Power Spectral Density", "wlan.vht.tpe.psd",
51696 FT_INT8, BASE_CUSTOM, CF_FUNC(tpe_psd_custom)((const void *) (size_t) (tpe_psd_custom)), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51697
51698 {&hf_ieee80211_vht_tpe_ext_count,
51699 {"Extension Count", "wlan.vht.tpe.extension_count",
51700 FT_UINT8, BASE_DEC, NULL((void*)0) , 0x0f,
51701 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51702
51703 {&hf_ieee80211_vht_tpe_ext_reserved,
51704 {"Reserved", "wlan.vht.tpe.extension_reserved",
51705 FT_UINT8, BASE_HEX, NULL((void*)0) , 0xf0,
51706 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51707
51708 {&hf_ieee80211_txbf_csi_num_bf_ant,
51709 {"CSI Number of Beamformer Antennas", "wlan.txbf.csinumant",
51710 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x00180000,
51711 "Max antennae station can support when CSI feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51712
51713 {&hf_ieee80211_txbf_uncomp_sm_bf_ant,
51714 {"Noncompressed Steering Number of Beamformer Antennas", "wlan.txbf.fm.uncompressed.maxant",
51715 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x00600000,
51716 "Max antennae station can support when uncompressed Beamforming feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51717
51718 {&hf_ieee80211_txbf_comp_sm_bf_ant,
51719 {"Compressed Steering Number of Beamformer Antennas", "wlan.txbf.fm.compressed.maxant",
51720 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x01800000,
51721 "Max antennae station can support when compressed Beamforming feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51722
51723 {&hf_ieee80211_txbf_csi_max_rows_bf,
51724 {"CSI Max Number of Rows Beamformer", "wlan.txbf.csi.maxrows",
51725 FT_UINT32, BASE_HEX, VALS(txbf_csi_max_rows_bf_flags)((0 ? (const struct _value_string*)0 : ((txbf_csi_max_rows_bf_flags
))))
, 0x06000000,
51726 "Maximum number of rows of CSI explicit feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51727
51728 {&hf_ieee80211_txbf_chan_est,
51729 {"Channel Estimation", "wlan.txbf.channelest",
51730 FT_UINT32, BASE_HEX, VALS(txbf_chan_est_flags)((0 ? (const struct _value_string*)0 : ((txbf_chan_est_flags)
)))
, 0x18000000,
51731 "Maximum number of space time streams for which channel dimensions can be simultaneously estimated", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51732
51733 {&hf_ieee80211_txbf_resrv,
51734 {"Reserved", "wlan.txbf.reserved",
51735 FT_UINT32, BASE_HEX, NULL((void*)0), 0xe0000000,
51736 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51737
51738 {&hf_ieee80211_hta_cc,
51739 {"HT Control Channel", "wlan.hta.control_channel",
51740 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51741 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51742
51743 {&hf_ieee80211_hta_cap1,
51744 {"HT Additional Capabilities", "wlan.hta.capabilities",
51745 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51746 "HT Additional Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51747
51748 {&hf_ieee80211_hta_cap2,
51749 {"HT Additional Capabilities", "wlan.hta.capabilities",
51750 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51751 "HT Additional Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51752
51753 {&hf_ieee80211_hta_ext_chan_offset,
51754 {"Extension Channel Offset", "wlan.hta.capabilities.ext_chan_offset",
51755 FT_UINT16, BASE_HEX, VALS(hta_ext_chan_offset_flag)((0 ? (const struct _value_string*)0 : ((hta_ext_chan_offset_flag
))))
, 0x0003,
51756 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51757
51758 {&hf_ieee80211_hta_rec_tx_width,
51759 {"Recommended Tx Channel Width", "wlan.hta.capabilities.rec_tx_width",
51760 FT_BOOLEAN, 16, TFS(&hta_rec_tx_width_flag)((0 ? (const struct true_false_string*)0 : ((&hta_rec_tx_width_flag
))))
, 0x0004,
51761 "Recommended Transmit Channel Width", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51762
51763 {&hf_ieee80211_hta_rifs_mode,
51764 {"Reduced Interframe Spacing (RIFS) Mode", "wlan.hta.capabilities.rifs_mode",
51765 FT_BOOLEAN, 16, TFS(&hta_rifs_mode_flag)((0 ? (const struct true_false_string*)0 : ((&hta_rifs_mode_flag
))))
, 0x0008,
51766 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51767
51768 {&hf_ieee80211_hta_controlled_access,
51769 {"Controlled Access Only", "wlan.hta.capabilities.controlled_access",
51770 FT_BOOLEAN, 16, TFS(&hta_controlled_access_flag)((0 ? (const struct true_false_string*)0 : ((&hta_controlled_access_flag
))))
, 0x0010,
51771 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51772
51773 {&hf_ieee80211_hta_service_interval,
51774 {"Service Interval Granularity", "wlan.hta.capabilities.service_interval",
51775 FT_UINT16, BASE_HEX, VALS(hta_service_interval_flag)((0 ? (const struct _value_string*)0 : ((hta_service_interval_flag
))))
, 0x00E0,
51776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51777
51778 {&hf_ieee80211_hta_operating_mode,
51779 {"Operating Mode", "wlan.hta.capabilities.operating_mode",
51780 FT_UINT16, BASE_HEX, VALS(hta_operating_mode_flag)((0 ? (const struct _value_string*)0 : ((hta_operating_mode_flag
))))
, 0x0003,
51781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51782
51783 {&hf_ieee80211_hta_non_gf_devices,
51784 {"Non Greenfield (GF) devices Present", "wlan.hta.capabilities.non_gf_devices",
51785 FT_BOOLEAN, 16, TFS(&hta_non_gf_devices_flag)((0 ? (const struct true_false_string*)0 : ((&hta_non_gf_devices_flag
))))
, 0x0004,
51786 "on Greenfield (GF) devices Present", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51787
51788 {&hf_ieee80211_hta_basic_stbc_mcs,
51789 {"Basic STB Modulation and Coding Scheme (MCS)", "wlan.hta.capabilities.basic_stbc_mcs",
51790 FT_UINT16, BASE_HEX, NULL((void*)0) , 0x007f,
51791 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51792
51793 {&hf_ieee80211_hta_dual_stbc_protection,
51794 {"Dual Clear To Send (CTS) Protection", "wlan.hta.capabilities.dual_stbc_protection",
51795 FT_BOOLEAN, 16, TFS(&hta_dual_stbc_protection_flag)((0 ? (const struct true_false_string*)0 : ((&hta_dual_stbc_protection_flag
))))
, 0x0080,
51796 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51797
51798 {&hf_ieee80211_hta_secondary_beacon,
51799 {"Secondary Beacon", "wlan.hta.capabilities.secondary_beacon",
51800 FT_BOOLEAN, 16, TFS(&hta_secondary_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&hta_secondary_beacon_flag
))))
, 0x0100,
51801 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51802
51803 {&hf_ieee80211_hta_lsig_txop_protection,
51804 {"L-SIG TXOP Protection Support", "wlan.hta.capabilities.lsig_txop_protection",
51805 FT_BOOLEAN, 16, TFS(&hta_lsig_txop_protection_flag)((0 ? (const struct true_false_string*)0 : ((&hta_lsig_txop_protection_flag
))))
, 0x0200,
51806 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51807
51808 {&hf_ieee80211_hta_pco_active,
51809 {"Phased Coexistence Operation (PCO) Active", "wlan.hta.capabilities.pco_active",
51810 FT_BOOLEAN, 16, TFS(&hta_pco_active_flag)((0 ? (const struct true_false_string*)0 : ((&hta_pco_active_flag
))))
, 0x0400,
51811 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51812
51813 {&hf_ieee80211_hta_pco_phase,
51814 {"Phased Coexistence Operation (PCO) Phase", "wlan.hta.capabilities.pco_phase",
51815 FT_BOOLEAN, 16, TFS(&hta_pco_phase_flag)((0 ? (const struct true_false_string*)0 : ((&hta_pco_phase_flag
))))
, 0x0800,
51816 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51817
51818 {&hf_ieee80211_antsel,
51819 {"Antenna Selection (ASEL) Capabilities", "wlan.asel",
51820 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51821 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51822
51823 {&hf_ieee80211_antsel_vs,
51824 {"Antenna Selection (ASEL) Capabilities (VS)", "wlan.vs.asel",
51825 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51826 "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51827
51828 {&hf_ieee80211_antsel_b0,
51829 {"Antenna Selection Capable", "wlan.asel.capable",
51830 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
51831 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51832
51833 {&hf_ieee80211_antsel_b1,
51834 {"Explicit CSI Feedback Based Tx ASEL", "wlan.asel.txcsi",
51835 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
51836 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51837
51838 {&hf_ieee80211_antsel_b2,
51839 {"Antenna Indices Feedback Based Tx ASEL", "wlan.asel.txif",
51840 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
51841 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51842
51843 {&hf_ieee80211_antsel_b3,
51844 {"Explicit CSI Feedback", "wlan.asel.csi",
51845 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
51846 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51847
51848 {&hf_ieee80211_antsel_b4,
51849 {"Antenna Indices Feedback", "wlan.asel.if",
51850 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
51851 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51852
51853 {&hf_ieee80211_antsel_b5,
51854 {"Rx ASEL", "wlan.asel.rx",
51855 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
51856 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51857
51858 {&hf_ieee80211_antsel_b6,
51859 {"Tx Sounding PPDUs", "wlan.asel.sppdu",
51860 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
51861 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51862
51863 {&hf_ieee80211_antsel_b7,
51864 {"Reserved", "wlan.asel.reserved",
51865 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
51866 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51867
51868 {&hf_ieee80211_ht_operation_info_delimiter1,
51869 {"HT Operation Information Subset (1 of 3)", "wlan.ht.info.delim1",
51870 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51871 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51872
51873 {&hf_ieee80211_ht_operation_primary_channel,
51874 {"Primary Channel", "wlan.ht.info.primarychannel",
51875 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51876 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51877
51878 {&hf_ieee80211_ht_operation_info_secondary_channel_offset,
51879 {"Secondary channel offset", "wlan.ht.info.secchanoffset",
51880 FT_UINT8, BASE_HEX, VALS(ht_info_secondary_channel_offset_flags)((0 ? (const struct _value_string*)0 : ((ht_info_secondary_channel_offset_flags
))))
, 0x03,
51881 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51882
51883 {&hf_ieee80211_ht_operation_info_sta_channel_width,
51884 {"Supported channel width", "wlan.ht.info.chanwidth",
51885 FT_BOOLEAN, 8, TFS(&ht_info_channel_sta_width_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_channel_sta_width_flag
))))
, 0x04,
51886 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51887
51888 {&hf_ieee80211_ht_operation_info_rifs_mode,
51889 {"Reduced Interframe Spacing (RIFS)", "wlan.ht.info.rifs",
51890 FT_BOOLEAN, 8, TFS(&ht_info_rifs_mode_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_rifs_mode_flag
))))
, 0x08,
51891 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51892
51893 {&hf_ieee80211_ht_operation_info_reserved_b4_b7,
51894 {"Reserved", "wlan.ht.info.reserved_b4_b7",
51895 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51896
51897 {&hf_ieee80211_ht_operation_info_delimiter2,
51898 {"HT Operation Information Subset (2 of 3)", "wlan.ht.info.delim2",
51899 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51901
51902 {&hf_ieee80211_ht_operation_info_protection,
51903 {"HT Protection", "wlan.ht.info.ht_protection",
51904 FT_UINT16, BASE_HEX, VALS(ht_info_operating_protection_mode_flags)((0 ? (const struct _value_string*)0 : ((ht_info_operating_protection_mode_flags
))))
, 0x0003,
51905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51906
51907 {&hf_ieee80211_ht_operation_info_non_greenfield_sta_present,
51908 {"Non-greenfield STAs present", "wlan.ht.info.greenfield",
51909 FT_BOOLEAN, 16, TFS(&ht_info_non_greenfield_sta_present_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_non_greenfield_sta_present_flag
))))
, 0x0004,
51910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51911
51912 {&hf_ieee80211_ht_operation_info_reserved_b11,
51913 {"Reserved", "wlan.ht.info.reserved_b11",
51914 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51915
51916 {&hf_ieee80211_ht_operation_info_obss_non_ht_stas_present,
51917 {"OBSS non-HT STAs present", "wlan.ht.info.obssnonht",
51918 FT_BOOLEAN, 16, TFS(&ht_info_obss_non_ht_stas_present_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_obss_non_ht_stas_present_flag
))))
, 0x0010,
51919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51920
51921 {&hf_ieee80211_ht_operation_info_channel_center_freq_seg_2,
51922 {"Channel Center Frequency Segment 2", "wlan.ht.info.chan_center_freq_seg_2",
51923 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1fe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51924
51925 {&hf_ieee80211_ht_operation_info_reserved_b21_b23,
51926 {"Reserved", "wlan.ht.info.reserved_b21_b23",
51927 FT_UINT16, BASE_HEX, NULL((void*)0), 0xe000,
51928 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51929
51930 {&hf_ieee80211_ht_operation_info_delimiter3,
51931 {"HT Operation Information Subset (3 of 3)", "wlan.ht.info.delim3",
51932 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51933 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51934
51935 {&hf_ieee80211_ht_operation_info_reserved_b24_b29,
51936 {"Reserved", "wlan.ht.info.reserved_b24_b29",
51937 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51938
51939 {&hf_ieee80211_ht_operation_info_dual_beacon,
51940 {"Dual beacon", "wlan.ht.info.dualbeacon",
51941 FT_BOOLEAN, 16, TFS(&ht_info_dual_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_dual_beacon_flag
))))
, 0x0040,
51942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51943
51944 {&hf_ieee80211_ht_operation_info_dual_cts_protection,
51945 {"Dual Clear To Send (CTS) protection", "wlan.ht.info.dualcts",
51946 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0080,
51947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51948
51949 {&hf_ieee80211_ht_operation_info_stbc_beacon,
51950 {"STBC Beacon", "wlan.ht.info.stbcbeacon",
51951 FT_BOOLEAN, 16, TFS(&ht_info_stbc_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_stbc_beacon_flag
))))
, 0x0100,
51952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51953
51954 {&hf_ieee80211_ht_operation_info_reserved_b33_b39,
51955 {"Reserved", "wlan.ht.info.reserved_b33_b39",
51956 FT_UINT16, BASE_HEX, NULL((void*)0), 0xfe00,
51957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51958
51959 {&hf_ieee80211_ht_operation_mcsset_reserved,
51960 {"Basic HT-MCS Set: Reserved", "wlan.ht.info.mcsset_reserved",
51961 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
51962 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51963
51964 {&hf_ieee80211_tag_ap_channel_report_operating_class,
51965 {"Operating Class", "wlan.ap_channel_report.operating_class",
51966 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51968
51969 {&hf_ieee80211_tag_ap_channel_report_channel_list,
51970 {"Channel List", "wlan.ap_channel_report.channel_list",
51971 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51973
51974 {&hf_ieee80211_tag_secondary_channel_offset,
51975 {"Secondary Channel Offset", "wlan.secchanoffset",
51976 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_secondary_channel_offset_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_secondary_channel_offset_flags
))))
, 0,
51977 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51978
51979 {&hf_ieee80211_tag_bss_ap_avg_access_delay,
51980 {"AP Average Access Delay", "wlan.bss_ap_avg_access_delay",
51981 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
51982 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51983
51984 {&hf_ieee80211_tag_antenna_id,
51985 {"Antenna ID", "wlan.antenna.id",
51986 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
51987 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51988
51989 {&hf_ieee80211_tag_rsni,
51990 {"RSNI", "wlan.rsni",
51991 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom)((const void *) (size_t) (rsni_base_custom)), 0x0,
51992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51993
51994 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
51995 {"Available Admission Capacity Bitmask", "wlan.bss_avb_adm_cap.bitmask",
51996 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51998
51999 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
52000 {"UP0 (bit0)", "wlan.bss_avb_adm_cap.bitmask.up0",
52001 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP00x0001,
52002 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52003
52004 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
52005 {"UP1 (bit1)", "wlan.bss_avb_adm_cap.bitmask.up1",
52006 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP10x0002,
52007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52008
52009 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
52010 {"UP2 (bit2)", "wlan.bss_avb_adm_cap.bitmask.up2",
52011 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP20x0004,
52012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52013
52014 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
52015 {"UP3 (bit3)", "wlan.bss_avb_adm_cap.bitmask.up3",
52016 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP30x0008,
52017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52018
52019 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
52020 {"UP4 (bit4)", "wlan.bss_avb_adm_cap.bitmask.up4",
52021 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP40x0010,
52022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52023
52024 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
52025 {"UP5 (bit5)", "wlan.bss_avb_adm_cap.bitmask.up5",
52026 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP50x0020,
52027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52028
52029 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
52030 {"UP6 (bit6)", "wlan.bss_avb_adm_cap.bitmask.up6",
52031 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP60x0040,
52032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52033
52034 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
52035 {"UP7 (bit7)", "wlan.bss_avb_adm_cap.bitmask.up7",
52036 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP70x0080,
52037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52038
52039 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
52040 {"AC0 (bit8)", "wlan.bss_avb_adm_cap.bitmask.ac0",
52041 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC00x0100,
52042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52043
52044 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
52045 {"AC1 (bit9)", "wlan.bss_avb_adm_cap.bitmask.AC1",
52046 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC10x0200,
52047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52048
52049 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
52050 {"AC2 (bit10)", "wlan.bss_avb_adm_cap.bitmask.ac2",
52051 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC20x0400,
52052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52053
52054 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
52055 {"AC3 (bit11)", "wlan.bss_avb_adm_cap.bitmask.ac3",
52056 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC30x0800,
52057 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52058
52059 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
52060 {"Reserved", "wlan.bss_avb_adm_cap.bitmask.rsv",
52061 FT_UINT16, BASE_HEX, NULL((void*)0), BSS_BITMASK_RSV0xF000,
52062 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52063
52064 {&hf_ieee80211_tag_bss_avb_adm_cap_up0,
52065 {"UP0", "wlan.bss_avb_adm_cap.up0",
52066 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52067 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52068
52069 {&hf_ieee80211_tag_bss_avb_adm_cap_up1,
52070 {"UP1", "wlan.bss_avb_adm_cap.up1",
52071 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52072 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52073
52074 {&hf_ieee80211_tag_bss_avb_adm_cap_up2,
52075 {"UP2", "wlan.bss_avb_adm_cap.up2",
52076 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52077 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52078
52079 {&hf_ieee80211_tag_bss_avb_adm_cap_up3,
52080 {"UP3", "wlan.bss_avb_adm_cap.up3",
52081 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52082 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52083
52084 {&hf_ieee80211_tag_bss_avb_adm_cap_up4,
52085 {"UP4", "wlan.bss_avb_adm_cap.up4",
52086 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52087 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52088
52089 {&hf_ieee80211_tag_bss_avb_adm_cap_up5,
52090 {"UP5", "wlan.bss_avb_adm_cap.up5",
52091 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52092 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52093
52094 {&hf_ieee80211_tag_bss_avb_adm_cap_up6,
52095 {"UP6", "wlan.bss_avb_adm_cap.up6",
52096 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52097 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52098
52099 {&hf_ieee80211_tag_bss_avb_adm_cap_up7,
52100 {"UP7", "wlan.bss_avb_adm_cap.up7",
52101 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52103
52104 {&hf_ieee80211_tag_bss_avb_adm_cap_ac0,
52105 {"AC0", "wlan.bss_avb_adm_cap.ac0",
52106 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52107 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52108
52109 {&hf_ieee80211_tag_bss_avb_adm_cap_ac1,
52110 {"AC1", "wlan.bss_avb_adm_cap.ac1",
52111 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52112 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52113
52114 {&hf_ieee80211_tag_bss_avb_adm_cap_ac2,
52115 {"AC2", "wlan.bss_avb_adm_cap.ac2",
52116 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52117 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52118
52119 {&hf_ieee80211_tag_bss_avb_adm_cap_ac3,
52120 {"AC3", "wlan.bss_avb_adm_cap.ac3",
52121 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52122 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52123
52124 {&hf_ieee80211_tag_bss_avg_ac_access_delay_be,
52125 {"AC Average Access Delay for Best Effort", "wlan.bss_avg_ac_access_delay.be",
52126 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52127 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52128
52129 {&hf_ieee80211_tag_bss_avg_ac_access_delay_bk,
52130 {"AC Average Access Delay for Best Background", "wlan.bss_avg_ac_access_delay.bk",
52131 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52132 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52133
52134 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vi,
52135 {"AC Average Access Delay for Video", "wlan.bss_avg_ac_access_delay_vi",
52136 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52138
52139 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vo,
52140 {"AC Average Access Delay for Voice", "wlan.bss_avg_ac_access_delay_vo",
52141 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52142 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52143
52144
52145 /* 802.11-2012 Table 8-119-RM Enabled Capabilities definition */
52146 {&hf_ieee80211_tag_rm_enabled_capabilities,
52147 {"RM Capabilities", "wlan.rmcap",
52148 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52149 "Signals support for radio measurements in a device", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52150
52151 /* RM Enabled Capability octet 1 */
52152 {&hf_ieee80211_tag_rm_enabled_capabilities_b0,
52153 {"Link Measurement", "wlan.rmcap.b0",
52154 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52156
52157 {&hf_ieee80211_tag_rm_enabled_capabilities_b1,
52158 {"Neighbor Report", "wlan.rmcap.b1",
52159 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52161
52162 {&hf_ieee80211_tag_rm_enabled_capabilities_b2,
52163 {"Parallel Measurements", "wlan.rmcap.b2",
52164 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52166
52167 {&hf_ieee80211_tag_rm_enabled_capabilities_b3,
52168 {"Repeated Measurements", "wlan.rmcap.b3",
52169 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52171
52172 {&hf_ieee80211_tag_rm_enabled_capabilities_b4,
52173 {"Beacon Passive Measurement", "wlan.rmcap.b4",
52174 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52176
52177 {&hf_ieee80211_tag_rm_enabled_capabilities_b5,
52178 {"Beacon Active Measurement", "wlan.rmcap.b5",
52179 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52180 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52181
52182 {&hf_ieee80211_tag_rm_enabled_capabilities_b6,
52183 {"Beacon Table Measurement", "wlan.rmcap.b6",
52184 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52186
52187 {&hf_ieee80211_tag_rm_enabled_capabilities_b7,
52188 {"Beacon Measurement Reporting Conditions", "wlan.rmcap.b7",
52189 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52191
52192 /* RM Enabled Capability octet 2 */
52193 {&hf_ieee80211_tag_rm_enabled_capabilities_b8,
52194 {"Frame Measurement", "wlan.rmcap.b8",
52195 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52197
52198 {&hf_ieee80211_tag_rm_enabled_capabilities_b9,
52199 {"Channel Load Measurement", "wlan.rmcap.b9",
52200 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52202
52203 {&hf_ieee80211_tag_rm_enabled_capabilities_b10,
52204 {"Noise Histogram Measurement", "wlan.rmcap.b10",
52205 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52207
52208 {&hf_ieee80211_tag_rm_enabled_capabilities_b11,
52209 {"Statistics Measurement", "wlan.rmcap.b11",
52210 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52211 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52212
52213 {&hf_ieee80211_tag_rm_enabled_capabilities_b12,
52214 {"LCI Measurement", "wlan.rmcap.b12",
52215 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52217
52218 {&hf_ieee80211_tag_rm_enabled_capabilities_b13,
52219 {"LCI Azimuth capability", "wlan.rmcap.b13",
52220 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52222
52223 {&hf_ieee80211_tag_rm_enabled_capabilities_b14,
52224 {"Transmit Stream/Category Measurement", "wlan.rmcap.b14",
52225 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52227
52228 {&hf_ieee80211_tag_rm_enabled_capabilities_b15,
52229 {"Triggered Transmit Stream/Category Measurement", "wlan.rmcap.b15",
52230 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52231 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52232
52233 /* RM Enabled Capability octet 3 */
52234 {&hf_ieee80211_tag_rm_enabled_capabilities_b16,
52235 {"AP Channel Report capability", "wlan.rmcap.b16",
52236 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52238
52239 {&hf_ieee80211_tag_rm_enabled_capabilities_b17,
52240 {"RM MIB capability", "wlan.rmcap.b17",
52241 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52243
52244 {&hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
52245 {"Operating Channel Max Measurement Duration", "wlan.rmcap.b18to20",
52246 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C,
52247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52248
52249 {&hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
52250 {"Nonoperating Channel Max Measurement Duration", "wlan.rmcap.b21to23",
52251 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0,
52252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52253
52254 /* RM Enabled Capability octet 4 */
52255 {&hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
52256 {"Measurement Pilotcapability", "wlan.rmcap.b24to26",
52257 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
52258 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52259
52260 {&hf_ieee80211_tag_rm_enabled_capabilities_b27,
52261 {"Measurement Pilot Transmission Information", "wlan.rmcap.b27",
52262 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52263 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52264
52265 {&hf_ieee80211_tag_rm_enabled_capabilities_b28,
52266 {"Neighbor Report TSF Offset", "wlan.rmcap.b28",
52267 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52268 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52269
52270 {&hf_ieee80211_tag_rm_enabled_capabilities_b29,
52271 {"RCPI Measurement capability", "wlan.rmcap.b29",
52272 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52273 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52274
52275 {&hf_ieee80211_tag_rm_enabled_capabilities_b30,
52276 {"RSNI Measurement capability", "wlan.rmcap.b30",
52277 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52278 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52279
52280 {&hf_ieee80211_tag_rm_enabled_capabilities_b31,
52281 {"BSS Average Access Delay capability", "wlan.rmcap.b31",
52282 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52283 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52284
52285 /* RM Enabled Capability octet 5 */
52286 {&hf_ieee80211_tag_rm_enabled_capabilities_b32,
52287 {"BSS Available Admission Capacity capability", "wlan.rmcap.b32",
52288 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52290
52291 {&hf_ieee80211_tag_rm_enabled_capabilities_b33,
52292 {"Antenna capability", "wlan.rmcap.b33",
52293 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52295
52296 {&hf_ieee80211_tag_rm_enabled_capabilities_b34,
52297 {"FTM Range Report Capability", "wlan.rmcap.b34",
52298 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52300
52301 {&hf_ieee80211_tag_rm_enabled_capabilities_b35,
52302 {"Civic Location Measurement Capability", "wlan.rmcap.b35",
52303 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52304 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52305
52306 {&hf_ieee80211_tag_rm_enabled_capabilities_o5,
52307 {"Reserved", "wlan.rmcap.o5",
52308 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
52309 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52310
52311 {&hf_ieee80211_tag_rcpi,
52312 {"RCPI", "wlan.rcpi",
52313 FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_and_power_level_custom)((const void *) (size_t) (rcpi_and_power_level_custom)), 0,
52314 "Received channel power indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52315
52316 /* Multiple BSSID */
52317 {&hf_ieee80211_tag_multiple_bssid,
52318 {"Max BSSID Indicator", "wlan.multiple_bssid",
52319 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52320 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52321
52322 {&hf_ieee80211_tag_multiple_bssid_subelem_id,
52323 {"Subelement ID", "wlan.multiple_bssid.subelem.id",
52324 FT_UINT8, BASE_DEC, VALS(multiple_bssid_subelem_ids)((0 ? (const struct _value_string*)0 : ((multiple_bssid_subelem_ids
))))
, 0x0,
52325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52326
52327 {&hf_ieee80211_tag_multiple_bssid_subelem_len,
52328 {"Length", "wlan.multiple_bssid.subelem.len",
52329 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52331
52332 {&hf_ieee80211_tag_multiple_bssid_subelem_reserved,
52333 {"Reserved", "wlan.multiple_bssid.subelem.reserved",
52334 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52336
52337 {&hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile,
52338 {"Nontransmitted Profile", "wlan.multiple_bssid.subelem.nontrans_profile",
52339 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52341
52342 /* 20/40 BSS Coexistence */
52343 {&hf_ieee80211_tag_20_40_bc,
52344 {"20/40 BSS Coexistence Flags", "wlan.20_40_bc",
52345 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
52346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52347
52348 {&hf_ieee80211_tag_20_40_bc_information_request,
52349 {"Information Request", "wlan.20_40_bc.information_request",
52350 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
52351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52352
52353 {&hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
52354 {"Forty MHz Intolerant", "wlan.20_40_bc.forty_mhz_intolerant",
52355 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
52356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52357
52358 {&hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request,
52359 {"20 MHz BSS Width Request", "wlan.20_40_bc.20_mhz_bss_width_request",
52360 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
52361 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52362
52363 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
52364 {"OBSS Scanning Exemption Request", "wlan.20_40_bc.obss_scanning_exemption_request",
52365 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
52366 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52367
52368 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
52369 {"OBSS Scanning Exemption Grant", "wlan.20_40_bc.obss_scanning_exemption_grant",
52370 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
52371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52372
52373 {&hf_ieee80211_tag_20_40_bc_reserved,
52374 {"Reserved", "wlan.20_40_bc.reserved",
52375 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
52376 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52377
52378 {&hf_ieee80211_tag_intolerant_operating_class,
52379 {"Intolerant Operating Class", "wlan.tag.intolerant.operating_class",
52380 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52381
52382 {&hf_ieee80211_tag_intolerant_channel_list,
52383 {"Intolerant Channel List", "wlan.tag.intolerant.channel_list",
52384 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52385
52386 {&hf_ieee80211_tag_intolerant_channel,
52387 {"Intolerant Channel", "wlan.tag.intolerant.channel",
52388 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52389
52390 {&hf_ieee80211_tag_power_constraint_local,
52391 {"Local Power Constraint", "wlan.powercon.local",
52392 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52393 "Value that allows the mitigation requirements to be satisfied in the current channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52394
52395 {&hf_ieee80211_tag_power_capability_min,
52396 {"Minimum Transmit Power", "wlan.powercap.min",
52397 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52398 "The nominal minimum transmit power with which the STA is capable of transmitting in the current channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52399
52400 {&hf_ieee80211_tag_power_capability_max,
52401 {"Maximum Transmit Power", "wlan.powercap.max",
52402 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52403 "The nominal maximum transmit power with which the STA is capable of transmitting in the current channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52404
52405 {&hf_ieee80211_tag_tpc_report_trsmt_pow,
52406 {"Transmit Power", "wlan.tpcrep.trsmt_pow",
52407 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52408 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52409
52410 {&hf_ieee80211_tag_tpc_report_link_mrg,
52411 {"Link Margin", "wlan.tpcrep.link_mrg",
52412 FT_INT8, BASE_DEC, NULL((void*)0), 0,
52413 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52414
52415 {&hf_ieee80211_tag_tpc_report_reserved,
52416 {"Reserved", "wlan.tpcrep.reserved",
52417 FT_INT8, BASE_DEC, NULL((void*)0), 0,
52418 "TPC Link Margin field is reserved in a Beacon or Probe Response frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52419
52420 {&hf_ieee80211_tag_supported_channels,
52421 {"Supported Channels Set", "wlan.supchan",
52422 FT_NONE, BASE_NONE, NULL((void*)0), 0,
52423 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52424
52425 {&hf_ieee80211_tag_supported_channels_first,
52426 {"First Supported Channel", "wlan.supchan.first",
52427 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52428 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52429
52430 {&hf_ieee80211_tag_supported_channels_range,
52431 {"Supported Channel Range", "wlan.supchan.range",
52432 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52433 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52434
52435 {&hf_ieee80211_csa_channel_switch_mode,
52436 {"Channel Switch Mode", "wlan.csa.channel_switch_mode",
52437 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52438 "Indicates any restrictions on transmission until a channel switch", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52439
52440 {&hf_ieee80211_csa_new_channel_number,
52441 {"New Channel Number", "wlan.csa.new_channel_number",
52442 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52443 "Set to the number of the channel to which the STA is moving", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52444
52445 {&hf_ieee80211_csa_channel_switch_count,
52446 {"Channel Switch Count", "wlan.csa.channel_switch.count",
52447 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52448 "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-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52449
52450 {&hf_ieee80211_mesh_channel_switch_ttl,
52451 {"Mesh Channel Switch TTL", "wlan.csa.mesh_channel_switch.ttl",
52452 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52453 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52454
52455 {&hf_ieee80211_mesh_channel_switch_flag,
52456 {"Mesh Channel Switch Flag", "wlan.csa.mesh_channel_switch.flag",
52457 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52458 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52459
52460 {&hf_ieee80211_mesh_chswitch_flag_txrestrict,
52461 {"CSA Tx Restrict", "wlan.csa.mesh_channel_switch.flag.txrestrict",
52462 FT_BOOLEAN, 16, TFS(&csa_txrestrict_flags)((0 ? (const struct true_false_string*)0 : ((&csa_txrestrict_flags
))))
, 0x0001,
52463 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52464
52465 {&hf_ieee80211_mesh_chswitch_flag_initiator,
52466 {"CSA Initiator", "wlan.csa.mesh_channel_switch.flag.initiator",
52467 FT_BOOLEAN, 16, TFS(&csa_initiator_flags)((0 ? (const struct true_false_string*)0 : ((&csa_initiator_flags
))))
, 0x0002,
52468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52469
52470 {&hf_ieee80211_mesh_channel_switch_reason_code,
52471 {"Mesh Channel Switch Reason Code", "wlan.csa.mesh_channel_switch.reason_code",
52472 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_reason_code_ext, 0,
52473 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52474
52475 {&hf_ieee80211_mesh_channel_switch_precedence_value,
52476 {"Mesh Channel Switch Precedence Value", "wlan.csa.mesh_channel_switch.pre_value",
52477 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
52478 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52479
52480 {&hf_ieee80211_mesh_awake_window,
52481 {"Mesh Awake Window", "wlan.mesh.mesh_awake_window",
52482 FT_UINT16, BASE_CUSTOM, CF_FUNC(mesh_active_window_base_custom)((const void *) (size_t) (mesh_active_window_base_custom)), 0,
52483 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52484
52485 {&hf_ieee80211_tag_measure_request_token,
52486 {"Measurement Token", "wlan.measure.req.token",
52487 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52488 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52489
52490 {&hf_ieee80211_tag_measure_request_mode,
52491 {"Measurement Request Mode", "wlan.measure.req.mode",
52492 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52493 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52494
52495 {&hf_ieee80211_tag_measure_request_mode_parallel,
52496 {"Parallel", "wlan.measure.req.reqmode.parallel",
52497 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
52498 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52499
52500 {&hf_ieee80211_tag_measure_request_mode_enable,
52501 {"Measurement Request Mode Field", "wlan.measure.req.reqmode.enable",
52502 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52503 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52504
52505 {&hf_ieee80211_tag_measure_request_mode_request,
52506 {"Measurement Reports", "wlan.measure.req.reqmode.request",
52507 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x04,
52508 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52509
52510 {&hf_ieee80211_tag_measure_request_mode_report,
52511 {"Autonomous Measurement Reports", "wlan.measure.req.reqmode.report",
52512 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x08,
52513 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52514
52515 {&hf_ieee80211_tag_measure_request_mode_duration_mandatory,
52516 {"Duration Mandatory", "wlan.measure.req.reqmode.duration_mandatory",
52517 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x10,
52518 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52519
52520 {&hf_ieee80211_tag_measure_request_mode_reserved,
52521 {"Reserved", "wlan.measure.req.reqmode.reserved",
52522 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
52523 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52524
52525 {&hf_ieee80211_tag_measure_request_type,
52526 {"Measurement Request Type", "wlan.measure.req.reqtype",
52527 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_request_type_flags_ext, 0x00,
52528 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52529
52530 {&hf_ieee80211_tag_measure_request_channel_number,
52531 {"Measurement Channel Number", "wlan.measure.req.channelnumber",
52532 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (size_t) (channel_number_custom)), 0,
52533 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52534
52535 {&hf_ieee80211_tag_measure_request_start_time,
52536 {"Measurement Start Time", "wlan.measure.req.starttime",
52537 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
52538 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52539
52540 {&hf_ieee80211_tag_measure_request_duration,
52541 {"Measurement Duration", "wlan.measure.req.duration",
52542 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52543 "in TU (1 TU = 1024 us)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52544
52545 {&hf_ieee80211_tag_measure_request_operating_class,
52546 {"Operating Class", "wlan.measure.req.operatingclass",
52547 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52548 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52549
52550 {&hf_ieee80211_tag_measure_request_randomization_interval,
52551 {"Randomization Interval", "wlan.measure.req.randint",
52552 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52553 "in TU (1 TU = 1024 us)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52554
52555 {&hf_ieee80211_tag_measure_request_measurement_mode,
52556 {"Measurement Mode", "wlan.measure.req.measurementmode",
52557 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_measurement_mode_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_measurement_mode_flags
))))
, 0,
52558 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52559
52560 {&hf_ieee80211_tag_measure_request_bssid,
52561 {"BSSID", "wlan.measure.req.bssid",
52562 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
52563 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52564
52565 {&hf_ieee80211_tag_measure_request_subelement_length,
52566 {"Length", "wlan.measure.req.sub.length",
52567 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52568 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52569
52570 {&hf_ieee80211_tag_measure_request_beacon_sub_id,
52571 {"SubElement ID", "wlan.measure.req.beacon.sub.id",
52572 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_beacon_sub_id_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_beacon_sub_id_flags
))))
, 0,
52573 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52574
52575 {&hf_ieee80211_tag_measure_request_beacon_sub_ssid,
52576 {"SSID", "wlan.measure.req.beacon.sub.ssid",
52577 FT_STRING, BASE_NONE, NULL((void*)0), 0,
52578 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52579
52580 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition,
52581 {"Reporting Condition", "wlan.measure.req.beacon.sub.bri.repcond",
52582 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags
))))
, 0,
52583 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52584
52585 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset,
52586 {"Threshold/Offset", "wlan.measure.req.beacon.sub.bri.threshold_offset",
52587 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52588 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52589
52590 {&hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail,
52591 {"Reporting Detail", "wlan.measure.req.beacon.sub.bri.reporting_detail",
52592 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags
))))
, 0,
52593 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52594
52595 {&hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request,
52596 {"Request Indication", "wlan.measure.req.beacon.sub.last_report_ind_req",
52597 FT_BOOLEAN, BASE_NONE, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0,
52598 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52599
52600 {&hf_ieee80211_tag_measure_request_beacon_unknown,
52601 {"Unknown Data", "wlan.measure.req.beacon.unknown",
52602 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52603 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52604
52605 {&hf_ieee80211_tag_measure_request_channel_load_sub_id,
52606 {"SubElement ID", "wlan.measure.req.channel_load.sub.id",
52607 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_channel_load_sub_id_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_channel_load_sub_id_vals
))))
, 0,
52608 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52609
52610 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition,
52611 {"Reporting Condition", "wlan.measure.req.channel_load.sub.repcond",
52612 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals
))))
, 0,
52613 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52614
52615 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref,
52616 {"Reference Value", "wlan.measure.req.channel_load.sub.ref",
52617 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52618 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52619
52620
52621 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_id,
52622 {"SubElement ID", "wlan.measure.req.noise_histogram.sub.id",
52623 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_noise_histogram_sub_id_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_noise_histogram_sub_id_vals
))))
, 0,
52624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52625
52626 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition,
52627 {"Reporting Condition", "wlan.measure.reqnoise_histogram.sub.repcond",
52628 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals
))))
, 0,
52629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52630
52631 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref,
52632 {"ANPI Reference Value", "wlan.measure.req.noise_histogram.sub.anpiref",
52633 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52635
52636
52637 {&hf_ieee80211_tag_measure_request_frame_request_type,
52638 {"Frame Request Type", "wlan.measure.req.frame_request_type",
52639 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52641
52642 {&hf_ieee80211_tag_measure_request_mac_address,
52643 {"MAC Address", "wlan.measure.req.mac_address",
52644 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52645 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52646
52647 {&hf_ieee80211_tag_measure_request_peer_mac_address,
52648 {"Peer MAC Address", "wlan.measure.req.peer_mac_address",
52649 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52651
52652 {&hf_ieee80211_tag_measure_request_group_id,
52653 {"Group ID", "wlan.measure.req.groupid",
52654 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_request_group_id_flags_ext, 0,
52655 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52656
52657 {&hf_ieee80211_tag_measure_request_location_subject,
52658 {"Location Subject", "wlan.measure.req.location_subject",
52659 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_location_subject)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_location_subject
))))
, 0,
52660 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52661
52662 {&hf_ieee80211_tag_measure_request_civic_location_type,
52663 {"Civic Location Type", "wlan.measure.req.location_type",
52664 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_civic_location_type)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_civic_location_type
))))
, 0,
52665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52666
52667 {&hf_ieee80211_tag_measure_request_location_service_interval_units,
52668 {"Location Service Interval Units", "wlan.measure.req.location_service_interval_units",
52669 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52671
52672 {&hf_ieee80211_tag_measure_request_location_service_interval,
52673 {"Location Service Interval", "wlan.measure.req.location_service_interval",
52674 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
52675 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52676
52677 {&hf_ieee80211_tag_measure_request_unknown,
52678 {"Unknown Data", "wlan.measure.req.unknown",
52679 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52680 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52681
52682 {&hf_ieee80211_tag_measure_report_measurement_token,
52683 {"Measurement Token", "wlan.measure.rep.token",
52684 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52686
52687 {&hf_ieee80211_tag_measure_report_mode,
52688 {"Measurement Report Mode", "wlan.measure.rep.mode",
52689 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52691
52692 {&hf_ieee80211_tag_measure_report_mode_late,
52693 {"Late", "wlan.measure.rep.repmode.late",
52694 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
52695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52696
52697 {&hf_ieee80211_tag_measure_report_mode_incapable,
52698 {"Incapable", "wlan.measure.rep.repmode.incapable",
52699 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x02,
52700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52701
52702 {&hf_ieee80211_tag_measure_report_mode_refused,
52703 {"Refused", "wlan.measure.rep.repmode.refused",
52704 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x04,
52705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52706
52707 {&hf_ieee80211_tag_measure_report_mode_reserved,
52708 {"Reserved", "wlan.measure.rep.repmode.reserved",
52709 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf8,
52710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52711
52712 {&hf_ieee80211_tag_measure_report_type,
52713 {"Measurement Report Type", "wlan.measure.rep.reptype",
52714 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_report_type_flags_ext, 0x00,
52715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52716
52717 {&hf_ieee80211_tag_measure_report_channel_number,
52718 {"Measurement Channel Number", "wlan.measure.rep.channelnumber",
52719 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (size_t) (channel_number_custom)), 0,
52720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52721
52722 {&hf_ieee80211_tag_measure_report_start_time,
52723 {"Measurement Start Time", "wlan.measure.rep.starttime",
52724 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
52725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52726
52727 {&hf_ieee80211_tag_measure_report_duration,
52728 {"Measurement Duration", "wlan.measure.rep.duration",
52729 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52731
52732 {&hf_ieee80211_tag_measure_report_beacon_unknown,
52733 {"Unknown Data", "wlan.measure.rep.beacon.unknown",
52734 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52735 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52736
52737 {&hf_ieee80211_tag_measure_reported_frame_frag_id,
52738 {"Fragment ID", "wlan.measure.rep.beacon.frag_id",
52739 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52741
52742 {&hf_ieee80211_tag_measure_reported_frame_frag_rep_id,
52743 {"Beacon Report ID", "wlan.measure.rep.beacon.frag_id.report_id",
52744 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00ff,
52745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52746
52747 {&hf_ieee80211_tag_measure_reported_frame_frag_number,
52748 {"Fragment ID Number", "wlan.measure.rep.beacon.frag_id.number",
52749 FT_UINT16, BASE_HEX, NULL((void*)0), 0x7f00,
52750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52751
52752 {&hf_ieee80211_tag_measure_reported_frame_frag_more,
52753 {"More Frame Body Fragments", "wlan.measure.rep.beacon.frag_id.more",
52754 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000,
52755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
52756
52757 {&hf_ieee80211_tag_measure_cca_busy_fraction,
52758 {"CCA Busy Fraction", "wlan.measure.rep.ccabusy",
52759 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52761
52762 {&hf_ieee80211_tag_measure_basic_map_field,
52763 {"Map Field", "wlan.measure.rep.mapfield",
52764 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52766
52767 {&hf_ieee80211_tag_measure_map_field_bss,
52768 {"BSS", "wlan.measure.rep.repmode.mapfield.bss",
52769 FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_map_field_bss_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_tag_measure_map_field_bss_flag
))))
, 0x01,
52770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52771
52772 {&hf_ieee80211_tag_measure_map_field_ofdm,
52773 {"Orthogonal Frequency Division Multiplexing (OFDM) Preamble", "wlan.measure.rep.repmode.mapfield.ofdm_preamble",
52774 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x02,
52775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52776
52777 {&hf_ieee80211_tag_measure_map_field_unident_signal,
52778 {"Unidentified Signal", "wlan.measure.rep.repmode.mapfield.unidentsig",
52779 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x04,
52780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52781
52782 {&hf_ieee80211_tag_measure_map_field_radar,
52783 {"Radar", "wlan.measure.rep.repmode.mapfield.radar",
52784 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x08,
52785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52786
52787 {&hf_ieee80211_tag_measure_map_field_unmeasured,
52788 {"Unmeasured", "wlan.measure.rep.repmode.mapfield.unmeasured",
52789 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
52790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52791
52792 {&hf_ieee80211_tag_measure_map_field_reserved,
52793 {"Reserved", "wlan.measure.rep.repmode.mapfield.reserved",
52794 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0,
52795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52796
52797 {&hf_ieee80211_tag_measure_rpi_histogram_report,
52798 {"Receive Power Indicator (RPI) Histogram Report", "wlan.measure.rep.rpi.histogram_report",
52799 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52801
52802 {&hf_ieee80211_tag_measure_rpi_histogram_report_0,
52803 {"RPI 0 Density", "wlan.measure.rep.rpi.rpi0density",
52804 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52805 "Receive Power Indicator (RPI) 0 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52806
52807 {&hf_ieee80211_tag_measure_rpi_histogram_report_1,
52808 {"RPI 1 Density", "wlan.measure.rep.rpi.rpi1density",
52809 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52810 "Receive Power Indicator (RPI) 1 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52811
52812 {&hf_ieee80211_tag_measure_rpi_histogram_report_2,
52813 {"RPI 2 Density", "wlan.measure.rep.rpi.rpi2density",
52814 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52815 "Receive Power Indicator (RPI) 2 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52816
52817 {&hf_ieee80211_tag_measure_rpi_histogram_report_3,
52818 {"RPI 3 Density", "wlan.measure.rep.rpi.rpi3density",
52819 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52820 "Receive Power Indicator (RPI) 3 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52821
52822 {&hf_ieee80211_tag_measure_rpi_histogram_report_4,
52823 {"RPI 4 Density", "wlan.measure.rep.rpi.rpi4density",
52824 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52825 "Receive Power Indicator (RPI) 4 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52826
52827 {&hf_ieee80211_tag_measure_rpi_histogram_report_5,
52828 {"RPI 5 Density", "wlan.measure.rep.rpi.rpi5density",
52829 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52830 "Receive Power Indicator (RPI) 5 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52831
52832 {&hf_ieee80211_tag_measure_rpi_histogram_report_6,
52833 {"RPI 6 Density", "wlan.measure.rep.rpi.rpi6density",
52834 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52835 "Receive Power Indicator (RPI) 6 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52836
52837 {&hf_ieee80211_tag_measure_rpi_histogram_report_7,
52838 {"RPI 7 Density", "wlan.measure.rep.rpi.rpi7density",
52839 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52840 "Receive Power Indicator (RPI) 7 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52841
52842 {&hf_ieee80211_tag_measure_report_operating_class,
52843 {"Operating Class", "wlan.measure.rep.operatingclass",
52844 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52846
52847 {&hf_ieee80211_tag_measure_report_channel_load,
52848 {"Channel Load", "wlan.measure.rep.chanload",
52849 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52851
52852 {&hf_ieee80211_tag_measure_report_frame_info,
52853 {"Reported Frame Information", "wlan.measure.rep.frameinfo",
52854 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52856
52857 {&hf_ieee80211_tag_measure_report_frame_info_phy_type,
52858 {"Condensed PHY", "wlan.measure.rep.frameinfo.phytype",
52859 FT_UINT8, BASE_HEX, NULL((void*)0), 0x7F,
52860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52861
52862 {&hf_ieee80211_tag_measure_report_frame_info_frame_type,
52863 {"Reported Frame Type", "wlan.measure.rep.frameinfo.frametype",
52864 FT_BOOLEAN, 8, TFS(&ieee80211_tag_measure_report_frame_info_frame_type_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_tag_measure_report_frame_info_frame_type_flag
))))
, 0x80,
52865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52866
52867 {&hf_ieee80211_tag_measure_report_rcpi,
52868 {"Received Channel Power Indicator (RCPI)", "wlan.measure.rep.rcpi",
52869 FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_and_power_level_custom)((const void *) (size_t) (rcpi_and_power_level_custom)), 0,
52870 "in dBm", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52871
52872 {&hf_ieee80211_tag_measure_report_rsni,
52873 {"Received Signal to Noise Indicator (RSNI)", "wlan.measure.rep.rsni",
52874 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom)((const void *) (size_t) (rsni_base_custom)), 0,
52875 "in dB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52876
52877 {&hf_ieee80211_tag_measure_report_bssid,
52878 {"BSSID Being Reported", "wlan.measure.rep.bssid",
52879 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
52880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52881
52882 {&hf_ieee80211_tag_measure_report_ant_id,
52883 {"Antenna ID", "wlan.measure.rep.antid",
52884 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52886
52887 {&hf_ieee80211_tag_measure_report_anpi,
52888 {"ANPI", "wlan.measure.rep.anpi",
52889 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52891
52892 {&hf_ieee80211_tag_measure_report_ipi_density_0,
52893 {"IPI Density 0", "wlan.measure.rep.ipi_density0",
52894 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52896
52897 {&hf_ieee80211_tag_measure_report_ipi_density_1,
52898 {"IPI Density 1", "wlan.measure.rep.ipi_density1",
52899 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52901
52902 {&hf_ieee80211_tag_measure_report_ipi_density_2,
52903 {"IPI Density 2", "wlan.measure.rep.ipi_density2",
52904 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52906
52907 {&hf_ieee80211_tag_measure_report_ipi_density_3,
52908 {"IPI Density 3", "wlan.measure.rep.ipi_density3",
52909 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52911
52912 {&hf_ieee80211_tag_measure_report_ipi_density_4,
52913 {"IPI Density 4", "wlan.measure.rep.ipi_density4",
52914 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52916
52917 {&hf_ieee80211_tag_measure_report_ipi_density_5,
52918 {"IPI Density 5", "wlan.measure.rep.ipi_density5",
52919 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52921
52922 {&hf_ieee80211_tag_measure_report_ipi_density_6,
52923 {"IPI Density 6", "wlan.measure.rep.ipi_density6",
52924 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52925 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52926
52927 {&hf_ieee80211_tag_measure_report_ipi_density_7,
52928 {"IPI Density 7", "wlan.measure.rep.ipi_density7",
52929 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52930 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52931
52932 {&hf_ieee80211_tag_measure_report_ipi_density_8,
52933 {"IPI Density 8", "wlan.measure.rep.ipi_density8",
52934 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52936
52937 {&hf_ieee80211_tag_measure_report_ipi_density_9,
52938 {"IPI Density 9", "wlan.measure.rep.ipi_density9",
52939 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52941
52942 {&hf_ieee80211_tag_measure_report_ipi_density_10,
52943 {"IPI Density 10", "wlan.measure.rep.ipi_density10",
52944 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52946
52947 {&hf_ieee80211_tag_measure_report_parent_tsf,
52948 {"Parent Timing Synchronization Function (TSF)", "wlan.measure.rep.parenttsf",
52949 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
52950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52951
52952 {&hf_ieee80211_tag_measure_report_subelement_length,
52953 {"Length", "wlan.measure.rep.sub.length",
52954 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52956
52957 {&hf_ieee80211_tag_measure_report_beacon_sub_id,
52958 {"SubElement ID", "wlan.measure.rep.beacon.sub.id",
52959 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_report_beacon_sub_id_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_report_beacon_sub_id_vals
))))
, 0,
52960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52961
52962 {&hf_ieee80211_tag_measure_report_unknown,
52963 {"Unknown Data", "wlan.measure.rep.unknown",
52964 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52965 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52966
52967 {&hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication,
52968 {"Last Report", "wlan.measure.rep.beacon.sub.last_report",
52969 FT_BOOLEAN, BASE_NONE, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0,
52970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52971
52972 {&hf_ieee80211_tag_measure_report_lci_sub_id,
52973 {"SubElement ID", "wlan.measure.rep.lci.sub.id",
52974 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_report_lci_sub_id_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_report_lci_sub_id_vals
))))
, 0,
52975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52976
52977 {&hf_ieee80211_tag_measure_report_lci_lci,
52978 {"LCI", "wlan.measure.rep.lci.lci",
52979 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52980 "Location Configuration Information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52981
52982 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info,
52983 {"STA Floor Info", "wlan.measure.rep.lci.z.sta_floor_info",
52984 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
52985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52986
52987 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move,
52988 {"Expected To Move", "wlan.measure.rep.lci.z.sta_floor_info.expected_to_move",
52989 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
52990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52991
52992 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number,
52993 {"STA Floor Number", "wlan.measure.rep.lci.z.sta_floor_info.sta_floor_number",
52994 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFFC,
52995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52996
52997 {&hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor,
52998 {"STA Height Above Floor", "wlan.measure.rep.lci.z.sta_height_above_floor",
52999 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
53000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53001
53002 {&hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty,
53003 {"STA Height Above Floor Uncertainty", "wlan.measure.rep.lci.z.sta_height_above_floor_uncertainty",
53004 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
53005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53006
53007 {&hf_ieee80211_tag_measure_report_lci_urp,
53008 {"Usage Rules/Policy Parameters", "wlan.measure.rep.lci.urp",
53009 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
53010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53011
53012 {&hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed,
53013 {"Retransmission Allowed", "wlan.measure.rep.lci.urp.retransmission_allowed",
53014 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53016
53017 {&hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present,
53018 {"Retention Expires Relative Present", "wlan.measure.rep.lci.urp.retention_expires_relative_present",
53019 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53021
53022 {&hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy,
53023 {"STA Location Policy", "wlan.measure.rep.lci.urp.sta_location_policy",
53024 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53026
53027 {&hf_ieee80211_tag_measure_report_lci_urp_reserved,
53028 {"Reserved", "wlan.measure.rep.lci.urp.reserved",
53029 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
53030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53031
53032 {&hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative,
53033 {"Retention Expires Relative", "wlan.measure.rep.lci.urp.retention_expires_relative",
53034 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
53035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53036
53037 {&hf_ieee80211_tag_measure_report_lci_unknown,
53038 {"Unknown Data", "wlan.measure.rep.lci.unknown",
53039 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53040 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53041
53042 {&hf_ieee80211_tag_measure_report_civic_location_type,
53043 {"Civic Location Type", "wlan.measure.rep.location_subject",
53044 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_civic_location_type)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_civic_location_type
))))
, 0,
53045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53046
53047 {&hf_ieee80211_tag_measure_report_civic_sub_id,
53048 {"SubElement ID", "wlan.measure.rep.civic.sub.id",
53049 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_report_civic_sub_id_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_report_civic_sub_id_vals
))))
, 0,
53050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53051
53052 {&hf_ieee80211_tag_measure_report_location_civic_country,
53053 {"Country", "wlan.measure.rep.civic.sub.country",
53054 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53056
53057 {&hf_ieee80211_tag_measure_report_location_civic_type,
53058 {"Type", "wlan.measure.rep.civic.sub.type",
53059 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53061
53062 {&hf_ieee80211_tag_measure_report_location_civic_length,
53063 {"Length", "wlan.measure.rep.civic.sub.length",
53064 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53066
53067 {&hf_ieee80211_tag_measure_report_location_civic,
53068 {"Location Civic", "wlan.measure.rep.civic.sub.location_civic",
53069 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53071
53072 {&hf_ieee80211_tag_quiet_count,
53073 {"Count", "wlan.quiet.count",
53074 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53075 "Set to the number of TBTTs until the beacon interval during which the next quiet interval shall start", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53076
53077 {&hf_ieee80211_tag_quiet_period,
53078 {"Period", "wlan.quiet.period",
53079 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53080 "Set to the number of beacon intervals between the start of regularly scheduled quiet intervals", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53081
53082 {&hf_ieee80211_tag_quiet_duration,
53083 {"Duration", "wlan.quiet.duration",
53084 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53085 "Set to the duration of the quiet interval", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53086
53087 {&hf_ieee80211_tag_quiet_offset,
53088 {"Offset", "wlan.quiet.offset",
53089 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53090 "Set to the offset of the start of the quiet interval from the TBTT", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53091
53092 {&hf_ieee80211_tag_dfs_owner,
53093 {"Owner", "wlan.dfs.owner",
53094 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
53095 "Set to the individual IEEE MAC address of the STA that is the currently known DFS Owner in the IBSS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53096
53097 {&hf_ieee80211_tag_dfs_recovery_interval,
53098 {"Recovery Interval", "wlan.dfs.recovery_interval",
53099 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53100 "Indicates the time interval that shall be used for DFS owner recovery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53101
53102 {&hf_ieee80211_tag_dfs_channel_map,
53103 {"Channel Map", "wlan.dfs.channel_map",
53104 FT_NONE, BASE_NONE, NULL((void*)0), 0,
53105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53106
53107 {&hf_ieee80211_tag_dfs_channel_number,
53108 {"Channel Number", "wlan.dfs.channel_number",
53109 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53111
53112 {&hf_ieee80211_tag_dfs_map,
53113 {"Map", "wlan.dfs.map",
53114 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53115 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53116
53117 {&hf_ieee80211_tag_erp_info,
53118 {"ERP Information", "wlan.erp_info",
53119 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53121
53122 {&hf_ieee80211_tag_erp_info_erp_present,
53123 {"Non ERP Present", "wlan.erp_info.erp_present",
53124 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
53125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53126
53127 {&hf_ieee80211_tag_erp_info_use_protection,
53128 {"Use Protection", "wlan.erp_info.use_protection",
53129 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
53130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53131
53132 {&hf_ieee80211_tag_erp_info_barker_preamble_mode,
53133 {"Barker Preamble Mode", "wlan.erp_info.barker_preamble_mode",
53134 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
53135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53136
53137 {&hf_ieee80211_tag_erp_info_reserved,
53138 {"Reserved", "wlan.erp_info.reserved",
53139 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
53140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53141
53142 /* IEEE Std 802.11 2016 */
53143 /* Table 9-135-Extended Capabilities field */
53144 {&hf_ieee80211_tag_extended_capabilities,
53145 {"Extended Capabilities", "wlan.extcap",
53146 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53147 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53148
53149 /* Extended Capability octet 1 */
53150 {&hf_ieee80211_tag_extended_capabilities_b0,
53151 {"20/40 BSS Coexistence Management Support", "wlan.extcap.b0",
53152 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53153 "HT Information Exchange Support", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53154
53155 {&hf_ieee80211_tag_extended_capabilities_b1,
53156 {"General Link (GLK)", "wlan.extcap.b1",
53157 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
53158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53159
53160 {&hf_ieee80211_tag_extended_capabilities_b2,
53161 {"Extended Channel Switching", "wlan.extcap.b2",
53162 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53164
53165 {&hf_ieee80211_tag_extended_capabilities_b3,
53166 {"GLK-GCR", "wlan.extcap.b3",
53167 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53169
53170 {&hf_ieee80211_tag_extended_capabilities_b4,
53171 {"PSMP Capability", "wlan.extcap.b4",
53172 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53174
53175 {&hf_ieee80211_tag_extended_capabilities_b5,
53176 {"Reserved", "wlan.extcap.b5",
53177 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20,
53178 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53179
53180 {&hf_ieee80211_tag_extended_capabilities_b6,
53181 {"S-PSMP Support", "wlan.extcap.b6",
53182 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53184
53185 {&hf_ieee80211_tag_extended_capabilities_b7,
53186 {"Event", "wlan.extcap.b7",
53187 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53189
53190
53191 /* Extended Capability octet 2 */
53192 {&hf_ieee80211_tag_extended_capabilities_b8,
53193 {"Diagnostics", "wlan.extcap.b8",
53194 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53196
53197 {&hf_ieee80211_tag_extended_capabilities_b9,
53198 {"Multicast Diagnostics", "wlan.extcap.b9",
53199 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53201
53202 {&hf_ieee80211_tag_extended_capabilities_b10,
53203 {"Location Tracking", "wlan.extcap.b10",
53204 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53206
53207 {&hf_ieee80211_tag_extended_capabilities_b11,
53208 {"FMS", "wlan.extcap.b11",
53209 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53211
53212 {&hf_ieee80211_tag_extended_capabilities_b12,
53213 {"Proxy ARP Service", "wlan.extcap.b12",
53214 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53216
53217 {&hf_ieee80211_tag_extended_capabilities_b13,
53218 {"Colocated Interference Reporting", "wlan.extcap.b13",
53219 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53221
53222 {&hf_ieee80211_tag_extended_capabilities_b14,
53223 {"Civic Location", "wlan.extcap.b14",
53224 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53226
53227 {&hf_ieee80211_tag_extended_capabilities_b15,
53228 {"Geospatial Location", "wlan.extcap.b15",
53229 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53231
53232
53233 /* Extended Capability octet 3 */
53234 {&hf_ieee80211_tag_extended_capabilities_b16,
53235 {"TFS", "wlan.extcap.b16",
53236 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53238
53239 {&hf_ieee80211_tag_extended_capabilities_b17,
53240 {"WNM Sleep Mode", "wlan.extcap.b17",
53241 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53243
53244 {&hf_ieee80211_tag_extended_capabilities_b18,
53245 {"TIM Broadcast", "wlan.extcap.b18",
53246 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53248
53249 {&hf_ieee80211_tag_extended_capabilities_b19,
53250 {"BSS Transition", "wlan.extcap.b19",
53251 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53253
53254 {&hf_ieee80211_tag_extended_capabilities_b20,
53255 {"QoS Traffic Capability", "wlan.extcap.b20",
53256 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53258
53259 {&hf_ieee80211_tag_extended_capabilities_b21,
53260 {"AC Station Count", "wlan.extcap.b21",
53261 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53263
53264 {&hf_ieee80211_tag_extended_capabilities_b22,
53265 {"Multiple BSSID", "wlan.extcap.b22",
53266 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53268
53269 {&hf_ieee80211_tag_extended_capabilities_b23,
53270 {"Timing Measurement", "wlan.extcap.b23",
53271 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53273
53274
53275 /* Extended Capability octet 4 */
53276 {&hf_ieee80211_tag_extended_capabilities_b24,
53277 {"Channel Usage", "wlan.extcap.b24",
53278 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53280
53281 {&hf_ieee80211_tag_extended_capabilities_b25,
53282 {"SSID List", "wlan.extcap.b25",
53283 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53285
53286 {&hf_ieee80211_tag_extended_capabilities_b26,
53287 {"DMS", "wlan.extcap.b26",
53288 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53290
53291 {&hf_ieee80211_tag_extended_capabilities_b27,
53292 {"UTC TSF Offset", "wlan.extcap.b27",
53293 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53295
53296 {&hf_ieee80211_tag_extended_capabilities_b28,
53297 {"TPU Buffer STA Support", "wlan.extcap.b28",
53298 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53300
53301 {&hf_ieee80211_tag_extended_capabilities_b29,
53302 {"TDLS Peer PSM Support", "wlan.extcap.b29",
53303 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53304 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53305
53306 {&hf_ieee80211_tag_extended_capabilities_b30,
53307 {"TDLS Channel Switching", "wlan.extcap.b30",
53308 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53309 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53310
53311 {&hf_ieee80211_tag_extended_capabilities_b31,
53312 {"Interworking", "wlan.extcap.b31",
53313 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53314 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53315
53316
53317 /* Extended Capability octet 5 */
53318 {&hf_ieee80211_tag_extended_capabilities_b32,
53319 {"QoS Map", "wlan.extcap.b32",
53320 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53322
53323 {&hf_ieee80211_tag_extended_capabilities_b33,
53324 {"EBR", "wlan.extcap.b33",
53325 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53327
53328 {&hf_ieee80211_tag_extended_capabilities_b34,
53329 {"SSPN Interface", "wlan.extcap.b34",
53330 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53332
53333 {&hf_ieee80211_tag_extended_capabilities_b35,
53334 {"Reserved", "wlan.extcap.b35",
53335 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53336 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53337
53338 {&hf_ieee80211_tag_extended_capabilities_b36,
53339 {"MSGCF Capability", "wlan.extcap.b36",
53340 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53342
53343 {&hf_ieee80211_tag_extended_capabilities_b37,
53344 {"TDLS Support", "wlan.extcap.b37",
53345 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53347
53348 {&hf_ieee80211_tag_extended_capabilities_b38,
53349 {"TDLS Prohibited", "wlan.extcap.b38",
53350 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53352
53353 {&hf_ieee80211_tag_extended_capabilities_b39,
53354 {"TDLS Channel Switching Prohibited", "wlan.extcap.b39",
53355 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53357
53358 /* Extended Capability octet 6 */
53359 {&hf_ieee80211_tag_extended_capabilities_b40,
53360 {"Reject Unadmitted Frame", "wlan.extcap.b40",
53361 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53363
53364 {&hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
53365 {"Service Interval Granularity",
53366 "wlan.extcap.serv_int_granularity",
53367 FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals)((0 ? (const struct _value_string*)0 : ((service_interval_granularity_vals
))))
, 0x0e,
53368 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53369
53370 {&hf_ieee80211_tag_extended_capabilities_b44,
53371 {"Identifier Location", "wlan.extcap.b44",
53372 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53373 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53374
53375 {&hf_ieee80211_tag_extended_capabilities_b45,
53376 {"U-APSD Coexistence", "wlan.extcap.b45",
53377 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53378 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53379
53380 {&hf_ieee80211_tag_extended_capabilities_b46,
53381 {"WNM Notification", "wlan.extcap.b46",
53382 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53383 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53384
53385 {&hf_ieee80211_tag_extended_capabilities_b47,
53386 {"QAB Capability", "wlan.extcap.b47",
53387 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
53388 "AP supports QAB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53389
53390 /* Extended Capability octet 7 */
53391 {&hf_ieee80211_tag_extended_capabilities_b48,
53392 {"UTF-8 SSID", "wlan.extcap.b48",
53393 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53394 "The SSID in this BSS is interpreted using UTF-8 encoding", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53395
53396 {&hf_ieee80211_tag_extended_capabilities_b49,
53397 {"QMF Activated", "wlan.extcap.b49",
53398 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53400
53401 {&hf_ieee80211_tag_extended_capabilities_b50,
53402 {"QMF Reconfiguration Activated", "wlan.extcap.b50",
53403 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53404 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53405
53406 {&hf_ieee80211_tag_extended_capabilities_b51,
53407 {"Robust AV Streaming", "wlan.extcap.b51",
53408 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
53409 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53410
53411 {&hf_ieee80211_tag_extended_capabilities_b52,
53412 {"Advanced GCR", "wlan.extcap.b52",
53413 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53414 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53415
53416 {&hf_ieee80211_tag_extended_capabilities_b53,
53417 {"Mesh GCR", "wlan.extcap.b53",
53418 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53419 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53420
53421 {&hf_ieee80211_tag_extended_capabilities_b54,
53422 {"SCS", "wlan.extcap.b54",
53423 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53424 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53425
53426 {&hf_ieee80211_tag_extended_capabilities_b55,
53427 {"QLoad Report", "wlan.extcap.b55",
53428 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53429 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53430
53431 /* Extended Capability octet 8 */
53432 {&hf_ieee80211_tag_extended_capabilities_b56,
53433 {"Alternate EDCA", "wlan.extcap.b56",
53434 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53436
53437 {&hf_ieee80211_tag_extended_capabilities_b57,
53438 {"Unprotected TXOP Negotiation", "wlan.extcap.b57",
53439 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53441
53442 {&hf_ieee80211_tag_extended_capabilities_b58,
53443 {"Protected TXOP Negotiation", "wlan.extcap.b58",
53444 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53446
53447 {&hf_ieee80211_tag_extended_capabilities_b59,
53448 {"Reserved", "wlan.extcap.b59",
53449 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53450 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53451
53452 {&hf_ieee80211_tag_extended_capabilities_b60,
53453 {"Protected QLoad Report", "wlan.extcap.b60",
53454 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53455 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53456
53457 {&hf_ieee80211_tag_extended_capabilities_b61,
53458 {"TDLS Wider Bandwidth", "wlan.extcap.b61",
53459 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53461
53462 {&hf_ieee80211_tag_extended_capabilities_b62,
53463 {"Operating Mode Notification", "wlan.extcap.b62",
53464 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53466
53467 {&hf_ieee80211_tag_extended_capabilities_b63,
53468 {"Max Number Of MSDUs In A-MSDU", "wlan.extcap.b63",
53469 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
53470 "Part 1 (bit63)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53471
53472 /* Extended Capability octets 8 & 9 */
53473 {&hf_ieee80211_tag_extended_capabilities_2,
53474 {"Extended Capabilities", "wlan.extcap",
53475 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
53476 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53477
53478 {&hf_ieee80211_tag_extended_capabilities_b56_2,
53479 {"Alternate EDCA", "wlan.extcap.b56",
53480 FT_BOOLEAN, 16, NULL((void*)0), 0x0001,
53481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53482
53483 {&hf_ieee80211_tag_extended_capabilities_b57_2,
53484 {"Unprotected TXOP Negotiation", "wlan.extcap.b57",
53485 FT_BOOLEAN, 16, NULL((void*)0), 0x0002,
53486 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53487
53488 {&hf_ieee80211_tag_extended_capabilities_b58_2,
53489 {"Protected TXOP Negotiation", "wlan.extcap.b58",
53490 FT_BOOLEAN, 16, NULL((void*)0), 0x0004,
53491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53492
53493 {&hf_ieee80211_tag_extended_capabilities_b59_2,
53494 {"Reserved", "wlan.extcap.b59",
53495 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008,
53496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53497
53498 {&hf_ieee80211_tag_extended_capabilities_b60_2,
53499 {"Protected QLoad Report", "wlan.extcap.b60",
53500 FT_BOOLEAN, 16, NULL((void*)0), 0x0010,
53501 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53502
53503 {&hf_ieee80211_tag_extended_capabilities_b61_2,
53504 {"TDLS Wider Bandwidth", "wlan.extcap.b61",
53505 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020,
53506 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53507
53508 {&hf_ieee80211_tag_extended_capabilities_b62_2,
53509 {"Operating Mode Notification", "wlan.extcap.b62",
53510 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040,
53511 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53512
53513 {&hf_ieee80211_tag_extended_capabilities_max_num_msdus,
53514 {"Max Number Of MSDUs In A-MSDU", "wlan.extcap.b63",
53515 FT_UINT16, BASE_DEC, VALS(vht_max_mpdu_in_amsdu)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_in_amsdu
))))
, 0x0180,
53516 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53517
53518 {&hf_ieee80211_tag_extended_capabilities_b65_2,
53519 {"Channel Schedule Management", "wlan.extcap.b65",
53520 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
53521 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53522
53523 {&hf_ieee80211_tag_extended_capabilities_b66_2,
53524 {"Geodatabase Inband Enabling Signal", "wlan.extcap.b66",
53525 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
53526 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53527
53528 {&hf_ieee80211_tag_extended_capabilities_b67_2,
53529 {"Network Channel Control", "wlan.extcap.b67",
53530 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
53531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53532
53533 {&hf_ieee80211_tag_extended_capabilities_b68_2,
53534 {"White Space Map", "wlan.extcap.b68",
53535 FT_BOOLEAN, 16, NULL((void*)0), 0x1000,
53536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53537
53538 {&hf_ieee80211_tag_extended_capabilities_b69_2,
53539 {"Channel Availability Query", "wlan.extcap.b69",
53540 FT_BOOLEAN, 16, NULL((void*)0), 0x2000,
53541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53542
53543 {&hf_ieee80211_tag_extended_capabilities_b70_2,
53544 {"Fine Timing Measurement Responder", "wlan.extcap.b70",
53545 FT_BOOLEAN, 16, NULL((void*)0), 0x4000,
53546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53547
53548 {&hf_ieee80211_tag_extended_capabilities_b71_2,
53549 {"Fine Timing Measurement Initiator", "wlan.extcap.b71",
53550 FT_BOOLEAN, 16, NULL((void*)0), 0x8000,
53551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53552
53553 /* Extended Capability Octet 10 */
53554 {&hf_ieee80211_tag_extended_capabilities_b72,
53555 {"FILS Capability", "wlan.extcap.b72",
53556 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53558
53559 {&hf_ieee80211_tag_extended_capabilities_b73,
53560 {"Extended Spectrum Management Capable", "wlan.extcap.b73",
53561 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53563
53564 {&hf_ieee80211_tag_extended_capabilities_b74,
53565 {"Future Channel Guidance", "wlan.extcap.b74",
53566 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53568
53569 {&hf_ieee80211_tag_extended_capabilities_b75,
53570 {"Preassociation discovery (PAD)", "wlan.extcap.b75",
53571 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53573
53574 {&hf_ieee80211_tag_extended_capabilities_b76,
53575 {"Reserved", "wlan.extcap.b76",
53576 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10,
53577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53578
53579 {&hf_ieee80211_tag_extended_capabilities_b77,
53580 {"TWT Requester Support", "wlan.extcap.b77",
53581 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53583
53584 {&hf_ieee80211_tag_extended_capabilities_b78,
53585 {"TWT Responder Support", "wlan.extcap.b78",
53586 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53588
53589 {&hf_ieee80211_tag_extended_capabilities_b79,
53590 {"OBSS Narrow Bandwidth RU in OFDMA Tolerance Support", "wlan.extcap.b79",
53591 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53593
53594 {&hf_ieee80211_tag_extended_capabilities_b80,
53595 {"Complete List of NonTxBSSID Profiles", "wlan.extcap.b80",
53596 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53598
53599 {&hf_ieee80211_tag_extended_capabilities_b81,
53600 {"SAE Password Identifiers In Use", "wlan.extcap.b81",
53601 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53603
53604 {&hf_ieee80211_tag_extended_capabilities_b82,
53605 {"SAE Passwords Used Exclusively", "wlan.extcap.b82",
53606 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53607 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53608
53609 {&hf_ieee80211_tag_extended_capabilities_b83,
53610 {"Enhanced Multi-BSSID Advertisement Support", "wlan.extcap.b83",
53611 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
53612 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53613
53614 {&hf_ieee80211_tag_extended_capabilities_b84,
53615 {"Beacon Protection Enabled", "wlan.extcap.b84",
53616 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53618
53619 {&hf_ieee80211_tag_extended_capabilities_b85,
53620 {"Mirrored SCS", "wlan.extcap.b85",
53621 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53623
53624 {&hf_ieee80211_tag_extended_capabilities_b86,
53625 {"OCT", "wlan.extcap.b86",
53626 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53628
53629 {&hf_ieee80211_tag_extended_capabilities_b87,
53630 {"Local MAC Address Policy", "wlan.extcap.b87",
53631 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53633
53634 {&hf_ieee80211_tag_extended_capabilities_b88,
53635 {"SAE-PK Passwords Used Exclusively", "wlan.extcap.b88",
53636 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53638
53639 {&hf_ieee80211_tag_extended_capabilities_b89,
53640 {"TWT Parameters Range Support", "wlan.extcap.b89",
53641 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53642
53643 {&hf_ieee80211_tag_extended_capabilities_b90,
53644 {"non-TB Ranging Responder", "wlan.extcap.b90",
53645 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53646
53647 {&hf_ieee80211_tag_extended_capabilities_b91,
53648 {"TB Ranging Responder", "wlan.extcap.b91",
53649 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53650
53651 {&hf_ieee80211_tag_extended_capabilities_b92,
53652 {"TB Ranging Responder Measurement Support", "wlan.extcap.b92",
53653 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53654
53655 {&hf_ieee80211_tag_extended_capabilities_b93,
53656 {"TB Ranging Initiator Measurement Support", "wlan.extcap.b93",
53657 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53658
53659 {&hf_ieee80211_tag_extended_capabilities_b94,
53660 {"AOA Measurement Available", "wlan.extcap.b94",
53661 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53662
53663 {&hf_ieee80211_tag_extended_capabilities_b95,
53664 {"Phase Shift Feedback Support", "wlan.extcap.b95",
53665 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53666
53667 {&hf_ieee80211_tag_extended_capabilities_b96,
53668 {"DMG/location supporting APs in the area", "wlan.extcap.dmg_location",
53669 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53670
53671 {&hf_ieee80211_tag_extended_capabilities_b97,
53672 {"I2R LMR Feedback Policy", "wlan.extcap.i2r_lmr_feedback_policy",
53673 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53674
53675 {&hf_ieee80211_tag_extended_capabilities_b98,
53676 {"EBCS Support", "wlan.extcap.b98",
53677 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53678
53679 {&hf_ieee80211_tag_extended_capabilities_b99,
53680 {"EBCS Relaying Support", "wlan.extcap.b99",
53681 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53682
53683 {&hf_ieee80211_tag_extended_capabilities_b100,
53684 {"Peer-to-peer TWT Support", "wlan.extcap.b100",
53685 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53686
53687 {&hf_ieee80211_tag_extended_capabilities_b101,
53688 {"Multiple BSSID Role Switch Support", "wlan.extcap.b101",
53689 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53690
53691 {&hf_ieee80211_tag_extended_capabilities_b102,
53692 {"Known STA Identification Enabled", "wlan.extcap.b102",
53693 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53694
53695 {&hf_ieee80211_tag_extended_capabilities_b103,
53696 {"Reserved", "wlan.extcap.b103",
53697 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53698
53699 {&hf_ieee80211_tag_extended_capabilities_b104,
53700 {"Capability Notification Support", "wlan.extcap.b104",
53701 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53702
53703 {&hf_ieee80211_tag_extended_capabilities_b105,
53704 {"GAS Query Request Fragmentation", "wlan.extcap.b105",
53705 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53706
53707 {&hf_ieee80211_tag_extended_capabilities_reserved2,
53708 {"Reserved", "wlan.extcap.reserved2",
53709 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53710
53711 {&hf_ieee80211_tag_cisco_ccx1_unknown,
53712 {"Unknown", "wlan.cisco.ccx1.unknown",
53713 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53715
53716 {&hf_ieee80211_tag_cisco_ccx1_name,
53717 {"Name", "wlan.cisco.ccx1.name",
53718 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53720
53721 {&hf_ieee80211_tag_cisco_ccx1_clients,
53722 {"Clients", "wlan.cisco.ccx1.clients",
53723 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53725
53726 {&hf_ieee80211_tag_cisco_ccx1_unknown2,
53727 {"Unknown2", "wlan.cisco.ccx1.unknown2",
53728 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53730
53731 {&hf_ieee80211_tag_neighbor_report_bssid,
53732 {"BSSID", "wlan.nreport.bssid",
53733 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
53734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53735
53736 {&hf_ieee80211_tag_neighbor_report_bssid_info,
53737 {"BSSID Information", "wlan.nreport.bssid.info",
53738 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
53739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53740
53741 {&hf_ieee80211_tag_neighbor_report_bssid_info_reachability,
53742 {"AP Reachability", "wlan.nreport.bssid.info.reachability",
53743 FT_UINT32, BASE_HEX, VALS(ieee80211_neighbor_report_bssid_info_reachability_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_neighbor_report_bssid_info_reachability_vals
))))
, 0x00000003,
53744 "Indicates whether the AP identified by this BSSID is reachable by the STA that requested the neighbor report", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53745
53746 {&hf_ieee80211_tag_neighbor_report_bssid_info_security,
53747 {"Security", "wlan.nreport.bssid.info.security",
53748 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004,
53749 "Indicates that the AP identified by this BSSID supports the same security provisioning as used by the STA in its current association", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53750
53751 {&hf_ieee80211_tag_neighbor_report_bssid_info_key_scope,
53752 {"Key Scope", "wlan.nreport.bssid.info.keyscope",
53753 FT_BOOLEAN, 32, NULL((void*)0), 0x00000008,
53754 "indicates the AP indicated by this BSSID has the same authenticator as the AP sending the report", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53755
53756 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability,
53757 {"Capability", "wlan.nreport.bssid.info.capability",
53758 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000003F0,
53759 "Contains selected capability information for the AP indicated by this BSSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53760
53761 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng,
53762 {"Spectrum Management", "wlan.nreport.bssid.info.capability.specmngt",
53763 FT_BOOLEAN, 32, NULL((void*)0), 0x00000010,
53764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53765
53766 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos,
53767 {"QoS", "wlan.nreport.bssid.info.capability.qos",
53768 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
53769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53770
53771 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd,
53772 {"APSD", "wlan.nreport.bssid.info.capability.apsd",
53773 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
53774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53775
53776 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt,
53777 {"Radio Measurement", "wlan.nreport.bssid.info.capability.radiomsnt",
53778 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
53779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53780
53781 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4,
53782 {"Reserved", "wlan.nreport.bssid.info.capability.reserved_b4",
53783 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
53784 "Was Delayed Block Ack until 802.11-2016", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53785
53786 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5,
53787 {"Reserved", "wlan.nreport.bssid.info.capability.reserved_b5",
53788 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
53789 "Was Immediate Block Ack until 802.11-2016", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53790
53791 {&hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain,
53792 {"Mobility Domain", "wlan.nreport.bssid.info.mobilitydomain",
53793 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
53794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53795
53796 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput,
53797 {"High Throughput (HT AP)", "wlan.nreport.bssid.info.hthroughput",
53798 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800,
53799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53800
53801 {&hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput,
53802 {"Very High Throughput (VHT AP)", "wlan.nreport.bssid.info.vht",
53803 FT_BOOLEAN, 32, NULL((void*)0), 0x00001000,
53804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53805
53806 {&hf_ieee80211_tag_neighbor_report_bssid_info_ftm,
53807 {"Fine Timing Measurement (FTM)", "wlan.nreport.bssid.info.ftm",
53808 FT_BOOLEAN, 32, NULL((void*)0), 0x00002000,
53809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53810
53811 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency,
53812 {"High Efficiency (HE AP)", "wlan.nreport.bssid.info.he",
53813 FT_BOOLEAN, 32, NULL((void*)0), 0x00004000,
53814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53815
53816 {&hf_ieee80211_tag_neighbor_report_bssid_info_er_bss,
53817 {"Extended Range BSS", "wlan.nreport.bssid.info.er_bss",
53818 FT_BOOLEAN, 32, NULL((void*)0), 0x00008000,
53819 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53820
53821 {&hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap,
53822 {"Co-Located AP", "wlan.nreport.bssid.info.colocated_ap",
53823 FT_BOOLEAN, 32, NULL((void*)0), 0x00010000,
53824 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53825
53826 {&hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active,
53827 {"Unsolicited Probe Responses Active", "wlan.nreport.bssid.info.unsolicited_probe_responses",
53828 FT_BOOLEAN, 32, NULL((void*)0), 0x00020000,
53829 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53830
53831 {&hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap,
53832 {"Members Of ESS With 2.4/5 GHz Co-Located AP", "wlan.nreport.bssid.info.member_of_ess_with_2p4_5_ghz_colocated_ap",
53833 FT_BOOLEAN, 32, NULL((void*)0), 0x00040000,
53834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53835
53836 {&hf_ieee80211_tag_neighbor_report_bssid_info_oct_supported_with_reporting_ap,
53837 {"OCT Supported With Reporting AP", "wlan.nreport.bssid.info.oct_supported_with_reporting_ap",
53838 FT_BOOLEAN, 32, NULL((void*)0), 0x00080000,
53839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53840
53841 {&hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap,
53842 {"Co-Located With 6 GHz AP", "wlan.nreport.bssid.info.colocated_6ghz_ap",
53843 FT_BOOLEAN, 32, NULL((void*)0), 0x00100000,
53844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53845
53846 {&hf_ieee80211_tag_neighbor_report_bssid_info_eht,
53847 {"Extremely High Throughput (EHT AP)", "wlan.nreport.bssid.info.eht",
53848 FT_BOOLEAN, 32, NULL((void*)0), 0x00200000,
53849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53850
53851 {&hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning,
53852 {"DMG Positioning", "wlan.nreport.bssid.info.dmg_positioning",
53853 FT_BOOLEAN, 32, NULL((void*)0), 0x00400000,
53854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53855
53856 {&hf_ieee80211_tag_neighbor_report_bssid_info_reserved,
53857 {"Reserved", "wlan.nreport.bssid.info.reserved",
53858 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFF800000,
53859 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53860
53861 {&hf_ieee80211_tag_neighbor_report_ope_class,
53862 {"Operating Class", "wlan.nreport.opeclass",
53863 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))), 0,
53864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53865
53866 {&hf_ieee80211_tag_neighbor_report_channel_number,
53867 {"Channel Number", "wlan.nreport.channumber",
53868 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53870
53871 {&hf_ieee80211_tag_neighbor_report_phy_type,
53872 {"PHY Type", "wlan.nreport.phytype",
53873 FT_UINT8, BASE_DEC, VALS(phy_type_vals)((0 ? (const struct _value_string*)0 : ((phy_type_vals)))), 0,
53874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53875
53876 {&hf_ieee80211_tag_neighbor_report_subelement_id,
53877 {"ID", "wlan.nreport.subelem.id",
53878 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53880
53881 {&hf_ieee80211_tag_neighbor_report_subelement_length,
53882 {"Length", "wlan.nreport.subelem.len",
53883 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53885
53886 {&hf_ieee80211_tag_neighbor_report_subelement_data,
53887 {"Data", "wlan.nreport.subelem.data",
53888 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53890
53891 {&hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref,
53892 {"Preference", "wlan.nreport.subelem.bss_trn_can_pref",
53893 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53895
53896 {&hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf,
53897 {"BSS Termination TSF", "wlan.nreport.subelem.bss_ter_tsf",
53898 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
53899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53900
53901 {&hf_ieee80211_tag_neighbor_report_subelement_bss_dur,
53902 {"Duration", "wlan.nreport.subelem.bss_dur",
53903 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_minutes)((0 ? (const struct unit_name_string*)0 : ((&units_minutes
))))
, 0,
53904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53905
53906 {&hf_ieee80211_tag_neighbor_report_subelement_tsf_offset,
53907 {"TSF Offset", "wlan.nreport.subelem.tsf_offset",
53908 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53909 "TSF Offset in TU units", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
53910
53911 {&hf_ieee80211_tag_neighbor_report_subelement_beacon_interval,
53912 {"Beacon Interval", "wlan.nreport.subelem.beacon_interval",
53913 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53914 "Beacon Interval in TUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
53915
53916 {&hf_ieee80211_tag_neighbor_report_subelement_country_code,
53917 {"Country Code", "wlan.nreport.subelem.country_code",
53918 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
53919 "ISO 3166-1 Alpha-2 Country Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53920
53921 {&hf_ieee80211_tag_supported_ope_classes_current,
53922 {"Current Operating Class", "wlan.supopeclass.current",
53923 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))), 0,
53924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53925
53926 {&hf_ieee80211_tag_supported_ope_classes_alternate,
53927 {"Alternate Operating Classes", "wlan.supopeclass.alt",
53928 FT_NONE, BASE_NONE, NULL((void*)0), 0,
53929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53930
53931 {&hf_ieee80211_wfa_ie_type,
53932 {"Type", "wlan.wfa.ie.type",
53933 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals)((0 ? (const struct _value_string*)0 : ((ieee802111_wfa_ie_type_vals
))))
, 0,
53934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53935
53936 {&hf_ieee80211_wfa_ie_wpa_version,
53937 {"WPA Version", "wlan.wfa.ie.wpa.version",
53938 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53940
53941 {&hf_ieee80211_wfa_ie_wpa_mcs,
53942 {"Multicast Cipher Suite", "wlan.wfa.ie.wpa.mcs",
53943 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_mcs_base_custom)((const void *) (size_t) (wpa_mcs_base_custom)), 0,
53944 "Contains the cipher suite selector used by the BSS to protect broadcast/multicasttraffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53945
53946 {&hf_ieee80211_wfa_ie_wpa_mcs_oui,
53947 {"Multicast Cipher Suite OUI", "wlan.wfa.ie.wpa.mcs.oui",
53948 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
53949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53950
53951 {&hf_ieee80211_wfa_ie_wpa_mcs_type,
53952 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
53953 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53955
53956 {&hf_ieee80211_wfa_ie_wpa_mcs_wfa_type,
53957 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
53958 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_cipher_vals
))))
, 0,
53959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53960
53961 {&hf_ieee80211_wfa_ie_wpa_ucs_count,
53962 {"Unicast Cipher Suite Count", "wlan.wfa.ie.wpa.ucs.count",
53963 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53964 "Indicates the number of pairwise cipher suite selectors that are contained in the Unicast Cipher Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53965
53966 {&hf_ieee80211_wfa_ie_wpa_ucs_list,
53967 {"Unicast Cipher Suite List", "wlan.wfa.ie.wpa.ucs.list",
53968 FT_NONE, BASE_NONE, NULL((void*)0), 0,
53969 "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53970
53971 {&hf_ieee80211_wfa_ie_wpa_ucs,
53972 {"Unicast Cipher Suite", "wlan.wfa.ie.wpa.ucs",
53973 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_ucs_base_custom)((const void *) (size_t) (wpa_ucs_base_custom)), 0,
53974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53975
53976 {&hf_ieee80211_wfa_ie_wpa_ucs_oui,
53977 {"Unicast Cipher Suite OUI", "wlan.wfa.ie.wpa.ucs.oui",
53978 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
53979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53980
53981 {&hf_ieee80211_wfa_ie_wpa_ucs_type,
53982 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
53983 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53985
53986 {&hf_ieee80211_wfa_ie_wpa_ucs_wfa_type,
53987 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
53988 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_cipher_vals
))))
, 0,
53989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53990
53991 {&hf_ieee80211_wfa_ie_wpa_akms_count,
53992 {"Auth Key Management (AKM) Suite Count", "wlan.wfa.ie.wpa.akms.count",
53993 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53994 "Indicates the number of Auth Key Management suite selectors that are contained in the Auth Key Management Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53995
53996 {&hf_ieee80211_wfa_ie_wpa_akms_list,
53997 {"Auth Key Management (AKM) List", "wlan.wfa.ie.wpa.akms.list",
53998 FT_NONE, BASE_NONE, NULL((void*)0), 0,
53999 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54000
54001 {&hf_ieee80211_wfa_ie_wpa_akms,
54002 {"Auth Key Management (AKM) Suite", "wlan.wfa.ie.wpa.akms",
54003 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_akms_base_custom)((const void *) (size_t) (wpa_akms_base_custom)), 0,
54004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54005
54006 {&hf_ieee80211_wfa_ie_wpa_akms_oui,
54007 {"Auth Key Management (AKM) OUI", "wlan.wfa.ie.wpa.akms.oui",
54008 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
54009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54010
54011 {&hf_ieee80211_wfa_ie_wpa_akms_type,
54012 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.akms.type",
54013 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54015
54016 {&hf_ieee80211_wfa_ie_wpa_akms_wfa_type,
54017 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.akms.type",
54018 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_keymgmt_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_keymgmt_vals
))))
, 0,
54019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54020
54021 {&hf_ieee80211_wfa_ie_wme_subtype,
54022 {"WME Subtype", "wlan.wfa.ie.wme.subtype",
54023 FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type)((0 ? (const struct _value_string*)0 : ((ieee802111_wfa_ie_wme_type
))))
, 0,
54024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54025
54026 {&hf_ieee80211_wfa_ie_wme_version,
54027 {"WME Version", "wlan.wfa.ie.wme.version",
54028 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54030
54031 {&hf_ieee80211_wfa_ie_wme_qos_info,
54032 {"WME QoS Info", "wlan.wfa.ie.wme.qos_info",
54033 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54035
54036 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
54037 {"Max SP Length", "wlan.wfa.ie.wme.qos_info.sta.max_sp_length",
54038 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals)((0 ? (const struct _value_string*)0 : ((ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals
))))
, 0x60,
54039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54040
54041 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
54042 {"AC_BE", "wlan.wfa.ie.wme.qos_info.sta.ac_be",
54043 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs)((0 ? (const struct true_false_string*)0 : ((&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs
))))
, 0x08,
54044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54045
54046 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
54047 {"AC_BK", "wlan.wfa.ie.wme.qos_info.sta.ac_bk",
54048 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs)((0 ? (const struct true_false_string*)0 : ((&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs
))))
, 0x04,
54049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54050
54051 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
54052 {"AC_VI", "wlan.wfa.ie.wme.qos_info.sta.ac_vi",
54053 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs)((0 ? (const struct true_false_string*)0 : ((&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs
))))
, 0x02,
54054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54055
54056 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
54057 {"AC_VO", "wlan.wfa.ie.wme.qos_info.sta.ac_vo",
54058 FT_BOOLEAN, 8, TFS(&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs)((0 ? (const struct true_false_string*)0 : ((&ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs
))))
, 0x01,
54059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54060
54061 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
54062 {"Reserved", "wlan.wfa.ie.wme.qos_info.sta.reserved",
54063 FT_UINT8, BASE_HEX, NULL((void*)0), 0x90,
54064 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54065
54066 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
54067 {"U-APSD", "wlan.wfa.ie.wme.qos_info.ap.u_apsd",
54068 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
54069 "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54070
54071 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
54072 {"Parameter Set Count", "wlan.wfa.ie.wme.qos_info.ap.parameter_set_count",
54073 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F,
54074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54075
54076 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
54077 {"Reserved", "wlan.wfa.ie.wme.qos_info.ap.reserved",
54078 FT_UINT8, BASE_HEX, NULL((void*)0), 0x70,
54079 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54080
54081 {&hf_ieee80211_wfa_ie_wme_reserved,
54082 {"Reserved", "wlan.wfa.ie.wme.reserved",
54083 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54084 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54085
54086 {&hf_ieee80211_wfa_ie_wme_ac_parameters,
54087 {"Ac Parameters", "wlan.wfa.ie.wme.acp",
54088 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54090
54091 {&hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
54092 {"ACI / AIFSN Field", "wlan.wfa.ie.wme.acp.aci_aifsn",
54093 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54095
54096 {&hf_ieee80211_wfa_ie_wme_acp_aci_be,
54097 {"ACI", "wlan.wfa.ie.wme.acp.aci_be",
54098 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54100
54101 {&hf_ieee80211_wfa_ie_wme_acp_aci_bk,
54102 {"ACI", "wlan.wfa.ie.wme.acp.aci_bk",
54103 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54105
54106 {&hf_ieee80211_wfa_ie_wme_acp_aci_vi,
54107 {"ACI", "wlan.wfa.ie.wme.acp.aci_vi",
54108 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54110
54111 {&hf_ieee80211_wfa_ie_wme_acp_aci_vo,
54112 {"ACI", "wlan.wfa.ie.wme.acp.aci_vo",
54113 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54115
54116 {&hf_ieee80211_wfa_ie_wme_acp_acm_be,
54117 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_be",
54118 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54120
54121 {&hf_ieee80211_wfa_ie_wme_acp_acm_bk,
54122 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_bk",
54123 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54125
54126 {&hf_ieee80211_wfa_ie_wme_acp_acm_vi,
54127 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_vi",
54128 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54130
54131 {&hf_ieee80211_wfa_ie_wme_acp_acm_vo,
54132 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_vo",
54133 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54135
54136 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_be,
54137 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_be",
54138 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54140
54141 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_bk,
54142 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_bk",
54143 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54145
54146 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_vi,
54147 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_vi",
54148 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54150
54151 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_vo,
54152 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_vo",
54153 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54155
54156 {&hf_ieee80211_wfa_ie_wme_acp_reserved_be,
54157 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_be",
54158 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54159 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54160
54161 {&hf_ieee80211_wfa_ie_wme_acp_reserved_bk,
54162 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_bk",
54163 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54164 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54165
54166 {&hf_ieee80211_wfa_ie_wme_acp_reserved_vi,
54167 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_vi",
54168 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54169 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54170
54171 {&hf_ieee80211_wfa_ie_wme_acp_reserved_vo,
54172 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_vo",
54173 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54174 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54175
54176 {&hf_ieee80211_wfa_ie_wme_acp_ecw,
54177 {"ECW", "wlan.wfa.ie.wme.acp.ecw",
54178 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00,
54179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54180
54181 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_be,
54182 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_be",
54183 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54185
54186 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk,
54187 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_bk",
54188 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54190
54191 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo,
54192 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_vo",
54193 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54194 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54195
54196 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi,
54197 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_vi",
54198 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54199 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54200
54201 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_be,
54202 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_be",
54203 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54204 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54205
54206 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk,
54207 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_bk",
54208 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54209 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54210
54211 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo,
54212 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_vo",
54213 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54214 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54215
54216 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi,
54217 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_vi",
54218 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54219 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54220
54221 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_be,
54222 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_be",
54223 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54224 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54225
54226 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk,
54227 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_bk",
54228 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54229 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54230
54231 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo,
54232 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_vo",
54233 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54235
54236 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi,
54237 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_vi",
54238 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54239 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54240
54241 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
54242 {"TS Info", "wlan.wfa.ie.wme.tspec.ts_info",
54243 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
54244 "Traffic Stream (TS) Info", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54245
54246 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
54247 {"TID", "wlan.wfa.ie.wme.tspec.ts_info.tid",
54248 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00001E,
54249 "Traffic Stream Info ID (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54250
54251 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
54252 {"Direction", "wlan.wfa.ie.wme.tspec.ts_info.dir",
54253 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals
))))
, 0x000060,
54254 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54255
54256 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
54257 {"PSB", "wlan.wfa.ie.wme.tspec.ts_info.psb",
54258 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals
))))
, 0x000400,
54259 "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54260
54261 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
54262 {"UP", "wlan.wfa.ie.wme.tspec.ts_info.up",
54263 FT_UINT24, BASE_DEC, VALS(ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals
))))
, 0x003800,
54264 "Traffic Stream (TS) Info User Priority (UP)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54265
54266 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
54267 {"Reserved", "wlan.wfa.ie.wme.tspec.ts_info.reserved",
54268 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFC381,
54269 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54270
54271 {&hf_ieee80211_wfa_ie_wme_tspec_nor_msdu,
54272 {"Normal MSDU Size", "wlan.wfa.ie.wme.tspec.nor_msdu",
54273 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54274 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54275
54276 {&hf_ieee80211_wfa_ie_wme_tspec_max_msdu,
54277 {"Maximum MSDU Size", "wlan.wfa.ie.wme.tspec.max_msdu",
54278 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54280
54281 {&hf_ieee80211_wfa_ie_wme_tspec_min_srv,
54282 {"Minimum Service Interval", "wlan.wfa.ie.wme.tspec.min_srv",
54283 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54285
54286 {&hf_ieee80211_wfa_ie_wme_tspec_max_srv,
54287 {"Maximum Service Interval", "wlan.wfa.ie.wme.tspec.max_srv",
54288 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54290
54291 {&hf_ieee80211_wfa_ie_wme_tspec_inact_int,
54292 {"Inactivity Interval", "wlan.wfa.ie.wme.tspec.inact_int",
54293 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54295
54296 {&hf_ieee80211_wfa_ie_wme_tspec_susp_int,
54297 {"Suspension Interval", "wlan.wfa.ie.wme.tspec.susp_int",
54298 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54300
54301 {&hf_ieee80211_wfa_ie_wme_tspec_srv_start,
54302 {"Service Start Time", "wlan.wfa.ie.wme.tspec.srv_start",
54303 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54304 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54305
54306 {&hf_ieee80211_wfa_ie_wme_tspec_min_data,
54307 {"Minimum Data Rate", "wlan.wfa.ie.wme.tspec.min_data",
54308 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54309 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54310
54311 {&hf_ieee80211_wfa_ie_wme_tspec_mean_data,
54312 {"Mean Data Rate", "wlan.wfa.ie.wme.tspec.mean_data",
54313 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54314 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54315
54316 {&hf_ieee80211_wfa_ie_wme_tspec_peak_data,
54317 {"Peak Data Rate", "wlan.wfa.ie.wme.tspec.peak_data",
54318 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54319 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54320
54321 {&hf_ieee80211_wfa_ie_wme_tspec_burst_size,
54322 {"Burst Size", "wlan.wfa.ie.wme.tspec.burst_size",
54323 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54324 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54325
54326 {&hf_ieee80211_wfa_ie_wme_tspec_delay_bound,
54327 {"Delay Bound", "wlan.wfa.ie.wme.tspec.delay_bound",
54328 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54329 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54330
54331 {&hf_ieee80211_wfa_ie_wme_tspec_min_phy,
54332 {"Minimum PHY Rate", "wlan.wfa.ie.wme.tspec.min_phy",
54333 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54334 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54335
54336 {&hf_ieee80211_wfa_ie_wme_tspec_surplus,
54337 {"Surplus Bandwidth Allowance", "wlan.wfa.ie.wme.tspec.surplus",
54338 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54339 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54340
54341 {&hf_ieee80211_wfa_ie_wme_tspec_medium,
54342 {"Medium Time", "wlan.wfa.ie.wme.tspec.medium",
54343 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54345
54346 {&hf_ieee80211_wfa_ie_nc_cost_level,
54347 {"Cost Level", "wlan.wfa.ie.nc.cost_level",
54348 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_nc_cost_level_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_nc_cost_level_vals
))))
, 0,
54349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54350
54351 {&hf_ieee80211_wfa_ie_nc_reserved,
54352 {"Reserved", "wlan.wfa.ie.nc.reserved",
54353 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54354 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54355
54356 {&hf_ieee80211_wfa_ie_nc_cost_flags,
54357 {"Cost Flags", "wlan.wfa.ie.nc.cost_flags",
54358 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_nc_cost_flags_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_nc_cost_flags_vals
))))
, 0,
54359 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54360
54361 {&hf_ieee80211_wfa_ie_tethering_type,
54362 {"Type", "wlan.wfa.ie.tethering.type",
54363 FT_UINT16, BASE_DEC, VALS(ieee80211_wfa_ie_tethering_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_tethering_type_vals
))))
, 0,
54364 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54365
54366 {&hf_ieee80211_wfa_ie_tethering_mac_length,
54367 {"MAC Length", "wlan.wfa.ie.tethering.mac_length",
54368 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54369 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54370
54371 {&hf_ieee80211_wfa_ie_tethering_mac,
54372 {"MAC Address", "wlan.wfa.ie.tethering.mac",
54373 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54374 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54375
54376 {&hf_ieee80211_wfa_ie_owe_bssid,
54377 {"BSSID", "wlan.wfa.ie.owe.bssid",
54378 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54380
54381 {&hf_ieee80211_wfa_ie_owe_ssid_length,
54382 {"SSID length", "wlan.wfa.ie.owe.ssid_length",
54383 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54385
54386 {&hf_ieee80211_wfa_ie_owe_ssid,
54387 {"SSID", "wlan.wfa.ie.owe.ssid",
54388 FT_STRING, BASE_NONE, NULL((void*)0), 0,
54389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54390
54391 {&hf_ieee80211_wfa_ie_owe_band_info,
54392 {"Band info", "wlan.wfa.ie.owe.band_info",
54393 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54395
54396 {&hf_ieee80211_wfa_ie_owe_channel_info,
54397 {"Channel info", "wlan.wfa.ie.owe.channel_info",
54398 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54400
54401 {&hf_ieee80211_wfa_ie_mbo_oce_attr,
54402 {"MBO/OCE attribute", "wlan.wfa.ie.mbo_oce.attr",
54403 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54404
54405 {&hf_ieee80211_wfa_ie_mbo_oce_attr_id,
54406 {"ID", "wlan.wfa.ie.mbo_oce.attr_id",
54407 FT_UINT8, BASE_DEC, VALS(wfa_mbo_oce_attr_id_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_oce_attr_id_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54408
54409 {&hf_ieee80211_wfa_ie_mbo_oce_attr_len,
54410 {"Length", "wlan.wfa.ie.mbo_oce.attr_len",
54411 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54412
54413 {&hf_ieee80211_wfa_ie_mbo_ap_cap,
54414 {"MBO Capability Indication", "wlan.wfa.ie.mbo_oce.ap_cap",
54415 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54416
54417 {&hf_ieee80211_wfa_ie_mbo_ap_cap_cell,
54418 {"AP is cellular data aware", "wlan.wfa.ie.mbo.ap_cap.cell",
54419 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54420
54421 {&hf_ieee80211_wfa_ie_mbo_ap_cap_reserved,
54422 {"Reserved", "wlan.wfa.ie.mbo.ap_cap.reserved",
54423 FT_UINT8, BASE_HEX, NULL((void*)0), 0xBF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54424
54425 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class,
54426 {"Operating Class", "wlan.wfa.ie.mbo.non_pref_chan.op_class",
54427 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54428
54429 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan,
54430 {"Channel", "wlan.wfa.ie.mbo.non_pref_chan.chan",
54431 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54432
54433 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref,
54434 {"Preference", "wlan.wfa.ie.mbo.non_pref_chan.pref",
54435 FT_UINT8, BASE_DEC, VALS(wfa_mbo_non_pref_chan_pref_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_non_pref_chan_pref_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54436
54437 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason,
54438 {"Reason Code", "wlan.wfa.ie.mbo.non_pref_chan.reason",
54439 FT_UINT8, BASE_DEC, VALS(wfa_mbo_non_pref_chan_reason_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_non_pref_chan_reason_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54440
54441 {&hf_ieee80211_wfa_ie_mbo_cellular_cap,
54442 {"Cellular Data Connectivity", "wlan.wfa.ie.mbo.cellular_cap",
54443 FT_UINT8, BASE_DEC, VALS(wfa_mbo_cellular_cap_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_cellular_cap_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54444
54445 {&hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason,
54446 {"Reason Code", "wlan.wfa.ie.mbo.assoc_disallow.reason",
54447 FT_UINT8, BASE_DEC, VALS(wfa_mbo_assoc_disallow_reason_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_assoc_disallow_reason_vals
))))
,
54448 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54449
54450 {&hf_ieee80211_wfa_ie_mbo_cellular_pref,
54451 {"Cellular Data Preference", "wlan.wfa.ie.mbo.cellular_pref",
54452 FT_UINT8, BASE_DEC, VALS(wfa_mbo_cellular_pref_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_cellular_pref_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54453
54454 {&hf_ieee80211_wfa_ie_mbo_transition_reason,
54455 {"Transition Reason Code", "wlan.wfa.ie.mbo.transition.reason",
54456 FT_UINT8, BASE_DEC, VALS(wfa_mbo_transition_reason_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_transition_reason_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54457
54458 {&hf_ieee80211_wfa_ie_mbo_transition_rej_reason,
54459 {"Transition Rejection Reason Code", "wlan.wfa.ie.mbo.transition_rej.reason",
54460 FT_UINT8, BASE_DEC, VALS(wfa_mbo_transition_rej_reason_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_transition_rej_reason_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54461
54462 {&hf_ieee80211_wfa_ie_mbo_assoc_retry_delay,
54463 {"Re-association Delay", "wlan.wfa.ie.mbo.assoc_retry.delay",
54464 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_seconds)((0 ? (const struct unit_name_string*)0 : ((&units_seconds
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54465
54466 {&hf_ieee80211_wfa_ie_oce_cap_ctrl,
54467 {"OCE Control", "wlan.wfa.ie.oce.cap.ctrl",
54468 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54469
54470 {&hf_ieee80211_wfa_ie_oce_cap_release,
54471 {"OCE Release", "wlan.wfa.ie.oce.cap.release",
54472 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54473
54474 {&hf_ieee80211_wfa_ie_oce_cap_sta_cfon,
54475 {"is STA CFON", "wlan.wfa.ie.oce.cap.sta_cfon",
54476 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x4, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54477
54478 {&hf_ieee80211_wfa_ie_oce_cap_11b_only_ap,
54479 {"11b only AP present on operating channel", "wlan.wfa.ie.oce.cap.11b_only_ap",
54480 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54481
54482 {&hf_ieee80211_wfa_ie_oce_cap_hlp,
54483 {"FILS Higher Layer Setup with Higher Layer Protocol Encapsulation enabled",
54484 "wlan.wfa.ie.oce.cap.hlp", FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54485
54486 {&hf_ieee80211_wfa_ie_oce_cap_non_oce_ap,
54487 {"non OCE AP present on operating channel", "wlan.wfa.ie.oce.cap.non_oce_ap",
54488 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54489
54490 {&hf_ieee80211_wfa_ie_oce_cap_reserved,
54491 {"Reserved", "wlan.wfa.ie.oce.cap.reserved",
54492 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54493
54494 {&hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta,
54495 {"Delta RSSI", "wlan.wfa.ie.oce.rssi_assoc_rej.delta",
54496 FT_UINT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_decibels)((0 ? (const struct unit_name_string*)0 : ((&units_decibels
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54497
54498 {&hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay,
54499 {"Retry Delay", "wlan.wfa.ie.oce.rssi_assoc_rej.delay",
54500 FT_UINT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_seconds)((0 ? (const struct unit_name_string*)0 : ((&units_seconds
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54501
54502 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap,
54503 {"Available Capacity", "wlan.wfa.ie.oce.wan_metrics.avail_cap",
54504 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54505
54506 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink,
54507 {"Downlink", "wlan.wfa.ie.oce.wan_metrics.avail_cap_downlink",
54508 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54509
54510 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink,
54511 {"Uplink", "wlan.wfa.ie.oce.wan_metrics.avail_cap_uplink",
54512 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54513
54514 {&hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid,
54515 {"Short SSID", "wlan.wfa.ie.oce.rnr_completeness.short_ssid",
54516 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54517
54518 {&hf_ieee80211_wfa_ie_oce_probe_suppr_bssid,
54519 {"BSSID", "wlan.wfa.ie.oce.probe_suppr.bssid",
54520 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54521
54522 {&hf_ieee80211_wfa_ie_oce_probe_suppr_ssid,
54523 {"SSID", "wlan.wfa.ie.oce.probe_suppr.ssid",
54524 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54525
54526 {&hf_ieee80211_wfa_anqp_mbo_subtype,
54527 {"Subtype", "wlan.wfa.anqp.mbo.subtype",
54528 FT_UINT8, BASE_DEC, VALS(mbo_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((mbo_anqp_subtype_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54529
54530 {&hf_ieee80211_wfa_anqp_mbo_query,
54531 {"Query Subtype", "wlan.wfa.anqp.mbo.query",
54532 FT_UINT8, BASE_DEC, VALS(mbo_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((mbo_anqp_subtype_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54533
54534 {&hf_ieee80211_wfa_anqp_mbo_cellular_pref,
54535 {"Cellular Data Preference", "wlan.wfa.anqp.mbo.cellular_pref",
54536 FT_UINT8, BASE_DEC, VALS(wfa_mbo_cellular_pref_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_cellular_pref_vals
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54537
54538 {&hf_ieee80211_rsn_ie_ptk_keyid,
54539 {"KeyID", "wlan.rsn.ie.ptk.keyid",
54540 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
54541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54542
54543 {&hf_ieee80211_rsn_ie_pmkid,
54544 {"PMKID", "wlan.rsn.ie.pmkid",
54545 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54547
54548 {&hf_ieee80211_rsn_ie_gtk_kde_data_type,
54549 {"Data Type", "wlan.rsn.ie.data_type",
54550 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(kde_selectors_rvals)((0 ? (const struct _range_string*)0 : ((kde_selectors_rvals)
)))
,
54551 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54552
54553 {&hf_ieee80211_rsn_ie_gtk_kde_key_id,
54554 {"Key ID", "wlan.rsn.ie.gtk_kde.key_id",
54555 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54556
54557 {&hf_ieee80211_rsn_ie_gtk_kde_tx,
54558 {"Tx", "wlan.rsn.ie.gtk_kde.tx",
54559 FT_BOOLEAN, 8, TFS(&tfs_rsn_gtk_kde_tx)((0 ? (const struct true_false_string*)0 : ((&tfs_rsn_gtk_kde_tx
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54560
54561 {&hf_ieee80211_rsn_ie_gtk_kde_reserved1,
54562 {"Reserved", "wlan.rsn.ie.gtk_kde.res1",
54563 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54564
54565 {&hf_ieee80211_rsn_ie_gtk_kde_reserved2,
54566 {"Reserved", "wlan.rsn.ie.gtk_kde.res2",
54567 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54568
54569 {&hf_ieee80211_rsn_ie_gtk_kde_gtk,
54570 {"GTK", "wlan.rsn.ie.gtk_kde.gtk",
54571 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54572
54573 {&hf_ieee80211_rsn_ie_mac_address_kde_mac,
54574 {"MAC Address", "wlan.rsn.ie.mac_address_kde.mac_address",
54575 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54576
54577 {&hf_ieee80211_rsn_ie_gtk_kde_nonce,
54578 {"Key Nonce", "wlan.rsn.ie.key_nonce_kde.nonce",
54579 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54580
54581 {&hf_ieee80211_rsn_ie_gtk_kde_lifetime,
54582 {"Key Lifetime", "wlan.rsn.ie.key_lifetime_kde.lifetime",
54583 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_seconds)((0 ? (const struct unit_name_string*)0 : ((&units_seconds
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54584
54585 {&hf_ieee80211_rsn_ie_error_kde_res,
54586 {"Reserved", "wlan.rsn.ie.error_kde.reserved",
54587 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54588
54589 {&hf_ieee80211_rsn_ie_error_kde_error_type,
54590 {"Error Type", "wlan.rsn.ie.error_kde.error_type",
54591 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54592
54593 {&hf_ieee80211_rsn_ie_igtk_kde_keyid,
54594 {"KeyId", "wlan.rsn.ie.igtk.kde.keyid",
54595 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54597
54598 {&hf_ieee80211_rsn_ie_igtk_kde_ipn,
54599 {"IPN", "wlan.rsn.ie.igtk.kde.ipn",
54600 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
54601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54602
54603 {&hf_ieee80211_rsn_ie_igtk_kde_igtk,
54604 {"IGTK", "wlan.rsn.ie.igtk.kde.igtk",
54605 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54607
54608 {&hf_ieee80211_rsn_ie_oci_operating_class,
54609 {"Operating Class", "wlan.rsn.ie.oci_kde.operating_class",
54610 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54611
54612 {&hf_ieee80211_rsn_ie_oci_primary_channel_number,
54613 {"Primary Channel Number", "wlan.rsn.ie.oci_kde.primary_channel_number",
54614 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54615
54616 {&hf_ieee80211_rsn_ie_oci_frequency_segment_1,
54617 {"Frequency Segment 1 Channel Number",
54618 "wlan.rsn.ie.oci_kde.frequency_segment_1_channel_number",
54619 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54620
54621 {&hf_ieee80211_rsn_ie_bigtk_key_id,
54622 {"Key ID", "wlan.rsn.ie.bigtk_kde.key_id",
54623 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54624
54625 {&hf_ieee80211_rsn_ie_bigtk_bipn,
54626 {"BIPN", "wlan.rsn.ie.bigtk_kde.bipn",
54627 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54628
54629 {&hf_ieee80211_rsn_ie_bigtk_bigtk,
54630 {"BIGTK", "wlan.rsn.ie.bigtk_kde.bigtk",
54631 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54632
54633 {&hf_ieee80211_rsn_ie_mlo_link_info,
54634 {"Link Information", "wlan.rsn.ie.mlo_link.link_info",
54635 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54636
54637 {&hf_ieee80211_rsn_ie_mlo_linkid,
54638 {"LinkID", "wlan.rsn.ie.mlo_link.link_info.linkid",
54639 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54640
54641 {&hf_ieee80211_rsn_ie_mlo_rnse_present,
54642 {"RSNEInfo", "wlan.rsn.ie.mlo_link.link_info.rsneinfo",
54643 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54644
54645 {&hf_ieee80211_rsn_ie_mlo_rnsxe_present,
54646 {"RSNXEInfo", "wlan.rsn.ie.mlo_link.link_info.rsnxeinfo",
54647 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54648
54649 {&hf_ieee80211_rsn_ie_mlo_reserved,
54650 {"Reserved", "wlan.rsn.ie.mlo_link.link_info.reserved",
54651 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54652
54653 {&hf_ieee80211_rsn_ie_mlo_mac_addr,
54654 {"MAC Address", "wlan.rsn.ie.mlo_link.mac_addr",
54655 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54656
54657 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id,
54658 {"Key ID", "wlan.rsn.ie.mlo_gtk.key_id",
54659 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54660
54661 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_tx,
54662 {"Tx", "wlan.rsn.ie.mlo_gtk.tx",
54663 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54664
54665 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved,
54666 {"Reserved", "wlan.rsn.ie.mlo_gtk.reserved",
54667 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54668
54669 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid,
54670 {"LinkID", "wlan.rsn.ie.mlo_gtk.linkid",
54671 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54672
54673 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_pn,
54674 {"PN", "wlan.rsn.ie.mlo_gtk.pn",
54675 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54676
54677 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk,
54678 {"GTK", "wlan.rsn.ie.mlo_gtk.gtk",
54679 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54680
54681 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id,
54682 {"Key ID", "wlan.rsn.ie.mlo_igtk.key_id",
54683 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54684
54685 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn,
54686 {"IPN", "wlan.rsn.ie.mlo_igtk.ipn",
54687 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54688
54689 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved,
54690 {"Reserved", "wlan.rsn.ie.mlo_igtk.reserved",
54691 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54692
54693 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid,
54694 {"LinkID", "wlan.rsn.ie.mlo_igtk.linkid",
54695 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54696
54697 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk,
54698 {"IGTK", "wlan.rsn.ie.mlo_igtk.igtk",
54699 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54700
54701 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id,
54702 {"Key ID", "wlan.rsn.ie.mlo_bigtk.key_id",
54703 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54704
54705 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn,
54706 {"IPN", "wlan.rsn.ie.mlo_bigtk.ipn",
54707 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54708
54709 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved,
54710 {"Reserved", "wlan.rsn.ie.mlo_bigtk.reserved",
54711 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54712
54713 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid,
54714 {"LinkID", "wlan.rsn.ie.mlo_bigtk.linkid",
54715 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54716
54717 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk,
54718 {"BIGTK", "wlan.rsn.ie.mlo_bigtk.bigtk",
54719 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54720
54721 {&hf_ieee80211_rsn_ie_unknown,
54722 {"RSN Unknown", "wlan.rsn.ie.unknown",
54723 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54725
54726 {&hf_ieee80211_marvell_ie_type,
54727 {"Type", "wlan.marvell.ie.type",
54728 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54730
54731 {&hf_ieee80211_marvell_ie_mesh_subtype,
54732 {"Subtype", "wlan.marvell.ie.subtype",
54733 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54735
54736 {&hf_ieee80211_marvell_ie_mesh_version,
54737 {"Version", "wlan.marvell.ie.version",
54738 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54740
54741 {&hf_ieee80211_marvell_ie_mesh_active_proto_id,
54742 {"Path Selection Protocol", "wlan.marvell.ie.proto_id",
54743 FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes)((0 ? (const struct _value_string*)0 : ((mesh_path_selection_codes
))))
, 0,
54744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54745
54746 {&hf_ieee80211_marvell_ie_mesh_active_metric_id,
54747 {"Path Selection Metric", "wlan.marvell.ie.metric_id",
54748 FT_UINT8, BASE_HEX, VALS(mesh_metric_codes)((0 ? (const struct _value_string*)0 : ((mesh_metric_codes)))
)
, 0,
54749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54750
54751 {&hf_ieee80211_marvell_ie_mesh_cap,
54752 {"Mesh Capabilities", "wlan.marvell.ie.cap",
54753 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54755
54756 {&hf_ieee80211_marvell_ie_data,
54757 { "Marvell IE data", "wlan.marvell.data",
54758 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
54759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54760
54761 {&hf_ieee80211_extreme_mesh_ie_type,
54762 { "Type", "wlan.extreme_mesh.ie.type",
54763 FT_UINT8, BASE_HEX, VALS(extreme_mesh_ie_type_vals)((0 ? (const struct _value_string*)0 : ((extreme_mesh_ie_type_vals
))))
, 0,
54764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54765 {&hf_ieee80211_extreme_mesh_ie_services,
54766 { "Services", "wlan.extreme_mesh.ie.services",
54767 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54768 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54769 {&hf_ieee80211_extreme_mesh_ie_hello_f_root,
54770 { "Root", "wlan.extreme_mesh.ie.services.root",
54771 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_ROOT,
54772 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54773 {&hf_ieee80211_extreme_mesh_ie_hello_f_proxy,
54774 { "Proxy", "wlan.extreme_mesh.ie.services.proxy",
54775 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_PROXY,
54776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54777 {&hf_ieee80211_extreme_mesh_ie_hello_f_geo,
54778 { "Geo", "wlan.extreme_mesh.ie.services.geo",
54779 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_GEO,
54780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54781 {&hf_ieee80211_extreme_mesh_ie_hello_f_path_pref,
54782 { "Path Preference", "wlan.extreme_mesh.ie.services.path_pref",
54783 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_PATH_PREF,
54784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54785 {&hf_ieee80211_extreme_mesh_ie_hello_f_mobile,
54786 { "Mobile", "wlan.extreme_mesh.ie.services.mobile",
54787 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_MOBILE,
54788 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54789 {&hf_ieee80211_extreme_mesh_ie_htr,
54790 { "Hops to Root", "wlan.extreme_mesh.ie.htr",
54791 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54793 {&hf_ieee80211_extreme_mesh_ie_mtr,
54794 { "Metric to Root", "wlan.extreme_mesh.ie.mtr",
54795 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
54796 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54797 {&hf_ieee80211_extreme_mesh_ie_root,
54798 { "Root Id", "wlan.extreme_mesh.ie.root",
54799 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54801 {&hf_ieee80211_extreme_mesh_ie_nh,
54802 { "Next Hop", "wlan.extreme_mesh.ie.nh",
54803 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54805 {&hf_ieee80211_extreme_mesh_ie_mesh_id,
54806 { "Mesh Id", "wlan.extreme_mesh.ie.mesh_id",
54807 FT_STRING, BASE_NONE, NULL((void*)0), 0,
54808 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54809 {&hf_ieee80211_extreme_mesh_ie_mp_id,
54810 { "Mesh Point Id", "wlan.extreme_mesh.ie.mp_id",
54811 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54812 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54813
54814 {&hf_ieee80211_atheros_ie_type,
54815 {"Type", "wlan.atheros.ie.type",
54816 FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals)((0 ? (const struct _value_string*)0 : ((atheros_ie_type_vals
))))
, 0,
54817 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54818
54819 {&hf_ieee80211_atheros_ie_subtype,
54820 {"Subtype", "wlan.atheros.ie.subtype",
54821 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54822 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54823
54824 {&hf_ieee80211_atheros_ie_version,
54825 {"Version", "wlan.atheros.ie.version",
54826 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54827 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54828
54829 {&hf_ieee80211_atheros_ie_cap_f_turbop,
54830 {"Turbo Prime", "wlan.ie.atheros.capabilities.turbop",
54831 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_TURBOP,
54832 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54833
54834 {&hf_ieee80211_atheros_ie_cap_f_comp,
54835 {"Compression", "wlan.ie.atheros.capabilities.comp",
54836 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_COMP,
54837 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54838
54839 {&hf_ieee80211_atheros_ie_cap_f_ff,
54840 {"Fast Frames", "wlan.ie.atheros.capabilities.ff",
54841 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_FF,
54842 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54843
54844 {&hf_ieee80211_atheros_ie_cap_f_xr,
54845 {"eXtended Range", "wlan.ie.atheros.capabilities.xr",
54846 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_XR,
54847 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54848
54849 {&hf_ieee80211_atheros_ie_cap_f_ar,
54850 {"Advanced Radar", "wlan.ie.atheros.capabilities.ar",
54851 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_AR,
54852 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54853
54854 {&hf_ieee80211_atheros_ie_cap_f_burst,
54855 {"Burst", "wlan.ie.atheros.capabilities.burst",
54856 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_BURST,
54857 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54858
54859 {&hf_ieee80211_atheros_ie_cap_f_wme,
54860 {"CWMin tuning", "wlan.ie.atheros.capabilities.wme",
54861 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_WME,
54862 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54863
54864 {&hf_ieee80211_atheros_ie_cap_f_boost,
54865 {"Boost", "wlan.ie.atheros.capabilities.boost",
54866 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_BOOST,
54867 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54868
54869 {&hf_ieee80211_atheros_ie_advcap_cap,
54870 {"Capabilities", "wlan.atheros.ie.advcap.cap",
54871 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54872 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54873
54874 {&hf_ieee80211_atheros_ie_advcap_defkey,
54875 {"Default key index", "wlan.atheros.ie.advcap.defkey",
54876 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
54877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54878
54879 {&hf_ieee80211_atheros_ie_xr_info,
54880 {"Info", "wlan.atheros.ie.xr.info",
54881 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54883
54884 {&hf_ieee80211_atheros_ie_xr_base_bssid,
54885 {"Base BSS Id", "wlan.atheros.ie.xr.base_bssid",
54886 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54888
54889 {&hf_ieee80211_atheros_ie_xr_xr_bssid,
54890 {"XR BSS Id", "wlan.atheros.ie.xr.xr_bssid",
54891 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54893
54894 {&hf_ieee80211_atheros_ie_xr_xr_beacon,
54895 {"XR Beacon Interval", "wlan.atheros.ie.xr.xr_beacon",
54896 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
54897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54898
54899 {&hf_ieee80211_atheros_ie_xr_base_cap,
54900 {"Base capabilities", "wlan.atheros.ie.xr.base_cap",
54901 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54903
54904 {&hf_ieee80211_atheros_ie_xr_xr_cap,
54905 {"XR capabilities", "wlan.atheros.ie.xr.xr_cap",
54906 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54907 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54908
54909 {&hf_ieee80211_atheros_ie_data,
54910 {"Atheros IE data", "wlan.atheros.data",
54911 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54913
54914 {&hf_ieee80211_aironet_ie_type,
54915 {"Aironet IE type", "wlan.aironet.type",
54916 FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals)((0 ? (const struct _value_string*)0 : ((aironet_ie_type_vals
))))
, 0,
54917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54918
54919 {&hf_ieee80211_aironet_ie_dtpc,
54920 {"Aironet IE CCX DTCP", "wlan.aironet.dtpc",
54921 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
54922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54923
54924 {&hf_ieee80211_aironet_ie_dtpc_unknown,
54925 {"Aironet IE CCX DTCP Unknown", "wlan.aironet.dtpc_unknown",
54926 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54928
54929 {&hf_ieee80211_aironet_ie_version,
54930 {"Aironet IE CCX version", "wlan.aironet.version",
54931 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54933
54934 {&hf_ieee80211_aironet_ie_data,
54935 { "Aironet IE data", "wlan.aironet.data",
54936 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
54937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54938
54939 {&hf_ieee80211_qbss_version,
54940 {"QBSS Version", "wlan.qbss.version",
54941 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54943
54944 {&hf_ieee80211_qbss_scount,
54945 {"Station Count", "wlan.qbss.scount",
54946 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54948
54949 {&hf_ieee80211_qbss_cu,
54950 {"Channel Utilization", "wlan.qbss.cu",
54951 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54953
54954 {&hf_ieee80211_qbss_adc,
54955 {"Available Admission Capacity", "wlan.qbss.adc",
54956 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54958
54959 {&hf_ieee80211_qbss2_cu,
54960 {"Channel Utilization", "wlan.qbss2.cu",
54961 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54962 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54963
54964 {&hf_ieee80211_qbss2_gl,
54965 {"G.711 CU Quantum", "wlan.qbss2.glimit",
54966 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54968
54969 {&hf_ieee80211_qbss2_cal,
54970 {"Call Admission Limit", "wlan.qbss2.cal",
54971 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54973
54974 {&hf_ieee80211_qbss2_scount,
54975 {"Station Count", "wlan.qbss2.scount",
54976 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54977 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54978
54979 {&hf_ieee80211_aironet_ie_qos_reserved,
54980 {"Aironet IE QoS reserved", "wlan.aironet.qos.reserved",
54981 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54982 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54983
54984 {&hf_ieee80211_aironet_ie_qos_paramset,
54985 {"Aironet IE QoS paramset", "wlan.aironet.qos.paramset",
54986 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54987 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54988
54989 {&hf_ieee80211_aironet_ie_qos_val,
54990 {"Aironet IE QoS valueset", "wlan.aironet.qos.val",
54991 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54993
54994 {&hf_ieee80211_aironet_ie_clientmfp,
54995 {"Aironet IE Client MFP", "wlan.aironet.clientmfp",
54996 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
54997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54998
54999 /* Vendor Specific : SGDSN */
55000 {&hf_ieee80211_vs_sgdsn_tag,
55001 {"Tag", "wlan.vs.sgdsn.tag",
55002 FT_NONE, BASE_NONE, NULL((void*)0), 0,
55003 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55004
55005 {&hf_ieee80211_vs_sgdsn_type,
55006 {"Type", "wlan.vs.sgdsn.type",
55007 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_sgdsn_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_sgdsn_type_vals
))))
, 0,
55008 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55009
55010 {&hf_ieee80211_vs_sgdsn_length,
55011 {"Length", "wlan.vs.sgdsn.length",
55012 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55013 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55014
55015 {&hf_ieee80211_vs_sgdsn_version,
55016 {"Version", "wlan.vs.sgdsn.tag.version",
55017 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55018 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55019
55020 {&hf_ieee80211_vs_sgdsn_icaomfrcode,
55021 {"ICAO Manufacturer Code", "wlan.vs.sgdsn.tag.icaomfrcode",
55022 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55023 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55024
55025 {&hf_ieee80211_vs_sgdsn_manufacturer,
55026 {"Manufacturer", "wlan.vs.sgdsn.tag.manufacturer",
55027 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55028 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55029
55030 {&hf_ieee80211_vs_sgdsn_model,
55031 {"Model", "wlan.vs.sgdsn.tag.model",
55032 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55033 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55034
55035 {&hf_ieee80211_vs_sgdsn_serialnumber,
55036 {"Serial number", "wlan.vs.sgdsn.tag.serialnumber",
55037 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55038 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55039
55040 {&hf_ieee80211_vs_sgdsn_serialnumber_len,
55041 {"Serial number length", "wlan.vs.sgdsn.tag.serialnumber.len",
55042 FT_UINT8, BASE_CUSTOM, CF_FUNC(vs_sgdsn_serialnumber_len_custom)((const void *) (size_t) (vs_sgdsn_serialnumber_len_custom)), 0,
55043 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55044
55045 {&hf_ieee80211_vs_sgdsn_gpscoord,
55046 {"GPS Coord", "wlan.vs.sgdsn.tag.gpscoord",
55047 FT_INT32, BASE_DEC, NULL((void*)0), 0,
55048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55049
55050 {&hf_ieee80211_vs_sgdsn_altitude,
55051 {"Altitude", "wlan.vs.sgdsn.tag.altitude",
55052 FT_INT16, BASE_DEC, NULL((void*)0), 0,
55053 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55054
55055 {&hf_ieee80211_vs_sgdsn_speed,
55056 {"Speed", "wlan.vs.sgdsn.tag.speed",
55057 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55059
55060 {&hf_ieee80211_vs_sgdsn_heading,
55061 {"Heading", "wlan.vs.sgdsn.tag.heading",
55062 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55063 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55064
55065 /* Vendor Specific : Nintendo */
55066 {&hf_ieee80211_vs_nintendo_type,
55067 {"Type", "wlan.vs.nintendo.type",
55068 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_nintendo_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_nintendo_type_vals
))))
, 0,
55069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55070
55071 {&hf_ieee80211_vs_nintendo_length,
55072 {"Length", "wlan.vs.nintendo.length",
55073 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55075
55076 {&hf_ieee80211_vs_nintendo_servicelist,
55077 {"Servicelist", "wlan.vs.nintendo.servicelist",
55078 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55080
55081 {&hf_ieee80211_vs_nintendo_service,
55082 {"Service", "wlan.vs.nintendo.service",
55083 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55085
55086 {&hf_ieee80211_vs_nintendo_consoleid,
55087 {"Console ID", "wlan.vs.nintendo.consoleid",
55088 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55090
55091 {&hf_ieee80211_vs_nintendo_unknown,
55092 {"Unknown", "wlan.vs.nintendo.unknown",
55093 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55095
55096 /* Vendor Specific : Aruba Networks */
55097 {&hf_ieee80211_vs_aruba_subtype,
55098 {"Subtype", "wlan.vs.aruba.subtype",
55099 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_aruba_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_aruba_subtype_vals
))))
, 0,
55100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55101
55102 {&hf_ieee80211_vs_aruba_apname,
55103 {"AP Name", "wlan.vs.aruba.ap_name",
55104 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55106
55107 {&hf_ieee80211_vs_aruba_data,
55108 {"Data", "wlan.vs.aruba.data",
55109 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55111
55112 {&hf_ieee80211_vs_aruba_gps_length,
55113 { "GPS Length", "wlan.ie.aruba.gps.length",
55114 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55115 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55116
55117 { &hf_ieee80211_vs_aruba_gps_subversion,
55118 { "GPS Subversion", "wlan.ie.aruba.gps.subversion",
55119 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55121
55122 { &hf_ieee80211_vs_aruba_gps_hop,
55123 { "GPS Hop", "wlan.ie.aruba.gps.hop",
55124 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55126
55127 { &hf_ieee80211_vs_aruba_gps_latitude,
55128 { "GPS Latitude", "wlan.ie.aruba.gps.latitude",
55129 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55131
55132 { &hf_ieee80211_vs_aruba_gps_longitude,
55133 { "GPS Longitude", "wlan.ie.aruba.gps.longitude",
55134 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55136
55137 { &hf_ieee80211_vs_aruba_gps_major_axis,
55138 { "GPS Major Axis", "wlan.ie.aruba.gps.major_axis",
55139 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55141
55142 { &hf_ieee80211_vs_aruba_gps_minor_axis,
55143 { "GPS Minor Axis", "wlan.ie.aruba.gps.minor_axis",
55144 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55146
55147 { &hf_ieee80211_vs_aruba_gps_orientation,
55148 { "GPS Orientation", "wlan.ie.aruba.gps.orientation",
55149 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55151
55152 { &hf_ieee80211_vs_aruba_gps_distance,
55153 { "GPS Distance", "wlan.ie.aruba.gps.distance",
55154 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55156
55157 /* Vendor Specific : Routerboard */
55158 {&hf_ieee80211_vs_routerboard_unknown,
55159 {"Unknown", "wlan.vs.routerboard.unknown",
55160 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55162
55163 {&hf_ieee80211_vs_routerboard_subitem,
55164 {"Sub IE", "wlan.vs.routerboard.subitem",
55165 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55167
55168 {&hf_ieee80211_vs_routerboard_subtype,
55169 {"Subtype", "wlan.vs.routerboard.subtype",
55170 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55172
55173 {&hf_ieee80211_vs_routerboard_sublength,
55174 {"Sublength", "wlan.vs.routerboard.sublength",
55175 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55177
55178 {&hf_ieee80211_vs_routerboard_subdata,
55179 {"Subdata", "wlan.vs.routerboard.subdata",
55180 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55182
55183 {&hf_ieee80211_vs_routerboard_subtype1_prefix,
55184 {"Subtype 1 Prefix", "wlan.vs.routerboard.subtype1_prefix",
55185 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55187
55188 {&hf_ieee80211_vs_routerboard_subtype1_data,
55189 {"Subtype 1 Data", "wlan.vs.routerboard.subtype1_data",
55190 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55192
55193 /* Vendor Specific : Meru (Fortinet) */
55194 {&hf_ieee80211_vs_meru_subitem,
55195 {"Sub IE", "wlan.vs.meru.unknown",
55196 FT_NONE, BASE_NONE, NULL((void*)0), 0,
55197 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55198
55199 {&hf_ieee80211_vs_meru_subtype,
55200 {"Subtype", "wlan.vs.meru.subtype",
55201 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55203
55204 {&hf_ieee80211_vs_meru_sublength,
55205 {"Sublength", "wlan.vs.meru.sublength",
55206 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55207 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55208
55209 {&hf_ieee80211_vs_meru_subdata,
55210 {"Subdata", "wlan.vs.meru.subdata",
55211 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55212 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55213
55214 /* Vendor Specific : Extreme (Zebra) */
55215 {&hf_ieee80211_vs_extreme_subtype,
55216 {"Subtype", "wlan.vs.extreme.subtype",
55217 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_extreme_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_extreme_subtype_vals
))))
, 0,
55218 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55219
55220 {&hf_ieee80211_vs_extreme_subdata,
55221 {"Subdata", "wlan.vs.extreme.subdata",
55222 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55223 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55224
55225 {&hf_ieee80211_vs_extreme_unknown,
55226 {"Unknown", "wlan.vs.extreme.unknown",
55227 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55228 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55229
55230 {&hf_ieee80211_vs_extreme_ap_length,
55231 {"AP Length", "wlan.vs.extreme.ap_length",
55232 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55233 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55234
55235 {&hf_ieee80211_vs_extreme_ap_name,
55236 {"AP Name", "wlan.vs.extreme.ap_name",
55237 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55238 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55239
55240 /* Vendor Specific : Aerohive */
55241 {&hf_ieee80211_vs_aerohive_version,
55242 {"Version", "wlan.vs.aerohive.version",
55243 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55244 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55245
55246 {&hf_ieee80211_vs_aerohive_subtype,
55247 {"Subtype", "wlan.vs.aerohive.subtype",
55248 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55249 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55250
55251 {&hf_ieee80211_vs_aerohive_hostname_length,
55252 {"Host Name Length", "wlan.vs.aerohive.hostname_length",
55253 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55254 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55255
55256 {&hf_ieee80211_vs_aerohive_hostname,
55257 {"Host Name", "wlan.vs.aerohive.hostname",
55258 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55259 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55260
55261 {&hf_ieee80211_vs_aerohive_data,
55262 {"Data", "wlan.vs.aerohive.data",
55263 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55264 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55265
55266 /* Vendor Specific : Mist */
55267 {&hf_ieee80211_vs_mist_ap_name,
55268 {"AP Name", "wlan.vs.mist.apname",
55269 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55271
55272 {&hf_ieee80211_vs_mist_data,
55273 {"Data", "wlan.vs.mist.data",
55274 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55276
55277 {&hf_ieee80211_vs_ubiquiti_type,
55278 {"Subtype", "wlan.vs.ubiquiti.type",
55279 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_ubiquiti_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_ubiquiti_type_vals
))))
, 0,
55280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55281
55282 {&hf_ieee80211_vs_ubiquiti_ap_name,
55283 {"AP Name", "wlan.vs.ubiquiti.ap_name",
55284 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55286
55287 {&hf_ieee80211_vs_ubiquiti_data,
55288 {"Data", "wlan.vs.ubiquiti.data",
55289 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55291
55292 /* Vendor Specific: Cisco */
55293 {&hf_ieee80211_vs_cisco_ap_name_v2,
55294 {"AP Name", "wlan.vs.cisco.apname_v2",
55295 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55297
55298 /* Vendor Specific : Ruckus */
55299 {&hf_ieee80211_vs_ruckus_ap_name,
55300 {"AP Name", "wlan.vs.ruckus.apname",
55301 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55303
55304 {&hf_ieee80211_vs_ruckus_data,
55305 {"Data", "wlan.vs.ruckus.data",
55306 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55308
55309 /* Vendor Specific : Alcatel-Lucent */
55310 {&hf_ieee80211_vs_alcatel_ap_name,
55311 {"AP Name", "wlan.vs.alcatel.apname",
55312 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55314
55315 {&hf_ieee80211_vs_alcatel_data,
55316 {"Data", "wlan.vs.alcatel.data",
55317 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55319
55320 /* Vendor Specific : Fortinet */
55321 {&hf_ieee80211_vs_fortinet_subtype,
55322 {"Subtype", "wlan.vs.fortinet.subtype",
55323 FT_UINT16, BASE_DEC, VALS(ieee80211_vs_fortinet_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_fortinet_subtype_vals
))))
, 0,
55324 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55325
55326 {&hf_ieee80211_vs_fortinet_system_type,
55327 {"Type", "wlan.vs.fortinet.system.type",
55328 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_fortinet_system_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_fortinet_system_type_vals
))))
, 0,
55329 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55330
55331 {&hf_ieee80211_vs_fortinet_system_length,
55332 {"Length", "wlan.vs.fortinet.system.length",
55333 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55334 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55335
55336 {&hf_ieee80211_vs_fortinet_system_apname,
55337 {"AP Name", "wlan.vs.fortinet.system.ap_name",
55338 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55339 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55340
55341 {&hf_ieee80211_vs_fortinet_system_apmodel,
55342 {"AP Model", "wlan.vs.fortinet.system.ap_model",
55343 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55345
55346 {&hf_ieee80211_vs_fortinet_system_apserial,
55347 {"AP Serial", "wlan.vs.fortinet.system.ap_serial",
55348 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55350
55351 {&hf_ieee80211_vs_fortinet_data,
55352 {"Data", "wlan.vs.fortinet.data",
55353 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55354 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55355
55356 /* Vendor Specific : Arista Networks */
55357 {&hf_ieee80211_vs_arista_subtype,
55358 {"Subtype", "wlan.vs.arista.subtype",
55359 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_arista_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_arista_subtype_vals
))))
, 0,
55360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55361
55362 {&hf_ieee80211_vs_arista_apname,
55363 {"AP Name", "wlan.vs.arista.ap_name",
55364 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55366
55367 {&hf_ieee80211_vs_arista_data,
55368 {"Data", "wlan.vs.arista.data",
55369 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55371
55372 /* Vendor Specific : Wi-SUN */
55373 {&hf_ieee80211_vs_wisun_type,
55374 {"Data Type", "wlan.vs.wisun.type",
55375 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_wisun_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_wisun_type_vals
))))
, 0,
55376 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55377 {&hf_ieee80211_vs_wisun_ptkid,
55378 {"PTK ID", "wlan.vs.wisun.ptkid",
55379 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55380 {&hf_ieee80211_vs_wisun_gtkl,
55381 {"GTK Liveness", "wlan.vs.wisun.gtkl",
55382 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55383 {&hf_ieee80211_vs_wisun_gtkl_gtk0,
55384 {"GTK[0]", "wlan.vs.wisun.gtkl.gtk0",
55385 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK00x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55386 {&hf_ieee80211_vs_wisun_gtkl_gtk1,
55387 {"GTK[1]", "wlan.vs.wisun.gtkl.gtk1",
55388 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK10x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55389 {&hf_ieee80211_vs_wisun_gtkl_gtk2,
55390 {"GTK[2]", "wlan.vs.wisun.gtkl.gtk2",
55391 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK20x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55392 {&hf_ieee80211_vs_wisun_gtkl_gtk3,
55393 {"GTK[3]", "wlan.vs.wisun.gtkl.gtk3",
55394 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK30x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55395 {&hf_ieee80211_vs_wisun_nr,
55396 {"Node Role", "wlan.vs.wisun.nr",
55397 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_wisun_nr_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_wisun_nr_vals
))))
, 0,
55398 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55399 {&hf_ieee80211_vs_wisun_lgtkl,
55400 {"LGTK Liveness", "wlan.vs.wisun.lgtkl",
55401 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55402 {&hf_ieee80211_vs_wisun_lgtkl_lgtk0,
55403 {"LGTK[0]", "wlan.vs.wisun.lgtkl.lgtk0",
55404 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK00x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55405 {&hf_ieee80211_vs_wisun_lgtkl_lgtk1,
55406 {"LGTK[1]", "wlan.vs.wisun.lgtkl.lgtk1",
55407 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK10x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55408 {&hf_ieee80211_vs_wisun_lgtkl_lgtk2,
55409 {"LGTK[2]", "wlan.vs.wisun.lgtkl.lgtk2",
55410 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK20x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55411 {&hf_ieee80211_vs_wisun_lgtk_key_id,
55412 {"Key ID", "wlan.vs.wisun.lgtk.key_id",
55413 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55414 {&hf_ieee80211_vs_wisun_lgtk_lgtk,
55415 {"LGTK", "wlan.vs.wisun.lgtk.lgtk",
55416 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55417 {&hf_ieee80211_vs_wisun_data,
55418 {"Data", "wlan.vs.wisun.data",
55419 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55420
55421 /* Vendor Specific : apple */
55422 {&hf_ieee80211_vs_apple_type,
55423 {"Type", "wlan.vs.apple.type",
55424 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55426
55427 {&hf_ieee80211_vs_apple_subtype,
55428 {"Subtype", "wlan.vs.apple.subtype",
55429 FT_UINT16, BASE_DEC, VALS(ieee80211_vs_apple_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_apple_subtype_vals
))))
, 0,
55430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55431
55432 {&hf_ieee80211_vs_apple_length,
55433 {"Length", "wlan.vs.apple.length",
55434 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55436
55437 {&hf_ieee80211_vs_apple_data,
55438 {"Data", "wlan.vs.apple.data",
55439 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55441
55442 {&hf_ieee80211_tsinfo,
55443 {"Traffic Stream (TS) Info", "wlan.ts_info",
55444 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
55445 "Traffic Stream (TS) Info field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55446
55447 {&hf_ieee80211_tsinfo_type,
55448 {"Traffic Type", "wlan.ts_info.type",
55449 FT_UINT24, BASE_DEC, VALS(tsinfo_type)((0 ? (const struct _value_string*)0 : ((tsinfo_type)))), 0x000001,
55450 "Traffic Stream (TS) Info Traffic Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55451
55452 {&hf_ieee80211_tsinfo_tsid,
55453 {"Traffic Stream ID (TSID)", "wlan.ts_info.tsid",
55454 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00001E,
55455 "Traffic Stream ID (TSID) Info TSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55456
55457 {&hf_ieee80211_tsinfo_dir,
55458 {"Direction", "wlan.ts_info.dir",
55459 FT_UINT24, BASE_DEC, VALS(tsinfo_direction)((0 ? (const struct _value_string*)0 : ((tsinfo_direction)))), 0x000060,
55460 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55461
55462 {&hf_ieee80211_tsinfo_access,
55463 {"Access Policy", "wlan.ts_info.access",
55464 FT_UINT24, BASE_DEC, VALS(tsinfo_access)((0 ? (const struct _value_string*)0 : ((tsinfo_access)))), 0x000180,
55465 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55466
55467 {&hf_ieee80211_tsinfo_agg,
55468 {"Aggregation", "wlan.ts_info.agg",
55469 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000200,
55470 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55471
55472 {&hf_ieee80211_tsinfo_apsd,
55473 {"Automatic Power-Save Delivery (APSD)", "wlan.ts_info.apsd",
55474 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000400,
55475 "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55476
55477 {&hf_ieee80211_tsinfo_up,
55478 {"User Priority", "wlan.ts_info.up",
55479 FT_UINT24, BASE_DEC, VALS(qos_up)((0 ? (const struct _value_string*)0 : ((qos_up)))), 0x003800,
55480 "Traffic Stream (TS) Info User Priority", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55481
55482 {&hf_ieee80211_tsinfo_ack,
55483 {"Ack Policy", "wlan.ts_info.ack",
55484 FT_UINT24, BASE_DEC, VALS(ack_policy)((0 ? (const struct _value_string*)0 : ((ack_policy)))), 0x00C000,
55485 "Traffic Stream (TS) Info Ack Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55486
55487 {&hf_ieee80211_tsinfo_sched,
55488 {"Schedule", "wlan.ts_info.sched",
55489 FT_UINT24, BASE_DEC, NULL((void*)0), 0x010000,
55490 "Traffic Stream (TS) Info Schedule", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55491
55492 {&hf_ieee80211_tsinfo_rsv,
55493 {"Reserved", "wlan.ts_info.rsv",
55494 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFE0000,
55495 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55496
55497 {&hf_ieee80211_tspec_nor_msdu,
55498 {"Normal MSDU Size", "wlan.tspec.nor_msdu",
55499 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55501
55502 {&hf_ieee80211_tspec_max_msdu,
55503 {"Maximum MSDU Size", "wlan.tspec.max_msdu",
55504 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55506
55507 {&hf_ieee80211_tspec_min_srv,
55508 {"Minimum Service Interval", "wlan.tspec.min_srv",
55509 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55511
55512 {&hf_ieee80211_tspec_max_srv,
55513 {"Maximum Service Interval", "wlan.tspec.max_srv",
55514 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55516
55517 {&hf_ieee80211_tspec_inact_int,
55518 {"Inactivity Interval", "wlan.tspec.inact_int",
55519 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55521
55522 {&hf_ieee80211_tspec_susp_int,
55523 {"Suspension Interval", "wlan.tspec.susp_int",
55524 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55526
55527 {&hf_ieee80211_tspec_srv_start,
55528 {"Service Start Time", "wlan.tspec.srv_start",
55529 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55531
55532 {&hf_ieee80211_tspec_min_data,
55533 {"Minimum Data Rate", "wlan.tspec.min_data",
55534 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55536
55537 {&hf_ieee80211_tspec_mean_data,
55538 {"Mean Data Rate", "wlan.tspec.mean_data",
55539 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55541
55542 {&hf_ieee80211_tspec_peak_data,
55543 {"Peak Data Rate", "wlan.tspec.peak_data",
55544 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55546
55547 {&hf_ieee80211_tspec_burst_size,
55548 {"Burst Size", "wlan.tspec.burst_size",
55549 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55551
55552 {&hf_ieee80211_tspec_delay_bound,
55553 {"Delay Bound", "wlan.tspec.delay_bound",
55554 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55556
55557 {&hf_ieee80211_tspec_min_phy,
55558 {"Minimum PHY Rate", "wlan.tspec.min_phy",
55559 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55561
55562 {&hf_ieee80211_tspec_surplus,
55563 {"Surplus Bandwidth Allowance", "wlan.tspec.surplus",
55564 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55566
55567 {&hf_ieee80211_tspec_medium,
55568 {"Medium Time", "wlan.tspec.medium",
55569 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55571
55572 {&hf_ieee80211_tspec_dmg,
55573 {"DMG attributes", "wlan.tspec.dmg",
55574 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55575 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55576
55577 {&hf_ieee80211_ts_delay,
55578 {"Traffic Stream (TS) Delay", "wlan.ts_delay",
55579 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55581
55582 {&hf_ieee80211_tclas_process,
55583 {"Processing", "wlan.tclas_proc.processing",
55584 FT_UINT8, BASE_DEC, VALS(ieee80211_tclas_process_flag)((0 ? (const struct _value_string*)0 : ((ieee80211_tclas_process_flag
))))
, 0,
55585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55586
55587 {&hf_ieee80211_tag_ext_supp_rates,
55588 {"Extended Supported Rates", "wlan.extended_supported_rates",
55589 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_supported_rates_vals_ext, 0x0,
55590 "In Mbit/sec, (B) for Basic Rates", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55591
55592 {&hf_ieee80211_sched_info,
55593 {"Schedule Info", "wlan.sched.sched_info",
55594 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
55595 "Schedule Info field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55596
55597 {&hf_ieee80211_sched_info_agg,
55598 {"Schedule Aggregation", "wlan.sched_info.agg",
55599 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0001,
55600 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55601
55602 {&hf_ieee80211_sched_info_tsid,
55603 {"Schedule Traffic Stream ID (TSID)", "wlan.sched_info.tsid",
55604 FT_UINT16, BASE_DEC, NULL((void*)0), 0x001E,
55605 "Traffic Stream ID (TSID) Info TSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55606
55607 {&hf_ieee80211_sched_info_dir,
55608 {"Schedule Direction", "wlan.sched_info.dir",
55609 FT_UINT16, BASE_DEC, VALS(tsinfo_direction)((0 ? (const struct _value_string*)0 : ((tsinfo_direction)))), 0x0060,
55610 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55611
55612 {&hf_ieee80211_sched_srv_start,
55613 {"Service Start Time", "wlan.sched.srv_start",
55614 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
55615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55616
55617 {&hf_ieee80211_sched_srv_int,
55618 {"Service Interval", "wlan.sched.srv_int",
55619 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
55620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55621
55622 {&hf_ieee80211_sched_spec_int,
55623 {"Specification Interval", "wlan.sched.spec_int",
55624 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
55625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55626
55627 {&hf_ieee80211_aruba,
55628 {"Aruba Type", "wlan.aruba.type",
55629 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &aruba_mgt_typevals_ext, 0,
55630 "Aruba Management", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55631
55632 {&hf_ieee80211_aruba_hb_seq,
55633 {"Aruba Heartbeat Sequence", "wlan.aruba.heartbeat_sequence",
55634 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
55635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55636
55637 {&hf_ieee80211_aruba_mtu,
55638 {"Aruba MTU Size", "wlan.aruba.mtu_size",
55639 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55641
55642 /* Start: HT Control (+HTC) */
55643 {&hf_ieee80211_htc,
55644 {"HT Control (+HTC)", "wlan.htc",
55645 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
55646 "High Throughput Control (+HTC)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55647
55648 {&hf_ieee80211_htc_vht,
55649 {"VHT", "wlan.htc.vht",
55650 FT_BOOLEAN, 32, NULL((void*)0), HTC_VHT0x00000001,
55651 "High Throughput Control HT/VHT flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55652
55653 {&hf_ieee80211_htc_he,
55654 {"HE", "wlan.htc.he",
55655 FT_BOOLEAN, 32, NULL((void*)0), HTC_HE0x00000002,
55656 "High Efficiency Control HE flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55657
55658 {&hf_ieee80211_htc_he_ctrl_id,
55659 {"Control ID", "wlan.htc.he.a_control.ctrl_id",
55660 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55661
55662 {&hf_ieee80211_he_a_control_padding,
55663 {"Padding", "wlan.htc.he.a_control.padding",
55664 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55665
55666 {&hf_ieee80211_he_trs_he_tb_ppdu_len,
55667 {"HE TB PPDU Length", "wlan.htc.he.a_control.umrs.he_tb_ppdu_len",
55668 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55669
55670 {&hf_ieee80211_he_trs_ru_allocation,
55671 {"RU Allocation", "wlan.htc.he.a_control.umrs.ru_allocation",
55672 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00001fe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55673
55674 {&hf_ieee80211_he_dl_tx_power,
55675 {"DL Tx Power", "wlan.htc.he.a_control.umrs.dl_tx_power",
55676 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003e000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55677
55678 {&hf_ieee80211_he_ul_target_rssi,
55679 {"UL Target RSSI", "wlan.htc.he.a_control.umrs.ul_target_rssi",
55680 FT_UINT32, BASE_CUSTOM, CF_FUNC(ul_target_rssi_base_custom)((const void *) (size_t) (ul_target_rssi_base_custom)),
55681 0x007c0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55682
55683 {&hf_ieee80211_he_ul_mcs,
55684 {"UL MCS", "wlan.htc.he.a_control.umrs.ul_mcs",
55685 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55686
55687 {&hf_ieee80211_he_ul_reserved,
55688 {"reserved", "wlan.htc.he.a_control.umrs.reserved",
55689 FT_UINT32, BASE_HEX, NULL((void*)0), 0x02000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55690
55691 {&hf_ieee80211_he_om_rx_nss,
55692 {"Rx NSS", "wlan.htc.he.a_control.om.rx_nss",
55693 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55694
55695 {&hf_ieee80211_he_om_channel_width,
55696 {"Channel Width", "wlan.htc.he.a_control.om.channel_width",
55697 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000018, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55698
55699 {&hf_ieee80211_he_om_ul_mu_disable,
55700 {"UL MU Disable", "wlan.htc.he.a_control.om.ul_mu_disable",
55701 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55702
55703 {&hf_ieee80211_he_om_tx_nsts,
55704 {"Tx NSTS", "wlan.htc.he.a_control.om.tx_nsts",
55705 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000001c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55706
55707 {&hf_ieee80211_he_om_er_su_disable,
55708 {"ER SU Disable", "wlan.htc.he.a_control.om.er_su_disable",
55709 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55710
55711 {&hf_ieee80211_he_om_dl_mu_mimo_resound,
55712 {"DL MU-MIMO Resound Recommendation",
55713 "wlan.htc.he.a_control.om.dl_mu_mimo_resound_recommendation",
55714 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55715
55716 {&hf_ieee80211_he_om_ul_mu_data_disable,
55717 {"UL MU Data Disable", "wlan.htc.he.a_control.om.ul_mu_data_disable",
55718 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55719
55720 {&hf_ieee80211_he_hla_unsolicited_mfb,
55721 {"Unsolicited MFB", "wlan.htc.he.a_control.hla.unsolicited_mfb",
55722 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55723
55724 {&hf_ieee80211_he_hla_mrq,
55725 {"MRQ", "wlan.htc.he.a_control.hla.mrq",
55726 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55727
55728 {&hf_ieee80211_he_hla_nss,
55729 {"NSS", "wlan.htc.he.a_control.hla.NSS",
55730 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001c, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55731
55732 {&hf_ieee80211_he_hla_he_mcs,
55733 {"HE-MCS", "wlan.htc.he.a_control.hla.he_mcs",
55734 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000001e0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55735
55736 {&hf_ieee80211_he_hla_dcm,
55737 {"DCM", "wlan.htc.he.a_control.hla.dcm",
55738 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55739
55740 {&hf_ieee80211_he_hla_ru,
55741 {"RU", "wlan.htc.he.a_control.hla.ru",
55742 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0003fc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55743
55744 {&hf_ieee80211_he_hla_bw,
55745 {"BW", "wlan.htc.he.a_control.hla.bw",
55746 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000c0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55747
55748 {&hf_ieee80211_he_hla_msi_ppdu_type,
55749 {"MSI/PPDU Type", "wlan.htc.he.a_control.hla.msi_ppdu_type",
55750 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00700000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55751
55752 {&hf_ieee80211_he_hla_tx_bf,
55753 {"Tx BF", "wlan.htc.he.a_control.hla.tx_bf",
55754 FT_BOOLEAN, 32, TFS(&he_hla_tx_bf_tfs)((0 ? (const struct true_false_string*)0 : ((&he_hla_tx_bf_tfs
))))
, 0x00800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55755
55756 {&hf_ieee80211_he_hla_reserved,
55757 {"Reserved", "wlan.htc.he.a_control.hla.reserved",
55758 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55759
55760 {&hf_ieee80211_he_bsr_aci_bitmap,
55761 {"ACI Bitmap", "wlan.htc.he.a_control.bsr.aci_bitmap",
55762 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55763
55764 {&hf_ieee80211_he_bsr_delta_tid,
55765 {"Delta TID", "wlan.htc.he.a_control.bsr.delta_tid",
55766 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55767
55768 {&hf_ieee80211_he_bsr_aci_high,
55769 {"ACI High", "wlan.htc.he.a_control.bsr.aci_high",
55770 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55771
55772 {&hf_ieee80211_he_bsr_scaling_factor,
55773 {"Scaling Factor", "wlan.htc.he.a_control.bsr.scaling_factor",
55774 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55775
55776 {&hf_ieee80211_he_bsr_queue_size_high,
55777 {"Queue Size High", "wlan.htc.he.a_control.bsr.queue_size_high",
55778 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003fc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55779
55780 {&hf_ieee80211_he_bsr_queue_size_all,
55781 {"Queue Size All", "wlan.htc.he.a_control.bsr.queue_size_all",
55782 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03fc0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55783
55784 {&hf_ieee80211_he_uph_ul_power_headroom,
55785 {"UL Power Headroom", "wlan.htc.he.a_control.uph.ul_power_headroom",
55786 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55787
55788 {&hf_ieee80211_he_uph_ul_min_transmit_power_flag,
55789 {"Minimum Transmit Power Flag", "wlan.htc.he.a_control.uph.min_transmit_power_flag",
55790 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55791
55792 {&hf_ieee80211_he_uph_reserved,
55793 {"Reserved", "wlan.htc.he.a_control.uph.reserved",
55794 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55795
55796 {&hf_ieee80211_he_btc_avail_chan,
55797 {"Available Channel Bitmap", "wlan.htc.he.a_control.bqr.avail_chan_bitmap",
55798 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55799
55800 {&hf_ieee80211_he_btc_reserved,
55801 {"Reserved", "wlan.htc.he.a_control.bqr.reserved",
55802 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55803
55804 {&hf_ieee80211_he_cci_ac_constraint,
55805 {"AC Constraint", "wlan.htc.he.a_control.cci.ac_constraint",
55806 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55807
55808 {&hf_ieee80211_he_cci_rdg_more_ppdu,
55809 {"RDG/More PPDU", "wlan.htc.he.a_control.cci.rdg_more_ppdu",
55810 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55811
55812 {&hf_ieee80211_he_cci_sr_ppdu_indic,
55813 {"PSRT PPDU", "wlan.htc.he.a_control.cci.sr_ppdu_indic",
55814 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55815
55816 {&hf_ieee80211_he_cci_reserved,
55817 {"Reserved", "wlan.htc.he.a_control.cci.reserved",
55818 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55819
55820 {&hf_ieee80211_he_eht_om_rx_nss_ext,
55821 {"Rx NSS Extension", "wlan.htc.he.a_control.eht_om.rx_nss_ext",
55822 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55823
55824 {&hf_ieee80211_he_eht_om_chan_w_ext,
55825 {"Channel Width Extension", "wlan.htc.he.a_control.eht_om.chan_w_ext",
55826 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55827
55828 {&hf_ieee80211_he_eht_om_tx_nsts_ext,
55829 {"Tx NSTS Extension", "wlan.htc.he.a_control.eht_om.tx_nsts_ext",
55830 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55831
55832 {&hf_ieee80211_he_eht_om_reserved,
55833 {"Reserved", "wlan.htc.he.a_control.eht_om.reserved",
55834 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55835
55836 {&hf_ieee80211_he_srs_ppdu_resp_dur,
55837 {"PPDU Response Duration", "wlan.htc.he.a_control.srs.ppdu_resp_dur",
55838 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55839
55840 {&hf_ieee80211_he_srs_reserved,
55841 {"Reserved", "wlan.htc.he.a_control.srs.reserved",
55842 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55843
55844 {&hf_ieee80211_he_aar_assisted_ap_bitmap,
55845 {"Assisted AP Link ID Bitmap",
55846 "wlan.htc.he.a_control.aar.assisted_ap_link_id_bitmap",
55847 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55848
55849 {&hf_ieee80211_he_aar_reserved,
55850 {"Reserved", "wlan.htc.he.a_control.aar.reserved",
55851 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55852
55853 {&hf_ieee80211_he_a_control_ones,
55854 {"Padding", "wlan.htc.he.a_control.ones",
55855 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03ffffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55856
55857 {&hf_ieee80211_he_trigger_common_info,
55858 {"HE Trigger Common Info", "wlan.trigger.he.common_info",
55859 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55860
55861 {&hf_ieee80211_he_trigger_type,
55862 {"Trigger Type", "wlan.trigger.he.trigger_type",
55863 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
55864 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55865
55866 {&hf_ieee80211_he_trigger_ul_length,
55867 {"UL Length", "wlan.trigger.he.ul_length",
55868 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55869
55870 {&hf_ieee80211_he_trigger_more_tf,
55871 {"More TF", "wlan.trigger.he.more_tf",
55872 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55873
55874 {&hf_ieee80211_he_trigger_cs_required,
55875 {"CS Required", "wlan.trigger.he.cs_required",
55876 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55877
55878 {&hf_ieee80211_he_trigger_ul_bw,
55879 {"UL BW", "wlan.trigger.he.ul_bw",
55880 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(bw_subfield_vals)((0 ? (const struct _val64_string*)0 : ((bw_subfield_vals)))), 0x00000000000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55881
55882 {&hf_ieee80211_he_trigger_gi_and_ltf_type,
55883 {"GI And LTF Type", "wlan.trigger.he.gi_and_ltf_type",
55884 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(gi_and_ltf_type_subfield_vals)((0 ? (const struct _val64_string*)0 : ((gi_and_ltf_type_subfield_vals
))))
, 0x0000000000300000,
55885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55886
55887 {&hf_ieee80211_he_trigger_mu_mimo_ltf_mode,
55888 {"MU-MIMO LTF Mode", "wlan.trigger.he.mu_mimo_ltf_mode",
55889 FT_BOOLEAN, 64, TFS(&mu_mimo_ltf_mode_tfs)((0 ? (const struct true_false_string*)0 : ((&mu_mimo_ltf_mode_tfs
))))
, 0x0000000000400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55890
55891 {&hf_ieee80211_he_trigger_num_he_ltf_syms_etc,
55892 {"Number of HE-LTF Symbols and Midamble Periodicity",
55893 "wlan.trigger.he.num_he_ltf_syms_and_midamble_per",
55894 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55895
55896 {&hf_ieee80211_he_trigger_ul_stbc,
55897 {"UL STBC", "wlan.trigger.he.ul_stbc",
55898 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55899
55900 {&hf_ieee80211_he_trigger_ldpc_extra_sym_seg,
55901 {"LDPC Extra Symbol Segment", "wlan.trigger.he.ldpc_extra_symbol_segment",
55902 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55903
55904 {&hf_ieee80211_he_trigger_ap_tx_power,
55905 {"AP Tx Power", "wlan.trigger.he.ap_tx_power",
55906 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
55907 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55908
55909 {&hf_ieee80211_he_trigger_pre_fec_padding_factor,
55910 {"Pre-FEC Padding Factor",
55911 "wlan.trigger.he.ul_packet_extension.pre_fec_padding_factor",
55912 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400,
55913 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
55914 0x0000000C00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55915
55916 {&hf_ieee80211_he_trigger_pe_disambiguity,
55917 {"PE Disambiguity",
55918 "wlan.trigger.he.ul_packet_extension.pe_disambiguity",
55919 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
55920 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55921
55922 {&hf_ieee80211_he_trigger_ul_spatial_reuse,
55923 {"UL Spatial Reuse", "wlan.trigger.he.ul_spatial_reuse",
55924 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55925
55926 {&hf_ieee80211_he_trigger_ul_he_sig_a_reserved,
55927 {"UL HE-SIG-A2 Reserved", "wlan.trigger.he.ul_he_sig_a2_reserved",
55928 FT_UINT64, BASE_HEX, NULL((void*)0), 0x7FC0000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55929
55930 {&hf_ieee80211_he_trigger_doppler,
55931 {"Doppler", "wlan.trigger.he.doppler",
55932 FT_BOOLEAN, 64, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55933
55934 {&hf_ieee80211_he_trigger_reserved,
55935 {"Reserved", "wlan.trigger.he.reserved",
55936 FT_UINT64, BASE_HEX, NULL((void*)0), 0x8000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55937
55938 {&hf_ieee80211_he_trigger_bar_ctrl,
55939 {"BAR Control", "wlan.trigger.he.common_info.bar_ctrl",
55940 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55941
55942 {&hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy,
55943 {"BA Ack Policy", "wlan.trigger.he.common_info.bar_ctrl.ba_ack_policy",
55944 FT_BOOLEAN, 16, TFS(&ieee80211_block_ack_control_ack_policy_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_block_ack_control_ack_policy_flag
))))
, 0x0001,
55945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55946
55947 {&hf_ieee80211_he_trigger_bar_ctrl_ba_type,
55948 {"BA Type", "wlan.trigger.he.common_info.bar_ctrl.ba_type",
55949 FT_UINT16, BASE_HEX, VALS(block_ack_type_vals)((0 ? (const struct _value_string*)0 : ((block_ack_type_vals)
)))
, 0x001e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55950
55951 {&hf_ieee80211_he_trigger_bar_ctrl_reserved,
55952 {"Reserved", "wlan.trigger.he.common_info.bar_ctrl.reserved",
55953 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0FE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55954
55955 {&hf_ieee80211_he_trigger_bar_ctrl_tid_info,
55956 {"TID_INFO", "wlan.trigger.he.common_info.bar_ctrl.tid_info",
55957 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55958
55959 {&hf_ieee80211_he_trigger_bar_info,
55960 {"BAR Information", "wlan.trigger.he.common_info.bar_info",
55961 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55962
55963 {&hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl,
55964 {"Block Ack Starting Sequence Control",
55965 "wlan.trigger.he.common_info.bar_info.blk_ack_starting_seq_ctrl",
55966 FT_UINT16, BASE_HEX, NULL((void*)0), 0xffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55967
55968 {&hf_ieee80211_he_trigger_user_info,
55969 {"User Info", "wlan.trigger.he.user_info",
55970 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55971
55972 {&hf_ieee80211_he_trigger_user_info_padding_start,
55973 {"Start of Padding", "wlan.trigger.he.user_info.start_of_padding",
55974 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55975
55976 {&hf_ieee80211_he_trigger_padding,
55977 {"Padding", "wlan.trigger.he.padding",
55978 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55979
55980 {&hf_ieee80211_he_trigger_mpdu_mu_spacing,
55981 {"MPDU MU Spacing Factor", "wlan.trigger.he.mpdu_mu_spacing_factor",
55982 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55983
55984 {&hf_ieee80211_he_trigger_tid_aggregation_limit,
55985 {"TID Aggregation Limit", "wlan.trigger.he.tid_aggregation_limit",
55986 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55987
55988 {&hf_ieee80211_he_trigger_dependent_reserved1,
55989 {"Reserved", "wlan.trigger.he.reserved1",
55990 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55991
55992 {&hf_ieee80211_he_trigger_preferred_ac,
55993 {"Preferred AC", "wlan.trigger.he.preferred_ac",
55994 FT_UINT8, BASE_HEX, VALS(preferred_ac_vals)((0 ? (const struct _value_string*)0 : ((preferred_ac_vals)))
)
, 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55995
55996 {&hf_ieee80211_he_trigger_dep_basic_user_info,
55997 {"Basic Trigger Dependent User Info", "wlan.trigger.he.basic_user_info",
55998 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55999
56000 {&hf_ieee80211_he_trigger_starting_aid,
56001 {"Starting AID", "wlan.trigger.he.starting_aid",
56002 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56003
56004 {&hf_ieee80211_he_trigger_dependent_reserved2,
56005 {"Reserved", "wlan.trigger.he.reserved2",
56006 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001FF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56007
56008 {&hf_ieee80211_he_trigger_feedback_type,
56009 {"Feedback Type", "wlan.trigger.he.feedback_type",
56010 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56011
56012 {&hf_ieee80211_he_trigger_dependent_reserved3,
56013 {"Reserved", "wlan.trigger.he.reserved3",
56014 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00FE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56015
56016 {&hf_ieee80211_he_trigger_nfrp_target_rssi,
56017 {"Target RSSI", "wlan.trigger.he.target_rssi",
56018 FT_UINT40, BASE_CUSTOM, CF_FUNC(target_rssi_base_custom)((const void *) (size_t) (target_rssi_base_custom)), 0x7F00000000,
56019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56020
56021 {&hf_ieee80211_he_trigger_multiplexing_flag,
56022 {"Multiplexing Flag", "wlan.trigger.he.multiplexing_flag",
56023 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56024
56025 {&hf_ieee80211_he_trigger_dep_nfrp_user_info,
56026 {"NFRP Trigger Dependent User Unfo", "wlan.trigger.he.nfrp_user_info",
56027 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56028
56029 {&hf_ieee80211_he_trigger_feedback_seg_retrans_bm,
56030 {"Feedback Segment Retransmission Bitmap", "wlan.trigger.he.feedback_bm",
56031 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56032
56033 {&hf_ieee80211_he_trigger_aid12,
56034 {"AID12", "wlan.trigger.he.user_info.aid12",
56035 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56036
56037 {&hf_ieee80211_he_trigger_ru_allocation_region,
56038 {"RU Allocation Region", "wlan.trigger.he.ru_allocation_region",
56039 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_ru_allocation_region_custom)((const void *) (size_t) (he_trigger_ru_allocation_region_custom
))
,
56040 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56041
56042 {&hf_ieee80211_he_trigger_ru_allocation,
56043 {"RU Allocation", "wlan.trigger.he.ru_allocation",
56044 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_ru_allocation_base_custom)((const void *) (size_t) (he_ru_allocation_base_custom)),
56045 0x00000FE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56046
56047 {&hf_ieee80211_he_trigger_ul_fec_coding_type,
56048 {"UL FEC Coding Type", "wlan.trigger.he.ul_fec_coding_type",
56049 FT_BOOLEAN, 40, TFS(&he_trigger_ul_fec_coding_type_tfs)((0 ? (const struct true_false_string*)0 : ((&he_trigger_ul_fec_coding_type_tfs
))))
, 0x0000100000,
56050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56051
56052 {&hf_ieee80211_he_trigger_ul_mcs,
56053 {"UL MCS", "wlan.trigger.he.ul_mcs",
56054 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56055
56056 {&hf_ieee80211_he_trigger_ul_dcm,
56057 {"UL DCM", "wlan.trigger.he.ul_dcm",
56058 FT_BOOLEAN, 40, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56059
56060 {&hf_ieee80211_he_trigger_ru_starting_spatial_stream,
56061 {"Starting Spatial Stream", "wlan.trigger.he.ru_starting_spatial_stream",
56062 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56063 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56064
56065 {&hf_ieee80211_he_trigger_ru_number_spatial_streams,
56066 {"Number Of Spatial Streams", "wlan.trigger.he.ru_number_of_spatial_stream",
56067 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56068 0x00E0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56069
56070 {&hf_ieee80211_he_trigger_ru_number_ra_ru,
56071 {"Number of RA-RU", "wlan.trigger.he.ru_number_of_ra_ru",
56072 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56073 0x007C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56074
56075 {&hf_ieee80211_he_trigger_ru_no_more_ra_ru,
56076 {"No More RA-RU", "wlan.trigger.he.ru_no_more_ra_ru",
56077 FT_BOOLEAN, 40, NULL((void*)0), 0x0080000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56078
56079 {&hf_ieee80211_he_trigger_ul_target_rssi,
56080 {"UL Target RSSI", "wlan.trigger.he.ul_target_rssi",
56081 FT_UINT40, BASE_CUSTOM, CF_FUNC(target_rssi_base_custom)((const void *) (size_t) (target_rssi_base_custom)), 0x7F00000000,
56082 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56083
56084 {&hf_ieee80211_he_trigger_user_reserved,
56085 {"Reserved", "wlan.trigger.he.user_reserved",
56086 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56087
56088 {&hf_ieee80211_he_trigger_ranging_common_info_1,
56089 {"Ranging Common Info", "wlan.trigger.he.ranging.common_info",
56090 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56091
56092 {&hf_ieee80211_he_trigger_ranging_common_info_2,
56093 {"Ranging Common Info", "wlan.trigger.he.ranging.common_info",
56094 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56095
56096 {&hf_ieee80211_eht_trigger_common_info,
56097 {"EHT Trigger Common Info", "wlan.trigger.eht.common_info",
56098 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56099
56100 {&hf_ieee80211_eht_trigger_type,
56101 {"Trigger Type", "wlan.trigger.eht.trigger_type",
56102 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
56103 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56104
56105 {&hf_ieee80211_eht_trigger_ul_length,
56106 {"UL Length", "wlan.trigger.eht.ul_length",
56107 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56108
56109 {&hf_ieee80211_eht_trigger_more_tf,
56110 {"More TF", "wlan.trigger.eht.more_tf",
56111 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56112
56113 {&hf_ieee80211_eht_trigger_cs_required,
56114 {"CS Required", "wlan.trigger.eht.cs_required",
56115 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56116
56117 {&hf_ieee80211_eht_trigger_ul_bw,
56118 {"UL BW", "wlan.trigger.eht.ul_bw",
56119 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(bw_subfield_vals)((0 ? (const struct _val64_string*)0 : ((bw_subfield_vals)))),
56120 0x00000000000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56121
56122 {&hf_ieee80211_eht_trigger_gi_and_eht_ltf_type,
56123 {"GI And HE/EHT-LTF Type/Triggered TXOP Sharing Mode",
56124 "wlan.trigger.eht.gi_and_he_eht_ltf_type_triggered_txop_sharing_mode",
56125 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000300000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56126
56127 {&hf_ieee80211_eht_trigger_reserved2,
56128 {"Reserved", "wlan.trigger.eht.reserved2",
56129 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56130
56131 {&hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc,
56132 {"Number of HE/EHT-LTF Symbols",
56133 "wlan.trigger.eht.num_ltf_eht_ltf_symbols",
56134 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56135
56136 {&hf_ieee80211_eht_trigger_reserved3,
56137 {"Reserved", "wlan.trigger.eht.reserved3",
56138 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56139
56140 {&hf_ieee80211_eht_trigger_ldpc_extra_sym_seg,
56141 {"LDPC Extra Symbol Segment", "wlan.trigger.eht.ldpc_extra_symbol_segment",
56142 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56143
56144 {&hf_ieee80211_eht_trigger_ap_tx_power,
56145 {"AP Tx Power", "wlan.trigger.eht.ap_tx_power",
56146 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
56147 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56148
56149 {&hf_ieee80211_eht_trigger_pre_fec_padding_factor,
56150 {"Pre-FEC Padding Factor",
56151 "wlan.trigger.eht.ul_packet_extension.pre_fec_padding_factor",
56152 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400,
56153 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
56154 0x0000000c00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56155
56156 {&hf_ieee80211_eht_trigger_pe_disambiguity,
56157 {"PE Disambiguity",
56158 "wlan.trigger.eht.ul_packet_extension.pe_disambiguity",
56159 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
56160 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56161
56162 {&hf_ieee80211_eht_trigger_ul_spatial_reuse,
56163 {"Spatial Reuse", "wlan.trigger.eht.spatial_reuse",
56164 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56165
56166 {&hf_ieee80211_eht_trigger_reserved4,
56167 {"Reserved", "wlan.trigger.eht.reserved4",
56168 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56169
56170 {&hf_ieee80211_eht_trigger_he_eht_p160,
56171 {"HE/EHT P160", "wlan.trigger.eht.he_eht_p160",
56172 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0040000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56173
56174 {&hf_ieee80211_eht_trigger_special_user_info_flag,
56175 {"Special User Info Field Flag",
56176 "wlan.trigger.eht.special_user_info_flag",
56177 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0080000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56178
56179 {&hf_ieee80211_eht_trigger_eht_reserved,
56180 {"EHT Reserved", "wlan.trigger.eht.eht_reserved",
56181 FT_UINT64, BASE_HEX, NULL((void*)0), 0x7f00000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56182
56183 {&hf_ieee80211_eht_trigger_reserved,
56184 {"Reserved", "wlan.trigger.eht.reserved",
56185 FT_UINT64, BASE_HEX, NULL((void*)0), 0x8000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56186
56187 {&hf_ieee80211_eht_trigger_user_info,
56188 {"EHT User Info", "wlan.trigger.eht.user_info",
56189 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56190
56191 {&hf_ieee80211_eht_trigger_aid12,
56192 {"AID12", "wlan.trigger.eht.user_info.aid12",
56193 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56194
56195 {&hf_ieee80211_eht_trigger_ru_allocation_region,
56196 {"RU Allocation Region", "wlan.trigger.eht.user_info.ru_allocation_region",
56197 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56198
56199 {&hf_ieee80211_eht_trigger_ru_allocation,
56200 {"RU Allocation", "wlan.trigger.eht.user_info.ru_allocation",
56201 FT_UINT40, BASE_CUSTOM, CF_FUNC(eht_ru_allocation_base_custom)((const void *) (size_t) (eht_ru_allocation_base_custom)), 0x00000FE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56202
56203 {&hf_ieee80211_eht_trigger_ul_fec_coding_type,
56204 {"UL FEC Coding Type", "wlan.trigger.eht.user_info.ul_fec_coding_type",
56205 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56206
56207 {&hf_ieee80211_eht_trigger_ul_eht_mcs,
56208 {"UL EHT MCS", "wlan.trigger.eht.user_info.ul_eht_mcs",
56209 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56210
56211 {&hf_ieee80211_eht_trigger_user_info_reserved,
56212 {"Reserved", "wlan.trigger.eht.user_info.reserved",
56213 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56214
56215 {&hf_ieee80211_eht_trigger_ru_starting_spatial_stream,
56216 {"Starting Spatial Stream",
56217 "wlan.trigger.eht.user_info.ru_starting_spatial_stream",
56218 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56219 0x003C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56220
56221 {&hf_ieee80211_eht_trigger_ru_number_spatial_streams,
56222 {"Number Of Spatial Streams",
56223 "wlan.trigger.eht.user_info.ru_number_spatial_streams",
56224 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56225 0x00C0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56226
56227 {&hf_ieee80211_eht_trigger_ul_target_recv_power,
56228 {"UL Target Receive Power",
56229 "wlan.trigger.eht.user_info.ul_target_receive_power",
56230 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56231
56232 {&hf_ieee80211_eht_trigger_ps160,
56233 {"PS160", "wlan.trigger.eht.user_info.ps160",
56234 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56235
56236 {&hf_ieee80211_eht_trigger_special_user_info,
56237 {"Special User Info",
56238 "wlan.trigger.eht.special_user_info",
56239 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56240
56241 {&hf_ieee80211_eht_trigger_phy_version_identifier,
56242 {"Phy Version Identifier",
56243 "wlan.trigger.eht.user_info.phy_version_identifier",
56244 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56245
56246 {&hf_ieee80211_eht_trigger_ul_bw_extenstion,
56247 {"UL BW Extension", "wlan.trigger.eht.user_info.ul_bw_extension",
56248 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000018000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56249
56250 {&hf_ieee80211_eht_trigger_eht_spatial_reuse_1,
56251 {"EHT/UHR Spatial Reuse 1", "wlan.trigger.eht.user_info.eht_spatial_reuse_1",
56252 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56253
56254 {&hf_ieee80211_eht_trigger_eht_spatial_reuse_2,
56255 {"EHT/UHR Spatial Reuse 2", "wlan.trigger.eht.user_info.eht_spatial_reuse_2",
56256 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56257
56258 {&hf_ieee80211_eht_trigger_disregard_u_sig_1,
56259 {"Disregard In U-SIG-1",
56260 "wlan.trigger.eht.user_info.disregard_u_sig_1",
56261 FT_UINT40, BASE_HEX, NULL((void*)0), 0x007E000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56262
56263 {&hf_ieee80211_eht_trigger_validate_u_sig_2,
56264 {"Validate In U-SIG-2",
56265 "wlan.trigger.eht.user_info.validate_u_sig_2",
56266 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0080000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56267
56268 {&hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb,
56269 {"four LSBs of Disregard In U-SIG-2",
56270 "wlan.trigger.eht.user_info.disregard_u_sig_2_4lsb",
56271 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56272
56273 {&hf_ieee80211_eht_trigger_disregard_u_sig_2_msb,
56274 {"MSB of Disregard In U-SIG-2",
56275 "wlan.trigger.eht.user_info.disregard_u_sig_2_msb",
56276 FT_UINT40, BASE_HEX, NULL((void*)0), 0x1000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56277
56278 {&hf_ieee80211_eht_trigger_special_reserved,
56279 {"Reserved", "wlan.trigger.eht.user_info.special_reserved",
56280 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56281
56282 { &hf_ieee80211_uhr_trigger_common_info,
56283 {"UHR Trigger Common Info", "wlan.trigger.uhr.common_info",
56284 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56285
56286 { &hf_ieee80211_uhr_trigger_type,
56287 {"Trigger Type", "wlan.trigger.uhr.trigger_type",
56288 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
56289 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56290
56291 { &hf_ieee80211_uhr_trigger_ul_length,
56292 {"UL Length", "wlan.trigger.uhr.ul_length",
56293 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56294
56295 { &hf_ieee80211_uhr_trigger_more_tf,
56296 {"More TF", "wlan.trigger.uhr.more_tf",
56297 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56298
56299 { &hf_ieee80211_uhr_trigger_cs_required,
56300 {"CS Required", "wlan.trigger.uhr.cs_required",
56301 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56302
56303 { &hf_ieee80211_uhr_trigger_ul_bw,
56304 {"UL BW", "wlan.trigger.uhr.ul_bw",
56305 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(bw_subfield_vals)((0 ? (const struct _val64_string*)0 : ((bw_subfield_vals)))),
56306 0x00000000000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56307
56308 { &hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type,
56309 {"GI And HE/UHR-LTF Type/Triggered TXOP Sharing Mode",
56310 "wlan.trigger.uhr.gi_and_he_uhr_ltf_type_triggered_txop_sharing_mode",
56311 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000300000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56312
56313 { &hf_ieee80211_uhr_trigger_reserved2,
56314 {"Reserved", "wlan.trigger.uhr.reserved2",
56315 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56316
56317 { &hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc,
56318 {"Number of HE/UHR-LTF Symbols",
56319 "wlan.trigger.uhr.num_he_uhr_ltf_symbols",
56320 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56321
56322 { &hf_ieee80211_uhr_trigger_reserved3,
56323 {"Reserved", "wlan.trigger.uhr.reserved3",
56324 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56325
56326 { &hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg,
56327 {"LDPC Extra Symbol Segment", "wlan.trigger.uhr.ldpc_extra_symbol_segment",
56328 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56329
56330 { &hf_ieee80211_uhr_trigger_ap_tx_power,
56331 {"AP Tx Power", "wlan.trigger.uhr.ap_tx_power",
56332 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
56333 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56334
56335 { &hf_ieee80211_uhr_trigger_pre_fec_padding_factor,
56336 {"Pre-FEC Padding Factor",
56337 "wlan.trigger.uhr.ul_packet_extension.pre_fec_padding_factor",
56338 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400,
56339 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
56340 0x0000000c00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56341
56342 { &hf_ieee80211_uhr_trigger_pe_disambiguity,
56343 {"PE Disambiguity",
56344 "wlan.trigger.uhr.ul_packet_extension.pe_disambiguity",
56345 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
56346 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56347
56348 { &hf_ieee80211_uhr_trigger_ul_spatial_reuse,
56349 {"Spatial Reuse", "wlan.trigger.uhr.spatial_reuse",
56350 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56351
56352 { &hf_ieee80211_uhr_trigger_reserved4,
56353 {"Reserved", "wlan.trigger.uhr.reserved4",
56354 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56355
56356 { &hf_ieee80211_uhr_trigger_he_uhr_p160,
56357 {"HE/UHR P160", "wlan.trigger.uhr.he_uhr_p160",
56358 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0040000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56359
56360 { &hf_ieee80211_uhr_trigger_special_user_info_flag,
56361 {"Special User Info Field Flag",
56362 "wlan.trigger.uhr.special_user_info_flag",
56363 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0080000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56364
56365 { &hf_ieee80211_uhr_trigger_dru_rru,
56366 {"DRU/RRU Indication", "wlan.trigger.uhr.dru_rru",
56367 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0f00000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56368
56369 { &hf_ieee80211_uhr_trigger_ifcs,
56370 {"IFCS Present Flag", "wlan.trigger.uhr.ifcs",
56371 FT_UINT64, BASE_HEX, NULL((void*)0), 0x1000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56372
56373 { &hf_ieee80211_uhr_trigger_uhr_reserved,
56374 {"UHR Reserved", "wlan.trigger.uhr.uhr_reserved",
56375 FT_UINT64, BASE_HEX, NULL((void*)0), 0x2000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56376
56377 { &hf_ieee80211_uhr_trigger_reserved,
56378 {"Reserved", "wlan.trigger.uhr.reserved",
56379 FT_UINT64, BASE_HEX, NULL((void*)0), 0x4000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56380
56381 { &hf_ieee80211_uhr_trigger_user_info,
56382 {"UHR User Info", "wlan.trigger.uhr.user_info",
56383 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56384
56385 { &hf_ieee80211_uhr_trigger_aid12,
56386 {"AID12", "wlan.trigger.uhr.user_info.aid12",
56387 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56388
56389 { &hf_ieee80211_uhr_trigger_ru_allocation_region,
56390 {"RU Allocation Region", "wlan.trigger.uhr.user_info.ru_allocation_region",
56391 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56392
56393 { &hf_ieee80211_uhr_trigger_ru_allocation,
56394 {"RU Allocation", "wlan.trigger.uhr.user_info.ru_allocation",
56395 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000FE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56396
56397 { &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
56398 {"UL FEC Coding Type", "wlan.trigger.uhr.user_info.ul_fec_coding_type",
56399 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56400
56401 { &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
56402 {"UL UHR MCS", "wlan.trigger.uhr.user_info.ul_uhr_mcs",
56403 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56404
56405 { &hf_ieee80211_uhr_trigger_2xldpc,
56406 {"2xLDPC", "wlan.trigger.uhr.user_info.2xldpc",
56407 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56408
56409 { &hf_ieee80211_uhr_trigger_ru_starting_spatial_stream,
56410 {"Starting Spatial Stream",
56411 "wlan.trigger.uhr.user_info.ru_starting_spatial_stream",
56412 FT_UINT40, BASE_DEC, NULL((void*)0),
56413 0x003C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56414
56415 { &hf_ieee80211_uhr_trigger_dru_distribution_bw,
56416 {"DRU Distribution BW",
56417 "wlan.trigger.uhr.user_info.dru_distribution_bw",
56418 FT_UINT40, BASE_DEC, NULL((void*)0),
56419 0x000C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56420
56421 { &hf_ieee80211_uhr_trigger_dru_reserved,
56422 {"DRU reserved",
56423 "wlan.trigger.uhr.user_info.dru_reserved",
56424 FT_UINT40, BASE_DEC, NULL((void*)0),
56425 0x0030000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56426
56427 { &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
56428 {"Number Of Spatial Streams",
56429 "wlan.trigger.uhr.user_info.ru_number_spatial_streams",
56430 FT_UINT40, BASE_DEC, NULL((void*)0),
56431 0x00C0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56432
56433 { &hf_ieee80211_uhr_trigger_ul_target_recv_power,
56434 {"UL Target Receive Power",
56435 "wlan.trigger.uhr.user_info.ul_target_receive_power",
56436 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56437
56438 { &hf_ieee80211_uhr_trigger_ps160,
56439 {"PS160", "wlan.trigger.uhr.user_info.ps160",
56440 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56441
56442 {&hf_ieee80211_ranging_trigger_subtype1,
56443 {"Ranging Trigger Subtype",
56444 "wlan.trigger.he.ranging.ranging_trigger_subtype",
56445 FT_UINT8, BASE_RANGE_STRING0x00000100|BASE_HEX, RVALS(ranging_trigger_subtype_vals)((0 ? (const struct _range_string*)0 : ((ranging_trigger_subtype_vals
))))
,
56446 0x0f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56447
56448 {&hf_ieee80211_ranging_trigger_reserved1,
56449 {"Reserved", "wlan.trigger.he.ranging.reserved",
56450 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56451
56452 {&hf_ieee80211_ranging_trigger_token,
56453 {"Token", "wlan.trigger.he.ranging.token",
56454 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56455
56456 {&hf_ieee80211_ranging_trigger_subtype2,
56457 {"Ranging Trigger Subtype",
56458 "wlan.trigger.he.ranging.ranging_trigger_subtype",
56459 FT_UINT16, BASE_RANGE_STRING0x00000100|BASE_HEX,
56460 RVALS(ranging_trigger_subtype_vals)((0 ? (const struct _range_string*)0 : ((ranging_trigger_subtype_vals
))))
, 0x000f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56461
56462 {&hf_ieee80211_ranging_trigger_reserved2,
56463 {"Reserved", "wlan.trigger.he.ranging.reserved2",
56464 FT_UINT16, BASE_HEX, NULL((void*)0), 0x03f0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56465
56466 {&hf_ieee80211_ranging_trigger_sounding_dialog_token,
56467 {"Sounding Dialog Token Number",
56468 "wlan.trigger.he.ranging.sounding_dialog_token",
56469 FT_UINT16, BASE_HEX, NULL((void*)0), 0xfc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56470
56471 {&hf_ieee80211_he_trigger_ranging_trigger_poll_rpt,
56472 {"Ranging Trigger Poll/Rpt", "wlan.trigger.he.ranging.poll_rpt",
56473 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56474
56475 {&hf_ieee80211_ranging_pol_rpt_aid12_rsid12,
56476 {"AID12/RSID12", "wlan.trigger.he.ranging.poll_rpt.aid12_rsid12",
56477 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56478
56479 {&hf_ieee80211_ranging_pol_rpt_ru_alloc_region,
56480 {"RU Allocation Region", "wlan.trigger.he.ranging.poll_rpt.ru_allocation_region",
56481 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_ru_allocation_region_custom)((const void *) (size_t) (he_trigger_ru_allocation_region_custom
))
,
56482 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56483
56484 {&hf_ieee80211_ranging_pol_rpt_ru_alloc,
56485 {"RU Allocation", "wlan.trigger.he.ranging.poll_rpt.ru_allocation",
56486 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_ru_allocation_base_custom)((const void *) (size_t) (he_ru_allocation_base_custom)), 0x00000fe000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56487
56488 {&hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type,
56489 {"UL FEC Coding Type",
56490 "wlan.trigger.he.ranging.poll_rpt.ul_fec_coding_type",
56491 FT_BOOLEAN, 40, TFS(&he_trigger_ul_fec_coding_type_tfs)((0 ? (const struct true_false_string*)0 : ((&he_trigger_ul_fec_coding_type_tfs
))))
, 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56492
56493 {&hf_ieee80211_ranging_pol_rpt_ulmcs,
56494 {"UL MCS", "wlan.trigger.he.ranging.poll_rpt.ul_mcs",
56495 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56496
56497 {&hf_ieee80211_ranging_pol_rpt_uldcm,
56498 {"UL DCM", "wlan.trigger.he.ranging.poll_rpt.ul_dcm",
56499 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56500
56501 {&hf_ieee80211_ranging_pol_rpt_starting_spatial_stream,
56502 {"Starting Spatial Stream",
56503 "wlan.trigger.he.ranging.poll_rpt.starting_spatial_stream",
56504 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56505 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56506
56507 {&hf_ieee80211_ranging_pol_rpt_number_spatial_streams,
56508 {"Number Of Spatial Streams",
56509 "wlan.trigger.he.ranging.poll_rpt.number_spatial_streams",
56510 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56511 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56512
56513 {&hf_ieee80211_ranging_pol_rpt_ul_target_rssi,
56514 {"UL Target RSSI", "wlan.trigger.he.ranging.poll_rpt.ul_target_rssi",
56515 FT_UINT40, BASE_CUSTOM, CF_FUNC(target_rssi_base_custom)((const void *) (size_t) (target_rssi_base_custom)), 0x7f00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56516
56517 {&hf_ieee80211_ranging_pol_rpt_reserved,
56518 {"Reserved", "wlan.trigger.he.ranging.poll_rpt.reserved",
56519 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56520
56521 {&hf_ieee80211_he_trigger_ranging_trigger_sounding,
56522 {"Ranging Trigger Sounding", "wlan.trigger.he.ranging.sounding",
56523 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56524
56525 {&hf_ieee80211_ranging_sounding_aid12_rsid12,
56526 {"AID12/RSID12", "wlan.trigger.he.ranging.sounding.aid12_rsid12",
56527 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56528
56529 {&hf_ieee80211_ranging_sounding_reserved1,
56530 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved1",
56531 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56532
56533 {&hf_ieee80211_ranging_sounding_i2r_rep,
56534 {"I2R Rep", "wlan.trigger.he.ranging.sounding.i2r_rep",
56535 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56536
56537 {&hf_ieee80211_ranging_sounding_reserved2,
56538 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved2",
56539 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0003000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56540
56541 {&hf_ieee80211_ranging_sounding_starting_spatial_stream,
56542 {"Starting Spatial Stream",
56543 "wlan.trigger.he.ranging.sounding.starting_spatial_stream",
56544 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56545 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56546
56547 {&hf_ieee80211_ranging_sounding_number_spatial_streams,
56548 {"Number of Spatial Streams",
56549 "wlan.trigger.he.ranging.sounding.number_spatial_streams",
56550 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56551 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56552
56553 {&hf_ieee80211_ranging_sounding_ul_target_rssi,
56554 {"UL Target RSSI", "wlan.trigger.he.ranging.sounding.ul_target_rssi",
56555 FT_UINT40, BASE_CUSTOM, CF_FUNC(target_rssi_base_custom)((const void *) (size_t) (target_rssi_base_custom)), 0x7f00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56556
56557 {&hf_ieee80211_ranging_sounding_reserved3,
56558 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved3",
56559 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56560
56561 {&hf_ieee80211_he_trigger_ranging_trigger_sec_sound,
56562 {"Secured Sounding", "wlan.trigger.he.ranging.secured_sounding",
56563 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56564
56565 {&hf_ieee80211_ranging_sec_sound_aid12_rsid12,
56566 {"AID12/RSID12", "wlan.trigger.he.ranging.secured_sounding.aid12_rsid12",
56567 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56568
56569 {&hf_ieee80211_ranging_sec_sound_reserved1,
56570 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved1",
56571 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56572
56573 {&hf_ieee80211_ranging_sec_sound_i2r_rep,
56574 {"I2R Rep", "wlan.trigger.he.ranging.secured_sounding.i2r_rep",
56575 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56576
56577 {&hf_ieee80211_ranging_sec_sound_reserved2,
56578 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved2",
56579 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0003000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56580
56581 {&hf_ieee80211_ranging_sec_sound_starting_spatial_stream,
56582 {"Starting Spatial Stream",
56583 "wlan.trigger.he.ranging.secured_sounding.starting_spatial_stream",
56584 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56585 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56586
56587 {&hf_ieee80211_ranging_sec_sound_number_spatial_streams,
56588 {"Number of Spatial Streams",
56589 "wlan.trigger.he.ranging.secured_sounding.number_spatial_streams",
56590 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56591 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56592
56593 {&hf_ieee80211_ranging_sec_sound_ul_target_rssi,
56594 {"UL Target RSSI",
56595 "wlan.trigger.he.ranging.secured_sounding.ul_target_rssi",
56596 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7f00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56597
56598 {&hf_ieee80211_ranging_sec_sound_reserved3,
56599 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved3",
56600 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56601
56602 {&hf_ieee80211_he_trigger_ranging_user_info_sac,
56603 {"SAC", "wlan.trigger.he.ranging.user_info.sac",
56604 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56605
56606 {&hf_ieee80211_he_qtp_control,
56607 {"Control", "wlan.ext_tag.quiet_time_period.control",
56608 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_HEX, RVALS(quiet_time_period_control_rvals)((0 ? (const struct _range_string*)0 : ((quiet_time_period_control_rvals
))))
, 0,
56609 "Type of Quiet Time Period Element", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56610
56611 {&hf_ieee80211_he_qtp_setup_quiet_period_duration,
56612 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.setup.duration",
56613 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56614 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56615
56616 {&hf_ieee80211_he_qtp_setup_srv_specific_identif,
56617 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.setup.srv_specific_identif",
56618 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56619 "Service Specific peer-to-peer operation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56620
56621 {&hf_ieee80211_he_qtp_request_dialog_token,
56622 {"Dialog Token", "wlan.ext_tag.quiet_time_period.request.dialog_token",
56623 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56624 "Quiet Time Periods Response suptype to which request subtype corresponds",
56625 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56626
56627 {&hf_ieee80211_he_qtp_request_quiet_period_offset,
56628 {"Quiet Period Offset", "wlan.ext_tag.quiet_time_period.request.offset",
56629 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56630 "Offset of the first quiet period from the TBTT in TUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56631
56632 {&hf_ieee80211_he_qtp_request_quiet_period_duration,
56633 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.request.duration",
56634 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56635 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56636
56637 {&hf_ieee80211_he_qtp_request_quiet_period_interval,
56638 {"Quiet Period Interval", "wlan.ext_tag.quiet_time_period.request.interval",
56639 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56640 "Interval between the start of two consecutive quite time periods, in TUs",
56641 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56642
56643 {&hf_ieee80211_he_qtp_request_repetition_count,
56644 {"Repetition Count", "wlan.ext_tag.quiet_time_period.request.repetition_count",
56645 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56646 "Number of requested quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56647
56648 {&hf_ieee80211_he_qtp_request_srv_specific_identif,
56649 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.request.srv_specific_identif",
56650 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56651 "Specified peer-to-peer operation for which participating HE STAs might transmit frames during the quiet time period", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56652
56653 {&hf_ieee80211_he_qtp_response_dialog_token,
56654 {"Dialog Token", "wlan.ext_tag.quiet_time_period.response.dialog_token",
56655 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56656 "The quiet time period request subtype to which this response corresponds",
56657 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56658
56659 {&hf_ieee80211_he_qtp_response_status_code,
56660 {"Status Code", "wlan.ext_tag.quiet_time_period.response.status_code",
56661 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56662 "Status of the requested operation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56663
56664 {&hf_ieee80211_he_qtp_response_quiet_period_offset,
56665 {"Quiet Period Offset", "wlan.ext_tag.quiet_time_period.response.offset",
56666 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56667 "Offset of the start of the first quiet time period", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56668
56669 {&hf_ieee80211_he_qtp_response_quiet_period_duration,
56670 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.response.duration",
56671 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56672 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56673
56674 {&hf_ieee80211_he_qtp_response_quiet_period_interval,
56675 {"Quiet Period Interval", "wlan.ext_tag.quiet_time_period.response.interval",
56676 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56677 "Interval between the start of two consecutive quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56678
56679 {&hf_ieee80211_he_qtp_response_repetition_count,
56680 {"Repetition Count", "wlan.ext_tag.quiet_time_period.response.repetition_count",
56681 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
56682 "Number of requested quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56683
56684 {&hf_ieee80211_he_qtp_response_srv_specific_identif,
56685 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.response.srv_specific_identif",
56686 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56687 "Identifier of a peer-to-peer operation for which participating HE STAs might transmit frames",
56688 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56689
56690 {&hf_ieee80211_he_ndp_annc_sta,
56691 {"STA Info", "wlan.he_ndp.sta_info",
56692 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56693
56694 {&hf_ieee80211_he_ndp_annc_aid11,
56695 {"AID11", "wlan.he_ndp.sta_info.aid11",
56696 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000007FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56697
56698 {&hf_ieee80211_he_ndp_annc_ru_start,
56699 {"RU Start Index", "wlan.he_ndp.sta_info.ru_start",
56700 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003F800,
56701 "26-tone RU start index of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56702
56703 {&hf_ieee80211_he_ndp_annc_ru_end,
56704 {"RU End Index", "wlan.he_ndp.sta_info.ru_end",
56705 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01FC0000,
56706 "26-tone RU end index of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56707
56708 {&hf_ieee80211_he_ndp_annc_feedback_type_and_ng,
56709 {"Feedback Type and Ng", "wlan.he_ndp.sta_info.feedback_type_and_ng",
56710 FT_UINT32, BASE_HEX, NULL((void*)0), 0x06000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56711
56712 {&hf_ieee80211_he_ndp_annc_disambiguation,
56713 {"Disambiguation", "wlan.he_ndp.sta_info.disambiguation",
56714 FT_UINT32, BASE_HEX, NULL((void*)0), 0x08000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56715
56716 {&hf_ieee80211_he_ndp_annc_codebook_size,
56717 {"Codebook Size", "wlan.he_ndp.sta_info.codebook_size",
56718 FT_UINT32, BASE_HEX, NULL((void*)0), 0x10000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56719
56720 {&hf_ieee80211_he_ndp_annc_nc,
56721 {"Nc", "wlan.he_ndp.sta_info.nc",
56722 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56723
56724 {&hf_ieee80211_he_ndp_annc_disallowed_bitmap,
56725 {"Disallowed Subchannel Bitmap",
56726 "wlan.he_ndp.sta_info.disallowed_subchannel_bitmap",
56727 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0007f800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56728
56729 {&hf_ieee80211_he_ndp_annc_reserved1,
56730 {"Reserved", "wlan.he_ndp.sta_info.reserved1",
56731 FT_UINT32, BASE_HEX, NULL((void*)0), 0x07f80000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56732
56733 {&hf_ieee80211_he_ndp_annc_reserved2,
56734 {"Reserved", "wlan.he_ndp.sta_info.reserved2",
56735 FT_UINT32, BASE_HEX, NULL((void*)0), 0xf0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56736
56737 {&hf_ieee80211_htc_ht_lac,
56738 {"Link Adaptation Control (LAC)", "wlan.htc.lac",
56739 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFE,
56740 "High Throughput Control Link Adaptation Control (LAC)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56741
56742 {&hf_ieee80211_htc_lac_trq,
56743 {"Training Request (TRQ)", "wlan.htc.lac.trq",
56744 FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag)((0 ? (const struct true_false_string*)0 : ((&htc_lac_trq_flag
))))
, 0x0002,
56745 "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56746
56747 {&hf_ieee80211_htc_lac_mai_aseli,
56748 {"Antenna Selection Indication (ASELI)", "wlan.htc.lac.mai.aseli",
56749 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C,
56750 "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56751
56752 {&hf_ieee80211_htc_lac_mai_mrq,
56753 {"MCS Request (MRQ)", "wlan.htc.lac.mai.mrq",
56754 FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag)((0 ? (const struct true_false_string*)0 : ((&htc_lac_mai_mrq_flag
))))
, 0x0004,
56755 "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56756
56757 {&hf_ieee80211_htc_lac_mai_msi,
56758 {"MCS Request Sequence Identifier (MSI)", "wlan.htc.lac.mai.msi",
56759 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038,
56760 "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56761
56762 {&hf_ieee80211_htc_lac_mai_reserved,
56763 {"Reserved", "wlan.htc.lac.mai.reserved",
56764 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038,
56765 "High Throughput Control Link Adaptation Control MAI Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56766
56767 {&hf_ieee80211_htc_lac_mfsi,
56768 {"MCS Feedback Sequence Identifier (MFSI)", "wlan.htc.lac.mfsi",
56769 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01C0,
56770 "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56771
56772 {&hf_ieee80211_htc_lac_asel_command,
56773 {"Antenna Selection (ASEL) Command", "wlan.htc.lac.asel.command",
56774 FT_UINT16, BASE_HEX, VALS(ieee80211_htc_lac_asel_command_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_lac_asel_command_flags
))))
, 0x0E00,
56775 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56776
56777 {&hf_ieee80211_htc_lac_asel_data,
56778 {"Antenna Selection (ASEL) Data", "wlan.htc.lac.asel.data",
56779 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
56780 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56781
56782 {&hf_ieee80211_htc_lac_mfb,
56783 {"MCS Feedback (MFB)", "wlan.htc.lac.mfb",
56784 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00,
56785 "High Throughput Control Link Adaptation Control MCS Feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56786
56787 {&hf_ieee80211_htc_cal_pos,
56788 {"Calibration Position", "wlan.htc.cal.pos",
56789 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_cal_pos_flags
))))
, 0x00030000,
56790 "High Throughput Control Calibration Position", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56791
56792 {&hf_ieee80211_htc_cal_seq,
56793 {"Calibration Sequence Identifier", "wlan.htc.cal.seq",
56794 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000C0000,
56795 "High Throughput Control Calibration Sequence Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56796
56797 {&hf_ieee80211_htc_reserved1,
56798 {"Reserved", "wlan.htc.reserved1",
56799 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00300000,
56800 "High Throughput Control Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56801
56802 {&hf_ieee80211_htc_csi_steering,
56803 {"CSI/Steering", "wlan.htc.csi_steering",
56804 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_csi_steering_flags
))))
, 0x00C00000,
56805 "High Throughput Control CSI/Steering", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56806
56807 {&hf_ieee80211_htc_ndp_announcement,
56808 {"NDP Announcement", "wlan.htc.ndp_announcement",
56809 FT_BOOLEAN, 32, TFS(&ieee80211_htc_ndp_announcement_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_htc_ndp_announcement_flag
))))
, 0x01000000,
56810 "High Throughput Control NDP Announcement", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56811
56812 {&hf_ieee80211_htc_reserved2,
56813 {"Reserved", "wlan.htc.reserved2",
56814 FT_UINT32, BASE_HEX, NULL((void*)0), 0x3E000000,
56815 "High Throughput Control Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56816
56817 {&hf_ieee80211_htc_mrq,
56818 {"MRQ", "wlan.htc.mrq",
56819 FT_BOOLEAN, 32, NULL((void*)0), HTC_MRQ0x00000004,
56820 "VHT-MCS feedback request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56821
56822 {&hf_ieee80211_htc_msi,
56823 {"MSI", "wlan.htc.msi",
56824 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000038,
56825 "MRQ sequence number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56826
56827 {&hf_ieee80211_htc_msi_stbc_reserved,
56828 {"Reserved", "wlan.htc.msi_stbc_reserved",
56829 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000038,
56830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56831
56832 {&hf_ieee80211_htc_compressed_msi,
56833 {"Compressed MSI", "wlan.htc.compressed_msi",
56834 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000018,
56835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56836
56837 {&hf_ieee80211_htc_ppdu_stbc_encoded,
56838 {"PPDU was STBC encoded", "wlan.htc.ppdu_stbc_encoded",
56839 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
56840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56841
56842 {&hf_ieee80211_htc_mfsi,
56843 {"MFSI", "wlan.htc.mfsi",
56844 FT_BOOLEAN, 32, NULL((void*)0), 0x000001C0,
56845 "MFB sequence identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56846
56847 {&hf_ieee80211_htc_gid_l,
56848 {"GID-L", "wlan.htc.gid_l",
56849 FT_BOOLEAN, 32, NULL((void*)0), 0x000001C0,
56850 "LSBs of group ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56851
56852 {&hf_ieee80211_htc_mfb,
56853 {"MFB", "wlan.htc.mfb",
56854 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00FFFE00,
56855 "Recommended MFB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56856
56857 {&hf_ieee80211_htc_num_sts,
56858 {"NUM_STS", "wlan.htc.num_sts",
56859 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000E00,
56860 "Recommended NUM_STS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56861
56862 {&hf_ieee80211_htc_vht_mcs,
56863 {"VHT-MCS", "wlan.htc.vht_mcs",
56864 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000F000,
56865 "Recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56866
56867 {&hf_ieee80211_htc_bw,
56868 {"BW", "wlan.htc.bw",
56869 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_bw_recommended_vht_mcs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_bw_recommended_vht_mcs_vals
))))
, 0x00030000,
56870 "Bandwidth for recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56871
56872 {&hf_ieee80211_htc_s1g_num_sts,
56873 {"NUM_STS", "wlan.htc.num_sts",
56874 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000600,
56875 "Recommended NUM_STS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56876
56877 {&hf_ieee80211_htc_s1g_vht_mcs,
56878 {"VHT-MCS", "wlan.htc.vht_mcs",
56879 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00007800,
56880 "Recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56881
56882 {&hf_ieee80211_htc_s1g_bw,
56883 {"BW", "wlan.htc.bw",
56884 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_s1g_bw_recommended_vht_mcs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_s1g_bw_recommended_vht_mcs_vals
))))
, 0x00038000,
56885 "Bandwidth for recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56886
56887 {&hf_ieee80211_htc_snr,
56888 {"SNR", "wlan.htc.snr",
56889 FT_INT32, BASE_DEC, NULL((void*)0), 0x00FC0000,
56890 "Average SNR + 22", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56891
56892 {&hf_ieee80211_htc_reserved3,
56893 {"Reserved", "wlan.htc.reserved3",
56894 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1F000000,
56895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56896
56897 {&hf_ieee80211_htc_gid_h,
56898 {"GID-H", "wlan.htc.gid_h",
56899 FT_UINT32, BASE_DEC, NULL((void*)0), 0x07000000,
56900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56901
56902 {&hf_ieee80211_htc_coding_type,
56903 {"Coding type", "wlan.htc.coding_type",
56904 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_coding_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_coding_type_vals
))))
, 0x08000000,
56905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56906
56907 {&hf_ieee80211_htc_fb_tx_type,
56908 {"FB Tx type", "wlan.htc.fb_tx_type",
56909 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_fb_tx_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_fb_tx_type_vals
))))
, 0x10000000,
56910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56911
56912 {&hf_ieee80211_htc_unsolicited_mfb,
56913 {"Unsolicited MFB", "wlan.htc.unsolicited_mfb",
56914 FT_BOOLEAN, 32, NULL((void*)0), HTC_UNSOLICITED_MFB0x20000000,
56915 "High Throughput Control Unsolicited MFB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56916
56917 {&hf_ieee80211_htc_ac_constraint,
56918 {"AC Constraint", "wlan.htc.ac_constraint",
56919 FT_BOOLEAN, 32, NULL((void*)0), 0x40000000,
56920 "High Throughput Control AC Constraint", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56921
56922 {&hf_ieee80211_htc_rdg_more_ppdu,
56923 {"RDG/More PPDU", "wlan.htc.rdg_more_ppdu",
56924 FT_BOOLEAN, 32, NULL((void*)0), 0x80000000,
56925 "High Throughput Control RDG/More PPDU", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56926 /* End: HT Control (+HTC) */
56927
56928 /* MDIE */
56929 {&hf_ieee80211_tag_mobility_domain_mdid,
56930 {"Mobility Domain Identifier", "wlan.mobility_domain.mdid",
56931 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56933
56934 {&hf_ieee80211_tag_mobility_domain_ft_capab,
56935 {"FT Capability and Policy", "wlan.mobility_domain.ft_capab",
56936 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
56937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56938
56939 {&hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
56940 {"Fast BSS Transition over DS",
56941 "wlan.mobility_domain.ft_capab.ft_over_ds",
56942 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
56943 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56944
56945 {&hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
56946 {"Resource Request Protocol Capability",
56947 "wlan.mobility_domain.ft_capab.resource_req",
56948 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
56949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56950
56951 {&hf_ieee80211_tag_mobility_domain_ft_capab_reserved,
56952 {"Reserved",
56953 "wlan.mobility_domain.ft_capab.reserved",
56954 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc,
56955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56956
56957 /* FTIE */
56958 {&hf_ieee80211_tag_ft_mic_control,
56959 {"MIC Control", "wlan.ft.mic_control",
56960 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56961 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56962
56963 {&hf_ieee80211_tag_ft_mic_control_rsnxe_used,
56964 {"RSNXE Used", "wlan.ft.mic_control.rsnxe_used",
56965 FT_BOOLEAN, 16, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56966
56967 {&hf_ieee80211_tag_ft_mic_control_mic_length,
56968 {"MIC Length", "wlan.ft.mic_control.mic_length",
56969 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56970
56971 {&hf_ieee80211_tag_ft_mic_control_reserved,
56972 {"Reserved", "wlan.ft.mic_control.reserved",
56973 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00f0,
56974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56975
56976 {&hf_ieee80211_tag_ft_mic_control_element_count,
56977 {"Element Count", "wlan.ft.mic_control.element_count",
56978 FT_UINT16, BASE_DEC, NULL((void*)0), 0xff00,
56979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56980
56981 {&hf_ieee80211_tag_ft_mic,
56982 {"MIC", "wlan.ft.mic",
56983 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
56984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56985
56986 {&hf_ieee80211_tag_ft_anonce,
56987 {"ANonce", "wlan.ft.anonce",
56988 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
56989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56990
56991 {&hf_ieee80211_tag_ft_snonce,
56992 {"SNonce", "wlan.ft.snonce",
56993 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
56994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56995
56996 {&hf_ieee80211_tag_ft_subelem_id,
56997 {"Subelement ID", "wlan.ft.subelem.id",
56998 FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals)((0 ? (const struct _value_string*)0 : ((ft_subelem_id_vals))
))
, 0,
56999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57000
57001 {&hf_ieee80211_tag_ft_subelem_len,
57002 {"Length", "wlan.ft.subelem.len",
57003 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57005
57006 {&hf_ieee80211_tag_ft_subelem_data,
57007 {"Data", "wlan.ft.subelem.data",
57008 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57010
57011 {&hf_ieee80211_tag_ft_subelem_r1kh_id,
57012 {"PMK-R1 key holder identifier (R1KH-ID)", "wlan.ft.subelem.r1kh_id",
57013 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57015
57016 {&hf_ieee80211_tag_ft_subelem_gtk_key_info,
57017 {"Key Info", "wlan.ft.subelem.gtk.key_info",
57018 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57020
57021 {&hf_ieee80211_tag_ft_subelem_gtk_key_id,
57022 {"Key ID", "wlan.ft.subelem.gtk.key_id",
57023 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
57024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57025
57026 {&hf_ieee80211_tag_ft_subelem_gtk_key_length,
57027 {"Key Length", "wlan.ft.subelem.gtk.key_length",
57028 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57030
57031 {&hf_ieee80211_tag_ft_subelem_gtk_rsc,
57032 {"RSC", "wlan.ft.subelem.gtk.rsc",
57033 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57035
57036 {&hf_ieee80211_tag_ft_subelem_gtk_key,
57037 {"GTK", "wlan.ft.subelem.gtk.key",
57038 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57040
57041 {&hf_ieee80211_tag_ft_subelem_gtk_key_encrypted,
57042 {"GTK (encrypted)", "wlan.ft.subelem.gtk.key_encrypted",
57043 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57045
57046 {&hf_ieee80211_tag_ft_subelem_r0kh_id,
57047 {"PMK-R0 key holder identifier (R0KH-ID)", "wlan.ft.subelem.r0kh_id",
57048 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57050
57051 {&hf_ieee80211_tag_ft_subelem_igtk_key_id,
57052 {"Key ID", "wlan.ft.subelem.igtk.key_id",
57053 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57055
57056 {&hf_ieee80211_tag_ft_subelem_igtk_ipn,
57057 {"IPN", "wlan.ft.subelem.igtk.ipn",
57058 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57060
57061 {&hf_ieee80211_tag_ft_subelem_igtk_key_length,
57062 {"Key Length", "wlan.ft.subelem.igtk.key_length",
57063 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57065
57066 {&hf_ieee80211_tag_ft_subelem_igtk_key,
57067 {"Wrapped Key (IGTK)", "wlan.ft.subelem.igtk.key",
57068 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57069
57070 {&hf_ieee80211_tag_ft_subelem_oci_op_class,
57071 {"Operating Class", "wlan.ft.subelem.oci.operating_class",
57072 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57073
57074 {&hf_ieee80211_tag_ft_subelem_oci_prim_chan_num,
57075 {"Primary Channel Number", "wlan.ft.subelem.oci.primary_channel_number",
57076 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57077
57078 {&hf_ieee80211_tag_ft_subelem_oci_freq_seg_1,
57079 {"Frequency Segment 1 Channel Number",
57080 "wlan.ft.subelem.oci.frequency_segment_1_channel_number",
57081 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57082
57083 {&hf_ieee80211_tag_ft_subelem_oci_oct_op_class,
57084 {"OCT Operating Class", "wlan.ft.subelem.oci.oct_operating_class",
57085 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57086
57087 {&hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num,
57088 {"OCT Primary Channel Number",
57089 "wlan.ft.subelem.oci.oct_primary_channel_number",
57090 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57091
57092 {&hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1,
57093 {"OCT Frequency Segment 1 Channel Number",
57094 "wlan.ft.subelem.oci.oct_frequency_segment_1_channel_number",
57095 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57096
57097 {&hf_ieee80211_tag_ft_subelem_bigtk_key_id,
57098 {"Key ID", "wlan.ft.subelem.bigtk.key_id",
57099 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57101
57102 {&hf_ieee80211_tag_ft_subelem_bigtk_bipn,
57103 {"BIPN", "wlan.ft.subelem.bigtk.bipn",
57104 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57106
57107 {&hf_ieee80211_tag_ft_subelem_bigtk_key_length,
57108 {"Key Length", "wlan.ft.subelem.bigtk.key_length",
57109 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57111
57112 {&hf_ieee80211_tag_ft_subelem_bigtk_key,
57113 {"Wrapped Key (BIGTK)", "wlan.ft.subelem.bigtk.key",
57114 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57115
57116 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info,
57117 {"Key Info", "wlan.ft.subelem.mlo_gtk.key_info",
57118 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57120
57121 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id,
57122 {"Key ID", "wlan.ft.subelem.mlo_gtk.key_id",
57123 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
57124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57125
57126 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info,
57127 {"Link ID Info", "wlan.ft.subelem.mlo_gtk.link_id_info",
57128 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57130
57131 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id,
57132 {"Link ID", "wlan.ft.subelem.mlo_gtk.link_id",
57133 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57135
57136 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length,
57137 {"Key Length", "wlan.ft.subelem.mlo_gtk.key_length",
57138 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57140
57141 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc,
57142 {"RSC", "wlan.ft.subelem.mlo_gtk.rsc",
57143 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57145
57146 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key,
57147 {"Wrapped Key (MLO GTK)", "wlan.ft.subelem.mlo_gtk.key",
57148 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57150
57151 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id,
57152 {"Key ID", "wlan.ft.subelem.mlo_igtk.key_id",
57153 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57155
57156 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn,
57157 {"IPN", "wlan.ft.subelem.mlo_igtk.ipn",
57158 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57160
57161 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info,
57162 {"Link ID Info", "wlan.ft.subelem.mlo_igtk.link_id_info",
57163 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57165
57166 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id,
57167 {"Link ID", "wlan.ft.subelem.mlo_igtk.link_id",
57168 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57170
57171 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length,
57172 {"Key Length", "wlan.ft.subelem.mlo_igtk.key_length",
57173 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57175
57176 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key,
57177 {"Wrapped Key (MLO IGTK)", "wlan.ft.subelem.mlo_igtk.key",
57178 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57179
57180 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id,
57181 {"Key ID", "wlan.ft.subelem.mlo_bigtk.key_id",
57182 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57184
57185 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_bipn,
57186 {"BIPN", "wlan.ft.subelem.mlo_bigtk.bipn",
57187 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57189
57190 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id,
57191 {"Link ID", "wlan.ft.subelem.mlo_bigtk.link_id",
57192 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57194
57195 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info,
57196 {"Link ID Info", "wlan.ft.subelem.mlo_bigtk.link_id_info",
57197 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57199
57200 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length,
57201 {"Key Length", "wlan.ft.subelem.mlo_bigtk.key_length",
57202 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57203 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57204
57205 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_key,
57206 {"Wrapped Key (MLO BIGTK)", "wlan.ft.subelem.mlo_bigtk.key",
57207 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57208
57209 /* RIC Data IE: 802.11-2012: 8.4.2.52 */
57210 {&hf_ieee80211_tag_ric_data_id,
57211 {"Resource Handshake Identifier", "wlan.ric_data.id",
57212 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57213
57214 {&hf_ieee80211_tag_ric_data_desc_cnt,
57215 {"Resource Descriptor Count", "wlan.ric_data.desc_cnt",
57216 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57217
57218 {&hf_ieee80211_tag_ric_data_status_code,
57219 {"Status Code", "wlan.ric_data.status_code",
57220 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
57221 "Status of requested Resource", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57222
57223 /* OBSS IE: 802.11-2012: 8.4.2.61 */
57224 {&hf_ieee80211_tag_obss_spd,
57225 {"Scan Passive Dwell", "wlan.obss.spd",
57226 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57227
57228 {&hf_ieee80211_tag_obss_sad,
57229 {"Scan Active Dwell", "wlan.obss.sad",
57230 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57231
57232 {&hf_ieee80211_tag_obss_cwtsi,
57233 {"Channel Width Trigger Scan Interval", "wlan.obss.cwtsi",
57234 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57235
57236 {&hf_ieee80211_tag_obss_sptpc,
57237 {"Scan Passive Total Per Channel", "wlan.obss.sptpc",
57238 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57239
57240 {&hf_ieee80211_tag_obss_satpc,
57241 {"Scan Active Total Per Channel", "wlan.obss.satpc",
57242 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57243
57244 {&hf_ieee80211_tag_obss_wctdf,
57245 {"Width Channel Transition Delay Factor", "wlan.obss.wctdf",
57246 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57247
57248 {&hf_ieee80211_tag_obss_sat,
57249 {"Scan Activity Threshold", "wlan.obss.sat",
57250 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57251
57252 /* Group Data Cypher Suite: 802.11-2012: 8.4.2.25.1 */
57253 {&hf_ieee80211_group_data_cipher_suite_oui,
57254 {"Group Data Cypher Suite OUI", "wlan.osen.gdcs.oui",
57255 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57256
57257 /* TODO: List the suite names ... */
57258 {&hf_ieee80211_group_data_cipher_suite_type,
57259 {"Group Data Cypher Suite type", "wlan.osen.gdcs.type",
57260 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57261
57262 {&hf_ieee80211_osen_pcs_count,
57263 {"OSEN Pairwise Cipher Suite Count", "wlan.osen.pwcs.count",
57264 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57265
57266 {&hf_ieee80211_osen_pairwise_cipher_suite_oui,
57267 {"OSEN Pairwise Cypher Suite OUI", "wlan.osen.pwcs.oui",
57268 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57269
57270 {&hf_ieee80211_osen_pairwise_cipher_suite_type,
57271 {"OSEN Pairwise Cypher Suite type", "wlan.osen.pwcs.type",
57272 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57273
57274 {&hf_ieee80211_osen_akm_count,
57275 {"OSEN AKM Cipher Suite Count", "wlan.osen.akms.count",
57276 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57277
57278 {&hf_ieee80211_osen_akm_cipher_suite_oui,
57279 {"OSEN AKM Cipher Suite OUI", "wlan.osen.akms.oui",
57280 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57281
57282 {&hf_ieee80211_osen_akm_cipher_suite_type,
57283 {"OSEN AKM Cipher Suite Type", "wlan.osen.akms.type",
57284 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57285
57286 {&hf_ieee80211_osen_rsn_cap_preauth,
57287 {"RSN Pre-Auth capabilities", "wlan.osen.rsn.capabilities.preauth",
57288 FT_BOOLEAN, 16, TFS(&rsn_preauth_flags)((0 ? (const struct true_false_string*)0 : ((&rsn_preauth_flags
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57289
57290 {&hf_ieee80211_osen_rsn_cap_no_pairwise,
57291 {"RSN No Pairwise capabilities", "wlan.osen.rsn.capabilities.no_pairwise",
57292 FT_BOOLEAN, 16, TFS(&rsn_no_pairwise_flags)((0 ? (const struct true_false_string*)0 : ((&rsn_no_pairwise_flags
))))
, 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57293
57294 {&hf_ieee80211_osen_rsn_cap_ptksa_replay_counter,
57295 {"RSN PTKSA Replay Counter capabilities",
57296 "wlan.osen.rsn.capabilities.ptksa_replay_counter",
57297 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)((0 ? (const struct _value_string*)0 : ((rsn_cap_replay_counter
))))
, 0x000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57298
57299 {&hf_ieee80211_osen_rsn_cap_gtksa_replay_counter,
57300 {"RSN GTKSA Replay Counter capabilities",
57301 "wlan.osen.rsn.capabilities.gtksa_replay_counter",
57302 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)((0 ? (const struct _value_string*)0 : ((rsn_cap_replay_counter
))))
, 0x0030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57303
57304 {&hf_ieee80211_osen_group_management_cipher_suite_oui,
57305 {"OSEN Group Management Cipher Suite OUI", "wlan.osen.gmcs.oui",
57306 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57307
57308 {&hf_ieee80211_osen_group_management_cipher_suite_type,
57309 {"OSEN Group Management Cipher Suite Type", "wlan.osen.gmcs.type",
57310 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57311
57312 {&hf_ieee80211_osen_rsn_cap_mfpr,
57313 {"Management Frame Protection Required", "wlan.osen.rsn.capabilities.mfpr",
57314 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57315
57316 {&hf_ieee80211_osen_rsn_cap_mfpc,
57317 {"Management Frame Protection Capable", "wlan.osen.rsn.capabilities.mfpc",
57318 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57319
57320 {&hf_ieee80211_osen_rsn_cap_jmr,
57321 {"Joint Multi-band RSNA", "wlan.osen.rsn.capabilities.jmr",
57322 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57323
57324 {&hf_ieee80211_osen_rsn_cap_peerkey,
57325 {"PeerKey Enabled", "wlan.osen.rsn.capabilities.peerkey",
57326 FT_BOOLEAN, 16, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57327
57328 {&hf_ieee80211_osen_rsn_cap_flags,
57329 {"RSN Capability Flags", "wlan.osen.rsn.capabilities.flags",
57330 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57331
57332 {&hf_ieee80211_osen_rsn_spp_a_msdu_capable,
57333 {"SPP A-MSDU Capable", "wlan.osen.rsn.capabilities.spp_a_msdu_cap",
57334 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57335
57336 {&hf_ieee80211_osen_rsn_spp_a_msdu_required,
57337 {"SPP A-MSDU Required", "wlan.osen.rsn.capabilities.spp_a_msdu_req",
57338 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57339
57340 {&hf_ieee80211_osen_rsn_pbac,
57341 {"Protected Block Ack Agreement Capable", "wlan.osen.rsn.capabilities.pbac",
57342 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57343
57344 {&hf_ieee80211_osen_extended_key_id_iaf,
57345 {"Extended Key ID for Individually Addressed Frames",
57346 "wlan.osn.rsn.extended_key_id_iaf",
57347 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57348
57349 {&hf_ieee80211_osen_reserved,
57350 {"Reserved", "wlan.osen.rsn.capabilities.reserved",
57351 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57352
57353 {&hf_ieee80211_osen_pmkid_count,
57354 {"OSEN PMKID Count", "wlan.osen.pmkid.count",
57355 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57356
57357 {&hf_ieee80211_osen_pmkid,
57358 {"OSEN PKMID", "wlan.osen.pmkid.bytes",
57359 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57360
57361 /* RIC Descriptor IE: 802.11-2012: 8.4.2.53 */
57362 {&hf_ieee80211_tag_ric_desc_rsrc_type,
57363 {"Resource Type", "wlan.ric_desc.rsrc_type",
57364 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57365
57366 {&hf_ieee80211_tag_ric_desc_var_params,
57367 {"Variable Params", "wlan.ric_desc.var_params",
57368 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57369
57370 /* MMIE */
57371 {&hf_ieee80211_tag_mmie_keyid,
57372 {"KeyID", "wlan.mmie.keyid",
57373 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57374
57375 {&hf_ieee80211_tag_mmie_ipn,
57376 {"IPN", "wlan.mmie.ipn",
57377 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57378
57379 {&hf_ieee80211_tag_mmie_mic,
57380 {"MIC", "wlan.mmie.mic",
57381 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57382
57383 /* Non Transmitted BSSID Capability */
57384 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control,
57385 {"DMG BSS Control", "wlan.no_bssid_capability.dmg_bss_control",
57386 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57387
57388 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type,
57389 {"Type", "wlan.no_bssid_capability.dmg_bss_control.type",
57390 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57391
57392 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved,
57393 {"Reserved", "wlan.no_bssid_capability.dmg_bss_control.reserved",
57394 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57395
57396 /* Multiple BSSID Index */
57397 {&hf_ieee80211_tag_multiple_bssid_index_bssid_index,
57398 {"BSSID Index", "wlan.multiple_bssid_index.bssid_index",
57399 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57400
57401 {&hf_ieee80211_tag_multiple_bssid_index_dtim_period,
57402 {"DTIM Period", "wlan.multiple_bssid_index.dtim_period",
57403 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57404
57405 {&hf_ieee80211_tag_multiple_bssid_index_dtim_count,
57406 {"DTIM Count", "wlan.multiple_bssid_index.dtim_count",
57407 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57408
57409 /* WAPI Parameter Set*/
57410 {&hf_ieee80211_tag_wapi_param_set_version,
57411 {"Version", "wlan.wapi.version",
57412 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57413 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57414
57415 {&hf_ieee80211_tag_wapi_param_set_akm_suite_count,
57416 {"AKM Suite Count", "wlan.wapi.akm_suite.count",
57417 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57418 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57419
57420 {&hf_ieee80211_tag_wapi_param_set_akm_suite_oui,
57421 {"AKM Suite OUI", "wlan.wapi.akm_suite.oui",
57422 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57423 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57424
57425 {&hf_ieee80211_tag_wapi_param_set_akm_suite_type,
57426 {"AKM Suite Type", "wlan.wapi.akm_suite.type",
57427 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_suite_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_suite_type
))))
, 0,
57428 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57429
57430 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
57431 {"Unicast Cipher Suite Count", "wlan.wapi.unicast_cipher.suite.count",
57432 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57433 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57434
57435 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui,
57436 {"Unicast Cipher Suite OUI", "wlan.wapi.unicast_cipher.suite.oui",
57437 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57438 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57439
57440 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type,
57441 {"Unicast Cipher Suite Type", "wlan.wapi.unicast_cipher.suite.type",
57442 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_cipher_type
))))
, 0,
57443 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57444
57445 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui,
57446 {"Multicast Cipher Suite OUI", "wlan.wapi.multicast_cipher.suite.oui",
57447 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57448 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57449
57450 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type,
57451 {"Multicast Cipher Suite Type", "wlan.wapi.multicast_cipher.suite.type",
57452 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_cipher_type
))))
, 0,
57453 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57454
57455 {&hf_ieee80211_tag_wapi_param_set_capab,
57456 {"WAPI Capability Info", "wlan.wapi.capab",
57457 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57458 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57459
57460 {&hf_ieee80211_tag_wapi_param_set_capab_preauth,
57461 {"Supports Preauthentication?", "wlan.wapi.capab.preauth",
57462 FT_BOOLEAN, 16 , NULL((void*)0), 0x0001,
57463 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57464
57465 {&hf_ieee80211_tag_wapi_param_set_capab_rsvd,
57466 {"Reserved", "wlan.wapi.capab.rsvd",
57467 FT_UINT16, BASE_DEC , NULL((void*)0), 0xFFFE,
57468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57469
57470 {&hf_ieee80211_tag_wapi_param_set_bkid_count,
57471 {"No of BKID's", "wlan.wapi.bkid.count",
57472 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57473 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57474
57475 {&hf_ieee80211_tag_wapi_param_set_bkid_list,
57476 {"BKID", "wlan.wapi.bkid",
57477 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57478 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57479
57480 /* BSS Max Idle Period */
57481 {&hf_ieee80211_tag_bss_max_idle_period,
57482 {"Max Idle Period (1000 TUs)", "wlan.bss_max_idle.period",
57483 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57484
57485 {&hf_ieee80211_tag_bss_max_idle_options,
57486 {"Idle Options", "wlan.bss_max_idle.options",
57487 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57488
57489 {&hf_ieee80211_tag_bss_max_idle_options_protected,
57490 {"Protected Keep-Alive Required",
57491 "wlan.bss_max_idle.options.protected",
57492 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57493
57494 {&hf_ieee80211_tag_bss_idle_options_reserved,
57495 {"Reserved", "wlan.bss_max_idle.options.reserved",
57496 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57497
57498 /* TFS Request */
57499 {&hf_ieee80211_tag_tfs_request_id,
57500 {"TFS ID", "wlan.tfs_request.id",
57501 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57502
57503 {&hf_ieee80211_tag_tfs_request_ac_delete_after_match,
57504 {"TFS Action Code - Delete after match",
57505 "wlan.tfs_request.action_code.delete_after_match",
57506 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57507
57508 {&hf_ieee80211_tag_tfs_request_ac_notify,
57509 {"TFS Action Code - Notify",
57510 "wlan.tfs_request.action_code.notify",
57511 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57512
57513 {&hf_ieee80211_tag_tfs_request_subelem_id,
57514 {"Subelement ID", "wlan.tfs_request.subelem.id",
57515 FT_UINT8, BASE_DEC, VALS(tfs_request_subelem_ids)((0 ? (const struct _value_string*)0 : ((tfs_request_subelem_ids
))))
, 0,
57516 "TFS Request Subelement ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57517
57518 {&hf_ieee80211_tag_tfs_request_subelem_len,
57519 {"Length", "wlan.tfs_request.subelem.len",
57520 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57521 "TFS Request Subelement Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57522
57523 {&hf_ieee80211_tag_tfs_request_subelem,
57524 {"Subelement Data", "wlan.tfs_request.subelem",
57525 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57526 "TFS Request Subelement Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57527
57528 /* TFS Response */
57529 {&hf_ieee80211_tag_tfs_response_subelem_id,
57530 {"Subelement ID", "wlan.tfs_response.subelem.id",
57531 FT_UINT8, BASE_DEC, VALS(tfs_response_subelem_ids)((0 ? (const struct _value_string*)0 : ((tfs_response_subelem_ids
))))
, 0,
57532 "TFS Response Subelement ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57533
57534 {&hf_ieee80211_tag_tfs_response_subelem_len,
57535 {"Length", "wlan.tfs_response.subelem.len",
57536 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57537 "TFS Response Subelement Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57538
57539 {&hf_ieee80211_tag_tfs_response_subelem,
57540 {"Subelement Data", "wlan.tfs_response.subelem",
57541 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57542 "TFS Response Subelement Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57543
57544 {&hf_ieee80211_tag_tfs_response_status,
57545 {"TFS Response Status", "wlan.tfs_response.status",
57546 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57547
57548 {&hf_ieee80211_tag_tfs_response_id,
57549 {"TFS ID", "wlan.tfs_response.tfs_id",
57550 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57551
57552 /* WNM-Sleep Mode */
57553 {&hf_ieee80211_tag_wnm_sleep_mode_action_type,
57554 {"Action Type", "wlan.wnm_sleep_mode.action_type",
57555 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_action_types)((0 ? (const struct _value_string*)0 : ((wnm_sleep_mode_action_types
))))
, 0,
57556 "WNM-Sleep Mode Action Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57557
57558 {&hf_ieee80211_tag_wnm_sleep_mode_response_status,
57559 {"WNM-Sleep Mode Response Status",
57560 "wlan.wnm_sleep_mode.response_status",
57561 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_response_status_vals)((0 ? (const struct _value_string*)0 : ((wnm_sleep_mode_response_status_vals
))))
, 0, NULL((void*)0),
57562 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57563
57564 {&hf_ieee80211_tag_wnm_sleep_mode_interval,
57565 {"WNM-Sleep Interval", "wlan.wnm_sleep_mode.interval",
57566 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57567
57568 {&hf_ieee80211_wnm_sub_elt_id,
57569 {"Subelement ID", "wlan.wnm_subelt.id",
57570 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57571
57572 {&hf_ieee80211_wnm_sub_elt_len,
57573 {"Subelement len", "wlan.wnm_subelt.len",
57574 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57575
57576 /* Time Advertisement */
57577 {&hf_ieee80211_tag_time_adv_timing_capab,
57578 {"Timing capabilities", "wlan.time_adv.timing_capab",
57579 FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals)((0 ? (const struct _value_string*)0 : ((time_adv_timing_capab_vals
))))
, 0,
57580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57581
57582 {&hf_ieee80211_tag_time_adv_time_value,
57583 {"Time Value", "wlan.time_adv.time_value",
57584 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57586
57587 {&hf_ieee80211_tag_time_adv_time_value_year,
57588 {"Time Value: Year", "wlan.time_adv.time_value.year",
57589 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57590 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57591
57592 {&hf_ieee80211_tag_time_adv_time_value_month,
57593 {"Time Value: Month", "wlan.time_adv.time_value.month",
57594 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57595 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57596
57597 {&hf_ieee80211_tag_time_adv_time_value_day,
57598 {"Time Value: Day", "wlan.time_adv.time_value.day",
57599 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57600 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57601
57602 {&hf_ieee80211_tag_time_adv_time_value_hours,
57603 {"Time Value: Hours", "wlan.time_adv.time_value.hours",
57604 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57606
57607 {&hf_ieee80211_tag_time_adv_time_value_minutes,
57608 {"Time Value: Minutes", "wlan.time_adv.time_value.minutes",
57609 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57611
57612 {&hf_ieee80211_tag_time_adv_time_value_seconds,
57613 {"Time Value: Seconds", "wlan.time_adv.time_value.seconds",
57614 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57616
57617 {&hf_ieee80211_tag_time_adv_time_value_milliseconds,
57618 {"Time Value: Milliseconds", "wlan.time_adv.time_value.milliseconds",
57619 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57621
57622 {&hf_ieee80211_tag_time_adv_time_value_reserved,
57623 {"Time Value: Reserved", "wlan.time_adv.time_value.reserved",
57624 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57626
57627 {&hf_ieee80211_tag_time_adv_time_error,
57628 {"Time Error", "wlan.time_adv.time_error",
57629 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57631
57632 {&hf_ieee80211_tag_time_adv_time_update_counter,
57633 {"Time Update Counter", "wlan.time_adv.time_update_counter",
57634 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57636
57637 /* Time Zone */
57638 {&hf_ieee80211_tag_time_zone,
57639 {"Time Zone", "wlan.time_zone",
57640 FT_STRING, BASE_NONE, NULL((void*)0), 0,
57641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57642
57643 /* Interworking */
57644 {&hf_ieee80211_tag_interworking_access_network_type,
57645 {"Access Network Type", "wlan.interworking.access_network_type",
57646 FT_UINT8, BASE_DEC, VALS(access_network_type_vals)((0 ? (const struct _value_string*)0 : ((access_network_type_vals
))))
, 0x0f,
57647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57648
57649 {&hf_ieee80211_tag_interworking_internet,
57650 {"Internet", "wlan.interworking.internet",
57651 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
57652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57653
57654 {&hf_ieee80211_tag_interworking_asra,
57655 {"ASRA", "wlan.interworking.asra",
57656 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
57657 "Additional Step Required for Access", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57658
57659 {&hf_ieee80211_tag_interworking_esr,
57660 {"ESR", "wlan.interworking.esr",
57661 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
57662 "Emergency services reachable", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57663
57664 {&hf_ieee80211_tag_interworking_uesa,
57665 {"UESA", "wlan.interworking.uesa",
57666 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
57667 "Unauthenticated emergency service accessible", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57668
57669 {&hf_ieee80211_tag_interworking_hessid,
57670 {"HESSID", "wlan.interworking.hessid",
57671 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57672 "Homogeneous ESS identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57673
57674 /* QoS Map Set element */
57675 {&hf_ieee80211_tag_qos_map_set_dscp_exc,
57676 {"DSCP Exception", "wlan.qos_map_set.dscp_exception",
57677 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57678
57679 {&hf_ieee80211_tag_qos_map_set_dscp_exc_val,
57680 {"DSCP Value", "wlan.qos_map_set.dscp_value",
57681 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57682 "DSCP Exception - DSCP Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57683
57684 {&hf_ieee80211_tag_qos_map_set_dscp_exc_up,
57685 {"User Priority", "wlan.qos_map_set.up",
57686 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57687 "DSCP Exception - User Priority", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57688
57689 {&hf_ieee80211_tag_qos_map_set_range,
57690 {"DSCP Range description", "wlan.qos_map_set.range",
57691 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57692
57693 {&hf_ieee80211_tag_qos_map_set_low,
57694 {"DSCP Low Value", "wlan.qos_map_set.dscp_low_value",
57695 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57696 "DSCP Range description - DSCP Low Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57697
57698 {&hf_ieee80211_tag_qos_map_set_high,
57699 {"DSCP High Value", "wlan.qos_map_set.dscp_high_value",
57700 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57701 "DSCP Range description - DSCP High Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57702
57703 /* Advertisement Protocol */
57704 {&hf_ieee80211_tag_adv_proto_resp_len_limit,
57705 {"Query Response Length Limit", "wlan.adv_proto.resp_len_limit",
57706 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7f,
57707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57708
57709 {&hf_ieee80211_tag_adv_proto_pame_bi,
57710 {"PAME-BI", "wlan.adv_proto.pame_bi",
57711 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
57712 "Pre-Association Message Xchange BSSID Independent (PAME-BI)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57713
57714 {&hf_ieee80211_tag_adv_proto_id,
57715 {"Advertisement Protocol ID", "wlan.adv_proto.id",
57716 FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals)((0 ? (const struct _value_string*)0 : ((adv_proto_id_vals)))
)
, 0,
57717 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57718
57719 {&hf_ieee80211_tag_adv_vs_len,
57720 {"Advertisement Protocol Vendor Specific length", "wlan.adv_proto.vs_len",
57721 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57722 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
57723#if 0
57724 {&hf_ieee80211_tag_adv_proto_vs_info,
57725 {"Advertisement Protocol Vendor Specific info", "wlan.adv_proto.vs_info",
57726 FT_NONE, BASE_NONE, NULL((void*)0), 0,
57727 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57728#endif
57729
57730 /* Roaming Consortium */
57731 {&hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
57732 {"Number of ANQP OIs", "wlan.roaming_consortium.num_anqp_oi",
57733 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57735
57736 {&hf_ieee80211_tag_roaming_consortium_oi1_len,
57737 {"OI #1 Length", "wlan.roaming_consortium.oi1_len",
57738 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57740
57741 {&hf_ieee80211_tag_roaming_consortium_oi2_len,
57742 {"OI #2 Length", "wlan.roaming_consortium.oi2_len",
57743 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
57744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57745
57746 {&hf_ieee80211_tag_roaming_consortium_oi1,
57747 {"OI #1", "wlan.roaming_consortium.oi1",
57748 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57750
57751 {&hf_ieee80211_tag_roaming_consortium_oi2,
57752 {"OI #2", "wlan.roaming_consortium.oi2",
57753 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57755
57756 {&hf_ieee80211_tag_roaming_consortium_oi3,
57757 {"OI #3", "wlan.roaming_consortium.oi3",
57758 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57760
57761 /* Timeout Interval */
57762 {&hf_ieee80211_tag_timeout_int_type,
57763 {"Timeout Interval Type", "wlan.timeout_int.type",
57764 FT_UINT8, BASE_DEC, VALS(timeout_int_types)((0 ? (const struct _value_string*)0 : ((timeout_int_types)))
)
, 0,
57765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57766
57767 {&hf_ieee80211_tag_timeout_int_value,
57768 {"Timeout Interval Value", "wlan.timeout_int.value",
57769 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57771
57772 /* Link Identifier */
57773 {&hf_ieee80211_tag_link_id_bssid,
57774 {"BSSID", "wlan.link_id.bssid",
57775 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57777
57778 {&hf_ieee80211_tag_link_id_init_sta,
57779 {"TDLS initiator STA Address", "wlan.link_id.init_sta",
57780 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57782
57783 {&hf_ieee80211_tag_link_id_resp_sta,
57784 {"TDLS responder STA Address", "wlan.link_id.resp_sta",
57785 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
57786 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57787
57788 /* Wakeup Schedule */
57789 {&hf_ieee80211_tag_wakeup_schedule_offset,
57790 {"Offset", "wlan.wakeup_schedule.offset",
57791 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57793
57794 {&hf_ieee80211_tag_wakeup_schedule_interval,
57795 {"Interval", "wlan.wakeup_schedule.interval",
57796 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57798
57799 {&hf_ieee80211_tag_wakeup_schedule_awake_window_slots,
57800 {"Awake Window Slots", "wlan.wakeup_schedule.awake_window_slots",
57801 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57802 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57803
57804 {&hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
57805 {"Maximum Awake Window Duration", "wlan.wakeup_schedule.max_awake_dur",
57806 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
57807 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57808
57809 {&hf_ieee80211_tag_wakeup_schedule_idle_count,
57810 {"Idle Count", "wlan.wakeup_schedule.idle_count",
57811 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57812 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57813
57814 /* Channel Switch Timing */
57815 {&hf_ieee80211_tag_channel_switch_timing_switch_time,
57816 {"Switch Time", "wlan.channel_switch_timing.switch_time",
57817 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57818 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57819
57820 {&hf_ieee80211_tag_channel_switch_timing_switch_timeout,
57821 {"Switch Timeout", "wlan.channel_switch_timing.switch_timeout",
57822 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57823 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57824
57825 /* PTI Control */
57826 {&hf_ieee80211_tag_pti_control_tid,
57827 {"TID", "wlan.pti_control.tid",
57828 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57829 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57830
57831 {&hf_ieee80211_tag_pti_control_sequence_control,
57832 {"Sequence Control", "wlan.pti_control.sequence_control",
57833 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57835
57836 /* PU Buffer Status */
57837 {&hf_ieee80211_tag_pu_buffer_status_ac_bk,
57838 {"AC_BK traffic available", "wlan.pu_buffer_status.ac_bk",
57839 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
57840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57841
57842 {&hf_ieee80211_tag_pu_buffer_status_ac_be,
57843 {"AC_BE traffic available", "wlan.pu_buffer_status.ac_be",
57844 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
57845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57846
57847 {&hf_ieee80211_tag_pu_buffer_status_ac_vi,
57848 {"AC_VI traffic available", "wlan.pu_buffer_status.ac_vi",
57849 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
57850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57851
57852 {&hf_ieee80211_tag_pu_buffer_status_ac_vo,
57853 {"AC_VO traffic available", "wlan.pu_buffer_status.ac_vo",
57854 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
57855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57856
57857 /* 60g ie */
57858 {&hf_ieee80211_wfa_60g_attr,
57859 {"Attribute", "wlan.60g.attr",
57860 FT_NONE, BASE_NONE, NULL((void*)0), 0,
57861 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57862
57863 {&hf_ieee80211_wfa_60g_attr_id,
57864 {"Attribute ID", "wlan.60g.attr.id",
57865 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_60g_attr_ids)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_60g_attr_ids
))))
, 0x0,
57866 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57867
57868 {&hf_ieee80211_wfa_60g_attr_len,
57869 {"Attribute Length", "wlan.60g.attr.length",
57870 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
57871 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57872
57873 {&hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr,
57874 {"STA Address", "wlan.60g.attr.60g_cap.sta_mac_addr",
57875 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0,
57876 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57877
57878 {&hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames,
57879 {"Receive Capability AMSDU", "wlan.60g.attr.60g_cap.recv_amsdu",
57880 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
57881 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57882
57883 {&hf_ieee80211_wfa_60g_attr_cap_reserved,
57884 {"Reserved", "wlan.60g.attr.60g_cap.reserved",
57885 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfe,
57886 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57887
57888 {&hf_ieee80211_mysterious_extra_stuff,
57889 {"Mysterious extra OLPC/Ruckus/Atheros/Vector/??? stuff", "wlan.mysterious_extra_stuff",
57890 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
57891 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57892
57893 {&hf_ieee80211_mscs_descriptor_type,
57894 {"Request Type", "wlan.ext_tag.mscs_descriptor.request_type",
57895 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(scs_request_type_rvals)((0 ? (const struct _range_string*)0 : ((scs_request_type_rvals
))))
,
57896 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57897
57898 {&hf_ieee80211_mscs_user_prio_control_reserved,
57899 {"Reserved", "wlan.ext_tag.mscs_descriptor.reserved1",
57900 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57901
57902 {&hf_ieee80211_user_prio_bitmap,
57903 {"User Priority Bitmap",
57904 "wlan.ext_tag.mscs_descriptor.user_prio_control.upbm",
57905 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57906
57907 {&hf_ieee80211_user_prio_bitmap_bit0,
57908 {"User Priority 0",
57909 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_0",
57910 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57911
57912 {&hf_ieee80211_user_prio_bitmap_bit1,
57913 {"User Priority 1",
57914 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_1",
57915 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57916
57917 {&hf_ieee80211_user_prio_bitmap_bit2,
57918 {"User Priority 2",
57919 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_2",
57920 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57921
57922 {&hf_ieee80211_user_prio_bitmap_bit3,
57923 {"User Priority 3",
57924 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_3",
57925 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57926
57927 {&hf_ieee80211_user_prio_bitmap_bit4,
57928 {"User Priority 4",
57929 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_4",
57930 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57931
57932 {&hf_ieee80211_user_prio_bitmap_bit5,
57933 {"User Priority 5",
57934 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_5",
57935 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57936
57937 {&hf_ieee80211_user_prio_bitmap_bit6,
57938 {"User Priority 6",
57939 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_6",
57940 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57941
57942 {&hf_ieee80211_user_prio_bitmap_bit7,
57943 {"User Priority 7",
57944 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_7",
57945 FT_BOOLEAN, 8, TFS(&tfs_used_notused)((0 ? (const struct true_false_string*)0 : ((&tfs_used_notused
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57946
57947 {&hf_ieee80211_user_prio_limit,
57948 {"User Priority Limit",
57949 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_limit",
57950 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57951
57952 {&hf_ieee80211_user_prio_reserved,
57953 {"Reserved", "wlan.ext_tag.mscs_descriptor.user_prio_control.reserved",
57954 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57955
57956 {&hf_ieee80211_stream_timeout_reserved,
57957 {"Reserved", "wlan.ext_tag.mscs_descriptor.reserved2",
57958 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57959
57960 {&hf_ieee80211_stream_timeout,
57961 {"Stream Timeout", "wlan.ext_tag.mscs_descriptor.stream_timeout",
57962 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57963
57964 {&hf_ieee80211_mscs_subelement_id,
57965 {"MSCS Subelement ID", "wlan.ext_tag.mscs_descriptor.subelement_id",
57966 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57967
57968 {&hf_ieee80211_mscs_subelement_len,
57969 {"MSCS Subelement Length", "wlan.ext_tag.mscs_descriptor.subelement_len",
57970 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57971
57972 {&hf_ieee80211_mscs_subelement_data,
57973 {"MSCS Subelement Data", "wlan.ext_tag.mscs_descriptor.subelement_data",
57974 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57975
57976 {&hf_ieee80211_intra_access_prio,
57977 {"Intra-Access Priority", "wlan.tag.scs_intra_access_prio",
57978 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57979
57980 {&hf_ieee80211_intra_access_prio_user_prio,
57981 {"User Priority", "wlan.tag.scs_intra_access_prio.user_prio",
57982 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57983
57984 {&hf_ieee80211_intra_access_prio_alt_queue,
57985 {"Alternate Queue", "wlan.tag.scs_intra_access_prio.alt_queue",
57986 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57987
57988 {&hf_ieee80211_intra_access_prio_drop_elig,
57989 {"Drop Eligibility", "wlan.tag.scs_intra_access_prio.drop_elig",
57990 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57991
57992 {&hf_ieee80211_intra_access_prio_reserved,
57993 {"Reserved", "wlan.tag.scs_intra_access_prio.reserved",
57994 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57995
57996 {&hf_ieee80211_scs_descriptor_scsid,
57997 {"SCSID", "wlan.tag.scs_descriptor.scsid",
57998 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57999
58000 {&hf_ieee80211_scs_descriptor_type,
58001 {"Request Type", "wlan.tag.scs_descriptor.request_type",
58002 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(scs_request_type_rvals)((0 ? (const struct _range_string*)0 : ((scs_request_type_rvals
))))
,
58003 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58004
58005 {&hf_ieee80211_estimated_service_params,
58006 {"Estimated Service Parameters", "wlan.ext_tag.estimated_service_params",
58007 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58008
58009 {&hf_ieee80211_esp_access_category,
58010 {"Access Category", "wlan.ext_tag.estimated_service_params.access_category",
58011 FT_UINT24, BASE_DEC, VALS(esp_access_category_vals)((0 ? (const struct _value_string*)0 : ((esp_access_category_vals
))))
, 0x000003,
58012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58013
58014 {&hf_ieee80211_esp_reserved,
58015 {"Reserved", "wlan.ext_tag.estimated_service_params.reserved",
58016 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58017
58018 {&hf_ieee80211_esp_data_format,
58019 {"Data Format", "wlan.ext_tag.estimated_service_params.data_format",
58020 FT_UINT24, BASE_DEC, VALS(esp_data_format_vals)((0 ? (const struct _value_string*)0 : ((esp_data_format_vals
))))
, 0x000018,
58021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58022
58023 {&hf_ieee80211_esp_ba_windows_size,
58024 {"BA Window Size", "wlan.ext_tag.estimated_service_params.ba_window_size",
58025 FT_UINT24, BASE_DEC, VALS(esp_ba_window_size_vals)((0 ? (const struct _value_string*)0 : ((esp_ba_window_size_vals
))))
, 0x0000E0,
58026 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58027
58028 {&hf_ieee80211_esp_est_air_time_frac,
58029 {"Estimated Air Time Fraction", "wlan.ext_tag.estimated_service_params.air_time_frac",
58030 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00FF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58031
58032 {&hf_ieee80211_esp_data_ppdu_duration_target,
58033 {"Data PPDU Duration Target", "wlan.ext_tag.estimated_service_params.data_ppdu_dur_target",
58034 FT_UINT24, BASE_DEC, NULL((void*)0), 0xFF0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58035
58036 {&hf_ieee80211_fcg_new_channel_number,
58037 {"New Channel Number", "wlan.ext_tag.future_channel_guidance.new_chan_num",
58038 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58039
58040 {&hf_ieee80211_fcg_extra_info,
58041 {"Extra bytes", "wlan.ext_tag.future_channel_guidance.extra_bytes",
58042 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58043
58044 {&hf_ieee80211_sae_password_identifier,
58045 {"Password Identifier", "wlan.ext_tag.sae.password_identifier",
58046 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58047
58048 {&hf_ieee80211_sae_anti_clogging_token,
58049 {"Anti-Clogging Token", "wlan.ext_tag.sae.anti_clogging_token",
58050 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58051 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58052
58053 {&hf_ieee80211_tag_fils_indication_info_nr_pk,
58054 {"Number of Public Key Identifiers", "wlan.fils_indication.info.nr_pk",
58055 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(2,0)(((1U << ((2) - (0) + 1)) - 1) << (0)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58056
58057 {&hf_ieee80211_tag_fils_indication_info_nr_realm,
58058 {"Number of Realm Identifiers", "wlan.fils_indication.info.nr_realm",
58059 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(5,3)(((1U << ((5) - (3) + 1)) - 1) << (3)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58060
58061 {&hf_ieee80211_tag_fils_indication_info_ip_config,
58062 {"FILS IP Address Configuration", "wlan.fils_indication.info.ip_config",
58063 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, GENMASK(6,6)(((1U << ((6) - (6) + 1)) - 1) << (6)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58064
58065 {&hf_ieee80211_tag_fils_indication_info_cache_id_included,
58066 {"Cache Identifier", "wlan.fils_indication.info.cache_id_included",
58067 FT_BOOLEAN, 16, TFS(&tfs_included_not_included)((0 ? (const struct true_false_string*)0 : ((&tfs_included_not_included
))))
, GENMASK(7,7)(((1U << ((7) - (7) + 1)) - 1) << (7)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58068
58069 {&hf_ieee80211_tag_fils_indication_info_hessid_included,
58070 {"HESSID", "wlan.fils_indication.info.hessid_included",
58071 FT_BOOLEAN, 16, TFS(&tfs_included_not_included)((0 ? (const struct true_false_string*)0 : ((&tfs_included_not_included
))))
, GENMASK(8,8)(((1U << ((8) - (8) + 1)) - 1) << (8)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58072
58073 {&hf_ieee80211_tag_fils_indication_info_ska_without_pfs,
58074 {"FILS Shared Key Authentication without PFS", "wlan.fils_indication.info.ska_without_pfs",
58075 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, GENMASK(9,9)(((1U << ((9) - (9) + 1)) - 1) << (9)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58076
58077 {&hf_ieee80211_tag_fils_indication_info_ska_with_pfs,
58078 {"FILS Shared Key Authentication with PFS", "wlan.fils_indication.info.ska_with_pfs",
58079 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, GENMASK(10,10)(((1U << ((10) - (10) + 1)) - 1) << (10)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58080
58081 {&hf_ieee80211_tag_fils_indication_info_pka,
58082 {"FILS Public Key Authentication", "wlan.fils_indication.info.pka",
58083 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, GENMASK(11,11)(((1U << ((11) - (11) + 1)) - 1) << (11)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58084
58085 {&hf_ieee80211_tag_fils_indication_info_reserved,
58086 {"Reserved", "wlan.fils_indication.info.reserved",
58087 FT_UINT16, BASE_HEX, NULL((void*)0), GENMASK(15,12)(((1U << ((15) - (12) + 1)) - 1) << (12)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58088
58089 {&hf_ieee80211_tag_fils_indication_cache_identifier,
58090 {"Cache Identifier", "wlan.fils_indication.cache_identifier",
58091 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58092
58093 {&hf_ieee80211_tag_fils_indication_hessid,
58094 {"HESSID", "wlan.fils_indication.hessid",
58095 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58096
58097 {&hf_ieee80211_tag_fils_indication_realm_list,
58098 {"Realm Identifiers", "wlan.fils_indication.realms",
58099 FT_NONE, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58100
58101 {&hf_ieee80211_tag_fils_indication_realm_identifier,
58102 {"Realm Identifier", "wlan.fils_indication.realms.identifier",
58103 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58104
58105 {&hf_ieee80211_tag_fils_indication_public_key_list,
58106 {"Public Keys", "wlan.fils_indication.public_keys",
58107 FT_NONE, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58108
58109 {&hf_ieee80211_tag_fils_indication_public_key_type,
58110 {"Key Type", "wlan.fils_indication.public_keys.key_type",
58111 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58112
58113 {&hf_ieee80211_tag_fils_indication_public_key_length,
58114 {"Length", "wlan.fils_indication.public_keys.length",
58115 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58116
58117 {&hf_ieee80211_tag_fils_indication_public_key_indicator,
58118 {"Public Key Indicator", "wlan.fils_indication.public_keys.indicator",
58119 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58120
58121 {&hf_ieee80211_qos_mgmt_attribute_id,
58122 {"Attribute ID", "wlan.qos_mgmt.ie.attribute_id",
58123 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(qos_mgmt_attributes)((0 ? (const struct _range_string*)0 : ((qos_mgmt_attributes)
)))
, 0,
58124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58125
58126 {&hf_ieee80211_qos_mgmt_attribute_len,
58127 {"Length", "wlan.qos_mgmt.ie.length",
58128 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58129
58130 {&hf_ieee80211_qos_mgmt_start_port_range,
58131 {"Start Port", "wlan.qos_mgmt.ie.start_port",
58132 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58133
58134 {&hf_ieee80211_qos_mgmt_end_port_range,
58135 {"End Port", "wlan.qos_mgmt.ie.end_port",
58136 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58137
58138 {&hf_ieee80211_qos_mgmt_dscp_pol_id,
58139 {"Policy ID", "wlan.qos_mgmt.ie.dscp_policy.policy_id",
58140 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58141
58142 {&hf_ieee80211_qos_mgmt_dscp_pol_req_type,
58143 {"Request Type", "wlan.qos_mgmt.ie.dscp_policy.request_type",
58144 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58145
58146 {&hf_ieee80211_qos_mgmt_dscp_pol_dscp,
58147 {"DSCP", "wlan.qos_mgmt.ie.dscp_policy.dscp",
58148 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58149
58150 {&hf_ieee80211_qos_mgmt_domain_name,
58151 {"Domain Name", "wlan.qos_mgmt.ie.domain_name",
58152 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58153
58154 {&hf_ieee80211_qos_mgmt_unknown_attr,
58155 {"Unknown attribute", "wlan.qos_mgmt.ie.unknown_attribute",
58156 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58157
58158 {&hf_ieee80211_ext_tag,
58159 {"Ext Tag", "wlan.ext_tag",
58160 FT_NONE, BASE_NONE, NULL((void*)0), 0,
58161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58162
58163 {&hf_ieee80211_ext_tag_number,
58164 {"Ext Tag Number", "wlan.ext_tag.number",
58165 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_eid_ext_ext, 0,
58166 "Element ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58167
58168 {&hf_ieee80211_ext_tag_length,
58169 {"Ext Tag length", "wlan.ext_tag.length",
58170 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
58171 "Length of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58172
58173 {&hf_ieee80211_ext_tag_data,
58174 {"Ext Tag Data", "wlan.ext_tag.data",
58175 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58177
58178 {&hf_ieee80211_fils_req_params_parameter_control_bitmap,
58179 {"Parameter Control Bitmap", "wlan.ext_tag.fils.req_params.parameter_control_bitmap",
58180 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58182
58183 {&hf_ieee80211_fils_req_params_fils_criteria_present,
58184 {"FILS Criteria Present", "wlan.ext_tag.fils.req_params.fils_criteria_present",
58185 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA0x01,
58186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58187
58188 {&hf_ieee80211_fils_req_params_max_delay_limit_present,
58189 {"Max Delay Limit Present", "wlan.ext_tag.fils.req_params.max_delay_limit_present",
58190 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02,
58191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58192
58193 {&hf_ieee80211_fils_req_params_minimum_data_rate_present,
58194 {"Minimum Data Rate Present", "wlan.ext_tag.fils.req_params.minimum_data_rate_present",
58195 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04,
58196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58197
58198 {&hf_ieee80211_fils_req_params_rcpi_limit_present,
58199 {"RCPI Limit Present", "wlan.ext_tag.fils.req_params.rcpi_limit_present",
58200 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_RCPI_LIMIT0x08,
58201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58202
58203 {&hf_ieee80211_fils_req_params_oui_response_criteria_present,
58204 {"OUI Response Criteria Present", "wlan.ext_tag.fils.req_params.oui_response_criteria_present",
58205 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10,
58206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58207
58208 {&hf_ieee80211_fils_req_params_reserved,
58209 {"Reserved", "wlan.ext_tag.fils.req_params.reserved",
58210 FT_UINT8, BASE_HEX, NULL((void*)0), FILS_REQ_PARAMS_RESERVED0xE0,
58211 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58212
58213 {&hf_ieee80211_fils_req_params_max_channel_time,
58214 {"Max Channel Time", "wlan.ext_tag.fils.req_params.max_channel_time",
58215 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58217
58218 {&hf_ieee80211_fils_req_params_fils_criteria,
58219 {"FILS Criteria", "wlan.ext_tag.fils.req_params.fils_criteria",
58220 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58222
58223 {&hf_ieee80211_fils_req_params_fils_criteria_bss_delay,
58224 {"BSS Delay", "wlan.ext_tag.fils.req_params.fils_criteria.bss_delay",
58225 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_BSS_DELAY0x07,
58226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58227
58228 {&hf_ieee80211_fils_req_params_fils_criteria_phy_support,
58229 {"PHY Support", "wlan.ext_tag.fils.req_params.fils_criteria.phy_support",
58230 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_PHY_SUPPORT0x38,
58231 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58232
58233 {&hf_ieee80211_fils_req_params_fils_criteria_reserved,
58234 {"Reserved", "wlan.ext_tag.fils.req_params.fils_criteria.reserved",
58235 FT_UINT8, BASE_HEX, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_RESERVED0xC0,
58236 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58237
58238 {&hf_ieee80211_fils_req_params_max_delay_limit,
58239 {"Max Delay Limit", "wlan.ext_tag.fils.req_params.max_delay_limit",
58240 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58241 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58242
58243 {&hf_ieee80211_fils_req_params_minimum_data_rate,
58244 {"Minimum Data Rate", "wlan.ext_tag.fils.req_params.minimum_data_rate",
58245 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
58246 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58247
58248 {&hf_ieee80211_fils_req_params_rcpi_limit,
58249 {"RCPI Limit", "wlan.ext_tag.fils.req_params.rcpi_limit",
58250 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58251 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58252
58253 {&hf_ieee80211_fils_req_params_oui_response_criteria,
58254 {"OUI Response Criteria", "wlan.ext_tag.fils.req_params.oui_response_criteria",
58255 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
58256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58257
58258 {&hf_ieee80211_fils_session,
58259 {"FILS Session", "wlan.ext_tag.fils.session",
58260 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58262
58263 {&hf_ieee80211_fils_encrypted_data,
58264 {"FILS Encrypted Data", "wlan.ext_tag.fils.encrypted_data",
58265 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58266 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58267
58268 {&hf_ieee80211_fils_nonce,
58269 {"FILS Nonce", "wlan.ext_tag.fils.nonce",
58270 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58272
58273 {&hf_ieee80211_he_mac_capabilities,
58274 {"HE MAC Capabilities Information", "wlan.ext_tag.he_mac_caps",
58275 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58276
58277 {&hf_ieee80211_he_htc_he_support,
58278 {"+HTC HE Support", "wlan.ext_tag.he_mac_cap.htc_he_support",
58279 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000001,
58280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58281
58282 {&hf_ieee80211_he_twt_requester_support,
58283 {"TWT Requester Support", "wlan.ext_tag.he_mac_cap.twt_req_support",
58284 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000002,
58285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58286
58287 {&hf_ieee80211_he_twt_responder_support,
58288 {"TWT Responder Support", "wlan.ext_tag.he_mac_cap.twt_rsp_support",
58289 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000004,
58290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58291
58292 {&hf_ieee80211_he_dynamic_fragmentation_support,
58293 {"Dynamic Fragmentation Support", "wlan.ext_tag.he_mac_cap.dynamic_fragmentation_support",
58294 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58295 VALS64(he_dynamic_fragmentation_support_vals)((0 ? (const struct _val64_string*)0 : ((he_dynamic_fragmentation_support_vals
))))
, 0x000000000018,
58296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58297
58298 {&hf_ieee80211_he_max_number_fragmented_msdus,
58299 {"Maximum Number of Fragmented MSDUs", "wlan.ext_tag.he_mac_cap.max_frag_msdus",
58300 FT_UINT48, BASE_CUSTOM, CF_FUNC(max_frag_msdus_base_custom)((const void *) (size_t) (max_frag_msdus_base_custom)), 0x0000000000E0,
58301 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58302
58303 {&hf_ieee80211_he_min_fragment_size,
58304 {"Minimum Fragment Size", "wlan.ext_tag.he_mac_cap.min_frag_size",
58305 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58306 VALS64(he_minimum_fragmentation_size_vals)((0 ? (const struct _val64_string*)0 : ((he_minimum_fragmentation_size_vals
))))
, 0x000000000300,
58307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58308
58309 {&hf_ieee80211_he_trigger_frame_mac_padding_dur,
58310 {"Trigger Frame MAC Padding Duration", "wlan.ext_tag.he_mac_cap.trig_frm_mac_padding_dur",
58311 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_trigger_mac_padding_dur_vals)((0 ? (const struct _val64_string*)0 : ((he_trigger_mac_padding_dur_vals
))))
, 0x000000000C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58312
58313 {&hf_ieee80211_he_multi_tid_aggregation_rx_support,
58314 {"Multi-TID Aggregation Rx Support", "wlan.ext_tag.he_mac_cap.multi_tid_agg_rx_support",
58315 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58316
58317 {&hf_ieee80211_he_he_link_adaptation_support,
58318 {"HE Link Adaptation Support", "wlan.ext_tag.he_mac_cap.he_link_adaptation_support",
58319 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58320 VALS64(he_link_adaptation_support_vals)((0 ? (const struct _val64_string*)0 : ((he_link_adaptation_support_vals
))))
, 0x000000018000,
58321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58322
58323 {&hf_ieee80211_he_all_ack_support,
58324 {"All Ack Support", "wlan.ext_tag.he_mac_cap.all_ack_support",
58325 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000020000,
58326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58327
58328 {&hf_ieee80211_he_trs_support,
58329 {"TRS Support", "wlan.ext_tag.he_mac_cap.trs_support",
58330 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000040000,
58331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58332
58333 {&hf_ieee80211_he_bsr_support,
58334 {"BSR Support", "wlan.ext_tag.he_mac_cap.bsr_support",
58335 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000080000,
58336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58337
58338 {&hf_ieee80211_he_broadcast_twt_support,
58339 {"Broadcast TWT Support", "wlan.ext_tag.he_mac_cap.broadcast_twt_support",
58340 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000100000,
58341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58342
58343 {&hf_ieee80211_he_32_bit_ba_bitmap_support,
58344 {"32-bit BA Bitmap Support", "wlan.ext_tag.he_mac_cap.32_bit_ba_bitmap_support",
58345 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000200000,
58346 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58347
58348 {&hf_ieee80211_he_mu_cascading_support,
58349 {"MU Cascading Support", "wlan.ext_tag.he_mac_cap.mu_cascading_support",
58350 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000400000,
58351 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58352
58353 {&hf_ieee80211_he_ack_enabled_aggregation_support,
58354 {"Ack-Enabled Aggregation Support", "wlan.ext_tag.he_mac_cap.ack_enabled_agg_support",
58355 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000800000,
58356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58357
58358 {&hf_ieee80211_he_reserved_b24,
58359 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_b24",
58360 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000001000000,
58361 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58362
58363 {&hf_ieee80211_he_om_control_support,
58364 {"OM Control Support", "wlan.ext_tag.he_mac_cap.om_control_support",
58365 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000002000000,
58366 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58367
58368 {&hf_ieee80211_he_ofdma_ra_support,
58369 {"OFDMA RA Support", "wlan.ext_tag.he_mac_cap.ofdma_ra_support",
58370 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000004000000,
58371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58372
58373 {&hf_ieee80211_he_max_a_mpdu_length_exponent_ext,
58374 {"Maximum A-MPDU Length Exponent Extension",
58375 "wlan.ext_tag.he_mac_cap.max_a_mpdu_len_exp_ext",
58376 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000018000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58377
58378 {&hf_ieee80211_he_a_msdu_fragmentation_support,
58379 {"A-MSDU Fragmentation Support", "wlan.ext_tag.he_mac_cap.a_msdu_frag_support",
58380 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000020000000,
58381 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58382
58383 {&hf_ieee80211_he_flexible_twt_schedule_support,
58384 {"Flexible TWT Schedule Support", "wlan.ext_tag.he_mac_cap.flexible_twt_sched_support",
58385 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000040000000,
58386 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58387
58388 {&hf_ieee80211_he_rx_control_frame_to_multibss,
58389 {"Rx Control Frame to MultiBSS", "wlan.ext_tag.he_mac_cap.rx_ctl_frm_multibss",
58390 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000080000000,
58391 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58392
58393 {&hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation,
58394 {"BSRP BQRP A-MPDU Aggregation", "wlan.ext_tag.he_mac_cap.bsrp_bqrp_a_mpdu_agg",
58395 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000100000000,
58396 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58397
58398 {&hf_ieee80211_he_qtp_support,
58399 {"QTP Support", "wlan.ext_tag.he_mac_cap.qtp_support",
58400 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000200000000,
58401 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58402
58403 {&hf_ieee80211_he_bqr_support,
58404 {"BQR Support", "wlan.ext_tag.he_mac_cap.bqr_support",
58405 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000400000000,
58406 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58407
58408 {&hf_ieee80211_he_psr_responder,
58409 {"PSR Responder", "wlan.ext_tag.he_mac_cap.psr_responder",
58410 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000800000000,
58411 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58412
58413 {&hf_ieee80211_he_ndp_feedback_report_support,
58414 {"NDP Feedback Report Support", "wlan.ext_tag.he_mac_cap.ndp_feedback_report_support",
58415 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x001000000000,
58416 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58417
58418 {&hf_ieee80211_he_ops_support,
58419 {"OPS Support", "wlan.ext_tag.he_mac_cap.ops_support",
58420 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x002000000000,
58421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58422
58423 {&hf_ieee80211_he_a_msdu_in_a_mpdu_support,
58424 {"A-MSDU Not Under BA in Ack-Enabled A-MPDU Support", "wlan.ext_tag.he_mac_cap.a_msdu_in_a_mpdu_support",
58425 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x004000000000,
58426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58427
58428 {&hf_ieee80211_he_multi_tid_aggregation_tx_support,
58429 {"Multi-TID Aggregation Tx Support", "wlan.ext_tag.he_mac_cap.multi_tid_agg_tx_support",
58430 FT_UINT48, BASE_DEC, NULL((void*)0), 0x038000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58431
58432 {&hf_ieee80211_he_subchannel_selective_trans_support,
58433 {"HE Subchannel Selective Transmission Support", "wlan.ext_tag.he_mac_cap.subchannel_selective_xmit_support",
58434 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58435 0x040000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58436
58437 {&hf_ieee80211_he_2_996_tone_ru_support,
58438 {"UL 2x996-tone RU Support", "wlan.ext_tag.he_mac_cap.ul_2_996_tone_ru_support",
58439 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58440 0x080000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58441
58442 {&hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support,
58443 {"OM Control UL MU Data Disable RX Support", "wlan.ext_tag.he_mac_cap.om_cntl_ul_mu_data_disable_rx_support",
58444 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58445 0x100000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58446
58447 {&hf_ieee80211_he_dynamic_sm_power_save,
58448 {"HE Dynamic SM Power Save", "wlan.ext_tag.he_mac_cap.dynamic_sm_power_save",
58449 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58450 0x200000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58451
58452 {&hf_ieee80211_he_punctured_sounding_support,
58453 {"Punctured Sounding Support", "wlan.ext_tag.he_mac_cap.punctured_sounding_support",
58454 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58455 0x400000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58456
58457 {&hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support,
58458 {"HT And VHT Trigger Frame RX Support", "wlan.ext_tag.he_mac_cap.ht_and_vht_trigger_frame_rx_support",
58459 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58460 0x800000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58461
58462 {&hf_ieee80211_he_reserved_bits_5_7,
58463 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_5_7",
58464 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0000000000E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58465
58466 {&hf_ieee80211_he_reserved_bits_8_9,
58467 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_8_9",
58468 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58469
58470 {&hf_ieee80211_he_reserved_bits_15_16,
58471 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_15_16",
58472 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000018000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58473
58474 {&hf_ieee80211_he_reserved_bit_18,
58475 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_18",
58476 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000040000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58477
58478 {&hf_ieee80211_he_reserved_bit_19,
58479 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_19",
58480 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000080000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58481
58482 {&hf_ieee80211_he_reserved_bit_25,
58483 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_25",
58484 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58485
58486 {&hf_ieee80211_he_reserved_bit_29,
58487 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_29",
58488 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000020000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58489
58490 {&hf_ieee80211_he_reserved_bit_34,
58491 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_34",
58492 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000400000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58493
58494 {&hf_ieee80211_he_phy_reserved_b0,
58495 {"Reserved", "wlan.ext_tag.he_phy_cap.reserved_b0",
58496 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58497
58498 {&hf_ieee80211_he_phy_cap_reserved_b0,
58499 {"Reserved", "wlan.ext_tag.he_phy_cap.fbyte.reserved_b0",
58500 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
58501 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58502
58503 {&hf_ieee80211_he_phy_chan_width_set,
58504 {"Channel Width Set", "wlan.ext_tag.he_phy_cap.fbytes",
58505 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58506
58507 {&hf_ieee80211_he_40mhz_channel_2_4ghz,
58508 {"40 MHz in 2.4 GHz band", "wlan.ext_tag.he_phy_cap.chan_width_set.40mhz_in_2_4ghz",
58509 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58510
58511 {&hf_ieee80211_he_40_and_80_mhz_5ghz,
58512 {"40 & 80 MHz in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.40_80_in_5ghz",
58513 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58514
58515 {&hf_ieee80211_he_160_mhz_5ghz,
58516 {"160 MHz in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.160_in_5ghz",
58517 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58518
58519 {&hf_ieee80211_he_160_80_plus_80_mhz_5ghz,
58520 {"160/80+80 MHz in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.160_80_80_in_5ghz",
58521 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58522
58523 {&hf_ieee80211_he_242_tone_rus_in_2_4ghz,
58524 {"242 tone RUs in the 2.4 GHz band", "wlan.ext_tag.he_phy_cap.chan_width_set.242_tone_in_2_4ghz",
58525 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58526
58527 {&hf_ieee80211_he_242_tone_rus_in_5ghz,
58528 {"242 tone RUs in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.242_tone_in_5ghz",
58529 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58530
58531 {&hf_ieee80211_he_chan_width_reserved,
58532 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width_set.reserved",
58533 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58534
58535 {&hf_ieee80211_he_phy_b8_to_b23,
58536 {"Bits 8 to 23", "wlan.ext_tag.he_phy_cap.bits_8_to_23",
58537 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58538
58539 {&hf_ieee80211_he_5ghz_b0_reserved,
58540 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.5GHz_b0_reserved",
58541 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58542
58543 {&hf_ieee80211_he_5ghz_b4_reserved,
58544 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.5GHz_b4_reserved",
58545 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58546
58547 {&hf_ieee80211_he_24ghz_b1_reserved,
58548 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b1_reserved",
58549 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58550
58551 {&hf_ieee80211_he_24ghz_b2_reserved,
58552 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b2_reserved",
58553 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58554
58555 {&hf_ieee80211_he_24ghz_b3_reserved,
58556 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b3_reserved",
58557 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58558
58559 {&hf_ieee80211_he_24ghz_b5_reserved,
58560 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b5_reserved",
58561 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58562
58563 {&hf_ieee80211_he_phy_cap_punctured_preamble_rx,
58564 {"Punctured Preamble Rx", "wlan.ext_tag.he_phy_cap.punc_preamble_rx",
58565 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58566
58567 {&hf_ieee80211_he_phy_cap_device_class,
58568 {"Device Class", "wlan.ext_tag.he_phy_cap.device_class",
58569 FT_UINT16, BASE_HEX, VALS(he_phy_device_class_vals)((0 ? (const struct _value_string*)0 : ((he_phy_device_class_vals
))))
, 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58570
58571 {&hf_ieee80211_he_phy_cap_ldpc_coding_in_payload,
58572 {"LDPC Coding In Payload", "wlan.ext_tag.he_phy_cap.ldpc_coding_in_payload",
58573 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58574
58575 {&hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us,
58576 {"HE SU PPDU With 1x HE-LTF And 0.8us GI",
58577 "wlan.ext_tag.he_phy_cap.he_su_ppdu_with_1x_he_ltf_08us",
58578 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58579
58580 {&hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts,
58581 {"Midamble Tx/Rx Max NSTS", "wlan.ext_tag.he_phy_cap.midamble_tx_rx_max_nsts",
58582 FT_UINT16, BASE_HEX, VALS(he_phy_midamble_tx_rx_max_nsts_vals)((0 ? (const struct _value_string*)0 : ((he_phy_midamble_tx_rx_max_nsts_vals
))))
, 0x0180, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58583
58584 {&hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us,
58585 {"NDP With 4x HE-LTF and 3.2us GI",
58586 "wlan.ext_tag.he_phy_cap.ndp_with_4x_he_ltf_4x_3.2us",
58587 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58588
58589 {&hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz,
58590 {"STBC Tx <= 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_tx_lt_80mhz",
58591 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58592
58593 {&hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz,
58594 {"STBC Rx <= 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_rx_lt_80mhz",
58595 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58596
58597 {&hf_ieee80211_he_phy_cap_doppler_tx,
58598 {"Doppler Tx", "wlan.ext_tag.he_phy_cap.doppler_tx",
58599 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58600
58601 {&hf_ieee80211_he_phy_cap_doppler_rx,
58602 {"Doppler Rx", "wlan.ext_tag.he_phy_cap.doppler_rx",
58603 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58604
58605 {&hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo,
58606 {"Full Bandwidth UL MU-MIMO", "wlan.ext_tag.he_phy_cap.full_bw_ul_mu_mimo",
58607 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58608
58609 {&hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo,
58610 {"Partial Bandwidth UL MU-MIMO", "wlan.ext_tag.he_phy_cap.partial_bw_ul_mu_mimo",
58611 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58612
58613 {&hf_ieee80211_he_phy_b24_to_b39,
58614 {"Bits 24 to 39", "wlan.ext_tag.he_phy_cap.bits_24_to_39",
58615 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58616
58617 {&hf_ieee80211_he_phy_cap_dcm_max_constellation_tx,
58618 {"DCM Max Constellation Tx", "wlan.ext_tag.he_phy_cap.dcm_max_const_tx",
58619 FT_UINT16, BASE_HEX, VALS(he_phy_dcm_max_constellation_vals)((0 ? (const struct _value_string*)0 : ((he_phy_dcm_max_constellation_vals
))))
, 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58620
58621 {&hf_ieee80211_he_phy_cap_dcm_max_nss_tx,
58622 {"DCM Max NSS Tx", "wlan.ext_tag.he_phy_cap.dcm_max_nss_tx",
58623 FT_UINT16, BASE_HEX, VALS(he_phy_dcm_max_nss_vals)((0 ? (const struct _value_string*)0 : ((he_phy_dcm_max_nss_vals
))))
, 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58624
58625 {&hf_ieee80211_he_phy_cap_dcm_max_constellation_rx,
58626 {"DCM Max Constellation Rx", "wlan.ext_tag.he_phy_cap.dcm_max_const_rx",
58627 FT_UINT16, BASE_HEX, VALS(he_phy_dcm_max_constellation_vals)((0 ? (const struct _value_string*)0 : ((he_phy_dcm_max_constellation_vals
))))
, 0x0018, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58628
58629 {&hf_ieee80211_he_phy_cap_dcm_max_nss_rx,
58630 {"DCM Max NSS Rx", "wlan.ext_tag.he_phy_cap.dcm_max_nss_rx",
58631 FT_UINT16, BASE_HEX, VALS(he_phy_dcm_max_nss_vals)((0 ? (const struct _value_string*)0 : ((he_phy_dcm_max_nss_vals
))))
, 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58632
58633 {&hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu,
58634 {"Rx Partial BW SU In 20 MHz HE MU PPDU", "wlan.ext_tag.he_phy_cap.rx_partial_bw_su_20mhz_he_mu_ppdu",
58635 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58636
58637 {&hf_ieee80211_he_phy_cap_su_beamformer,
58638 {"SU Beamformer", "wlan.ext_tag.he_phy_cap.su_beamformer",
58639 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58640
58641 {&hf_ieee80211_he_phy_cap_su_beamformee,
58642 {"SU Beamformee", "wlan.ext_tag.he_phy_cap.su_beamformee",
58643 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58644
58645 {&hf_ieee80211_he_phy_cap_mu_beamformer,
58646 {"MU Beamformer", "wlan.ext_tag.he_phy_cap.mu_beamformer",
58647 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58648
58649 {&hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz,
58650 {"Beamformee STS <= 80 MHz", "wlan.ext_tag.he_phy_cap.beamformee_sts_lte_80mhz",
58651 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58652
58653 {&hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz,
58654 {"Beamformee STS > 80 MHz", "wlan.ext_tag.he_phy_cap.beamformee_sts_gt_80mhz",
58655 FT_UINT16, BASE_HEX, NULL((void*)0), 0xE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58656
58657 {&hf_ieee80211_he_phy_b40_to_b55,
58658 {"Bits 40 to 55", "wlan.ext_tag.he_phy_cap.bits_40_to_55",
58659 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58660
58661 {&hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80,
58662 {"Number Of Sounding Dimensions <= 80 MHz", "wlan.ext_tag.he_phy_cap.no_sounding_dims_lte_80",
58663 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58664
58665 {&hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80,
58666 {"Number Of Sounding Dimensions > 80 MHz", "wlan.ext_tag.he_phy_cap.no_sounding_dims_gt_80",
58667 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58668
58669 {&hf_ieee80211_he_phy_cap_ng_eq_16_su_fb,
58670 {"Ng = 16 SU Feedback", "wlan.ext_tag.he_phy_cap.ng_eq_16_su_fb",
58671 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58672
58673 {&hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb,
58674 {"Ng = 16 MU Feedback", "wlan.ext_tag.he_phy_cap.ng_eq_16_mu_fb",
58675 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58676
58677 {&hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb,
58678 {"Codebook Size SU Feedback", "wlan.ext_tag.he_phy_cap.codebook_size_su_fb",
58679 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58680
58681 {&hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb,
58682 {"Codebook Size MU Feedback", "wlan.ext_tag.he_phy_cap.codebook_size_mu_fb",
58683 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58684
58685 {&hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb,
58686 {"Triggered SU Beamforming Feedback", "wlan.ext_tag.he_phy_cap.trig_su_bf_fb",
58687 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58688
58689 {&hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb,
58690 {"Triggered MU Beamforming Feedback", "wlan.ext_tag.he_phy_cap.trig_mu_bf_fb",
58691 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58692
58693 {&hf_ieee80211_he_phy_cap_triggered_cqi_fb,
58694 {"Triggered CQI Feedback", "wlan.ext_tag.he_phy_cap.trig_cqi_fb",
58695 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58696
58697 {&hf_ieee80211_he_phy_cap_partial_bw_extended_range,
58698 {"Partial Bandwidth Extended Range", "wlan.ext_tag.he_phy_cap.partial_bw_er",
58699 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58700
58701 {&hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo,
58702 {"Partial Bandwidth DL MU-MIMO", "wlan.ext_tag.he_phy_cap.partial_bw_dl_mu_mimo",
58703 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58704
58705 {&hf_ieee80211_he_phy_cap_ppe_threshold_present,
58706 {"PPE Thresholds Present", "wlan.ext_tag.he_phy_cap.ppe_thres_present",
58707 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58708
58709 {&hf_ieee80211_he_phy_b56_to_b71,
58710 {"Bits 56 to 71", "wlan.ext_tag.he_phy_cap.bits_56_to_71",
58711 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58712
58713 {&hf_ieee80211_he_phy_cap_psr_based_sr_support,
58714 {"PSR-based SR Support", "wlan.ext_tag.he_phy_cap.psr_based_sr_sup",
58715 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58716
58717 {&hf_ieee80211_he_phy_cap_power_boost_factor_ar_support,
58718 {"Power Boost Factor ar Support", "wlan.ext_tag.he_phy_cap.pwr_bst_factor_ar_sup",
58719 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58720
58721 {&hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi,
58722 {"HE SU PPDU And HE MU PPDU With 4x HE-LTF And 0.8us GI", "wlan.ext_tag.he_phy_cap.he_su_ppdu_etc_gi",
58723 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58724
58725 {&hf_ieee80211_he_phy_cap_max_nc,
58726 {"Max Nc", "wlan.ext_tag.he_phy_cap.max_nc",
58727 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58728
58729 {&hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz,
58730 {"STBC Tx > 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_tx_gt_80_mhz",
58731 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58732
58733 {&hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz,
58734 {"STBC Rx > 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_rx_gt_80_mhz",
58735 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58736
58737 {&hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi,
58738 {"HE ER SU PPDU With 4x HE-LTF And 0.8us GI", "wlan.ext_tag.he_phy_cap.he_er_su_ppdu_4xxx_gi",
58739 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58740
58741 {&hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band,
58742 {"20 MHz In 40 MHz HE PPDU In 2.4 GHz Band", "wlan.ext_tag.he_phy_cap.20_mhz_in_40_in_2_4ghz",
58743 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58744
58745 {&hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu,
58746 {"20 MHz In 160/80+80 MHz HE PPDU", "wlan.ext_tag.he_phy_cap.20_mhz_in_160_80p80_ppdu",
58747 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58748
58749 {&hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu,
58750 {"80 MHz In 160/80+80 MHz HE PPDU", "wlan.ext_tag.he_phy_cap.80_mhz_in_160_80p80_ppdu",
58751 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58752
58753 {&hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi,
58754 {"HE ER SU PPDU With 1x HE-LTF And 0.8us GI", "wlan.ext_tag.he_phy_cap.he_er_su_ppdu_1xxx_gi",
58755 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58756
58757 {&hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf,
58758 {"Midamble Tx/Rx 2x And 1x HE-LTF", "wlan.ext_tag.he_phy_cap.midamble_tx_rx_2x_1x_he_ltf",
58759 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58760
58761 {&hf_ieee80211_he_phy_b72_to_b87,
58762 {"Bits 72 to 87", "wlan.ext_tag.he_phy_cap.bits_72_to_87",
58763 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58764
58765 {&hf_ieee80211_he_phy_cap_dcm_max_ru,
58766 {"DCM Max RU", "wlan.ext_tag.he_phy_cap.dcm_max_ru",
58767 FT_UINT16, BASE_HEX, VALS(he_phy_dcm_max_ru_vals)((0 ? (const struct _value_string*)0 : ((he_phy_dcm_max_ru_vals
))))
, 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58768
58769 {&hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support,
58770 {"Longer Than 16 HE SIG-B OFDM Symbols Support", "wlan.ext_tag.he_phy_cap.longer_than_16_he_sigb_ofdm_sym_support",
58771 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58772
58773 {&hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback,
58774 {"Non-Triggered CQI Feedback", "wlan.ext_tag.he_phy_cap.non_triggered_feedback",
58775 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58776
58777 {&hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support,
58778 {"Tx 1024-QAM Support < 242-tone RU Support", "wlan.ext_tag.he_phy_cap.tx_1024_qam_support_lt_242_tone_ru",
58779 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58780
58781 {&hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support,
58782 {"Rx 1024-QAM Support < 242-tone RU Support", "wlan.ext_tag.he_phy_cap.rx_1024_qam_support_lt_242_tone_ru",
58783 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58784
58785 {&hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb,
58786 {"Rx Full BW SU Using HE MU PPDU With Compressed HE-SIG-B", "wlan.ext_tag.he_phy_cap.rx_full_bw_su_using_he_mu_ppdu_with_compressed_sigb",
58787 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58788
58789 {&hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb,
58790 {"Rx Full BW SU Using HE MU PPDU With Non-Compressed HE-SIG-B", "wlan.ext_tag.he_phy_cap.rx_full_bw_su_using_he_mu_ppdu_with_non_compressed_sigb",
58791 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58792
58793 {&hf_ieee80211_he_phy_cap_nominal_packet_padding,
58794 {"Nominal Packet Padding", "wlan.ext_tag.he_phy_cap.nominal_packet_padding",
58795 FT_UINT16, BASE_DEC, VALS(he_phy_nominal_packet_padding_vals)((0 ? (const struct _value_string*)0 : ((he_phy_nominal_packet_padding_vals
))))
, 0x00C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58796
58797 {&hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max,
58798 {"HE MU PPDU With More Than One RU Rx Max N_HE-LTF", "wlan.ext_tag.he_phy_cap.he_mu_ppdu_ru_rx_max",
58799 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58800
58801 {&hf_ieee80211_he_phy_cap_b81_b87_reserved,
58802 {"Reserved", "wlan.ext_tag.he_phy_cap.reserved_b81_b87",
58803 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58804
58805 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss,
58806 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_1_ss",
58807 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58808
58809 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss,
58810 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_2_ss",
58811 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58812
58813 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss,
58814 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_3_ss",
58815 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58816
58817 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss,
58818 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_4_ss",
58819 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x00C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58820
58821 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss,
58822 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_5_ss",
58823 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58824
58825 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss,
58826 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_6_ss",
58827 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58828
58829 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss,
58830 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_7_ss",
58831 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x3000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58832
58833 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss,
58834 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_8_ss",
58835 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58836
58837 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss,
58838 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_1_ss",
58839 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58840
58841 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss,
58842 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_2_ss",
58843 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58844
58845 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss,
58846 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_3_ss",
58847 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58848
58849 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss,
58850 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_4_ss",
58851 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x00C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58852
58853 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss,
58854 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_5_ss",
58855 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58856
58857 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss,
58858 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_6_ss",
58859 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58860
58861 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss,
58862 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_7_ss",
58863 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x3000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58864
58865 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss,
58866 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_8_ss",
58867 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58868
58869 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss,
58870 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_1_ss",
58871 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58872
58873 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss,
58874 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_2_ss",
58875 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58876
58877 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss,
58878 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_3_ss",
58879 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58880
58881 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss,
58882 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_4_ss",
58883 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x00C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58884
58885 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss,
58886 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_5_ss",
58887 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58888
58889 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss,
58890 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_6_ss",
58891 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58892
58893 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss,
58894 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_7_ss",
58895 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x3000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58896
58897 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss,
58898 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_8_ss",
58899 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58900
58901 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss,
58902 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_1_ss",
58903 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58904
58905 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss,
58906 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_2_ss",
58907 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58908
58909 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss,
58910 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_3_ss",
58911 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58912
58913 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss,
58914 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_4_ss",
58915 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x00C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58916
58917 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss,
58918 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_5_ss",
58919 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58920
58921 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss,
58922 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_6_ss",
58923 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58924
58925 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss,
58926 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_7_ss",
58927 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x3000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58928
58929 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss,
58930 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_8_ss",
58931 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58932
58933 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss,
58934 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_1_ss",
58935 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58936
58937 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss,
58938 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_2_ss",
58939 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58940
58941 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss,
58942 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_3_ss",
58943 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58944
58945 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss,
58946 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_4_ss",
58947 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x00C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58948
58949 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss,
58950 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_5_ss",
58951 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58952
58953 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss,
58954 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_6_ss",
58955 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58956
58957 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss,
58958 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_7_ss",
58959 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x3000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58960
58961 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss,
58962 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_8_ss",
58963 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58964
58965 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss,
58966 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_1_ss",
58967 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58968
58969 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss,
58970 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_2_ss",
58971 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58972
58973 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss,
58974 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_3_ss",
58975 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58976
58977 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss,
58978 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_4_ss",
58979 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x00C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58980
58981 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss,
58982 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_5_ss",
58983 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58984
58985 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss,
58986 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_6_ss",
58987 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58988
58989 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss,
58990 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_7_ss",
58991 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x3000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58992
58993 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss,
58994 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_8_ss",
58995 FT_UINT16, BASE_HEX, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58996
58997 {&hf_ieee80211_he_rx_he_mcs_map_lte_80,
58998 {"Rx HE-MCS Map <= 80 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_lte_80",
58999 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59000
59001 {&hf_ieee80211_he_tx_he_mcs_map_lte_80,
59002 {"Tx HE-MCS Map <= 80 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_lte_80",
59003 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59004
59005 {&hf_ieee80211_he_rx_he_mcs_map_160,
59006 {"Rx HE-MCS Map 160 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_160",
59007 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59008
59009 {&hf_ieee80211_he_tx_he_mcs_map_160,
59010 {"Tx HE-MCS Map 160 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_160",
59011 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59012
59013 {&hf_ieee80211_he_rx_he_mcs_map_80_80,
59014 {"Rx HE-MCS Map 80+80 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_80_80",
59015 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59016
59017 {&hf_ieee80211_he_tx_he_mcs_map_80_80,
59018 {"Tx HE-MCS Map 80+80 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_80_80",
59019 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59020
59021 {&hf_ieee80211_he_ppe_thresholds_nss,
59022 {"NSS", "wlan.ext_tag.he_ppe_thresholds.nss",
59023 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59024
59025 {&hf_ieee80211_he_ppe_thresholds_ru_index_bitmask,
59026 {"RU Index Bitmask", "wlan.ext_tag.he_ppe_thresholds.ru_index_bitmask",
59027 FT_UINT8, BASE_HEX, NULL((void*)0), 0x78, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59028
59029 {&hf_ieee80211_he_ppe_ppet16,
59030 {"PPET16","wlan.ext_tag.he_ppe_thresholds.ppet16",
59031 FT_UINT8, BASE_HEX, VALS(constellation_vals)((0 ? (const struct _value_string*)0 : ((constellation_vals))
))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59032
59033 {&hf_ieee80211_he_ppe_ppet8,
59034 {"PPET8","wlan.ext_tag.he_ppe_thresholds.ppet8",
59035 FT_UINT8, BASE_HEX, VALS(constellation_vals)((0 ? (const struct _value_string*)0 : ((constellation_vals))
))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59036
59037 {&hf_ieee80211_he_operation_parameter,
59038 {"HE Operation Parameters", "wlan.ext_tag.he_operation.params",
59039 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59040
59041 {&hf_ieee80211_he_operation_default_pe_duration,
59042 {"Default PE Duration", "wlan.ext_tag.he_operation.default_pe_duration",
59043 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59044
59045 {&hf_ieee80211_he_operation_twt_required,
59046 {"TWT Required", "wlan.ext_tag.he_operation.twt_required",
59047 FT_BOOLEAN, 24, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59048
59049 {&hf_ieee80211_he_operation_txop_duration_rts_threshold,
59050 {"TXOP Duration RTS Threshold", "wlan.ext_tag.he_operation.txop_duration_rts_thresh",
59051 FT_UINT24, BASE_DEC, NULL((void*)0), 0x003FF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59052
59053 {&hf_ieee80211_he_operation_vht_operation_information_present,
59054 {"VHT Operation Information Present", "wlan.ext_tag.he_operation.vht_op_info_present",
59055 FT_BOOLEAN, 24, NULL((void*)0), 0x004000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59056
59057 {&hf_ieee80211_he_operation_co_hosted_bss,
59058 {"Co-Hosted BSS", "wlan.ext_tag.he_operation.co_hosted_bss",
59059 FT_BOOLEAN, 24, NULL((void*)0), 0x008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59060
59061 {&hf_ieee80211_he_operation_er_su_disable,
59062 {"ER SU Disable", "wlan.ext_tag.he_operation.er_su_disable",
59063 FT_BOOLEAN, 24, NULL((void*)0), 0x010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59064
59065 {&hf_ieee80211_he_operation_6ghz_operation_information_present,
59066 {"6 GHz Operation Information Present", "wlan.ext_tag.he_operation.6ghz_operation_information_present",
59067 FT_BOOLEAN, 24, NULL((void*)0), 0x020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59068
59069 {&hf_ieee80211_he_operation_reserved_b16_b23,
59070 {"Reserved", "wlan.ext_tag.he_operation.reserved_b16_b32",
59071 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFC0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59072
59073 {&hf_ieee80211_he_bss_color_information,
59074 {"BSS Color Information", "wlan.ext_tag.bss_color_information",
59075 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59076
59077 {&hf_ieee80211_he_bss_color_info_bss_color,
59078 {"BSS Color", "wlan.ext_tag.bss_color_information.bss_color",
59079 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59080
59081 {&hf_ieee80211_he_bss_color_partial_bss_color,
59082 {"Partial BSS Color", "wlan.ext_tag.bss_color_information.partial_bss_color",
59083 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59084
59085 {&hf_ieee80211_he_bss_color_bss_color_disabled,
59086 {"BSS Color Disabled", "wlan.ext_tag.bss_color_information.bss_color_disabled",
59087 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59088
59089 {&hf_ieee80211_he_operation_basic_mcs,
59090 {"Basic HE-MCS and NSS Set", "wlan.ext_tag.he_operation.basic_he_mcs_and_nss",
59091 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59092
59093 {&hf_ieee80211_he_oper_max_he_mcs_for_1_ss,
59094 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_1_ss",
59095 FT_UINT16, BASE_DEC, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59096
59097 {&hf_ieee80211_he_oper_max_he_mcs_for_2_ss,
59098 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_2_ss",
59099 FT_UINT16, BASE_DEC, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59100
59101 {&hf_ieee80211_he_oper_max_he_mcs_for_3_ss,
59102 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_3_ss",
59103 FT_UINT16, BASE_DEC, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59104
59105 {&hf_ieee80211_he_oper_max_he_mcs_for_4_ss,
59106 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_4_ss",
59107 FT_UINT16, BASE_DEC, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x00C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59108
59109 {&hf_ieee80211_he_oper_max_he_mcs_for_5_ss,
59110 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_5_ss",
59111 FT_UINT16, BASE_DEC, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59112
59113 {&hf_ieee80211_he_oper_max_he_mcs_for_6_ss,
59114 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_6_ss",
59115 FT_UINT16, BASE_DEC, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x0C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59116
59117 {&hf_ieee80211_he_oper_max_he_mcs_for_7_ss,
59118 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_7_ss",
59119 FT_UINT16, BASE_DEC, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0x3000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59120
59121 {&hf_ieee80211_he_oper_max_he_mcs_for_8_ss,
59122 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_8_ss",
59123 FT_UINT16, BASE_DEC, VALS(he_mcs_map_vals)((0 ? (const struct _value_string*)0 : ((he_mcs_map_vals)))), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59124
59125 {&hf_ieee80211_he_operation_channel_width,
59126 {"Channel Width", "wlan.ext_tag.he_operation.vht_op_info.channel_width",
59127 FT_UINT8, BASE_DEC, VALS(channel_width_vals)((0 ? (const struct _value_string*)0 : ((channel_width_vals))
))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59128
59129 {&hf_ieee80211_he_operation_channel_center_freq_0,
59130 {"Channel Center Frequency Segment 0", "wlan.ext_tag.he_operation.vht_op_info.chan_center_freq_seg_0",
59131 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59132
59133 {&hf_ieee80211_he_operation_channel_center_freq_1,
59134 {"Channel Center Frequency Segment 1", "wlan.ext_tag.he_operation.vht_op_info.chan_center_freq_seg_1",
59135 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59136
59137 {&hf_ieee80211_he_operation_max_co_hosted_bssid_indicator,
59138 {"Max Co-Hosted BSSID Indicator", "wlan.ext_tag.he_operation.max_co_hosted_bssid_indicator",
59139 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59140
59141 {&hf_ieee80211_he_operation_6ghz_primary_channel,
59142 {"Primary Channel", "wlan.ext_tag.he_operation.6ghz.primary_channel",
59143 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59144
59145 {&hf_ieee80211_he_operation_6ghz_control,
59146 {"Control", "wlan.ext_tag.he_operation.6ghz.control",
59147 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59148
59149 {&hf_ieee80211_he_operation_6ghz_control_channel_width,
59150 {"Channel Width", "wlan.ext_tag.he_operation.6ghz.control.channel_width",
59151 FT_UINT8, BASE_DEC, VALS(operating_mode_field_channel_width)((0 ? (const struct _value_string*)0 : ((operating_mode_field_channel_width
))))
, 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59152
59153 {&hf_ieee80211_he_operation_6ghz_control_duplicate_beacon,
59154 {"Duplicate Beacon", "wlan.ext_tag.he_operation.6ghz.control.duplicate_beacon",
59155 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59156
59157 {&hf_ieee80211_he_operation_6ghz_control_regulatory_info,
59158 {"Regulatory Info", "wlan.ext_tag.he_operation.6ghz.control.regulatory_info",
59159 FT_UINT8, BASE_DEC, NULL((void*)0), 0x78, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59160
59161 {&hf_ieee80211_he_operation_6ghz_control_reserved,
59162 {"Reserved", "wlan.ext_tag.he_operation.6ghz.control.reserved",
59163 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59164
59165 {&hf_ieee80211_he_operation_6ghz_channel_center_freq_0,
59166 {"Channel Center Frequency Segment 0", "wlan.ext_tag.he_operation.6ghz.chan_center_freq_seg_0",
59167 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59168
59169 {&hf_ieee80211_he_operation_6ghz_channel_center_freq_1,
59170 {"Channel Center Frequency Segment 1", "wlan.ext_tag.he_operation.6ghz.chan_center_freq_seg_1",
59171 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59172
59173 {&hf_ieee80211_he_operation_6ghz_minimum_rate,
59174 {"Minimum Rate", "wlan.ext_tag.he_operation.6ghz.minimum_rate",
59175 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59176
59177 {&hf_ieee80211_he_muac_aci_aifsn,
59178 {"AIC/AIFSN","wlan.ext_tag.mu_edca_parameter_set.aic_aifsn",
59179 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59180
59181 {&hf_ieee80211_he_muac_aifsn,
59182 {"AIFSN", "wlan.ext_tag.mu_edca_parameter_set.aifsn",
59183 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
59184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59185
59186 {&hf_ieee80211_he_muac_acm,
59187 {"Admission Control Mandatory", "wlan.ext_tag.mu_edca_parameter_set.acm",
59188 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
59189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59190
59191 {&hf_ieee80211_he_muac_aci,
59192 {"ACI", "wlan.ext_tag.mu_edca_parameter_set.aci",
59193 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
59194 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59195
59196 {&hf_ieee80211_he_muac_reserved,
59197 {"Reserved", "wlan.ext_tag.mu_edca_parameter_set.reserved",
59198 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
59199 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59200
59201 {&hf_ieee80211_he_mu_edca_timer,
59202 {"MU EDCA Timer","wlan.ext_tag.mu_edca_parameter_set.mu_edca_timer",
59203 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59204
59205 {&hf_ieee80211_he_muac_ecwmin_ecwmax,
59206 {"ECWmin/ECWmax","wlan.ext_tag.mu_edca_parameter_set.ecwmin_ecwmax",
59207 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59208
59209 {&hf_ieee80211_he_spatial_reuse_sr_control,
59210 {"SR Control", "wlan.ext_tag.spatial_reuse.sr_control",
59211 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59212
59213 {&hf_ieee80211_he_srp_disallowed,
59214 {"SRP Disallowed", "wlan.ext_tag.spatial_reuse.sr_control.srp_dis",
59215 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59216
59217 {&hf_ieee80211_he_non_srg_obss_pd_sr_disallowed,
59218 {"NON-SRG OBSS PD SR Disallowed", "wlan.ext_tag.spatial_reuse.sr_control.non_srg_obss_pd_sr_dis",
59219 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59220
59221 {&hf_ieee80211_he_non_srg_offset_present,
59222 {"Non-SRG Offset Present", "wlan.ext_tag.spatial_reuse.sr_control.non_srg_ofs_present",
59223 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59224
59225 {&hf_ieee80211_he_srg_information_present,
59226 {"SRG Information Present", "wlan.ext_tag.spatial_reuse.sr_control.srg_info_present",
59227 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59228
59229 {&hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed,
59230 {"HESIGA Spatial Reuse value 15 allowed", "wlan.ext_tag.spatial_reuse.sr_control.hesiga_val_15_allowed",
59231 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59232
59233 {&hf_ieee80211_he_sr_control_reserved,
59234 {"Reserved", "wlan.ext_tag.spatial_reuse.sr_control.reserved",
59235 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59236
59237 {&hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset,
59238 {"Non-SRG OBSS PD Max Offset", "wlan.ext_tag.spatial_reuse.non_srg_obss_pd_max_offset",
59239 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59240
59241 {&hf_ieee80211_he_spatial_srg_obss_pd_min_offset,
59242 {"SRG OBSS PD Min Offset", "wlan.ext_tag.spatial_reuse.srg_obss_pd_min_offset",
59243 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59244
59245 {&hf_ieee80211_he_spatial_srg_obss_pd_max_offset,
59246 {"SRG OBSS PD Max Offset", "wlan.ext_tag.spatial_reuse.srg_obss_pd_max_offset",
59247 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59248
59249 {&hf_ieee80211_he_spatial_srg_bss_color_bitmap,
59250 {"SRG BSS Color Bitmap", "wlan.ext_tag.spatial_reuse.srg_bss_color_bitmap",
59251 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59252
59253 {&hf_ieee80211_he_spatial_srg_partial_bssid_bitmap,
59254 {"SRG Partial BSSID Bitmap", "wlan.ext_tag.spatial_reuse.srg_partial_bssid_bitmap",
59255 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59256
59257 {&hf_ieee80211_he_resource_request_buffer_thresh,
59258 {"Resource Request Buffer Threshold Exponent", "wlan.ext_tag.ndp_feedback.res_req_buf_thresh_exp",
59259 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59260
59261 {&hf_ieee80211_he_bss_color_change_new_color_info,
59262 {"New BSS Color Info", "wlan.ext_tag.bss_color_change.new_color_info",
59263 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59264
59265 {&hf_ieee80211_he_new_bss_color_info_color,
59266 {"New BSS Color", "wlan.ext_tag.bss_color_change.new_bss_color",
59267 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59268
59269 {&hf_ieee80211_he_new_bss_color_info_reserved,
59270 {"Reserved", "wlan.ext_tag.bss_color_change.new_color_reserved",
59271 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59272
59273 {&hf_ieee80211_he_bss_color_change_switch_countdown,
59274 {"BSS Color Switch Countdown", "wlan.ext_tag.bss_color_change.color_switch_countdown",
59275 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59276
59277 {&hf_ieee80211_he_ess_report_planned_ess,
59278 {"Planned ESS", "wlan.ext_tag.ess_report.ess_info.planned_ess",
59279 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59280
59281 {&hf_ieee80211_he_ess_report_edge_of_ess,
59282 {"Edge of ESS", "wlan.ext_tag.ess_report.ess_info.edge_of_ess",
59283 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59284
59285 {&hf_ieee80211_he_ess_report_info_field,
59286 {"ESS Information field", "wlan.ext_tag.ess_report.ess_info.field",
59287 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59288
59289 {&hf_ieee80211_he_ess_report_recommend_transition_thresh,
59290 {"Recommended BSS Transition Threshold", "wlan.ext_tag.ess_report.ess_info.thresh",
59291 FT_INT8, BASE_DEC, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59292
59293 {&hf_ieee80211_he_ops_duration,
59294 {"OPS Duration", "wlan.ext_tag.ops.ops_duration",
59295 FT_UINT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_milliseconds)((0 ? (const struct unit_name_string*)0 : ((&units_milliseconds
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59296
59297 {&hf_ieee80211_he_uora_field,
59298 {"UL OFDMA-based Random Access Parameter SET", "wlan.ext_tag.uora_parameter_set.field",
59299 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59300
59301 {&hf_ieee80211_he_uora_eocwmin,
59302 {"EOCWmin", "wlan.ext_tag.uora_parameter_set.eocwmin",
59303 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59304
59305 {&hf_ieee80211_he_uora_owcwmax,
59306 {"EOCWmax", "wlan.ext_tag.uora_parameter_set.eocwmax",
59307 FT_UINT8, BASE_DEC, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59308
59309 {&hf_ieee80211_he_uora_reserved,
59310 {"Reserved", "wlan.ext_tag.uora_parameter_set.reserved",
59311 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59312
59313 {&hf_ieee80211_max_channel_switch_time,
59314 {"Max Channel Switch Time",
59315 "wlan.ext_tag.max_channel_switch_time.switch_time",
59316 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59317
59318 {&hf_ieee80211_oci_operating_class,
59319 {"Operating Class", "wlan.ext_tag.oci.operating_class",
59320 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59321
59322 {&hf_ieee80211_oci_primary_channel_number,
59323 {"Primary Channel Number", "wlan.ext_tag.oci.primary_channel_number",
59324 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59325
59326 {&hf_ieee80211_oci_frequency_segment_1,
59327 {"Frequency Segment 1 Channel Number",
59328 "wlan.ext_tag.oci.frequency_segment_1_channel_number",
59329 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59330
59331 {&hf_ieee80211_oci_oct_operating_class,
59332 {"OCT Operating Class", "wlan.ext_tag.oci.oct_operating_class",
59333 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59334
59335 {&hf_ieee80211_oci_oct_primary_channel_number,
59336 {"OCT Primary Channel Number",
59337 "wlan.ext_tag.oci.oct_primary_channel_number",
59338 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59339
59340 {&hf_ieee80211_oci_oct_frequency_segment_1,
59341 {"OCT Frequency Segment 1 Channel Number",
59342 "wlan.ext_tag.oci.oct_frequency_segment_1_channel_number",
59343 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59344
59345 {&hf_ieee80211_multiple_bssid_configuration_bssid_count,
59346 {"BSSID Count", "wlan.ext_tag.multiple_bssid_configuration.bssid_count",
59347 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59348
59349 {&hf_ieee80211_non_inheritance_element_id_list_length,
59350 {"Length", "wlan.ext_tag.non_inheritance.element_id_list.length",
59351 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59352
59353 {&hf_ieee80211_non_inheritance_element_id_list_element_id,
59354 {"Element ID", "wlan.ext_tag.non_inheritance.element_id_list.element_id",
59355 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59356
59357 {&hf_ieee80211_non_inheritance_element_id_ext_list_length,
59358 {"Length", "wlan.ext_tag.non_inheritance.element_id_ext_list.length",
59359 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59360
59361 {&hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext,
59362 {"Element ID Extension", "wlan.ext_tag.non_inheritance.element_id_ext_list.element_id_ext",
59363 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59364
59365 {&hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity,
59366 {"Full Set Rx Periodicity", "wlan.ext_tag.multiple_bssid_configuration.full_set_rx_periodicity",
59367 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59368
59369 {&hf_ieee80211_known_bssid_bitmap,
59370 {"Bitmap", "wlan.ext_tag.known_bssid.bitmap",
59371 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59372
59373 {&hf_ieee80211_short_ssid,
59374 {"Short SSID", "wlan.ext_tag.short_ssid",
59375 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59376
59377 {&hf_ieee80211_rejected_groups_group,
59378 {"Rejected Finite Cyclic Group", "wlan.ext_tag.rejected_groups.group",
59379 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59380
59381 {&hf_ieee80211_ff_s1g_action,
59382 {"S1G Action", "wlan.s1g.action",
59383 FT_UINT8, BASE_DEC, VALS(s1g_action_vals)((0 ? (const struct _value_string*)0 : ((s1g_action_vals)))), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59384
59385 {&hf_ieee80211_ff_prot_s1g_action,
59386 {"Protected S1G Action", "wlan.s1g.prot_action",
59387 FT_UINT8, BASE_DEC, VALS(prot_s1g_action_vals)((0 ? (const struct _value_string*)0 : ((prot_s1g_action_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59388
59389 {&hf_ieee80211_ff_s1g_timestamp,
59390 {"Timestamp", "wlan.s1g.timestamp",
59391 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59392
59393 {&hf_ieee80211_ff_s1g_change_sequence,
59394 {"Change Sequence", "wlan.s1g.change_sequence",
59395 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59396
59397 {&hf_ieee80211_ff_s1g_next_tbtt,
59398 {"Next TBTT", "wlan.s1g.next_tbtt",
59399 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59400
59401 {&hf_ieee80211_ff_s1g_compressed_ssid,
59402 {"Compressed SSID", "wlan.s1g.compressed_ssid",
59403 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59404
59405 {&hf_ieee80211_ff_s1g_access_network_options,
59406 {"Access Network Options", "wlan.s1g.access_network_options",
59407 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59408
59409 {&hf_ieee80211_s1g_sync_control,
59410 {"Sync Control", "wlan.s1g.sync_control",
59411 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59412
59413 {&hf_ieee80211_s1g_sync_control_uplink_sync_request,
59414 {"Uplink Sync Request", "wlan.s1g.sync_control.uplink_sync_request",
59415 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59416
59417 {&hf_ieee80211_s1g_sync_control_time_slot_protection_request,
59418 {"Time Slot Protection request",
59419 "wlan.s1g.sync_control.time_slot_protection_request",
59420 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59421
59422 {&hf_ieee80211_s1g_sync_control_reserved,
59423 {"Reserved", "wlan.s1g.sync_control.reserved",
59424 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59425
59426 {&hf_ieee80211_s1g_sector_id_index,
59427 {"Sector ID Index", "wlan.s1g.sector_id_index",
59428 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59429
59430 {&hf_ieee80211_s1g_sector_id_preferred_sector_id,
59431 {"Preferred Sector ID", "wlan.s1g.sector_id_index.preferred_sector_id",
59432 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59433
59434 {&hf_ieee80211_s1g_sector_id_snr,
59435 {"SNR", "wlan.s1g.sector_id_index.snr",
59436 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_sector_id_index_snr_custom)((const void *) (size_t) (s1g_sector_id_index_snr_custom)),
59437 0x00F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59438
59439 {&hf_ieee80211_s1g_sector_id_receive_sector_bitmap,
59440 {"Receive Sector Bitmap", "wlan.s1g.sector_id_index.receive_sector_bitmap",
59441 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59442
59443 {&hf_ieee80211_s1g_twt_information_control,
59444 {"TWT Information Control", "wlan.s1g.twt_information.control",
59445 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59446
59447 {&hf_ieee80211_s1g_twt_next_twt_32,
59448 {"Next TWT", "wlan.s1g.twt_information.next_twt32",
59449 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59450
59451 {&hf_ieee80211_s1g_twt_next_twt_48,
59452 {"Next TWT", "wlan.s1g.twt_information.next_twt48",
59453 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59454
59455 {&hf_ieee80211_s1g_twt_next_twt_64,
59456 {"Next TWT", "wlan.s1g.twt_information.next_twt64",
59457 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59458
59459 {&hf_ieee80211_s1g_twt_flow_identifier,
59460 {"TWT Flow Identifier",
59461 "wlan.s1g.twt_information.control.twt_flow_identifier",
59462 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59463
59464 {&hf_ieee80211_s1g_twt_response_required,
59465 {"Response Requested",
59466 "wlan.s1g.twt_information.control.response_requested",
59467 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59468
59469 {&hf_ieee80211_s1g_twt_next_twt_request,
59470 {"Next TWT Request", "wlan.s1g.twt_information.control.next_twt_request",
59471 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59472
59473 {&hf_ieee80211_s1g_twt_next_twt_subfield_size,
59474 {"Next TWT Subfield Size",
59475 "wlan.s1g.twt_information.control.next_twt_subfield_size",
59476 FT_UINT8, BASE_HEX, NULL((void*)0), 0x60, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59477
59478 {&hf_ieee80211_s1g_twt_reserved,
59479 {"Reserved", "wlan.s1g.twt_information.control.reserved",
59480 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59481
59482 {&hf_ieee80211_s1g_update_edca_info,
59483 {"Update EDCA Info", "wlan.s1g.edca_param_set.update_edca_info",
59484 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59485
59486 {&hf_ieee80211_s1g_update_edca_override,
59487 {"Override", "wlan.s1g.edca_param_set.update_edca_info.override",
59488 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
59489 "Overrides the previously stored EDCAL parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59490
59491 {&hf_ieee80211_s1g_update_edca_ps_poll_aci,
59492 {"PS-Poll ACI", "wlan.s1g.edca_param_set.update_edca_info.pd_poll_aci",
59493 FT_UINT8, BASE_HEX, NULL((void*)0), 0x06, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59494
59495 {&hf_ieee80211_s1g_update_edca_raw_aci,
59496 {"RAW ACI", "wlan.s1g.edca_param_set.update_edca_info.raw_aci",
59497 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59498
59499 {&hf_ieee80211_s1g_update_edca_sta_type,
59500 {"STA Type", "wlan.s1g.edca_param_set.update_edca_info.sta_type",
59501 FT_UINT8, BASE_HEX, VALS(sta_field_type_vals)((0 ? (const struct _value_string*)0 : ((sta_field_type_vals)
)))
, 0x60, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59502
59503 {&hf_ieee80211_s1g_update_edca_reserved,
59504 {"Reserved", "wlan.s1g.edca_param_set.update_edca_info.reserved",
59505 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59506
59507 {&hf_ieee80211_twt_bcast_flow,
59508 {"TWT Flow", "wlan.twt.bcast_flow",
59509 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59510
59511 {&hf_ieee80211_twt_individual_flow,
59512 {"TWT Flow", "wlan.twt.individual_flow",
59513 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59514
59515 {&hf_ieee80211_twt_individual_flow_id,
59516 {"Individual TWT Flow Id", "wlan.twt.individual_flow_id",
59517 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59518
59519 {&hf_ieee80211_twt_individual_reserved,
59520 {"Reserved", "wlan.twt.individual_reserved",
59521 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59522
59523 {&hf_ieee80211_twt_bcast_id,
59524 {"Broadcast TWT Id", "wlan.twt.bcast_flow_id",
59525 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59526
59527 {&hf_ieee80211_twt_neg_type,
59528 {"TWT Negotiation type", "wlan.twt.neg_type",
59529 FT_UINT8, BASE_DEC, VALS(twt_neg_type_vals)((0 ? (const struct _value_string*)0 : ((twt_neg_type_vals)))
)
, 0x60,
59530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59531
59532 {&hf_ieee80211_twt_neg_type2_reserved1,
59533 {"Reserved", "wlan.twt.flow_id_reserved1",
59534 FT_UINT8, BASE_HEX, NULL((void*)0), 0x1f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59535
59536 {&hf_ieee80211_twt_neg_type2_reserved2,
59537 {"Reserved", "wlan.twt.flow_id_reserved2",
59538 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59539
59540 {&hf_ieee80211_twt_bcast_teardown_all,
59541 {"TWT Flow", "wlan.twt.bcast_flow",
59542 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59543
59544 {&hf_ieee80211_twt_bcast_twt_id_reserved,
59545 {"Reserved", "wlan.twt.bcast_flow.twt_id_reserved",
59546 FT_UINT8, BASE_HEX, NULL((void*)0), 0x1F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59547
59548 {&hf_ieee80211_twt_bcast_neg_type_reserved,
59549 {"Reserved", "wlan.twt.bcast_flow.negotiation_type_reserved",
59550 FT_UINT8, BASE_HEX, NULL((void*)0), 0x60, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59551
59552 {&hf_ieee80211_twt_bcast_teardown_all_twt,
59553 {"Teardown All TWT", "wlan.twt.bcast_flow.teardown_all_twt",
59554 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59555
59556 {&hf_ieee80211_tag_twt_control_field,
59557 {"Control Field", "wlan.twt.control_field",
59558 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59559
59560 {&hf_ieee80211_tag_twt_ndp_paging_indicator,
59561 {"NDP Paging Indicator", "wlan.twt.ndp_paging_indicator",
59562 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x1, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59563
59564 {&hf_ieee80211_tag_twt_responder_pm_mode,
59565 {"Responder PM Mode", "wlan.twt.resp_pm",
59566 FT_BOOLEAN, 8, TFS(&twt_responder_pm_mode_tfs)((0 ? (const struct true_false_string*)0 : ((&twt_responder_pm_mode_tfs
))))
, 0x2, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59567
59568 {&hf_ieee80211_tag_twt_neg_type,
59569 {"Negotiation type", "wlan.twt.neg_type",
59570 FT_UINT8, BASE_DEC, VALS(twt_neg_type_vals)((0 ? (const struct _value_string*)0 : ((twt_neg_type_vals)))
)
, 0xc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59571
59572 {&hf_ieee80211_tag_twt_info_frame_disabled,
59573 {"TWT Information Frame Disabled", "wlan.twt.info_frame_disabled",
59574 FT_BOOLEAN, 8, TFS(&twt_info_frame_disabled_tfs)((0 ? (const struct true_false_string*)0 : ((&twt_info_frame_disabled_tfs
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59575
59576 {&hf_ieee80211_tag_twt_wake_duration_unit,
59577 {"Wake Duration Unit", "wlan.twt.wake_duration_unit",
59578 FT_BOOLEAN, 8, TFS(&twt_wake_duration_unit_tfs)((0 ? (const struct true_false_string*)0 : ((&twt_wake_duration_unit_tfs
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59579
59580 {&hf_ieee80211_tag_twt_link_id_bitmap_present,
59581 {"Link ID Bitmap Present", "wlan.twt.link_id_bitmap_present",
59582 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59583
59584 {&hf_ieee80211_tag_twt_aligned_twt,
59585 {"Aligned TWT", "wlan.twt.aligned_twt",
59586 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59587
59588 {&hf_ieee80211_tag_twt_req_type_field,
59589 {"Request Type", "wlan.twt.request_type",
59590 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59591
59592 {&hf_ieee80211_tag_twt_req_type_req,
59593 {"Requester", "wlan.twt.requester",
59594 FT_BOOLEAN, 16, TFS(&twt_requester_tfs)((0 ? (const struct true_false_string*)0 : ((&twt_requester_tfs
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59595
59596 {&hf_ieee80211_tag_twt_req_type_setup_cmd,
59597 {"Setup Command", "wlan.twt.setup_cmd",
59598 FT_UINT16, BASE_DEC, VALS(twt_setup_cmd)((0 ? (const struct _value_string*)0 : ((twt_setup_cmd)))), 0x000e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59599
59600 {&hf_ieee80211_tag_twt_req_type_trigger,
59601 {"Trigger", "wlan.twt.trigger",
59602 FT_BOOLEAN, 16, TFS(&twt_trigger)((0 ? (const struct true_false_string*)0 : ((&twt_trigger
))))
, 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59603
59604 {&hf_ieee80211_tag_twt_req_type_implicit,
59605 {"Implicit", "wlan.twt.implicit",
59606 FT_BOOLEAN, 16, TFS(&twt_implicit)((0 ? (const struct true_false_string*)0 : ((&twt_implicit
))))
, 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59607
59608 {&hf_ieee80211_tag_twt_req_type_flow_type,
59609 {"Flow type", "wlan.twt.flow_type",
59610 FT_BOOLEAN, 16, TFS(&twt_flow_type)((0 ? (const struct true_false_string*)0 : ((&twt_flow_type
))))
, 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59611
59612 {&hf_ieee80211_tag_twt_req_type_flow_id,
59613 {"Flow ID", "wlan.twt.flow_id",
59614 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59615
59616 {&hf_ieee80211_tag_twt_req_type_wake_int_exp,
59617 {"Wake Interval Exponent", "wlan.twt.wake_interval_exp",
59618 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7c00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59619
59620 {&hf_ieee80211_tag_twt_req_type_prot,
59621 {"Protection", "wlan.twt.prot",
59622 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59623
59624 {&hf_ieee80211_tag_twt_req_type_last_bcst_parm_set,
59625 {"Last Broadcast Parameter Set",
59626 "wlan.twt.last_broadcast_parameter_set",
59627 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59628
59629 {&hf_ieee80211_tag_twt_req_type_bcst_twt_recom,
59630 {"Broadcast TWT Recommendation", "wlan.twt.broadcast_twt_recommendation",
59631 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59632
59633 {&hf_ieee80211_tag_twt_req_type_aligned,
59634 {"Aligned", "wlan.twt.aligned",
59635 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59636
59637 {&hf_ieee80211_tag_twt_ndp_paging_field,
59638 {"NDP Paging", "wlan.twt.ndp_paging",
59639 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59640
59641 {&hf_ieee80211_tag_twt_ndp_paging_p_id,
59642 {"P-ID", "wlan.twt.ndp_paging.p_id",
59643 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59644
59645 {&hf_ieee80211_tag_twt_ndp_max_ndp_paging_period,
59646 {"Max NDP Paging Period", "wlan.twt.ndp_paging.max_ndp_paging_period",
59647 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0001FE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59648
59649 {&hf_ieee80211_tag_twt_ndp_partial_tsf_offset,
59650 {"Partial TSF Offset", "wlan.twt.ndp_paging.partial_tsf_offset",
59651 FT_UINT32, BASE_DEC, NULL((void*)0), 0x001E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59652
59653 {&hf_ieee80211_tag_twt_ndp_action,
59654 {"Action", "wlan.twt.ndp_paging.action",
59655 FT_UINT32, BASE_DEC, VALS(twt_ndp_action_vals)((0 ? (const struct _value_string*)0 : ((twt_ndp_action_vals)
)))
,
59656 0x00E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59657
59658 {&hf_ieee80211_tag_twt_ndp_min_sleep_duration,
59659 {"Min Sleep Duration", "wlan.twt.ndp_paging.min_sleep_duration",
59660 FT_UINT32, BASE_DEC, NULL((void*)0), 0x3C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59661
59662 {&hf_ieee80211_tag_twt_ndp_reserved,
59663 {"Reserved", "wlan.twt.ndp_paging.reserved",
59664 FT_UINT32, BASE_HEX, NULL((void*)0), 0xC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59665
59666 {&hf_ieee80211_tag_twt_link_id_bitmap,
59667 {"Link ID Bitmap", "wlan.twt.link_id_bitmap",
59668 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59669
59670 {&hf_ieee80211_tag_twt_aligned_twt_link_bitmap,
59671 {"Aligned TWT Link Bitmap", "wlan.twt.aligned_twt_link_bitmap",
59672 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59673
59674 {&hf_ieee80211_tag_twt_broadcast_info,
59675 {"Broadcast TWT Info", "wlan.twt.broadcast_twt_info",
59676 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59677
59678 {&hf_ieee80211_tag_twt_bcast_info_persistence,
59679 {"Broadcast TWT Persistence",
59680 "wlan.twt.bcast_twt_info.broadcast_twt_persistence",
59681 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59682
59683 {&hf_ieee80211_tag_twt_bcast_info_id,
59684 {"Broadcast TWT ID", "wlan.twt.bcast_twt_info.broadcast_twt_id",
59685 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59686
59687 {&hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info,
59688 {"Restricted TWT Schedule Info", "wlan.twt.bcast_twt_info.rtwt_schedule_info",
59689 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0006, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59690
59691 {&hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present,
59692 {"Restricted TWT Traffic Info Present", "wlan.twt.bcast_twt_info.rtwt_traffic_info_present",
59693 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59694
59695 {&hf_ieee80211_tag_twt_traffic_info_control,
59696 {"Traffic Info Control", "wlan.twt.traffic_info.control",
59697 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59698
59699 {&hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid,
59700 {"DL TID Bitmap Valid", "wlan.twt.traffic_info.dl_tid_bitmap_valid",
59701 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59702
59703 {&hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid,
59704 {"UL TID Bitmap Valid", "wlan.twt.traffic_info.ul_tid_bitmap_valid",
59705 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59706
59707 {&hf_ieee80211_tag_twt_traffic_info_reserved,
59708 {"Reserved", "wlan.twt.traffic_info.reserved",
59709 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59710
59711 {&hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap,
59712 {"Restricted TWT DL TID Bitmap", "wlan.twt.traffic_info.dl_tid_bitmap",
59713 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59714
59715 {&hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap,
59716 {"Restricted TWT UL TID Bitmap", "wlan.twt.traffic_info.ul_tid_bitmap",
59717 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59718
59719 {&hf_ieee80211_tag_twt_target_wake_time,
59720 {"Target Wake Time", "wlan.twt.target_wake_time",
59721 FT_UINT64, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59722
59723 {&hf_ieee80211_tag_twt_target_wake_time_short,
59724 {"Target Wake Time", "wlan.twt.target_wake_time_short",
59725 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59726
59727 {&hf_ieee80211_tag_twt_nom_min_twt_wake_dur,
59728 {"Nominal Minimum TWT Wake duration", "wlan.twt.nom_min_twt_wake_duration",
59729 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59730
59731 {&hf_ieee80211_tag_twt_wake_interval_mantissa,
59732 {"TWT Wake Interval Mantissa", "wlan.twt.wake_interval_mantissa",
59733 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59734
59735 {&hf_ieee80211_tag_twt_channel,
59736 {"TWT Channel", "wlan.twt.channel",
59737 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59738
59739 {&hf_ieee80211_tag_rsnx,
59740 {"RSNX", "wlan.rsnx",
59741 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59742
59743 {&hf_ieee80211_wfa_ie_transition_disable_bitmap,
59744 {"Transition Disable Bitmap", "wlan.transition_disable_bitmap",
59745 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59746
59747 {&hf_ieee80211_wfa_ie_transition_disable_wpa3_personal,
59748 {"WPA3-Personal", "wlan.transition_disable.wpa3_personal",
59749 FT_BOOLEAN, 8, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59750
59751 {&hf_ieee80211_wfa_ie_transition_disable_sae_pk,
59752 {"SAE-PK", "wlan.transition_disable.sae_pk",
59753 FT_BOOLEAN, 8, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59754
59755 {&hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise,
59756 {"WPA3-Enterprise", "wlan.transition_disable.wpa3_enterprise",
59757 FT_BOOLEAN, 8, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59758
59759 {&hf_ieee80211_wfa_ie_transition_disable_enhanced_open,
59760 {"Wi-Fi Enhanced Open", "wlan.transition_disable.enhanced_open",
59761 FT_BOOLEAN, 8, NULL((void*)0), GENMASK(3, 3)(((1U << ((3) - (3) + 1)) - 1) << (3)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59762
59763 {&hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7,
59764 {"Reserved", "wlan.transition_disable.reserved.b4thru7",
59765 FT_UINT8, BASE_HEX, NULL((void*)0), GENMASK(7, 4)(((1U << ((7) - (4) + 1)) - 1) << (4)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59766
59767 {&hf_ieee80211_wfa_ie_transition_disable_reserved,
59768 {"Reserved", "wlan.transition_disable.reserved",
59769 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59770
59771 {&hf_ieee80211_tag_rsnx_length,
59772 {"RSNX Length", "wlan.rsnx.length",
59773 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59774
59775 {&hf_ieee80211_tag_rsnx_protected_twt_operations_support,
59776 {"Protected TWT Operations Support", "wlan.rsnx.protected_twt_operations_support",
59777 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59778
59779 {&hf_ieee80211_tag_rsnx_sae_hash_to_element,
59780 {"SAE Hash to element", "wlan.rsnx.sae_hash_to_element",
59781 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59782
59783 {&hf_ieee80211_tag_rsnx_sae_pk,
59784 {"SAE-PK", "wlan.rsnx.sae_pk",
59785 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59786
59787 {&hf_ieee80211_tag_rsnx_protected_wur_frame_support,
59788 {"Protected WUR Frame Support", "wlan.rsnx.protected_wur_frame_support",
59789 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59790
59791 {&hf_ieee80211_tag_rsnx_secure_ltf_support,
59792 {"Secure LTF Support", "wlan.rsnx.secure_ltf_support",
59793 FT_BOOLEAN, 8, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59794
59795 {&hf_ieee80211_tag_rsnx_secure_rtt_supported,
59796 {"Secure RTT Supported", "wlan.rsnx.secure_rtt_supported",
59797 FT_BOOLEAN, 8, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)), NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59798
59799 {&hf_ieee80211_tag_rsnx_urnm_mfpr_x20,
59800 {"URNM-MFPR-X20", "wlan.rsnx.urnm_mfpr_x20",
59801 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59802
59803 {&hf_ieee80211_tag_rsnx_protected_announce_support,
59804 {"Protected Announce Support", "wlan.rsnx.protected_announce_support",
59805 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59806
59807 {&hf_ieee80211_tag_rsnx_pbac,
59808 {"PBAC", "wlan.rsnx.pbac",
59809 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59810
59811 {&hf_ieee80211_tag_rsnx_extended_s1g_action_protection,
59812 {"Extended S1G Action Protection", "wlan.rsnx.extended_s1g_action_protection",
59813 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59814
59815 {&hf_ieee80211_tag_rsnx_spp_amsdu_capable,
59816 {"SPP AMSDU Capable", "wlan.rsnx.spp_amsdu_capable",
59817 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59818
59819 {&hf_ieee80211_tag_rsnx_urnm_mfpr,
59820 {"URNM-MFPR", "wlan.rsnx.urnm_mfpr",
59821 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59822
59823 {&hf_ieee80211_tag_rsnx_reserved,
59824 {"Reserved", "wlan.rsnx.reserved",
59825 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59826
59827 {&hf_ieee80211_owe_dh_parameter_group,
59828 {"Group", "wlan.ext_tag.owe_dh_parameter.group",
59829 FT_UINT32, BASE_DEC, VALS(owe_dh_parameter_group_vals)((0 ? (const struct _value_string*)0 : ((owe_dh_parameter_group_vals
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59830
59831 {&hf_ieee80211_owe_dh_parameter_public_key,
59832 {"Public Key", "wlan.ext_tag.owe_dh_parameter.public_key",
59833 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59834
59835 {&hf_ieee80211_tag_pasn_parameters_control,
59836 {"Control", "wlan.etag.pasn_params.control",
59837 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59838
59839 {&hf_ieee80211_tag_pasn_params_comeback_info_present,
59840 {"Comeback Info Present", "wlan.etag.pasn_params.comeback_info_present",
59841 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59842
59843 {&hf_ieee80211_tag_pasn_params_group_and_key_present,
59844 {"Group and Key Present", "wlan.etag.pasn_params.group_and_key_present",
59845 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59846
59847 {&hf_ieee80211_tag_pasn_parameters_reserved,
59848 {"Reserved", "wlan.etag.pasn_parameters.reserved",
59849 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59850
59851 {&hf_ieee80211_tag_pasn_parameters_wrapped_fmt,
59852 {"Wrapped Data Format", "wlan.etag.pasn_parameters.wrapped_data_format",
59853 FT_UINT8, BASE_HEX|BASE_RANGE_STRING0x00000100, RVALS(wrapped_data_fmt_rvals)((0 ? (const struct _range_string*)0 : ((wrapped_data_fmt_rvals
))))
,
59854 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59855
59856 {&hf_ieee80211_tag_pasn_comeback_after,
59857 {"Comeback After", "wlan.etag.pasn_parameters.comeback_after",
59858 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59859
59860 {&hf_ieee80211_tag_pasn_cookie_length,
59861 {"Cookie length", "wlan.etag.pasn_parameters.cookie_length",
59862 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59863
59864 {&hf_ieee80211_tag_pasn_cookie,
59865 {"Cookie", "wlan.etag.pasn_parameters.cookie",
59866 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59867
59868 {&hf_ieee80211_tag_pasn_finite_cyclic_group_id,
59869 {"Finite Cyclic Group ID",
59870 "wlan.etag.pasn_parameters.finite_cyclic_group_id",
59871 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59872
59873 {&hf_ieee80211_tag_pasn_ephemeral_public_key_len,
59874 {"Ephemeral Public Key Length",
59875 "wlan.etag.pasn_parameters.ephemeral_public_key_len",
59876 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59877
59878 {&hf_ieee80211_tag_pasn_ephemeral_public_key,
59879 {"Ephemeral Public Key",
59880 "wlan.etag.pasn_parameters.ephemeral_public_key",
59881 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59882
59883 {&hf_ieee80211_pasn_auth1_frame_len,
59884 {"Auth Frame 1 Length", "wlan.pasn_wrapped_data.auth_frame_1_len",
59885 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59886
59887 {&hf_ieee80211_pasn_auth2_frame_len,
59888 {"Auth Frame 2 Length", "wlan.pasn_wrapped_data.auth_frame_2_len",
59889 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59890
59891 {&hf_ieee80211_eht_eml_control_field,
59892 {"EML Control Field", "wlan.eht.eml_control",
59893 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59894
59895 {&hf_ieee80211_eht_eml_control_emlsr_mode,
59896 {"EMLSR Mode", "wlan.eht.eml_control.emlsr_mode",
59897 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59898
59899 {&hf_ieee80211_eht_eml_control_emlmr_mode,
59900 {"EMLMR Mode", "wlan.eht.eml_control.emlmr_mode",
59901 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59902
59903 {&hf_ieee80211_eht_eml_control_emlsr_para_update_control,
59904 {"EMLSR Parameter Update Control", "wlan.eht.eml_control.emlsr_para_update_control",
59905 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59906
59907 {&hf_ieee80211_eht_eml_control_device_coexist_activities,
59908 {"In-Device Coexistence Activities",
59909 "wlan.eht.eml_control.in_device_coexist_activities",
59910 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59911
59912 {&hf_ieee80211_eht_eml_control_reserved,
59913 {"Reserved", "wlan.eht.eml_control.reserved",
59914 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59915
59916 {&hf_ieee80211_eht_eml_control_link_bitmap,
59917 {"Link Bitmap", "wlan.eht.eml_control.link_bitmap",
59918 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59919
59920 {&hf_ieee80211_eht_eml_control_link_enable_id,
59921 {"Enable Link ID",
59922 "wlan.eht.eml_control.link_map.enable_id",
59923 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59924
59925 {&hf_ieee80211_eht_eml_control_mcs_map_count,
59926 {"MCS Map Count Control", "wlan.eht.eml_control.mcs_map_count",
59927 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59928
59929 {&hf_ieee80211_eht_eml_control_mcs_map_count_bw,
59930 {"MCS Map Count Control BW", "wlan.eht.eml_control.mcs_map_count.bw",
59931 FT_UINT8, BASE_HEX, VALS(eht_eml_control_mcs_map_count_bw)((0 ? (const struct _value_string*)0 : ((eht_eml_control_mcs_map_count_bw
))))
, 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59932
59933 {&hf_ieee80211_eht_eml_control_mcs_map_count_reserved,
59934 {"Reserved", "wlan.eht.eml_control.mcs_map_count.reserved",
59935 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59936
59937 {&hf_ieee80211_eht_emlsr_para_update,
59938 {"EMLSR Parameter Update", "wlan.eht.emlsr_parameter_update",
59939 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59940
59941 {&hf_ieee80211_eht_emlsr_para_update_padding_delay,
59942 {"EMLSR Padding Delay", "wlan.eht.emlsr_parameter_update.padding_delay",
59943 FT_UINT8, BASE_HEX, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59944
59945 {&hf_ieee80211_eht_emlsr_para_update_tran_delay,
59946 {"EMLSR Transition Delay", "wlan.eht.emlsr_parameter_update.transition_delay",
59947 FT_UINT8, BASE_HEX, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59948
59949 {&hf_ieee80211_eht_emlsr_para_update_reserved,
59950 {"Reserved", "wlan.eht.emlsr_parameter_update.reserved",
59951 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59952
59953 {&hf_ieee80211_eht_multi_link_control,
59954 {"Multi-Link Control", "wlan.eht.multi_link.control",
59955 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59956
59957 {&hf_ieee80211_eht_multi_link_control_type,
59958 {"Type", "wlan.eht.multi_link.control.type",
59959 FT_UINT16, BASE_DEC, VALS(multi_link_type_vals)((0 ? (const struct _value_string*)0 : ((multi_link_type_vals
))))
, 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59960
59961 {&hf_ieee80211_eht_multi_link_control_reserved,
59962 {"Reserved", "wlan.eht.multi_link.control.reserved",
59963 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59964
59965 {&hf_ieee80211_eht_multi_link_control_link_id_present,
59966 {"Link ID Info Present",
59967 "wlan.eht.multi_link.control.basic.link_id_info_present",
59968 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59969
59970 {&hf_ieee80211_eht_multi_link_control_bss_parms_ch_count,
59971 {"BSS Parameters Change Count Present",
59972 "wlan.eht.multi_link.control.basic.bss_parameters_change_count_present",
59973 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59974
59975 {&hf_ieee80211_eht_multi_link_control_medium_sync_delay,
59976 {"Medium Synchronization Delay Info Present",
59977 "wlan.eht.multi_link.control.basic.medium_sync_delayinfo_present",
59978 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59979
59980 {&hf_ieee80211_eht_multi_link_control_eml_capa,
59981 {"EML Capabilities Present",
59982 "wlan.eht.multi_link.control.basic.eml_capabilities_present",
59983 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59984
59985 {&hf_ieee80211_eht_multi_link_control_mld_capa,
59986 {"MLD Capabilities Present",
59987 "wlan.eht.multi_link.control.basic.mld_capabilities_present",
59988 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59989
59990 {&hf_ieee80211_eht_multi_link_control_basic_mld_id_present,
59991 {"AP MLD ID Present",
59992 "wlan.eht.multi_link.control.basic.mld_id_present",
59993 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59994
59995 {&hf_ieee80211_eht_multi_link_control_ext_mld_capa,
59996 {"Extended MLD Capabilities and Operations Present",
59997 "wlan.eht.multi_link.control.basic.ext_mld_capabilities_present",
59998 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59999
60000 {&hf_ieee80211_eht_multi_link_control_bitmap_reserved,
60001 {"Reserved", "wlan.eht.multi_link.control.basic.reserved",
60002 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60003
60004 {&hf_ieee80211_eht_multi_link_control_probe_mld_id_present,
60005 {"AP MLD ID Present",
60006 "wlan.eht.multi_link.control.probe.mld_id_present",
60007 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60008
60009 {&hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present,
60010 {"MLD MAC Address Present",
60011 "wlan.eht.multi_link.control.probe.mld_mac_addr_present",
60012 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60013
60014 {&hf_ieee80211_eht_multi_link_control_probe_reserved,
60015 {"Reserved", "wlan.eht.multi_link.control.probe.reserved",
60016 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60017
60018 {&hf_ieee80211_eht_multi_link_control_tdls_reserved,
60019 {"Reserved", "wlan.eht.multi_link.control.tdls.reserved",
60020 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60021
60022 {&hf_ieee80211_eht_multi_link_control_prio_access_reserved,
60023 {"Reserved", "wlan.eht.multi_link.control.prio_access.reserved",
60024 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60025
60026 {&hf_ieee80211_eht_multi_link_control_reconfig_mld_mac,
60027 {"MLD MAC Address Present",
60028 "wlan.eht.multi_link.control.reconfig.mld_mac_addr_present",
60029 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60030
60031 {&hf_ieee80211_eht_multi_link_control_reconfig_eml_capa,
60032 {"EML Capabilities Present",
60033 "wlan.eht.multi_link.control.reconfig.eml_capabilities_present",
60034 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60035
60036 {&hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper,
60037 {"MLD Capabilities And Operations Present",
60038 "wlan.eht.multi_link.control.reconfig.mld_capabilities_present",
60039 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60040
60041 {&hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper,
60042 {"Extended MLD Capabilities And Operations Present",
60043 "wlan.eht.multi_link.control.reconfig.ext_mld_capa_oper_present",
60044 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60045
60046 {&hf_ieee80211_eht_multi_link_control_reconfig_reserved,
60047 {"Reserved",
60048 "wlan.eht.multi_link.control.reconfig.reserved",
60049 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60050
60051 {&hf_ieee80211_eht_common_field_length,
60052 {"Common Info Length", "wlan.eht.multi_link.common_info.length",
60053 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60054
60055 {&hf_ieee80211_eht_common_field_mld_mac,
60056 {"MLD MAC Address", "wlan.eht.multi_link.common_info.mld_mac_address",
60057 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60058
60059 {&hf_ieee80211_eht_common_field_link_id_field,
60060 {"Link ID subfield", "wlan.eht.multi_link.common_info.link_id_subfield",
60061 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60062
60063 {&hf_ieee80211_eht_common_info_link_id,
60064 {"Link ID", "wlan.eht.multi_link.common_info.link_id_subfield.link_id",
60065 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60066
60067 {&hf_ieee80211_eht_common_info_link_id_reserved,
60068 {"Reserved", "wlan.eht.multi_link.common_info.link_id_subfield.reserved",
60069 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60070
60071 {&hf_ieee80211_eht_common_field_bss_param_change_count,
60072 {"BSS Parameters Change Count",
60073 "wlan.eht.multi_link.common_info.bss_parameters_change_count",
60074 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60075
60076 {&hf_ieee80211_eht_common_field_medium_sync_field,
60077 {"Medium Sync Field", "wlan.eht.multi_link.common_info.medium_sync_field",
60078 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60079
60080 {&hf_ieee80211_eht_common_info_medium_sync_duration,
60081 {"Medium Synchronization Duration",
60082 "wlan.eht.multi_link.common_info.medium_sync.sync_duration",
60083 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60084
60085 {&hf_ieee80211_eht_common_info_medium_sync_threshold,
60086 {"Medium Synchronization OFDM ED Threshold",
60087 "wlan.eht.multi_link.common_info.medium_sync.ofdm_ed_threshold",
60088 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60089
60090 {&hf_ieee80211_eht_common_info_medium_sync_max_txops,
60091 {"Medium Synchronization Maximum Number of TXOPs",
60092 "wlan.eht.multi_link.common_info.medium_sync.max_number_of_txops",
60093 FT_UINT16, BASE_DEC, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60094
60095 {&hf_ieee80211_eht_common_field_eml_capabilities,
60096 {"EML Capabilities", "wlan.eht.multi_link.common_info.eml_capabilities",
60097 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60098
60099 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_support,
60100 {"EMLSR Support",
60101 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_support",
60102 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60103
60104 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_padding_delay,
60105 {"EMLSR Padding Delay",
60106 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_padding_delay",
60107 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60108
60109 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_transition_delay,
60110 {"EMLSR Transition Delay",
60111 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_transition_delay",
60112 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0070, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60113
60114 {&hf_ieee80211_eht_common_info_eml_capa_emlmr_support,
60115 {"EMLMR Support",
60116 "wlan.eht.multi_link.common_info.eml_capabilities.emlmr_support",
60117 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60118
60119 {&hf_ieee80211_eht_common_info_eml_capa_emlmr_delay,
60120 {"EMLMR Delay",
60121 "wlan.eht.multi_link.common_info.eml_capabilities.emlmr_delay",
60122 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60123
60124 {&hf_ieee80211_eht_common_info_eml_capa_transition_timeout,
60125 {"Transition Timeout",
60126 "wlan.eht.multi_link.common_info.eml_capabilities.transition_timeout",
60127 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60128
60129 {&hf_ieee80211_eht_common_info_eml_capa_reserved,
60130 {"Reserved",
60131 "wlan.eht.multi_link.common_info.eml_capabilities.capa_reserved",
60132 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60133
60134 {&hf_ieee80211_eht_common_field_mld_capabilities,
60135 {"MLD Capabilities", "wlan.eht.multi_link.common_info.mld_capabilities",
60136 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60137
60138 {&hf_ieee80211_eht_common_info_mld_max_simul_links,
60139 {"Maximum Number of Simultaneous Links",
60140 "wlan.eht.multi_link.common_info.mld_capabilities.max_simultaneous_links",
60141 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60142
60143 {&hf_ieee80211_eht_common_info_mld_srs_support,
60144 {"SRS Support",
60145 "wlan.eht.multi_link.common_info.mld_capabilities.srs_support",
60146 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60147
60148 {&hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg,
60149 {"TID-To-Link Mapping Negotiation Support",
60150 "wlan.eht.multi_link.common_info.mld_capabilities.tid_to_link_neg_sup",
60151 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0060, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60152
60153 {&hf_ieee80211_eht_common_info_mld_freq_sep_for_str,
60154 {"Frequency Separation For STR/AP MLD Type Indication",
60155 "wlan.eht.multi_link.common_info.mld_capabilities.freq_sep_for_str",
60156 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0F80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60157
60158 {&hf_ieee80211_eht_common_info_mld_aar_support,
60159 {"AAR Support",
60160 "wlan.eht.multi_link.common_info.mld_capabilities.aar_support",
60161 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60162
60163 {&hf_ieee80211_eht_common_info_mld_link_reconf_op_support,
60164 {"Link Reconfiguration Operation Support",
60165 "wlan.eht.multi_link.common_info.mld_capabilities.link_reconfig_op_support",
60166 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60167
60168 {&hf_ieee80211_eht_common_info_mld_aligned_twt_support,
60169 {"Aligned TWT Support",
60170 "wlan.eht.multi_link.common_info.mld_capabilities.aligned_twt_support",
60171 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60172
60173 {&hf_ieee80211_eht_common_info_mld_reserved,
60174 {"Reserved", "wlan.eht.multi_link.common_info.mld_capabilities.reserved",
60175 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60176
60177 {&hf_ieee80211_eht_common_field_ap_mld_mac,
60178 {"AP MLD MAC Address",
60179 "wlan.eht.multi_link.common_info.ap_mld_mac_address",
60180 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60181
60182 {&hf_ieee80211_eht_common_field_mld_id,
60183 {"AP MLD ID", "wlan.eht.multi_link.common_info.mld_id",
60184 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60185
60186 {&hf_ieee80211_eht_common_field_ext_mld_capabilities,
60187 {"Extended MLD Capabilities and Operations",
60188 "wlan.eht.multi_link.common_info.ext_mld_capabilities",
60189 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60190
60191 {&hf_ieee80211_eht_common_info_ext_mld_op_update_support,
60192 {"Operation Parameter Update Support",
60193 "wlan.eht.multi_link.common_info.ext_mld_capabilities.op_param_update_support",
60194 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60195
60196 {&hf_ieee80211_eht_common_info_ext_mld_max_simul_links,
60197 {"Recommended Max Simultaneous Links",
60198 "wlan.eht.multi_link.common_info.ext_mld_capabilities.max_simultaneous_links",
60199 FT_UINT16, BASE_DEC, NULL((void*)0), 0x001E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60200
60201 {&hf_ieee80211_eht_common_info_ext_mld_nstr_status_support,
60202 {"NSTR Status Update Support",
60203 "wlan.eht.multi_link.common_info.ext_mld_capabilities.nstr_status_update_support",
60204 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60205
60206 {&hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support,
60207 {"EMLSR Enablement On One Link Support",
60208 "wlan.eht.multi_link.common_info.ext_mld_capabilities.emlsr_enable_one_link_support",
60209 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60210
60211 {&hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support,
60212 {"BTM MLD Recommendation For Multiple APs Support",
60213 "wlan.eht.multi_link.common_info.ext_mld_capabilities.btm_mld_recom_multiple_aps_support",
60214 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60215
60216 {&hf_ieee80211_eht_common_info_ext_mld_reserved,
60217 {"Reserved", "wlan.eht.multi_link.common_info.ext_mld_capabilities.reserved",
60218 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60219
60220 {&hf_ieee80211_eht_profile_sta_control,
60221 {"STA Control", "wlan.eht.multi_link.sta_profile.sta_control",
60222 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60223
60224 {&hf_ieee80211_eht_multi_link_subelt_tag,
60225 {"Subelement ID", "wlan.eht.multi_link.sta_profile.subelt_id",
60226 FT_UINT8, BASE_HEX | BASE_RANGE_STRING0x00000100, RVALS(multi_link_sub_elt_string)((0 ? (const struct _range_string*)0 : ((multi_link_sub_elt_string
))))
,
60227 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60228
60229 {&hf_ieee80211_eht_multi_link_subelt_len,
60230 {"Subelement Length", "wlan.eht.multi_link.sta_profile.subelt_len",
60231 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60232
60233 {&hf_ieee80211_eht_multi_link_type_0_link_count,
60234 {"Basic STA Profile Count", "wlan.eht.multi_link.type_0.sta_profile_count",
60235 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60236
60237 {&hf_ieee80211_eht_multi_link_type_1_link_count,
60238 {"Probe Request STA Profile Count", "wlan.eht.multi_link.type_1.sta_profile_count",
60239 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60240
60241 {&hf_ieee80211_eht_multi_link_type_2_link_count,
60242 {"Reconfiguration STA Profile Count", "wlan.eht.multi_link.type_2.sta_profile_count",
60243 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60244
60245 {&hf_ieee80211_eht_multi_link_type_3_link_count,
60246 {"TDLS STA Profile Count", "wlan.eht.multi_link.type_3.sta_profile_count",
60247 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60248
60249 {&hf_ieee80211_eht_multi_link_type_4_link_count,
60250 {"Priority Access STA Profile Count", "wlan.eht.multi_link.type_4.sta_profile_count",
60251 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60252
60253 {&hf_ieee80211_eht_multi_link_link_id_list,
60254 {"STA Profiles LinkIds", "wlan.eht.multi_link.sta_profile_id_list",
60255 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60256
60257 {&hf_ieee80211_eht_profile_link_id,
60258 {"Link ID", "wlan.eht.multi_link.sta_profile.sta_control.link_id",
60259 FT_UINT16, BASE_HEX, NULL((void*)0), STA_CTRL_LINK_ID0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60260
60261 {&hf_ieee80211_eht_profile_complete_profile,
60262 {"Complete Profile",
60263 "wlan.eht.multi_link.sta_profile.sta_control.complete_profile",
60264 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_COMPLETE_PROFILE0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60265
60266 {&hf_ieee80211_eht_profile_mac_address_present,
60267 {"MAC Address Present",
60268 "wlan.eht.multi_link.sta_profile.sta_control.mac_address_present",
60269 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_MAC_ADDR_PRESENT0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60270
60271 {&hf_ieee80211_eht_profile_beacon_interval_present,
60272 {"Beacon Interval Present",
60273 "wlan.eht.multi_link.sta_profile.sta_control.beacon_interval_present",
60274 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_BEACON_INT_PRESENT0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60275
60276 {&hf_ieee80211_eht_profile_tsf_offset_present,
60277 {"TSF Offset Present",
60278 "wlan.eht.multi_link.sta_profile.sta_control.tsf_offset_present",
60279 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_TSF_OFFSET_PRESENT0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60280
60281 {&hf_ieee80211_eht_profile_dtim_info_present,
60282 {"DTIM Info Present",
60283 "wlan.eht.multi_link.sta_profile.sta_control.dtim_info_present",
60284 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_DTIM_INFO_PRESENT0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60285
60286 {&hf_ieee80211_eht_profile_nstr_link_pair_present,
60287 {"NSTR Link Pair Present",
60288 "wlan.eht.multi_link.sta_profile.sta_control.nstr_link_pair_present",
60289 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_NSTR_LINK_PAIR_PRESENT0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60290
60291 {&hf_ieee80211_eht_profile_nstr_bitmap_size,
60292 {"NSTR Bitmap Size",
60293 "wlan.eht.multi_link.sta_profile.sta_control.nstr_bitmap_size",
60294 FT_UINT16, BASE_DEC, NULL((void*)0), STA_CTRL_NSTR_BITMAP_SIZE0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60295
60296 {&hf_ieee80211_eht_profile_bss_params_change_count_present,
60297 {"BSS Parameters Change Count Present",
60298 "wlan.eht.multi_link.sta_profile.sta_control.bss_params_change_count_present",
60299 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_BSS_PARAMS_CHANGE_CNT_PRESENT0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60300
60301 {&hf_ieee80211_eht_profile_reserved,
60302 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.reserved",
60303 FT_UINT16, BASE_HEX, NULL((void*)0), STA_CTRL_RESERVED0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60304
60305 {&hf_ieee80211_eht_profile_probe_reserved,
60306 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.probe_reserved",
60307 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60308
60309 {&hf_ieee80211_eht_profile_removal_timer_present,
60310 {"AP Removal Timer Present",
60311 "wlan.eht.multi_link.sta_profile.sta_control.ap_removal_timer_present",
60312 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60313
60314 {&hf_ieee80211_eht_profile_reconfig_operation_type,
60315 {"Reconfiguration Operation Type",
60316 "wlan.eht.multi_link.sta_profile.sta_control.reconfig_operation_type",
60317 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(eht_reconfig_op_type_rvals)((0 ? (const struct _range_string*)0 : ((eht_reconfig_op_type_rvals
))))
,
60318 0x0780, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60319
60320 {&hf_ieee80211_eht_profile_operation_para_present,
60321 {"Operation Parameters Present",
60322 "wlan.eht.multi_link.sta_profile.sta_control.operation_parameters_present",
60323 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60324
60325 {&hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size,
60326 {"NSTR Bitmap Size",
60327 "wlan.eht.multi_link.sta_profile.sta_control.reconfig_nstr_bitmap_size",
60328 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60329
60330 {&hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present,
60331 {"NSTR Indication Bitmap Present",
60332 "wlan.eht.multi_link.sta_control.reconfig_nstr_bitmap_present",
60333 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60334
60335 {&hf_ieee80211_eht_profile_reconfig_reserved,
60336 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.reconfig_reserved",
60337 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60338
60339 {&hf_ieee80211_eht_profile_prio_acc_reserved,
60340 {"Reserved",
60341 "wlan.eht.multi_link.sta_profile.sta_control.priority_access_reserved",
60342 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60343
60344 {&hf_ieee80211_eht_sta_profile_info_len,
60345 {"STA Info Length",
60346 "wlan.eht.multi_link.sta_profile.sta_info.len",
60347 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60348
60349 {&hf_ieee80211_eht_sta_profile_info_mac,
60350 {"STA MAC Address",
60351 "wlan.eht.multi_link.sta_profile.sta_info.sta_mac_addr",
60352 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60353
60354 {&hf_ieee80211_eht_sta_profile_info_beacon,
60355 {"Beacon Interval",
60356 "wlan.eht.multi_link.sta_profile.sta_info.beacon_interval",
60357 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60358
60359 {&hf_ieee80211_eht_sta_profile_info_tsf_offset,
60360 {"TSF Offset",
60361 "wlan.eht.multi_link.sta_profile.sta_info.tsf_offset",
60362 FT_INT64, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60363
60364 {&hf_ieee80211_eht_sta_profile_info_dtim_count,
60365 {"DTIM Count",
60366 "wlan.eht.multi_link.sta_profile.sta_info.dtim_count",
60367 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60368
60369 {&hf_ieee80211_eht_sta_profile_info_dtim_period,
60370 {"DTIM Period",
60371 "wlan.eht.multi_link.sta_profile.sta_info.dtim_period",
60372 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60373
60374 {&hf_ieee80211_eht_sta_profile_info_bitmap,
60375 {"NSTR Indication Bitmap",
60376 "wlan.eht.multi_link.sta_profile.sta_info.nstr_bitmap",
60377 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60378
60379 {&hf_ieee80211_eht_sta_profile_bss_params_change_count,
60380 {"BSS Parameters Change Count",
60381 "wlan.eht.multi_link.sta_profile.sta_info.bss_params_change_count",
60382 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60383
60384 {&hf_ieee80211_eht_sta_profile_removal_timer,
60385 {"AP Removal Timer",
60386 "wlan.eht.multi_link.sta_profile.sta_info.ap_removal_timer",
60387 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60388
60389 {&hf_ieee80211_eht_sta_profile_presence_indi,
60390 {"Presence Indication",
60391 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication",
60392 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60393
60394 {&hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present,
60395 {"Maximum MPDU Length Present",
60396 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.max_mpdu_length_present",
60397 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60398
60399 {&hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present,
60400 {"Maximum A-MSDU Length Present",
60401 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.max_amsdu_length_present",
60402 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60403
60404 {&hf_ieee80211_eht_sta_profile_presence_indi_reserved,
60405 {"Reserved",
60406 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.reserved",
60407 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60408
60409 {&hf_ieee80211_eht_sta_profile_operation_para_info,
60410 {"Operation Parameter Info",
60411 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info",
60412 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60413
60414 {&hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length,
60415 {"Maximum MPDU Length",
60416 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.max_mpdu_length",
60417 FT_UINT16, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x0003,
60418 "In Octets unit", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60419
60420 {&hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length,
60421 {"A-MSDU length",
60422 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.amsdu_length",
60423 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag)((0 ? (const struct true_false_string*)0 : ((&ht_max_amsdu_flag
))))
, 0x0004,
60424 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60425
60426 {&hf_ieee80211_eht_sta_profile_operation_para_info_pad,
60427 {"Pad", "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.pad",
60428 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF8,
60429 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60430
60431 {&hf_ieee80211_eht_operation_parameters,
60432 {"EHT Operation Parameters",
60433 "wlan.eht.eht_operation_parameters",
60434 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60435
60436 {&hf_ieee80211_eht_basic_eht_mcs_nss_set,
60437 {"Basic EHT-MCS And Nss Set",
60438 "wlan.eht.basic_eht_mcs_and_nss_set",
60439 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60440
60441 {&hf_ieee80211_eht_operation_control_chan_width,
60442 {"Channel Width",
60443 "wlan.eht.eht_operation_information.control.channel_width",
60444 FT_UINT8, BASE_DEC, VALS(eht_operation_control_chan_wid_vals)((0 ? (const struct _value_string*)0 : ((eht_operation_control_chan_wid_vals
))))
,
60445 0x7, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60446
60447 {&hf_ieee80211_eht_operation_control_reserved,
60448 {"Reserved", "wlan.eht.eht_operation_information.control.reserved",
60449 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60450
60451 {&hf_ieee80211_eht_operation_info_present,
60452 {"EHT Operation Information Present",
60453 "wlan.eht.eht_operation_parameters.eht_operation_information_present",
60454 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60455
60456 {&hf_ieee80211_eht_operation_subchannel_bitmap_present,
60457 {"Disabled Subchannel Bitmap Present",
60458 "wlan.eht.eht_operation_parameters.disabled_subchannel_bitmap_present",
60459 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60460
60461 {&hf_ieee80211_eht_operation_default_pe_duration,
60462 {"EHT Default PE Duration",
60463 "wlan.eht.eht_operation_parameters.eht_default_pe_duration",
60464 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60465
60466 {&hf_ieee80211_eht_operation_group_addressed_bu_indication_limit,
60467 {"Group Addressed BU Indication Limit",
60468 "wlan.eht.eht_operation_parameters.group_addressed_bu_indication_limit",
60469 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60470
60471 {&hf_ieee80211_eht_operation_group_addressed_bu_indication_exp,
60472 {"Group Addressed BU Indication Exponent",
60473 "wlan.eht.eht_operation_parameters.group_addressed_bu_indication_exponent",
60474 FT_UINT8, BASE_DEC, NULL((void*)0), 0x30, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60475
60476 {&hf_ieee80211_eht_operation_mcs15_disable,
60477 {"MCS15 Disable",
60478 "wlan.eht.eht_operation_parameters.mcs_15_disable",
60479 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60480
60481 {&hf_ieee80211_eht_operation_reserved,
60482 {"Reserved", "wlan.eht.eht_operation_parameters.reserved",
60483 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60484
60485 {&hf_ieee80211_eht_operation_control,
60486 {"Control", "wlan.eht.eht_operation_information.control",
60487 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60488
60489 {&hf_ieee80211_eht_operation_ccfs0,
60490 {"CCFS0", "wlan.eht.eht_operation_information.ccfs0",
60491 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60492
60493 {&hf_ieee80211_eht_operation_ccfs1,
60494 {"CCFS1", "wlan.eht.eht_operation_information.ccfs1",
60495 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60496
60497 {&hf_ieee80211_eht_operation_disabled_bitmap,
60498 {"Disabled Subchannel Bitmap",
60499 "wlan.eht.eht_operation_information.disabled_subchannel_bitmap",
60500 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60501
60502 {&hf_ieee80211_eht_mac_capabilities,
60503 {"EHT MAC Capabilities Information", "wlan.eht.mac_capabilities_info",
60504 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60505
60506 {&hf_ieee80211_eht_mac_capa_epcs_prio_access_support,
60507 {"EPCS Priority Access Support",
60508 "wlan.eht.mac_capabilities.epcs_priority_access_support",
60509 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60510
60511 {&hf_ieee80211_eht_mac_capa_eht_om_control_support,
60512 {"EHT OM Control Support",
60513 "wlan.eht.mac_capabilities.eht_om_control_support",
60514 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60515
60516 {&hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support,
60517 {"Triggered TXOP Sharing Mode 1 Support",
60518 "wlan.eht.mac_capabilities.triggered_txop_sharing_mode_1_support",
60519 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60520
60521 {&hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support,
60522 {"Triggered TXOP Sharing Mode 2 Support",
60523 "wlan.eht.mac_capabilities.triggered_txop_sharing_mode_2_support",
60524 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60525
60526 {&hf_ieee80211_eht_mac_capa_restricted_twt_support,
60527 {"Restricted TWT Support",
60528 "wlan.eht.mac_capabilities.restricted_twt_support",
60529 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60530
60531 {&hf_ieee80211_eht_mac_capa_scs_traffic_description_support,
60532 {"SCS Traffic Description Support",
60533 "wlan.eht.mac_capabilities.scs_traffic_description_support",
60534 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60535
60536 {&hf_ieee80211_eht_mac_capa_maximum_mpdu_length,
60537 {"Maximum MPDU Length",
60538 "wlan.eht.mac_capabilities.maximum_mpdu_length",
60539 FT_UINT16, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x00c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60540
60541 {&hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext,
60542 {"Maximum A-MPDU Length Exponent Extension",
60543 "wlan.eht.mac_capabilities.maximum_a_mpdu_length_exponent_extension",
60544 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60545
60546 {&hf_ieee80211_eht_mac_capa_eht_trs_support,
60547 {"EHT TRS Support",
60548 "wlan.eht.mac_capabilities.eht_trs_support",
60549 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60550
60551 {&hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode,
60552 {"TXOP Return Support In TXOP Sharing Mode 2",
60553 "wlan.eht.mac_capabilities.txop_return_support_in_txop_sharing_mode_2",
60554 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60555
60556 {&hf_ieee80211_eht_mac_capa_two_bqrs_support,
60557 {"Two BQRs Support",
60558 "wlan.eht.mac_capabilities.two_bqrs_support",
60559 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60560
60561 {&hf_ieee80211_eht_mac_capa_eht_link_adaptation_support,
60562 {"EHT Link Adaptation Support",
60563 "wlan.eht.mac_capabilities.eht_link_adaptation_support",
60564 FT_UINT16, BASE_DEC, VALS(eht_link_adaptation_vals)((0 ? (const struct _value_string*)0 : ((eht_link_adaptation_vals
))))
, 0x3000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60565
60566 {&hf_ieee80211_eht_mac_capa_unsolicited_epcs_update,
60567 {"Unsolicited EPCS Priority Access Parameter Update",
60568 "wlan.eht.mac_capabilities.unsolicited_epcs_prio_access_para_update",
60569 FT_UINT16, BASE_DEC, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60570
60571 {&hf_ieee80211_eht_mac_capa_reserved,
60572 {"Reserved",
60573 "wlan.eht.mac_capabilities.reserved",
60574 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60575
60576 {&hf_ieee80211_eht_phy_bits_0_15,
60577 {"EHT PHY Bits 0-15", "wlan.eht.phy_capabilities.bits_0_15",
60578 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60579
60580 {&hf_ieee80211_eht_phy_bits_0_15_reserved,
60581 {"Reserved", "wlan.eht.phy_capabilities.bits_0_15.reserved",
60582 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60583
60584 {&hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz,
60585 {"Support For 320 MHz in 6 GHz",
60586 "wlan.eht.phy_capabilities.bits_0_15.support_for_320mhz_in_6ghz",
60587 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60588
60589 {&hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz,
60590 {"Support for 242-tone RU in BW Wider than 20 MHz",
60591 "wlan.eht.phy_capabilities.bits_0_15.support_for_242_tone_ru_in_bw_wider_20mhz",
60592 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60593
60594 {&hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi,
60595 {"NDP With 4x EHT-LTF And 3.2 us GI",
60596 "wlan.eht.phy_capabilities.bits_0_15.ndp_with_4x_eht_ltf_and_3_2_us_gi",
60597 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60598
60599 {&hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo,
60600 {"Partial Bandwidth UL MU-MIMO",
60601 "wlan.eht.phy_capabilities.bits_0_15.partial_bandwidth_ul_mu_mimo",
60602 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60603
60604 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformer,
60605 {"SU Beamformer", "wlan.eht.phy_capabilities.bits_0_15.su_beamformer",
60606 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60607
60608 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee,
60609 {"SU Beamformee", "wlan.eht.phy_capabilities.bits_0_15.su_beamformee",
60610 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60611
60612 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz,
60613 {"Beamformee SS (<= 80 MHz)",
60614 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_le_80mhz",
60615 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60616
60617 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz,
60618 {"Beamformee SS (= 160 MHz)",
60619 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_eq_160mhz",
60620 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1c00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60621
60622 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz,
60623 {"Beamformee SS (= 320 MHz)",
60624 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_eq_320_mhz",
60625 FT_UINT16, BASE_HEX, NULL((void*)0), 0xe000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60626
60627 {&hf_ieee80211_eht_phy_bits_16_31,
60628 {"EHT PHY Bits 16-31", "wlan.eht.phy_capabilities.bits_16_31",
60629 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60630
60631 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz,
60632 {"Number Of Sounding Dimensions (<= 80 MHz)",
60633 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_le_80_mhz",
60634 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60635
60636 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz,
60637 {"Number Of Sounding Dimensions (= 160 MHz)",
60638 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_eq_160_mhz",
60639 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60640
60641 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz,
60642 {"Number Of Sounding Dimensions (= 320 MHz)",
60643 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_eq_320_mhz",
60644 FT_UINT16, BASE_HEX, NULL((void*)0), 0x01c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60645
60646 {&hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback,
60647 {"Ng = 16 SU Feedback",
60648 "wlan.eht.phy_capabilities.bits_16_31.ng_eq_16_su_fbck",
60649 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60650
60651 {&hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback,
60652 {"Ng = 16 MU Feedback",
60653 "wlan.eht.phy_capabilities.bits_16_31.ng_eq_16_mu_fbck",
60654 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60655
60656 {&hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck,
60657 {"Codebook Size = (4,2) SU Feedback",
60658 "wlan.eht.phy_capabilities.bits_16_31.codebook_size_eq_4_2_su_fbck",
60659 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60660
60661 {&hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck,
60662 {"Codebook Size = (7,5) MU Feedback",
60663 "wlan.eht.phy_capabilities.bits_16_31.codebook_size_eq_7_5_mu_fbck",
60664 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60665
60666 {&hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck,
60667 {"Triggered SU Beamforming Feedback",
60668 "wlan.eht.phy_capabilities.bits_16_31.triggered_su_beamforming_fbck",
60669 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60670
60671 {&hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck,
60672 {"Triggered MU Beamforming Partial BW Feedback",
60673 "wlan.eht.phy_capabilities.bits_16_31.triggered_mu_beamforming_partial_fbck",
60674 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60675
60676 {&hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback,
60677 {"Triggered CQI Feedback",
60678 "wlan.eht.phy_capabilities.bits_16_31.triggered_cqi_fbck",
60679 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60680
60681 {&hf_ieee80211_eht_phy_bits_32_39,
60682 {"EHT PHY Bits 32-39", "wlan.eht.phy_capabilities.bits_32_39",
60683 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60684
60685 {&hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo,
60686 {"Partial Bandwidth DL MU-MIMO",
60687 "wlan.eht.phy_capabilities.bits_32_39.partial_bw_dl_mu_mimo",
60688 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60689
60690 {&hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support,
60691 {"EHT PSR-Based SR support",
60692 "wlan.eht.phy_capabilities.bits_32_39.eht_psr_based_sr_support",
60693 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60694
60695 {&hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support,
60696 {"Power Boost Factor Support",
60697 "wlan.eht.phy_capabilities.bits_32_39.power_boost_factor_support",
60698 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60699
60700 {&hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi,
60701 {"EHT MU PPDU With 4x EHT-LTF and 0.8 us GI",
60702 "wlan.eht.phy_capabilities.bits_32_39.eht_mu_ppdu_w_4x_eht_ltf_08_us_gi",
60703 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60704
60705 {&hf_ieee80211_eht_phy_bits_32_39_max_nc,
60706 {"Max Nc", "wlan.eht.phy_capabilities.bits_32_39.max_nc",
60707 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60708
60709 {&hf_ieee80211_eht_phy_bits_40_63,
60710 {"EHT PHY Bits 40-63", "wlan.eht.phy_capabilities.bits_40_63",
60711 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60712
60713 {&hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck,
60714 {"Non-Triggered CQI Feedback",
60715 "wlan.eht.phy_capabilities.bits_40_63.non_triggered_cqi_fbck",
60716 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60717 0x000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60718
60719 {&hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support,
60720 {"Tx 1024-QAM & 4096-QAM < 242-tone RU Support",
60721 "wlan.eht.phy_capabilities.bits_40_63.tx_1024_4096_qam_lt_242_ru_support",
60722 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60723 0x000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60724
60725 {&hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support,
60726 {"Rx 1024-QAM & 4096-QAM < 242-tone-RU Support",
60727 "wlan.eht.phy_capabilities.bits_40_63.rx_1024_4096_qam_lt_242_ru_support",
60728 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60729 0x000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60730
60731 {&hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present,
60732 {"PPE Thresholds Present",
60733 "wlan.eht.phy_capabilities.bits_40_63.ppe_thresholds_present",
60734 FT_BOOLEAN, 24, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
,
60735 0x000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60736
60737 {&hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding,
60738 {"Common Nominal Packet Padding",
60739 "wlan.eht.phy_capabilities.bits_40_63.common_nominal_packet_padding",
60740 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60741
60742 {&hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs,
60743 {"Maximum Number Of Supported EHT-LTFs",
60744 "wlan.eht.phy_capabilities.bits_40_63.max_num_supported_eht_ltfs",
60745 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0007c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60746
60747 {&hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15,
60748 {"Support Of MCS 15",
60749 "wlan.eht.phy_capabilities.bits_40_63.support_of_mcs_15",
60750 FT_UINT24, BASE_DEC, NULL((void*)0), 0x007800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60751
60752 {&hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz,
60753 {"Support Of EHT DUP (MCS 14) in 6 GHz",
60754 "wlan.eht.phy_capabilities.bits_40_63.support_eht_dup_6_ghz",
60755 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60756 0x008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60757 {&hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw,
60758 {"Support For 20 MHz Operating STA Receiving NDP With Wider BW",
60759 "wlan.eht.phy_capabilities.bits_40_63.support_20_mhz_sta_recv_ndp_wider_bw",
60760 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60761 0x010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60762
60763 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz,
60764 {"Non-OFDMA UL MU-MIMO (BW <= 80 MHz)",
60765 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_lt_80_mhz",
60766 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60767 0x020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60768
60769 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz,
60770 {"Non-OFDMA UL MU-MIMO (BW = 160 MHz)",
60771 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_eq_160_mhz",
60772 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60773 0x040000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60774
60775 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz,
60776 {"Non-OFDMA UL MU-MIMO (BW = 320 MHz)",
60777 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_eq_320_mhz",
60778 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60779 0x080000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60780
60781 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz,
60782 {"MU Beamformer (BW <= 80 MHz)",
60783 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_le_80_mhz",
60784 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60785 0x100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60786
60787 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz,
60788 {"MU Beamformer (BW = 160 MHz)",
60789 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_eq_160_mhz",
60790 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60791 0x200000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60792
60793 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz,
60794 {"MU Beamformer (BW = 320 MHz)",
60795 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_eq_320_mhz",
60796 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60797 0x400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60798
60799 {&hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit,
60800 {"TB Sounding Feedback Rate Limit",
60801 "wlan.eht.phy_capabilities.bits_40_63.tb_sounding_fbck_rate_limit",
60802 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60803 0x800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60804
60805 {&hf_ieee80211_eht_phy_bits_64_71,
60806 {"EHT PHY Bits 64-71", "wlan.eht.phy_capabilities.bits_64_71",
60807 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60808
60809 {&hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup,
60810 {"Rx 1024-QAM In Wider Bandwidth DL OFDMA Support",
60811 "wlan.eht.phy_capabilities.bits_64_71.rx_1024_qam_in_wider_bw_dl_ofdma",
60812 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60813 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60814
60815 {&hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup,
60816 {"Rx 4096-QAM In Wider Bandwidth DL OFDMA SUpport",
60817 "wlan.eht.phy_capabilities.bits_64_71.rx_4096_qam_in_wider_bw_dl_ofdma",
60818 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60819 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60820
60821 {&hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support,
60822 {"20 MHz-Only Limited Capabilities Support",
60823 "wlan.eht.phy_capabilities.bits_64_71.20m_only_limited_capabilities",
60824 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60825 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60826
60827 {&hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo,
60828 {"20 MHz-Only Triggered MU Beamforming Full BW Feedback And DL MU-MIMO",
60829 "wlan.eht.phy_capabilities.bits_64_71.20m_only_trig_mu_beamforming_dl_mu_mimo",
60830 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60831 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60832
60833 {&hf_ieee80211_eht_phy_bits_64_71_20m_mru_support,
60834 {"20 MHz-Only MRU Support",
60835 "wlan.eht.phy_capabilities.bits_64_71.20m_only_mru_support",
60836 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
60837 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60838
60839 {&hf_ieee80211_eht_phy_bits_64_71_reserved,
60840 {"Reserved", "wlan.eht.phy_capabilities.bits_64_71.reserved",
60841 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60842
60843 {&hf_ieee80211_eht_mcs_and_nss_non_ap,
60844 {"EHT-MCS Map (20 MHz-Only Non-AP STA)",
60845 "wlan.eht.supported_eht_mcs_bss_set.20_mhz_only_non_sta",
60846 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60847
60848 {&hf_ieee80211_eht_rx_max_nss_20mhz_0_7,
60849 {"RX Max NSS That Supports EHt-MCS 0-7",
60850 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_0_7",
60851 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60852
60853 {&hf_ieee80211_eht_tx_max_nss_20mhz_0_7,
60854 {"TX Max NSS That Supports EHt-MCS 0-7",
60855 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_0_7",
60856 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60857
60858 {&hf_ieee80211_eht_rx_max_nss_20mhz_8_9,
60859 {"RX Max NSS That Supports EHt-MCS 8-9",
60860 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_8_9",
60861 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60862
60863 {&hf_ieee80211_eht_tx_max_nss_20mhz_8_9,
60864 {"TX Max NSS That Supports EHt-MCS 8-9",
60865 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_8_9",
60866 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60867
60868 {&hf_ieee80211_eht_rx_max_nss_20mhz_10_11,
60869 {"RX Max NSS That Supports EHt-MCS 10-11",
60870 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_10_11",
60871 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60872
60873 {&hf_ieee80211_eht_tx_max_nss_20mhz_10_11,
60874 {"TX Max NSS That Supports EHt-MCS 10-11",
60875 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_10_11",
60876 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00F00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60877
60878 {&hf_ieee80211_eht_rx_max_nss_20mhz_12_13,
60879 {"RX Max NSS That Supports EHt-MCS 12-13",
60880 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_12_13",
60881 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0F000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60882
60883 {&hf_ieee80211_eht_tx_max_nss_20mhz_12_13,
60884 {"TX Max NSS That Supports EHt-MCS 12-13",
60885 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_12_13",
60886 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60887
60888 {&hf_ieee80211_eht_mcs_and_nss_le_80mhz,
60889 {"EHT-MCS Map (BW <= 80MHz)",
60890 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_le_80_mhz",
60891 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60892
60893 {&hf_ieee80211_eht_le_80_rx_max_nss_0_9,
60894 {"Rx Max Nss That Supports EHT-MCS 0-9",
60895 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_0_9",
60896 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60897
60898 {&hf_ieee80211_eht_le_80_tx_max_nss_0_9,
60899 {"Tx Max Nss That Supports EHT-MCS 0-9",
60900 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_0_9",
60901 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60902
60903 {&hf_ieee80211_eht_le_80_rx_max_nss_10_11,
60904 {"Rx Max Nss That Supports EHT-MCS 10-11",
60905 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_10_11",
60906 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60907
60908 {&hf_ieee80211_eht_le_80_tx_max_nss_10_11,
60909 {"Tx Max Nss That Supports EHT-MCS 10-11",
60910 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_10_11",
60911 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60912
60913 {&hf_ieee80211_eht_le_80_rx_max_nss_12_13,
60914 {"Rx Max Nss That Supports EHT-MCS 12-13",
60915 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_12_13",
60916 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60917
60918 {&hf_ieee80211_eht_le_80_tx_max_nss_12_13,
60919 {"Tx Max Nss That Supports EHT-MCS 12-13",
60920 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_12_13",
60921 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60922
60923 {&hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
60924 {"EHT-MCS Map (BW = 160MHz)",
60925 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_eq_160_mhz",
60926 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60927
60928 {&hf_ieee80211_eht_160_rx_max_nss_0_9,
60929 {"Rx Max Nss That Supports EHT-MCS 0-9",
60930 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_0_9",
60931 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60932
60933 {&hf_ieee80211_eht_160_tx_max_nss_0_9,
60934 {"Tx Max Nss That Supports EHT-MCS 0-9",
60935 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_0_9",
60936 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60937
60938 {&hf_ieee80211_eht_160_rx_max_nss_10_11,
60939 {"Rx Max Nss That Supports EHT-MCS 10-11",
60940 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_10_11",
60941 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60942
60943 {&hf_ieee80211_eht_160_tx_max_nss_10_11,
60944 {"Tx Max Nss That Supports EHT-MCS 10-11",
60945 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_10_11",
60946 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60947
60948 {&hf_ieee80211_eht_160_rx_max_nss_12_13,
60949 {"Rx Max Nss That Supports EHT-MCS 12-13",
60950 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_12_13",
60951 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60952
60953 {&hf_ieee80211_eht_160_tx_max_nss_12_13,
60954 {"Tx Max Nss That Supports EHT-MCS 12-13",
60955 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_12_13",
60956 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60957
60958 {&hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
60959 {"EHT-MCS Map (BW = 320MHz)",
60960 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_eq_320_mhz",
60961 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60962
60963 {&hf_ieee80211_eht_320_rx_max_nss_0_9,
60964 {"Rx Max Nss That Supports EHT-MCS 0-9",
60965 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_0_9",
60966 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60967
60968 {&hf_ieee80211_eht_320_tx_max_nss_0_9,
60969 {"Tx Max Nss That Supports EHT-MCS 0-9",
60970 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_0_9",
60971 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60972
60973 {&hf_ieee80211_eht_320_rx_max_nss_10_11,
60974 {"Rx Max Nss That Supports EHT-MCS 10-11",
60975 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_10_11",
60976 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60977
60978 {&hf_ieee80211_eht_320_tx_max_nss_10_11,
60979 {"Tx Max Nss That Supports EHT-MCS 10-11",
60980 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_10_11",
60981 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60982
60983 {&hf_ieee80211_eht_320_rx_max_nss_12_13,
60984 {"Rx Max Nss That Supports EHT-MCS 12-13",
60985 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_12_13",
60986 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60987
60988 {&hf_ieee80211_eht_320_tx_max_nss_12_13,
60989 {"Tx Max Nss That Supports EHT-MCS 12-13",
60990 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_12_13",
60991 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60992
60993 {&hf_ieee80211_eht_supported_mcs_nss_bytes,
60994 {"Supported EHT-MCS and NSS Set bytes",
60995 "wlan.eht.supported_eht_mcs_nss_set.bytes",
60996 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60997
60998 {&hf_ieee80211_eht_ppe_thresholds,
60999 {"EHT PPE Thresholds", "wlan.eht.ppe_thresholds",
61000 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61001
61002 {&hf_ieee80211_eht_ttl_mapping_control,
61003 {"TID-To-Link Mapping Control",
61004 "wlan.eht.tid_to_link_mapping.control",
61005 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61006
61007 {&hf_ieee80211_eht_ttl_mapping_direction,
61008 {"Direction", "wlan.eht.tid_to_link_mapping.control.direction",
61009 FT_UINT8, BASE_HEX, VALS(tid_to_link_mapping_dirn_vals)((0 ? (const struct _value_string*)0 : ((tid_to_link_mapping_dirn_vals
))))
, 0x03,
61010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61011
61012 {&hf_ieee80211_eht_ttl_default_link_mapping,
61013 {"Default Link Mapping",
61014 "wlan.eht.tid_to_link_mapping.control.default_link_mapping",
61015 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61016
61017 {&hf_ieee80211_eht_ttl_mapping_switch_time_pres,
61018 {"Mapping Switch Time Present",
61019 "wlan.eht.tid_to_link_mapping.control.mapping_switch_time",
61020 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61021
61022 {&hf_ieee80211_eht_ttl_expected_dura_pres,
61023 {"Expected Duration Present",
61024 "wlan.eht.tid_to_link_mapping.control.expected_duration",
61025 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61026
61027 {&hf_ieee80211_eht_ttl_link_mapping_size,
61028 {"Link Mapping Size",
61029 "wlan.eht.tid_to_link_mapping.control.link_mapping_size",
61030 FT_UINT8, BASE_DEC, VALS(ttl_link_mapping_size_vals)((0 ? (const struct _value_string*)0 : ((ttl_link_mapping_size_vals
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61031
61032 {&hf_ieee80211_eht_ttl_mapping_reserved,
61033 {"Reserved", "wlan.eht.tid_to_link_mapping.control.reserved",
61034 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61035
61036 {&hf_ieee80211_eht_ttl_mapping_presence,
61037 {"Link Mapping Presence Indicator",
61038 "wlan.eht.tid_to_link_mapping.control.link_mapping_presence_indicator",
61039 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61040
61041 {&hf_ieee80211_eht_ttl_mapping_switch_time,
61042 {"Mapping Switch Time", "wlan.eht.tid_to_link_mapping.switch_time",
61043 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61044
61045 {&hf_ieee80211_eht_ttl_mapping_expected_duration,
61046 {"Expected Duration", "wlan.eht.tid_to_link_mapping.expected_duration",
61047 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61048
61049 {&hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping,
61050 {"Link Mapping Of TID 0", "wlan.eht.tid_to_link_mapping.tid_0.link_mapping",
61051 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61052
61053 {&hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping,
61054 {"Link Mapping Of TID 1", "wlan.eht.tid_to_link_mapping.tid_1.link_mapping",
61055 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61056
61057 {&hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping,
61058 {"Link Mapping Of TID 2", "wlan.eht.tid_to_link_mapping.tid_2.link_mapping",
61059 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61060
61061 {&hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping,
61062 {"Link Mapping Of TID 3", "wlan.eht.tid_to_link_mapping.tid_3.link_mapping",
61063 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61064
61065 {&hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping,
61066 {"Link Mapping Of TID 4", "wlan.eht.tid_to_link_mapping.tid_4.link_mapping",
61067 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61068
61069 {&hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping,
61070 {"Link Mapping Of TID 5", "wlan.eht.tid_to_link_mapping.tid_5.link_mapping",
61071 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61072
61073 {&hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping,
61074 {"Link Mapping Of TID 6", "wlan.eht.tid_to_link_mapping.tid_6.link_mapping",
61075 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61076
61077 {&hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping,
61078 {"Link Mapping Of TID 7", "wlan.eht.tid_to_link_mapping.tid_7.link_mapping",
61079 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61080
61081 {&hf_ieee80211_eht_multi_link_traffic_control,
61082 {"Multi-Link Traffic Control",
61083 "wlan.eht.multi_link_traffic.traffic_control",
61084 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61085
61086 {&hf_ieee80211_eht_multi_link_tc_bitmap_size,
61087 {"Bitmap Size", "wlan.eht.multi_link_traffic.traffic_control.bitmap_size",
61088 FT_UINT16, BASE_CUSTOM, CF_FUNC(extra_one_base_custom)((const void *) (size_t) (extra_one_base_custom)), 0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61089
61090 {&hf_ieee80211_eht_multi_link_tc_aid_offset,
61091 {"AID Offset", "wlan.eht.multi_link_traffic.traffic_control.aid_offset",
61092 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7FF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61093
61094 {&hf_ieee80211_eht_multi_link_tc_reserved,
61095 {"Reserved", "wlan.eht.multi_link_traffic.traffic_control.reserved",
61096 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61097
61098 {&hf_ieee80211_eht_multi_link_traffic_indication,
61099 {"Traffic Indication List",
61100 "wlan.eht.multi_link_traffic.traffic_indication_list",
61101 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61102
61103 {&hf_ieee80211_eht_qos_chars_dirn,
61104 {"Direction", "wlan.eht.qos_characteristics.control.direction",
61105 FT_UINT32, BASE_HEX, VALS(qos_chars_dirn_vals)((0 ? (const struct _value_string*)0 : ((qos_chars_dirn_vals)
)))
,
61106 0x00000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61107
61108 {&hf_ieee80211_eht_qos_chars_tid,
61109 {"TID", "wlan.eht.qos_characteristics.control.tid",
61110 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000003C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61111
61112 {&hf_ieee80211_eht_qos_chars_user_prio,
61113 {"User Priority", "wlan.eht.qos_characteristics.control.user_priority",
61114 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61115
61116 {&hf_ieee80211_eht_qos_chars_bitmap,
61117 {"Presence Bitmap of Additional Parameters",
61118 "wlan.eht.qos_characteristics.control.presence_bitmap",
61119 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01FFFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61120
61121 {&hf_ieee80211_eht_qos_chars_linkid,
61122 {"LinkID", "wlan.eht.qos_characteristics.control.linkid",
61123 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1E000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61124
61125 {&hf_ieee80211_eht_qos_chars_resrvd,
61126 {"Reserved", "wlan.eht.qos_characteristics.control.reserved",
61127 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61128
61129 {&hf_ieee80211_eht_qos_chars_min_svc_interval,
61130 {"Minimum Service Interval",
61131 "wlan.eht.qos_characteristics.minimum_service_interval",
61132 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61133
61134 {&hf_ieee80211_eht_qos_chars_max_svc_interval,
61135 {"Maximum Service Interval",
61136 "wlan.eht.qos_characteristics.maximum_service_interval",
61137 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61138
61139 {&hf_ieee80211_eht_qos_chars_min_data_rate,
61140 {"Minimum Data Rate",
61141 "wlan.eht.qos_characteristics.minimal_data_rate",
61142 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61143
61144 {&hf_ieee80211_eht_qos_chars_delay_bound,
61145 {"Delay Bound",
61146 "wlan.eht.qos_characteristics.delay_bound",
61147 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61148
61149 {&hf_ieee80211_eht_qos_chars_max_msdu_size,
61150 {"Maximum MSDU Size", "wlan.eht.qos_characteristics.max_msdu_size",
61151 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61152
61153 {&hf_ieee80211_eht_qos_chars_service_start_time,
61154 {"Service Start Time", "wlan.eht.qos_characteristics.service_start_time",
61155 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61156
61157 {&hf_ieee80211_eht_qos_chars_service_start_time_linkid,
61158 {"Service Start Time LinkID", "wlan.eht.qos_characteristics.service_start_time_linkid",
61159 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61160
61161 {&hf_ieee80211_eht_qos_chars_mean_data_rate,
61162 {"Mean Data Rate", "wlan.eht.qos_characteristics.mean_data_rate",
61163 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61164
61165 {&hf_ieee80211_eht_qos_chars_burst_size,
61166 {"Burst Size", "wlan.eht.qos_characteristics.burst_size",
61167 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61168
61169 {&hf_ieee80211_eht_qos_chars_msdu_lifetime,
61170 {"MSDU Lifetime", "wlan.eht.qos_characteristics.msdu_lifetime",
61171 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61172
61173 {&hf_ieee80211_eht_qos_chars_msdu_delivery_ratio,
61174 {"MSDU Delivery Ratio", "wlan.eht.qos_characteristics.msdu_delivery_ratio",
61175 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61176
61177 {&hf_ieee80211_eht_qos_chars_msdu_count_exponent,
61178 {"MSDU Count Exponent", "wlan.eht.qos_characteristics.msdu_count_exponent",
61179 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61180
61181 {&hf_ieee80211_eht_qos_chars_medium_time,
61182 {"Medium Time", "wlan.eht.qos_characteristics.medium_time",
61183 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61184
61185 {&hf_ieee80211_eht_link_id_bitmap,
61186 {"Link ID Bitmap", "wlan.eht.link_id_bitmap",
61187 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61188
61189 {&hf_ieee80211_eht_aid_bitmap_length,
61190 {"Partial AID Bitmap Length", "wlan.eht.aid_bitmap.length",
61191 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61192
61193 {&hf_ieee80211_eht_aid_bitmap_control,
61194 {"Bitmap Control", "wlan.eht.aid_bitmap.control",
61195 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61196
61197 {&hf_ieee80211_eht_aid_bitmap_control_offset,
61198 {"Bitmap Offset", "wlan.eht.aid_bitmap.control.offset",
61199 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfe, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61200
61201 {&hf_ieee80211_eht_aid_bitmap_control_reserved,
61202 {"Reserved", "wlan.eht.aid_bitmap.control.reserved",
61203 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61204
61205 {&hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap,
61206 {"Partial AID Bitmap", "wlan.eht.aid_bitmap.partial_aid_bitmap",
61207 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61208
61209 {&hf_ieee80211_eht_aid_bitmap_aid,
61210 {"Association ID", "wlan.eht.aid_bitmap.aid",
61211 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61212
61213 {&hf_ieee80211_eht_bw_indi_param,
61214 {"Bandwidth Indication Parameters", "wlan.eht.bw_indication_params",
61215 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61216
61217 {&hf_ieee80211_eht_bw_indi_param_reserved,
61218 {"Reserved", "wlan.eht.bw_indication_params.reserved",
61219 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61220
61221 {&hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap,
61222 {"Disabled Subchannel Bitmap Present", "wlan.eht.bw_indication_params.disabled_subchan_bitmap",
61223 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61224
61225 {&hf_ieee80211_eht_bw_indi_param_reserved1,
61226 {"Reserved", "wlan.eht.bw_indication_params.reserved1",
61227 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61228
61229 {&hf_ieee80211_eht_bw_indi_diabled_bitmap,
61230 {"Disabled Subchannel Bitmap",
61231 "wlan.eht.bw_indication.disabled_subchannel_bitmap",
61232 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61233
61234 {&hf_ieee80211_eht_mimo_ctrl_field,
61235 {"EHT MIMO Control", "wlan.eht.mimo.control",
61236 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61237
61238 {&hf_ieee80211_eht_mimo_ctrl_nc_index,
61239 {"Nc Index", "wlan.eht.mimo.control.nc_index",
61240 FT_UINT40, BASE_DEC, NULL((void*)0), 0x000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61241
61242 {&hf_ieee80211_eht_mimo_ctrl_nr_index,
61243 {"Nr Index", "wlan.eht.mimo.control.nr_index",
61244 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61245
61246 {&hf_ieee80211_eht_mimo_ctrl_bw,
61247 {"BW", "wlan.eht.mimo.control.bw",
61248 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_mimo_bw_vals)((0 ? (const struct _val64_string*)0 : ((eht_mimo_bw_vals)))),
61249 0x0000000700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61250
61251 {&hf_ieee80211_eht_mimo_ctrl_grouping,
61252 {"Grouping", "wlan.eht.mimo.control.grouping",
61253 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_mimo_grouping_vals)((0 ? (const struct _val64_string*)0 : ((eht_mimo_grouping_vals
))))
,
61254 0x0000000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61255
61256 {&hf_ieee80211_eht_mimo_ctrl_feedback_type,
61257 {"Feedback Type", "wlan.eht.mimo.control.feedback_type",
61258 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_feedback_type_vals)((0 ? (const struct _val64_string*)0 : ((eht_feedback_type_vals
))))
,
61259 0x0000003000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61260
61261 {&hf_ieee80211_eht_mimo_ctrl_reserved1,
61262 {"Reserved", "wlan.eht.mimo.control.reserved1",
61263 FT_UINT40, BASE_HEX, NULL((void*)0), 0x000001C000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61264
61265 {&hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments,
61266 {"Remaining Feedback Segments",
61267 "wlan.eht.mimo.control.remaining_feedback_segments",
61268 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61269
61270 {&hf_ieee80211_eht_mimo_ctrl_first_feedback_segment,
61271 {"First Feedback Segment", "wlan.eht.mimo.control.first_feedback_segment",
61272 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61273
61274 {&hf_ieee80211_eht_mimo_ctrl_partial_bw_info,
61275 {"Partial BW Info", "wlan.eht.mimo.control.partial_bw_info",
61276 FT_UINT40, BASE_HEX, NULL((void*)0), 0x003FE00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61277
61278 {&hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number,
61279 {"Sounding Dialog Token Number",
61280 "wlan.eht.mimo.control.sounding_dialog_token_number",
61281 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0FC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61282
61283 {&hf_ieee80211_eht_mimo_ctrl_codebook_info,
61284 {"Codebook Information", "wlan.eht.mimo.control.codebook_info",
61285 FT_UINT40, BASE_DEC, NULL((void*)0), 0x1000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61286
61287 {&hf_ieee80211_eht_mimo_ctrl_reserved2,
61288 {"Reserved", "wlan.eht.mimo.control.reserved2",
61289 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61290
61291 {&hf_ieee80211_eht_compressed_beamforming_report_snr,
61292 {"AgvSNR", "wlan.eht.mimo.beamforming_report.avgsnr",
61293 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61294
61295 {&hf_ieee80211_eht_compressed_beamform_scidx,
61296 {"SCIDX", "wlan.eht.mimo.beamforming_report.scidx",
61297 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61298
61299 {&hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
61300 {"Delta SNR", "wlan.eht.mu.exclusive_beamforming_report.delta_snr",
61301 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61302
61303 {&hf_ieee80211_eht_group_key_data_length,
61304 {"Key Data Length", "wlan.eht.group_key_data.length",
61305 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61306
61307 {&hf_ieee80211_eht_reconfig_link_id_info,
61308 {"Link ID Info", "wlan.eht.reconfig.link_id_info",
61309 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61310
61311 {&hf_ieee80211_eht_reconfig_link_id,
61312 {"Link ID", "wlan.eht.reconfig.link_id_info.link_id",
61313 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61314
61315 {&hf_ieee80211_eht_reconfig_link_id_reserved,
61316 {"Reserved", "wlan.eht.reconfig.link_id_info.reserved",
61317 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61318
61319 {&hf_ieee80211_eht_reconfig_status_code,
61320 {"Status code", "wlan.eht.reconfig.status_code",
61321 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
61322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61323
61324 {&hf_ieee80211_wfa_rsn_selection,
61325 {"RSNE Variant", "wlan.wfa_rsn_selection.variant",
61326 FT_UINT8, BASE_DEC, VALS(wfa_rsne_variant_vals)((0 ? (const struct _value_string*)0 : ((wfa_rsne_variant_vals
))))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61327
61328 {&hf_ieee80211_wfa_rsn_or_link_kde_link_id,
61329 {"Link ID", "wlan.wfa_rsn_or_link_kde.link_id",
61330 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61331
61332 {&hf_ieee80211_nonap_sta_regulatory_conn,
61333 {"Regulatory Connectivity", "wlan.nonap_sta_regulatory_connect",
61334 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61335
61336 {&hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid,
61337 {"Connectivity With Indoor AP Valid", "wlan.nonap_sta_regulatory_connect.indoor_ap_valid",
61338 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61339
61340 {&hf_ieee80211_nonap_sta_regu_conn_indoor_ap,
61341 {"Connectivity With Indoor AP", "wlan.nonap_sta_regulatory_connect.indoor_ap",
61342 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61343
61344 {&hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid,
61345 {"Connectivity With SP AP Valid", "wlan.nonap_sta_regulatory_connect.sp_ap_valid",
61346 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61347
61348 {&hf_ieee80211_nonap_sta_regu_conn_sp_ap,
61349 {"Connectivity With SP AP", "wlan.nonap_sta_regulatory_connect.sp_ap",
61350 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61351
61352 {&hf_ieee80211_nonap_sta_regu_conn_reserved,
61353 {"Reserved", "wlan.nonap_sta_regulatory_connect.reserved",
61354 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61355
61356 {&hf_ieee80211_tag_channel_usage_mode,
61357 {"Usage Mode", "wlan.channel_usage.mode",
61358 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61359 RVALS(channel_usage_mode)((0 ? (const struct _range_string*)0 : ((channel_usage_mode))
))
, 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61360
61361 {&hf_ieee80211_ff_count,
61362 {"Count", "wlan.fixed.count",
61363 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61364
61365 {&hf_ieee80211_tag_dms_id,
61366 {"DMS ID", "wlan.dms.id",
61367 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61368
61369 {&hf_ieee80211_tag_dms_length,
61370 {"DMS Length", "wlan.dms.length",
61371 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61372
61373 {&hf_ieee80211_tag_dms_req_type,
61374 {"Request Type", "wlan.dms.request_type",
61375 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61376 RVALS(dms_req_type)((0 ? (const struct _range_string*)0 : ((dms_req_type)))), 0,
61377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61378
61379 {&hf_ieee80211_tag_dms_resp_type,
61380 {"Response Type", "wlan.dms.response_type",
61381 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61382 RVALS(dms_resp_type)((0 ? (const struct _range_string*)0 : ((dms_resp_type)))), 0,
61383 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61384
61385 {&hf_ieee80211_tag_dms_last_seq_control,
61386 {"Last Sequence Control", "wlan.dms.last_sequence_control",
61387 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61388 };
61389
61390 static hf_register_info aggregate_fields[] = {
61391 {&hf_ieee80211_amsdu_subframe,
61392 {"A-MSDU Subframe", "wlan_aggregate.a_msdu.subframe",
61393 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
61394 "Aggregate MAC Service Data Unit (MSDU) Subframe", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61395
61396 {&hf_ieee80211_amsdu_length,
61397 {"A-MSDU Length", "wlan_aggregate.a_msdu.length",
61398 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
61399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61400
61401 {&hf_ieee80211_amsdu_padding,
61402 {"A-MSDU Padding", "wlan_aggregate.a_msdu.padding",
61403 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
61404 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61405 };
61406
61407 static uat_field_t wep_uat_flds[] = {
61408
61409 UAT_FLD_VS(uat_wep_key_records, key, "Key type", wep_type_vals,{"key", "Key type", PT_TXTMOD_ENUM,{uat_fld_chk_enum,uat_wep_key_records_key_set_cb
,uat_wep_key_records_key_tostr_cb},{&(wep_type_vals),&
(wep_type_vals),&(wep_type_vals)},&(wep_type_vals),"Decryption key type used"
,((void*)0)}
61410 "Decryption key type used"){"key", "Key type", PT_TXTMOD_ENUM,{uat_fld_chk_enum,uat_wep_key_records_key_set_cb
,uat_wep_key_records_key_tostr_cb},{&(wep_type_vals),&
(wep_type_vals),&(wep_type_vals)},&(wep_type_vals),"Decryption key type used"
,((void*)0)}
,
61411 UAT_FLD_CSTRING(uat_wep_key_records, string, "Key",{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
61412 "wep:<wep hexadecimal key>\n"{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
61413 "wpa-pwd:<passphrase>[:<ssid>]\n"{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
61414 "wpa-psk:<wpa hexadecimal key>\n"{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
61415 "tk:<hexadecimal key>\n"{"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
61416 "msk:<hexadecimal key>\n"){"string", "Key", PT_TXTMOD_STRING,{uat_fld_chk_str,uat_wep_key_records_string_set_cb
,uat_wep_key_records_string_tostr_cb},{0,0,0},0,"wep:<wep hexadecimal key>\n"
"wpa-pwd:<passphrase>[:<ssid>]\n" "wpa-psk:<wpa hexadecimal key>\n"
"tk:<hexadecimal key>\n" "msk:<hexadecimal key>\n"
,((void*)0)}
,
61417 UAT_END_FIELDS{((void*)0),((void*)0),PT_TXTMOD_NONE,{0,0,0},{0,0,0},0,0,((void
*)0)}
61418 };
61419
61420 static int *ett[] = {
61421 &ett_80211,
61422 &ett_proto_flags,
61423 &ett_cap_tree,
61424 &ett_fc_tree,
61425 &ett_cntrl_wrapper_fc,
61426 &ett_cntrl_wrapper_payload,
61427 &ett_fragments,
61428 &ett_fragment,
61429 &ett_block_ack,
61430 &ett_block_ack_tid,
61431 &ett_block_ack_request_control,
61432 &ett_block_ack_bitmap,
61433 &ett_block_ack_request_multi_sta_aid_tid,
61434 &ett_multi_sta_block_ack,
61435 &ett_ath_cap_tree,
61436 &ett_extreme_mesh_services_tree,
61437 &ett_addr,
61438
61439 &ett_80211_mgt,
61440 &ett_fixed_parameters,
61441 &ett_tagged_parameters,
61442 &ett_tag_bmapctl_tree,
61443 &ett_s1g_pvb_tree,
61444 &ett_s1g_pvb_eb_tree,
61445 &ett_s1g_pvb_block_control_byte,
61446 &ett_s1g_pvb_block_bitmap_tree,
61447 &ett_s1g_pvb_subblock_tree,
61448 &ett_s1g_pvb_olb_tree,
61449 &ett_s1g_pvb_ade_control,
61450 &ett_s1g_pvb_ade_tree,
61451 &ett_s1g_pvb_olb_subblock,
61452 &ett_tag_country_fnm_tree,
61453 &ett_tag_country_rcc_tree,
61454 &ett_qos_parameters,
61455 &ett_qos_ps_buf_state,
61456 &ett_wep_parameters,
61457 &ett_msh_control,
61458 &ett_hwmp_targ_flags_tree,
61459 &ett_mesh_chswitch_flag_tree,
61460 &ett_mesh_config_cap_tree,
61461 &ett_mesh_formation_info_tree,
61462 &ett_bcn_timing_rctrl_tree,
61463 &ett_bcn_timing_info_tree,
61464 &ett_gann_flags_tree,
61465 &ett_pxu_proxy_info_tree,
61466 &ett_pxu_proxy_info_flags_tree,
61467
61468 &ett_rsn_gcs_tree,
61469 &ett_rsn_pcs_tree,
61470 &ett_rsn_sub_pcs_tree,
61471 &ett_rsn_akms_tree,
61472 &ett_rsn_sub_akms_tree,
61473 &ett_rsn_cap_tree,
61474 &ett_rsn_pmkid_tree,
61475 &ett_rsn_gmcs_tree,
61476
61477 &ett_kde_mlo_link_info,
61478
61479 &ett_wpa_mcs_tree,
61480 &ett_wpa_ucs_tree,
61481 &ett_wpa_sub_ucs_tree,
61482 &ett_wpa_akms_tree,
61483 &ett_wpa_sub_akms_tree,
61484 &ett_wme_ac,
61485 &ett_wme_aci_aifsn,
61486 &ett_wme_ecw,
61487 &ett_wme_qos_info,
61488
61489 &ett_update_edca_info,
61490
61491 &ett_ht_cap_tree,
61492 &ett_ampduparam_tree,
61493 &ett_mcsset_tree,
61494 &ett_mcsbit_tree,
61495 &ett_htex_cap_tree,
61496 &ett_txbf_tree,
61497 &ett_antsel_tree,
61498 &ett_hta_cap_tree,
61499 &ett_hta_cap1_tree,
61500 &ett_hta_cap2_tree,
61501
61502 &ett_s1g_ndp,
61503 &ett_s1g_ndp_ack,
61504 &ett_s1g_ndp_cts,
61505 &ett_s1g_ndp_cf_end,
61506 &ett_s1g_ndp_ps_poll,
61507 &ett_s1g_ndp_ps_poll_ack,
61508 &ett_s1g_ndp_block_ack,
61509 &ett_s1g_ndp_beamforming_report_poll,
61510 &ett_s1g_ndp_paging,
61511 &ett_s1g_ndp_probe,
61512 &ett_pv1_sid,
61513 &ett_pv1_sid_field,
61514 &ett_pv1_seq_control,
61515 &ett_ieee80211_s1g_capabilities_info,
61516 &ett_ieee80211_s1g_capabilities,
61517 &ett_s1g_cap_byte1,
61518 &ett_s1g_cap_byte2,
61519 &ett_s1g_cap_byte3,
61520 &ett_s1g_cap_byte4,
61521 &ett_s1g_cap_byte5,
61522 &ett_s1g_cap_byte6,
61523 &ett_s1g_cap_byte7,
61524 &ett_s1g_cap_byte8,
61525 &ett_s1g_cap_byte9,
61526 &ett_s1g_cap_byte10,
61527 &ett_ieee80211_s1g_sup_mcs_and_nss_set,
61528 &ett_s1g_mcs_and_mcs_set,
61529 &ett_s1g_operation_info,
61530 &ett_s1g_channel_width,
61531 &ett_s1g_subchannel_selective_transmission,
61532 &ett_s1g_raw_assignment,
61533 &ett_s1g_raw_assn_tree,
61534 &ett_s1g_raw_control,
61535 &ett_s1g_raw_slot_def,
61536 &ett_s1g_raw_group_subfield,
61537 &ett_s1g_raw_channel_indication,
61538 &ett_s1g_page_slice_control,
61539 &ett_s1g_aid_request_mode,
61540 &ett_s1g_aid_characteristic,
61541 &ett_s1g_sector_operation,
61542 &ett_tack_info,
61543 &ett_ieee80211_s1g_auth_control,
61544 &ett_s1g_relay_control,
61545 &ett_s1g_relay_function,
61546 &ett_ieee80211_s1g_addr_list,
61547 &ett_ieee80211_s1g_reach_addr,
61548 &ett_s1g_relay_discovery_control,
61549 &ett_ieee80211_s1g_aid_entry,
61550 &ett_s1g_probe_resp_subfield_0,
61551 &ett_s1g_header_comp_control,
61552 &ett_pv1_mgmt_action,
61553 &ett_pv1_mgmt_action_no_ack,
61554 &ett_pv1_cntl_stack,
61555 &ett_pv1_cntl_bat,
61556
61557 &ett_htc_tree,
61558 &ett_htc_he_a_control,
61559 &ett_mfb_subtree,
61560 &ett_lac_subtree,
61561 &ett_ieee80211_a_control_padding,
61562 &ett_ieee80211_a_control_ones,
61563 &ett_ieee80211_triggered_response_schedule,
61564 &ett_ieee80211_control_om,
61565 &ett_ieee80211_hla_control,
61566 &ett_ieee80211_buffer_status_report,
61567 &ett_ieee80211_control_uph,
61568 &ett_ieee80211_buffer_control_bqr,
61569 &ett_ieee80211_control_cci,
61570 &ett_ieee80211_control_eht_om,
61571 &ett_ieee80211_control_srs,
61572 &ett_ieee80211_control_aar,
61573
61574 &ett_vht_cap_tree,
61575 &ett_vht_mcsset_tree,
61576 &ett_vht_rx_mcsbit_tree,
61577 &ett_vht_tx_mcsbit_tree,
61578 &ett_vht_basic_mcsbit_tree,
61579 &ett_vht_op_tree,
61580 &ett_vht_tpe_info_tree,
61581 &ett_tpe_psd,
61582
61583 &ett_vht_ranging_annc,
61584
61585 &ett_ff_he_action,
61586 &ett_ff_protected_he_action,
61587 &ett_ff_protected_eht_action,
61588 &ett_ff_he_mimo_control,
61589 &ett_ff_he_mimo_beamforming_report_snr,
61590 &ett_ff_he_mimo_feedback_matrices,
61591
61592 &ett_ff_vhtmimo_cntrl,
61593 &ett_ff_vhtmimo_beamforming_report,
61594 &ett_ff_vhtmimo_beamforming_report_snr,
61595 &ett_ff_vhtmimo_beamforming_angle,
61596 &ett_ff_vhtmimo_beamforming_report_feedback_matrices,
61597 &ett_ff_vhtmu_exclusive_beamforming_report_matrices,
61598
61599 &ett_vht_grpidmgmt,
61600 &ett_vht_msa,
61601 &ett_vht_upa,
61602
61603 &ett_ht_operation_info_delimiter1_tree,
61604 &ett_ht_operation_info_delimiter2_tree,
61605 &ett_ht_operation_info_delimiter3_tree,
61606
61607 &ett_ff_ftm_param_delim1,
61608 &ett_ff_ftm_param_delim2,
61609 &ett_ff_ftm_param_delim3,
61610 &ett_ff_ftm_tod_err1,
61611 &ett_ff_ftm_toa_err1,
61612 &ett_tag_ranging,
61613 &ett_tag_ranging_ntb,
61614 &ett_tag_ranging_secure_he_ltf,
61615
61616 &ett_ranging_subelement_tree,
61617
61618 &ett_tag_direct_meas_results,
61619
61620 &ett_rsta_avail_header,
61621 &ett_rsta_avail_tree,
61622 &ett_rsta_avail_subfield,
61623
61624 &ett_pasn_parameters,
61625 &ett_pasn_comeback_tree,
61626 &ett_pasn_auth_frame,
61627
61628 /* 802.11be tree */
61629 &ett_eht_multi_link_control,
61630 &ett_eht_multi_link_common_info,
61631 &ett_eht_multi_link_common_info_link_id,
61632 &ett_eht_multi_link_common_info_medium_sync,
61633 &ett_eht_multi_link_common_info_eml_capa,
61634 &ett_eht_multi_link_common_info_mld_capa,
61635 &ett_eht_multi_link_common_info_ext_mld_capa,
61636 &ett_eht_multi_link_per_sta,
61637 &ett_eht_multi_link_subelt,
61638 &ett_eht_multi_link_sta_control,
61639 &ett_eht_multi_link_per_sta_info,
61640 &ett_eht_multi_link_sta_dtim,
61641 &ett_eht_multi_link_reconf_oper_param,
61642 &ett_eht_multi_link_reconfig_presence_indi,
61643 &ett_eht_multi_link_reconfig_operation_para_info,
61644 &ett_eht_operation_params,
61645 &ett_eht_operation_control,
61646 &ett_eht_mac_capa,
61647 &ett_eht_phy_capa,
61648 &ett_eht_phy_bits_0_15,
61649 &ett_eht_phy_bits_16_31,
61650 &ett_eht_phy_bits_32_39,
61651 &ett_eht_phy_bits_40_63,
61652 &ett_eht_phy_bits_64_71,
61653 &ett_eht_phy_mcs_nss,
61654 &ett_eht_phy_mcs_nss_set,
61655 &ett_eht_ttl_mapping,
61656 &ett_eht_ttl_mapping_link_mapping,
61657 &ett_eht_eht_multi_link_tc,
61658 &ett_eht_qos_characteristics,
61659 &ett_eht_aid_bmapctl_tree,
61660 &ett_eht_bw_indication_param,
61661 &ett_eht_eml_control,
61662 &ett_eht_eml_control_link_map,
61663 &ett_eht_eml_control_mcs_map_count,
61664 &ett_eht_emlsr_para_update,
61665 &ett_eht_mimo_ctrl,
61666 &ett_eht_beamforming_rpt_ru_index,
61667 &ett_eht_beamforming_feedback_tree,
61668 &ett_ff_eht_mimo_beamforming_report_snr,
61669 &ett_ff_eht_mimo_mu_exclusive_report,
61670 &ett_eht_mu_exclusive_beamforming_rpt_ru_index,
61671 &ett_eht_reconfig_status_list,
61672 &ett_eht_group_key_data,
61673
61674 &ett_tag_measure_request_mode_tree,
61675 &ett_tag_measure_request_type_tree,
61676 &ett_tag_measure_request_sub_element_tree,
61677 &ett_tag_measure_report_mode_tree,
61678 &ett_tag_measure_report_type_tree,
61679 &ett_tag_measure_report_basic_map_tree,
61680 &ett_tag_measure_report_rpi_tree,
61681 &ett_tag_measure_report_frame_tree,
61682 &ett_tag_measure_report_sub_element_tree,
61683 &ett_tag_measure_reported_frame_tree,
61684 &ett_tag_measure_reported_frame_frag_id_tree,
61685 &ett_tag_measure_reported_lci_z_tree,
61686 &ett_tag_measure_reported_lci_urp_tree,
61687 &ett_tag_bss_bitmask_tree,
61688 &ett_tag_dfs_map_tree,
61689 &ett_tag_dfs_map_flags_tree,
61690 &ett_tag_erp_info_tree,
61691 &ett_tag_ex_cap1,
61692 &ett_tag_ex_cap2,
61693 &ett_tag_ex_cap3,
61694 &ett_tag_ex_cap4,
61695 &ett_tag_ex_cap5,
61696 &ett_tag_ex_cap6,
61697 &ett_tag_ex_cap7,
61698 &ett_tag_ex_cap8,
61699 &ett_tag_ex_cap89,
61700 &ett_tag_ex_cap10,
61701 &ett_tag_ex_cap11,
61702 &ett_tag_ex_cap12,
61703 &ett_tag_ex_cap13,
61704 &ett_tag_ex_cap14,
61705
61706 &ett_tag_rm_cap1,
61707 &ett_tag_rm_cap2,
61708 &ett_tag_rm_cap3,
61709 &ett_tag_rm_cap4,
61710 &ett_tag_rm_cap5,
61711
61712 &ett_tag_rsnx_octet1,
61713 &ett_tag_rsnx_octet2,
61714
61715 &ett_tag_multiple_bssid_subelem_tree,
61716
61717 &ett_tag_20_40_bc,
61718
61719 &ett_tag_intolerant_tree,
61720
61721 &ett_tag_tclas_mask_tree,
61722
61723 &ett_tag_supported_channels,
61724
61725 &ett_tag_neighbor_report_bssid_info_tree,
61726 &ett_tag_neighbor_report_bssid_info_capability_tree,
61727 &ett_tag_neighbor_report_subelement_tree,
61728 &ett_tag_neighbor_report_sub_tag_tree,
61729
61730 &ett_tag_wapi_param_set_akm_tree,
61731 &ett_tag_wapi_param_set_ucast_tree,
61732 &ett_tag_wapi_param_set_mcast_tree,
61733 &ett_tag_wapi_param_set_preauth_tree,
61734
61735 &ett_max_idle_period_options,
61736
61737 &ett_tag_time_adv_tree,
61738
61739 &ett_tag_he_6ghz_cap_inf_tree,
61740
61741 &ett_ff_ba_param_tree,
61742 &ett_ff_ba_ssc_tree,
61743 &ett_ff_delba_param_tree,
61744 &ett_ff_qos_info,
61745 &ett_ff_psmp_param_set,
61746 &ett_ff_mimo_cntrl,
61747 &ett_ff_ant_sel,
61748 &ett_mimo_report,
61749 &ett_ff_sm_pwr_save,
61750 &ett_ff_chan_switch_announce,
61751 &ett_ff_ht_info,
61752 &ett_ff_psmp_sta_info,
61753
61754 &ett_tpc,
61755
61756 &ett_msdu_aggregation_parent_tree,
61757 &ett_msdu_aggregation_subframe_tree,
61758
61759 &ett_80211_mgt_ie,
61760 &ett_tsinfo_tree,
61761 &ett_sched_tree,
61762
61763 &ett_fcs,
61764
61765 &ett_hs20_osu_providers_list,
61766 &ett_hs20_osu_provider_tree,
61767 &ett_hs20_friendly_names_list,
61768 &ett_hs20_friendly_name_tree,
61769 &ett_hs20_osu_provider_method_list,
61770 &ett_osu_icons_avail_list,
61771 &ett_hs20_osu_icon_tree,
61772 &ett_hs20_osu_service_desc_list,
61773 &ett_hs20_osu_service_desc_tree,
61774 &ett_hs20_venue_url,
61775 &ett_hs20_advice_of_charge,
61776 &ett_hs20_aoc_plan,
61777
61778 &ett_hs20_ofn_tree,
61779
61780 &ett_adv_proto,
61781 &ett_adv_proto_tuple,
61782 &ett_gas_query,
61783 &ett_gas_anqp,
61784 &ett_nai_realm,
61785 &ett_nai_realm_eap,
61786 &ett_tag_ric_data_desc_ie,
61787 &ett_anqp_vendor_capab,
61788
61789 &ett_osen_group_data_cipher_suite,
61790 &ett_osen_pairwise_cipher_suites,
61791 &ett_osen_pairwise_cipher_suite,
61792 &ett_osen_akm_cipher_suites,
61793 &ett_osen_akm_cipher_suite,
61794 &ett_osen_rsn_cap_tree,
61795 &ett_osen_pmkid_list,
61796 &ett_osen_pmkid_tree,
61797 &ett_osen_group_management_cipher_suite,
61798
61799 &ett_hs20_cc_proto_port_tuple,
61800
61801 &ett_tag_no_bssid_capability_dmg_bss_control_tree,
61802 &ett_ssid_list,
61803
61804 &ett_sgdsn,
61805 &ett_nintendo,
61806
61807 &ett_routerboard,
61808
61809 &ett_meru,
61810
61811 &ett_wisun_gtkl,
61812 &ett_wisun_lgtkl,
61813
61814 &ett_qos_map_set_exception,
61815 &ett_qos_map_set_range,
61816
61817 &ett_wnm_notif_subelt,
61818
61819 &ett_tag_mobility_domain_ft_capab_tree,
61820
61821 &ett_tag_ft_mic_control_tree,
61822 &ett_tag_ft_subelem_tree,
61823
61824 /* 802.11ad trees */
61825 &ett_dynamic_alloc_tree,
61826 &ett_ssw_tree,
61827 &ett_bf_tree,
61828 &ett_sswf_tree,
61829 &ett_brp_tree,
61830 &ett_blm_tree,
61831 &ett_bic_tree,
61832 &ett_dmg_params_tree,
61833 &ett_cc_tree,
61834 &ett_rcsi_tree,
61835 &ett_80211_ext,
61836 &ett_allocation_tree,
61837 &ett_sta_info,
61838
61839 &ett_ieee80211_esp,
61840 &ett_ieee80211_wfa_60g_attr,
61841 &ett_ieee80211_wfa_transition_disable_tree,
61842 &ett_gas_resp_fragment,
61843 &ett_gas_resp_fragments,
61844
61845 &ett_mbo_oce_attr,
61846 &ett_mbo_ap_cap,
61847 &ett_oce_cap,
61848 &ett_oce_metrics_cap,
61849
61850 /* 802.11 ah trees */
61851 &ett_s1g_sync_control_tree,
61852 &ett_s1g_twt_information_control,
61853 &ett_s1g_sector_id_index,
61854 &ett_twt_tear_down_tree,
61855 &ett_twt_control_field_tree,
61856 &ett_twt_req_type_tree,
61857 &ett_twt_ndp_paging_field_tree,
61858 &ett_twt_broadcast_info_tree,
61859 &ett_twt_traffic_info_tree,
61860 &ett_twt_traffic_info_control_tree,
61861
61862 /* 802.11ax trees */
61863 &ett_he_mac_capabilities,
61864 &ett_he_phy_capabilities,
61865 &ett_he_phy_cap_first_byte,
61866 &ett_he_phy_cap_chan_width_set,
61867 &ett_he_phy_cap_b8_to_b23,
61868 &ett_he_phy_cap_b24_to_b39,
61869 &ett_he_phy_cap_b40_to_b55,
61870 &ett_he_phy_cap_b56_to_b71,
61871 &ett_he_phy_cap_b72_to_b87,
61872 &ett_he_mcs_and_nss_set,
61873 &ett_he_rx_tx_he_mcs_map_lte_80,
61874 &ett_he_rx_mcs_map_lte_80,
61875 &ett_he_tx_mcs_map_lte_80,
61876 &ett_he_rx_tx_he_mcs_map_160,
61877 &ett_he_rx_mcs_map_160,
61878 &ett_he_tx_mcs_map_160,
61879 &ett_he_rx_tx_he_mcs_map_80_80,
61880 &ett_he_rx_mcs_map_80_80,
61881 &ett_he_tx_mcs_map_80_80,
61882 &ett_he_ppe_threshold,
61883 &ett_he_ppe_nss,
61884 &ett_he_ppe_ru_alloc,
61885 &ett_he_operation_params,
61886 &ett_he_bss_color_information,
61887 &ett_he_oper_basic_mcs,
61888 &ett_he_operation_vht_op_info,
61889 &ett_he_operation_6ghz,
61890 &ett_he_operation_6ghz_control,
61891 &ett_he_mu_edca_param,
61892 &ett_he_uora_tree,
61893 &ett_he_aic_aifsn,
61894 &ett_he_spatial_reuse_control,
61895 &ett_he_ess_report_info_field,
61896 &ett_he_bss_new_color_info,
61897 &ett_he_trigger_common_info,
61898 &ett_he_trigger_ranging,
61899 &ett_he_trigger_ranging_poll,
61900 &ett_he_trigger_packet_extension,
61901 &ett_he_trigger_base_common_info,
61902 &ett_he_trigger_bar_ctrl,
61903 &ett_he_trigger_bar_info,
61904 &ett_he_trigger_user_info,
61905 &ett_he_trigger_base_user_info,
61906 &ett_he_trigger_dep_basic_user_info,
61907 &ett_he_trigger_dep_nfrp_user_info,
61908 &ett_ndp_annc,
61909 &ett_ndp_vht_annc_sta_list,
61910 &ett_ndp_vht_annc_sta_info_tree,
61911 &ett_ndp_he_annc_sta_list,
61912 &ett_ndp_he_annc_sta_item,
61913 &ett_ndp_he_annc_sta_info,
61914 &ett_ndp_eht_annc_sta_list,
61915 &ett_ndp_eht_annc_sta_info,
61916 &ett_ndp_ranging_annc_sta_list,
61917 &ett_ndp_ranging_annc_sta_info,
61918 &ett_non_inheritance_element_id_list,
61919 &ett_non_inheritance_element_id_ext_list,
61920 &ett_mscs_user_prio,
61921 &ett_ieee80211_user_prio_bitmap,
61922 &ett_ieee80211_intra_access_prio,
61923
61924 &ett_ieee80211_3gpp_plmn,
61925
61926 /* 802.11ai trees */
61927 &ett_fils_indication_realm_list,
61928 &ett_fils_indication_public_key_list,
61929
61930 &ett_neighbor_ap_info,
61931 &ett_tbtt_infos,
61932 &ett_rnr_bss_params_tree,
61933 &ett_rnr_mld_params_tree,
61934
61935 &ett_qos_mgmt_dscp_policy_capabilities,
61936 &ett_qos_mgmt_pol_capa,
61937 &ett_qos_mgmt_attributes,
61938 &ett_qos_mgmt_dscp_policy,
61939 &ett_qos_mgmt_tclas,
61940 &ett_qos_mgmt_domain_name,
61941 &ett_qos_mgmt_unknown_attribute,
61942 &ett_dscp_policy_status_list,
61943 &ett_pol_rqst_cont_tree,
61944 &ett_pol_resp_cont_tree,
61945
61946 &ett_ff_fils_discovery_frame_control,
61947 &ett_ff_fils_discovery_capability,
61948
61949 &ett_ff_fils_req_params,
61950 &ett_ff_fils_req_params_fils_criteria,
61951
61952 &ett_nonap_sta_regulatory_conn,
61953
61954 &ett_chan_usage,
61955 };
61956
61957 static ei_register_info ei[] = {
61958 { &ei_ieee80211_bad_length,
61959 { "ieee80211.bad_length", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61960 "Wrong length indicated", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
61961
61962 { &ei_ieee80211_inv_val,
61963 { "ieee80211.invalid_value", PI_MALFORMED0x07000000, PI_WARN0x00600000,
61964 "Invalid value", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
61965
61966 { &ei_ieee80211_tag_number,
61967 { "wlan.tag.number.unexpected_ie", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61968 "Unexpected Information Element ID", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
61969
61970 { &ei_ieee80211_tag_length,
61971 { "wlan.tag.length.bad", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61972 "Bad tag length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
61973
61974 { &ei_ieee80211_extra_data,
61975 { "ieee80211.extra_data", PI_MALFORMED0x07000000, PI_WARN0x00600000,
61976 "Unexpected extra data in the end", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
61977
61978 { &ei_ieee80211_ff_anqp_capability,
61979 { "wlan.fixed.anqp.capability.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61980 "Invalid vendor-specific ANQP capability", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
61981
61982 { &ei_ieee80211_ff_anqp_venue_length,
61983 { "wlan.fixed.anqp.venue.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61984 "Invalid Venue Name Duple length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
61985
61986 { &ei_ieee80211_ff_anqp_roaming_consortium_oi_len,
61987 { "wlan.fixed.anqp.roaming_consortium.oi_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61988 "Invalid Roaming Consortium OI", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
61989
61990 { &ei_ieee80211_ff_anqp_nai_field_len,
61991 { "wlan.fixed.anqp.nai_realm_list.field_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61992 "Invalid NAI Realm List", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
61993
61994 { &ei_ieee80211_ff_anqp_nai_realm_eap_len,
61995 { "wlan.fixed.anqp_nai_realm_list.eap_method_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
61996 "Invalid EAP Method subfield", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
61997
61998 { &ei_hs20_anqp_ofn_length,
61999 { "wlan.hs20.anqp.ofn.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62000 "Invalid Operator Friendly Name Duple length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62001
62002 { &ei_hs20_anqp_nai_hrq_length,
62003 { "wlan.hs20.anqp.nai_hrq.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62004 "Invalid NAI Home Realm Query length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62005
62006 { &ei_ieee80211_ff_anqp_info_length,
62007 { "wlan.fixed.anqp.info_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62008 "Invalid ANQP Info length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62009
62010 { &ei_ieee80211_not_enough_room_for_anqp_header,
62011 { "wlan.fixed.query_length_invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62012 "Not enough room for ANQP header", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62013
62014 { &ei_ieee80211_ff_query_request_length,
62015 { "wlan.fixed.query_request_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62016 "Invalid Query Request Length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62017
62018 { &ei_ieee80211_ff_query_response_length,
62019 { "wlan.fixed.query_response_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62020 "Invalid Query Response Length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62021
62022 { &ei_ieee80211_tag_wnm_sleep_mode_no_key_data,
62023 { "wlan.wnm_sleep_mode.no_key_data", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62024 "WNM-Sleep Mode Response is not long enough to include Key Data", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62025
62026 { &ei_ieee80211_tdls_setup_response_malformed,
62027 { "wlan.tdls_setup_response_malformed", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62028 "TDLS Setup Response (success) does not include mandatory fields", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62029
62030 { &ei_ieee80211_tdls_setup_confirm_malformed,
62031 { "wlan.tdls_setup_confirm_malformed", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62032 "TDLS Setup Confirm (success) does not include mandatory fields", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62033
62034 { &ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype,
62035 { "wlan.wfa.ie.wme.qos_info.bad_ftype", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62036 "Could not deduce direction to decode correctly", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62037
62038 { &ei_ieee80211_qos_info_bad_ftype,
62039 { "wlan.qos_info.bad_ftype", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62040 "Could not deduce direction to decode correctly", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62041
62042 { &ei_ieee80211_qos_bad_aifsn,
62043 { "wlan.qos_info.bad_aifsn", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62044 "Invalid AIFSN", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62045
62046 { &ei_ieee80211_rsn_pcs_count,
62047 { "wlan.rsn.pcs.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62048 "Pairwise Cipher Suite Count too large", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62049
62050 { &ei_ieee80211_rsn_pmkid_count,
62051 { "wlan.rsn.akms.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62052 "Auth Key Management (AKM) Suite Count too large", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62053
62054 { &ei_ieee80211_pmkid_count_too_large,
62055 { "wlan.rsn.pmkid.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62056 "PMKID Count too large", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62057
62058 { &ei_ieee80211_vht_tpe_pwr_info_count,
62059 { "wlan.vht.tpe.pwr_info.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62060 "Max Tx Pwr Count is Incorrect, should be 0-7", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62061
62062 { &ei_ieee80211_vht_tpe_pwr_info_unit,
62063 { "wlan.vht.tpe.pwr_info.unit.unknown", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62064 "Unknown Max Tx Pwr Unit Interpretation (not interpreted)", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62065
62066 { &ei_ieee80211_missing_data,
62067 { "ieee80211.missing_data", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62068 "No Request subelements in TFS Request", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62069
62070 { &ei_ieee80211_fc_retry,
62071 { "wlan.fc.retry.expert", PI_SEQUENCE0x02000000, PI_NOTE0x00400000,
62072 "Retransmission (retry)", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62073
62074 { &ei_ieee80211_tag_measure_request_unknown,
62075 { "wlan.measure.req.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62076 "Undecoded Measurement Request type (or subtype), Contact Wireshark developers if you want this supported", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62077
62078 { &ei_ieee80211_tag_measure_request_beacon_unknown,
62079 { "wlan.measure.req.beacon.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62080 "Unknown Measure RequestData (not interpreted)", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62081
62082 { &ei_ieee80211_tag_measure_report_unknown,
62083 { "wlan.measure.rep.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62084 "Undecoded Measurement Report type (or subtype), Contact Wireshark developers if you want this supported", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62085
62086 { &ei_ieee80211_tag_measure_report_beacon_unknown,
62087 { "wlan.measure.rep.beacon.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62088 "Unknown Measure Report Data (not interpreted)", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62089
62090 { &ei_ieee80211_tag_measure_report_lci_unknown,
62091 { "wlan.measure.rep.lci.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62092 "Unknown Report LCI Data (not interpreted)", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62093
62094 { &ei_ieee80211_tag_data,
62095 { "wlan.tag.data.undecoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000,
62096 "Dissector for 802.11 IE Tag code not implemented, Contact Wireshark developers if you want this supported", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62097
62098 { &ei_ieee80211_dmg_subtype,
62099 { "wlan.dmg_subtype.bad", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62100 "Bad DMG type/subtype", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62101
62102 { &ei_ieee80211_wfa_60g_attr_len_invalid,
62103 { "wlan.60g.attr.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62104 "Attribute length invalid", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62105
62106 { &ei_ieee80211_vht_action,
62107 { "wlan.vht.action.undecoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000,
62108 "All subtype of VHT Action is not yet supported by Wireshark", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62109
62110 { &ei_ieee80211_mesh_peering_unexpected,
62111 { "wlan.peering.unexpected", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62112 "Unexpected Self-protected action", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62113
62114 { &ei_ieee80211_wfa_60g_unknown_attribute,
62115 { "wlan.attr.unknown", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62116 "Attribute unknown", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62117
62118 { &ei_ieee80211_fcs,
62119 { "wlan.fcs.bad_checksum", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62120 "Bad checksum", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62121
62122 { &ei_ieee80211_mismatched_akm_suite,
62123 { "wlan.rsn.akms.mismatched", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62124 "Mismatched AKMS", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62125
62126 { &ei_ieee80211_vs_routerboard_unexpected_len,
62127 { "wlan.vs.routerboard.unexpected_len", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62128 "Unexpected IE Length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62129
62130 { &ei_ieee80211_vs_sgdsn_serialnumber_invalid_len_val,
62131 { "wlan.vs.sgdsn.tag.serialnumber.invalid_len_val", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62132 "Invalid serial number length value", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62133
62134 { &ei_ieee80211_vs_sgdsn_serialnumber_unexpected_len_val,
62135 { "wlan.vs.sgdsn.tag.serialnumber.unexpected_len_val", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62136 "Unexpected serial number length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62137
62138 { &ei_ieee80211_twt_tear_down_bad_neg_type,
62139 { "wlan.twt.tear_down_bad_neg_type", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62140 "Bad Negotiation type for S1G TWT Flow field in TWT teardown", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62141
62142 { &ei_ieee80211_twt_setup_bad_command,
62143 { "wlan.twt.setup_bad_command", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62144 "This TWT Setup Command is not allowed, check the TWT Request field", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62145
62146 { &ei_ieee80211_twt_bcast_info_no_term,
62147 { "wlan.twt.incorrect_length", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62148 "Incorrect length or missing Last Broadcast Parameter Set field", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62149
62150 { &ei_ieee80211_invalid_control_word,
62151 { "wlan.htc.he.a_control.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62152 "Invalid control word", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62153
62154 { &ei_ieee80211_invalid_control_id,
62155 { "wlan.htc.he.a_control.ctrl_id.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62156 "Invalid control id", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62157
62158 { &ei_ieee80211_invalid_control_length,
62159 { "wlan.htc.he.a_control.ctrl_length.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62160 "Incorrect Control Information Length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62161
62162 { &ei_ieee80211_htc_in_dmg_packet,
62163 { "wlan.htc_in_dmg_packet", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62164 "DMG frame has the +HTC/Order bit set", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62165
62166 { &ei_ieee80211_eht_invalid_subelement,
62167 { "wlan.eht.invalid_subelement", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62168 "Incorrect EHT Sub-element length", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62169
62170 { &ei_ieee80211_eht_invalid_action,
62171 { "wlan.eht.invalid_action", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62172 "Invalid EHT Action field value", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62173
62174 { &ei_ieee80211_eht_invalid_multi_link,
62175 { "wlan.eht.invalid_multi_link", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62176 "Invalid EHT Multi-Link element", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62177
62178 {&ei_ieee80211_eht_invalid_nc_nr,
62179 { "wlan.eht.invalid_nc_nr", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62180 "Invalid NR or NC in EHT MIMO Control", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
}},
62181 };
62182
62183 expert_module_t *expert_ieee80211;
62184
62185 module_t *wlan_module;
62186
62187 memset(&wlan_stats, 0, sizeof wlan_stats);
62188
62189 proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
62190 "IEEE 802.11 Aggregate Data", "wlan_aggregate");
62191 proto_register_field_array(proto_aggregate, aggregate_fields, array_length(aggregate_fields)(sizeof (aggregate_fields) / sizeof (aggregate_fields)[0]));
62192
62193 proto_wlan = proto_register_protocol("IEEE 802.11 wireless LAN", "IEEE 802.11", "wlan");
62194
62195 heur_subdissector_list = register_heur_dissector_list_with_description("wlan_data", "IEEE 802.11 WLAN v0 data", proto_wlan);
62196
62197 /* Created to remove Decode As confusion */
62198 proto_centrino = proto_register_protocol("IEEE 802.11 wireless LAN (Centrino)", "IEEE 802.11 (Centrino)", "wlan_centrino");
62199 proto_register_field_array(proto_wlan, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
62200 centrino_handle = register_dissector("wlan_centrino", dissect_ieee80211_centrino, proto_centrino );
62201
62202 proto_wlan_ext = proto_register_protocol("IEEE 802.11 wireless LAN extension frame",
62203 "IEEE 802.11 EXT", "wlan_ext");
62204
62205 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
62206
62207 expert_ieee80211 = expert_register_protocol(proto_wlan);
62208 expert_register_field_array(expert_ieee80211, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
62209
62210 /*
62211 * Create the hash table we will use for holding STA properties that
62212 * track newer protocol variants like S1G, DMG, etc. Use the existing
62213 * retransmit hash and equal functions.
62214 */
62215 sta_prop_hash = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(),
62216 sta_prop_hash_fn, sta_prop_equal_fn);
62217
62218 ieee80211_handle = register_dissector("wlan", dissect_ieee80211, proto_wlan);
62219 register_dissector("wlan_withfcs", dissect_ieee80211_withfcs, proto_wlan);
62220 wlan_withoutfcs_handle = register_dissector("wlan_withoutfcs", dissect_ieee80211_withoutfcs, proto_wlan);
62221 register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
62222 register_dissector("wlan_noqos", dissect_ieee80211_noqos, proto_wlan);
62223
62224 register_capture_dissector("ieee80211", capture_ieee80211, proto_wlan);
62225 register_capture_dissector("ieee80211_datapad", capture_ieee80211_datapad, proto_wlan);
62226
62227 reassembly_table_register(&wlan_reassembly_table,
62228 &addresses_reassembly_table_functions);
62229 register_init_routine(wlan_retransmit_init);
62230 reassembly_table_register(&gas_reassembly_table,
62231 &addresses_reassembly_table_functions);
62232
62233 wlan_tap = register_tap("wlan");
62234 register_conversation_table(proto_wlan, true1, wlan_conversation_packet, wlan_endpoint_packet);
62235
62236 wlan_address_type = address_type_dissector_register("AT_ETHER_WLAN", "WLAN Address", ether_to_str, ether_str_len, NULL((void*)0), wlan_col_filter_str,
62237 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62238 wlan_bssid_address_type = address_type_dissector_register("AT_ETHER_BSSID", "WLAN BSSID Address", ether_to_str, ether_str_len, NULL((void*)0), wlan_bssid_col_filter_str,
62239 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62240
62241 wlan_ra_ta_address_type = address_type_dissector_register("AT_ETHER_RA_TA", "WLAN RA/TA Address", ether_to_str, ether_str_len, NULL((void*)0), wlan_ra_ta_col_filter_str,
62242 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62243
62244 wlan_aid_address_type = address_type_dissector_register("AT_WLAN_AID", "WLAN Association ID", wlan_aid_to_str, wlan_aid_str_len, NULL((void*)0), wlan_aid_col_filter_str, NULL((void*)0), NULL((void*)0), NULL((void*)0));
62245
62246 tagged_field_table = register_dissector_table("wlan.tag.number", "IEEE 802.11 Fields", proto_wlan, FT_UINT8, BASE_DEC);
62247 vendor_specific_action_table = register_dissector_table("wlan.action.vendor_specific", "IEEE802.11 Vendor Specific Action", proto_wlan, FT_UINT24, BASE_HEX);
62248 wifi_alliance_action_subtype_table = register_dissector_table("wlan.action.wifi_alliance.subtype", "Wi-Fi Alliance Action Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62249 vendor_specific_anqp_info_table = register_dissector_table("wlan.anqp.vendor_specific", "IEEE802.11 ANQP information Vendor Specific", proto_wlan, FT_UINT24, BASE_HEX);
62250 wifi_alliance_anqp_info_table = register_dissector_table("wlan.anqp.wifi_alliance.subtype", "Wi-Fi Alliance ANQP Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62251 wifi_alliance_ie_table = register_dissector_table("wlan.ie.wifi_alliance.subtype", "Wi-Fi Alliance IE Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62252 wifi_alliance_public_action_table = register_dissector_table("wlan.pa.wifi_alliance.subtype", "Wi-Fi Alliance PA Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62253
62254 /* Register configuration options */
62255 wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
62256 prefs_register_bool_preference(wlan_module, "defragment",
62257 "Reassemble fragmented 802.11 datagrams",
62258 "Whether fragmented 802.11 datagrams should be reassembled",
62259 &wlan_defragment);
62260
62261 prefs_register_bool_preference(wlan_module, "ignore_draft_ht",
62262 "Ignore vendor-specific HT elements",
62263 "Don't dissect 802.11n draft HT elements (which might contain duplicate information).",
62264 &wlan_ignore_draft_ht);
62265
62266 prefs_register_bool_preference(wlan_module, "retransmitted",
62267 "Call subdissector for retransmitted 802.11 frames",
62268 "Whether retransmitted 802.11 frames should be subdissected",
62269 &wlan_subdissector);
62270
62271 prefs_register_bool_preference(wlan_module, "check_fcs",
62272 "Assume packets have FCS",
62273 "Some 802.11 cards include the FCS at the end of a packet, others do not.",
62274 &wlan_check_fcs);
62275
62276 prefs_register_bool_preference(wlan_module, "check_checksum",
62277 "Validate the FCS checksum if possible",
62278 "Whether to validate the FCS checksum or not.",
62279 &wlan_check_checksum);
62280
62281 prefs_register_enum_preference(wlan_module, "ignore_wep",
62282 "Ignore the Protection bit",
62283 "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
62284 "and some also leave the IV (initialization vector).",
62285 &wlan_ignore_prot, wlan_ignore_prot_options, true1);
62286
62287 prefs_register_bool_preference(wlan_module, "wpa_key_mic_len_enable",
62288 "Enable WPA Key MIC Length override",
62289 "Whether to enable MIC Length override or not.",
62290 &wlan_key_mic_len_enable);
62291
62292 prefs_register_uint_preference(wlan_module, "wpa_key_mic_len",
62293 "WPA Key MIC Length override",
62294 "Some Key MIC lengths are greater than 16 bytes, so set the length you require",
62295 10, &wlan_key_mic_len);
62296
62297 prefs_register_bool_preference(wlan_module, "treat_as_s1g",
62298 "Treat as S1G", "Treat all WiFi packets as S1G",
62299 &treat_as_s1g);
62300
62301 prefs_register_obsolete_preference(wlan_module, "wep_keys");
62302
62303 prefs_register_bool_preference(wlan_module, "enable_decryption",
62304 "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
62305 &enable_decryption);
62306
62307 wep_uat = uat_new("WEP and WPA Decryption Keys",
62308 sizeof(uat_wep_key_record_t), /* record size */
62309 "80211_keys", /* filename */
62310 true1, /* from_profile */
62311 &uat_wep_key_records, /* data_ptr */
62312 &num_wepkeys_uat, /* numitems_ptr */
62313 UAT_AFFECTS_DISSECTION0x00000001, /* affects dissection of packets, but not set of named fields */
62314 "Ch80211Keys", /* help */
62315 uat_wep_key_record_copy_cb, /* copy callback */
62316 uat_wep_key_record_update_cb, /* update callback */
62317 uat_wep_key_record_free_cb, /* free callback */
62318 init_wepkeys, /* post update callback - update the WEP/WPA keys */
62319 NULL((void*)0), /* reset callback */
62320 wep_uat_flds); /* UAT field definitions */
62321
62322 prefs_register_uat_preference(wlan_module,
62323 "wep_key_table",
62324 "Decryption keys",
62325 "WEP and pre-shared WPA keys\n"
62326 "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
62327 "010203040506070809101111213 (104/128-bit WEP),\n"
62328 "MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
62329 "0102030405...6061626364 (WPA + 256-bit key)."
62330 "Invalid keys will be ignored.",
62331 wep_uat);
62332}
62333
62334void
62335proto_register_wlan_rsna_eapol(void)
62336{
62337
62338 static hf_register_info hf[] = {
62339 {&hf_wlan_rsna_eapol_wpa_keydes_msgnr,
62340 {"Message number", "wlan_rsna_eapol.keydes.msgnr",
62341 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
62342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62343
62344 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
62345 {"Key Information", "wlan_rsna_eapol.keydes.key_info",
62346 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
62347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62348
62349 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
62350 {"Key Descriptor Version", "wlan_rsna_eapol.keydes.key_info.keydes_version",
62351 FT_UINT16, BASE_DEC, VALS(keydes_version_vals)((0 ? (const struct _value_string*)0 : ((keydes_version_vals)
)))
, KEY_INFO_KEYDES_VERSION_MASK0x0007,
62352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62353
62354 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
62355 {"Key Type", "wlan_rsna_eapol.keydes.key_info.key_type",
62356 FT_BOOLEAN, 16, TFS(&keyinfo_key_type_tfs)((0 ? (const struct true_false_string*)0 : ((&keyinfo_key_type_tfs
))))
, KEY_INFO_KEY_TYPE_MASK0x0008,
62357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62358
62359 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
62360 {"Key Index", "wlan_rsna_eapol.keydes.key_info.key_index",
62361 FT_UINT16, BASE_DEC, NULL((void*)0), KEY_INFO_KEY_INDEX_MASK0x0030,
62362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62363
62364 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
62365 {"Install", "wlan_rsna_eapol.keydes.key_info.install",
62366 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_INSTALL_MASK0x0040,
62367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62368
62369 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
62370 {"Key ACK", "wlan_rsna_eapol.keydes.key_info.key_ack",
62371 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_KEY_ACK_MASK0x0080,
62372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62373
62374 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
62375 {"Key MIC", "wlan_rsna_eapol.keydes.key_info.key_mic",
62376 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_KEY_MIC_MASK0x0100,
62377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62378
62379 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
62380 {"Secure", "wlan_rsna_eapol.keydes.key_info.secure",
62381 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_SECURE_MASK0x0200,
62382 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62383
62384 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
62385 {"Error", "wlan_rsna_eapol.keydes.key_info.error",
62386 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_ERROR_MASK0x0400,
62387 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62388
62389 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
62390 {"Request", "wlan_rsna_eapol.keydes.key_info.request",
62391 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_REQUEST_MASK0x0800,
62392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62393
62394 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
62395 {"Encrypted Key Data", "wlan_rsna_eapol.keydes.key_info.encrypted_key_data",
62396 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000,
62397 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62398
62399 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
62400 {"SMK Message", "wlan_rsna_eapol.keydes.key_info.smk_message",
62401 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_SMK_MESSAGE_MASK0x2000,
62402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62403
62404 {&hf_wlan_rsna_eapol_keydes_key_len,
62405 {"Key Length", "eapol.keydes.key_len",
62406 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
62407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62408
62409 {&hf_wlan_rsna_eapol_keydes_replay_counter,
62410 {"Replay Counter", "eapol.keydes.replay_counter",
62411 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
62412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62413
62414 {&hf_wlan_rsna_eapol_keydes_key_iv,
62415 {"Key IV", "eapol.keydes.key_iv",
62416 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62418
62419 {&hf_wlan_rsna_eapol_wpa_keydes_nonce,
62420 {"WPA Key Nonce", "wlan_rsna_eapol.keydes.nonce",
62421 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62423
62424 {&hf_wlan_rsna_eapol_wpa_keydes_rsc,
62425 {"WPA Key RSC", "wlan_rsna_eapol.keydes.rsc",
62426 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62427 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62428
62429 {&hf_wlan_rsna_eapol_wpa_keydes_id,
62430 {"WPA Key ID", "wlan_rsna_eapol.keydes.id",
62431 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62433
62434 {&hf_wlan_rsna_eapol_wpa_keydes_mic,
62435 {"WPA Key MIC", "wlan_rsna_eapol.keydes.mic",
62436 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62438
62439 {&hf_wlan_rsna_eapol_wpa_keydes_data_len,
62440 {"WPA Key Data Length", "wlan_rsna_eapol.keydes.data_len",
62441 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
62442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62443
62444 {&hf_wlan_rsna_eapol_wpa_keydes_data,
62445 {"WPA Key Data", "wlan_rsna_eapol.keydes.data",
62446 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62448
62449 {&hf_wlan_rsna_eapol_wpa_keydes_padding,
62450 {"WPA Key Data Padding", "wlan_rsna_eapol.keydes.padding",
62451 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62453
62454 {&hf_wlan_rsna_eapol_wpa_extraneous,
62455 {"WPA EAPOL Extraneous Data", "wlan_rsna_eapol.extraneous",
62456 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62457 };
62458
62459 static int *ett[] = {
62460 &ett_keyinfo,
62461 &ett_wlan_rsna_eapol_keydes_data,
62462 };
62463
62464 proto_wlan_rsna_eapol = proto_register_protocol("IEEE 802.11 RSNA EAPOL key",
62465 "802.11 RSNA EAPOL", "wlan_rsna_eapol");
62466 proto_register_field_array(proto_wlan_rsna_eapol, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
62467
62468 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
62469}
62470
62471void
62472proto_reg_handoff_ieee80211(void)
62473{
62474 dissector_handle_t data_encap_handle;
62475 dissector_handle_t wlan_rsna_eapol_wpa_key_handle, wlan_rsna_eapol_rsn_key_handle;
62476 capture_dissector_handle_t ieee80211_cap_handle;
62477
62478 dissector_add_for_decode_as_with_preference("udp.port", ieee80211_handle);
62479 /*
62480 * Get handles for the 802.2 (LPD) LLC, EPD LLC, IPX and Ethernet
62481 * dissectors.
62482 */
62483 llc_handle = find_dissector_add_dependency("llc", proto_wlan);
62484 epd_llc_handle = find_dissector_add_dependency("epd_llc", proto_wlan);
62485 ipx_handle = find_dissector_add_dependency("ipx", proto_wlan);
62486 eth_withoutfcs_handle = find_dissector_add_dependency("eth_withoutfcs", proto_wlan);
62487
62488 proto_eapol = proto_get_id_by_filter_name("eapol");
62489
62490 /*
62491 * Get the Ethertype dissector table.
62492 */
62493 ethertype_subdissector_table = find_dissector_table("ethertype");
62494
62495 llc_cap_handle = find_capture_dissector("llc");
62496 ipx_cap_handle = find_capture_dissector("ipx");
62497
62498 dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_1120, ieee80211_handle);
62499
62500 dissector_add_uint("ethertype", ETHERTYPE_CENTRINO_PROMISC0x2452, centrino_handle);
62501
62502 ieee80211_cap_handle = find_capture_dissector("ieee80211");
62503 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_1120, ieee80211_cap_handle);
62504 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11_WITH_RADIO22, ieee80211_cap_handle);
62505 capture_dissector_add_uint("ppi", 105 /* DLT_DLT_IEEE802_11 */, ieee80211_cap_handle);
62506
62507 /* Register handoff to Aruba GRE */
62508 dissector_add_uint("gre.proto", GRE_ARUBA_82000x8200, wlan_withoutfcs_handle);
62509 dissector_add_uint("gre.proto", GRE_ARUBA_82100x8210, wlan_withoutfcs_handle);
62510 dissector_add_uint("gre.proto", GRE_ARUBA_82200x8220, wlan_withoutfcs_handle);
62511 dissector_add_uint("gre.proto", GRE_ARUBA_82300x8230, wlan_withoutfcs_handle);
62512 dissector_add_uint("gre.proto", GRE_ARUBA_82400x8240, wlan_withoutfcs_handle);
62513 dissector_add_uint("gre.proto", GRE_ARUBA_82500x8250, wlan_withoutfcs_handle);
62514 dissector_add_uint("gre.proto", GRE_ARUBA_82600x8260, wlan_withoutfcs_handle);
62515 dissector_add_uint("gre.proto", GRE_ARUBA_82700x8270, wlan_withoutfcs_handle);
62516 dissector_add_uint("gre.proto", GRE_ARUBA_82800x8280, wlan_withoutfcs_handle);
62517 dissector_add_uint("gre.proto", GRE_ARUBA_82900x8290, wlan_withoutfcs_handle);
62518 dissector_add_uint("gre.proto", GRE_ARUBA_82A00x82A0, wlan_withoutfcs_handle);
62519 dissector_add_uint("gre.proto", GRE_ARUBA_82B00x82B0, wlan_withoutfcs_handle);
62520 dissector_add_uint("gre.proto", GRE_ARUBA_82C00x82C0, wlan_withoutfcs_handle);
62521 dissector_add_uint("gre.proto", GRE_ARUBA_82D00x82D0, wlan_withoutfcs_handle);
62522 dissector_add_uint("gre.proto", GRE_ARUBA_82E00x82E0, wlan_withoutfcs_handle);
62523 dissector_add_uint("gre.proto", GRE_ARUBA_82F00x82F0, wlan_withoutfcs_handle);
62524 dissector_add_uint("gre.proto", GRE_ARUBA_83000x8300, wlan_withoutfcs_handle);
62525 dissector_add_uint("gre.proto", GRE_ARUBA_83100x8310, wlan_withoutfcs_handle);
62526 dissector_add_uint("gre.proto", GRE_ARUBA_83200x8320, wlan_withoutfcs_handle);
62527 dissector_add_uint("gre.proto", GRE_ARUBA_83300x8330, wlan_withoutfcs_handle);
62528 dissector_add_uint("gre.proto", GRE_ARUBA_83400x8340, wlan_withoutfcs_handle);
62529 dissector_add_uint("gre.proto", GRE_ARUBA_83500x8350, wlan_withoutfcs_handle);
62530 dissector_add_uint("gre.proto", GRE_ARUBA_83600x8360, wlan_withoutfcs_handle);
62531 dissector_add_uint("gre.proto", GRE_ARUBA_83700x8370, wlan_withoutfcs_handle);
62532 dissector_add_uint("gre.proto", GRE_ARUBA_91000x9100, wlan_withoutfcs_handle);
62533 dissector_add_uint("gre.proto", GRE_ARUBA_91100x9110, wlan_withoutfcs_handle);
62534 dissector_add_uint("gre.proto", GRE_ARUBA_91200x9120, wlan_withoutfcs_handle);
62535 dissector_add_uint("gre.proto", GRE_ARUBA_91300x9130, wlan_withoutfcs_handle);
62536 dissector_add_uint("gre.proto", GRE_ARUBA_91400x9140, wlan_withoutfcs_handle);
62537 dissector_add_uint("gre.proto", GRE_ARUBA_91500x9150, wlan_withoutfcs_handle);
62538 dissector_add_uint("gre.proto", GRE_ARUBA_91600x9160, wlan_withoutfcs_handle);
62539 dissector_add_uint("gre.proto", GRE_ARUBA_91700x9170, wlan_withoutfcs_handle);
62540 dissector_add_uint("gre.proto", GRE_ARUBA_91800x9180, wlan_withoutfcs_handle);
62541 dissector_add_uint("gre.proto", GRE_ARUBA_91900x9190, wlan_withoutfcs_handle);
62542 dissector_add_uint("gre.proto", GRE_ARUBA_91A00x91A0, wlan_withoutfcs_handle);
62543 dissector_add_uint("gre.proto", GRE_ARUBA_91B00x91B0, wlan_withoutfcs_handle);
62544 dissector_add_uint("gre.proto", GRE_ARUBA_91C00x91C0, wlan_withoutfcs_handle);
62545 dissector_add_uint("gre.proto", GRE_ARUBA_91D00x91D0, wlan_withoutfcs_handle);
62546 dissector_add_uint("gre.proto", GRE_ARUBA_91E00x91E0, wlan_withoutfcs_handle);
62547 dissector_add_uint("gre.proto", GRE_ARUBA_91F00x91F0, wlan_withoutfcs_handle);
62548
62549 data_encap_handle = create_dissector_handle(dissect_data_encap, proto_wlan);
62550 dissector_add_uint("ethertype", ETHERTYPE_IEEE80211_DATA_ENCAP0x890d,
62551 data_encap_handle);
62552
62553 /*
62554 * EAPOL key descriptor types.
62555 */
62556 wlan_rsna_eapol_wpa_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
62557 proto_wlan_rsna_eapol);
62558 dissector_add_uint("eapol.keydes.type", EAPOL_WPA_KEY254, wlan_rsna_eapol_wpa_key_handle);
62559 wlan_rsna_eapol_rsn_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
62560 proto_wlan_rsna_eapol);
62561 dissector_add_uint("eapol.keydes.type", EAPOL_RSN_KEY2, wlan_rsna_eapol_rsn_key_handle);
62562
62563 dissector_add_uint("sflow_245.header_protocol", SFLOW_5_HEADER_80211_MAC15, wlan_withoutfcs_handle);
62564
62565 /* Tagged fields */
62566 /* XXX - for now, do it without pinos so the protocol is -1 */
62567 dissector_add_uint("wlan.tag.number", TAG_SSID0, create_dissector_handle(ieee80211_tag_ssid, -1));
62568 dissector_add_uint("wlan.tag.number", TAG_SUPP_RATES1, create_dissector_handle(ieee80211_tag_supp_rates, -1));
62569 dissector_add_uint("wlan.tag.number", TAG_FH_PARAMETER2, create_dissector_handle(ieee80211_tag_fh_parameter, -1));
62570 dissector_add_uint("wlan.tag.number", TAG_DS_PARAMETER3, create_dissector_handle(ieee80211_tag_ds_parameter, -1));
62571 dissector_add_uint("wlan.tag.number", TAG_CF_PARAMETER4, create_dissector_handle(ieee80211_tag_cf_parameter, -1));
62572 dissector_add_uint("wlan.tag.number", TAG_TIM5, create_dissector_handle(ieee80211_tag_tim, -1));
62573 dissector_add_uint("wlan.tag.number", TAG_IBSS_PARAMETER6, create_dissector_handle(ieee80211_tag_ibss_parameter, -1));
62574 dissector_add_uint("wlan.tag.number", TAG_COUNTRY_INFO7, create_dissector_handle(ieee80211_tag_country_info, -1));
62575 dissector_add_uint("wlan.tag.number", TAG_FH_HOPPING_PARAMETER8, create_dissector_handle(ieee80211_tag_fh_hopping_parameter, -1));
62576 dissector_add_uint("wlan.tag.number", TAG_FH_HOPPING_TABLE9, create_dissector_handle(ieee80211_tag_fh_hopping_table, -1));
62577 dissector_add_uint("wlan.tag.number", TAG_REQUEST10, create_dissector_handle(ieee80211_tag_request, -1));
62578 dissector_add_uint("wlan.tag.number", TAG_QBSS_LOAD11, create_dissector_handle(ieee80211_tag_qbss_load, -1));
62579 dissector_add_uint("wlan.tag.number", TAG_EDCA_PARAM_SET12, create_dissector_handle(ieee80211_tag_edca_param_set, -1));
62580 dissector_add_uint("wlan.tag.number", TAG_TSPEC13, create_dissector_handle(ieee80211_tag_tspec, -1));
62581 dissector_add_uint("wlan.tag.number", TAG_TCLAS14, create_dissector_handle(ieee80211_tag_tclas, -1));
62582 dissector_add_uint("wlan.tag.number", TAG_SCHEDULE15, create_dissector_handle(ieee80211_tag_schedule, -1));
62583 dissector_add_uint("wlan.tag.number", TAG_CHALLENGE_TEXT16, create_dissector_handle(ieee80211_tag_challenge_text, -1));
62584 dissector_add_uint("wlan.tag.number", TAG_POWER_CONSTRAINT32, create_dissector_handle(ieee80211_tag_power_constraint, -1));
62585 dissector_add_uint("wlan.tag.number", TAG_POWER_CAPABILITY33, create_dissector_handle(ieee80211_tag_power_capability, -1));
62586 dissector_add_uint("wlan.tag.number", TAG_TPC_REQUEST34, create_dissector_handle(ieee80211_tag_tpc_request, -1));
62587 dissector_add_uint("wlan.tag.number", TAG_TPC_REPORT35, create_dissector_handle(ieee80211_tag_tpc_report, -1));
62588 dissector_add_uint("wlan.tag.number", TAG_SUPPORTED_CHANNELS36, create_dissector_handle(ieee80211_tag_supported_channels, -1));
62589 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_ANN37, create_dissector_handle(ieee80211_tag_switch_ann, -1));
62590 dissector_add_uint("wlan.tag.number", TAG_MEASURE_REQ38, create_dissector_handle(ieee80211_tag_measure_req, -1));
62591 dissector_add_uint("wlan.tag.number", TAG_MEASURE_REP39, create_dissector_handle(ieee80211_tag_measure_rep, -1));
62592 dissector_add_uint("wlan.tag.number", TAG_QUIET40, create_dissector_handle(ieee80211_tag_quiet, -1));
62593 dissector_add_uint("wlan.tag.number", TAG_IBSS_DFS41, create_dissector_handle(ieee80211_tag_ibss_dfs, -1));
62594 dissector_add_uint("wlan.tag.number", TAG_ERP_INFO42, create_dissector_handle(ieee80211_tag_erp_info, -1));
62595 dissector_add_uint("wlan.tag.number", TAG_ERP_INFO_OLD47, create_dissector_handle(ieee80211_tag_erp_info, -1));
62596 dissector_add_uint("wlan.tag.number", TAG_TS_DELAY43, create_dissector_handle(ieee80211_tag_ts_delay, -1));
62597 dissector_add_uint("wlan.tag.number", TAG_TCLAS_PROCESS44, create_dissector_handle(ieee80211_tag_tclas_process, -1));
62598 dissector_add_uint("wlan.tag.number", TAG_QOS_CAPABILITY46, create_dissector_handle(ieee80211_tag_qos_capability, -1));
62599 dissector_add_uint("wlan.tag.number", TAG_RSN_IE48, create_dissector_handle(ieee80211_tag_rsn_ie, -1));
62600 dissector_add_uint("wlan.tag.number", TAG_EXT_SUPP_RATES50, create_dissector_handle(ieee80211_tag_ext_supp_rates, -1));
62601 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_CAPABILITIES127, create_dissector_handle(dissect_extended_capabilities_ie, -1));
62602 dissector_add_uint("wlan.tag.number", TAG_CISCO_CCX1_CKIP133, create_dissector_handle(ieee80211_tag_cisco_ccx1_ckip, -1));
62603 dissector_add_uint("wlan.tag.number", TAG_VHT_CAPABILITY191, create_dissector_handle(dissect_vht_capability_ie, -1));
62604 dissector_add_uint("wlan.tag.number", TAG_VHT_OPERATION192, create_dissector_handle(dissect_vht_operation_ie, -1));
62605 dissector_add_uint("wlan.tag.number", TAG_EXT_BSS_LOAD193, create_dissector_handle(dissect_ext_bss_load, -1));
62606 dissector_add_uint("wlan.tag.number", TAG_WIDE_BW_CHANNEL_SWITCH194, create_dissector_handle(dissect_wide_bw_channel_switch, -1));
62607 dissector_add_uint("wlan.tag.number", TAG_TX_PWR_ENVELOPE195, create_dissector_handle(dissect_vht_tx_pwr_envelope, -1));
62608 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_WRAPPER196, create_dissector_handle(dissect_channel_switch_wrapper, -1));
62609 dissector_add_uint("wlan.tag.number", TAG_OPERATING_MODE_NOTIFICATION199, create_dissector_handle(dissect_operating_mode_notification, -1));
62610 dissector_add_uint("wlan.tag.number", TAG_REDUCED_NEIGHBOR_REPORT201, create_dissector_handle(dissect_reduced_neighbor_report, -1));
62611 dissector_add_uint("wlan.tag.number", TAG_FINE_TIME_MEASUREMENT_PARAM206, create_dissector_handle(dissect_ftm_params, -1));
62612 dissector_add_uint("wlan.tag.number", TAG_S1G_CAPABILITIES217, create_dissector_handle(dissect_s1g_capabilities, -1));
62613 dissector_add_uint("wlan.tag.number", TAG_SUBCHANNEL_SELECTIVE_TRANSMISSION220, create_dissector_handle(dissect_subchannel_selective_transmission, -1));
62614 dissector_add_uint("wlan.tag.number", TAG_S1G_OPEN_LOOP_LINK_MARGIN_INDEX207, create_dissector_handle(dissect_s1g_open_loop_link_margin_index, -1));
62615 dissector_add_uint("wlan.tag.number", TAG_RPS208, create_dissector_handle(dissect_rps, -1));
62616 dissector_add_uint("wlan.tag.number", TAG_PAGE_SLICE209, create_dissector_handle(dissect_page_slice, -1));
62617 dissector_add_uint("wlan.tag.number", TAG_AID_REQUEST210, create_dissector_handle(dissect_aid_request, -1));
62618 dissector_add_uint("wlan.tag.number", TAG_AID_RESPONSE211, create_dissector_handle(dissect_aid_response, -1));
62619 dissector_add_uint("wlan.tag.number", TAG_S1G_SECTOR_OPERATION212, create_dissector_handle(dissect_s1g_sector_operation, -1));
62620 dissector_add_uint("wlan.tag.number", TAG_S1G_BEACON_COMPATIBILITY213, create_dissector_handle(dissect_s1g_beacon_compatibility, -1));
62621 dissector_add_uint("wlan.tag.number", TAG_SHORT_BEACON_INTERVAL214, create_dissector_handle(dissect_s1g_short_beacon_interval, -1));
62622 dissector_add_uint("wlan.tag.number", TAG_CHANGE_SEQUENCE215, create_dissector_handle(dissect_s1g_change_sequence, -1));
62623 /* 7.3.2.26 Vendor Specific information element (221) */
62624 dissector_add_uint("wlan.tag.number", TAG_VENDOR_SPECIFIC_IE221, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
62625 dissector_add_uint("wlan.tag.number", TAG_AUTHENTICATION_CONTROL222, create_dissector_handle(dissect_authentication_control, -1));
62626 dissector_add_uint("wlan.tag.number", TAG_TSF_TIMER_ACCURACY223, create_dissector_handle(dissect_tsf_timer_accuracy, -1));
62627 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY224, create_dissector_handle(dissect_s1g_relay, -1));
62628 dissector_add_uint("wlan.tag.number", TAG_REACHABLE_ADDRESS225, create_dissector_handle(dissect_reachable_address, -1));
62629 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY_DISCOVERY226, create_dissector_handle(dissect_s1g_relay_discovery, -1));
62630 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY_ACTIVATION236, create_dissector_handle(dissect_s1g_relay_activation, -1));
62631 dissector_add_uint("wlan.tag.number", TAG_AID_ANNOUNCEMENT228, create_dissector_handle(dissect_aid_announcement, -1));
62632 dissector_add_uint("wlan.tag.number", TAG_PV1_PROBE_RESPONSE_OPTION229, create_dissector_handle(dissect_pv1_probe_response_option, -1));
62633 dissector_add_uint("wlan.tag.number", TAG_EL_OPERATION230, create_dissector_handle(dissect_el_operation, -1));
62634 dissector_add_uint("wlan.tag.number", TAG_SECTORIZED_GROUP_ID_LIST231, create_dissector_handle(dissect_sectorized_group_id_list, -1));
62635 dissector_add_uint("wlan.tag.number", TAG_S1G_OPERATION232, create_dissector_handle(dissect_s1g_operation, -1));
62636 dissector_add_uint("wlan.tag.number", TAG_HEADER_COMPRESSION233, create_dissector_handle(dissect_header_compression, -1));
62637 dissector_add_uint("wlan.tag.number", TAG_SST_OPERATION234, create_dissector_handle(dissect_sst_operation, -1));
62638 dissector_add_uint("wlan.tag.number", TAG_MAD235, create_dissector_handle(dissect_max_away_duration, -1));
62639 /* This Cisco proprietary IE seems to mimic 221 */
62640 dissector_add_uint("wlan.tag.number", TAG_CISCO_VENDOR_SPECIFIC150, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
62641 dissector_add_uint("wlan.tag.number", TAG_SYMBOL_PROPRIETARY173, create_dissector_handle(ieee80211_tag_symbol_proprietary_ie, -1));
62642 dissector_add_uint("wlan.tag.number", TAG_MOBILITY_DOMAIN54, create_dissector_handle(dissect_mobility_domain, -1));
62643 dissector_add_uint("wlan.tag.number", TAG_FAST_BSS_TRANSITION55, create_dissector_handle(dissect_fast_bss_transition, -1));
62644 dissector_add_uint("wlan.tag.number", TAG_MMIE76, create_dissector_handle(dissect_mmie, -1));
62645 dissector_add_uint("wlan.tag.number", TAG_NO_BSSID_CAPABILITY83, create_dissector_handle(dissect_no_bssid_capability, -1));
62646 dissector_add_uint("wlan.tag.number", TAG_SSID_LIST84, create_dissector_handle(dissect_ssid_list, -1));
62647 dissector_add_uint("wlan.tag.number", TAG_MULTIPLE_BSSID_INDEX85, create_dissector_handle(dissect_multiple_bssid_index, -1));
62648 dissector_add_uint("wlan.tag.number", TAG_TIME_ZONE98, create_dissector_handle(dissect_time_zone, -1));
62649 dissector_add_uint("wlan.tag.number", TAG_TIMEOUT_INTERVAL56, create_dissector_handle(dissect_timeout_interval, -1));
62650 dissector_add_uint("wlan.tag.number", TAG_RIC_DATA57, create_dissector_handle(dissect_ric_data, -1));
62651 dissector_add_uint("wlan.tag.number", TAG_LINK_IDENTIFIER101, create_dissector_handle(dissect_link_identifier, -1));
62652 dissector_add_uint("wlan.tag.number", TAG_WAKEUP_SCHEDULE102, create_dissector_handle(dissect_wakeup_schedule, -1));
62653 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_TIMING104, create_dissector_handle(dissect_channel_switch_timing, -1));
62654 dissector_add_uint("wlan.tag.number", TAG_PTI_CONTROL105, create_dissector_handle(dissect_pti_control, -1));
62655 dissector_add_uint("wlan.tag.number", TAG_PU_BUFFER_STATUS106, create_dissector_handle(dissect_pu_buffer_status, -1));
62656 dissector_add_uint("wlan.tag.number", TAG_HT_CAPABILITY45, create_dissector_handle(dissect_ht_capability_ie, -1));
62657 dissector_add_uint("wlan.tag.number", TAG_HT_OPERATION61, create_dissector_handle(dissect_ht_operation_ie, -1));
62658 dissector_add_uint("wlan.tag.number", TAG_SECONDARY_CHANNEL_OFFSET62, create_dissector_handle(dissect_secondary_channel_offset_ie, -1));
62659 dissector_add_uint("wlan.tag.number", TAG_RCPI53, create_dissector_handle(dissect_rcpi_ie, -1));
62660 dissector_add_uint("wlan.tag.number", TAG_BSS_AVG_ACCESS_DELAY63, create_dissector_handle(dissect_bss_avg_access_delay_ie, -1));
62661 dissector_add_uint("wlan.tag.number", TAG_ANTENNA64, create_dissector_handle(dissect_antenna_ie, -1));
62662 dissector_add_uint("wlan.tag.number", TAG_RSNI65, create_dissector_handle(dissect_rsni_ie, -1));
62663 dissector_add_uint("wlan.tag.number", TAG_MEASURE_PILOT_TRANS66, create_dissector_handle(dissect_measurement_pilot_trans_ie, -1));
62664 dissector_add_uint("wlan.tag.number", TAG_BSS_AVB_ADM_CAPACITY67, create_dissector_handle(dissect_bss_available_admission_capacity_ie, -1));
62665 dissector_add_uint("wlan.tag.number", TAG_IE_68_CONFLICT68, create_dissector_handle(ieee80211_tag_ie_68_conflict, -1));
62666 dissector_add_uint("wlan.tag.number", TAG_BSS_MAX_IDLE_PERIOD90, create_dissector_handle(dissect_bss_max_idle_period, -1));
62667 dissector_add_uint("wlan.tag.number", TAG_TFS_REQUEST91, create_dissector_handle(dissect_tfs_request, -1));
62668 dissector_add_uint("wlan.tag.number", TAG_TFS_RESPONSE92, create_dissector_handle(dissect_tfs_response, -1));
62669 dissector_add_uint("wlan.tag.number", TAG_WNM_SLEEP_MODE93, create_dissector_handle(dissect_wnm_sleep_mode, -1));
62670 dissector_add_uint("wlan.tag.number", TAG_TIME_ADV69, create_dissector_handle(dissect_time_adv, -1));
62671 dissector_add_uint("wlan.tag.number", TAG_RM_ENABLED_CAPABILITY70, create_dissector_handle(dissect_rm_enabled_capabilities_ie, -1));
62672 dissector_add_uint("wlan.tag.number", TAG_MULTIPLE_BSSID71, create_dissector_handle(dissect_multiple_bssid_ie, -1));
62673 dissector_add_uint("wlan.tag.number", TAG_20_40_BSS_CO_EX72, create_dissector_handle(dissect_20_40_bss_coexistence, -1));
62674 dissector_add_uint("wlan.tag.number", TAG_20_40_BSS_INTOL_CH_REP73, create_dissector_handle(dissect_20_40_bss_intolerant, -1));
62675 dissector_add_uint("wlan.tag.number", TAG_OVERLAP_BSS_SCAN_PAR74, create_dissector_handle(dissect_overlap_bss_scan_par, -1));
62676 dissector_add_uint("wlan.tag.number", TAG_RIC_DESCRIPTOR75, create_dissector_handle(dissect_ric_descriptor, -1));
62677 dissector_add_uint("wlan.tag.number", TAG_MESH_PEERING_MGMT117, create_dissector_handle(ieee80211_tag_mesh_peering_mgmt, -1));
62678 dissector_add_uint("wlan.tag.number", TAG_MESH_CONFIGURATION113, create_dissector_handle(ieee80211_tag_mesh_configuration, -1));
62679 dissector_add_uint("wlan.tag.number", TAG_MESH_ID114, create_dissector_handle(ieee80211_tag_mesh_id, -1));
62680 dissector_add_uint("wlan.tag.number", TAG_BEACON_TIMING120, create_dissector_handle(ieee80211_tag_beacon_timing, -1));
62681 dissector_add_uint("wlan.tag.number", TAG_GANN125, create_dissector_handle(ieee80211_tag_gann, -1));
62682 dissector_add_uint("wlan.tag.number", TAG_MESH_PREQ130, create_dissector_handle(ieee80211_tag_mesh_preq, -1));
62683 dissector_add_uint("wlan.tag.number", TAG_MESH_PREP131, create_dissector_handle(ieee80211_tag_mesh_prep, -1));
62684 dissector_add_uint("wlan.tag.number", TAG_MESH_PERR132, create_dissector_handle(ieee80211_tag_mesh_perr, -1));
62685 dissector_add_uint("wlan.tag.number", TAG_PXU137, create_dissector_handle(ieee80211_tag_pxu, -1));
62686 dissector_add_uint("wlan.tag.number", TAG_PXUC138, create_dissector_handle(ieee80211_tag_pxuc, -1));
62687 dissector_add_uint("wlan.tag.number", TAG_MIC140, create_dissector_handle(ieee80211_tag_mic, -1));
62688 dissector_add_uint("wlan.tag.number", TAG_RANN126, create_dissector_handle(ieee80211_tag_rann, -1));
62689 dissector_add_uint("wlan.tag.number", TAG_MESH_CHANNEL_SWITCH118, create_dissector_handle(ieee80211_tag_mesh_channel_switch, -1));
62690 dissector_add_uint("wlan.tag.number", TAG_INTERWORKING107, create_dissector_handle(dissect_interworking, -1));
62691 dissector_add_uint("wlan.tag.number", TAG_ADVERTISEMENT_PROTOCOL108, create_dissector_handle(dissect_advertisement_protocol, -1));
62692 dissector_add_uint("wlan.tag.number", TAG_QOS_MAP_SET110, create_dissector_handle(dissect_qos_map_set, -1));
62693 dissector_add_uint("wlan.tag.number", TAG_ROAMING_CONSORTIUM111, create_dissector_handle(dissect_roaming_consortium, -1));
62694 dissector_add_uint("wlan.tag.number", TAG_AP_CHANNEL_REPORT51, create_dissector_handle(dissect_ap_channel_report, -1));
62695 dissector_add_uint("wlan.tag.number", TAG_NEIGHBOR_REPORT52, create_dissector_handle(dissect_neighbor_report, -1));
62696 dissector_add_uint("wlan.tag.number", TAG_MESH_AWAKE_WINDOW119, create_dissector_handle(ieee80211_tag_mesh_awake_window, -1));
62697 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60, create_dissector_handle(ieee80211_tag_channel_switch_announcement, -1));
62698 dissector_add_uint("wlan.tag.number", TAG_SUPPORTED_OPERATING_CLASSES59, create_dissector_handle(ieee80211_tag_supported_operating_classes, -1));
62699 dissector_add_uint("wlan.tag.number", TAG_RELAY_CAPABILITIES167, create_dissector_handle(add_tag_relay_capabilities, -1));
62700 dissector_add_uint("wlan.tag.number", TAG_DMG_BSS_PARAMETER_CHANGE152, create_dissector_handle(ieee80211_tag_bss_parameter_change, -1));
62701 dissector_add_uint("wlan.tag.number", TAG_DMG_CAPABILITIES148, create_dissector_handle(ieee80211_tag_dmg_capabilities, -1));
62702 dissector_add_uint("wlan.tag.number", TAG_DMG_OPERATION151, create_dissector_handle(ieee80211_tag_dmg_operation, -1));
62703 dissector_add_uint("wlan.tag.number", TAG_ANTENNA_SECTOR_ID190, create_dissector_handle(ieee80211_tag_antenna_section_id, -1));
62704 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_SCHEDULE144, create_dissector_handle(ieee80211_tag_extended_schedule, -1));
62705 dissector_add_uint("wlan.tag.number", TAG_STA_AVAILABILITY145, create_dissector_handle(ieee80211_tag_sta_availability, -1));
62706 dissector_add_uint("wlan.tag.number", TAG_NEXT_DMG_ATI147, create_dissector_handle(ieee80211_tag_next_dmg_ati, -1));
62707 dissector_add_uint("wlan.tag.number", TAG_NEXTPCP_LIST160, create_dissector_handle(ieee80211_tag_nextpcp_list, -1));
62708 dissector_add_uint("wlan.tag.number", TAG_PCP_HANDOVER161, create_dissector_handle(ieee80211_tag_pcp_handover, -1));
62709 dissector_add_uint("wlan.tag.number", TAG_BEAMLINK_MAINTENANCE169, create_dissector_handle(ieee80211_tag_beamlink_maintenance, -1));
62710 dissector_add_uint("wlan.tag.number", TAG_QUIET_PERIOD_RES177, create_dissector_handle(ieee80211_tag_quiet_period_res, -1));
62711 dissector_add_uint("wlan.tag.number", TAG_INTRA_ACCESS_CAT_PRIO184, create_dissector_handle(ieee80211_tag_intra_access_cat_prio, -1));
62712 dissector_add_uint("wlan.tag.number", TAG_SCS_DESCRIPTOR185, create_dissector_handle(ieee80211_tag_scs_descriptor, -1));
62713 dissector_add_uint("wlan.tag.number", TAG_RELAY_TRANSFER_PARAM168, create_dissector_handle(ieee80211_tag_relay_transfer_param, -1));
62714 dissector_add_uint("wlan.tag.number", TAG_DMG_BEAM_REFINEMENT153, create_dissector_handle(ieee80211_tag_dmg_beam_refinement, -1));
62715 dissector_add_uint("wlan.tag.number", TAG_WAKEUP_SCHEDULE_AD143, create_dissector_handle(ieee80211_tag_wakeup_schedule_ad, -1));
62716 dissector_add_uint("wlan.tag.number", TAG_DMG_TSPEC146, create_dissector_handle(ieee80211_tag_dmg_tspec, -1));
62717 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_MEASURMENT_FB154, create_dissector_handle(ieee80211_tag_channel_measurement_fb, -1));
62718 dissector_add_uint("wlan.tag.number", TAG_AWAKE_WINDOW157, create_dissector_handle(ieee80211_tag_awake_window, -1));
62719 dissector_add_uint("wlan.tag.number", TAG_ADDBA_EXT159, create_dissector_handle(ieee80211_tag_addba_ext, -1));
62720 dissector_add_uint("wlan.tag.number", TAG_MULTI_BAND158, create_dissector_handle(ieee80211_tag_multi_band, -1));
62721 dissector_add_uint("wlan.tag.number", TAG_DMG_LINK_MARGIN162, create_dissector_handle(ieee80211_tag_dmg_link_margin, -1));
62722 dissector_add_uint("wlan.tag.number", TAG_DMG_LINK_ADAPTION_ACK172, create_dissector_handle(ieee80211_tag_dmg_link_adaption_ack, -1));
62723 dissector_add_uint("wlan.tag.number", TAG_FILS_INDICATION240, create_dissector_handle(ieee80211_tag_fils_indication, -1));
62724 dissector_add_uint("wlan.tag.number", TAG_SWITCHING_STREAM163, create_dissector_handle(ieee80211_tag_switching_stream, -1));
62725 dissector_add_uint("wlan.tag.number", TAG_ELEMENT_ID_EXTENSION255, create_dissector_handle(ieee80211_tag_element_id_extension, -1));
62726 dissector_add_uint("wlan.tag.number", TAG_TWT216, create_dissector_handle(ieee80211_tag_twt, -1));
62727 dissector_add_uint("wlan.tag.number", TAG_RSNX244, create_dissector_handle(ieee80211_tag_rsnx, -1));
62728 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_USAGE97, create_dissector_handle(ieee80211_tag_channel_usage, -1));
62729 dissector_add_uint("wlan.tag.number", TAG_DMS_REQUEST99, create_dissector_handle(ieee80211_tag_dms_request, -1));
62730 dissector_add_uint("wlan.tag.number", TAG_DMS_RESPONSE100, create_dissector_handle(ieee80211_tag_dms_response, -1));
62731
62732 /* Vendor specific actions */
62733 dissector_add_uint("wlan.action.vendor_specific", OUI_MARVELL0x005043, create_dissector_handle(dissect_vendor_action_marvell, -1));
62734 dissector_add_uint("wlan.action.vendor_specific", OUI_WFA0x506F9A, create_dissector_handle(dissect_vendor_action_wifi_alliance, -1));
62735
62736 /* Protected action WFA ... */
62737 dissector_add_uint("wlan.action.wifi_alliance.subtype", WFA_SUBTYPE_ACTION_QOS_MGMT0x1A, create_dissector_handle(dissect_vendor_action_wfa_qos_mgmt, -1));
62738
62739 dissector_add_uint("wlan.anqp.vendor_specific", OUI_WFA0x506F9A, create_dissector_handle(dissect_vendor_wifi_alliance_anqp, -1));
62740 dissector_add_uint("wlan.anqp.wifi_alliance.subtype", WFA_ANQP_SUBTYPE_HS2017, create_dissector_handle(dissect_hs20_anqp, -1));
62741 dissector_add_uint("wlan.anqp.wifi_alliance.subtype", WFA_ANQP_SUBTYPE_MBO18, create_dissector_handle(dissect_mbo_anqp, -1));
62742 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_SUBSCRIPTION_REMEDIATION0, create_dissector_handle(dissect_hs20_subscription_remediation, -1));
62743 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_DEAUTHENTICATION_IMMINENT1, create_dissector_handle(dissect_hs20_deauthentication_imminent, -1));
62744 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_HS20_INDICATION16, create_dissector_handle(dissect_hs20_indication, -1));
62745 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_OSEN20, create_dissector_handle(dissect_hs20_osen, -1));
62746 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_OWE_TRANSITION_MODE28, create_dissector_handle(dissect_owe_transition_mode, -1));
62747 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_TRANSITION_DISABLE_KDE32, create_dissector_handle(dissect_transition_disable_kde, -1));
62748 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_WIFI_60G23, create_dissector_handle(dissect_wfa_60g_ie, -1));
62749 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_MBO_OCE22, create_dissector_handle(dissect_mbo_oce, -1));
62750 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_WNM_SUBTYPE_NON_PREF_CHAN_REPORT2, create_dissector_handle(dissect_wfa_wnm_non_pref_chan, -1));
62751 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_WNM_SUBTYPE_CELL_DATA_CAPABILITIES3, create_dissector_handle(dissect_wfa_wnm_cell_cap, -1));
62752 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_QOS_MGMT34, create_dissector_handle(dissect_qos_mgmt, -1));
62753 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE41, create_dissector_handle(dissect_wfa_rsn_override, -1));
62754 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE_242, create_dissector_handle(dissect_wfa_rsn_override_2, -1));
62755 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSNX_OVERRIDE43, create_dissector_handle(dissect_wfa_rsnx_override, -1));
62756 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_SELECTION44, create_dissector_handle(dissect_wfa_rsn_selection, -1));
62757 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE_LINK_KDE45, create_dissector_handle(dissect_wfa_rsn_override_link_kde, -1));
62758}
62759
62760/*
62761 * Editor modelines
62762 *
62763 * Local Variables:
62764 * c-basic-offset: 2
62765 * tab-width: 8
62766 * indent-tabs-mode: nil
62767 * End:
62768 *
62769 * ex: set shiftwidth=2 tabstop=8 expandtab:
62770 * :indentSize=2:tabSize=8:noTabs=true:
62771 */